ROC曲线

http://blog.csdn.net/sinat_26917383/article/details/51114244

http://blog.csdn.net/dingming001/article/details/72956044

http://blog.csdn.net/solo7773/article/details/8699693




自己运算

  1. # 做一个logistic回归,生成概率预测值  
  2. model1 <- glm(y~., data=newdata, family='binomial')  
  3. pre <- predict(model1,type='response')  
  4. # 将预测概率prob和实际结果y放在一个数据框中  
  5. data <- data.frame(prob=pre,obs=newdata$y)  
  6. # 按预测概率从低到高排序  
  7. data <- data[order(data$prob),]  
  8. n <- nrow(data)  
  9. tpr <- fpr <- rep(0,n)  
  10. # 根据不同的临界值threshold来计算TPR和FPR,之后绘制成图  
  11. for (i in 1:n) {  
  12.     threshold <- data$prob[i]  
  13.     tp <- sum(data$prob > threshold & data$obs == 1)  
  14.     fp <- sum(data$prob > threshold & data$obs == 0)  
  15.     tn <- sum(data$prob < threshold & data$obs == 0)  
  16.     fn <- sum(data$prob < threshold & data$obs == 1)  
  17.     tpr[i] <- tp/(tp+fn) # 真正率  
  18.     fpr[i] <- fp/(tn+fp) # 假正率  
  19. }  
  20. plot(fpr,tpr,type='l')  
  21. abline(a=0,b=1)  

2、ROCR包

R中也有专门用来绘制ROC曲线的包,例如常见的ROCR包,它不仅可以用来画图,还能计算ROC曲线下面积AUC,以评价分类器的综合性能,该数值取0-1之间,越大越好。



  1. library(ROCR)  
  2. pred <- prediction(pre,newdata$y)  
  3. performance(pred,'auc')@y.values #AUC值  
  4. perf <- performance(pred,'tpr','fpr')  
  5. plot(perf)  

注意:其中pre是分类器预测的模型,而newdata$y是实际值。


3、pROC包


ROCR包画图函数功能比较单一,笔者比较偏好使用功能更强大的pROC包。它可以方便比较两个分类器,还能自动标注出最优的临界点,图看起来也比较漂亮


  1. library(pROC)  
  2. modelroc <- roc(newdata$y,pre)  
  3. plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),  
  4.      grid.col=c("green", "red"), max.auc.polygon=TRUE,  
  5.      auc.polygon.col="skyblue", print.thres=TRUE)  


R语言绘制ROC曲线如何画在一个图中

library("pROC")

data(aSAH) 加载R语言自带的数据

roc1 <- roc(myData$label, myData$score)

roc2 <- roc(myData2$label, myData2$score)

plot(roc1, col="blue")

plot.roc(roc2, add=TRUE, col="red") 在上图中继续添加ROC曲线


head(aSAH)
            roc(aSAH$outcome, aSAH$s100b)  
            roc(aSAH$outcome, aSAH$s100b, plot=TRUE, print.thres=TRUE, print.auc=TRUE)  



 

R语言利用caret包比较ROC曲线

control = trainControl(method = "repaetedcv",

number = 10,

repeats =3,

classProbs = TRUE,

summaryFunction = twoClassSummary)

glm.model = train(churn ~ .,

data= trainset,

method = "glm",

metric = "ROC",

trControl = control)

svm.model = train(churn ~ ., data= trainset, method = "svmRadial",

metric = "ROC", trControl = control)

rpart.model = train(churn ~ ., data = trainset, method = "svmRadial",

metric = "ROC", trControl = control)


glm.probs = predict(glm.model,testset[,!names(testset) %in% c("churn")],type = "prob")

svm.probs = predict(svm.model,testset[,!names(testset) %in% c("churn")],type = "prob")

rpart.probs = predict(rpart.model,testset[,!names(testset) %in% c("churn")],type = "prob")

生成每个模型的ROC曲线,将它们绘制在一个图中:

glm.ROC = roc(response = testset[,c("churn")],

predictor = glm.probs$yes,

levels = levels(testset[,c("churn")]))

plot(glm.ROC,type = "S",col = "red")

svm.ROC = roc(response = testset[,c("churn")],

predictor = svm.probs$yes,

levels = levels(testset[,c("churn")]))

plot(svm.ROC,add = TRUE,col = "green")

rpart.ROC = roc(response = testset[,c("churn")],

predictor = rpart.probs$yes,

levels = levels(testset[,c("churn")]))

plot(rpart.ROC,add = TRUE,col = "blue")








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值