Регрессия гребня с помощью `glmnet` дает другие коэффициенты, чем те, которые я вычисляю по« определению из учебника »?

Я бегу Ридж регресс с использованиемglmnet R пакет. Я заметил, что коэффициенты, которые я получаю изglmnet::glmnet Функции отличаются от тех, которые я получаю, вычисляя коэффициенты по определению (с использованием одного и того же значения лямбды). Может кто-нибудь объяснить мне, почему?

Данные (оба: ответY и дизайн матрицыX) масштабируются.

library(MASS)
library(glmnet)

# Data dimensions
p.tmp <- 100
n.tmp <- 100

# Data objects
set.seed(1)
X <- scale(mvrnorm(n.tmp, mu = rep(0, p.tmp), Sigma = diag(p.tmp)))
beta <- rep(0, p.tmp)
beta[sample(1:p.tmp, 10, replace = FALSE)] <- 10
Y.true <- X %*% beta
Y <- scale(Y.true + matrix(rnorm(n.tmp))) # Y.true + Gaussian noise

# Run glmnet 
ridge.fit.cv <- cv.glmnet(X, Y, alpha = 0)
ridge.fit.lambda <- ridge.fit.cv$lambda.1se

# Extract coefficient values for lambda.1se (without intercept)
ridge.coef <- (coef(ridge.fit.cv, s = ridge.fit.lambda))[2:(p.tmp+1)]

# Get coefficients "by definition"
ridge.coef.DEF <- solve(t(X) %*% X + ridge.fit.lambda * diag(p.tmp)) %*% t(X) %*% Y

# Plot estimates
plot(ridge.coef, type = "l", ylim = range(c(ridge.coef, ridge.coef.DEF)),
     main = "black: Ridge `glmnet`\nred: Ridge by definition")
lines(ridge.coef.DEF, col = "red")

Ответы на вопрос(2)

Ваш ответ на вопрос