实验二Fisher线性判别实验一、实验目的应用统计方法解决模式识别问题的困难之一是维数问题,低维特征空间的分类问题一般比高维空间分类问题简单。因此,人们力图将特征空间进行降维,降维的一个基本思路是将d维特征空间投影到一条直线上,形成一维空间,这在数学上比较容易实现。问题的关键是投影之后原来线性可分的样本可能变为线性不可分。一般对于线性可分的样本,总能找到一个投影方向,使得降维后样本仍然线性可分。如何确定投影方向使得降维以后,样本不但线性可分,而且可分性更好(即不同类别的样本之间的距离尽可能远,同一类别的样本尽可能集中分布),就是Fisher线性判别所要解决的问题。本实验通过编制程序让初学者能够体会Fisher线性判别的基本思路,理解线性判别的基本思想,掌握Fisher线性判别问题的实质。二、实验原理Fisher线性判别分类器(FisherLinearDiscriminantAnalysis,FLDA),此方法的基本思想是在Fisher准则下,先求解最佳鉴别矢量,然后将高维的样本投影到最佳鉴别矢量张成的空间,使投影后的样本在低维空间有最大类间距离和最小类内距离,这样在低维空间中样本将有最佳的可分性,分类是一项非常基本和重要的任务,并有着极其广泛的应用。分类是利用预定的已分类数据集构造出一个分类函数或分类模型(也称作分类器),并利用该模型把未分类数据映射到某一给定类别中的过程。分类器的构造方法很多,主要包括规则归纳、决策树、贝叶斯、神经网络、粗糙集、以及支持向量机(SVM)等方法。其中贝叶斯分类方法建立在贝叶斯统计学[v1和贝叶斯网络[s1基础上,能够有效地处理不完整数据,并且具有模型可解释、精度高等优点,而被认为是最优分类模型之一[9]。尤其是最早的朴素贝叶斯分类器[l0l虽然结构简单,但在很多情况下却具有相当高的分类精度,可以达到甚至超过其它成熟算法如c4.5[l’]的分类精度,而且对噪声数据具有很强的抗干扰能力。因此,对贝叶斯分类算法的深入研究,无论对其理论的发展,还是在实际中的应用,都具有很重要的意义。三、实验说明及要求1.Fisher准则函数为:22212)21()(SSmmwJF2.各类样本均值向量imim=xN1,i=1,23.样本类内离散矩阵iS和总类内离散矩阵wS2,1,)()(imxmxSTixiii21SSSw.4.样本类间离散矩阵bSbS=Tmmmm))((2121三、实验过程及结果1、给出样本及确定类别m1和m2第一类样本放在m1中,第二类样本放在m2中。2、编程产生样本的协方差矩阵、平均值、总协方差,用Fisher线性判别方法对三维数据求最优方向W的通用函数。求取数据分类的Fisher投影方向的程序如下:其中w为投影方向,总类内散度Sw,均值是u1,u2。clearclc…….w=inv(Sw)*(u1-u2)';3、对下面表1-1样本数据中的类别m1和m2计算最优方向W。4、画出最优方向W的直线,并标记出投影后的点在直线上的位置。表1-1Fisher线性判别实验数据类别m1m2样本X1X2X3X1X2X31-0.40.580.0890.831.6-0.0142-0.310.27-0.041.11.60.483-0.380.055-0.035-0.44-0.410.324-0.150.530.0110.047-0.451.45-0.350.470.0340.280.353.160.170.690.1-0.39-0.480.117-0.0110.55-0.180.34-0.0790.145、画出投影前的两类样本点和投影线。a)figure(1)b)plot3(x1,y1,z1,'r*',x2,y2,z2,'b*');6、画出投影后的两类样本点和投影线。c)figure(2)d)x=-1:0.1:1;e)y=w(2,1)/w(1,1)*x;f)z=w(3,1)/w(1,1)*x;g)plot3(x,y,z);holdon7、选择决策边界,实现新样本xx1=(-0.7,0.58,0.089),xx2=(0.047,-0.4,1.04)的分类编程判断xx1和xx2分别属于哪一类?8、程序运行结果如图1-1和图1-2所示。图1-1试验程序(matlab版):clearclccloseall;%m1,m2均为10个样本%m1=[-0.4,0.58,0.089;-0.31,0.27,-0.04;0.38,0.055,-0.035;-0.15,0.53,0.011;-0.35,0.47,0.034;0.17,0.69,0.1;-0.011,0.55,-0.18];%m2=[0.83,1.6,-0.014;1.1,1.6,0.48;-0.44,-0.41,0.32;0.047,-0.45,1.4;0.28,0.35,3.1;-0.39,-0.48,0.11;0.34,-0.079,0.14];%a)对类别m1,m2,利用fisher原则计算投影方向wm1=[000;100;102;110;0.500.5;10.50;100.5];m2=[001;010;011;121;00.51;010.5;0.512];u1=mean(m1);%求均值u2=mean(m2);%计算类内散度Si和总类内散度Sw%S1=(m1(1,:)-u1)'*(m1(1,:)-u1)%S2=(m2(1,:)-u2)'*(m2(1,:)-u2)%fori=2:7%S1=S1+(m1(i,:)-u1)'*(m1(i,:)-u1);%S2=S2+(m2(i,:)-u2)'*(m2(i,:)-u2);%endOne1=ones(7,1);One2=ones(7,1);S1=(m1-One1*u1)'*(m1-One1*u1);S2=(m2-One2*u2)'*(m2-One2*u2);Sw=S1+S2;%变换向量w=inv(Sw)*(u1-u2)';%b)画出投影前的两类样本点和投影线.(即特征向量:各类方差)x1=m1(1:7,1);y1=m1(1:7,2);z1=m1(1:7,3);x2=m2(1:7,1);y2=m2(1:7,2);z2=m2(1:7,3);%subplot(1,2,1);figure(1)plot3(x1,y1,z1,'r*',x2,y2,z2,'b*');%plot3为三维线图title('原样本分布图');%画出原两类样本点holdonx=-2:0.1:2;y=w(2,1)/w(1,1)*x;z=w(3,1)/w(1,1)*x;plot3(x,y,z);%画出投影线legend('第一类样本','第二类样本','投影线',2);%rotate3Don%鼠标移动可以旋转三维坐标%c)画出投影后的两类样本点和投影线%subplot(1,2,2);figure(2)x=-2:0.1:2;y=w(2,1)/w(1,1)*x;z=w(3,1)/w(1,1)*x;plot3(x,y,z);%画出投影线holdon%对w1中的点投影fori=1:7x1=(m1(i,1)+w(2,1)/w(1,1)*m1(i,2)+w(3,1)/w(1,1)*m1(i,3))/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);y1=w(2,1)/w(1,1)*x1;z1=w(3,1)/w(1,1)*x1;plot3(x1,y1,z1,'r*');X1(i,1)=x1;X1(i,2)=y1;X1(i,3)=z1;end%对w2中的点投影fori=1:7x2=(m2(i,1)+w(2,1)/w(1,1)*m2(i,2)+w(3,1)/w(1,1)*m2(i,3))/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);y2=w(2,1)/w(1,1)*x2;z2=w(3,1)/w(1,1)*x2;plot3(x2,y2,z2,'b*');title('投影后的样本分布图');X2(i,1)=x2;X2(i,2)=y2;X2(i,3)=z2;endfori=1:7X11(i)=w'*X1(i,:)';X21(i)=w'*X2(i,:)';endM1=mean(X11);M2=mean(X21);F=(M1+M2)/2;%分界阈值点a=input('请输入测试样本点坐标x=');b=input('请输入测试样本点坐标y=');c=input('请输入测试样本点坐标z=');plot3(a,b,c,'go');a1=(a+w(2,1)/w(1,1)*b+w(3,1)/w(1,1)*c)/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);b1=w(2,1)/w(1,1)*a1;c1=w(3,1)/w(1,1)*a1;L=[a1b1c1];exam=w'*L';ifexamFplot3(a1,b1,c1,'go');fprintf('该点属于第一类\n');elseplot3(a1,b1,c1,'go');fprintf('该点属于第二类\n');end%rotate3Don%鼠标移动可以旋转三维坐标四、实验总结本实验通过Fisher线性判别法,即把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维。通过实验找到了能使两类样本的投影明显的分开得一条投影线并通过图像直观的反应出来。存在的不足,对掌握matlab编写公式的不熟练造成了编程上一定的障碍,仅测试了两类样本。有待改进:测试多类样本观察实验结果。