image

  • 当机器学习得到的模型有较大误差时,从哪个方面入手修改。以预测房价为例,我们已经完成了正则化线性回归并得到了参数向量,但当我们放到新的样本集中进行测试时发现产生了巨大的误差,此时我们有以下几种改进方法:

(1)使用更多的训练样本。
(2)选用更少的特征集,只选用特征集的子集
(3)加入其他的特征(当前特征不是很有效)
(4)增加高阶的多项式特征
(5)增大或减小正则化参数,避免过拟合或者欠拟合

好多人在改进模型时,会随便选一种方法,画上几个月研究,最后却走上了一条不归路。这是因为改进方法不应该是凭感觉随便选的,下边我们就来探讨下如何判断用哪种方法改进算法

  • 下边我们引入学习诊断法,即先测试某种算法是否有用,若算法没用再判断要改进算法效果需要尝试哪种方法

新的假设函数评估方法

  • 在前边,我们选择令训练误差最小化的参数,来确定假设函数的参数。但是这样做,只能确定参数在旧的数据(训练集)中的误差,无法判定参数是否具有很好地泛化能力(能否应用到新的数据当中)
  • 因此,我们采用一种新的假设函数泛化能力的评估方法,将数据集分为两部分:训练集和测试集。通常典型的分割方式是7:3;而且要注意随机选择70%作为训练集(当然数据充分的随机分布的话,按顺序选前70%也无所谓)

(1)在线性回归中,我们首先通过最小化训练集的误差,得到学习参数,然后把训练得到的参数放到测试集中,用平方误差法计算测试误差
image
(2)在逻辑回归(分类问题)中类似。只是我们计算误差时采用0~1假设函数:当预判y>0.5时实际y=0、当y<0.5时实际y=1,函数得1;当预判和实际相符时得0
image

  • 若评估得到的测试集误差太大,要重新学习模型

模型选择问题

  • 如何确定假设函数最合适的多项式次数,怎样选用正确的特征构造学习算法,怎样选择合适的正则化参数,这就是模型选择问题
  • 我们可以将数据分为三组:训练集、验证集、测试集,来解决模型选择问题

如何选择合适的多项式次数

  • 重温过拟合:把参数调整到非常拟合训练集,保证了在训练集上拟合的很好,但是不能保证训练集外的新样本预测结果如何
  • 为了选择合适的多项式次数,我们引入一个新的多项式次数参数d。当我们把数据只分为两部分时,看一下思路:

(1)对d不同的每个模型最小化训练误差,得到假设函数的参数向量
(2)对每个假设函数求测试集误差,选出测试集误差最小(最拟合测试集的),这个模型的多项式参数d就是我们要的
image

  • 但是这样做,还是不能说明我的假设能推广到一般结果(泛化性)。我们评价假设函数的参数也用测试集,找多项式次数参数d也用测试集。也就是说,我们本来就是用测试集拟合的假设函数,这时再用测试集看测试误差一般就比较小。即结果可能很好地拟合测试集,但是对新的样本就不知道了
  • 为了解决这个问题,我们进一步将数据分为了三部分:训练集、验证集(交叉验证集)、测试集,比例大致是6:2:2

image

并定义了训练误差、交叉验证误差、测试误差
image

  • 与传统的用测试集同时评估假设函数参数、找多项式参数d不同。我们使用交叉验证集选择多项式参数d,使用测试集评估假设函数的参数

image

我们先使训练误差最小化,得到假设函数的参数向量;然后在交叉测试集计算不同多项式参数d对应模型的误差,选择误差最小的多项式参数d;最后使用测试集来评估所选模型的假设函数的泛化误差。

  • 值得一提的是,尽管前边只分数据集和测试集的方法已经过时了,但是由于它在样本量较大的时候准确性还可以,所以还有许多人这样做

算法不理想的原因

  • 若算法不理想,可能有两种原因:方差比较大或者偏差比较大,即过拟合或者欠拟合。判断算法是偏差还是方差有问题,对于改进算法效果非常重要

image

  • 如图,两条曲线表示训练集误差和验证集误差(平方误差),横坐标表示多项式参数d。联系欠拟合和过拟合,当多项式次数d增大时,训练集误差减小,甚至可能到0;而交叉验证集误差先变小后变大(假设5次是最合适的)。

image

  • 当我们得到的模型交叉验证误差和训练误差都很大,如何判断是高方差还是高偏差?

(1)上图左端是高偏差:模型使用了过小的多项式次数(d)。高偏差对应欠拟合,两个误差都很大,很接近(连训练集都拟合得不好)
(2)右端是高方差:模型使用了较大的多项式次数(d)。高方差对应过拟合,训练误差小,验证集误差大,两个误差的差距比较大

正则化和偏差方差的关系

  • 算法正则化可以防止过拟合,正则化过度又会导致欠拟合。而偏差和方差与欠拟合和过拟合关系密切,我们来探讨下方差偏差和欠拟合间的关系
  • 我们通过正则化项让参数尽可能小(不惩罚参数0)。

(1)若正则参数非常大(如1000),参数被大大惩罚,参数值接近0,成了一条水平直线,这就是高偏差、欠拟合
(2)若正则化参数太小(接近0),参数惩罚不够,过度追求拟合训练集数据,就成了过拟合、高方差

怎样自动选择出合理的正则化参数

