Я використовую cv.glmnet
для пошуку прогнозів. Я використовую наступну настройку:
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)]
Щоб переконатися, що результати відтворюються я set.seed(1)
. Результати дуже різняться. Я запустив такий самий код 100, щоб побачити, наскільки результативні. У 98/100 запусках завжди був обраний один конкретний предиктор (іноді просто самостійно); були вибрані інші предиктори (коефіцієнт корисної дії був не нульовим), як правило, 50/100 разів.
Отже, мені кажуть, що кожного разу, коли перехресне підтвердження буде запущене, він, ймовірно, вибере іншу найкращу лямбда, тому що початкова рандомізація складок має значення. Інші бачили цю проблему ( результати CV.glmnet ), але запропонованого рішення не існує.
Я думаю, що, можливо, той, що відображає 98/100, напевно, дуже корелює з усіма іншими? Результати цього стабілізуватися , якщо я просто запустити LOOCV ( ), але мені цікаво , чому вони так змінної при nfold < п .
set.seed(1)
один раз потім біжишcv.glmnet()
100 разів? Це не велика методологія відтворення; кращеset.seed()
праворуч перед кожним пробігом, інакше тримати складки постійними протягом пробігу. Кожен ваш дзвінокcv.glmnet()
дзвонитьsample()
N разів. Отже, якщо довжина ваших даних колись змінюється, відтворюваність змінюється.