📑 查看全课大纲(第 8 / 20 节)

贝叶斯判别与Fisher线性判别

约 66 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 多元统计分析

在上一讲的距离判别法中,我们仅依据样本与总体均值的马氏距离分类,忽略了两个关键现实因素:不同总体的先验概率可能不同,错判到不同类别的损失可能不等。本节课将介绍两种更贴近实际的判别方法——贝叶斯判别与Fisher判别,学完你将掌握先验知识与错判损失的融入方法,理解线性投影实现类别最优分离的核心思想。

💡 核心导读

  • 贝叶斯判别:基于贝叶斯框架,引入先验概率与错判损失,以最小化总平均损失为目标。
  • Fisher判别:寻找最优投影方向,最大化类间差异、最小化类内差异,实现高维数据降维分类。
  • 线性联系:正态总体、等协方差假设下,两种方法均可导出线性判别函数,与距离判别内在统一。
  • 实战实现:基于Python的numpyscikit-learn库实现Fisher投影向量计算与验证。
  • 方法对比:理解三种判别方法的假设、目标与适用场景。

贝叶斯判别法

基本思想与问题设定

贝叶斯判别法源于贝叶斯统计学,核心是利用先验信息进行统计推断,将历史数据、专家经验等纳入分析。 距离判别法存在两个明显不足:

  1. 未考虑先验概率:如疾病诊断中,常见病的患病概率远高于罕见病,医生往往先考虑常见病,这就是先验概率的应用。
  2. 未考虑错判损失差异:如信用卡风控中,把坏用户误判为好用户的损失远高于反向错判,两类错判代价不对等。

贝叶斯判别法正是为弥补这些不足提出的,其基本思想是:已知各类总体的先验概率与错判损失,寻找样本空间的划分规则,使得错判造成的总平均损失最小

问题形式化: 设有 kk 个总体 G1,G2,,GkG_1, G_2, \dots, G_k,概率密度函数为 f1(x),f2(x),,fk(x)f_1(\mathbf{x}), f_2(\mathbf{x}), \dots, f_k(\mathbf{x}),先验概率为 q1,q2,,qkq_1, q_2, \dots, q_k,满足 qi0q_i \ge 0i=1kqi=1\sum_{i=1}^k q_i = 1。 定义错判损失函数 C(ji)C(j|i):原本属于 GiG_i 的样本被错判为 GjG_j 的损失,显然 C(ii)=0C(i|i) = 0。 我们的目标是将 pp 维样本空间 Rp\mathbb{R}^p 划分为 kk 个互不相交的区域 R1,R2,,RkR_1, R_2, \dots, R_kR1Rk=RpR_1 \cup \dots \cup R_k = \mathbb{R}^p),构成判别规则:若 xRj\mathbf{x} \in R_j,则判其来自 GjG_j。我们需要找到最优划分,使得总平均损失最小。

总平均损失与最优划分

在规则 RR 下,将 GiG_i 的样本错判为 GjG_j 的概率为: P(ji,R)=Rjfi(x)dxP(j|i, R) = \int_{R_j} f_i(\mathbf{x}) d\mathbf{x}

对于来自 GiG_i 的样本,判别的平均损失为: r(i,R)=j=1kC(ji)P(ji,R)=j=1kC(ji)Rjfi(x)dxr(i, R) = \sum_{j=1}^k C(j|i) P(j|i, R) = \sum_{j=1}^k C(j|i) \int_{R_j} f_i(\mathbf{x}) d\mathbf{x}

结合先验概率,总平均损失为: g(R)=i=1kqir(i,R)=i=1kj=1kqiC(ji)Rjfi(x)dxg(R) = \sum_{i=1}^k q_i \cdot r(i, R) = \sum_{i=1}^k \sum_{j=1}^k q_i C(j|i) \int_{R_j} f_i(\mathbf{x}) d\mathbf{x}

