分类模型常用的评价指标

分类模型的评价指标的重要性不亚于设计一个好的网络模型,只有通过合理的评价指标,才能衡量一个模型的好坏和选择一个合适的模型。

以下所有内容,如有侵权,请联系删除~

混淆矩阵

对于二分类问题,有 FP,TP,FN,TN四个参数来表示模型的预测情况。这四个参数的第一个字母T/F为True和False这两个单词的首字母缩写,表示分类是否正确。T表示分类正确,F表示分类错误。P/N是英文单词Positive和Negative的首字母缩写,表示预测的标签是什么,P表示预测的类别是正类,N表示预测的类别是负类。

将T/F和P/N两个字母表示连接起来,便可以知道预测是否正确,以及预测的类别是什么。比如FP 为 false positive,从前往后理解,错误的正类,表示模型把负类错误地分成正类的样本数量。其他三个也可以类推理解。

这四个参数涵盖了模型预测所有可能的情况,根据这四个参数可以延伸出一系列评价模型性能的指标。

准确率acc

准确率可能是我们涉及比较多的一个指标,其计算公式为:

a c c = ( T P + T N ) ( T P + T N + F N + F P ) acc={(TP+TN) \over (TP+TN+FN+FP)} acc=(TP+TN+FN+FP)(TP+TN)

这个指标利用所有预测正确的样本数量除以所有样本的数量。其含义是,所有样本中,预测正确(包括正负样本)的样本数量的比例。

准确率的使用有一定的局限性。比如当样本不平衡时,假设有99个负例,一个正例。如果模型将这些样本全部预测成了负例,准确率为99%,这显然是不合理的,此时准确率就失去了衡量模型性能的作用。

在这种情况下,可以使用查准率和查全率,这两个指标对长尾数据集的模型评价更有说服力。

精确率/查准率pre

查准率又叫精确率,精确率计算公式为:

p r e = T P ( T P + F P ) pre={TP\over(TP+FP)} pre=(TP+FP)TP

这个指标的含义是所有预测为正例的样本中正例预测正确的样本个数

精确率反映预测为正类的样本中有多少是预测对的,衡量模型预测的精确性。比如模型预测出了100个正类,但实际上只有50个是预测正确的,剩余50个均是误分类,那么这个类别对应的精确率为50%,性能就比较低了。

在实际的应用中,会存在要求精确率很高的情况,比如邮件过滤系统,希望所有的垃圾邮件能准确的过滤出来,而不希望将非垃圾邮件被过滤,在这种情况下,我们当然希望精确率越高越好。

召回率,查全率

召回率又称查全率,计算公式为:

r e c a l l = T P ( T P + F N ) recall={TP\over{(TP+FN)}} recall=(TP+FN)TP

这个指标的含义是,实际为正例的样本中,有多少正例被检测出来了。

在一些场景中,例如当模型漏检会产生重大影响时,就需要recall指标越高越好。比如在癌症检测病例中,我们希望宁愿误诊,也不愿意放过(因为一旦没有检查出来,耽误治疗,属于医疗事故),这时我们就会希望模型能把所有的正例样本都检测出来,因此可用查全率衡量模型的性能,查全率越高越好。

一般说来,查全率高的时候,查准率低;查全率低的时候查准率高。这个原因比较简单,如果你想查全率高,模型就需要把看起来可能像正类的样本都划分为正类,假设所有样本中共30个正例,模型为了预测出这30个正例,把所有看起来像正例的都预测为正例,预测出了100个正例,也包括了这30个真正例在里面,那么此时查全率为100%,也就是全部查出来了。但是查准率反而降低了,为了找出所有的正例,模型“放宽了标准“,导致其他类别被误分为正例,查准率只有30%。

同样在要求查准率高的时候,模型会将有把握的样本分类为正类,如果没有把握就不分为正类。模型会“提高标准”以增加分类的正确性,这样会有一些正例被预测为了负例。比如所有样本中正例有30个,模型只预测出了15个正例,且这15个是30个正例中的一部分。那么查准率为100%,而查全率为50%,只有一半的正例被检测出来了。

因此查全率和查准率是一对矛盾的集合体,需要根据业务的特点进行选择。一般使用召回率对模型进行评价即可。

PR曲线

在样本类别数量平衡的时候,使用PR曲线可以直观的看出模型的优劣,对模型选择进行评估。

PR曲线是以查全率为横坐标,查准率为纵坐标进行绘制。模型预测二分类的时候,会得到两个概率,两个概率之和为1,一般以概率较大的那个数值作为预测的类别。实际上默认了阈值为0.5,哪个类别的概率大于0.5就是哪个类别。而PR曲线绘制则通过不断改变阈值,得到一系列的P和R,利用这些P和R便可以绘制出一条曲线,这条曲线就是PR曲线图。阈值一般是从0到1开始递增,变化的步长可以以每一个样本的概率值作为阈值,或者按一定的步长作为阈值。绘制具体步骤如下:

  1. 保存每个测试样本的真实类别,概率值。根据阈值确定每个样本的预测类别;
  2. 计算出混淆矩阵;
  3. 根据混淆矩阵计算出pre,recall,此时可以确定一个PR曲线中的一个点;
  4. 变化阈值,重复1-4。获得多组(pre,recall),根据此可以得到一个完整的PR曲线。

