基于直接线性判别分析(DLDA)的快速模式识别系统
项目介绍
本项目实现并优化了直接线性判别分析(Direct Linear Discriminant Analysis, DLDA)算法,专门用于解决高维小样本(Small Sample Size, SSS)问题。在诸如人脸识别或生物特征分析等场景中,特征维度往往远大于样本数量,导致传统的类内散度矩阵出现奇异性(不可逆)。本项目通过直接在类间散度矩阵的非零空间内寻求使类内散度最小化的投影方向,实现了高效的降维与分类,确保了系统在处理复杂高维数据时的稳定性和识别精度。
功能特性
- 针对性解决奇异性问题:通过两步特征值分解,规避了传统LDA在小样本情况下因类内散度矩阵奇异而无法直接求逆的缺陷。
- 高维特征提取:系统能够将数百维甚至更高维度的原始数据压缩至极低维度的判别空间(通常为类别数-1维)。
- 端到端流程:涵盖了数据模拟生成、白化变换、判别向量计算、测试集映射、分类识别及多维度可视化展示。
- 高效分类性能:在投影后的特征空间内利用简单的欧氏距离分类器即可实现高准确率的匹配。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 依赖工具箱:统计与机器学习工具箱(用于部分矩阵运算及绘图,非核心算法强制要求)。
- 硬件资源:普通PC即可运行,由于采用了经济型SVD运算,内存占用极低。
核心实现逻辑
系统运行遵循以下标准流程:
- 环境初始化与模拟数据生成
系统首先模拟生成一个典型的小样本数据集。设定5个类别,每个样本拥有200个特征维度,但每类仅提供15个训练样本。通过这种设计,强制系统在特征维度远大于样本数(200 > 75)的压力环境下工作,模拟真实的高维识别场景。
- DLDA 训练算法实现
这是系统的核心逻辑,分为以下关键步骤:
- 类间散度分析:计算每个类别的均值及全局均值,通过类间散度矩阵的分量矩阵进行经济型奇异值分解(SVD),提取出类间散度矩阵的量程空间(Range Space)。
- 白化变换(Whitening):根据提取的非零特征值构造白化矩阵,将原始高维数据投影到一个去相关的子空间中。在此空间内,类间散度被归一化。
- 类内散度最小化:在投影后的空间内计算新的类内散度矩阵。通过特征值分解,寻找使类内方差最小的特征向量(即选择对应特征值最小的向量)。
- 组合投影矩阵:将白化矩阵与最小化类内方差的变换矩阵相乘,得到最终的最优判别投影矩阵。
- 测试与分类识别
- 特征投影:将测试集样本减去训练集全局均值后,通过投影矩阵转换至低维判别空间。
- 距离度量分类:计算测试样本特征与训练集各类别中心在低维空间内的欧氏距离,将其归类至距离最近的类别。
- 评估与可视化
- 准确率计算:自动对比预测标签与真实标签,计算系统识别准确率。
- 判别分量分布图:选取前两个最显著的判别分量,绘制训练集样本的二维投影分布,直观展示类间分离度和类内紧凑度。
- 性能对齐图:动态展示测试样本的真实标签与预测结果的匹配程度。
- 混淆矩阵可视化:通过热力图和数值标注,分析系统在各个类别上的识别精度及误报分布。
关键函数与算法细节说明
数据模拟逻辑:
通过为每个类别设定随机生成的中心点并附加正态分布噪声,构建具有区分度但存在重叠风险的原始数据。这为验证降维算法的类间拉伸能力提供了基础。
判别矩阵计算核心:
核心在于利用 $S_b = H_b H_b^T$ 的特性,不直接处理巨大的 $d times d$ 矩阵,而是处理 $H_b$ 的 SVD 结果。通过这种方式,算法将原本可能涉及数万维矩阵的开销降低到了与类别数相关的规模,极大地提升了运算速度。
降维策略:
不同于标准主成分分析(PCA)追求最大化总方差,DLDA 专注于寻找能最大化“类间距离/类内距离”比值的投影方向。在代码实现中,通过对投影后的类内散度矩阵进行升序排列特征值,确保了系统优先选择那些最能抑制噪声、保持类别紧凑性的轴。
可视化反馈:
系统不仅输出最终准确率,还通过混淆矩阵清晰地展示了哪些类别容易发生混淆,这对于理解模型在高维空间中的判别边界构建具有重要意义。