机器学习之K折交叉验证

发布于:2025-09-12 ⋅ 阅读:(20) ⋅ 点赞:(0)

为了更好的评估机器学习训练出模型的泛化能力,即避免模型在训练集上表现良好,但在未见过的数据上表现不佳(即过拟合),同时也减少了单一训练/测试集划分带来的随机性影响。

一、什么是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值越大(例如,留一法交叉验证 LOOCVK=NN是样本总数):

每次训练集包含的样本越多,越接近原始数据集,模型评估的偏差越小。

但需要训练N次模型,计算成本非常高。

测试集只包含一个样本,评估结果的方差可能很大(不稳定)。

K值越小(例如,2折交叉验证):

训练次数少,计算速度快。

但每次训练集包含的样本较少,模型可能训练不足,评估结果的偏差可能较大。

5折交叉验证 提供了一个很好的平衡:它既不会像LOOCV那样计算成本过高,又能比简单的训练/测试划分或小K值交叉验证提供更稳定和可靠的性能估计。


网站公告

今日签到

点亮在社区的每一天
去签到