问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

广义线性模型(GLM)详解:从基础概念到实际应用

创作时间:
作者:
@小白创作中心

广义线性模型(GLM)详解:从基础概念到实际应用

引用
CSDN
1.
https://blog.csdn.net/u011026329/article/details/140615533

广义线性模型(Generalized Linear Models,GLM)是统计学和机器学习领域中一种非常重要的建模方法,它扩展了传统线性回归模型的能力,能够处理各种不同类型的数据和响应变量。本文将从GLM的提出背景开始,逐步深入到其核心假设和结构,并通过具体的例子和代码演示来帮助读者理解。

一 GLM概述

广义线性模型(Generalized Linear Models,GLM)由 Nelder 和 Wedderburn 于 1972年提出和发表 ,旨在解决普通线性回归模型无法处理因变量离散,并发展能够解决非正态因变量的回归建模任务的建模方法。

在广义线性模型的框架下,因变量不再要求连续、正态,当然自变量更加没有特殊的要求。能够对正态分布、二项分布、泊松分布、Gamma分布等随机因变量进行建模.

通俗来说,广义线性模型是普通线性模型的普遍化,适用性更广、更抽象的线性模型。

按照我们编程的思路来想,广义线性模型GLM就像是抽象出来的一个抽象类,这个类定义了抽象的假设方法、属性等,在面对具体问题时,我们不能用这个抽象类来直接解决问题的,需要针对场景来实现一个可实例化的类,比如面对二分类问题我们继承GLM类,实现一个逻辑回归类,用逻辑回归来解决具体问题。广义线性模型GLM并不是这个类的源头,再向上还可以抽象出广义线性混合模型GLMM类,再向上抽象还有投影寻踪回归PPR类…估计这个分支抽象到最后就成了“模型”类。(当然,比如线性回归也并不是说只能抽象成GLM,也可能抽象成广义相加模型(GAM),这些方法本文不做详述)

二 GLM分类

广义线性模型(Generalized Linear Models, GLMs)是一种扩展了标准线性回归模型的方法,它可以用来处理各种不同类型的数据和响应变量。GLMs 的核心概念是将线性预测器与响应变量的均值通过一个链接函数(link function)连接起来,并假设响应变量服从某个特定的概率分布。下面是一些广义线性模型的常见分类及其应用领域:

线性回归 (Linear Regression)

链接函数:恒等函数(Identity)

概率分布:正态分布

应用场景:连续型数据的预测,如预测收入、温度等。

逻辑回归 (Logistic Regression)

  • 链接函数:logit函数(对数几率函数)

  • 概率分布:伯努利分布(二分类问题)或多项式分布(多分类问题)

  • 应用场景:二分类或多分类问题,如预测病人是否患有某种疾病、邮件是否为垃圾邮件等。

泊松回归 (Poisson Regression)

  • 链接函数:自然对数函数

  • 概率分布:泊松分布

  • 应用场景:计数数据的建模,如网站每天的访问次数、某事件发生的次数等。

Softmax回归 (Multinomial Logistic Regression)

  • 链接函数:Softmax函数

  • 概率分布:多项式分布

  • 应用场景**:多分类问题,其中响应变量有三个或更多互斥的类别

多项式回归 (Polynomial Regression)

  • 链接函数:恒等函数

  • 概率分布:正态分布注意:虽然多项式回归在技术上不是GLMs的标准成员,但它可以通过在特征中加入高阶项来模拟非线性关系,从而在某种程度上与GLMs的概念相关联。

三 为什么需要广义线性模型

线性模型的预测是直线(或超平面)。这使得它们擅长外推。这是一些更复杂的算法(例如梯度提升和随机森林)不擅长的事情。

请看下面线性回归如何如预期地进行外推:


from sklearn.linear_model import LinearRegression  

x = [[1], [2], [3]]  

y = [10, 20, 30]  

m = LinearRegression()  

m.fit(x, y)  

