我们很多时候需要对已有的机器学习系统进行改进。改进的方法有很多(如下图),但是我们怎么才能选择一个有效的方法?这章会介绍“机器学习诊断法”,一个测试系统的存在问题的方法,告诉你系统所存在的问题,你怎么去改进才有意义。
1、假设评价
怎么评价你的算法,学习得到假设。我们之前的学习过拟合知道,训练误差最小的假设并不一定是好假设,有可能会是一个过拟合假设。当特征数量较多时,我们无法再像一个特征一样画假设函数图h(x)来观察假设函数的好坏。之前的课程我们有学习到,通俗地讲过拟合就是无法对新的样本泛化,所以据以这点我们可以用一种较通用的“外部检验”的方法来评价假设。
①随机选取70%的样本数据作为训练模型的训练数据train样本,剩下30%的样本数据作为检验模型的test数据。
②利用训练数据train样本,学习得到参数组。
③将train得到的参数组代入test数据,得到假设函数的预测误差(分类误差)。
2、模型选择和训练、验证、测试集
对于一个数据集最合适的多项式次数,怎样选择正确的特征来构造学习算法,或者你需要选择学习算法中的正则化参数lambda,你该怎么做?这类问题被叫作模型选择问题。
在学习“过拟合”的时候我们发现,训练样本的误差不能评价该假设对新样本的拟合好坏。具体来说,就是你用这些训练数据求解得到的参数组代入假设中,得到的假设不一定对新的样本具有多好的泛化能力。
为了解决这个问题我们首先把数据集分成三部分:训练集、验证集、测试集。经典比例为60%、20%、20%(比例可以调整)。具体过程:1)用训练集用于求解多项式假设参数组,2)用验证集交叉验证确定多项式的次数,得到假设模型,3)测试集用于评价假设,得到模型的泛化能力。
计算训练误差、交叉验证的训练误差、测试误差的公式:
3、诊断偏差与方差
在学习如何区分偏差问题还是方差问题时,我们先来回顾一下之前学习的欠拟合和过拟合的区别。下图左边为选择的多项式次数过低,得到的假设函数无法很好地拟合样本,称为“欠拟合”。同理,下图右边为选择的多项式次数过低,得到的假设函数非常好地拟合样本,但是缺乏泛化能力,称为“过拟合”。
在前面我们知道了训练误差和交叉验证误差。我们可以画出训练误差和交叉验证误差随多项式次数变化地趋势图,如下
我们希望得到的算法,训练误差和交叉验证误差都尽量小。下图,当训练误差和交叉验证误差都很大时,对于的就是高偏差问题(欠拟合);当训练误差很小,但交叉验证误差却很大时,对于的就是高方差问题(过拟合)。
4、正则化和偏差、方差
已经知道算法正则化可以有效地防止过拟合,但是正则化和偏差、方差又有什么关系呢?
1)正则化和偏差、方差的关系:如下图,这是一个带正则化项的线性回归模型,左边当正则参数过大时,成为欠拟合问题即偏差问题;当正则参数过小时,成为过拟合问题即方差问题。
2)如何自动选择一个合适的正则参数的值?
前面我们学习了训练误差、验证误差、测试误差的计算公式如下图,我么可以知道训练误差、验证误差、测试误差是不带正则项的误差。
选取一系列正则参数的值进行尝试,每个值代入一个模型,计算得到交叉验证误差,选取交叉验证误差最小的正则参数值。最后利用交叉验证集来拟合参数,这就是验证数据的作用。
3)下图是偏差、方差与的关系图:当过小时,正则项几乎为零,过拟合现象,即高方差;当过大时,高次项参数为零,呈一条直线,欠拟合现象,即高偏差。减小可以修正高偏差,增大可以修正高方差。
5、学习曲线
学习曲线是一种用于判断某一个算法是否处于偏差、方差问题特别好的工具。
一般拟合效果较好的算法如下图,以二项式为例当训练样本量足够小时,模型能很容易拟合样本数据,训练误差会很小。当训练样本数量越大,训练误差会增大。而当训练样本量足够小时,训练模型泛化能力差,交叉验证误差会很大;随训练样本数量越大,交叉验证误差会减小。我们能可以通过这样的学习曲线较好地判断偏差很方差问题。
1)如下图当算法出现高偏差情况时,当训练样本数量大于某个值时,交叉验证误差和测试误差几乎呈直线变化趋势,并差距很小。增加样本数量无法使得交叉验证误差和测试误差有很好的改善,即大量增加样本数量,交叉验证误差和测试误差变化不大,可以判断算法出现高偏差问题。不需要把时间浪费在收集更多训练数据上。
2)如下图当算法出现高方差情况时,交叉验证误差和测试误差差距很大。增加样本数量使得交叉验证误差和测试误差的差距变小,即大量增加样本数量,交叉验证误差和测试误差变化较大,并不断靠近,可以判断算法出现高方差问题。需要把时间发在收集更多训练数据上。
6、总结
当诊断出算法为高偏差还是高方差问题之后,你可从下面几个方向入手解决。
高偏差问题:
1)增加特征:选择地训练特征过少
2)增加多项式特征:类似1,增加多项式地次数
3)减小值
高方差问题:
1)增加训练样本
2)减少已选特征
3)增大值
以神经网络为例,如何选择神经网络的结构和连接方式。下图三个神经网络模型,左边的神经网络模型隐藏层简单,隐藏单元少,特征参数少,计算容易,但容易出现“欠拟合”;第二、三个为比较大型神经网络模型,隐藏层单元数多或隐藏层数量多,计算量大,拟合效果好,但容易出现“过拟合"。这时我们需要加入正则化,解决过拟合问题。