J'utilise cv.glmnet
pour trouver des prédicteurs. La configuration que j'utilise est la suivante:
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)]
Pour vous assurer que les résultats sont reproductibles I set.seed(1)
. Les résultats sont très variables. J'ai exécuté exactement le même code 100 pour voir à quel point les résultats étaient variables. Dans les courses 98/100, un prédicteur particulier était toujours sélectionné (parfois juste de lui-même); d'autres prédicteurs ont été sélectionnés (le coefficient était non nul), généralement 50/100 fois.
Donc, cela me dit que chaque fois que la validation croisée s'exécute, elle va probablement sélectionner un meilleur lambda différent, car la randomisation initiale des plis est importante. D'autres ont vu ce problème ( résultats CV.glmnet ) mais il n'y a pas de solution suggérée.
Je pense que celui qui apparaît 98/100 est probablement assez fortement corrélé à tous les autres? Les résultats ne se stabilisent si je viens de lancer LOOCV ( ), mais je suis curieux de savoir pourquoi ils sont si variables quand .
set.seed(1)
courez une fois puis que vous courezcv.glmnet()
100 fois? Ce n'est pas une excellente méthodologie pour la reproductibilité; mieux àset.seed()
droite avant chaque course, sinon maintenez les plis constants d'une course à l'autre. Chacun de vos appels àcv.glmnet()
appellesample()
N fois. Donc, si la longueur de vos données change, la reprodubilité change.