线性判别分析(LDA)的高效MATLAB实现详解
线性判别分析(Linear Discriminant Analysis, LDA)是经典的监督降维算法,目标是在最大化类间散度、同时最小化类内散度的准则下,寻找最优的线性投影方向。在小样本、高维数据场景下,LDA 面临类内散度矩阵奇异(singular)的问题,因此实际工程中往往需要结合 PCA 降维、正则化等技巧来保证数值稳定性和计算效率。
本文详细解析一个经过工程优化的 LDA 实现,它支持多种处理小样本问题的策略,包括:
PCA 预降维(Fisherface 模式)
Tikhonov 正则化(Ridge)
自定义正则化矩阵
高效的特征分解路径选择(eig / eigs / Cholesky)
无论你是做人脸识别、图像分类,还是其他高维有标签数据的降维任务,这个实现都能提供稳定、高效的解决方案。
算法核心思想回顾
LDA 的优化目标是最大化广义 Rayleigh 商:
[ J(a) = \frac{a^T S_b a}{a^T S_w a} ]
其中:
( S_b ):类间散度矩阵
( S_w ):类内散度矩阵
经典解法是将问题转化为广义特征值问题:
[ S_b a = \lambda S_w a ]