1. 程式人生 > >Kmeans、Kmeans++、Birch和KNN四種聚類演算法對二維座標點的聚類分析對比實驗

Kmeans、Kmeans++、Birch和KNN四種聚類演算法對二維座標點的聚類分析對比實驗

0 寫在前面(資料集和原始碼)

本文章涉及到的資料集合所有程式碼均上傳在此處:https://download.csdn.net/download/zhouzhuo_csuft/10494273;點選此處直接開啟連結;一共有四個程式碼檔案,分別是Kmeans、Kmeans++、Birch和KNN演算法,四個演算法對同一個資料集聚類分析進行對比試驗。本程式碼是本人自己書寫,全部可用!)


1 引言

近年來,機器學習已成為計算機前沿中火熱的研究點之一。我國政府也將機器學習納入了國家級戰略。目前,機器學習已廣泛用於各種資料探勘、模式識別、語音識別及影象處理等各領域。本文以機器學習中四個經典的聚類演算法進行對比介紹和對比實驗,得出四個演算法對相同實驗資料集的聚類效果。

2聚類演算法

聚類在學術界並沒有一個確切的定義,此處給出1974Everitt對聚類的定義:一個類簇內的實體是相似的,不同類簇的實體是不相似的;一個類簇是測試空間中點的會聚,同一類簇的任意兩個點間的距離小於不同類簇的任意兩個點間的距離[1];類簇可以描述為一個包含密度相對較高的點集的多維空間中的連通區域,它們藉助包含密度相對較低的點集的區域與其他區域(類簇)相分離。

簡單地說,聚類是根據其自身特徵將資料集進行劃分成若干類的過程,劃分的結果是相同類哈哈內資料相似度儘可能大、不同類間資料相似度儘可能小,從而發現數據集的內在結構。

聚類在不同應用領域有不同的特殊要求,聚類演算法的典型效能要求有以下幾個方面:

(1)伸縮性

(2)相容性

(3)有效處理噪聲資料

(4)能處理基於約束的聚類

5)可解釋性和可用性

典型的聚類過程主要包括資料(樣本)準備、特徵選擇和特徵提取、相似度計算、聚類、對聚類結果進行有效性評估[1]

聚類過程:

(1)資料準備:包括特徵標準化和降維。

(2)特徵選擇,從最初的特徵中選取最有效的特徵,並將其儲存於向量中。

(3)特徵提取:通過對所選擇的特徵進行轉換形成新的突出特徵。

(4)聚類:首先選擇合適特徵型別的某種離函式 ( 或構造新的距離函式 ) 進行接近程度的度量,而後執行聚類或分組。 .

(5)聚類結果評估 : 是指對聚類結果進行評估 . 評估主要有 3 種 : 外部有效性評估、內部有效性評估和相關性測試評估。

3 典型聚類及其變種演算法介紹

3.1 K-Means聚類

3.2.1 K-Means聚類介紹

1967 年 ,MacQueen 首次提出了 K 均值聚類演算法 (K-Means 演算法 )。 迄今為止 , 很多聚類任務都選擇該經典演算法[2]。該演算法的核心思想是找出 k個聚類中心c1 ,c2 ,…,ck使得每一個數據點 xi 和與其最近的聚類中心 cv 的平方距離和被最小化 ( 該平方距離和被稱為偏差 D)。

3.1.2 K-means聚類演算法步驟

(1)初始化,隨機指定 K 個聚類中心 (c1 ,c2 ,…,ck );

(2)分配 xi, 對每一個樣本 xi,找到離它最近的聚類中心 cv,並將其分配到 cv 所標明類;

(3)修正 c w,將每一個 cw 移動到其標明的類的中心;

(4)計算偏差 ;

(5)判斷D是否收斂,如果D收斂,則return(c1,c2,……,ck),並終止本演算法;否則返回步驟2。

3.1.3 K-means 演算法的優點與不足

優點: 能對大型資料集進行高效分類, 其計算複雜性為 O(tkmn), 其中 ,t 為迭代次數,k為聚類數,m 為特徵屬性數,n 為待分類的物件數,通常k,m,t<<n[3]. 在對大型資料集聚類時,K-means 演算法比層次聚類演算法快得多。

