泛化、数据划分与模型评估

解释训练集、验证集、测试集和交叉验证各自承担的职责,以及指标为何必须服从真实任务。

泛化、数据划分与模型评估

模型评估要回答的不是“这个模型得了多少分”,而是“在接近真实使用条件的数据上,它是否比可接受的基线更可靠”。同一个模型换一种数据划分、一个指标或一个阈值,结论可能完全不同。评估设计因此属于问题定义的一部分,不能等训练结束后再临时决定。

直接用训练数据打分几乎总会高估实际能力。训练过程已经利用这些样本选择参数,甚至记住噪声;再次测试只能说明模型对已见数据的适配程度。scikit-learn 的交叉验证指南也把在相同数据上学习和测试明确视为方法错误,并区分训练、验证和测试所承担的职责。

三份数据承担三种责任

训练集用于估计模型参数。验证集用于选择特征、超参数、阈值和模型方案。测试集在这些决定完成后,提供一次尽量独立的最终估计。若团队反复查看测试结果再调整方案,测试集事实上已经参与训练决策,最终分数便不再独立。

数据不足时,可以在训练部分使用交叉验证:轮流保留一部分样本验证,其余样本训练,再汇总多次结果。交叉验证提高了数据利用率,也能看到不同划分带来的波动,但它不自动解决抽样偏差、时间穿越或群组泄漏。最终测试数据仍应与模型选择过程隔离。

任何会从数据估计参数的步骤都必须放进训练折内部,包括标准化、缺失值填补、特征选择、降维和目标编码。先在全量数据上计算均值,再做交叉验证,会让验证样本的信息提前进入训练过程。管道化处理的意义正在于把这些步骤和模型一起重新拟合。

划分方式要尊重数据产生过程

随机划分适合样本近似独立且未来数据来自相似分布的场景。许多实际数据不符合这个前提。同一患者的多次就诊、同一设备的连续读数、同一地块中的像元,若散落在训练和测试两侧,模型可能只是识别个体或局部背景。

存在天然群组时,应按患者、用户、设备、地块或项目划分;需要预测未来时,应保持时间先后,让验证和测试位于训练期之后;需要迁移到新区域时,应按空间块或行政区隔离。空间任务还应留出足够缓冲,避免相邻样本通过纹理、地形或采样路线泄漏信息。

类别不平衡时,分层抽样可以保持各折的类别比例,但它解决不了少数类样本缺乏代表性的问题。罕见事件如果只来自少数时间段或地点,看似稳定的比例仍可能产生不可靠结论。评估报告应同时说明划分单位、时间范围、地理范围、样本量和重复方式。

指标必须对应错误后果

准确率把所有预测同等计数。在正负样本严重不平衡时,一个始终预测多数类的模型也可能得到很高准确率。精确率关心被判为正的样本中有多少真正为正,召回率关心所有真实正例中有多少被找到。二者通常随决策阈值变化,不存在脱离任务代价的最佳阈值。

scikit-learn 的模型评估文档区分分类、回归、排序和聚类等任务的指标,并说明评分方向等实现约定。选择指标时仍要回到业务含义。例如洪水预警可能更重视漏报,自动审批还要控制误拒;土地覆盖分类不仅要看总体精度,也要查看各类别误差和空间分布。

概率模型还要检查校准:预测为 0.8 的事件,在相似条件下是否大约有八成发生。区分能力好不代表概率可信。若概率将进入风险排序、资源配置或成本计算,校准和不确定性比单一分类正确率更重要。

回归中的平均绝对误差容易解释,平方误差会更重地惩罚大偏差。两者都可能掩盖不同区间或群体的系统误差。残差随目标值、时间、地区和关键人群的分布,通常比一个全局均值更能暴露问题。

比较结果时看波动,不只看均值

交叉验证均值只有和各折波动、样本规模及划分方式一起看才有意义。两个模型平均分相差很小,而折间波动很大时,直接宣布胜负并不稳妥。比较候选方案应使用相同划分,并检查差异是否集中在某些群组或极端条件。

Deep Learning 对泛化误差、偏差与方差的讨论提醒我们:有限样本上的评估本身也是估计。测试集越小,罕见失败越难出现;反复试验越多,偶然得到好分数的机会越大。保留实验记录和未被用于选择的最终数据,能降低这种选择偏差。

上线前的离线测试也不是终点。生产数据可能漂移,反馈可能延迟,人工操作会改变输入分布。应预先确定监控指标、基准窗口、告警条件和回退方式,并把线上性能与离线评估使用的定义对齐。只有这样,评估数字才会成为可持续判断,而不是一次发布证明。

参考资料