跳到主要内容

Fisher 判别

一、直观理解:找一根投影轴,让类间尽量散、类内尽量聚​

Fisher 判别分析(FDA / LDA 的 Fisher 表述)不直接在原始空间画复杂边界,而是寻找一个(或若干个)投影方向 ww,把高维特征压成一维分数 wTxw^\mathsf{T}x。在这个分数轴上:

  • 不同类的中心离得尽量远;
  • 同一类内部尽量抱团。

想象把一堆红蓝弹珠的三维坐标投影到墙上:有的角度红蓝混成一团,有的角度两条色带分得很开。Fisher 找的就是“分得最开”的投影角度。

两类时得到一条投影轴;多类时可得到最多 K−1K-1 条判别轴,类似于“为分类定制的 PCA”。

二、适用场景与优缺点​

类型说明
适用场景连续特征、类别数不多;希望降维可视化类分离;需要线性判别边界;样本量允许估计类内散度。
核心优点目标函数直接服务分类;可解释投影方向;多类可出判别平面图;与 LDA 紧密联系;计算相对轻。
局限与缺点本质线性(对原始特征);类内协方差奇异时需正则;对非正态、非线性边界能力有限;异常值影响均值与散度。

Fisher 准则本身不强制正态假设;但若进一步做 Bayes 决策并假设等协方差正态,就得到经典 LDA。

三、核心原理​

1. 两类 Fisher 准则​

类均值 μ1,μ2\mu_1,\mu_2,类内散度矩阵

Sw=∑c=12∑xi∈c(xi−μc)(xi−μc)TS_w=\sum_{c=1}^{2}\sum_{x_i\in c}(x_i-\mu_c)(x_i-\mu_c)^\mathsf{T}

类间散度(两类)

Sb=(μ1−μ2)(μ1−μ2)TS_b=(\mu_1-\mu_2)(\mu_1-\mu_2)^\mathsf{T}

最大化

J(w)=wTSbwwTSwwJ(w)=\frac{w^\mathsf{T}S_b w}{w^\mathsf{T}S_w w}

解满足广义特征值问题 Sbw=λSwwS_b w=\lambda S_w w。两类闭式解方向为

w∝Sw−1(μ1−μ2)w\propto S_w^{-1}(\mu_1-\mu_2)

阈值可取两类投影均值的中点(等先验、等方差时)。

2. 多类​

Sb=∑c=1Knc(μc−μ)(μc−μ)TS_b=\sum_{c=1}^{K}n_c(\mu_c-\mu)(\mu_c-\mu)^\mathsf{T}

SwS_w 对所有类求和。最多有 K−1K-1 个非零广义特征值,对应判别坐标。

3. 与 PCA 的区别​

PCAFisher
是否用标签否是
目标方差最大类可分性最大
用途压缩、可视化判别、分类可视化

四、关键决策​

决策点建议
正则Sw+εIS_w+\varepsilon I,或对角加载
维数多类保留 K−1K-1 维或按特征值筛选
标准化量纲差异大时建议;解释载荷时说明
分类规则投影后最近中心 / LDA 阈值 / 接 Logistic
样本nn 宜大于特征维;否则先 PCA 再 Fisher
可视化前两判别轴散点图是论文利器

五、MATLAB 示例​

% 三类,两特征(可换成更多维)
X = [
1.0 1.1; 1.2 0.9; 0.8 1.0; 1.1 1.2; % 类1
3.0 1.0; 3.2 1.2; 2.8 0.9; 3.1 1.1; % 类2
2.0 3.0; 2.2 3.1; 1.8 2.9; 2.1 3.2 % 类3
];
y = [1;1;1;1; 2;2;2;2; 3;3;3;3];

% MATLAB LDA(Fisher 线性判别的常用实现)
Mdl = fitcdiscr(X, y, ...
"DiscrimType", "linear", ...
"Gamma", 0); % 0=普通 LDA;>0 正则

yhat = predict(Mdl, X);
disp("混淆矩阵:");
disp(confusionmat(y, yhat));

% 手写两类 Fisher 方向(取类1 vs 类2 演示)
X12 = X(y<=2, :); y12 = y(y<=2);
mu1 = mean(X12(y12==1,:), 1);
mu2 = mean(X12(y12==2,:), 1);
Sw = cov(X12(y12==1,:)) * (sum(y12==1)-1) + ...
cov(X12(y12==2,:)) * (sum(y12==2)-1);
Sw = Sw / (numel(y12) - 2) + 1e-6*eye(size(X,2));
w = Sw \ (mu1 - mu2)';
w = w / norm(w);
fprintf("Fisher 方向 w = [%.3f, %.3f]\n", w(1), w(2));

% 投影分数
score = X12 * w;
figure;
gscatter(score, zeros(size(score)), y12);
xlabel("Fisher 投影"); title("两类 Fisher 一维投影");

% 多类:用 fitcdiscr 的 Delta 等或自行特征分解 Sb, Sw
% 可视化可用预测分数
[label, scoreAll, cost] = predict(Mdl, X);
% scoreAll 为各类判别分数,可做二维嵌入绘图

六、如何解释结果​

  1. 判别方向载荷:ww 各分量大小表示特征对“拉开类别”的贡献;
  2. 投影图:类是否沿判别轴分离、重叠区在哪;
  3. 特征值/判据 JJ:分离强度;
  4. 与 PCA 对照:第一主成分未必是最佳判别方向;
  5. 报告:DiscrimType、正则、类均值、错分率、投影图。

七、常见误区​

1. 把 Fisher 当成无监督降维​

它使用类标签,与 PCA 目标不同。

2. SwS_w 不可逆仍硬求逆​

高维小样本必须正则或先降维。

3. 非线性可分问题死用线性 Fisher​

可试二次判别、核 Fisher 或 SVM/树模型。

4. 多类只保留 1 维投影就下结论​

可能第二判别轴才分开某两类。

5. 忽略类样本量差异​

散度矩阵与阈值应反映 ncn_c 或先验。

八、小结​

Fisher 判别寻找使类间散度与类内散度之比最大的投影,把分类问题变成低维可分空间中的几何决策。

它是统计学习与模式识别的经典支柱,既可直接分类,也可为论文提供“类别分离可视化”。样本充足、边界近似线性时,它往往是比黑箱模型更干净的选择。