【问题标题】:How to draw ROC curve using value of confusion matrix?如何使用混淆矩阵的值绘制 ROC 曲线?
【发布时间】:2017-08-29 07:40:45
【问题描述】:

假设我有一个像 A 这样的分类器,它的分类结果给了我下表:

    TP  TN  FP  FN
A   225 100 175 100

TP 是真阳性

TN 为真阴性

FP 是假阳性

FN 是假阴性

如何绘制 ROC 曲线?

我知道,我可以定义一个变量,并尝试根据 A 预测它,然后制作一个完全模拟上述值的数据框,最后,我可以使用this 代码。但我认为应该有更简单的方法?

【问题讨论】:

  • ROC 曲线是针对概率绘制的,而不是“阈值”预测。尝试从您的模型中获取原始输出。
  • @janlauge 可以是任何类型的分数,而不仅仅是概率。

标签: r


【解决方案1】:

这是不可能的,因为您只有分类器的某个(未知)阈值的混淆矩阵。 ROC 曲线包含有关所有可能阈值的信息。

混淆矩阵对应于 ROC 曲线上的一个点:

灵敏度 = TP / (TP + FN)
1 - 特异性 = TN / (TN + FP) 。

【讨论】:

  • 您对此有何看法? researchgate.net/post/…
  • 你应该为不同的阈值建立这样一个表,得到不同的点,从而得到 ROC 曲线的形状。
  • @user5363938 在链接的讨论中,我们获得了每次观察的分数和真实值。您只在问题中提供了一个混淆矩阵。
  • 那么,我如何模拟导致相同混淆矩阵的数据框?
  • 不确定你要去哪里,但你可以让所有正值 1 和所有负值 0。但这不会给你更多的洞察力,虽然......测试/实际组合是 TP :1-1,FP:1-0,TN:0-0,FN:0-1。如果您根据需要通过rep这些行来创建一个data.frame,您将能够绘制ROC曲线,但它不会很有用。
【解决方案2】:

我不明白你为什么要模拟一个新变量。你基本上是要求从一个点绘制一条曲线,这是不可能的。相反,您应该只在用于训练模型的训练或测试数据中使用因变量。这将允许您找到您认为最佳的截止点。

pROC 软件包使我们能够轻松绘制 ROC 曲线。 假设我们有一个名为 test 的数据框和一个名为 mymodel 的模型,我们可以这样使用:

library('pROC')
plot(roc(test$y, predict(mymodel, test, type = "prob"))

【讨论】:

  • 请注意,ROC 需要预测的概率,而不是预测的
  • @AlexR 不一定是概率,它可以是任何类型的分数。但最好不是预测的类别。
猜你喜欢
  • 2019-12-26
  • 2016-11-28
  • 2018-12-26
  • 2018-09-23
  • 2016-01-15
  • 2022-06-15
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多