Badam różne metody klasyfikacji dla projektu, nad którym pracuję i jestem zainteresowany wypróbowaniem Losowych Lasów. Staram się kształcić na bieżąco i byłbym wdzięczny za wszelką pomoc ze strony społeczności CV.
Podzieliłem swoje dane na zestawy szkoleniowe / testowe. Po eksperymentach z losowymi lasami w R (przy użyciu pakietu randomForest) miałem problem z wysokim wskaźnikiem błędnej klasyfikacji dla mojej mniejszej klasy. Przeczytałem ten artykuł na temat wydajności losowych lasów na niezbilansowanych danych, a autorzy przedstawili dwie metody radzenia sobie z nierównowagą klas podczas korzystania z losowych lasów.
1. Ważone losowe lasy
2. Zrównoważone losowe lasy
Pakiet R nie pozwala na ważenie klas (z forów pomocy R, przeczytałem, że parametr classwt nie działa poprawnie i jest zaplanowany jako poprawka w przyszłości), więc mam opcję 2. Jestem w stanie określić liczba obiektów próbkowanych z każdej klasy dla każdej iteracji losowego lasu.
Nie podoba mi się ustawienie równych wielkości próbek dla losowych lasów, ponieważ tracę zbyt wiele informacji o większej klasie, co prowadzi do niskiej wydajności w przypadku przyszłych danych. Wskaźniki błędnej klasyfikacji przy zmniejszaniu próbkowania większej klasy okazały się poprawiać, ale zastanawiałem się, czy istnieją inne sposoby radzenia sobie z niezrównoważonymi rozmiarami klas w losowych lasach?
Odpowiedzi:
Jeśli nie podobają ci się te opcje, czy zamiast tego zastanawiałeś się nad zastosowaniem metody wzmocnienia? Biorąc pod uwagę odpowiednią funkcję strat, zwiększenie automatycznie ponownie skalibruje ciężary w miarę upływu czasu. Jeśli przemawia do ciebie stochastyczna natura losowych lasów, to również zwiększa to stochastyczne wzmocnienie gradientu.
źródło
gbm
OpakowanieR
posiada funkcjonujący „wagi” termin, można zwiększyć przypadkowość w bardzo podobny sposób jak lasy losowe poprzez zmniejszenie z „bag.fraction” perspektywie. Wydaje się, że warto spróbować.Myślę, że ważenie obiektów jest w jakiś sposób równoważne ich duplikowaniu. Może powinieneś spróbować zmodyfikować krok ładowania początkowego, próbkując odpowiednio różne klasy.
źródło
Zamiast próbkować duże klasy możesz rozwinąć małe klasy! Jeśli duże klasy mają wielokrotnie więcej obserwacji niż małe, wówczas tendencja będzie niewielka. Mam nadzieję, że poradzisz sobie z tym ogromnym zestawem danych.
Możesz także zidentyfikować podzbiory obserwacji, które obsługują najwięcej informacji o dużych klasach, istnieje wiele możliwych procedur, najprostsza, jak sądzę, oparta jest na metodzie najbliższych sąsiadów - próbkowanie obserwacji uwarunkowane strukturą grafu sąsiedzkiego gwarantuje, że próbka będzie miała gęstość prawdopodobieństwa bardziej zbliżoną do oryginalny.
randomForest jest napisany w Fortranie ic, dostępny jest kod źródłowy (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), ale nie mogę znaleźć miejsca, w którym obliczana jest entropia, ps. ups, które losowo korzystają z Gini zamiast entropii
źródło
(1) Masz rację, funkcja ważenia nie działa i nie jesteś pewien, czy kiedykolwiek została naprawiona.
(2) Większość korzysta z opcji 2 ze zrównoważonymi danymi. Kluczem do nie utraty zbyt dużej ilości danych jest warstwowe próbkowanie. Losowo próbujesz unikalny zrównoważony zestaw dla każdego drzewa.
źródło
Syntetyczne nadmierne próbkowanie mniejszości (SMOTE) generuje nowe obserwacje klasy mniejszości jako losowe wypukłe kombinacje sąsiednich obserwacji. Artykuł jest tutaj: https://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-14-106
źródło