2016-05-17 3 views
5

Я тренировал случайный лес, используя caret + 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' 
) 

Теперь я хотел бы увидеть важность переменных. Тем не менее, ни одна из этих работ:

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

Любая идея, если &, как я могу его получить?

Спасибо.

ответ

4

varImp(fit) доставит его для вас.

Чтобы понять это, я посмотрел на names(fit), что привело меня к names(fit$modelInfo) - тогда вы увидите varImp в качестве одного из вариантов.

+2

Да, я тоже нашел это, погрузившись в документ 'caret'. Спасибо за этот полезный метод поиска информации! Оказывается, «varImp()» - это способ получить переменную значимость для большинства моделей, обучаемых с помощью «train()». Обратите внимание на будущих пользователей: я не на 100% уверен, и у меня нет времени проверять, но, похоже, необходимо иметь значение 'important = 'прим.' (Я думаю,' important = 'перестановка' будет работать тоже) передается как параметр в 'train()', чтобы иметь возможность использовать varImp() '. –

+2

Другое примечание: кажется, что если вы тренируете свою модель с помощью «рейнджера», но без «каретки», то «важность (соответствие)» будет правильным способом получения переменной важности. Как и выше, я думаю, что параметр 'важность = 'примесь' (или 'перестановка') должен находиться в' train() ' –

+0

Странно, это не работает для меня. Нет значений важности ... hmmm –

0

согласно @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) 

Вы можете передавать или "permutation" или "impurity" аргументу importance. описание для обоих значения можно найти здесь: http://alexperrier.github.io/jekyll/update/2015/08/27/feature-importance-random-forests-gini-accuracy.html

0

Для пакета «рейнджеров» можно было бы назвать важность с

fit$variable.importance 

В качестве примечания, вы можете увидеть все доступные выходы для модели с использованием str()

str(fit) 
Смежные вопросы