交叉验证
在机器学习中,通常我们不能把全部数据集用于训练模型,以为这样就没有数据集来验证模型,从而评估模型的预测效果。为了应对这一问题,常用的方法如下:
1. The Validation Set Approach
最简单的就是把数据集划分为两部分,训练集(training set, 训练模型)和测试集(test set,验证模型)。但是这样做存在两个弊端:
(1)最终模型和参数的选取将极大的依赖于你对训练集和测试集的划分方法。
在不同的划分方法下,test set MSE的变动很大,并且对应的degree也不一样,因此如果我们训练集和测试集的划分方法不够好,就很可能无法选择到好的模型和参数。
(2)只使用了部分数据进行模型训练
当用于模型训练的数据量越大,训练出来的模型效果通过越好。因此,训练集和测试集的划分意味着我们无法充分利用手头上现有的数据,所以得到的模型效果也会受到一定的影响。
基于这种方法的弊端,就产生了Cross-Validation,即交叉验证。
2.Cross-Validation
2.1 Leave-one-out Cross-Validation(LOOCV,留一法)
该方法是只将数据集中的一个数据作为测试集,剩下的全作为训练集,并将此步骤重复N次(N是数据集的数据量)。
假设有n个数据构成的数据集,LOOCV方法就是每次取出一个数据作为测试集的唯一元素,而其他n-1个数据都作为训练集用于模型训练和调参。结果就是我们最终训练了n个模型,每次都能得到一个mse,而最终MSE就是将这个n个MSE取平均。
- 优点:不受训练集和测试集划分方法的影响;几乎用到全部数据训练模型,保证了模型的
bias
更小。 - 缺点:计算量过大,耗时久。
2.2 K-fold Cross-Validation
另一种折中的方法是k折交叉验证,和留一法不同在于,每次的测试集不再只包含一个数据,而是多个,具体数据根据K的取值决定。具体步骤就是,将数据集分成k份,不重复的取其中一份作为测试集,用剩余的四份作为训练集训练模型和调参,计算模型的测试集上的MSE,将k次的MSE取平均作为最终的MSE.
- 优点:相比于留一法,k折交叉验证的计算成本减少很多,耗时也更少。
2.3 Cross-Variance Trade-Off for k-fold Cross-Validation
k的选取是一个bias和variance的trade-off。
k越大,每次模型训练使用的数据越多,模型的bias越小,但是k越大又意味着每次选取的训练集之间的相关性越大,而这种相关性或导致最终的test error具有更大的Variance。
k值一般选择5或10。
交叉验证:一般用于数据集较小的时候,充分利用有限的数据找到合适的模型参数,防止过拟合。