分类问题中的各种评价指标——precision,recall,F1-score,macro-F1,micro-F1

目录

一、二分类评价指标

1、真实标签-预测标签的混淆矩阵

2、accuracy

3、precision、recall和F1-score

4、指标的选择问题

二、多分类评价指标

1、macro-F1

2、weight-F1

3、micro-F1

4、指标的选择问题

三、多标签分类评价指标


注:这篇文章只是对常用的分类问题中的评价指标的总结。

一、二分类评价指标

1、真实标签-预测标签的混淆矩阵

样本被预测为正样本被预测为负
实际样本为正TP(true positive)FN (false negative)
实际样本为负FP(false positive)TN(true negative)

     TP:这里的T表示true,样本被正确的预测了,p即positive,表示样本被预测为正样本。

     TN:正确的预测了该样本,且样本预测值是负样本

     FP:错误的预测了该样本,且样本被预测成了正样本,说明样本本身是负样本

     FN:错误的预测了该样本,且样本被预测成了负样本,说明样本本身是正样本

     以上的四个值,是样本的真实标签和预测标签之间会发生的所有关联情况,也是分类指标计算的基础。

2、accuracy

       accuracy,后面简称acc,是分类中非常常见的一种评价指标,也是非常好理解的一种评价指标,即所有被预测的样本,预测正确的概率是多少,这个其实是比较直观的,就是正确预测样本的占比,计算公式如下:

                                                                            acc = \frac{TP + TN}{TP + TN + FP + FN}

       acc指标存在一个问题,只要样本的标签预测正确了,acc就会上升。如果一个数据集中,正负样本严重失衡,所有的正样本能检测出来,所有的负样本检测不出来,最后的acc还是会很高,但是这样也没有意义。比如在癌症检测里面,不患病的正样本很多,患病的负样本很少,如果只是检测出那些没有患病的人,而患病的样本都没有检测出来,计算acc的时候还是很高,但是实际上acc就不是很适用这种场景,因为如果患了癌症而系统检测检测不出来,那这个检测系统根本就没有意义。

3、precision、recall和F1-score

       precision和recall经常一起出现,它们都是只关心预测正确的正样本占的比例,只是分母不一样。precision即准确度,也是衡量分类器能正确识别样本的能力,它表示的是,在被识别成正样本的样本中,正确预测的样本占的比例,通常叫做查准率。recall即召回率,它表示的是,被预测的所有正样本,能够被正确预测的占比,通常叫查全率。计算公式分别如下:

       对于F1-score,更一般的有:

       可以看出, F1-score是一个综合的评价指标。对于precision和recall的选择,个人认为应该根据实际的应用场景来,最后想要的是更多的检测出想要的样本,还是尽量少出错。

4、指标的选择问题

        例如,在一个癌症病人的检测系统里,我们更希望的是,尽可能多的检测出癌症病人,因为希望它们能得到及时的治疗,那么这个时候就应该用recall,也就是查全率,尽可能将所有的癌症样本识别出来。

        如果是在一个垃圾邮件检测系统中,我们当然也很希望尽量检测出垃圾邮件,但是如果把一封正常邮件识别为垃圾邮件,可能会带来很严重的后果。所以,在这种情况下,我们要保证的是系统对邮件的判断的正确性,那么就要用precision,也就是查准率,保证定性为垃圾邮件的样本不出错。

       对于precision和recall的选择,包括acc的选择,个人比较赞同的是根据实际的分类任务或者目标,来确定使用哪种指标。acc的话,一般肯定是样本比较均衡的时候一种比较好的选择。

        多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨——NaNNN,这篇文章,作者还给出了一个需要同时考虑precision和recall的比较有趣的例子。

        分类问题的评估指标一览——老宋的茶书会,这篇文章作者也有给出一个指标的分析,但是觉得太过学术,不是很好理解。

二、多分类评价指标

        其实多分类评价指标也是从二分类评价指标演变而来的,现在来看一下各个指标实际关注的信息。

        对于accuracy来说,它是针对全局的样本的,只要样本被正确预测,公式的分子就加1,分母就是全部被预测的样本。所以,样本的类别标签对acc没有影响,acc只关注预测正确与否。所以,对于一个多分类模型,acc的计算方式跟二分类是一样的,都是以样本为单位的。

       对于其它指标的计算,如下:

