21 votos

Algoritmo de árbol de regresión con modelos de regresión lineal en cada hoja

Versión corta: Estoy buscando un paquete de R que pueda construir árboles de decisión en los que cada hoja sea un modelo de regresión lineal completo. Según tengo entendido, la biblioteca rpart crea árboles de decisión en los que la variable dependiente es constante en cada hoja. ¿Existe otra biblioteca (o un rpart que no conozco) que puedan construir esos árboles?

Versión larga: Busco un algoritmo que construya un árbol de decisión basado en un conjunto de datos de entrenamiento. Cada decisión del árbol divide el conjunto de datos de entrenamiento en dos partes, según una condición de una de las variables independientes. La raíz del árbol contiene el conjunto completo de datos, y cada elemento del conjunto de datos está contenido exactamente en un nodo hoja.

El algoritmo es el siguiente:

  1. Comience con el conjunto de datos completo, que es el nodo raíz del árbol. Elija este nodo y llámelo $N$ .
  2. Crear un modelo de Regresión Lineal sobre los datos en $N$ .
  3. Si $R^2$ de $N$ es superior a algún umbral $\theta_{R^2}$ entonces hemos terminado con $N$ así que marca $N$ como hoja y salta al paso 5.
  4. Pruebe $n$ decisiones aleatorias, y elegir la que produzca el mejor $R^2$ en los subnodos:
    • Elija una variable independiente aleatoria $v_i$ así como un umbral aleatorio $\theta_i$ .
    • La decisión $v_i \leq \theta_i$ divide el conjunto de datos de $N$ en dos nuevos nodos, $\hat{N}$ y $\tilde{N}$ .
    • Crear modelos de regresión lineal en ambos $\hat{N}$ y $\tilde{N}$ y calcular su $R^2$ (llámalos $\hat{r}$ y $\tilde{r}$ ).
    • De todos esos $n$ tuplas $(v_i, \theta_i, \hat{r}, \tilde{r})$ seleccione la que tenga el máximo $min(\hat{r}, \tilde{r})$ . Esto produce una nueva decisión en el árbol, y $N$ tiene dos nuevos subnodos $\hat{N}$ y $\tilde{N}$ .
  5. Hemos terminado de procesar $N$ . Elige un nuevo nodo $N$ que aún no se ha procesado y vuelva al paso 2. Si se han procesado todos los nodos, el algoritmo finaliza.

Esto construirá recursivamente un árbol de decisión que divide los datos en partes más pequeñas, y calcula un Modelo Lineal en cada una de esas partes.

El paso 3 es la condición de salida, que evita que el algoritmo se ajuste en exceso. Por supuesto, hay otras condiciones de salida posibles:

  • Salir si $N$ en el árbol está por encima de $\theta_{depth}$
  • Salir si el conjunto de datos en $N$ es menor que $\theta_{data set}$

¿Existe un algoritmo de este tipo en un paquete R?

12voto

Momo Puntos 5125

Aunque funcionan de forma diferente a tu algoritmo, creo que encontrarás interesantes mob() y FTtree. Para el mob de Zeileis véase http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Para FTtree,los árboles funcionales de Gama se dispone de una implementación en Weka y, por tanto, en RWeka. Véase http://cran.r-project.org/web/packages/RWeka/index.html para más detalles.

9voto

M. Cunille Puntos 113

RWeka ofrece numerosos métodos de regresión. Entre ellos, se encuentra M5P (M5 Prime), que es exactamente un modelo de regresión basado en árboles con ecuaciones lineales en las hojas. Para más detalles sobre el método M5, véase publicación .

Un código de ejemplo sería:

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 desea utilizar el conjunto de embolsado con el método M5, pruebe algo así:

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

Para ver las opciones de control del modelo M5P, prueba:

WOW(M5P)

Si desea optimizar el método M5, existe una solución para ello en caret paquete:

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

8voto

Inna Li Puntos 21

Creo que esto responde a la versión corta de su pregunta:

En Cubista paquete se ajusta a m modelos de regresión lineal en las hojas terminales, modelos basados en instancias y boosting.

En Vistas de las tareas de Cran: Aprendizaje automático

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X