Algoritmo de árvore de regressão com modelos de regressão linear em cada folha

14

Versão curta: Estou procurando um pacote R que pode construir árvores de decisão, enquanto cada folha na árvore de decisão é um modelo completo de regressão linear. AFAIK, a biblioteca rpartcria árvores de decisão em que a variável dependente é constante em cada folha. Existe outra biblioteca (ou uma rpartconfiguração que eu não conheço) que possa construir essas árvores?

Versão longa: estou procurando um algoritmo que construa uma árvore de decisão com base em um conjunto de dados de treinamento. Cada decisão na árvore divide o conjunto de dados de treinamento em duas partes, de acordo com uma condição em uma das variáveis ​​independentes. A raiz da árvore contém o conjunto de dados completo e cada item no conjunto de dados está contido em exatamente um nó folha.

O algoritmo é assim:

  1. Comece com o conjunto de dados completo, que é o nó raiz da árvore. Escolha este nó e chamá-lo .N
  2. Criar um modelo de regressão linear nos dados .N
  3. Se do modelo linear de for maior que algum limite , então terminamos com , então marque como uma folha e pule para a etapa 5.R2NθR2NN
  4. Tente decisões aleatórias e escolha a que produz o melhor nos subnós: nR2
    • Escolha uma variável independente aleatória , bem como um limite aleatório .viθi
    • A decisão divide o conjunto de dados de em dois novos nós, e .viθiNN^N~
    • Crie modelos de regressão linear em e e calcule o R ^ 2 (chame-os de \ hat {r} e \ tilde {r} ).N^N~R2r^r~
    • De todas essas n tuplas (vi,θi,r^,r~) , selecione aquela com o mínimo máximo (\ hat {r}, \ til {r})min(r^,r~) . Isso gera uma nova decisão na árvore e N possui dois novos subnós N^ e N~ .
  5. Temos processamento acabado . Escolha um novo nó que ainda não foi processado e volte para a etapa 2. Se todos os nós tiverem sido processados, o algoritmo será encerrado.NN

Isso criará recursivamente uma árvore de decisão que divide os dados em partes menores e calcula um Modelo Linear em cada uma dessas partes.

A etapa 3 é a condição de saída, que impede que o algoritmo se ajuste demais. Obviamente, existem outras condições de saída possíveis:

  • Saia se a profundidade de na árvore estiver acima deNθdepth
  • Sair se o conjunto de dados em for menor queNθdataset

Existe um algoritmo desse tipo em um pacote R?

cheesus diz parar de atirar mods
fonte
4
Dê uma olhada no pacote da festa e veja se isso atende às suas necessidades. Ele pode lidar com vários tipos de modelos nos nós das árvores IIRC.
Reinstate Monica - G. Simpson

Respostas:

11

Enquanto eles funcionam de maneira diferente do seu algoritmo, acredito que você achará mob () e FTtree interessantes. Para o mob da Zeileis, consulte http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Para o FTtree, as árvores funcionais do Gama estão disponíveis uma implementação em Weka e, portanto, em RWeka. Veja http://cran.r-project.org/web/packages/RWeka/index.html para obter detalhes.

Momo
fonte
1
+1 para mob, que permite conectar praticamente qualquer modelo no quadro de particionamento recursivo
etov
8

O pacote RWeka oferece muitos métodos de regressão. Entre eles, você encontra o M5P (M5 Prime), que é exatamente o modelo de regressão baseado em árvore com equações lineares nas folhas. Para mais detalhes sobre o método M5, consulte a publicação .

Um exemplo de código seria:

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 você deseja usar o ensacamento ensacado com o método M5, tente algo como:

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

Para ver as opções de controle para o modelo M5P, tente:

WOW(M5P)

Se você deseja otimizar o método M5, existe uma solução para isso no caretpacote:

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