Wie ist die Ausgabe von XGBoost zu interpretieren?

37

Ich habe ein xgboost-Modell ausgeführt. Ich weiß nicht genau, wie ich die Ausgabe von interpretieren soll xgb.importance.

Was ist die Bedeutung von Gain, Cover und Frequency und wie interpretieren wir sie?

Was bedeuten Split, RealCover und RealCover%? Ich habe einige zusätzliche Parameter hier

Gibt es andere Parameter, die mehr über die Wichtigkeit von Features aussagen können?

Aus der R-Dokumentation geht hervor, dass die Verstärkung der Informationsverstärkung ähnelt und die Häufigkeit die Häufigkeit ist, mit der ein Feature in allen Bäumen verwendet wird. Ich habe keine Ahnung, was Cover ist.

Ich habe den im Link angegebenen Beispielcode ausgeführt (und auch versucht, dasselbe bei dem Problem zu tun, an dem ich arbeite), aber die dort angegebene Split-Definition stimmte nicht mit den von mir berechneten Zahlen überein.

importance_matrix

Ausgabe:

           Feature         Gain        Cover    Frequence
  1:            xxx 2.276101e-01 0.0618490331 1.913283e-02
  2:           xxxx 2.047495e-01 0.1337406946 1.373710e-01
  3:           xxxx 1.239551e-01 0.1032614896 1.319798e-01
  4:           xxxx 6.269780e-02 0.0431682707 1.098646e-01
  5:          xxxxx 6.004842e-02 0.0305611830 1.709108e-02

214:     xxxxxxxxxx 4.599139e-06 0.0001551098 1.147052e-05
215:     xxxxxxxxxx 4.500927e-06 0.0001665320 1.147052e-05
216:   xxxxxxxxxxxx 3.899363e-06 0.0001536857 1.147052e-05
217: xxxxxxxxxxxxxx 3.619348e-06 0.0001808504 1.147052e-05
218:  xxxxxxxxxxxxx 3.429679e-06 0.0001792233 1.147052e-05
Ethan
quelle

Antworten:

40

Aufgrund Ihrer Frage gehe ich davon aus, dass Sie xgboost verwenden, um verstärkte Bäume für die Binärklassifizierung anzupassen. Die Wichtigkeitsmatrix ist eigentlich ein data.table-Objekt. In der ersten Spalte sind die Namen aller Features aufgeführt, die tatsächlich in den verstärkten Bäumen verwendet werden.

Die Bedeutung der Wichtigkeitsdatentabelle ist wie folgt:

  1. Die Verstärkung impliziert den relativen Beitrag des entsprechenden Merkmals zum Modell, der berechnet wird, indem der Beitrag jedes Merkmals für jeden Baum im Modell genommen wird. Ein höherer Wert dieser Metrik im Vergleich zu einem anderen Feature bedeutet, dass es für die Erstellung einer Vorhersage wichtiger ist.
  2. Die Cover- Metrik gibt die relative Anzahl der Beobachtungen an, die sich auf diese Funktion beziehen. Wenn Sie beispielsweise 100 Beobachtungen, 4 Features und 3 Bäume haben und Feature1 verwendet wird, um den Blattknoten für 10, 5 und 2 Beobachtungen in Tree1, Tree2 bzw. Tree3 zu bestimmen. Dann zählt die Metrik die Abdeckung für diese Funktion als 10 + 5 + 2 = 17 Beobachtungen. Dies wird für alle 4 Features berechnet und die Abdeckung wird als Prozentsatz für die Abdeckungsmetriken aller Features mit 17 angegeben.
  3. Die Frequenz (/ 'Frequenz') ist der Prozentsatz, der die relative Häufigkeit angibt, mit der ein bestimmtes Merkmal in den Bäumen des Modells auftritt. Wenn im obigen Beispiel Feature1 in 2 Teilungen aufgetreten ist, werden jeweils 1 Teilung und 3 Teilungen in Tree1, Tree2 und Tree3 durchgeführt. dann beträgt die Gewichtung für Merkmal1 2 + 1 + 3 = 6. Die Häufigkeit für Merkmal1 wird als prozentuale Gewichtung über die Gewichtung aller Merkmale berechnet.

Die Verstärkung ist das relevanteste Attribut, um die relative Bedeutung der einzelnen Features zu interpretieren.

Die Maße sind alle relativ und summieren sich daher zu eins. Ein Beispiel für ein angepasstes xgboost-Modell in R ist:

> sum(importance$Frequence)
[1] 1
> sum(importance$Cover)
[1] 1
> sum(importance$Gain)
[1] 1
Sandeep S. Sandhu
quelle
1
Die Deckung wird nur auf Basis der Blattknoten oder aller Teilungen berechnet?
Fanfabbb
3

Danke Sandeep für deine ausführliche Antwort. Ich möchte korrigieren, dass die Deckung über alle Teilungen und nicht nur über die Blattknoten berechnet wird.

Lassen Sie uns ein einfaches Beispiel mit den Daten der xgboost-Bibliothek durchgehen.

library('xgboost')

data(agaricus.train, package='xgboost')
data(agaricus.test, package='xgboost')

train <- agaricus.train
test <- agaricus.test

X = train$data

y = train$label

bst <- xgboost(data = X, label = y, max.depth = 2,
           eta = 1, nthread = 2, nround = 2,objective = "binary:logistic",
           reg_lambda = 0, reg_alpha = 0)

xgb.model.dt.tree(agaricus.train$data@Dimnames[[2]], model = bst)

xgb.importance(agaricus.train$data@Dimnames[[2]], bst)

Ausgabe -

Baumkippe

Wichtigkeitsmatrix

Versuchen wir, die Geruchsbedeckung = keine in der Wichtigkeitsmatrix (0,495768965) aus der Baumhalde zu berechnen.

Die Abdeckung jeder Teilung, bei der Geruch = keine verwendet wird, beträgt 1628,2500 bei Node ID 0-0 und 765,9390 bei Node ID 1-1.

Gesamte Deckung aller Splits (Summierung über Deckungsspalte im Tree Dump) = 1628.2500 * 2 + 786.3720 * 2

Geruchsbedeckung = keine in der Wichtigkeitsmatrix = (1628,2500 + 765,9390) / (1628,2500 * 2 + 786,3720 * 2)

Daher sind wir sicher, dass die Deckung über alle Splits berechnet wird!

Natesh Arunachalam
quelle