别再死记硬背了!用GLM(广义线性模型)统一理解线性回归、逻辑回归和Softmax
别再死记硬背了!用GLM(广义线性模型)统一理解线性回归、逻辑回归和Softmax
当你第一次接触机器学习时,线性回归、逻辑回归这些名词可能让你感到既熟悉又陌生。熟悉是因为它们频繁出现在各种教程和论文中,陌生则是因为每个模型似乎都有自己的一套数学表达和推导过程。今天,我要告诉你一个好消息:这些看似独立的模型,其实都可以用一个统一的框架来理解——那就是广义线性模型(GLMs)。
想象一下,你面前摆着乐高积木。不同的模型就像是用相同的基础积木块搭建出的不同造型。GLM就是那个能让你看清这些"积木块"如何组合的魔法眼镜。通过这篇文章,你将学会如何用GLM的视角,像搭积木一样自由地在不同模型间切换,而不再需要死记硬背各种公式。
1. 理解GLM的核心组件:指数族分布
所有GLM的基础都建立在 指数族分布 这个概念上。简单来说,指数族是一大类概率分布的集合,它们都可以用相同的数学形式来表达。这就像是一个大家族,虽然成员各有特点,但都流着相同的"血液"。
指数族分布的标准形式可以表示为:
p(y; η) = b(y)exp(ηᵀT(y) - a(η))
其中:
- η 是自然参数(natural parameter)
- T(y) 是充分统计量(sufficient statistic)
- a(η) 是对数配分函数(log partition function)
- b(y) 是基础度量(base measure)
为什么这个形式如此重要? 因为它揭示了不同分布之间的内在联系。让我们看几个常见分布如何融入这个框架:
1.1 伯努利分布(逻辑回归的基础)
伯努利分布描述了二分类问题中的概率分布。通过一些数学变换,我们可以将其表示为指数族形式:
p(y; φ) = φʸ(1-φ)¹⁻ʸ
= exp(y log(φ/(1-φ)) + log(1-φ))
对比标准形式,我们可以识别出:
- η = log(φ/(1-φ)) (这就是logit函数)
- T(y) = y
- a(η) = -log(1-φ) = log(1+e^η)
- b(y) = 1
1.2 高斯分布(线性回归的基础)
对于方差为1的高斯分布N(μ,1),其概率密度函数可以表示为:
p(y; μ) = (1/√(2π)) exp(-(y-μ)²/2)
= (1/√(2π)) exp(-y²/2) exp(μy - μ²/2)
对应的指数族参数为:
- η = μ
- T(y) = y
- a(η) = μ²/2 = η²/2
- b(y) = (1/√(2π)) exp(-y²/2)
1.3 其他常见分布
类似的,泊松分布(适用于计数数据)、伽马分布(适用于正数数据)等都可以表示为指数族形式。这种统一的表达方式正是GLM强大之处——它为我们提供了一个通用的分析框架。
2. GLM的三要素:连接函数、响应分布和线性预测器
理解了指数族分布后,GLM可以看作是由三个关键组件构成的:
- 随机成分(Random Component) :响应变量y的分布,必须来自指数族
- 系统成分(Systematic Component) :线性预测器η = θᵀx
- 连接函数(Link Function) :g(μ) = η,其中μ = E[y|x;θ]
连接函数 是GLM中最具魔力的部分,它决定了如何将线性预测器的输出η与响应变量的期望μ联系起来。不同的连接函数会导出不同的模型:
| 分布类型 | 连接函数 | 逆连接函数 | 对应模型 |
|---|---|---|---|
| 高斯分布 | 恒等函数 | 恒等函数 | 线性回归 |
| 伯努利分布 | Logit函数 | Logistic函数 | 逻辑回归 |
| 泊松分布 | 对数函数 | 指数函数 | 泊松回归 |
提示:选择连接函数时,一个实用的原则是确保预测值落在响应变量允许的范围内。例如,对于二分类问题,我们需要预测值在(0,1)之间,因此使用logit连接函数。
3. 从GLM推导常见模型
现在,让我们看看如何从GLM框架中"生长"出各种熟悉的模型。
3.1 线性回归:恒等连接的高斯响应
假设我们选择:
- 响应分布:高斯分布
- 连接函数:恒等函数 g(μ) = μ
根据GLM框架:
- η = θᵀx
- 由于g(μ) = η ⇒ μ = η
- 对于高斯分布,μ就是分布的均值
因此,我们得到:
E[y|x] = μ = η = θᵀx
这正是线性回归模型的形式!
3.2 逻辑回归:Logit连接的伯努利响应
对于二分类问题,我们选择:
- 响应分布:伯努利分布
- 连接函数:logit函数 g(μ) = log(μ/(1-μ))
推导过程:
- η = θᵀx
- log(μ/(1-μ)) = η ⇒ μ = 1/(1+e⁻η)
因此,预测函数为:
E[y|x] = μ = 1/(1+e⁻θᵀx)
这就是我们熟悉的逻辑回归模型。
3.3 Softmax回归:多分类的扩展
当输出有K个类别时,我们可以推广逻辑回归的思想,得到Softmax回归。这里的关键是:
- 响应变量y服从多项分布
- 使用多组参数θ₁,...,θ_{K-1}
- 连接函数是广义logit
对于第k类(k=1,...,K-1):
log(P(y=k)/P(y=K)) = θₖᵀx
通过softmax函数得到各类别的概率:
P(y=k) = e^{θₖᵀx} / (∑_{j=1}^K e^{θⱼᵀx})
4. 实战:用Python实现GLM
理论很重要,但实践才能让知识真正落地。让我们用Python的statsmodels库来演示GLM的应用。
4.1 线性回归实现
import statsmodels.api as sm
# 准备数据
X = sm.add_constant([[1,2], [2,4], [3,6]]) # 添加截距项
y = [3, 5, 7]
# 创建并拟合模型
glm_gaussian = sm.GLM(y, X, family=sm.families.Gaussian())
results = glm_gaussian.fit()
print(results.summary())
4.2 逻辑回归实现
import numpy as np
import statsmodels.api as sm
# 准备数据
X = sm.add_constant([[1], [2], [3], [4]])
y = [0, 0, 1, 1]
# 创建并拟合模型
glm_binomial = sm.GLM(y, X, family=sm.families.Binomial())
results = glm_binomial.fit()
print(results.summary())
4.3 模型选择与评估
在实际应用中,选择合适的响应分布和连接函数至关重要。以下是一些实用建议:
- 残差分析 :检查残差是否符合假设的分布
- AIC/BIC :比较不同模型的拟合优度
- 交叉验证 :评估模型的泛化能力
# 计算AIC
print(f"模型AIC: {results.aic:.2f}")
# 预测新数据
new_X = sm.add_constant([[5], [6]])
predictions = results.predict(new_X)
print(f"预测概率: {predictions}")
5. 超越基础:GLM的高级应用
掌握了GLM的基本原理后,你可以进一步探索这些高级主题:
5.1 正则化GLM
在高维数据中,可以加入L1/L2正则化防止过拟合:
from sklearn.linear_model import LogisticRegression
# L1正则化的逻辑回归
model = LogisticRegression(penalty='l1', solver='liblinear')
model.fit(X, y)
5.2 混合效应GLM
对于分层或分组数据,可以考虑混合效应模型:
import statsmodels.formula.api as smf
# 使用公式语法指定混合效应
glmm = smf.mixedlm("y ~ x1 + x2", data, groups=data["group"])
result = glmm.fit()
5.3 鲁棒GLM
当数据存在异常值时,可以使用鲁棒方法:
# 使用Huber损失函数
glm_robust = sm.GLM(y, X, family=sm.families.Gaussian(),
var_weights=robust_weights)
在实际项目中,我发现理解GLM的统一框架极大提高了工作效率。当遇到新的预测问题时,我不再需要从零开始学习新模型,而是可以基于对响应变量特性的理解,选择合适的分布和连接函数来构建定制化的GLM。这种思维方式比记忆特定模型的公式要有用得多。
更多推荐


所有评论(0)