在 R 中实现岭回归

时间:2021-03-29 17:42:50

标签: r

我正在尝试根据等式在 R 中实现岭回归:β= (AT A+λI)^−1 ATy

我相信我已经正确地实现了代码,但是我得到的 beta 值与标准 glmnet 实现不匹配。我相信这是由于 gmlnet 在幕后进行了一些规范化。我为 y 和 A 编写了自己的归一化函数,但仍然没有得到所需的输出。 glmnet 的幕后还有其他我不知道的事情吗?如果是这样,是否可以在我的实现中禁用它或复制它?

#import packages
library(glmnet)
library(Matrix)

#Function for normalizing A
normalize <- function(x) {
return ((x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE)))}

#set up values
A = rbind(c(1,2),c(4,3),c(9,4),c(-2,-5))
A.norm = as.matrix(apply(A,2,normalize))

y = c(2,7,6,-3)
y.magnatude = sqrt(sum(y^2))
y.norm = y / y.magnatude
lamda = 50

#compute beta
mybeta = solve(t(A.norm) %*% A.norm + lamda * diag(2), t(A.norm) %*% y.norm)

#using glmnet
fit = glmnet(A.norm,y.norm, alpha=0,lambda=lamda/4,intercept = F, standardize = F)
beta = as.matrix(fit$beta)

#Print result
cat("my beta:     " , mybeta, "\n")
cat("glmnet beta: " , beta, "\n")

产生输出:

my beta:      0.01952199 0.02593064 
glmnet beta:  0.01010245 0.01342469"

0 个答案:

没有答案