2 votos

¿cuándo es posible que OLS se ajuste mejor que random forest y LASSO?

He ejecutado varios modelos diferentes en un miniconjunto de datos de unas 100 observaciones con 90 características. Cuando probé OLS con selección hacia atrás el modelo es significativo con muchas características significativas (82 características seleccionadas). Sin embargo, cuando intenté utilizar los mismos datos en LASSO, todos los parámetros se redujeron a 0 excepto el intercepto y el MSE es mayor que el de OLS. Lo mismo ocurrió con random forest, obtuve un % de varianza explicada negativo (véase más abajo) y un MSE mucho mayor que OLS.

¿Es éste un caso típico de sobreajuste? Si es así, ¿por qué la selección hacia atrás de OLS no lo ha resuelto?

OLS:

step <- stepAIC(eye_lm, direction="both")
step$anova

    Min       1Q   Median       3Q      Max 
    -0.63573 -0.14247 -0.01773  0.08343  0.99736 

  Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
  (Intercept)                   -6.754e+00  3.560e+00  -1.897 0.090287 .  
 chroma_C_0                    -1.903e+00  3.617e-01  -5.262 0.000519 ***
 chroma_C_1                    -1.322e+00  3.089e-01  -4.279 0.002052 ** 
 chroma_C_2                     2.824e-01  1.055e-01   2.676 0.025363 *  
 chroma_C_3                     1.127e+00  3.398e-01   3.317 0.008990 ** 
 chroma_C_4                     6.200e-01  2.002e-01   3.097 0.012781 *  
  ....
 Topic0                         1.938e+00  9.231e-01   2.100 0.065160 .  
 Topic1                         7.327e+00  1.206e+00   6.075 0.000185 ***

Residual standard error: 0.7481 on 9 degrees of freedom
Multiple R-squared:  0.9821,    Adjusted R-squared:  0.8209 
F-statistic: 6.093 on 81 and 9 DF,  p-value: 0.003054

LASSO: Y y X son las variables dependiente e independiente que utilicé en OLS y eliminé el intercepto en la matriz del modelo de X.

 cv.out <- cv.glmnet(x,y,alpha= 1,family="gaussian",type.measure = "mse")

Rnadon Forest: para OLS y random forest, utilicé las mismas variables dependientes y variables independientes. Sólo cambié nPerm y nTree de los valores predeterminados, pero incluso si utilizo los valores predeterminados, sigo obteniendo una varianza explicada negativa.

 eye.rf = randomForest(Score ~syuzhet+ chroma_C_0 + chroma_C_1 + chroma_C_2 + chroma_C_3 + 
                    chroma_C_4 + chroma_C_5 + chroma_C_6 + chroma_C_7 + chroma_C_8 + 
                    chroma_C_9 + chroma_Q_0 + chroma_Q_1 + chroma_Q_2 + chroma_Q_3 + 
                    chroma_Q_4 + chroma_Q_5 + chroma_Q_6 + chroma_Q_7 + chroma_Q_8 + 
                    chroma_Q_9 + pitch_0 + pitch_1 + pitch_2 + pitch_3 + pitch_4 + 
                    pitch_5 + pitch_7 + pitch_9 + pitch_10 + pitch_11 + pitch_12 + 
                    pitch_13 + pitch_14 + pitch_15 + pitch_16 + pitch_17 + pitch_18 + 
                    pitch_20 + pitch_21 + pitch_22 + pitch_23 + pitch_24 + MFCC_0 + 
                    MFCC_3 + MFCC_4 + MFCC_5 + MFCC_6 + MFCC_7 + MFCC_8 + MFCC_10 + 
                    MFCC_11 + MFCC_12 + MFCC_13 + MFCC_14 + if2017 + industry + 
                    quarter + withCelebrities + withMusic + length.s.  + 
                    anger + anticipation + disgust + fear + joy + sadness + surprise + 
                    trust + Topic0 + Topic1, mtry = 25, 
                  nPerm = 10,
                  ntree = 6000,
                  data = ad)

 Type of random forest: regression
                 Number of trees: 6000
  No. of variables tried at each split: 25

      Mean of squared residuals: 3.552812
                % Var explained: -14.98

1voto

Bill Puntos 16

Su análisis sería mucho mejor si incluyera un esquema común de validación cruzada o validación. No obstante, va por buen camino: Dado que los bosques aleatorios suelen ser bastante sólidos (especialmente en situaciones de p grande y n pequeño) incluso sin ajuste, obtener una mala puntuación fuera de la bolsa suele ser una señal de que algo huele mal en otros métodos con resultados mucho mejores (por ejemplo, OLS con eliminación hacia atrás y una R-cuadrado del 90%).

Vamos a demostrarlo con un ejemplo clásico basado en datos completamente aleatorios. Así, todo lo que supere el 0% de R-cuadrado (ajustado) provendría de un sobreajuste.

# Random data
n <- 100
p <- 90
set.seed(3423)
X <- data.frame(matrix(rnorm(n * (p + 1)), nrow = n, ncol = p + 1))

# Formula
form <- reformulate(colnames(X[-1]), response = "X1")

# OLS
ols <- lm(form, data = X)
ols_after_be <- MASS::stepAIC(ols, direction = "both", trace = FALSE)
summary(ols_after_be) # Multiple R-squared:  0.8937,    Adjusted R-squared:  0.6812 

# RF
rf <- randomForest::randomForest(form, data = X)
rf # % Var explained: -8.01% (depends on run)

Así que podemos ver claramente que el R-cuadrado (ajustado) de OLS seguido de la selección de variables es superprometedor: 68% (¡sí, publiquémoslo!). Por otro lado, el R-cuadrado del bosque aleatorio es cercano al 0%.

En cuanto a los numerosos comentarios debajo del OP:

  • Las puntuaciones OOB no son tan "válidas" como las de validación cruzada, pero si las observaciones son independientes y no se ejecutan demasiados árboles, suelen ser suficientemente fiables.

  • Hay diferentes valores por defecto para "mtry" en un bosque aleatorio en la configuración de regresión. Uno es $p/3$ otra podría ser $\sqrt{p}$ . En diferentes situaciones del mundo real, normalmente el uso de valores como éste proporciona puntuaciones de validación cruzada cercanas a las óptimas. El valor elegido en el PO está en algún punto intermedio, así que no puede ser tan malo.

Mensaje para llevar a casa: La selección escalonada de variables es una solución muy ingenua y mala para un problema de p grande n pequeño. En este ejemplo, el MCO original (antes de cualquier selección de variables) produce un R-cuadrado ajustado negativo, lo que está completamente bien. El problema es la parte de selección de variables, no la parte de MCO.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X