Mam wykształcenie informatyczne, ale staram się uczyć danych, rozwiązując problemy w Internecie.
Pracowałem nad tym problemem przez ostatnie kilka tygodni (około 900 wierszy i 10 funkcji). Początkowo korzystałem z regresji logistycznej, ale teraz przerzuciłem się na losowe lasy. Kiedy uruchamiam mój przypadkowy model lasu na danych treningowych, otrzymuję naprawdę wysokie wartości dla auc (> 99%). Jednak gdy uruchamiam ten sam model na danych testowych, wyniki nie są tak dobre (dokładność około 77%). To prowadzi mnie do przekonania, że przesadzam z danymi treningowymi.
Jakie są najlepsze praktyki dotyczące zapobiegania nadmiernemu dopasowaniu w losowych lasach?
Używam r i rstudio jako mojego środowiska programistycznego. Korzystam z randomForest
pakietu i zaakceptowałem wartości domyślne dla wszystkich parametrów
Odpowiedzi:
Aby uniknąć nadmiernego dopasowania w losowym lesie, najważniejszą rzeczą, którą musisz zrobić, jest optymalizacja parametru strojenia, który określa liczbę funkcji losowo wybieranych do wyhodowania każdego drzewa na podstawie danych startowych. Zazwyczaj robi się to poprzez krotną walidację krzyżową, gdzie , i wybiera parametr strojenia, który minimalizuje błąd prognozowania próbki testowej. Ponadto, powiększenie większego lasu poprawi dokładność predykcyjną, chociaż zwykle dochodzi do malejących zysków, gdy zdobędziesz kilkaset drzew.k ∈ { 5 , 10 }k k∈{5,10}
źródło
Jak uzyskać 99% AUC na podstawie danych treningowych? Pamiętaj, że istnieje różnica między nimi
i
podczas uzyskiwania prognoz dla zestawu danych szkoleniowych. Pierwsza opcja dostaje out-of-torby przewidywań losowego lasu. Jest to generalnie to, czego chcesz, porównując przewidywane wartości z wartościami rzeczywistymi w danych treningowych.
Drugi traktuje twoje dane treningowe, jakby to był nowy zestaw danych, i prowadzi obserwacje w dół każdego drzewa. Spowoduje to sztucznie ścisłą korelację między prognozami a rzeczywistymi, ponieważ algorytm RF na ogół nie przycina poszczególnych drzew, zamiast tego polegając na zestawie drzew w celu kontrolowania nadmiernego dopasowania. Nie rób tego, jeśli chcesz uzyskać prognozy dotyczące danych treningowych.
źródło
W przypadku drzew decyzyjnych istnieją dwa sposoby radzenia sobie z nadmiernym dopasowaniem: (a) nie hoduj drzew do całości (b) śliwki
To samo dotyczy lasu drzew - nie uprawiaj ich zbyt wiele i przycinaj.
Nie używam
randomForest
dużo, ale według mojej wiedzy istnieje kilka parametrów, które można wykorzystać do dostrojenia lasów:nodesize
- minimalny rozmiar węzłów końcowychmaxnodes
- maksymalna liczba węzłów końcowychmtry
- liczba zmiennych użytych do zbudowania każdego drzewa (dzięki @ user777)źródło
mtry
liczba zmiennych, które algorytm rysuje, aby zbudować każde drzewo, domyślnie pierwiastek kwadratowy z całkowitej liczby funkcji.Możesz użyć metod walidacji krzyżowej, takich jak walidacja krzyżowa K fold.
źródło
możesz dostroić parametry za pomocą gridsearch
źródło
GridSearchCV
jest włączonymodel_selection
, a zatem powinna to być druga linia kodufrom sklearn.model_selection import GridSearchCV
.Spróbuj dostroić parametr max_depth w zakresach [5, 15], ale nie więcej niż to, ponieważ jeśli weźmiesz dużą głębokość, istnieje duża szansa na przeregulowanie.
źródło