模式识别 - 感知器准则与Fisher算法实验

更新时间:2024-01-26 16:58:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二 感知器准则与Fisher算法实验

1、【实验目的】

贝叶斯分类方法是基于后验概率的大小进行分类的方法,有时需要进行概率密度函数的估计,而概率密度函数的估计通常需要大量样本才能进行,随着特征空间维数的增加,这种估计所需要的样本数急剧增加,使计算量大增。 在实际问题中,人们可以不去估计概率密度,而直接通过与样本和类别标号有关的判别函数来直接将未知样本进行分类。这种思路就是判别函数法,最简单的判别函数是线性判别函数。采用判别函数法的关键在于利用样本找到判别函数的系数,模式识别课程中的感知器算法是一种求解判别函数系数的有效方法。本实验的目的是通过编制程序,实现感知器准则 算法,并实现线性可分样本的分类。

本实验通过编制程序让初学者能够体会Fisher线性判别的基本思路,理解线性判别的基本思想,掌握 Fisher 线性判别问题的实质。

2、[实验内容]

1.实验所用样本数据如表2-1 给出(其中每个样本空间(数据)为两维, x 1 表示第一维的值、x 2 表示第二维的值),编制程序实现 ω1、ω 2 类 ω 2、ω 3类的分类。分析分类器算法的性能。

具体要求

1、复习感知器算法;

2、写出实现批处理感知器算法的程序

1)从 a=0开始,将你的程序应用在ω1和ω2的训练数据上。记下收敛的步 数。

2)将你的程序应用在ω2和ω3类上,同样记下收敛的步数。 3)试解释它们收敛步数的差别。

3、提高部分:ω3和ω4的前 5 个点不是线性可分的,请手工构造非线性映 射,使这些点在映射后的特征空间中是线性可分的,并对它们训练一个感 知器分类器。分析这个分类器对剩下的(变换后的)点分类效果如何?

1

2.Fisher准则

下面表样本数据中的类别ω1 和ω2 计算最优方向 W。画出最优方向 W的直线,并标记出投影后的点在直线上的位置。

3、【实验原理】

线性判别函数的一般形式可表示成 g(X)?WTX?w0 其中

?w1???x?1????w?X???? W??2?

??x????d??w??d?根据Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求,用以评价投影方向W的函数为:

~?m~)2(m2 JF(W)?~12~2S1?S2?1W*?SW(m1?m2)

上面的公式是使用Fisher准则求最佳法线向量的解,该式比较重要。另外,该式这种

?1

形式的运算,我们称为线性变换,其中m1?m2式一个向量,SW是SW的逆矩阵,如m1?m2?1是d维,SW和SW都是d×d维,得到的W也是一个d维的向量。

* 向量W就是使Fisher准则函数JF(W)达极大值的解,也就是按Fisher准则将d维X

2

*

空间投影到一维Y空间的最佳投影方向,该向量W的各分量值是对原d维特征向量求加权和的权值。

*以上讨论了线性判别函数加权向量W的确定方法,并讨论了使Fisher准则函数极大的d维向量W 的计算方法,但是判别函数中的另一项W0尚未确定,一般可采用以下几种方法确定W0如

*~?m~m12W0??

2~?Nm~N1m~ 122或者 W0???mN1?N2 或当p(?)1与p(?)2已知时可用

~?m~ln?p(?)/p(?)???m1212W0????

N1?N2?2??2……

当W0确定之后,则可按以下规则分类,

WTX??w0?X??1WX??w0?X??2T

使用Fisher准则方法确定最佳线性分界面的方法是一个著名的方法,尽管提出该方法的时间比较早,仍见有人使用。

4、【实验内容:】

1.实验所用样本数据如表2-1 给出(其中每个样本空间(数据)为两维,x 1 表示第

一维的值、x 2 表示第二维的值),编制程序实现 ω1、ω 2 类 ω

2、ω 3类的分类。分析分类器算法的性能。

具体要求

1、复习感知器算法;

2、写出实现批处理感知器算法的程序

1)从 a=0开始,将你的程序应用在ω1和ω2的训练数据上。记下收敛的步 数。

