У меня проблемы с пониманием того, как varImp
функция работает для модели randomForest с caret
пакетом. В приведенном ниже примере функция var3 получает нулевую важность с помощью varImp
функции caret , но базовая конечная модель randomForest имеет ненулевую важность для функции var3. Почему это так?
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
r
caret
random-forest
MangoHands
источник
источник
Ответы:
Как я понял у вас есть только 3 переменные. По умолчанию
varImp
функция возвращает масштабированные результаты в диапазоне 0-100. Var3 имеет наименьшее значение важности, а его масштабируемая важность равна нулю. Попробуй позвонитьvarImp(rf, scale = FALSE)
.источник
Добавление к ответу @ DrDom, чтобы обеспечить дальнейшую интуицию:
Оценка важности, которая
varImp(rf, scale = FALSE)
дает, просто рассчитывается следующим образом:rf$finalModel$importance[,1]/rf$finalModel$importanceSD
Это среднее значение% IncMSE функции, деленное на стандартное отклонение.
источник