训练集、验证集、测试集
Train / Validation / Test模型在哪份数据上学,就不能拿哪份数据给它打分——它可能只是把答案记住了。所以数据通常切成三份:训练集用来拟合参数,验证集用来比较不同设置、决定何时停止,测试集留到最后只看一次。
测试集被反复查看、反复据此调整,它就慢慢变成了另一份验证集,最后报告的分数会偏乐观。
在指标上:同一个模型在训练集上的指标总是比测试集好一些;差得太多,往下看「过拟合」。
概念 · Concepts
和「模型评估」有关的基础概念,每条先说它是什么,再说在指标上怎么把它看出来。用自己的话写,尽量少用术语解释术语。
模型在哪份数据上学,就不能拿哪份数据给它打分——它可能只是把答案记住了。所以数据通常切成三份:训练集用来拟合参数,验证集用来比较不同设置、决定何时停止,测试集留到最后只看一次。
测试集被反复查看、反复据此调整,它就慢慢变成了另一份验证集,最后报告的分数会偏乐观。
在指标上:同一个模型在训练集上的指标总是比测试集好一些;差得太多,往下看「过拟合」。
过拟合:模型把训练数据里的偶然细节也当成规律学了进去,训练集上几乎全对,换一批新数据就明显变差。欠拟合则相反,模型太简单,连训练集上的规律都没抓住。
缓解过拟合的常见做法:更多数据、更简单的模型、正则化、提前停止、数据增强;缓解欠拟合:更有表达力的模型、更好的特征、训练更久。
在指标上:过拟合:训练集指标很高、验证集明显低。欠拟合:两边都低,而且差不多。
设想用同一种方法、在同一个总体里反复抽不同的训练集训练很多次。偏差是这些模型的平均预测离真实值有多远——方法本身的系统性偏离;方差是这些模型彼此之间差多少——对训练数据的具体抽样有多敏感。
对平方误差而言,预期误差可以拆成「偏差² + 方差 + 数据本身的噪声」。模型越复杂,偏差往往越小、方差往往越大,需要在两者之间找平衡。噪声那一项任何模型都消不掉。
在指标上:高偏差对应欠拟合,高方差对应过拟合。
把数据平均分成 k 份,轮流拿其中 1 份当验证集、其余 k − 1 份训练,得到 k 个分数,再看它们的平均和波动。常用 k = 5 或 10。数据少的时候,这比只切一次验证集稳定得多。
分类问题里正类很少时,按类别比例分层切分(每一折里正负比例相同),否则某一折可能一个正样本都没有,召回率就无定义了。有时间顺序的数据要按时间切,不能打乱。
在指标上:k 个分数的波动大,说明结果对数据怎么切很敏感,单次评估的数字不太可靠。
训练时用到了预测那一刻实际拿不到的信息,评估分数会好得不真实。常见来源:特征里混进了由结果推出来的字段;先在全部数据上做标准化或特征选择,再切分训练和测试;同一个人的多条记录同时出现在训练集和测试集。
所有「从数据里学出来」的预处理,都应该只在训练集上拟合,再原样应用到验证集和测试集。
在指标上:指标高得出奇(比如 AUC 接近 1),先怀疑泄漏,再庆祝。
在训练目标里给「模型太复杂」加一项惩罚。L2 惩罚参数的平方和,让参数整体变小;L1 惩罚参数的绝对值和,容易把一部分参数压成恰好为 0。惩罚强度是一个超参数,通常用交叉验证来定。
在指标上:惩罚加大时,训练集指标会下降;如果验证集指标反而上升,说明原来有过拟合。
正类只占很小比例时,把所有样本都判为负类就能得到很高的准确率,但一个正类也没找到。这时准确率几乎没有信息量,要看召回率、精确率、F1、MCC、PR 曲线。
处理方式包括重新采样、给少数类更高的损失权重、调整判定阈值;无论哪种,评估都要在保持原始比例的测试集上做。
在指标上:准确率接近「多数类占比」,而召回率很低。
多数分类模型先输出一个分数或概率,再用阈值把它变成「正 / 负」。阈值调低,召回率上升、精确率通常下降;调高则反过来。0.5 只是一个习惯值,不是必须。
准确率、精确率、召回率、F1 都依赖阈值;AUC 和 AP 扫过了所有阈值,不依赖某一个。
在指标上:在首页用「标签 + 概率」模式拖动阈值,能直接看到这种此消彼长。
评估一个模型之前,先算几个不用学习的参照:分类里「永远猜多数类」「按类别比例随机猜」,回归里「永远猜训练集平均值」。模型的指标要和基线比,才知道它学到了多少。
R² 其实就是把「永远猜平均值」当作基线的相对改进;AUC = 0.5、MCC = 0 对应随机猜。
在指标上:模型指标只比基线高一点点,说明它基本没学到有用的东西。
训练开始前由人设定、不由训练过程学出来的量:学习率、树的深度、正则化强度、k 近邻里的 k……一般在验证集或交叉验证上比较不同取值来选。
在测试集上挑超参数,等于把测试集用成了验证集,最终分数会偏高。
在指标上:超参数搜索的范围越大、试的组合越多,最好那一组的验证分数越可能是运气,最后一定要在测试集上确认一次。
横轴是训练样本数(或训练轮数),纵轴是训练集和验证集上的指标。两条线之间的距离反映过拟合程度,两条线的最终高度反映模型能力的上限。
在指标上:两条线都已经走平而且靠得很近,再加数据帮助不大;两条线还隔得很远、验证集仍在上升,多收集数据往往有用。
模型说「70% 是正类」的那些样本里,真的大约有 70% 是正类吗?如果是,就说它校准得好。AUC 只看排序,一个校准很差的模型也可以有很高的 AUC。
需要把概率当概率用(比如算期望损失)时,校准比排序更重要;只需要排序或只用一个阈值时,校准就没那么要紧。
在指标上:把样本按预测概率分组,比较每组的平均预测概率和实际正类比例,两者应大致相等。
这张表只说明每种算法输出的是什么,从而该用哪一类指标评估。它不是选型建议:同一个问题哪种算法更合适,只能在你自己的数据上用交叉验证比较出来。
| 算法 | 任务 | 输出 | 常用评估指标 | 说明 |
|---|---|---|---|---|
| 线性回归 | 回归 | 连续数值 | MAE、RMSE、R² | 假设特征与目标大致成线性关系;残差图能看出这个假设是否成立。 |
| 逻辑回归 | 分类 | 属于正类的概率 | 精确率、召回率、F1、ROC / AUC、PR / AP | 虽然名字里有「回归」,做的是分类;输出的概率通常校准得不错。 |
| k 近邻 | 分类 / 回归 | 邻居的多数类或平均值 | 同任务对应的指标 | 没有训练过程,预测时比较距离;特征的量纲要先统一。 |
| 决策树 | 分类 / 回归 | 叶子上的类别或平均值 | 同任务对应的指标 | 规则可读;树长得太深容易过拟合。 |
| 随机森林 | 分类 / 回归 | 多棵树投票或平均 | 同任务对应的指标 | 多棵随机化的树取平均,主要降低方差。 |
| 梯度提升树 | 分类 / 回归 | 多棵树逐步修正的累加 | 同任务对应的指标 | 每棵新树拟合前面的剩余误差,主要降低偏差;需要控制树的数量和学习率。 |
| 支持向量机 | 分类 / 回归 | 到分隔面的有符号距离 | 分类用 ROC / AUC 等 | 原始输出是距离不是概率,但可以直接当作分数画 ROC 曲线。 |
| 朴素贝叶斯 | 分类 | 各类的后验概率 | 精确率、召回率、F1、AUC | 假设特征之间条件独立;排序往往不错,概率值常常偏极端。 |
| 神经网络 | 分类 / 回归 / 其他 | 取决于输出层 | 同任务对应的指标 | 表达能力强、参数多,更依赖验证集和正则化来防过拟合。 |
| k 均值 | 聚类(无监督) | 每个样本的簇编号 | 不适用本站指标 | 没有真实标签,常用簇内距离或轮廓系数评估;本站不涉及。 |
| 主成分分析 | 降维(无监督) | 低维坐标 | 不适用本站指标 | 常看保留的方差比例;本站不涉及。 |