首页 > Python机器学习 阅读数:36

机器学习中是如何处理误差的

我们知道,同一个问题,可采用多种机器学习模型来解决,那如何评价这些模型的好坏呢?这时,就需要构建一系列“靠谱”的标准。因此,提及机器学习,性能评估是一个绕不开的话题。

训练误差与测试误差

性能评估,主要用于反映所构建学习模型的效果。在预测问题中,要评估模型的性能,就得将预测结果和真实标注进行比较。对于监督学习而言,假设我们有 m 个样本,其中有 a 个被模型错误分类,那么一种简易的评价标准—分类错误率(error rate)可以定义为 a/m。

通常,我们将学习模型在训练集上的误差称为训练误差(training error),将在测试集上的误差称为测试误差(test error),而将在新样本上的误差称为泛化误差(generalization error)。这里的“泛化”,是指模型在新情况、新样本上的性能表现,你也可以把它理解为“通用”。

显然,训练模型的终极目的,不仅是希望它在训练集上表现很好,还希望它在新环境中对新样本表现也不逊色。机器学习算法对于新样本的适应能力,称为泛化能力。

这就好比,如果在家里我们把孩子训练得服服帖帖,事事符合我们的预期,这可能并非好事,因为孩子最终还是要走出家门,踏上社会。如果在新环境下,孩子还能表现得适应能力很强(用机器学习的术语来说,就是泛化能力强),这才是我们想要的。

然而,在新样本到来之前,我们根本不知道它是什么模样。因此,借助所谓的“新样本”,提升模型的泛化能力,只是一个美好的梦想。通常,我们能做的就是,把所能拿到的数据一分为二,一部分用作训练,一部分用作测试。这里用作测试的集合,由于不参与训练,因此在功能上相当于新样本。

训练模型时,一开始的训练误差和测试误差都比较高,随着训练的次数增加(模型的复杂度也因此提升),训练误差会越来越小,但测试误差可能会越来越大,我们需要平衡(tradeoff)训练误差和测试误差,让它们达到一个取舍均衡点,如图 1 所示。

平衡训练误差与测试误差
图 1:平衡训练误差与测试误差

为什么一开始训练误差和测试误差都很高,而后来二者会逐渐分道扬镳呢?这就涉及机器学习中的两个重要概念:欠拟合(underfitting)和过拟合(overfitting)。

过拟合和欠拟合

先说什么是欠拟合。欠拟合的概念比较容易理解,就是样本不够,训练不精,连已有数据集(即训练集)中的特征都没有学好的一种表现,当它面对新样本做预测时,自然预测效果也好不到哪里去。有时,我们也把欠拟合称作高偏差(high bias)。

比如说,在图 2 的右下图中,如果仅把样本中的“4 条腿”当作青蛙的特征,这是“欠缺”的,这样分类器就会把所有 4 条腿的动物(比如壁虎)也当作青蛙,这显然是错误的。

过拟合与欠拟合的直观对比
图 2 过拟合与欠拟合的直观对比

那什么是过拟合呢?过拟合是指,模型“一丝不苟”地反映训练数据中的特征,从而在训练集中表现过于“卓越”。但这样一来,它对未知数据(新样本)的预测能力就会比较差,稍有“风吹草动”,分类器就不认识了。因此,有时我们也把过拟合称为高方差(high variance)。

这里的高方差是指,模型在一个地方(训练集)很行,换个地方(测试集)就不行了,这说明模型的泛化能力很差。比如在图 2 的右上图中,过拟合的模型学习得太“入戏”,它会把青蛙背上的斑点当作青蛙的特征。于是,新来的样本青蛙仅仅由于背上没有斑点(不同于训练数据),就被判定为非青蛙,这岂不是很荒诞?

此外,其实所谓的训练数据,本身也是有误差的。过于精准的拟合,可能会把这些数据的误差当作特征来学习,从而导致在训练集上拟合得越精确,面对新样本时预测的效果反而越糟糕。

欠拟合是比较容易克服的,比如在决策树算法中扩展分枝,再比如在神经网络中增加训练的轮数,这样就可以更加“细腻”地学习样本中蕴含的特征。相比而言,要克服过拟合就困难得多。发生过拟合的一个重要原因是,模型过于复杂。而我们需要的是一个更为简化的模型,学习蕴含在数据中的特征。这种“返璞归真”的纠正策略,就是正则化(regularization)。

模型选择与数据拟合

从前面的图 1 中可以看出,如果我们一味地追求降低训练误差,那么所选模型的复杂度只能越来越高。因为只有这样,模型才能有较强的数据拟合能力。但“过犹不及”,当模型足够复杂时,模型中的参数也会过多,发生过拟合的概率就会上升。在选择模型时,我们需要遵循一项基本原则:避免过拟合并提高泛化能力。

下面就以多项式函数的拟合问题为例,来说明模型选择与数据拟合的关系。对于这样的一个训练数据集 T={(x1,y1),(x2,y2),...,(xn,yn)},其中 x是样本的观测值(即特征),y是对应的输出观测值(i=1,2,…,n)。

现在我们的任务是,用 m 次多项式函数来拟合这些数据(由于观测值是连续值,所以这是一个回归任务而非分类任务)。此处的 m 是可变值,比如说一次多项式(m=1)、三次多项式(m=3)等。我们的目标是,选出一个对训练数据有较好拟合且能对新样本有较好预测能力的多项式函数。

设 m 次多项式的一般形式为:

对于以上公式,解读如下:
  • 目前有 m+1 个特征:x0,x1,x2,...,xm
  • 对应有 m+1 个需要学习得到的权值参数:w0, w1,w2,…,wm
  • 这些参数的正与负、大与小,就代表我们选择特征的“态度”,如果某个 w是很大的值,则说明它对应的特征 xi 很“位高权重”,值得重视;
  • 如果某个 w值接近于 0,就表明与这个权值相关联的特征 xi“人微言轻”,可有可无;
  • 有意识地让某些权值接近于 0,从而抛弃某些特征的训练方法,叫作权重衰减(weight decay),它在某种程度上避免了过拟合;

现在的问题是,如何学到“这是 m+1 个参数”呢?常用的策略之一就是最小二乘法(Method of Least Squares,简称 MLS)。

通常,拟合出来的函数值 f(xi,w) 和预期标签 yi 之间是有误差的,即残差(residual):

ei=f(xi, w)-yi


1829 年,伟大的数学家高斯已经证明,在误差 e0, e1,..., en 独立同分布的假定下,最小二乘方法拥有一个优势:在所有无偏线性估计类中方差最小(见高斯-马尔可夫定理,Gauss-Markov Theorem)。即残差平方和最小时,拟合函数 f(x, w) 和预期标签 y 相似度最高。

即当下列公式中的 L(w) 取得最小值时,w0, w1,w2,…,w便是最优的拟合参数。