共计 1515 个字符,预计需要花费 4 分钟才能阅读完成。
从实际问题出发
在机器学习项目里,我们常遇到这样的选择题:
-
下列哪个选项是欠拟合产生的原因?
a) 模型不够复杂
b) 特征的数量过多
c) 模型复杂度过高 -
模型稳定性较好但准确性较差对应的是:
a) 低偏差、低方差
b) 高偏差、低方差
c) 低偏差、高方差
d) 高偏差、高方差
这些问题直指模型开发的核心痛点——如何平衡拟合能力与泛化性能。下面我们通过技术拆解 + 代码实战来系统解决这些问题。
诊断篇:偏差 - 方差分解
数学框架
模型的泛化误差可以分解为:
$$ \text{Error} = \text{Bias}^2 + \text{Variance} + \text{Irreducible Error} $$
- 高偏差(选项 b):模型过于简单,无法捕捉数据规律(欠拟合)
- 高方差(选项 c):模型过度记忆训练数据细节(过拟合)
问题解析
- 欠拟合主因是 模型不够复杂(选项 a 正确)
- 稳定性好(低方差)但准确性差(高偏差)对应 选项 b

解决篇:过拟合应对方案
3. 解决方案代码实现
a) L2 正则化(权重衰减)
# PyTorch 实现
import torch.nn as nn
model = nn.Sequential(nn.Linear(100, 50),
nn.ReLU(),
nn.Linear(50, 10)
)
optimizer = torch.optim.Adam(model.parameters(),
lr=0.001,
weight_decay=0.01) # L2 系数
b) Dropout(丢弃法)
# TensorFlow/Keras 实现
from tensorflow.keras.layers import Dropout
model = Sequential([Dense(128, activation='relu'),
Dropout(0.5), # 50% 神经元随机失活
Dense(10, activation='softmax')
])
c) 数据增强(Data Augmentation)
# 图像增强示例
from torchvision import transforms
train_transform = transforms.Compose([transforms.RandomHorizontalFlip(),
transforms.RandomRotation(15),
transforms.ToTensor()])
d) 早停法(Early Stopping)
# Keras 回调实现
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(
monitor='val_loss',
patience=5, # 连续 5 轮不改善则停止
restore_best_weights=True
)
model.fit(..., callbacks=[es])
方法对比表
| 方法 | 适用场景 | 计算开销 | 实现难度 |
|---|---|---|---|
| L2 正则化 | 参数较多模型 | 低 | ★★☆ |
| Dropout | 全连接网络为主 | 中 | ★★★ |
| 数据增强 | 数据量不足时 | 高 | ★★☆ |
| 早停法 | 训练周期长的任务 | 低 | ★☆☆ |
进阶篇:组合使用技巧
-
正则化系数选择
# 网格搜索示例 from sklearn.model_selection import GridSearchCV params = {'alpha': [0.001, 0.01, 0.1, 1]} grid = GridSearchCV(estimator, param_grid=params, cv=5) -
早停法验证策略
- 建议保留 20-30% 数据作为验证集
-
使用分层采样保持分布一致性
-
复合方案注意事项
- Dropout+L2 时需调低正则化强度
- 数据增强与 BatchNorm 更配
思考题
当模型同时出现 高偏差和高方差 时(如选项 d),应该优先解决哪个问题?为什么?
(提示:从误差可修正性和问题根源角度思考)
正文完
发表至: 未分类
近两天内
