glmnet не сходится для lambda.min из cv.glmnet
Я бегал в 20 раз cv.glmnet
Лассо модель для получения "оптимального" значения лямбда. Тем не менее, когда я пытаюсь воспроизвести результаты 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)
Теперь значение bestlam
выше 2.976023e-05
так что, возможно, это вызывает проблему? Это вопрос округления о значении лямбды? Есть ли причина, по которой я не могу воспроизвести результаты непосредственно из glmnet()
функционировать? Если я использую вектор значений лямбда в диапазоне, аналогичном этому значению bestlam
У меня нет никаких проблем.
2 ответа
Вы передаете одну лямбду своему glmnet
(lambda=bestlab
) что является большим нет-нет (вы пытаетесь обучить модель, используя только одно лямбда-значение).
От 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.
В этом отношении glmnet немного сложнее - вы захотите запустить свою лучшую модель с серией лямбд (например, set nlambda=101), а затем, когда вы прогнозируете set s=bestlam
а также exact=FALSE
,