Регресія хребта відрізняється від використання lm.ridge та glmnet


11

Я застосував деякі дані, щоб знайти найкраще рішення змінних моделі регресії за допомогою регресії хребта в Р. Я використовував lm.ridgeі glmnet(коли alpha=0), але результати дуже відрізняються, особливо коли lambda=0. Припускається, що обидва оцінки параметрів мають однакові значення. Отже, у чому тут проблема? з найкращими побажаннями

Відповіді:


14

glmnet стандартизує змінну y і використовує середні квадратичні помилки замість суми помилок у квадраті. Тому потрібно внести відповідні корективи, щоб відповідати їх результатам.

library(ElemStatLearn)
library(glmnet)
library(MASS)

dof2lambda <- function(d, dof) {
    obj <- function(lam, dof) (dof - sum(d ^ 2 / (d ^ 2 + lam))) ^ 2
    sapply(dof, function(x) optimize(obj, c(0, 1e4), x)$minimum)
}

lambda2dof <- function(d, lam) {
    obj <- function(dof, lam) (dof - sum(d ^ 2 / (d ^ 2 + lam))) ^ 2
    sapply(lam, function(x) optimize(obj, c(0, length(d)), x)$minimum)
}

dat   <- prostate
train <- subset(dat,  train, select = -train)
test  <- subset(dat, !train, select = -train)

train.x <- as.matrix(scale(subset(train, select = -lpsa)))
train.y <- as.matrix(scale(train$lpsa))

d   <- svd(train.x)$d
dof <- seq(1, 8, 0.1)
lam <- dof2lambda(d, dof)

ridge1 <- lm.ridge(train.y ~ train.x, lambda = lam)
ridge2 <- glmnet(train.x, train.y, alpha = 0, lambda = lam / nrow(train.x))

matplot(dof, t(ridge1$coef), type = 'l')
matplot(lambda2dof(d, ridge2$lambda * nrow(train.x)), t(ridge2$beta), type = 'l')

Привіт. Який пакет R ви радите використовувати для Ridge Regression? glmnet, bigRR, Mass, інше? Хтось із них зміг впоратися з повторними заходами (випадковими наслідками)?
скан

У мене є деяка невідповідність між glmnet та MASS lm.ridge виведеннями, що не може бути пояснено проблемами масштабування. Однак lm.ridge дав мені результат, який збігається з ручним розрахунком. Якщо у мене буде час у майбутньому, я опублікую повний приклад. Прямо зараз я піду з MASS. Крім того, сам glmnet попереджає, що результати залежать від способу встановлення параметрів лямбда, це ще один удар проти glmnet.
PA6OTA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.