LASSO线性回归模型

LASSO线性回归模型

LASSO是1996年由Tibshirani提出的一种惩罚方法,可以同时进行变量选择和参数估计,适用于高维数据。
特点:稀疏性,不具有无偏性和一致性,不具有Oracle属性

1. 研究背景

例如研究基因对某个生物表征的影响,假定共有p个基因的n次观测值(p>>n),因变量是连续型变量。我们想要筛选与因变量强相关的基因,直接建立线性回归模型会造成过拟合,可以通过对系数施加惩罚,如L1范数,即增加LASSO惩罚项,将大量冗余变量的系数收缩到0,以此达到变量筛选的目的。
具有LASSO惩罚项的线性回归模型要求解的目标函数为:

minβRpL(β)=minβRp{12nYXβ22+λβ1}   (1)

其中,第一项的L2范数是用误差平方和表示的损失函数,第二项是LASSO惩罚项,使得所有系数绝对值之和小于某个较小的正常数。

2. 通过坐标下降法求解

坐标下降法

基本思想:在每步迭代中沿一个坐标的方向进行搜索,通过循环使用不同的坐标方向来达到目标函数的局部极小值,属于非梯度优化方法。适用于线性回归模型求解,可广泛用于不可导的优化问题。

具体过程:
假设目标函数为f(x1,x2,,xp)

  1. 选取x2,x3,,xp的初始值;
  2. 在每轮迭代中:
    固定x2,x3,,xp,将x1当作自变量,最小化f(x1),得到x1
    x1代入目标函数,同时固定x3,,xp,最小化f(x2),得到x2
    x1,x2代入目标函数,同时固定x4,,xp,最小化f(x3),得到x3
    ……
    得到本轮迭代的一组值x1,x2,,xp
    若满足迭代终止条件则终止迭代,否则进行下一轮迭代。

LASSO线性回归求解过程

将目标函数(1)对βj求导,令导数等于零,即:

L(β)β=1ni=1n(yiy~i(j))xij+1ni=1nxij2βj+λsignβj=0,

其中y~i(j)=k=1,kjpxikβk

求解上式时分情况讨论,可以得到β的估计值β^

i=1n(yiy~i(j))xij>0,且λ<|1ni=1n(yiy~i(j))xij|时,有:

β^=1ni=1n(yiy~i(j))xijλ

i=1n(yiy~i(j))xij<0,且λ<|1ni=1n(yiy~i(j))xij|时,有:

β^=1ni=1n(yiy~i(j))xij+λ

λ|1ni=1n(yiy~i(j))xij|时,有:

β^=0

该解析解也可以用软阈值函数表示

3. Matlab代码

通过glmnet包求解

clear;
clc;
load data;   #加载数据,包括数据矩阵x,因变量y
x=zscore(x);
fold = 10;    #10折交叉验证
m = 10;       #参数lambda的个数
options = glmnetSet;
options.alpha = 1;
options.nlambda = m;
fit = glmnet(x,y,'gaussian',options);
CVerr = cvglmnet(x,y,fold,[],'response','gaussian',glmnetSet,0);
beta_path = fit.beta;    #得到对应于所有lambda的系数矩阵
intercept_path = fit.a0;   #截距项
lambda_path = fit.lambda;   #lambda的取值
opt_index = find(CVerr.glmnetOptions.lambda == CVerr.lambda_min); #最优lambda所在位置
beta = beta_path(:,opt_index);
selectedgene = find(beta~=0);   #模型筛选出来的变量所在位置
posted @   木田心  阅读(808)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示