Jeśli uruchomię randomForest
model, mogę następnie przewidywać na podstawie modelu. Czy istnieje sposób na uzyskanie przedziału prognoz dla każdej z prognoz, tak że wiem, jak „pewny” model ma odpowiedź. Jeśli jest to możliwe, czy jest to po prostu oparte na zmienności zmiennej zależnej dla całego modelu, czy będzie miał szersze i węższe przedziały w zależności od konkretnego drzewa decyzyjnego, które zastosowano dla danej prognozy?
r
confidence-interval
random-forest
Dean MacGregor
źródło
źródło
score
funkcję do oceny wydajności. Ponieważ wynik opiera się na głosowaniu większości drzew w lesie, w przypadku klasyfikacji daje prawdopodobieństwo, że ten wynik będzie prawdziwy, na podstawie rozkładu głosów. Nie jestem jednak pewien regresji ... Z jakiej biblioteki korzystasz?Odpowiedzi:
Jest to częściowo odpowiedź na @Sashikanth Dareddy (ponieważ nie zmieści się w komentarzu), a częściowo odpowiedź na oryginalny post.
Pamiętaj, co to jest przedział prognozy, to przedział lub zestaw wartości, w których przewidujemy, że przyszłe obserwacje będą leżały. Zasadniczo przedział predykcji składa się z 2 głównych elementów, które określają jego szerokość, elementu reprezentującego niepewność dotyczącą przewidywanej średniej (lub innego parametru), który jest częścią przedziału ufności, oraz elementu reprezentującego zmienność poszczególnych obserwacji wokół tej średniej. Przedział ufności jest dość solidny ze względu na centralne twierdzenie graniczne, aw przypadku losowego lasu pomaga również ładowanie początkowe. Jednak przedział przewidywania jest całkowicie zależny od założeń dotyczących dystrybucji danych, biorąc pod uwagę, że zmienne predykcyjne, CLT i ładowanie początkowe nie mają wpływu na tę część.
Przedział prognozy powinien być szerszy, a odpowiadający mu przedział ufności byłby również szerszy. Inne rzeczy, które mogłyby wpłynąć na szerokość przedziału prognozy, to założenia o równej wariancji lub nie, musi to wynikać z wiedzy badacza, a nie z losowego modelu lasu.
Przedział prognozy nie ma sensu dla wyniku kategorycznego (można zrobić zestaw prognoz zamiast przedziału, ale przez większość czasu prawdopodobnie nie byłby bardzo pouczający).
Możemy zobaczyć niektóre problemy dotyczące przedziałów prognoz, symulując dane, w których znamy dokładną prawdę. Rozważ następujące dane:
Te konkretne dane są zgodne z założeniami regresji liniowej i są dość proste w przypadku losowego dopasowania lasu. Wiemy z „prawdziwego” modelu, że gdy oba predyktory wynoszą 0, to średnia wynosi 10, wiemy również, że poszczególne punkty mają rozkład normalny ze standardowym odchyleniem wynoszącym 1. Oznacza to, że 95% przedział predykcji oparty na doskonałej wiedzy dla punkty te wynosiłyby od 8 do 12 (właściwie od 8,04 do 11,96, ale zaokrąglanie upraszcza). Każdy szacowany interwał przewidywania powinien być szerszy niż ten (brak doskonałej informacji zwiększa szerokość w celu kompensacji) i powinien obejmować ten zakres.
Spójrzmy na odstępy czasu od regresji:
Widzimy, że istnieje pewna niepewność w szacowanych średnich (przedział ufności), co daje nam przedział predykcji, który jest szerszy (ale obejmuje) zakres od 8 do 12.
Spójrzmy teraz na przedział oparty na indywidualnych prognozach poszczególnych drzew (należy się spodziewać, że będą one szersze, ponieważ losowy las nie korzysta z założeń (które, jak wiemy, są prawdziwe dla tych danych), jakie ma regresja liniowa):
Przedziały są szersze niż przedziały przewidywania regresji, ale nie obejmują całego zakresu. Obejmują one prawdziwe wartości, a zatem mogą być uzasadnione jako przedziały ufności, ale przewidują tylko, gdzie jest średnia (wartość przewidywana), a nie dodany element dla rozkładu wokół tej średniej. W pierwszym przypadku, gdy x1 i x2 są równe 0, przedziały nie spadają poniżej 9,7, jest to bardzo różna od prawdziwego przedziału przewidywania, który spada do 8. Jeśli wygenerujemy nowe punkty danych, będzie ich kilka (znacznie więcej niż 5%), które są w przedziałach prawdziwych i regresyjnych, ale nie mieszczą się w przypadkowych przedziałach leśnych.
Aby wygenerować przedział predykcji, musisz przyjąć pewne mocne założenia dotyczące rozmieszczenia poszczególnych punktów wokół przewidywanych średnich, a następnie możesz wziąć prognozy z poszczególnych drzew (element przedziału ufności bootstrapped), a następnie wygenerować losową wartość z założonej dystrybucja z tym centrum. Kwantyle tych wygenerowanych elementów mogą tworzyć przedział predykcji (ale nadal bym go przetestował, być może trzeba powtórzyć proces jeszcze kilka razy i połączyć).
Oto przykład zrobienia tego przez dodanie normalnych (ponieważ wiemy, że w oryginalnych danych zastosowano normalne) odchylenia do prognoz ze standardowym odchyleniem opartym na szacunkowym MSE z tego drzewa:
Te przedziały zawierają te oparte na doskonałej wiedzy, więc wyglądaj rozsądnie. Będą one jednak w dużym stopniu zależeć od przyjętych założeń (założenia są tutaj ważne, ponieważ wykorzystaliśmy wiedzę o tym, jak dane zostały zasymulowane, mogą nie być tak prawidłowe w rzeczywistych przypadkach danych). Nadal powtarzałbym symulacje kilka razy dla danych, które wyglądają bardziej jak twoje rzeczywiste dane (ale symulowane, abyś poznał prawdę) kilka razy, zanim w pełni zaufam tej metodzie.
źródło
Zdaję sobie sprawę, że to stary post, ale przeprowadziłem kilka symulacji na ten temat i pomyślałem, że podzielę się swoimi odkryciami.
Dokonując tej zmiany w kodzie @GregSnow, otrzymujemy następujące wyniki
Teraz, porównując je z przedziałami generowanymi przez dodanie normalnego odchylenia do prognoz ze standardowym odchyleniem, ponieważ MSE, takie jak @GregSnow, sugeruje, że otrzymamy,
Przerwa między tymi dwoma podejściami jest teraz bardzo bliska. Wykreślenie przedziału prognoz dla trzech podejść w odniesieniu do rozkładu błędów w tym przypadku wygląda następująco
Teraz ponownie uruchommy symulację, ale tym razem zwiększając wariancję terminu błędu. Jeśli nasze obliczenia przedziałów prognoz są dobre, powinniśmy skończyć z szerszymi przedziałami niż powyżej.
Wyjaśnia to teraz, że obliczanie przedziałów prognozowania za pomocą drugiego podejścia jest znacznie dokładniejsze i daje wyniki całkiem zbliżone do przedziału prognozowania z regresji liniowej.
Są one bardzo dobrze dopasowane do przedziałów modelu liniowego, a także sugerowanego podejścia @GregSnow. Należy jednak pamiętać, że podstawowym założeniem wszystkich omawianych metod jest to, że błędy mają rozkład normalny.
źródło
Jeśli używasz R, możesz łatwo stworzyć przedziały predykcji dla prognoz losowej regresji lasów: po prostu skorzystaj z pakietu
quantregForest
(dostępnego w CRAN ) i przeczytaj artykuł N. Meinshausena na temat tego, jak kwantyle warunkowe można wywnioskować z lasów regresji kwantowej i jak one może być użyty do zbudowania przedziałów prognoz. Bardzo pouczające, nawet jeśli nie pracujesz z R!źródło
Łatwo to rozwiązać za pomocą randomForest.
Najpierw pozwól mi poradzić sobie z zadaniem regresji (zakładając, że twój las ma 1000 drzew). W
predict
funkcji masz opcję zwracania wyników z poszczególnych drzew. Oznacza to, że otrzymasz 1000 kolumn wyjściowych. Możemy wziąć średnią z 1000 kolumn dla każdego wiersza - jest to normalna moc wyjściowa, którą RF wytworzyłby w jakikolwiek sposób. Teraz, aby uzyskać interwał przewidywania, powiedzmy +/- 2 std. odchylenia, co musisz zrobić, to dla każdego wiersza od 1000 wartości obliczyć +/- 2 standardowe. odchylenia i uczyńcie je górnymi i dolnymi granicami prognozy.Po drugie, w przypadku klasyfikacji pamiętaj, że każde drzewo generuje 1 lub 0 (domyślnie), a suma wszystkich 1000 drzew podzielonych przez 1000 daje prawdopodobieństwo klasy (w przypadku klasyfikacji binarnej). Aby ustawić przedział predykcji na prawdopodobieństwo, musisz zmodyfikować min. opcja nodesize (dokładna nazwa tej opcji znajduje się w dokumentacji randomForest) po ustawieniu jej wartości >> 1 poszczególne drzewa będą generować liczby od 1 do 0. Teraz możesz powtórzyć ten sam proces, jak opisano powyżej dla zadanie regresji.
Mam nadzieję, że to ma sens.
źródło
Próbowałem kilka opcji (to wszystko WIP):
W rzeczywistości zmienną zależną uczyniłem problem klasyfikacji z wynikami jako zakresami, zamiast pojedynczej wartości. Wyniki, które uzyskałem, były słabe w porównaniu do zwykłej wartości. Zrezygnowałem z tego podejścia.
Następnie przekonwertowałem go na wiele problemów z klasyfikacją, z których każdy miał dolną granicę dla zakresu (wynikiem tego, czy model przekroczyłby dolną granicę, czy nie), a następnie uruchomiłem wszystkie modele (~ 20), a następnie połączono wynik, aby uzyskać ostateczną odpowiedź jako zakres. Działa to lepiej niż 1 powyżej, ale nie jest tak dobre, jak tego potrzebuję. Nadal pracuję nad ulepszeniem tego podejścia.
Użyłem OOB i pomijając szacunki, aby zdecydować, jak dobre / złe są moje modele.
źródło
Problem konstruowania przedziałów prognoz dla losowych prognoz lasów został omówiony w następującym artykule:
Zhang, Haozhe, Joshua Zimmerman, Dan Nettleton i Daniel J. Nordman. „Losowe przedziały prognozowania lasu”. The American Statistician, 2019.
Pakiet R „rfinterval” to jego implementacja dostępna w CRAN.
Instalacja
Aby zainstalować pakiet R rfinterval :
Stosowanie
Szybki start:
Przykład danych:
źródło