¿Se puede usar un bosque aleatorio para la selección de características en regresión lineal múltiple?


50

Dado que RF puede manejar la no linealidad pero no puede proporcionar coeficientes, ¿sería prudente utilizar un bosque aleatorio para reunir las características más importantes y luego conectar esas características en un modelo de regresión lineal múltiple para obtener sus coeficientes?


@ user777 quieres decir, ¿estás leyendo "explicar" como "obtener" o algo así?
shadowtalker

1
Dado que parece haber una preocupación sustancial sobre lo que esta pregunta podría estar tratando de hacer, ¿podría editarla para aclarar la confusión?
whuber

Respuestas:


71

Dado que RF puede manejar la no linealidad pero no puede proporcionar coeficientes, ¿sería prudente usar Random Forest para reunir las características más importantes y luego conectar esas características en un modelo de regresión lineal múltiple para explicar sus signos?

Interpreto que la pregunta de una oración de OP significa que OP desea comprender la conveniencia de la siguiente línea de análisis:

  1. Ajustar un bosque aleatorio a algunos datos
  2. Mediante alguna métrica de importancia variable de (1), seleccione un subconjunto de características de alta calidad.
  3. Usando las variables de (2), calcule un modelo de regresión lineal. Esto le dará acceso a OP a los coeficientes que OP observa que RF no puede proporcionar.
  4. A partir del modelo lineal en (3), interpreta cualitativamente los signos de las estimaciones de coeficientes.

No creo que esta tubería logre lo que le gustaría. Las variables que son importantes en el bosque aleatorio no necesariamente tienen ningún tipo de relación linealmente aditiva con el resultado. Este comentario no debería sorprender: es lo que hace que el bosque aleatorio sea tan efectivo para descubrir relaciones no lineales.

Aquí hay un ejemplo. Creé un problema de clasificación con 10 características de ruido, dos características de "señal" y un límite de decisión circular.

set.seed(1)
N  <- 500
x1 <- rnorm(N, sd=1.5)
x2 <- rnorm(N, sd=1.5)

y  <- apply(cbind(x1, x2), 1, function(x) (x%*%x)<1)

plot(x1, x2, col=ifelse(y, "red", "blue"))
lines(cos(seq(0, 2*pi, len=1000)), sin(seq(0, 2*pi, len=1000))) 

ingrese la descripción de la imagen aquí

Y cuando aplicamos el modelo RF, no nos sorprende descubrir que estas características son fácilmente identificadas como importantes por el modelo. (Nota: este modelo no está ajustado para nada ).

x_junk   <- matrix(rnorm(N*10, sd=1.5), ncol=10)
x        <- cbind(x1, x2, x_junk)
names(x) <- paste("V", 1:ncol(x), sep="")

rf <- randomForest(as.factor(y)~., data=x, mtry=4)
importance(rf)

    MeanDecreaseGini
x1         49.762104
x2         54.980725
V3          5.715863
V4          5.010281
V5          4.193836
V6          7.147988
V7          5.897283
V8          5.338241
V9          5.338689
V10         5.198862
V11         4.731412
V12         5.221611

Pero cuando seleccionamos solo estas dos características útiles, el modelo lineal resultante es horrible.

summary(badmodel <- glm(y~., data=data.frame(x1,x2), family="binomial"))

La parte importante del resumen es la comparación de la desviación residual y la desviación nula. Podemos ver que el modelo básicamente no hace nada para "mover" la desviación. Además, los coeficientes estimados son esencialmente cero.

Call:
glm(formula = as.factor(y) ~ ., family = "binomial", data = data.frame(x1, 
    x2))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.6914  -0.6710  -0.6600  -0.6481   1.8079  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.398378   0.112271 -12.455   <2e-16 ***
x1          -0.020090   0.076518  -0.263    0.793    
x2          -0.004902   0.071711  -0.068    0.946    
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 497.62  on 499  degrees of freedom
Residual deviance: 497.54  on 497  degrees of freedom
AIC: 503.54

Number of Fisher Scoring iterations: 4