image
image

  • 首先,我们重新定义下代价函数j。在一般的代价函数中,误差定义为训练集数据和模型预测值的平均平方求和,再加上一个正则化项。在这里,我们将(训练误差应该还有正则化项吧)验证误差和测试误差都定义为平均误差平方和,不再含有正则化项
  • 自动选取正则化参数的方法:

(1)选取不正则化的情况(正则化参数为0),以及一些我想要尝试的正则化参数值。如这里我选取0.01,0.02,...,10.24,将步长设置为两倍增长。这样一共有13个模型。
(2)对每个模型最小化代价函数(带正则化项的代价函数),得到对应的参数向量
(3)然后用交叉验证集评估得到的假设函数(不带正则化项),选出平均平方误差最小的,测试该模型在训练集上的平均误差平方

本质上,仍然使用交叉验证误差计算不同正则化参数对新样本的拟合能力,用测试集评估模型的泛化能力

  • 上边要着重理解下为啥有时候带正则化项,有时候不带正则化项。求参数向量时,需要正则化项惩罚参数,所以带;后边都是进行评估,所以不带
  • 下边看一下,改变正则化参数的值后,交叉验证误差和训练集误差(都不带正则化项)的变化情况。正则化参数过小,惩罚力度不够,训练集误差小,验证集误差大,高方差、过拟合;正则化参数过大,成了水平直线,训练集、验证集误差都大,高偏差、欠拟合

学习曲线

  • 结合前边学的所有概念,我们建立模型诊断法:学习曲线。来诊断学习算法处于偏差还是方差问题,还是两者都有

image

  • 我们来看一下,当我们改变正则化参数时,交叉验证误差和训练集误差发生怎样的变化。这里值得注意的是,代价函数原本包含正则化项,但是在这里训练误差和交叉验证误差定义为不包含正则化项。
  • 上图可见,当正则化参数小时,惩罚力度不够,曲线千方百计拟合训练集,训练集误差小,验证集误差大,为过拟合、高方差;当正则化参数大时,惩罚过大,变成水平直线,训练集、验证集误差都变大,为欠拟合、高偏差
学习曲线
  • 学习曲线可以帮助观察算法是否处于偏差、方差状态,从而进一步改进算法效果
  • 在画学习曲线前,我们先来了解下训练集、验证集的平均误差平方和随样本总数m的变化。

image

(1)当m很小时,我们能够很容易的拟合到每一个数据,训练集误差为0;当m变大时,我们要拟合到每一个数据就越发困难,平均训练误差逐渐增大
(2)对于交叉验证误差而言,当样本数量m小时,模型的泛化程度必定不会太好,交叉验证误差变大;随着数据量增多,泛化表现越来越好,交叉验证误差变小

当处于高偏差或者高方差时,学习曲线是什么样子

image

  • 当处于高偏差、欠拟合时,例如我们用一条直线拟合模型。当样本数量逐渐变大时,函数泛化能力增强,但由于直线不可能很好地拟合,所以交叉验证误差变小,但是逐渐水平;而只有一个样本时,很好拟合,此时训练机误差很小,随着m增大不好拟合,训练集误差变大,接近交叉验证误差。

总之,高偏差时交叉验证、训练误差都很大;而且当我们持续增大样本数量m时,交叉验证误差逐渐变为水平不再降低。因此看清楚算法处于高偏差时很有意义的,他可以避免我们浪费时间去找更多数据(高偏差收集更多数据对于提高模型泛化能力没有意义)
image

  • 当处于高方差、过拟合时,当样本数量m较小时,会拟合的非常好,训练误差很小;当m增大,由于数量多毕竟拟合吃力,所以训练误差逐渐变大,但还是很小。而交叉验证误差很大,即便通过增大样本数目提高模型泛化能力有一定的下降,但是仍然维持在较大的水平。

总之,在高方差中,增大样本数量对于提高算法效果是有帮助的。看清楚处于高方差也有意义,能帮助我们决定是否有必要增加更多样本数据

  • 当我们发现算法没有达到预期的效果时,通常就是画出学习曲线,看是偏差还是方差的问题,进一步判断哪些方法是有效的,哪些方法是徒劳的

image
(1)使用更多的训练集数据,对于高方差有帮助,对高偏差没有意义。
(2)少选几种特征,对高方差有效,对高偏差没有意义(少选特征就相当于减少了自变量的数量嘛,曲线就不复杂了,进而不会过拟合)
(3)选用更多的特征,对于高偏差有效,对于高方差无效(相当于增加自变量,函数更加复杂)
(4)增加多项式次数,对于高偏差有效,对于高方差无效
(5)增大正则化参数可以修正高方差,减小正则化参数可以修正高偏差

前边内容与神经网络的联系

image

  • 一般来说,隐藏单元少、只有一层的神经网络比较简单,因为神经元比较少,参数会比较少,而且计算量比较小,但是容易出现过拟合

相反的,隐藏单元多或者隐藏层多的神经网络比较复杂,由于神经元多,参数也多,而且计算量大,容易出现过拟合

  • 但是参数多、计算量大不是我们考虑的主要问题,而且过拟合可以通过正则化解决。因此,使用大型神经网络并采用正则化解决过拟合,比用小型神经网络效果更好
  • 在选择隐藏层数时,一般默认选择一个隐藏层

无欲则刚
76 声望15 粉丝