Wykonuję regresję logistyczną elastycznej sieci dla zestawu danych opieki zdrowotnej, używając glmnet
pakietu w R, wybierając wartości lambda na siatce od 0 do 1. Mój skrócony kod znajduje się poniżej:
alphalist <- seq(0,1,by=0.1)
elasticnet <- lapply(alphalist, function(a){
cv.glmnet(x, y, alpha=a, family="binomial", lambda.min.ratio=.001)
})
for (i in 1:11) {print(min(elasticnet[[i]]$cvm))}
która wyprowadza średni błąd zwalidowany krzyżowo dla każdej wartości alfa od do z przyrostem :1,0 0,1
[1] 0.2080167
[1] 0.1947478
[1] 0.1949832
[1] 0.1946211
[1] 0.1947906
[1] 0.1953286
[1] 0.194827
[1] 0.1944735
[1] 0.1942612
[1] 0.1944079
[1] 0.1948874
Na podstawie tego, co przeczytałem w literaturze, optymalnym wyborem jest miejsce, w którym błąd cv jest zminimalizowany. Ale istnieje wiele różnic w błędach w zakresie alfa. Widzę kilka lokalnych minimów z globalnym błędem minimalnym dla .0.1942612
alpha=0.8
Czy to jest bezpieczne alpha=0.8
? Lub, biorąc pod uwagę tę odmianę, czy powinienem ponownie uruchomić cv.glmnet
z większą liczbą fałd walidacji krzyżowej (np. zamiast ), czy może większą liczbą przyrostów pomiędzy i, aby uzyskać wyraźny obraz ścieżki błędu CV?10 αalpha=0.0
1.0
cv.glmnet()
bez przekazywania foldids
utworzonego ze znanego losowego materiału siewnego.
caret
pakiet, który może powtarzać cv i dostroić zarówno alfa, jak i lambda (obsługuje przetwarzanie wielordzeniowe!). Z pamięci myślę, żeglmnet
dokumentacja odradza strojenie alfy tak jak tutaj. Zaleca się utrzymywanie stałych foldidów, jeśli użytkownik dostraja alfa oprócz strojenia lambda dostarczonego przezcv.glmnet
.