1.模型评估的方法与性能度量


周志华《机器学习》笔记整理

1.评估模型的方法

通常,将学习器的预测输出与真实输出之间的差异称为“误差”。
学习器在训练集上的误差叫做“经验误差(empirical error)”或者“训练误差(traing error)”;在新样本上的误差叫做“泛化误差(generalization error)”。

我们希望得到在新样本上表现很好的学习器,但实际上,我们并无法得到新样本。因此,只能在已有的训练样本中尽可能得学习到所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判断。

如果学习器把训练样本学得过好,很可能把训练样本自身的特点当做多有潜在样本都会具有的一般性质,就会导致泛化性能下降。这种现象,在机器学习中称之为“过拟合”(overfitting).
而如果对训练样本也没有学好,甚至连潜在样本都会具有的普遍规律都没有学到,会导致经验误差与泛化误差都很高,这种现象就称之为“欠拟合”(underfitting).

在实际应用中,欠拟合容易克服,比如增加模型训练的迭代次数,在决策树中扩展分支等等;但过拟合的问题却很难解决,是机器学习面临的关键障碍,并且无法彻底避免,只能“缓解”。那么有什么方法可以缓解过拟合呢?

通常的做法是,将已知的数据切分成“测试集”(testing set)和“训练集”(training set)。在训练集上训练学习器,得到的误差为经验误差;在测试集上测试学习器对新样本的判别能力,产生的误差为“测试误差”,作为泛化误差的近似。

那么如何切分才能达到尽量好的效果呢?以下介绍3种常用的方法。
(假设D为已知的样本,S是训练集,T是测试集)

1.1 留出法(hold-out)

留出法直接将数据集D拆分成互斥的两个集合,其中一个作为训练集S,另一个作为测试集T。在S上训练模型,在T上测试,并得到测试误差来近似泛化误差。

如何划分保证数据分布的一致性?–>“分层采样”
假设有1000个样本,500个是正例,500个是反例。如果随机地将1000个样本分成两部分,很可能在训练集或测试集中正反的比例不在是1比1,这就会引入额外的偏差。所以采用“分层采样”的方法来保证数据分布的一致性。

比如像在1000个样本中,70%作为训练,30%作为测试,使用分层采样,就是先对所有正例样本取出70%放到训练集中,30%放到测试集中;再对所有反例的样本取出70%放到训练集中,30%放到测试集中。这样的分层采样,保证了切割之后的两个数据集与原始数据集拥有一样的正负例比例。

如何保证随机划分的稳定性?–>“多次随机划分”
就算采用了分层采样,在每层中的采样也是随机的,每次采样的时候被选进训练集中的样本也是变化的,故单次使用留出法得带的估计结果往往不够稳定,在使用留出法时一般采用若干次随机划分。例如进行100次随机划分,那么就会有100组训练/测试集,进行模型的训练测试之后会有100个结果,将这100个结果进行平均作为一次留出法的最终结果。

训练与测试集划分的比例?
关于划分的比例没有完美的解决方案,常见的是大约2/3~4/5的数据用于训练,剩余的用于测试。

1.2 交叉验证法(cross validation)

交叉验证法是将数据集D划分成k个大小相似的互斥子集(D1,D2,…,DK),每个子集Di都使用分层采样尽可能保持数据分布的一致性。
每次使用k-1个子集作为训练集,余下的那个子集作为测试集。如此便得到了k组训练/测试集,进行k次模型的训练与测试,得到k个结果,将这k个结果的平均作为这次交叉验证的最终结果。

k的取值?
我们将这个过程称为“k-折交叉验证”。k的取值会影响结果的稳定性与保真性,k的取值一般为10.

如何保证随机划分的稳定性?
同样,因为将数据集D划分成k个子集的过程也是随机的,为了保障稳定性,k-折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是p次k折交叉验证的均值,例如常见的有10次10折交叉验证。(如此就要做100次训练与测试)

留一法
如果数据集D中有m个样本,当k=m时,则得到了交叉验证的一个特例:留一法(Leave-One-Out, LOO).
留一法不受随机样本划分的干扰,使用的训练集比原始数据集D只少了1个样本,如此使用留一法训练的模型与使用原始数据D训练得到的模型很相似,评估结果会相对准确。

但留一法的缺点是,在数据集比较大的时候,训练m个模型的开销十分大;并且留一法也未必永远比其他方法更准确。

