2013-10-11 8 views
8

Ich habe das ada R-Paket für eine Weile verwendet, und seit kurzem caret. Laut der Dokumentation sollte die carettrain() Funktion eine Option haben, die ada verwendet. Aber, caret kotzt mich an, wenn ich die gleiche Syntax verwende, die in meinem ada() Anruf sitzt.Verwenden von adaboost wihin R Caret-Paket

Hier ist eine Demonstration mit dem wine Beispieldatensatz.

library(doSNOW) 
registerDoSNOW(makeCluster(2, type = "SOCK")) 
library(caret) 
library(ada) 

wine = read.csv("http://www.nd.edu/~mclark19/learn/data/goodwine.csv") 


set.seed(1234) #so that the indices will be the same when re-run 
trainIndices = createDataPartition(wine$good, p = 0.8, list = F) 
wanted = !colnames(wine) %in% c("free.sulfur.dioxide", "density", "quality", 
          "color", "white") 

wine_train = wine[trainIndices, wanted] 
wine_test = wine[-trainIndices, wanted] 
cv_opts = trainControl(method="cv", number=10) 


###now, the example that works using ada() 

results_ada <- ada(good ~ ., data=wine_train, control=rpart.control 
(maxdepth=30, cp=0.010000, minsplit=20, xval=10), iter=500) 

##this works, and gives me a confusion matrix. 

results_ada 
    ada(good ~ ., data = wine_train, control = rpart.control(maxdepth = 30, 
    cp = 0.01, minsplit = 20, xval = 10), iter = 500) 
    Loss: exponential Method: discrete Iteration: 500 
     Final Confusion Matrix for Data: 
     Final Prediction 
     etc. etc. etc. etc. 

##Now, the calls that don't work. 

results_ada = train(good~., data=wine_train, method="ada", 
control=rpart.control(maxdepth=30, cp=0.010000, minsplit=20, 
xval=10), iter=500) 
    Error in train.default(x, y, weights = w, ...) : 
    final tuning parameters could not be determined 
    In addition: Warning messages: 
    1: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, : 
    There were missing values in resampled performance measures. 
    2: In train.default(x, y, weights = w, ...) : 
    missing values found in aggregated results 

###this doesn't work, either 

results_ada = train(good~., data=wine_train, method="ada", trControl=cv_opts, 
maxdepth=10, nu=0.1, iter=50) 

    Error in train.default(x, y, weights = w, ...) : 
    final tuning parameters could not be determined 
    In addition: Warning messages: 
    1: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, : 
    There were missing values in resampled performance measures. 
    2: In train.default(x, y, weights = w, ...) : 
    missing values found in aggregated results 

Ich vermute, es ist, dass Zug() will zusätzlichen Eingang, aber die Warnung geworfen gibt mir keine Hinweise auf das, was fehlt. Außerdem könnte ich eine Abhängigkeit fehlt, aber es gibt keinen Hinweis auf das, was es sein sollte ....

Antwort

1

?train nachschlagen und die Suche nach ada Sie, dass sehen werden:

Method Value: ada from package ada with tuning parameters: iter, maxdepth, nu (classification only)

So Sie Es muss der Parameter nu und der Parameter maxdepth fehlen.

+0

werfen Sie einen Blick auf den letzten Aufruf von train(), den ich gemacht habe - er enthält alle von Ihnen erwähnten Parameter. 'results_ada = train (gut ~., data = wine_train, methode =" ada ", trControl = cv_opts, maxdepth = 10, nu = 0.1, iter = 50)' – Bryan

+0

Ich habe auch versucht, 'trControl = cv_opts' zu entfernen, aber es gab keinen Unterschied. Immer noch der Fehler. – Bryan

1

Was ist der Datentyp in wine$good? Wenn es ein factor ist, versuchen Sie ausdrücklich zu erwähnen, dass es so ist:

wine$good <- as.factor(wine$factor) 
stopifnot(is.factor(wine$good)) 

Grund: oft, R-Pakete etwas Hilfe bei der Unterscheidung Klassifikation vs. Regressions Szenarien benötigen, und es kann einige allgemeine Code innerhalb caret sein, die sein kann, die Übung fälschlicherweise als Regressionsproblem identifizieren (ohne die Tatsache zu berücksichtigen, dass Ada nur eine Klassifikation vornimmt).

+0

Ich habe Ihren Vorschlag (explizit "Wein" als Faktor) versucht, aber ich bekomme immer noch den Fehler ... macht ein reproduzierbares Beispiel der oben genannten Arbeit an Ihrem System? – Bryan

+0

Schließlich habe ich es versucht und es tut mir leid, ich bekomme den gleichen Fehler wie du und konnte es nicht herausfinden. method = "rf" funktioniert gut, aber ich denke, das ist kein Trost, das heißt, Sie wollen wirklich method = "ada". – vijucat

+0

Aha, Zug (up ~., Daten = sym [, c (6, 14)], "ada"), ohne irgendwelche Vorschläge über Parameter, funktioniert! – vijucat

2

So scheint dies funktioniert:

wineTrainInd <- wine_train[!colnames(wine_train) %in% "good"] 
wineTrainDep <- as.factor(wine_train$good) 

results_ada = train(x = wineTrainInd, y = wineTrainDep, method="ada") 

results_ada 
Boosted Classification Trees 

5199 samples 
    9 predictors 
    2 classes: 'Bad', 'Good' 

No pre-processing 
Resampling: Bootstrapped (25 reps) 

Summary of sample sizes: 5199, 5199, 5199, 5199, 5199, 5199, ... 

Resampling results across tuning parameters: 

    iter maxdepth Accuracy Kappa Accuracy SD Kappa SD 
    50 1   0.732  0.397 0.00893  0.0294 
    50 2   0.74  0.422 0.00853  0.0187 
    50 3   0.747  0.437 0.00759  0.0171 
    100 1   0.736  0.411 0.0065  0.0172 
    100 2   0.742  0.428 0.0075  0.0173 
    100 3   0.748  0.442 0.00756  0.0158 
    150 1   0.737  0.417 0.00771  0.0184 
    150 2   0.745  0.435 0.00851  0.0198 
    150 3   0.752  0.449 0.00736  0.016 

Tuning parameter 'nu' was held constant at a value of 0.1 
Accuracy was used to select the optimal model using the largest value. 
The final values used for the model were iter = 150, maxdepth = 3 and nu 
= 0.1. 

Und der Grund ist in einer anderen Frage gefunden:

caret::train: specify model-generation-parameters

Ich glaube, Sie Tuning-Parameter als Argumente übergeben, wenn train versucht, zu finden optimale Abstimmungsparameter selbst. Sie könnten ein Raster mit Parametern für eine Rastersuche definieren, wenn Sie Ihre eigenen definieren möchten.

0

Bitte geben Sie die Parameter innerhalb tuneGrid

Grid <- expand.grid(maxdepth=25,nu=2,iter=100) 
results_ada = train(good~., data=wine_train, method="ada", 
trControl=cv_opts,tuneGrid=Grid) 

Dies funktioniert.

Verwandte Themen