Me gustaría comparar modelos seleccionados con cresta, lazo y red elástica. La figura a continuación muestra las rutas de los coeficientes utilizando los 3 métodos: cresta (Fig. A, alfa = 0), lazo (Fig. B; alfa = 1) y red elástica (Fig. C; alfa = 0.5). La solución óptima depende del valor seleccionado de lambda, que se elige en función de la validación cruzada.
Al mirar estas parcelas, esperaría que la red elástica (Fig. C) exhibiera un efecto de agrupación. Sin embargo, no está claro en el caso presentado. La ruta de los coeficientes para el lazo y la red elástica son muy similares. Cuál podría ser la razón de ésto ? ¿Es solo un error de codificación? Usé el siguiente código en R:
library(glmnet)
X<- as.matrix(mydata[,2:22])
Y<- mydata[,23]
par(mfrow=c(1,3))
ans1<-cv.glmnet(X, Y, alpha=0) # ridge
plot(ans1$glmnet.fit, "lambda", label=FALSE)
text (6, 0.4, "A", cex=1.8, font=1)
ans2<-cv.glmnet(X, Y, alpha=1) # lasso
plot(ans2$glmnet.fit, "lambda", label=FALSE)
text (-0.8, 0.48, "B", cex=1.8, font=1)
ans3<-cv.glmnet(X, Y, alpha=0.5) # elastic net
plot(ans3$glmnet.fit, "lambda", label=FALSE)
text (0, 0.62, "C", cex=1.8, font=1)
El código utilizado para trazar rutas de coeficientes netos elásticos es exactamente el mismo que para cresta y lazo. La única diferencia está en el valor de alfa. El parámetro alfa para la regresión neta elástica se seleccionó en base al MSE más bajo (error cuadrático medio) para los valores lambda correspondientes.
Gracias por tu ayuda !
fuente