⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fisher_classify.m

📁 function [clusters,c,F]=fisher_classify(A,B,data) fisher判别法程序 输入A、B为已知类别样本的样本-变量矩阵
💻 M
字号:
function [clusters,c,F]=fisher_classify(A,B,data)
%fisher判别法程序
%输入A、B为已知类别样本的样本-变量矩阵,data为待分类样本
%输出C为判别系数向量


[s,p]=size(A);t=size(B,1);
n=size(data,1);
if size(B,2)~=p||size(data,2)~=p
    disp('输入数据错误!');return;
end

ave1=zeros(p,1);ave2=zeros(p,1);
clusters=zeros(1,n);
for j=1:p
    ave1(j)=mean(A(:,j));
    for i=1:s
        a(i,j)=A(i,j)-ave1(j);
    end
    ave2(j)=mean(B(:,j));
    for k=1:t  
        b(i,j)=B(i,j)-ave2(j);
    end
end

%求离差矩阵S
S1=a'*a;S2=b'*b;
S=S1+S2;

%根据离差矩阵S求判别系数c
c=inv(S)*(ave1-ave2);
%得到已知两类的判别函数值yA,yB
yA=c'*ave1;
yB=c'*ave2;
%得到最终的判别函数值的分界线y0
y0=(s*yA+t*yB)/(s+t);

%判别分类
for i=1:n
    Y(i)=c'*data(i,:)';
    if yA>y0
        if Y(i)>y0
            clusters(i)=1;
        else 
            clusters(i)=2;
        end
    end
    if yB>y0
        if Y(i)>y0
            if clusters(i)==1
               clusters(i)=0;
            elseif clusters(i)==2|clusters(i)==0
                clusters(i)=2;
            end
        else
            if clusters(i)==2
               clusters(i)=0;
            elseif clusters(i)==1|clusters(i)==0
                clusters(i)=1;
            end
        end
    end
end

disp('两类判别函数值:');
yA,yB
disp('判别系数向量c:');
c
disp('待分类样本用fisher判别法所得分类结果:');
clusters

disp('判别函数的有效性检验:');
F=s*t/(s+t)*(s+t-p-1)/p*abs(yA-yB)
disp('给定显著性水平a=0.05,从F分布表中查出当 F>Fa(p,s+t-p-1)时,所做出的判别是有效的。');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -