2016-05-17 16 views
5

Ich trainierte eine zufällige Gesamtstruktur mit caret + ranger.Variable Bedeutung mit Ranger

fit <- train(
    y ~ x1 + x2 
    ,data = total_set 
    ,method = "ranger" 
    ,trControl = trainControl(method="cv", number = 5, allowParallel = TRUE, verbose = TRUE) 
    ,tuneGrid = expand.grid(mtry = c(4,5,6)) 
    ,importance = 'impurity' 
) 

Jetzt möchte ich die Bedeutung von Variablen sehen. Doch keines dieser Arbeit:

> importance(fit) 
Error in UseMethod("importance") : no applicable method for 'importance' applied to an object of class "c('train', 'train.formula')" 
> fit$variable.importance 
NULL 
> fit$importance 
NULL 

> fit 
Random Forest 

217380 samples 
    32 predictors 

No pre-processing 
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 173904, 173904, 173904, 173904, 173904 
Resampling results across tuning parameters: 

    mtry RMSE  Rsquared 
    4  0.03640464 0.5378731 
    5  0.03645528 0.5366478 
    6  0.03651451 0.5352838 

RMSE was used to select the optimal model using the smallest value. 
The final value used for the model was mtry = 4. 

Jede Idee, wenn & wie kann ich es bekommen?

Danke.

Antwort

4

varImp(fit) wird es für Sie bekommen.

Um das herauszufinden, schaute ich names(fit), die mich zu names(fit$modelInfo) führte - dann sehen Sie varImp als eine der Optionen.

+2

Yeah, ich habe es auch in der Zwischenzeit gefunden, indem ich in 'caret''s doc eintauchte. Danke für diese nützliche Methode, um Informationen zu finden! Es stellt sich heraus, dass 'varImp()' der Weg ist, eine variable Wichtigkeit für die meisten Modelle zu erhalten, die mit caret 'train()' trainiert werden. Hinweis für zukünftige Benutzer: Ich bin nicht 100% sicher und habe keine Zeit zu überprüfen, aber es scheint, dass es notwendig ist, Wichtigkeit = 'Unreinheit' zu haben (ich denke 'Wichtigkeit = 'Permutation' würde auch funktionieren) als Parameter in 'train()' übergeben, um 'varImp()' verwenden zu können. –

+2

Noch ein Hinweis: Es scheint, dass, wenn Sie Ihr Modell mit 'Ranger' trainieren, aber ohne' Caret', dann wäre 'Wichtigkeit (Fit) 'der richtige Weg, variable Bedeutung zu bekommen. Wie oben, denke ich, dass der Parameter 'Wichtigkeit = 'Unreinheit' (oder 'Permutation') in' train() 'sein muss –

+0

Seltsam, es funktioniert nicht für mich. Keine Wichtigkeitswerte verfügbar ... hmmm –

0

nach @fmalaussena

set.seed(123) 
ctrl <- trainControl(method = 'cv', 
        number = 10, 
        classProbs = TRUE, 
        savePredictions = TRUE, 
        verboseIter = TRUE) 

rfFit <- train(Species ~ ., 
       data = iris, 
       method = "ranger", 
       importance = "permutation", #*** 
       trControl = ctrl, 
       verbose = T) 

Sie können entweder "permutation" oder "impurity" zu Argument importance passieren. Die Beschreibung für beide Wert ist hier zu finden: http://alexperrier.github.io/jekyll/update/2015/08/27/feature-importance-random-forests-gini-accuracy.html

0

Für ‚Ranger‘ Paket, das Sie mit

fit$variable.importance 

Als Randbemerkung eine Bedeutung nennen könnte, Sie alle verfügbaren Ausgänge für das Modell sehen konnte mit str()

str(fit)