Estoy usando cv.glmnet
para encontrar predictores. La configuración que uso 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 set.seed(1)
. Los resultados son muy variables. Ejecuté exactamente el mismo código 100 para ver qué tan variables fueron los resultados. En las ejecuciones 98/100 siempre se seleccionó un predictor particular (a veces solo); se seleccionaron otros predictores (el coeficiente fue distinto de cero) generalmente 50/100 veces.
Entonces, me dice que cada vez que se ejecuta la validación cruzada, probablemente seleccionará una mejor lambda diferente, porque la aleatorización inicial de los pliegues es importante. Otros han visto este problema ( resultados de CV.glmnet ) pero no hay una solución sugerida.
Estoy pensando que tal vez el que aparece 98/100 probablemente esté muy relacionado con todos los demás. Los resultados no se estabilizan si LOOCV simplemente correr ( ), pero tengo curiosidad por qué son tan variable cuando .nfold < n
set.seed(1)
una vez corristecv.glmnet()
100 veces? Esa no es una metodología excelente para la reproducibilidad; mejor a laset.seed()
derecha antes de cada ejecución, o bien mantenga los pliegues constantes a lo largo de las ejecuciones. Cada una de sus llamadascv.glmnet()
está llamandosample()
N veces. Entonces, si la longitud de sus datos cambia, la reproductividad cambia.