以下是一个PR曲线图:
在这里插入图片描述

如上图所示,当模型A的曲线完全包住模型C的PR曲线,那么模型A的性能优于模型C。这个很好理解,在定住某个变量的情况下,A的查准率或者查全率均大于B,那肯定是优秀的。

但也会存在两个模型曲线存在交叉的情况,如上图所示的A和B,为了更加准确的计算,可以采用平衡点或者F1 score的方式度量。

平衡点(break-event point)是查全率等于查准率时的取值。找出多个模型P=R时的R,R越大的模型性能越好。比如上图,在平衡点处,A模型的P和R明显大于B模型,A模型性能优于B模型。

F1是查全率和查准率的调和平均,具体原理,请接着往下看。

F1-score

如上图A模型和B模型所示,当两个模型的指标数值发生冲突时就很难进行比较哪个模型性能更好,所谓的冲突就是在某个范围内A模型的P/R比B模型的P/R高,但在另一个某个范围内B的P/R比A模型的P/R高之类的情况。这时就可以利用F1进行比较,F1越大,模型性能越好。

首先看一下四个平均算法,如下所示:

调和平均数: H n = n 1 a 1 + 1 a 2 + . . . + 1 a n H_n={n\over{{1\over a_1}+{1\over a_2}+...+{1\over a_n}}} Hn=a11+a21+...+an1n

几何平均数: G n = ( a 1 a 2 . . . a n ) 1 n G_n=(a_1a_2...a_n)^{1\over n} Gn=(a1a2...an)n1

算术平均数: A n = a 1 + a 2 + . . . + a n n A_n={a_1+a_2+...+a_n\over n} An=na1+a2+...+an

平方平均数: Q n = a 1 2 + a 2 2 + . . . + a n 2 n Q_n=\sqrt{{a_1^2+a_2^2+...+a_n^2\over n}} Qn=na12+a22+...+an2

这四种平均数满足 H n < = G n < = A n < = Q n H_n<=G_n<=A_n<=Q_n Hn<=Gn<=An<=Qn

F1 score实际上是对pre和recall进行了一个调和平均。

F 1 = 2 1 P + 1 R = 2 ∗ P ∗ R P + R F1=\frac{2}{\frac{1}{P}+\frac{1}{R}}=\frac{2*P*R}{P+R} F1=P1+R12=P+R2PR

但是这种评价方式存在一个缺陷,当A模型的P等于B模型的R,同时A模型的R等于B模型的P时,这时二者的F1都是一样的难以评价其模型性能。

这时就有 F β F_\beta Fβ指标进行评价。F1指标认为召回率和精准率同等重要,F2指标认为召回率的重要程度是精准率的2倍,而F0.5认为召回率的重要程度是准确率的一半。 F β F_\beta Fβ计算公式如下所示:

F β = 1 + β 2 β 2 R + 1 P F_\beta={1+\beta^2\over{{\beta^2\over R}+{1\over P}}} Fβ=Rβ2+P11+β2

样本不平衡时的模型选择

为什么要使用ROC和AUC?

ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比。
在这里插入图片描述
在上图中,(a)和©为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,©和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。

ROC(Receiver Operating Characteristic),受试者工作特征曲线。绘制ROC用到两个指标:FPR(伪正类率),TPR(真正类率,正类的覆盖率)

F P R = F P T N + F P T P R = T P T P + F N FPR={FP\over TN+FP} \\TPR={TP\over TP+FN} FPR=TN+FPFPTPR=TP+FNTP

FPR是负类中有多少被误分为正例,TPR是有多少正例被正确的分类为正例也就是查全率。具体流程跟绘制PR曲线一样,设置多个阈值,每个阈值对应一个FPR,TPR,然后以FPR为横坐标,TPR为纵坐标进行绘制。

AUC(Area Under Curve),被定义为ROC曲线下的面积,AUC一般在0.5到1之间,auc值越大表明模型有更好的表现性能。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

那么该如何计算AUC的面积呢,这里有几个方法:

方法一:
假设总样本里面有M个正样本,N个负样本,那么一共有M*N个正负样本对。此方法统计所有样本对里面正样本概率大于负样本概率的数量,这个数量占样本对数的比例就是AUC,公式如下:

