美文网首页
第二章 模型评估与选择

第二章 模型评估与选择

作者: 康君爱上了蕊酱 | 来源:发表于2018-08-15 15:36 被阅读0次

    经验误差与过拟合

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

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

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

    评估方法

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

    • 留出法
      留出法就是将数据集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'作为验证集。其中:\lim_{m \to \infty}(1- \frac{1}{m})^m = \frac{1}{e} \approx 0.368。因此T中大约有1/3的样本,且在训练集中没有出现,因此称为“包外估计”。这种方法使得小样本量的数据集也能进行机器学习,但是由于改变了子集的分布,所以获得的结果相对于上面两中方法并不可靠。
    • 调参与最终模型
      在进行机器学习的过程中许多算法都需要设置参数,不同的参数设置,最后就会得到不同的模型(注意算法的参数和模型的参数不同)。通常获取参数的方法是,采用一定步长的参数,对每种参数进行训练,选择所有得到的模型中最好的对应的参数作为设置参数。获得参数后,把数据集D作为训练集再次训练得到最后的模型。

    性能度量

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

    回归中的常用性能度量是均方误差,定义式为:E(f; D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2。更一般的表达形式为:E(f,D)=\int_{\infty \to D}(f(x)-y)^2p(x)dx,其中p(x)为概率密度。

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

    • 错误率和精度
      错误率和精度在前面提高过,对于一个数据集D,错误率的定义为:E(f; D)=\frac{1}{m}\sum_{i=1}^m(f(x_i) \neq y_i),一般形式为:E(f,D)=\int_{\infty \to D}(f(x) \neq y)p(x)dx,精度的定义为:acc(f; D)=\frac{1}{m}\sum_{i=1}^m(f(x_i) = y_i),一般形式为:E(f,D)=\int_{\infty \to D}(f(x)=y)p(x)dx
    • 查准率、查全率与F1
      错误率只能反映这个模型的预测的整体情况,当我们想要知道某一中分类中,有多少被预测挑中,或着挑出的有多少是正确的,就引入了两个新概念。差准率为预测的真正例占预测的所有正例的比例,定义为:P= \frac{TP}{TP+FP}查全率为预测的真正例占所有真正例的比例,定义为:R=\frac{TP}{TP+FN}。这两个率呈现一种你增我减的规律,这很好理解。

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

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

    平衡点是当查全率和查准率相等的点,这个点对应的额数值越大,可以认为这个模型越好。对平衡点进行调和平均优化就形成了F1\frac1{F1}=\frac12\cdot(\frac1P+\frac1R),即:F1=\frac{2\times P \times R}{P+R}=\frac{2 \times TP}{样例总数+TP-TN}。对平衡点进行加权调和平均优化就形成了F_\beta:\frac1{F_\beta}=\frac1{1+\beta^2}(\frac1P+\frac{\beta^2}{R}),即:F_\beta=\frac{(1+\beta^2) \times P \times R}{(\beta^2 \times P)+R}。通过\beta的调整我们就可以选择查全率和查准率那个更重要,从而符合实际问题需要。

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

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

    为了理解ROC,需要下面两个定义,真正例率指正例中被正确调处的比率,定义式为:TPR=\frac{TP}{TP+FN}假正例率指反例中被错挑为正例的比率,定义式为:TPR=\frac{FP}{TN+FP}

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

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

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

    比较检验

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

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

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

    偏差与方差

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

    相关文章

      网友评论

          本文标题:第二章 模型评估与选择

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