您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > FISHER线性判别MATLAB实现
Fisher线性判别上机实验报告班级:学号:姓名:一.算法描述Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。Fisher线性判别分析,就是通过给定的训练数据,确定投影方向W和阈值w0,即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。线性判别函数的一般形式可表示成0)(wXWXgT其中dxxX1d21Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。如下为具体步骤:(1)W的确定各类样本均值向量mi样本类内离散度矩阵iS和总类内离散度矩阵wS12wSSSx1mx,1,2iiXiiNTxS(xm)(xm),1,2iiiiXi样本类间离散度矩阵bS在投影后的一维空间中,各类样本均值Tiim'=Wm样本类内离散度和总类内离散度TTiiwwS'=WSWS'=WSW样本类间离散度TbbS'=WSWFisher准则函数为max2221221~~)~~()(SSmmWJF(2)阈值的确定w0是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则:令)()()(21xxxggg则:如果g(x)0,则决策wx1;如果g(x)0,则决策wx2;如果g(x)=0,则可将x任意分到某一类,或拒绝。(3)Fisher线性判别的决策规则Fisher准则函数满足两个性质:1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。根据这个性质确定准则函数,根据使准则函数取得最大值,可求出W:-1w12W=S(m-m)。这就是Fisher判别准则下的最优投影方向。最后得到决策规则若PPmm)()(2112log))(21()(大于或小于,则{12wwxT1212S(mm)(mm)b对于某一个未知类别的样本向量x,如果y=WT·xy0,则x∈w1;否则x∈w2。二.数据描述1.iris数据IRIS数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,有4维,分为3类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。2.sonar数据Sonar数据集包含208个数据集,有60维,分为2类,第一类为98个数据,第二类为110个数据,每个数据包含60个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。三.实验结果以及源代码1.Iris(1)代码:clccleardata=xlsread('Iris');Iris1=data(1:50,1:4);Iris2=data(51:100,1:4);Iris3=data(101:150,1:4);%类均值向量m1=mean(Iris1);m2=mean(Iris2);m3=mean(Iris3);%各类内离散度矩阵s1=zeros(4);s2=zeros(4);s3=zeros(4);fori=1:1:30s1=s1+(Iris1(i,:)-m1)'*(Iris1(i,:)-m1);endfori=1:1:30s2=s2+(Iris2(i,:)-m2)'*(Iris2(i,:)-m2);endfori=1:1:30s3=s3+(Iris3(i,:)-m3)'*(Iris3(i,:)-m3);end%总类内离散矩阵sw12=s1+s2;sw13=s1+s3;sw23=s2+s3;%投影方向w12=((sw12^-1)*(m1-m2)')';w13=((sw13^-1)*(m1-m3)')';w23=((sw23^-1)*(m2-m3)')';%判别函数以及阈值T(即w0)T12=-0.5*(m1+m2)*inv(sw12)*(m1-m2)';T13=-0.5*(m1+m3)*inv(sw13)*(m1-m3)';T23=-0.5*(m2+m3)*inv(sw23)*(m2-m3)';kind1=0;kind2=0;kind3=0;newiris1=[];newiris2=[];newiris3=[];fori=31:50x=Iris1(i,:);g12=w12*x'+T12;g13=w13*x'+T13;g23=w23*x'+T23;if((g120)&(g130))newiris1=[newiris1;x];kind1=kind1+1;elseif((g120)&(g230))newiris2=[newiris2;x];elseif((g130)&(g230))newiris3=[newiris3;x];endendfori=31:50x=Iris2(i,:);g12=w12*x'+T12;g13=w13*x'+T13;g23=w23*x'+T23;if((g120)&(g130))newiris1=[newiris1;x];elseif((g120)&(g230))kind2=kind2+1;newiris2=[newiris2;x];elseif((g130)&(g230))newiris3=[newiris3;x];endendfori=31:50x=Iris3(i,:);g12=w12*x'+T12;g13=w13*x'+T13;g23=w23*x'+T23;if((g120)&(g130))newiris1=[newiris1;x];elseif((g120)&(g230))newiris2=[newiris2;x];elseif((g130)&(g230))kind3=kind3+1;newiris3=[newiris3;x];endendcorrect=(kind1+kind2+kind3)/60;fprintf('\n综合正确率:%.2f%%\n\n',correct*100);(2)实验结果:综合正确率=96.67%2.Sonar(1)代码:clccleardata=xlsread('sonar');Sonar1=data(1:98,1:60);Sonar2=data(99:208,1:60);%类均值向量m1=mean(Sonar1);m2=mean(Sonar2);%各类内离散度矩阵s1=zeros(60);s2=zeros(60);fori=1:1:70s1=s1+(Sonar1(i,:)-m1)'*(Sonar1(i,:)-m1);endfori=1:1:80s2=s2+(Sonar2(i,:)-m2)'*(Sonar2(i,:)-m2);end%总类内离散矩阵sw12=s1+s2;%投影方向w12=((sw12^-1)*(m1-m2)')';%判别函数以及阈值T(即w0)T12=-0.5*(m1+m2)*inv(sw12)*(m1-m2)';kind1=0;kind2=0;newsonar1=[];newsonar2=[];fori=71:98x=Sonar1(i,:);g12=w12*x'+T12;ifg120newsonar1=[newsonar1;x];kind1=kind1+1;elsenewsonar2=[newsonar2;x];endendfori=81:110x=Sonar2(i,:);g12=w12*x'+T12;ifg120newsonar1=[newsonar1;x];elsenewsonar2=[newsonar2;x];kind2=kind2+1;endendcorrect=(kind1+kind2)/58;fprintf('\n综合正确率:%.2f%%\n\n',correct*100);(2)实验结果:综合正确率=75.86%
本文标题:FISHER线性判别MATLAB实现
链接地址:https://www.777doc.com/doc-4683897 .html