隨機生成50個2維向量,將他們聚成3個簇,然後在平面上表示出來
//kmeans,h
#pragma once
#include
#include
using namespace std;
struct point
;struct vect
;struct cluster
;class
kmeans
void
qcenter()
;//求質心
void
caldistance()
;//求距離
void
mindistance()
;//某點距k個質心的最短距離
void
newcluster()
;//新簇
void
print()
;//顯示各個簇內包含的向量
void
printscreen()
;//將點顯示到螢幕上
};
kmeans.cpp
//
#pragma once
#include "kmeans.h"
#include
#include
#include
kmeans:
:kmeans
(int p, int q)
//生成k個質心
cluster center;
//質心
cout <<
"初始狀態隨機選擇的"
<< k <<
"個質心為"
<< endl;
srand
((unsigned)
time
(null))
;for
(int i =
0; i < k; i++)}
void kmeans:
:newcluster()
void kmeans:
:caldistance()
for(int j=
0;j}void kmeans:
:mindistance()
int index;
for(int i =
0; i < n; i++)}
cluster[index]
.pointindex.
push_back
(i);}}
void kmeans:
:qcenter()
cluster[i]
.mycenter.x = a /
(cluster[i]
.pointindex.
size()
);cluster[i]
.mycenter.y = b /
(cluster[i]
.pointindex.
size()
);}}
void kmeans:
:print()
}}void kmeans:
:printscreen()
}}for(int m =
0; m < k; m++)}
for(int i =
0; i <
100; i++
) cout << endl;
}}
test.cpp
//
#pragma once
#include "kmeans.h"
#include
#include
#include
using namespace std;
int main()
cout <<
"經過20次迭代……"
<< endl;
a.print()
; a.
printscreen()
;}
執行結果
kmeans聚類 c 實現
num class 聚類數 num data 資料個數 dimension 資料維度 每個資料是多少維的 data 待聚類資料指標 cluster center 聚類中心指標 max error 前後兩次誤差降低到此值迭代終止 max iters 最大迭代次數 1 隨機初始化聚類中心 2 根據聚類中...
k means聚類演算法C 實現
clustering 中文翻譯作 聚類 簡單地說就是把相似的東西分到一組,同 classification 分類 不同,對於乙個 classifier 通常需要你告訴它 這個東西被分為某某類 這樣一些例子,理想情況下,乙個 classifier 會從它得到的訓練集中進行 學習 從而具備對未知資料進行...
kmeans聚類的實現
kmeans演算法流程 從資料中隨機抽取k個點作為初始聚類的中心,由這個中心代表各個聚類 計算資料中所有的點到這k個點的距離,將點歸到離其最近的聚類裡 調整聚類中心,即將聚類的中心移動到聚類的幾何中心 即平均值 處,也就是k means中的mean的含義 重複第2步直到聚類的中心不再移動,此時演算法...