本页讲解 交叉验证(cross-validation,CV)——在数据有限时更可靠地估计泛化性能并选超参。
段末注释:k 折交叉验证(k-fold cross-validation)将数据分为 $k$ 份,轮流以一份作验证、其余作训练,对 $k$ 次验证分数求平均。
系列入口:00.系列规划 | 前置:01 总论、Math-01/20 多重比较
1. k-fold 流程(D2–D3)

$$
\text{CV score} = \frac{1}{k}\sum_{i=1}^k L^{(i)}_{\mathrm{val}}
$$
方差:$k$ 越大,CV 估计越稳,但训练次数增。
| $k$ | 特点 |
|---|---|
| 5 | 常用默认 |
| 10 | 更稳,更慢 |
| LOOCV ($k=n$) | 无偏但高方差、代价大 |
2. 变体(D3–D7)

| 方法 | 适用 |
|---|---|
| StratifiedKFold | 分类,保持各类比例 |
| GroupKFold | 同组样本不跨 train/val(患者、细胞系、实验批次) |
| TimeSeriesSplit | 时序,训练只含过去 |
| Nested CV | 外层估性能,内层调参,防泄漏 |
3. 跨领域例子(D7)

| 领域 | 划分要点 | 若随机划分的问题 |
|---|---|---|
| 医学诊断 | 按患者 GroupKFold | 同一患者 CT 同时出现在 train/val |
| 单细胞 RNA-seq | 按供体/批次分组 | 批次效应被模型「记忆」 |
| 酶突变筛选 | 按亲本序列或实验日分组 | 近邻突变泄漏到验证 |
| 股票预测 | 时间前滚 | 未来信息泄漏 |
| 多中心临床 | 留一中心作 val | 评估跨中心泛化 |
| 小样本分类 | LOOCV 或 $k=5$ + 重复 | 方差大,报置信区间 |
4. CV 与显著性(D6)
比较两模型 CV 分数差:$k$ 折分数非独立 → 用 paired t 检验 或 5×2 CV(Math-01/02 t检验)。多次模型比较需 Math-01/20 FDR。
5. 泄漏防范(D8)

| 泄漏源 | 正确做法 |
|---|---|
| 全数据 fit 标准化 | 每 fold 只在 train fit scaler |
| 特征选择看全数据 | 选择放在 train fold 内 |
| 重复样本 | 去重或 GroupKFold |
| 调参后再用同 CV 报性能 | Nested CV |
6. sklearn 示例(D12)
1 | from sklearn.model_selection import cross_val_score, StratifiedKFold |
7. 小结
CV 是小数据 ML 的标配;分组与时序划分比盲目 k-fold 更科学。下一篇:07 集成。