过拟合与欠拟合:偏差方差权衡
训练一个模型时,最常见的两类失败是过拟合与欠拟合。前者把训练样本里的噪声也当成了规律,后者连基本模式都没抓住。理解它们,是调参和选模型的第一步。
什么叫过拟合与欠拟合
欠拟合(underfitting)指模型容量不足,无法拟合训练数据的真实结构,train 与 validation 误差都高。过拟合(overfitting)指模型容量过大,把训练集中的偶然噪声也记住了,train 误差很低但 validation 误差明显更高。两者的差距,就是泛化gap。
偏差方差视角
从期望误差拆解看,模型误差可分为偏差(对真实函数的系统性偏离)、方差(对训练集扰动的敏感程度)与不可约噪声。简单模型偏差高、方差低;复杂模型偏差低、方差高。所谓偏差方差权衡,就是在两者间找使总误差最小的平衡点。
怎么判断
最直观的工具是学习曲线与验证曲线:若 train 与 validation 误差都高且接近,是欠拟合;若 train 很低但 validation 持续走高,是过拟合。交叉验证能把「偶然拟合」与「稳定泛化」区分开。
from sklearn.model_selection import learning_curve
import numpy as np
train_sizes, train_scores, val_scores = learning_curve(
model, X, y, cv=5, train_sizes=np.linspace(0.1, 1.0, 10))
print("train mean:", train_scores.mean(axis=1))
print("valid mean:", val_scores.mean(axis=1))
应对手段
欠拟合时增大模型容量、减少正则、增加训练时长或补充特征。过拟合时增加数据、做数据增强、加正则(L1/L2、Dropout、早停)、降低模型复杂度,或用集成降低方差。核心原则是:用验证集监控,而不是训练集。
小结
过拟合与欠拟合是模型容量与数据匹配失衡的两端。用偏差方差权衡理解成因,用学习曲线与交叉验证判断,再用「加数据、加正则、调容量」三板斧针对性处理,才能让模型真正泛化。
参考与延伸阅读
- scikit-learn 用户指南「Model evaluation」(交叉验证与学习曲线)。已核验。https://scikit-learn.org/stable/modules/cross_validation.html
- Hastie 等著《The Elements of Statistical Learning》第 7 章讨论偏差方差分解。已核验。https://web.stanford.edu/~hastie/ElemStatLearn/
- 关于泛化与过拟合的直觉,可参考 Deep Learning 第 5 章。待核实。https://www.deeplearningbook.org/
本文累计阅读 — 次