使用ROCR包中的R的ROC曲线(ROC curve in R using ROCR package

2019-06-26 06:16发布

有人可以解释我请了如何绘制与ROCR ROC曲线。 我知道,我应该首先运行:

prediction(predictions, labels, label.ordering = NULL)

然后:

performance(prediction.obj, measure, x.measure="cutoff", ...)

我只是不清楚是什么意思与预测和标签。 我创建了ctree和cforest的模型,我想对他们俩的ROC曲线到底比较。 在我的情况下,类属性是y_n,我想应该用于标签。 但是,我们的预测是什么? 下面是我做什么(数据集名称= bank_part)的步骤:

pred<-cforest(y_n~.,bank_part)
tablebank<-table(predict(pred),bank_part$y_n)
prediction(tablebank, bank_part$y_n)

运行最后一行之后,我得到这个错误:

Error in prediction(tablebank, bank_part$y_n) : 
Number of cross-validation runs must be equal for predictions and labels.

提前致谢!

下面是另一个例子:我有训练数据集(bank_training)和测试数据集(bank_testing),我跑了随机森林如下:

bankrf<-randomForest(y~., bank_training, mtry=4, ntree=2,    
keep.forest=TRUE,importance=TRUE) 
bankrf.pred<-predict(bankrf, bank_testing, type='response')

现在bankrf.pred是带有标签C = A因子对象( “0”, “1”)。 不过,我不知道如何绘制ROC,因为我卡住的预测部分。 这是我做的

library(ROCR) 
pred<-prediction(bankrf.pred$y, bank_testing$c(0,1) 

但是,这仍是不正确,因为我得到错误信息

Error in bankrf.pred$y_n : $ operator is invalid for atomic vectors

Answer 1:

该预测是你的分类的连续预测,标签是每个变量的二进制真相。

因此,像下面应该工作:

> pred <- prediction(c(0.1,.5,.3,.8,.9,.4,.9,.5), c(0,0,0,1,1,1,1,1))
> perf <- performance(pred, "tpr", "fpr")
> plot(perf)

生成ROC。

编辑:这可能有助于你以包括问题的样品可重复码(我有一个很难intepreting您的评论)。

有没有新的代码在这里,但是......这里是我使用经常用来绘制的ROC的功能:

 plotROC <- function(truth, predicted, ...){
   pred <- prediction(abs(predicted), truth)    
   perf <- performance(pred,"tpr","fpr")

   plot(perf, ...)
}


Answer 2:

就像@Jeff说,你的预测必须是连续ROCRprediction功能。 require(randomForest); ?predict.randomForest require(randomForest); ?predict.randomForest表明,在默认情况下, predict.randomForest返回对原始规模的预测(类别标签,在分类),而predict.randomForest(..., type = 'prob')返回每个类的概率。 所以:

require(ROCR)
data(iris)
iris$setosa <- factor(1*(iris$Species == 'setosa'))
iris.rf <- randomForest(setosa ~ ., data=iris[,-5])
summary(predict(iris.rf, iris[,-5]))
summary(iris.preds <- predict(iris.rf, iris[,-5], type = 'prob'))
preds <- iris.preds[,2]
plot(performance(prediction(preds, iris$setosa), 'tpr', 'fpr'))

给你你想要的。 不同的分类的包需要不同的命令用于获取预测概率-有时它的predict(..., type='probs') predict(..., type='prob')[,2]等等,所以只检查对每个功能的帮助文件你打电话。



Answer 3:

这是你如何做到这一点:

有我们的数据csv文件,(“data_file.csv”),但你可能需要在这里给的完整路径。 在该文件中有列标题,在这里我将使用“default_flag”,“VAR1”,“VAR2”,“VAR3”,其中default_flag为0或1,另一个变量具有任何价值。 R代码里面:

rm(list=ls())
df <- read.csv("data_file.csv") #use the full path if needed
mylogit <- glm(default_flag ~  var1 + var2 + var3, family = "binomial" , data = df)

summary(mylogit)
library(ROCR)

df$score<-predict.glm(mylogit, type="response" )
pred<-prediction(df$score,df$default_flag)
perf<-performance(pred,"tpr", "fpr")
plot(perf)
auc<- performance(pred,"auc")
auc

需要注意的是DF $分数会给你违约的可能性。 如果你想用这个分对数(同回归系数)在另一个数据来测试DF2设置交叉验证,使用

df2 <- read.csv("data_file2.csv")

df2$score<-predict.glm(mylogit,newdata=df2, type="response" )

pred<-prediction(df2$score,df2$default_flag)
perf<-performance(pred,"tpr", "fpr")
plot(perf)
auc<- performance(pred,"auc")
auc


Answer 4:

问题是,如其他人指出的那样,在预测预计ROCR数值。 如果要插入从预测randomForest (作为第一个参数为在ROCR预测),即预测需要由生成type='prob'代替的type='response' ,这是缺省值。 或者,你可以采取type='response'结果,并转换为数字(也就是,如果你的反应是,说0/1)。 但是,当你绘制的是,ROCR产生ROC曲线上的一个有意义的点。 为了您的ROC曲线上有很多点,你真的需要与每个预测相关的概率-即用type='prob'生成预测。



Answer 5:

这个问题可能是你想上运行,例如跨validatation多次运行的预测功能。

在这种情况下为预测(预测,标签,label.ordering = NULL)函数的类“预测”和“标签”的变量应该是列表或矩阵。



Answer 6:

试试这个:

library(ROCR)
pred<-ROCR::prediction(bankrf.pred$y, bank_testing$c(0,1)

该功能预测存在是众多包。 应明确指定(ROCR::)使用一个在ROCR。 这一次为我工作。



文章来源: ROC curve in R using ROCR package
标签: r roc