您的位置:首页 > 其它

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

2013-11-27 11:56 253 查看
思想:多维 --> 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: