第 10 章 应用机器学习的建议
这一章讲如何诊断模型问题,并决定下一步该做什么。重点是训练集、交叉验证集、测试集、偏差、方差和学习曲线。
10.1 决定下一步做什么
如果模型在新样本上表现不好,常见选择包括:
- 收集更多训练样本。
- 尝试更少的特征。
- 尝试更多的特征。
- 添加多项式特征。
- 调整正则化参数。
这些选择不应该靠猜。需要用诊断方法判断当前主要问题是高偏差还是高方差。
10.2 评估一个假设
为了评估模型泛化能力,需要把数据划分为训练集和测试集。
一种常见做法:
text
70% 训练集
30% 测试集训练集用于拟合参数,测试集用于估计模型在新数据上的误差。
线性回归测试误差:
分类问题可以用误分类率衡量:
text
预测错误样本数 / 测试集样本数10.3 模型选择和交叉验证集
如果用测试集反复选择模型,测试集就不再是公平评估。
更好的做法是划分为三部分:
text
训练集
交叉验证集
测试集常见比例:
text
60% 训练集
20% 交叉验证集
20% 测试集流程:
- 用训练集训练不同模型。
- 用交叉验证集选择模型。
- 最后只用测试集评估一次最终模型。
10.4 诊断偏差和方差
高偏差通常表现为欠拟合:
- 训练误差高。
- 交叉验证误差也高。
高方差通常表现为过拟合:
- 训练误差低。
- 交叉验证误差高。
随着模型复杂度增加,训练误差通常会下降,但交叉验证误差可能先下降后上升。
10.5 正则化和偏差 / 方差
正则化参数 lambda 会影响偏差和方差。
lambda 太大:
- 参数被压得太小。
- 模型过于简单。
- 容易高偏差。
lambda 太小:
- 正则化不足。
- 模型可能过拟合。
- 容易高方差。
选择 lambda 时,通常训练多个候选值,然后用交叉验证误差选择最合适的。
10.6 学习曲线
学习曲线用来观察训练样本数量和误差之间的关系。
横轴是训练样本数量,纵轴是误差。
高偏差情况下:
- 训练误差较高。
- 交叉验证误差也较高。
- 增加更多数据通常帮助不大。
高方差情况下:
- 训练误差较低。
- 交叉验证误差明显更高。
- 增加更多数据通常有帮助。
10.7 决定下一步做什么
根据诊断结果选择行动:
| 现象 | 更可能的问题 | 可尝试的方法 |
|---|---|---|
| 训练误差高,验证误差高 | 高偏差 | 增加特征、增加多项式特征、减小正则化 |
| 训练误差低,验证误差高 | 高方差 | 增加数据、减少特征、增大正则化 |
神经网络中,小网络更容易高偏差,大网络更容易高方差。正则化可以帮助较大的网络减少过拟合。