几大评估指标的意义

如果做搜索、推荐系统,应在保证召回的情况下提升准确率 (Accuracy)。如果做疾病监测、反垃圾,则应在保准确率的条件下,提升召回率 (Recall)。两者都需要兼顾的情况下,应提升 F1-score。

多分类模型(如推荐系统、搜索等)有 4 个经典的评价指标:

  • 准确率 (Accuracy)

  • 精确率 (Precision)

  • 召回率 (Recall)

  • F1-score

例子概述

下面以一个简单的例子说明上述 4 个指标的计算方式。

现有 100 个 A,50 个 B,20 个 C。经过某分类算法分类后,这 170 个样本中:

  • 100 个本来就是 A 的样本中,有 90 个被分类成 A,6 个被分类成 B,4 个被分类成 C;

  • 50 个本来就是 B 的样本中,有 30 个被分类成 B,15 个被分类成 A,5 个被分类成 C;

  • 20 个本来就是 C 的样本中,有 5 个被分类成 C,12 个被分类成 A,3 个被分类成 B;

准确率 (Accuracy)

准确率 (Accuracy) 用来衡量【所有预测中有多少个是对的】。
Accuracy = (90+30+5) / 170 = 0.7353

精确率 (Precision)

精确率 (Precision) 用来衡量【所有预测为类 i 的预测中,有多少个是正确的预测(即有多少个 True Positive, TP)】。需要求出所有类的 Precision 后,再平均。

  • Precision(A) = 90 / (90+15+12) = 0.7692

  • Precision(B) = 30 / (6+30+3) = 0.7692

  • Precision(C) = 5 / (4+5+5) = 0.3571

求平均的方式有 2 种:宏平均、微平均。

  • 宏平均:直接拿上述3个算数平均就好啦
    => (Macro) Precision = [Precision(A) + Precision(B) + Precision(C)] / 3 = 0.6319

  • 微平均:计算出总的 TP、FP,然后再用 Precision 公式计算
    => (Micro) Precision = TP / (TP + FP) = (90 + 30 + 5) / [(90 + 30 + 5) +((15 + 12) + (6+3) + (4+5))] = 0.7353

召回率 (Recall)

召回率 (Recall) 用来衡量【所有应该被预测为类 i 的样本中,有多少个被成功预测成类 i(TP)】,也就是【类 i 的样本被算法成功「召回」的数量】。需要求出所有类的 Precision 后,再平均。

  • Recall(A) = 90 / 100 = 0.9

  • Recall(B) = 30 / 50 = 0.6

  • Recall(C) = 5 / 20 = 0.25

这里求平均的方式也有 2 种:宏平均、微平均。

  • 宏平均:直接拿上述3个算数平均就好啦
    => (Macro) Recall = [Recall(A) + Recall(B) + Recall(C)] / 3 = 0.5833

  • 微平均:计算出总的 TP、FN,然后再用 Recall 公式计算
    => (Micro) Recall = TP / (TP + FN) = (90 + 30 + 5) / [(90 + 30 + 5) + (10 + 20 + 15)] = 0.7353

F1-score

F1-score 用来权衡 Precision 和 Recall。

  • 当 Precision 和 Recall 都比较大的时候,F1 会接近于 1。

  • 当 Precision 和 Recall 相差悬殊的时候,F1 的值不会很大。

  • 当 Precision 和 Recall 都比较小的时候, F1 会接近于 0。
    Recall = 2PR / (P + R)

F1-score 有两种计算方式:宏 F1、微 F1。

  • 宏 F1-score:拿宏平均 Precision 和宏平均 Recall 计算
    => (Macro) F1 = 2 * 0.6319 * 0.5833 / (0.6319 + 0.5833) ≈ 0.60

  • 微 F1-score:拿微平均 Precision 和微平均 Recall 计算
    => (Micro) F1 = 2 * 0.7353 * 0.7353 / (0.7353 + 0.7353) ≈ 0.74