2016-03-28 79 views
2

試圖學習r-Caret和caretList。 我想跟着教程caretEnsemble Classification exampleR-Caret,caretList,度量「精度」不在結果集中

我遇到了一些錯誤,並搜索瞭如何解決一些基本設置。 不過,我得到的錯誤:

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")) 

我編輯的使用caretList「列車的所有車型」的部分,使其與caretEnsemble和caretStack工作進一步下跌代碼(上面提供的鏈接)。

我如何獲得準確度,以便我可以將它們用於caret整體和caretStack?

回答

5

我假設您希望使用'精度'作爲彙總度量標準,以便通過caretEnsemblecaretStack之後的重新採樣和metalearner選擇最優基礎學習者模型。

在這種情況下,您不得在trainControl中設置summaryFunction = twoClassSummary,因爲像這樣的train將使用「ROC」作爲性能指標而不是「準確性」。相反,您應該使用默認設置summaryFunction(這意味着您不必在trainControl中明確指定)。像這樣train通過caretList調用,由於分類響應,會自動使用「準確性」作爲性能指標。

此外,要注意一些其他的東西:

  • 你不應該設置returnResamp = FALSEtrainControl。因爲當你這樣做時,你不能通過summary(resamples(model.list))
  • 來比較模型的個人精確度。即使你創建了一個索引來將數據分離成一個列車和測試集,但是在將數據傳遞給caretList。正確的caretList呼叫應該像這樣開始caretList(Y[train] ~ ., data=X[train, ], ...
  • 您在上面提到的教程有點過時。您還應該從MachineLearningMastery檢查包裹的current vignettethis tutorial。後者在其示例中還使用「精度」作爲性能度量