randomForest und variabler Wichtigkeitsfehler?

10

Ich verstehe den Unterschied zwischen rfobject$importanceund importance(rfobject)in der Spalte MeanDecreaseAccuracy nicht.

Beispiel:

> data("iris")
> fit <- randomForest(Species~., data=iris, importance=TRUE)
> fit$importance
                  setosa  versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.027078501 0.019418330 0.040497602           0.02898837         9.173648
Sepal.Width  0.008553449 0.001962036 0.006951771           0.00575489         2.472105
Petal.Length 0.313303381 0.291818815 0.280981959           0.29216790        41.284869
Petal.Width  0.349686983 0.318527008 0.270975757           0.31054451        46.323415
> importance(fit)
               setosa versicolor virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 1.277324   1.632586  1.758101            1.2233029         9.173648
Sepal.Width  1.007943   0.252736  1.014141            0.6293145         2.472105
Petal.Length 3.685513   4.434083  4.133621            2.5139980        41.284869
Petal.Width  3.896375   4.421567  4.385642            2.5371353        46.323415
> 

Ich erhalte verschiedene MeanDecreaseAccuracy-Werte, habe aber die gleiche Reihenfolge für die Wichtigkeitsvariablen (sowohl für fit$importanceals auch für importance(fit)):

  1. Blütenblatt. Breite

  2. Blütenblatt.Länge

  3. Sepal.Length

  4. Sepal.Width

Aber in anderen Datensätzen bekomme ich manchmal andere Bestellungen. Kann jemand erklären, was hier passiert? Ist das möglicherweise ein Fehler?


Bearbeiten (als Antwort auf Martin O'Leary )

Okay danke! Mir ist noch etwas aufgefallen.

Bei einem Blick auf die rfcv()Funktion bemerkte ich die Zeile:

impvar <- (1:p)[order(all.rf$importance[, 1], decreasing = TRUE)]

Mit dieser Zeile wählen wir die erste Spalte aus, in all.rf$importanceder die Reihenfolge der klassenspezifischen (für den ersten Faktor ) Maße angegeben ist, die nur als mittlere Abnahme der Genauigkeit berechnet werden. Dies hat nicht immer die gleiche Reihenfolge wie die mittlere Abnahme der Genauigkeit über alle Klassen ( MeanDecreaseAccuracy). Wäre es nicht besser, die Wahl entweder die MeanDecreaseAccuracyoder MeanDecreaseGiniSpalte, oder besser , die unter Verwendung von importance()-function für die skalierten Werte? Wir hätten also eine sequentiell reduzierte Anzahl von Prädiktoren, die nach variabler Wichtigkeit (über alle Klassen) und nicht nur nach variabler Wichtigkeit für die erste Klasse geordnet sind.

Giuseppe
quelle

Antworten:

13

Nein, das ist kein Fehler. Die in angegebenen Werte fit$importancesind nicht skaliert, während die von angegebenen Werte importance(fit)als Standardabweichungen (wie von angegeben fit$importanceSD) ausgedrückt werden . Dies ist normalerweise eine sinnvollere Maßnahme. Wenn Sie die "rohen" Werte möchten, können Sie verwenden importance(fit, scale=FALSE).

Im Allgemeinen ist es eine sehr schlechte Idee, sich auf die internen Details eines Anpassungsobjekts zu verlassen, wenn eine Extraktionsfunktion bereitgestellt wird. Es gibt keine Garantie für den Inhalt von fit$importance- sie können sich ohne vorherige Ankündigung drastisch von Version zu Version ändern. Sie sollten die Extraktionsfunktion immer verwenden, wenn sie bereitgestellt wird.


Bearbeiten: Ja, diese Zeile rfcv()sieht aus wie ein Fehler oder zumindest ein unbeabsichtigtes Verhalten. Es ist eigentlich ein gutes Beispiel dafür, warum Sie sich nicht auf den Inhalt von Dingen wie verlassen sollten fit$importance. Wenn die Anpassung für einen Regressionswald fit$importancegilt %IncMSE, entspricht die erste Spalte von importance(fit, type=1). Dies gilt jedoch nicht für den Klassifizierungsfall, bei dem Sie für jede Faktorstufe zusätzliche Spalten haben.

Martin O'Leary
quelle