不足: 通常會在獲得一個區域性最優值時終止;僅適合對數值型資料聚類;只適用於聚類。

3.2 K-Means++演算法

3.2.1 K-Means++簡介

由於 K-means 演算法的分類結果會受到初始點的選取而有所區別,因此後來有人針對這個問題對K-Means演算法進行改進,於是產生了 K-means++演算法 。K-Means++演算法只是對初始點的選擇有改進而已,其他步驟都一樣。初始質心選取的基本思路就是,初始的聚類中心之間的相互距離要儘可能的遠。

3.2.2  K-Means++演算法步驟[4]

(1)從資料集中隨機選取一個樣本作為初始聚類中心c1;

(2)首先計算每個樣本與當前已有聚類中心之間的最短距離(即最近的一個聚類中心的距離),用D(x)表示;接著計算每個樣本被選為下一個聚類中心的概率  。按照輪盤法選出下一個聚類中心;

(3)重複第2步,直到選擇出共K個聚類中心;

(4)後面與K-Means聚類演算法的2-4步相同。

3.3 BIRCH聚類演算法

3.3.1 BIRCH聚類簡介

 BIRCH的全稱是利用層次方法的平衡迭代規約和聚類(Balanced Iterative Reducing and Clustering UsingHierarchies),它利用了一個類似於B+樹的聚類特徵樹(ClusteringFeature Tree,簡稱CF Tree)快速的聚類。如圖1所示,這顆樹的每一個節點是由若干個聚類特徵(Clustering Feature,簡稱CF)組成。每個節點包括葉子節點都有若干個CF,而內部節點的CF有指向孩子節點的指標,所有的葉子節點用一個雙向連結串列連結起來。

不同於K-Means演算法,BIRCH演算法可以不用輸入類別數K值。如果不輸入K值,則最後的CF元組的組數即為最終的K,否則會按照輸入的K值對CF元組按距離大小進行合併。一般來說,BIRCH演算法適用於樣本量較大的情況,除了聚類還可以額外做一些異常點檢測和資料初步按類別規約的預處理。


圖 1 CF Tree模型

3.3.2 BIRCH聚類演算法步驟[5]

(1)掃描所有資料,建立初始化的CF樹,把稠密資料分成簇,稀疏資料作為孤立點對待;

(2)這個階段是可選的,階段(3)的全域性或半全域性聚類演算法有著輸入範圍的要求,以達到速度與質量的要求,所以此階段在階段步驟(1)的基礎上,建立一個更小的CF樹;

(3)補救由於輸入順序和頁面大小帶來的分裂,使用全域性/半全域性演算法對全部葉節點進行聚類

(4)這個階段也是可選的,把階段(3)的中心點作為種子,將資料點重新分配到最近的種子上,保證重複資料分到同一個簇中,同時新增簇標籤。

3.3.4 BIRCH聚類的優缺點

主要優點有:

(1)節約記憶體,所有的樣本都在磁碟上,CF Tree僅僅存了CF節點和對應的指標。

(2)聚類速度快,只需要一遍掃描訓練集就可以建立CF Tree,CF Tree的增刪改都很快。

(3)可以識別噪音點,還可以對資料集進行初步分類的預處理

主要缺點有:

(1)由於CF Tree對每個節點的CF個數有限制,導致聚類的結果可能和真實的類別分佈不同.

(2)對高維特徵的資料聚類效果不好。此時可以選擇Mini Batch K-Means

(3)如果資料集的分佈簇不是類似於超球體,或者說不是凸的,則聚類效果不好。

3.4 KNN聚類演算法

3.4.1 KNN聚類簡介

KNN(K-Nearest Neighbor),代表 k 個最近鄰分類法,通過k個與之最相近的歷史記錄的組合來辨別新的記錄。KNN 是一個眾所周知的統計方法,在過去的 40 年裡在模式識別中集中地被研究。KNN 在早期的研究策略中已被應用於文字分類[6],是基準 Reuters 主體的高操作性的方法之一。其它方法,如 LLSF、決策樹和神經網路等。

3.4.2 KNN聚類演算法步驟[7]

(1)準備資料,對資料進行預處理;

(2) 選用合適的資料結構儲存訓練資料和測試元組;

(3)設定引數,如元組數目k;

