📄 fisher.m
字号:
function y = fisher(x1,x2);close all;clear;clc;A = importdata('D:\MATLAB\R2007b\work\Pattern Recognition\fisher_testdata.txt');% 将实验数据存储为txt文件格式,用importdata命令读入数据c1=3*2-1;c2=4*2-1;x1=A(:,c1:c1+1); % 将待分类的两类数据存入判别函数的输入参数x1,x2中x2=A(:,c2:c2+1);% x1=[A(:,4),A(:,5)]; % 对两类三维数据,只读取其中的二维数据,% x2=[A(:,7),A(:,8)]; % 以测试在何方向上分类效果最好% x1=randn(10,2)-2*ones(10,2); % 利用随机数据来检测程序的分类性能% x2=2*ones(10,2)+randn(10,2);[n1,d1]=size(x1); % 读取输入数据的个数n和维数d[n2,d2]=size(x2);if d1~=d2 % 如果维数不等,则提示错误 error('The dimensions of x1 and x2 must be the same !'); return;endmx1=sum(x1)/n1; % 求两类数据的类内均值mx2=sum(x2)/n2;s1=0; s2=0; % 求两类数据的类内散布矩阵si和总类内散布矩阵swfor i=1:n1 s1=s1+(x1(i,:)'-mx1')*(x1(i,:)'-mx1')';endfor i=1:n2 s2=s2+(x2(i,:)'-mx2')*(x2(i,:)'-mx2')';endsw=s1+s2;% w=sw^(-1)*(mx1'-mx2') % 求出最优方向ww=[0.04 0.0612]'kw=w(2)/w(1) % kw是最优方向在二维平面上的投影直线L的斜率bw=0 % bw是该直线的偏置kalpha=-1/kw % kalpha是数据分类分界线La的斜率,分界线La垂直于最优投影直线Ly1=w'*x1'; % y1是第一类数据在最优方向上的投影点的值y2=w'*x2'; % y2是第二类数据在最优方向上的投影点的值y0=[y1,y2]; % y0是两类数据在最优方向上的投影点的值yalpha=mean(y0); % 判别阈值设为点集{y0}的平均值y=y0-yalpha; % y是经过判别处理后数据的投影值,y>0则判别为第一类,反之判为第二类figure;subplot(121); stem(y); % 画出分类结果 Grid;subplot(122); % 在二维平面上画出分类结果r1=x1(:,1);c1=x1(:,2);h1=stem(r1,c1,'bo'); % 分别画出两类数据点在二维平面上的投影 set(h1,'MarkerFaceColor','green'); set(h1,'LineStyle','none'); set(get(h1,'BaseLine'),'LineStyle','none'); hold on;r2=x2(:,1);c2=x2(:,2);h2=stem(r2,c2,'bs'); set(h2,'MarkerFaceColor','red'); set(h2,'LineStyle','none'); set(get(h2,'BaseLine'),'LineStyle','none'); hold on;axis_start=min(min(r1),min(r2))-1; % 设定最优投影直线和分类分界线的坐标域起止点axis_end=max(max(r1),max(r2))+1;if w(1)>0 % 根据w(1)来判断最优投影直线的正方向 dires=0.9*axis_end;else dires=0.9*axis_start;endm1=axis_start:0.01:axis_end; % 画出最优投影直线 n1=kw.*m1+bw; plot(m1,n1); hold on;[balpha,xalpha,yalpha] = classify(x1,x2,w,bw); % 画出各数据点到最优投影直线的投影线和投影点balpha % 求出分类分界线的偏置、分界线与投影直线的交点坐标drawarrow([xalpha yalpha],[dires kw*dires+bw]); % 画出最优投影直线的正方向 hold on;m2=axis_start:0.01:axis_end; % 画出分类分界线 n2=(-1/kw).*m2+balpha; p=plot(m2,n2,'b-'); set(p,'LineWidth',2) hold on;axis equal;axis tight;Grid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -