Używam pakietu randomForest w R (wersja R 2.13.1, randomForest wersja 4.6-2) do regresji i zauważyłem znaczące odchylenie w moich wynikach: błąd przewidywania zależy od wartości zmiennej odpowiedzi. Wysokie wartości są niedoszacowane, a niskie wartości są przeszacowane. Początkowo podejrzewałem, że jest to konsekwencja moich danych, ale następujący prosty przykład sugeruje, że jest to nieodłączne od algorytmu losowego lasu:
n = 1000;
x1 = rnorm(n, mean = 0, sd = 1)
response = x1
predictors = data.frame(x1=x1)
rf = randomForest(x=predictors, y=response)
error = response-predict(rf, predictors)
plot(x1, error)
Podejrzewam, że stronniczość zależy od rozkładu odpowiedzi, na przykład, jeśli x1
jest równomiernie rozłożona, nie ma stronniczości; jeśli x1
jest rozkładane wykładniczo, obciążenie jest jednostronne. Zasadniczo wartości odpowiedzi na ogonach rozkładu normalnego są wartościami odstającymi. Nic dziwnego, że model miałby trudności z przewidywaniem wartości odstających. W przypadku randomForest wartość odpowiedzi o ekstremalnej wielkości od ogona rozkładu jest mniej prawdopodobne, że skończy w liściu końcowym, a jej efekt zostanie wypłukany w zespole uśrednionym.
Zauważ, że próbowałem uchwycić ten efekt w poprzednim przykładzie: „Losowy Las w regresji liniowej ogony mtry”. To był zły przykład. Jeśli błąd w powyższym przykładzie jest naprawdę nieodłączny od algorytmu, wynika z tego, że można sformułować korektę błędu, biorąc pod uwagę rozkład odpowiedzi, który próbuje się przewidzieć, co daje dokładniejsze przewidywania.
Czy metody oparte na drzewach, takie jak losowy las, podlegają tendencyjności rozkładu odpowiedzi? Jeśli tak, to czy jest to znane społeczności statystycznej i jak to zwykle jest poprawiane (np. Drugi model, który wykorzystuje dane wyjściowe z modelu stronniczego jako danych wejściowych)?
Korekta błędu zależnego od odpowiedzi jest trudna, ponieważ z natury odpowiedź nie jest znana. Niestety, szacunkowa / przewidywana reakcja często nie łączy tego samego związku z błędem.
źródło
Odpowiedzi:
Jest idealnie, jak podejrzewasz - fakt, że węzły liści zawierają środki na pewnym zestawie obiektów, powoduje, że dowolny model drzewa regresji zacieśnia rozkład odpowiedzi i uniemożliwia jakąkolwiek ekstrapolację. Zespół oczywiście nie pomaga w tym i faktycznie pogarsza sytuację.
Naiwnym rozwiązaniem (i niebezpiecznym z powodu nadmiernego dopasowania) jest owinięcie modelu jakąś klasyczną regresją, która przeskalowałaby odpowiedź na pożądany rozkład.
Lepszym rozwiązaniem jest jeden z modeli drzewa modelowego w liściu, na przykład MOB w pakiecie imprezowym. Chodzi o to, że partycjonowanie przestrzeni cech powinno zakończyć się, gdy problem zostanie uproszczony nie do prostej wartości (jak w zwykłym drzewie), ale do prostej relacji (powiedzmy liniowej) między odpowiedzią a niektórymi predyktorami. Taką relację można teraz rozwiązać, dopasowując jakiś prosty model, który nie zakłóci rozkładu ani nie ograniczy ekstremalnych wartości i byłby w stanie dokonać ekstrapolacji.
źródło
Miałem dokładnie ten sam problem z dostępem warunkowym RF dostępnym za pośrednictwem pakietu grzechotki. Wysłałem e-mailem do Grahama Williamsa (autora grzechotki), który uprzejmie przekazał moje zapytanie autorom lasów, którzy odpowiedzieli i zasugerowali grę z dwoma parametrami, które w rzeczywistości nie pojawiają się nigdzie w dokumentacji CRF, ale które jednak wydają się dotyczyć problem, mianowicie minplit = 2 i minbucket = 1.
źródło
minsplit
, Zakładam, że masz na myśliPowinieneś oszacować optymalną wartość mtry i sampsize, minimalizując próbkę „błąd zwalidowany krzyżowo” na siatce różnych mtry, parametry sampsize, dla dowolnej odpowiedniej zmiennej odpowiedzi dla ustalonego zestawu cech, a następnie wyciągając wnioski - pod względem wyników. Możesz utworzyć kombinację parametrów siatki za pomocą expand.grid.
źródło