1. 程式人生 > 其它 >聚類演算法(相似度與效能度量)

聚類演算法(相似度與效能度量)

技術標籤:聚類機器學習資料探勘python人工智慧

1.相似度度量的方法有距離計算餘弦度計算核函式計算

2.聚類演算法效能度量分為外部指標內部指標

3.外部指標大多存在一個問題:需要知道真實資料的標記類資訊(類似監督學習)

4.內部指標主要有三個:輪廓係數Caliniski-Harabaz指數DB指數

5.輪廓係數處於[-1,1]的範圍內,-1表示錯誤的聚類,1表示高密度的聚類

6.Caliniski-Harabaz指數同一簇類的資料集儘可能密集,不同簇類的資料集儘可能遠離

7.DB指數的下限為0,DB指數越小,聚類效能越好

我們知道,聚類演算法的核心就是如何定義簇,通常採取相似性度量

,本文我們就對相似性以及聚類結果好壞的評判依據做個介紹。話不多說,進入正題。

相似度計算方式

評價樣本間相似度常用的方法是距離計算、餘弦相似度計算和核函式計算,若樣本間的距離越小,則相似度越高;若樣本間的核函式值越大,則相似度越高。

核函式一文中,我們對核函式做個深入的介紹,以及給出了常用核函式的python實現,這裡就不再贅述,直接介紹距離和餘弦相似度。

距離計算最常用方法的是閔可夫斯基距離(Minkowski distance)

p=1時,閔可夫斯基距離即曼哈頓距離(Manhattan distance);

p=2時,閔可夫斯基距離即歐氏距離(Euclidean distance)

餘弦相似度就是向量夾角的餘弦值:

用python可以實現:

fromsklearn.metrics importpairwise_distances
fromsklearn.metrics.pairwise importpairwise_kernels

X = np.array([[2, 3]])
Y = np.array([[0, 1]])
pairwise_distances(X, Y, metric='euclidean')
pairwise_distances(X, Y, metric='manhattan')
pairwise_distances(X, Y, metric='cosine') #這裡計算出來的是(1-向量夾角餘弦值)


fromsklearn.metrics.pairwise importcosine_similarity #計算矩陣X兩兩樣本的餘弦相似度
X = pd.DataFrame([[1,1,0,1,0],[1,0,1,0,0],[0,1,0,0,1],[0,0,1,1,1]],columns=['a','b','c','d','e'])
print(cosine_similarity(X))

效能度量

聚類效能度量根據訓練資料是否包含標記資料分為兩類,一類是將聚類結果與標記資料進行比較,稱為外部指標;另一類是直接分析聚類結果,稱為內部指標。

外部指標大多存在一個問題,就是需要知道真實資料的標記類資訊,因此在實踐中很難得到應用(類似監督學習)。實踐過程中也常常用內部指標衡量,因此我們著重介紹內部指標。

  • 外部指標

先介紹一點預備知識.

設樣本集 Sn={x1,x2,.....,xn},樣本集合的真實類別 U={u1,u2,...,ur},樣本集合的聚類結果 V={v1, v2,...,vc}

我們定義:

a:在U中為同一類且在V中也為同一類的資料點對數(TP)

b:在U中為同一類且在V中不是同一類的資料點對數(FN)

c:在U中不是同一類且在V中為同一類的資料點對數(FP)

d:在U中不是同一類且在V中也不是同一類的資料點對數(TN)

舉個例子:

若真實簇向量[0,0,0,1,1,1],預測簇向量[0,0,1,1,2,2],則a = 2,d = 1

1.RI(蘭德係數)

RI是衡量兩個簇類的相似度,假設樣本個數是n,定義:

RI係數的缺點是隨著聚類數的增加,隨機分配簇類向量的RI也逐漸增加,這是不符合理論的,隨機分配簇類標記向量的RI應為0

2.ARI(調整蘭德係數)

ARI解決了RI不能很好的描述隨機分配簇類標記向量的相似度問題,ARI的定義:

其中E表示期望,max表示取最大值。

3.Fowlkes-Mallows分數

Fowlkes-Mallows指數(FMI)是成對準確率和召回率的幾何平均值:

附一下sklearn包呼叫方式

fromsklearn importmetrics

labels_true =[0,0,0,1,1,1]
labels_pred =[0,0,1,1,2,2]

ARI = metrics.adjusted_rand_score(labels_true, labels_pred)
FM = metrics.fowlkes_mallows_score(labels_true,labels_pred)

除此之外,還有AMI(調整的互資訊指數),同質性,完整性和V-measure都是衡量外部指標的。

內部指標

1.輪廓係數

每個樣本有對應的輪廓係數,輪廓係數由兩個得分組成:

  • a:樣本與同一簇類中的其他樣本點的平均距離

  • b:樣本與距離最近簇類中所有樣本點的平均距離

每個樣本的輪廓係數定義為:

注:一組資料集的輪廓係數等於該資料集中每一個樣本輪廓係數的平均值。

該評價指標具備特點:

  • 輪廓係數處於[-1,1]的範圍內,-1表示錯誤的聚類,1表示高密度的聚類,0附近表示重疊的聚類

  • 當簇密度較高且分離較大時,聚類的輪廓係數亦越大

  • 凸簇的輪廓係數比其他型別的簇高

2.Caliniski-Harabaz指數

評價聚類模型好的標準:同一簇類的資料集儘可能密集,不同簇類的資料集儘可能遠離。

定義簇類散度矩陣:

簇間散度矩陣:

其中Cq為簇類q的樣本集,cq為簇類q的中心,nq為簇類q的樣本數,c為所有資料集的中心。

根據協方差的相關概念,我們用簇類散度矩陣的跡表示同一簇類的密集程度,跡越小,同一簇類的資料集越密集(方差越小);簇間散度矩陣的跡表示不同簇間的遠離程度,跡越大,不同簇間的遠離程度越大(方差越大)。

結合評價聚類模型的標準,定義Calinski-Harabaz指數:

其中N為資料集樣本數,k為簇類個數.

該評價指標具備特點:

  • 當簇類密集且簇間分離較好時,Caliniski-Harabaz分數越高,聚類效能越好

  • 計算速度快

  • 凸簇的Caliniski-Harabaz指數比其他型別的簇高

3.DB指數(Davies-Bouldin Index)

我們用簇類C的平均距離表示該簇類的密集程度

其中|C|表示簇類C的個數,dist(·,·)計算兩個樣本之間的距離。

不同簇類中心的距離表示不同簇類的遠離程度:

其中ui,uj分別為簇類Ci和Cj的中心。

結合聚類模型評價標準,定義DB指數:

DB指數的下限為0,DB指數越小,聚類效能越好

該評價指標具備特點:

  • DB指數的計算比輪廓係數簡單

  • DB指數的計算只需要知道資料集的數量和特徵

  • 凸簇的DB指數比其他型別的簇高

  • 簇類中心的距離度量限制在歐式空間

附一下python實現方式:

fromsklearn importmetrics

metrics.silhouette_score()
metrics.davies_bouldin_score()
metrics.calinski_harabasz_score()

參考資料:

https://mp.weixin.qq.com/s/cvr0kpI9kD18F09wULnmjA