Algorithme d'arbre de régression avec des modèles de régression linéaire dans chaque feuille

14

Version courte: je recherche un package R capable de construire des arbres de décision alors que chaque feuille de l'arbre de décision est un modèle de régression linéaire complet. AFAIK, la bibliothèque rpartcrée des arbres de décision où la variable dépendante est constante dans chaque feuille. Y a-t-il une autre bibliothèque (ou un rpartparamètre que je ne connais pas) qui peut construire de tels arbres?

Version longue: je recherche un algorithme qui construit un arbre de décision basé sur un ensemble de données de formation. Chaque décision dans l'arbre divise l'ensemble de données d'apprentissage en deux parties, selon une condition sur l'une des variables indépendantes. La racine de l'arborescence contient l'ensemble de données complet, et chaque élément de l'ensemble de données est contenu dans exactement un nœud feuille.

L'algorithme va comme ceci:

  1. Commencez par l'ensemble de données complet, qui est le nœud racine de l'arborescence. Choisissez ce nœud et appelez .N
  2. Créer un modèle de régression linéaire sur les données .N
  3. Si de modèle linéaire de est supérieur à un certain seuil , nous avons fini avec , marquer si comme une feuille et sauter à l' étape 5. N θ R 2 N NR2NθR2NN
  4. Essayez décisions aléatoires et choisissez celle qui donne le meilleur dans les sous-nœuds: R 2nR2
    • Choisissez une variable indépendante aléatoire , ainsi qu'un seuil aléatoire .θ ivjeθje
    • La décision divise l'ensemble de données de en deux nouveaux nœuds, et . N N ~ NvjeθjeNN^N~
    • Créez des modèles de régression linéaire sur et , et calculez leur (appelez-les et ). ~ N R2 r ~ rN^N~R2r^r~
    • À partir de tous ces tuples , sélectionnez celui avec le maximal . Cela donne une nouvelle décision dans l'arborescence et a deux nouveaux sous-noeuds et .n(vi,θi,r^,r~)min(r^,r~)NN^N~
  5. Nous avons fini le traitement . Sélectionnez un nouveau nœud qui n'a pas encore été traité et revenez à l'étape 2. Si tous les nœuds ont été traités, l'algorithme se termine.NN

Cela créera récursivement un arbre de décision qui divise les données en parties plus petites et calcule un modèle linéaire sur chacune de ces parties.

L'étape 3 est la condition de sortie, qui empêche l'algorithme de sur-adapter. Bien sûr, il existe d'autres conditions de sortie possibles:

  • Quittez si la profondeur de dans l'arborescence est supérieure àNθdepth
  • Quittez si l'ensemble de données dans est inférieur àNθdataset

Existe-t-il un tel algorithme dans un package R?

cheesus dit d'arrêter de tirer des mods
la source
4
Jetez un oeil à la forfait fête et voyez si cela convient à vos besoins. Il peut gérer un certain nombre de types de modèles dans les nœuds d'arbres IIRC.
Rétablir Monica - G. Simpson

Réponses:

11

Bien qu'ils fonctionnent différemment de votre algorithme, je pense que vous trouverez mob () et FTtree intéressants. Pour la foule de Zeileis, voir http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Pour FTtree, les arbres fonctionnels de Gama, une implémentation est disponible dans Weka et donc RWeka. Voir http://cran.r-project.org/web/packages/RWeka/index.html pour plus de détails.

Momo
la source
1
+1 pour mob, qui permet de brancher presque n'importe quel modèle dans le cadre de partitionnement récursif
etov
8

RWeka package propose de nombreuses méthodes de régression. Parmi eux, vous pouvez trouver M5P (M5 Prime), qui est exactement un modèle de régression basé sur un arbre avec des équations linéaires dans les feuilles. Pour plus de détails sur la méthode M5, voir la publication .

Un exemple de code serait:

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)

Si vous souhaitez utiliser un ensemble d'ensachage avec la méthode M5, essayez quelque chose comme:

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

Pour voir les options de contrôle du modèle M5P, essayez:

WOW(M5P)

Si vous souhaitez optimiser la méthode M5, il existe une solution pour cela dans le caretpackage:

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

Je pense que cela répond à la version courte de votre question:

le package Cubist adapte les modèles basés sur des règles (similaires aux arbres) aux modèles de régression linéaire dans les feuilles terminales, les corrections basées sur les instances et le boost.

Depuis les vues de tâches Cran: Machine Learning

Jack Ryan
la source
Savez-vous s'il s'agit (similaire à) du M5 de Quinlan?
Momo
Je sais que cela est similaire au M5 de Quinlan dans la mesure où Cubist de Quinlan est similaire au M5 de Quinlan .
Jack Ryan