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, у меня нет никаких проблем.


person alwaysnew    schedule 24.08.2015    source источник


Ответы (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.
person scribbles    schedule 24.08.2015

glmnet немного сложен в этом отношении — вы захотите запустить свою лучшую модель с рядом лямбд (например, установите nlambda = 101), а затем, когда вы предскажете, установите s=bestlam и exact=FALSE.

person Tchotchke    schedule 24.08.2015