m.predict([[10]]) # 返回 100,如预期  

然而,基于树的模型无法进行外推:


from sklearn.ensemble import GradientBoostingRegressor  

x = [[1], [2], [3]]  

y = [10, 20, 30]  

m = GradientBoostingRegressor()  

m.fit(x, y)  

m.predict([[10]]) # 返回 30!  

尽管如此,外推有时可能是愚蠢的。

以这个例子为例:一个商品被售出的机会取决于其在网站主页上的位置。假设,主页上有20个插槽用于列出商品。我们根据插槽位置计算了商品的销售频率。位于第7位的商品, 50%的情况下会被售出。位于第4位的商品, 40%的情况下会被售出,位于第9位的商品, 30%的情况下会被售出。现在我们使用这些信息来估计第1位和第 位商品的销售机会。


from sklearn.linear_model import LinearRegression  

x = [[7],[8],[9]]  

y = [0.50, 0.40, 0.30]  

m = LinearRegression()  

m.fit(x, y)  

m.predict([[1], [20]]) # 返回 110% 和 -80%  

正如你所看到的,我们得到了不现实的预测结果。一个位置导致商品售出的机会为 110,而另一个位置的商品售出机会为负值。我们都知道概率应该在 0和 1之间。我们该怎么办呢?

所有统计学家的钉子上都有一把锤子:转换。如果你的模型不能很好地拟合数据,就用一些变换来转换模型的输入或输出,比如把数据转换成对数刻度,然后希望你的模型能起作用,例如使用逻辑回归模型进行拟合数据。

四 GLM理解

4.1 GLM假设

要理解GLM,需要我们站在概率论的视角下来看待回归问题。回归的目的是通过给定的自变量x xx,使用参数θ \thetaθ所定义的模型计算出y yy,其本质是一个数理统计问题,不要把x xx和y yy看做两个数字,而把他们视为两个随机变量,那么回归就是在样本x xx的条件下,得到y yy的条件概率分布P ( y ∣ x ; θ ) P ( y | x; \theta)P(y∣x;θ),通过计算分布的期望E ( y ∣ x ; θ ) E ( y | x; \theta )E(y∣x;θ),就可以得到y yy的估计值。

我们注意到,上面的这段解释中存在一些有疑问的地方,比如:

  • 只有样本的情况下,y yy的条件概率分布P ( y ∣ x ; θ ) P ( y | x; \theta)P(y∣x;θ)和期望E ( y ∣ x ; θ ) E ( y | x; \theta )E(y∣x;θ)怎么计算呢?

  • 为什么E ( y ∣ x ; θ ) E ( y | x; \theta )E(y∣x;θ)就是y yy的估计值呢?

  • 参数θ \thetaθ所定义的是什么模型,θ \thetaθ怎么求出来呢?

广义线性模型GLM就针对这些问题做出了以下三点假设:

定义 y 的估值概率分布属于某种指数分布族,y ∣ x , θ ∼ E x p o n e n t i a l F a m i l y ( η ) y|x,θ∼ExponentialFamily(η)y∣x,θ∼ExponentialFamily(η),在给定 𝑥 的条件下,假设随机变量 𝑦 服从某个指数族分布。指数分布家族是指可以表示为指数形式的概率分布,指数分布的形式如下:

其中η ηη是分布的自然参数,T ( y ) T ( y )T(y)是充分统计量(sufficient statistic, 能为相应分布提供足够信息的统计量),一般情况下T ( y ) = y T ( y ) =yT(y)=y;a ( η ) a(η)a(η)是对数分配函数(log partition function),而a aa、b bb与T TT一般都是给定的,随着η ηη的变化,会得到不同的分布。知道了分布的形式,第一个问题也就解决了,使用期望的计算公式,根据分布求期望;

