R glmnet不从cv.glmnet为lambda.min收敛
我运行了一个20倍的R glmnet不从cv.glmnet为lambda.min收敛,r,glmnet,R,Glmnet,我运行了一个20倍的cv.glmnetlasso模型来获得lambda的“最佳”值。但是,当我尝试从glmnet()复制结果时,我会收到一个错误,错误如下: Warning messages: 1: from glmnet Fortran code (error code -1); Convergence for 1th lambda value not reached after maxit=100000 iterations; solutions for larger lamb
cv.glmnet
lasso模型来获得lambda的“最佳”值。但是,当我尝试从glmnet()
复制结果时,我会收到一个错误,错误如下:
Warning messages:
1: from glmnet Fortran code (error code -1); Convergence for 1th lambda
value not reached after maxit=100000 iterations; solutions for larger
lambdas returned
2: In getcoef(fit, nvars, nx, vnames) :
an empty model has been returned; probably a convergence issue
我的代码是这样写的:
set.seed(5)
cv.out <- cv.glmnet(x[train,],y[train],family="binomial",nfolds=20,alpha=1,parallel=TRUE)
coef(cv.out)
bestlam <- cv.out$lambda.min
lasso.mod.best <- glmnet(x[train,],y[train],alpha=1,family="binomial",lambda=bestlam)
set.seed(5)
cv.outglmnet在这方面有点棘手-您需要使用一系列lambda(例如,设置nlambda=101)运行您的最佳模型,然后当您预测sets=bestlam
和exact=FALSE
时,您将一个lambda传递给您的glmnet
(lambda=bestlab
),这是一个很大的禁忌(您正在尝试仅使用一个lambda值来训练模型)
从glmnet
文档(?glmnet)
:
lambda: A user supplied lambda sequence. Typical usage is to have the
program compute its own lambda sequence based on nlambda and
lambda.min.ratio. Supplying a value of lambda overrides this. WARNING: use
with care. Do not supply a single value for lambda (for predictions after CV
use predict() instead). Supply instead a decreasing sequence of lambda
values. glmnet relies on its warms starts for speed, and its often faster to
fit a whole path than compute a single fit.