1.交叉验证的分类
- 保留交叉验证:也称简单交叉验证。随机将样本集分为训练集和验证集,比例通常是8:2,或者7:3,在训练集上训练得到模型,在验证集上对模型进行评估。上面步骤可以重复多次,最后选出一个误差最小的模型。
- K折交叉验证:将样本集分成k份,每次取(k-1)份用来训练模型,用剩余的一份用来验证模型。该步骤同样可以重复多次,最后选出损失函数评估最优的模型或者参数。
- 留一交叉验证:这种方法是K折交叉验证的特例,假设样本集的个数是N,此时令k=N,即一份等于一个样本,每次取(N-1)个样本用来训练模型,用剩余的一个样本用来验证模型,最后选出损失函数或者在某些指标下评估最好的模型。
本文主要针对k折交叉验证进行详细阐述,下文交叉验证均指k折交叉验证。
2.交叉验证的目的:
交叉验证的目的有两个,参数选择和模型评估。
3.交叉验证的详细流程:
参数选择:假设有一个模型M(比如是线性模型神经网络等,总之是一个我们已经确定的要使用的模型),其中有一个超参数是,我们想测试的最优取值,假设可以取 这三个值。
这里为什么要取平均?
当数据集不是很大时,不同的划分,训练得到的“模型”差异可能比较大。因此,取K折交叉验证,保证数据集中的每个样本都能有一次被当做测试集,这样选出平均值最高的模型更有可靠性。
这里的“模型”是指什么?
首先,正确的模型应该理解为最开始假设的模型M,其次,在使用不同的划分得到的模型1到5,准确来说不能称为模型,应该称为模型的某个实例。当我们说模型时,他指的是一种特定的方法,通常不会将该方法的特定实例称为模型。比如,现在有一个线性回归模型,但我们不会将在两组不同的训练出的系数称为两个线性回归模型。
模型评估:使用k折交叉验证可以从多个候选模型中(比如有线性回归、神经网络、K紧邻、支持向量机),选择出最佳模型。假设依然使用5折交叉验证,做法和上面参数选择很像,可以理解为将替换为4个模型中的任意一个,最后选择出平均值最高的,即模型评估效果最好的作为选择的模型,假设最后神经网络中的平均值最低。
使用神经网络模型在所有训练集上重新训练得到的结果是我们真正要用的模型。
说明:
1.交叉验证训练得到的所有模型都不用来做最终的预测模型,最终预测模型是使用交叉验证选择出的所有超参数组合在所有训练集上训练得出的。
2.交叉验证的主要出发点是模型检查,而不是模型构建。
参考:
2.machine learning - Which model to pick from K fold Cross Validation - Stack Overflow