Losowy pakiet R. pakietu R nie może obsłużyć współczynnika z więcej niż 32 poziomami. Gdy ma więcej niż 32 poziomy, emituje komunikat o błędzie:
Nie obsługuje predyktorów jakościowych z więcej niż 32 kategoriami.
Ale dane, które mam, mają kilka czynników. Niektóre z nich mają ponad 1000 poziomów, a niektóre ponad 100. Ma nawet „stan” stanów zjednoczonych, który wynosi 52.
Oto moje pytanie.
Dlaczego są takie ograniczenia? randomForest odmawia uruchomienia nawet dla prostej sprawy.
> d <- data.frame(x=factor(1:50), y=1:50) > randomForest(y ~ x, data=d) Error in randomForest.default(m, y, ...) : Can not handle categorical predictors with more than 32 categories.
Jeśli jest to spowodowane ograniczeniem pamięci, w jaki sposób scikit learn randomForeestRegressor może działać z więcej niż 32 poziomami?
Jak najlepiej poradzić sobie z tym problemem? Załóżmy, że mam zmienne niezależne X1, X2, ..., X50, a Y jest zmienną zależną. Załóżmy, że X1, X2 i X3 mają ponad 32 poziomy. Co powinienem zrobić?
Myślę o uruchomieniu algorytmu grupowania dla każdego z X1, X2 i X3, w którym odległość jest zdefiniowana jako różnica w Y. Uruchomię trzy klastry, ponieważ istnieją trzy zmienne problematyczne. I w każdej grupie chciałbym znaleźć podobne poziomy. I połączę je.
Jak to brzmi?
źródło
randomForest
może obsługiwać predyktory jakościowe z maksymalnie 53 poziomami. WiadomościOdpowiedzi:
W rzeczywistości jest to dość rozsądne ograniczenie, ponieważ podział na czynnik z poziomami jest w rzeczywistości wyborem jednej z 2 N - 2 możliwych kombinacji. Więc nawet przy N jak 25 przestrzeń kombinacji jest tak duża, że takie wnioskowanie ma niewielki sens.N. 2)N.- 2 N.
Większość innych implementacji po prostu traktuje czynnik jako porządek porządkowy (tj. Liczby całkowite od 1 do ), i jest to jedna z opcji, w jaki sposób rozwiązać ten problem. W rzeczywistości RF jest często wystarczająco mądry, aby podzielić to na dowolne grupy z kilkoma podziałami.N.
Inną opcją jest zmiana reprezentacji - być może twój wynik nie zależy bezpośrednio od podmiotu stanu, ale na przykład obszar, populację, liczbę drzew sosny na mieszkańca lub inne atrybuty, które możesz zamiast tego podłączyć do swojego systemu informacyjnego.
Może być również tak, że każdy stan jest tak odizolowanym i nieskorelowanym bytem, że wymaga dla siebie osobnego modelu.
Grupowanie na podstawie decyzji jest prawdopodobnie złym pomysłem, ponieważ w ten sposób przemycasz informacje z decyzji do atrybutów, co często kończy się przeregulowaniem.
źródło
Głównym powodem jest sposób implementacji randomForest. Wdrożenie od R w dużej mierze wynika ze specyfikacji oryginalnego Breimana. Należy tutaj zauważyć, że w przypadku zmiennych czynnikowych / kategorialnych kryteria podziału są binarne, z niektórymi wartościami etykiet po lewej stronie, a pozostałymi wartościami etykiet po prawej.
Dlaczego implementacje Weka i Python działają?
Implementacja weka domyślnie nie używa drzew CART. Wykorzystuje drzewa C45, które nie mają tego problemu obliczeniowego, ponieważ dla danych jakościowych dzieli się na wiele węzłów, po jednym dla każdej wartości poziomu.
Losowa implementacja lasu w Pythonie nie może używać zmiennych kategorialnych / czynnikowych. Musisz zakodować te zmienne w zmienne fikcyjne lub zmienne numeryczne.
źródło
Możesz spróbować przedstawić tę kolumnę inaczej. Możesz reprezentować te same dane, co rzadka ramka danych.
Minimalny wykonalny kod;
Zauważ, że każda wartość w oryginalnej kolumnie staje się teraz osobną kolumną zastępczą.
Bardziej obszerny przykładowy kod;
Chociaż ten fragment kodu pokazuje, że rzeczywiście nie będziesz już otrzymywać błędu, zauważysz, że algorytm randomForest potrzebuje teraz dużo czasu, zanim się skończy. Wynika to z ograniczenia procesora, więc możesz teraz zmapować to zadanie poprzez próbkowanie.
Aby uzyskać więcej informacji, sprawdź ten post na blogu:
https://blog.cloudera.com/blog/2013/02/how-to-resample-from-a-large-data-set-in-parallel-with-r-on-hadoop/
źródło
Zamiast tego możesz użyć pakietu extraTrees. Algorytm skrajnie losowych lasów nie próbuje żadnego punktu przerwania / podziału, a jedynie ograniczony losowy podzbiór podziałów.
źródło
Inna opcja: w zależności od liczby poziomów i liczby obserwacji w danych możesz połączyć niektóre poziomy. Poza przekroczeniem limitu może zmniejszyć wariancję, jeśli masz wiele poziomów z zaledwie kilkoma obserwacjami. Hadley „s Forcats: fct_lump to robi.
źródło