k means聚類演算法 c語言

2021-10-13 05:38:25 字數 1747 閱讀 4060

#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演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演...