Ich benutze cv.glmnet
, um Prädiktoren zu finden. Das Setup, das ich verwende, ist wie folgt:
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)]
Um sicherzustellen, dass die Ergebnisse reproduzierbar sind, habe ich set.seed(1)
. Die Ergebnisse sind sehr unterschiedlich. Ich habe genau den gleichen Code 100 ausgeführt, um zu sehen, wie variabel die Ergebnisse waren. In den 98/100 Läufen wurde immer ein bestimmter Prädiktor ausgewählt (manchmal nur für sich); Andere Prädiktoren wurden in der Regel 50/100 Mal ausgewählt (der Koeffizient war ungleich Null).
Es heißt also für mich, dass jedes Mal, wenn die Kreuzvalidierung ausgeführt wird, wahrscheinlich ein anderes bestes Lambda ausgewählt wird, da die anfängliche Randomisierung der Falten eine Rolle spielt. Andere haben dieses Problem gesehen ( CV.glmnet-Ergebnisse ), aber es gibt keine vorgeschlagene Lösung.
Ich denke, dass vielleicht diejenige, die 98/100 zeigt, ziemlich stark mit allen anderen korreliert ist? Die Ergebnisse haben stabilisieren , wenn ich nur laufen LOOCV ( ), aber ich bin neugierig , warum sie so variabel sind , wenn .
set.seed(1)
einmal und danncv.glmnet()
100 Mal rennst? Das ist keine großartige Methode für die Reproduzierbarkeit. Besserset.seed()
vor jedem Lauf nach rechts oder die Faltlinien über die Läufe hinweg konstant halten. Jeder Ihrer Anrufe ancv.glmnet()
ruftsample()
N-mal an. Wenn sich also die Länge Ihrer Daten ändert, ändert sich die Reproduzierbarkeit.