目录
二、模型的评估与选择
2.1 误差与过拟合
学习器对样本的实际预测结果与样本的真实值之间的差:误差(error)。定义:
-
训练误差(training error)或经验误差(empirical error):在训练集上的误差
-
测试误差(test error):在测试集上的误差
-
泛化误差(generalization error):学习器在所有新样本上的误差,希望泛化误差尽量小
在过拟合问题中,训练误差十分小,但测试误差教大;在欠拟合问题中,训练误差和测试误差都比较大。欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。定义:
-
过拟合(overfitting):学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了
-
欠拟合(underfitting):学习能力太差,训练样本的一般性质尚未学好
2.2 训练集与测试集的划分方法
在现实任务中,往往有多种算法可供选择,应该选择哪一个算法才是最适合的呢?如上所述,希望得到的是泛化误差小的学习器,理想的解决方案是对模型的泛化误差进行评估,然后选择泛化误差最小的那个学习器。但是,泛化误差指的是模型在所有新样本上的适用能力,无法直接获得泛化误差。
通常采用一个“测试集”来测试学习器对新样本的判别能力,然后以“测试集”上的“测试误差”作为“泛化误差”的近似。显然:选取的测试集应尽可能与训练集互斥。
2.2.1 留出法
将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T,满足D=S∪T且S∩T=∅,常见的划分为:大约2/3-4/5的样本用作训练,剩下的用作测试。需要注意的是:训练/测试集的划分要尽可能保持数据分布的一致性,以避免由于分布的差异引入额外的偏差,常见的做法是采取分层抽样。同时,由于划分的随机性,单次的留出法结果往往不够稳定,一般要采用若干次随机划分,重复实验取平均值的做法。
2.2.2 交叉验证法
将数据集D划分为k个大小相同的互斥子集,满足D=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j),同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。交叉验证法的思想是:每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就有K种训练集/测试集划分的情况,从而可进行k次训练和测试,最终返回k次测试结果的均值。交叉验证法也称“k折交叉验证”,k最常用的取值是10。
与留出法类似,将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。特殊地当划分的k个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果比较准确,但对计算机的消耗也是巨大的。
2.2.3 自助法
希望评估的是用整个D训练出的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。“自助法”正是解决了这样的问题。
自助法的基本思想是:给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D 中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到了包含m个样本的数据集D'。可以得知在m次采样中,样本始终不被采到的概率取极限为:
这样,通过自助采样,初始样本集D中大约有36.8%的样本没有出现在D'中,于是可以将D'作为训练集,D-D'作为测试集。自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。
2.3 性能度量
性能度量(performance measure)是衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果
2.3.1 均方误差/错误率/精度
在回归任务中,即预测连续值的问题,最常用的性能度量是“均方误差”(mean squared error)
在分类任务中,即预测离散值的问题,最常用的是错误率和精度,错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例,易知:错误率+精度=1。
2.3.2 查准率/查全率/F1
检索出的信息中有多少比例是用户感兴趣的(查准率),用户感兴趣的信息中有多少被检索出来了(查全率)。对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:
查准率和查全率是一对矛盾的度量。例如我们想让推送的内容尽可能用户全都感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,查全率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样查准率就很低了。
“P-R曲线”正是描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示:
评估P-R曲线:若一个学习器A的P-R曲线被另一个学习器B的P-R曲线完全包住,则称:B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。
F1度量的一般形式—Fβ,F-Measure,又称F-Score,是P和R的加权调和平均。β>1查全率有更大影响,β<1查准率有更大影响
F1度量:β=1,是P和R的调和平均,当F1较高时,模型的性能越好。
有多个二分类混淆矩阵,例如:多次训练或者在多个数据集上训练。估算全局性能的方法有两种,分为宏观和微观。宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,再算出Fβ或F1,而微观则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出Fβ或F1。
2.3.3 ROC与AUC
学习器对测试样本的评估结果一般为一个实值或概率,设定一个阈值,大于阈值为正例,小于阈值为负例,这个实值的好坏直接决定了学习器的泛化性能,若将这些实值排序,则排序的好坏决定了学习器的性能高低。ROC曲线正是从这个角度出发来研究学习器的泛化性能,ROC曲线与P-R曲线十分类似,都是按照排序的顺序逐一按照正例预测,不同的是ROC曲线以“真正例率”(True Positive Rate,简称TPR)为横轴,纵轴为“假正例率”(False Positive Rate,简称FPR),ROC偏重研究基于测试样本评估值的排序好坏:可以衡量分类器的准确性和鲁棒性
TPR 也叫召回率(Recall)/灵敏度:表示分类器正确识别出正例的比率,即正例中被正确预测为正例的比率。表达式与查全率一致。
FPR:表示分类器错误地将负例预测为正例的比率,即负例中被错误预测为正例的比率。
真正率和假正率,两者关注的(目标)都是正样本,这符合实际问题的诉求,只不过两者关注的角度不同,真正率是从正样本的角度来看预测之后正样本,假正率是从负样本的角度来看预测之后的正样本。两者分开来看并最终综合起来,就能比较全面和合理评估预测模型。
若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。
准确率:通常我们都会直接使用准确率作为模型的评价指标,但是在实际使用以及一些特定环境中,准确率作为模型的评价指标存在一定的局限性,比如当样本分布不均时,一种极端特殊的情况,当正样本比例为1%,负样本笔记为99%,那么只需要将所有的样本都判为负样本,准确率就高达99%,这显然是不合理的。
精准率,又称查准率,关注正样本与预测效果,指在预测为正例中有多少为真正的正例,模型预估的精准程度
召回率,又称查全率,关注正样本与样本的原本属性,指的是数据集中的正样本有多少被识别出来
真正率(真阳率),即召回率
假正率(假阳率),原本为负样本中有多少被预测为正样本,关注的还是正样本,只不过从负样本的维度来观察
2.3.4 代价敏感错误率与代价曲线
上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的,例如:将无疾病-->有疾病只是增多了检查,但有疾病-->无疾病却是增加了生命危险。以二分类为例,由此引入了“代价矩阵”(cost matrix)。
在非均等错误代价下,我们希望的是最小化“总体代价”,这样“代价敏感”的错误率为:
同样对于ROC曲线,在非均等错误代价下,演变成了“代价曲线”,代价曲线横轴是取值在[0,1]之间的正例概率代价,式中p表示正例的概率,纵轴是取值为[0,1]的归一化代价。
代价曲线的绘制很简单:设ROC曲线上一点的坐标为(TPR,FPR) ,则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR) 到(1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC 曲线土的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如图所示:
2.4 比较检验
在比较学习器泛化性能的过程中,统计假设检验(hypothesis test)为学习器性能比较提供了重要依据,即若A在某测试集上的性能优于B,那A学习器比B好的把握有多大。下面分析一错误率为性能度量,
2.4.1 假设检验
2.4.2 交叉验证t检验
2.4.3 McNemar检验
2.4.4 Friedman检验与Neme后续检验
二项检验,后续补充,
2.5 偏差与方差
在学习算法中,偏差指的是预测的期望值与真实值的偏差,方差则是每一次预测值与预测值的期望之间的均方误差。偏差体现了学习器预测的准确度(拟合能力),而方差体现了学习器预测的稳定性。通过对泛化误差的进行分解,可以得到
泛化误差可分解为偏差、方差与噪声之和
方差和偏差具有矛盾性,这就是常说的偏差-方差窘境(bias-variance dilamma),随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。因此训练也不要贪杯,适度辄止