交换求和与积分顺序,可重写为: g(R)=j=1kRj[i=1kqiC(ji)fi(x)]dx=j=1kRjhj(x)dxg(R) = \sum_{j=1}^k \int_{R_j} \left[ \sum_{i=1}^k q_i C(j|i) f_i(\mathbf{x}) \right] d\mathbf{x} = \sum_{j=1}^k \int_{R_j} h_j(\mathbf{x}) d\mathbf{x} 其中 hj(x)=i=1kqiC(ji)fi(x)h_j(\mathbf{x}) = \sum_{i=1}^k q_i C(j|i) f_i(\mathbf{x}),表示将样本 x\mathbf{x} 判为 GjG_j 的加权平均损失。

贝叶斯最优解:使总平均损失最小的划分规则为: Ri={xRphi(x)=min1jkhj(x)},i=1,2,,kR_i = \{ \mathbf{x} \in \mathbb{R}^p \mid h_i(\mathbf{x}) = \min_{1 \le j \le k} h_j(\mathbf{x}) \}, \quad i=1,2,\dots,k 即样本判给 hj(x)h_j(\mathbf{x}) 最小的类别。

两总体情形与正态假设下的简化

考虑 k=2k=2 的情形,判别规则简化为:

  • h1(x)h2(x)h_1(\mathbf{x}) \le h_2(\mathbf{x}),判 xG1\mathbf{x} \in G_1
  • h1(x)>h2(x)h_1(\mathbf{x}) > h_2(\mathbf{x}),判 xG2\mathbf{x} \in G_2

