07 k-fold Cross Validation 中的 k 应该如何选择?
2026/9/9 1:28:26 网站建设 项目流程

07 k-fold Cross Validation 中的 k 应该如何选择?

在 k-fold Cross Validation 中,需要选择:

k

常见取值包括:

5 10

也有人使用:

3 20 甚至 N

那么:

k 越大是不是越好?

答案是否定的。

k 的选择本质上是在:

计算成本 评估方差 训练集大小 验证集大小

之间做平衡。


一、k 决定了什么?

假设总共有:

N

个样本。

k-fold 中,每次 Validation Fold 大约包含:

Nk\frac{N}{k}kN

个样本。

Training Fold 大约包含:

N×k−1kN\times\frac{k-1}{k}N×kk1

个样本。

例如:

N = 1000 k = 5

则每轮大约:

Training = 800 Validation = 200

如果:

k = 10

则:

Training = 900 Validation = 100

二、k 越大,训练集越接近完整数据

当 k 增大时:

每轮 Training Data 更多

例如:

5-fold → 80% Train 10-fold → 90% Train 20-fold → 95% Train

因此模型每次训练时看到的数据越来越多。

这可能减少由于训练样本不足造成的偏差。


三、但是 k 越大,计算成本越高

如果:

k = 5

模型训练:

5 次

如果:

k = 10

模型训练:

10 次

如果还需要进行:

100 组超参数组合

那么:

5-fold → 500 次训练 10-fold → 1000 次训练

计算成本会迅速增长。


四、为什么 5 和 10 最常见?

因为它们通常能够在下面几个因素之间取得较好平衡:

计算成本 训练数据比例 验证结果稳定性

因此实践中经常使用:

5-fold 10-fold

一个非常实用的默认选择是:

5-fold

如果数据量不大,并且计算资源允许:

10-fold

也很常见。


五、什么时候使用较小的 k?

例如:

k = 3 k = 5

适合:

数据量比较大 模型训练成本高 需要大量超参数搜索

此时减少 k 可以显著降低计算量。

例如深度模型或者大型集成模型,如果每次训练都很昂贵:

5-fold

往往比 10-fold 更实际。


六、什么时候可以使用较大的 k?

例如:

k = 10 k = 20

适合:

数据集比较小 单次训练成本低 希望充分利用训练数据

但是 Validation Fold 会变小。

因此单个 Fold 的评估结果可能更加容易受到个别样本影响。


七、Leave-One-Out Cross Validation

k 最大的极端情况是:

k = N

也就是:

Leave-One-Out Cross Validation LOOCV

每次:

N - 1 个样本训练 1 个样本验证

例如:

100 个样本 → 训练 100 次

每一次只留下 1 个样本进行验证。


八、LOOCV 的优点

LOOCV 每次几乎使用:

全部数据训练

因此训练集非常接近完整数据集。

在特别小的数据集中,这看起来很有吸引力。


九、LOOCV 的问题

但是它有几个明显问题:

训练次数非常多 计算成本高 单次 Validation 只有一个样本 不同 Fold 之间高度相似

因此它并不一定比:

5-fold 10-fold

更实用。


十、k 的选择与 Bias-Variance

可以从 Bias 和 Variance 理解。

较小 k:

Training Set 较小 Validation Set 较大

可能导致:

评估偏差更大 但单个 Validation Fold 更稳定

较大 k:

Training Set 更大 Validation Set 更小

可能减小训练集规模带来的偏差,但不同 Fold 的结果可能更加敏感。

因此并不存在:

k 越大越好

这样的规则。


十一、类别不平衡时不要只考虑 k

假设:

Positive = 20 Negative = 980

如果:

k = 20

平均每个 Fold 只有:

约 1 个 Positive

这会导致某些 Fold 的分类指标非常不稳定。

因此类别不平衡时需要考虑:

每个 Fold 中至少有多少正样本

这时:

Stratified k-fold

往往比单纯增加 k 更重要。


十二、分组数据需要 Group-wise Cross Validation

如果同一个人、设备、患者或工厂批次产生多个样本,那么不能让:

同一个实体的数据 同时出现在 Train 和 Validation

否则模型可能只是记住实体特征。

例如:

Patient 001 的数据 一部分在 Train 一部分在 Validation

评估结果会过于乐观。

应该按:

Patient Device User Batch Site

进行分组划分。


十三、时间数据不能随机打乱

如果数据具有时间顺序:

2019 2020 2021 2022 2023

普通 k-fold 可能导致未来信息泄漏。

应该采用:

Train → Past Validation → Future

例如:

Round 1: Train 2019 Validate 2020 Round 2: Train 2019-2020 Validate 2021 Round 3: Train 2019-2021 Validate 2022

这类方法比选择 5-fold 还是 10-fold 更重要。


十四、一个实用选择规则

可以使用下面的经验流程。

如果:

数据量较大 模型训练较慢

优先:

5-fold

如果:

数据量中等或偏小 模型训练成本可以接受

可以:

10-fold

如果:

数据非常小

可以评估:

10-fold Repeated k-fold LOOCV

但应该同时关注结果波动。


十五、Repeated k-fold

如果担心一次 k-fold 的随机划分仍然具有偶然性,可以多次重复。

例如:

5-fold 重复 10 次

相当于得到:

50 个验证结果

然后计算:

Mean Standard Deviation Confidence Interval

这可以更加全面地观察模型稳定性,但计算成本也更高。


十六、Nested Cross Validation

如果需要非常严格地估计:

模型选择 + 超参数搜索

造成的偏差,可以使用:

Nested Cross Validation 嵌套交叉验证

结构为:

Outer CV → 估计泛化性能 Inner CV → 选择模型和超参数

这是研究和严格模型比较中非常重要的方法。


十七、最终建议

在绝大多数普通机器学习任务中,可以从:

5-fold

开始。

如果:

样本量不大 训练速度可以接受

再考虑:

10-fold

真正需要优先考虑的不是:

5 还是 10

而是:

有没有 Data Leakage? 类别比例是否合理? 同一实体有没有跨 Fold? 时间顺序有没有被破坏? 评价指标是否符合任务目标?

这些问题通常比 k 本身更加重要。


十八、总结

k-fold 中的 k 是一个工程折中参数。

常见默认:

k = 5

常见增强:

k = 10

但是最终选择必须结合:

数据量 训练成本 类别不平衡程度 分组结构 时间结构 模型稳定性

进行判断。

因此:

好的 Cross Validation 设计,不只是选择一个 k,而是让验证过程尽可能模拟模型未来真正面对的数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询