挑子學習筆記:兩步聚類算法(TwoStep Cluster Algorithm)——改進的BIRCH算法


    轉載請標明出處:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html

    兩步聚類算法是在SPSS Modeler中使用的一種聚類算法,是BIRCH層次聚類算法的改進版本。可以應用於混合屬性數據集的聚類,同時加入了自動確定最佳簇數量的機制,使得方法更加實用。本文在學習文獻[1]和“IBM SPSS Modeler 15 Algorithms Guide”的基礎上,融入了自己的理解,更詳盡地敘述兩步聚類算法的流程和細節。閱讀本文之前需要先行學習BIRCH層次聚類算法和對數似然距離

    兩步聚類算法,顧名思義分為兩個階段:

    1)預聚類(pre-clustering)階段。采用了BIRCH算法中CF樹生長的思想,逐個讀取數據集中數據點,在生成CF樹的同時,預先聚類密集區域的數據點,形成諸多的小的子簇(sub-cluster)。

    2)聚類(clustering)階段。以預聚類階段的結果——子簇為對象,利用凝聚法(agglomerative hierarchical clustering method),逐個地合並子簇,直到期望的簇數量。

    兩步聚類算法的關鍵技術如圖所示:

 

圖 1:兩步聚類算法的關鍵技術及流程

    設數據集$\mathfrak D $中有$N $個數據對象/數據點$\{ \vec x_n: n=1,...,N\} $,每個數據對象由$D $個屬性刻畫,其中有$D_1 $個連續型屬性(continuous attribute)和$D_2 $個分類型屬性(categorical attribute),設$\vec x_n = (\tilde x_{n1}, ..., \tilde x_{nD_1}, \ddot x_{n1},..., \ddot x_{nD_2}) $,其中$\tilde x_{ns} $表示第$n $個數據對象在第$s $連續型屬性下的屬性值,$\ddot x_{nt} $表示第$n $個數據對象在第$t $分類型屬性下的屬性值,已知第$t $個分類型屬性有$\epsilon_t $種可能取值。$\mathbf C_J = \{C_1,...,C_J\} $表示對數據集$\mathfrak D $的簇數為$J $的聚類,其中$C_j $表示聚類$\mathbf C_J $中第$j $個簇,不失一般性,設簇$C_j $中有$N_j $個數據對象,$ \{\vec x_{jn}: n=1,...,N_j\} $.

1、預聚類階段

    在本階段,首先逐個將數據集$\mathfrak D $中數據點,插入到聚類特征樹(CF樹)中,實現CF樹的生長;當CF樹的體積超出設定尺寸時,先剔除當前CF樹上的潛在離群點,而后增加空間閾值並對CF樹進行瘦身(rebuilding),再將不增加瘦身后的CF樹體積的離群點插入CF樹中;當遍歷所有數據點后,不能插入CF樹中的潛在離群點即為真正離群點;最后將最終CF樹葉元項(leaf entry)對應子簇的聚類特征輸出至算法的下一階段。本階段的流程見下圖:

 

圖 2:預聚類階段流程

