小言_互联网的博客

R语言实现LASSO回归——自己编写LASSO回归算法

434人阅读  评论(0)

原文链接: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. beta 0 = sum( y-X%*%beta /( length( y))
  3. beta0list[ 1] = beta 0
  4. for (j in 1:maxiter){
  5. for (k in 1: length beta)){
  6. r = y - X[,-k]%*%beta[-k] - beta 0*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. beta 0 = sum( y-X%*%beta)/( length( y))
  11. obj[j] = ( 1/ 2)*( 1/ length( y))*norm(omega*( y - X%*%beta -
  12. beta 0*rep( 1, length( y))), 'F')^ 2 + lambda*sum( abs(beta))
  13. if (norm(rbind(beta0list[j],betalist[[j]]) -
  14. rbind(beta 0,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.  
  5. $beta
  6. [, 1]
  7. X_1 0.0000000
  8. X_2 0.3836087
  9. X_3 -0.5026137
  10.  
  11. $intercept
  12. [ 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指标

 


转载:https://blog.csdn.net/qq_19600291/article/details/105500683
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场