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 rpart
tworzy drzewa decyzyjne, w których zmienna zależna jest stała w każdym liściu. Czy istnieje inna biblioteka (lub rpart
ustawienie, 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:
- Rozpocznij od pełnego zestawu danych, który jest węzłem głównym drzewa. Wybrać ten węzeł i nazywają to .
- Stworzenie modelu regresji liniowej na podstawie danych w .
- Jeśli z modelu liniowego „s jest wyższa niż pewien próg , potem skończymy z , więc oznaczyćN jak liść i przejść do kroku 5.
- Spróbuj losowych decyzji i wybierz tę, która daje najlepszą w podwęzłach:
R 2
- Wybierz losową zmienną niezależną , a także losowy próg θ i .
- Decyzja dzieli zbiór danych N na dwa nowe węzły, N i ~ N .
- Utwórz modele regresji liniowej zarówno na i i oblicz ich (nazwij je i ). ~ N R2
- 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
- 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.
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ż
- Wyjdź, jeśli zestaw danych w jest mniejszy niżθ d a t a s e t
Czy w pakiecie R jest taki algorytm?