代入 hj(x)h_j(\mathbf{x}) 整理,令 V(x)=f1(x)f2(x)V(\mathbf{x}) = \frac{f_1(\mathbf{x})}{f_2(\mathbf{x})}d=q2C(12)q1C(21)d = \frac{q_2 C(1|2)}{q_1 C(2|1)},则等价规则为: {xG1,若 V(x)dxG2,若 V(x)<d\begin{cases} \mathbf{x} \in G_1, & \text{若 } V(\mathbf{x}) \ge d \\ \mathbf{x} \in G_2, & \text{若 } V(\mathbf{x}) < d \end{cases}

进一步假设两总体均服从 pp 维正态分布,且协方差矩阵相同,即 G1:Np(μ1,Σ),G2:Np(μ2,Σ)G_1: N_p(\boldsymbol{\mu}_1, \Sigma), G_2: N_p(\boldsymbol{\mu}_2, \Sigma),则密度比可简化为: V(x)=exp{W(x)}V(\mathbf{x}) = \exp\left\{ W(\mathbf{x}) \right\} 其中 W(x)W(\mathbf{x}) 正是距离判别中的线性判别函数: W(x)=(xμ1+μ22)Σ1(μ1μ2)W(\mathbf{x}) = \left( \mathbf{x} - \frac{\boldsymbol{\mu}_1 + \boldsymbol{\mu}_2}{2} \right)^\top \Sigma^{-1} (\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2)

此时贝叶斯判别规则变为: {xG1,若 W(x)lndxG2,若 W(x)<lnd\begin{cases} \mathbf{x} \in G_1, & \text{若 } W(\mathbf{x}) \ge \ln d \\ \mathbf{x} \in G_2, & \text{若 } W(\mathbf{x}) < \ln d \end{cases}

与距离判别的联系:距离判别阈值为 00,贝叶斯判别阈值为 lnd\ln d。当先验概率相等(q1=q2q_1=q_2)且错判损失相等(C(21)=C(12)C(2|1)=C(1|2))时,d=1d=1lnd=0\ln d=0,贝叶斯判别退化为距离判别,即距离判别是贝叶斯判别的特例。

贝叶斯判别的评价

优点:理论完备,融合先验概率与错判损失,更贴合实际决策;正态等协方差假设下可简化为线性判别函数,计算高效。 局限:先验概率与错判损失难以准确估计;需假设总体分布形式;多总体场景计算量较大。实践中若先验与损失未知,常假设二者相等,此时退化为距离判别。

Fisher判别法

基本思想

Fisher判别法(又称线性判别分析,LDA)由R.A. Fisher于1936年提出,核心思想与PCA类似但目标不同:PCA找方差最大的投影方向,Fisher判别则寻找最优投影方向,使得投影后类间差异最大、类内差异最小。 具体做法是将 pp 维样本 x\mathbf{x} 投影为一维标量 y=uxy = \mathbf{u}^\top \mathbf{x},通过优化方向 u\mathbf{u} 实现类别最优分离,再在投影空间中设置阈值完成分类。

两总体Fisher判别

设有两个总体 G1G_1G2G_2,均值向量和协方差矩阵分别为 μ1,Σ1\boldsymbol{\mu}_1, \Sigma_1μ2,Σ2\boldsymbol{\mu}_2, \Sigma_2,考虑线性投影 y=uxy = \mathbf{u}^\top \mathbf{x}

投影后两类的均值为: μ~1=uμ1,μ~2=uμ2\tilde{\mu}_1 = \mathbf{u}^\top \boldsymbol{\mu}_1, \quad \tilde{\mu}_2 = \mathbf{u}^\top \boldsymbol{\mu}_2 方差为: σ~12=uΣ1u,σ~22=uΣ2u\tilde{\sigma}_1^2 = \mathbf{u}^\top \Sigma_1 \mathbf{u}, \quad \tilde{\sigma}_2^2 = \mathbf{u}^\top \Sigma_2 \mathbf{u}

Fisher判别希望均值差尽可能大、方差和尽可能小,因此构造目标函数(广义瑞利商): J(u)=(μ~1μ~2)2σ~12+σ~22=[u(μ1μ2)]2u(Σ1+Σ2)uJ(\mathbf{u}) = \frac{(\tilde{\mu}_1 - \tilde{\mu}_2)^2}{\tilde{\sigma}_1^2 + \tilde{\sigma}_2^2} = \frac{[\mathbf{u}^\top (\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2)]^2}{\mathbf{u}^\top (\Sigma_1 + \Sigma_2) \mathbf{u}} 我们的目标是找到 u\mathbf{u} 使得 J(u)J(\mathbf{u}) 最大化。

等协方差假设:若 Σ1=Σ2=Σ\Sigma_1 = \Sigma_2 = \Sigma,则目标函数简化为: J(u)[u(μ1μ2)]2uΣuJ(\mathbf{u}) \propto \frac{[\mathbf{u}^\top (\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2)]^2}{\mathbf{u}^\top \Sigma \mathbf{u}} 可以证明,最优投影方向为: uΣ1(μ1μ2)\mathbf{u} \propto \Sigma^{-1} (\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2) 这与距离判别、特定条件下贝叶斯判别的线性判别系数完全一致。因此,正态总体、等协方差假设下,三种判别方法的线性方向相同,仅阈值确定方式有差异

两总体的分类阈值:求得最优投影方向后,还需在一维投影轴上设定阈值才能完成最后一步分类。记两类的投影均值为 μ~1=uμ1\tilde{\mu}_1 = \mathbf{u}^\top \boldsymbol{\mu}_1μ~2=uμ2\tilde{\mu}_2 = \mathbf{u}^\top \boldsymbol{\mu}_2。在等协方差、等先验且错判损失相等的情形下,阈值取两投影均值的中点: y~c=μ~1+μ~22\tilde{y}_c = \frac{\tilde{\mu}_1 + \tilde{\mu}_2}{2} 判别规则为(设 μ~1>μ~2\tilde{\mu}_1 > \tilde{\mu}_2):若 y=uxy~cy = \mathbf{u}^\top \mathbf{x} \ge \tilde{y}_c,则判 xG1\mathbf{x} \in G_1,否则判 xG2\mathbf{x} \in G_2。若先验概率或错判损失不等,阈值按先验对数比偏移:取 u=Σ1(μ1μ2)\mathbf{u} = \Sigma^{-1}(\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2) 时,前述贝叶斯判别函数恰为 W(x)=uxy~c=yy~cW(\mathbf{x}) = \mathbf{u}^\top \mathbf{x} - \tilde{y}_c = y - \tilde{y}_c,故阈值由 y~c\tilde{y}_c 变为 y~c+lnd\tilde{y}_c + \ln dd=q2C(12)q1C(21)d = \dfrac{q_2 C(1|2)}{q_1 C(2|1)}),与贝叶斯判别的 lnd\ln d 阈值完全呼应;等先验、等损失时 lnd=0\ln d = 0,即回到中点阈值。

多总体Fisher判别(样本框架)

在实际应用中,总体参数未知,需基于样本数据进行估计。设第 ii 类有 nin_i 个样本,记为 GiG_i,总样本量 N=i=1kniN = \sum_{i=1}^k n_i

  • ii 类样本均值xˉi=1nixGix\bar{\mathbf{x}}_i = \frac{1}{n_i} \sum_{\mathbf{x} \in G_i} \mathbf{x}
  • 总样本均值xˉ=1Ni=1kxGix=1Ni=1knixˉi\bar{\mathbf{x}} = \frac{1}{N} \sum_{i=1}^k \sum_{\mathbf{x} \in G_i} \mathbf{x} = \frac{1}{N} \sum_{i=1}^k n_i \bar{\mathbf{x}}_i
  • 组间散度矩阵:反映各类样本均值与总样本均值的差异 B=i=1kni(xˉixˉ)(xˉixˉ)\mathbf{B} = \sum_{i=1}^k n_i (\bar{\mathbf{x}}_i - \bar{\mathbf{x}})(\bar{\mathbf{x}}_i - \bar{\mathbf{x}})^\top
  • 组内散度矩阵:反映各类内部样本的离散程度 W=i=1kxGi(xxˉi)(xxˉi)\mathbf{W} = \sum_{i=1}^k \sum_{\mathbf{x} \in G_i} (\mathbf{x} - \bar{\mathbf{x}}_i)(\mathbf{x} - \bar{\mathbf{x}}_i)^\top

Fisher判别旨在寻找投影方向 u\mathbf{u},最大化广义瑞利商: J(u)=uBuuWuJ(\mathbf{u}) = \frac{\mathbf{u}^\top \mathbf{B} \mathbf{u}}{\mathbf{u}^\top \mathbf{W} \mathbf{u}} 该问题等价于求解广义特征值问题 Bu=λWu\mathbf{B} \mathbf{u} = \lambda \mathbf{W} \mathbf{u}。最大的 ss 个特征值对应的特征向量 u1,,us\mathbf{u}_1, \dots, \mathbf{u}_ssmin(p,k1)s \le \min(p, k-1))即为最优投影方向。新样本 x\mathbf{x} 投影到低维空间 y=[u1x,,usx]\mathbf{y} = [\mathbf{u}_1^\top \mathbf{x}, \dots, \mathbf{u}_s^\top \mathbf{x}]^\top 后,通常通过比较其与各类投影中心 yˉi=[u1xˉi,,usxˉi]\bar{\mathbf{y}}_i = [\mathbf{u}_1^\top \bar{\mathbf{x}}_i, \dots, \mathbf{u}_s^\top \bar{\mathbf{x}}_i]^\top 的距离(如欧氏距离)完成分类。

