Как вычислить значение R Squared для регрессии Лассо, используя glmnet в R

Я перебрал 8 вопросов stackru, говоря об этом вопросе. Но не было дано правильного практического ответа.

Я выполняю регрессию лассо в R, используя пакет glmnet:

fit.lasso <- glmnet(x,y)
plot(fit.lasso,xvar="lambda",label=TRUE)

fit.lasso сюжет

Затем с помощью перекрестной проверки:

cv.lasso=cv.glmnet(x,y)
plot(cv.lasso)

лямбда против MSE

Один учебник (последний слайд) предлагает следующее для R^2:

R_Squared =  1 - cv.lasso$cvm/var(y)

Но это не сработало.

Я хочу понять эффективность модели / производительность при подборе данных. Как обычно мы получаем R ^ 2 и корректируем R ^ 2 при выполнении функции lm() в r.

3 ответа

Если вы используете "гауссовское" семейство, вы можете получить доступ к значению R-квадрата с помощью

fit.lasso$glmnet.fit$dev.ratio

Я использую данные примера, чтобы продемонстрировать это

библиотека (glmnet)

загрузить данные

data(BinomialExample)
head(x) 
head(y)

Для перекрестной проверки

cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class")
rsq = 1 - cvfit$cvm/var(y)
plot(cvfit$lambda,rsq)

Сначала подберите модель Лассо с выбранной лямбдой.

...

lasso.model <- glmnet(x=X,y=Y, family = "binomial", alpha=1, lambda = cv.model$lambda.min )

тогда вы можете получить псевдо R2 из подобранной модели

      `lasso.model$dev.ratio`

это значение дает отклонение, объясненное моделью / нулевое отклонение

Другие вопросы по тегам