1.1 聚類特征

    首先,與BIRCH算法相同,定義簇$\mathfrak D $(也可以是任意的若干個數據點的集合)的聚類特征(cluster feature):

    定義 1:簇$C_j $的聚類特征$\vec {CF}_j $定義為四元組:$ \vec {CF}_j = \langle N_j, \vec {\tilde \Lambda}_j,  \vec {\tilde \Sigma}_j, \vec {\ddot N}_j \rangle $,其中,$$ \begin{equation} \vec {\tilde \Lambda}_j  = (\tilde \Lambda_{j1}, ..., \tilde \Lambda_{jD_1})^T = \left(\sum_{n=1}^{N_j} \tilde x_{jn1}, ..., \sum_{n=1}^{N_j} \tilde x_{jnD_1} \right)^T \end{equation} $$表示各連續型屬性下簇$C_j $中數據點屬性值的線性求和,$$ \begin{equation} \vec {\tilde \Sigma}_j  = (\tilde \Sigma_{j1},..., \tilde \Sigma_{jD_1})^T = \left ( \sum_{n=1}^{N_j} \tilde x_{jn1}^2,..., \sum_{n=1}^{N_j} \tilde x_{jnD_1}^2 \right )^T \end{equation} $$表示各連續型屬性下簇$C_j $中數據點屬性值的平方和,$$ \begin{equation} \vec {\ddot N}_j = \left ( (\vec {\ddot N}_{j1})^T, ..., (\vec {\ddot N}_{jD_2})^T \right )^T \end{equation} $$式中$\vec {\ddot N}_{jt} = (\ddot N_{jt1}, ..., \ddot N_{j,t,\epsilon_t-1})^T $為簇$C_j $中在第$t $個分類型屬性下各可能取值的數據點數量構成的向量,即$\ddot N_{jtk} \; (k=1,...,\epsilon_t-1) $表示簇$C_j $中在第$t $個分類型屬性下第$k $種取值的數據點數量,因為$\ddot N_{jt\epsilon_t} = N_j - \sum_{k=1}^{\epsilon_t -1} \ddot N_{jtk} $,所以向量$\vec {\ddot N}_{jt} $的維度為$\epsilon_t - 1 $,向量$\vec {\ddot N}_j $的維度為$\sum_{t=1}^{D_2} (\epsilon_t - 1) $.

    與BIRCH算法中的聚類特征相似,上述定義中的聚類特征也具有可加性:

    定理 1:設簇$C_j $的聚類特征為$ \vec {CF}_j = \langle N_j, \vec {\tilde \Lambda}_j,  \vec {\tilde \Sigma}_j, \vec {\ddot N}_j \rangle $,另有簇$C_{j'} $,其聚類特征為$ \vec {CF}_{j'} = \langle N_{j'}, \vec {\tilde \Lambda}_{j'},  \vec {\tilde \Sigma}_{j'}, \vec {\ddot N}_{j'} \rangle $,則將簇$C_j $和$C_{j'} $合並成大簇$C_{\langle j,j' \rangle} $后,其聚類特征為$$ \begin{equation} \vec {CF}_{\langle j,j' \rangle} = \langle N_j + N_{j'}, \vec {\tilde \Lambda}_j + \vec {\tilde \Lambda}_{j'},  \vec {\tilde \Sigma}_j + \vec {\tilde \Sigma}_{j'}, \vec {\ddot N}_j + \vec {\ddot N}_{j'} \rangle \end{equation} $$

    從上述定義可知,兩步聚類算法的聚類特征與BIRCH算法中定義的聚類特征有所區別,但功能是相同的:簇與簇之間的相異度/距離可以通過聚類特征中的統計量表示出來,因此可以在兩步聚類算法的流程中使用聚類特征壓縮數據,降低算法耗用的內存。不同的是,BIRCH算法中使用的是諸如歐基里德距離和曼哈頓距離等常見距離,而兩步聚類算法為了達到處理混合屬性的要求,使用了對數似然距離。對於簇$C_j $,定義參數$$ \begin{equation} \zeta_j = -N_j \left ( \frac12 \sum_{s=1}^{D_1} \ln (\hat \sigma^2_{js} + \hat \sigma_s^2) + \sum_{t=1}^{D_2} \hat E_{jt} \right ) \end{equation} $$其中,$ \hat \sigma^2_{js} = 1/{N_j} \sum_{n=1}^{N_j} (\tilde x_{jns} - \bar {\tilde x}_{js})^2 $表示根據簇$C_j $中的數據點估計出的第$s $個連續型屬性下的方差($\bar{\tilde x}_{js} = 1/N_j \sum_{n=1}^{N_j} \tilde x_{jns} $),$\hat \sigma_s^2 = 1/N \sum_{n=1}^N (\tilde x_{ns} - \bar{\tilde x}_s)^2 $表示根據數據集$\mathfrak D $中所有數據點估計出的第$s $個連續型屬性下的方差,在整個算法流程中一次計算即可,可視為常量,$\hat E_{jt} = -\sum_{k=1}^{\epsilon_t} \ddot N_{jtk}/N_j \ln (\ddot N_{jtk}/N_j) $表示簇$C_j $中第$t $上分類型屬性下的信息熵。

    易知,$$ \begin{equation} \begin{split} \hat \sigma^2_{js} & = \frac 1{N_j} \sum_{n=1}^{N_j} (\tilde x_{jns} - \bar{\tilde x}_{js})^2 \\ & = \frac 1{N_j} \left [ \sum_{n=1}^{N_j} \tilde x_{jns}^2 - \frac 1{N_j} \left ( \sum_{n=1}^{N_j} \tilde x_{jns} \right )^2 \right ] \\ & = \frac {\tilde \Sigma_{js}}{N_j} - \left ( \frac {\tilde \Lambda_{js}}{N_j} \right )^2 \end{split} \end{equation} $$$$\begin {equation} \begin{split} \hat E_{jt} & = -\sum_{k=1}^{\epsilon_t} \left ( \frac {\ddot N_{jtk}}{N_j} \ln {\frac {\ddot N_{jtk}}{N_j}} \right ) \\ & = -\sum_{k=1}^{\epsilon_t-1} \left ( \frac {\ddot N_{jtk}}{N_j} \ln {\frac {\ddot N_{jtk}}{N_j}} \right ) - \frac {\ddot N_{jt\epsilon_t}}{N_j} \ln {\frac {\ddot N_{jt\epsilon_t}}{N_j}} \\ & = - \frac{\vec {\ddot N}_{jt}^T}{N_j} \cdot \ln{\frac{\vec {\ddot N}_{jt}}{N_j}} - \left ( 1 - \frac{\vec 1^T \vec {\ddot N}_{jt}}{N_j} \right ) \cdot \ln {\left ( 1 - \frac{\vec 1^T \vec {\ddot N}_{jt}}{N_j} \right )} \end{split} \end{equation}  $$其中$\vec 1 = (1,1,...,1)^T $為全1向量。因此式(5)中的參數$\zeta_j $完全可以由簇$C_j $的聚類特征$ \vec {CF}_j = \langle N_j, \vec {\tilde \Lambda}_j,  \vec {\tilde \Sigma}_j, \vec {\ddot N}_j \rangle $計算得到。

    因為簇$C_j $與簇$C_{j'} $之間的對數似然距離如下定義:$$ \begin{equation} d(C_j, C_{j'}) = \zeta_j + \zeta_{j'} - \zeta_{\langle j,j' \rangle} \end{equation} $$所以當知道任意兩個簇的聚類特征后,其對數似然距離可直接根據聚類特征計算得到。

