Estoy usando cv.glmnet
para encontrar predictores. La configuración que utilizo es la siguiente:
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)]
Para asegurarse de que los resultados son reproducibles I set.seed(1)
. Los resultados son muy variables. Ejecuté exactamente el mismo código 100 veces para ver lo variables que eran los resultados. En las 98/100 ejecuciones se seleccionó siempre un predictor concreto (a veces solo); otros predictores se seleccionaron (el coeficiente era distinto de cero) normalmente 50/100 veces.
Así que me dice que cada vez que se ejecuta la validación cruzada probablemente va a seleccionar un mejor lambda diferente, debido a la aleatoriedad inicial de los pliegues importa. Otros han visto este problema ( Resultados de CV.glmnet ) pero no hay una solución sugerida.
Estoy pensando que tal vez ese que aparece 98/100 está probablemente muy correlacionado con todos los demás? Los resultados hacer se estabiliza si sólo ejecuto LOOCV ( $\text{fold-size} = n$ ), pero tengo curiosidad por saber por qué son tan variables cuando $\text{nfold} < n$ .
3 votos
Para que quede claro, ¿quieres decir que
set.seed(1)
una vez y luego ejecutarcv.glmnet()
¿100 veces? Esa no es una gran metodología para la reproducibilidad; mejorset.seed()
justo antes de cada ejecución, o bien mantener los pliegues constantes en todas las ejecuciones. Cada una de las llamadas acv.glmnet()
está llamandosample()
N veces. Así que si la longitud de sus datos cambia alguna vez, la reproducibilidad cambia.