Chciałbym porównać modele wybrane z kalenicą, lasso i elastyczną siatką. Ryc. Poniżej pokazuje ścieżki współczynników przy użyciu wszystkich 3 metod: grzbietu (ryc. A, alfa = 0), lasso (ryc. B; alfa = 1) i elastycznej siatki (ryc. C; alfa = 0,5). Optymalne rozwiązanie zależy od wybranej wartości lambda, która jest wybierana na podstawie krzyżowej walidacji.
Patrząc na te wykresy, spodziewałbym się, że elastyczna siatka (ryc. C) będzie wykazywać efekt grupowania. Nie jest to jednak jasne w prezentowanej sprawie. Ścieżka współczynników dla lassa i siatki elastycznej jest bardzo podobna. Co mogłoby być tego przyczyną ? Czy to tylko błąd kodowania? Użyłem następującego kodu w 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)
Kod użyty do wykreślenia ścieżek elastycznych współczynników netto jest dokładnie taki sam, jak dla kalenicy i lassa. Jedyna różnica polega na wartości alfa. Parametr alfa dla regresji elastycznej siatki został wybrany na podstawie najniższego MSE (średni błąd kwadratu) dla odpowiednich wartości lambda.
Dziękuję za pomoc!
źródło