Sto usando cv.glmnet
per trovare predittori. L'impostazione che utilizzo è la seguente:
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)]
Per assicurarsi che i risultati sono riproducibili io set.seed(1)
. I risultati sono molto variabili. Ho eseguito esattamente lo stesso codice 100 per vedere quanto variabili fossero i risultati. Nelle corse 98/100 era sempre stato selezionato un predittore particolare (a volte solo da solo); sono stati selezionati altri predittori (il coefficiente era diverso da zero) di solito 50/100 volte.
Quindi mi dice che ogni volta che la validazione incrociata è in esecuzione, probabilmente selezionerà un diverso lambda migliore, perché la randomizzazione iniziale delle pieghe è importante. Altri hanno riscontrato questo problema ( risultati CV.glmnet ) ma non esiste una soluzione suggerita.
Sto pensando che forse quello che mostra 98/100 è probabilmente abbastanza fortemente correlato a tutti gli altri? I risultati si stabilizzano se eseguo LOOCV ( ), ma sono curioso di sapere perché sono così variabili quando nfold < n .
set.seed(1)
una volta poi corricv.glmnet()
100 volte? Questa non è una grande metodologia per la riproducibilità; meglio aset.seed()
destra prima di ogni corsa, oppure mantenere costanti i pieghe tra le corse. Ciascuna delle tue chiamate acv.glmnet()
sta chiamandosample()
N volte. Quindi, se la lunghezza dei tuoi dati cambia, la riproducibilità cambia.