Regressionsbaumalgorithmus mit linearen Regressionsmodellen in jedem Blatt

14

Kurzversion: Ich suche ein R-Paket, das Entscheidungsbäume erstellen kann, während jedes Blatt im Entscheidungsbaum ein vollständiges lineares Regressionsmodell ist. AFAIK, die Bibliothek rparterstellt Entscheidungsbäume, in denen die abhängige Variable in jedem Blatt konstant ist. Gibt es eine andere Bibliothek (oder eine rpartEinstellung, die mir nicht bekannt ist), die solche Bäume bauen kann?

Langfassung: Ich suche einen Algorithmus, der einen Entscheidungsbaum auf der Grundlage eines Trainingsdatensatzes erstellt. Jede Entscheidung im Baum teilt den Trainingsdatensatz gemäß einer Bedingung für eine der unabhängigen Variablen in zwei Teile. Die Wurzel des Baums enthält den vollständigen Datensatz, und jedes Element im Datensatz ist in genau einem Blattknoten enthalten.

Der Algorithmus sieht folgendermaßen aus:

  1. Beginnen Sie mit dem vollständigen Datensatz, der der Stammknoten des Baums ist. Wählen Sie diesen Knoten , und nennen es .N
  2. Erstellen Sie eine lineare Regression Modell auf die Daten in .N
  3. Wenn des linearen Modells von N höher als ein Schwellenwert θ R 2 ist , ist N erledigt. Markieren Sie N als Blatt, und fahren Sie mit Schritt 5 fort.R2NθR2NN
  4. Versuchen Sie es mit zufälligen Entscheidungen und wählen Sie die aus, die das beste R 2 in den Unterknoten ergibt: nR2
    • Wählen Sie eine zufällige unabhängige Variable sowie eine zufällige Schwelle θ i .viθi
    • Die Entscheidung , teilt den Datensatz von N in zwei neue Knoten, N und ~ N .viθiNN^N~
    • Erstellen Lineare Regressionsmodelle sowohl N und ~ N und berechnen ihre R 2 (nennen wir sie r und ~ r ).N^N~R2r^r~
    • Aus allen diesen - Tupel ( v i , θ i , r , ~ r ) , wählen den mit dem maximal m i n ( r , ~ r ) . Daraus ergibt sich eine neue Entscheidung in dem Baum, und N hat zwei neue Unterknoten N und ~ N .n(vi,θi,r^,r~)min(r^,r~)NN^N~
  5. Wir haben die Bearbeitung von . Wählen Sie einen neuen Knoten N aus, der noch nicht verarbeitet wurde, und kehren Sie zu Schritt 2 zurück. Wenn alle Knoten verarbeitet wurden, endet der Algorithmus.NN

Dadurch wird rekursiv ein Entscheidungsbaum erstellt, der die Daten in kleinere Teile aufteilt und ein lineares Modell für jeden dieser Teile berechnet.

Schritt 3 ist die Ausgangsbedingung, die eine Überanpassung des Algorithmus verhindert. Natürlich gibt es auch andere mögliche Ausstiegsbedingungen:

  • Beenden Sie, wenn die Tiefe von im Baum über θ d e p t h liegtNθdepth
  • Beenden Sie den Vorgang, wenn der Datensatz in kleiner als θ d a t a s e t istNθdataset

Gibt es einen solchen Algorithmus in einem R-Paket?

Käse SO hör auf, Monica Schaden zuzufügen
quelle
4
Schauen Sie sich das Party- Paket an und sehen Sie, ob es Ihren Bedürfnissen entspricht. Es kann eine Reihe von Modelltypen in den Knoten der Bäume IIRC verarbeiten.
Setzen Sie Monica - G. Simpson

Antworten:

11

Sie funktionieren zwar anders als Ihr Algorithmus, aber ich glaube, Sie werden mob () und FTtree interessant finden. Für Zeileis 'Mob siehe http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Für FTtree, Gamas Funktionsbäume, ist eine Implementierung in Weka und damit in RWeka verfügbar. Weitere Informationen finden Sie unter http://cran.r-project.org/web/packages/RWeka/index.html .

Momo
quelle
1
+1 für Mob, mit dem fast jedes Modell in das rekursive Partitionierungs-Framework
eingebunden werden kann
8

RWeka- Paket bietet viele Regressionsmethoden. Darunter befindet sich M5P (M5 Prime), ein exakt baumbasiertes Regressionsmodell mit linearen Gleichungen in Blättern. Weitere Einzelheiten zur M5-Methode finden Sie in der Publikation .

Ein Beispielcode wäre:

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)

Wenn Sie das Absackensemble mit der M5-Methode verwenden möchten, versuchen Sie Folgendes:

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

Versuchen Sie Folgendes, um die Steuerungsoptionen für das M5P-Modell anzuzeigen:

WOW(M5P)

Wenn Sie die M5-Methode optimieren möchten, finden Sie im caretPaket eine Lösung :

library(caret)
Optimization = train (Dep_var ~ .,data = train, method = 'M5')
JerryTheForester
quelle