模型评估与过拟合
模型在训练集上 99% 准确,上线却惨不忍睹——这是新手最常踩的坑。这篇讲清楚怎么科学地评估模型、什么是过拟合,以及常用的应对手段。
为什么要划分数据集
如果用同一批数据既训练又评估,相当于「拿复习过的原题考试」,分数虚高、没有参考价值。标准做法是把数据切成三份:
- 训练集(Train):用来拟合模型参数,一般占 60%~80%。
- 验证集(Validation):调超参数、选模型时看它的表现,避免污染测试集。
- 测试集(Test):只在最后用一次,模拟真实上线效果,期间绝不能拿来调参。
测试集一旦被用来反复调参,它就「泄露」了,评估结果不再可信。把它当成只能拆封一次的密封信封。
数据量小时,用**交叉验证(K-Fold Cross Validation)**更稳:把训练数据切成 K 份,轮流用其中 1 份当验证、其余训练,取 K 次结果的平均,能更充分地利用数据、降低偶然性。
过拟合与欠拟合
这是评估里最核心的一对概念:
- 欠拟合(Underfitting):模型太简单,连训练集都学不好。训练误差和验证误差都高。
- 过拟合(Overfitting):模型太复杂,把训练集的噪声也背了下来。训练误差很低,但验证误差高——一到新数据就露馅。
误差
│ \ 欠拟合区 | 最佳 | 过拟合区
│ \ 验证误差 ─────────┼──────┼─────────
│ \____ ↑
│ ‾‾‾___ 泛化最好
│ 训练误差 ‾‾‾‾———————____
└──────────────────────────────► 模型复杂度理想状态是在训练误差和验证误差的差距开始拉大之前停下,这个点泛化最好。背后是「偏差—方差权衡」:模型越简单偏差越大(欠拟合),越复杂方差越大(过拟合),要找平衡点。
常见的应对手段
针对过拟合,按性价比从高到低:
- 加数据:最有效但最贵。数据增强(图像翻转、裁剪等)是低成本的扩充方式。
- 正则化(Regularization):在损失函数里加惩罚项,限制参数过大,如 L1/L2 正则、神经网络的 Dropout。
- 简化模型:减少特征、降低树深度或网络层数。
- 早停(Early Stopping):训练时盯着验证误差,一旦不再下降就停。
针对欠拟合则相反:加特征、换更强的模型、训练更久。
评估指标怎么选
指标必须匹配业务目标,准确率不是万能的。
分类任务,尤其类别不均衡时(如 99% 正常、1% 欺诈),看这几个:
| 指标 | 含义 | 适用场景 |
|---|---|---|
| 准确率 Accuracy | 预测对的比例 | 类别均衡时才有意义 |
| 精确率 Precision | 预测为正的里面,真正为正的比例 | 误报代价高(如把正常邮件判为垃圾) |
| 召回率 Recall | 真正为正的里面,被找出来的比例 | 漏报代价高(如漏诊、漏判欺诈) |
| F1 | 精确率与召回率的调和平均 | 两者都要兼顾 |
回归任务常用 MAE(平均绝对误差) 和 RMSE(均方根误差),后者对大误差更敏感。
先问「这个场景里,误报和漏报哪个更可怕」,再选指标。风控漏掉欺诈损失巨大,应优先保召回率;垃圾邮件误杀正常邮件很烦人,应优先保精确率。
一句话小结
评估的本质是「用没见过的数据检验泛化能力」。划好测试集别偷看、盯住过拟合、用匹配业务的指标——做到这三点,模型才靠谱。
最后更新于