一、Fisher线性判别Fisher线性判别是统计模式识别的基本方法之一。它简单,容易实现,且计算量和存储量小,是实际应用中最常用的方法之一。Fisher判别法Fisher在1936年发表的论文中首次提出的线性判别法。Fisher判别法的基本思想是寻找一个最好的投影,当特征向量x从d维空间映射到这个方向时,两类能最好的分开。这个方法实际上涉及到特征维数的压缩问题。一维空间的Fisher线性判别函数为:21212()()FmmJwSS(1)im=xN1,i=1,2(2)2,1,)()(imxmxSTixiii(3)其中,1m和2m是两个样本的均值,1S,2S分别为各类样本的的类内离散度。投影方向w为:)(211mmSww(4)12wSSS(5)在Fisher判决函数中,分子反应了映射后两类中心的距离平方,该值越大,类间可分性越好;分母反应了两类的类内的离散度,其值越小越好;从总体上讲,()FJw的值越大越好,在这种可分性评价标准下,使()FJw达到最大值的w即为最佳投影方向。1.1、Fisher线性判别实验流程图分别取25组类别1和类别2的样本进行训练通过式2~5,计算得到w和决策面阈值构成fisher判别函数分别计算类1类2识别的准确率选取另外25组类别1和类别2的样本进行测试是否大于阈值?类别1的个数加1类别2的个数加2YN1.2Fisher线性判别mtalab代码data=importdata('C:\Users\zzd\Desktop\data-ch5.mat');data1=data.data;data2=data.label;sample1=data1(1:25,:);sample2=data1(51:75,:);sample=[sample1sample2];sp_l=data2(26:75);test1=data1(26:50,:);test2=data1(76:100,:);test=[test1test2];lth=zeros(50,50);sample_m1=mean(sample1);sample_m2=mean(sample2);m1=sample_m1';m2=sample_m2';sb=(m1-m2)*(m1-m2)';s1=zeros(2);forn=1:25temp=(sample1(n,:)'-m1)*(sample1(n,:)'-m1)';s1=s1+temp;end;s2=zeros(2);forn=1:25temp=(sample2(n,:)'-m2)*(sample2(n,:)'-m2)';s2=s2+temp;end;sw=s1+s2;vw=inv(sw)*(m1-m2);a_m1=vw'*m1;a_m2=vw'*m2;w0=(a_m1+a_m2)/2;forn=1:50if(vw'*test(n,:)'-w00)m1(n,:)=1;elsem1(n,:)=2;end;end;m1;count1=0;count2=0;forn=1:25ifm1(n,:)==sp_l(n,:)count1=count1+1;elsenendifm1(n+25,:)==sp_l(25+n,:)count2=count2+1;elsen+25endendclass1_rate=count1/25class2_rate=count2/25plot(sample(1:25,1),sample(1:25,2),'r.');holdon;plot(test(1:25,1),test(1:25,2),'b.');plot(sample(26:50,1),sample(26:50,2),'m.');plot(test(26:50,1),test(26:50,2),'g.');x1=[-2:0.01:4];y1=x1*vw(2)/vw(1);plot(x1,y1);1.3Fisher线性判别实验运行结果class1_rate=0.8000class2_rate=0.8400二、近邻法邻近法最初由Court和Hart于1968年提出的。它是一种理论上比较成熟的方法,也是一种简单、有效、非参数的机器学习算法之一,并且取得了较好的效果.。其基本思想是在训练样本中找到测试样本的最近邻,然后根据这个最近邻样本的类别来决定测试样本的类别,如图1所示。邻近法算法所选择的邻居都是已经正确分类的对象。邻近法虽然从原理上也依赖于极限定理,但在类别决策时,只与最相邻的样本有关。该算法在分类时的不足主要有:如果样本数目太少,样本的分布可能会带有很大的偶然性,不一定能很好地代表数据内的分布情况,此时就会影响最近邻法的性能。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的最近邻点。如果写成判别函数的形式,iw类的判别函数可以写作:1,...,(),min()kkicgxxigx则(6)决策规则为各类的判别函数比较大小,即1,...,(),min()kkicgxxigx则(7)2.1邻近法分类流程图分别取25组类别1和类别2的样本作为训练样本选取另外25组类别1和类别2的样本作为测试样本计算出距每个测试样本最近的训练对象将测试样本的类别判定为最近训练样本的类别分别计算类1类2识别的准确率2.2邻近法分类实验matlab代码data=importdata('C:\Users\zzd\Desktop\data-ch5.mat');data1=data.data;data2=data.label;sample1=data1(1:25,:);sample2=data1(51:75,:);sample=[sample1sample2];sp_l=data2(26:75);test1=data1(26:50,:);test2=data1(76:100,:);test=[test1test2];%plot(test(:,1),test(:,2),'.');lth=zeros(50,50);forn=1:50fori=1:50lth(n,i)=((test(n,1)-sample(i,1))^2+(test(n,2)-sample(i,2))^2)^(1/2);endendlth=lth';[a,b]=min(lth);c1=0;c2=0;fork=1:25ifb(k)=25c1=c1+1;elsekendifb(k+25)25c2=c2+1;elsek+25endendclass1_rate=c1/25class2_rate=c2/25figureplot(sample(1:25,1),sample(1:25,2),'r.');holdon;plot(test(1:25,1),test(1:25,2),'b.');plot(sample(26:50,1),sample(26:50,2),'m.');plot(test(26:50,1),test(26:50,2),'g.');2.3近邻法分类实验运行结果class1_rate=0.9600class2_rate=0.8800三、实验总结比较两类的分类结果可以得出:用fisher线性判别分析方法得到的类1类2的识别率分别是80%和84%;而用近邻法得到的识别率分别为96%和88%。因此近邻法的识别率要高于fisher线性判别,主要原因是这两种类型的点相对集中,有一定的规律,但是线性不可分,存在交叠的情况。在这个分类实验中近邻法有着较高的识别率,但是如果对样本数目少或规律比较复杂的样本,选择近邻法得到的结果可能会大打折扣。因此要根据具体的应用场合来选择合适的分类方法。