K menas聚類演算法C 實現

2021-08-28 08:06:55 字數 1934 閱讀 7091

基本介紹: k-means 演算法接受輸入量 k ;然後將n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個「中心物件」(引力中心)來進行計算的。 工作過程:   k-means 演算法的工作過程說明如下:首先從n個資料物件任意選擇 k 個物件作為初始聚類中心;而對於所剩下其它物件,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有物件的均值);不斷重複這一過程直到標準測度函式開始收斂為止。一般都採用均方差作為標準測度函式. k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。 (1) 從 n個資料物件任意選擇 k 個物件作為初始聚類中心;   (2) 迴圈(3)到(4)直到每個聚類不再發生變化為止   (3) 根據每個聚類物件的均值(中心物件),計算每個物件與這些中心物件的距離;並根據最小距離重新對相應物件進行劃分;   (4) 重新計算每個(有變化)聚類的均值(中心物件)   k-means 演算法接受輸入量 k ;然後將n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個「中心物件」(引力中心)來進行計算的。   k-means 演算法的工作過程說明如下:首先從n個資料物件任意選擇 k 個物件作為初始聚類中心;而對於所剩下其它物件,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有物件的均值);不斷重複這一過程直到標準測度函式開始收斂為止。一般都採用均方差作為標準測度函式. k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。   計算複雜度:   o(nkt), 其中t是迭代次數。   k-means演算法是一種基於樣本間相似性度量的間接聚類方法,屬於非監督學習方法。此演算法以k為引數,把n 個物件分為k個簇,以使簇內具有較高的相似度,而且簇間的相似度較低。相似度的計算根據乙個簇中物件的平均值(被看作簇的重心)來進行。此演算法首先隨機選擇k個物件,每個物件代表乙個聚類的質心。對於其餘的每乙個物件,根據該物件與各聚類質心之間的距離,把它分配到與之最相似的聚類中。然後,計算每個聚類的新質心。重複上述過程,直到準則函式會聚。k-means演算法是一種較典型的逐點修改迭代的動態聚類演算法,其要點是以誤差平方和為準則函式。逐點修改類中心:乙個象元樣本按某一原則,歸屬於某一組類後,就要重新計算這個組類的均值,並且以新的均值作為凝聚中心點進行下一次象元素聚類;逐批修改類中心:在全部象元樣本按某一組的類中心分類之後,再計算修改各類的均值,作為下一次分類的凝聚中心點。 

/*kmeans演算法實現(此處只考慮元組只有兩個屬性的情況)

*@file:k_means.cpp

*@author:cai0538

*@create:2011-12-10

*@last modified:2011-12-10

*/#include #include #include #include #define k 3

using namespace std;

//存放元組的屬性資訊

struct tuple;

//計算兩個元組間的歐幾裡距離

float getdistxy(tuple t1, tuple t2)

//根據質心,決定當前元組屬於哪個簇

int clusteroftuple(tuple means,tuple tuple)

} //cout<<"sum:"t.attr1 = meansx / num;

t.attr2 = meansy / num;

return t;

//cout<<"sum:"} //int k;

//cout<<"請輸入期望的簇的個數:"

//cin>>k;

//cout<::size_type ix=0;ix!=tuples.size();++ix)

cout<<"("《原文**:

k means聚類演算法C 實現

clustering 中文翻譯作 聚類 簡單地說就是把相似的東西分到一組,同 classification 分類 不同,對於乙個 classifier 通常需要你告訴它 這個東西被分為某某類 這樣一些例子,理想情況下,乙個 classifier 會從它得到的訓練集中進行 學習 從而具備對未知資料進行...

C均值聚類演算法(Python實現)

class pattern x 0 y 0def init self,x,y self.x x self.y y defdis a,b return a.x b.x a.x b.x a.y b.y a.y b.y 0.5eps 0.00001 maxn 1000050 inf 40000000000...

聚類演算法 近鄰聚類演算法

time is always too short for those who need it,but for those who love,it lasts forever.dracula untold 近鄰聚類法同樣是一種基於距離閾值的聚類演算法。coding utf 8 近鄰聚類演算法的pyth...