StatQuest学习笔记22——交叉验证

前言——主要内容

这篇笔记是StatQuest系列视频的第57节,主要内容是交叉验证。

选择哪些方法

我们先看一个简单的数据,如下所示:

我们要使用下面左侧的这些变量来预测右侧的心脏病,如下所示:

当我们遇到一个新的病人时,检测这些指标(左侧)来预测是否得了心脏病(右侧),如下所示:

此时,我们就面临一个问题,使用哪种方法来预测这个病人是否得有心脏病?如下所示:

是采用逻辑回归,还是KNN(K邻近算法),支持向量机(SVM)等等,如下所示:

交叉验证

此时就需要进行交叉验证(cross validation),用于比较不同的机器学习方法,然后在实际中运用,如下所示:

我们看下面的蓝色柱子,它代表了我们收集到的,没有心脏病患者的数据,如下所示:

对于这个数据,我们需要做2件事情,如下所示:

第一,估计机器学习方法的参数。例如对于逻辑回归来说,我们需要使用一些数据来估计这个曲线的形状,如下所示:

用机器学习的术语来说,用于估计参数的过程叫做“训练算法”(training the algorithm),如下所示:

第二件事情就是,我们要评估一下所选的这个方法工作起来到底行不行。也就是说,我们需要评估一下,找出的这条曲线能否对新的数据进行很好地归类,如下所示:

用机器学习的术语来讲,评估一个方法的好坏叫做“检验算法”(testing the algorithm),如下所示:

综上所述,我们对于选定的方法,需要做两件事情,第一,训练机器学习方法;第二,检验机器学习方法,如下所示:

比较麻烦的一点就是如果使用所有的数据来估计参数(例如训练算法),那么就没有余下的数据来测试这个算法的好坏,如下所示:

如果重新使用相同的数据用于训练,也用于检验,也不合适,因为我们要测试算法所使用的数据不能是训练数据,简单来说,就是不能同一批数据既用于训练,也用于检验,这样你无法判断这个算法是好是坏,如下所示:

一种比较好的思路就是,对于同一批数据,使用这批数据的75%用于训练,如下所示:

剩下的25%用于检验,如下所示:

然后我们就能通过查看测试数据中的归类情况来比较算法的好坏,如下所示:

交叉验证原理

但是,我们是怎么知道把数据分为前75%和后25%是一种最好的方法呢,如下所示:

为什么不使用前25%的数据用于检验算法,或者是使用中间25%的数据来检验算法,如下所示:

对此,不用多虑,因为无论选择哪一部分数据,交叉验证都会使用到这些数据,最终会把结果汇总出来,如下所示:

例如,交叉验证在开始的时候,使用前75%的数据来训练算法,如下所示:

用剩下的25%数据来检验算法,如下所示:

然后我们看一下这个算法对于测试数据的归类情况,如下所示:

然后,我们再看一下,使用其他的75%数据来训练算法,如下所示:

使用中间偏下的那25%数据用于检验,如下所示:

记录一下测试的结果,4个正确,2个错误,如下所示:

就像上面的过程一样,不断地采用各种75%的数据来训练,25%的数据来检验,同时记录下每次检验的结果,等等,如下所示:

最终,每一部分数据都用于了检验,然后我们就可以比较不同的算法检验的结果,如下所示:

从上面的结果来,SVM这个算法最好,因为它的正确率最高,如下所示:

我们需要注意的是,在这个案例中,我们把数据分成了4份,这种方法称为四重交叉验证(Four-Fold Cross Validation),不过个数字不一定是4,也可以是其他的,如下所示:

我们看一个比较极端的案例,在这个案例中,我们把每一个数据都当成一份,这种方法称为留一法交叉验证(Leave One Out Cross Validation),如下所示:

但在实际计算过程中,把数据分成10份也是常见的方法,这种方法称为十重交叉验证(Ten-Fold Cross Validation),如下所示:

调整参数不是估计值,是某种猜测值,当我们要使用某个涉及一个“调整参数”(tuning parameter)的方法时,例如岭回归(ridge regression)就有一个调整参数,如下所示:

此时,我们就可以使用十重交叉验证来找到这个最佳的调整参数,如下所示: