一、 实验意义及目的
掌握Fisher分类原理,能够利用Matlab编程实现Fisher线性分类器设计, 熟悉基于Matlab算法处理函数,并能够利用算法解决简单问题。 二、算法原理
Fisher准则基本原理:找到一个最合适的投影周,使两类样本在该轴上投影之间的距离尽可能远,而每一类样本的投影尽可能紧凑,从而使分类效果为最佳。 内容:
(1) 尝试编写matlab程序,用Fisher线性判别方法对三维数据求最优方向
w的通用函数
(2) 对下面表1-1样本数据中的类别w1和w2计算最优方向w
(3) 画出最优方向w 的直线,并标记出投影后的点在直线上的位置
(4) 选择决策边界,实现新样本xx1=(,,),xx2=(,,)的分类
三 、实验内容
(1) 尝试编写matlab程序,用Fisher线性判别方法对三维数据求最优方向
w的通用函数 程序清单:
clc clear all %10*3样本数据
w1=[,,;,,;,,;,,;,.47,;,,;,,;,,;,,;,,]; w2=[,,;,,;,,;,,;,,;,,;,,;,,;,,;,,];
W1=w1';%转置下方便后面求s1 W2=w2';
m1=mean(w1);%对w1每一列取平均值 结果为1*3矩阵 m2=mean(w2);%对w1每一列取平均值 结果为1*3矩阵 S1=zeros(3);%有三个特征 所以大小为3 S2=zeros(3);
for i=1:10%1到样本数量n
s1=(W1(:,i)-m1)*(W1(:,i)-m1)'; s2=(W2(:,i)-m2)*(W2(:,i)-m2)'; S1=S1+s1; S2=S2+s2; end
sw=S1+S2;
w_new=transpose(inv(sw)*(m1'-m2'));%这里m1m2是行 要转置下 3*3 X 3*1 =3*1 这里提前转置了下 跟老师ppt解法公式其实一样
%绘制拟合结果 数据画图用 y1=w_new*W1
y2=w_new*W2;
m1_new=w_new*m1';%求各样本均值 也就是上面y1的均值 m2_new=w_new*m2';
w0=(m1_new+m2_new)/2%取阈值 %分类判断
x=[ ]; m=0; n=0;
result1=[]; result2=[];
for i=1:2%对待观测数据进行投影计算 y(i)=w_new*x(:,i); if y(i)>w0 m=m+1;
result1(:,m)=x(:,i); else n=n+1;
result2(:,n)=x(:,i); end end
%结果显示
display('属于第一类的点') result1
display('属于第二类的点') result2 figure(1)
scatter3(w1(1,:),w1(2,:),w1(3,:),'+r'),hold on scatter3(w2(1,:),w2(2,:),w2(3,:),'sg'),hold on
scatter3(result1(1,:),result1(2,:),result1(3,:),'k'),hold on
scatter3(result2(1,:),result2(2,:),result2(3,:),'bd') title('样本点及实验点的空间分布图')
legend('样本点w1','样本点w2','属于第一类的实验点','属于第二类的实验点')
figure(2)
title('样本拟合结果')
scatter3(y1*w_new(1),y1*w_new(2),y1*w_new(3),'b'),hold on scatter3(y2*w_new(1),y2*w_new(2),y2*w_new(3),'sr')
(2) 对下面表1-1样本数据中的类别w1和w2计算最优方向w
(3) 画出最优方向w 的直线,并标记出投影后的点在直线上的位置
最优方向w 的直线
投影后的位置
(4) 选择决策边界,实现新样本xx1=(,,),xx2=(,,)的分类
决策边界取法:
分类结果:
四、实验感想
通过这次实验,我学会了fisher线性判别相关的分类方法,对数据分类有了初步的认识,尽管在过程中有不少中间量不会算,通过查阅网络知识以及模式识别专业课ppt等课件帮助,我最终完成了实验,为今后继续深入学习打下良好基础。