【回归算法】广义线性模型(GLM)详解

【回归算法】广义线性模型(GLM)详解
(2026最新实战版,面试 + 项目 + 论文必备)

广义线性模型(Generalized Linear Model,简称 GLM)是统计学和机器学习中最重要的一类回归框架。它由 John NelderRobert Wedderburn 于1972年提出,核心思想是:把普通线性回归扩展到响应变量不服从正态分布的场景,统一了线性回归、Logistic回归、Poisson回归、Gamma回归等几乎所有经典回归模型。

一句话总结:GLM = 指数族分布 + 链接函数 + 线性预测器

一、为什么需要 GLM?(动机)

普通线性回归(OLS)要求:

  • 响应变量 Y ~ 正态分布
  • 方差恒定(同方差)
  • 线性关系:E(Y) = Xβ

现实中大量数据不满足这些:

  • 二分类(是/否)→ 伯努利/二项分布
  • 计数数据(0,1,2…)→ 泊松分布
  • 右偏正数(时间、金额)→ Gamma分布
  • 比例数据(0~1)→ Beta分布

GLM 完美解决这些问题,同时保持了可解释性(系数直接有意义)和统一的估计框架

二、GLM 的三大核心组件(必背!)

任何 GLM 都由以下三部分组成:

  1. 随机成分(Random Component)
    响应变量 Y 服从指数族分布(Exponential Family)。
    指数族包括:正态、伯努利、二项、泊松、Gamma、逆高斯、负二项等。
  2. 系统成分(Systematic Component)
    线性预测器:
    η = Xβ = β₀ + β₁x₁ + … + βₚxₚ
    (和普通线性回归完全一样)
  3. 链接函数(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回归GammaInverse (1/μ)1/η正偏连续(如保险理赔额)
负二项回归负二项Logexp(η)过离散计数(方差>均值)同 Poisson
准泊松/准似然—(准似然)Logexp(η)方差不等于均值时

四、链接函数常见种类

  • 规范链接(推荐首选):
    正态 → Identity
    二项 → Logit
    泊松 → Log
    Gamma → Inverse
  • 其他常用链接
    Probit(二分类)、Cloglog、Log-log、Sqrt(Poisson 方差稳定)等。

五、参数估计:极大似然 + IRLS 算法

GLM 使用极大似然估计(MLE)求解 β。
因为没有闭式解,采用迭代重加权最小二乘(Iteratively Reweighted Least Squares, IRLS)

  1. 初始化 β
  2. 计算当前 μ、权重 W = Var(Y)⁻¹ × (dμ/dη)²
  3. 加权最小二乘:β_new = (XᵀWX)⁻¹ Xᵀ W z (z 为工作响应变量)
  4. 迭代直到收敛

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 的特例),更完整用 statsmodelsglmnet-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年高频面试/论文问题

  1. GLM 的三大组件是什么?规范链接有什么好处?
  2. 为什么 Logistic 回归用 logit 链接?Probit 呢?
  3. Poisson 回归中如果数据过离散(方差>>均值)怎么办?(→ 负二项)
  4. IRLS 算法本质是什么?
  5. GLM 如何做变量选择?(逐步回归、Lasso GLM)
  6. GLM 与 GAM(广义加性模型)的区别?

掌握 GLM,你就真正理解了“回归”这个大家族的本质——从线性回归到深度学习中的 GLM 层(最后一层 softmax 其实就是 GLM)。

你现在是用 GLM 处理二分类计数数据保险定价,还是在准备面试/论文
告诉我具体业务场景或想深挖的部分(推导、代码、过离散处理、与机器学习对比),我立刻给你针对性模板或完整案例!

文章已创建 4791

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部