Estoy entrenando un modelo de regresión Random Forests en R utilizando el randomForest
paquete. Mi número total de variables, $M$ es 30, y el tamaño de mi muestra de entrenamiento $N$ tiene más de 10.000 observaciones. El modelo, en general, ofrece resultados razonables (en comparación con los hallazgos en la literatura) en términos de importancia de las variables y la interacción no lineal entre las variables, con un rendimiento general decente (~80% de var explicada - no creo que haya un valor umbral que determine bueno/no bueno, por favor, corrígeme si me equivoco).
Ahora estoy afinando el modelo para conseguir el mayor rendimiento posible actuando sobre dos parámetros: número de árboles y número de variables por árbol. Citando a Breiman & Cutler's sitio web : "...se demostró que la tasa de error del bosque depende de dos cosas:
- La correlación entre dos árboles cualesquiera del bosque.
- La fuerza de cada uno de los árboles del bosque.
Reducir $m$ [Número de variables por árbol, mtry
en R
] reduce tanto la correlación como la fuerza. Si se aumenta, se incrementan ambas. En algún punto intermedio se encuentra un rango "óptimo" de $m$ - normalmente bastante amplia. Utilizando la tasa de error oob se puede encontrar rápidamente un valor de m en el rango".
El modelo es poco sensible a los cambios en el número de árboles, estabilizándose a partir de cierto umbral (como suele ocurrir con la RF - véase también "¿Cuántos árboles en un bosque aleatorio?" - Oshiro et al. 2012).
En cuanto al número de variables por árbol, randomForest
para la regresión utiliza un valor por defecto $m=\frac{M}{3}$ (lo cual es coherente con la literatura - véase, por ejemplo, "The Elements of Statistical Learning" - Friedman et al 2001, cap. 15). He utilizado el tuneRF
para calcular la sensibilidad del modelo a los cambios en m pero este operador es bastante inestable (si se ejecuta varias veces, los resultados son siempre diferentes, incluso si las semillas se establecen set.seed(1234567)
).
Esto se discutió también en otro post sobre StackOverflow pero mi pregunta es más bien desde el punto de vista teórico. He sintonizado manualmente el mtry
y encontré el que minimiza mi Mean of squared residuals
y maximiza mi % Var explained
pero está bastante lejos de la norma $m=\frac{M}{3}$ . Además, los resultados de mi modelo son sensibles a las variaciones de mtry
(es decir, incluso fijando las semillas a un valor específico para lograr ajustes reproducibles del modelo, para cada mtry
importancia de la variable de valor cambia bastante radicalmente). El aumento de la mtry
aumenta la correlación interna de cada árbol específico: ¿cómo es posible que duplicar el valor por defecto mtry
¿tengo una mejora general? ¿Podría estar esto sesgado por la multicolinealidad dentro de los árboles? En general, me cuesta encontrar el "punto intermedio" al que se referían Braiman y Cutler.
Cualquier idea de practicantes más experimentados (es mi primera RF) sería muy apreciada.
¿Podría alguien explicarme también por qué la importancia relativa de las variables puede ser tan radicalmente diferente cambiando el mtry
¿incluso sólo por 1 unidad? Siendo el modelo un conjunto de procesos aleatorios, ¿no deberían converger los resultados? Gracias.