📄 fisher_classify.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 + -