资源描述:
《fisher算法及其matlab实现.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Fisher判别法讲解以及matlab代码实现两类的线形判别问题可以看作是把所有样本都投影到一个方向上,然后在这个一维空间中确定一个分类的阈值。过这个预置点且与投影方向垂直的超平面就是两类的分类面。第一个问题,如何确定投影方向?这里只讨论两类分类的问题.训练样本集是X={x1,x2...xn},每个样本是一个d维向量,其中第一类w1={Xi,x2...xii},第二类w2={xi,x2...x?2}。我们要寻求一个投影方向w(w也是一个d维向量),投影以后样本变成:yi=WTXi(y是一个标量),i=
2、1...n在原样本空间中,类均值为:1i=1,2(一共两类的均值)mi—Xjnixjwi(ps.mi是一个d*1的矩阵,假设每个维度是一个变量值,mi中的每一维度就是这些变量值的均值,如下图所示:算一第一类均值xlx2ml身高150160155乐重809587.5特别注明:有些例子给的矩阵是这样的:地点样品号水体底泥ASPbASPb甲地12.79匸313.35阳624.6712.3122.3147.2316.8128.8262.1543.547.5815.2943.251916.122&2958.7乙
3、地11.061.222.1820.620.84.063.號27.1303.511.404241137.933.255.14.4322.4516图2这里的单个样本是1*d的矩阵,要注意计算的时候将其转置,不然套用fisher算法公式的时候就会发现最后得到的矩阵维数不对。定义各类类内的离散度矩阵为:(类内离散度矩阵其实就是类协方差矩阵,类在多于一个样本,且样本维度>1时是一个矩阵)S(Xjmi)(XjmJTXjwi(因为,Xj是一个d*1的矩阵,也可称作d维向量,m也是一个d*1的矩阵,所以最后得到的S一
4、定是一个d*d的矩阵)(在用matlab计算的时候直接用cov(wi)即可得到想要的协方差矩阵,故直接计算不探究细节时图2可直接cov算协方差,不用根据公式转置来转置去,不过matlab中算的协方差被缩小了(n1-1)倍,计算时i=cov(w1)*(n1-1))总的类内离散度矩阵:Sw类间离散度矩阵定义为:Sb(mim2)(m1在投影以后的一维空间里,两类的均值分别是;miiNiyjwiyi丄NixTwxjwTwmii=1,2故类内离散度不再是一个矩阵,而是一个值Si(yimJ2yjWii=1,2总类
5、内离散度为:SwwS11S11类间离散度:(miimu)2要使得需求的方向投影能在投影后两类能尽可能的分开,聚集,可表示成如下准则,即fisher准则:而各类内部又尽可能的maxJ(w)Sbb将公式代入并通过拉格朗日求极值的方法,可得投影方向:1wSw(mmJ(w是一个d*1的矩阵,或者说亦是一个d维向量)阈值可表示为:W。m22)最后将待确定样本代入g(x)wTxw0判断g(x)的符号和哪个类相同,确定其属于哪个类别例子(注意表格中所给的样本维度和公式中变量维度的问题)代码已经运行无误ACDEFHt
6、l胃病类型钩蓝蛋白蓝色反应乙酸硫化物归类2228134201113245134104014胃病—20016712271Ls170150781Le100'167201417riso117762s12013310262160100510210非胃病1S5115519r211170125$4212165142532131S510S21221422512571415耒知样100nr72161301006121718);这个例子没有用到不用转置成样代码:%读取excel中特定单元格的数据w12=xlsread(
7、模式识别理论学习胃病分类问题.xls','C2:F16'%分别选取类1和类2、测试样本的数据w1=w12(1:5,:);w2=w12(6:12,:);sample=w12(13:15,:);%计算类1和类2的样本数r1=size(w1,1);r2=size(w2,1);r3=size(sample,1);%计算类1和类2的均值(矩阵)m1=mean(w1);m2=mean(w2);%各类类内离散度矩阵(协方差矩阵)s1=cov(w1)*(r1-1);s2=cov(w2)*(r2-1);%总类内离散度矩
8、阵sw=s1+s2;%投影向量的计算公式w=inv(sw)*(m1-m2)';%计算投影后的一位空间内,各类的均值y1=w'*m1';y2=w'*m2';%计算阈值w0=-1/2*(y1+y2);%和类相同符号被归为同类fori=1:r3y(i)=sample(i,:)*w+w0;ify(i)*(w'*w1(1,:)'+w0)>0y(i)=1;elsey(i)=2;endEnd判断得岀第一个待测样本属于类1,第二,三个待测样本属于类2如果想进一步知道样本