1. 问题引入
当测试假设函数发现有很大的误差,一般的改进方法为:
- 使用更多的训练样例
- 减少特征数
- 增加特征数
- 增加多项式特征
- 减小λ 的值
- 增加λ 的值
但并不是所有的方法都有用,需要分析知道哪里出了问题。
2. 模型评估
为了能有效地评估我们的模型,先要将数据集分成训练集(training set)(占原数据的70%),和测试集(test set)(占原数据的30%)。
在数据集分割时, 要随机打乱数据的顺序。
对于线性回归问题, 带入训练集求得θ到测试集中计算代价函数
对于逻辑回归模型,除了计算测试集代价函数以外,计算误分类的比率(在测试集上计算1/m∑err(hθ(x,y))
3. 模型选择和交叉验证集
数据集的分类:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集
- 使用交叉验证集来帮助选择模型
- 测试集来测试交叉验证选择的模型
模型选择的方法为: 使用训练集训练出几个模型;在模型分别对交叉验证集计算得出交叉验证误差(代价函数的值);选取代价函数值小的模型; 测试集来测试交叉验证选择的模型上计算得出推广误差(代价函数的值)
4. 偏差与方差
当运行一个学习算法时,如果算法表现不理想,那么多半是出现两种情况:要么是偏差比较大(欠拟合),要么是方差比较大(过拟合)。
通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
5. 正则化和偏差/方差
(1)正则化的作用
使用正则化方法来防止过拟合
(2)正则化参数λ的选择
当λ太大的话,使得拟合趋近于一个常数,容易造成欠拟合,太小达不到防止过拟合的效果。故选择适合的λ是必要的,方法就是:选择一系列想要测试的λ值,通常0-10之间呈现等差布置,然后在同样的训练集、验证集、测试集上训练和测试,同时将训练集和交叉验证集模型的代价函数误差与λ 的值绘制在一张图表上:观察分布情况,选择合适的λ值。
(3)正则化参数λ和偏差/方差的关系
- 当 ?较小时,训练集误差较小(过拟合)而交叉验证集误差较大
- 随着 ? 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加
6. 学习曲线
(1)定义:学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(?)的函数绘制的图表。(样本数量m—误差error的曲线)
(2)作用:使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。
(3)训练集数量与模型的关系
当训练较少数据的时候,训练的模型能够非常完美地适应较少的训练数据,但是模型不能很好地适应交叉验证集数据或测试集数据(泛化能力差)。当训练数据太多的时候会使得训练速度慢,故当大数据的情况下如何选择数据数量是必要的。
(4)当高偏差/高方差情况的学习曲线
高偏差/欠拟合的情况下,无论训练集有多么大误差都不会有太大改观:也就是说在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。故此种情况增加训练数据集是不能解决问题的,需要更改模型,提高拟合能力。
高方差/过拟合:在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
7.实际应用的建议
误差情况 | 解决方法 |
---|---|
高方差 | 1. 增加训练集数据;2. 减少特征;3. 增加λ |
高偏差 | 1. 增加特征;2. 增加多项式特征; 3. 减小λ |