λlog(λ)∑i|βi|
Con ese fin, creé algunos datos correlacionados y no correlacionados para demostrar:
x_uncorr <- matrix(runif(30000), nrow=10000)
y_uncorr <- 1 + 2*x_uncorr[,1] - x_uncorr[,2] + .5*x_uncorr[,3]
sigma <- matrix(c( 1, -.5, 0,
-.5, 1, -.5,
0, -.5, 1), nrow=3, byrow=TRUE
)
x_corr <- x_uncorr %*% sqrtm(sigma)
y_corr <- y_uncorr <- 1 + 2*x_corr[,1] - x_corr[,2] + .5*x_corr[,3]
Los datos x_uncorr
tienen columnas no correlacionadas.
> round(cor(x_uncorr), 2)
[,1] [,2] [,3]
[1,] 1.00 0.01 0.00
[2,] 0.01 1.00 -0.01
[3,] 0.00 -0.01 1.00
mientras que x_corr
tiene una correlación preestablecida entre las columnas
> round(cor(x_corr), 2)
[,1] [,2] [,3]
[1,] 1.00 -0.49 0.00
[2,] -0.49 1.00 -0.51
[3,] 0.00 -0.51 1.00
Ahora veamos las gráficas de lazo para ambos casos. Primero los datos no correlacionados
gnet_uncorr <- glmnet(x_uncorr, y_uncorr)
plot(gnet_uncorr)
Un par de características se destacan
- Los predictores entran en el modelo en el orden de su magnitud del coeficiente de regresión lineal verdadero.
- ∑i|βi|∑i|βi|
- Cuando un nuevo predictor ingresa al modelo, afecta la pendiente de la ruta del coeficiente de todos los predictores que ya están en el modelo de manera determinista. Por ejemplo, cuando el segundo predictor ingresa al modelo, la pendiente de la ruta del primer coeficiente se reduce a la mitad. Cuando el tercer predictor ingresa al modelo, la pendiente de la ruta del coeficiente es un tercio de su valor original.
Todos estos son hechos generales que se aplican a la regresión de lazo con datos no correlacionados, y todos pueden probarse a mano (¡buen ejercicio!) O encontrarse en la literatura.
Ahora hagamos datos correlacionados
gnet_corr <- glmnet(x_corr, y_corr)
plot(gnet_corr)
Puede leer algunas cosas de esta trama comparándolas con el caso no correlacionado
- Las rutas de predicción primera y segunda tienen la misma estructura que el caso no correlacionado hasta que el tercer predictor ingresa al modelo, aunque estén correlacionadas. Esta es una característica especial del caso de los dos predictores, que puedo explicar en otra respuesta si hay interés, me llevaría un poco más lejos de la discusión actual.
- ∑|βi|
Así que ahora veamos su trama del conjunto de datos de los autos y leamos algunas cosas interesantes (reproduje su trama aquí, así que esta discusión es más fácil de leer):
Una advertencia : escribí el siguiente análisis basado en el supuesto de que las curvas muestran los coeficientes estandarizados , en este ejemplo no lo hacen. Los coeficientes no estandarizados no son adimensionales y no son comparables, por lo que no se pueden sacar conclusiones de ellos en términos de importancia predictiva. Para que el siguiente análisis sea válido, simule que el gráfico es de los coeficientes estandarizados y realice su propio análisis en las rutas de coeficientes estandarizados.
- Como dices, el
wt
predictor parece muy importante. Primero ingresa al modelo y tiene un descenso lento y constante hasta su valor final. Tiene algunas correlaciones que lo hacen un viaje ligeramente irregular, am
en particular parece tener un efecto drástico cuando entra.
am
También es importante. Llega más tarde y está correlacionado con él wt
, ya que afecta la pendiente de wt
una manera violenta. También está correlacionado con carb
y qsec
, porque no vemos el ablandamiento predecible de la pendiente cuando entran. Después de estas cuatro variables han entrado sin embargo, que sí vemos el patrón no correlacionado agradable, por lo que parece ser correlacionado con todos los predictores en el extremo.
- Algo entra alrededor de 2.25 en el eje x, pero su camino en sí es imperceptible, solo puede detectarlo por su efecto en los parámetros
cyl
y wt
.
cyl
Es bastante fascinante. Entra en segundo lugar, por lo que es importante para modelos pequeños. Después de otras variables, y especialmente de am
ingresar, ya no es tan importante, y su tendencia se invierte, y finalmente se elimina. Parece que el efecto de cyl
puede ser capturado completamente por las variables que ingresan al final del proceso. Si es más apropiado de usar cyl
, o el grupo complementario de variables, realmente depende de la compensación de sesgo-varianza. Tener el grupo en su modelo final aumentaría significativamente su varianza, ¡pero puede ser que el sesgo más bajo lo compense!
Esa es una pequeña introducción a cómo aprendí a leer información de estas tramas. ¡Creo que son muy divertidos!
Gracias por un gran análisis. Para informar en términos simples, diría que wt, am y cyl son los 3 predictores más importantes de mpg. Además, si desea crear un modelo para la predicción, ¿cuáles incluirá según esta figura: wt, am y cyl? O alguna otra combinación. Además, no parece necesitar la mejor lambda para el análisis. ¿No es importante como en la regresión de cresta?
Diría que el caso wt
y am
son claros, son importantes. cyl
es mucho más sutil, es importante en un modelo pequeño, pero nada relevante en uno grande.
No sería capaz de determinar qué incluir en función de la figura, que realmente debe responderse al contexto de lo que está haciendo. Podría decir que si desea un modelo de tres predictores, entonces wt
, am
y cyl
son buenas opciones, ya que son relevantes en el gran esquema de las cosas, y deberían terminar teniendo tamaños de efectos razonables en un modelo pequeño. Sin embargo, esto se basa en el supuesto de que tiene alguna razón externa para desear un pequeño modelo de tres predictores.
Es cierto, este tipo de análisis analiza todo el espectro de lambdas y le permite seleccionar relaciones en una variedad de complejidades del modelo. Dicho esto, para un modelo final, creo que ajustar una lambda óptima es muy importante. En ausencia de otras restricciones, definitivamente usaría la validación cruzada para encontrar dónde está este lambda más predictivo, y luego usaría esa lambda para un modelo final y un análisis final.
λ
En la otra dirección, a veces hay restricciones externas sobre cuán complejo puede ser un modelo (costos de implementación, sistemas heredados, minimalismo explicativo, interpretabilidad comercial, patrimonio estético) y este tipo de inspección realmente puede ayudarlo a comprender la forma de sus datos, y las compensaciones que está haciendo al elegir un modelo más pequeño que óptimo.
-1
deglmnet(as.matrix(mtcars[-1]), mtcars[,1])
.