¿Qué explica la gran diferencia entre los dos modelos? Bueno, claramente el límite de decisión que estamos tratando de aprender no es una función lineal de las dos características de "señal". Obviamente, si conocía la forma funcional del límite de decisión antes de estimar la regresión, podría aplicar alguna transformación para codificar los datos de una manera que la regresión pudiera descubrir ... (Pero nunca he conocido la forma del límite por delante de tiempo en cualquier problema del mundo real.) Dado que solo estamos trabajando con dos características de señal en este caso, un conjunto de datos sintéticos sin ruido en las etiquetas de clase, ese límite entre clases es muy obvio en nuestra gráfica. Pero es menos obvio cuando se trabaja con datos reales en un número realista de dimensiones.

Además, en general, el bosque aleatorio puede ajustar diferentes modelos a diferentes subconjuntos de datos. En un ejemplo más complicado, no será obvio lo que está sucediendo en un solo diagrama, y ​​construir un modelo lineal de poder predictivo similar será aún más difícil.

Debido a que solo nos interesan dos dimensiones, podemos hacer una superficie de predicción. Como se esperaba, el modelo aleatorio aprende que el vecindario alrededor del origen es importante.

M                 <- 100
x_new             <- seq(-4,4, len=M)
x_new_grid        <- expand.grid(x_new, x_new)
names(x_new_grid) <- c("x1", "x2")
x_pred            <- data.frame(x_new_grid, matrix(nrow(x_new_grid)*10, ncol=10))
names(x_pred)     <- names(x)

y_hat             <- predict(object=rf, newdata=x_pred, "vote")[,2]

library(fields)
y_hat_mat         <- as.matrix(unstack(data.frame(y_hat, x_new_grid), y_hat~x1))

image.plot(z=y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="RF Prediction surface", xlab="x1", ylab="x2")

ingrese la descripción de la imagen aquí

Como implica el resultado de nuestro modelo abismal, la superficie de predicción para el modelo de regresión logística de variable reducida es básicamente plana.

ingrese la descripción de la imagen aquí

bad_y_hat     <- predict(object=badmodel, newdata=x_new_grid, type="response")
bad_y_hat_mat <- as.matrix(unstack(data.frame(bad_y_hat, x_new_grid), bad_y_hat~x1))
image.plot(z=bad_y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="Logistic regression prediction surface", xlab="x1", ylab="x2")

HongOoi señala que la membresía de la clase no es una función lineal de las características, sino que se trata de una función lineal que se está transformando. Debido a que el límite de decisión es si ajustamos estas características al cuadrado, podremos construir un modelo lineal más útil. Esto es deliberado. Si bien el modelo de RF puede encontrar señal en esas dos características sin transformación, el analista debe ser más específico para obtener resultados igualmente útiles en el GLM. Quizás eso sea suficiente para OP: encontrar un conjunto útil de transformaciones para 2 características es más fácil que 12. Pero mi punto es que incluso si una transformación producirá un modelo lineal útil, la importancia de la característica de RF no sugerirá la transformación por sí sola.1=x12+x22,


1
Creo que, si bien es agradable, se pierde todo el punto. Pruebe un modelo un poco más complejo, uno que yo llamaría lo suficientemente no trivial como para ser informativo. Considere esto ( people.kyb.tuebingen.mpg.de/spider/demo_dec_vs_svm_2.jpg ) con un poco de ruido de sal y pimienta. Ahora ajústelo con RF. Ahora use RF como "filtro" para eliminar los fenómenos "espurios" y entrene su modelo alternativo en las salidas de RF, no en sus coeficientes. El OP especifica "características", no coeficientes. El OP no dice "bosque aleatorio reducido" sino "bosque aleatorio". La implicación es para la salida del bosque completo.
EngrStudent - Restablece a Monica el

3
Curiosamente, su ejemplo es lineal en los predictores, si los transforma primero. Su ecuación es , por lo que tomar el cuadrado de y convierte en un modelo lineal. De hecho, es uno de los ejemplos que Friedman, Hastie y Tibshirani usaron para mostrar que el impulso se ajusta a un modelo de baja dimensión (aditivo, en el caso de los tocones). x 1 x 2y=x12+x22x1x2
Hong Ooi

3
@ user777, he usado bosques aleatorios para reducir la dimensionalidad contra problemas complejos durante años. Mi antiguo empleador, Intel Semiconductor, tiene procesos de producción que tienen 20k columnas y 20k pasos, y para menos de 10 defectos usa esto como parte de un conjunto de herramientas analíticas para pasar de 20k columnas a 30 columnas. Enseñan cursos internamente y dan conferencias sobre el contenido externamente. ( web.stanford.edu/class/ee392m/Lecture3Tuv.pdf ) El "bosque" es una herramienta increíblemente poderosa y tomaste el único camino malo. Hay dos muy buenos que te perdiste.
EngrStudent - Restablece a Monica el