2)将你的程序应用在ω2和ω3类上,同样记下收敛的步数。 3)试解释它们收敛步数的差别。

3

3、提高部分:ω3和ω4的前 5 个点不是线性可分的,请手工构造非线性映 射,使这些点在映射后的特征空间中是线性可分的,并对它们训练一个感 知器分类器。分析这个分类器对剩下的(变换后的)点分类效果如何?

5、【实验程序及结果:】

(1) 线性判别函数 【源程序:】

clear

w1=[0.1 6.8 -3.5 2.0 4.1 3.1 -0.8 0.9 5.0 3.9;1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4 4.0];

w2=[7.1 -1.4 4.5 6.3 4.2 1.4 2.4 2.5 8.4 4.1;4.2 -4.3 0.0 1.6 1.9 -3.2 -4.0 -6.1 3.7 -2.2];

w3=[-3.0 0.5 2.9 -0.1 -0.4 -1.3 -3.4 1 -5.1 1.9;-2.9 8.7 2.1 5.2 2.2 3.7 6.2 3.4 1.6 5.1];

ww1=[ones(1,size(w1,2));w1]; ww2=[ones(1,size(w2,2));w2]; ww3=[ones(1,size(w3,2));w3]; w12=[ww1,-ww2];

y=zeros(1,size(w12,2)); a=[1;1;1]; k=0;

while any(y<0)

for i=1:size(y,2) y(i)=a'*w12(:,i); end

