Ch.09
交叉验证:模拟考与正式考试
为防止模型变成只背练过题的「井底之蛙」,必须做交叉验证。就像考生用模拟考检查真实水平、用正式考试一锤定音一样,机器学习模型也不能只靠训练数据打分,而要用验证和测试这些「陌生题目」来评估。本章学习将数据划分后验证模型真实水平的交叉验证(留出法、K折等)以及如何提高结果可信度。
按章节的机器学习图示
选择章节后,下方图示会切换为该章节内容。可一览机器学习脉络。
将数据分为训练/验证/测试,K折中轮流验证并用平均分数估计性能。
交叉验证:模拟考(验证)估实力,正式考(测试)做最终确认。
交叉验证:模拟考与正式考试
交叉验证是什么?「不用做过的题来打分」 — 如果数学考试出的全是练习册里做过的题,我们无法知道学生是懂了原理还是过拟合地背答案。机器学习也一样:用训练过的数据再测,总是高分。所以要把数据分成训练、验证、测试三块,在「从未见过的数据」上严格、公平地评估模型的真实水平,这就是交叉验证。
数据划分的三种角色 — 划分数据时的理想比例与各自角色如下。
- 数据类型训练集
- 比喻教材/习题集
- 角色与用途模型学习模式、更新权重所用的主数据。
- 常见比例约70~80%
- 数据类型验证集
- 比喻模拟考
- 角色与用途学习过程中检查实力、调整超参或比较模型时使用。
- 常见比例约10~15%
- 数据类型测试集
- 比喻正式考试
- 角色与用途全部学习结束后、投入实战前仅使用一次报告最终性能。
- 常见比例约10~15%
| 数据类型 | 比喻 | 角色与用途 | 常见比例 |
|---|---|---|---|
| 训练集 | 教材/习题集 | 模型学习模式、更新权重所用的主数据。 | 约70~80% |
| 验证集 | 模拟考 | 学习过程中检查实力、调整超参或比较模型时使用。 | 约10~15% |
| 测试集 | 正式考试 | 全部学习结束后、投入实战前仅使用一次报告最终性能。 | 约10~15% |
怎么划分?留出法与K折 — 划分方式主要有两种。留出法像把披萨一刀切开:数据只分一次成训练和测试,简单快速,但若「运气不好」容易的那部分进了测试集,估计会偏乐观。K折交叉验证则把数据切成K块,轮流用一块当模拟考(验证)、其余训练,这样每份数据都会当一次「考题」,估计更稳定、客观。
用公式看K折的最终成绩 — K折验证结束后共有K次「考试」成绩。模型的最终真实水平由这K次成绩的平均值决定。
* 平均成绩公式:
* 符号说明: 为折数(验证次数), 为第 折用作验证时得到的分数(如准确率、MSE等)。 即 ,除以 得到 ,即K个验证分数的平均,用作最终性能估计。
* 数值例: 5折时若五次分数为 80、85、90、80、85,则 分。
跳出「井底之蛙」(发现过拟合) — 若模型在训练数据上得99分、在未见验证数据上只得50分,多半是过拟合(死记硬背而非理解)。交叉验证能在上线前筛掉这类模型。
证明真实实力(泛化性能) — 企业用AI是为了预测未来,不是复现过去。用K折和留出测试集验证过的模型,在真正的新数据上更可能表现稳定。
找到最佳设置(超参与模型选择) — 定树深度、K近邻的K、学习率等时,用验证集试多种配置并选最优。测试集严格分离,才能公平比较。
数据科学家的日常(实战流程) — 拿到数据后,先把约10%留作测试集锁起来。其余用于训练和K折验证,打磨出最佳模型后,再拿出测试集用一次报告:「本模型最终准确率为92%」。
公平比较算法 — 例如「客户流失预测用逻辑回归还是随机森林?」时,对两者用同一K折划分,平均验证分数()更高的算法入选上线。
小结 — 交叉验证的前提是:不能只用训练数据评估性能。正如正式考前用模拟考检查实力,机器学习中若只用训练数据打分,就无法判断是「理解原理」还是「只背答案」。因此将数据分为训练、验证、测试三部分。训练数据用于模型学习模式,验证用于学习过程中检查实力或选择超参,测试在所有学习结束后、投入实战前仅使用一次报告最终性能。划分方式有留出法和K折。留出法是将数据一次性分为训练/测试(或验证);K折是将数据分成K份,轮流用一份作验证、其余作训练。使用K折时每份数据都会参与一次验证,因此比单次划分的估计更稳定。