R-Caret,caretList,度量"Accuracy"不在结果集中

ife*_*pid 3 r r-caret

试图学习r-Caret和caretList.我正在尝试遵循教程caretEnsemble Classification示例

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

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.
Run Code Online (Sandbox Code Playgroud)

我的设置是:

#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"))
Run Code Online (Sandbox Code Playgroud)

我使用caretList编辑了"训练所有模型"部分,以便它可以使用caretEnsemble和caretStack进一步使用代码(上面提供的链接).

我如何获得准确性,以便我可以在caretEnsemble和caretStack中使用它们?

ale*_*emm 8

我假设您希望使用"准确度"作为摘要度量标准,用于在其重新采样中选择最佳基础学习者模型,稍后通过caretEnsemble或者选择元数据caretStack.

在这种情况下,您不能设置summaryFunction = twoClassSummary,trainControl因为这样train会使用'ROC'作为性能指标而不是'Accuracy'.相反,您应该使用默认设置summaryFunction(这意味着您不必明确指定它trainControl).像这样train被称为via caretList 将自动使用'Accuracy'作为性能指标,因为分类响应.

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

  • 你不应该returnResamp = FALSE进入trainControl.因为当你这样做时,你将无法通过以后比较模型的个人准确性summary(resamples(model.list))
  • 即使您创建了一个索引来将数据分成火车和测试集,但在传递数据时也不会使用它caretList.正确的caretList呼叫应该像这样开始caretList(Y[train] ~ ., data=X[train, ], ...
  • 您上面提到的教程有点过时了.您还应该从MachineLearningMastery中查看软件包的当前插图本教程.后者在其示例中也使用"Accuracy"作为性能指标