Как указать выбранную лямбду, чтобы она соответствовала лассо в R

Я нашел свою лучшую лямбду (для лассо) с помощью 10-кратной перекрестной проверки на моем наборе данных для обучения и проверки с помощью набора данных тестирования. Теперь я хотел бы использовать мою лучшую лямбду, чтобы подогнать модель ко всему набору данных (используя как обучение, так и тест). Как указать выбранную лямбду, чтобы она соответствовала моей модели Final. Могу ли я использовать приведенный ниже код?

Final_model<-glmnet(x,y,family = "binomial",alpha = 1,lambda=lambda.min)

Пожалуйста, помогите, заранее спасибо.


person jijforu    schedule 22.05.2018    source источник


Ответы (1)


Да, ты можешь. Вот пример этого кода, работающего с lambda.min, установленным в 1:

library(glmnet)
x=matrix(rnorm(100*20),100,20)
y=rep(0:1,50)
lambda.min=1
Final_model<-glmnet(x,y, family="binomial",alpha = 1,lambda=lambda.min)
Final_model

Call:  glmnet(x = x, y = y, family = "binomial", alpha = 1, lambda = lambda.min) 

     Df       %Dev Lambda
[1,]  0 -1.121e-15      1

Обновить

Если во время выполнения у вас появляются предупреждающие сообщения, это может быть связано с использованием одного лямбда-значения, это не рекомендуется в документации ?glmnet:

лямбда: лямбда-последовательность, задаваемая пользователем. Обычно программа вычисляет собственную лямбда-последовательность на основе значений nlambda и lambda.min.ratio. Передача значения лямбда отменяет это. ВНИМАНИЕ: используйте осторожно. Избегайте указывать одно значение лямбда (для прогнозов после CV используйте вместо этого pred ()). Вместо этого укажите убывающую последовательность лямбда-значений. glmnet полагается на свои горячие старты для скорости, и часто быстрее уместить весь путь, чем вычислить одиночное соответствие.

Связанные вопросы здесь и здесь

person Terru_theTerror    schedule 22.05.2018
comment
Привет, спасибо за ответ. Я использовал его, но получил предупреждение. Предупреждающие сообщения: 1: из кода glmnet Fortran (код ошибки -1); Сходимость для 1-го значения лямбда не достигается после maxit = 100000 итераций; решения для лямбда-выражений большего размера вернули 2: В getcoef (fit, nvars, nx, vnames): возвращена пустая модель; вероятно проблема конвергенции. Некоторая предыстория - это сильно несбалансированный двоичный набор данных. - person jijforu; 22.05.2018
comment
Можете ли вы опубликовать его и воспроизводимый пример набора данных? - person Terru_theTerror; 22.05.2018
comment
Здравствуйте, спасибо за ссылку на похожие вопросы. Но нет ответов, как подогнать модель ко всему набору данных. Они посоветовали использовать функцию predic (), но это не будет прогнозирование с помощью модели из набора обучающих данных. Набор данных огромен (2000X200000) с ответами и предикторами: 0, s и 1. Это тот же код, что и раньше: Final_model ‹-glmnet (x, y, family = binomial, alpha = 1, lambda = lambda.min). Заранее спасибо. - person jijforu; 23.05.2018