试图学习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中使用它们?
我假设您希望使用"准确度"作为摘要度量标准,用于在其重新采样中选择最佳基础学习者模型,稍后通过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, ], ...