LASSO逻辑回归模型

LASSO逻辑回归模型

  • 主要用于对样本分类,假设样本个数是n,变量个数是ppn,因变量Y是0-1变量,表示样本的两种分类,比如取值1表示样本是diseased,取值0表示样本是正常样本。

  • 数据

    • 因变量Y=(Y1,Y2,,Yn)T
    • 特征矩阵X=(X1,X2,,Xp)=(X(1),X(2),,X(n))T
  • 假设YBernoulli(π)

  • 建立逻辑回归模型

    lnπi1πi=X(i)Tβ,i=1,2,,n

1. LASSO逻辑回归模型的求解过程

  • 使用极大似然估计法估计参数β,似然函数为:

    i=1nπiYi(1πi)(1Yi)

  • 对似然函数取负对数得到损失函数:

    l(β)=1ni=1n[Yiln(πi)+(1Yi)ln(1πi)]

  • 通过牛顿-拉普森算法将最小化上面的损失函数l(β)转化为求解线性回归的重加权最小二乘问题

    • l(β)β的当前迭代值β~处进行二阶泰勒展开,得到:

      lQ(β)=l(β~)+(ββ~)Tl(β~)+12(ββ~)TH(ββ~)

      其中,l(β~)=l(β)β|β=β~=1nXT(YΠ~)l(β)β~处的一阶导数,H=2l(β)ββT|β=β~=1nXTQXl(β)β~处的Hessian矩阵。

      Π~=[π~1π~2π~n]=[exp{X(1)Tβ~}1+exp{X(1)Tβ~}exp{X(2)Tβ~}1+exp{X(2)Tβ~}exp{X(n)Tβ~}1+exp{X(n)Tβ~}]

      Q=[q11000q22000qnn]=[π~1(1π~1)000π~2(1π~2)000π~n(1π~n)]=[exp{X(1)Tβ~}(1+exp{X(1)Tβ~})2000exp{X(2)Tβ~}(1+exp{X(2)Tβ~})2000exp{X(n)Tβ~}(1+exp{X(n)Tβ~})2]

    • lQ(β)的梯度为0:

      lQ(β)β=l(β~)+H(ββ~)=0

    • 得到β的迭代公式:

      β=(XTQX)1XT(YΠ~)+(XTQX)1XTQXβ~=(XTQX)1XTQ[Q1(YΠ~)+Xβ~]

    • Z=Q1(YΠ~)+Xβ~,则β=(XTQX)1XTQZβ可以看作新的因变量Z与数据矩阵X的线性回归加权最小二乘的解,因此,可以通过坐标下降法求解。

  • 通过坐标下降法求解具有LASSO惩罚项的加权最小二乘问题

    • 此时的目标函数为:

      L(β)=12ni=1nqii(ZiX(i)Tβ)2+λj=1p|βj|

    • 令梯度为0:

      L(β)βj=1ni=1nqiixij(Ziljpxilβl)+1ni=1nqiixij2βj+λsign(βj)=0

    • 分情况讨论βj的迭代公式

      如果βj>0,有βj=i=1nqiixij(Ziljpxilβl)nλi=1nqiixij2

      如果βj<0,有βj=i=1nqiixij(Ziljpxilβl)+nλi=1nqiixij2

      βj=0当且仅当nλ|i=1nqiixij(Ziljpxilβl)|

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);   #模型筛选出来的变量所在位置
posted @   木田心  阅读(229)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示