机器学习-学习笔记(二)第二章 模型评估

西瓜书第二章的笔记,本章主要是如何评估一个学习算法的各类方法,相似传统算法书中用时间复杂度和空间复杂度来评估相似,机器学习算法的评估要复杂得多。算法

1、基本概念bootstrap

错误率(error rate)-分类错误的样本数占样本总数的比例,在m个样本中有a个样本分类错误,则错误率E=a/m,则精度(accuracy)为1-a/m。app

偏差(error)-学习算法在实际预测输出与样本的真实输出之间的差别,在训练集上的偏差称为“训练偏差(training error)”或“经验偏差(empirical error)”,在新样本上的偏差称为“泛化偏差(generalization error)”。机器学习

过拟合(overfitting)-学习器把训练样本自身的特色看成了全部潜在样本都具备的通常性质,致使泛化性能降低。与之相对是欠拟合(underfitting)函数

测试集(testing set)-用于测试学习器的泛化偏差的样本集。工具

验证集(validation set)-模型评估与选择中用于评估测试的数据集,验证集通常用于调参。性能

2、评估方法学习

留出法(hold-out)-直接将数据集D划分为两个互斥的集合,分别是训练集S和测试集T,在S上训练模型,用T来评估测试偏差做为对泛化偏差的估计。测试

    在采用留出法时训练/测试集的划分要尽量保持数据分布的一致性,避免因数据划分过程引入额外的差异而对最终结果产生影响,从采样角度来看数据集的划分过程,保留类别比例的采样方式一般称为“分层采样”。而且由于单次留出法获得的估计结果每每不稳定可靠,所通常要采用若干次随即划分、重复进行实验评估后取平均值做为留出法的评估结果。3d

    留出法面临S和T的划分矛盾,即S过大则模型更接近于D的训练结果可是T的评价结果不许确,T过大则S和D的差异扩大,下降评估结果的保真性。


交叉验证法(cross validation)-将数据集D划分为k个大小类似的互斥子集,即,每一个子集Di都尽量保持数据分布的一致性,每次用k-1个子集的并集做为训练集,余下的做为测试集,这样能够进行k次训练和测试,最终返回k个测试结果的均值。该方法又称k折交叉验证(k-fold cross validation)。

    为减小因样本划分不一样引入的差异,k折交叉验证一般要随机使用不一样的划分重复p次,最终评估结果取均值。

    留一法(leave-one-out)属于交叉验证法的特例,假定数据集D中包含m个样本,若令k=m即是留一法,且留一法不受样本划分方式的影响,留一法的缺点是当数据量较大时训练m个模型开销过大。


    自助法(bootstrapping)-一种能够减小训练样本规模不一样形成的影响,同时还能比较高效的进行实验评估的方法。给定包含m个样本的数据集D,咱们对其进行有放回的随机抽取,得到数据集C,重复执行m次后,获得一个包含m个样本的数据集C,经过自助采样,D中约有36.8%的样本不会出如今C中。自助法在数据集较小、难以有效划分训练/测试集时颇有用。


3、性能度量

    先列举一些接下来要用的假设量,样例集,其中是示例的真实标记,学习算法f,要评估其性能则其预测结果f(x)与真实标记y进行比较,下面介绍一些简单的指标。

    均方偏差(mean squared error)-回归任务最经常使用的性能度量

    更通常的,对于数据分布D和几率密度函数p(x),均方差描述为

   错误率

    其中是指示函数,x为真时取1不然取0,精度定义为

    而对于数据分布D和几率密度函数p(x),错误率和精度能够描述为

           

    查准率(precision)-检索出来的信息中有多少是须要的。

    查全率(recall)-须要的信息由多少被检索出来。

    对于二分类问题,可将样例根据其真是类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative),则查准率P和查全率R能够分别定义为,查全率和查准率是一对矛盾值:



    根据查全率和查准率能够画出P-R图,P-R图直观地显示出学习器在样本整体上的查全率、查准率,能够用于比较学习器之间的性能,从图上可用曲线覆盖面积来进行比较还可使用平衡点(break-even point)-查准率=查全率进行比较,更长用的是F1度量。

    F1度量是基于查准率和查全率的调和平均

          

    F1的更通常形式Fβ能够反映对查全率和查准率的不一样偏好,Fβ是查全率和查准率的加权调和平均,定义为



    β>1时查全率有更大影响,β<1时查准率有更大影响。对于多分类任务,当咱们须要n个二分类混淆矩阵上综合考察查准率和查全率。一种是先在各混沌矩阵上分别计算再求平均,即可获得宏查准率(macro-P)、宏查全率(macro-R)、宏F1(macro-F1):




    也能够先分别计算TP、FP、TN、FN等值,再计算出微查全率(micro-R)、微查准率(micro-P)、微F1(micro-F1)。

