2012-05-09 27 views
6

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 están por debajo de lo predicho y los valores bajos están por encima de lo predicho. Al principio yo sospechaba que era una consecuencia de mis datos, pero el siguiente ejemplo simple muestra que esto es inherente al algoritmo aleatorio forestal:RandomForest en R colas de regresión lineal mtry

n = 50; 
x1 = seq(1,n) 
x2 = matrix(1, n, 1) 
predictors = data.frame(x1=x1, x2=x2) 
response = x2 + x1 
rf = randomForest(x=predictors, y=response) 
plot(x1, response) 
lines(x1, predict(rf, predictors), col="red") 

No hay métodos de árboles duda tienen sus limitaciones cuando se trata de linealidad, pero incluso el más simple árbol de regresión, por ejemplo tree() en R, no muestra este sesgo. No puedo imaginar que la comunidad no lo sepa, pero no ha encontrado ninguna mención, ¿cómo se corrige en general? Gracias por cualquier comentario

EDIT: El ejemplo de esta pregunta es defectuoso, por favor ver "randomForest para la regresión en I - sesgo dependiente de distribución de respuesta" a cambio de la pila para obtener un tratamiento mejorado https://stats.stackexchange.com/questions/28732/randomforest-for-regression-in-r-response-distribution-dependent-bias

Respuesta

5

lo que has descubierto ISN No es un sesgo inherente en los bosques aleatorios, sino simplemente una falla para ajustar adecuadamente los parámetros de ajuste en el modelo.

Uso de sus datos de ejemplo:

rf = randomForest(x=predictors, y=response,mtry = 2,nodesize = 1) 
plot(x1, response) 
lines(x1, predict(rf, predictors), col="red") 

enter image description here

Para los datos reales de la mejora será poco probable que sea tan marcadas, por supuesto, y yo apostaría que obtendrá más kilometraje de nodesize que mtry (mtry hizo la mayor parte del trabajo aquí).

La razón por la cual los árboles normales no exhiben este "sesgo" es porque, de forma predeterminada, buscan todas las variables para la mejor división.

+0

gracias Joran. Algo no se sentía bien y estoy contento de ver que hay una solución. Desafortunadamente para mi trabajo, ya he ajustado los parámetros con poco efecto (excepto, por supuesto, ntrees) y por eso los ignoré en su mayoría por este ejemplo "simple". Supongo que el sesgo realmente existe en mi caso, gracias de nuevo – rumbleB

+0

. ... aunque si está limitado a tus datos, no es realmente un sesgo en los RF, ¿o sí? ;) ¡Solo tienes algunos datos difíciles de modelar! – joran

+0

sí, el sesgo en RF es evitable - He cambiado el título de esta pregunta para que pueda ser más útil para las personas en el futuro – rumbleB

Cuestiones relacionadas