1.2 聚類特征樹(CF樹)

    兩步聚類算法中的CF樹與BIRCH算法中的CF樹幾乎完全一樣,生長和瘦身流程也可以完全參照BIRCH算法進行,本節主要敘述兩步聚類算法中區別於BIRCH算法的獨特之處,建議先對BIRCH層次聚類算法的相關知識點進行必要的學習。

    1)兩步聚類算法的CF樹上各節點元項的聚類特征為本文定義 1中的聚類特征,與BIRCH算法不同;

    2)兩步聚類算法的CF樹的三個參數分別為:枝平衡因子$\beta $、葉平衡因子$\lambda $和閾值$\tau $;前兩個參數與BIRCH算法無異,由於混合屬性的原因,難以定義簇的散布程度(在BIRCH算法中有半徑和直徑的度量),因此兩步聚類算法換了一個思路:既然BIRCH算法中的散布程度和空間閾值只是用於作為判斷一個簇或者一個數據點能否被CF樹上某個葉元項吸收的依據,可通過簇$C_{j'} $(該簇可能是單數據點的簇)與簇$C_j $之間的距離來判斷$C_{j'} $能否被$C_j $吸收,如果$d(C_{j}, C_{j'}) \le \tau $,則$C_{j'} $可以被$C_j $吸收。

1.3 離群點處理(outlier-handling)

    離群點處理非兩步聚類算法的必選項。一旦確認需要在CF樹生長的過程中實施離群點處理,將逐步篩選出潛在離群點,並重新插入誤識離群點到CF樹中。

    1)潛在離群點的篩選。在CF樹實施瘦身(rebuilding)之前,依據葉元項中包含數據點的多寡篩選出潛在離群點,葉元項包含的數據點數目即為對應聚類特征中的第一個量($N_j $);具體來說,首先從當前CF樹中的所有葉元項中找出包含最多數據點的元項,記錄該元項包含的數據點數目($N_{\max} $),根據事先確定的比例參數$\alpha \in [0,1] $;如果某葉元項包含的數據點數目小於$\alpha N_{\max} $,則該葉元項置為潛在離群點,從當前CF樹中移除。

    2)誤識離群點的插入。在CF樹瘦身(rebuilding)完畢后,逐個處理潛在離群點,如果能夠在不增加當前CF樹體積的條件下吸收到CF樹中,則認為該潛在離群點為誤識離群點,將插入至當前CF樹上。

    在完成數據集$\mathfrak D $中所有數據點到CF樹上的插入后,仍為潛在離群點的元項,視為最終離群點。