Fisher判别的评价

优点:可实现降维与可视化,理论基础坚实,计算高效(归结为特征值求解问题)。 局限:对分布假设较敏感,非线性分类场景效果有限;对离群点敏感;二分类仅能得到1个判别方向(最多提取 k1k-1 个)。

Python实战:Fisher判别投影向量计算

下面通过Python模拟两个二维正态总体,计算Fisher最优投影方向。

import numpy as np

# 固定随机种子保证可复现
np.random.seed(42)

# 模拟参数:每类样本数、特征维度、均值、共同协方差矩阵
n1, n2, p = 50, 50, 2
mu1 = np.array([1.0, 2.0])
mu2 = np.array([4.0, 5.0])
Sigma = np.array([[1.0, 0.5], [0.5, 1.2]])

# 生成模拟数据
X1 = np.random.multivariate_normal(mu1, Sigma, size=n1)
X2 = np.random.multivariate_normal(mu2, Sigma, size=n2)

# 计算样本统计量
xbar1 = np.mean(X1, axis=0)  # 第一类样本均值
xbar2 = np.mean(X2, axis=0)  # 第二类样本均值

# 计算组内散度矩阵 W
SW = (X1 - xbar1).T @ (X1 - xbar1) + (X2 - xbar2).T @ (X2 - xbar2)

