Jak należy sklasyfikować przypadkowe lasy w R, jak dostosować się do niezrównoważonych rozmiarów klas?


17

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?


1
Mam również do czynienia z podobnym problemem. Czy możesz podać skrypt dla losowego lasu ważonego i metrycznego losowego, jeśli masz? Czekam na twoją odpowiedź

Odpowiedzi:


5

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.


Cześć David, dziękuję za sugestię. Czy wzmocnienie byłoby możliwe w / w połączeniu z losowymi lasami? Przeczytałem również, że zwiększenie może nie mieć zastosowania w przypadku zaszumionych danych. Dane, z którymi pracuję, zawierają wiele „hałaśliwych” zmiennych - obecnie prowadzę losowe lasy bez wyboru funkcji, próbkując w dół większą klasę, aby poradzić sobie z nierównowagą. Otrzymałem akceptowalne wyniki (poprawnie klasyfikując 85% klasy mniejszej i 93% klasy wyższej w zestawie treningowym), ale ulepszenia są zawsze mile widziane.
ialm

@Jathanathan Nie mam pojęcia, ile hałasu jest potrzebne, zanim przypadkowe lasy zaczną konkurować z różnymi metodami zwiększania mocy, ale mam wrażenie, że to dużo. gbmOpakowanie Rposiada 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ć.
David J. Harris,

@ DavidJ.Harris Boosting cierpi również na nierównowagę klas, szczególnie w przypadku absolutnej rzadkości, gdy informacje o klasach mniejszości są rzadkie
Antoine

2

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.

0,5


0

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


Identyfikacja podzbiorów obserwacji w większej klasie wydaje się interesującym pomysłem. Druga część projektu polega na rozróżnieniu większej klasy na mniejsze, przydatne podgrupy, które mogą być przydatne w przyszłych badaniach. Jeśli chodzi o obliczenia entropii w kodzie, to tak naprawdę nie zagłębiłem się w kod i tylko przyjrzałem się niektórym teoriom stojącym za rf, więc nie mogę tego komentować.
ialm

Dawno temu chciałem zmodyfikować ten kod, ale brakowało mi na to czasu, dlatego dodawanie wag nie powinno być trudne koncepcyjnie.
Qbik

Losowy las w R może być użyty jako narzędzie regresji, może jednak przydaje się również do klasyfikacji bez nadzoru. Chciałem zmodyfikować kod randomForest dawno temu, ale brakowało mi na to czasu, dodawanie ciężarów powinno być trudne koncepcyjnie. Dawno temu zastanawiałem się, jak wykorzystać losowy las do bezobsługowego klastrowania i wpadłem na pomysł, ale nie przetestowałem tego jeszcze, niestety, wydaje się to dość wymagające pod względem obliczeniowym - liczba obserwacji ^ 2.
Qbik

0

(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.


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.