Szukam wyjaśnienia, w jaki sposób względna ważność zmiennych jest obliczana w drzewach wspomaganych gradientem, które nie jest zbyt ogólne / uproszczone, takie jak:
Miary są oparte na liczbie wyborów zmiennej do podziału, ważone przez podniesienie kwadratu do modelu w wyniku każdego podziału i uśredniane dla wszystkich drzew . [ Elith i in. 2008, Roboczy przewodnik po ulepszonych drzewach regresji ]
A to mniej abstrakcyjne niż:
Gdzie sumowanie się nieterminalowi węzły o -końcową węzeł drzewa , jest zmienny podział związany z węzłem i jest odpowiedni empiryczny poprawa kwadrat błędu w wyniku podziału, zdefiniowanego jako , gdzie oznaczają odpowiednio lewą i prawą odpowiedź córki, a są odpowiednimi sumami wag. J T v t t ^ i 2 t i 2 ( R l , R r ) = w l w r[ Friedman 2001, Przybliżenie funkcji chciwości: maszyna zwiększająca gradient ]
Wreszcie nie uważam, że elementy uczenia statystycznego (Hastie i in. 2008) są bardzo pomocne, ponieważ odpowiedni rozdział (10.13.1 strona 367) smakuje bardzo podobnie do drugiego odnośnika powyżej (który można wyjaśnić przez fakt, że Friedman jest współautorem książki).
PS: Wiem, że miary względnej zmiennej ważności są podane w pliku summary.gbm w pakiecie gbm R. Próbowałem zbadać kod źródłowy, ale nie mogę znaleźć miejsca, w którym odbywa się obliczenie.
Punkty Brownie: Zastanawiam się, jak zdobyć te działki w R.
Odpowiedzi:
Użyję sklearn kodu, jak to jest na ogół znacznie czystsze niż w
R
kodzie.Oto implementacja właściwości feature_importances GradientBoostingClassifier (usunąłem kilka wierszy kodu, które przeszkadzają w tworzeniu koncepcji)
Jest to dość łatwe do zrozumienia.
self.estimators_
to tablica zawierająca pojedyncze drzewa w booster, więc pętla for iteruje po poszczególnych drzewach. Jest jeden problem zzajmuje się to przypadkiem odpowiedzi niebinarnej. Tutaj dopasowujemy wiele drzew na każdym etapie w sposób jeden do wszystkich. Najprostszym koncepcyjnie jest skupienie się na przypadku binarnym, w którym suma ma jedno podsumowanie, i to jest sprawiedliwe
tree.feature_importances_
. Więc w przypadku binarnym możemy przepisać to wszystko jakoInnymi słowy, podsumuj ważność cech poszczególnych drzew, a następnie podziel przez całkowitą liczbę drzew . Pozostaje sprawdzić, jak obliczyć ważność operacji dla pojedynczego drzewa.
Obliczanie ważności drzewa jest realizowane na poziomie cytonu , ale nadal jest możliwe. Oto oczyszczona wersja kodu
To jest całkiem proste. Iteruj przez węzły drzewa. Dopóki nie znajdujesz się w węźle liścia, oblicz ważoną redukcję czystości węzła na podstawie podziału w tym węźle i przypisz go do funkcji, która została podzielona na
Następnie, po zakończeniu, podziel to wszystko przez całkowitą wagę danych (w większości przypadków liczbę obserwacji)
Warto przypomnieć, że nieczystość to powszechna nazwa metryki, którą należy stosować przy określaniu podziału, jaki należy wykonać podczas uprawy drzewa. W tym świetle podsumowujemy, jak bardzo podział na każdą cechę pozwolił nam zmniejszyć zanieczyszczenie wszystkich podziałów w drzewie.
W kontekście zwiększania gradientu drzewa te są zawsze drzewami regresji (chciwie minimalizują błąd kwadratu) dopasowującymi się do gradientu funkcji straty.
źródło