机器学习笔记(二)——模型评估与选择
一、经验误差与过拟合
经验误差:一般地,我们吧学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差”。
过拟合:当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种称为“过拟合”,反之称为“欠拟合”。
二、数据集的划分方法
1、留出法
“留出法”直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个测试集T,即D=S∪T,S∩T=∅。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
需值得注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保证样本的类别比例相似。
常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。
2、交叉验证法
“交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪...∪Dk,Di∪Dj=∅(i≠j)。每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。通常把交叉验证法称为“k折交叉验证法”。
假定数据集D中包含m个样本,若令k=m,则得到了交叉验证法的一个特例:留一法。
3、自助法
“自助法”直接以自助采样法为基础。给定包含m个样本的数据集D,我们对它进行采样产生数据集D':每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次之后,我们就得到了包含m个样本的数据集D'。
4、总结
自助法在数据集较小、难以有效划分训练/测试集时很有用。
初始量足够时,留出法和交叉验证法更常用。
数据集小且可以有效划分的时候留一法更有效。
三、性能度量
1、均方误差
回归任务最常用的性能度量
2、错误率与精度
对有m个样本的样例集D,分类错误率定义为
或
精度即为1-e
3、查准率(precision)与查全率(recall)
准确率(查准率)=预测为真且实际也为真的个体个数/预测为真的个体个数
召回率(查全率)=预测为真且实际也为真的个体个数/实际为真的个体个数
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情况。其关系如下:
将查准率记为P,查全率记为R
4、P-R曲线与F1度量
以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线” 。
P-R图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。若发生交叉则只能在具体的查准率或查全率条件下进行比较。“平衡点,简称BEP”在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例,它是“查准率=查全率”时的取值。但BEP还是过于简化了,更常用的是F1度量
F1度量的一般形式——Fβ,能让我们表达出对查准率和查全率的不同偏好
5、ROC与AUC
“ROC曲线”的纵轴是“真正例率,简称TPR”,横轴是“假正例率,简称FPR”,两者的定义分别为
通过ROC曲线进行学习器的比较时,有两种方法:
- 若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。
- 若两个学习器的ROC曲线发生交叉,则比较ROC曲线下的面积,即AUC。AUC可估算为
6、代价敏感错误率与代价曲线
以二分类为例,我们可根据任务的领域知识设定一个“代价矩阵”,若将第0类判别为第1类所造成的损失更大,则cost01>cost10;损失程度相差越大,则两者差别越大。
在非均等代价下,我们就希望最小化“总体代价”,代价敏感错误率为
在非均等代价下,ROC曲线就不能直接反映出学习器的期望总体代价,由此引入“代价曲线”。代价曲线图的横轴是取值为[0,1]的正例概率代价
其中p是样例为正例的概率;
纵轴是取值为[0,1]的归一化代价
其中FNR=1-TPR。
设ROC曲线上点的坐标为(FPR,TPR),则可相应计算出FNR,在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。
四、比较检验
前面写的都是对学习器性能进行评估比较的方法,但是这远远不够。
- 首先我们希望比较的是泛化性能,然而通过实验估计方法我们获得的是测试集上的性能,两者的对比结果可能未必相同;
- 测试集上的性能与测试集本身的选择有很大关系;
- 很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有所不同。
1、假设检验
假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。其具体步骤如下:
- 根据问题的需要对所研究的总体作某种假设,记作H0;
- 选取合适的统计量,这个统计量的选取要使得在假设H0成立时,其分布为已知;
- 由实测的样本,计算出统计量的值,并根据预先给定的显著性水平进行检验,作出拒绝或接受假设H0的判断。
我们先对模型泛化错误率做出假设。通常,测试错误率与泛化误差率的差别很小,因此我们可以通过测试误差率来估计泛化误差率。泛化误差率为ϵ的模型在m个样本中被测得的测试错误率为ϵ^的概率为
让P对ϵ求导后可以发现当ϵ=ϵ^的时候,概率值是最大的,二项分布示意图如下所示
因此,我们可以假设泛化误差率ϵ≤ϵ0,那么在1−α的概率内所能观测到的最大错误率可以通过下式计算得到:
当测试错误率ϵ^≤ϵ0时,在α的显著度下是接受的,即能够以1−α的置信度认为模型的泛化错误率不大于ϵ0;否则该假设可被拒绝,即在α的显著度下可认为学习器的泛化错误率大于ϵ0。
大多数情况下,我们会使用多次留出或交叉验证法,因此我们会得到多组测试误差率,此时我们可以使用t检验的方式来进行泛化误差的评估。 假定我们得到了k个测试误差率,ϵ^1,ϵ^2,......,ϵ^k,则平均测试错误率μ和方差σ2为
由于这k个测试误差率可以看做泛化误差率ϵ0的独立采样,因此变量服从*度为k-1的t分布。
对于假设μ=ϵ0和显著度α,可以计算出当前错误率均值为ϵ0时,在1−α概率内能观测到的最大错误率,即临界值。这样就可以对假设做出拒绝或接受。