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;