Algoritmo dell'albero di regressione con modelli di regressione lineare in ogni foglia


14

Versione breve: sto cercando un pacchetto R in grado di costruire alberi decisionali mentre ogni foglia dell'albero decisionale è un modello di regressione lineare completo. AFAIK, la libreria rpartcrea alberi decisionali in cui la variabile dipendente è costante in ogni foglia. Esiste un'altra libreria (o rpartun'impostazione di cui non sono a conoscenza) in grado di costruire tali alberi?

Versione lunga: sto cercando un algoritmo che costruisca un albero decisionale basato su un set di dati di addestramento. Ogni decisione nella struttura suddivide il set di dati di allenamento in due parti, in base a una condizione su una delle variabili indipendenti. La radice dell'albero contiene il set di dati completo e ogni elemento nel set di dati è contenuto esattamente in un nodo foglia.

L'algoritmo va così:

  1. Inizia con il set di dati completo, che è il nodo principale dell'albero. Scegliere questo nodo e chiamare .N
  2. Creare un modello di regressione lineare sui dati in .N
  3. Se del modello lineare di è superiore a qualche soglia , allora abbiamo finito con , quindi segna come una foglia e vai al passaggio 5.R2NθR2NN
  4. Prova decisioni casuali e scegli quella che produce il miglior nei nodi secondari: nR2
    • Scegli una variabile indipendente casuale vi , nonché una soglia casuale θi .
    • La decisione viθi divide il set di dati di N in due nuovi nodi, N^ e N~ .
    • Crea modelli di regressione lineare su N^ e N~ e calcola il loro R2 (chiamali r^ e r~ ).
    • Da tutte quelle n tuple (vi,θi,r^,r~) , seleziona quella con il minimo massimo (\ hat {r}, \ tilde {r})min(r^,r~) . Ciò produce una nuova decisione nella struttura e N ha due nuovi nodi secondari N^ e N~ .
  5. Abbiamo terminato l'elaborazione N . Scegliere un nuovo nodo N che non è stato ancora elaborato e tornare al passaggio 2. Se tutti i nodi sono stati elaborati, l'algoritmo termina.

Ciò genererà in modo ricorsivo un albero decisionale che suddivide i dati in parti più piccole e calcola un modello lineare su ciascuna di quelle parti.

Il passaggio 3 è la condizione di uscita, che impedisce l'adattamento eccessivo dell'algoritmo. Naturalmente, ci sono altre possibili condizioni di uscita:

  • Esci se la profondità di N nella struttura è superiore a θdepth
  • Esci se il set di dati in N è inferiore a θdataset

Esiste un tale algoritmo in un pacchetto R?


4
Dai un'occhiata al pacchetto per le feste e vedi se si adatta alle tue esigenze. Può gestire una serie di tipi di modelli nei nodi degli alberi IIRC.
Ripristina Monica - G. Simpson il

Risposte:


11

Mentre funzionano in modo diverso rispetto al tuo algoritmo, credo che troverai mob () e FTtree interessanti. Per la folla di Zeileis consultare http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Per FTtree, gli alberi funzionali di Gama è disponibile un'implementazione in Weka e quindi in RWeka. Vedi http://cran.r-project.org/web/packages/RWeka/index.html per i dettagli.


1
+1 per mob, che consente di collegare quasi tutti i modelli al framework di partizionamento ricorsivo
etov,

8

Il pacchetto RWeka offre molti metodi di regressione. Tra questi, puoi trovare M5P (M5 Prime), che è esattamente un modello di regressione basato su alberi con equazioni lineari in foglie. Per ulteriori dettagli sul metodo M5, consultare la pubblicazione .

Un codice di esempio sarebbe:

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)

Se desideri utilizzare l'insieme di insaccamento con il metodo M5, prova qualcosa del tipo:

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

Per visualizzare le opzioni di controllo per il modello M5P, provare:

WOW(M5P)

Se desideri ottimizzare il metodo M5, nel caretpacchetto è presente una soluzione :

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

7

Penso che questo risponda alla versione breve della tua domanda:

Il pacchetto cubista si adatta a modelli basati su regole (simili agli alberi) con modelli di regressione lineare nelle foglie terminali, correzioni basate sull'istanza e potenziamento.

Dalle visualizzazioni delle attività di Cran: Machine Learning


Sai se questo è (simile a) M5 di Quinlan?
Momo

So che questo è simile all'M5 di Quinlan per quanto il cubista di Quinlan sia simile all'M5 di Quinlan .
Jack Ryan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.