sklearn分类评估参数 average

参数解释 

average: string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]

将一个二分类matrics拓展到多分类或多标签问题时,我们可以将数据看成多个二分类问题的集合,每个类都是一个二分类。接着,我们可以通过跨多个分类计算每个二分类metrics得分的均值,这在一些情况下很有用。你可以使用average参数来指定。

macro:计算二分类metrics的均值,为每个类给出相同权重的分值。当小类很重要时会出问题,因为该macro-averging方法是对性能的平均。另一方面,该方法假设所有分类都是一样重要的,因此macro-averaging方法会对小类的性能影响很大。

weighted:对于不均衡数量的类来说,计算二分类metrics的平均,通过在每个类的score上进行加权实现。

micro:给出了每个样本类以及它对整个metrics的贡献的pair(sample-weight),而非对整个类的metrics求和,它会每个类的metrics上的权重及因子进行求和,来计算整个份额。Micro-averaging方法在多标签(multilabel)问题中设置,包含多分类,此时,大类将被忽略。

samples:应用在multilabel问题上。它不会计算每个类,相反,它会在评估数据中,通过计算真实类和预测类的差异的metrics,来求平均(sample_weight-weighted)

average:average=None将返回一个数组,它包含了每个类的得分.

ROC曲线

macro:每种类别下,都可以得到m个测试样本为该类别的概率(矩阵P中的列)。所以,根据概率矩阵P和标签矩阵L中对应的每一列,可以计算出各个阈值下的假正例率(FPR)和真正例率(TPR),从而绘制出一条ROC曲线。这样总共可以绘制出n条ROC曲线。最后对n条ROC曲线取平均,即可得到最终的ROC曲线。

micro:首先,对于一个测试样本:1)标签只由0和1组成,1的位置表明了它的类别(可对应二分类问题中的‘’正’’),0就表示其他类别(‘’负‘’);2)要是分类器对该测试样本分类正确,则该样本标签中1对应的位置在概率矩阵P中的值是大于0对应的位置的概率值的。基于这两点,将标签矩阵L和概率矩阵P分别按行展开,转置后形成两列,这就得到了一个二分类的结果。所以,此方法经过计算后可以直接得到最终的ROC曲线。

 

PRF:准确率、召回率、F值


对于二分类问题,可将样例根据其真实类别和分类器预测类别划分为:
真正例(True Positive,TP):真实类别为正例,预测类别为正例。
假正例(False Positive,FP):真实类别为负例,预测类别为正例。
假负例(False Negative,FN):真实类别为正例,预测类别为负例。
真负例(True Negative,TN):真实类别为负例,预测类别为负例。
然后可以构建混淆矩阵(Confusion Matrix)如下表所示。
准确率,又称查准率(Precision,P):                                               

召回率,又称查全率(Recall,R):                                               


F1​值:                                            

F1​的一般形式F_beta:从公式中可以看出参数1其实是准确率和召回率的调和参数,小于1则提高准确率的权重,大于1则提高召回率的权重,因此在实际中也有F0.5-score, F2-score的使用                                           

 

宏平均(Macro-averaging)

分别计算每个类别的PRF,然后分别求平均得到PRF。即对多个混淆矩阵求PRF,然后求PRF的算术平均。宏平均指标相对微平均指标而言受小类别的影响更大。                                          

其中,,在计算宏平均F值时我给出了两个公式分别。都可以用。

举例,假设是三个类别的分类模型:(若除法过程中,分子分母同时为0,则结果也为0)

y_true=[1,2,3]
y_pred=[1,1,3]

(1)如下,将第一个类别设置为True(1),非第一个类别设置为False(0),

y_true=[1,0,0]
y_pred=[1,1,0]

由此我们统计得到第一个类别的混淆矩阵:

第一类预测
真(正)假(负)
实际真(正)1(TP)0(FN)
假(负)1(FP)1(TN)

我们可以计算第一个类别的PRF值如下:

  • P1 = TP/(TP+FP) = 1/(1+1) = 1/2
  • R1 = TP/(TP+FN) = 1/1 = 1
  • F1_1 = 2*P1*R1/(P1+R1) = 2/3

(2)如下,将第二个类别设置为True(1),非第二个类别设置为False(0),

y_true=[0,1,0]
y_pred=[0,0,0]

由此我们统计得到第二个类别的混淆矩阵:

 

第二类预测
真(正)假(负)
实际真(正)0(TP)1(FN)
假(负)0(FP)2(TN)

我们可以计算第二个类别的PRF值如下:

  • P2 = TP/(TP+FP) = 0
  • R2 = TP/(TP+FN) = 0
  • F1_2 = 2*P2*R2/(P2+R2) = 0

(3)如下,将第三个类别设置为True(1),非第三个类别设置为False(0),

y_true=[0,0,1]
y_pred=[0,0,1]

由此我们统计得到第三个类别的混淆矩阵:

 

第三类预测
真(正)假(负)
实际真(正)1(TP)0(FN)
假(负)0(FP)2(TN)

我们可以计算第三个类别的PRF值如下:

  • P3 = TP/(TP+FP) = 1/1 = 1
  • R3 = TP/(TP+FN) = 1/1 = 1
  • F1_3 = 2*P3*R3/(P3+R3) = 1

 (4)对P1, P2, P3取平均得到P, 对R1, R2, R3取平均得到R, 对F1_1, F1_2, F1_3求平均得到F1:

  • P = (P1+P2+P3)/3 = (1/2 + 0 + 1/3 = 1/2
  • R = (R1+R2+R3)/3=(1 +0 +1)/3 = 2/3
  • F1 = 2*P*R/(P+R) = 4/7

微平均(Micro-averaging)

对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标。

                            

 

举个简单的例子来理解,同上面的例子一样,假设是三个类别的分类模型:

y_true=[1,2,3]
y_pred=[1,1,3]

(1)如下,将第一个类别设置为True(1),非第一个类别设置为False(0),

y_true=[1,0,0]
y_pred=[1,1,0]

由此我们统计得到第一个类别的混淆矩阵:

第一类预测
真(正)假(负)
实际真(正)1(TP)0(FN)
假(负)1(FP)1(TN)

 (2)如下,将第二个类别设置为True(1),非第二个类别设置为False(0),

y_true=[0,1,0]
y_pred=[0,0,0]

由此我们统计得到第二个类别的混淆矩阵:

第二类预测
真(正)假(负)
实际真(正)0(TP)1(FN)
假(负)0(FP)2(TN)

 (3)如下,将第三个类别设置为True(1),非第三个类别设置为False(0),

y_true=[0,0,1]
y_pred=[0,0,1]

由此我们统计得到第三个类别的混淆矩阵:

第三类预测
真(正)假(负)
实际真(正)1(TP)0(FN)
假(负)0(FP)2(TN)

 (4)根据微平均算法公式我们得到最终的混淆矩阵,如下:

最终预测
真(正)假(负)
实际真(正)2/3(TP)1/3(FN)
假(负)1/3(FP)5/3(TN)

带入微平均公式得:

micro-P = TP/(TP+FP) = (2/3)/(2/3 + 1/3)= 2/3

micro-R = TP/(TP+FN) = (2/3)/(2/3 + 1/3)= 2/3

micro-F1 = 2*P*R/(P+R) = 2/3

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值