ML 学习站
跳到正文

过拟合与欠拟合

高方差与高偏差的直觉图解与 5 种解决方案。

25 分钟5 / 61,248
加载中...

本章节探讨了机器学习模型训练中的两个常见问题:过拟合与欠拟合。欠拟合指模型过于简单,无法有效学习训练数据中的规律,表现为训练集和测试集误差都较高。过拟合则指模型过于复杂,将训练数据中的噪声也当作规律学习,导致训练集表现极好但测试集表现差。过拟合与欠拟合的核心概念包括模型复杂度、训练误差和测试误差的关系。读者将学习到如何通过以下方法解决这些问题:收集更多数据以提供模型学习的基础;降低模型复杂度以避免过拟合;使用正则化技术(如L1和L2)惩罚模型复杂度;采用Dropout技术随机丢弃部分神经元;以及使用早停法在验证集误差不再下降时停止训练。最终,读者能够根据训练误差和测试误差的对比,诊断模型是否存在过拟合或欠拟合,并应用相应的解决方案进行调整。

过拟合与欠拟合

训练模型的最高境界是:在新数据上也表现好。两个最常见的"翻车现场"是过拟合欠拟合

两个核心概念

欠拟合(Underfitting)

模型太简单,连训练数据里的规律都没学明白。

比喻:用一条直线去拟合明显是抛物线的数据。

表现:

  • 训练集表现差
  • 测试集表现也差
  • 训练误差和测试误差都高,且接近

过拟合(Overfitting)

模型太复杂,把训练数据里的噪声也当成规律学进去了。

比喻:用 18 次多项式去拟合 10 个数据点——曲线完美穿过每个点,但完全无法泛化。

表现:

  • 训练集表现极好(几乎 100%)
  • 测试集表现
  • 训练误差低,测试误差高,两者差距大

一张图看懂

误差
  ↑
  │      测试误差 (过拟合时反而升高)
  │     ╱
  │    ╱
  │   ╱  ← 训练误差 (一直下降)
  │  ╱
  │ ╱
  │╱________________________→
  0        模型复杂度 →
       ↑            ↑
     欠拟合     过拟合
        "甜蜜点"  ← 选这个

5 种解决方案

1. 收集更多数据

最有效但成本最高。数据多到一定程度,简单的模型也不会欠拟合。

2. 降低模型复杂度

  • 用线性而不是高次多项式
  • 减少神经网络的层数/神经元数
  • 减少决策树的深度
# sklearn 里直接调
DecisionTreeClassifier(max_depth=5)  # 限制树的深度

3. 正则化(Regularization)

在损失函数里加上对模型复杂度的惩罚。最常见的是 L1 和 L2:

L_new = L_old + lambda * sum(|w_i|)         (L1)
L_new = L_old + lambda * sum(w_i^2)          (L2)

其中 lambda 是正则化强度,越大越防止过拟合

from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0)  # L2 正则化

4. Dropout(神经网络专属)

训练时随机让一部分神经元"罢工",强迫网络学到更鲁棒的特征。

model = Sequential([
    Dense(128, activation='relu'),
    Dropout(0.5),  # 50% 神经元随机失活
    Dense(10, activation='softmax')
])

5. 早停(Early Stopping)

训练时监控验证集损失,验证集损失不再下降时立即停止

from keras.callbacks import EarlyStopping
early_stop = EarlyStopping(patience=5, restore_best_weights=True)
model.fit(X_train, y_train, validation_split=0.2, callbacks=[early_stop])

一个诊断小测试

训练完模型后,如果出现:

训练误差测试误差诊断怎么办
欠拟合加特征 / 用更复杂模型
过拟合加数据 / 正则化 / 降复杂度
低(接近)刚刚好庆祝一下

小结

  • 欠拟合 = 模型太简单,学不到规律
  • 过拟合 = 模型太复杂,把噪声当规律
  • 解决方案:数据 / 降复杂度 / 正则化 / Dropout / 早停
  • 训练误差 vs 测试误差 是诊断的金标准

练习思考

  1. 为什么 L1 正则化会让一些权重变成 0,而 L2 不会?
  2. 在神经网络里,Dropout 为什么能防止过拟合?训练和推理时的行为有什么不同?
  3. 想一个真实场景,用上面那张诊断表分析一个模型的"病"并给出药方。

章末小测验

检验你对《过拟合与欠拟合》的掌握程度。

1

训练误差 0.01,测试误差 0.45,这是典型的?

2

下列哪种方法不能缓解过拟合?

3

L2 正则化为什么能防止过拟合?

这门课在以下学习路径中

当前课程出现在 4 条系统化路径里, 你可以一键生成完整学习计划, 自动跳过已完成章节。

还有疑问? 问问 AI (v19.5)

基于全站 19 门课 68 章内容检索 + LLM 总结, 会引用具体章节作为出处

讨论区(0)

加载评论中...