左圖為原始資料分布狀況,但經過一些算法處裡過後,可以轉換為右圖狀況,呈現為一群群資料狀態,在這種狀態下,就可以給予所有資料標籤,以利之後資料的運用。
此篇主要為整理常見的Cluster方法 (K-means、Mean Shift、DBSCAN、OPTICS),應用於不同資料的狀態下,簡要介紹各方法。
K-means
K-means是一種經典算法,簡單且快速。
其算法需要先設定K值,需要將數據分為K類,之後經過多次迭代過後,可以找出類別的重心及聚類後的結果。
其步驟為:
1. 設定K值,將數據分為K類
2. 在特徵空間中隨機設定K個群體中心
3. 計算所有數據對K個群心的距離
4. 將數據以K個群心最近距離對數據進行分類
5. 將分類完的數據重新計算中心,更新群心點
6. 重複3~5步驟,直到群心點無太大變動,結束聚類
其結果如下:
缺點:
1. 對於離群點和孤立點敏感
2. K值難以抉擇
3. 初始聚類中心會影響聚類結果
4. 只能聚類凸型數據
Mean Shift
Mean shift 演算法是基於核密度估計(Kernel Density Estimation, KDE)的爬山演算法,可用於聚類、影象分割、跟蹤等。可以將數據想像為一種資料分布狀況,核密度估計是將離散資料轉換為連續資料的方法,估計出數據間密度的狀況,如下圖:
Mean Shift 算法會沿著KDE的梯度方向,集中聚類,逐次迭代,之後便可找到多個聚類中心。
其確切算法為:
1. 從數據中選擇一資料點P
2. 將距離該點bandwidth內的所有資料點分為同一群,記為集合G
3. 計算G之重心,同時計算該資料點到重心所需的位移量D
4. 使該資料點往重心移動,Pnew = P + D
5. 重複2~4步驟,使重心不再移動,即完成聚類。(其意義等同於尋找資料的局部極大值,以此為聚類中心)
優點:
- 可以應用於任意形狀之分群
- 不須指定分群數量
缺點:
- 計算複雜度較高,運算量大
- 聚類結果會受到bandwidth影響。bandwidth過小時,造成過多局部最大值,分群較為細膩
DBSCAN
Density-Based Spatial Clustering of Applications with Noise
DBSCAN是在 1996 年由Martin Ester, Hans-Peter Kriegel, Jörg Sander 及 Xiaowei Xu 提出的聚類分析算法,為基於”密度”的一種聚類方法,該算法可以將附近的點判斷為同一群組,並且可以分出局外點。
1. 先定義epsilon ε及minPts
ε 為計算密度範圍之半徑,minPts為該範圍內所需之最少資料點數量。
2.尋找核心點
其需符合條件:如果一個點 p 在距離 ε 範圍內有至少 minPts 個點(包括自己),這個點則為核心點,剩餘在 ε 內的資料點則為 p 直接可達之資料點。
同時定義"直接可達",沒有任何資料料點是由非核心點直接可達的。而直接可達為非對稱性關係,沒有點是由非核心點可達的,但非核心點可以是由其他點可達的。
3.將所有核心點以直接可達之條件聚類
假設核心點p1、p2為直接可達,則判斷為同一群,而所有由核心點直接可達之資料點皆分類為該群中。
假設核心點p1、p2不為直接可達,則這兩個核心點區分為兩類。
每一個群內必須至少擁有一個核心點,其餘不可由任何核心點直接可達的資料點則為局外點。
左圖中,紅色點 A 為核心點,對於所有紅色點互相為直接可達,而 B、C則為非核心點,但是可由其他核心點直接可達。N則為局外點,沒有任何點可以達成直接可達條件。
優點:
- 不須指定分群數量
- 可以應用於任意形狀之分群 (如下圖)
- 能分辨出局外點(雜訊)
- 如對資料擁有足夠的了解,調整適當的參數可以獲得較佳分類
缺點:
- 如果資料分布狀態擁有不同的密度,彼此間差異過大時,無法提供良好聚類結果(同一組參數無法適用所有數據分布狀況)
- 高維度數據會產生與第1點相符之狀況,參數難以選擇
- 對於資料不夠了解,難以選擇 ε 及 minPts