我是套索回归的新手,我试图实现基于这个公式:

对于我在Elements of statistical learning book上读到的拦截,我只能使用y的平均值 .

为了计算beta,我使用了最小二乘法 . 然后我使用那些测试来估计beta套索 . 对于lambda,为简单起见,我只取了一个值(0.1) .

我不能真正做一个argmin,因为我只获得了一个beta套索值 . 在这种情况下我不明白,如果argmin只是给我一个索引吗?

这是简单的代码:

#Lasso regression 
set.seed(110)
n = 5
p = 2
x=matrix(rnorm(n*p), nrow=n, ncol=p)
y=as.matrix(rnorm(n))
lambda=0.1
beta=matrix(0, nrow=ncol(x))
coefs=lm(y~x)
beta[1]=coefs$coefficients[2]
beta[2]=coefs$coefficients[3]
#computing the penalty l1 nomr
penalty=lambda*sum(abs(beta))
#computing beta_lasso form the formula
beta0=mean(y)
beta_lasso=1/2*sum((y-beta0-x%*%beta)^2)+penalty


#lasso using glmnet
library(glmnet)
fit=glmnet(x,y, lambda=0.1, standardize = FALSE)
coef(fit)

结果:

[1] 0.6329824

使用glmnet:

s0
(Intercept) 0.9810360
V1          .        
V2          0.7815873

结果与glmnet函数的结果完全不同 . 我试图通过glmnet函数,但它非常复杂 .

我非常感谢任何澄清 .