跳到主要内容

距离判别

一、直观理解:离哪个类的“典型位置”更近​

距离判别是最朴素的统计判别思想:先为每一类估计一个中心(通常是均值向量),新样本算到各类中心的距离,最近者胜。

好比几支球队各自有一套“平均体能画像”。来了一名新运动员,看他的指标向量更接近哪支队的平均画像,就初步划入哪一类。若再考虑各类内部的散开形状(协方差),距离就从普通欧氏距离升级为马氏距离——在“扁长”的类里,沿长轴方向多走一点不一定算远。

距离判别不显式建模后验概率,但在正态且协方差相同等条件下,它与 Bayes 判别的决策边界可以一致。

二、适用场景与优缺点​

类型说明
适用场景类别用中心可代表;特征连续;需要可解释的几何判别;作为 LDA/QDA 的入门与对照;样本量允许稳定估计均值(及协方差)。
核心优点原理极清晰;计算简单;马氏距离能吸收特征尺度与相关;多类直接推广。
局限与缺点对非凸、多峰类束手无策;均值被异常值拉偏;高维协方差难估;类别重叠严重时准确率有限。

使用前:检查各类样本量、是否近似椭圆分布、是否需先标准化或降维、异常值是否处理。

三、核心原理​

设第 cc 类训练样本均值为 xˉc\bar x_c,协方差为 ScS_c,总体或合并协方差为 SS。

1. 欧氏距离判别​

dE2(x,c)=∥x−xˉc∥22d_E^2(x,c)=\|x-\bar x_c\|_2^2

判 xx 属于使 dEd_E 最小的类。等价于各类协方差为 II 的假设。

2. 马氏距离判别​

dM2(x,c)=(x−xˉc)TS−1(x−xˉc)d_M^2(x,c)=(x-\bar x_c)^\mathsf{T}S^{-1}(x-\bar x_c)
  • 若各类共用 SS(合并协方差),决策边界为线性;
  • 若每类用各自 ScS_c,边界为二次。

3. 与线性判别的联系​

在等协方差正态假设下,最小化马氏距离等价于最大化

δc(x)=xˉcTS−1x−12xˉcTS−1xˉc\delta_c(x)=\bar x_c^\mathsf{T}S^{-1}x-\frac{1}{2}\bar x_c^\mathsf{T}S^{-1}\bar x_c

(忽略与 cc 无关的项),即 LDA 判别函数的核心部分。

四、关键决策​

决策点建议
欧氏 vs 马氏特征相关或量纲不同 → 马氏或先标准化再欧氏
合并 vs 分类协方差样本少用合并;各类形状明显不同且 ncn_c 充足可用 ScS_c
奇异协方差高维时加对角加载,或先 PCA
先验纯距离判别默认等先验;类比例悬殊应并入 Bayes 框架
稳健性均值可改用中位数/稳健位置估计

五、MATLAB 示例​

% 两类二维数据
X = [
1.0 1.2; 1.1 0.9; 0.9 1.1; 1.2 1.0; % 类1
3.0 3.1; 2.9 2.8; 3.2 3.0; 2.8 3.2 % 类2
];
y = [1;1;1;1; 2;2;2;2];

classes = unique(y);
p = size(X, 2);
mu = zeros(numel(classes), p);
for i = 1:numel(classes)
mu(i, :) = mean(X(y == classes(i), :), 1);
end

% 合并协方差(无偏)
Sw = zeros(p, p);
for i = 1:numel(classes)
Xi = X(y == classes(i), :);
Sw = Sw + cov(Xi) * (size(Xi,1) - 1);
end
Sw = Sw / (size(X,1) - numel(classes));
Sw = Sw + 1e-6 * eye(p); % 加载保证可逆

% 马氏距离判别
xnew = [1.5, 1.4];
d2 = zeros(numel(classes), 1);
for i = 1:numel(classes)
d = xnew - mu(i, :);
d2(i) = d / Sw * d'; % 行向量形式
end
[~, idx] = min(d2);
fprintf("新样本马氏距离:"); disp(d2');
fprintf("判别类别 = %d\n", classes(idx));

% 欧氏距离对照
dE = sum((mu - xnew).^2, 2);
[~, idxE] = min(dE);
fprintf("欧氏判别类别 = %d\n", classes(idxE));

% 批量预测并混淆矩阵
yhat = zeros(size(y));
for n = 1:size(X,1)
d2 = zeros(numel(classes),1);
for i = 1:numel(classes)
d = X(n,:) - mu(i,:);
d2(i) = d / Sw * d';
end
[~, idx] = min(d2);
yhat(n) = classes(idx);
end
disp("训练集约混淆矩阵:");
disp(confusionmat(y, yhat));

也可用 fitcdiscr 设 DiscrimType="linear"/"quadratic" 得到与马氏距离等价的判别器。

六、如何解释结果​

  1. 类中心:报告各类均值向量,赋予业务含义;
  2. 距离表:新样本到各类的 dMd_M,说明“近多少”;
  3. 协方差形态:相关强时说明为何必须用马氏距离;
  4. 边界形状:等协方差 → 直线(平面)边界;异协方差 → 二次边界;
  5. 报告:距离定义、协方差估计、是否加载/降维、错分样本距中心情况。

七、常见误区​

1. 量纲混乱仍用欧氏距离​

“身高 cm + 收入元”会让距离失去意义。

2. 高维直接求 S−1S^{-1}​

样本不足时协方差奇异或病态,必须正则化或降维。

3. 多峰类别仍用单一中心​

一个均值无法代表“双团”类,应考虑混合模型或非线性分类器。

4. 忽略先验与代价​

距离最近不等于风险最小;不对称代价应进入 Bayes 决策。

5. 把训练重代入准确率当泛化​

小样本必须交叉验证。

八、小结​

距离判别用“到类中心的远近”分类;马氏距离把尺度与相关性纳入几何,是通往 LDA/QDA 的直观桥梁。

它适合作为统计判别的第一刀:先看类中心是否可分,再决定是否升级到 Fisher、Bayes 或机器学习模型。