核化的直接判别分析 (KDLDA) 技术文档
项目介绍
本项目实现了一种用于非线性高维数据降维与特征提取的核化直接判别分析(KDLDA)算法。该算法结合了核方法(Kernel Method)和直接判别分析(Direct LDA)策略,旨在解决传统线性判别分析在处理线性不可分数据时的局限性,以及在面对小样本问题(Small Sample Size, SSS)时类内散度矩阵可能出现的奇异性(不可逆)挑战。通过将原始数据映射到高维特征空间,算法能够在非线性层面最大化类间差异并最小化类内波动,为后续分类任务提供更具区分度的特征表示。
功能特性
- 非线性映射封装:内置多种核函数计算逻辑,支持将低维线性不可分数据投射到高维空间。
- 直接判别策略:采用先对类间散度矩阵进行特征提取,再在降维子空间处理类内散度的方法,有效规避矩阵奇异性。
- 核心算子实现:提供了散度矩阵建模、广义特征值分解、白化变换以及最终投影方向计算的完整逻辑。
- 可视化诊断:集成原始空间与投影空间的分布对比图,以及投影分量判别力(特征值)的量化展示。
- 模拟数据验证:包含一个生成嵌套、非线性分布模拟数据的实验环境,用于即时验证算法有效性。
系统要求
- MATLAB R2016b 或更高版本。
- Statistics and Machine Learning Toolbox(用于部分绘图函数如 gscatter)。
算法实现逻辑说明
#### 1. 数据预处理与环境构建
算法首先在模拟环境中生成三类具有挑战性的非线性数据:一个中心圆点簇和两个不同半径的嵌套环形。为了模拟真实高维场景,程序会自动在这些二维特征基础上叠加高维随机噪声。
#### 2. 核矩阵计算逻辑
在核心训练模块中,系统根据用户定义的类型计算核矩阵。这一步是算法的核心,通过核函数计算样本间的相似性,隐式地完成了向高维空间的映射。目前代码实现了:
- 线性核:计算样本间的内积。
- 高斯核 (RBF):利用欧氏距离平方和指定的 sigma 参数计算径向基函数值。
- 多项式核:支持通过阶数参数控制非线性复杂度。
#### 3. 核空间散度矩阵建模
算法通过定义中心化权重矩阵来构建散度矩阵:
- 类内权重矩阵:基于类别标签构建分块对角矩阵,记录样本所属类别的归属关系。
- 类间散度 (Sb):表达了类中心在核空间相对于全局中心的离散程度。
- 类内散度 (Sw):表达了各类别样本在其类中心附近的紧凑程度。
#### 4. 直接判别分析 (Direct LDA) 策略流程
这是本实现解决矩阵奇异性的关键逻辑:
- 第一阶段:类间空间提取。对 Sb 进行特征分解,提取其量程空间(Range Space)。通过设定的阈值舍弃极小的特征值,保留反映类别差异的主要维度。
- 第二阶段:白化变换。在 Sb 的量程空间内对数据进行白化处理,使得变换后的类间散度矩阵变为单位矩阵。
- 第三阶段:类内空间优化。在白化后的空间中对 Sw 进行特征分解。此时,算法寻找的是特征值最小的方向,因为在类间差异已经标准化的前提下,特征值越小意味着类内压缩效果越好,判别性能越强。
#### 5. 投影与降维
最终的投影矩阵由上述两个阶段的变换矩阵复合而成。通过将核矩阵与投影矩阵相乘,将样本映射到低维的判别分量空间。
关键实现细节分析
#### 投影方向选择
在最终阶段,算法通过对变换后的类内散度矩阵进行升序排列,选取特征值最小的若干个向量作为投影方向。这体现了 LDA 的核心思想:在保证类间距离的情况下,尽可能地压紧同一个类别的样本。
#### 维度自动适配
算法在提取 Sb 的量程空间时,会根据特征值的量级动态计算秩(rank_Sb)。由于 Sb 的秩受限于类别数 $C$(最大为 $C-1$),这一逻辑确保了模型不会因为计算误差引入无意义的噪声维度。
#### 结果呈现逻辑
- 散度度量:程序会输出处理后的类间和类内散度迹(Trace),用于量化评估空间分布的改变。
- 可视化对比:通过对比原始空间的二维分布和 KDLDA 投影后的分量分布,可以清晰观察到嵌套的环形数据在投影后如何被拉开并聚拢。
- 判别力分析:柱状图展示了选定投影方向对应的特征值,特征值越小,说明在该方向上类内一致性越好,判别力越强。
使用方法
- 配置 MATLAB 工作路径。
- 运行主入口函数,程序将自动执行以下流程:
- 生成三类非线性测试数据。
- 配置核函数参数(默认采用 RBF 核)。
- 调用训练程序计算投影矩阵。
- 在控制台打印特征维度、样本统计及散度量级。
- 弹出两个窗口分别展示降维前后的分布图及特征值谱。
- 若需处理自定义数据,需将输入矩阵 $X$(样本行排列)和标签向量 $labels$ 按照主函数中的接口规范进行替换。