欢迎光临散文网 会员登陆 & 注册

拓端tecdat|R语言实现LASSO回归——自己编写LASSO回归算法

2021-07-01 23:13 作者:拓端tecdat  | 我要投稿

原文链接:http://tecdat.cn/?p=18840

原文出处:拓端数据部落公众号

这篇文章中我们可以编写自己的代码来计算套索(lasso)回归,

我们必须定义阈值函数

R函数是

  1. thresh = function(x,a){

  2. sign(x) * pmax(abs(x)-a,0)

  3. }

要解决我们的优化问题,设置

这样就可以等效地写出优化问题

因此

一个得到

同样,如果有权重ω=(ωi),则按坐标更新将变为

计算此分量下降的代码是

  1. lasso = function(X,y,beta,lambda,tol=1e-6,maxiter=1000){


  2. beta0 = sum(y-X%*%beta /(length(y))

  3. beta0list[1] = beta0

  4. for (j in 1:maxiter){

  5. for (k in 1:length beta)){

  6. r = y - X[,-k]%*%beta[-k] - beta0*rep(1,length(y )

  7. beta[k] = (1/sum(omega*X[,k]^2) *

  8. threshog(t(omega*r)%*%X[,k ,length(y *lambda)

  9. }

  10. beta0 = sum(y-X%*%beta)/(length(y))



  11. obj[j] = (1/2)*(1/length(y))*norm(omega*(y - X%*%beta -

  12. beta0*rep(1,length(y))),'F')^2 + lambda*sum(abs(beta))

  13. if (norm(rbind(beta0list[j],betalist[[j]]) -

  14. rbind(beta0,beta),'F') ) { break }

 例如,考虑以下(简单)数据集,其中包含三个协变量

chicago = read.table("data.txt",header=TRUE,sep=";")

我们可以“标准化”


  1. for(j in 1:3) X[,j] = (X[,j]-mean(X[,j]))/sd(X[,j])


  2. y = (y-mean(y))/sd(y)

 要初始化算法,使用OLS估算

lm(y~0+.,)$coef

例如


  1. lasso(X,y,beta_init,lambda=.001)

  2. $obj

  3. [1] 0.001014426 0.001008009 0.001009558 0.001011094 0.001011119 0.001011119


  4. $beta

  5. [,1]

  6. X_1 0.0000000

  7. X_2 0.3836087

  8. X_3 -0.5026137


  9. $intercept

  10. [1] 2.060999e-16

 我们可以通过循环获得标准的lasso图

最受欢迎的见解

1.R语言多元Logistic逻辑回归 应用案例

2.面板平滑转移回归(PSTR)分析案例实现

3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R语言泊松Poisson回归模型分析案例

5.R语言回归中的Hosmer-Lemeshow拟合优度检验

6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.在R语言中实现Logistic逻辑回归

8.python用线性回归预测股票价格

9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标


拓端tecdat|R语言实现LASSO回归——自己编写LASSO回归算法的评论 (共 条)

分享到微博请遵守国家法律