Estou usando cv.glmnet
para encontrar preditores. A configuração que eu uso é a seguinte:
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)]
Garantir que os resultados sejam reprodutíveis set.seed(1)
. Os resultados são altamente variáveis. Corri exatamente o mesmo código 100 para ver como os resultados eram variáveis. Nas corridas 98/100, sempre havia um preditor em particular selecionado (às vezes por conta própria); outros preditores foram selecionados (o coeficiente era diferente de zero) geralmente 50/100 vezes.
Por isso, diz-me que cada vez que a validação cruzada estiver em execução, provavelmente irá selecionar um melhor lambda diferente, porque a randomização inicial das dobras é importante. Outros viram esse problema ( resultados do CV.glmnet ), mas não há uma solução sugerida.
Eu estou pensando que talvez aquele que aparece 98/100 provavelmente esteja bastante correlacionado com todos os outros? Os resultados não estabilizar, se eu LOOCV apenas correr ( ), mas estou curioso por que eles são tão variáveis quando \ text {nfold} <n .
set.seed(1)
corre uma vezcv.glmnet()
100 vezes? Essa não é uma ótima metodologia para reprodutibilidade; melhor para aset.seed()
direita antes de cada corrida, ou mantenha as dobras constantes entre as corridas. Cada uma das chamadas paracv.glmnet()
está chamandosample()
N vezes. Portanto, se o comprimento dos seus dados mudar, a reprodubilidade será alterada.