Używam cv.glmnet
do znajdowania predyktorów. Konfiguracja, której używam jest następująca:
lassoResults<-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold)
bestlambda<-lassoResults$lambda.min
results<-predict(lassoResults,s=bestlambda,type="coefficients")
choicePred<-rownames(results)[which(results !=0)]
Aby upewnić się, że wyniki są powtarzalne ja set.seed(1)
. Wyniki są bardzo zmienne. Uruchomiłem dokładnie ten sam kod 100, aby zobaczyć, jak zmienne były wyniki. W biegach 98/100 zawsze wybierano jeden konkretny predyktor (czasem tylko sam); inne predyktory zostały wybrane (współczynnik był niezerowy) zwykle 50/100 razy.
Mówi mi więc, że za każdym razem, gdy przeprowadzana jest walidacja krzyżowa, prawdopodobnie wybierze inną najlepszą lambda, ponieważ początkowa randomizacja fałdów ma znaczenie. Inni widzieli ten problem ( wyniki CV.glmnet ), ale nie ma sugerowanego rozwiązania.
Myślę, że może ten, który pokazuje 98/100, jest prawdopodobnie dość mocno skorelowany ze wszystkimi innymi? Wyniki należy ustabilizować jeśli po prostu uruchomić LOOCV ( ), ale jestem ciekaw, dlaczego są one tak zmiennej kiedy .
set.seed(1)
raz biegnieszcv.glmnet()
100 razy? To nie jest doskonała metodologia powtarzalności; lepiej naset.seed()
prawo przed każdym biegiem, inaczej utrzymuj foldids na stałym poziomie między biegami. Każde z twoich wywołańcv.glmnet()
dzwonisample()
N razy. Więc jeśli długość twoich danych kiedykolwiek się zmienia, zmienia się odtwarzalność.