定义y yy的估计值h ( x , θ ) = E ( T ( y ) ∣ x , θ ) = E ( y ∣ x , θ ) h ( x , θ ) = E ( T ( y ) | x , θ )=E ( y | x , θ )h(x,θ)=E(T(y)∣x,θ)=E(y∣x,θ), 在给定x xx的条件下,我们的目标是得到一个模型h ( x ) ℎ(x)h(x)能预测出T ( y ) T(y)T(y)的期望值;所以这个假设解决了我们的第二个问题;

定义线性预测算子,即广义线性模型中的线性因素,对y yy相关的指数分布族的自然参数η ηη:η = θ T x η = θ^T xη=θTx,当η ηη是向量时,有η i = θ i T x η_i=θ^T_ixηi =θiT x,这个假设告诉了我们参数θ \thetaθ所定义的是什么模型,至于θ \thetaθ怎么求解——又有分布又有样本,极大似然估计是不是很合适?具体求解我们在后面的具体模型中再细说。

这这些假设条件下,我们对不同数据x xx得到的其实是不同的响应变量y yy的分布(因为虽然θ \thetaθ没变,但分布y ∣ x , θ ∼ E x p o n e n t i a l F a m i l y ( η ) y|x,θ∼ExponentialFamily(η)y∣x,θ∼ExponentialFamily(η)的参数η = θ T x η = θ^T xη=θTx发生了改变),不同分布的期望不同,即得到不同的估计值。这就是GLM的基本逻辑,下面我们来了解一下GLM的结构。

4.2 GLM的结构及推导

广义线性模型GLM包含3个部分: Random Component(随机成分)、System Component(系统成分) 和 Link Function(联结函数),这也是回归问题中普遍都要有的三个部分。

System Component(系统成分)

系统成分是给定的回归中,用来解释研究现象的部分,好像很抽象,我理解的就是System Component描述了这个问题的形态,比如在GLM中,系统成分是linear predictor(线性预测算子),这里对应着我们上面的第三点假设 :η = θ T x η = θ^T xη=θTx。

Random Component(随机成分)

随机成分则是用来定义待预测的未知的形态,即响应变量的形态。在GLM中,就是指数分布族模型,对应着我们上面假设中的第一点:y ∣ x , θ ∼ E x p o n e n t i a l F a m i l y ( η ) y|x,θ∼ExponentialFamily(η)y∣x,θ∼ExponentialFamily(η)。

指数族分布的例子:

Link Function(联结函数)

联结函数,顾名思义,它描述了随机成分与系统成分之间的关系,在GLM中,联结函数连接了响应变量的期望(也就是我们的预测目标)与linear predictor,那他是怎么连接的呢?怎么理解这个事呢?下面我们来推导一下

因此可以说:联结函数连接了响应变量的期望(也就是我们的预测目标)与linear predictor。实际上, link function 把原始y yy的值域(预测目标)转换统一到了 linear predictor 的值域上,反之,link function 的反函数就把 linear predictor 直接映射到了预测目标y yy, 反函数g − 1 ( η ) = μ g^{−1}(η)=μg−1(η)=μ称为响应函数(response function),较常用的响应函数例如logistic(sigmoid)、softmax(都是 logit 的反函数)。

五 举例

广义线性模型是线性模型的推广,定义如下:给定响应变量Y i Y_iYi 服从指数族分布,有g ( u i ) = X i T β g(u_i)=X_i^T \betag(ui )=XiT β, E ( Y i ∣ X i T ) = u i ( β ) E(Y_i| X_i^T)=u_i(\beta)E(Yi ∣XiT )=ui (β),其中g gg为连接函数,X i T X_iTXi T为自变量 .

对于一般线性模型,连接函数g ( u ) = u g(u)=ug(u)=u,对于逻辑回归模型,连接函数g ( u ) = l o g ⁡ u 1 − u g(u)=log⁡\frac{u}{1−u}g(u)=log⁡1−uu .

5.1 最小二乘线性回归(Ordinary Least Squares)的广义线性模型推导

5.2 逻辑回归的广义线性模型推导

参考链接

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号