• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: k均值  

资源简介

模式识别里面的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


评论

共有 条评论