普通验证方法:将原始数据分为训练集和测试集两部分,利用训练集训练分类器,然后利用测试集验证模型,记录分类准确率为分类器的性能指标。没有真正做到交叉验证,这样做得到的准确率高低与原始数据的划分有很大关系。
2折交叉验证(2-fold Cross Validation)
将数据集分为两个大小相等的子集,分别作为训练集和测试集进行分类器的训练。这样做训练样本相对整体数据集过小,不足以代表整个样本集。
K折交叉验证(k-fold Cross Validation)
将原始数据分为k组,将其中一个子集数据分别做为测试集,其余k-1组子集数据作为训练集,这样会得到k个模型,用这k个模型最终的测试集的分类准确率的平均数作为此K-CV下分类器的性能指标。可以有效的避免过拟合与欠拟合的发生。通常情况,k取5或10。
k越大,训练集的数据越多,模型bias越小,但k越大意味着每一次选取的训练集之前的相关性越大,这种相关性会导致最终的测试误差具有更大的方差。
一种极端情况——当k为样本集的数量n时,即代表将数据集分为n份,每次取出一个数据作为测试集的唯一元素,其他n-1个数据都作为训练集用于训练模型和调参。结果就是训练n个模型,每次都能得到一个MSE。取其平均就是最终的test MSE。
这就是LOOCV(Leave-one-out Cross Validation),它不受训练集测试集划分方法的影响,由于几乎用到了所有的数据,保证了模型的bias更小,缺点就是计算量太大