09聚類演算法-層次聚類-CF-Tree、BIRCH、CURE

白爾摩斯發表於2018-12-11

08 聚類演算法 – 聚類演算法的衡量指標

五、層次聚類概述

層次聚類方法對給定的資料集進行層次的分解,直到滿足某種條件為止,傳統的層次聚類演算法主要分為兩大類演算法:

1、凝聚的層次聚類:__AGNES演算法__ (AGglomerative NESting)==>採用自底向上的策略。最初將每個物件作為一個簇,然後這些簇根據某些準則被一步一步合併,兩個簇間的距離可以由這兩個不同簇中距離最近的資料點的相似度來確定;聚類的合併過程反覆進行直到所有的物件滿足簇數目。

2、分裂的層次聚類:__DIANA演算法__ (DIvisive ANALysis)==>採用自頂向下的策略。首先將所有物件置於一個簇中,然後按照某種既定的規則逐漸細分為越來越小的簇(比如最大的歐式距離),直到達到某個終結條件(簇數目或者簇距離達到閾值);


__AGNES__和__DIANA__演算法優缺點:
1、簡單,理解容易。
2、合併點/分裂點選擇不太容易。
3、合併/分類的操作不能進行撤銷。
4、大資料集不太適合。
5、執行效率較低O(t*n2),t為迭代次數,n為樣本點數。


AGNES演算法中簇間距離:

1、最小距離(SL聚類)
兩個聚簇中最近的兩個樣本之間的距離(single/word-linkage聚類法);
最終得到模型容易形成鏈式結構。

2、最大距離(CL聚類)
兩個聚簇中最遠的兩個樣本的距離(complete-linkage聚類法);
如果存在異常值,那麼構建可能不太穩定。

3、平均距離(AL聚類)
兩個聚簇中樣本間兩兩距離的平均值(average-linkage聚類法);
兩個聚簇中樣本間兩兩距離的中值(median-linkage聚類法);

AGNES層次聚類 - 不同合併策略

建議使用word策略對樣本進行分類。

六、層次聚類優化演算法

1、CF-Tree:

__CF-Tree__(Cluster Feature Tree):每個節點是由三個聚類特徵組成。這三個聚類特徵構成一個三元組,用(N, LS, SS)來表示。

其中:
N 表示這個CF中包含的樣本數量;
LS 表示這個CF中包含的樣本點的向量和;
SS 表示這個CF中包含的樣本點各個特徵的平方和。

CF-Tree中父節點的某個CF值等於其指向的所有子節點CF值的總和。

CF-Tree 的幾個關鍵超引數:
B: 每個內部節點最大的CF個數。
L: 每個葉節點最大的CF個數。
T: 新樣本若被分到某一CF中,其到該CF中心的距離最大值。

CF-Tree構建步驟:

1、初始狀態,CF樹是空的,無任何樣本。讀入第一個樣本x(a,b),生成一個CF三元組,此處N=1,LS=(a,b),SS=a^2+b^2,我們令其為CF1。

2、讀入第二個樣本,若到CF1的距離小於T,那麼這個樣本也歸入CF1,更新三元組資料;如果大於T,則新劃分出一個CF,這個樣本作為CF2當中的首個樣本,生成一個CF三元組。
注意:此時都是在節點內進行CF的建立,而非產生新的節點。

3、分裂:如果新資料進入該節點後,距離所有CF中心的距離都大於T,且Cf個數在生成新CF後大於B,則該節點需要進行劃分。

4、找到該分支內各個CF之間的距離最大的兩個CF,分別作為兩個新葉子結點的CF,再計算剩餘CF到這兩個CF之間的距離,距離近的分到一個節點當中。

5、如果節點分裂過後葉子節點個數超過L,則該節點要進行分裂,分裂方式和上一步相同。

6、生成CF和分裂過程直至所有樣本均進入CF樹後停止。

CF-Tree 詳解


2、BIRCH演算法

BIRCH演算法 (平衡迭代削減聚類法):聚類特徵使用3元組進行一個簇的相關資訊,通過構建滿足分枝因子和簇直徑限制的__聚類特徵樹(CF-Tree)__來求聚類,聚類特徵樹其實是一個具有兩個引數__分枝因子(B、L)__和__類直徑(T)__的高度平衡樹;分枝因子規定了樹的每個節點的子女的最多個數,而類直徑體現了對這一類點的距離範圍;非葉子節點為它子女的最大特徵值;聚類特徵樹的構建可以是動態過程的,可以隨時根據資料對模型進行更新操作。

對應生成的結果就是一個__簇(聚類特徵 – CF)__;
BIRCH演算法的過程就是建立CF-Tree的過程。

優缺點:
1、適合大規模資料集,線性效率;
__層次聚類演算法__的複雜度為 __OT(n2)__;
優化後的__BIRCH演算法__構建聚類特徵樹(CF-Tree)的時間複雜度為__O(n)__ ;

2、只適合分佈呈凸形或者球形的資料集、需要給定聚類個數和簇之間的相關引數;


3、CURE演算法

__CURE演算法__(使用代表點的聚類法):是一種__凝聚演算法(AGNES)__。該演算法先把每個資料點看成一類,然後合併距離最近的類直至類個數為所要求的個數為止。但是和AGNES演算法的區別是:__取消了使用所有點或用中心點+距離來表示一個類__,而是__從每個類中抽取固定數量、分佈較好的點作為此類的代表點__,並將這些__代表點(一般10個)__乘以一個適當的__收縮因子(一般設定0.2~0.7之間)__,使它們更加靠近類中心點。代表點的收縮特性可以調整模型可以匹配那些非球形的場景,而且收縮因子的使用可以減少噪音對聚類的影響。

代表點 不是原來的點,而是那些需要重新計算的點。

分析CURE演算法

參考論文:https://wenku.baidu.com/view/32b7390cbe1e650e53ea9904.html

優點:
能夠處理非球形分佈的應用場景
採用隨機抽樣和分割槽的方式可以提高演算法的執行效率

10 聚類演算法 – 程式碼案例四 – 層次聚類(BIRCH)演算法引數比較


相關文章