【问题标题】:Classification report in scikit learnscikit learn中的分类报告
【发布时间】:2020-02-14 03:12:06
【问题描述】:

我想对设备的故障和无故障条件进行分类。标签 A 表示故障,标签 B 表示无故障。

scikit-learn 给我一个分类矩阵报告:

        precision    recall   f1-score   support
A       0.82         0.18     0.30       2565
B       0.96         1.00     0.98       45100

现在我应该使用 A 或 B 结果中的哪一个来指定模型操作?

【问题讨论】:

  • A.数据集严重不平衡,因此只有 A 的 Precision、Recall 和 f1-score 提供了有关模型的信息。

标签: machine-learning scikit-learn report classification


【解决方案1】:

简介

没有一个分数可以通用地描述模型,这完全取决于您的目标是什么。在您的情况下,您正在处理故障检测,因此您有兴趣在更多数量的非故障情况中查找故障。同样的逻辑适用于例如人口并发现携带病原体的个体。

在这种情况下,对于“错误”情况(或例如您可能生病)具有高召回率(也称为敏感性)通常非常重要。在这样的筛查中,通常可以将其诊断为“故障”,这实际上是可以正常工作的——那就是您的误报。为什么?因为遗漏发动机或肿瘤中的故障部件的成本远高于请工程师或医生验证案例。

解决方案

假设此假设(故障召回是最重要的指标)在您的情况下成立,那么您应该查看标签 A(故障)的 召回。按照这些标准,你的模型做得很差:它只发现了 18% 的错误。可能很大程度上源于故障数量比非故障少约 20 倍这一事实,从而引入了严重的偏差(需要解决)。

我能想到这个分数实际上并不差的情况。如果您可以检测到发动机中 18% 的所有故障(在其他系统之上)并且不会引入错误警报,那么它会非常有用 - 您不希望在一切正常的情况下经常向驾驶员发出火警警报。同时,您可能不想使用相同的逻辑,例如癌症检测并告诉患者“一切正常”,而诊断错误的风险非常高。

指标

为了完整起见,我将解释这些术语。考虑以下定义:

  • tp - 真正的肯定(真正的错误)
  • tn - 真阴性(这不是错误)
  • fp - 误报(检测到故障,但没问题)
  • fn - 假阴性(检测到正常,但它是故障)

Here 是一篇试图很好地解释什么是精确率、召回率和 F1 的文章。

【讨论】:

  • 感谢您的完整回答。正如你提到的,我的数据中只有 5% 与故障案例有关(正如你所说的 ~20 倍),实际上,比率是这样的。您对改进结果有什么建议吗? (我使用的模型也有类似的问题:svm、KNN 和 DT。)再次感谢您。
  • @AliOk 我很高兴它有帮助。事实上,这是一个典型的场景,你有一个非常严重的类不平衡。有大量的研究和不同的方法来解决这个问题,但它们与您的问题无关。如果我回答了您的问题,请接受/赞成答案,然后提出一个新问题,最好是相当具体的。为了让你开始,看看例如使用 SMOTE 及其加权模型 (WSMOTE) 等技术。简单地选择不同的算法不仅能解决您的问题。评论的字符太少,无法提供完整的答案。
猜你喜欢
  • 2015-03-27
  • 2015-03-24
  • 2017-06-29
  • 2022-10-20
  • 2014-11-24
  • 2018-09-26
  • 2015-07-26
  • 2015-01-04
  • 2022-10-04
相关资源
最近更新 更多