【回归算法】广义线性模型(GLM)详解
(2026最新实战版,面试 + 项目 + 论文必备)
广义线性模型(Generalized Linear Model,简称 GLM)是统计学和机器学习中最重要的一类回归框架。它由 John Nelder 和 Robert Wedderburn 于1972年提出,核心思想是:把普通线性回归扩展到响应变量不服从正态分布的场景,统一了线性回归、Logistic回归、Poisson回归、Gamma回归等几乎所有经典回归模型。
一句话总结:GLM = 指数族分布 + 链接函数 + 线性预测器。
一、为什么需要 GLM?(动机)
普通线性回归(OLS)要求:
- 响应变量 Y ~ 正态分布
- 方差恒定(同方差)
- 线性关系:E(Y) = Xβ
现实中大量数据不满足这些:
- 二分类(是/否)→ 伯努利/二项分布
- 计数数据(0,1,2…)→ 泊松分布
- 右偏正数(时间、金额)→ Gamma分布
- 比例数据(0~1)→ Beta分布
GLM 完美解决这些问题,同时保持了可解释性(系数直接有意义)和统一的估计框架。
二、GLM 的三大核心组件(必背!)
任何 GLM 都由以下三部分组成:
- 随机成分(Random Component)
响应变量 Y 服从指数族分布(Exponential Family)。
指数族包括:正态、伯努利、二项、泊松、Gamma、逆高斯、负二项等。 - 系统成分(Systematic Component)
线性预测器:
η = Xβ = β₀ + β₁x₁ + … + βₚxₚ
(和普通线性回归完全一样) - 链接函数(Link Function)
把均值 μ = E(Y) 和线性预测器 η 连接起来:
g(μ) = η
或反之:μ = g⁻¹(η)(逆链接函数)
最关键性质:当使用规范链接(Canonical Link)时,数学性质最好(充分统计量、MLE 更稳定)。
三、常见 GLM 模型一览表(2026 面试必备)
| 模型名称 | 响应变量分布 | 规范链接函数 g(μ) | 逆链接 μ = g⁻¹(η) | 典型应用场景 | 系数解释(exp(β)) |
|---|---|---|---|---|---|
| 线性回归 | 正态(Gaussian) | Identity (μ) | η | 连续数值预测(如房价) | 每增加1单位x,y平均增加β |
| Logistic回归 | 二项/伯努利 | Logit (log(μ/(1-μ))) | 1/(1+e⁻η) | 二分类(点击/不点击) | Odds 乘以 exp(β) |
| Poisson回归 | 泊松 | Log (log μ) | exp(η) | 计数数据(每日订单量) | 期望计数乘以 exp(β) |
| Gamma回归 | Gamma | Inverse (1/μ) | 1/η | 正偏连续(如保险理赔额) | — |
| 负二项回归 | 负二项 | Log | exp(η) | 过离散计数(方差>均值) | 同 Poisson |
| 准泊松/准似然 | —(准似然) | Log | exp(η) | 方差不等于均值时 | — |
四、链接函数常见种类
- 规范链接(推荐首选):
正态 → Identity
二项 → Logit
泊松 → Log
Gamma → Inverse - 其他常用链接:
Probit(二分类)、Cloglog、Log-log、Sqrt(Poisson 方差稳定)等。
五、参数估计:极大似然 + IRLS 算法
GLM 使用极大似然估计(MLE)求解 β。
因为没有闭式解,采用迭代重加权最小二乘(Iteratively Reweighted Least Squares, IRLS):
- 初始化 β
- 计算当前 μ、权重 W = Var(Y)⁻¹ × (dμ/dη)²
- 加权最小二乘:β_new = (XᵀWX)⁻¹ Xᵀ W z (z 为工作响应变量)
- 迭代直到收敛
Python 中 statsmodels 自动实现 IRLS。
六、Python 实战代码(直接可运行)
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# 1. Logistic回归(二分类)
df = pd.read_csv('data.csv')
model_logit = smf.glm('y_binary ~ x1 + x2 + x3',
data=df,
family=sm.families.Binomial(link=sm.families.links.Logit()))
result_logit = model_logit.fit()
print(result_logit.summary())
# 2. Poisson回归(计数)
model_poisson = smf.glm('count ~ age + income + treatment',
data=df,
family=sm.families.Poisson())
result_poisson = model_poisson.fit()
print(result_poisson.summary())
# 3. Gamma回归(正偏连续)
model_gamma = smf.glm('cost ~ age + severity',
data=df,
family=sm.families.Gamma(link=sm.families.links.Inverse()))
result_gamma = model_gamma.fit()
print(result_gamma.summary())
sklearn 中只有 LogisticRegression(其实就是 GLM 的特例),更完整用 statsmodels 或 glmnet-python。
七、GLM 的优缺点(项目选型必看)
优点:
- 统一框架,模型可解释性极强(系数有明确业务含义)
- 支持非正态响应变量
- 天然支持置信区间、p值、偏差检验
- 计算效率高(IRLS 收敛快)
缺点:
- 仍假设均值与方差有特定关系(Poisson 要求方差=均值)
- 对极端值/离群点敏感
- 链接函数选择需要领域知识
- 高维数据时需正则化(L1/L2)
适用场景(2026主流):
- 风控评分卡(Logistic)
- 保险定价、理赔预测(Poisson + Gamma 双模型)
- 电商转化率、点击率建模
- 医疗计数数据(发病次数)
- 可解释 AI(XAI)中作为 baseline
八、GLM vs 普通线性回归(OLS)
| 维度 | 普通线性回归 (OLS) | 广义线性模型 (GLM) |
|---|---|---|
| 响应分布 | 必须正态 | 任意指数族 |
| 方差 | 恒定 | 可随均值变化(Var(μ)) |
| 链接函数 | 只能 Identity | 可选多种 |
| 预测范围 | (-∞, +∞) | 受链接函数约束(0-1、>0 等) |
| 估计方法 | 最小二乘 | 极大似然(IRLS) |
| 可解释性 | 高 | 更高(尤其是规范链接) |
九、2026年高频面试/论文问题
- GLM 的三大组件是什么?规范链接有什么好处?
- 为什么 Logistic 回归用 logit 链接?Probit 呢?
- Poisson 回归中如果数据过离散(方差>>均值)怎么办?(→ 负二项)
- IRLS 算法本质是什么?
- GLM 如何做变量选择?(逐步回归、Lasso GLM)
- GLM 与 GAM(广义加性模型)的区别?
掌握 GLM,你就真正理解了“回归”这个大家族的本质——从线性回归到深度学习中的 GLM 层(最后一层 softmax 其实就是 GLM)。
你现在是用 GLM 处理二分类、计数数据、保险定价,还是在准备面试/论文?
告诉我具体业务场景或想深挖的部分(推导、代码、过离散处理、与机器学习对比),我立刻给你针对性模板或完整案例!