1.3 自助法(bootstrapping)

我们希望得到数据集D训练出的模型,但在留出法与交叉验证法中,为了保留一部分数据用于测试,实际训练模型的数据集比D小,这必然会引起一些偏差,如果数据集D比较小,偏差会更大。
而留一法虽然避免了上述问题,但计算复杂度太高。

训练集何来?
自助法以自助采样为基础。给定数据集D,有m个样本,采样后产生的数据集为D’。
每次随机从D中挑选一个样本放到D’中,然后将该样本放回到初始数据集D中(也就是有放回地抽样)。
这样进行m次后,D’中就有了m个样本,这就是自助采样的结果,D’可作为训练集。

测试集何来?
显然,D中有一部分数据会在D’中重复出现,而另一部分样本不出现。样本在m次采样中始终不被采到的概率为(1-1/m)^m,取极限m->无穷,可得到概率为约等于0.368。也就是说,通过自助采样,约有36.8%的样本未出现在数据集D’中。于是,我们可将D’作为训练集,D\D’作为测试集。

使用自助法,我们保证了训练集仍然有与原数据集D相等的样本量m,也保证了仍然哟1/3的样本是没有出现在训练集中,可用于测试的。这样的测试结果称为“包外估计”(out of bag estimate)

优点:自助法在训练集较少,难以有效划分数据集时很有用。
缺点:自助法产生的数据集改变了数据集的原始分布,会引起偏差。因此要是数据集足够,优先选用留出法与交叉验证法。

1.4 验证集调参

大多数机器学习的模型都有超参数需要人为设定,参数配置的不同,学得的模型性能也会有显著差别。如何尽可能正确地确定超参数呢?

常见的方法,将训练集S进行k折交叉验证,取k-1部分作为训练集进行模型的训练,将余下的部分成为验证集(validation set), 作为对模型的验证。从而选择出当超参数设置为多少的时候模型的性能最佳。

2.评估模型的性能度量

以上第一部分说明了如何对数据集进行划分从而尽量准确地估计模型的泛化能力。这一部分要讲的是有哪些性能度量的指标可以去评估模型的好坏。不同的性能指标会导致不同的评估结果,也就是说模型的好坏是相对的,什么样的模型优秀,不仅取决于算法与数据,还取决于任务需求。

在线性预测问题中常用“均方误差”(mean square error)来度量回归模型的性能。下面主要介绍分类任务中常用的性能指标。

2.1 错误率与精度

错误率是分类错误的样本数量占总样本数量的比例;
精度是分类正确的样本数量占总样本数量的比例。
错误率与精度相加为1.

2.2 查准率,查全率与F1

对于二分类问题,可将样例根据真实类别与学习器类别的组合划分成真正例,假正例,真反例,假反例四种情况。表示成矩阵如下:(称为混淆矩阵confusion matrix)

image_1b8bc44ct15nebpl1s2b5d4pkj9.png-114kB

显然,TP+FP+TN+FN = 样例总数

(1)查全率与查准率的计算
查准率: P = TP/(TP + FP) 预测正确的正例占所有预测正例的比例
查全率: R = TP/(TP + FN) 预测正确的正例占所有真实正例的比例

查全率也叫作“召回率”recall 或“敏感度”sensitivity
查全率与查准率是一对矛盾的度量,查准率高时往往查全率较低,反之亦然。只在一些简单的任务中,两者才会都很高。那么如何根据这两个指标来比较模型呢?如下

(2)根据查全率与查准率比较模型:P-R图
根据学习器的预测结果,根据“最可能”为正例的顺序从高到低排列所有样本。然后按照此顺序逐个把样本作为正例进行预测,计算出每次预测的查全率和查准率。
以查准率为纵轴,查全率为横轴做二维图,就得到了查全率-查准率曲线,简称P-R曲线。

image_1b8bfnmk7l0v1hmjvhs1n3q10cj16.png-83.6kB

a.在进行比较的时候,若一个学习器的P-R曲线被另一个学习器的P-R曲线完全“包住”,则可断言后者的性能优于前者。

b.如果两个学习器的P-R曲线有相交,则比较曲线下方的面积大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。

c.面积很难计算,故人们设计了综合考量查准率与查全率的指标:平衡点(Break-Even Point, BEP).
平衡点是查全率=查准率时的取值,谁的平衡点高谁的性能就更优。

d.但BEP还是过于简单了,更常用的是F1度量。
image_1b8bga03v3o3tao1hiulop1ftv20.png-12.5kB

