为了更好的评估机器学习训练出模型的泛化能力,即避免模型在训练集上表现良好,但在未见过的数据上表现不佳(即过拟合),同时也减少了单一训练/测试集划分带来的随机性影响。
一、什么是K折交叉验证?
1、将数据集划分成K个子集(折/Fold): 原始数据集被随机且均匀地分成K个大小近似相等的互斥子集。
2、进行K次训练和评估:
在每次迭代中,选择其中一个子集作为测试集(Validation Set)。
将其余的 K-1 个子集合并起来作为训练集(Training Set)。
用训练集训练模型。
用测试集评估模型的性能(例如,计算准确率、F1分数、均方误差等)。
3、计算平均性能: 重复上述过程K次,每次都选择不同的子集作为测试集。这样会得到K个性能评估结果。最终,将这K个结果取平均值,作为模型性能的最终估计。
二、常见案例
五重交叉验证,K=5 。
具体步骤如下:
1、数据划分: 将原始数据集随机分成 5个大小近似相等 的互不重叠的子集(或称为“折”)。我们称它们为 Fold 1, Fold 2, Fold 3, Fold 4, Fold 5。
2、迭代训练与评估(共进行5次):
第一次迭代:
将 Fold 1 作为测试集。
将 Fold 2, Fold 3, Fold 4, Fold 5 合并作为训练集。
用训练集训练模型,并在测试集(Fold 1)上评估模型性能,得到性能指标 P1。
第二次迭代:
将 Fold 2 作为测试集。
将 Fold 1, Fold 3, Fold 4, Fold 5 合并作为训练集。
用训练集训练模型,并在测试集(Fold 2)上评估模型性能,得到性能指标 P2。
第三次迭代:
将 Fold 3 作为测试集。
将 Fold 1, Fold 2, Fold 4, Fold 5 合并作为训练集。
用训练集训练模型,并在测试集(Fold 3)上评估模型性能,得到性能指标 P3。
第四次迭代:
将 Fold 4 作为测试集。
将 Fold 1, Fold 2, Fold 3, Fold 5 合并作为训练集。
用训练集训练模型,并在测试集(Fold 4)上评估模型性能,得到性能指标 P4。
第五次迭代:
将 Fold 5 作为测试集。
将 Fold 1, Fold 2, Fold 3, Fold 4 合并作为训练集。
用训练集训练模型,并在测试集(Fold 5)上评估模型性能,得到性能指标 P5。
3、最终性能估计: 将这5次得到的性能指标 P1, P2, P3, P4, P5 取平均值,即 (P1 + P2 + P3 + P4 + P5) / 5。这个平均值就是模型在未见过数据上的性能的最终估计。
三、K的选择
5折和10折交叉验证是实践中最常用的两种K值。
K值越大(例如,留一法交叉验证 LOOCV,K=N,N是样本总数):
每次训练集包含的样本越多,越接近原始数据集,模型评估的偏差越小。
但需要训练N次模型,计算成本非常高。
测试集只包含一个样本,评估结果的方差可能很大(不稳定)。
K值越小(例如,2折交叉验证):
训练次数少,计算速度快。
但每次训练集包含的样本较少,模型可能训练不足,评估结果的偏差可能较大。
5折交叉验证 提供了一个很好的平衡:它既不会像LOOCV那样计算成本过高,又能比简单的训练/测试划分或小K值交叉验证提供更稳定和可靠的性能估计。