k-means 聚類算法

聚類算法

一、聚類算法簡介:

1、什麼是聚類?

將物理或抽象對象的集合分組成爲有類似的對象組成的多個簇的過程被稱爲聚類。由聚類所生成的簇是一組數據對象的集合,這些對象與同一個簇中的對象彼此相似,與其它簇中的對象相異。在許多應用中,可以將一個簇中的數據對象作爲一個整體來對待。

2.分類:

大體上,主要的聚類技術可以劃分爲如下幾類:

A.劃分方法

  給定一個個對象或元組的數據庫,一個劃分方法構建數據的k個劃分,每個劃分表示一個聚簇,並且k<=n。也就是說,它將數據劃分爲k個組,同時滿足如下要求:

  (i)每個組至少包含一個對象;

  (ii)每個對象必須屬於且只屬於一個組。

  給定要構建的劃分數目k,劃分方法首先創建一個初始劃分。然後採用一種迭代的重定位技術,嘗試通過對象在劃分間移動來改進劃分。一個好的劃分的一般準則是:在同一類中的對象之間儘可能“接近”或相關,而不同類中的對象之間儘可能“遠離”或不同。還有許多其它劃分質量評判準則。

  爲了達到全局最優,基於劃分的聚類會要求窮舉三所有可能的劃分。實際上,絕大多數應用採用了以下兩個比較流行的啓發式方法:

  (1)聚於質心的技術: k-平均方法

  k-平均算法以k爲參數,把n個對象分爲k個簇,以使簇內具有較高的相似度,而簇間的相似度較低。相似度的計算根據一個簇中對象的平均值(被看作簇的重心)來進行。

  k-平均算法的處理流程如下。首先,隨機地選擇k個對象,每個對象初始地代表一個簇的平均值或中心。對剩餘的每個對象,根據其與各個簇中心的距離,將它賦給最近的簇。然後重新計算每個簇的平均值。這個過程不斷重複,直到準則函數收斂。通常採用平方誤差準則,其定義如下:

  (2-1)

  這裏的E是數據庫中所有對象的平方誤差的總和,p是空間的點,表示給定的數據對象,mi是簇Ci的平均值(p 和mi都是多維的)。這個準則是使圖生成的結果簇儘可能的緊湊和獨立。

  例1 假設有一個分佈在空間中的對象集合,如圖2-1所示。給定k=3,即要求將這些對象聚類爲三個簇。根據k-平均算法,我們任意選擇三個對象作爲初始簇的中心,簇中心在圖中用“+”來標示。根據與簇中心的距離,每個對象分配給離其最近的一個簇。這樣分佈形成如圖a中所繪的圖形。

  這樣的分組會改變聚類的中心,也就是說,每個聚類的平均值會根據類中的對象重新計算。依據這些新的聚類中心,對象被重新分配到各個類中。這樣重新分配形成了圖b中描繪的輪廓。

以上的過程重複產生了圖c的情況。最後,當沒有對象重新分配發生時,處理過程結束,聚類的結果被返回。

