Obecnie używam XGBoost na zestawie danych z 21 funkcjami (wybranymi z listy około 150 funkcji), a następnie zakodowałem je jednym kodem, aby uzyskać ~ 98 funkcji. Kilka z tych 98 funkcji jest nieco redundantnych, na przykład: zmienna (funkcja) pojawia się również jako i .B. C.
Moje pytania to:
- W jaki sposób ( jeśli? ) Boosted drzew decyzyjnych radzi sobie z wielokoliniowością?
- W jaki sposób istnienie wielokoliniowości wpłynęłoby na przewidywanie, jeśli nie zostanie ono obsłużone?
Z tego, co rozumiem, model uczy się więcej niż jednego drzewa, a ostateczna prognoza oparta jest na czymś w rodzaju „ważonej sumy” indywidualnych prognoz. Więc jeśli jest to poprawne, to drzewka decyzyjne wzmocnione powinny być w stanie obsłużyć współzależność między zmiennymi.
Również w powiązanej notatce - jak działa obiekt o zmiennej ważności w XGBoost?
feature-selection
correlation
xgboost
gbm
użytkownik140323
źródło
źródło
Odpowiedzi:
Drzewa decyzyjne są z natury odporne na wielokulturowość. Na przykład, jeśli masz 2 funkcje, które są w 99% skorelowane, przy podejmowaniu decyzji o podziale drzewo wybierze tylko jedną z nich. Inne modele, takie jak regresja logistyczna, wykorzystywałyby obie funkcje.
Ponieważ wzmocnione drzewa używają pojedynczych drzew decyzyjnych, nie ma na nie wpływu również wielokoliniowość. Dobrą praktyką jest jednak usuwanie wszelkich zbędnych funkcji z dowolnego zestawu danych wykorzystywanego do szkolenia, niezależnie od algorytmu modelu. W twoim przypadku, ponieważ czerpiesz nowe funkcje, możesz użyć tego podejścia, ocenić znaczenie każdej funkcji i zachować tylko najlepsze funkcje dla ostatecznego modelu.
Matryca ważności modelu xgboost jest w rzeczywistości obiektem data.table z pierwszą kolumną zawierającą nazwy wszystkich funkcji faktycznie używanych w drzewach wzmocnionych. Druga kolumna to metryka Zysk, która implikuje względny wkład odpowiedniej operacji do modelu obliczony na podstawie udziału każdej operacji dla każdego drzewa w modelu. Wyższa wartość tej metryki w porównaniu z inną funkcją oznacza, że jest ona ważniejsza dla generowania prognozy.
źródło
Byłem tego ciekawy i przeprowadziłem kilka testów.
Przeszkoliłem model zestawu danych o diamentach i zauważyłem, że zmienna „x” jest najważniejsza do przewidzenia, czy cena diamentu jest wyższa niż określony próg. Następnie dodałem wiele kolumn silnie skorelowanych z x, uruchomiłem ten sam model i zaobserwowałem te same wartości.
Wydaje się, że gdy korelacja między dwiema kolumnami wynosi 1, xgboost usuwa dodatkową kolumnę przed obliczeniem modelu, więc nie ma to wpływu na ważność. Jednak po dodaniu kolumny częściowo skorelowanej z inną, a więc o niższym współczynniku, ważność oryginalnej zmiennej x jest zmniejszana.
Na przykład, jeśli dodam zmienną xy = x + y, znaczenie zarówno x, jak i y maleje. Podobnie znaczenie x maleje, jeśli dodam nowe zmienne o wartości r = 0,4, 0,5 lub 0,6, choć tylko odrobinę.
Myślę, że kolinearność nie stanowi problemu dla wzmocnienia, gdy obliczasz dokładność modelu, ponieważ drzewo decyzyjne nie dba o to, która ze zmiennych jest używana. Może to jednak wpłynąć na ważność zmiennych, ponieważ usunięcie jednej z dwóch skorelowanych zmiennych nie ma dużego wpływu na dokładność modelu, biorąc pod uwagę, że druga zawiera podobne informacje.
Oceń model na podstawie danych diamentów
Przewidujemy, czy cena jest wyższa niż 400, biorąc pod uwagę wszystkie dostępne zmienne numeryczne (karat, głębokość, tabela, x, y, x)
Zauważ, że x jest najważniejszą zmienną, z wynikiem przyrostu ważności wynoszącym 0,375954.
Model trenowany na diamentach, dodając zmienną o wartości r = 1 do x
Tutaj dodajemy nową kolumnę, która jednak nie dodaje żadnych nowych informacji, ponieważ jest doskonale skorelowana z x.
Zauważ, że ta nowa zmienna nie jest obecna na wyjściu. Wydaje się, że xgboost automatycznie usuwa doskonale skorelowane zmienne przed rozpoczęciem obliczeń. Wzrost znaczenia x jest taki sam, 0,3759.
Model trenowany na Diamentach, dodając kolumnę dla x + y
Dodajemy nową kolumnę xy = x + y. Jest to częściowo skorelowane zarówno z x, jak i y.
Zauważ, że znaczenie xiy jest nieco zmniejszone, z 0,3759 do 0,3592 dla xi od 0,116 do 0,079 dla y.
Model wytrenowany na danych diamentów, zmodyfikowany przez dodanie zbędnych kolumn
Dodajemy trzy nowe kolumny, które są skorelowane z x (r = 0,4, 0,5 i 0,6) i widzimy, co się stanie.
Zauważ, że znaczenie x zmniejsza się, z 0,3759 do 0,279.
źródło
Istnieje odpowiedź Tianqi Chen (2018).
Podsumowując, Xgboost nie używa losowo skorelowanych funkcji w każdym drzewie, na który losowy model lasu cierpi z powodu takiej sytuacji.
Odniesienie :
Tianqi Chen, Michaël Benesty, Tong He. 2018. „Zrozum swój zestaw danych dzięki Xgboost.” Https://cran.r-project.org/web/packages/xgboost/vignettes/discoverYourData.html#numeric-vs-categorical-variables .
źródło
Uwaga na odpowiedź Sandeepa: Zakładając, że 2 twoje cechy są wysoce kolinearne (powiedzmy równe 99% czasu) Rzeczywiście, tylko jeden element jest wybierany przy każdym podziale, ale dla następnego podziału xgb może wybrać inną cechę. Dlatego ranking funkcji xgb prawdopodobnie uszereguje 2 cechy kolinearne jednakowo. Bez pewnej wcześniejszej wiedzy lub innego przetwarzania funkcji, z prawie tego nie ma możliwości wykrycia, że 2 funkcje są współliniowe.
Teraz, jeśli chodzi o względne znaczenie, które generuje xgboost, powinno ono być bardzo podobne (lub może dokładnie podobne) do rankingu drzewa wzmocnionego gradientem sklearn. Zobacz tutaj wyjaśnienia.
źródło