Oszacowanie błędu braku worka do zwiększenia?


9

W Random Forest każde drzewo jest uprawiane równolegle na unikalnej próbce danych doładowania. Ponieważ oczekuje się, że każda próbka przypominająca zawiera około 63% unikalnych obserwacji, pozostawia to około 37% obserwacji, które można wykorzystać do testowania drzewa.

Teraz wydaje się, że w Stochastic Gradient Boosting istnieje również OOBerror oszacowanie podobne do tego w RF:

Jeśli frakcja bag. jest ustawiona na wartość większą niż 0 (zalecane 0,5), gbm oblicza oszacowanie poprawy wydajności predykcyjnej po wyjęciu z torby. Ocenia zmniejszenie dewiacji na podstawie obserwacji niewykorzystanych przy wyborze następnego drzewa regresji.

Źródło: Ridgeway (2007) , sekcja 3.3 (strona 8).

Mam problem ze zrozumieniem, jak to działa / jest ważne. Powiedzmy, że dodaję drzewo w sekwencji. Uprawiam to drzewo na losowej podpróbce oryginalnego zestawu danych. Mogłem przetestować to pojedyncze drzewo na podstawie obserwacji, które nie zostały wykorzystane do jego wyhodowania. Zgoda. ALE , ponieważ wzmocnienie jest sekwencyjne, raczej używam całej sekwencji drzew zbudowanych do tej pory, aby przewidzieć te pomijane obserwacje. I istnieje duża szansa, że ​​wiele poprzednich drzew widziało już te obserwacje. Więc model nie jest tak naprawdę testowany w każdej rundzie na niewidzialnych obserwacjach, takich jak RF, prawda?

Dlaczego więc nazywa się to szacunkiem błędu „po wyjęciu z torby”? Dla mnie nie wydaje się, że „wyszedł” z jakiejkolwiek torby, skoro obserwacje już widzieliśmy?


1
Zobacz dyskusję tutaj github.com/scikit-learn/scikit-learn/pull/1806 . Nie jesteś sam w wyrażaniu obaw dotyczących sposobu obliczania szacunków OOB.
mpiktas

dzięki za link, ale niestety wszyscy autorzy wątków wydają się być tak samo zagubieni jak ja!
Antoine,

1
Właściwie nie. Zobacz github.com/scikit-learn/scikit-learn/pull/2188 . W tym zatwierdzeniu wynik OOB jest zmieniany na ulepszenie OOB tak, jak robi to GBB. Nie wiem, jak dokładnie działa ten pomysł, ale z tego, co zebrałem, próbka OOB dla bieżącego drzewa służy do obliczenia poprawy OOB. Nie udało mi się znaleźć wzorów matematycznych, więc konieczne jest zagłębienie się w kod gbm, aby zobaczyć, jak dokładnie oblicza się to ulepszenie.
mpiktas

@Antoine Naprawdę ekscytujące pytanie! znaleziono ostateczną odpowiedź?
Soren Havelund Welling

1
Nie, niestety. Niektóre wskazówki są podane przez powyższe linki (w komentarzach), ten wątek i ten drugi wątek . Doprowadza mnie to do szaleństwa. Któregoś dnia ktoś powinien wysłać e-mail do Dr. Friedman / Hastie ... Dziękuję za uwagę.
Antoine,

Odpowiedzi:


2

Odpowiedź tylko częściowo (i dodanie nowego pytania do pytania).

Implementacja gbm w R http://www.rdocumentation.org/packages/gbm/functions/gbm ma dwa parametry, aby dostosować trochę braków.

a) train.fractionokreśli część danych, która jest wykorzystywana do trenowania wszystkich drzew, a zatem 1- train.fractionbędą prawdziwymi danymi OOB (poza torbą).

b) bag.fractionokreśli proporcję danych treningowych, które zostaną wykorzystane przy tworzeniu następnego drzewa doładowania. W związku z tym mogą istnieć pewne dane, które nigdy nie są wykorzystywane do utworzenia jakiegokolwiek drzewa i mogą one być naprawdę wykorzystane jako dane OOB. (Ale jest mało prawdopodobne, patrz pytanie poniżej)

Co prowadzi mnie do pytania. Twoja analiza 37% danych jako OOB jest prawdziwa tylko dla JEDNEGO drzewa. Ale szansa, że ​​będą jakieś dane, które nie zostaną użyte w ŻADNYM drzewie, jest znacznie mniejsza -0.37ntrees (to musi być w OOB dla wszystkich ntreedrzewa - rozumiem, że każde drzewo ma swój własny pasek startowy). Dlatego w RandomForests nie powinno być żadnych OOB do testowania lasu. A jednak implementacja randomForest w R (oparta na oryginalnym kodzie Breimana) dużo mówi o OOB (na przykład dane wyników err.ratei confusionpatrz http://www.rdocumentation.org/packages/randomForest/functions/randomForest )

Nie wiem, jak odpowiedzieć na to pytanie (i dziękuję (+1) za zadanie pytania i uświadomienie mi, że nie rozumiem tego aspektu losowych lasów). Możliwym rozwiązaniem jest to, że istnieje tylko jeden bootstrap - i wszystkie drzewa są z niego zbudowane - ale o ile mi wiadomo, tak nie jest.


W przypadku RF / Bagging nie ma problemu: na każdym etapie procesu budowania zestawu dowolna obserwacja w oryginalnym zbiorze danych może być dostarczona do wszystkich drzew, które zostały przeszkolone na próbkach boostrap pozbawionych tej obserwacji. Około jedna trzecia (~ 37%) całkowitej liczby drzew spełni ten warunek. Ponadto, pozwalając tym drzewom głosować i biorąc najpopularniejszą klasę, można uzyskać prognozę do obserwacji. Liczba przypadków, w których prognoza różni się od prawdziwej etykiety obserwacji uśrednionej dla wszystkich klas, daje oszacowanie błędu poza torbą
Antoine

1
wydaje się również, że to, co daje zdolność do oszacowania błędu OOB w funkcji Boosting, nie pochodzi od train.fractionparametru (który jest tylko cechą funkcji gbm, ale nie jest obecny w oryginalnym algorytmie), ale tak naprawdę z faktu, że tylko podpróbka dane są wykorzystywane do trenowania każdego drzewa w sekwencji, pomijając obserwacje (które można wykorzystać do testowania). Który wraca do mojego pierwotnego pytania. Jak można wykorzystać te obserwacje do testowania, skoro prawdopodobnie wiele razy widział je wiele wcześniejszych drzew w sekwencji?
Antoine,

zapomniałem wspomnieć, że każde drzewo w RF jest rzeczywiście zbudowane z własnej, unikalnej próbki bootstrap oryginalnych danych
Antoine,

@ user2835597 dziękuję za wyjaśnienia dotyczące RF. Zatem błąd OOB RF tak naprawdę ocenia tylko 1/3 drzew w lesie (co nie wydaje mi się bardzo przydatne). Ucz się czegoś codziennie.
Jacques Wainer,

W każdym razie parametr train.fraction wydaje się być odpowiedzią na twoje pytanie. Implementacja sklearn ma również podobny parametr, podpróbkę (patrz scikit-learn.org/stable/modules/generated/...
Jacques Wainer

-2

Sądzę, że robią to bez szacunku na każdym kroku. Ponieważ wyniki wszystkich kroków są dodawane (ze współczynnikami), błędy OOB można również dodawać z tymi samymi współczynnikami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.