【机器学习】模型评估与选择

时间:2022-12-26 07:56:02

模型评估与选择






一、评估方法

通常可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。一般对样本集进行适当的划分得到训练集 S 和测试集 T。但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练过程中使用过。
测试样本为什么要尽可能不出现在训练集中呢?试想:老师出 10 道习题供同学们练习,考试时老师又用同样的
这 10 道题作为试题,那基于这些试题测得的考试成绩能否有效反映同学学得好不好呢?答案是否定的,因为可
能有的同学只会做这 10 道题却能得高分。
因此,对于获取到的宝贵的数据集而言,我们通常需要对其进行划分。常用的划分方法有:
1、留出法
2、交叉验证法
3、自助法


1、留出法

“留出法” (hold-out) 直接将数据集划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集T,即 D=S∪T,S∩T=Ф。在 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。
需注意的是,训练 / 测试集的划分要尽可能保持数据分布的一致性。例如在分类任务中,至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。例如,通过对 D 进行分层采样而获得含 70% 样本的训练集 S 和含 30% 样本的测试集 T。若 D 包含 500 个正例、 500 个反例,则分层采样得到的 S 应包含 350 个正例、 350 个反例,而 T 则包含 150 个正例和 150 个反例;若 S、T 中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。
留出法需划分训练 / 测试集,这会导致一个窘境:若令训练集 S 包含绝大多数样本,则训练出的模型可能更接近于用 D 训练出的模型,但由于 T 比较小,评估结果可能不够稳定准确;若令测试集 T 多包含一些样本,则训练集 S 与 D 差别更大了,被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。这个问题没有完美的解决方案,常见做法是将大约 2/3~4/5 的样本用于训练,剩余样本用于测试。


2、交叉验证法

测试集很宝贵,最好是在调参、优化之后,最终再用于测试。就像历年高考真题一样,最好用在最终临考前进行测试,以评估自己大概能取得怎样的成绩。所以对于训练集而言,可以单独划分一些数据出来用于提前“测试”(可以理解为月考),来帮助用于调整、优化自己。因此,可把单独划分出来的这部分数据称为“验证集”。
例如,可将训练集中的数据划分为互斥的 k 份(尽量保证数据分布的一致性),将其中的 k-1 份用于训练,剩下的那 1 份用于验证(按这样的划分方式可获得 k 组训练 / 测试集)。即在经过其他 k-1 份数据训练后,再用最后 1 份数据进行测试,算出在此数据集上的准确率。但是这里有个问题:如果最后那份数据集比较极端,那么在该数据集上得到的分数将不能用以反映最终的模型准确度。为此,可将上述实验进行 k 次,每次选择不同的训练集与验证集来进行验证,并将最终得到的各预测值来算平均值。
显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold cross validation)。k 最常用的取值是 10,此时称为 10 折交叉验证明。

【机器学习】模型评估与选择


3、自助法

我们希望评估的是用 D 训练出的模型。但在留出法和交叉验证法中,由于都保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D 小,这必然会引入一些因训练样本规模不同而导致的估计偏差。有没有什么解决办法呢?
“自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础。给定包含 m 个样本的数据集 D,我们对它进行采样产生数据集 D’:每次随机从 D 中挑选一个样本,将其拷贝放入 D’,然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,我们就得到了包含 m 个样本的数据集D’,这就是自助采样的结果。显然,D 中有一部分样本会在 D’中多次出现,而另一部分样本不出现。可以做一个简单的估计,样本在 m 次采样中始终不被采到的概率是 (1 − 1/????)m,取极限得到:

【机器学习】模型评估与选择

即通过自助采样,初始数据集 D 中约有 36.8% 的样本未出现在采样数据集 D’中。于是可以将 D’用作训练集,D-D’ 用作测试集;这样,实际评估的模型与期望评估的模型都使用 m 个训练样本,而我们仍有数据总量约 1/3 的、没在训练集中出现的样本用于测试。这样的测试结果,亦称“包外估计”(out-of-bag estimate)。




二、性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
要评估学习器 ???? 的性能,就要把学习器的预测结果 ???? ???? 与真实标记 ???? 进行比较。回归任务最常用的性能度量是“均方误差”(mean squared error):

【机器学习】模型评估与选择

分类任务中最常用的性能度量有:
1、错误率与准确率
2、查准率、查全率与 F1
3、ROC 和 AUC
4、代价敏感错误率与代价曲线


1、错误率与准确率

错误率与准确率是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,准确率则是分类正确的样本数占样本总数的比例。对样例集 D 分类错误率定义为:

