BIRCH聚類算法原理

K-Means聚類算法原理中,咱們講到了K-Means和Mini Batch K-Means的聚類原理。這裏咱們再來看看另一種常見的聚類算法BIRCH。BIRCH算法比較適合於數據量大,類別數K也比較多的狀況。它運行速度很快,只須要單遍掃描數據集就能進行聚類,固然須要用到一些技巧,下面咱們就對BIRCH算法作一個總結。html

1、BIRCH概述

    BIRCH的全稱是利用層次方法的平衡迭代規約和聚類(Balanced Iterative Reducing and Clustering Using Hierarchies),名字實在是太長了,不過不要緊,其實只要明白它是用層次方法來聚類和規約數據就能夠了。剛纔提到了,BIRCH只須要單遍掃描數據集就能進行聚類,那它是怎麼作到的呢?算法

    BIRCH算法利用了一個樹結構來幫助咱們快速的聚類,這個數結構相似於平衡B+樹,通常將它稱之爲聚類特徵樹(Clustering Feature Tree,簡稱CF Tree)。這顆樹的每個節點是由若干個聚類特徵(Clustering Feature,簡稱CF)組成。從下圖咱們能夠看看聚類特徵樹是什麼樣子的:每一個節點包括葉子節點都有若干個CF,而內部節點的CF有指向孩子節點的指針,全部的葉子節點用一個雙向鏈表連接起來。微信

    有了聚類特徵樹的概念,咱們再對聚類特徵樹和其中節點的聚類特徵CF作進一步的講解。post

2、聚類特徵CF與聚類特徵樹CF Tree

    在聚類特徵樹中,一個聚類特徵CF是這樣定義的:每個CF是一個三元組,能夠用(N,LS,SS)表示。其中N表明了這個CF中擁有的樣本點的數量,這個好理解;LS表明了這個CF中擁有的樣本點各特徵維度的和向量,SS表明了這個CF中擁有的樣本點各特徵維度的平方和。舉個例子以下圖,在CF Tree中的某一個節點的某一個CF中,有下面5個樣本(3,4), (2,6), (4,5), (4,7), (3,8)。則它對應的N=5, LS=\((3+2+4+4+3, 4+6+5+7+8) = (16,30)\), SS =\((3^2+2^2+4^2 +4^2+3^2 + 4^2+6^2+5^2 +7^2+8^2) = (54 + 190) = 244\)優化

    CF有一個很好的性質,就是知足線性關係,也就是\(CF1+CF2 = (N_1+N_2, LS_1+LS_2, SS_1 +SS_2)\)。這個性質從定義也很好理解。若是把這個性質放在CF Tree上,也就是說,在CF Tree中,對於每一個父節點中的CF節點,它的(N,LS,SS)三元組的值等於這個CF節點所指向的全部子節點的三元組之和。以下圖所示:spa

    從上圖中能夠看出,根節點的CF1的三元組的值,能夠從它指向的6個子節點(CF7 - CF12)的值相加獲得。這樣咱們在更新CF Tree的時候,能夠很高效。指針

    對於CF Tree,咱們通常有幾個重要參數,第一個參數是每一個內部節點的最大CF數B,第二個參數是每一個葉子節點的最大CF數L,第三個參數是針對葉子節點中某個CF中的樣本點來講的,它是葉節點每一個CF的最大樣本半徑閾值T,也就是說,在這個CF中的全部樣本點必定要在半徑小於T的一個超球體內。對於上圖中的CF Tree,限定了B=7, L=5, 也就是說內部節點最多有7個CF,而葉子節點最多有5個CF。htm

