聚類簡介
聚類任務
在實際問題中,樣本大多數是無標記的,而機器學習的目的是通過對無標記訓練樣本的學習來揭示數據的內在性質和規律。此類方法應用最廣的是“聚類”(clustering)。
形式化的來說,在“無監督學習”中,聚類試圖將樣本劃分爲若干個通常是不相交的子集,每個子集稱爲一個“簇”(cluster)。聚類的作用:
- 作爲一種探索性的方法,用於尋找數據內在特點和分佈規律
- 作爲分類等其他學習任務的前驅過程。作爲分類的預處理,不直接解決數據分析。
我們要做的事情,無外乎就是把相似的樣本歸爲一類,把不同的類別區分開。如上圖所示。
但是問題來了:怎麼劃分樣本,怎麼評價劃分的好壞? 回答這個問題,需要先討論聚類算法涉及的兩個基本問題–性能度量和距離計算。
性能度量
聚類的性能度量和“監督學習”的性能度量作用類似,對於聚類結果,我們需要一個評價標準來評估好壞;同時,給定的性能度量如同損失函數一樣,給了聚類過程優化目標,這樣聚類能得到更好的結果。
聚類是將樣本劃分爲若干個簇,從直觀的上來看,我們希望同一簇的樣本儘可能相似,不同簇的樣本儘可能不同,這類似線性模型-線性判別分析的度量定義。形式化的來說,聚類結果的“簇內相似度”(intra-cluster similarity)高且“簇間相似度”(inter-cluster similarity)低。如下圖:
聚類性能度量大概分爲兩類:
- 一類是將聚類結果與某個“參考模型”進行比較,稱爲“外部指標”(external index)
- 另一類是直接考察聚類結果而不利用任何參考模型,稱爲“內部指標”(internal index)
對於有參考模型的
下面引入一些定義:
對數據集
集合
因此有
基於上面的定義,有下面常用的聚類性能度量外部指標:
Jaccard係數(Jaccard Coefficient,簡稱JC)
所有屬於同一類的樣本對,同時在JC=aa+b+c C,C∗ 中隸屬於同一類的樣本對的比例。FM指數(Fowlkes and Mallows Index,簡稱FMI)
在FMI=aa+b⋅aa+c−−−−−−−−−−−√ C 中屬於同一類的樣本對中,同時屬於C∗ 的樣本對的比例爲p1 ;在C∗ 中屬於同一類的樣本對中,同時屬於C 的樣本對的比例爲p2 ,FMI就是p1 和p2 的幾何平均。Rand指數(Rand Index,簡稱RI)
RI=2(a+d)m(m−1) ARI指數(Adjusted Rand Index,ARI):
使用RI有個問題,對於隨機聚類,RI指數不保證接近0。而ARI指數可通過隨機聚類情況下的RI(即ARI=RI−E[RI]max(RI)−E[RI] E[RI] )來解決。
顯然,上述性能度量的結果值均在
直接考察聚類結果的
考慮聚類結果的簇劃分爲
其中,
基於上面的定義,下面是常用的聚類性能度量內部指標:
DB指數( Davies-Bouldin Index,簡稱DBI)
給定兩個簇,每個簇樣本之間平均值之和和比上兩個簇的中心點之間的距離作爲度量。然後考察該度量對所有簇的平均值。顯示DBI越小越好。DBI=1k∑i=1kmaxj≠i(avg(Ci)+avg(Cj)dcen(Ci,Cj)) Dunn指數( Dunn Index,簡稱DI)
任意兩個簇之間最近的距離的最小值,除以任意一個簇內距離最遠的兩個點的距離的最大值。DI越大越好。DI=min1≤i<k{minj≠i(dmin(Ci,Cj)max1≤l≤kdiamCl)}
顯然,DBI的值越小越好,DI值相反,越大越好
距離計算
在上面度量性能內部指標中,我們用到了
在實際聚類過程中,我們會對數據做預處理,如果處理的不當,會影響聚類的結果。如下圖:
分別對x軸和y軸放縮0.2,會直接影響聚類結果。故我們在做聚類時,需要一個好的距離度量標準。
形式上,度量距離函數
- 非負性:
dist(xi,xj)≥0 - 同一性:
dist(xi,xj)=0 當前僅當xi=xj - 對稱性:
dist(xi,xj)=dist(xj,xi) - 直遞性:
dist(xi,xj)≤dist(xi,xk)+dist(xk,xj)
給定樣本
p=1 ,即爲Manhattan distance:distman(xi,xj)=||xi−xj||1=∑u=1n|xiu−xju| p=2 ,即爲Euclidean distance:disted(xi,xj)=||xi−xj||2=∑u=1n|xiu−xju|2−−−−−−−−−−−−√
有序屬性和無序屬性下的距離測量
在討論距離計算時,屬性上是否定義了“序”關係更爲重要。例如定義域
對於無序屬性可採用VDM(Value Difference Metric),令
將Minkowski distance和VDM結合即可處理混合屬性。假定有
當樣本空間中不同屬性的重要性不同,可使用“加權距離”.例如:
k均值算法
見我的Blog 機器學習Chapter3-(聚類分析)Python實現K-Means算法
高斯混合模型與EM算法
見我的Blog機器學習Chapter3-(聚類分析)詳解高斯混合模型與EM算法(Python實現)
密度聚類
密度聚類即“基於密度的聚類”(density-based clustering),此類算法假設聚類結構能通過樣本分佈的緊密程度確定。通常情況下,密度聚類算法從樣本密度的角度考察樣本之間的可連接性,並基於可連接樣本不斷擴展聚類簇以獲得最終的聚類結果。
例如下面的數據集就很適合用密度聚類:
DBSCAN算法
DBSCAN是一種著名的密度聚類算法,基於一組“領域”來刻畫樣本分佈的緊密程度。
一些定義的定義圖
DBSCAN算法流程
層次聚類
實際中的聚類要求
scikit-learn官方給出了一份各種聚類模型的參數調整和使用場景的建議表格。如下:
模型 | 關鍵參數 | 使用場景 |
---|---|---|
K均值算法 | 簇的數量 | 通用的聚類方法,用於均勻的簇的大小,簇的數量不多的情況 |
GMM算法 | 簇數量等 | 用於平坦的集合結構,對密度估計很合適 |
DBSCAN算法 | 領域 |
用於不均勻的簇大小,以及非平坦的集合結構 |
Agglomerative Clustering算法 | 簇的數量,鏈接類型 | 用於簇的數量較多,有連接約束的情況 |
上面介紹了多種聚類算法,不同的聚類算法有着不同的應用背景。聚類也許是機器學習算法中“新算法”出現最多、最快的領域。一個重要的原因是聚類不存在客觀的標準。
在實際應用中,聚類簇的數量的選擇選取通過結合性能度量指標和具體問題分析。例如給出了ARI隨n_clusters曲線,通常選擇ARI最大值附近的一批n_clusters。
實際中可能潛在的簇數量數量較大,從0開始繪製ARI隨n_clusters曲線不太現實,則可以大概估計簇的數量範圍,通過降維技術觀測原始數據集經過降維後在平面或三維空間的分佈規律,從中大概估計出簇的量級。或者通過他人求解類似的聚類問題來獲取這一類問題的近似簇量級。