模式识别实习报告

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

长安大学模式识别实习报告

姓名:韦博文

学号:201126060126

指导老师:王爱萍

一、实习目的

本次模式识别的实习其目的主要有三个:

1.复习课堂上有关模式识别的理论基础。

2.熟悉和应用课堂学习的基本理论进行编程,重点是感知器算法和k均值

算法的编程。

3.初步学习matlab编程语言,并且用于简单编程。

二、实习内容

本次模式识别的内容有三个:

1.用感知器算法简单实现课本中例题

2.4:两类训练样本w1和w2的正确

分类。

2.用k-均值算法简单实现课本中例题6.2:两类训练样本w1和w2的正确

聚类。

3.用k-均值算法实现所给hand.jpg图片的分类。

三、算法步骤

感知器算法:

1、步骤:

1)设规范化增广样本集合Y={y1,y2,…,yn}初始化权向量,置k=0,权

向量a(k),y i为n维向量,n=0,1,2,…

2)输入n个训练样本,写成增广向量的形式,并参照Y进行规范化,

计算判别函数g(y)=a(k)’y,其中a(k)为第k次迭代的权向量。

3)按照公式修正权向量:

a(k+1)=a(k)若a(k)’y i>0;

a(k+1)=a(k)+c y i若a(k)’y i<=0;

其中c为矫正增量。若a(k)’y>0,则表明分类器对样本y i分类

正确,权向量保持不变;若a(k)’y i<=0,则表明分类器对样本

y i分类错误,修改权向量

4)令k=k+1,返回第二部,知道权向量对所有样本稳定不变,即对

所有样本正确分类为止。

2、流程图:

输入两类增广向量形式的训练样本

样本数为num,令flag=0,m=1

Y N

Y

N

N Y

N

N

令m =1,flag =0Y

k-均值算法:

1、步骤:

1)任选c 个初始化的聚类中心:,,…,,其中,上角标k 表示聚类

过程中的迭代次数,其初始值为0。

2)对于某一样本x j,若满足ρ(x j,)=min{ρ(x j,)},j =1,2,…,

n 则x j 属于第l 类。按照此最小距离原则将全部样本分配到c

个聚类中,就产生了新的聚类,i =1,2,…,n

3)计算重新分类后的聚类中心:)=,i =1,2,…,c 式中,为类

中包含的样本数。

4)若=(i =1,2,…,c),则结束;否则,k =k+1,转到第2)

步循环。

样本属于第1类,

a (k)’y i >0

a (k)’y i <=0flag =flag+1

a (k+1)=a (k)+c y i

m =m+1flag =flag+1a (k+1)=a (k)+c y i

m =m+1

a (k+1)=a (k)m =m+1m <=num

flag =0

输出结果!

2、流程图Y

N

N Y

选出c 个聚类中心,i

=1,2,…,c ,样本数为

sum ,m =0

求样本xi ,(i =1,2,…,m )

到c 个聚类中心的距离

D1,D2,…,Dc

Dl =min{D1,D2,…,Dc}则

xi 属于第l 类,m =m+1

m <=num 求出信的聚类中心,i

=1,2,…,c ,

=

=,m =1结果输出!

四、实验结果分析

感知器算法代码:

1、基于例2.4的感知器算法

%%感知器算法

X=[001;011;-10-1;-11-1];%%两类训练样本

w=[000];%%初始权向量

flag=1;%%循环的标记

num=0;%%统计迭代次数

%%开始迭代

while flag~=0

flag=0;

for i=1:4%%每次迭代循环四次

ftemp=X(i,:)*w';%%计算判别函数

if ftemp<=0%%判断分类结果

w=w+X(i,:);%%分类错误,进行改正

flag=1;%%下次迭代标记

end

end

num=num+1;%%统计迭代次数

end

w%%输出解向量w

num%%输出迭代的次数

k-均值算法代码:

1、基于例6.2的k-均值代码:

%%k-均值算法

%%初始样本值

x=[07;17;08;18;

28;19;29;39;

62;72;82;63;

73;83;93;74;

84;94;85;95];

%%选择2个初始聚类中心

old1=x(1,:);%%选取第1个样本作为第1个聚类w1中心

old2=x(2,:);%%选取第2个样本作为第2个聚类w2中心

flag=0;%%设定一个控制循环的标志

while(flag==0)

%%用初始聚类中心对数据进行分类

xsize=size(x);%%统计x的个数

i=1;

w1=zeros(1:2);%%生成w1为0矩阵

w2=zeros(1:2);%%生成w2为0矩阵

while(i<=20)

tempdis1=old1-x(i,:);

tempdis2=old2-x(i,:);

dis1=norm(tempdis1);

dis2=norm(tempdis2);

if(dis1<=dis2)

w1=cat(1,w1,x(i,:));%%归为w1类

else

w2=cat(1,w2,x(i,:));%%归为w2类

end

i=i+1;

end

%%重新计算聚类中心

w1size=length(w1)-1;%%统计分类后w1元素的个数w2size=length(w2)-1;%%统计分类后w2元素的个数new1=sum(w1)/w1size(1);%%重新计算聚类中心

new2=sum(w2)/w2size(1);%%重新计算聚类中心

%%判断前后两次聚类中心是否相等,如果不等,则进行迭代

if(new1==old1&new2==old2)

flag=1;

w1(1,:)=[]%%删除第1类中第1个0元素

w2(1,:)=[]%%删除第2类中第1个0元素else

old1=new1;

old2=new2;

end

end

相关文档
最新文档