2012-05-09 13 views
6

Używam pakietu randomForest w R (R wersja 2.13.1, randomForest wersja 4.6-2) do regresji i zauważyłem znaczący błąd w moich wynikach: błąd prognozy zależy od wartości zmiennej odpowiedzi. Wysokie wartości są niedoceniane, a niskie wartości są zawyżone. Początkowo podejrzewałem ten był konsekwencją moich danych ale następujący prosty przykład pokazuje, że jest to właściwe dla losowego algorytmu leśnej:RandomForest w regresji liniowej regresji R mny

n = 50; 
x1 = seq(1,n) 
x2 = matrix(1, n, 1) 
predictors = data.frame(x1=x1, x2=x2) 
response = x2 + x1 
rf = randomForest(x=predictors, y=response) 
plot(x1, response) 
lines(x1, predict(rf, predictors), col="red") 

Bez wątpienia metody drzewa mają swoje ograniczenia, jeśli chodzi o liniowość, ale nawet najprostsze drzewo regresji, np tree() in R, nie wykazuje tego błędu. Nie mogę sobie wyobrazić, że społeczność nie byłaby tego świadoma, ale nie znalazła żadnej wzmianki, jak to ogólnie się koryguje? Dzięki za wszelkie komentarze

EDIT: Przykład na to pytanie jest błędne, proszę zobaczyć „lasy losowe dla regresji w R - zależny od uprzedzeń dystrybucji odpowiedź” w zamian stosu na poprawioną terapię https://stats.stackexchange.com/questions/28732/randomforest-for-regression-in-r-response-distribution-dependent-bias

Odpowiedz

5

Co odkryłeś ISN Nieodłączny błąd losowy w lasach, ale po prostu niepoprawna korekta parametrów strojenia w modelu.

Korzystanie swoim przykładzie dane:

rf = randomForest(x=predictors, y=response,mtry = 2,nodesize = 1) 
plot(x1, response) 
lines(x1, predict(rf, predictors), col="red") 

enter image description here

Dla swoich prawdziwych danych poprawa będzie mało prawdopodobne, aby być tak sztywna, oczywiście, i założę dostaniesz więcej na przebieg mtry (mtry) wykonał większość pracy tutaj).

Powodem, dla którego zwykłe drzewa nie wykazywały tego "odchylenia", jest to, że domyślnie przeszukują wszystkie zmienne w celu uzyskania najlepszego podziału.

+0

dziękuję Joran. Coś mi nie pasowało i cieszę się, że istnieje rozwiązanie. Niestety dla mojej pracy, już dostroiłem parametry z niewielkim skutkiem (z wyjątkiem oczywiście nTrees) i dlatego przeważnie zignorowałem je dla tego "prostego" przykładu - myślę, że odchylenie naprawdę istnieje w moim przypadku, dzięki znowu – rumbleB

+0

Wystarczająco fair. .. chociaż jeśli jest to ograniczone do twoich danych, to tak naprawdę nie jest to odchylenie w RF, czyż nie? ;) Masz tylko trochę trudnych do modelowania danych! – joran

+0

tak, stronniczość w RF jest możliwa do uniknięcia - zmieniłem tytuł tego pytania, aby mogło być bardziej pomocne dla ludzi w przyszłości – rumbleB