2
@EngrStudent "Intel usa RF para pasar de muchas columnas a menos". Eso es exactamente lo que hace mi demostración. También responde a la pregunta particular de OP sobre si esas características se pueden usar de manera rentable en un modelo lineal, y mi respuesta es "en general no serán directamente útiles, pero en este ejemplo, puede encontrarlas útiles bajo una transformación".
Reinstale a Monica el

12

La respuesta de @Sycorax es fantástica. Además de los aspectos completamente descritos del problema relacionados con el ajuste del modelo, hay otra razón para no seguir un proceso de varios pasos, como la ejecución de bosques aleatorios, lazo o red elástica para "aprender" qué características alimentar a la regresión tradicional. Regresión ordinaria no sabría acerca de la penalización que fue correctamente durante el desarrollo de los bosques al azar o los otros métodos, y encajaría efectos no sancionado que están gravemente sesgados a aparecer demasiado fuerte en la predicción de . Esto no sería diferente a ejecutar la selección de variables paso a paso e informar el modelo final sin tener en cuenta cómo llegó.Y


2
¡Gracias, Dr. Harrell! En mi opinión, si OP usara esta tubería de análisis, OP haría la selección descendente de RF y el ajuste del modelo lineal dentro de su esquema de (cruz) validación. ¿Es eso suficiente para mitigar el sesgo que describe, o hay otro problema al acecho que me falta?
Reinstale a Mónica el

2
No sé cómo hacer un modelo lineal apropiado "dentro" del esquema. No sé cómo mitigar el sesgo de sobreajuste / estimación que resultaría. Quizás un mejor enfoque es la aproximación del modelo, a veces llamada preacondicionamiento. Aquí utiliza modelos tradicionales o árboles individuales (que requerirían una tonelada de nodos) para aproximar la salida de un cuadro negro, heredando la contracción del cuadro negro.
Frank Harrell

8

Un bosque aleatorio ejecutado correctamente aplicado a un problema que es más "apropiado para el bosque aleatorio" puede funcionar como un filtro para eliminar el ruido y generar resultados que son más útiles como entradas para otras herramientas de análisis.

Descargos de responsabilidad:

  • ¿Es una "bala de plata"? De ninguna manera. El kilometraje variará. Funciona donde funciona, y no en otro lugar.
  • ¿Hay formas en que puede usarlo groseramente de manera incorrecta y obtener respuestas que están en el dominio de basura a vudú? puedes apostar. Como toda herramienta analítica, tiene límites.
  • Si lames una rana, ¿tu aliento huele a rana? probable. No tengo experiencia allí.

Tengo que dar un "grito" a mis "píos" que hicieron "Spider". ( enlace ) Su problema de ejemplo informó mi enfoque. ( enlace ) También me encantan los estimadores de Theil-Sen, y desearía poder darle accesorios a Theil y Sen.

Mi respuesta no se trata de cómo hacerlo mal, sino de cómo podría funcionar si lo hicieras bien. Si bien uso el ruido "trivial", quiero que piense en el ruido "no trivial" o "estructurado".

Una de las fortalezas de un bosque aleatorio es qué tan bien se aplica a los problemas de alta dimensión. No puedo mostrar 20k columnas (también conocido como un espacio dimensional de 20k) de una manera visual limpia. No es una tarea fácil. Sin embargo, si tiene un problema de 20k dimensiones, un bosque aleatorio podría ser una buena herramienta cuando la mayoría de los demás caen de bruces sobre sus "caras".

Este es un ejemplo de eliminación de ruido de la señal utilizando un bosque aleatorio.

#housekeeping
rm(list=ls())

#library
library(randomForest)

#for reproducibility
set.seed(08012015)

#basic
n <- 1:2000
r <- 0.05*n +1 
th <- n*(4*pi)/max(n)

#polar to cartesian
x1=r*cos(th) 
y1=r*sin(th)

#add noise
x2 <- x1+0.1*r*runif(min = -1,max = 1,n=length(n))
y2 <- y1+0.1*r*runif(min = -1,max = 1,n=length(n))

