过拟合与欠拟合:偏差方差权衡

训练一个模型时,最常见的两类失败是过拟合与欠拟合。前者把训练样本里的噪声也当成了规律,后者连基本模式都没抓住。理解它们,是调参和选模型的第一步。

什么叫过拟合与欠拟合

欠拟合(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、早停)、降低模型复杂度,或用集成降低方差。核心原则是:用验证集监控,而不是训练集。

小结

过拟合与欠拟合是模型容量与数据匹配失衡的两端。用偏差方差权衡理解成因,用学习曲线与交叉验证判断,再用「加数据、加正则、调容量」三板斧针对性处理,才能让模型真正泛化。

参考与延伸阅读

本文累计阅读