Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于插入符号训练数据的ROC曲线_R_R Caret_Roc - Fatal编程技术网

基于插入符号训练数据的ROC曲线

基于插入符号训练数据的ROC曲线,r,r-caret,roc,R,R Caret,Roc,使用R包插入符号,如何根据train()函数的交叉验证结果生成ROC曲线 比如说,我做了以下几件事: data(Sonar) ctrl <- trainControl(method="cv", summaryFunction=twoClassSummary, classProbs=T) rfFit <- train(Class ~ ., data=Sonar, method="rf", preProc=c("center", "scale"), trContr

使用R包插入符号,如何根据train()函数的交叉验证结果生成ROC曲线

比如说,我做了以下几件事:

data(Sonar)
ctrl <- trainControl(method="cv", 
  summaryFunction=twoClassSummary, 
  classProbs=T)
rfFit <- train(Class ~ ., data=Sonar, 
  method="rf", preProc=c("center", "scale"), 
  trControl=ctrl)
数据(声纳)

ctrl在
ctrl
中只缺少
savePredictions=TRUE
参数(这也适用于其他重采样方法):


在这里,我正在修改@Theie1e的绘图,其他人可能会觉得这很有用

训练模型并进行预测

库(插入符号)
图书馆(GG2)
图书馆(mlbench)
图书馆(plotROC)
数据(声纳)

ctrl已于2019年更新。这是最简单的方法。从插入符号对象获取最佳参数,然后概率计算许多度量和图,包括:ROC曲线、PR曲线、PRG曲线和校准曲线。可以将来自不同模型的多个对象放入其中以比较结果

library(MLeval)
library(caret)

data(Sonar)
ctrl <- trainControl(method="cv", 
  summaryFunction=twoClassSummary, 
  classProbs=T)
rfFit <- train(Class ~ ., data=Sonar, 
  method="rf", preProc=c("center", "scale"), 
  trControl=ctrl)

## run MLeval

res <- evalm(rfFit)

## get ROC

res$roc

## get calibration curve

res$cc

## get precision recall gain curve

res$prg
库(MLeval)
图书馆(插入符号)
数据(声纳)

ctrl不,这不是答案。首先,现代版的插入符号没有这个功能。其次,函数需要一个“变量来切割”——具体来说,就是预测概率,但是我如何从train()函数返回的对象中获得这些呢?你关于平均许多AUC与从OOB样本创建的AUC的比较的评论是正确的。它们会有些不同。可以使用
rfFit$finalModel$mtry提取finalModel mtry
我尝试了您的解决方案,但得到了一个错误:
evalm中的错误(rfFit):在插入符号输出中找不到概率
@Bolle我得到了与您相同的结果。您需要在TrainControls中设置savePredictions=TRUE,现在如何将此最佳截止应用于测试数据集,并使用MLeval获得混淆矩阵?
library(ggplot2)
library(plotROC)
ggplot(rfFit$pred[selectedIndices, ], 
       aes(m = M, d = factor(obs, levels = c("R", "M")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5) + coord_equal()
library(caret)
library(ggplot2)
library(mlbench)
library(plotROC)

data(Sonar)

ctrl <- trainControl(method="cv", summaryFunction=twoClassSummary, classProbs=T,
                     savePredictions = T)

rfFit <- train(Class ~ ., data=Sonar, method="rf", preProc=c("center", "scale"), 
               trControl=ctrl)

# Select a parameter setting
selectedIndices <- rfFit$pred$mtry == 2
g <- ggplot(rfFit$pred[selectedIndices, ], aes(m=M, d=factor(obs, levels = c("R", "M")))) + 
  geom_roc(n.cuts=0) + 
  coord_equal() +
  style_roc()

g + annotate("text", x=0.75, y=0.25, label=paste("AUC =", round((calc_auc(g))$AUC, 4)))
library(MLeval)
library(caret)

data(Sonar)
ctrl <- trainControl(method="cv", 
  summaryFunction=twoClassSummary, 
  classProbs=T)
rfFit <- train(Class ~ ., data=Sonar, 
  method="rf", preProc=c("center", "scale"), 
  trControl=ctrl)

## run MLeval

res <- evalm(rfFit)

## get ROC

res$roc

## get calibration curve

res$cc

## get precision recall gain curve

res$prg