(4)維護一個大小為k的按距離由大到小的優先順序佇列,用於儲存最近鄰訓練元組。隨機從訓練元組中選取k個元組作為初始的最近鄰元組,分別計算測試元組到這k個元組的距離,將訓練元組標號和距離存入優先順序佇列;

(5)遍歷訓練元組集,計算當前訓練元組與測試元組的距離,將所得距離L 與優先順序佇列中的最大距離Lmax;

(6)進行比較。若L>=Lmax,則捨棄該元組,遍歷下一個元組。若L < Lmax,刪除優先順序佇列中最大距離的元組,將當前訓練元組存入優先順序佇列;

(7)遍歷完畢,計算優先順序佇列中k 個元組的多數類,並將其作為測試元組的類別;

(8) 測試元組集測試完畢後計算誤差率,繼續設定不同的k值重新進行訓練,最後取誤差率最小的k 值。

3.4.3KNN聚類的優缺點

主要優點有

(1)簡單,易於理解,無需建模與訓練,易於實現;

(2)適合對稀有事件進行分類;

(3)適合與多分類問題,例如根據基因特徵來判斷其功能分類,KNN比SVM的表現要好。

主要缺點有:

(1)惰性演算法,記憶體開銷大,對測試樣本分類時計算量大,效能較低;

(2)可解釋性差,無法給出決策樹那樣的規則。

4 實驗

4.1 實驗環境

本實驗擬將對第二節中的4個演算法進行測試,實驗系統採用Ubuntu16.04TLS版本(也可以用windows下pycharm等IDE),記憶體8G,CPU為4核心AMD晶片(兩個),主頻2.4GHZ。實驗程式碼使用Python2.7.2版本。

4.2實驗測試

      為測試4個演算法的聚類效果,實驗將使用4個演算法對同一個資料集進行聚類測試。該資料集是一個存放80個二維座標點的文字檔案,檔案每行有兩個資料,以製表符分割,分別表示二維座標的X軸資料和Y軸資料。

      經測試,4個演算法對資料集聚類的結果圖示如圖2、圖3、圖4、圖5所示:

                                      

圖 2 K-Means聚類結果

                                 

圖 3 K-Means++聚類結果

                                            

圖 4 BIRCH聚類結果

圖 5 KNN聚類結果

4.3 對比結論

上述四組圖為實驗對比,可以看出,四種演算法對資料集的分類效果相當,只有在個別點的劃分有所不同,即資料集中的(-0.392370  -3.963704)座標點,在K-Means聚類和KNN聚類中,該點被聚類到左下方簇中,而在K-Means++聚類和BIRCH聚類中,該點被劃分到了右下方簇中。

5總結

      本文首先介紹了聚類演算法定義和聚類演算法的基本步驟,然後分別對K-Means、K-Means++、BIRCH和KNN四個經典的聚類演算法作了詳細介紹,最後通過對同一個資料集進行對比實驗,得出四個聚類效果。從實驗中反映了四個聚類演算法對資料集的聚類效果較好。四種聚類演算法在本實驗中達到了的聚類效果幾乎一樣,但四類聚類演算法在實際生活中仍將有其不同的使用背景,故在實際生活中需要結合特定的實際環境採用不同聚類演算法,以達到最好的效果[8]

6參考文獻

[1] 孫吉貴,劉傑,趙連宇.聚類演算法研究[J].軟體學報,2008

[2] 張建萍,劉希玉.基於聚類分析的 K-means演算法研究及應用[J].計算機應用研究,2007,5

[3] 楊善林,李永森,胡笑旋,潘若愚.K-means 演算法中的 k 值優化問題研究[J].系統工程理論與實踐,2006,2

[4] David Arthur and Sergei Vassilvitskii.k-means++:[J].TheAdvantages of Careful Seeding,2007

[5] BIRCH:An Efficient Data 3Clustering Method forVery Large Databases[J].1996

[6]張寧,賈自豔,史忠植.使用 KNN演算法的文字分類[J].計算機工程,2005.4

[7]KNN演算法綜述,https://wenku.baidu.com/view/d84cf670a5e9856a561260ce.html,2018.5.10

 [8]賀玲,吳玲達,蔡益朝.資料探勘中的聚類演算法綜述[J].計算機應用研究,2007