最近做了聚類實驗,就寫了下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), (7, 3)
cluster-3: (2, 5), (1, 2), (1, 3)
clementine軟體執行結果:
可以看出與軟體執行結果相比**是正確的.
code:
#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 實現
clustering 中文翻譯作 聚類 簡單地說就是把相似的東西分到一組,同 classification 分類 不同,對於乙個 classifier 通常需要你告訴它 這個東西被分為某某類 這樣一些例子,理想情況下,乙個 classifier 會從它得到的訓練集中進行 學習 從而具備對未知資料進行...
kmeans聚類 c 實現
num class 聚類數 num data 資料個數 dimension 資料維度 每個資料是多少維的 data 待聚類資料指標 cluster center 聚類中心指標 max error 前後兩次誤差降低到此值迭代終止 max iters 最大迭代次數 1 隨機初始化聚類中心 2 根據聚類中...
C 實現簡單的K means聚類演算法
namespace k means public int getprocess endregion region 根據點到質心的距離,將點放到不同的組中 for int i 0 i num i if j 0 else int groupknum groupnum index resultp inde...