下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <stdio.h> #include <math.h>#define TRUE 1#define FALSE 0 int N;/数据个数int K;/集合个数int * CenterIndex;/初始化质心数组的索引double * Center;/质心集合double * Cente
2、rCopy;/质心集合副本double * AllData;/数据集合double * Cluster;/簇的集合int * Top;/集合中元素的个数,也会用作栈处理/随机生成k个数x(0<=x<=n-1)作为起始的质心集合void CreateRandomArray(int n, int k,int * center) int i=0; int j=0; srand( (unsigned)time( NULL ) );
3、60; for( i=0;i<k;+i)/随机生成k个数 int a=rand()%n; /判重 for(j=0;j<i;j+)
4、 if(centerj=a)/重复 break;
5、0; if(j>=i)/如果不重复,加入 centeri=a; else
6、 i-; /如果重复,本次重新随机生成 /返回距离最小的质心的序号i
7、nt GetIndex(double value,double * center) int i=0; int index=i;/最小的质心序号 double min=fabs(value-centeri);/距质心最小距离 for(i=0;i<K;i+) if(fabs(value-centeri)<min)/如果比当前
8、距离还小,更新最小的质心序号和距离值 index=i; min=fabs(value-centeri);
9、 return index;/拷贝质心数组到副本void CopyCenter() int i=0; for(i=0;i<K;i+) CenterCopyi=Centeri; /初始化质心,随机生成法void InitCenter() int i=0;
10、CreateRandomArray(N,K,CenterIndex);/产生随机的K个<N的不同的序列 for(i=0;i<K;i+) Centeri=AllDataCenterIndexi;/将对应数据赋值给质心数组 CopyCenter();/拷贝到质心副本/加入一个数据到一个Clusterindex集合void AddToCluster(int i
11、ndex,double value) ClusterindexTopindex+=value;/这里同进栈操作/重新计算簇集合void UpdateCluster() int i=0; int tindex; /将所有的集合清空,即将TOP置0 for(i=0;i<K;i+)
12、160; Topi=0; for(i=0;i<N;i+) tindex=GetIndex(AllDatai,Center);/得到与当前数据最小的质心索引 AddToCluster(tindex,AllDatai); &
13、#160; /加入到相应的集合中 /重新计算质心集合,对每一簇集合中的元素加总求平均即可void UpdateCenter() int i=0; int j=0; double sum=0; for(i=0;i<K;i+) sum=0;
14、0; /计算簇i的元素和 for(j=0;j<Topi;j+) sum+=Clusterij;
15、60; if(Topi>0)/如果该簇元素不为空 Centeri=sum/Topi;/求其平均值 /判断2数组元素是否相等int IsEqual(double * center1
16、,double * center2) int i; for(i=0;i<K;i+) if(fabs(center1i!=center2i) ret
17、urn FALSE; return TRUE;/打印聚合结果void Print() int i,j; printf("- "); for(i=0;i<K;i+)
18、; printf("第%d组: 质心(%f) ",i,Centeri); for(j=0;j<Topi;j+) printf("%f ",Clusterij);
19、0; /初始化聚类的各种数据void InitData() int i=0; int a; printf("输入数据个数: ");
20、160; scanf("%d",&N); printf("输入簇个数: "); scanf("%d",&K); if(K>N)
21、60; exit(0); Center=(double *)malloc(sizeof(double)*K);/为质心集合申请空间 CenterIndex=(int *)malloc(sizeof(int)*K);/为质心集合索引申请空间 CenterCopy=(double *)malloc(sizeof(double)*K);/为质心集合副本申请空间 Top=(int *)malloc(sizeof(int)*
22、K); AllData=(double *)malloc(sizeof(double)*N);/为数据集合申请空间 Cluster=(double *)malloc(sizeof(double *)*K);/为簇集合申请空间 /初始化K个簇集合 for(i=0;i<K;i+) Clusteri=(double *)
23、malloc(sizeof(double)*N); Topi=0; printf("输入%d数据: ",N); for(i=0;i<N;i+) scanf("%d",&(a);
24、60; AllDatai=a; InitCenter();/初始化质心集合 UpdateCluster();/初始化K个簇集合 /*算法描述:K均值算法: 给定类的个数K,将N个对象分到K个类中去, 使得类内对象之间的相似性最大,而类之间的相似性最小。*/main() int Flag=1;/迭代标志,若为false,则迭代结束 int i=0; InitData();/初始化数据 while(Flag)/开始迭代
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 病例模板制作课件
- 陕西省西安市第四中学八年级物理第7章测试卷及答案
- 2027届浙江省宁波市东恩中学中考物理模拟试题含解析
- 玻璃模块设计模板课件
- 2027届广东省汕头市十四中学中考物理五模试卷含解析
- 2027届云南省泸西县中考物理最后一模试卷含解析
- 《脊柱骨髓瘤》课件
- 《毒作用机制》课件
- 玻璃胶工厂介绍课件
- 颈椎病康复疗法的介绍
- J08J110 居住建筑节能构造(DBJT02-53-2008)
- 人教版数学六年级上册第一、二单元测试卷(含解析)
- 2025贵州茅台酒厂集团招聘管理人员13人笔试历年备考题库附带答案详解试卷2套
- TSGT5002-2025电梯维护保养规则
- z08海员基本安全培训题库及答案解析
- 《汉江临泛》课件
- 摩托置换合同协议书模板
- 浦东新区2024-2025学年六年级上学期期中考试数学试卷及答案(上海新教材)
- 中职高教版(2023)语文职业模块-第五单元:走近大国工匠(二)学习工匠事迹 领略工匠风采【课件】
- 艾媒咨询|赵一鸣零食店消费行为洞察及行业趋势报告2024
- JB∕T 7946.4-2017 铸造铝合金金相 第4部分:铸造铝铜合金晶粒度
评论
0/150
提交评论