有人可以解释我请了如何绘制与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说,你的预测必须是连续ROCR
的prediction
功能。 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