理解fisher判别分析

原理

fisher判别法是去找一个过原点的直线,这个直线要达到的效果如图:
理解fisher判别分析_第1张图片
具体实现方法:
理解fisher判别分析_第2张图片
注:这里的Sw为离差阵,也叫做协方差矩阵。
w即为这条直线的方向

直线为Y = wX

临界点y0 = (n0 * u0 + n1 * u1) / (n0 + n1)

判别时计算数据在线上的投影,将此投影与聚类的中心投影相比较得出此数据应属于哪一类。

实战

例:为了解某河段As,Pb污染状况,设在甲,乙两地监测,采样测的这两种元素在水中和底泥中的浓度(如下表)。依据这些数据判别未知样本是从哪个区域采得的。
理解fisher判别分析_第3张图片
注:后两行为需要判别属于哪一类的样本。


clc
clear
X=load("fisher_values.txt");
x1=X(1:5,:);%甲地的已知数据
x2=X(6:10,:);%乙地的已知数据
r1=size(x1,1);%相当于求甲地的样本数
r2=size(x2,1);%相当于求乙地的样本数
sample=X(11:12,:);%待分类的数据
r3=size(sample,1);
%求各类别的均值
ave1=mean(x1);
avel=ave1';
ave2=mean(x2);
ave2=ave2';
%离差矩阵即协方差矩阵。
s1=cov(x1)*(r1-1);
s2=cov(x2)*(r2-1);
sw=s1+s2;%求出协方差矩阵 
w=inv(sw)*(ave1-ave2)*(r1+r2-2);%求出w
y1=mean(w'.*ave1);
y2=mean(w'.*ave2);
y0=(r1*y1+r2*y2)/(r1+r2);
y0=y0';
%利用0,1来区分类别
for i=1:r3
  y(i,:)=w'*sample(1,:)';
   if y(i,:)>y0
      m(i)=0;
   else
      m(i)=1;
   end
end
m %m表示判断结果

你可能感兴趣的:(数学建模)