1、macro-F1

      最直接的一种计算方式,就是分别计算每个类比的precision和recall,以此计算相应的F1,然后再用类别数平均一下F1,即为macro-F1,感觉这种计算方式比较好理解,也比较好实现。就是每个类别分别计算了,然后再平均。

2、weight-F1

         这种方式是在macro-F1的基础上考虑到类别不平衡的问题,假设有三类,样本数分别为c1,c2和c3,那么每一类的权重分别为ci/(c1+c2+c3),则precision的计算方式是每个类别的precision和其权重的加权平均,recall也同理,F1则直接由precision和recall计算得到。

3、micro-F1

      这种方式是以样本为基本单位,直接根据公式计算全局的precision和recall,计算公式如下:

      对于micro-F1,有一个很有意思的性质:

     具体的可以参考这篇文章:多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨——NaNNN

4、指标的选择问题

      从计算公式来看,micro-F1依赖于每个类别的识别准确度,而对于那些样本比较小的类别,可能会拉高precision,所以类别不平衡时用这个指标不怎么合适。在这篇文章:分类问题的评估指标一览——老宋的茶书会,中给出了类别不均衡带来的指标影响,以及指标选择的结论,部分如下:

我们看到,对于 Macro 来说, 小类别相当程度上拉高了 Precision 的值,而实际上, 并没有那么多样本被正确分类,考虑到实际的环境中,真实样本分布和训练样本分布相同的情况下,这种指标明显是有问题的, 小类别起到的作用太大,以至于大样本的分类情况不佳。 而对于 Micro 来说,其考虑到了这种样本不均衡的问题, 因此在这种情况下相对较佳。

总的来说, 如果你的类别比较均衡,则随便; 如果你认为大样本的类别应该占据更重要的位置, 使用Micro; 如果你认为小样本也应该占据重要的位置,则使用 Macro; 如果 Micro << Macro , 则意味着在大样本类别中出现了严重的分类错误; 如果 Macro << Micro , 则意味着小样本类别中出现了严重的分类错误

为了解决 Macro 无法衡量样本均衡问题,一个很好的方法是求加权的 Macro, 因此 Weighed F1 出现了。

三、多标签分类评价指标

       参考:Machine Learning]分类问题的性能度量方法——二分类、多分类、多标签分类

                  多标签分类(multilabel classification )

注:文章是在看了其它文章的基础上总结的,因为定义性的东西就是很确定的,所以公式就直接用其它文章的公式截图的(因为自己输入太耗时了)。对于觉得比较有参考价值的文章,已经在文中穿插给出链接了。本文章也仅作为自己对相关知识点的总结,一点点自己的白话理解,加上前辈的知识总结,以便日后有问题的时候可以再回顾,以免再再网上看多篇文章。 

  • 15
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个文本是一个混淆矩阵的输出结果,而且其还包含了其它的统计信息,因此需要更加复杂的字符串处理。下面是一个示例代码,可以将其拆分成多个部分: ```python result = " 2 0.86 0.43 0.57 1628 micro avg 0.88 0.88 0.88 21729 macro avg 0.87 0.75 0.79 21729 weighted avg 0.88 0.88 0.87 21729 samples avg 0.88 0.88 0.88 21729 precision recall f1-score support 0 0.92 0.92 0.92 10762" # 拆分成多个部分 parts = result.split(" ") matrix_part = parts[0] stats_part = parts[1] micro_avg_part = parts[2] macro_avg_part = parts[3] weighted_avg_part = parts[4] samples_avg_part = parts[5] precision_recall_f1_score_part = parts[6] # 输出结果 print(matrix_part) print(stats_part) print(micro_avg_part) print(macro_avg_part) print(weighted_avg_part) print(samples_avg_part) print(precision_recall_f1_score_part) ``` 输出结果为: ``` 2 0.86 0.43 0.57 1628 micro avg 0.88 0.88 0.88 21729 macro avg 0.87 0.75 0.79 21729 weighted avg 0.88 0.88 0.87 21729 samples avg 0.88 0.88 0.88 21729 precision recall f1-score support 0 0.92 0.92 0.92 10762 ``` 其,`matrix_part` 表示混淆矩阵的部分,`stats_part` 表示统计信息的部分,`micro_avg_part` 表示微平均的部分,`macro_avg_part` 表示宏平均的部分,`weighted_avg_part` 表示加权平均的部分,`samples_avg_part` 表示样本平均的部分,`precision_recall_f1_score_part` 表示每个类别的精确率、召回率和 F1 值的部分。你可以根据需要对这些部分进行进一步的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值