Czy istnieje formuła lub reguła określająca prawidłowy sampSize dla randomForest?

13

Gram z randomForest i odkryłem, że ogólnie zwiększenie sampSize prowadzi do lepszej wydajności. Czy istnieje reguła / formuła / itp., Która sugeruje, jaki powinien być optymalny sampSize, czy też jest to kwestia prób i błędów? Chyba inny sposób sformułowania tego; jakie jest moje ryzyko zbyt małego rozmiaru sampSize lub zbyt dużego (przeregulowanie?)?


To pytanie dotyczy implementacji losowego lasu R w randomForestpakiecie. Funkcja randomForestma parametr sampSizeopisany w dokumentacji jako

Rozmiar (-y) próbki do narysowania. Do celów klasyfikacji, jeśli sampsize jest wektorem długości liczby warstw, wówczas próbkowanie jest rozwarstwione według warstw, a elementy sampsize wskazują liczby, które należy narysować z warstw.

screechOwl
źródło

Odpowiedzi:

21

Zasadniczo wielkość próby losowego lasu działa jak kontrola „stopnia losowości”, a tym samym jako sposób dostosowania kompromisu wariancji odchylenia. Zwiększenie wielkości próby powoduje, że las jest „mniej przypadkowy”, a zatem ma tendencję do nadmiernego dopasowania. Zmniejszenie wielkości próby zwiększa zmienność poszczególnych drzew w lesie, zapobiegając nadmiernemu dopasowaniu, ale zwykle kosztem wydajności modelu. Przydatnym efektem ubocznym jest to, że mniejsze rozmiary próbek skracają czas potrzebny na szkolenie modelu.

Zwykłą zasadą dla najlepszego rozmiaru próbki jest „próbka ładowania początkowego”, próbka równa rozmiarowi z oryginalnym zestawem danych, ale wybierana z zamiennikiem, więc niektóre wiersze nie są wybierane, a inne są wybierane więcej niż raz. Zwykle zapewnia to prawie optymalną wydajność i jest domyślną wartością w standardowej implementacji R. Jednak w rzeczywistych aplikacjach może się okazać, że dostosowanie wielkości próby może doprowadzić do poprawy wydajności. W razie wątpliwości wybierz odpowiedni rozmiar próbki (i inne parametry modelu) za pomocą weryfikacji krzyżowej.

Martin O'Leary
źródło
2

Przez noc prowadziłem 4500 losowych lasów z losowymi ustawieniami parametrów:

Problem regresji, w Ysignal = x1^2+sin(x2*pi) + x3 * x4 + x5 którym xpróbkuje się dowolne niezależnie od rozkładu normalnego, sd = 1, średnia = 1

Ytotal = Ysignal + Yerror

gdzie Yerror = rnorm(n.observations,sd=sd(Ysignal))*noise.factor

theoretical.explainable.variance"TEV" = var(Ysignal= / var(Ytotal)

randomForest.performance = explained.variance(OOB cross-validation) / TEV

próbki danych zostały pobrane z problemu regresji, a dodatkowy szum n.obsbył liczbą losową między 1000 a 5000 n.extra.dummy.variablesmiędzy 1 a 20

ntree zawsze 1000

sample_replacement zawsze true

mtrywynosi od 5 do 25, ograniczona n.obs noise.factormiędzy 0 a 9

samplesize.ratio losowa liczba od 10% do 100%, stosunek wielkości każdego bootstrapu

wszystkie modele zostały przeszkolone rfo = randomForest(x=X, y=Ytotal, <more args>)

randomForest.performancejego zdolność do wyjaśnienia najwyższy ułamek TEVzwiększa w ogóle, gdy samplesizeobniża się, gdy TEVjest mniejsze niż 50%, zmniejsza się, gdy TEVjest wyższa niż 50%.

Tak więc, jeśli twoje randomForest-modelfitraporty np. 15% wyjaśniają wariancję przez OOB-CV, i jest to dla ciebie akceptowalna precyzja modelu, prawdopodobnie prawdopodobnie możesz podnieść nieco wydajność, obniżając sampsizedo jednej trzeciej podanych obserwacji ntree > 1000.

Morale : W przypadku bardzo hałaśliwych danych lepiej jest dekorelować drzewa, niż obniżyć uprzedzenie poprzez hodowanie drzew o maksymalnej wielkości.

Soren Havelund Welling
źródło
1

Aby losowe lasy działały równie dobrze w nowych danych, jak w danych szkoleniowych, wymagana wielkość próby jest ogromna, często jest 200 razy większa niż liczba elementów kandydujących . Zobacz tutaj .

Frank Harrell
źródło
2
Dr Harrell, myślę, że OP pyta raczej o wielkość ponownego próbkowania użytego do zbudowania każdego drzewa, a nie o całkowity rozmiar zestawu danych.
Sycorax mówi: Przywróć Monikę