一、K 折交叉验证的基本概念
K 折交叉验证是一种用于评估机器学习模型性能的统计方法,旨在通过多次训练和测试模型来减少数据集划分的随机性对模型评估的影响。它的核心思想是将数据集分成 K 个子集(折),然后使用其中 K-1 个子集进行训练,剩余 1 个子集进行测试,重复 K 次,最终综合所有测试结果来评估模型的性能。
为什么需要交叉验证?
在机器学习中,模型的性能评估通常需要将数据集分为训练集和测试集。然而,单一的训练-测试划分可能会导致以下问题:
- 数据集划分的随机性:不同的划分可能导致性能评估结果波动较大。
- 数据量不足:如果数据集较小,单独留出测试集可能导致训练数据不足,影响模型学习。
- 过拟合或欠拟合的误判:单一划分可能无法全面反映模型的泛化能力。
交叉验证通过多次划分数据集,最大化利用数据,并提供更稳定的性能评估结果。
二、K 折交叉验证的工作原理
K 折交叉验证的具体步骤如下:
-
划分数据集:
- 将整个数据集随机分成 K 个大小相等(或近似相等)的子集(称为“折”)。
- 通常,K 的值取 5 或 10,但可以根据数据集大小和计算资源调整。
-
循环训练和测试:
- 进行 K 次迭代:
- 在第 i 次迭代中,选择第 i 个子集作为测试集,其余 K-1 个子集作为训练集。
- 使用训练集训练模型,并在测试集上评估模型性能(例如计算准确率、均方误差等指标)。
- 每次迭代都会产生一个性能指标。
- 进行 K 次迭代:
-
汇总结果:
- 将 K 次迭代的性能指标(例如准确率、F1 分数等)取平均值,作为模型的最终性能评估结果。
- 还可以计算标准差,以评估模型性能的稳定性。
数学表达
假设数据集有 N N N 个样本,分为 K K K 折,每折大小约为 N / K N/K N/K。对于每次迭代 i i i( i = 1 , 2 , … , K i = 1, 2, \dots, K i=1,2,…,K):
- 训练集:除第 i i i 折外的所有数据(大小约为 ( K − 1 ) N / K (K-1)N/K (K−1)N/K)。
- 测试集:第 i i