模式识别算法之1----Fisher线性判别

思想:多维 --> 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)

 

posted @ 2013-11-27 11:56  I know you  阅读(3296)  评论(0编辑  收藏  举报