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:
- Comience con el conjunto de datos completo, que es el nodo raíz del árbol. Elija este nodo y llámelo $N$ .
- Crear un modelo de Regresión Lineal sobre los datos en $N$ .
- 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.
- 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}$ .
- 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?