模式识别大作业_第1页
模式识别大作业_第2页
模式识别大作业_第3页
模式识别大作业_第4页
模式识别大作业_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、word Iris数据聚类分析 -c均值和模糊c均值1 问题描述Iris数据集包含150个数据,共有3类,每一类有50个数据,其每个数据有四个维度,每个维度代表鸢尾花特征萼片,花瓣的长度中的一个,其三类数据名称分别setosa,versicolor,virginica,这些就是 Iris数据集的根本特征。现在使用c均值和模糊c均值的方法解决其聚类分析,并且计算比拟两种方法得到的分类结果的正确率。2 算法介绍1. c-均值算法 C均值算法属于聚类技术中一种根本的划分方法,具有简单、快速的优点。其根本思想是选取c个数据对象作为初始聚类中心,通过迭代把数据对象划分到不同的簇中,使簇内部对象之间的相似

2、度很大,而簇之间对象的相似度很小。其主要思想:(1)计算数据对象两两之间的距离;(2)找出距离最近的两个数据对象,形成一个数据对象集合A1,并将它们从总的数据集合U中删除;(3)计算A1中每一个数据对象与数据对象集合U中每一个样本的距离,找出在U中与A1中最近的数据对象,将它并入集合A1并从U中删除,直到A1中的数据对象个数到达一定阈值;(4)再从U中找到样本两两间距离最近的两个数据对象构成A2,重复上面的过程,直到形成k个对象集合;(5)最后对k个对象集合分别进行算术平均,形成k个初始聚类中心。算法步骤:1.初始化:随机选择k个样本点,并将其视为各聚类的初始中心;2.按照最小距离法那么逐个将

3、样本x划分到以聚类中心为代表的k个类中;3.计算聚类准那么函数J,重新计算k个类的聚类中心;4.重复step2和3知道聚类中心无改变或目标函数J不减小。2.模糊c-均值 模糊C均值算法就是,在C均值算法中,把硬分类变为模糊分类。设是第i个样本属于第j类的隶属度,利用隶属度定义的准那么函数为其中,b1是一个可以控制聚类结果的模糊程度的常数。进一步,要求一个样本属于各个聚类的隶属度之和为1,即 i=1,2,N利用拉格朗日乘数法来求解极小值。令目标函数为其中,i=1,2,N为拉格朗日乘子。分别求L对、和的梯度或偏导,并置为0,可得必要条件: j=1,2,C i=1,2,N; j=1,2,,C模糊c-

