Trenuję model klasyfikacyjny z Random Forest, aby rozróżnić 6 kategorii. Moje dane transakcyjne zawierają około 60 000 obserwacji i 35 zmiennych. Oto przykład, jak to w przybliżeniu wygląda.
_________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay |
|-------|----------------|-------|-------|--------|
|111 | 2013-04-01 | 12 | US | group1 |
|222 | 2013-04-12 | 6 | PNG | group1 |
|333 | 2013-05-05 | 30 | DE | group2 |
|444 | 2013-05-10 | 78 | US | group3 |
|555 | 2013-06-15 | 15 | BR | group1 |
|666 | 2013-06-15 | 237 | FR | group6 |
Po utworzeniu modelu chciałbym ocenić obserwacje z ostatnich kilku tygodni. Ponieważ nastąpiły zmiany w systemie, nowsze obserwacje będą bardziej przypominały środowisko obecnych obserwacji, które chciałbym przewidzieć. Dlatego chcę utworzyć zmienną wagi, aby Losowy Las przywiązywał większą wagę do ostatnich obserwacji.
Czy ktoś wie, czy pakiet randomForest w R jest w stanie obsłużyć wagi na obserwację?
Czy możesz również zasugerować, jaka jest dobra metoda tworzenia zmiennej wagi? Na przykład, ponieważ moje dane pochodzą z 2013 r., Pomyślałem, że mogę wziąć liczbę miesięcy od daty jako wagę. Czy ktoś widzi problem z tą metodą?
Z góry bardzo dziękuję!
źródło
Odpowiedzi:
Zrobi to
ranger
pakiet w R ( pdf ), który jest stosunkowo nowy. Implementacja losowych lasów przez leśniczego macase.weights
argument, który przyjmuje wektor z indywidualnymi wagami obserwacji / obserwacji.źródło
Możesz ponownie próbkować dane, aby reprezentować nowsze punkty danych. Rf i tak obejmuje etap sampela z zastąpieniem i „zgrubnie zbalansowane tworzenie worków” dla klas niezrównoważonych wykorzystuje próbkowanie do nadreprezentacji klasy mniejszości i daje wyniki lepsze lub lepsze niż losowy las ważony klasą z mojego doświadczenia.
Możesz zmienić próbkę na poziomie konstruowania macierzy treningowej ( referencji ) zamiast podczas tworzenia worków, aby ułatwić implementację, ale w takim przypadku sugerowałbym wykonanie wielu powtórzeń.
Wewnętrznie niektóre implementacje losowego lasu, w tym scikit-learn, faktycznie używają odważników do śledzenia, ile razy każda próbka znajduje się w torbie, i powinno to być równoważne z nadpróbkowaniem na poziomie workowania i zbliżone do nadpróbkowania na poziomie szkolenia w ramach walidacji krzyżowej.
źródło
Powinieneś zajrzeć do parametru „classwt”. To nie wydaje się być tym, czym jesteś bezpośrednio zainteresowany, ale może dać ci poczucie tego, co chcesz zrobić.
Zobacz tutaj: Stos wymiany pytanie nr 1
A tutaj: Stos wymiany pytania nr 2
Artykuł o ważonych losowych lasach: PDF
Podstawową ideą jest takie ważenie klas, aby rzadziej obserwowane grupy / klasyfikacje były częściej wybierane w próbkach bootstrap. Jest to pomocne w przypadku niezrównoważonych danych (gdy wcześniejsze prawdopodobieństwa różnych klas są bardzo różne).
Wydaje mi się, że chcesz zrobić coś podobnego, ale dla ostatnich wydarzeń (nie dla niektórych grup / klasyfikacji). Prostym sposobem na zrobienie tego byłoby utworzenie duplikatów obserwacji (tj. Umieszczenie w powtarzających się, identycznych wierszach) dla nowszych obserwacji. Może to jednak być potencjalnie nieefektywne. Nie znam sposobu bezpośredniego ważenia każdej obserwacji w R, ale mogłem być tego nieświadomy.
Możesz spróbować rozejrzeć się za alternatywnymi implementacjami, np. W C - w najgorszym przypadku można je dostosować przy odrobinie kodowania.
źródło