Я не понимаю, что разница между varImp
функцией (caret
пакетом) и importance
функцией (randomForest
пакетом) для модели Random Forest:Разница между varImp (каретки) и значением (RandomForest) для случайных лес
I вычислена простая радиочастотная модель классификации и при вычислении переменного значения, я обнаружил, что «рейтинг» предсказатели не было одинаковым для обоего функций:
Вот мой код:
rfImp <- randomForest(Origin ~ ., data = TAll_CS,
ntree = 2000,
importance = TRUE)
importance(rfImp)
BREAST LUNG MeanDecreaseAccuracy MeanDecreaseGini
Energy_GLCM_R1SC4NG3 -1.44116806 2.8918537 1.0929302 0.3712622
Contrast_GLCM_R1SC4NG3 -2.61146974 1.5848150 -0.4455327 0.2446930
Entropy_GLCM_R1SC4NG3 -3.42017102 3.8839464 0.9779201 0.4170445
...
varImp(rfImp)
BREAST LUNG
Energy_GLCM_R1SC4NG3 0.72534283 0.72534283
Contrast_GLCM_R1SC4NG3 -0.51332737 -0.51332737
Entropy_GLCM_R1SC4NG3 0.23188771 0.23188771
...
Я думал, что они использовали один и тот же «алгоритм», но теперь я не уверен.
EDIT
Для того, чтобы воспроизвести проблему, ionosphere
набор данных (kknn пакет) может быть использован:
library(kknn)
data(ionosphere)
rfImp <- randomForest(class ~ ., data = ionosphere[,3:35],
ntree = 2000,
importance = TRUE)
importance(rfImp)
b g MeanDecreaseAccuracy MeanDecreaseGini
V3 21.3106205 42.23040 42.16524 15.770711
V4 10.9819574 28.55418 29.28955 6.431929
V5 30.8473944 44.99180 46.64411 22.868543
V6 11.1880372 33.01009 33.18346 6.999027
V7 13.3511887 32.22212 32.66688 14.100210
V8 11.8883317 32.41844 33.03005 7.243705
V9 -0.5020035 19.69505 19.54399 2.501567
V10 -2.9051578 22.24136 20.91442 2.953552
V11 -3.9585608 14.68528 14.11102 1.217768
V12 0.8254453 21.17199 20.75337 3.298964
...
varImp(rfImp)
b g
V3 31.770511 31.770511
V4 19.768070 19.768070
V5 37.919596 37.919596
V6 22.099063 22.099063
V7 22.786656 22.786656
V8 22.153388 22.153388
V9 9.596522 9.596522
V10 9.668101 9.668101
V11 5.363359 5.363359
V12 10.998718 10.998718
...
Я думаю, что я что-то не хватает ...
EDIT 2
Я понял, что если вы сделать среднее каждую строку первых двух столбцов importance(rfImp)
, вы получите результаты varImp(rfImp)
:
impRF <- importance(rfImp)[,1:2]
apply(impRF, 1, function(x) mean(x))
V3 V4 V5 V6 V7 V8 V9
31.770511 19.768070 37.919596 22.099063 22.786656 22.153388 9.596522
V10 V11 V12
9.668101 5.363359 10.998718 ...
# Same result as in both columns of varImp(rfImp)
Я не знаю, почему это происходит, но там должен быть объяснением для этого.
Воспроизводимый пример необходим людям, чтобы точно ответить на вопрос. – topepo
Извините. Я обнаружил, что та же проблема возникает при использовании набора данных «ионосфера». Я собираюсь отредактировать вопрос –
@topepo, как вы думаете? Я надеюсь, что вы сможете помочь с объяснением различий. –