C 實現Kmeans扁平聚類

2021-10-06 16:51:00 字數 2215 閱讀 4154

隨機生成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步直到聚類的中心不再移動,此時演算法...