數據科學中必須熟知的六大聚類算法

1. K-Means(K均值)聚類

算法步驟:(1) 首先我們選擇一些類/組,並隨機初始化它們各自的中心點。中心點是與每個數據點向量長度相同的位置。這需要我們提前預知類的數量(即中心點的數量)。(2) 計算每個數據點到中心點的距離,數據點距離哪個中心點最近就劃分到哪一類中。(3) 計算每一類中中心點作為新的中心點。(4) 重複以上步驟,直到每一類中心在每次迭代後變化不大為止。也可以多次隨機初始化中心點,然後選擇運行結果最好的一個。下圖演示了K-Means進行分類的過程:

數據科學中必須熟知的六大聚類算法

優點:速度快,計算簡便缺點:我們必須提前知道數據有多少類/組。K-Medians是K-Means的一種變體,是用數據集的中位數而不是均值來計算數據的中心點。K-Medians的優勢是使用中位數來計算中心點不受異常值的影響;缺點是計算中位數時需要對數據集中的數據進行排序,速度相對於K-Means較慢。

2. 均值漂移聚類

均值漂移聚類是基於滑動窗口的算法,來找到數據點的密集區域。這是一個基於質心的算法,通過將中心點的候選點更新為滑動窗口內點的均值來完成,來定位每個組/類的中心點。然後對這些候選窗口進行相似窗口進行去除,最終形成中心點集及相應的分組。具體步驟:1. 確定滑動窗口半徑r,以隨機選取的中心點C半徑為r的圓形滑動窗口開始滑動。均值漂移類似一種爬山算法,在每一次迭代中向密度更高的區域移動,直到收斂。2. 每一次滑動到新的區域,計算滑動窗口內的均值來作為中心點,滑動窗口內的點的數量為窗口內的密度。在每一次移動中,窗口會想密度更高的區域移動。3. 移動窗口,計算窗口內的中心點以及窗口內的密度,知道沒有方向在窗口內可以容納更多的點,即一直移動到圓內密度不再增加為止。4. 步驟一到三會產生很多個滑動窗口,當多個滑動窗口重疊時,保留包含最多點的窗口,然後根據數據點所在的滑動窗口進行聚類。下圖演示了均值漂移聚類的計算步驟:

數據科學中必須熟知的六大聚類算法

下面顯示了所有滑動窗口從頭到尾的整個過程。每個黑點代表滑動窗口的質心,每個灰點代表一個數據點。

數據科學中必須熟知的六大聚類算法

優點:(1)不同於K-Means算法,均值漂移聚類算法不需要我們知道有多少類/組。(2)基於密度的算法相比於K-Means受均值影響較小。缺點:(1)窗口半徑r的選擇可能是不重要的。

3. 基於密度的聚類方法(DBSCAN)

與均值漂移聚類類似,DBSCAN也是基於密度的聚類算法。具體步驟:1. 首先確定半徑r和minPoints. 從一個沒有被訪問過的任意數據點開始,以這個點為中心,r為半徑的圓內包含的點的數量是否大於或等於minPoints,如果大於或等於minPoints則改點被標記為central point,反之則會被標記為noise point。2. 重複1的步驟,如果一個noise point存在於某個central point為半徑的圓內,則這個點被標記為邊緣點,反之仍為noise point。重複步驟1,知道所有的點都被訪問過。優點:不需要知道簇的數量缺點:需要確定距離r和minPoints

4. 用高斯混合模型(GMM)的最大期望(EM)聚類

K-Means的缺點在於對聚類中心均值的簡單使用。下面的圖中的兩個圓如果使用K-Means則不能作出正確的類的判斷。同樣的,如果數據集中的點類似下圖中曲線的情況也是不能正確分類的。

數據科學中必須熟知的六大聚類算法

使用高斯混合模型(GMM)做聚類首先假設數據點是呈高斯分佈的,相對應K-Means假設數據點是圓形的,高斯分佈(橢圓形)給出了更多的可能性。我們有兩個參數來描述簇的形狀:均值和標準差。所以這些簇可以採取任何形狀的橢圓形,因為在x,y方向上都有標準差。因此,每個高斯分佈被分配給單個簇。所以要做聚類首先應該找到數據集的均值和標準差,我們將採用一個叫做最大期望(EM)的優化算法。下圖演示了使用GMMs進行最大期望的聚類過程。

數據科學中必須熟知的六大聚類算法

