数学原理
本章目标
- 理解 LDA 的优化目标——最大化类间散度与类内散度之比(Fisher 判别准则)。
- 理解类内散度矩阵
和类间散度矩阵 的构造与含义。 - 理解广义特征值问题
如何给出判别方向,以及 维上限的秩论证。 - 理解
solver='svd'的求解路径,以及与 PCA 在优化目标上的根本区别。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 类内散度矩阵 | 数学对象 | 衡量同一类别内部样本围绕类均值的分散程度——LDA 希望将其最小化 |
| 类间散度矩阵 | 数学对象 | 衡量各类别均值围绕全局均值的分散程度——LDA 希望将其最大化 |
| Fisher 判别准则 | 优化目标 | 广义瑞利商——同时最大化类间分离度与最小化类内散布 |
| 广义特征值问题 | 求解形式 | 判别方向是 |
| 理论约束 | ||
solver='svd' | 工程求解 | 通过 SVD 分解直接求解,无需显式计算 |
1. LDA 的优化目标
给定
二分类 Fisher 准则
将数据投影到方向
Fisher 准则定义为类间距离与类内散度之比:
理解重点
- 分子是类间距离的平方——不同类别的投影中心应尽可能远离。
- 分母是各类内部的投影散度之和——同类别样本投影后应尽可能聚集。
- 这个比值越大,方向
的判别能力越强。当前源码中 LinearDiscriminantAnalysis寻找的就是最大化此比值的。
2. 散度矩阵
类内散度矩阵(Within-Class Scatter Matrix)
其中
类间散度矩阵(Between-Class Scatter Matrix)
其中
理解重点
汇总了各类内部的协方差结构——它是 个类内协方差矩阵的加权和(在等协方差假设下,各类协方差相同)。 汇总了类中心之间的方差——它的秩不超过 ,因为 个类中心满足一个线性关系(均值的加权平均等于全局均值)。 - 当前 Wine 数据集(
)下, 是 矩阵, 的秩为 2。
3. 广义瑞利商与广义特征值问题
从优化到特征值问题
最大化
若
判别方向取
拉格朗日推导
以
理解重点
- 这不是经验规则——判别方向是严格优化问题的解析结果。
- 特征值
就是该判别方向对应的 Fisher 准则值 ——特征值越大,该方向的判别能力越强。 explained_variance_ratio_就是各特征值占总特征值之和的比例。
4. 二分类闭式解
二分类时
理解重点
- 二分类 LDA 的判别方向非常直观:就是"类中心差异"经"类内协方差结构"修正后的方向。
的作用是白化——消除特征间的相关性,使几何距离在各方向上等价。 - 这是理解多分类 LDA 的最佳起点:多分类只是将"一对多"的概念推广到多个判别方向。
5. 多分类推广与 维上限
秩论证
进而
对当前源码的影响
| 类别数 | 最大判别方向数 | 当前 n_components |
|---|---|---|
| 2 | 1 | — |
| 3(Wine) | 2 | 2(达理论上限) |
| 4 | 3 | — |
| 10 | 9 | — |
理解重点
- 当前 Wine 数据(
)下 n_components=2不是随意选择——它恰好达到理论上限。 - 这是区分 LDA 与 PCA 的核心数学特征之一:PCA 维数无类别限制,LDA 受
约束。 - 当前流水线只输出 2D 图(不输出 3D 图)的数学根源即在于此。
6. SVD 求解器
当前源码使用 solver='svd',其求解路径为:
- 对类内散度
做 Cholesky 分解或直接取逆的平方根 - 将广义特征值问题转化为普通特征值问题
- 通过 SVD 求解,避免显式计算
参数速览
| 参数名 | 类型 | 说明 | 示例取值 |
|---|---|---|---|
solver | str | 求解器选择。'svd'(默认)通过 SVD 求解,无需显式计算散度矩阵逆;'eigen' 直接做特征分解;'lsqr' 使用最小二乘 | 'svd'、'eigen'、'lsqr' |
理解重点
solver='svd'是 scikit-learn 的默认选择——数值稳定性好,且不要求满秩。 - 不同求解器最显著的工程差异是
explained_variance_ratio_是否可用——'svd'支持此属性,'lsqr'不支持。 - 当前源码用
hasattr(model, "explained_variance_ratio_")做保护式输出,正因求解器差异。
7. LDA 与 PCA 的数学对比
| 维度 | PCA | LDA |
|---|---|---|
| 监督方式 | 无监督 | 有监督(需要 |
| 优化目标 | ||
| 核心矩阵 | 总散度矩阵 | |
| 降维上限 | 最多 | 最多 |
| 标签参与 | 否 | 是(定义类结构) |
| 适用场景 | 数据压缩、无监督可视化、去噪 | 分类预处理、判别式降维、特征提取 |
理解重点
表明总方差可分解为"类内方差 + 类间方差"——PCA 最大化总方差,LDA 最大化类间方差占类内方差的比例。 - 这是两者数学本质差异的集中体现:PCA 不关心类别,LDA 以类别为核心。
8. 标准化对 LDA 的数学必要性
LDA 的核心操作涉及散度矩阵的计算:
若特征
理解重点
- 标准化后每个特征对散度矩阵的贡献均等——判别方向反映真实的类别可分性结构。
- Wine 数据集中
alcohol(~13)和proline(~746)的数值范围差异巨大,不标准化将导致proline主导全部判别方向。 - 这与此前所有基于距离/散度的算法(KMeans、DBSCAN、SVC)的逻辑完全一致——标准化是几何意义的前置条件。
9. 数学原理如何映射到当前源码
| 数学概念 | 数学符号/公式 | 代码实现 |
|---|---|---|
| 类内散度矩阵 | LinearDiscriminantAnalysis 内部计算 | |
| 类间散度矩阵 | LinearDiscriminantAnalysis 内部计算 | |
| Fisher 判别准则 | LDA 优化核心 | |
| 广义特征值问题 | solver 内部求解 | |
| 判别方向数 | n_components=2 | |
| 求解器 | — | solver='svd' |
| 判别方向 | model.scalings_ | |
| 解释方差比 | model.explained_variance_ratio_(若 solver 支持) | |
| 类均值 | model.means_ | |
| 先验概率 | model.priors_ | |
| 标准化 | StandardScaler | |
| 投影 | model.transform(X) |
常见坑
- 混淆 PCA 与 LDA 的优化目标——PCA 最大化投影方差(无监督),LDA 最大化类间/类内散度比(有监督)。
- 忽略
维上限,误以为 LDA 可以像 PCA 一样自由增加输出维度。 - 把
explained_variance_ratio_当成所有求解器都支持的属性——lsqr求解器不提供此属性。 - 在不标准化的数据上运行——不同量纲的特征绑架散度矩阵计算。
小结
- LDA 的数学核心链:类内/类间散度矩阵
→ Fisher 准则 → 广义特征值问题 → 特征分解 → 取最大 个特征向量作为判别方向。 维上限来自 的秩论证——这是 LDA 区别于 PCA 最核心的数学约束。 - 当前源码
LinearDiscriminantAnalysis(n_components=2, solver='svd')针对 Wine 数据()是最经典的监督降维配置。