常用的分类算法评估指标大多如上,在具体模型评估指标使用时,并非一味的套用指标计算公式,给出计算结果,还需要结合算法模型的应用场景、资料集等等,比如我们习惯于使用准确率来评价分类算法,一方面是因为我们熟悉它,同时它也是一个很直观的评价指标,但有些场景下,准确率高并不能代表这个算法模型的效果好,特别是在不平衡分布资料集的场景中。
比如,通过一些资料特征训练了一个能够预测地震区域的算法,并且准确率(accuracy)高达 99%,你认为这个算法如何?
准确率(Accuracy)
准确率是我们最常见的评价指标,表示所有的预测正确(正类负类)的占总的比重。下图是来自维基百科的2018年全球地震资料:
好了,现在就有这么一个模型,将所有的地区标注为非地震区域。全球全年数十亿地区特征资讯中,已知6级以上地震130起,这个模型准确率0.9999……无限接近100%,我们会发现这个模型达到了接近完美的准确率,尽管这个模型拥有接近完美的准确率,但是在这个场景中准确率显然不是一个合适的度量指标。
地震检测是一个不平衡的分类问题,其资料集也是分布不平衡的资料集。我们需要鉴别的类别有两个——地震区域和非地震区域,其中一个非地震区域类别代表了绝大多数的资料。
类似,在海啸、恐怖分子、在逃人员、罕见疾病检测等,在这些情况下,正例类别,如地震区域、海啸、恐怖分子、在逃人员、疾病,远远少于负例类别的数量。这种问题是资料科学中比较常见的例子,其中准确率并不能作为评估模型的衡量标准。
直观地说,这种检测场景中我们更应该关注于正例(地震区域)的识别。
召回率(Recall)
我们应该最大化模型找到资料集中所有相关案例的能力,也就是最大化召回率或查全率(Recall)的衡量指标,也就是正确判为地震区域占实际所有地震区域的比例。通过召回率计算公式,不难发现:如果模型将所有的区域都预测为地震区域,那么模型的召回率就是 100%,因为预测所有区域都是地震区域,自然包括了地震区域。
那么,这样我们就得到了一个完美的模型吗?当然,不是。
精确率(Precision)
精确率也就是在所有判为地震区域中,真正的地震区域的比例。现在前面内容可以看到,第一个模型将所有地区标上了非地震区域的标签,这个模型准确率无限接近100%,但它是不能使用的,尽管它有着近乎完美的准确率,但是它的精确度和召回率都是0,因为True Postive(TP)为0。
在第二个模型中,将所有的地区都标记为地震区域,召回率达到100%——但我们发现所有人将会在持续的地震伪警报中,惶惶不安。
那么现在,我们重新训练一下模型,将返回的区域都正确地识别为地震区域,精确率达到100,但是召回率很低,因为实际上会有很多假负类(False Negative FN),即漏报的地震区域。
F1 精确率—召回率权衡
在我们想要最大化的指标之间存在一个权衡。在召回率的例子中,当召回率增大时,精度会减小。同样,将 100% 的区域标记为地震区域的模型是不可用的。在某些情况中,我们也许需要以牺牲另一个指标为代价来最大化精确率或者召回率。例如,医院在对人们进行随访检查的初步疾病筛查中,我们可能希望得到接近于100%的召回率,我们想找到所有患病的患者。如果随访检查的代价不是很高,我们可以接受较低的精确率。然而,如果我们想要找到精确率和召回率的最佳组合,我们可以使用 F1 score 来对两者进行结合,F1 score 是对精度和召回率的调和平均:
我们使用调和平均而不是简单的算术平均的原因是,调和平均可以惩罚极端情况。一个具有 100%的精确率,而召回率为 0 的算法模型,这两个指标的算术平均是 0.5,但是 F1 score 会是 0。F1 score 给了精确率和召回率相同的权重,它是通用 Fβ指标的一个特殊情况,在 Fβ中,β 可以用来给召回率和精度更多或者更少的权重。(还有其他方式可以结合精度和召回率,例如二者的几何平均,但是 F1 score 是最常用的。) 如果我们想建立一个具有最佳的精度—召回率平衡的模型,那么就要尝试将 F1 score 最大化。