基于Fisher线性判别分析的模式识别系统
本系统是一个基于MATLAB开发的模式识别平台,旨在通过Fisher线性判别分析(LDA)算法实现高维数据的降维与分类。系统通过寻找最优投影方向,将多维样本映射到一维空间,在保持类间差异最大化的同时,使类内差异最小化。
功能特性
- 自动化数据集生成:系统能够模拟生成服从多元正态分布的三维双类样本数据,支持自定义均值向量与协方差矩阵,用于模拟真实的特征分布。
- Fisher准则核心计算:自动完成均值向量、类内散度矩阵(Sw)及类间散度矩阵(Sb)的计算。
- 广义特征值求解:通过求解矩阵特征值问题确定最优投影向量$w$,在数学上保证了投影后的判别效力。
- 线性降维与分类:将高维特征压缩至一维,并基于投影中心的均值自动设定判别阈值进行分类。
- 多维度性能评估:实时计算测试集分类准确率,并以表格形式输出真实标签与预测标签的对比结果。
- 直观的可视化展示:系统集成三维原始分布、一维投影点线图以及投影密度直方图,直观展现分类边界。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:Statistics and Machine Learning Toolbox(用于生成模拟数据的mvnrnd函数)。
实现逻辑与步骤
系统内部逻辑严格遵循统计判别分析的标准流程,具体执行步骤如下:
- 数据初始化:利用
rng固定随机数种子确保结果可重复。通过mvnrnd生成两组各50个三维样本,设定不同的均值和协方差矩阵以模拟类别差异。 - 训练集与测试集划分:采用固定比例划分法,从每类样本中抽取80%作为训练集(共80个样本),剩余20%作为测试集(共20个样本)。
- 计算类内与类间散度:
* 计算两类训练样本的中心均值$m1$和$m2$。
* 计算每一类的离散矩阵并相加得到类内散度矩阵$Sw$。
* 计算两个类中心之间的外积得到类间散度矩阵$Sb$。
- 确定投影方向:通过
eig函数对inv(Sw)*Sb进行特征值分解,选取最大特征值对应的特征向量作为最优投影向量$w$。 - 投影与阈值计算:
* 利用矩阵乘法将训练集和测试集投影到$w$方向上。
* 取投影后两类训练中心点的几何中点作为分类阈值(Threshold)。
- 预测与评估:通过比较投影值与阈值的大小关系决定样本类别,并根据投影方向的极性自动调整逻辑判断。计算预测准确率并生成结果对比表。
关键函数与算法细节分析
- Scatter Matrices 计算:系统通过
(data' - m) * (data' - m)'的矩阵运算实现散度矩阵计算。$Sw$反映了类内样本的紧凑度,$Sb$反映了类中心的分离程度。 - 最优向量 $w$ 的确定:虽然二分类问题中 $w$ 可简化计算,但系统采用了更通用的特征值分解法(
eig(inv(Sw)*Sb)),这为后续扩展至多分类任务奠定了算法基础。 - 判定阈值逻辑:系统实现了自适应类别判定。通过比较投影后 $m1_proj$ 与 $m2_proj$ 的大小,解决了投影向量方向不确定(正负性)导致的分类逻辑失效问题。
- 可视化模块:
* 使用
scatter3绘制3D点集,展示原始特征分布。
* 使用
plot在1D轴上绘制投影点,并用
line标识分类边界。
* 使用
histogram配合
Normalization, pdf参数绘制概率密度曲线,展现两类在投影轴上的重叠程度和分离效果。
使用方法
- 打开MATLAB软件。
- 将系统代码文件放置在当前工作目录。
- 在命令行窗口输入函数名称并回车运行。
- 系统将依次在命令行输出:
* 类内散度矩阵 $Sw$
* 类间散度矩阵 $Sb$
* 最优投影向量 $w$
* 测试集分类准确率
* 分类结果预览表
- 系统将自动弹出两个图形窗口:
* 图1显示原始3D数据与投影后的一维分布对比。
* 图2显示投影后两类数据的概率密度分布,用于分析分类器的性能。