LASSO逻辑回归模型
LASSO逻辑回归模型
-
主要用于对样本分类,假设样本个数是
,变量个数是 , ,因变量 是0-1变量,表示样本的两种分类,比如取值1表示样本是diseased,取值0表示样本是正常样本。 -
数据
- 因变量
- 特征矩阵
- 因变量
-
假设
-
建立逻辑回归模型
1. LASSO逻辑回归模型的求解过程
-
使用极大似然估计法估计参数
,似然函数为: -
对似然函数取负对数得到损失函数:
-
通过牛顿-拉普森算法将最小化上面的损失函数
转化为求解线性回归的重加权最小二乘问题-
将
在 的当前迭代值 处进行二阶泰勒展开,得到:其中,
是 在 处的一阶导数, 是 在 处的Hessian矩阵。 -
令
的梯度为0: -
得到
的迭代公式: -
令
,则 , 可以看作新的因变量 与数据矩阵 的线性回归加权最小二乘的解,因此,可以通过坐标下降法求解。
-
-
通过坐标下降法求解具有LASSO惩罚项的加权最小二乘问题
-
此时的目标函数为:
-
令梯度为0:
-
分情况讨论
的迭代公式如果
,有如果
,有 当且仅当
-
2. 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+1,'binomial',options);
CVerr = cvglmnet(x,y+1,fold,[],'class','binomial',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 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构