实验二 感知器准则算法实验学生用01

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一、实验目的

贝叶斯分类方法是基于后验概率的大小进行分类的方法,有时需要进行概率密度函数的估计,而概率密度函数的估计通常需要大量样本才能进行,随着特征空间维数的增加,这种估计所需要的样本数急剧增加,使计算量大增。

在实际问题中,人们可以不去估计概率密度,而直接通过与样本和类别标号有关的判别函数来直接将未知样本进行分类。这种思路就是判别函数法,最简单的判别函数是线性判别函数。采用判别函数法的关键在于利用样本找到判别函数的系数,模式识别课程中的感知器算法是一种求解判别函数系数的有效方法。本实验的目的是通过编制程序,实现感知器准则算法,并实现线性可分样本的分类。

二、实验内容

实验所用样本数据如表2-1给出(其中每个样本空间(数据)为两维,x1表示第一维的值、x2表示第二维的值),编制程序实现ω1和ω2类、ω2和ω3类

的分类。分析分类器算法的性能。

w2=[7.1-1.44.56.34.21.42.42.58.44.1;4.2-4.30.01.61.9-3.0-4.0-6.1 3.7-2.2];

表2-1感知器算法实验数据

三、具体要求

1、复习感知器算法;

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

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

2)将你的程序应用在ω2和ω3类上,同样记下收敛的步数。

3)试解释它们收敛步数的差别。

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

四、参考例程及其说明

针对ω1、ω2和ω3的分类程序如下:

clear

%original data

%产生第一类、第二类和第三类原始数据,分别赋给w1、w2和w3变量

w1=[0.16.8-3.52.04.13.1-0.80.95.03.9;1.17.1-4.12.72.85.0-1.31.2 6.44.0];

w2=[7.1-1.44.56.34.21.42.42.58.44.1;4.2-4.30.01.61.9-3.0-6.13.7

-2.2];

w3=[-3.00.52.9-0.1-4.0-1.3-3.4-4.1-5.11.9;-2.98.72.15.22.23.76.23.4 1.65.1];

%normalized

%分别产生第一类、第二类和第三类增广样本向量集ww1、ww2和ww3

ww1=[ones(1,size(w1,2));w1];

ww2=[ones(1,size(w2,2));w2];

ww3=[ones(1,size(w3,2));w3];

%产生第一类和第二类样本向量的规范化增广样本向量集w12

w12=[ww1,-ww2];

%%w13=[ww1,-ww3];

%%w23=[ww2,-ww3];

y=zeros(1,size(w12,2));%产生1x20的行向量,赋给y,初值全为0

v=[1;1;1];%给权向量v赋初值

k=0;%k为迭代次数,v(0)=[1;1;1]

while any(y<=0)

for i=1:size(y,2)

y(i)=v'*w12(:,i);

end

v=v+(sum((w12(:,find(y<=0)))'))';

k=k+1;

end

v%显示最终求得的权向量v的值

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(max(w1(1,:)),max(w2(1,:)));

ymin=min(min(w1(2,:)),min(w2(2,:)));

ymax=max(max(w1(2,:)),max(w2(2,:)));

xindex=xmin-1:(xmax-xmin)/100:xmax+1;

yindex=-v(2)*xindex/v(3)-v(1)/v(3);

plot(xindex,yindex)

%写出实现批处理感知器算法的程序,从v=0开始,将程序应用在ω2和ω3类上,同样记下收敛的步数。

w23=[ww2,-ww3];

yy=zeros(1,size(w23,2));%产生1x20的行向量,赋给y,初值全为0

vv=[1;1;1];%给权向量v赋初值

kk=0;%k为迭代次数,v(0)=[1;1;1]

while any(yy<=0)

for i=1:size(yy,2)

yy(i)=vv'*w23(:,i);

end

vv=vv+(sum((w23(:,find(yy<=0)))'))';

kk=kk+1;

end

vv%显示最终求得的权向量v的值

kk%迭代次数值

figure(2)

plot(w2(1,:),w2(2,:),'r.')

hold on

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

xxmin=min(min(w2(1,:)),min(w3(1,:)));

xxmax=max(max(w2(1,:)),max(w3(1,:)));

yymin=min(min(w2(2,:)),min(w3(2,:)));

yymax=max(max(w2(2,:)),max(w3(2,:)));

xxindex=xmin-1:(xxmax-xxmin)/100:xxmax+1;

yyindex=-vv(2)*xxindex/vv(3)-vv(1)/vv(3);

plot(xindex,yyindex)

上述程序运行后,可以得到线性分类器如图2-1和图2-2所示。

相关文档
最新文档