Fisher分类器设计
- 格式:doc
- 大小:179.00 KB
- 文档页数:8
线性分类器设计(fisher准则)一、数据来源参考文献:《车辆类型自动分类器的研究》农业装备与车辆工程,2007年9月,总第149期二、设计分析众所周知,最简单的判别函数是线性函数,最简单的分界面是超平面,采用线性判别函数所产生的错误率或风险虽然可能比贝叶斯分类器来得大。
不过,它简单,容易实现,而且需要的计算量和存储量小。
故在不要求太高精确度情况下,小样本时可采用此法。
采用上面文献中的数据集,利用fisher准则我们设计了一个线性的分类器。
因为线性分类器只能处理两类问题,所以把原问题做了初步的处理。
选取的特征:长高比( 汽车总长/汽车高度) : x1=L/H顶篷相对位置( ( 车头坐标- 顶篷中心坐标) /汽车总长) : x2=l1 /L顶长比( 顶蓬长度/汽车总长) : x3=l /L样本空间:sample=[2.6522,0.5021,0.8951;2.6240,0.4923,0.9823;%客车训练样本2.9825,0.1922,0.3217;3.0124,0.1596,0.1972;%货车训练样本3.3345,0.6896,0.4217;3.6532,0.6482,0.4576];%轿车训练样本三、程序见fisher.m文件四、结果分析原文章中采用的的改进的BP神经网络算法,能很好的实现分类的效果。
而在这里我们挑了6个训练集样本和3个测试集样本,也很好的实现了分类效果。
但是,若对于大样本来说,贝叶斯分类器的效果更好。
下图就是采用线性分类器的效果图。
客车样本和非客车样本1 1.2 1.4 1.6 1.82 2.2 2.4 2.6 2.83客车样本和非客车样本1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.92。
一、实验意义及目的掌握Fisher分类原理,能够利用Matlab编程实现Fisher线性分类器设计,熟悉基于Matlab算法处理函数,并能够利用算法解决简单问题。
二、算法原理Fisher准则基本原理:找到一个最合适的投影周,使两类样本在该轴上投影之间的距离尽可能远,而每一类样本的投影尽可能紧凑,从而使分类效果为最佳。
内容:(1)尝试编写matlab程序,用Fisher线性判别方法对三维数据求最优方向w的通用函数(2)对下面表1-1样本数据中的类别w1和w2计算最优方向w(3)画出最优方向w 的直线,并标记出投影后的点在直线上的位置(4)选择决策边界,实现新样本xx1=(-0.7,0.58,0.089),xx2=(0.047,-0.4,1.04)的分类三、实验内容(1)尝试编写matlab程序,用Fisher线性判别方法对三维数据求最优方向w的通用函数程序清单:clcclear all%10*3样本数据w1=[-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,.47,0.034;0.17,0.69,0.1;-0.011,0.55,-0.18;-0.27,0.61,0.12;-0.065,0.49,0.0012;-0.12,0.054,-0.063];w2=[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;-0.3,-0.22,2.2;1.1,1.2,-0.46;0.18,-0.11,-0.49];W1=w1';%转置下方便后面求s1W2=w2';m1=mean(w1);%对w1每一列取平均值结果为1*3矩阵m2=mean(w2);%对w1每一列取平均值结果为1*3矩阵S1=zeros(3);%有三个特征所以大小为3S2=zeros(3);for i=1:10%1到样本数量ns1=(W1(:,i)-m1)*(W1(:,i)-m1)';s2=(W2(:,i)-m2)*(W2(:,i)-m2)';S1=S1+s1;S2=S2+s2;endsw=S1+S2;w_new=transpose(inv(sw)*(m1'-m2'));%这里m1m2是行要转置下3*3 X 3*1 =3*1 这里提前转置了下跟老师ppt解法公式其实一样%绘制拟合结果数据画图用y1=w_new*W1y2=w_new*W2;m1_new=w_new*m1';%求各样本均值也就是上面y1的均值m2_new=w_new*m2';w0=(m1_new+m2_new)/2%取阈值%分类判断x=[-0.7 0.0470.58 -0.40.089 1.04 ];m=0; n=0;result1=[]; result2=[];for i=1:2%对待观测数据进行投影计算y(i)=w_new*x(:,i);if y(i)>w0m=m+1;result1(:,m)=x(:,i);elsen=n+1;result2(:,n)=x(:,i);endend%结果显示display('属于第一类的点')result1display('属于第二类的点')result2figure(1)scatter3(w1(1,:),w1(2,:),w1(3,:),'+r'),hold onscatter3(w2(1,:),w2(2,:),w2(3,:),'sg'),hold onscatter3(result1(1,:),result1(2,:),result1(3,:),'k'),hold onscatter3(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 onscatter3(y2*w_new(1),y2*w_new(2),y2*w_new(3),'sr')(2)对下面表1-1样本数据中的类别w1和w2计算最优方向w(3)画出最优方向w 的直线,并标记出投影后的点在直线上的位置最优方向w 的直线投影后的位置(4)选择决策边界,实现新样本xx1=(-0.7,0.58,0.089),xx2=(0.047,-0.4,1.04)的分类决策边界取法:分类结果:四、实验感想通过这次实验,我学会了fisher线性判别相关的分类方法,对数据分类有了初步的认识,尽管在过程中有不少中间量不会算,通过查阅网络知识以及模式识别专业课ppt等课件帮助,我最终完成了实验,为今后继续深入学习打下良好基础。
3.5 Fisher分类器(Fisher Linear Discriminant)Fisher 判别法是历史上最早提出的判别方法之一,其基本思想是将n 类m 维数据集尽可能地投影到一个方向(一条直线),使得类与类之间尽可能分开。
从形式上看,该方法就是所谓的一种降维处理方法。
为简单起见,我们以两类问题1和2的分类来说明Fisher 判别法的原理,如图3.4所示。
设数据阵为XR Nm,1共有N 1个样本,2共有N 2个样本,N = N 1+N 2。
两个类别在输入空间的均值向量为1类*w最佳投影方向2μ1μ2类判为判为最不利投影方向x p 1x p 2图3.4, Fisher 判别法几何原理示意图)37.3(11212211⎪⎪⎩⎪⎪⎨⎧∈=∈=∑∑∈∈m pmp R N R N p pϖϖx x x μx μ设有一个投影方向()mT m R w w w ∈=,,,21 w ,这两个均值向量在该方向的投影为)38.3(1~1~1222111121⎪⎪⎩⎪⎪⎨⎧∈==∈==∑∑∈∈R N R N p p pT T p T T ϖϖx x x w μw μx w μw μ在w方向,两均值之差为())39.3(~~2121μμw μμ -=-=∇T类似地,样本总均值向量在该方向的投影为)40.3(1~11R NNp pT T ∈==∑=x w μw μ定义类间散度(Between-class scatter)平方和SS B 为()()()()()()()()()[])41.3(~~~~~~222111222211221222211w S w w μμμμμμμμw μw μw μw μw μμμμμμ B T T T T T T T T j j j B N N N N N N N SS =--+--=-+-=-=-+-=∑=其中()()()()()())42.3(21222111∑=--=--+--=j Tj j j TT B N N N μμμμμμμμμμμμS定义类j 的类内散度(Within-class scatter)平方和为()())43.3(~22∑∑∈∈-=-=jjNp jT p T N p jp T Wj x x SS μw w μw两个类的总的类内散度误差平方和为()()())44.3(2121221wS w w μμw μw w W T j Np T jp j p T j N p jT p T j wj W j jx x x SS SS =⎥⎥⎦⎤⎢⎢⎣⎡--=-==∑∑∑∑∑=∈=∈=其中,()())45.3(21∑∑=∈--=j N p Tjp j p W jx x μμS我们的目的是使类间散度平方和SS B 与类内散度平方和SS w 的比值为最大,即())46.3(max wS w w S w wW T B T WB SS SS J ==2类1类图3.5a, Fisher判别法—类间散度平方和(分子)的几何意义2类1类图3.5b, Fisher判别法—类内散度平方和(分母)的几何意义图3.5给出了类间散度平方和S B 与类内散度平方和S E 的几何意义。
Fisher线性分类器通俗解释及MATLAB、Python实现⼀、通俗的解释:问题提出:还是以iris的数据为例,有A、B、C三种花,每⼀类的特征都⽤4维特征向量表⽰。
现在已知⼀个特征向量,要求对应的类别,⽽我们⼈可以直接通过眼睛看⽽作出分类的是在⼀维⼆维三维空间,⽽不适应这样的四维数据。
启⽰:假设有这样的⼀个⽅向向量,其与特征向量进⾏内积运算(即向⽅向向量的投影)后,结果为⼀个数值,若同类的特征向量投影后聚集在⼀起,不同类的特征投影后相对分散,那么,我们的⽬的就达到了。
⽬标:这样就有了⽅向,即要寻找⼀个独特的⽅向,使其达到我们的要求。
注:具体的推导过程,参看教科书,另外,在求解极值的时候,利⽤了矩阵论中的向量导数运算。
⼆、MATLAB程序:clearA=[5.1,3.5,1.4,0.24.9,3.0,1.4,0.24.7,3.2,1.3,0.24.6,3.1,1.5,0.25.0,3.6,1.4,0.25.4,3.9,1.7,0.44.6,3.4,1.4,0.35.0,3.4,1.5,0.24.4,2.9,1.4,0.24.9,3.1,1.5,0.15.4,3.7,1.5,0.24.8,3.4,1.6,0.24.8,3.0,1.4,0.14.3,3.0,1.1,0.15.8,4.0,1.2,0.25.7,4.4,1.5,0.45.4,3.9,1.3,0.45.1,3.5,1.4,0.35.7,3.8,1.7,0.35.1,3.8,1.5,0.35.4,3.4,1.7,0.25.2,4.1,1.5,0.15.5,4.2,1.4,0.24.9,3.1,1.5,0.15.0,3.2,1.2,0.25.5,3.5,1.3,0.24.4,3.2,1.3,0.25.0,3.5,1.6,0.6 5.1,3.8,1.9,0.44.8,3.0,1.4,0.35.1,3.8,1.6,0.24.6,3.2,1.4,0.25.3,3.7,1.5,0.2 5.0,3.3,1.4,0.2 7.0,3.2,4.7,1.4];B=[6.4,3.2,4.5,1.5 6.9,3.1,4.9,1.55.5,2.3,4.0,1.36.5,2.8,4.6,1.55.7,2.8,4.5,1.36.3,3.3,4.7,1.6 4.9,2.4,3.3,1.0 6.6,2.9,4.6,1.3 5.2,2.7,3.9,1.4 5.0,2.0,3.5,1.05.9,3.0,4.2,1.56.0,2.2,4.0,1.0 6.1,2.9,4.7,1.45.6,2.9,3.6,1.36.7,3.1,4.4,1.4 5.6,3.0,4.5,1.55.8,2.7,4.1,1.06.2,2.2,4.5,1.5 5.6,2.5,3.9,1.15.9,3.2,4.8,1.86.1,2.8,4.0,1.3 6.3,2.5,4.9,1.5 6.1,2.8,4.7,1.25.5,2.4,3.8,1.1 5.5,2.4,3.7,1.05.8,2.7,3.9,1.26.0,2.7,5.1,1.65.4,3.0,4.5,1.56.0,3.4,4.5,1.6 6.7,3.1,4.7,1.5 6.3,2.3,4.4,1.3 5.6,3.0,4.1,1.3 5.5,2.5,4.0,1.35.5,2.6,4.4,1.26.1,3.0,4.6,1.4 5.8,2.6,4.0,1.2 5.0,2.3,3.3,1.0 5.6,2.7,4.2,1.3 5.7,3.0,4.2,1.25.7,2.9,4.2,1.36.2,2.9,4.3,1.3 5.1,2.5,3.0,1.1 5.7,2.8,4.1,1.3];C=[6.3,3.3,6.0,2.5 5.8,2.7,5.1,1.9 7.1,3.0,5.9,2.1 6.3,2.9,5.6,1.86.5,3.0,5.8,2.27.6,3.0,6.6,2.1 4.9,2.5,4.5,1.7 7.3,2.9,6.3,1.86.7,2.5,5.8,1.87.2,3.6,6.1,2.5 6.5,3.2,5.1,2.0 6.4,2.7,5.3,1.97.7,2.6,6.9,2.36.0,2.2,5.0,1.56.9,3.2,5.7,2.35.6,2.8,4.9,2.07.7,2.8,6.7,2.06.3,3.4,5.6,2.46.4,3.1,5.5,1.86.0,3.0,4.8,1.86.9,3.1,5.4,2.16.7,3.1,5.6,2.46.9,3.1,5.1,2.35.8,2.7,5.1,1.96.8,3.2,5.9,2.36.7,3.3,5.7,2.56.7,3.0,5.2,2.36.3,2.5,5.0,1.96.5,3.0,5.2,2.06.2,3.4,5.4,2.35.9,3.0,5.1,1.8];%⽅法⼀:先将A作为⼀类,BC作为⼀类NA=size(A,1);NB=size(B,1);NC=size(C,1);A_train=A(1:floor(NA/2),:);%训练数据取1/2(或者1/3,3/4,1/4)B_train=B(1:floor(NB/2),:);C_train=C(1:floor(NC/2),:);A_test=A((floor(NA/2)+1):end,:);B_test=B((floor(NB/2)+1):end,:);C_test=C((floor(NC/2)+1):end,:);A_train=A_train;D_train=[B_train;C_train];A_test=A_test;D_test=[B_test;C_test];for i=1:size(A_train,1)S1=S1+(A_train(i,:)-u1)'*(A_train(i,:)-u1);endfor i=1:size(D_train,1)S2=S2+(D_train(i,:)-u2)'*(D_train(i,:)-u2);endSw=S1+S2;w1=(inv(Sw)*(u1-u2)')';w1=w1./norm(w1);y0=w1*(u1+u2)'/2;% a1=w*u1'% d1=w*u2'r1=0;for i=1:size(D_test,1)if w1*D_test(i,:)'<y0r1=r1+1;endendrate_D=r1/size(D_test,1)r2=0;for i=1:size(A_test,1)if w1*A_test(i,:)'>y0r2=r2+1;endendrate_A=r2/size(A_test,1)三、Python程序:from sklearn import discriminant_analysisfrom sklearn.model_selection import train_test_splitimport numpydata = numpy.genfromtxt('iris.csv', delimiter=',', usecols=(0,1,2,3)) target = numpy.genfromtxt('iris.csv', delimiter=',', usecols=(4), dtype=str) t = numpy.zeros(len(target))t[target == 'setosa'] = 1t[target == 'versicolor'] = 2t[target == 'virginica'] = 3#print(clf.predict([data[3]]))。
Fisher 线性判别分类器成员姓名: 学号:莫文敏 201111921217 赵越 201111921229 顾瑞煌 201111921104一、实验目的1.实现基于FISHER 分类的算法程序;2.能够根据自己的设计加深对FISHER 分类的认识;3.掌握FISHER 分类的原理、特点。
二、实验设备1.手提电脑2.MATLAB三、FISHER 算法原理线性判别函数的一般形式可表示成0)(w X W X g T +=其中⎪⎪⎪⎭⎫ ⎝⎛=d x x X 1 ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=d w w w W 21但是,在应用统计方法解决模式识别的问题时,经常会遇到“维数风暴”的问题,因此压缩特征空间的维数在此时十分重要,FISHER 方法实际上是涉及维数压缩的问题。
把多为特征空间的点投影到一条直线上,就能把特征空间压缩成一维,这在数学上是很容易做到的。
但是在高维空间里很容易一分开的样品,把它们投射到任意一条直线上,有可能不同类别的样品就混在一起,无法区分了,如图5-16(a )所示,投影1x 或2x 轴无法区分。
若把直线绕原点转动一下,就有可能找到一个方向,样品投射到这个方向的直线上,各类样品就能很好地分开,如图5-16(b )所示。
因此直线方向的选择是很重要的。
一般来说总能找到一个最好的方向,使样品投射到这个方向的直线上很容易分开。
如何找到这个最好的直线方向以及如何实现向最好方向投影的变换,这正是FISHER 算法要解决的基本问题,这个投影变换正是我们寻求的解向量*W 。
样品训练集以及待测样品的特征总数目为n ,为找到最佳投影方向,需要计算出各类样品的均值、样品类内离散度矩阵i S 和总类间矩阵w S 、样品类间离散度矩阵b S ,根据FISHER 准则找到最佳投影向量,将训练集内所有样品进行投影,投影到一维Y 空间,由于Y 空间是一维的,则需要求出Y 空间的划分边界点,找到边界点后,就可以对待测样品进行一维Y 空间的投影,判断它的投影点与分界点的关系将其归类。
3.5 Fisher分类器(Fisher Linear Discriminant)Fisher判别法是历史上最早提出的判别方法之一,其基本思想是将n类m维数据集尽可能地投影到一个方向(一条直线),使得类与类之间尽可能分开。
从形式上看,该方法就是所谓的一种降维处理方法。
为简单起见,我们以两类问题ω1和ω2的分类来说明Fisher判别法的原理,如图3.4所示。
设数据阵为X∈R N⨯m,ω1共有N1个样本,ω2共有N2个样本,N= N1+N2。
两个类别在输入空间的均值向量为图3.4, Fisher判别法几何原理示意图)37.3(11212211⎪⎪⎩⎪⎪⎨⎧∈=∈=∑∑∈∈m pmp R N R N p pϖϖx x x μx μρρρρρρ设有一个投影方向()mT m R w w w ∈=,,,21Λρw ,这两个均值向量在该方向的投影为)38.3(1~1~1222111121⎪⎪⎩⎪⎪⎨⎧∈==∈==∑∑∈∈R N R N p p pT T p T T ϖϖx x x w μw μx w μw μρρρρρρρρρρρρ在w ρ方向,两均值之差为())39.3(~~2121μμw μμρρρρρ-=-=∇T类似地,样本总均值向量在该方向的投影为)40.3(1~11R NNp pT T ∈==∑=x w μw μρρρρρ定义类间散度(Between-class scatter)平方和SS B 为()()()()()()()()()[])41.3(~~~~~~222111222211221222211w S w w μμμμμμμμw μw μw μw μw μμμμμμρρρρρρρρρρρρρρρρρρρρρρρρρρB T T T T T T T T j j j B N N N N N N N SS =--+--=-+-=-=-+-=∑=其中()()()()()())42.3(21222111∑=--=--+--=j Tj j j TT B N N N μμμμμμμμμμμμS ρρρρρρρρρρρρ定义类ωj 的类内散度(Within-class scatter)平方和为()())43.3(~22∑∑∈∈-=-=jjNp jT p T N p jp T Wj x x SS μw w μw ρρρρρρρ两个类的总的类内散度误差平方和为()()())44.3(2121221wS w w μμw μw w ρρρρρρρρρρρρW T j Np T jp j p T j N p jT p T j wj W j jx x x SS SS =⎥⎥⎦⎤⎢⎢⎣⎡--=-==∑∑∑∑∑=∈=∈=其中,()())45.3(21∑∑=∈--=j N p Tjp j p W jx x μμS ρρρρ我们的目的是使类间散度平方和SS B 与类内散度平方和SS w 的比值为最大,即())46.3(max wS w w S w w ρρρρρW T B T WBSS SS J ==图3.5a, Fisher判别法—类间散度平方和(分子)的几何意义图3.5b, Fisher判别法—类内散度平方和(分母)的几何意义图3.5给出了类间散度平方和S B 与类内散度平方和S E 的几何意义。
Fisher分类器设计班级:自092 姓名:刘昌元学号:099064370 一、实验目的:1:根据fisher准则设计线性分类器2:由fisher分类器训练样本数据3:由fisher分类器测试样本观察出错率并与贝叶斯分类器的出错率比较判断两种分类器的性能优劣4:将测试数据和决策面画在一张图上直观显示是三、实验所用函数:类均值向量:∑=∈ixj j i x N M χ1类内离散度矩阵:Ti j i ixj j iM x M x S ))((--∑∈=χ总类内离散度矩阵:21S S S w +=类间离散度矩阵:T b M M M M S ))((2121--= 最有投影方向:)(211*M M S W w -=-决策函数:0)(w x w x G T +=阈值:)(21210M w M w w T T+-= 四、实验结果:1:得到参数:最有投影向量和阈值2:利用分类器输入身高和体重数据得到性别分类(实验结果如下)w=[ 0.0012; 0.0003] threshold =0.2318classify(165,56) 结果为“女” classify(178,70) 结果为“男”3:fisher准则分类器的出错率统计:测试test1:实际个数分类个数出错率男生84.0000 31.0000 0.6310女生40.0000 93.0000 1.3250测试test2:4:bayes分类器测试出错统计:测试test1:测试test2:结论:很显然bayes分类器比fisher分类器准确率高的多。
4:分类面决策图:五、程序:程序1:求最有投影方向和阈值%程序功能:应用fisher分类方法,使用训练数据获得阈值和最佳变换向量(投影方向)% function fisher(boys,girls) %调用男生和女生的训练样本数据%A=boys.';B=girls.';[k1,l1]=size(A);[k2,l2]=size(B);M1=sum(boys);M1=M1.';M1=M1/l1; %求男生身高与体重的均值%M2=sum(girls);M2=M2.';M2=M2/l2; %求女生身高与体重的均值%S1=zeros(k1,k1);S2=zeros(k2,k2);for i=1:l1S1=S1+(A(:,i)-M1)*((A(:,i)-M1).'); %求类内离散度矩阵S1%endfor i=1:l2S2=S2+(B(:,i)-M2)*((B(:,i)-M2).'); %求类内离散度矩阵S2%endfor i=1:2for j=1:2Sw(i,j)=S1(i,j)+S2(i,j); %求总类内离散度矩阵Sw%endendw=inv(Sw)*(M1-M2) %求最有投影方向%wT=w.';for i=1:l1Y1(i)=wT(1,1)*A(1,i)+wT(1,2)*A(2,i); %由分类函数g(x)=wT*x求男生身高和体重的阈值%endfor i=1:l2Y2(i)=wT(1,1)*B(1,i)+wT(1,2)*B(2,i); %由分类函数g(x)=wT*x求女生身高和体重的阈值%endm1=sum(Y1)/l1; %阈值平均%m2=sum(Y2)/l2; %阈值平均%threshold=(l1*m1+l2*m2)/(l1+l2) %求fisher决策面的阈值%程序2:构成fisher判别器%函数功能:应用Fisher准则构成的分类器判断一个身高体重二维数据的性别%函数使用方法:输入classify(hight,weight)其中hight和weight分别是身高和体重的数据function value=classify(hight,weight)w=[0.0012;0.0003];threshold=0.2318;tem=[hight;weight]; %将输入的身高和体重数据构成列向量%result=(w.')*tem; %根据fisher判别式求判别值%if result>threshold %判别值和决策面阈值比较%value=1;elsevalue=0;end程序3:%功能:调用Fisher分类器统计出错率%开发者:安徽工业大学自动化092班刘昌元function result=Error(file)[m,n]=size(file);Boy=0;Girl=0;boy=0;girl=0;for i=1:mif(file(i,3)==0)Girl=Girl+1;elseBoy=Boy+1;endA(i,1)=file(i,1);A(i,2)=file(i,2);endw=[0.0012;0.0003];threshold =0.2318;for i=1:mclassify(A(i,1),A(i,2));if(ans==0)girl=girl+1;elseboy=boy+1;endendtem1=abs(Boy-boy)/Boy;tem2=abs(Girl-girl)/Girl;result(1,1)=Boy;result(1,2)=boy;result(1,3)=tem1;result(2,1)=Girl;result(2,2)=girl;result(2,3)=tem2;程序4:%程序:画图%功能:将训练样本boy.txt和girl.txt中的数据和线性决策面以及贝叶斯决策面画到一幅图上function graphics(boys,girls)w=[0.0012;0.0003];threshold =0.2318;A=boys.';B=girls.';[m1,n1]=size(A);[m2,n2]=size(B);for i=1:n1x=A(1,i);y=A(2,i);plot(x,y,'R.');hold onendfor i=1:n2x=B(1,i);y=B(2,i);plot(x,y,'G.');hold onenda1=min(A(1,:));a2=max(A(1,:));b1=min(B(1,:));b2=max(B(1,:));a3=min(A(2,:));a4=max(A(2,:));b3=min(B(2,:));b4=max(B(2,:));if a1<b1a=a1;elsea=b1;endif a2>b2b=a2;elseb=b2;endif a3<b3c=a3;elsec=b3;endif a4>b4。
基于Fisher 线性判别的基因分类器的设计2000年6月人类基因组计划正式完成对人类分布在细胞核中的23条染色体的6万到10万个基因,大约30亿个碱基的测序工作,其中我国完成对3号染色体上的3000万个碱基的测序。
基因草图是由4个字符A 、T 、C 、G 按一定顺序排列组成的长约30亿的序列,其中没有断句,也没有标点。
除了知道这四个字符代表四种碱基之外,人类对基因知之甚少。
但众多的科研工作者发现,NDA 的序列中隐藏这重大的秘密,关系到人的生老病死,对基因的研究具有重大的意义。
本文对DNA 中的四种碱基:腺嘌呤(A ),鸟嘌呤(G ),胞嘧啶(C )和胸腺嘧啶(T )在基因链中出现的频率作为输入向量的四个特征成员,用Fisher 线性分类方法对已知类别的20个基因样本进行训练和测试,表明Fisher 线性分类方法能对这些已知类别的DNA 序列达到分类的目的。
本文采用的数据来自参考文献[1],数据表1所示:显然表1中的样本共分为两类,其中0P >的为一类,在神经网络中以输出为“1”表示;0P <的为另一类,在神经网络中以输出为“0”表示。
Fisher 线性判别:Fisher 线性判别的基本思想是将d 维空间中的样本投射到一维空间中的一条直线上,将维度由多维压缩到一维。
在一维的直线上找到一个阈值点,大于该阈值点的样本分为一类,小于该阈值点的样本分为另一类。
基于以上思想,假设集合ψ包含N 个d 维样本123,,,......N x x x x 其中1N 个属于1ψ的样本,2N 个属于2ψ的样本。
若对n x 的分量做线性组合,可得到标量,1,2,3,......T n n y x n N ω==这样便得到N 个一维样本n y 的集合,可分为两个子集12,y y 。
从几何上,如果||||1ω=,则每个n y 就是对应于n x 到方向为ω的直线的投影。
ω方向的不同,将使样本投影后的可分程度不同,从而直接影响识别的效果。
Fisher分类器设计
班级:自092 姓名:刘昌元学号:099064370 一、实验目的:
1:根据fisher准则设计线性分类器
2:由fisher分类器训练样本数据
3:由fisher分类器测试样本观察出错率并与贝叶斯分类器的出错率比较判断两种分类器的性能优劣
4:将测试数据和决策面画在一张图上直观显示
是
三、实验所用函数:
类均值向量:∑=∈i
xj j i x N M χ1
类内离散度矩阵:T
i j i i
xj j i
M x M x S ))((--∑∈=χ
总类内离散度矩阵:21S S S w +=
类间离散度矩阵:T b M M M M S ))((2121--= 最有投影方向:)(211
*
M M S W w -=-
决策函数:0)
(w x w x G T +=
阈值:)(2
1210M w M w w T T
+-= 四、实验结果:
1:得到参数:最有投影向量和阈值
2:利用分类器输入身高和体重数据得到性别分类(实验结果如下)
w=[ 0.0012; 0.0003] threshold =0.2318
classify(165,56) 结果为“女” classify(178,70) 结果为“男”3:fisher准则分类器的出错率统计:
测试test1:
实际个数分类个数出错率
男生84.0000 31.0000 0.6310
女生40.0000 93.0000 1.3250
测试test2:
4:bayes分类器测试出错统计:
测试test1:
测试test2:
结论:很显然bayes分类器比fisher分类器准确率高的多。
4:分类面决策图:
五、程序:
程序1:求最有投影方向和阈值
%程序功能:应用fisher分类方法,使用训练数据获得阈值和最佳变换向量(投影方向)% function fisher(boys,girls) %调用男生和女生的训练样本数据%
A=boys.';
B=girls.';
[k1,l1]=size(A);
[k2,l2]=size(B);
M1=sum(boys);
M1=M1.';
M1=M1/l1; %求男生身高与体重的均值%
M2=sum(girls);
M2=M2.';
M2=M2/l2; %求女生身高与体重的均值%
S1=zeros(k1,k1);
S2=zeros(k2,k2);
for i=1:l1
S1=S1+(A(:,i)-M1)*((A(:,i)-M1).'); %求类内离散度矩阵S1%
end
for i=1:l2
S2=S2+(B(:,i)-M2)*((B(:,i)-M2).'); %求类内离散度矩阵S2%
end
for i=1:2
for j=1:2
Sw(i,j)=S1(i,j)+S2(i,j); %求总类内离散度矩阵Sw%
end
end
w=inv(Sw)*(M1-M2) %求最有投影方向%
wT=w.';
for i=1:l1
Y1(i)=wT(1,1)*A(1,i)+wT(1,2)*A(2,i); %由分类函数g(x)=wT*x求男生身高和体重的阈值%
end
for i=1:l2
Y2(i)=wT(1,1)*B(1,i)+wT(1,2)*B(2,i); %由分类函数g(x)=wT*x求女生身高和体重的阈值%
end
m1=sum(Y1)/l1; %阈值平均%
m2=sum(Y2)/l2; %阈值平均%
threshold=(l1*m1+l2*m2)/(l1+l2) %求fisher决策面的阈值%
程序2:构成fisher判别器
%函数功能:应用Fisher准则构成的分类器判断一个身高体重二维数据的性别
%函数使用方法:输入classify(hight,weight)其中hight和weight分别是身高和体重的数据
function value=classify(hight,weight)
w=[0.0012;0.0003];
threshold=0.2318;
tem=[hight;weight]; %将输入的身高和体重数据构成列向量%
result=(w.')*tem; %根据fisher判别式求判别值%
if result>threshold %判别值和决策面阈值比较%
value=1;
else
value=0;
end
程序3:
%功能:调用Fisher分类器统计出错率
%开发者:安徽工业大学自动化092班刘昌元function result=Error(file)
[m,n]=size(file);
Boy=0;
Girl=0;
boy=0;
girl=0;
for i=1:m
if(file(i,3)==0)
Girl=Girl+1;
else
Boy=Boy+1;
end
A(i,1)=file(i,1);
A(i,2)=file(i,2);
end
w=[0.0012;0.0003];
threshold =0.2318;
for i=1:m
classify(A(i,1),A(i,2));
if(ans==0)
girl=girl+1;
else
boy=boy+1;
end
end
tem1=abs(Boy-boy)/Boy;
tem2=abs(Girl-girl)/Girl;
result(1,1)=Boy;
result(1,2)=boy;
result(1,3)=tem1;
result(2,1)=Girl;
result(2,2)=girl;
result(2,3)=tem2;
程序4:
%程序:画图
%功能:将训练样本boy.txt和girl.txt中的数据和线性决策面以及贝叶斯决策面画到一幅图上function graphics(boys,girls)
w=[0.0012;0.0003];
threshold =0.2318;
A=boys.';
B=girls.';
[m1,n1]=size(A);
[m2,n2]=size(B);
for i=1:n1
x=A(1,i);
y=A(2,i);
plot(x,y,'R.');
hold on
end
for i=1:n2
x=B(1,i);
y=B(2,i);
plot(x,y,'G.');
hold on
end
a1=min(A(1,:));
a2=max(A(1,:));
b1=min(B(1,:));
b2=max(B(1,:));
a3=min(A(2,:));
a4=max(A(2,:));
b3=min(B(2,:));
b4=max(B(2,:));
if a1<b1
a=a1;
else
a=b1;
end
if a2>b2
b=a2;
else
b=b2;
end
if a3<b3
c=a3;
else
c=b3;
end
if a4>b4。