【机器学习】模型评估与选择
准确率则定义为:

【机器学习】模型评估与选择


2、查准率、查全率

考虑一种情况,医院有1000个人来查核酸,其中已知有990个人是阴性,剩余10人是阳性。现在有一分类器,无论其输入是什么它都输出“阴性”(即,它认为所有人都是“阴性”,将此类视为正例)。那么此时,用该分类器在医
院进行核酸查验时,它的准确率将达到 990 / 1000 = 99.00%,这是一个非常高的准确率。但是,实际上这个分类器的效果并不好。因此,评判一个模型的好坏仅靠准确率(或错误率)指标是不充分的。
在上面的例子中,如果我们考虑那 10 个阳性,则分类器在“筛选阳性”这项工作时的准确率为 0 / 10 = 0.00% 。可见,在寻找反例这项工作中,该分类器表现相当糟糕。因此,在对模型进行评估时,应该从多个角度去评判。
实际上,对于一个模型的评估,不能仅看它在“分类正确上”上“能做多好”,还需要考虑它在“分类错误上”上“能不能尽量少失误”。为此,引入混淆矩阵(Confusion Matrix)。其格式如下:

【机器学习】模型评估与选择

其中:
T=true, F=False, P=Positive, N=Negative;
TP+FP+TN+FN = 样例总数。


举例:医院有 1000 个人来查核酸,其中已知有 900 个人是阴性,其余 100 人是阳性。
目标:找出所有阳性(视阳性为正例)。
若该分类器选出了120个人,其中核酸为阳性的有 90 人,还错误地将 30 例阴性也选出来了。则可以画出分类结果混淆矩阵为:

【机器学习】模型评估与选择

对上表中的结果进行解释:
true negative:90个“阳性”被正确地分类到“阳性”类别中;
false positive:30个“阴性”被错误地分类到“阳性”类别中;
false negative:10个“阳性”被错误地分类到“阴性”类别中;
true positive:870个“阴性”被正确地分类到“阴性”类别中;
一个完美的分类器应该只有 true positives 和 true negatives,即主对角线元素不为0,其余元素为0。


有了混淆矩阵后,就能引入两个新的评判标准——查准率(也称精度)和查全率(也称召回率)来较为全面地评判一个模型的好坏。其定义如下:

【机器学习】模型评估与选择

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
比如在前面的例子中,可以算出该模型的查准率和查全率分别为:

【机器学习】模型评估与选择


阈值对查准率、查全率的影响

在用分类器进行预测,即调用方法 clf.predict() 时,最终返回的是一个 bool 值(指代是与否:对某个东西的预测结果)。对于一组数据,只要拥有原始标签和这些预测值,就能算出它的查准率和查全率。但实际上, clf.predict( )方法的真实过程如下:
1、对所有样本调用 clf.decision_function() 计算数据在通过拟合函数计算后得到的分数;
2、划定阈值;
3、根据阈值的划分来对样本数据进行分类。
因此,当设置的阈值不同时,最终得到的分类结果也是不同的。一般来讲,提高阈值,会有假正例成为一个真反例,从而提高准确率;反之,降低阈值可提高召回率、降低精确率。下图展示了对手写数字 5 进行预测时,提高阈值对精确率和查全率的影响。

【机器学习】模型评估与选择

注:当提高阈值时,准确率通常会随之提高,但这并不绝对;而当提高阈值时,召回率只会降低。这就解释了为什么召回率的曲线更加平滑,而精确率的曲线有时会起伏不平。

【机器学习】模型评估与选择


3、F1度量(基于查准率与查全率的调和平均)

查准率与查全率各有侧重,若希望对其进行综合考量,可引入 F1 度量,其定义如下:

【机器学习】模型评估与选择
由此定义可知,调和平均值给予低值更多权重。因此,如果查准率和查全率都很高,分类器将获得高F1分数。
在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。????1 度量的一般形式 ???????? 能让我们表达出对查准率/查全率的不同偏好,它定义为:

【机器学习】模型评估与选择

其中 ???? > 0 度量了查全率对查准率的相对重要性。
???? = 1 时退化为标准的 ????1 ; ???? > 1 时查全率有更大影响;???? < 1 时查准率有更大影响。


4、P-R Curve