2、聚類階段

    該階段的輸入為預聚類階段輸出的最終CF樹的葉元項的子簇(sub-cluster),記為$C_1,...,C_{J_0} $,事實上,並非包含具體數據點的子簇,只是各子簇的聚類特征:$\vec {CF}_1,..., \vec {CF}_{J_0} $.因此本階段的工作是根據輸入數據$\vec {CF}_1,..., \vec {CF}_{J_0} $,對子簇$C_1,...,C_{J_0} $進行二度聚類,最終實現期望簇數的聚類結果。

    兩步聚類算法使用凝聚法(agglomerative hierarchical clustering method)的思想遞歸地合並距離最近的簇達到上述目的。首先從$J_0 $個子簇$C_1,...,C_{J_0} $中找出距離最近的兩個子簇,將它們合並成一個簇后,完成第一步,此時新的聚類中簇個數為$J_0-1 $;然后合並剩下的簇中距離最近的一對簇,重復地實施此操作,直到把所有子簇合並成一個大簇,得到簇數為1的聚類,因此可以得到的聚類有$\mathbf C_{J_0}, ..., \mathbf C_2, \mathbf C_1 $;最后從這$J_0 $個聚類中輸出期望簇數的聚類,例如期望的簇數為5時,輸出結果為$\mathbf C_5 $。

    因為上述思想僅涉及簇間距離,完全可以基於聚類特征和對數似然距離達成目標。

