ROC函数的输入应该是什么预测格式

What prediction format should be the input for ROC function

我正在尝试计算二进制 (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?为什么我的函数显示这些错误?

如果您查看 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