前言:本章主要是训练前对数据集的分类方法(评估方法)、对经训练后学习器性能的评价指标(性能度量)、两个或多个学习器的泛化性能在统计学意义上的比较方法(比较检验)以及学习器期望泛化误差的构成(偏差与方差)进行简要的介绍。
1. 经验误差与过拟合
误差:学习器的实际预测输出与样本真实输出之间的差异。
训练误差(经验误差):学习器在训练集上的误差。
泛化误差:在训练集中训练过的学习器应用到新样本上的误差。
我们希望的得到泛化误差最小的学习器(这意味着得到的学习器能够准确无误地对任意新样本进行分类),但是只能做到是经验误差最小(即我们得到的学习器只能做到准确无误地对训练集中的样本进行分类)。
学习器出现泛化误差往往是因为两个原因:“过拟合”、“欠拟合”。
过拟合:把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质。(比如因为训练样本中的树叶都有锯齿,所以认为所有树叶都有锯齿,没有锯齿的就不是树叶)
欠拟合:对训练样本的一般性质尚未学好。(如因为训练样本中的树叶都是绿色的,所以认为所有绿色的东西都是树叶)
2. 评估方法
我们需要通过未训练过的数据(测试集T)来测试训练后的学习器对新样本的泛化能力(分类能力)。往往我们只有一个包含m个样例的数据集D,因此,我们需要对D适当处理,产生训练集S和测试集T。
2.1 留出法
这是最简单粗糙的分类方法。即直接价格数据集D划分为两个互斥的集合(训练集S和测试集T),一般比例为1:2到1:4,,在S上训练出模型后,用T来评估其测试误差,作为泛化误差的估计。
注意:
1.训练/测试集的划分要尽可能保持数据的一致性,避免数据划分过程中引入额外的偏差,而对最终结果产生影响。(分层采样)
2.不同的划分将导致不同的训练/测试集,模型评估结果也会有差别,因此,单次使用留出发的到的结果往往不够稳定可靠,在实际操作中,我们采用若干次随机划分、重复进行试验评估后取平均值作为留出法的实验评估结果。
2.2 交叉验证法(k折交叉验证)
将D划分为k个大小相似的互斥自己,每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到,每次以k-1自己的并集作为训练集,余下的子集为测试集,进行k次训练和测试,最终返回k次测试结果的均值。k常用10,也用5,20等。
与留出法类似,将数据集D划分为k个子集同样存在多种划分方式,为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,评估结果是这p次k折交叉验证结果的均值,常见10次10折交叉验证。
当数据集较大且取得k值和p值较大时,模型的计算开销也会很大。
2.3 自助法
对包含m个样本的D进行随机放回式抽样m次,得到采样数据集D',D中有一部分样本会在D‘中多次出现,样本在m次采样中始终不被采到的概率是(1-1/m)的m次方,这个概率约等于0.386,即约有38.6%的样本未出现在采样数据集D'中。
因此,我们将D'作为训练集,D\D'作为测试集(即D中未在D'出现的样本)。这样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3没在训练集中出现的样本用于测试,这样的测试结果,亦称“包外估计”。
自助法在数据集较小、难以有效划分训练/测试集时很有用。但是自助法改变了数据的初始分布,引入了估计误差。
在初始数据量足够时,留出法和交叉验证法更常用一些。
2.4 调参与最终模型
大多数学习算法都有参数需要设定。在选择完算法后,对于算法的参数进行调节就是调参。 我们可以对一个算法中所需要的每种参数配置都训练出模型,然后挑选出最好的模型中所使用的参数。 然而现实中,试遍所有参数几乎是不可能的,于是我们就会对每个参数选定一个范围和变化步长进行计算。比如在[0,0.2]的范围内以0.05为步长,测试0,0.05,0.10,0.15,0.20这五个参数。然后从这5个数中选择最合适的。 当算法和参数已经选定好之后,这时需要再用整个数据集D来再次训练模型。(这是我从网上抄的)
(说实话,这个我也不太懂,感觉就像是对于属性值为离散的训练集,遍历所有的参数组合,找到最合适的参数组合;对于属性值为连续的训练集,每个属性值以一定步长为间隔进行离散化,再遍历所有参数组合,最后得到最合适的参数组合。)
3. 性能度量
性能度量:衡量模型泛化能力的评价标准。(每个性能度量标准都有一定的侧重,因此模型的“好坏”是相对的,这不仅取决于算法和数据,还取决于任务需求)
为了方便表示接下来的各个性能度量,作出以下假设:
均方误差:(回归任务常用的性能度量)
以下均为分类任务常用的性能度量
3.1 错误率与精度
错误率:分类错误的样本数占样本总数的比例。
精度:分类正确的样本数占样本总数的比例。
3.2 查准率、查全率与F1度量
当我们关心的问题是“用分类器预测n个样本,这n个样本中有多少被分类为正例”和“所有正例中有多少被成功分类”时,往往采用查准率和查全率。
查准率P:在西瓜模型中的衡量为“挑出的西瓜中有多少比例是好瓜
查全率R:而查全率则为“所有好瓜中有多少比例被挑了出来”
以二分类问题为例,将样例根据真实类别与学习期预测类别的组合划分如下,并组成分类结果的“混淆矩阵”
真正例(TP:好的西瓜,并且模型也认为是好的西瓜)
假正例(FP:坏的西瓜,但是模型认为是好的西瓜)
假反例(FN:好的西瓜,但是模型认为是坏的西瓜)
真反例(TN:坏的西瓜,并且模型也认为是坏的西瓜)
查准率P与查全率R分别定义为
查准率与查全率是一对矛盾的度量。因为想要查准率高,就意味着模型只选择最有把握判断为正例的样例(减少总样例的数量),以保证每个预测的都是正例(查准率高),这样就会漏掉许多真实的正例;而想要查全率高,就意味着模型要广撒网(提高预测样例的数量),以保证更多的正例被预测(查全率高),这样会不可避免地降低查准率。
P-R曲线为在一个二分类的问题中的查准率-查全率,以查准率为纵轴、查全率为横轴作图。P-R图直观显示了学习器在样本总体上的查准率和查全率。
画图方法:学习器会对测试样例产生一个概率预测,根据概率由大到小对样例进行排序,排在前面的是学习器认为最可能是正例的样本,排在后面的是学习器认为最不可能是正例的样本,此时设置一个变动的阈值,由大到小变动,当阈值较大时,预测结果没有正例,当阈值较小时,预测结果全为正例。阈值每变动一次则计算一次查全率和查准率,并在坐标轴上画出图形,最终得到P-R曲线。
进行学习器性能比较时:
如果一个学习器的P-R曲线包住了另一个,则可以认为A的性能优于C。
如果有交叉,如A、B,则难以断言孰优孰劣,一般比较两P-R曲线的面积,面积大的优。
引入平衡点(BEP),基于BEP比较,A优于B。
为了综合考虑查准率和查全率,引入F1度量:
F1度量实质上是查准率与查全率的调和平均数,即
当对查准率与查全率重视程度不同时,产生F1度量的一般形式Fβ(当β>1时,查全率有更大影响,而β<1时查准率有更大影响。)
对于多个二分类混淆矩阵,综合考察其查准率和查全率的度量性能
宏查准率、宏查全率、宏F1度量:分别对所有单个矩阵的查准率和查全率求算术平均值,即为宏查准率、宏查全率,用该值计算宏F1度量。
微查准率、微查全率、微F1度量:先将混淆矩阵对应元素进行算数平均,得到的平均值,并按照以下公式计算微查准率、微查全率,用该值计算微F1度量
3.3 ROC与AUC
ROC曲线:受试者工作特征曲线,曲线。ROC曲线的纵轴是真正例率TPR,横轴是假正例率FPR,两者分别定义如下:
ROC曲线与P-R曲线绘制方法类似,只是横坐标与纵坐标换成成了FPR与TPR,这样FPR与TPR计算时,分母不变。
画图方法:学习器会对测试样例产生一个概率预测,根据概率由大到小对样例进行排序,排在前面的是学习器认为最可能是正例的样本,排在后面的是学习器认为最不可能是正例的样本,此时设置一个变动的阈值θ(书中为“截断点”),由大到小变动,当阈值θ较大时,预测结果没有正例,当阈值θ较小时,预测结果全为正例。阈值θ每变动一次则计算一次真正例率TPR和假正例率FPR,并在坐标轴上找出标记点,两相邻点间用线段连接,最终得到ROC曲线。
进行学习器性能比较时:(与PR曲线类似)
如果一个学习器的ROC曲线包住了另一个,则可以认为A的性能优于C。
如果有交叉,如A、B,则难以断言孰优孰劣,一般比较两ROC曲线下的面积AUC,AUC大的优
关于ROC和AUC,推荐一个博客,内附详细介绍
3.4 代价敏感错误率与代价曲线
分类器预测出错时,可能造成的后果不同。如把坏瓜错划分成好瓜,或者好瓜错划分成坏瓜虽然都是错误划分,但是其造成的后果会不同。好瓜当成坏瓜只是扔掉了一只瓜,但是坏的当成好的吃了可能会吃坏肚子上医院,成本更高。为了权衡不同类型的错误所造成的不同损失,可为错误赋予非均等代价。
以二分类任务为例,设定代价矩阵
对于这种代价,记为,即表示将第i类样本预测为第j类样本的代价。以二分类任务为例(第0类和第1类),则会有两种情况,分别是和,假设0类表示坏瓜,1类表示好瓜,那么显然>。
代价敏感错误率为
其中分别表示数据集D中正例子集和反例子集
代价曲线有点难,emmm,我还没看懂,但是找了点资料,有兴趣的可以看看——代价曲线。
小结:机器学习性能评估模型框架:
4. 比较检验
我们不能直接通过比较不同模型的性能度量值的大小来决定模型的好坏。原因如下:
(1)实验评估得到的是测试集上的性能,而我们希望比较的是泛化性能,两者未必一致;
(2)测试集上的性能与测试集本身的选择有关,不同大小的测试集或者相同大小的测试集中不同的测试样例,都会导致测试结果的不同;
(3)机器学习算法本身有随机性,即便在同一测试集上使用相同的参数设置运行,每次运行得到的结果也会不同。
因此,引入统计假设检验,基于假设检验的结果,若在测试集上观察到学习器A比B好,则有多大把握A的泛化性能在统计意义上优于B。
4.1 交叉验证t检验
一组训练集上对两个不同学习器的性能进行比较。
对于两个学习器A和B,如果他们的性能相同,则他们的测试错误率应该相同,即。
具体操作:对于k对k折交叉验证产生的结果求差,;根据差值来对“学习器A和B的学习性能相同”这个假设做检验,构建服从自由度为k-1的分布的变量
若变量小于临界值,则认为两个学习器的性能没有显著差别;否则,可认为两个学习器性能有显著差别,错误平均率小的那个学习器性能较优。
4.2 McNemar检验
一组训练集上对两个不同学习器的性能进行比较。
列联表:估计学习器A、B的测试错误率;获得两学习分类结果的差别,两者都正确,都错误或者一个正确一个错。
若假设A、B学习器性能相同,则应有,那么变量应当服从正态分布为1,方差为,因此构建服从自由度为1的分布的变量
给定显著度α,当以上变量值小于临界值时,认为两学习器性能没有显著差别;否则性能又显著差别,且平均错误率较小的那个学习器较优。
4.3 Friedman检验与 Nemenyi后续检验
一个或多个数据集上比较多个分类器性能的方法。
(1)通过留出法或者交叉验证法得到每个算法在每个数据集上的测试结果。
(2)根据算法性能的好坏排序,并依次赋序值(1,2,3,...)
若算法性能相同,则平均序值应当相同。
假定在个数据集上比较个算法,令表示第个算法的平均序值(暂时不考虑平分序值的情况),服从正态分布,其均值为,方差为。当和都比较大时,构建服从自由度为的分布的变量
一般我们使用由转化得到的服从和的F分布的变量
若以上变量小于临界值,则各学习器性能相同;否则认为各学习器性能有显著差别,并进行Nemenyi后续检验。
Nemenyi后续检验:对于每两个学习器计算平均序值的临界值域
其中的值查下表
若两算法平均序值之差小于临界值域CD,则两算法无显著差别;否则,两算法有显著差别,且平均序值较小的性能较优。
Friedman检验图:
学习器A和B的临界值域有重叠,则无显著差别;无重叠则有显著差别。
4. 偏差与方差
对于学习算法除了通过实验估计其泛化性能外,人们往往还希望了解它为什么具有这样的性能(即为什么学习器预测结果会与真实值不一致)。
偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画学习算法的拟合能力。
噪声:表达了在当前任务上任何算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
泛化误差=偏差+方差+噪声
偏差方差窘境:训练不足时,学习器欠拟合,训练数据的扰动不足以使学习器产生显著变化,此时的泛化误差由偏差主导;训练过度时,学习器过拟合,训练数据的扰动渐渐被学习器学到,此时泛化误差由方差主导。
偏差方差分解图如下: