資源簡介
模式識別里面的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語言課程設計之信息發布平臺
評論
共有 條評論