⚖️ 过拟合与欠拟合

理解模型复杂度与泛化能力的平衡

📚 核心概念

🎯 生活化理解

想象你在准备考试:

  • 📖 欠拟合:只背了几道题,连练习题都做不好
  • 合适拟合:理解了知识点,练习题和考试都能做好
  • 📚 过拟合:把练习题的答案都背下来,但遇到新题就不会了

❌ 欠拟合

模型太简单

  • 训练误差大
  • 验证误差大
  • 模型能力不足
  • 无法捕获数据规律

例子:用直线拟合曲线数据

✅ 合适拟合

模型复杂度适中

  • 训练误差小
  • 验证误差小
  • 泛化能力强
  • 平衡良好

例子:用合适的曲线拟合数据

⚠️ 过拟合

模型太复杂

  • 训练误差很小
  • 验证误差大
  • 泛化能力差
  • 记忆了训练数据

例子:用高次多项式过拟合

🎮 交互式演示:三种拟合情况

模型复杂度对比

调整模型复杂度(多项式次数),观察训练集和测试集上的表现。

1
20
5

性能指标:

拟合方程:

📈 学习曲线

什么是学习曲线?

学习曲线展示模型性能随训练样本数量或训练时间的变化。通过观察训练误差和验证误差的关系,可以判断模型是否存在过拟合或欠拟合。

学习曲线可视化

如何解读学习曲线?

欠拟合的特征

  • 训练误差和验证误差都很高
  • 两条曲线平行或接近
  • 增加数据量不会改善
  • 需要增加模型复杂度

过拟合的特征

  • 训练误差低,验证误差高
  • 两条曲线差距大
  • 增加数据量可能改善
  • 需要减少模型复杂度或正则化

🔧 如何解决?

解决欠拟合

  • 增加模型复杂度:使用更复杂的模型(如增加神经网络层数)
  • 增加特征:添加更多相关特征
  • 减少正则化:降低正则化强度
  • 增加训练时间:训练更长时间
  • 改进算法:使用更强的模型

解决过拟合

  • 增加数据量:收集更多训练数据
  • 数据增强:通过变换生成更多数据
  • 正则化:L1正则化、L2正则化
  • 降低模型复杂度:减少参数数量
  • Dropout:随机丢弃一些神经元(神经网络)
  • 早停:验证误差不再改善时停止训练
  • 交叉验证:更好地评估模型

🛡️ 正则化

什么是正则化?

正则化是防止过拟合的重要技术,通过在损失函数中添加惩罚项来限制模型的复杂度。

L2正则化(岭回归)

$$J(\theta) = MSE + \lambda \sum_{i=1}^{n}\theta_i^2$$

惩罚大的权重,使权重更小、更平滑

L1正则化(Lasso回归)

$$J(\theta) = MSE + \lambda \sum_{i=1}^{n}|\theta_i|$$

可以将某些权重压缩到0,实现特征选择

正则化效果对比

0.00

⚖️ 偏差-方差权衡

偏差 (Bias) vs 方差 (Variance)

偏差 (Bias)

模型的平均预测值与真实值的差距

  • 高偏差:模型太简单,欠拟合
  • 低偏差:模型能很好拟合训练数据

方差 (Variance)

模型预测值的波动程度

  • 高方差:模型太复杂,过拟合
  • 低方差:模型预测稳定

总误差分解

$$总误差 = 偏差^2 + 方差 + 不可约误差$$

目标:在偏差和方差之间找到平衡,使总误差最小

💡 最佳实践

模型选择流程

  1. 划分数据:训练集、验证集、测试集
  2. 从简单模型开始:先尝试简单的模型(如线性回归)
  3. 评估性能:观察训练误差和验证误差
  4. 调整复杂度:根据误差情况增加或减少复杂度
  5. 使用正则化:如果出现过拟合,添加正则化
  6. 交叉验证:使用交叉验证评估模型
  7. 最终测试:在测试集上评估最终模型