美文网首页
机器学习笔记(1)——模型选择与评估

机器学习笔记(1)——模型选择与评估

作者: _Yee | 来源:发表于2018-02-09 20:30 被阅读0次

我们知道,模型是由算法基于训练集学习得到的,然而,机器学习算法有很多,不同的算法会学到不同的模型,即使是同一种算法,根据设置的参数不同也会学到不同的模型。本文要讲的内容就是如何对这些模型评估,以选择一个性能最好的。

训练误差和泛化误差

以分类问题为例,通常,我们把模型分错类的样本数占训练集总样本数的比例称为错误率(error rate),比如训练集大小为N,分错类的样本数为m,则错误率为

相应的,准确率(accuracy) 显然,准确率+错误率=1

更一般地,我们将模型的预测值与样本的真实值之间的差异称为误差(error),训练集上的误差称为训练误差(training error),新样本上的误差称为泛化误差(generalization error)测试误差(test error)
训练误差和泛化误差分别反映了模型在训练集和新样本上的预测能力,理想模型的是既有较低的训练误差,同时也有较低的泛化误差。但是,我们现在手里只有训练集,并不知道新样本长什么样子,所以实际能做的就是让训练误差最小化。
那么,是不是说训练误差越小,甚至训练误差为0的模型,就是最好的模型呢?答案是否定的。

过拟合与欠拟合

每种事物都有自身的普遍性质特殊性质
拿猫来打个比方,一条尾巴,四条腿,发出“喵喵”叫,这属于猫的普遍性,但每只猫的毛色是不尽一样,有的是纯色,有的是渐层,有的是三花等等,这属于猫的特殊性。
我们希望能从训练集中学到出所有样本(包括未知的样本)的普遍性质,这样才能对未知样本做出好的预测。然而,如果一个模型学习能力太强的话,可能会把训练样本中的一些特殊性质当成所有样本的普遍性质,这样会造成模型对训练集预测得很好,但对未知样本预测得很差的现象,这种现象称为过拟合(over-fitting)。与此相对的是,模型的学习能力太弱,对训练样本的普遍性质都学不到,就会造成欠拟合(under-fitting)

我们通过上图来直观的理解过拟合和欠拟合。假设,我们通过左边两只毛色为纯色的猫作为训练样本得到了一个模型,用这个模型来预测新样本是否是猫。当这个模型过拟合时,可能会认为猫的毛色必须纯色的,所以当有一只毛色不纯的猫作为新样本时,模型会错误地预测它不是猫。当这个模型欠拟合时,可能会认为凡有四条腿的动物就是猫,所以模型会错误地把狗也预测成猫。

避免欠拟合比较简单,由于欠拟合是模型过于简单造成的,我们可以增加模型的复杂度,例如在线性模型中增加多项式的次数、在决策树中增加叶节点数、在神经网络中增加训练轮数等。但是,当模型的复杂多过大时,就会发送过拟合的现象,模型复杂度与误差的关系如下图所示: 引用自《统计学习方法》

可以看到,当模型很简单时,即复杂度小时,训练误差和测试误差都很高,这时对应的是欠拟合,随着复杂度的增加,训练误差会越来越小并趋向于0,而测试误差会先减小达到一个最小值,然后又继续增大,这时对应的是过拟合。我们的最终目标是要选择一个复杂度适当的模型,避免发送过拟合,使得其测试误差最小。那么该如何选择模型并评估其的好坏呢?

模型选择

我们根据模型的泛化能力来评估模型的好坏,但由于没有新样本,无法知道模型的泛化能力,为此,可以从训练集中划分一部分出来作为测试集,然后以模型在测试集上的测试误差作为泛化误差的近似。下面是几种常用的划分方法。

  • 留出法(hold-out)
    留出法将数据集D划分为训练集S和测试集T,并且S与T互斥,即

    在训练集上训练出模型,然后用模型在测试集上做预测,得到测试误差来作为对泛化误差的估计。
    需要注意的是,训练集和测试集的划分要尽可能保持数据分布的一致性。例如,将数据集中70%的样本划分为训练集,剩下的30%划分为测试集,若原数据集中正样本与负样本的比例为1:1,那么在训练集和测试集中的正负样本也应该保持这样的比例。因为若训练集和测试集中样本类别的比例差别很大,则会引入额外的偏差从而对最终结果产生影响
    另外,单次使用留出法得到的估计结果往往不够可靠,一般需要采用多次随机划分,针对每一次不同的划分都进行训练和预测,然后取平均值作为最后的评估结果。
  • 交叉验证法(cross validation)
    交叉验证法又叫做k折交叉验证(k-fold corss validatoin),它将数据集D划分为k个大小相同的互斥子集,即

    然后用k-1个子集训练模型,用剩下的子集测试模型,将这一过程对可能的k种选择重复进行,从而得到k个测试结果,最后返回这k个测试结果的均值。同样,对数据集的划分应该尽可能保持数据分布的一致性。k最常用的取值有5、10、20等,下图给出了当k=10时的交叉验证 引用自周志华教授的西瓜书 特别地,如果数据集D中有N个样本,若k=N,就的到了交叉验证的一个特殊情形,称为留一交叉验证(leave-one-out cross validation)。这种方法往往在数据集比较小的情况下使用,当数据集比较大时计算开销太大。
  • 自助法(bootstrapping)
    我们希望评估的是用整个数据集D训练出的模型,但留出法和交叉验证法都会保留一部分样本用来测试,使得实际用来训练的样本数量比D要小,这必然会对结果造成一些偏差。如何减小这种偏差呢?自助法就是一个比较好的解决方案。
    自助法的思想是对原数据集D进行有放回采样,即每次随机从D中采集一个样本,然后再将其放回,重复N(N为数据集样本总数)次后将得到一个与原数据集大小一样的新数据集D'。显然,D中有部分样本会在D'中重复出现,而有部分一次也不出现,我们可以用D'作为训练集,D-D'作为测试集。由于此时训练集与原数据集大小一样,所以可以减小规模不同带来的偏差。
    一般来说,在数据量较小时用自助法,而数据充足时用留出法或交叉验证法。

正则化(regularization)

模型选择除了上面提到的几种方法,还有一种方法是正则化。
假设在一个回归问题中,给定数据集:

学习到的模型为: 定义模型h在数据集上的训练误差为: 上式也叫做模型的损失函数(loss function),我们的目的是最小化损失函数来得到最好的模型。正则化就是在训练误差上加一个正则化项,也可以称为惩罚项。正则化项一般与模型复杂度成正比关系,通常以模型参数的Lp范数作为正则化项。例如,若以参数的L2范数作为正则化项,则上面的损失函数变为: 上式第一项为训练误差,第二项为正则化项,其中,λ≥0是用来权衡两者关系的系数。可以看出,若模型越复杂,则第一项训练误差会越小,然而第二项模型复杂度会越大;若模型太简单,则训练误差会比较大。正则化的作用就是选择训练误差与模型复杂同时较小的模型,同时又因为正则化能抑制模型过于复杂,因此它也是一种有效的防止过拟合的方法。

另外

需要注意的是,我们通常把模型在实际中遇到的新样本称为测试数据,为了加以区分,一般把模型选择时使用的测试集称为验证集(validation set)。这样,机器学习中使用的数据主要分为以下三种:

  • 训练集:用于训练模型
  • 验证集:用于模型选择
  • 测试集:评估最终模型在实际使用中的泛化能力

参考

相关文章

网友评论

      本文标题:机器学习笔记(1)——模型选择与评估

      本文链接:https://www.haomeiwen.com/subject/fuytgxtx.html