BIRCH聚类算法原理
在K-Means聚類算法原理中,我們講到了K-Means和Mini Batch K-Means的聚類原理。這里我們?cè)賮砜纯戳硗庖环N常見的聚類算法BIRCH。BIRCH算法比較適合于數(shù)據(jù)量大,類別數(shù)K也比較多的情況。它運(yùn)行速度很快,只需要單遍掃描數(shù)據(jù)集就能進(jìn)行聚類,當(dāng)然需要用到一些技巧,下面我們就對(duì)BIRCH算法做一個(gè)總結(jié)。
1. BIRCH概述
BIRCH的全稱是利用層次方法的平衡迭代規(guī)約和聚類(Balanced Iterative Reducing and Clustering Using Hierarchies),名字實(shí)在是太長(zhǎng)了,不過沒關(guān)系,其實(shí)只要明白它是用層次方法來聚類和規(guī)約數(shù)據(jù)就可以了。剛才提到了,BIRCH只需要單遍掃描數(shù)據(jù)集就能進(jìn)行聚類,那它是怎么做到的呢?
BIRCH算法利用了一個(gè)樹結(jié)構(gòu)來幫助我們快速的聚類,這個(gè)數(shù)結(jié)構(gòu)類似于平衡B+樹,一般將它稱之為聚類特征樹(Clustering Feature Tree,簡(jiǎn)稱CF Tree)。這顆樹的每一個(gè)節(jié)點(diǎn)是由若干個(gè)聚類特征(Clustering Feature,簡(jiǎn)稱CF)組成。從下圖我們可以看看聚類特征樹是什么樣子的:每個(gè)節(jié)點(diǎn)包括葉子節(jié)點(diǎn)都有若干個(gè)CF,而內(nèi)部節(jié)點(diǎn)的CF有指向孩子節(jié)點(diǎn)的指針,所有的葉子節(jié)點(diǎn)用一個(gè)雙向鏈表鏈接起來。
有了聚類特征樹的概念,我們?cè)賹?duì)聚類特征樹和其中節(jié)點(diǎn)的聚類特征CF做進(jìn)一步的講解。
2. 聚類特征CF與聚類特征樹CF Tree
? 在聚類特征樹中,一個(gè)聚類特征CF是這樣定義的:每一個(gè)CF是一個(gè)三元組,可以用(N,LS,SS)表示。其中N代表了這個(gè)CF中擁有的樣本點(diǎn)的數(shù)量,這個(gè)好理解;LS代表了這個(gè)CF中擁有的樣本點(diǎn)各特征維度的和向量,SS代表了這個(gè)CF中擁有的樣本點(diǎn)各特征維度的平方和。舉個(gè)例子如下圖,在CF Tree中的某一個(gè)節(jié)點(diǎn)的某一個(gè)CF中,有下面5個(gè)樣本(3,4),?(2,6),?(4,5),?(4,7),?(3,8)。則它對(duì)應(yīng)的N=5, LS=(3+2+4+4+3,4+6+5+7+8)=(16,30)(3+2+4+4+3,4+6+5+7+8)=(16,30), SS =(32+22+42+42+32+42+62+52+72+82)=(54+190)=244(32+22+42+42+32+42+62+52+72+82)=(54+190)=244
CF有一個(gè)很好的性質(zhì),就是滿足線性關(guān)系,也就是CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)。這個(gè)性質(zhì)從定義也很好理解。如果把這個(gè)性質(zhì)放在CF Tree上,也就是說,在CF Tree中,對(duì)于每個(gè)父節(jié)點(diǎn)中的CF節(jié)點(diǎn),它的(N,LS,SS)三元組的值等于這個(gè)CF節(jié)點(diǎn)所指向的所有子節(jié)點(diǎn)的三元組之和。如下圖所示:
從上圖中可以看出,根節(jié)點(diǎn)的CF1的三元組的值,可以從它指向的6個(gè)子節(jié)點(diǎn)(CF7 - CF12)的值相加得到。這樣我們?cè)诟翪F Tree的時(shí)候,可以很高效。
對(duì)于CF Tree,我們一般有幾個(gè)重要參數(shù),第一個(gè)參數(shù)是每個(gè)內(nèi)部節(jié)點(diǎn)的最大CF數(shù)B,第二個(gè)參數(shù)是每個(gè)葉子節(jié)點(diǎn)的最大CF數(shù)L,第三個(gè)參數(shù)是針對(duì)葉子節(jié)點(diǎn)中某個(gè)CF中的樣本點(diǎn)來說的,它是葉節(jié)點(diǎn)每個(gè)CF的最大樣本半徑閾值T,也就是說,在這個(gè)CF中的所有樣本點(diǎn)一定要在半徑小于T的一個(gè)超球體內(nèi)。對(duì)于上圖中的CF Tree,限定了B=7, L=5, 也就是說內(nèi)部節(jié)點(diǎn)最多有7個(gè)CF,而葉子節(jié)點(diǎn)最多有5個(gè)CF。
?3.?聚類特征樹CF Tree的生成
下面我們看看怎么生成CF Tree。我們先定義好CF Tree的參數(shù): 即內(nèi)部節(jié)點(diǎn)的最大CF數(shù)B,?葉子節(jié)點(diǎn)的最大CF數(shù)L,?葉節(jié)點(diǎn)每個(gè)CF的最大樣本半徑閾值T
在最開始的時(shí)候,CF Tree是空的,沒有任何樣本,我們從訓(xùn)練集讀入第一個(gè)樣本點(diǎn),將它放入一個(gè)新的CF三元組A,這個(gè)三元組的N=1,將這個(gè)新的CF放入根節(jié)點(diǎn),此時(shí)的CF Tree如下圖:
現(xiàn)在我們繼續(xù)讀入第二個(gè)樣本點(diǎn),我們發(fā)現(xiàn)這個(gè)樣本點(diǎn)和第一個(gè)樣本點(diǎn)A,在半徑為T的超球體范圍內(nèi),也就是說,他們屬于一個(gè)CF,我們將第二個(gè)點(diǎn)也加入CF A,此時(shí)需要更新A的三元組的值。此時(shí)A的三元組中N=2。此時(shí)的CF Tree如下圖:
此時(shí)來了第三個(gè)節(jié)點(diǎn),結(jié)果我們發(fā)現(xiàn)這個(gè)節(jié)點(diǎn)不能融入剛才前面的節(jié)點(diǎn)形成的超球體內(nèi),也就是說,我們需要一個(gè)新的CF三元組B,來容納這個(gè)新的值。此時(shí)根節(jié)點(diǎn)有兩個(gè)CF三元組A和B,此時(shí)的CF Tree如下圖:
當(dāng)來到第四個(gè)樣本點(diǎn)的時(shí)候,我們發(fā)現(xiàn)和B在半徑小于T的超球體,這樣更新后的CF Tree如下圖:
那個(gè)什么時(shí)候CF Tree的節(jié)點(diǎn)需要分裂呢?假設(shè)我們現(xiàn)在的CF Tree 如下圖, 葉子節(jié)點(diǎn)LN1有三個(gè)CF, LN2和LN3各有兩個(gè)CF。我們的葉子節(jié)點(diǎn)的最大CF數(shù)L=3。此時(shí)一個(gè)新的樣本點(diǎn)來了,我們發(fā)現(xiàn)它離LN1節(jié)點(diǎn)最近,因此開始判斷它是否在sc1,sc2,sc3這3個(gè)CF對(duì)應(yīng)的超球體之內(nèi),但是很不幸,它不在,因此它需要建立一個(gè)新的CF,即sc8來容納它。問題是我們的L=3,也就是說LN1的CF個(gè)數(shù)已經(jīng)達(dá)到最大值了,不能再創(chuàng)建新的CF了,怎么辦?此時(shí)就要將LN1葉子節(jié)點(diǎn)一分為二了。
我們將LN1里所有CF元組中,找到兩個(gè)最遠(yuǎn)的CF做這兩個(gè)新葉子節(jié)點(diǎn)的種子CF,然后將LN1節(jié)點(diǎn)里所有CF sc1, sc2, sc3,以及新樣本點(diǎn)的新元組sc8劃分到兩個(gè)新的葉子節(jié)點(diǎn)上。將LN1節(jié)點(diǎn)劃分后的CF Tree如下圖:
如果我們的內(nèi)部節(jié)點(diǎn)的最大CF數(shù)B=3,則此時(shí)葉子節(jié)點(diǎn)一分為二會(huì)導(dǎo)致根節(jié)點(diǎn)的最大CF數(shù)超了,也就是說,我們的根節(jié)點(diǎn)現(xiàn)在也要分裂,分裂的方法和葉子節(jié)點(diǎn)分裂一樣,分裂后的CF Tree如下圖:
有了上面這一系列的圖,相信大家對(duì)于CF Tree的插入就沒有什么問題了,總結(jié)下CF Tree的插入:
1. 從根節(jié)點(diǎn)向下尋找和新樣本距離最近的葉子節(jié)點(diǎn)和葉子節(jié)點(diǎn)里最近的CF節(jié)點(diǎn)
2. 如果新樣本加入后,這個(gè)CF節(jié)點(diǎn)對(duì)應(yīng)的超球體半徑仍然滿足小于閾值T,則更新路徑上所有的CF三元組,插入結(jié)束。否則轉(zhuǎn)入3.
3. 如果當(dāng)前葉子節(jié)點(diǎn)的CF節(jié)點(diǎn)個(gè)數(shù)小于閾值L,則創(chuàng)建一個(gè)新的CF節(jié)點(diǎn),放入新樣本,將新的CF節(jié)點(diǎn)放入這個(gè)葉子節(jié)點(diǎn),更新路徑上所有的CF三元組,插入結(jié)束。否則轉(zhuǎn)入4。
4.將當(dāng)前葉子節(jié)點(diǎn)劃分為兩個(gè)新葉子節(jié)點(diǎn),選擇舊葉子節(jié)點(diǎn)中所有CF元組里超球體距離最遠(yuǎn)的兩個(gè)CF元組,分布作為兩個(gè)新葉子節(jié)點(diǎn)的第一個(gè)CF節(jié)點(diǎn)。將其他元組和新樣本元組按照距離遠(yuǎn)近原則放入對(duì)應(yīng)的葉子節(jié)點(diǎn)。依次向上檢查父節(jié)點(diǎn)是否也要分裂,如果需要按和葉子節(jié)點(diǎn)分裂方式相同。
4. BIRCH算法
上面講了半天的CF Tree,終于我們可以步入正題BIRCH算法,其實(shí)將所有的訓(xùn)練集樣本建立了CF Tree,一個(gè)基本的BIRCH算法就完成了,對(duì)應(yīng)的輸出就是若干個(gè)CF節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)里的樣本點(diǎn)就是一個(gè)聚類的簇。也就是說BIRCH算法的主要過程,就是建立CF Tree的過程。
當(dāng)然,真實(shí)的BIRCH算法除了建立CF Tree來聚類,其實(shí)還有一些可選的算法步驟的,現(xiàn)在我們就來看看 BIRCH算法的流程。
1) 將所有的樣本依次讀入,在內(nèi)存中建立一顆CF Tree, 建立的方法參考上一節(jié)。
2)(可選)將第一步建立的CF Tree進(jìn)行篩選,去除一些異常CF節(jié)點(diǎn),這些節(jié)點(diǎn)一般里面的樣本點(diǎn)很少。對(duì)于一些超球體距離非常近的元組進(jìn)行合并
3)(可選)利用其它的一些聚類算法比如K-Means對(duì)所有的CF元組進(jìn)行聚類,得到一顆比較好的CF Tree.這一步的主要目的是消除由于樣本讀入順序?qū)е碌牟缓侠淼臉浣Y(jié)構(gòu),以及一些由于節(jié)點(diǎn)CF個(gè)數(shù)限制導(dǎo)致的樹結(jié)構(gòu)分裂。
4)(可選)利用第三步生成的CF Tree的所有CF節(jié)點(diǎn)的質(zhì)心,作為初始質(zhì)心點(diǎn),對(duì)所有的樣本點(diǎn)按距離遠(yuǎn)近進(jìn)行聚類。這樣進(jìn)一步減少了由于CF Tree的一些限制導(dǎo)致的聚類不合理的情況。
從上面可以看出,BIRCH算法的關(guān)鍵就是步驟1,也就是CF Tree的生成,其他步驟都是為了優(yōu)化最后的聚類結(jié)果。
5. BIRCH算法小結(jié)
BIRCH算法可以不用輸入類別數(shù)K值,這點(diǎn)和K-Means,Mini Batch K-Means不同。如果不輸入K值,則最后的CF元組的組數(shù)即為最終的K,否則會(huì)按照輸入的K值對(duì)CF元組按距離大小進(jìn)行合并。
一般來說,BIRCH算法適用于樣本量較大的情況,這點(diǎn)和Mini Batch K-Means類似,但是BIRCH適用于類別數(shù)比較大的情況,而Mini Batch K-Means一般用于類別數(shù)適中或者較少的時(shí)候。BIRCH除了聚類還可以額外做一些異常點(diǎn)檢測(cè)和數(shù)據(jù)初步按類別規(guī)約的預(yù)處理。但是如果數(shù)據(jù)特征的維度非常大,比如大于20,則BIRCH不太適合,此時(shí)Mini Batch K-Means的表現(xiàn)較好。
對(duì)于調(diào)參,BIRCH要比K-Means,Mini Batch K-Means復(fù)雜,因?yàn)樗枰獙?duì)CF Tree的幾個(gè)關(guān)鍵的參數(shù)進(jìn)行調(diào)參,這幾個(gè)參數(shù)對(duì)CF Tree的最終形式影響很大。
最后總結(jié)下BIRCH算法的優(yōu)缺點(diǎn):
? BIRCH算法的主要優(yōu)點(diǎn)有:
1) 節(jié)約內(nèi)存,所有的樣本都在磁盤上,CF Tree僅僅存了CF節(jié)點(diǎn)和對(duì)應(yīng)的指針。
2) 聚類速度快,只需要一遍掃描訓(xùn)練集就可以建立CF Tree,CF Tree的增刪改都很快。
3) 可以識(shí)別噪音點(diǎn),還可以對(duì)數(shù)據(jù)集進(jìn)行初步分類的預(yù)處理
BIRCH算法的主要缺點(diǎn)有:
1) 由于CF Tree對(duì)每個(gè)節(jié)點(diǎn)的CF個(gè)數(shù)有限制,導(dǎo)致聚類的結(jié)果可能和真實(shí)的類別分布不同.
2)?對(duì)高維特征的數(shù)據(jù)聚類效果不好。此時(shí)可以選擇Mini Batch K-Means
3) 如果數(shù)據(jù)集的分布簇不是類似于超球體,或者說不是凸的,則聚類效果不好。
轉(zhuǎn)載于:https://www.cnblogs.com/zhengxingpeng/p/6670492.html
總結(jié)
以上是生活随笔為你收集整理的BIRCH聚类算法原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注册和登陆与数据库的链接
- 下一篇: 关于数组长度