a=a+(sum((w12(:,find(y<=0)))'))'; k=k+1; end a k

figure(1)

plot(w1(1,:),w1(2,:),'r'); hold on

plot(w2(1,:),w2(2,:),'*')

xmin=min(min(w1(1,:)),min(w2(1,:))); xmax=max(min(w1(2,:)),min(w2(2,:))); ymin=min(min(w1(1,:)),min(w2(1,:))); ymax=max(min(w1(2,:)),max(w2(2,:))); xindex=xmin-1:(xmax-xmin)/100:xmax+1; yindex=-a(2)*xindex/a(3)-a(1)/a(3); plot(xindex,yindex); w12=[ww2,-ww3];

y=zeros(1,size(w12,2));

4

a=[1;1;1]; k=0;

while any(y<0)

for i=1;size(y,2) y(i)=a*w12(:,i); end

a=a+(sum((w12(:,find(y<=0)))'))'; k=k+1; end a k

figure(2)

plot(w2(1,:),w2(2,:),'r') hold on

plot(w3(1,:),w3(2,:),'*')

xmin=min(min(w2(1,:)),min(w3(1,:))); xmax=max(min(w2(1,:)),min(w3(1,:))); xindex=xmin-1:(xmax-xmin)/100:xmax+1; yindex=-a(2)*xindex/a(3)-a(1)/a(3); plot(xindex,yindex)

【实验结果:】

5

2.Fisher准则

下面表样本数据中的类别ω1 和ω2 计算最优方向 W。画出最优方向 W的直线,并标记出投影后的点在直线上的位置。

【源程序:】

function fisher %w1中数据点的坐标

x1 =[-0.4 -0.31 -0.38 -0.15 -0.35 0.17 -0.011 -0.27 -0.065 -0.12]; x2 =[0.58 0.27 0.055 0.53 0.47 0.69 0.55 0.61 0.49 0.054];

x3 =[0.089 -0.04 -0.035 0011 0.034 0.1 -0.18 0.12 0.0012 -0.063];

%将x1、x2、x3变为行向量 x1=x1(:); x2=x2(:); x3=x3(:);

%计算第一类的样本均值向量m1 m1(1)=mean(x1); m1(2)=mean(x2); m1(3)=mean(x3);

%计算第一类样本类内离散度矩阵S1 S1=zeros(3,3); for i=1:10

S1=S1+[-m1(1)+x1(i) -m1(2)+x2(i) -m1(3)+x3(i)]'*[-m1(1)+x1(i) -m1(2)+x2(i) -m1(3)+x3(i)]; end

%w2的数据点坐标

x4 =[0.83 1.1 -0.44 0.047 0.28 -0.39 0.34 -0.3 1.1 0.18]; x5 =[1.6 1.6 -0.41 -0.45 0.35 -0.48 -0.079 -0.22 1.2 -0.11]; x6 =[-0.014 0.48 0.32 1.4 3.1 0.11 0.14 2.2 -0.46 -0.49];

6

x4=x4(:); x5=x5(:); x6=x6(:);

%计算第二类的样本均值向量m2 m2(1)=mean(x4); m2(2)=mean(x5); m2(3)=mean(x6);

%计算第二类样本类内离散度矩阵S2 S2=zeros(3,3); for i=1:10

S2=S2+[-m2(1)+x4(i) -m2(2)+x5(i) -m2(3)+x6(i)]'*[-m2(1)+x4(i) -m2(2)+x5(i) -m2(3)+x6(i)]; end

%总类内离散度矩阵Sw Sw=zeros(3,3); Sw=S1+S2;

%样本类间离散度矩阵Sb Sb=zeros(3,3);

Sb=(m1-m2)'*(m1-m2); %最优解W

W=Sw^-1*(m1-m2)'

%将W变为单位向量以方便计算投影 W=W/sqrt(sum(W.^2));

%计算一维Y空间中的各类样本均值M1及M2 for i=1:10

y(i)=W'*[x1(i) x2(i) x3(i)]'; end

M1=mean(y) for i=1:10

y(i)=W'*[x4(i) x5(i) x6(i)]'; end

M2=mean(y)

%利用当P(w1)与P(w2)已知时的公式计算W0 p1=0.6;p2=0.4;

W0=-(M1+M2)/2+(log(p2/p1))/(10+10-2); %计算将样本投影到最佳方向上以后的新坐标 X1=[x1*W(1)+x2*W(2)+x3*W(3)]';

X2=[x4*W(1)+x5*W(2)+x6*W(3)]';%得到投影长度 XX1=[-0.7,0.58,0.089];

XX2=[0.047,-0.4,1.04];%得到新坐标 %绘制样本点 figure(1)

7

plot3(x1,x2,x3,'r*') %第一类 hold on

plot3(x4,x5,x6,'bp') %第二类 legend('第一类点','第二类点') title('Fisher线性判别曲线') W1=5*W;

%画出最佳方向

line([-W1(1),W1(1)],[-W1(2),W1(2)],[-W1(3),W1(3)],'color','b'); %判别已给点的分类

a1=[1,1.5,0.6]';a2=[1.2,1.0,0.55]';a3=[2.0,0.9,0.68]';a4=[1.2,1.5,0.89]';a5=[0.23,2.33,1.43]'; A=[a1 a2 a3 a4 a5]

n=size(A,2); %下面代码在改变样本时都不必修改

%绘制待测数据投影到最佳方向上的点 for k=1:n A1=A(:,k)'*W;

A11=W*A1;%得到待测数据投影

y=W'*A(:,k)+W0;%计算后与0相比以判断类别,大于0为第一类,小于0为第二类 if y>0

plot3(A(1,k),A(2,k),A(3,k),'go'); %点为\对应第一类 plot3(A11(1),A11(2),A11(3),'go'); %投影为\对应go类 else

plot3(A(1,k),A(2,k),A(3,k),'m+'); %点为\对应m+类 plot3(A11(1),A11(2),A11(3),'m+'); %投影为\对应m+类 end end

%画出最佳方向

line([-W1(1),W1(1)],[-W1(2),W1(2)],[-W1(3),W1(3)],'color','k'); view([-37.5,30]);

axis([-2,3,-1,3,-0.5,1.5]); grid on hold off

【实验结果:】

8

【实验分析】

W的比例因子对于Fisher判别函数没有影响的原因:

在本实验中,最需要是在此方向上数据的投影,那么W的比例因子,即它是单位向量的多少倍长就无关紧要了。

9

本文来源:https://www.bwwdw.com/article/z20w.html

Top