Я использую, 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 раз. Так что, если длина ваших данных когда-либо меняется, воспроизводимость меняется.