Caret varImp dla modelu randomForest

10

Mam problem ze zrozumieniem, jak varImpdziała ta funkcja dla modelu randomForest z caretpakietem. W poniższym przykładzie funkcja var3 uzyskuje zerową ważność za pomocą varImpfunkcji Careta, ale leżący u jej podstaw model końcowy randomForest ma niezerowe znaczenie dla cechy var3. Dlaczego tak jest?

require(randomForest)
require(caret)


rf <- train(x, y, 
      method = "rf",
      trControl = trainControl(method = "oob"),
      importance = TRUE,
      verbose = TRUE,
      tuneGrid = data.frame(mtry = num.predictors) )


fm <- rf$finalModel


> varImp(f)
rf variable importance

       Overall
var1    100.00
var2    80.14
var3    0.00


> importance(fm)
        %IncMSE IncNodePurity
var2    872.7935      40505276
var1    1021.4707      55682866
var3     273.0168       3078731
MangoHands
źródło
Ustawiam flagę moderatora b / c, to nie jest temat dla SO. Bardziej odpowiednie dla
CrossValidated.com

Odpowiedzi:

11

Jak zrozumiałem, masz tylko 3 zmienne. Domyślnie varImpfunkcja zwraca skalowane wyniki z zakresu 0-100. Var3 ma najniższą wartość ważności, a jego skalowana ważność wynosi zero. Spróbuj zadzwonić varImp(rf, scale = FALSE).

DrDom
źródło
0

Dodanie do odpowiedzi @ DrDom w celu zapewnienia dalszej intuicji:

Podane oceny ważności varImp(rf, scale = FALSE)oblicza się w następujący sposób: rf$finalModel$importance[,1]/rf$finalModel$importanceSD

Jest to średni% IncMSE funkcji podzielony przez odchylenie standardowe.

veghokstvd
źródło