资源简介
模式识别里面的K均值算法的C语言实现 比较简单。
代码片段和文件信息
#include
#include
void main()
{
int X[20*2]={00100111211222326676
86677787977888988999}; //定义样本
float Z[4]={0010}; //定义初始聚类中心
float ZTemp[4]; //表示迭代后计算出的聚类中心,初始值设为0
int ID1[20]={0}; //用来装第一类的样本编号
int ID2[20]={0}; //用来装第二类编号
float Distance[2]={0.0}; //表示样本到聚类中心距离
int in;
int Num1Num2;//表示各类样本数
n=0;
while(n<10) //迭代次数不超过10次
{
Num1=0; Num2=0;
ZTemp[0]=0.0; ZTemp[1]=0.0; ZTemp[2]=0.0; ZTemp[3]=0.0;
for(i=0;i<20;i++)//将样本按最小距离原则分配给两类
{
Distance[0]=(X[2*i]-Z[0])*(X[2*i]-Z[0])+(X[2*i+1]-Z[1])*(X[2*i+1]-Z[1]);
Distance[1]=(X[2*i]-Z[2])*(X[2*i]-Z[2])+(X[2*i+1]-Z[3])*(X[2*i+1]-Z[3]);
if(Distance[0] ID1[Num1++]=i;
else
ID2[Num2++]=i;
}
for(i=0;i {
ZTemp[0]+=X[2*ID1[i]];
ZTemp[1]+=X[2*ID1[i]+1];
}
ZTemp[0]/=Num1;ZTemp[1]/=Num1;
for(i=0;i {
ZTemp[2]+=X[2*ID2[i]];
ZTemp[3]+=X[2*ID2[i]+1];
}
ZTemp[2]/=Num2;ZTemp[3]/=Num2;
if(ZTemp[0]==Z[0]&&ZTemp[1]==Z[1]&&ZTemp[2]==Z[2]&&ZTemp[3]==Z[3]) //判断迭代是否终止
break;
for(i=0;i<4;i++) //给聚类中心重新赋值
Z[i]=ZTemp[i];
n++;
}
printf(“\n迭代次数为:%d\n“n);
printf(“\n第一类聚类中心为:(%f%f)\n“Z[0]Z[1]);
printf(“第一类样本为:“);
for(i=0;i printf(“X%d(%d%d)\t“ID1[i]+1X[2*ID1[i]]X[2*ID1[i]+1]);
printf(“\n\n第二类聚类中心为:(%f%f)\n“Z[2]Z[3]);
printf(“第二类样本为:“);
for(i=0;i printf(“X%d(%d%d)\t“ID2[i]+1X[2*ID2[i]]X[2*ID2[i]+1]);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4282 2013-11-20 18:17 KMeans\KMeans.dsp
文件 537 2013-11-20 18:16 KMeans\KMeans.dsw
文件 50176 2013-11-20 23:33 KMeans\KMeans.ncb
文件 48640 2013-11-20 23:33 KMeans\KMeans.opt
文件 1298 2013-11-20 23:33 KMeans\KMeans.plg
文件 1745 2013-11-20 23:33 KMeans\main.cpp
目录 0 2013-11-20 23:33 KMeans
----------- --------- ---------- ----- ----
106678 7
- 上一篇:EGE版贪吃蛇
- 下一篇:大学C语言课程设计之信息发布平台
评论
共有 条评论