2016-05-17 35 views
5

Trenowałem losowy las przy użyciu caret + ranger.Zmienne znaczenie ze strażnikiem

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

Teraz chciałbym zobaczyć znaczenie zmiennych. Jednak żadna z tych prac:

> 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. 

Każdy pomysł, jeśli & jak mogę ją dostać?

Dzięki.

Odpowiedz

4

varImp(fit) dostanie go za Ciebie.

Aby to zrozumieć, przyjrzałem się names(fit), która doprowadziła mnie do names(fit$modelInfo) - wtedy zobaczysz varImp jako jedną z opcji.

+2

Tak, znalazłem to również w międzyczasie, nurkując w dokumencie "opiekuna". Dziękujemy za użyteczny sposób wyszukiwania informacji! Okazuje się, że 'varImp()' jest sposobem na uzyskanie zmiennej ważności dla większości modeli wyszkolonych za pomocą 'train()'. Uwaga dla przyszłych użytkowników: nie jestem w 100% pewny i nie mam czasu na sprawdzenie, ale wydaje się, że konieczne jest posiadanie 'important = 'impurity'' (Myślę, że' important =' permutation'' też by działało) przekazane jako parametr w 'train()', aby móc używać 'varImp()'. –

+2

Kolejna uwaga: wydaje się, że jeśli wytrenujesz swój model za pomocą 'ranger', ale bez' caret', wtedy 'important (fit)' będzie właściwą metodą uzyskania zmiennej ważności. Jak wyżej, myślę, że parametr 'important = 'impurity'' (lub" permutation ") musi być w' train() ' –

+0

Dziwne, że nie działa dla mnie. Brak dostępnych wartości ważności ... hmmm –

0

według @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) 

można przejść albo "permutation" lub "impurity" do argumentu importance. opisu dla obu wartości można znaleźć tutaj: http://alexperrier.github.io/jekyll/update/2015/08/27/feature-importance-random-forests-gini-accuracy.html

0

Dla pakietu „ranger” można nazwać znaczenie z

fit$variable.importance 

Na marginesie, można zobaczyć wszystkie dostępne wyjścia dla modelu przy użyciu str()

str(fit)