实验二 感知器准则与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