第二章 模型评估与选择

经验误差与过拟合

首先在分类机器学习中,引入了两个概念,错误率:分类错误的样本数占总样本数的比例。其表达式为:。其中a为分类错误样本数,m为总样本数。与之相对应的就是精度:分类正确的样本数占总样本数的比例。也就是:。

然后拓展到一般情况就是误差:机器学习预测的输出和样本的真实输出之间的差异。而误差又可分为训练误差(经验误差):在训练集上产生的误差和泛化误差:在测试集上产生的误差。机器学习的目的是尽力减小泛化误差从而试预测的结果更加准确,但是机器学习的过程中并不知道新样本的信息,所以能做的只能是通过控制训练误差。

当误差比较大的时候,证明机器学习过程并没有很好的掌握对象的一般规律,并不能对新样本进行有效的预测,这种现象被称为欠拟合。同时误差并不是越小越好,机器学习的过程是要学习到对象的一般规律,当误差非常小的时候就意味着,模型将训练集中对象特有的性质也进行了学习,模型的泛化性能就会下降,这种现象成为过拟合。欠拟合可以通过改进学习方法进行完善,但是过拟合是无法避免的,因为如果承认过拟合解决,就等于承认可以通过经验误差最小化来获得最优解。因此训练误差并不能作为评估模型的标准,接下来就介绍一些可行的评估方法。

评估方法

想要得知得到模型的性能,我们就需要用一些一致的样本对其进行测试。主要的思路就是从训练集中抽出一部分作为测试集,对训练出的结果进行测试。方法主要有:

  • 留出法
    留出法就是将数据集D分为互斥的两个子集,训练集S和测试集T。在划分的时候要保证S和T的分布和D都保持一致,保持类别比例一致,这一点我们可以通过分层抽样来确保,即从数据集的不同类中以相同的比例分割。为了使结果更加可靠,进行多次划分,然后对多次的结果取平均。然后关键的地方就是S和T之间的比例,S比较多的时候,训练结果和D更接近,但是相对用于测试的T的数目减小,结果的稳定性就会下降;S比较少的时候,训练的结果和D就会原理,保真性就会下降。因此常把2/3~4/5的样本作为训练集剩下的用来作为测试集。
  • 交叉验证法
    交叉验证法就是将训练集D均分为k个子集,然后每次取其中1个子集作为T,k-1个子集作为S,进行k次训练,然后这个k次训练进行p次重复,最后对重复结果取平均,称为“p次k折交叉验证”。同样,这个过程子集的划分也要保证分布的一致。这个方法有一个特例,叫做留一法,就是将一个样本作为一个子集,这种方法最接近期望,但是计算量十分大。
  • 自助法
    自助法就是有放回的每次从数据集D中抽取一个样本放入D'中,重复进行m次。D'作为训练集,D\D'作为验证集。其中:。因此T中大约有1/3的样本,且在训练集中没有出现,因此称为“包外估计”。这种方法使得小样本量的数据集也能进行机器学习,但是由于改变了子集的分布,所以获得的结果相对于上面两中方法并不可靠。
  • 调参与最终模型
    在进行机器学习的过程中许多算法都需要设置参数,不同的参数设置,最后就会得到不同的模型(注意算法的参数和模型的参数不同)。通常获取参数的方法是,采用一定步长的参数,对每种参数进行训练,选择所有得到的模型中最好的对应的参数作为设置参数。获得参数后,把数据集D作为训练集再次训练得到最后的模型。

性能度量

得到了模型之后,我们还需要对模型的性能做一个评估,一些用来衡量模型性能的标准就叫做性能度量。当选择不同的性能度量的时候,模型的评价结果可能会不同,因此需要根据任务需求选择合适的性能度量。

回归中的常用性能度量是均方误差,定义式为:。更一般的表达形式为:,其中p(x)为概率密度。

分类中的度量比较多种多样:

  • 错误率和精度
    错误率和精度在前面提高过,对于一个数据集D,错误率的定义为:,一般形式为:,精度的定义为:,一般形式为:。
  • 查准率、查全率与F1
    错误率只能反映这个模型的预测的整体情况,当我们想要知道某一中分类中,有多少被预测挑中,或着挑出的有多少是正确的,就引入了两个新概念。差准率为预测的真正例占预测的所有正例的比例,定义为:,查全率为预测的真正例占所有真正例的比例,定义为:。这两个率呈现一种你增我减的规律,这很好理解。