圖2-1 基於K-means方法的一組對象的聚類

  這個算法嘗試找出是平方誤差函數值最小的K個劃分,當結果簇是密集的,而簇與簇之間區別明顯時,它的效果較好。對處理大數據集,該算法是相對可伸縮的和高效率的,因爲它的複雜程度是 O(nkt)。其中,n是所有對象的數目,k是簇的數目,t是迭代的數目。通常的,k<

  但是,k-平均方法只有在簇的平均值被定義的情況下使用。這可能不適應某些應用。例如涉及有分類屬性的數據。要求用戶必須事先給出k(要生成的簇的數目)可能算是該方法的一個缺點。K-平均方法不適合於發現非凸面形狀的簇,或者大小差別很大的簇,並且,它對於“噪聲”和孤立點數據很敏感,少量的該類數據能夠對平均值產生很大影響。

  (2)基於有代表性的對象的技術 k-中心點方法

  採用簇中位置最中心的對象,作爲參照點即中心點,這樣劃分依然是基於最小化所有對象與參照點之間的相異度之和的原則來執行的。這是k-中心點的基礎。它的基本策略是:首先爲每個簇隨意選擇一個代表對象;剩餘對象根據與代表對象的距離分配給最近的一個簇。然後反覆用非代表對象代替代表對象,以改進聚類的質量。聚類結果的質量用一個代價函數來估算,該函數度量對象與參照對象之間的平均相異度。爲了判定一個非代表對象是否是當前一個代表對象的好的替代,對於每一個非中心點對象p,下面的四種情況被考慮:

  ·第一種情況:p當前隸屬於中心點Oj。如果Oj被Orandom所代替作爲中心點,且p離一個Oi最近,i≠j,那麼p被重新分配給Oi.

  ·第二種情況:p當前隸屬於中心點Oj.如果Oj被Orandom代替作爲中心點,且p離Orandom最近,那麼p被重新分配給Orandom。

  ·第三種情況:p當前隸屬於中心點Oi,i≠j。如果Oj 被Orandom代替作爲一箇中心點,而p依然離Oi最近,那麼對象的隸屬不發生變化。

  ·第四種情況: p當前隸屬於中心點Oi,i≠j。如果Oj 被Orandom代替作爲一箇中心點,且p離Orandom最近,那麼p被重新分配給Orandom。

  “那個方法更健壯:k-平均或者k-中心點?”當存在“噪聲”和孤立點數據時,k-中心點比k-平均更健壯,這是因爲中心點不像平均值那樣容易受到極端數據影響。但是,k-中心點的執行代價比k-平均方法高.

  這些啓發式方法對中小規模的數據庫中發現球狀簇很實用。爲了對大規模的數據集進行聚類,以及處理複雜形狀的聚類,基於劃分的方法需要進一步的擴展。

B.層次的方法

  一個層次的聚類方法將數據對象組成一棵聚類的樹。根據層次分解是自底向上的還是自頂向下形成的,層次的聚類方法可以進一步分爲凝聚的(agglomerative)和分裂的(divisive)層次聚類。

  (1)凝聚的層次聚類:這種自底向上的策略首先將每個對象作爲單獨的一個簇,然後和並這些原子簇爲越來越大的簇,直到所有的對像都在一個簇中,或者達到某個終止條件。

 

  (2)分裂的層次聚類:這種自頂向下的策略與凝聚的層次聚類相反,它首先將所有的對象置於一個簇中。然後逐漸細分爲越來越小的簇,直到每個對象在單獨的一個簇中,或者達到一個終止條件,例如打到了某個希望的簇數目後者兩個簇之間的距離超過了某個閥值。

  例2 圖2-3描述了一個凝聚的層次聚類方法AGNES(Agglomerative NESting)和一個分裂的層次聚類方法DIANA(Divisive Analysis)在一個包含五個對象的數據集合{a,b,c,d,e}上的處理過程。最初,AGNES將每個對象作爲一個簇,然後這些簇根據某些準則一步步合併。例如,如果簇C1中的一個對象和簇 C2中的一個對象之間的距離使所有屬於不同簇的對象間歐式距離最小的,C1和C2可能被合併。其每個簇可以被簇中所有對象代表,兩個簇間的相似度由兩個不同簇中距離最近的數據點對的相似度來確定。聚類的合併過程反覆進行直到所有對象最終合併爲一個簇。

  在DIANA方法處理過程中,所有的對象都放在一個簇中。根據一些原則(如簇中最鄰近的對象的最大歐氏距離),將該簇分裂。簇的分裂過程反覆進行,直到最終每個新的簇只包含一個對象。

  層次聚類方法儘管簡單,但經常會遇到合併或分裂點選擇的困難。這樣的選擇是非常關鍵的,因爲一旦一組對象(合併或分裂)完成,它就不能被撤銷,下一步的處理將在新完成的簇上進行。這個嚴格規定是有用的,由於不用擔心組合數目的不同選擇,計算代價會比較小。但是,已做的處理不能被撤消,聚類之間也不能交換對象。如果在某一步沒有很好的選擇合併或分裂的決定,可能會導致低質量的聚類結果。而且,這種聚類不具有很好的可伸縮性。因爲合併或分裂的決定需要檢查和估算大量的對象或結果。

  改進層次方法的聚類質量的一個有希望的方向是將層次聚類和其他聚類技術集成。有兩種方法可以改進層次聚類的結果:

  (i) 在每層劃分中,仔細分析對象間的“聯接”,例如CURE和Chameleon中的做法。

