分类器报告在 scikit-learn 中告诉我们什么?

What does the classifier report tell us in skikit-learn?

我正在使用 skikit-learn 进行文本分类。当我使用 classification_report() 函数时,它返回以下 table:

                precision  recall   f1-score   support

        neg       0.86      0.69      0.77       351
        pos       0.82      0.92      0.87       517

avg / total       0.83      0.83      0.83       868

precision、recall 和 f1-score 是什么意思?从以上数值可以得出什么结论?此外,这些值是否反映了我的分类器的任何信息?

Recall 反映了有多少给定 class 的示例被标记为 class。 Precision 反映了有多少示例被您的 classifier 标记为 class 是 class 的真实示例。

假设您有两个 classes negpos。如果您现在将 所有 个示例标记为 class neg,那么您对 ​​neg 的召回率将会很高,为 1.00 或 100%,因为只要一个例子是 class neg,你就把它标记为 neg。同时 pos 的召回将是可怕的,因为没有一个 class pos 的例子被标记为 pos。此外,neg 的精度会很差,因为许多标记为 neg 的示例实际上是 pos.

相反,只有当您绝对确定它们属于 class neg 时,您才可以给出标签 neg 的示例。那么很可能你对 neg 的回忆会很糟糕,因为你几乎没有抓住任何 neg 的例子。但是,您的精度会很高,因为(几乎)所有标记为 neg 的示例实际上都是 class neg.

所以:将所有内容都标记为 class A 会导致 class A 的召回率很高,但准确率很低。几乎没有标记为 class A 通常会以低召回率结束,但 class A.

的准确率很高

同时列出的 F1-Score 只是召回率和精确率的结合。如果您的 F1-Score 很高,那么召回率和准确率通常都不错。如果它很低,那么你的召回率和准确率往往很差。

根据您的示例值,您可以得出您的 classifiers 性能似乎总体上还不错,F1-Score 为 0.83。 neg 的召回率与其他值相比有点低,因此您的 classifier 在发现 neg 的示例时遇到问题并将其标记为 pos (然后降低pos 的精度)。如果这些是你的训练结果而不是测试集,那么支持值的差异表明你有更多关于 pos 的例子而不是 neg,这意味着你将在一个稍微倾斜的数据集上训练.平衡这些数字也可能导致更平衡的召回。

进一步阅读: