这章的内容对于设计分析假设性能有很大的帮助,如果运用的好,将会节省实验者大量时间。
Machine Learning System Design
6.1 Evaluating a Learning Algorithm
6.1.1 Deciding What to Try Next
机器学习诊断法:一种测试法,通过执行这种测试,能够深入了解某种算法是否有用。诊断法也会告诉你,要想改进一种算法的效果需要什么样的尝试。能够判断一种学习算法能不能work,并且改善该算法性能的一个测试。
诊断法的执行和实现是需要时间的,有时候需要大量的时间,但这样做可以更有效地利用时间。
下面的内容将会讨论如何评价学习算法,再介绍一些诊断法,从而选择更有意义的方法实现达到改进机器学习系统性能的目的。
6.1.2 Evaluating a Hypothesis
怎样用学过的算法来评估假设函数,并以此来讨论如何避免过拟合和欠拟合问题。
如何判断一个假设函数是过拟合的。下面给出了评估假设函数的标准方法。
将数据分为2部分:训练集和测试集。一种典型的分法是7:3。如果数据有某种规律或者顺序的话,最好随机抽取70%作为训练集,剩下的30%作为测试集。
按照以下步骤训练和测试学习方法。分别以线性回归和逻辑回归为例。
线性回归:
1.由训练集得到Θ,前提是最小会训练误差J(Θ)。
2.利用测试集计算测试误差。
逻辑回归:
1.由训练集得到Θ,前提是最小会训练误差J(Θ)。
2.利用测试集计算测试误差。
这里“利用测试集计算测试误差”有2种方法(计算公式见图):
1)直接由公式计算Jtest(Θ)。
2)先计算单个测试示例的误分类率(0/1错分率),用误分类率来定义测试误差。
6.1.3 Model Selection and Train/Validation/Test Sets
讨论模型选择问题以及如何将数据分为3组:训练集、验证集和测试集。
训练集误差是不能正确预测出假设是否能很好地拟合新样本。
一般的模型选择问题步骤:
1.对所有模型分别求训练误差的最小值,从而得到多个对应不同模型的参数向量Θ。
2.针对每个模型分别求测试误差的最小值Jtest(Θ),确定多项式次数d。
3.选择测试误差最小的模型作为最后的模型。
但是,如果将上述得到的模型再作用于训练集上,是不能预测出这个假设推广到新样本上的效果。因为这些参数能够很好地拟合训练集,但对于其他新样本而言就不一定那么好。因此,用测试集来拟合参数不能公平地预测出假设函数在遇到新样本时的表现。
通常将数据集分为3个部分:训练集、交叉验证集(验证集、CV)和测试集。
训练误差、交叉验证误差、测试误差。
下面用训练误差、交叉验证误差、测试误差来求出适合的模型。
1.对所有模型分别求训练误差的最小值,从而得到多个对应不同模型的参数向量Θ。
2.针对每个模型分别求交叉验证误差的最小值Jcv(Θ),确定多项式次数d。
3.选择交叉验证误差Jcv(Θ)最小的模型作为最后的模型。
4.利用测试集评价模型的表现。
一句话,训练集求出特定的模型参数、交叉验证集求出最优的模型、测试误差衡量模型的泛化效果。
6.2 Bias vs. Variance
6.2.1 Diagnosing Bias vs. Variance
讨论有关偏差(欠拟合)和方差(过拟合)的问题,并弄清楚怎样评价一个学习算法,弄清一个问题是和偏差有关还是和方差有关,从而改进学习算法的效果。
对于一个具体的问题,对于这个问题,假设是整式多项式。下图画着训练误差和交叉验证误差大小随假设的次数变化的规律:
训练误差随着拟合公式的次数的增大不断增大而减小。交叉验证误差随着拟合公式的次数的增大先减小后增大,中间有个极值。
偏差对应图中最左侧,训练误差(Jtrain(Θ))将会较大,交叉验证误差(Jcv(Θ))≈Jtrain(Θ)。
方差对应图中最右侧,训练误差(Jtrain(Θ))将会较小,交叉验证误差(Jcv(Θ))»Jtrain(Θ)。
做道题:
6.2.2 Regularization and Bias/Variance
深入探讨偏差和方差问题,探讨正则化如何影响偏差和方差。
如何选择合适的λ。
先看对J(Θ)、Jtrain(Θ)、Jcv(Θ)和Jtest(Θ)的定义:
对于特定J(Θ)(除了λ,其他都不变),选择合适的λ:
1.设置λ为一系列值(可以以等步长增加),比如0、0.01、0.02...10.24。
2.对于每个特定的λ,利用训练集分别计算minΘ(i)J(Θ(i))对应的Θ(i)值。
3.利用交叉测试集计算不同λ下推出的Θ对应的Jcv(Θ),挑选最小的Jcv(Θ)对应的Θ和λ。图中是Jcv(Θ(5))。
4.利用测试集对挑选出的Θ的性能进行评估。
做道题:
答案:D
偏差与方差和λ的关系(训练误差Jtrain(Θ)和交叉验证误差Jcv(Θ)随λ变化情况):
λ由小到大变化,Jtrain(Θ)不断增大(开始是十分拟合训练集,慢慢变得不太拟合,最后完全走样)。Jcv(Θ)先减小后增大(开始不太拟合验证集,正则化合适的时候,泛化能力变强,开始拟合验证集,但随着λ增大,又开始走样)。其实,图中坐标系右边对应的是偏差情况,左边对应的是方差情况,中间有个合适值,这个合适的λ就是所求。这里的图像是理想化的,实际会有一些噪音的存在。
6.2.3 Learning Curves
可以绘制学习曲线来检查学习算法,从而改进算法的表现或效果。
样本数量少,训练误差小,但交叉误差大。样本越多,适应新数据的能力越强(泛化能力增强),但训练样本越难完美拟合。总体来说,交叉验证误差和训练误差随训练集m的变化情况如图所示:
下面来看一下当算法处于高偏差或者高方差的时候,学习曲线的样子。
处于高偏差,训练误差随着训练样本的增加而增大,后期平缓;交叉验证误差会减小,经过一个值后开始平缓,但还是较大。训练误差和交叉验证误差最终会较大,并且相互接近。增大训练样本数量对改变高偏差没有作用。
处于高方差,训练误差随着样本的增加而增大,但总体还是很小;交叉验证误差会减小。前期,交叉验证误差和训练误差之间的差距(gap)较大,但随着训练样本的明显增多,训练误差和交叉验证误差还是会相互靠近,之间的差距不断减小。增加样本数量对改变高方差有明显作用。
做道题:
答案:处于高方差的情况。
6.2.4 Deciding What to Do Next Revisited
前面已经学习了如何评价一个算法,模型选择问题,偏差和方差的问题。讨论这些诊断法是如何帮助判断哪些方法可能有助于改进学习算法的效果。
回到前面的问题,用线性回归模型分析房价。
1.适合于处于高方差的情况。交叉验证误差应该比训练误差大得多。
2.适合于处于高方差的情况。
3.适合于处于高偏差的情况。
4.类似于增加特征,适合于处于高偏差的情况。
5.适合于处于高偏差的情况。
6.适合于处于高方差的情况。
下面总结前面的内容,并看看它们与神经网络的联系。介绍一些为神经网络选择结构或者连接形式的技巧和经验。
小的神经网络隐藏层数量较少或者隐藏单元数量较少,缺点是容易欠拟合,优点是计算量较少。
大的神经网络隐藏层数量较多,隐藏单元较多,缺点是容易过拟合,计算量较大,但性能要好。使用一个经过正则化的大型神经网络的效果要比一个小的神经网络更加好。可以使用正则化手段来解决过拟合。关于隐藏层数量的选择和隐藏单元的选择,可以用同一交叉验证集进行验证,选择误差最小的情况。
以上学习了偏差、方差以及学习曲线为代表的诊断法如何帮助高效地使用学习算法。
做道题:
答案:增加隐藏层或者隐藏单位类似于增加假设的参数Θ次数。具体参考"7.2.1 Diagnosing Bias vs. Variance"的内容。
习题:
high bias
CD
BD
CD
BCD