我正在使用glmnet
R中的程序包通过在的网格上从0到1 选择lambda值来对医疗数据集执行弹性网逻辑回归。我的缩写代码如下:
alphalist <- seq(0,1,by=0.1)
elasticnet <- lapply(alphalist, function(a){
cv.glmnet(x, y, alpha=a, family="binomial", lambda.min.ratio=.001)
})
for (i in 1:11) {print(min(elasticnet[[i]]$cvm))}
对于从到每个alpha值,以为增量输出平均交叉验证误差:
[1] 0.2080167
[1] 0.1947478
[1] 0.1949832
[1] 0.1946211
[1] 0.1947906
[1] 0.1953286
[1] 0.194827
[1] 0.1944735
[1] 0.1942612
[1] 0.1944079
[1] 0.1948874
根据我在文献中所读的内容,的最佳选择是使cv错误最小化。但是在整个Alpha范围内,误差有很多变化。我看到了几个局部最小值,全局最小值为。0.1942612
alpha=0.8
安全alpha=0.8
吗?或者,带来的变动,我应该重新运行cv.glmnet
更多的交叉验证倍(如而不是),或者是更大数量的之间的增量,并得到CV错误路径清晰的画面?10 αalpha=0.0
1.0
cv.glmnet()
未传入foldids
已知随机种子创建的情况下运行。
caret
可以对alpha和lambda进行重复cv和调整的程序包(支持多核处理!)。从内存来看,我认为glmnet
文档建议您不要像在此处那样调整alpha。如果用户正在调整Alpha值(除了所提供的Lambda调整值之外),建议您将折叠项保持固定cv.glmnet
。