e.因为很多时候对查准率与查全率的重视程度不同,将F1写成一般形式Fβ,β的大小设置能表达出对查准率/查全率的不同偏好。
image_1b8bgcm2uffo1q6t1l3fa1g17oi2d.png-8.4kB

当β=1时,即为F1;
当β>1时,查全率更重要;
当0<β<1时,查准率更重要。

(3)全局性能计算
根据留存法或交叉验证法,为了保证随机选择的稳定性,都会进行多次试验,比如做100次随机选取,就会得到100个混淆矩阵。想要得到一个全局的混淆矩阵,一般有两个做法:

a.先在各个混淆矩阵上先算出各自的查准率与查全率,然后再计算平均值,得到“宏查准率”marco-P,“宏查全率”macro-R,“宏F1”macro-F1

b.先将混淆矩阵的对应元素进行平均,再根据这些平均值计算“微查准率”micro-P,“微查全率”micro-R,“微F1”micro-F1

2.3 ROC 与 AUC

在逻辑回归或者神经网络分类问题中,往往会输出一个概率值,将这个概率值与预先设定的阀值进行比较,大于阀值则为正例,小于阀值则为反例。等价于,按照概率将所有样本从大到小排列,设置某个“截断点”将样本分成前后两部分,前面的为正例,后面的为负例。如果更关注查准率则将截断点设置地大一点,若更关注查全率则将截断点设置地小一下。因此排序本省的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的还坏。ROC曲线就是从这个角度来研究学习器的泛化能力的。

ROC全称“受试者工作特征”(Receiver Operation Characteristic)曲线。

(1)ROC曲线的绘制
ROC曲线的纵轴是真正例率TPR,横轴是假正例率FPR。
image_1b8bikfo21gnl4as6co1mk4ihf2q.png-10.5kB

给定m+个正例,m-个反例,根据学习器预测的概率将样本从大到小排列。先把阀值设到最大,使得所有的样本都被预测为负,此时TPR,FPR都为0,在坐标(0,0)处标记一个点。接着将阀值依次设置为每个样例的概率值,计算TPR,FPR两个值作为坐标点,将所有点连接起来即得到ROC曲线
image_1b8bisk4p1lb114iu1koor4jmdb3n.png-52.2kB

(2)根据ROC曲线评估模型
a.若一个学习器的ROC曲线被另一个学习器的曲线完全包住,则后者优于前者。

b.若两个学习器的ROC曲线发生交叉,则可根据曲线下方的面积大小来比较,ROC曲线下方的面积为AUC(Area Under ROC Curve).

2.4 代价敏感错误率与代价曲线

将正例预测成了负,或将负例预测成了正,两者都是与预测错误,但是在实际的任务中可能会造成不同的损失和代价。为了权衡不同类型错误所造成的的不同损失,可为错误赋予“非均等代价”(unequal cost).

根据任务的领域知识设定代价矩阵cost matrix.costij表示第i类被预测成第j类的代价。
image_1b8bl2oj910qc1b12plrtdlbg844.png-18.4kB

(1)代价敏感错误率
可计算为:
image_1b8bmb9a6edp1abb7er1p5l4j95e.png-9.8kB

(2)代价曲线
在非均等条件下,ROC曲线不能直接反应学习器的期望总体代价。而代价曲线可以。

横轴是正例概率代价,取值[0,1],计算如下:其中p是样例为正的概率。
image_1b8bl5gotrja1n6vhl0lc41qh551.png-9kB

纵轴为归一化代价,取值[0,1],计算如下:
image_1b8bmg3ih1mbt1q8i14vv14dha655r.png-13.3kB
FNR假反例率,FPR假的正例率
FNR = 1- TPR = 1 - TP/(TP+FN)
FPR = FP/(FP+TN)

ROC曲线上的每一点代表了代价平面上的一条线段。设ROC上的一个坐标点(TPR, FPR).
可计算出FNR。
在代价平面上画一条从(0,FPR)到(FNR,1)的线段。
线段下的面积表示该条件下的期望总体代价。
将ROC曲线上的每一点都转换为代价曲线上的一条线段。
取所有线段的下界,围成的面积即为所有条件下学习器的期望总体代价。如下图:
image_1b8bn6vg111q1d7r12ogbrj1utb68.png-37.2kB


版权声明:本文为sinat_33761963原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。