我们可以通过P-R图来描述两个率。制作方法:首先按照预测中最可能为正例->不可能为正例的方式将所有样本排序,然后我们逐次添加一个样本,都视为正例样本,每次计算查准率和查全率,制作P-R图。

有了P-R图之后,我们就可以通过不同模型的P-R曲线来比较它们的性能:完全外包的曲线对应的模型性能优于被包的曲线对应的模型;如果曲线存在交叉,可以通过计算覆盖面积来比较,面积大的性能优,介于面积计算难度大,提出了平衡点的概念,以及基于平衡点的,。

平衡点是当查全率和查准率相等的点,这个点对应的额数值越大,可以认为这个模型越好。对平衡点进行调和平均优化就形成了:,即:。对平衡点进行加权调和平均优化就形成了:,即:。通过的调整我们就可以选择查全率和查准率那个更重要,从而符合实际问题需要。

很多时候我们对分类进行多次训练,因此,查全率和查准率的均值取值就有了两种方法:“宏”是指对每次计算得到的查准率,查全率,取平均值;“微”是指对每次的TP、FP、TN、FN取均值再计算查准率,查全率,。

  • ROC和AUG
    有的时候我们的目的是通过学习给出一个预测值,然后通过和某个阈值进行对比,来区分正反例,这个时候相当于对所有样本进行一个排序然后通过一个阈值截断,阈值通过实际任务确定,因此对样本的排序质量就集中反映了模型的性能,为了应对这种需求研发出了ROC

为了理解ROC,需要下面两个定义,真正例率指正例中被正确调处的比率,定义式为:;假正例率指反例中被错挑为正例的比率,定义式为:。

ROC的做法和P-R图类似:首先一个数据集有给定的a个正例,b个反例,先将所有例子视为反例,每次按顺序将一个样本视为正例,如果是真正例坐标为,如果是假正例坐标为,最终得到ROC图。

然后我们需要通过ROC来比较模型之间的优劣,对这种图的整体理解是每有一个真正例纵坐标增加一个单位,每有一个假正例横坐标增加一个单位。因此,曲线完全外包的时候,外部曲线对应的模型优,存在交叉的时候,覆盖面积比较大的优。因此引入AUG,即ROC曲线覆盖的面积,它的计算公式为:。同时定义了一个用来描述排序误差的“损失”,计算公式为:,这个损失代表的就是ROC曲线之上的面积就,AUC=1-。

  • 代价敏感错误率与代价曲线
    引入一个概念,“非均等代价”:不同错误分类付出的代价不同的现象。与上述各种度量不同,每种错误相当于有了自己的权重,不能简单的将所有的错误简单的合并。这里用来表示,意义为当把类错误的认为是类时付出的代价。就等于0。上述的各种度量就可以拓展为各种代价敏感的度量,例如错误率:。为了获得学习器的期望总体代价,使用代价曲线来描述,其中x轴为取值为[0-1]的正例概率代价:,其中p为正例的概率;y轴为取值为[0-1]的归一化代价:。不同的FPR,TPR条件,对应一条不同的线段,(0,FPR)到(1,FNR),线段下的面积就是这个条件下的期望代价,所有条件都有一个线段,重合面积就是总期望代价。

比较检验

有了评估方法和性能度量,但是得到的度量都是基于测试集数据,而我们想要的是学习器的泛化性能,那么测试集上证明的学习器对比结果,是否在统计学上就能代表泛化性能的结果。下面介绍用到的假设性检验和机器学习性能比较方法。

  • 单学习器
    二项检验
    t检验
  • 多学习器
    交叉验证t检验
    McNemar检验
  • 多学习器
    Friedman检验
    Nemenji检验

这一部分就是假设检验的那些东西,只不过用来分析机器学习的度量,统计学相关的书中更详细一些。

偏差与方差

学习算法为什么会有这样的性能,通过“偏差-方差分解”来解释学习算法泛化性能。推到过程省略得到:。其中偏差度量学习器期望与真实结果的偏离程度,算法本身的拟合能力;方差度量数据变化造成的影响;噪声体现了研究问题的难度。偏差-方差窘境指当训练不足的时候,学习器拟合程度不足,数据变化不会使学习器显著改变,偏差主导,当训练加深,拟合能力逐渐增强,数据变动会被学习器学到,方差主导,训练充足后,拟合能力已经很强,数据的轻微变化也会影响学习器结果,可能会发生过拟合。

你可能感兴趣的:(第二章 模型评估与选择)