#append salt and pepper
x3 <- runif(min = min(x2),max = max(x2),n=length(n)/2)
y3 <- runif(min = min(y2),max = max(y2),n=length(n)/2)

x4 <- c(x2,x3)
y4 <- c(y2,y3)
z4 <- as.vector(matrix(1,nrow=length(x4)))

#plot class "A" derivation
plot(x1,y1,pch=18,type="l",col="Red", lwd=2)
points(x2,y2)
points(x3,y3,pch=18,col="Blue")
legend(x = 65,y=65,legend = c("true","sampled","false"),
col = c("Red","Black","Blue"),lty = c(1,-1,-1),pch=c(-1,1,18))

Permítanme describir lo que está pasando aquí. La siguiente imagen muestra datos de entrenamiento para la clase "1". La clase "2" es aleatoria uniforme sobre el mismo dominio y rango. Puede ver que la "información" de "1" es principalmente una espiral, pero se ha corrompido con material de "2". Tener el 33% de sus datos corruptos puede ser un problema para muchas herramientas de adaptación. Theil-Sen comienza a degradarse en aproximadamente un 29%. ( enlace )

ingrese la descripción de la imagen aquí

Ahora separamos la información, solo teniendo una idea de qué es el ruido.

#Create "B" class of uniform noise
x5 <- runif(min = min(x4),max = max(x4),n=length(x4))
y5 <- runif(min = min(y4),max = max(y4),n=length(x4))
z5 <- 2*z4 

#assemble data into frame 
data <- data.frame(c(x4,x5),c(y4,y5),as.factor(c(z4,z5)))
names(data) <- c("x","y","z")

#train random forest - I like h2o, but this is textbook Breimann
fit.rf <- randomForest(z~.,data=data,
                       ntree = 1000, replace=TRUE, nodesize = 20)
data2 <- predict(fit.rf,newdata=data[data$z==1,c(1,2)],type="response")

#separate class "1" from training data
idx1a <- which(data[,3]==1)

#separate class "1" from the predicted data
idx1b <- which(data2==1)

#show the difference in classes before and after RF based filter
plot(data[idx1a,1],data[idx1a,2])
points(data[idx1b,1],data[idx1b,2],col="Red")

Aquí está el resultado apropiado:

ingrese la descripción de la imagen aquí

Realmente me gusta esto porque puede mostrar tanto las fortalezas como las debilidades de un método decente a un problema difícil al mismo tiempo. Si mira cerca del centro, puede ver cómo hay menos filtrado. La escala geométrica de información es pequeña y al bosque aleatorio le falta eso. Dice algo sobre el número de nodos, el número de árboles y la densidad de la muestra para la clase 2. También hay un "espacio" cercano (-50, -50) y "chorros" en varios lugares. En general, sin embargo, el filtrado es decente.

Comparar vs SVM

Aquí está el código para permitir una comparación con SVM:

#now to fit to svm
fit.svm <-  svm(z~., data=data, kernel="radial",gamma=10,type = "C")

x5 <- seq(from=min(x2),to=max(x2),by=1)
y5 <- seq(from=min(y2),to=max(y2),by=1)

count <- 1
x6 <- numeric()
y6 <- numeric()
for (i in 1:length(x5)){

     for (j in 1:length(y5)){
          x6[count]<-x5[i]
          y6[count]<-y5[j]
          count <- count+1
     }
}

data4 <- data.frame(x6,y6)
names(data4) <- c("x","y")

data4$z <- predict(fit.svm,newdata=data4)

idx4 <- which(data4$z==1,arr.ind=TRUE)


plot(data4[idx4,1],data4[idx4,2],col="Gray",pch=20)
points(data[idx1b,1],data[idx1b,2],col="Blue",pch=20)
lines(x1,y1,pch=18,col="Green", lwd=2)
grid()
legend(x = 65,y=65,
       legend = c("true","from RF","From SVM"),
       col = c("Green","Blue","Gray"),lty = c(1,-1,-1),pch=c(-1,20,15),pt.cex=c(1,1,2.25))

Resulta en la siguiente imagen.

ingrese la descripción de la imagen aquí

