web-dev-qa-db-ja.com

レンジャーによる可変重要度

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. 

もし私がそれを得ることができるかどうか、そしてどのようにそれを得ることができますか?

ありがとう。

13
François M.

varImp(fit)が取得します。

それを理解するために、私はnames(fit)を見たnames(fit$modelInfo)を調べました-次に、オプションの1つとしてvarImpが表示されます。

7
Tchotchke

「レンジャー」パッケージの場合、あなたは重要性を呼び出すことができます

fit$variable.importance

補足として、str()を使用して、モデルで利用可能なすべての出力を確認できます。

str(fit)
4

@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に。両方の値の説明はここにあります: https://alexisperrier.com/datascience/2015/08/27/feature-importance-random-forests-gini-accuracy.html

4
NaNxT