模式识别实习报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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