4、均值算法:1:设定聚类数目C、 参数b和一个适当的小数0, 通常取1b5。2:设置初始模糊分类矩阵, 令s=0。 3:计算的聚类中心j=1, 2, , C。4:按下面的方法更新为: a.计算和, 其中 i=1,2,,Nb.计算的新隶属度。如果为空集,计算隶属度;否那么,并取Step5:选取一个适当的矩阵范数,如果,那么停止迭代,否那么s=s+1,返回Step3。当模糊C均值算法收敛时,就得到了各类的聚类中心和各个样本属于各类的隶属度,也就完成了模糊聚类。3 matlab程序代码 其编写源程序的方法使用matlab程序1.c-均值代码clear all%第一步:读取数据data=load(C:D

5、ocuments and SettingsAdministratordata.txt);%原始数据存放地址%第二步:随机选出三个初始中心 a1=round(150*rand(1,3); while (length(unique(a1)epsnong)%确定精度要求 %求出距离矩阵 for j=1:3 for i=1:150 distance(j,i)=norm(ju_zhen(j,:,die_dai)-data(i,:); end end %第die_dai次选出分类 for i=1:150 mm(:,i)=sort(distance(:,i); n(1,i)=find(mm(1,i)=dis

6、tance(:,i); end k_1=1;k_2=1;k_3=1; for i=1:150 if n(1,i)=1 k_1=k_1+1; end if n(1,i)=2 k_2=k_2+1; end if n(1,i)=3 k_3=k_3+1; end end %第die_dai次聚类中心 die_dai=die_dai+1; jun_zhi_1(1,:,die_dai)=mean(lei_1); jun_zhi_2(1,:,die_dai)=mean(lei_2); jun_zhi_3(1,:,die_dai)=mean(lei_3); ju_zhen(:,:,die_dai)=jun_z

7、hi_1(1,:,die_dai);jun_zhi_2(1,:,die_dai);jun_zhi_3(1,:,die_dai); end%第五步:定位原先矩阵的分类编号 k=1; aa=data; for j=1:length(lei_1(:,1) for i=1:150 if lei_1(j,:)=aa(i,:) lei_1_num(1,k)=i;%显示第1类的样本编号 k=k+1; aa(i,:)=zeros(size(aa(i,:); break; end end end lei_1_num=unique(lei_1_num); k=1; for j=1:length(lei_2(:,1

8、) for i=1:150 if lei_2(j,:)=aa(i,:) lei_2_num(1,k)=i;%显示第2类的样本编号 k=k+1; aa(i,:)=zeros(size(aa(i,:); end end end lei_2_num=unique(lei_2_num); k=1; for j=1:length(lei_3(:,1) for i=1:150 if lei_3(j,:)=aa(i,:) lei_3_num(1,k)=i;%显示第3类的样本编号 k=k+1; aa(i,:)=zeros(size(aa(i,:); break; end end end lei_3_num=u

9、nique(lei_3_num); clear aa;clear mm;%第六步:输出分好类的样本编号 lei_1_num lei_2_num lei_3_num%第七步:计算正确率 p=zeros(3,3); for i=1:length(lei_1_num) if (lei_1_num(1,i)=101)&(lei_1_num(1,i)=51)&(lei_1_num(1,i)=101)&(lei_2_num(1,i)=51)&(lei_2_num(1,i)=101)&(lei_3_num(1,i)=51)&(lei_3_num(1,i)=100) p(3,2)=p(3,2)+1; else

10、 p(3,1)=p(3,1)+1; end end end tr=0; for i=1:3 tr=tr+max(p(i,:); end right_percent=tr/150; clear i;clear j;clear k;clear tr; right_percent2. 模糊c-均值算法代码 clear all%第一步:读取数据 data=load(C:Documents and SettingsAdministratorMy Documentsdata.txt);%原始数据存放地址 %第二步:随机选出三个初始中心 N=150;%总聚类数目 a1=round(N*rand(1,3);

11、while (length(unique(a1)length(a1)|find(a1=0) %保证随机取出来的三个数没有重复的,并且不会出现0 a1=round(N*rand(1,3); end for i=1:3 for j=(i+1):3 if norm(data(a1(1,j),:)-data(a1(1,i),:)epsnong) for i=1:3 for j=1:N mu_fen_zi(i,j,die_dai+1)=(norm(data(j,:)-m(i,:,die_dai)(-2)(1/(b-1); end end die_dai=die_dai+1; for j=1:N mu_f

12、en_mu(1,j,die_dai)=sum(mu_fen_zi(:,j,die_dai); end for i=1:3 for j=1:N muu(i,j)=mu_fen_zi(i,j,die_dai)/mu_fen_mu(1,j,die_dai);%表示第i个中心对第j个样本的隶属度函数 end end for i=1:3 for j=1:N mm_zi(j,:,i)=(muu(i,j)b)*data(j,:); mm_mu(i,j)=muu(i,j)b; end end for i=1:3 mmm_zi(1,:,i)=sum(mm_zi(:,:,i); end mmm_mu=sum(mm

13、_mu); for i=1:3 m(i,:,die_dai)=mmm_zi(1,:,i)/mmm_mu(1,i);%聚类中心矩阵,第i行表示第i类聚类中心 end for i=1:3 for j=1:N J(i,j,die_dai)=muu(i,j)b*norm(data(j,:)-m(i,:,die_dai)2; end end Jf(1,die_dai)=sum(sum(J(:,:,die_dai); end%第五步:进行分类 for j=1:3 for i=1:N distance(j,i)=norm(m(j,:,die_dai)-data(i,:);%计算距离矩阵 end end fo

14、r i=1:N mm(:,i)=sort(distance(:,i); n(1,i)=find(mm(1,i)=distance(:,i);%选择出距离第i个样本较近的那个中心 end k_1=1;k_2=1;k_3=1; for i=1:N %开始归类 if n(1,i)=1 lei_1(k_1,:)=data(i,:); k_1=k_1+1; end if n(1,i)=2 lei_2(k_2,:)=data(i,:); k_2=k_2+1; end if n(1,i)=3 lei_3(k_3,:)=data(i,:); k_3=k_3+1; end end%第六步:定位原先矩阵的分类编号

15、 k=1; aa=data; for j=1:length(lei_1(:,1) for i=1:N if lei_1(j,:)=aa(i,:) lei_1_num(1,k)=i;%显示第1类的样本编号 k=k+1; aa(i,:)=zeros(size(aa(i,:); break; end end end lei_1_num=unique(lei_1_num); k=1; for j=1:length(lei_2(:,1) for i=1:N if lei_2(j,:)=aa(i,:) lei_2_num(1,k)=i;%显示第2类的样本编号 k=k+1; aa(i,:)=zeros(si

16、ze(aa(i,:); end end end lei_2_num=unique(lei_2_num); k=1; for j=1:length(lei_3(:,1) for i=1:N if lei_3(j,:)=aa(i,:) lei_3_num(1,k)=i;%显示第3类的样本编号 k=k+1; aa(i,:)=zeros(size(aa(i,:); break; end end end lei_3_num=unique(lei_3_num); clear aa%第七步:输出分好类的样本编号 lei_1_num lei_2_num lei_3_num%第八步:计算正确率 p=zeros(3,3); for i=1:length(lei_1_num) if (lei_1_num(1,i)=101)&(lei_1_num(1,i)=51)&(lei_1_num(1,i)=101)&(lei_2_num(1,i)=51)&(lei_2_num(1,i)=101)&(lei_3_num(1,i)=51)&(lei_3_num(1,i)=100) p(3,2)=p(3,2)+1; else p(3,1)=p(3,1)+1; end end end tr=0; for i=1:3 tr=tr+max(p(i,:); end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论