Estoy usando el paquete randomForest en R (R versión 2.13.1, randomForest versión 4.6-2) para la regresión y noté un sesgo significativo en mis resultados: el error de predicción depende del valor de la variable de respuesta. Los valores altos se predicen por debajo y los valores bajos se predicen en exceso. Al principio sospeché que esto era una consecuencia de mis datos, pero el siguiente ejemplo simple sugiere que esto es inherente al algoritmo de bosque aleatorio:
n = 1000;
x1 = rnorm(n, mean = 0, sd = 1)
response = x1
predictors = data.frame(x1=x1)
rf = randomForest(x=predictors, y=response)
error = response-predict(rf, predictors)
plot(x1, error)
Sospecho que el sesgo depende de la distribución de la respuesta, por ejemplo, si x1
está distribuido uniformemente, no hay sesgo; si x1
se distribuye exponencialmente, el sesgo es unilateral. Esencialmente, los valores de la respuesta en las colas de una distribución normal son valores atípicos. No sorprende que un modelo tenga dificultades para predecir valores atípicos. En el caso de randomForest, es menos probable que un valor de respuesta de magnitud extrema desde la cola de una distribución termine en una hoja terminal y su efecto se eliminará en el promedio del conjunto.
Tenga en cuenta que intenté capturar este efecto en un ejemplo anterior, "RandomForest en R regresión lineal colas mtry". Este fue un mal ejemplo. Si el sesgo en el ejemplo anterior es realmente inherente al algoritmo, se deduce que podría formularse una corrección de sesgo dada la distribución de respuesta que uno está tratando de predecir, lo que resulta en predicciones más precisas.
¿Los métodos basados en árboles, como el bosque aleatorio, están sujetos al sesgo de distribución de respuesta? Si es así, ¿es esto previamente conocido por la comunidad estadística y cómo se corrige generalmente (por ejemplo, un segundo modelo que utiliza los residuos del modelo sesgado como entrada)?
La corrección de un sesgo dependiente de la respuesta es difícil porque, por naturaleza, la respuesta no se conoce. Desafortunadamente, la respuesta estimada / pronosticada a menudo no comparte la misma relación con el sesgo.
fuente
Respuestas:
Es perfectamente como sospecha: el hecho de que los nodos de hoja contengan medios sobre algún conjunto de objetos hace que cualquier modelo de árbol de regresión ajuste la distribución de respuesta y haga imposible cualquier extrapolación. El conjunto, por supuesto, no ayuda con eso y, de hecho, empeora la situación.
La solución ingenua (y peligrosa debido al sobreajuste) es envolver el modelo en algún tipo de regresión clásica que redimensionaría la respuesta a su distribución deseada.
La mejor solución es uno de los modelos de árbol modelo en hoja, como por ejemplo MOB en el paquete de fiesta. La idea aquí es que la partición del espacio de características debe terminar cuando el problema se simplifica no a un valor simple (como en un árbol normal) sino a una relación simple (digamos lineal) entre la respuesta y algunos predictores. Dicha relación se puede resolver ahora ajustando un modelo simple que no perturbe la distribución o recorte valores extremos y pueda extrapolar.
fuente
Tuve exactamente el mismo problema con el acceso a RF condicional a través del paquete sonajero. Le envié un correo electrónico a Graham Williams (autor de sonajero) al respecto, quien remitió amablemente mi consulta a los autores más importantes, quienes respondieron y sugirieron jugar con dos parámetros que en realidad no se mencionan en ninguna parte de la documentación del CRF, pero que, sin embargo, parecían abordar El problema, a saber, minplit = 2 y minbucket = 1.
fuente
minsplit
, Supongo que quieres decirDebe estimar el valor óptimo de mtry y sampsize minimizando el "error de validación cruzada" fuera de la muestra en una cuadrícula de diferentes parámetros de mtry, sampsize, para cualquier variable de respuesta correspondiente para un conjunto fijo de características y luego sacar conclusiones. en cuanto a los resultados. Puede crear una combinación de los parámetros de la cuadrícula utilizando expand.grid.
fuente