具體步驟:1. 選擇簇的數量(與K-Means類似)並隨機初始化每個簇的高斯分佈參數(均值和方差)。也可以先觀察數據給出一個相對精確的均值和方差。2. 給定每個簇的高斯分佈,計算每個數據點屬於每個簇的概率。一個點越靠近高斯分佈的中心就越可能屬於該簇。3. 基於這些概率我們計算高斯分佈參數使得數據點的概率最大化,可以使用數據點概率的加權來計算這些新的參數,權重就是數據點屬於該簇的概率。4. 重複迭代2和3直到在迭代中的變化不大。GMMs的優點:(1)GMMs使用均值和標準差,簇可以呈現出橢圓形而不是僅僅限制於圓形。K-Means是GMMs的一個特殊情況,是方差在所有維度上都接近於0時簇就會呈現出圓形。(2)GMMs是使用概率,所有一個數據點可以屬於多個簇。例如數據點X可以有百分之20的概率屬於A簇,百分之80的概率屬於B簇。也就是說GMMs可以支持混合資格。

5. 凝聚層次聚類

層次聚類算法分為兩類:自上而下和自下而上。凝聚層級聚類(HAC)是自下而上的一種聚類算法。HAC首先將每個數據點視為一個單一的簇,然後計算所有簇之間的距離來合併簇,知道所有的簇聚合成為一個簇為止。下圖為凝聚層級聚類的一個實例:

數據科學中必須熟知的六大聚類算法

具體步驟:1. 首先我們將每個數據點視為一個單一的簇,然後選擇一個測量兩個簇之間距離的度量標準。例如我們使用average linkage作為標準,它將兩個簇之間的距離定義為第一個簇中的數據點與第二個簇中的數據點之間的平均距離。2. 在每次迭代中,我們將兩個具有最小average linkage的簇合併成為一個簇。3. 重複步驟2知道所有的數據點合併成一個簇,然後選擇我們需要多少個簇。層次聚類優點:(1)不需要知道有多少個簇(2)對於距離度量標準的選擇並不敏感缺點:效率低

6. 圖團體檢測(Graph Community Detection)

當我們的數據可以被表示為網絡或圖是,可以使用圖團體檢測方法完成聚類。在這個算法中圖團體(graph community)通常被定義為一種頂點(vertice)的子集,其中的頂點相對於網絡的其他部分要連接的更加緊密。下圖展示了一個簡單的圖,展示了最近瀏覽過的8個網站,根據他們的維基百科頁面中的鏈接進行了連接。

數據科學中必須熟知的六大聚類算法

模塊性可以使用以下公式進行計算:

數據科學中必須熟知的六大聚類算法

其中L代表網絡中邊的數量,Aij代表真實的頂點i和j之間的邊數, ki,kj代表每個頂點的degree,可以通過將每一行每一列的項相加起來而得到。兩者相乘再除以2L表示該網絡是隨機分配的時候頂點i和j之間的預期邊數。所以

數據科學中必須熟知的六大聚類算法

代表了該網絡的真實結構和隨機組合時的預期結構之間的差。當Aij為1時,且

數據科學中必須熟知的六大聚類算法

很小的時候,其返回值最高。也就是說,當在定點i和j之間存在一個非預期邊是得到的值更高。

數據科學中必須熟知的六大聚類算法

是克羅內克δ函數(Kronecker-delta function). 下面是其Python解釋:

<code>def Kronecker_Delta(ci,cj):    if ci==cj:        return 1    else:        return 0/<code>

通過上述公式可以計算圖的模塊性,且模塊性越高,該網絡聚類成不同團體的程度越好,因此通過最優化方法尋找最大模塊性就能發現聚類該網絡的最佳方法。組合學告訴我們對於一個僅有8個頂點的網絡,就存在4140種不同的聚類方式,16個頂點的網絡的聚類方式將超過100億種。32個頂點的網絡的可能聚類方式更是將超過10^21種。因此,我們必須尋找一種啟發式的方法使其不需要嘗試每一種可能性。這種方法叫做Fast-Greedy Modularity-Maximization(快速貪婪模塊性最大化)的算法,這種算法在一定程度上類似於上面描述的集聚層次聚類算法。只是這種算法不根據距離來融合團體,而是根據模塊性的改變來對團體進行融合。具體步驟:1. 首先初始分配每個頂點到其自己的團體,然後計算整個網絡的模塊性 M。2. 第 1 步要求每個團體對(community pair)至少被一條單邊鏈接,如果有兩個團體融合到了一起,該算法就計算由此造成的模塊性改變 ΔM。3. 第 2 步是取 ΔM 出現了最大增長的團體對,然後融合。然後為這個聚類計算新的模塊性 M,並記錄下來。4. 重複第 1 步和 第 2 步——每一次都融合團體對,這樣最後得到 ΔM 的最大增益,然後記錄新的聚類模式及其相應的模塊性分數 M。5. 重複第 1 步和 第 2 步——每一次都融合團體對,這樣最後得到 ΔM 的最大增益,然後記錄新的聚類模式及其相應的模塊性分數 M。

原文鏈接:https://blog.csdn.net/Katherine_hsr/article/details/79382249

【數據小鹽罐兒】一個“鹹”的無聊的數據分析公眾號,不定期分享一些有趣好玩的項目以及大量的學習資源


分享到:


相關文章: