点击上方,选择星标或置顶,每天给你送干货!
阅读大概需要10分钟
跟随小博主,每天进步一丢丢
作者:老宋的茶书会
方向:自然语言处理
知乎:https://zhuanlan.zhihu.com/p/69101372
编辑:王萌 澳门城市大学(深度学习自然语言处理公众号)
最近分类问题搞的有点多,但对一些指标依旧有模糊的地方(虽然做了笔记), 事实证明, 笔记笔记,没有进到脑子里呀。因此,我想着肯定有跟我一样半生半熟的小伙伴在分类指标这块依旧有迷惑,毕竟常用的几个大多数情况下就够用了, 这篇文章就主要讲一讲分类的评估指标。
TP:True Positives, 表示实际为正例且被分类器判定为正例的样本数
FP:False Positives, 表示实际为负例且被分类器判定为正例的样本数
FN:False Negatives, 表示实际为正例但被分类器判定为负例的样本数
TN:True Negatives, 表示实际为负例且被分类器判定为负例的样本数
一个小技巧, 第一个字母表示划分正确与否, T 表示判定正确(判定正确), F表示判定错误(False);第二个字母表示分类器判定结果, P表示判定为正例, N表示判定为负例。
Accuracy:
Accuracy 能够清晰的判断我们模型的表现,但有一个严重的缺陷:在正负样本不均衡的情况下,占比大的类别往往会成为影响 Accuracy 的最主要因素,此时的 Accuracy 并不能很好的反映模型的整体情况。
Precision:
Recall:
Precision 与 Recall 的权衡
精确率高,意味着分类器要尽量在 “更有把握” 的情况下才将样本预测为正样本, 这意味着精确率能够很好的体现模型对于负样本的区分能力,精确率越高,则模型对负样本区分能力越强。
召回率高,意味着分类器尽可能将有可能为正样本的样本预测为正样本,这意味着召回率能够很好的体现模型对于正样本的区分能力,召回率越高,则模型对正样本的区分能力越强。
从上面的分析可以看出,精确率与召回率是此消彼长的关系, 如果分类器只把可能性大的样本预测为正样本,那么会漏掉很多可能性相对不大但依旧满足的正样本,从而导致召回率降低。
F1-Score 能够很好的评估模型,其主要用于二分类问题, 计算如下:
而 更一般的有 :
其实, 本质上是Recall, Precision 权重比, 当 时, 表明 Recall 的权重要比Precision高,其影响更大, ;当 时, 表明 Recall 的权重要比Precision低, 对应的影响更小;
前面提到 F1 针对的是二分类,而更一般的是,对于多分类问题来说, F1 的计算有多种方式,可以参见 Scikit-Learn 中的评价指标,我们来分别介绍一下。
对于一个多分类问题,假设,对于分类 而言有: , 那么各种 F1 的值计算如下。
Macro F1: 宏平均
Macro 算法在计算 Precision 与 Recall 时是先分别计算每个类别的Precision 与 Recall, 然后再进行平均。
那么我们就得到最终的 Macro F1 的计算为:
我们看到, Macro F1 本质上是所有类别的统计指标的算术平均值来求得的,这样单纯的平均忽略了样本之间分布可能存在极大不平衡的情况
Micro F1 :微平均
Micro 算法在计算 Precision 与 Recall 时会将所有类直接放到一起来计算。
Macro vs Micro [1]
Macro 相对 Micro 而言,小类别起到的作用更大,举个例子而言,对于一个四分类问题有:
class A:1 TP, 1 FP
class B:10 TP , 90 FP
class C:1 TP, 1 FP
class D:1 TP, 1 FP
那么对于 Precision 的计算有:
我们看到,对于 Macro 来说, 小类别相当程度上拉高了 Precision 的值,而实际上, 并没有那么多样本被正确分类,考虑到实际的环境中,真实样本分布和训练样本分布相同的情况下,这种指标明显是有问题的, 小类别起到的作用太大,以至于大样本的分类情况不佳。而对于 Micro 来说,其考虑到了这种样本不均衡的问题, 因此在这种情况下相对较佳。
总的来说, 如果你的类别比较均衡,则随便;如果你认为大样本的类别应该占据更重要的位置, 使用Micro;如果你认为小样本也应该占据重要的位置,则使用 Macro;如果 Micro << Macro , 则意味着在大样本类别中出现了严重的分类错误;如果 Macro << Micro , 则意味着小样本类别中出现了严重的分类错误。
为了解决 Macro 无法衡量样本均衡问题,一个很好的方法是求加权的 Macro, 因此 Weighed F1 出现了。
Weight F1
Weighted 算法算术 Macro 算法的改良版,是为了解决Macro中没有考虑样本不均衡的原因, 在计算 Precision与Recall 时候,各个类别的 Precision 与 Recall要乘以该类在总样本中的占比来求和:
那么我们就得到最终的 Macro F1 的计算为:
推荐两个专辑给大家:
专辑 | 李宏毅人类语言处理2020笔记
整理不易,还望给个在看!