我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次。
因此对我来说,每次交叉验证运行时,都可能会选择一个不同的最佳lambda,因为折叠的初始随机性很重要。其他人已经看到了这个问题(CV.glmnet结果),但是没有建议的解决方案。
我在想,一个显示98/100的图像可能与所有其他图像高度相关吗?如果我只是运行LOOCV(),结果的确稳定,但是我很好奇为什么当时它们是如此可变。
set.seed(1)
一次运行cv.glmnet()
100次吗?那不是重现性的好方法。最好set.seed()
在每次运行之前就对它进行调整,否则在每次运行之间都应保持折叠数不变。您对的每次呼叫cv.glmnet()
都呼叫sample()
N次。因此,如果您的数据长度发生变化,则可重复性也会发生变化。