r ( I p , I n ) = { 1 , I p > I n ; 0.5 , I p = I n ; 0 , I p < I n ; A U C = ∑ r ( I p , I n ) M ∗ N r(I_p,I_n)=\begin{cases} 1,I_p>I_n;\\0.5,I_p=I_n;\\0,I_p<I_n;\end{cases} \\ AUC={\sum r(I_p,I_n)\over M*N} r(Ip,In)=1,Ip>In;0.5,Ip=In;0,Ip<In;AUC=MNr(Ip,In)

其中, r ( I p , I n ) r(I_p,I_n) r(Ip,In)是数量统计,如果样本对的概率相等,那就算0.5个样本数量。

方法二:

假设总样本里面有M个正样本,N个负样本。此方法首先根据概率对样本从小到大排序,每个样本的序号从1到M+N。统计所有正样本的序号和,减去一个常数,除以总的样本对数,结果就是AUC,公式如下:

A U C = ∑ i ∈ P r a n k i − M ∗ ( M + 1 ) 2 M ∗ N AUC={\sum_{i\in P}rank_i-{M*(M+1)\over2} \over M*N} AUC=MNiPranki2M(M+1)

其中, i ∈ P i\in P iP表示i是一个正样本, r a n k i rank_i ranki表示正样本的排序序号。

如果出现了概率一样的样本,那么求出这些样本的平均值,然后作为正例样本的序号。这几个样本的顺序不重要,只要记住求平均,然后作为概率一样的正样本的序号即可。

auc = roc_auc_score(y_true, y_pred)

多分类

多任务分类中的同步收敛问题

到了多分类,评价指标主要有以下几个:

macro-average方法:首先计算各个类别各自的P,R,然后对每个类别的P,R分别相加求平均。

Weighted-average方法:首先计算各个类别各自的P,R,然后根据每个类别的样本数量为每个类别的P,R分配权重。某个类别的数量可以由recall中的TP和FN相加得到。

Micro-average方法:把各个类别的TP, FP, FN先分别相加之后,在根据PR公式进行计算。Micro-Precision=Micro-Recall=Micro-F1 score=Accuracy。这种方法其实就是二分类准确率的计算方式,首先把所有分类正确的加在一起作为分子,然后将所有的样本加在一起作为分母。

为什么micro-P=micro-R=micro-F1=acc?

下图是一个多分类的混淆矩阵,我们可以从下面这个混淆矩阵分析一下为什么micro-P=micro-R=micro-F1=acc。

在这里插入图片描述

首先,FN的总数和FP的总数是一样的,通俗一点来说,某个样本预测错了,预测成其他的类别,那么这个类别的FN增加,其他类别的FP增加,FN和FP始终保持相等。由于

∑ i T P + ∑ i F N = \sum_iTP+\sum_iFN= iTP+iFN=

样本总数,所以

∑ i T P + ∑ i F N = ∑ i T P + ∑ i F P \sum_iTP+\sum_iFN=\sum_iTP+\sum_iFP iTP+iFN=iTP+iFP=样本总数

根据定义,可以知道micro-P=micro-R=micro-F1=acc。

以上就是关于分类模型常用的评价指标,欢迎交流讨论~

参考:

https://blog.csdn.net/ningyanggege/article/details/81660950

https://zhuanlan.zhihu.com/p/58587448

https://blog.csdn.net/qq_22238533/article/details/78666436
https://blog.csdn.net/qq_22238533/article/details/78666436

https://zhuanlan.zhihu.com/p/154379269

https://bbs.cvmart.net/articles/2840

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在sklearn中,多分类模型评价指标包括准确率、混淆矩阵、精确率、召回率、F1-score、支持度等。 首先,准确率是评价多分类模型性能的常用指标之一。它表示模型预测正确的样本占总样本数的比例。准确率越高,模型的性能越好。 其次,混淆矩阵是多分类模型评价的重要工具。它是一个正方形矩阵,行表示实际类别,列表示预测类别。矩阵的每个元素表示被分为某个类别的样本数。通过分析混淆矩阵可以得到模型在不同类别上的预测情况。 除了准确率和混淆矩阵之外,精确率和召回率也是常用的多分类模型评价指标之一。精确率表示在所有被预测为某一类别的样本中,实际属于该类别的比例。召回率表示在所有实际属于某一类别的样本中,被正确预测为该类别的比例。 F1-score是综合衡精确率和召回率的指标,它是二者的调和均值,可以更全面地评估模型的性能。F1-score越高,模型的性能越好。 最后,支持度指标表示每个类别在样本中的出现次数。该指标可以衡模型对各个类别的预测能力。支持度越高,表示该类别在样本中的比例越大。 在sklearn中,我们可以使用相应的函数或方法计算这些多分类模型评价指标,如准确率可以使用accuracy_score函数,混淆矩阵可以使用confusion_matrix函数,精确率和召回率可以使用classification_report函数,F1-score可以使用f1_score函数,支持度可以使用value_counts方法等。通过这些评价指标,我们可以对多分类模型的性能进行全面的评估和比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值