Wenn Sie ein CART-Modell (insbesondere einen Klassifizierungsbaum) mit rpart (in R) erstellen, ist es häufig interessant zu wissen, welche Bedeutung die verschiedenen Variablen haben, die in das Modell eingeführt werden.
Meine Frage lautet daher: Welche gängigen Maße gibt es für das Ranking / Messen der Variablenwichtigkeit von beteiligten Variablen in einem CART-Modell? Und wie kann dies mit R berechnet werden (zum Beispiel bei Verwendung des rpart-Pakets)
Hier ist beispielsweise ein Dummy-Code, der erstellt wurde, damit Sie Ihre Lösungen darauf anzeigen können. Dieses Beispiel ist so strukturiert, dass klar ist, dass die Variablen x1 und x2 "wichtig" sind, während x1 (in gewissem Sinne) wichtiger ist als x2 (da x1 für mehr Fälle gelten sollte und somit mehr Einfluss auf die Struktur der Daten hat). dann x2).
set.seed(31431)
n <- 400
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)
x4 <- rnorm(n)
x5 <- rnorm(n)
X <- data.frame(x1,x2,x3,x4,x5)
y <- sample(letters[1:4], n, T)
y <- ifelse(X[,2] < -1 , "b", y)
y <- ifelse(X[,1] < 0 , "a", y)
require(rpart)
fit <- rpart(y~., X)
plot(fit); text(fit)
info.gain.rpart(fit) # your function - telling us on each variable how important it is
(Referenzen sind immer willkommen)
quelle
Antworten:
Die variable Wichtigkeit kann im Allgemeinen basierend auf der entsprechenden Verringerung der Vorhersagegenauigkeit berechnet werden, wenn der interessierende Prädiktor entfernt wird (mit einer Permutationstechnik wie in Random Forest) oder auf einem Maß für die Abnahme der Knotenverunreinigung, siehe jedoch (1) für einen Überblick über verfügbare Methoden. Eine naheliegende Alternative zu CART ist natürlich RF ( randomForest , siehe auch Party ). Mit RF wird der Gini-Wichtigkeitsindex als die gemittelte Gini-Abnahme der Knotenverunreinigungen über alle Bäume in der Gesamtstruktur definiert (dies ergibt sich aus der Tatsache, dass der Gini-Verunreinigungsindex für einen bestimmten übergeordneten Knoten größer ist als der Wert dieses Maßes für seine beiden Tochterknoten, siehe zB (2)).
Ich weiß, dass Carolin Strobl und Coll. haben eine Menge von Simulationen und experimentellen Studien zur (bedingten) Variablenbedeutung in RFs und CARTs beigetragen (z. B. (3-4), aber es gibt noch viele andere, oder ihre These, Statistische Probleme beim maschinellen Lernen - Hin zu einer zuverlässigen Split-Auswahl und Variable Wichtigkeitsmaße ).
Meines Wissens berücksichtigt das Caret- Paket (5) nur eine Verlustfunktion für den Regressionsfall (dh den mittleren quadratischen Fehler). Möglicherweise wird es in naher Zukunft hinzugefügt (ein Beispiel mit einem Klassifizierungsfall von k-NN finden Sie in der Online-Hilfe für
dotPlot
).Noel M O'Boyle scheint jedoch einen R-Code für die Variable Wichtigkeit im WARENKORB zu haben .
Verweise
quelle
importance()
in RandomForest hat eine variable Bedeutung für den Einzelnen mit einer mittleren Abnahme der Genauigkeit und einer mittleren Abnahme der Gini.Die folgende Funktion (aus dem Caret-Paket) kann zum Auswerten der variablen Wichtigkeit in Teilbäumen verwendet werden. Ich habe einen Fehler in der Caret-Funktion behoben, als dieser nur Wurzelknoten im Baum war.
}
Der folgende r-Code erzeugt Wichtigkeitswerte für einen r-Teilbaum "fit".
quelle
Ich denke, chl hat den ersten Teil so ziemlich beantwortet:
In Bezug auf den zweiten Teil Ihrer Frage:
Sie können die Variablenbedeutung mit rpart ermitteln, indem Sie summary (fit) verwenden. Dies gibt unter anderem die variable Wichtigkeit aus. Hier können Sie mehr darüber lesen: https://cran.r-project.org/web/packages/rpart/rpart.pdf . Siehe Seite 25.
quelle
names(result)
zeigt anvariable.importance
result$variable.importance
sollte helfen?quelle