#include
#include
#include
#include
#include
#define n 11
#define k 3
typedef struct
point;
int center[n]; /// 判斷每個點屬於哪個簇
point point[n] = ,,,
,,,,
,,,};
point mean[k]; /// 儲存每個簇的中心點
float getdistance(point point1, point point2)
/// 計算每個簇的中心點
void getmean(int center[n])
}tep.x /= count;
tep.y /= count;
mean[i] = tep;
}for(i = 0; i < k; ++i)
}/// 計算平方誤差函式
float gete()}}
return sum;
}/// 把n個點聚類
void cluster()
for(q = 0; q < k; ++q)
}printf("( %.0f, %.0f )\t in cluster-%d\n", point[i].x, point[i].y, center[i] + 1);
}printf("-----------------------------\n");
}int main()
printf("-----------------------------\n");
/*可以選擇當前時間為隨機數
srand((unsigned int)time(null));
for(i = 0; i < k; ++i)
*/mean[0].x = point[0].x; /// 初始化k個中心點
mean[0].y = point[0].y;
mean[1].x = point[3].x;
mean[1].y = point[3].y;
mean[2].x = point[6].x;
mean[2].y = point[6].y;
cluster(); /// 第一次根據預設的k個點進行聚類
temp1 = gete(); /// 第一次平方誤差
n++; /// n計算形成最終的簇用了多少次
printf("the e1 is: %f\n\n", temp1);
getmean(center);
cluster();
temp2 = gete(); /// 根據簇形成新的中心點,並計算出平方誤差
n++;
printf("the e2 is: %f\n\n", temp2);
while(fabs(temp2 - temp1) != 0) /// 比較兩次平方誤差 判斷是否相等,不相等繼續迭代
printf("the total number of cluster is: %d\n\n", n); /// 統計出迭代次數
system("pause");
return 0;
}程式執行結果:
K Means聚類演算法的實現(C語言)
最近做了聚類實驗,就寫了下k means演算法,c語言實現.實驗給出的資料集比較小,總共有11個 2,10 2,5 8,4 5,8 7,5 6,4 1,2 4,9 7,3 1,3 3,9 執行的聚類結果 cluster 1 2,10 5,8 4,9 3,9 cluster 2 8,4 7,5 6,4...
K Means聚類演算法
k means聚類演算法 intergret kmeans演算法的基本思想是初始隨機給定k個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心,從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。k means聚類演算法主要分為三個步驟 1 第一步是為待聚類...
聚類演算法 K means
演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個 中心物件 引力中心 來進行計算的。k means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演...