Algorytm drzewa regresji z liniowymi modelami regresji w każdym liściu

14

Wersja skrócona: szukam pakietu R, który może budować drzewa decyzyjne, podczas gdy każdy liść w drzewie decyzyjnym jest pełnym modelem regresji liniowej. AFAIK, biblioteka rparttworzy drzewa decyzyjne, w których zmienna zależna jest stała w każdym liściu. Czy istnieje inna biblioteka (lub rpartustawienie, którego nie znam), która może budować takie drzewa?

Długa wersja: szukam algorytmu, który buduje drzewo decyzyjne na podstawie zestawu danych treningowych. Każda decyzja w drzewie dzieli zestaw danych treningowych na dwie części, zgodnie z warunkiem jednej z niezależnych zmiennych. Katalog główny drzewa zawiera pełny zestaw danych, a każdy element w zestawie danych jest zawarty w dokładnie jednym węźle liścia.

Algorytm wygląda następująco:

  1. Rozpocznij od pełnego zestawu danych, który jest węzłem głównym drzewa. Wybrać ten węzeł i nazywają to N .
  2. Stworzenie modelu regresji liniowej na podstawie danych w N .
  3. Jeśli R2 z N modelu liniowego „s jest wyższa niż pewien próg θR2 , potem skończymy z , więc oznaczyćNNN jak liść i przejść do kroku 5.
  4. Spróbuj losowych decyzji i wybierz tę, która daje najlepszą w podwęzłach: R 2nR2
    • Wybierz losową zmienną niezależną , a także losowy próg θ i .viθi
    • Decyzja dzieli zbiór danych N na dwa nowe węzły, N i ~ N .viθiNN^N~
    • Utwórz modele regresji liniowej zarówno na i i oblicz ich (nazwij je i ). ~ N R2N^N~R2r^r~
    • Spośród wszystkich krotek wybierz ten o maksymalnej wartości . Daje to nową decyzję w drzewie, a ma dwa nowe podwęzły i .( V I , θ I , r , ~ R ) m in(vi,θi,r^,r~)Nmin(r^,r~)NN^N~
  5. Mamy przetwarzania gotowego . Wybierz nowy węzeł który nie został jeszcze przetworzony i wróć do kroku 2. Jeśli wszystkie węzły zostały przetworzone, algorytm się kończy.NN

Spowoduje to rekurencyjną budowę drzewa decyzyjnego, które dzieli dane na mniejsze części i oblicza model liniowy dla każdej z tych części.

Krok 3 to warunek wyjścia, który zapobiega nadmiernemu dopasowaniu algorytmu. Oczywiście istnieją inne możliwe warunki wyjścia:

  • Wyjdź, jeśli głębokość w drzewie jest wyższa niżNθdepth
  • Wyjdź, jeśli zestaw danych w jest mniejszy niżθ d a t a s e tNθdataset

Czy w pakiecie R jest taki algorytm?

Cheesus mówi: przestań strzelać modami
źródło
4
Spójrz na pakiet imprezowy i sprawdź, czy to odpowiada Twoim potrzebom. Może obsługiwać wiele rodzajów modeli w węzłach drzew IIRC.
Przywróć Monikę - G. Simpson

Odpowiedzi:

11

Chociaż działają one inaczej niż algorytm, uważam, że mob () i FTtree będą interesujące. Dla mobów Zeileisa patrz http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf W przypadku FTtree, drzew funkcjonalnych Gamy, implementacja jest dostępna w Weka, a tym samym w RWeka. Szczegółowe informacje można znaleźć na stronie http://cran.r-project.org/web/packages/RWeka/index.html .

Momo
źródło
1
+1 dla moba, który pozwala na podłączenie prawie dowolnego modelu do struktury partycjonowania rekurencyjnego
etov
8

Pakiet RWeka oferuje wiele metod regresji. Wśród nich można znaleźć M5P (M5 Prime), który jest dokładnie opartym na drzewie modelem regresji z liniowymi równaniami w liściach. Więcej informacji na temat metody M5 można znaleźć w publikacji .

Przykładowy kod to:

library(RWeka)
M5_model = M5P (Dep_var ~ ., data = train, control = Weka_control(N=F, M=10))
train_predicted = predict(M5_model, train)
test_predicted = predict(M5_model, test)

Jeśli chcesz użyć zestawu do pakowania metodą M5, spróbuj czegoś takiego:

M5_bag = Bagging(Dep_var ~ ., data = train, control = Weka_control(P=100, I = 100, W = list("weka.classifiers.trees.M5P", M = 4)))

Aby zobaczyć opcje sterowania dla modelu M5P, spróbuj:

WOW(M5P)

Jeśli chcesz zoptymalizować metodę M5, jest na to rozwiązanie w caretpakiecie:

library(caret)
Optimization = train (Dep_var ~ .,data = train, method = 'M5')
JerryTheForester
źródło