R-Caret,caretList,公制"准确度"不在结果集中

时间:2016-03-28 16:48:08

标签: r r-caret

尝试学习r-Caret和caretList。 我正在尝试按照教程caretEnsemble Classification example

我遇到了一些错误并搜索了如何修复一些基本设置。 但是,我收到了错误:

Warning messages:
1: In train.default(x, y, weights = w, ...) :
The metric "Accuracy" was not in the result set. ROC will be used instead.
2: In train.default(x, y, weights = w, ...) :
The metric "Accuracy" was not in the result set. ROC will be used instead.

我的设置是:

#Libraries
library(caret)
library(devtools)
library(caretEnsemble)

#Data
library(mlbench)
dat <- mlbench.xor(500, 2)
X <- data.frame(dat$x)
Y <- factor(ifelse(dat$classes=='1', 'Yes', 'No'))

#Split train/test
train <- runif(nrow(X)) <= .66

#Setup CV Folds
#returnData=FALSE saves some space
folds=5
repeats=1
myControl <- trainControl(method='cv', 
                      number=folds, 
                      repeats=repeats, 
                      returnResamp='none', 
                      classProbs=TRUE,
                      returnData=FALSE, 
                      savePredictions=TRUE, 
                      verboseIter=TRUE, 
                      allowParallel=TRUE,
                      summaryFunction=twoClassSummary,
                      index=createMultiFolds(Y[train], 
                                             k=folds, 
                                             times=repeats)
)
#Make list of all models
all.models<-caretList(Y~., data=X, trControl=myControl, methodList=c("blackboost", "parRF"))

我编辑了&#34;训练所有模型的部分&#34;使用caretList,以便它可以与代码中的caretEnsemble和caretStack一起使用(上面提供的链接)。

如何获得精确度以便我可以在caretEnsemble和caretStack中使用它们?

1 个答案:

答案 0 :(得分:8)

我假设您希望使用“准确度”作为摘要指标,用于在其重新采样中选择最佳基础学习者模型,稍后通过caretEnsemblecaretStack选择元数据。< / p>

在这种情况下,您不得在summaryFunction = twoClassSummary中设置trainControl,因为这样train会将“ROC”用作效果指标,而不是“准确度”。相反,您应该使用summaryFunction的默认设置(这意味着您不必在trainControl中明确指定它)。像train这样通过caretList调用的returnResamp = FALSE会因为分类响应而自动使用'Accuracy'作为效果指标。

此外,还有一些其他注意事项:

  • 您不应在trainControl中设置summary(resamples(model.list))。因为当你这样做时,你将无法通过caretList
  • 来比较模型的个人准确度。
  • 即使您创建了一个索引来将数据分成火车和测试集,但在将数据传递给caretList时也不会使用它。正确的caretList(Y[train] ~ ., data=X[train, ], ...调用应该像 -> 'Don\'t!'
  • 一样开始
  • 您上面提到的教程有点过时了。您还应该从MachineLearningMastery查看软件包的current vignettethis tutorial。后者还使用“Accuracy”作为其示例中的性能指标