2.1 自動確定最佳簇數(Automatic Determination of Number of Clusters)

    自動確定聚類的最佳簇數是兩步聚類算法的特點之一。兩步聚類算法使用兩招:粗估和精定,達到了准確確定聚類最佳簇數的效果。

    1)粗估主要借助貝葉斯信息准則(BIC, Bayesian information ciriterion)以找到最佳簇數的大致范圍。

    貝葉斯信息准則又稱為Schwarz’s information criterion,是由G. Schwarz[2]提出的用於模型評估的准則。

    假設有$r $個模型$M_1,...,M_r $,模型$M_i $由概率函數$f_i(x; \theta_i) $畫,其中$\theta_i $的參數空間為$k_i $維,即$\theta_i \in \Theta_i \subset \mathbb R^{k_i} $,現有$n $個觀測值$x_1,...,x_n $,如何為已有的觀測值,選擇出最優的模型,是Schwarz提出BIC的目的。BIC的計算公式如下:$$ \begin{equation} \mathrm{BIC}(M_i) = -2 \ln f_i(x; \hat \theta_i) + k_i \ln n \end{equation} $$式中$\hat \theta_i $為$f_i(x;\theta) $的極大似然估計。對於上述$r $上模型,由公式計算得到的BIC值最小,則是符合上述$n $個觀測值的最優模型。

    按照(9)式,可如下式計算聚類$\mathbf C_J = \{C_1,...,C_J\} $:$$ \begin{equation} \mathrm {BIC}(\mathbf C_J) = -2 L_{\mathbf C_J} + K \ln N \end{equation} $$根據“對數似然距離”一文中(16)式,$L_{\mathbf C_J} $為簇划分對數似然值,且有$$ L_{\mathbf C_J} = \sum_{j=1}^J L_{C_j} = \sum_{j=1}^J \zeta_j $$ $\zeta_j $見上文(5)式;因為每個連續型屬性都有期望和方差2個參數,每個分類型屬性都有取值個數$\epsilon_t - 1 $個參數,所以上式中$$ K = J \left ( 2 D_1 + \sum_{t=1}^{D_2} (\epsilon_t - 1) \right ) $$ $N $表示$\mathbf C_J $中包含的數據點的總數。

    將由凝聚法得到的所有聚類$\mathbf C_{J_0}, ..., \mathbf C_2, \mathbf C_1 $,代入到(10)式中,得到所有聚類的BIC值,$\mathrm {BIC}(\mathbf C_1), ..., \mathrm {BIC}(\mathbf C_{J_0}) $,然后根據相鄰聚類BIC值的差值:$$ \begin{equation} \Delta_{\mathrm {BIC}}(J) = \mathrm{BIC} (\mathbf C_J) - \mathrm{BIC} (\mathbf C_{J+1}), \quad J=1,...,J_0 \end{equation} $$計算出BIC值的變化率:$$ \begin{equation} r_1(J) = \frac{\Delta_{\mathrm{BIC}}(J)}{\Delta_{\mathrm{BIC}}(1)} \end{equation} $$根據(12)式對最佳簇數作初步估計:如果$\Delta_{\mathrm{BIC}}(1) < 0 $,最佳簇數設為1,略去后續“精定”步驟;否則,找出所有$r_1(J) < 0.04 $的$J $,置最小的$J $為最佳簇數的初步估計,即$ J_I = \min \{ J \in \{ 1,...,J_0 \}: r_1(J) < 0.04 \} $.

    2)精定是從最佳簇數的初步估計$J_I $開始,依據前后兩個聚類中最近簇距離的比值,精確定位最佳簇數。

    首先設有聚類$\mathbf C_J = \{ C_1,...,C_J\} $,定義聚類$\mathbf C_J $中最近簇的距離為:$d_{\min}(\mathbf C_J) = \min \{ d(C_j, C_{j'}): C_j \neq C_{j'} \in \mathbf C_J \} $,其中$d(C_j, C_{j'}) $是由(8)式定義的對數似然距離。

    聚類$\mathbf C_J $和$\mathbf C_{J+1} $的最近簇距離的比值定義為:$$ \begin{equation} r_2(J) = \frac{d_{\min}(\mathbf C_J)}{d_{\min}(\mathbf C_{J+1})}, \quad J = J_I,...,2 \end{equation} $$從$r_2(J) $的定義可知,根據凝聚法的聚類過程,從聚類$\mathbf C_{J+1} $到$\mathbf C_J $是通過將前者中距離最近的兩個簇合並得到的,因此一般有$d_{\min}(\mathbf C_{J+1}) \le d_{\min}(\mathbf C_J) $,或者說一般有$r_2(J) \ge 1 $.

    從所有最近簇距離的比值$\{ r_2(J): J=2,...,J_I \} $中找出最大的兩個,記錄對應簇數$J_1 = \max_{J\in \{ 2,...,J_I\}} \{r_2(J)\} $和$J_2 = \max_{J\in \{ 2,...,J_I\} \setminus \{J_1\}} \{r_2(J)\} $,然后從$J_1 $和$J_2 $中篩選出最佳簇數:$$ \begin{equation} J^* = \begin{cases} J_1, & \text{if } J_1 / J_2 > 1.15 \\ \max \{ J_1, J_2 \}, & \text{otherwise} \end{cases} \end{equation} $$至此,完成了最佳簇數$J^* $的確定,輸出$\mathbf C_{J^*} $作為最終的聚類結果。

3、簇屬數據點分派(Cluster Membership Assignment)

    經過上述計算,得到了最終的聚類$\mathbf C_{J^*} = \{ C_1, C_2,..., C_{J^*} \} $,但是並不知道該聚類中的各簇都具體地包含了那些點,只知道各簇的聚類特征,因此需要通過此步驟完成數據集$\mathfrak D $中各數據點到相應簇的分派。

    如果整個算法過程中沒有進行離群點處理操作,分派工作就十分簡單,只需逐個將數據集$\mathfrak D $中的數據點$\vec x_i $視為單點的簇,通過計算數據點與聚類$\mathbf C_{J^*} $中各簇的對數似然距離$d(\{\vec x_i\}, C_j) $,將該數據點放入最近的簇中即可。

    然而如果算法的實施過程中考慮了離群點,則設置閾值$$ \begin{equation} \tau_d = \sum_{s=1}^{D_1} \ln \rho_s + \sum_{t=1}^{D_2} \ln \epsilon_t \end{equation} $$其中$\rho_s $表示第$s $個連續型屬性的取值范圍,$\epsilon_t $表示第$t $個分類型屬性的取值數目。對於數據點$\vec x_i $而言,如果$d(\{\vec x_i\}, C_{j^*}) = \min_{C_j \in \mathbf C_{J^*}} \{ d(\{\vec x_i\}, C_j) \} $且$d(\{\vec x_i\}, C_{j^*}) < \tau_d $,將$\vec x_i $分派至簇$ C_{j^*} $中;否則視數據點$\vec x_i $為離群點。

參考文獻


[1] Chiu T, Fang D P, Chen J, et al. A robust and scalable clustering algorithm for mixed type attributes in large database environment[C]// ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 2001:263-268.

[2] Schwarz G. Estimating the Dimension of a Model[J]. Annals of Statistics, 1978, 6(2): pp. 15-18.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM