🎯 学习目标

  • 理解过拟合与欠拟合的概念
  • 学会识别模型状态
  • 掌握解决过拟合的方法
  • 理解偏差-方差权衡

⚖️ 三种模型状态

欠拟合

模型太简单,无法捕捉数据规律

  • 训练误差高
  • 测试误差高
  • 模型太简单
需要增加复杂度

理想状态

模型复杂度适中,泛化能力强

  • 训练误差低
  • 测试误差低
  • 两者接近
目标状态

过拟合

模型太复杂,记住了噪声

  • 训练误差很低
  • 测试误差高
  • 泛化能力差
需要降低复杂度

🔧 解决过拟合的方法

正则化

from sklearn.linear_model import Ridge, Lasso # L2正则化 (Ridge) ridge = Ridge(alpha=1.0) # L1正则化 (Lasso) lasso = Lasso(alpha=0.1) # PyTorch中 optimizer = torch.optim.Adam( model.parameters(), lr=0.001, weight_decay=0.01 # L2正则化 )

Dropout

import torch.nn as nn class Model(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(784, 256) self.dropout = nn.Dropout(0.5) self.fc2 = nn.Linear(256, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = self.dropout(x) x = self.fc2(x) return x

📊 偏差-方差权衡

类型 偏差 方差 原因 解决方法
欠拟合 模型太简单 增加复杂度、特征
过拟合 模型太复杂 正则化、简化模型

📝 本节小结

  • • 过拟合:训练好测试差
  • • 欠拟合:训练测试都差
  • • 正则化、Dropout防止过拟合
  • • 偏差-方差权衡是模型选择的核心