如何用判别分析(LDA)精准分类?一文看懂 Fisher 线性判别法
如何用判别分析(LDA)精准分类?一文看懂 Fisher 线性判别法
在质量管理和数据分析中,我们经常遇到这样的问题:手头有一批已知类别的样本(比如合格品与不合格品),需要根据多个测量指标建立规则,以便对新样本进行归类。判别分析(Discriminant Analysis)正是解决此类问题的经典统计方法。本文基于 Fisher(1936)提出的线性判别分析(LDA)经典理论,为您系统讲解其原理、计算步骤与演示算例,助您快速上手。
什么是判别分析(LDA)?
判别分析是一种有监督的统计分类方法。它的核心思想是:寻找一个或多个原始变量的线性组合(即判别函数),使得组间(类别之间)的差异相对于组内(类别内部)的差异尽可能大。换句话说,我们希望将高维数据投影到一条直线(或低维平面)上,让不同类别的点在投影后“分得开”,同类别的点“聚得拢”。
Fisher(1936)提出的线性判别分析是这一领域的奠基之作。它不要求数据服从多元正态分布(虽然正态性有助于小样本下的显著性检验),而是直接基于方差分析的思想构造判别准则。该方法在工业质检、医学诊断、市场细分等领域均有广泛应用。
怎么做:LDA 的公式与步骤
1. 基本设定
假设有 k 个类别(组),每类有 n_i 个样本( i=1,2,…,k ),总样本数 N=Σ n_i。每个样本有 p 个特征变量 X=(X_1,X_2,…,X_p)^T。
2. 计算组内散度矩阵与组间散度矩阵
S_W = Σ(i=1..k) Σ(j=1..n_i) (x_(ij) - x̄_i)(x_(ij) - x̄_i)^T
其中 x̄_i 为第 i 类的均值向量。
S_B = Σ(i=1..k) n_i (x̄_i - x̄)(x̄_i - x̄)^T
其中 x̄ 为总体均值向量。
3. 寻找最优判别方向
Fisher 准则函数为:
J(w) = (w^T S_B w)/(w^T S_W w)
其中 w 为判别系数向量(投影方向)。使 J(w) 最大化的 w 可通过求解广义特征值问题获得:
S_B w = λ S_W w
对于二分类问题( k=2 ),最优方向为:
w = S_W^(-1)(x̄_1 - x̄_2)
(该公式基于 Fisher 1936 原文推导,此处仅给出最终形式。)
4. 建立判别函数与分类规则
判别函数为线性组合 y = w^T x。对于二分类,通常取判别阈值 y_0 为两类判别得分均值的加权平均(或按先验概率调整)。新样本 x_(new) 计算 y_(new)=w^T x_(new),若 y_(new) ge y_0 则归为类别1,否则归为类别2。
5. 多类别扩展
当 k>2 时,最多可提取 min(k-1, p) 个判别函数。依次求解广义特征值问题,取前几个特征值较大的方向即可。
一个演示算例(示例数据,仅供演示)
背景:某工厂希望根据两个指标——硬度( X_1 )与拉伸强度( X_2 )——区分两种材料(A类与B类)。以下为示例数据(仅供演示),并非真实测量结果。
步骤1:计算各类均值与总体均值
步骤2:计算组内散度矩阵 S_W
A类内部离差平方和:
A类贡献合计:[[2,2],[2,2]]
B类内部离差平方和:
B类贡献合计:[[2,2],[2,2]]
故 S_W = [[4,4],[4,4]]
步骤3:计算判别方向 w
S_W^(-1) = (1)/(det(S_W)) begin{bmatrix} 4 & -4 \ -4 & 4 end{bmatrix}
其中 det(S_W) = 4×4 - 4×4 = 0。此处出现奇异矩阵——因为示例数据中两类内部变异方向完全一致(均为沿对角线方向),导致 S_W 不可逆。这提示我们:当特征之间存在完全共线性时,经典 LDA 无法直接求解。
为继续演示,我们改用 Fisher 原始论文中的经典示例数据(鸢尾花数据)? 不,此处我们调整示例数据,使 S_W 可逆(示例数据,仅供演示):
A类内部离差:
A类合计:[[2,2],[2,2]]
B类内部离差:
B类合计:[[2,2],[2,2]]
S_W = [[4,4],[4,4]] 仍然奇异。这说明示例数据设计不当。为避免误导,我们直接给出一个可逆的演示数据(示例数据,仅供演示):
A类内部离差:
A类合计:[[2, 1],[1, 0.666]]
B类内部离差:
B类合计:[[2,2],[2,2]]
S_W = [[4,3],[3,2.666]],行列式 = 4×2.666 - 3×3 = 10.664 - 9 = 1.664 ≠ 0,可逆。
S_W^(-1) = (1)/(1.664) begin{bmatrix} 2.666 & -3 \ -3 & 4 end{bmatrix} ≈ begin{bmatrix} 1.602 & -1.803 \ -1.803 & 2.404 end{bmatrix}
均值差: x̄_B - x̄_A = (5, 3.667)^T
w = S_W^(-1) (x̄_B - x̄_A) ≈ begin{bmatrix} 1.602×5 + (-1.803)×3.667 \ (-1.803)×5 + 2.404×3.667 end{bmatrix}
= begin{bmatrix} 8.01 - 6.61 \ -9.015 + 8.815 end{bmatrix}
≈ begin{bmatrix} 1.40 \ -0.20 end{bmatrix}
步骤4:计算判别得分与阈值
A类样本判别得分(示例):
A类均值得分: ȳ_A ≈ 2.53
B类样本判别得分:
B类
在质量管理和数据分析中,我们经常遇到这样的问题:手头有一批已知类别的样本(比如合格品与不合格品),需要根据多个测量指标建立规则,以便对新样本进行归类。判别分析(Discriminant Analysis)正是解决此类问题的经典统计方法。本文基于 Fisher(1936)提出的线性判别分析(LDA)经典理论,为您系统讲解其原理、计算步骤与演示算例,助您快速上手。
什么是判别分析(LDA)?
判别分析是一种有监督的统计分类方法。它的核心思想是:寻找一个或多个原始变量的线性组合(即判别函数),使得组间(类别之间)的差异相对于组内(类别内部)的差异尽可能大。换句话说,我们希望将高维数据投影到一条直线(或低维平面)上,让不同类别的点在投影后“分得开”,同类别的点“聚得拢”。
Fisher(1936)提出的线性判别分析是这一领域的奠基之作。它不要求数据服从多元正态分布(虽然正态性有助于小样本下的显著性检验),而是直接基于方差分析的思想构造判别准则。该方法在工业质检、医学诊断、市场细分等领域均有广泛应用。
怎么做:LDA 的公式与步骤
1. 基本设定
假设有 k 个类别(组),每类有 n_i 个样本( i=1,2,…,k ),总样本数 N=Σ n_i。每个样本有 p 个特征变量 X=(X_1,X_2,…,X_p)^T。
2. 计算组内散度矩阵与组间散度矩阵
- 组内散度矩阵 S_W (Within-class scatter matrix):
S_W = Σ(i=1..k) Σ(j=1..n_i) (x_(ij) - x̄_i)(x_(ij) - x̄_i)^T
其中 x̄_i 为第 i 类的均值向量。
- 组间散度矩阵 S_B (Between-class scatter matrix):
S_B = Σ(i=1..k) n_i (x̄_i - x̄)(x̄_i - x̄)^T
其中 x̄ 为总体均值向量。
3. 寻找最优判别方向
Fisher 准则函数为:
J(w) = (w^T S_B w)/(w^T S_W w)
其中 w 为判别系数向量(投影方向)。使 J(w) 最大化的 w 可通过求解广义特征值问题获得:
S_B w = λ S_W w
对于二分类问题( k=2 ),最优方向为:
w = S_W^(-1)(x̄_1 - x̄_2)
(该公式基于 Fisher 1936 原文推导,此处仅给出最终形式。)
4. 建立判别函数与分类规则
判别函数为线性组合 y = w^T x。对于二分类,通常取判别阈值 y_0 为两类判别得分均值的加权平均(或按先验概率调整)。新样本 x_(new) 计算 y_(new)=w^T x_(new),若 y_(new) ge y_0 则归为类别1,否则归为类别2。
5. 多类别扩展
当 k>2 时,最多可提取 min(k-1, p) 个判别函数。依次求解广义特征值问题,取前几个特征值较大的方向即可。
一个演示算例(示例数据,仅供演示)
背景:某工厂希望根据两个指标——硬度( X_1 )与拉伸强度( X_2 )——区分两种材料(A类与B类)。以下为示例数据(仅供演示),并非真实测量结果。
| 样本 | 类别 | X_1 (硬度) | X_2 (拉伸强度) |
| 1 | A | 4 | 2 |
| 2 | A | 5 | 3 |
| 3 | A | 6 | 4 |
| 4 | B | 8 | 6 |
| 5 | B | 9 | 7 |
| 6 | B | 10 | 8 |
步骤1:计算各类均值与总体均值
- A类均值: x̄_A = (5, 3)^T
- B类均值: x̄_B = (9, 7)^T
- 总体均值: x̄ = (7, 5)^T
步骤2:计算组内散度矩阵 S_W
A类内部离差平方和:
- 样本1:(4-5, 2-3)=(-1,-1),外积为 [[1,1],[1,1]]
- 样本2:(0,0),外积为 [[0,0],[0,0]]
- 样本3:(1,1),外积为 [[1,1],[1,1]]
A类贡献合计:[[2,2],[2,2]]
B类内部离差平方和:
- 样本4:(8-9,6-7)=(-1,-1),外积为 [[1,1],[1,1]]
- 样本5:(0,0)
- 样本6:(1,1),外积为 [[1,1],[1,1]]
B类贡献合计:[[2,2],[2,2]]
故 S_W = [[4,4],[4,4]]
步骤3:计算判别方向 w
S_W^(-1) = (1)/(det(S_W)) begin{bmatrix} 4 & -4 \ -4 & 4 end{bmatrix}
其中 det(S_W) = 4×4 - 4×4 = 0。此处出现奇异矩阵——因为示例数据中两类内部变异方向完全一致(均为沿对角线方向),导致 S_W 不可逆。这提示我们:当特征之间存在完全共线性时,经典 LDA 无法直接求解。
为继续演示,我们改用 Fisher 原始论文中的经典示例数据(鸢尾花数据)? 不,此处我们调整示例数据,使 S_W 可逆(示例数据,仅供演示):
| 样本 | 类别 | X_1 | X_2 |
| 1 | A | 2 | 1 |
| 2 | A | 3 | 2 |
| 3 | A | 4 | 3 |
| 4 | B | 7 | 3 |
| 5 | B | 8 | 4 |
| 6 | B | 9 | 5 |
- A类均值:(3, 2)^T,B类均值:(8, 4)^T,总体均值:(5.5, 3)^T
A类内部离差:
- 样本1:( -1,-1) → [[1,1],[1,1]]
- 样本2:(0,0)
- 样本3:(1,1) → [[1,1],[1,1]]
A类合计:[[2,2],[2,2]]
B类内部离差:
- 样本4:( -1,-1) → [[1,1],[1,1]]
- 样本5:(0,0)
- 样本6:(1,1) → [[1,1],[1,1]]
B类合计:[[2,2],[2,2]]
S_W = [[4,4],[4,4]] 仍然奇异。这说明示例数据设计不当。为避免误导,我们直接给出一个可逆的演示数据(示例数据,仅供演示):
| 样本 | 类别 | X_1 | X_2 |
| 1 | A | 1 | 1 |
| 2 | A | 2 | 1 |
| 3 | A | 3 | 2 |
| 4 | B | 6 | 4 |
| 5 | B | 7 | 5 |
| 6 | B | 8 | 6 |
- A类均值:(2, 1.333)^T,B类均值:(7, 5)^T,总体均值:(4.5, 3.167)^T
A类内部离差:
- 样本1:( -1,-0.333) → [[1, 0.333],[0.333, 0.111]]
- 样本2:(0, -0.333) → [[0,0],[0,0.111]]
- 样本3:(1, 0.667) → [[1, 0.667],[0.667, 0.444]]
A类合计:[[2, 1],[1, 0.666]]
B类内部离差:
- 样本4:( -1,-1) → [[1,1],[1,1]]
- 样本5:(0,0)
- 样本6:(1,1) → [[1,1],[1,1]]
B类合计:[[2,2],[2,2]]
S_W = [[4,3],[3,2.666]],行列式 = 4×2.666 - 3×3 = 10.664 - 9 = 1.664 ≠ 0,可逆。
S_W^(-1) = (1)/(1.664) begin{bmatrix} 2.666 & -3 \ -3 & 4 end{bmatrix} ≈ begin{bmatrix} 1.602 & -1.803 \ -1.803 & 2.404 end{bmatrix}
均值差: x̄_B - x̄_A = (5, 3.667)^T
w = S_W^(-1) (x̄_B - x̄_A) ≈ begin{bmatrix} 1.602×5 + (-1.803)×3.667 \ (-1.803)×5 + 2.404×3.667 end{bmatrix}
= begin{bmatrix} 8.01 - 6.61 \ -9.015 + 8.815 end{bmatrix}
≈ begin{bmatrix} 1.40 \ -0.20 end{bmatrix}
步骤4:计算判别得分与阈值
A类样本判别得分(示例):
- 样本1:1.40×1 + (-0.20)×1 = 1.20
- 样本2:1.40×2 + (-0.20)×1 = 2.60
- 样本3:1.40×3 + (-0.20)×2 = 3.80
A类均值得分: ȳ_A ≈ 2.53
B类样本判别得分:
- 样本4:1.40×6 + (-0.20)×4 = 7.60
- 样本5:1.40×7 + (-0.20)×5 = 8.80
- 样本6:1.40×8 + (-0.20)×6 = 10.00
B类
下图是 6SQ 在线工具一键生成的结果效果:
TA的首页