# 计算组间散度矩阵 B(两总体简化形式)
diff = (xbar1 - xbar2).reshape(-1, 1)
SB = (n1 * n2 / (n1 + n2)) * (diff @ diff.T)

# 求解Fisher投影方向:w ∝ W^{-1}(xbar1 - xbar2)
w_fisher = np.linalg.inv(SW) @ (xbar1 - xbar2)
w_fisher = w_fisher / np.linalg.norm(w_fisher)  # 单位化

# 计算广义瑞利商
rayleigh_quotient = float((w_fisher.T @ SB @ w_fisher) / (w_fisher.T @ SW @ w_fisher))

print("Fisher投影向量:", np.round(w_fisher, 4).tolist())
print("广义瑞利商:", round(rayleigh_quotient, 6))

运行结果:

Fisher投影向量: [-0.6947, -0.7193]
广义瑞利商: 3.735676

代码解读

  1. 生成两个等协方差的二维正态总体样本;
  2. 计算组内散度矩阵 W\mathbf{W} 和组间散度矩阵 B\mathbf{B}
  3. 基于等协方差假设,最优投影方向为 W1(xˉ1xˉ2)\mathbf{W}^{-1}(\bar{\mathbf{x}}_1 - \bar{\mathbf{x}}_2),单位化后得到投影向量;
  4. 广义瑞利商越大,说明投影后类间分离度越好,本次结果约为3.74。

📝 动手练一练

  1. 贝叶斯判别阈值计算:设两个总体 G1,G2G_1, G_2 的先验概率 q1=0.7,q2=0.3q_1=0.7, q_2=0.3,错判损失 C(21)=5C(2|1)=5(将 G1G_1 错判为 G2G_2 的损失),C(12)=10C(1|2)=10。计算阈值 dd 及其对数 lnd\ln d参考答案d=q2C(12)q1C(21)=0.3×100.7×5=33.50.8571d = \frac{q_2 C(1|2)}{q_1 C(2|1)} = \frac{0.3 \times 10}{0.7 \times 5} = \frac{3}{3.5} \approx 0.8571lnd0.1542\ln d \approx -0.1542

  2. Fisher投影验证:使用 sklearn.discriminant_analysis.LinearDiscriminantAnalysis 对上述模拟数据拟合,提取判别系数,验证其与手动计算的投影向量方向是否一致(可忽略长度差异)。 参考答案:使用 clf = LinearDiscriminantAnalysis().fit(X, y) 后,clf.coef_ 即为判别系数,与手动计算的 w_fisher 方向应基本一致。

本章小结

  • 贝叶斯判别:以最小化总平均损失为目标,融合先验概率与错判损失,理论完备但参数估计困难。
  • Fisher判别:以最大化类间/类内方差比为准则,寻找最优投影方向,实现降维分类,计算高效。
  • 内在联系:在正态总体、等协方差假设下,距离判别、贝叶斯判别与Fisher判别均可导出相同的线性判别函数,区别在于分类阈值。

行动清单

  1. 概念辨析:梳理三种判别方法的核心目标、假设条件与优缺点。
  2. 代码复现:运行讲义中的Python代码,理解Fisher投影向量的计算过程。
  3. 场景思考:针对一个具体分类问题(如鸢尾花品种识别),分析哪种判别方法更合适,并说明理由。

— 小象教研组

配套学习资源与课件
  • 第4章课件:判别分析
    下载
  • 多元统计分析参考讲义与常用函数(多元分析与主成分常用函数速查)
    下载
  • 课程配套数据集(全课程实战数据包)
    下载
  • 课程全套源代码(课程相关代码汇总)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信二维码:扫码添加课程顾问微信扫码添加顾问