2016-05-17 58 views
5

Ho addestrato una foresta casuale utilizzando caret + ranger.Importanza variabile con il 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' 
) 

Ora mi piacerebbe vedere l'importanza delle variabili. Tuttavia, nessuno di questi lavori:

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

Qualsiasi idea se & come posso farlo?

Grazie.

risposta

4

varImp(fit) lo otterrà per voi.

per capirlo, ho guardato names(fit), che mi ha portato a names(fit$modelInfo) - poi vedrete varImp come una delle opzioni.

+2

Sì, l'ho trovato anche nel frattempo immergendolo nel doc di '' caret''. Grazie per questo metodo utile per trovare informazioni, però! Si scopre che 'varImp()' è il modo per ottenere importanza variabile per la maggior parte dei modelli formati con 'train()' di caret. Nota per gli utenti futuri: non sono sicuro al 100% e non ho il tempo di controllare, ma sembra che sia necessario avere 'importanza =' impurità '' (immagino che 'important = 'permutation'' possa funzionare anche) passato come parametro in 'train()' per poter usare 'varImp()'. –

+2

Un'altra nota: sembra che se alleni il tuo modello con 'ranger' ma senza' caret', quindi 'importance (fit) 'sarebbe il modo giusto per ottenere importanza variabile. Come sopra, penso che il parametro 'important = 'impurity'' (o' permutation ') debba essere in' train() ' –

+0

Strano che non funzioni per me. Nessun valore di importanza disponibile ... hmmm –

0

in base alle @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) 

Si può passare sia "permutation" o "impurity" all'argomento importance. La descrizione sia per il valore può essere trovato qui: http://alexperrier.github.io/jekyll/update/2015/08/27/feature-importance-random-forests-gini-accuracy.html

0

Per il pacchetto 'ranger' che si potrebbe chiamare un 'importanza con

fit$variable.importance 

Come nota a margine, si potevano vedere le tutte le uscite disponibili per il modello utilizzando str()

str(fit)