⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fisher.m

📁 能够实现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 + -