www.gusucode.com > 用MATLAB做的Fisher线性分类器 > Fisher/main.m
clear all clc load('selfpaced2s_aa01_100Hz'); load('Truth Labels') C3=y(:,14,:); C3=reshape(C3,151,516); C4=y(:,18,:); C4=reshape(C4,151,516); S=zeros(302,516); Sf=zeros(60,516); for i=1:151; S(i,:)=C3(i,:); end for i=152:302; S(i,:)=C4(i-151,:); end Sf(1,:)=(S(1,:)+S(2,:)+S(3,:)+S(4,:)+S(5,:))/5.0; for i=1:59; Sf(i+1,:)=(S(i*5+1,:)+S(i*5+2,:)+S(i*5+3,:)+S(i*5+4,:)+S(i*5+5,:))/5.0; end S=zeros(60,516); S=Sf; NL=0; NR=0; for i=1:413 if(zz(i)==-1) NL=NL+1; end if(zz(i)==1) NR=NR+1; end end SL=zeros(60,NL); SR=zeros(60,NR); n1=1; n2=1; for i=1:516 if(zz(i)==-1) SL(:,n1)=S(:,i); n1=n1+1; end if(zz(i)==1) SR(:,n2)=S(:,i); n2=n2+1; end end m1=mean(SL,2); m2=mean(SR,2); Sw=zeros(60,60); for i=1:NL Sw=Sw+(SL(:,i)-m1)*(SL(:,i)-m1)'; end for i=1:NR Sw=Sw+(SR(:,i)-m2)*(SR(:,i)-m2)'; end Sb=(m1-m2)*(m1-m2)'; w=inv(Sw)*(m1-m2); y1=w'*SL; y2=w'*SR; y1=mean(y1); y2=mean(y2); y0=(y1+y2)*0.5; sum=0; for i=414:513 y=mean(w'*S(:,i)); if(y>y0&zz(i)==-1|y<y0&zz(i)==1); sum=sum+1; end end rate=sum/100.0;