基于线性判别分析(LDA)的特征降维与分类系统
项目介绍
本项目是一个基于MATLAB开发的线性判别分析(Linear Discriminant Analysis, LDA)算法演示系统。该系统旨在演示如何通过有监督学习的方式,将高维数据投影到低维子空间,以实现“最大化类间距离、最小化类内距离”的Fisher判别准则。
系统包含完整的数据模拟、算法核心实现、可视化展示以及分类效果评估模块。通过本项目,用户可以直观地理解LDA如何提取最具判别力的特征方向,以及其对分类界面的优化效果。
功能特性
- 高维数据模拟:能够通过多元高斯分布自动生成包含多个类别的高维特征数据,支持自定义均值和协方差矩阵。
- LDA核心算法实现:完整构建了类内散度矩阵(Sw)和类间散度矩阵(Sb),并通过求解广义特征值问题获取最佳投影方向。
- 鲁棒性设计:在矩阵求逆过程中加入了正则化项,防止因矩阵奇异导致的数值计算错误。
- 多维可视化功能:提供原始特征空间与LDA投影空间的对比展示,以及特征值谱图(Scree Plot)以评估各维度的判别能力。
- 量化评估:计算Fisher判别准则值(J-score)及基于最小距离分类器的准确率,量化降维效果。
系统要求
- 软件环境:MATLAB R2016a及以上版本(需包含Statistics and Machine Learning Toolbox以支持
mvnrnd等函数)。 - 硬件要求:标准PC配置即可,无特殊要求。
使用方法
直接运行主脚本即可启动系统。程序将自动按顺序执行数据生成、模型训练、降维处理及结果可视化,最终在命令行窗口输出评估指标,并弹出一个包含三个子图的综合展示窗口。
核心算法与实现细节
本项目代码逻辑严格按照线性判别分析的数学原理编写,具体流程如下:
1. 数据生成模块
系统首先通过设定固定的随机种子(
rng(42))来保证结果的可复现性。
- 数据结构:生成了3个类别的数据,每个类别包含100个样本,每个样本拥有5维特征。
- 分布特性:
* 类别1:具有紧密的协方差结构。
* 类别2:具有特定的负相关性协方差结构。
* 类别3:数据分布较为松散(协方差为单位矩阵的倍数)。
- 最终将所有数据合并为数据矩阵 $X$ 和标签向量 $y$。
2. LDA 核心算法模块
这是系统的核心部分,主要实现步骤包括:
- 均值计算:计算全局均值向量以及每个类别的局部均值向量。
- 散度矩阵构建:
*
类内离散度矩阵 ($S_w$):通过将各类的样本减去其类均值(中心化),计算协方差并累加,衡量类内部样本的紧密度。
*
类间离散度矩阵 ($S_b$):计算各类别均值与全局均值之差的外积,并按样本数量加权,衡量不同类别中心的距离。
* 目标是求解 $S_b w = lambda S_w w$。
*
正则化处理:为了保证 $S_w$ 可逆并提高数值稳定性,代码在 $S_w$ 对角线上加入了一个微小的正则化参数($10^{-6}$)。
* 对特征值进行降序排列,由于目标是将5维数据降至2维,系统选取了前两个最大特征值对应的特征向量作为投影矩阵 $W$。
* 执行投影操作 $X_{lda} = X times W$。
3. 可视化与评估模块
系统通过一个包含三个子图的窗口展示结果:
- 原始数据展示:绘制原始5维数据的前两个维度(特征1 vs 特征2)。这通常展示了未处理数据中类别重叠的情况。
- LDA投影子空间:展示经过LDA线性变换后的二维数据。在此空间中,可以看到不同类别的样本团簇分离度明显提高,类内更加紧凑。同时在图中标注了各类的中心位置。
- 特征值谱图:绘制特征值分布曲线,直观展示了前几个LDA分量所包含的判别信息量(解释方差比)。
4. 验证与分类
为了量化算法效果,代码实现了以下指标计算:
- Fisher 判别准则值 ($J$):分别计算原始空间和投影空间的 $trace(S_w^{-1}S_b)$。该值越大,表示分类分离度越好。
- 最小距离分类器:
* 实现了一个基于欧氏距离的简单分类器函数。
* 计算投影空间中各类的中心点。
* 将每个样本归类到距离其最近的类中心所属的类别。
* 最终输出该简单分类器在训练数据上的准确率,以验证降维特征的有效性。