fisher算法及其matlab实现.docx

上传人:小飞机 文档编号:3157132 上传时间:2023-03-11 格式:DOCX 页数:6 大小:38.06KB
返回 下载 相关 举报
fisher算法及其matlab实现.docx_第1页
第1页 / 共6页
fisher算法及其matlab实现.docx_第2页
第2页 / 共6页
fisher算法及其matlab实现.docx_第3页
第3页 / 共6页
fisher算法及其matlab实现.docx_第4页
第4页 / 共6页
fisher算法及其matlab实现.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《fisher算法及其matlab实现.docx》由会员分享,可在线阅读,更多相关《fisher算法及其matlab实现.docx(6页珍藏版)》请在三一办公上搜索。

1、fisher算法及其matlab实现 Fisher判别法讲解以及matlab代码实现 两类的线形判别问题可以看作是把所有样本都投影到一个方向上,然后在这个一维空间中确定一个分类的阈值。过这个预置点且与投影方向垂直的超平面就是两类的分类面。 第一个问题,如何确定投影方向? 这里只讨论两类分类的问题.训练样本集是X=x1,x2.xn,每个样本是一个d维212112xxxxx向量,其中第一类w1=1,2.n1,第二类w2=1,2.n2。我们x要寻求一个投影方向w,投影以后样本变成:yi=w是一个标量),i=1.n 在原样本空间中,类均值为: Txi(y1mi=nixjwixj i=1,2(一共两类的

2、均值) Si=xjwiT(x-m)(x-m)jiji即可得到想要的协方差矩阵,故直接计算不探究细节时图2可直接cov算协方差,不用根据公式转置来转置去,不过matlab中算的协方差被缩小了倍,计算时Si=cov*) 总的类内离散度矩阵: Sw=S1+S2 类间离散度矩阵定义为: Sb=(m1-m2)(m1-m2)T 在投影以后的一维空间里,两类的均值分别是; 1mii=Ni1yi=NyjwiixjwiwTxj=wmiT i=1,2 故类内离散度不再是一个矩阵,而是一个值 Sii=yjwi(y-m)iii2 i=1,2 总类内离散度为: Sww=S11+S11 类间离散度: Sbb=(m11-m

3、11)2要使得需求的方向投影能在投影后两类能尽可能的分开,而各类内部又尽可能的聚集,可表示成如下准则,即fisher准则: SbbmaxJ(w)=Sww将公式代入并通过拉格朗日求极值的方法,可得投影方向: w=Sw(m1-m2) 阈值可表示为: -11w0=-(m11+m22) 2最后将待确定样本代入 g(x)=wx+w0 判断g(x)的符号和哪个类相同,确定其属于哪个类别。 例子 代码已经运行无误 T代码: %读取excel中特定单元格的数据 w12=xlsread(E:模式识别理论学习胃病分类问题.xls,C2:F16); %分别选取类1和类2、测试样本的数据 w1=w12(1:5,:);

4、 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); %和类

5、相同符号被归为同类 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协方差函数,所以要进行转置后代入fisher准则公式求解. x=xlsread(E:模式识别理论学习污染水域问题.xls,C3:F14); x1=x(1:5,:); x2=x(6:10,:); sample=x(11:12,:); m1=

6、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; else y(i)=2; end end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号