Jak interpretować wyjście o znaczeniu XGBoost?

37

Uruchomiłem model xgboost. Nie wiem dokładnie, jak interpretować wynik xgb.importance.

Jakie jest znaczenie wzmocnienia, ochrony i częstotliwości i jak je interpretujemy?

Co również oznaczają Split, RealCover i RealCover%? Mam tutaj dodatkowe parametry

Czy są jakieś inne parametry, które mogą powiedzieć mi więcej o importach funkcji?

Z dokumentacji R wynika, że ​​rozumiem, że wzmocnienie jest czymś podobnym do wzmocnienia informacji, a częstotliwość to liczba przypadków użycia funkcji we wszystkich drzewach. Nie mam pojęcia, co to jest Cover.

Uruchomiłem przykładowy kod podany w łączu (i próbowałem zrobić to samo w przypadku problemu, nad którym pracuję), ale podana tam definicja podziału nie była zgodna z obliczonymi przeze mnie liczbami.

importance_matrix

Wydajność:

           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
źródło

Odpowiedzi:

40

Z twojego pytania zakładam, że używasz xgboost, aby dopasować wzmocnione drzewa do klasyfikacji binarnej. Macierz ważności jest w rzeczywistości obiektem data.table z pierwszą kolumną zawierającą nazwy wszystkich funkcji faktycznie używanych w drzewach wzmocnionych.

Znaczenie tabeli danych ważności jest następujące:

  1. Zysk oznacza względny udział odpowiedniej funkcji do modelu oblicza się biorąc udział każda cecha dla każdego drzewa w modelu. Wyższa wartość tej metryki w porównaniu z inną funkcją oznacza, że ​​jest ona ważniejsza przy generowaniu prognozy.
  2. Do pokrywy średnich parametrów względna liczba obserwacji związanych z tą funkcją. Na przykład, jeśli masz 100 obserwacji, 4 cechy i 3 drzewa, i załóżmy, że funkcja 1 jest używana do decydowania o węźle liścia dla 10, 5 i 2 obserwacji odpowiednio w drzewie 1, drzewie 2 i drzewie 3; wówczas metryka będzie uwzględniać pokrycie tej funkcji jako 10 + 5 + 2 = 17 obserwacji. Zostanie to obliczone dla wszystkich 4 obiektów, a pokrycie wyniesie 17, wyrażone jako procent dla wszystkich wskaźników pokrycia.
  3. Częstotliwości (/ „FREQUENCE”) jest odsetek stanowiących względną liczbę razy dana cecha występuje w drzewach modelu. W powyższym przykładzie, jeśli funkcja 1 wystąpiła w 2 podziałach, 1 podziale i 3 podziałach w każdym z drzew1, drzewa2 i drzewa3; wówczas waga dla cechy 1 będzie wynosić 2 + 1 + 3 = 6. Częstotliwość dla cechy 1 jest obliczana jako jej procentowa waga w stosunku do wag wszystkich elementów.

Wzmocnienie jest najbardziej odpowiednim atrybutem do interpretacji względnej ważności każdej cechy.

Wszystkie miary są względne, a zatem sumują się do jednego, przykład z dopasowanego modelu xgboost w R to:

> sum(importance$Frequence)
[1] 1
> sum(importance$Cover)
[1] 1
> sum(importance$Gain)
[1] 1
Sandeep S. Sandhu
źródło
1
Pokrycie jest obliczane tylko na podstawie węzłów liści lub wszystkich podziałów?
fanfabbb
3

Dzięki Sandeep za szczegółową odpowiedź. Chciałbym poprawić, aby pokrycie było obliczane dla wszystkich podziałów, a nie tylko węzłów liści.

Przejdźmy przez prosty przykład z danymi dostarczonymi przez bibliotekę xgboost.

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)

Wyjście -

Zrzut drzewa

Macierz ważności

Spróbujmy obliczyć pokrycie zapachu = brak w macierzy ważności (0,495768965) ze zrzutu drzewa.

Pokrycie każdego podziału, w którym stosowany jest zapach = brak, to 1628.2500 dla ID węzła 0-0 i 765,9390 dla ID węzła 1-1.

Całkowite pokrycie wszystkich podziałów (sumowanie w kolumnie okładki w usypie drzewa) = 1628.2500 * 2 + 786,3720 * 2

Pokrycie zapachu = brak w matrycy ważności = (1628.2500 + 765,9390) / (1628.2500 * 2 + 786,3720 * 2)

Dlatego jesteśmy pewni, że pokrycie jest obliczane dla wszystkich podziałów!

Natesh Arunachalam
źródło