Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 - Fatal编程技术网

绘制自举插入符号模型的ROC曲线

绘制自举插入符号模型的ROC曲线,r,r-caret,R,R Caret,我有一个如下的模型: library(mlbench) data(Sonar) library(caret) set.seed(998) my_data <- Sonar fitControl <- trainControl( method = "boot632", number = 10, classProbs = T, savePredictions = T, summaryFunction = twoClassSummary

我有一个如下的模型:

library(mlbench)
data(Sonar)

library(caret)
set.seed(998)

my_data <- Sonar

fitControl <-
  trainControl(
    method = "boot632",
    number = 10,
    classProbs = T,
    savePredictions = T,
    summaryFunction = twoClassSummary
  )


model <- train(
  Class ~ .,
  data = my_data,
  method = "xgbTree",
  trControl = fitControl,
  metric = "ROC"
)
库(mlbench)
数据(声纳)
图书馆(插入符号)
种子集(998)
my_data首先解释一下:

如果您不打算检查如何在每个重新采样的每个样本上预测每个可能的超参数组合,您可以在
trainControl
中设置
savePredictions=“final”
,以节省空间:

fitControl <-
  trainControl(
    method = "boot632",
    number = 10,
    classProbs = T,
    savePredictions = "final",
    summaryFunction = twoClassSummary
  )
插入符号总是根据模型构建中未使用的行提供预测

nrow(my_data) #208
83/208适用于
boot632的测试样本

现在来建立ROC曲线。您可以在此处选择几个选项:

-平均每个样本的概率,并使用该概率(这对于CV来说是常见的,因为所有样本都重复了相同的次数,但也可以使用boot来完成)

-按原样绘制,不求平均值

-绘制每个再采样的ROC

我将向您展示第二种方法:

创建类别概率和真实结果的数据框架:

for_lift = data.frame(Class = model$pred$obs,  xgbTree = model$pred$R)
绘图ROC:

pROC::plot.roc(pROC::roc(response = for_lift$Class,
                         predictor = for_lift$xgbTree,
                         levels = c("M", "R")),
           lwd=1.5) 

您也可以使用ggplot来实现这一点,为此,我发现使用插入符号函数
lift

lift_obj = lift(Class ~ xgbTree, data = for_lift, class = "R")
指定使用概率的类别^

library(ggplot2)

ggplot(lift_obj$data)+
  geom_line(aes(1-Sp , Sn, color = liftModelVar))+
  scale_color_discrete(guide = guide_legend(title = "method"))

谢谢!是否有可能减少每次重采样的“测试”集?在本例中,它约为40%,但在我的实际数据集(小得多)中,40%将太高。在使用“boot632”时不能减少它(它使用约63%用于训练,其余用于测试),但如果使用“cv”,则可以减少“例如,如果你设置
number=10
method=cv
,你将执行10次交叉验证,其中90%的数据用于建模,10%用于评估。我喜欢boot632的随机选择功能,这就是我选择它的原因。是否可以在每次重新采样时随机分配cv上的折叠?您可以手动指定在每次迭代检查中执行培训和测试的索引?trainControl和index/IndexOutarguments@missuse在ggplot2图形上标注AUC值的最简单方法是什么?谢谢
pROC::plot.roc(pROC::roc(response = for_lift$Class,
                         predictor = for_lift$xgbTree,
                         levels = c("M", "R")),
           lwd=1.5) 
lift_obj = lift(Class ~ xgbTree, data = for_lift, class = "R")
library(ggplot2)

ggplot(lift_obj$data)+
  geom_line(aes(1-Sp , Sn, color = liftModelVar))+
  scale_color_discrete(guide = guide_legend(title = "method"))