FISHER线性判别MATLAB实现
机器学习实验1-Fisher线性分类器设计
![机器学习实验1-Fisher线性分类器设计](https://img.taocdn.com/s3/m/8819f14628ea81c759f57835.png)
一、实验意义及目的掌握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等课件帮助,我最终完成了实验,为今后继续深入学习打下良好基础。
fisher函数matlab实现
![fisher函数matlab实现](https://img.taocdn.com/s3/m/a2085c5e48d7c1c708a145a0.png)
一、实验目的在UCI数据集上的Iris和sonar数据上验证算法的有效性;Iris数据3类,4维,150个数据;Sonar数据2类,60维,208个样本;二、实验说明1、本实验由MATLAB2014实现算法及验证。
2、训练和测试样本采用留1法划分三、在Iris上验证算法的代码及结果(1)代码1、function y=fisher_iris(SE,VE,VI)2、3、S_V=[SE;VE];4、5、ALL_1=[S_V;VI];6、7、for L=1:1508、 T=S_V;9、 P=VI;10、 sample=ALL_1(L,:);11、if L<=10012、 T(L,:)=[];13、else14、 P(L-100,:)=[];15、end16、17、 R1=size(T,1);18、 R2=size(P,1);19、20、 a1=mean(T);21、 a2=mean(P);22、23、 s1=cov(T)*(R1-1);24、 s2=cov(P)*(R2-1);25、26、 Sw=s1+s2;27、28、 w=inv(Sw)*(a1-a2)';29、30、 y1=mean(w'*a1');31、 y2=mean(w'*a2');32、33、 w0=1/2*(y1+y2);34、35、 y(L)=w'*sample';37、if y(L)>w0;38、 y(L)=0;39、40、for L_2=1:10041、 T_2=SE;42、 P_2=VE;43、 sample=S_V(L_2,:);44、if L_2<=5045、 T_2(L_2,:)=[];46、else47、 P_2(L_2-50,:)=[];48、end49、50、 R1=size(T_2,1);51、 R2=size(P_2,1);52、53、 a1_2=mean(T_2);54、 a2_2=mean(P_2);55、56、 s1_2=cov(T_2)*(R1-1);57、 s2_2=cov(P_2)*(R2-1);58、59、 Sw_2=s1_2+s2_2;60、61、 w_2=inv(Sw_2)*(a1_2-a2_2)';62、63、 y1_2=mean(w_2'*a1_2');64、 y2_2=mean(w_2'*a2_2');65、66、 w0=1/2*(y1_2+y2_2);67、68、 y(L_2)=w_2'*sample';69、70、if y(L_2)>w0;71、 y(L_2)=0;72、else73、 y(L_2)=1;74、end75、end76、77、78、else79、 y(L)=2;81、end(2)实验结果z四、在sonar上验证算法的代码及结果(1)代码1、function y=fisher_sonar(M,R)2、3、A=[M;R];4、for l=1:2085、 T=M;6、 P=R;7、 sample=A(l,:);8、if l<=1119、 T(l,:)=[];10、else11、 P(l-111,:)=[];12、end13、14、 R1=size(T,1);15、 R2=size(P,1);16、17、 a1=mean(T);18、 a2=mean(P);19、20、 s1=cov(T)*(R1-1);21、 s2=cov(P)*(R2-1);22、23、 Sw=s1+s2;24、25、 w=inv(Sw)*(a1-a2)';26、27、 y1=mean(w'*a1');28、 y2=mean(w'*a2');29、30、 w0=1/2*(y1+y2);31、32、 y(l)=w'*sample';33、34、if y(l)>w0;35、 y(l)=0;36、else37、 y(l)=1;38、end40、41、(2)实验结果>> fisher_sonar(M,R)ans =1 至 5 列1 0 1 1 16 至 10 列0 1 1 1 011 至 15 列0 1 1 0 016 至 20 列0 1 0 0 021 至 25 列0 0 0 0 026 至 30 列0 0 0 0 031 至 35 列1 1 0 0 036 至 40 列0 0 1 0 041 至 45 列0 0 0 0 00 0 0 0 0 51 至 55 列0 0 0 1 1 56 至 60 列0 1 1 1 0 61 至 65 列0 0 0 0 0 66 至 70 列0 1 0 1 0 71 至 75 列0 0 0 0 0 76 至 80 列0 0 0 0 0 81 至 85 列1 1 0 0 0 86 至 90 列0 0 0 0 0 91 至 95 列0 0 0 0 1 96 至 100 列0 1 1 0 00 0 0 0 0 106 至 110 列0 0 0 0 0 111 至 115 列0 1 1 0 0 116 至 120 列0 0 1 0 0 121 至 125 列1 1 1 1 1 126 至 130 列1 1 1 0 1 131 至 135 列0 0 0 1 1 136 至 140 列1 1 0 0 0 141 至 145 列1 1 1 1 0 146 至 150 列0 0 1 1 1 151 至 155 列1 1 1 1 10 0 0 0 1 161 至 165 列1 1 1 1 1 166 至 170 列1 1 1 1 1 171 至 175 列1 1 1 1 1 176 至 180 列1 1 1 1 1 181 至 185 列1 1 1 1 0 186 至 190 列1 1 1 1 1 191 至 195 列0 0 0 0 1 196 至 200 列1 1 1 1 0 201 至 205 列1 1 1 1 0 206 至 208 列1 1 1>>。
【线性判别】Fisher线性判别(转)
![【线性判别】Fisher线性判别(转)](https://img.taocdn.com/s3/m/bee8a914cd1755270722192e453610661ed95a79.png)
【线性判别】Fisher线性判别(转)今天读paper遇到了Fisher线性判别的变体,所以来学习⼀下,所以到时候⼀定要把PRMl刷⼀遍呀在前⽂《贝叶斯决策理论》中已经提到,很多情况下,准确地估计概率密度模型并⾮易事,在特征空间维数较⾼和样本数量较少的情况下尤为如此。
实际上,模式识别的⽬的是在特征空间中设法找到两类(或多类)的分类⾯,估计概率密度函数并不是我们的⽬的。
前⽂已经提到,正态分布情况下,贝叶斯决策的最优分类⾯是线性的或者是⼆次函数形式的,本⽂则着重讨论线性情况下的⼀类判别准则——Fisher判别准则。
为了避免陷⼊复杂的概率的计算,我们直接估计判别函数式中的参数(因为我们已经知道判别函数式是线性的)。
⾸先我们来回顾⼀下线性判别函数的基本概念:应⽤统计⽅法解决模式识别问题时,⼀再碰到的问题之⼀就是维数问题。
在低维空间⾥解析上或计算上⾏得通的⽅法,在⾼维空间⾥往往⾏不通。
因此,降低维数有时就会成为处理实际问题的关键。
问题描述:如何根据实际情况找到⼀条最好的、最易于分类的投影线,这就是Fisher判别⽅法所要解决的基本问题。
考虑把d维空间的样本投影到⼀条直线上,形成⼀维空间,即把维数压缩到⼀维。
然⽽,即使样本在d维空间⾥形成若⼲紧凑的互相分得开的集群,当把它们投影到⼀条直线上时,也可能会是⼏类样本混在⼀起⽽变得⽆法识别。
但是,在⼀般情况下,总可以找到某个⽅向,使在这个⽅向的直线上,样本的投影能分得开。
下图可能会更加直观⼀点:从d维空间到⼀维空间的⼀般数学变换⽅法:假设有⼀集合Г包含N个d维样本x1, x2, …, xN,其中N1个属于ω1类的样本记为⼦集Г1, N2个属于ω2类的样本记为⼦集Г2 。
若对xn的分量做线性组合可得标量:yn = wTxn, n=1,2,…,N这样便得到N个⼀维样本yn组成的集合,并可分为两个⼦集Г1’和Г2’ 。
实际上,w的值是⽆关紧要的,它仅是yn乘上⼀个⽐例因⼦,重要的是选择w的⽅向。
武汉理工大学,模式识别实验报告,带数据!带代码!
![武汉理工大学,模式识别实验报告,带数据!带代码!](https://img.taocdn.com/s3/m/5349267e561252d380eb6eb0.png)
武汉理工大学模式识别实验报告姓名:班级:学号:姓名:班级:学号:实验一总体概率密度分布的非参数方法一、实验目的1.了解使用非参数方法估计样本概率密度函数的原理。
2.了解Parzen窗法的原理及其参数h1,N对估计结果的影响。
3.掌握Parzen窗法的算法并用Matlab实现。
4.使用Matlab分析Parzen窗法的参数h1,N对估计结果的影响。
二、实验数据一维正态分布样本,使用函数randn生成。
三、实验结果选取的h1=0.25,1,4,N=1,16,256,4096,65536,得到15个估计结果,如下图所示。
由下面三组仿真结果可知,估计结果依赖于N和h1。
当N=1时,是一个以样本为中心的小丘。
当N=16和h1=0.25时,仍可以看到单个样本所起的作用;但当h1=1及h1=4时就受到平滑,单个样本的作用模糊了。
随着N的增加,估计量越来越好。
这说明,要想得到较精确的估计,就需要大量的样本。
但是当N取的很大,h1相对较小时,在某些区间内hN趋于零,导致估计的结果噪声大。
分析实验数据发现在h1=4,N=256时,估计结果最接近真实分布。
附录:1.Parzen窗法函数文件parzen.m function parzen=parzen(N,h1,x) %ParzenhN = h1/sqrt(N);num_x = numel(x);parzen = zeros(1, num_x);for u = 1:num_xfor i=1:Nparzen(u) = parzen(u)+exp(((x(u)-x(i))/hN).^2/-2);endparzen(u)=parzen(u)/sqrt(2*pi)/h1/sqrt(N);end2.例程文件parzen_sample.mx = randn(1,10000);%Normally distributed pseudorandom numberspx = normpdf(x,0,1);%Normal probability density function - normpdf(X,mu,sigma)h1 = [0.25, 1, 4];N = [1, 16, 256, 1024, 4096];num_h1 = numel(h1);%Number of array elementsnum_N = numel(N);figure('Name', '总体概率密度分布的非参数方法');%遍历h1for i_h1 = 1:length(h1)h1_offset = (i_h1-1)*(num_N+1)+1;%绘图位置的偏移量subplot(num_h1, num_N+1, h1_offset);plot(x, px, '.');ylabel(sprintf('%s%4.2f', 'h1=', h1(i_h1)));title('正态分布样本的概率密度函数')%遍历Nfor i_N = 1 : length(N)pNx=parzen(N(i_N), h1(i_h1), x);subplot(num_h1, num_N+1, h1_offset+i_N);plot(x, pNx, '.');title(sprintf('%s%d', 'N=', N(i_N)));endend姓名:班级:学号:实验二感知器准则算法实验一、实验目的1.了解利用线性判别函数进行分类的原理。
费舍变换 matlab
![费舍变换 matlab](https://img.taocdn.com/s3/m/64514ca218e8b8f67c1cfad6195f312b3069eb70.png)
费舍变换 matlab费舍变换(Fisher's linear discriminant analysis)是一种经典的监督学习算法,用于特征提取和数据降维。
在MATLAB中,你可以使用`fitcdiscr`函数来实现费舍变换。
这个函数可以用于训练一个线性判别分析器,并且返回一个分类器对象。
你可以使用这个分类器对象来进行预测和特征提取。
下面是一个简单的示例代码,演示如何在MATLAB中使用`fitcdiscr`函数进行费舍变换:matlab.% 生成一些示例数据。
X = [randn(100,2); randn(100,2)+2];Y = [ones(100,1); 2ones(100,1)];% 使用fitcdiscr函数训练一个线性判别分析器。
classifier = fitcdiscr(X, Y);% 使用训练好的分类器对象进行预测。
predictedY = predict(classifier, X);% 获取费舍变换后的特征。
transformedX = X classifier.Coeffs(1, 2).Linear; % 可视化原始数据和变换后的数据。
figure;scatter(X(:,1), X(:,2), 20, Y, 'filled');title('Original Data');xlabel('Feature 1');ylabel('Feature 2');figure;scatter(transformedX, zeros(length(transformedX),1), 20, Y, 'filled');title('Transformed Data');xlabel('Transformed Feature');在这个示例中,我们首先生成了一些示例数据,然后使用`fitcdiscr`函数训练了一个线性判别分析器。
FISHER线性判别MATLAB实现
![FISHER线性判别MATLAB实现](https://img.taocdn.com/s3/m/05b8719cd5bbfd0a795673db.png)
Fisher 线性判别上机实验报告班级: 学号: 姓名:一.算法描述Fisher 线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。
Fisher 线性判别分析,就是通过给定的训练数据,确定投影方向W 和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
线性判别函数的一般形式可表示成0)(w X W X g T += 其中Fisher 选择投影方向W 的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。
如下为具体步骤:(1)W 的确定w S 样本类间离散度矩阵b在投影后的一维空间中,各类样本均值Tiim '= Wm样本类内离散度和总类内离散度 T Ti i ww S ' = W S W S ' = W S W 样本类间离散度Tbb S ' = W S W Fisher 准则函数为 max 2221221~~)~~()(S S m m W J F +-=(2)阈值的确定w 0是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则: 令)()()(21x x x g g g -=则:如果g(x)>0,则决策w x 1∈;如果g(x)<0,则决策w x 2∈;如果g(x)=0,则可将x 任意分到某一类,或拒绝。
(3)Fisher 线性判别的决策规则 Fisher 准则函数满足两个性质:1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。
2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。
根据这个性质确定准则函数,根据使准则函数取得最大值,可求出W :-1w 12W = S (m - m ) 。
这就是Fisher 判别准则下的最优投影方向。
fisher算法及其matlab实现
![fisher算法及其matlab实现](https://img.taocdn.com/s3/m/320815772b160b4e767fcf97.png)
Fisher 判别法讲解以及matlab 代码实现两类的线形判别问题可以看作是把所有样本都投影到一个方向上,然后在这个一维空间中确定一个分类的阈值。
过这个预置点且与投影方向垂直的超平面就是两类的分类面。
第一个问题,如何确定投影方向?这里只讨论两类分类的问题.训练样本集是X ={x1,x2...xn},每个样本是一个d 维向量,其中第一类w1={11x ,12x ...11n x },第二类w2={21x,22x ...22n x }。
我们要寻求一个投影方向w (w 也是一个d 维向量),投影以后样本变成:i y =i Tx w (y是一个标量),i=1...n在原样本空间中,类均值为:∑∈=ij w x j ii xn m 1i=1,2(一共两类的均值)(ps.im 是一个d*1的矩阵,假设每个维度是一个变量值,mi 中的每一维度就是这些变量值的均值,如下图所示:图1特别注明:有些例子给的矩阵是这样的:图2这里的单个样本是1*d 的矩阵,要注意计算的时候将其转置,不然套用fisher 算法公式的时候就会发现最后得到的矩阵维数不对。
定义各类类内的离散度矩阵为:(类内离散度矩阵其实就是类协方差矩阵,类在多于一个样本,且样本维度>1时是一个矩阵)∑∈--=ij w x Tij i j i m x m x S ))(((因为,jx 是一个d*1的矩阵,也可称作d 维向量,im 也是一个d*1的矩阵,所以最后得到的iS 一定是一个d*d 的矩阵)(在用matlab 计算的时候直接用cov (wi )即可得到想要的协方差矩阵,故直接计算不探究细节时图2可直接cov 算协方差,不用根据公式转置来转置去,不过matlab 中算的协方差被缩小了(n1-1)倍,计算时iS =cov (w1)*(n1-1))总的类内离散度矩阵:21S S S w +=类间离散度矩阵定义为:T b m m m m S ))((2121--=在投影以后的一维空间里,两类的均值分别是;iTw x j Tiw y i iii m w x wN y N m ij i j ===∑∑∈∈11 i=1,2故类内离散度不再是一个矩阵,而是一个值∑∈-=ij w y iii ii m y S 2)( i=1,2总类内离散度为:1111S S S ww +=类间离散度:21111)(m m S bb -=要使得需求的方向投影能在投影后两类能尽可能的分开,而各类内部又尽可能的聚集,可表示成如下准则,即fisher 准则:wwbbS S w J =)(max将公式代入并通过拉格朗日求极值的方法,可得投影方向:)(211m m S w w -=-(w 是一个d*1的矩阵,或者说亦是一个d 维向量) 阈值可表示为:)(2122110m m w +-=最后将待确定样本代入0)(w x w x g T +=判断)(x g 的符号和哪个类相同,确定其属于哪个类别。
判别分析公式Fisher线性判别二次判别
![判别分析公式Fisher线性判别二次判别](https://img.taocdn.com/s3/m/6f25098964ce0508763231126edb6f1aff0071cb.png)
判别分析公式Fisher线性判别二次判别判别分析是一种常用的数据分析方法,用于根据已知的类别信息,将样本数据划分到不同的类别中。
Fisher线性判别和二次判别是两种常见的判别分析方法,在实际应用中具有广泛的应用价值。
一、Fisher线性判别Fisher线性判别是一种基于线性变换的判别分析方法,该方法通过寻找一个合适的投影方向,将样本数据投影到一条直线上,在保持类别间离散度最大和类别内离散度最小的原则下实现判别。
其判别函数的计算公式如下:Fisher(x) = W^T * x其中,Fisher(x)表示Fisher判别函数,W表示投影方向的权重向量,x表示样本数据。
具体来说,Fisher线性判别的步骤如下:1. 计算类别内离散度矩阵Sw和类别间离散度矩阵Sb;2. 计算Fisher准则函数J(W),即J(W) = W^T * Sb * W / (W^T * Sw * W);3. 求解Fisher准则函数的最大值对应的投影方向W;4. 将样本数据投影到求得的最优投影方向上。
二、二次判别二次判别是基于高斯分布的判别分析方法,将样本数据当作高斯分布的观测值,通过估计每个类别的均值向量和协方差矩阵,计算样本数据属于每个类别的概率,并根据概率大小进行判别。
二次判别的判别函数的计算公式如下:Quadratic(x) = log(P(Ck)) - 0.5 * (x - μk)^T * Σk^-1 * (x - μk)其中,Quadratic(x)表示二次判别函数,P(Ck)表示类别Ck的先验概率,x表示样本数据,μk表示类别Ck的均值向量,Σk表示类别Ck的协方差矩阵。
具体来说,二次判别的步骤如下:1. 估计每个类别的均值向量μk和协方差矩阵Σk;2. 计算每个类别的先验概率P(Ck);3. 计算判别函数Quadratic(x);4. 将样本数据划分到概率最大的类别中。
判别分析公式Fisher线性判别和二次判别是常见的判别分析方法,它们通过对样本数据的投影或概率计算,实现对样本数据的判别。
关于fisher判别的一点理解
![关于fisher判别的一点理解](https://img.taocdn.com/s3/m/8a1c99eef605cc1755270722192e453610665b8f.png)
关于fisher判别的⼀点理解最近⼀个朋友问这⽅⾯的⼀些问题,其实之前也就很粗略的看了下fisher,真正帮别⼈解答问题的时候才知道原来⾃⼰也有很多东西不懂。
下⾯⼩结下⾃⼰对fisher判别的理解:其实fisher和PCA差不多,熟悉PCA的⼈都知道,PCA其实就是在寻找⼀个⼦空间。
这个空间怎么来的呢,先求协⽅差矩阵,然后求这个协⽅差矩阵的特征空间(特征向量对应的空间),选取最⼤的特征值对应的特征向量组成特征⼦空间(⽐如说k个,相当于这个⼦空间有k 维,每⼀维代表⼀个特征,这k个特征基本上可以涵盖90%以上的信息)。
那么我们把样本投影在这个⼦空间,原来那么多维的信息就可以⽤这k维的信息代替了,也就是说降维了。
⾄于PCA为啥要⽤求协⽅差矩阵然后求特征⼦空间的⽅法,这个数学上有证明,记得在某篇⽂章上看过,有兴趣的可以找找,看看证明。
那么fisher空间⼜是怎么⼀回事呢,其实fisher判别和PCA是在做类似的⼀件事,都是在找⼦空间。
不同的是,PCA是找⼀个低维的⼦空间,样本投影在这个空间基本不丢失信息。
⽽fisher是寻找这样的⼀个空间,样本投影在这个空间上,类内距离最⼩,类间距离最⼤。
那么怎么求这个空间呢,类似于PCA,求最⼤特征值对应的特征向量组成的空间。
当我们取最⼤⼏个特征值对应的特征向量组成特征空间时(这⾥指出,最佳投影轴的个数d<=c-1,这⾥c是类别数),最佳投影矩阵如下:其实在⽂章Eigenfaces vs Fisherfaces :recognition using class specific linear projection中给出了PCA和LDA⽐较直观的解释,⽂中对⼀个⼆维的数据进⾏分析,PCA和LDA都是把⼆维数据降到⼀个⼀维空间,那么其实PCA使得数据投影在这个⼀维空间总的离散度最⼤,我的理解是这样的,如果数据在某⼀维上⽐较离散,说明这维特征对数据的影响⽐较⼤,也就是说这维特征是主成分。
基于Fisher判别分析的分类模型研究
![基于Fisher判别分析的分类模型研究](https://img.taocdn.com/s3/m/aa6bffb49b89680202d82540.png)
基于Fisher判别分析的分类模型研究作者:代雪珍卫军超常在斌来源:《价值工程》2018年第26期摘要:Fisher判别分析是数据处理的常用技术。
Fisher线性判别模型是找到一条合适的直线,使得数据点在投影到直线后可以被分离。
本文通过对Fisher判别分析和高斯核函数的分类的研究,通过实际例子,在matlab中编程实现算法,分别画图比较了二维数据和三维数据的分类结果。
Abstract: Fisher discriminant analysis is a commonly used technique for data processing. The Fisher linear discriminant model is to find a suitable straight line so that the data points can be separated after being projected onto a straight line. In this paper, the classification of Fisher discriminant analysis and Gaussian kernel function is studied. Through practical examples, the algorithm is implemented in matlab, and the two-dimensional data and three-dimensional data are compared separately.关键词: Fisher准则;数据分类;matlab编程;高斯核函数Key words: Fisher criterion;data classification;matlab programming;Gaussian kernel function中图分类号:TP313 文献标识码:A 文章编号:1006-4311(2018)26-0211-030 引言分类是机器学习,统计学和模式识别领域的一个重要课题。
机器学习(MATLAB版)ch08-线性判别分析 教学课件
![机器学习(MATLAB版)ch08-线性判别分析 教学课件](https://img.taocdn.com/s3/m/bc38266a443610661ed9ad51f01dc281e53a560f.png)
线性判别分析
新工科建设之路·人工智能系列教材
机器学习(MATLAB 版)
01
线性判别分析 的基本原理
线性判别分析的基本原理
LDA 的基本思想是通过线性投影将样本投影到低维空间中,使得同一类样本的投影点尽可能接近、不同 类样本的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的低维空间中,再根据投影点在低 维空间中的位置来确定新样本的类别。具体的做法是寻找一个向低维空间的投影矩阵 W,使样本数据的 特征向量 经过投影之后得到新向量: 图 8.1 给出了 LDA的一个二维示意图。
谢谢观看
新工科建设之路·人工智能系列教材
机器学习(MATLAB 版)
线性判别分析的基本原理
图 8.1 中的特征向量是二维的,向低维(一维)空间即直线投影,投影后的这些点位于直线上。通过向这条 直线投影,两类样本被有效地分开了。由于是向直线投影,因此相当于用一个向量w与特征向量 a 做内而 得到一个标量:
由上述分析可知,LDA 的关键问题是如何确定最佳的投影矩阵 W。先考虑一维投影的情形,此时需要确 定的是投影向量 w。给定样本数据集:
线性定义“类内散布矩阵”为:
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
若定义类间散布矩阵为: 则总体散布矩阵可以表示为类内散布矩阵与类间散布矩阵之和:
线性判别分析的基本原理
线性判别分析的基本原理
利用拉格朗日乘子法,问题(8.12) 可通过如下广义特征值问题求解:
02
线性判别分析 的 MATLAB实现
线性判别分析的 MATLAB实现
模式识别fisher判别
![模式识别fisher判别](https://img.taocdn.com/s3/m/a761c152804d2b160b4ec052.png)
论文(设计)《模式识别》题目Fisher线性判别的基本原理及应用Fisher判别准则一、基本原理思想Fisher线性判别分析的基本思想:通过寻找一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,并且要求变换后的一维数据具有如下性质:同类样本尽可能聚集在一起,不同类的样本尽可能地远。
Fisher线性判别分析,就是通过给定的训练数据,确定投影方向W和阈值y0,即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
二、算法的实现及流程图1 算法实现 (1)W 的确定x 1m x, 1,2ii X ii N ∈==∑各类样本均值向量mi样本类内离散度矩阵和总类内离散度矩阵Tx S (x m )(x m ), 1,2ii i i X i ∈=--=∑样本类间离散度矩阵T1212S (m m )(m m )b =--在投影后的一维空间中,各类样本均值。
样本类内离散度和总类内离散度。
样本类间离散度。
Fisher 准则函数满足两个性质:·投影后,各类样本内部尽可能密集,即总类内离散度越小越好。
·投影后,各类样本尽可能离得远,即样本类间离散度越大越好。
根据这个性质确定准则函数,根据使准则函数取得最大值,可求出W :。
(2)阈值的确定采取的方法:【1】【2】【3】(3)Fisher 线性判别的决策规则对于某一个未知类别的样本向量x ,如果y=W T·x>y0,则x ∈w1;否则x ∈w2。
2 流程图归一化处理载入训练数据三、实验仿真1.实验要求试验中采用如下的数据样本集:ω1类: (22,5),(46,33),(25,30),(25,8),(31, 3),(37,9),(46,7),(49,5),(51,6),(53,3)(19,15),(23,18),(43,1),(22,15),(20,19),(37,36),(22,22),(21,32),(26,36),(23,39)(29,35),(33,32),(25,38),(41,35),(33,2),(48,37)ω2类: (40,25),(63,33),(43,27),(52,25),(55,27),(59,22) ,(65,59),(63,27)(65,30),(66,38),(67,43),(52,52),(61,49) (46,23),(60,50),(68,55) (40,53),(60,55),(55,55) (48,56),(45,57),(38,57) ,(68,24)在实验中采用Fisher线性判别方法设计出每段线性判别函数。
【matlab编程代做】Fisher二元线性判别 Matlab源码
![【matlab编程代做】Fisher二元线性判别 Matlab源码](https://img.taocdn.com/s3/m/7b042bb1f121dd36a32d822a.png)
function [JudgeX W ] = fcFisherJudge(Class1,Class2,X)% 依据求得的Fisher变换向量W,判定输入数据X(样本数据以列向量形式存储)的所属% 参考清华版《模式识别(第二版)》P90页(4.2章Fisher线性判别)% 输入参数:% Class1 第1类对应的训练数据信息矩阵,样本数据以列向量形式存储,维数m*n1% m对应样本(列)向量维数,n1对应该类样本数目% Class2 第1类对应的训练数据信息矩阵,样本数据以列向量形式存储,维数m*n2% m对应样本(列)向量维数,n2对应该类样本数目% X 待判定的数据,维数m*nX,样本数据以列向量形式存储% 中间变量:% CountC 存储了两类训练数据的样本数目,CountC=[n1 n2]% MeanC1 第1类对应的均值(列)向量% MeanC2 第2类对应的均值(列)向量% avrC1 第1类均值(列)向量MeanC1经Fisher变换后的数值,avrC1=W'*MeanC1% avrC2 第2类均值(列)向量MeanC2经Fisher变换后的数值,avrC2=W'*MeanC2% Sw 总体的类内离散度矩阵,维数m*m,Sw = Sw_C1 +Sw_C2% Sb 总体的类间离散度矩阵,维数m*m,Sb = (MeanC1-MeanC2)*(MeanC1-MeanC2)'% Y 待判定数据X经Fisher变换后的数值,对于单组样本X有y=W'*X,对于样本矩阵X有Y(i)=W'*X(:,i)% threY Fisher变换后的数值判别门限% 对于y=W'*X:若y>threY,X∈Class1;若y<threY,X∈Class2% 输出参数:% JudgeX 待判定的数据X的所属,1表示属于Class1,0表示属于Class2% 若nX>1(样本不止一列),输出结果Judge为由0/1组成的列向量% W Fisher变换向量,维数m*1,W=inv(Sw)*(MeanC1-MeanC2)=Sw\(MeanC1-MeanC2)% 对于新样本(列)向量X,有y=W'*X(列向量样本经变换后为1维常数)% 初始化[m,nX] = size(X);JudgeX = zeros(nX,1);% 计算Fisher判别参数[ W MeanC1 MeanC2 Sw Sb CountC ] = fcFisherW(Class1,Class2);avrC1 = W'*MeanC1;avrC2 = W'*MeanC2;%计算Fisher判别门限threY = (CountC(1)*avrC1 + CountC(2)*avrC2)/(CountC(1) + CountC(2));% 进行Fisher判别if nX==1 %X为单组样本列向量Y = W'*X; %此时Y为常数if Y>=threYJudgeX = 1; %若y>threY,X∈Class1elseJudgeX = 0; %若y<threY,X∈Class2 endelse %X为多组样本组成的矩阵Y = zeros(nX,1);for i=1:nXY(i) = W'*X(:,i);if Y(i)>=threYJudgeX(i) = 1; %若Y(i)>threY,X∈Class1 elseJudgeX(i) = 0; %若Y(i)<threY,X∈Class2 endendend% function [a,b]=fisher(A,B,X,h)% %A,B表示A,B类的数据,X表示未知类别的数据。
模式识别大作业
![模式识别大作业](https://img.taocdn.com/s3/m/2098ddbdd1f34693daef3e88.png)
模式识别大作业对sonar数据进行分类,用Fisher线性判别法和最近邻算法对其进行分类,并用MATLAB写程序对其进行模拟。
Fisher线性判别法的源程序如下clear,close all%¶ÁÈ¡È«²¿Êý¾ÝRock=xlsread('C:\Users\Administrator\Documents\data\rock');Mine=xlsread('C:\Users\Administrator\Documents\data\mine');%²úÉúËæ»úÊýr1=randperm(97,48);r2=randperm(111,56);%È¡³öѵÁ·Ñù±¾for i=1:48vtrainrock(i,:)=Rock(r1(1,i),:);endtrainrock=vtrainrock';for i=1:56vtrainmine(i,:)=Mine(r2(1,i),:);endtrainmine=vtrainmine';%È¡³ö²âÊÔÑù±¾Rock(r1',:)=[];testrock=Rock';Mine(r2',:)=[];testmine=Mine';%¼ÆËã¾ùÖµÏòÁ¿mrock=mean(trainrock,2);mmine=mean(trainmine,2);%¼ÆËãÀàÄÚÀëÉ¢¶È¾ØÕófor j=1:48s1=(trainrock(:,j)-mrock);sr=s1*s1';srock=zeros(60);srock=sr+srock;endfor j=1:56s2=(trainmine(:,j)-mmine);sm=s2*s2';smine=zeros(60);smine=sm+smine;endSw=srock+smine;%¼ÆËãÀà¼äÀëÉ¢¶È¾ØÕóSb=(mrock-mmine)*(mrock-mmine)';%¼ÆËã×î¼ÑͶӰ·½ÏòW=inv(Sw)*(mrock-mmine);%¶ÔѵÁ·Ñù±¾½øÐÐͶӰintestrock=W'*testrock;intestmine=W'*testmine;%¼ÆËãÅбðãÐÖµµãintrainrock=W'*trainrock;intrainmine=W'*trainmine;w0=(mean(intrainrock,2)*48+mean(intrainmine,2)*56)/104;%·ÖÀಢ¼ÆËã׼ȷÂÊ%¶Ô´ý²âÑù±¾½øÐзÖÀàj1=1;k1=1;RocksortRock1=zeros(size(intestrock));%¼ì²âÑù±¾Rock±»ÕýÈ·µØ·ÖΪRockµÄÊýRocksortMine1=zeros(size(intestmine));%¼ì²âÑù±¾Rock±»´íÎóµØ·ÖΪMineµÄÊýRocksortRocknumber1=zeros(size(intestrock));%¼ì²âÑù±¾Rock±»ÕýÈ·µØ·ÖΪRockµÄÊýÔÚ¼ì²âÑù±¾ÀïµÄÐòºÅRocksortMinenumber1=zeros(size(intestmine));%¼ì²âÑù±¾Rock±»´íÎóµØ·ÖΪMineµÄÊýÔÚ¼ì²âÑù±¾ÀïµÄÐòºÅfor i=1:49if(intestrock(1,i)>w0)RocksortRock1(1,j1)=intestrock(1,i);RocksortRocknumber1(1,j1)=i;j1=j1+1;elseRocksortMine1(1,k1)=intestrock(1,i);RocksortMinenumber1(1,k1)=i;k1=k1+1;endendj2=1;k2=1;MinesortMine2=zeros(size(intestmine));%¼ì²âÑù±¾Mine±»ÕýÈ·µØ·ÖΪMineµÄÊýMinesortRock2=zeros(size(intestrock));%¼ì²âÑù±¾Mine±»´íÎóµØ·ÖΪRockµÄÊýMinesortMinenumber2=zeros(size(intestmine));%¼ì²âÑù±¾Mine±»ÕýÈ·µØ·ÖΪMineµÄÊýÔÚ¼ì²âÑù±¾ÀïµÄÐòºÅMinesortRocknumber2=zeros(size(intestrock));%¼ì²âÑù±¾Mine±»´íÎóµØ·ÖΪRockµÄÊýÔÚ¼ì²âÑù±¾ÀïµÄÐòºÅfor i=1:55if(intestmine(1,i)<=w0)MinesortMine2(1,j2)=intestmine(1,i);MinesortMinenumber2(1,j2)=i;j2=j2+1;elseMinesortRock2(1,k2)=intestmine(1,i);MinesortRocknumber2(1,k2)=i;k2=k2+1;endend%¼ÆËã·ÖÀà½á¹ûµÄÕýÈ·ÂÊright=(j1+j2-2)/(j1+j2+k1+k2-4);disp(right);最近邻算法的源程序如下clear,close all%¶ÁÈ¡È«²¿Êý¾ÝRock=xlsread('C:\Users\Administrator\Documents\data\rock'); Mine=xlsread('C:\Users\Administrator\Documents\data\mine'); %²úÉúËæ»úÊýr1=randperm(97,48);r2=randperm(111,56);%È¡³öѵÁ·Ñù±¾for i=1:48vtrainrock(i,:)=Rock(r1(1,i),:);endtrainrock=vtrainrock';for i=1:56vtrainmine(i,:)=Mine(r2(1,i),:);endtrainmine=vtrainmine';%È¡³ö²âÊÔÑù±¾Rock(r1',:)=[];testrock=Rock';Mine(r2',:)=[];testmine=Mine';%×î½üÁÚ·ÖÀàrocklast=zeros(size(Rock'));minelast=zeros(size(Mine'));rgr=0;rwm=0;mgm=0;mwr=0;for i=1:49for j=1:48Ar(j,1)=(testrock(:,i)-trainrock(:,j))'*(testrock(:,i)-trainrock(:,j)) ;endfor k=1:56Br(k,1)=(testrock(:,i)-trainmine(:,k))'*(testrock(:,i)-trainmine(:,k)) ;end%¶Ô´ý²âÑù±¾½øÐзÖÀàif(min(Ar)<=min(Br))rocklast(:,i)=testrock(:,i);rgr=rgr+1;Ar=zeros(48,1);Br=zeros(56,1);elseminelast(:,i)=testrock(:,i);rwm=rwm+1;Ar=zeros(48,1);Br=zeros(56,1);endendfor i=1:55for j=1:48Am(j,1)=(testmine(:,i)-trainrock(:,j))'*(testmine(:,i)-trainrock(:,j)) ;endfor k=1:56Bm(k,1)=(testmine(:,i)-trainmine(:,k))'*(testmine(:,i)-trainmine(:,k)) ;end%¶Ô´ý²âÑù±¾½øÐзÖÀàif(min(Am)<min(Bm))rocklast(:,i)=testmine(:,i);mwr=mwr+1;Am=zeros(48,1);Bm=zeros(56,1);elseminelast(:,i)=testmine(:,i);mgm=mgm+1;Am=zeros(48,1);Bm=zeros(56,1);endendright=(rgr+mgm)/(rgr+mgm+rwm+mwr);disp(right);以上为两种算法在MATLAB里的源代码。
fisher分布matlab函数
![fisher分布matlab函数](https://img.taocdn.com/s3/m/91f136c903d276a20029bd64783e0912a3167c5b.png)
fisher分布matlab函数
在MATLAB中,Fisher分布可以使用`fpdf`函数来计算概率密度函数(PDF)和`fcdf`函数来计算累积分布函数(CDF)。
具体来说,`fpdf`函数用于计算Fisher分布的概率密度函数,其语法为:
matlab.
y = fpdf(x,v1,v2)。
其中,`x`是自变量,`v1`和`v2`分别是Fisher分布的自由度参数。
这个函数将返回Fisher分布在`x`处的概率密度值。
另外,`fcdf`函数用于计算Fisher分布的累积分布函数,其语法为:
matlab.
p = fcdf(x,v1,v2)。
其中,`x`是自变量,`v1`和`v2`分别是Fisher分布的自由度
参数。
这个函数将返回Fisher分布在`x`处的累积概率值。
除了这两个函数之外,MATLAB还提供了一系列用于处理Fisher 分布的函数,如`finv`用于计算Fisher分布的反函数,`fstat`用于计算Fisher分布的均值和方差等。
总之,在MATLAB中,可以使用这些函数来对Fisher分布进行各种计算和分析。
希望这些信息能够帮助到你。
模式识别作业
![模式识别作业](https://img.taocdn.com/s3/m/b0d282befd0a79563c1e7213.png)
6.题目:Fisher 分类和基于核的Fisher 分类的设计与实现研究 具体内容:1.简述Fisher 分类和基于核的Fisher 分类的算法原理; 2.举出实例;3.用MATlAB 软件编写程序实现;4.分析实验结果。
Fisher 分类和基于核的Fisher 分类的设计与实现研究1 Fisher 分类和基于核的Fisher 分类的算法原理1.1 Fisher 线性判别的算法原理Fisher 判别分析法对样本数据也没什么要求,而且可以弥补距离判别作外延计算时计算量大的问题,一般情况下,其判别的效果也比距离判别更好些。
由于Fisher 判别分析法不需要对样本数据进行检验,而且有一定的正确率,因此在实际中它被广泛的应用。
假设有一集合X 包含n 个d 维样本X={x 1,…,x n },其中n 1个属于w 1类的样本记为X 1={11x ,…,11n x },n 2个属于w 2类的样本记为X 2={21x ,…,22n x }。
Tnny w x= ,n=1,2,3,…i N(1.1)根据上式从几何上看,如果w =1,则每个ny就是相对应得n x到方向为w 的直线上的投影,w 的方向不同,将使样本投影后的分离程度不同,从而直接影响识别效果。
Fisher 线性判别所要解决的基本问题是找到一个最好的投影方向(如图1所示),使样本在这个方向上的投影能最好,最易于分类。
寻找最好投影方向的问题在数学上就是寻找最好的变换向量*w 的问题。
因此Fisher 判别分析的基本思想就是投影,即将k 类n 维数据投影到某个方向,是组与组间的距离最大,也即采用方差分析的思想。
判别函数的参数向量如下:在D 维X 空间: 1)各样本均值向量∑∈=iX x i i x n m )/1(,2,1=i (1.2)2)样本类内离散度矩阵i s 和各类内离散矩阵w s (),1,2()iTi i x x i i x x s m m ∈=-=-∑ (1.3)12ws s s=+ (1.4)3)样本间离散度矩阵b s12()12()Tb s m m m m =-- (1.5)我们最终可得Fisher 准则函数为:)/()()(w S w w S w w J w T b T = (1.6)其希望各类样本内部尽量密集,样本间尽可能分得开些。
(模式识别)Fisher线性判别
![(模式识别)Fisher线性判别](https://img.taocdn.com/s3/m/0e5558a227284b73f342505e.png)
Fisher 判别
各类样本均值
1
mi Ni yi y, i 1, 2
样本类内离散度和总类内离散度
Si ( y mi )2, i 1,2 yi
样本类间离散度
Sw S1 S2 Sb (m1 m2 )2
以上定义描述d维空间样本点到一向量投影的分 散情况,因此也就是对某向量w的投影在w上的 分布。样本离散度的定义与随机变量方差相类似
Sw1(m1 m2 )R
w*
R
Sw1(m1
m2 )
Sw1(m1 m2 )
10
8
判别函数的确定
Fisher 判别
前面讨论了使Fisher准则函数极大的d维向 量w*的计算方法,判别函数中的另一项w0 (阈值)可采用以下几种方法确定:
w0
m1
2
m2
w0
N1m1 N2m2 N1 N2
m
w0
m1
m2 2
lnP(1) / P( 1 y wT x w0 0 x 2
Fisher线性判别
线性判别函数y=g(x)=wTx:
• 样本向量x各分量的线性加权 • 样本向量x与权向量w的向量点积 • 如果|| w ||=1,则视作向量x在向量w上的投
影
Fisher准则的基本原理:找到一个最合适的 投影轴,使两类样本在该轴上投影之间的距 离尽可能远,而每一类样本的投影尽可能紧 凑,从而使分类效果为最佳。
Si (x mi )(x mi )T , i 1,2 xi
Sw S1 S2
样本类间离散度矩阵Sb:Sb (m1 m2 )(m1 m2 )T
离散矩阵在形式上与协方差矩阵很相似,但协方 差矩阵是一种期望值,而离散矩阵只是表示有限 个样本在空间分布的离散程度
Python实现线性判别分析(LDA)的MATLAB方式
![Python实现线性判别分析(LDA)的MATLAB方式](https://img.taocdn.com/s3/m/9b321401960590c69ec376d9.png)
#计算第一类样本在直线上的投影点 xi=[] yi=[] for i in range(0,p):
y0=X1[i,1] x0=X1[i,0] x1=(k*(y0-b)+x0)/(k**2+1) y1=k*x1+b xi.append(x1) yi.append(y1) print(xi)
%3.2700 3.5200 1
X=load('22.txt'); pos0=find(X(:,3)==0); pos1=find(X(:,3)==1); X1=X(pos0,1:2); X2=X(pos1,1:2); hold on plot(X1(:,1),X1(:,2),'r+','markerfacecolor', [ 1, 0, 0 ]); plot(X2(:,1),X2(:,2),'b*','markerfacecolor', [ 0, 0, 1 ]);
plt.show()
以上这篇Python实现线性判别分析(LDA)的MATLAB方式就是小编分享给大家的全部内容了,希望能给大家一个参考, 也希望大家多多支持。
p=np.size(X1,0) print(p) q=np.size(X2,0)
print(q)
#第二步,求类内散度矩阵 S1=np.dot((X1-M1).transpose(),(X1-M1)) print(S1) S2=np.dot((X2-M2).transpose(),(X2-M2)) print(S2) Sw=(p*S1+q*S2)/(p+q)
Python实现线性判别分析(LDA)的MATLAB方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fisher 线性判别上机实验报告班级: 学号: 姓名:一.算法描述Fisher 线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。
Fisher 线性判别分析,就是通过给定的训练数据,确定投影方向W 和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
线性判别函数的一般形式可表示成0)(w X W X g T += 其中Fisher 选择投影方向W 的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。
如下为具体步骤:(1)W 的确定w S 样本类间离散度矩阵b在投影后的一维空间中,各类样本均值Tiim '= Wm样本类内离散度和总类内离散度 T Ti i ww S ' = W S W S ' = W S W 样本类间离散度Tbb S ' = W S W Fisher 准则函数为 max 2221221~~)~~()(S S m m W J F +-=(2)阈值的确定w 0是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则: 令)()()(21x x x g g g -=则:如果g(x)>0,则决策w x 1∈;如果g(x)<0,则决策w x 2∈;如果g(x)=0,则可将x 任意分到某一类,或拒绝。
(3)Fisher 线性判别的决策规则 Fisher 准则函数满足两个性质:1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。
2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。
根据这个性质确定准则函数,根据使准则函数取得最大值,可求出W :-1w 12W = S (m - m ) 。
这就是Fisher 判别准则下的最优投影方向。
最后得到决策规则若P P m m w ww x x g T)()(2112log))(21()(大于或小于+-=,则{12ww x ∈ 对于某一个未知类别的样本向量x ,如果y=W T·x>y0,则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);for i=1:1:30s1 = s1 + (Iris1(i,:) - m1)'*(Iris1(i,:) - m1);endfor i=1:1:30s2 = s2 + (Iris2(i,:) - m2)'*(Iris2(i,:) - m2);endfor i=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=[];for i=31:50x = Iris1(i,:);g12 = w12 * x' + T12;g13 = w13 * x' + T13;g23 = w23 * x' + T23;if((g12 > 0)&(g13 > 0))newiris1=[newiris1;x];kind1=kind1+1;elseif((g12 < 0)&(g23 > 0))newiris2=[newiris2;x];elseif((g13 < 0)&(g23 < 0))newiris3=[newiris3;x];endendfor i=31:50x = Iris2(i,:);g12 = w12 * x' + T12;g13 = w13 * x' + T13;g23 = w23 * x' + T23;if((g12 > 0)&(g13 > 0))newiris1=[newiris1;x];elseif((g12 < 0)&(g23 > 0))kind2=kind2+1;newiris2=[newiris2;x];elseif((g13 < 0)&(g23 < 0))newiris3=[newiris3;x];endendfor i=31:50x = Iris3(i,:);g12 = w12 * x' + T12;g13 = w13 * x' + T13;g23 = w23 * x' + T23;if((g12 > 0)&(g13 > 0))newiris1=[newiris1;x];elseif((g12 < 0)&(g23 > 0))newiris2=[newiris2;x];elseif((g13 < 0)&(g23 < 0))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);for i=1:1:70s1 = s1 + (Sonar1(i,:) - m1)'*(Sonar1(i,:) - m1);endfor i=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=[];for i=71:98x = Sonar1(i,:);g12 = w12 * x' + T12;if g12 > 0newsonar1=[newsonar1;x];kind1=kind1+1;elsenewsonar2=[newsonar2;x];endendfor i=81:110x = Sonar2(i,:);g12 = w12 * x' + T12;if g12 > 0newsonar1=[newsonar1;x];elsenewsonar2=[newsonar2;x];kind2=kind2+1;endendcorrect= (kind1+kind2)/58;fprintf('\n综合正确率:%.2f%%\n\n',correct*100); (2)实验结果:综合正确率=75.86%。