机器学习中改进模型的方法

在Coursera机器学习的第六周课程中,讲到了如何去改进模型,
这也是自己在学习实践中比较困惑的一块内容。因此做个学习记录。


首先Andrew Ng给出了6个常用改进方法
1.Get more training examples, 适用于高方差的情况
2.Try smaller sets of features, 适用于高方差
3.Try getting additional features, 适用于高偏差问题
4.Try adding polynomial features, 类似于上一点,适用于高偏差
5.Try decreasing λ, 适用于高偏差
6.Try increasing λ, 适用于高方差

(ps:这里的λ是指正则项前面的系数)
这几个方法说起来很简单,但是在什么情况下用哪一种方法确是自己原先不清楚的。
高方差和高偏差问题会在下文中重点介绍。


然后课程视频中还稍微提了下,评估机器学习算法的性能:
通常将数据集按3:1:1的比例划分训练集、交叉验证集、测试集
为什么要将数据分成三部分,而不是两部分呢?
在课程视频后面部分解释了了,训练的时候使用训练集数据,然后用交叉验证集来做模型选择,最后使用测试集来评估模型的泛化能力。

Bias vs. Variance

当学习算法预测的结果不理想时,基本可以分为两种情况:
1.欠拟合(高偏差)
2.过拟合(高方差)

从图中可以看出,total error由variance和bias构成(误差的构成还包括随机噪声,一般情况下不讨论噪声),图中描绘了偏差和方差随模型复杂度的变化。
引用一张老外的图,以投掷飞镖为例

在模型刚开始训练的时候(左下图),射的不准,但是还是比较稳定的发挥。从生活中来看这钟现象是不合常理的。不过从模型的角度看是合理的,模型在原始阶段预测的不准,由于没有经过有效的训练,往往会犯同样的错误(低方差)。此时模型还是欠拟合的,即高偏差问题。
当模型经过不断训练到后期(右上图),模型预测已经有一定准确性了(低偏差),但是在不同的数据集上可能不太稳定,这大概就是过拟合了,即高方差问题。需要注意的是高方差形容的是在模型在多组随机样本上训练结果的差异性。
左上图,是最理想的训练结果。右下图则是最糟糕的情况。


那么如何来判断自己的模型是处于高偏差还是高方差呢?
针对开头提出的六条常用改进方法,来一一描述。
1.Get more training examples
这个是我最早的困扰,当模型效果不好的时候搞不清自己的训练集是否足够。
Andrew Ng给出的方法是绘制学习曲线。
学习曲线(Learning Curves)
学习曲线用来在二维面上表示模型误差与训练样本数量之间的关系。
当训练样本很少的时候,训练误差可能很低,而在验证集上的误差较大,这是由于小样本学习到的信息很有限。而当训练样本增大后,训练误差也可能会增大(很难完美的拟合数据),但验证集上的误差则会减少(或是接近训练误差),此时模型的泛化能力得到了提高。
(1)高偏差情况的学习曲线

如果模型的存在高偏差问题,那么最终趋于平衡的误差会较大,这意味着此时继续增加样本对模型训练也起不到帮助了。
(2)高方差情况的学习曲线

如果模型存在高方差的问题,可以看出随着样本的增加训练误差和验证误差的变化趋势是一样的。但是训练误差性对来说较小,且训练误差和验证误差有一定间距。
这种情况增大数据集可能会有帮助,因为随着数据的增大,两者的误差曲线可能会进一步的靠近。
2.Try smaller sets of features
3.Try getting additional features
4.Try adding polynomial features
2、3和4还是有区别的,暂且认为3和4的性质差不多吧,因为课程中没有对2,3做详细解释。
视频中给出了下图。随着模型复杂度的提高,训练误差和验证误差大致会呈现下图的状况。

在高偏差的情况,训练误差和验证误差较为接近,且都比较大。
在高方差的情况,训练误差较小,而验证误差较大。
感觉这种比较训练误差和验证误差的方法主要用来检查是否过拟合(高方差)的情况。
5.Try decreasing λ
6.Try increasing λ
正则化主要是为了避免过拟合所引入的。
这里对正则化中的系数λ的选择做了讨论:
当λ过小(甚至接近0),此时正则化起到的作用非常小,模型有很大的可能会出现过拟合(高方差)。
当λ过大时,由于正则化的起到的作用多大,则模型很可能欠拟合(高偏差)。
课程中给出了一种λ的选择办法,将不同的模型带入到验证集,并且使用不同的λ。从最终结果中选出一个最理想的模型。并且可以将最终选出的模型放到测试集上,进一步对模型的泛化能力做出评估。


参考链接:
https://www.zhihu.com/question/27068705/answer/35151681
http://scott.fortmann-roe.com/docs/BiasVariance.html