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ż 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?
Odpowiedzi:
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.fraction
określi część danych, która jest wykorzystywana do trenowania wszystkich drzew, a zatem 1-train.fraction
będą prawdziwymi danymi OOB (poza torbą).b)
bag.fraction
okreś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 ntree drzewa - 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.rate
iconfusion
patrz 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.
źródło
train.fraction
parametru (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?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.
źródło