Este es un SVM decente. El gris es el dominio asociado con la clase "1" por el SVM. Los puntos azules son las muestras asociadas con la clase "1" por el RF. El filtro basado en RF funciona de manera comparable a SVM sin una base impuesta explícitamente. Se puede ver que los "datos ajustados" cerca del centro de la espiral están mucho más "firmemente" resueltos por la RF. También hay "islas" hacia la "cola" donde el RF encuentra una asociación que el SVM no.

Estoy entretenido Sin tener antecedentes, hice una de las primeras cosas que también hizo un muy buen colaborador en el campo. El autor original utilizó "distribución de referencia" ( enlace , enlace ).

EDITAR:

Aplique FOREST aleatorio a este modelo: si
bien el usuario777 piensa que un CART es el elemento de un bosque aleatorio, la premisa del bosque aleatorio es la "agregación en conjunto de alumnos débiles". El CART es un aprendiz débil conocido pero no es nada remotamente cerca de un "conjunto". El "conjunto" aunque en un bosque aleatorio está destinado "en el límite de una gran cantidad de muestras". La respuesta del usuario777, en el diagrama de dispersión, utiliza al menos 500 muestras y eso dice algo sobre la legibilidad humana y los tamaños de muestra en este caso. El sistema visual humano (en sí mismo un conjunto de estudiantes) es un sorprendente sensor y procesador de datos y considera que ese valor es suficiente para facilitar el procesamiento.

Si tomamos incluso la configuración predeterminada en una herramienta de bosque aleatorio, podemos observar que el comportamiento del error de clasificación aumenta para los primeros árboles y no alcanza el nivel de un árbol hasta que haya alrededor de 10 árboles. Inicialmente el error crece, la reducción del error se vuelve estable alrededor de 60 árboles. Por estable quiero decir

x        <- cbind(x1, x2)
plot(rf,type="b",ylim=c(0,0.06))
grid()

Cuyos rendimientos:
ingrese la descripción de la imagen aquí

Si en lugar de mirar al "alumno débil mínimo" miramos el "conjunto mínimo débil" sugerido por una heurística muy breve para la configuración predeterminada de la herramienta, los resultados son algo diferentes.

Tenga en cuenta que usé "líneas" para dibujar el círculo que indica el borde sobre la aproximación. Puede ver que es imperfecto, pero mucho mejor que la calidad de un solo alumno.

ingrese la descripción de la imagen aquí

El muestreo original tiene 88 muestras "interiores". Si se aumentan los tamaños de muestra (permitiendo que se aplique el conjunto), la calidad de la aproximación también mejora. El mismo número de alumnos con 20,000 muestras hace un ajuste increíblemente mejor.

ingrese la descripción de la imagen aquí

La información de entrada de mucha mayor calidad también permite la evaluación del número apropiado de árboles. La inspección de la convergencia sugiere que 20 árboles es el número mínimo suficiente en este caso particular, para representar bien los datos.

ingrese la descripción de la imagen aquí


¿Cómo prueba / refuta esto que RF puede usarse para seleccionar características de alta calidad para un modelo lineal? No discute la selección de características o modelos lineales en su respuesta.
Reinstale a Monica el

La premisa del autor de la pregunta es utilizar RF como un prefiltro y luego observar los parámetros del modelo lineal. No estaba mirando los parámetros del bosque. Cuando lo leí, debido a su falta de profundidad o especificidad, el "modelo lineal múltiple" parecía secundario. Para mí, esto parecía un "puede un RF preprocesar / limpiar datos antes de pegarlo en la herramienta analítica x".
EngrStudent - Restablece a Monica el

Veo artefactos horizontales y verticales. Estoy tentado de hacer un "dato conjugado" en coordenadas giradas 45 grados y agregar las columnas a la RF. Apuesto a que una transformación como esa reduciría la cantidad de artefactos, aunque no estoy seguro de cómo cambiaría los parámetros de entrada.
EngrStudent - Restablece a Monica el

2
Por otro lado, el "bosque de rotación" es una variación reciente de esta idea, donde se utiliza PCA para determinar la nueva base. ncbi.nlm.nih.gov/pubmed/16986543
Restablece a Monica el

1
Aseado: Liu, Fei Tony, Ting, Kai Ming y Zhou, Zhi-Hua. "Bosque de aislamiento". Minería de datos, 2008. ICDM'08. Octava Conferencia Internacional IEEE sobre.
EngrStudent - Restablece a Monica el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.