思想:多维 --> Fisher变换 --> 利于分类的一维
1.已知:
给定n维训练模式 x1,x2,...,xn,其中有N1和N2个模式分属w1和w2类(N1+N2=N),分别记为{xj_(1)}和{xj_(2)}
2.目标:
我们希望通过Fisher变换之后,同一类的模式向量“距离”更近,而类之间的“距离”更远,这样达到更容易区分的目的。
同一类的模式向量“距离”:类内离散度矩阵(类内离差阵)
类之间的“距离”:类间离散度矩阵(类间离差阵)
3.变换前的类内离散度矩阵和类间离散度矩阵
变换前的类内离散矩阵Swi=sum_j(xj_(i)-mi)(xj_(i)-mi)'
其中mi=1/Ni sum (xj_(i))是各类的模式均值矢量。所以类内离散度矩阵实际上就是各模式矢量在各维度的协方差矩阵。
总的类内离散度矩阵为各个类内离散度矩阵相加,如果只考虑两个类的话:Sw=Sw1+Sw2;
变换前的类间离散度矩阵:SB=(m1-m2)(m1-m2)'
4.Fisher变换
yj_(i)=u'*xj_(i)
其中u就是变换矩阵,它的行数和x相同,而列数是新的维数
5.变换后的类内离散度矩阵和类间离散度矩阵
类内:Swi~=sum (yj_(i)-mi~)(yj_(i)-mi~)'
=sum(u'*xj_(i)-u'*mi)(u'*xj_(i)-u'*mi)'
=u'*Swi*u
总类内: Sw~=u'*Sw*u
类间: SB~=u'*SB*u
6.Fisher判别函数
JF(u)=SB~/Sw~=(u'*SB*u)/(u'*Sw*u)
这个值越大,说明变换后越容易区分(求导后应该是一个矢量,如何有大小之分)
让其对u求导(需要利用二次型对其矢量求导的公式):
dJF/du=(2*(u'*Sw*u)*SB*u-2*(u'*SB*u)*Sw*u)/(u'*Sw*u)^2=NON(表示空)
令 lamda=u'*Sb*u/u'*Sw*u,则 (lamda是标量。为什么?)
SB*u=lamda*Sw*u
7.u的求解
当N较大时,Sw通常是非奇异的:(|Sw|~=0,即 Sw是可逆的)
Sw^-1*SB*u=lamda*u
于是演变为求特征值和特征向量的情况
上式展开:
Sw^-1*(m1-m2)*(m1-m2)'*u=lamda*u
考虑到(m1-m2)'*u=a(a是标量),而且我们只关心u的方向,而不关心大小:
u=Sw^-1*(m1-m2)