- • 过拟合:训练好测试差
- • 欠拟合:训练测试都差
- • 正则化、Dropout防止过拟合
- • 偏差-方差权衡是模型选择的核心
6.4 过拟合与欠拟合
模型泛化能力的核心问题
🎯 学习目标
- 理解过拟合与欠拟合的概念
- 学会识别模型状态
- 掌握解决过拟合的方法
- 理解偏差-方差权衡
⚖️ 三种模型状态
欠拟合
模型太简单,无法捕捉数据规律
- 训练误差高
- 测试误差高
- 模型太简单
需要增加复杂度
理想状态
模型复杂度适中,泛化能力强
- 训练误差低
- 测试误差低
- 两者接近
目标状态
过拟合
模型太复杂,记住了噪声
- 训练误差很低
- 测试误差高
- 泛化能力差
需要降低复杂度
🔧 解决过拟合的方法
正则化
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
📊 偏差-方差权衡
| 类型 | 偏差 | 方差 | 原因 | 解决方法 |
|---|---|---|---|---|
| 欠拟合 | 高 | 低 | 模型太简单 | 增加复杂度、特征 |
| 过拟合 | 低 | 高 | 模型太复杂 | 正则化、简化模型 |
📝 本节小结
✅