層次聚類演算法(三)

2021-07-27 11:37:35 字數 3753 閱讀 7738

上邊博文學習了一下agnes演算法與diana演算法,針對伸縮性差一級不能撤銷先前步驟所做的工作,學習一下birch聚類演算法。

birch演算法:balanced iterative reducing and clustering using hierarchies.利用層次結構的平衡迭代規約和聚類。名字真的長的不行了。

該演算法是為

大量數值資料

聚類設計的,它將層次聚類(在初始微聚類階段)與諸如迭代的劃分這樣的其它聚類演算法(在其後的巨集聚類階段)整合在了一塊。它克服了凝聚聚類方法面臨的兩個困難:

(1)可伸縮性(2)不能撤銷先前步驟所做的工作。

birch

使用聚類特徵來概括乙個簇,使用

聚類特徵樹(cf-樹)

來表示聚類的層次結構。這些結構幫助聚類方法在大型資料庫甚至在流資料庫中取得了好的速度和伸縮性,還使得

birch

方法對新物件

增量或動態聚類

也非常有效。

考慮乙個n個

d維的資料物件或者點的簇。簇的聚類特徵(

clustering feature,cf

)是乙個三維向量,彙總了物件簇的資訊,定義如下:

cf =

《n,ls,ss》n

為樣本的數量,ls為

n個點的線性和,

ss為資料點的平方和。

聚類特徵本質上給定簇的統計彙總,使用聚類特徵可以避免儲存個體物件或者點的詳細資訊。我們只需要固定大小的空間來儲存聚類特徵即可。  

例:聚類特徵的計算:

假設簇c1有三個點:(

2,5),(

3,2)(

4,3),那麼

c1的聚類特徵:

n=3,ls=(2+3+4,5+2+3)=(9,10)   ss=(4+9+16,25+4+9)=(29,38) (平方和)

cf1=《3

,(9,10

),(29,38

)》  看完上面這個例子,聚類特徵的概念應該有所了解了。

cf-樹一顆高度平衡的叔,儲存了層次聚類的聚類特徵。對於

cf tree

,我們一般有幾個重要引數,

第乙個引數是每個內部節點的最大cf數

b。(即非葉子節點的最大子女數) 

第二個引數是每個葉子節點的最大cf數

l。(即葉子節點的最大子女數)

第三個引數是針對葉子節點中某個

cf中的樣本點來說的,它是葉節點每個

cf的最大樣本半徑閾值t,

也就是說,在這個

cf中的所有樣本點一定要在半徑小於

t的乙個超球體內。這三個引數對聚類效果的影響是巨大的,可以這麼說birch聚類演算法是對引數敏感型演算法。

如圖為聚類特徵樹,先有個概念。

接下來,講解一下birch的生成過程。如果對資料結構裡面的樹結構比較熟悉,那麼birch演算法就是 a piece

of cake!當然不熟悉的看懂這個演算法也是分分鐘的。

(1)首先定義好三個引數:b,l,t  

(2)最開始的時候樹是空的。掃瞄資料,第乙個點加入時,將它放入到新建的三元組a中,此時三元組a的n=1.此時這個三元組a就是根節點。如圖所示,本來想上傳自己手畫的版本,加了許多注釋,但是發現太醜了!

(3)當第二個點掃瞄加入時,如果第二個點在已經加入的第乙個點的t範圍內,那麼兩個點位於同乙個cf內,如圖所示。

(4)當掃瞄加入的第三個點不在已有的cf的超球體範圍內,那麼需要新建乙個cf-b。如圖所示。

(5)當掃瞄加入第四個點時,我們發現新加入的點在cf-b的超球體範圍內,加入。如圖所示

(6)可能會發現,說了這麼多,之前設定的幾個引數怎麼沒出現過,不是說很重要嗎?好,接下來就涉及到引數問題了。

如下圖所示,如果我們設定的l=3,那麼對圖中的ln1葉子節點來說,其cf數量已經達到上限。但是我們掃瞄新加入的點sc8距離ln1最近,但是卻又不在生sc1,sc2,sc3的超球體內,只能建立乙個新的cf了,但是cf數量又達到上限。怎麼辦?

(7)為了解決上述問題,只能講ln1**了,在ln1的cf組裡面,找到兩個相聚最遠的cf分別做兩個葉子節點的種子cf,剩下的cf以及要新建的sc8按照距離遠近加入到距離最近的葉子節點上。

(8)到了第7個過程,感覺已經大功告成了,no,引數問題又來了,如果我們此時設定的b=3,那麼很明顯root節點的最大cf已經超出上限了,怎麼辦》只能繼續想上**了。即如果我們在葉子節點處發生了**,一定要向上檢查父節點是否還滿足引數要求。即傳遞性。

給定有限的記憶體,

birch

乙個重要的考慮是最小化

i/o時間。b

irch

採用了一種多階段聚類技術:資料集的單遍掃瞄產生乙個基本的好聚類,而一或者多遍的額外掃瞄可以進一步改善聚類質量。在實際應用中,birch演算法主要分為兩個階段:

階段一:

birch

掃瞄資料庫,建立一棵存放於記憶體的初始

cf-樹,他可以被看做資料的多層壓縮,試圖保留資料的內在聚類結構。(單遍掃瞄,完成基本的聚類)

階段二:birch

採用某個(選定的)聚類演算法對

cf樹的葉節點進行聚類,把稀疏的簇當做離群點處理,把稠密的簇合併為更大的簇。(即可以進行進一步的處理,比如此時可以使用

k-means

演算法進行下一步處理)

階段一中,cf-

樹被動態的改造。該方法支援增量聚類。新資料的加入,完全可以自適應改變

cf-樹結構。不必重建。

通過修改閾值,

cf-樹的大小可以改變。如果儲存

cf-樹的記憶體大於主存大小,可以定義較大的閾值,並重建

cf-樹。重建過程從舊樹的葉節點構建一顆新書。這樣重建樹的過程不需要重讀所有的物件或者點。

總結下birch演算法的優缺點:

birch演算法的主要優點有:

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

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

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

4)可伸縮能力強,具有較好的聚類質量。

birch演算法的主要缺點有:

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

2) 對高維特徵的資料聚類效果不好。此時可以選擇mini batch k-means

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

聚類演算法 層次聚類演算法

層次聚類演算法 hierarchical clustering method 又稱為系統聚類法 分級聚類法。層次聚類演算法又分為兩種形式 凝聚層次聚類 首先將每個物件作為乙個簇,然後合併這些原子簇為越來越大的簇,直到某個終結條件被滿足。層次聚類 首先將所有物件置於乙個簇中,然後逐漸細分為越來越小的簇...

層次聚類演算法(一)

層次聚類 hierarchical clustering 試圖在不同層次上對資料集進行劃分,從而形成樹形的聚類結構,資料集的劃分可採用 自底向上 的聚合策略,也可以採用 自頂向下 的分拆策略。即層次聚類可以是凝聚的也可以是 的。凝聚的層次聚類方法使用自底向上的策略。即剛開始每個點都認為是乙個簇,然後...

層次聚類演算法(二)

上篇博文簡單的講述了層次聚類的基本概念,接下來就是具體的講述凝聚的聚類演算法agnes演算法與 的聚類演算法diana聚類演算法。agnes演算法 演算法描述 輸入 包含n個物件的資料庫,終止條件簇的數目k 輸出 k個簇 1 將每個物件當成乙個初始簇 2 repeat 3 根據兩個簇中最近的資料點找...