网站大量收购独家精品文档,联系QQ:2885784924

fisher算法及其matlab实现.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
fisher算法及其matlab实现.doc

Fisher判别法讲解以及matlab代码实现 两类的线形判别问题可以看作是把所有样本都投影到一个方向上,然后在这个一维空间中确定一个分类的阈值。过这个预置点且与投影方向垂直的超平面就是两类的分类面。 第一个问题,如何确定投影方向? 这里只讨论两类分类的问题是一个d*1的矩阵,假设每个维度是一个变量值,mi中的每一维度就是这些变量值的均值,如下图所示: 图1 特别注明:有些例子给的矩阵是这样的: 图2 这里的单个样本是1*d的矩阵,要注意计算的时候将其转置,不然套用fisher算法公式的时候就会发现最后得到的矩阵维数不对。 定义各类类内的离散度矩阵为:(类内离散度矩阵其实就是类协方差矩阵,类在多于一个样本,且样本维度1时是一个矩阵) (因为,是一个d*1的矩阵,也可称作d维向量,也是一个d*1的矩阵,所以最后得到的一定是一个d*d的矩阵) (在用matlab计算的时候直接用cov(wi)即可得到想要的协方差矩阵,故直接计算不探究细节时图2可直接cov算协方差,不用根据公式转置来转置去,不过matlab中算的协方差被缩小了(n1-1)倍,计算时=cov(w1)*(n1-1)) 总的类内离散度矩阵: 类间离散度矩阵定义为: 在投影以后的一维空间里,两类的均值分别是; i=1,2 故类内离散度不再是一个矩阵,而是一个值 i=1,2 总类内离散度为: 类间离散度: 要使得需求的方向投影能在投影后两类能尽可能的分开,而各类内部又尽可能的聚集,可表示成如下准则,即fisher准则: 将公式代入并通过拉格朗日求极值的方法,可得投影方向: (w是一个d*1的矩阵,或者说亦是一个d维向量) 阈值可表示为: 最后将待确定样本代入 判断的符号和哪个类相同,确定其属于哪个类别。 例子(注意表格中所给的样本维度和公式中变量维度的问题) 代码已经运行无误 代码: %读取excel中特定单元格的数据 w12=xlsread(E:\模式识别\理论学习\胃病分类问题.xls,C2:F16); %分别选取类1和类2、测试样本的数据 w1=w12(1:5,:); w2=w12(6:12,:); sample=w12(13:15,:); %计算类1和类2的样本数 r1=size(w1,1); r2=size(w2,1); r3=size(sample,1); %计算类1和类2的均值(矩阵) m1=mean(w1); m2=mean(w2); %各类类内离散度矩阵(协方差矩阵) s1=cov(w1)*(r1-1); s2=cov(w2)*(r2-1); %总类内离散度矩阵 sw=s1+s2; %投影向量的计算公式 w=inv(sw)*(m1-m2); %计算投影后的一位空间内,各类的均值 y1=w*m1; y2=w*m2; %计算阈值 w0=-1/2*(y1+y2); %和类相同符号被归为同类 for i=1:r3 y(i)=sample(i,:)*w+w0; if y(i)*(w*w1(1,:)+w0)0 y(i)=1; else y(i)=2; end End 判断得出第一个待测样本属于类1,第二,三个待测样本属于类2 如果想进一步知道样本矩阵是如何转置得到最后结果的,可看下面这个例子,这个例子没有用到matlab内置的cov协方差函数(用cov可以直接用样本数据直接进行矩阵运算,不用转置成样本维度向量),所以要进行转置后代入fisher准则公式求解. x=xlsread(E:\模式识别\理论学习\污染水域问题.xls,C3:F14); x1=x(1:5,:); x2=x(6:10,:); sample=x(11:12,:); m1=zeros(size(x1,1),1); % 求类内离散度矩阵 m1=mean(x1,2) m2=mean(x2,2) % 求类内离散度矩阵 s1=zeros(size(x1,1),size(x1,1)); for i=1:size(x1,2) s1=s1+(x1(:,i)-m1)*(x1(:,i)-m1); end s2=zeros(size(x2,1),size(x2,1)); for i=1:size(x2,2) s2=s2+(x2(:,i)-m2)*(x2(:,i)-m2); end sw=s1+s2; w=inv(sw)*(m1-m2); y1=w*m1; y2=w*m2; w0=-1/2*(y1+y2); for i=1:size(sample,2) y(i)=w*sample(:,i); if y(i)+w00 y(i)=1

文档评论(0)

docinpfd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档