1、决定下一步做什么
假设我们需要用一个线性回归模型来预测房价,然而,当我们用这个模型来预测新数据时发现有较大的误差,那么我们下一步应该怎么做?
- 获得跟多的训练示例——代价较大,而且有时候获得更多示例does not help
- 尝试减少特征数量——防止过拟合
- 尝试获得更多特征量
- 尝试增加二项式特征
- 尝试减少归一化程度——减小lambda
- 尝试增加归一化程度——增大lambda
我们需要使用一些机器学习诊断方法来帮助我们找到机器学习算法的问题以及那种解决方法更有效
2、假设的评估
3、模型选择(交叉验证集)如何判断有没有过拟合?
很多情况下特征量很多,无法画出曲线图来判断,如下给出了一种评估假设的标准方法:
将数据分成两部分——训练集合测试集。通常用70%的数据作为训练集,剩下为测试集。
注:注意训练集和数据集均要包含各种类型的数据,通常我们要对数据进行混合打乱后在分成两部分。
测试集评估:
通过训练集让我们的模型学习处参数后,对测试集运用该模型,计算误差:
1.对于现行模型,我们利用测试集数据计算大家函数J
2.对于逻辑回归模型,我们除了可以用公式J来计算外:
还可以对每一个测试集实例计算错误分类比率,然后计算平均结果“
下面的模型中有十个不同多项式次数,显然次数越高的二项式模型越能够适应训练集数据,但是并不能推广到一般情况,且容易过拟合,我们如何选择一个更能适应一般情况的模型呢?
交叉验证集:
添加交叉验证集的原因:如果只使用一个测试集,那么在十个模型中得到的误差最小的模型本身就是针对测试集选择的,并不能推广到一般情况
模型选择方法:
- 使用60%的数据作为训练集
- 20% 交叉验证集
- 20%为测试集
4、诊断 偏差(bias) 和方差(variance)
- 使用训练集通过最小化误差函数训练出10个模型
- 分别对交叉验证集计算得到交叉验证误差J of CV
- 选取交叉验证误差最小的模型,然后对测试集计算得到推广误差J of test
5、归一化与方差/偏差如何判断一个算法是偏差还是方差问题对于改学习算法的效果很重要:
高偏差和高方差对应的一般来说就是低拟合和过拟合问题。
通查我们会将训练集和交叉验证集的代价函数误差和多项式的次数画在同一张图上来分析:
从图上可知:
Bias/ underfit: 训练集误差和交叉集误差相近且都较大
Variance/overfit: 交叉验证集误差远大于训练集误差(训练集误差很小)
假设我们要对下式进行拟合,我们要使用到归一化来防止过拟合问题。在lambda的选择上也会出现如第四节所说的问题:
我们选择一系列想要测试的lambda值(如0-10间像个两倍关系的值:0,0.01,0.02,0.04,0.08.。。。)
选择方法:
- 使用训练集训练出12个不同程度归一化的模型
- 用12个模型分别对交叉验证集计算出交叉验证误差
- 选择交叉验证误差最小的模型,对测试集计算得到推广误差
当lambda较小时,训练集误差较小,交叉验证集误差较大(过拟合)当lambda逐渐增大时,训练集误差增加,交叉验证集先减小后增大
6、学习曲线
7、决定下一步做什么学习曲线是学习算法的一个很好的合理校验,可以通过学习曲线观察学习算法是否出现了方差或偏差问题。
学习曲线是训练集误差和交叉验证集误差关于训练集样本总数m的曲线。
如下图所示:当m 较小时,模型能很好的适应较少的训练数据,但是相应的就不能很好的适应交叉验证集合测试集
从而我们得到学习曲线如下:
那么如何利用学习曲线来识别高偏差/方差?
- Variance / Overift
在过拟合情况下,增加更多数据到训练集可能可以提高算法效果
- Bias/ Underfit
所以,对于低拟合的情况下,增加数据到训练集并不会起到多大帮助(所以分析偏差和方差问题可以帮助我们有方向性的选择提高学习算法的方式)
回顾第一节中我们提出的六种提高学习算法效果的方式,通过2-6节的学习我们可以总结选择情况如下:
- 获得跟多的训练示例——fixes high variance
- 尝试减少特征数量——fixes high variance
- 尝试获得更多特征量——fixes high bias
- 尝试增加二项式特征——fixes high bias
- 尝试减少归一化程度——fixes high bias
- 尝试增加归一化程度——fixes high variance
神经网络的偏差和方差问题:
- 使用较小的神经网络,类似于参数较少的情况,容易导致高偏差或低拟合,但计算代价较小
- 使用较大的蛇精忘了,类似于参数较大的情况,容易导致高方差或过拟合,计算代价较大,但是可以通过归一化手段来调整从而更适应数据
- 通常选择较大的神经网络病采用归一化处理比较好