我正在使用skikit learn进行文本分类。当我使用classification_report()函数时,它返回了下表:
精准召回f1分数支持负0.86 0.69 0.77 351位置0.82 0.92 0.87 517avg/total 0.83 0.83 0.83868
准确度、召回率和f1分数的含义是什么?从以上数值可以得出什么结论?此外,这些值是否反映了我的分类器?
Recall反映了给定类的多少示例被标记为属于该类Precision反映了有多少被分类器标记为该类的示例才是该类的真正示例。
假设您有两个类neg
和pos
。如果您现在将所有示例标记为neg
类,那么您对neg
的回忆将非常好,为1.00或100%,因为无论何时示例属于neg
类,您都将其标记为neg
。同时,对pos
的调用将是可怕的,因为没有一个类别pos
的示例被标记为pos
。此外,你对neg
的精度会很差,因为很多被标记为neg
的例子实际上是pos
。
相反,只有当你绝对确定它们属于类neg
时,你才能给出标签neg
的例子。那么,你对neg
的回忆很可能会很糟糕,因为你几乎看不到任何neg
的例子。然而,您的精度将非常高,因为(几乎)所有标记为neg
的示例都属于neg
类。
所以:把所有东西都标记为A类会导致A类的高召回率,但精度很差。将几乎没有的东西标记为A类通常会导致低召回率,但A类的精度很高
同样列出的F1分数只是召回率和精确度的合并。如果你的F1成绩很高,那么通常召回率和准确性都很好。如果它很低,那么你的记忆力和准确性往往会很差。
从您的示例值中,您可以得出分类器的性能通常不会太差,F1分数为0.83。与其他值相比,neg
的召回率有点低,因此您的分类器在发现neg
的示例时存在问题,并将其标记为pos
(这会降低pos
的精度)。如果这些是训练的结果,而不是测试集,那么支持值的差异表明pos
的示例比neg
的示例多,这意味着你将在稍微倾斜的数据集上进行训练。平衡这些数字也可能导致更平衡的召回。
进一步阅读:
- 维基百科关于召回和精确性
- 斯坦福大学回忆与精确性综述
- 函数sklearn.metrics.precision_recall_fscore_support的scikit文档