六. 应用机器学习的建议
假如你在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,你应如何决定接下来应该选择哪条道路?
- 获得更多的训练实例
- 尝试减少特征的数量
- 尝试获得更多的特征
- 尝试增加多项式特征
- 尝试减少正则化程度𝜆
- 尝试增加正则化程度𝜆
我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。
1. 评估假设
为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用 70%的数据作为训练集,用剩下 30%的数据作为测试集。
(1)线性回归模型:
利用测试集数据计算代价函数J
(2)逻辑回归模型:
利用测试集数据计算代价函数J、误分类的比率
2. 模型选择和交叉验证集
使用交叉验证集帮助选择模型。
使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据作为测试集。
模型选择的方法为:
- 使用训练集训练出 10 个模型
- 用 10 个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
- 选取代价函数值最小的模型
- 用步骤 3 中选出的模型对测试集计算得出推广误差(代价函数的值)
Train/validation/test error
3. 诊断偏差和方差(多项式特征)
偏差:偏差度量了学习算法的期望预测与真实结果的偏离程度, 即刻画了学习算法本身的拟合能力。
方差:方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即刻画了数据扰动所造成的影响 。
将训练集和交叉验证集的代价函数误差与多项式的次数d绘制在同一张图上
随着多项式次数的增大,训练集模型拟合程度越来越高,误差越来越小,但是交叉验证集的误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
判断方法:
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
4. 正则化和偏差/方差( λ )
在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太低了。
选择一系列的想要测试的 𝜆 值:通常是 0-10 之间的呈现 2 倍关系的值。
先设定一个 λ 值,进行正则化选择出令 J(θ) 最小的 θ 拟合出模型(式1),之后根据模型计算(式2)和
(式3):
将训练集和交叉验证集模型的代价函数误差与正则化参数 λ 的值绘制在一张图上
当 λ 较小时,正则化不起作用,过拟合;λ 很大时,假设函数趋于直线,欠拟合。
5. 学习曲线(样本量)
高偏差(欠拟合)时增大样本量
高偏差(欠拟合)时增大样本量不一定能有帮助,始终维持在较高水平。
高方差(过拟合)时增大样本量
高方差(过拟合)时增大样本量可以提高模型的效果。
6. 总结
总结:
对于高偏差问题(欠拟合):(
和
都较高)
- 增加特征个数
- 增加多项式特征
- 降低 λ
对于高方差问题(过拟合): (较低但
较高)
- 增加训练样本
- 减少特征个数
- 增加 λ
七. 机器学习系统的设计
我们将在随后的课程中讲误差分析,学习怎样用一个更加系统性的方法,从一堆不同的方法中选取合适的那一个。
1. 误差分析(Error Analysis)
构建一个学习算法的推荐方法为:
- 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
- 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
- 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势
2. 类偏斜的误差度量
类偏斜(skewed classes)情况表现为我们的训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。
查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况:
- 正确肯定(True Positive,TP):预测为真,实际为真
- 正确否定(True Negative,TN):预测为假,实际为假
- 错误肯定(False Positive,FP):预测为真,实际为假
- 错误否定(False Negative,FN):预测为假,实际为真
查准率=正确肯定 / 预测为真 查全率=正确肯定 / 实际为真
查准率=TP/(TP+FP) 查全率=TP/(TP+FN)
3. 查准率和查全率之间的权衡
在很多应用中,我们希望能够保证查准率和召回率的相对平衡。
如果我们希望只在非常确信的情况下预测为真,即我们希望提高查准率,我们可以使用比 0.5 更大的阀值,如 0.7,0.9。如果我们希望提高查全率,我们可以使用比 0.5 更小的阀值,如 0.3。
不同算法(颜色)的不同阈值下查全率与查准率的关系
利用F1值(F1 Score)选择合适的阈值:
选择使F1值最高的阈值。