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
。
我正在尝试计算二进制 (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
。