(ii)綜合層次凝聚和迭代的重定位方法。首先用自底向上的層次算法,然後用迭代的重定位來改進結果。例如BIRCH中的方法。

C.基於密度的方法

  絕大多數劃分方法給予對象之間的距離進行聚類。這樣的方法只能發現球狀的簇,而在發現任意形狀的簇上遇到了困難。隨之提出了基於密度的聚類方法,它是將簇看作是數據空間中被低密度區域分割開的高密度區域。其主要思想是:只要鄰近區域的密度(對象或數據點的數目)超出了某個閥值,就繼續聚類。也就是說,對給定類中的每個數據點,在一個給定範圍的區域中必須至少某個數目的點。這樣的方法可以用來過濾“噪聲”孤立點數據,發現任意形狀的簇。

  DBSCAN是一個有代表性的基於密度的方法,它根據一個密度閥值來控制簇的增長。

  OPTICS是另一個基於密度的方法,它爲自動的和交互的聚類分析計算一個聚類順序。

D、基於網格的方法

  基於網格的方法把對象空間量化爲有限數目的單元,形成一個網格結構。所有的聚類操作都在這個網格結構(即量化的空間)上進行。這種方法的主要優點是處理速度快,其處理時間獨立與數據對象的數目,只與量化空間中的每一維的單元數目有關。

  基於網格方法的有代表性的例子:STING,它利用存儲在網格單元中的統計信息;WaveCluster,它利用一種小波變換方法來聚類對象;CLIQUE,它是在高維數據空間中基於網格和密度的聚類方法。

E、基於模型的方法

  基於模型的方法爲每一個簇假定一個模型,尋找數據對給定模型的最佳擬合。一個基於模型的算法可能通過構建反映數據點空間分佈密度函數來定位聚類。它也基於標準的統計數字自動決定聚類的數目,考慮“噪聲”數據或孤立點,從而產生健壯的聚類方法。這樣的方法經常基於這樣的假設:數據是根據潛在的概率分佈生成的。

  基於模型的方法主要有兩類:統計學方法和神經網絡方法。

  一些聚類算法集成了多種聚類方法的思想,所以有時將某個給定的算法劃分爲屬於某些聚類方法是困難的。此外,某些應用可能有特定的聚類標準,要求綜合多個聚類技術。

3、對比:

算法

算法效率

適合的數據類型

發現的聚類類型

對髒數據或異常數據的敏感性

對數據輸入順序的敏感性

BIRCH

數值

凸形或球形 

不敏感

不太敏感

DBSCAN

一般

數值

任意形狀

敏感

敏感

CURE

較高

數值

任意形狀

不敏感 

不太敏感

K-poto

一般

數值和符號

凸形或球形

敏感 

一般

CLARANS

較低

數值

凸形或球形

不敏感

非常敏感

CUQUE

較低

數值

凸形或球形

一般

不敏感

  

二、k-means算法:

1、簡介:

此算法以K爲參數,把N個對象分爲K個簇,以使簇內具有較高的相似度,而且簇間的相似度較低。相似度的計算根據一個簇中對象的平均值來進行。

此算法的工作過程爲:首先從N個數據對象任意選擇K個對象作爲初始聚類中心;而對於所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重複這一過程直到標準測度函數開始收斂爲止。

一般都採用均方差作爲標準測度函數.K個聚類具有以下特點:各聚類本身儘可能的緊湊,而各聚類之間儘可能的分開。

K-MEANS算法的具體流程如下:
1)從N個數據對象任意選擇K個對象作爲初始聚類中心;
2
)根據每個聚類對象的均值(中心對象),計算每個對象與這些中心對象的距離;並根據最小距離重新對相應對象進行劃分;
3
)重新計算每個(有變化)聚類的均值(中心對象)
4
)重複2/3步直到滿足既定的條件,算法結束。

 

k-means算法流程圖

2、僞碼算法:

 

發佈了34 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章