许多学习算法会为样本产生一个几率值,根据几率值是否达到阈值来进行分类,那么咱们能够将全部的样本根据其几率值进行排序,排列自己的质量好坏,体现了综合考虑算法在不一样任务下的“指望泛化性能”的好坏,能够理解为若是咱们将样本按照真实分类排序即正例在前反例在后那么更好的算法可使样本更靠近真实排序,ROC曲线是研究排序质量的有力工具。真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)是绘制ROC曲线的关键量,分别定义为



    ROC曲线的绘制过程,首先将样本按预测几率排序,而后按顺序逐个选择某个样本,将该样本以前的样本均视为正例以后的样本视为反例,计算TPR和FPR,以TPR为纵轴、FPR为横轴,根据样本点能够绘制出ROC曲线,根据比较ROC曲线与横轴所围面积AUC的大小能够判断两个学习算法的性能优劣。由于TPR和FPR的取值都在0-1之间,因此ROC曲线坐标轴所围成的总面积为1,AUC考虑的是样本预测的排序质量,而排序的偏差能够定位为排序的损失,也就是对排序的偏差进行量化获得,对于给定的m+个正例和m-个反例,令D+和D-分别表示正、反例集合:


    对于模型的预测结果,咱们每每有不一样的重视程度即代价,从代价的角度来衡量一个模型,从二分类任务来看,错误预测才会有代价,咱们将真实类别为第0类而预测为第1类所产生的代价定义为cost01,而真实类别为第1类被预测为第0类的结果的代价定义为cost10,则代价敏感错误率为


    相似能够定义其余的评估量,ROC曲线在代价敏感下不能很好的反映模型的性能,经过代价曲线则能够,代价曲线的横轴是取值为0-1的正几率代价Pcost,纵轴costnorm是取值为0-1的归一化代价。



    根据ROC曲线上的每一个点,能够计算出FNR=1-TPR,而后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示该条件下的指望总代价,全部线段的下界所围成的面积即为学习器指望的总代价。

4、比较检验

    无论咱们用什么评估量去衡量学习模型,咱们都只是在用测试集上的结果和统计量去逼近真实的结果和泛化偏差,因此为了进行学习器之间的性能比较即上述统计量所反映的差异是否能够是真正的差异,统计假设检验能够成为重要的依据。假设检验是几率论中内容这里再也不赘述,仅介绍一下统计量和验证方法。

    经过测试错误率来逼近泛化错误率的假设检验

    对于普通一次测试获得的错误率去估计泛化错误率,用简单的二项检验即可。对于屡次训练/测试,可以使用t检验,首先算出错误率的平均值和方差,则有统计量

 

    符合自由度为k-1的t分布,式中u是均值,是方差的开方,为泛化错误率,该统计量可用于验证均值等于泛化错误率这一假设。

交叉验证t检验

    k折交叉验证法会进行k次训练和测试,获得k个测试错误率,对于两个学习算法,若他们的第k次测试错误率相同则可认为他们性能相同,记每次测试错误率的差值,并计算其均值和方差,对其进行t检验,检验假设为均值为0,若假设可接受则认为两个学习算法性能没有显著差别。

McNemar检验

    对于二分类问题有分类差异列联表,根据列联表能够验证两个学习算法性能上的差距。


    若性能相同应该有01=10,McNemar检验考虑变量
    服从自由度为1的卡方分布,便可进行卡方分布下的假设检验。

FriedMan检验和Nemenyi后续检验

    上述检验都是在一个数据集上比较两个算法的性能,当须要对比多个算法的性能时就要用到FriedMan检验和Nemenyi后续检验,经过对多个算法在多个数据集上的测试性能进行排序,并求得每一个算法的平均序值ri,根据平均序值,可检验变量


    该变量在k和N较大时,服从自由度为k-1的卡方分布。

    另外一个变量是                                            


    该变量服从自由度为k-1和(k-1)(N-1)的F分布,该两个变量用于检验假设“全部的算法性能相同”,若该假设被拒接则Nemenyi后续检验来区分各算法,须要计算平均序列差异的临界值


    若两个算法的平均序值之差超出临界值CD,则拒绝两个算法性能相同的假设。

5、总结

最后经过对泛化偏差的“误差-方差分解”了解到泛化偏差可分解为误差、方差与噪声之和。

第二章整体来讲介绍了如何测评学习算法的性能和如何比较各算法的性能差异,是学好机器学习的重要基础。