Jak działa liniowy uczeń w wzmacnianiu? A jak to działa w bibliotece xgboost?

9

Wiem, jak zaimplementować liniową funkcję celu i liniowe wzmocnienia w XGBoost. Moje konkretne pytanie brzmi: kiedy algorytm pasuje do resztkowego (lub ujemnego gradientu), czy używa jednej cechy na każdym etapie (tj. Modelu jednoczynnikowego) czy wszystkich cech (model wielowymiarowy)?

Będziemy wdzięczni za wszelkie odniesienia do dokumentacji dotyczącej liniowych wzmocnień w XGBoost.

EDYCJA: W XGBoost można zastosować liniowe wzmocnienia, ustawiając parametr „booster” na „gblinear”. Zobacz: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3885826/, aby uzyskać przydatne informacje na temat liniowego wzmocnienia. Zauważ, że nie mówię o funkcji celu (która może być również liniowa), ale o samych doładowaniach.

Dzięki!

Escachator
źródło
1
Nie wiem, jak jest zaimplementowany, ale nie widzę powodu, dla którego powinien brać pod uwagę tylko jedną funkcję naraz
Alexey Grigorev
@AlexeyGrigorev najprawdopodobniej wymaga wielu funkcji na raz, ale w jaki sposób są one wybierane? Każdy dokument na temat konkretnego procesu liniowego wzmocnienia byłby bardzo klarowny.
Escachator,

Odpowiedzi:

17

Krótka odpowiedź na pytanie:

kiedy algorytm pasuje do rezydualnego (lub ujemnego gradientu), czy używa jednej cechy na każdym etapie (tj. modelu jednoczynnikowego) czy wszystkich cech (model wielowymiarowy)?

Algorytm używa jednej funkcji lub wszystkie funkcje zależą od konfiguracji. W mojej długiej odpowiedzi wymienionej poniżej, zarówno w kikutach decyzyjnych, jak i liniowych przykładach uczniów, wykorzystują one wszystkie funkcje, ale jeśli chcesz, możesz również dopasować ich podzbiór. Kolumny (funkcje) próbkowania są postrzegane jako zmniejszające wariancję modelu lub zwiększające „niezawodność” modelu, szczególnie jeśli masz dużą liczbę funkcji.

W xgboostprzypadku ucznia podstawowego drzewa można ustawić colsample_bytreeprzykładowe funkcje, aby pasowały do ​​każdej iteracji. Dla liniowego ucznia bazowego nie ma takich opcji, więc powinno pasować do wszystkich funkcji. Ponadto niewiele osób korzysta z liniowego ucznia w xgboost lub generalnie do zwiększania gradientu.


Długa odpowiedź dla liniowego jako słabego ucznia do wzmocnienia:

W większości przypadków nie możemy używać ucznia liniowego jako ucznia podstawowego. Powód jest prosty: dodanie wielu modeli liniowych razem nadal będzie modelem liniowym.

Wzmocnienie naszego modelu stanowi suma podstawowych uczniów:

f(x)=m=1Mbm(x)

gdzie M to liczba iteracji w ulepszaniu, bm jest modelem dla mth iteracja.

Jeśli na przykład podstawowy uczeń jest liniowy, załóżmy, że po prostu biegniemy 2 iteracje i b1=β0+β1x i b2=θ0+θ1x, następnie

f(x)=m=12bm(x)=β0+β1x+θ0+θ1x=(β0+θ0)+(β1+θ1)x

który jest prostym modelem liniowym! Innymi słowy, model zespołu ma „taką samą moc” jak podstawowy uczeń!

Co ważniejsze, jeśli użyjemy modelu liniowego jako podstawowego ucznia, możemy to zrobić tylko jeden krok, rozwiązując układ liniowy XTXβ=XTy zamiast przejść przez wielokrotne iteracje w ulepszaniu.


Dlatego ludzie chcieliby używać innych modeli niż model liniowy jako podstawowego ucznia. Drzewo to dobra opcja, ponieważ dodanie dwóch drzew nie jest równe jednemu drzewu. Demonstruję to w prostym przypadku: kikut decyzyjny, który jest drzewem z tylko 1 podziałem.

Robię dopasowanie funkcji, w której dane są generowane przez prostą funkcję kwadratową, f(x,y)=x2+y2. Oto wypełniona prawda podłoża konturowego (po lewej) i dopasowanie do wzmocnienia kikuta ostatecznej decyzji (po prawej).

wprowadź opis zdjęcia tutaj

Teraz sprawdź pierwsze cztery iteracje.

wprowadź opis zdjęcia tutaj

Należy zauważyć, że w odróżnieniu od ucznia liniowego model w 4. iteracji nie może być osiągnięty przez jedną iterację (jeden kikut decyzyjny) z innymi parametrami.


Jak dotąd wyjaśniłem, dlaczego ludzie nie używają ucznia liniowego jako ucznia podstawowego. Jednak nic nie stoi na przeszkodzie, aby ludzie to zrobili. Jeśli użyjemy modelu liniowego jako podstawowego ucznia i ograniczymy liczbę iteracji, oznacza to rozwiązanie układu liniowego, ale ogranicz liczbę iteracji podczas procesu rozwiązywania.

Ten sam przykład, ale na wykresie 3d czerwona krzywa to dane, a zielona płaszczyzna to ostateczne dopasowanie. Łatwo można zobaczyć, model końcowy jest modelem liniowym i z=mean(data$label)jest równoległy do ​​płaszczyzny x, y. (Możesz pomyśleć dlaczego? To dlatego, że nasze dane są „symetryczne”, więc każde przechylenie samolotu zwiększy stratę). Teraz sprawdź, co wydarzyło się w pierwszych 4 iteracjach: dopasowany model powoli osiąga optymalną wartość (średnią).

wprowadź opis zdjęcia tutaj


Ostateczny wniosek, liniowy uczeń nie jest szeroko stosowany, ale nic nie stoi na przeszkodzie, aby ludzie używali go lub implementowali w bibliotece R. Ponadto można go użyć i ograniczyć liczbę iteracji w celu uregulowania modelu.

Powiązany post:

Zwiększanie gradientu dla regresji liniowej - dlaczego to nie działa?

Czy kikut decyzji jest modelem liniowym?

Haitao Du
źródło
1
Powiedziałbym, że kombinacja n drzew jest drzewem, bez względu na to, jak duże jest n!
Metariat
@Metariat NIE !, drzewa kombinowane NIE są drzewem !. dla drzewa zobaczysz kształt „T” przy podziale. Ale wzmocniony kikut zobaczysz kształt „#”. tzn. podział będzie przecinał inne podziały!
Haitao Du
Czy możesz podać przykład n drzew? Dam ci równoważne drzewo!
Metariat
@Metariat przepraszam, na razie nie mam czasu. Ale jestem pewien, że zwiększenie kikuta decyzyjnego nie może być łatwo wygenerowane przez drzewo decyzyjne. Wrócę do tego pytania, kiedy będę miał czas.
Haitao Du
1
Zgadzam się, że ta kombinacja n drzew jest nadal drzewem, ale drzewo to będzie znacznie większe. W najgorszym przypadku liczba liści jest równa iloczynowi liczby liści we wszystkich drzewach wejściowych, więc złożoność takiego drzewa jest niepraktyczna. Z drugiej strony w przypadku funkcji liniowych złożoność jest dokładnie taka sama.
Tomek Tarczyński