跳到主要內容

ML|群集分析 Clustering 其二

本篇文章是介紹群集分析的第二篇文章,前一篇文章請參考《ML | 群集分析 Clustering 其一》。本文的重點在於簡介這些分群演算法的主要差異,並補充其 R 或者 Python 實作的範例,但不會提及這些分群演算法的數學方程式推導。

1. 群集分析的主要功能
2. 「階層式分群」與「切割式分群」
3. k-means演算法及其變體
4. k-means之外的切割式分群演算法
5. 「剛性分群」與「柔性分群」
6. 如何決定最佳分群數?


4. k-means之外的切割式分群演算法
為了避免自己的眼光太狹隘只認是熱門款,所以除了 k-means 家族之外的分群演算法也多少來瞭解一下。

# Spectral Clustering
有時候,我們所欲分析的資料,可能不見得都能像使用 K-means 家族的分群演算法時那樣,資料能夠以群的中心呈現數個不同的「圓 」。有時候,手頭上的資料可能呈現特殊形狀的分佈,這時候,基於圖論(Graph Theory)的「譜分群」(Spectral Clustering)就非常管用!
以下方四張圖為例,右上角的圖是使用 K-means 演算法而產生的分群結果,右下角是使用 Spectral Clustering 而產生的分群結果,發現其奧妙之處了嗎?




# DBSCAN & OPTICS Clustering
DBSCAN(Density-based spatial clustering of applications with noise)與OPTICS(Ordering points to identify the clustering structure)是除了 K-means 家族之外,另外兩項較知名的分群演算法。

DBSCAN 主要的概念是:所有屬於同一群的資料樣本,在給定的範圍當中必須包含一定數量的樣本數。也就是說,在給定的範圍內,屬同一類的集合必須超過一定的密集程度,因此,DBSCAN 是一種基於密度的分群方法,而範圍的形狀會根據測量距離的方式決定。其優缺點整理如下:

優點:
  1. 此算法與基於距離的分群演算法(例如:K-means 家族)不同,可以任意形狀分群(基於距離的分群演算法大多以類似圓形或凸形的形狀分群)。
  2. 不須事先指定分群的數目。
  3. 能分辨雜訊點。

缺點:
  1. 較容易受人為設定參數 epsilon 所影響。epsilon 較大時,會將距離較遠的資料樣本分為同一群,使得群的數量會較少;反之,epsilon 較小時,考慮資料樣本間的距離也較近,將出現大量含括資料樣本較少的群。
  2. 資料集的性質(包括集中密度差異大或屬高維度資料集等)會使 epsilon 和測距的方式選取不易。

OPTICS 則為 DBSCAN 的拓展,但解決了 DBSCAN 依賴給定初始參數的特性,改進對初始參數敏感度過高的問題。OPTICS 的輸出結果是一個有序的數列,涵括各樣密度的分群結果,也就是以排序的方式來決定分群的結構。

參考資料與 R 與 Python 程式碼範例:
  1. RPubs - Spectral Clustering
  2. Clustering method 1 [DBSCAN] - Taiwan AI Academy - Medium
  3. Clustering method 3 [Spectral Clustering] - Taiwan AI Academy - Medium
  4. Clustering method 6 [OPTICS] - Taiwan AI Academy - Medium
  5. 譜分群 (Spectral Clustering) ─ 運用圖論 (Graph Theory) 進行分群–David's Perspective


5. 「剛性分群」與「柔性分群」
上述所介紹的分群演算法都是屬於「剛性分群」(Hard Clustering),即所切割出來分群結果,原則上是不互相交疊的。當資料的分佈潛在著明顯特徵、或者資料量大的時候,採用剛性分群的效果可能不錯。但有時候,資料的分佈可能不只呈現怪異分佈的情形,甚至資料的群跟群之間還會有重疊的情形發生。
以下圖為例,中間兩張使用 K-means 演算法的分群結果,群與群之間壁壘分明,但若採用 GMM 演算法,所偵測到的資料群就有彼此交疊的情況發生,而有時候,採用「柔性分群」(Soft Clustering),可能會收穫較好的效果。 



柔性分群通常有以下優點:
  1. 能說明該分群結果有多少程度能代表該資料
  2. 能說明資料有多少程度屬於該分群,又有多少程度屬於另一群
  3. 對於雜訊具有較佳的容忍度

以下所要介紹的 Gaussian Mixture Model(GMM)、Fuzzy Clustering、Gray Clustering 都是屬於柔性分群演算法。


# Expectation-Maximization Algorithm & Gaussian Mixture Model
「最大期望值分群」(Expectation-Maximization Algorithm,EM-Model)其是使用某一組機率密度函數來取代剛性分群演算法的距離函數。該方法常見於 AI 當中的電腦視覺應用。諸多 EM Model 當中,又以Gaussian Mixture Model(GMM)最為常見,其就是使用高斯分配(Gaussian Distribution,也就是常態分配),來描述資料當中隸屬於某群集的機率密度。


# Fuzzy Clustering & Grey Clustering
「模糊分群」(Fuzzy Clustering)與「灰分群」(Grey Clustering)是使用模糊理論與灰色系統理論與來計算資料當中的距離。這兩種分群演算法執行上也十分簡便容易,時常能夠在學術領域看到其相關應用,但在業界實務反而較少看到,不曉得是否是因一提到分群,許多業界分析師都優先採用 K-means 家族的相關分群演算法來處理的緣故?畢竟,非監督式學習的功能主要是在對資料進行初探,但通常能帶來較多潛在價值的,是屬於監督式演算法,例如分類或者預測性建模。且業界的專案執行當中,時間就是金錢,如果使用 K-means 家族或者 Spectral Clustering 等就能達成階段性目的,那自然沒必要把每個分群演算法通通拿來套一遍。

參考資料與 R 程式碼範例:
  1. RPubs - Fuzzy C-Means
  2. Clustering 分群懶人包 - Taiwan AI Academy - Medium
  3. [Algorithm] Compare K-means and GMM clustering | Jarvus
  4. 速記AI課程-機器學習與演算法概論(一) - Jimmy Kao - Medium


6. 最佳分群數目
前面介紹了這麼多分群演算法,那總得要知道如何判斷最佳分群數目才行,常見的檢定方法又有以下幾種 Elbow Method、Silhouette score、Gap statistic、Canopy。而詳細的演算法細節以及程式碼範例,可直接參考以下頁面:

參考資料與 R & Python 程式碼範例:

  1. [AI] Clustering決定分群數的方法 - pchome lam - Medium 
  2. RPubs - R筆記–(9)分群分析(Clustering)
  3. Hierarchical Clustering 階層式分群 | Clustering 資料分群 | R 統計
  4. Partitional Clustering 切割式分群 | Kmeans, Kmedoid | Clustering 資料分群


小結:
下列這個網站對各種不同特性的分群演算法做了個彙整表格,並以 Python 示範了部分演算法。從表格當中可以看到,依舊有些分群演算法是本文沒有介紹到的,而本文所提的每個演算法,也不是全都收錄在該網頁的表格內。

資料建模-聚類分析-K-Means演算法 - IT閱讀

機器學習的知識範圍又廣又深,我們有限的人生當中當然無法全部習得,學了也不見得用得到,但所謂「書到用時方恨少」,一些常見的東西還是得該知道,如此一來在解決問題時,才不會因為手頭上的工具有限而受到限制。