别再死记硬背了!用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可以看作是由三个关键组件构成的:

  1. 随机成分(Random Component) :响应变量y的分布,必须来自指数族
  2. 系统成分(Systematic Component) :线性预测器η = θᵀx
  3. 连接函数(Link Function) :g(μ) = η,其中μ = E[y|x;θ]

连接函数 是GLM中最具魔力的部分,它决定了如何将线性预测器的输出η与响应变量的期望μ联系起来。不同的连接函数会导出不同的模型:

分布类型 连接函数 逆连接函数 对应模型
高斯分布 恒等函数 恒等函数 线性回归
伯努利分布 Logit函数 Logistic函数 逻辑回归
泊松分布 对数函数 指数函数 泊松回归

提示:选择连接函数时,一个实用的原则是确保预测值落在响应变量允许的范围内。例如,对于二分类问题,我们需要预测值在(0,1)之间,因此使用logit连接函数。

3. 从GLM推导常见模型

现在,让我们看看如何从GLM框架中"生长"出各种熟悉的模型。

3.1 线性回归:恒等连接的高斯响应

假设我们选择:

  • 响应分布:高斯分布
  • 连接函数:恒等函数 g(μ) = μ

根据GLM框架:

  1. η = θᵀx
  2. 由于g(μ) = η ⇒ μ = η
  3. 对于高斯分布,μ就是分布的均值

因此,我们得到:

E[y|x] = μ = η = θᵀx

这正是线性回归模型的形式!

3.2 逻辑回归:Logit连接的伯努利响应

对于二分类问题,我们选择:

  • 响应分布:伯努利分布
  • 连接函数:logit函数 g(μ) = log(μ/(1-μ))

推导过程:

  1. η = θᵀx
  2. log(μ/(1-μ)) = η ⇒ μ = 1/(1+e⁻η)

因此,预测函数为:

E[y|x] = μ = 1/(1+e⁻θᵀx)

这就是我们熟悉的逻辑回归模型。

3.3 Softmax回归:多分类的扩展

当输出有K个类别时,我们可以推广逻辑回归的思想,得到Softmax回归。这里的关键是:

  1. 响应变量y服从多项分布
  2. 使用多组参数θ₁,...,θ_{K-1}
  3. 连接函数是广义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。这种思维方式比记忆特定模型的公式要有用得多。

更多推荐