LASSO线性回归模型
LASSO线性回归模型
LASSO是1996年由Tibshirani提出的一种惩罚方法,可以同时进行变量选择和参数估计,适用于高维数据。
特点:稀疏性,不具有无偏性和一致性,不具有Oracle属性
1. 研究背景
例如研究基因对某个生物表征的影响,假定共有p个基因的n次观测值(p>>n),因变量是连续型变量。我们想要筛选与因变量强相关的基因,直接建立线性回归模型会造成过拟合,可以通过对系数施加惩罚,如L1范数,即增加LASSO惩罚项,将大量冗余变量的系数收缩到0,以此达到变量筛选的目的。
具有LASSO惩罚项的线性回归模型要求解的目标函数为:
其中,第一项的L2范数是用误差平方和表示的损失函数,第二项是LASSO惩罚项,使得所有系数绝对值之和小于某个较小的正常数。
2. 通过坐标下降法求解
坐标下降法
基本思想:在每步迭代中沿一个坐标的方向进行搜索,通过循环使用不同的坐标方向来达到目标函数的局部极小值,属于非梯度优化方法。适用于线性回归模型求解,可广泛用于不可导的优化问题。
具体过程:
假设目标函数为
- 选取
的初始值; - 在每轮迭代中:
固定 ,将 当作自变量,最小化 ,得到 ;
将 代入目标函数,同时固定 ,最小化 ,得到 ;
将 代入目标函数,同时固定 ,最小化 ,得到 ;
……
得到本轮迭代的一组值 ;
若满足迭代终止条件则终止迭代,否则进行下一轮迭代。
LASSO线性回归求解过程
将目标函数(1)对
其中
求解上式时分情况讨论,可以得到
当
当
当
该解析解也可以用软阈值函数表示
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); #模型筛选出来的变量所在位置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码