一 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 x x,使用参数 θ \theta θ 所定义的模型计算出 y y y,其本质是一个数理统计问题,不要把 x x x 和 y y y 看做两个数字,而把他们视为两个随机变量,那么回归就是在样本 x x x的条件下,得到 y y y 的条件概率分布 P ( y ∣ x ; θ ) P ( y | x; \theta) P(y∣x;θ),通过计算分布的期望 E ( y ∣ x ; θ ) E ( y | x; \theta ) E(y∣x;θ),就可以得到 y y y 的估计值。
我们注意到,上面的这段解释中存在一些有疑问的地方,比如:
- 只有样本的情况下, y y y 的条件概率分布 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 y y 的估计值呢?
- 参数 θ \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 ) =y T(y)=y; a ( η ) a(η) a(η)是对数分配函数(log partition function),而 a a a、 b b b 与 T T T 一般都是给定的,随着 η η η 的变化,会得到不同的分布。知道了分布的形式,第一个问题也就解决了,使用期望的计算公式,根据分布求期望;
-
定义 y y y 的估计值 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 x x的条件下,我们的目标是得到一个模型 h ( x ) ℎ(x) h(x)能预测出 T ( y ) T(y) T(y)的期望值;所以这个假设解决了我们的第二个问题;
-
定义线性预测算子,即广义线性模型中的线性因素,对 y y y相关的指数分布族的自然参数 η η η: η = θ T x η = θ^T x η=θTx,当 η η η是向量时,有 η i = θ i T x η_i=θ^T_ix ηi=θiTx,这个假设告诉了我们参数 θ \theta θ所定义的是什么模型,至于 θ \theta θ怎么求解——又有分布又有样本,极大似然估计是不是很合适?具体求解我们在后面的具体模型中再细说。
这这些假设条件下,我们对不同数据 x x x 得到的其实是不同的响应变量 y y y的分布(因为虽然 θ \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 y y的值域(预测目标)转换统一到了 linear predictor 的值域上,反之,link function 的反函数就把 linear predictor 直接映射到了预测目标 y y y, 反函数 g − 1 ( η ) = μ g^{−1}(η)=μ g−1(η)=μ 称为响应函数(response function),较常用的响应函数例如logistic(sigmoid)、softmax(都是 logit 的反函数)。
五 举例
广义线性模型是线性模型的推广,定义如下:给定响应变量 Y i Y_i Yi 服从指数族分布,有 g ( u i ) = X i T β g(u_i)=X_i^T \beta g(ui)=XiTβ , E ( Y i ∣ X i T ) = u i ( β ) E(Y_i| X_i^T)=u_i(\beta) E(Yi∣XiT)=ui(β) ,其中 g g g 为连接函数, X i T X_iT XiT 为自变量 .
对于一般线性模型,连接函数 g ( u ) = u g(u)=u g(u)=u ,对于逻辑回归模型,连接函数 g ( u ) = l o g u 1 − u g(u)=log\frac{u}{1−u} g(u)=log1−uu.
5.1 最小二乘线性回归(Ordinary Least Squares)的广义线性模型推导
5.2 逻辑回归的广义线性模型推导
参考链接
- https://www.jianshu.com/p/e5f5188e4c69
- https://zhuanlan.zhihu.com/p/156846889?from_voters_page=true