Zufällige Waldvariable Wichtigkeit Plot Diskrepanz?
Ich verwende den folgenden Code, um ein Diagramm mit variabler Wichtigkeit von Random Forest zu erhalten:
statRF <- randomForest(formula = Trend ~ ., data = data[,features], sampsize=c(600,600,600),mtry=6, ntree=500, importance=TRUE)
varImpPlot(statRF, cex=1.2)
Wenn ich jedoch versuche, die mittlere Abnahme der Genauigkeit zu extrahieren, erhalte ich eine völlig andere variable Bedeutung
statRF$importance Decreasing Increasing No Trend MeanDecreaseAccuracy MeanDecreaseGini EcoRegion 0.005331568 0.002025101 6.025702e-05 0.0009792462 6.340508 Geology 0.009487879 0.004385796 4.427072e-03 0.0047468217 25.811581 Avg1980 0.068535362 0.026512398 6.766761e-03 0.0165637391 171.622158 Fire_Group 0.114414044 0.023774639 1.941874e-02 0.0269273991 52.122888 FLOW_SUM 0.009836593 0.009120500 5.692553e-03 0.0069617922 130.574740 MEAN_SLOPE 0.011427702 0.003421026 2.723633e-03 0.0034971800 134.810582 MEAN_ELEVATION 0.071074497 0.027537933 3.030051e-02 0.0321650097 167.462789 NEAR_DIST 0.018364729 0.004711747 9.081642e-04 0.0031616073 133.859939 Latitude 0.065935569 0.035386208 2.414563e-02 0.0301581377 176.920755 Longtitude 0.098719411 0.060942430 4.483657e-02 0.0530569867 200.474059 sort(statRF$importance[,4], decreasing=TRUE)
Longtitude MEAN_ELEVATION Latitude Fire_Group Avg1980 FLOW_SUM Geology
0.0530569867 0.0321650097 0.0301581377 0.0269273991 0.0165637391 0.0069617922 0.0047468217
MEAN_SLOPE NEAR_DIST EcoRegion
0.0034971800 0.0031616073 0.0009792462
Insbesondere ist die Höhe jetzt die zweite "wichtigste" Variable anstelle der vierten und einiger anderer Schalter in der Position verschiedener Variablen.
Sie fragen sich, ob die varImpPlotFunktion etwas anderes als die Variable MeanDecreaseAccuracy aus dem zufälligen Gesamtstrukturmodell zeichnet? Wenn ja, wie erhalte ich diese Werte?
BEARBEITEN: Ich kann die MeanDecreaseAccuracy-Werte aus dem ersten Diagramm mit dem folgenden Code abrufen:
var.imp <- varImpPlot(statRF)
var.imp <- as.data.frame(var.imp)
var.imp
MeanDecreaseAccuracy MeanDecreaseGini
EcoRegion 4.939973 6.340508
Geology 16.326295 25.811581
Avg1980 34.301641 171.622158
Fire_Group 49.419724 52.122888
FLOW_SUM 18.991762 130.574740
MEAN_SLOPE 12.053575 134.810582
MEAN_ELEVATION 47.251207 167.462789
NEAR_DIST 10.508457 133.859939
Latitude 52.898975 176.920755
Longtitude 74.645221 200.474059
Ich bin mir aber immer noch nicht sicher, warum sich Umfang und Reihenfolge unterscheiden statRF$importance.
Antworten
Die Variable Bedeutung in der letzten Handlung wird durch ihre Standardfehler skaliert, wenn Sie die überprüfen Hilfeseite für varImp Plot wird das Standardargument , scale=TRUEdie an die Funktion übergeben wird importance. Um die skalierten Werte wiederherzustellen, können Sie die folgende importance()Funktion verwenden:
library(randomForest)
set.seed(111)
fit = randomForest(Species ~ .,data=iris,importance=TRUE)
importance(fit,scale=TRUE)
setosa versicolor virginica MeanDecreaseAccuracy
Sepal.Length 6.716993 7.4654657 7.697842 10.869088
Sepal.Width 4.581990 -0.5208697 4.224459 3.772957
Petal.Length 22.155981 33.0549839 27.892363 33.272150
Petal.Width 22.497643 31.4966353 31.589361 33.123064
MeanDecreaseGini
Sepal.Length 9.333510
Sepal.Width 2.425592
Petal.Length 43.324744
Petal.Width 44.146107
Oder um zu sehen, wie dies berechnet wird, tun Sie Folgendes:
fit$importance[,1:4] / fit$importanceSD
setosa versicolor virginica MeanDecreaseAccuracy
Sepal.Length 6.716993 7.4654657 7.697842 10.869088
Sepal.Width 4.581990 -0.5208697 4.224459 3.772957
Petal.Length 22.155981 33.0549839 27.892363 33.272150
Petal.Width 22.497643 31.4966353 31.589361 33.123064