《FISHER线性判别MATLAB实现(共8页).doc》由会员分享,可在线阅读,更多相关《FISHER线性判别MATLAB实现(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上Fisher线性判别上机实验报告 班级:学号:姓名: 一 算法描述Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。 Fisher线性判别分析,就是通过给定的训练数据,确定投影方向W和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。 线性判别函数的一般形式可表示成 其中 Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能
2、密集的要求。 如下为具体步骤:(1)W的确定各类样本均值向量mi样本类内离散度矩阵和总类内离散度矩阵样本类间离散度矩阵在投影后的一维空间中,各类样本均值样本类内离散度和总类内离散度 样本类间离散度Fisher准则函数为 max(2)阈值的确定是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则:令则:如果g(x)0,则决策;如果g(x)y0,则xw1;否则xw2。二 数据描述 1.iris数据 IRIS数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,有4维,分为3 类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。 2.son
3、ar数据 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 = zer
4、os(4);s3 = zeros(4);for i=1:1:30 s1 = s1 + (Iris1(i,:) - m1)*(Iris1(i,:) - m1);endfor i=1:1:30 s2 = s2 + (Iris2(i,:) - m2)*(Iris2(i,:) - m2);endfor i=1:1:30 s3 = s3 + (Iris3(i,:) - m3)*(Iris3(i,:) - m3);end %总类内离散矩阵sw12 = s1 + s2;sw13 = s1 + s3;sw23 = s2 + s3;%投影方向w12 = (sw12-1)*(m1 - m2);w13 = (sw1
5、3-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=;for i=31:50 x = Iris1(i,:); g12 = w12 * x + T12; g13 =
6、w13 * x + T13; g23 = w23 * x + T23; if(g12 0)&(g13 0) newiris1=newiris1;x; kind1=kind1+1; elseif(g12 0) newiris2=newiris2;x; elseif(g13 0)&(g23 0)&(g13 0) newiris1=newiris1;x; elseif(g12 0) kind2=kind2+1; newiris2=newiris2;x; elseif(g13 0)&(g23 0)&(g13 0) newiris1=newiris1;x; elseif(g12 0) newiris2=
7、newiris2;x; elseif(g13 0)&(g23 0 newsonar1=newsonar1;x; kind1=kind1+1; else newsonar2=newsonar2;x; endendfor i=81:110 x = Sonar2(i,:); g12 = w12 * x + T12; if g12 0 newsonar1=newsonar1;x; else newsonar2=newsonar2;x; kind2=kind2+1; endendcorrect= (kind1+kind2)/58;fprintf(n综合正确率:%.2f%nn,correct*100);(2)实验结果: 综合正确率=75.86%专心-专注-专业