【问题标题】:What prediction format should be the input for ROC functionROC函数的输入应该是什么预测格式
【发布时间】:2020-09-13 21:00:00
【问题描述】:

我正在尝试计算二进制 (0,1) 目标变量与决策树预测的 ROC。

当我将预测值设置为二进制时,它给了我以下错误:

> roc(as.numeric(pred),as.numeric(data$target))

Setting levels: control = 0, case = 1
Setting direction: controls < cases

当我将预测值设置为概率时,它给了我以下错误:

> roc(pred[,2],as.numeric(data$target))

'response' has more than two levels. Consider setting 'levels' 
explicitly or using 'multiclass.roc' insteadSetting levels: 
control = 0.166666666666667, case = 0.232876712328767
Setting direction: controls < cases

所以我很困惑我应该为预测设置什么格式以便正确计算 ROC?为什么我的函数会显示这些错误?

【问题讨论】:

  • Roc 不是基本的 R 函数。有提供它的包,你用的是哪一个?
  • 我正在使用 pROC 包。
  • 我在这个项目上卡了很久:( 仍然无法弄清楚 roc() 函数的输入应该是什么类型的预测。

标签: r predict roc auc proc-r-package


【解决方案1】:

如果您查看pROC's roc function documentation,您会看到正式定义具有以下形式:

## Default S3 method:
roc(response, predictor, [...]

因此,预测是第二个参数,而不是您使用的第一个参数。因此,您的调用应如下所示:

roc(data$target, pred[,2])

如果您忘记了顺序,您可以随时使用命名参数来忽略顺序:

roc(predictor = pred[,2], response = data$target)

另请注意,将响应转换为数字向量不是必需的,甚至不推荐,因此我从上面的调用中删除了as.numeric

【讨论】:

  • 感谢 Calimo 的回答!我已根据您的评论修复了我的代码。但是我意识到计算的 AUC 因预测输入的类型而异。这是为什么呢?
  • 例如: - 预测是二元的:数据:as.numeric(pred) in 207 个控件 (tf$var 0)
  • 如果您打算进行 ROC 分析,则不应使用二进制预测。 ROC 访问所有阈值,如果您已经对预测进行了二值化,则这是不可能的。因此,预计 AUC 会降低。使用全范围的概率或您拥有的任何分数进行 ROC 分析。更多详情请看这个答案:stats.stackexchange.com/a/372977/36682(这里的“列联表”与二元预测基本相同)
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 2015-02-11
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多