LDA(Linear Discriminant Analysis)算法推导和计算方法
LDA也称Fisher线性判别,最早是由Fisher提出的,但是,最早的版本为两类的版本。
后来,又在两类的基础上进行了扩展,得出了多类的版本。
LDA基本定义中,需要注意SW(类内散度矩阵)和SB(类间散度矩阵)的定义。
SW的定义可以由两类扩展得到,而SB的定义则与两类有所不同,是由每类的均值和总体均值的乘积矩阵求和得到的,注意,每类还需要乘以每类的样本数目Ni。
最终,需要求得一个矩阵W使得投影后类内散度尽力小,而类间散度尽力大。多类情况下,散度表示为一个矩阵,则上面转换为矩阵的迹极小或者极大。而且,还存在多种准则。但是,很多准则最终可以转换为计算矩阵束(SB,SW)的广义特征值和特征向量问题。
一般情况下,LDA之前会做一次PCA,保证SW矩阵的正定性。因此,上述SB为对称实矩阵,SW为对称实矩阵,并且正定,通过矩阵定理将广义特征值问题转换为对称矩阵特征值问题。其中,计算经过SW choleskey分解之后的矩阵对SB进行变换,得到对称阵,并计算其特征值和特征向量。(此处,无法插入公式,是百度空间的一大缺陷)。从而,可以调用Opencv的函数cvEigenVV进行计算。注意,cvEigenVV函数只能够计算对称阵的特征值问题,避免用错。此外,cvEigenVV函数,得到的特征向量似乎已经是降序的,但是,特征值是没有经过降序处理的,需要自行处理。
主要注意的地方在于,计算广义逆时的特殊处理。如果使用matlab,则没有这个问题,因为matlab提供了计算广义逆的函数。
PCA 分解的基本推导和计算方法
PCA是数据降维的一种方法,其目标是找到数据分布方差最大的方向,并将数据向该方向投影并保持投影后恢复数据的残差最小。即找到e和a,使得x的估计值x‘=m+e*a与x残差最小。注意,这里e为一个方向向量(非矩阵),且限定e的模为1(否则a和e不唯一)。
PCA的推导,通过最优化x-x’的均方误差最小,得到a=T(e)*(x-m)。
进一步,将均方误差表示为e的表达式,并在e的模为1的约束下相对e最优化均方误差。
可以推导得到e的最优解需要满足S*e=lamabda*e,从而e转为为求矩阵的特征值和特征向量问题。而S阵为x的散度矩阵,存在S=X*X‘,X为输入特征减去均值向量组成的矩阵。
由于X存在奇异值分解,即X=U*D*T(V),则S=U*D*D*T(U)。
对于特征值和特征向量,存在S=E*D2*T(E),从而可知,存在E=U,D2=D*D。
需要注意,是对X做奇异值分解,而不是对S做。
当然,也可以通过对S求解特征值和特征向量得到投影矩阵。
参考自Duda的模式识别。