3、 3. 聚類特徵樹CF Tree的生成

    下面咱們看看怎麼生成CF Tree。咱們先定義好CF Tree的參數: 即內部節點的最大CF數B, 葉子節點的最大CF數L, 葉節點每一個CF的最大樣本半徑閾值Tblog

    在最開始的時候,CF Tree是空的,沒有任何樣本,咱們從訓練集讀入第一個樣本點,將它放入一個新的CF三元組A,這個三元組的N=1,將這個新的CF放入根節點,此時的CF Tree以下圖:內存

    如今咱們繼續讀入第二個樣本點,咱們發現這個樣本點和第一個樣本點A,在半徑爲T的超球體範圍內,也就是說,他們屬於一個CF,咱們將第二個點也加入CF A,此時須要更新A的三元組的值。此時A的三元組中N=2。此時的CF Tree以下圖:

    此時來了第三個節點,結果咱們發現這個節點不能融入剛纔前面的節點造成的超球體內,也就是說,咱們須要一個新的CF三元組B,來容納這個新的值。此時根節點有兩個CF三元組A和B,此時的CF Tree以下圖:

    當來到第四個樣本點的時候,咱們發現和B在半徑小於T的超球體,這樣更新後的CF Tree以下圖:

    那個何時CF Tree的節點須要分裂呢?假設咱們如今的CF Tree 以下圖, 葉子節點LN1有三個CF, LN2和LN3各有兩個CF。咱們的葉子節點的最大CF數L=3。此時一個新的樣本點來了,咱們發現它離LN1節點最近,所以開始判斷它是否在sc1,sc2,sc3這3個CF對應的超球體以內,可是很不幸,它不在,所以它須要創建一個新的CF,即sc8來容納它。問題是咱們的L=3,也就是說LN1的CF個數已經達到最大值了,不能再建立新的CF了,怎麼辦?此時就要將LN1葉子節點一分爲二了。

    咱們將LN1裏全部CF元組中,找到兩個最遠的CF作這兩個新葉子節點的種子CF,而後將LN1節點裏全部CF sc1, sc2, sc3,以及新樣本點的新元組sc8劃分到兩個新的葉子節點上。將LN1節點劃分後的CF Tree以下圖:

    若是咱們的內部節點的最大CF數B=3,則此時葉子節點一分爲二會致使根節點的最大CF數超了,也就是說,咱們的根節點如今也要分裂,分裂的方法和葉子節點分裂同樣,分裂後的CF Tree以下圖:

    有了上面這一系列的圖,相信你們對於CF Tree的插入就沒有什麼問題了,總結下CF Tree的插入:

    1. 從根節點向下尋找和新樣本距離最近的葉子節點和葉子節點裏最近的CF節點

    2. 若是新樣本加入後,這個CF節點對應的超球體半徑仍然知足小於閾值T,則更新路徑上全部的CF三元組,插入結束。不然轉入3.

    3. 若是當前葉子節點的CF節點個數小於閾值L,則建立一個新的CF節點,放入新樣本,將新的CF節點放入這個葉子節點,更新路徑上全部的CF三元組,插入結束。不然轉入4。

    4.將當前葉子節點劃分爲兩個新葉子節點,選擇舊葉子節點中全部CF元組裏超球體距離最遠的兩個CF元組,分佈做爲兩個新葉子節點的第一個CF節點。將其餘元組和新樣本元組按照距離遠近原則放入對應的葉子節點。依次向上檢查父節點是否也要分裂,若是須要按和葉子節點分裂方式相同。

4、BIRCH算法

    上面講了半天的CF Tree,終於咱們能夠步入正題BIRCH算法,其實將全部的訓練集樣本創建了CF Tree,一個基本的BIRCH算法就完成了,對應的輸出就是若干個CF節點,每一個節點裏的樣本點就是一個聚類的簇。也就是說BIRCH算法的主要過程,就是創建CF Tree的過程。

    固然,真實的BIRCH算法除了創建CF Tree來聚類,其實還有一些可選的算法步驟的,如今咱們就來看看 BIRCH算法的流程。

    1) 將全部的樣本依次讀入,在內存中創建一顆CF Tree, 創建的方法參考上一節。

    2)(可選)將第一步創建的CF Tree進行篩選,去除一些異常CF節點,這些節點通常裏面的樣本點不多。對於一些超球體距離很是近的元組進行合併

    3)(可選)利用其它的一些聚類算法好比K-Means對全部的CF元組進行聚類,獲得一顆比較好的CF Tree.這一步的主要目的是消除因爲樣本讀入順序致使的不合理的樹結構,以及一些因爲節點CF個數限制致使的樹結構分裂。

    4)(可選)利用第三步生成的CF Tree的全部CF節點的質心,做爲初始質心點,對全部的樣本點按距離遠近進行聚類。這樣進一步減小了因爲CF Tree的一些限制致使的聚類不合理的狀況。

    從上面能夠看出,BIRCH算法的關鍵就是步驟1,也就是CF Tree的生成,其餘步驟都是爲了優化最後的聚類結果。

5、BIRCH算法小結

    BIRCH算法能夠不用輸入類別數K值,這點和K-Means,Mini Batch K-Means不一樣。若是不輸入K值,則最後的CF元組的組數即爲最終的K,不然會按照輸入的K值對CF元組按距離大小進行合併。

    通常來講,BIRCH算法適用於樣本量較大的狀況,這點和Mini Batch K-Means相似,可是BIRCH適用於類別數比較大的狀況,而Mini Batch K-Means通常用於類別數適中或者較少的時候。BIRCH除了聚類還能夠額外作一些異常點檢測和數據初步按類別規約的預處理。可是若是數據特徵的維度很是大,好比大於20,則BIRCH不太適合,此時Mini Batch K-Means的表現較好。

    對於調參,BIRCH要比K-Means,Mini Batch K-Means複雜,由於它須要對CF Tree的幾個關鍵的參數進行調參,這幾個參數對CF Tree的最終形式影響很大。

    最後總結下BIRCH算法的優缺點:

    BIRCH算法的主要優勢有:

    1) 節約內存,全部的樣本都在磁盤上,CF Tree僅僅存了CF節點和對應的指針。

    2) 聚類速度快,只須要一遍掃描訓練集就能夠創建CF Tree,CF Tree的增刪改都很快。

    3) 能夠識別噪音點,還能夠對數據集進行初步分類的預處理

    BIRCH算法的主要缺點有:

    1) 因爲CF Tree對每一個節點的CF個數有限制,致使聚類的結果可能和真實的類別分佈不一樣.

    2) 對高維特徵的數據聚類效果很差。此時能夠選擇Mini Batch K-Means

    3) 若是數據集的分佈簇不是相似於超球體,或者說不是凸的,則聚類效果很差。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)

相關文章
相關標籤/搜索