简单的利用fisher准则函数获取最佳投影线的matlab程序

上传人:mg****85 文档编号:34207331 上传时间:2018-02-21 格式:DOC 页数:5 大小:114KB
返回 下载 相关 举报
简单的利用fisher准则函数获取最佳投影线的matlab程序_第1页
第1页 / 共5页
简单的利用fisher准则函数获取最佳投影线的matlab程序_第2页
第2页 / 共5页
简单的利用fisher准则函数获取最佳投影线的matlab程序_第3页
第3页 / 共5页
简单的利用fisher准则函数获取最佳投影线的matlab程序_第4页
第4页 / 共5页
简单的利用fisher准则函数获取最佳投影线的matlab程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《简单的利用fisher准则函数获取最佳投影线的matlab程序》由会员分享,可在线阅读,更多相关《简单的利用fisher准则函数获取最佳投影线的matlab程序(5页珍藏版)》请在金锄头文库上搜索。

1、简单的利用 Fisher 准则函数获取最佳投影线的 Matlab 程序发现利用 Fisher 准则函数计算最佳投影方向的公式好像很简单,就写这个吧! 这个 Fisher 法就是将高维空间中的样本投影到一维空间中,以降低复杂度。具体可以参见边肇祺、张学工著,清华大学出版社的模式识别(第二版)P87。 用这种方法时使用到了几个概念: 样本向量:样本向量是列向量,样本是 d 维空间中的点,因此它的位置可以用一个 d 维列向量表示; 各类样本均值向量:一类中所有样本向量的均值,也是 d 维列向量; 样本类内离散度矩阵: x 为样本向量,mi 为 Ci类的均值向量,Si 为 Ci类的类内离散度矩阵。总类

2、内离散度矩阵:Sw=S1+S2; 利用 Lagrange 乘子法可以求出使 Fisher 准则函数取极大值的向量: 这个向量指出了相对于 Fisher 准则函数最好的投影线方向。 虽然推导出这个结果,破费了些周折,但是结果的形式还是相对比较简单的,所以用 Matlab 程序实现它应该不麻烦。 最终的这个向量仅与总类内离散度矩阵和各类的均值向量有关,我们可以对类内离散度矩阵的表达式变一下形,使程序更容易写: 这样的变形也许在数学上的意义不大,但是可以简化程序,使得类内离散度矩阵仅用一次矩阵乘法就可完成。 以下程序在 Matlab7.0.1 下编写。 在编写求解最佳投影线方向的代码之前,先得编写生

3、成样本的函数,如下(为这个函数取名困扰了我很久,最后查字典得知样本是 swatch,所以这个函数命名为 createSwatch): function swatch=createSwatch(xmin,xmax,ymin,ymax,num,varargin) xlen=abs(xmax-xmin); ylen=abs(ymax-ymin); if numel(varargin)0 & isa(varargin1,function_handle) f=varargin1; else f=rand; end swatch=xlen*f(1,num)+min(xmax,xmin);. ylen*f(

4、1,num)+min(ymax,ymin); 这次的实验是针对 2D 空间的样本,所以这个 createSwatch 函数用来产生 2D 空间的样本点。前四个参数 xmin,xmax,ymin,ymax 用来设定样本的横纵坐标的范围,第五个参数 num 用来指定产生的样本的个数,最后有一个可选的参数,用来传入一个函数句柄,用来自定义样本的分布率,默认使用 rand,均匀分布。 最后生成的 num 个样本以矩阵的形式返回,矩阵的一列代表一个样本,矩阵的第一行代表样本的横坐标,第二行代表样本的纵坐标。 然后是计算最佳投影线方向的函数: function w=JF(c1,c2) %利用 Fisher

5、 准则函数确定最佳投影方向 %c1 和 c2 分别为两类样本的样本矩阵 %得到样本矩阵的尺寸信息 %样本矩阵的行数代表样本的维数 %样本矩阵的列数代表样本的个数 size1=size(c1); size2=size(c2); %计算两类样本的均值向量 m1=sum(c1,2)/size1(2); m2=sum(c2,2)/size2(2); %样本向量减去均值向量 c1=c1-m1(:,ones(1,size1(2); c2=c2-m2(:,ones(1,size2(2); %计算各类的类内离散度矩阵 S1=c1*c1.; S2=c2*c2.; %计算总类内离散度矩阵 Sw=S1+S2; %计

6、算最佳投影方向向量 w=Sw-1*(m1-m2); %将向量长度变成 1 w=w/sqrt(sum(w.2); 这个函数有两个参数 c1,c2,分别是两个类别的样本矩阵; 返回值 w 是一个 2 维单位列向量,用来指出最佳投影线的方向。 最后编写一个测试用的脚本: clear all; %定义两类样本的空间范围 x1min=2;x1max=6; y1min=-4,y1max=0; x2min=6,x2max=10; y2min=2,y2max=6; %产生两类 2D 空间的样本 c1=createSwatch(x1min,x1max,y1min,y1max,100); c2=createSwa

7、tch(x2min,x2max,y2min,y2max,80); %获取最佳投影方向 w=JF(c1,c2); %计算将样本投影到最佳方向上以后的新坐标 cm1=c1(1,:)*w(1)+c1(2,:)*w(2); cm2=c2(1,:)*w(1)+c2(2,:)*w(2); cc1=w(1)*cm1;w(2)*cm1; cc2=w(1)*cm2;w(2)*cm2; %打开图形窗口 figure; %绘制多图 hold on; %绘制第一类的样本 plot(c1(1,:),c1(2,:),rp); %绘制第二类的样本 plot(c2(1,:),c2(2,:),bp); %绘制第一类样本投影到最

8、佳方向上的点 plot(cc1(1,:),cc1(2,:),r+); %绘制第二类样本投影到最佳方向上的点 plot(cc2(1,:),cc2(2,:),b+); w=10*w; %画出最佳方向 line(-w(1),w(1),-w(2),w(2),color,k); axis(-10,10,-10,10); grid on; hold off; 广告:想在自己的空间中贴上上过色的 Matlab 代码吗?在 将 m 文件转化为 html 文件 里可以找到将 m 代码转换成 html 的 Python 程序 通过更改脚本中定义的x1min,x1max,y1min,y1max,x2min,x2max,y2min,y2max 这八个参数来设定两类样本的取值范围。 最后画出的图形如下: 红色的五角形是一类样本,蓝色的五角形是另一类样本,红色和蓝色的+是两类样本投影到最佳方向上的情况。黑线就是最佳投影线。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号