Cross-validation交叉验证(使用 train/test split 进行模型评估的缺点 & LOOCV)

K折交叉验证

 

使用 train/test split 进行模型评估的缺点

①最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法

②该方法只用了部分数据进行模型的训练

 

 

为了消除这一变化因素,我们可以创建一系列训练集/测试集,计算模型在每个测试集上的准确率,然后计算平均值。

这就是 K-fold cross-validation 的本质

 

LOOCV

      首先,我们先介绍LOOCV方法,即(Leave-one-out cross-validation)。像Test set approach一样,LOOCV方法也包含将数据集分为训练集和测试集这一步骤。但是不同的是,我们现在只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。

Cross-validation交叉验证(使用 train/test split 进行模型评估的缺点 & LOOCV)

      如图所示,假设我们现在有n个数据组成的数据集,那么LOOCV的方法就是每次取出一个数据作为测试集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。结果就是我们最终训练了n个模型,每次都能得到一个MSE。而计算最终test MSE则就是将这n个MSE取平均。

     但是LOOCV的缺点也很明显,那就是计算量过于大,是train/test split耗时的n-1倍。

 

所以提出了一种折中的方法

K-fold Cross Validation

      K折交叉验证,和LOOCV的不同在于,我们每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:

1.将所有数据集分成5份

2.不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的MSE

3.将5次的MSE取平均得到最后的MSE

Cross-validation交叉验证(使用 train/test split 进行模型评估的缺点 & LOOCV)

 

不难理解,其实LOOCV是一种特殊的K-fold Cross Validation(K=N)。

 

 

Cross-validation交叉验证(使用 train/test split 进行模型评估的缺点 & LOOCV)

      每一幅图种蓝色表示的真实的test MSE,而黑色虚线和橙线则分贝表示的是LOOCV方法和10-fold CV方法得到的test MSE。我们可以看到事实上LOOCV和10-fold CV对test MSE的估计是很相似的,但是相比LOOCV,10-fold CV的计算成本却小了很多,耗时更少。