在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把当前样本作为“正负例的阈值”,并对样本进行分类预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率
-查全率曲线,简称P-R曲线,显示该曲线的图称为“P-R图”。
P-R图直观地显示出学习器在样本总体上的查全率、查准率,在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,如图,学习器A的性能优于学习器C;如果两个学习器的P-R曲线发生了交叉,例如图中的A与B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。然而,在很多情形下,人们往往仍希望把学习器A与B比出个高低。这时一个比较合理的判据是比较 P-R 曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。但这个值不太容易估算,因此,人们设计了一些综合考虑查准率、查全率的性能度量。
“平衡点”(Break-Event Point,简称 BEP)就是这样一个度量,它是“查准率=查全率”时的取值。如右图中,学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B。
但BEP还是过于简化了些,更常用的还是 F1 度量。

【机器学习】模型评估与选择


5、ROC Curve

ROC 曲线全称 Receiver Operating Characteristic Curve(受试者特征曲线)。
它与P-R曲线非常相似,但不是画出准确率对召回率的曲线。ROC 曲线是真正例率(true positive rate,TPR)对假正例率(false positive rate, FPR)的曲线。其中:

【机器学习】模型评估与选择

FPR 是反例被错误分成正例的比率。它等于 1 减去真反例率(true negative rate,TNR)。TNR是反例被正确分类的比率。TNR也叫做特异性。所以 ROC 曲线画出召回率对(1 减特异性)的曲线。

【机器学习】模型评估与选择

通过 ROC 曲线来比较分类器优劣的一个方法是:测量 ROC 曲线下的面积(AUC)。完美分类器的 ROC 曲线下面积等于 1(或等于0),而一个纯随机分类器 ROC 曲线下的面积等于 0.5。

【机器学习】模型评估与选择


PRC和ROC的选用准则

PRC 和 ROC 很相似,那如何决定在什么情况下该优先使用何种曲线呢?一个笨拙的规则是:当正例很少,或当你关注假正例多于假反例的时候优先使用 PRC;其他情况则使用 ROC 曲线。
举个例子,上面的 ROC 曲线和 AUC 值都取得较为不错的效果,你或许认为这个分类器很棒。但出现这情况几乎全是因为只有少数正例(“是 5”),而大部分是反例(“非5”);相反,PR 曲线清楚显示出这个分类器还有很大的改善空间(PR 曲线应该尽可能地靠近右上角)。


PRC和ROC的差异

PR和ROC在面对不平衡数据时的表现是不同的。在数据不平衡时,PR曲线是敏感的,随着正负样本比例的变化,PR会发生强烈的变化。而ROC曲线是不敏感的,其曲线能够基本保持不变。
ROC 对数据的不敏感表明其在衡量一个模型本身的预测能力时,与样本正负比例无关。但是这个不敏感的特性又使得其较难以看出一个模型在面临样本比例变化时模型的预测情况。而PRC因为对样本比例敏感,因此能够看出分类器随着样本比例变化的效果。而实际中的数据又是不平衡的,这样有助于了解分类器实际的效果和作用,也能够以此进行模型的改进。
综上,在实际学习中,我们可以使用ROC来判断两个分类器的优良,然后进行分类器的选择,然后可以根据PRC表现出来的结果衡量一个分类器面对不平衡数据进行分类时的能力,从而进行模型的改进和优化。


6、代价敏感错误率与代价曲线

在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机。为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequa1 cost)。
以二分类任务为例,我们可根据任务的领域知识设定一个“代价矩阵”(cost matrix),如下表所示,其中 ???????????????????????? 表示将第 ???? 类样本预测为第 ???? 类样本的代价。一般来说, ????????????????????????= 0 ;若将第 0 类判别为第 1 类所造成的损失更大,则 ????????????????01> ????????????????10;损失程度相差越大,????????????????01 与 ????????????????10 值的差别越大。

【机器学习】模型评估与选择

在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若将
上表中的第 0 类作为正类、第 1 类作为反类,令 D+ 与 D- 分别代表样例集 D 的正例子集和反例子集,则“代价
敏感”(cost-sensitive)错误率为:

【机器学习】模型评估与选择

在非均等代价下,ROC 曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve) 则可达到该目的。代价曲线图的横轴是取值为 [0,1] 的正例概率代价:

【机器学习】模型评估与选择

其中 ???? 是样例为正例的概率;纵轴是取值为 [0,1] 的归一化代价:

【机器学习】模型评估与选择

其中 FPR 是假正例率,FNR=1-TPR 是假反例率。
代价曲线的绘制很简单:ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为 (TPR , FPR),则可相应计算出FNR,然后在代价平面上绘制一条从 (0 , FPR) 到 (1 , FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如下图所示:

【机器学习】模型评估与选择


三、参考博客

机器学习实战_分类(一)
终于搞懂了PR曲线


END