1. クラスタリング問題に対する指標評価の重要性
聚类算法是非监督学习最常用的一种方法,性能度量是衡量学习模型优劣的指标,
也可作为优化学习模型的目标函数。聚类性能度量根据训练数据是否包含标记数据
分为两类,一类是将聚类结果与标记数据进行比较,称为“外部指标”;另一类是直
接分析聚类结果,称为内部指标。本文对这两类的性能度量以及相似度方法作一个
详细总结。
本文将总结的指标如下所示:
外部指标:
1.兰德系数(RI)
2.调整兰德系数(ARI)
3.同质性(homogeneity)度量
4.完整性(completeness)度量
5.V-Measure值(h和c的调和平均值)度量
内部指标
1.轮廓系数(Silhouette Coefficient)
2.Caliniski-Harabaz指数
2. 外部評価指標の算出
2.1. ランド係数(RI)の計算方法
まず、ペアごとのペア変数 a と b を定義します。
a: 同じクラスター C と同じクラスター K の両方に属するデータ セット内のサンプル ペアの数
b: 属さないデータ セット内のサンプル ペアの数たとえば、次の
実クラスターと予測クラスター ベクトルの場合:
実クラスター ベクトル: [0, 0, 0, 1, 1, 1]
予測クラスター ベクトル: [0, 0, 1] , 1, 1, 1]
定義によれば、a は同じクラスターであるクラスター C と K の両方のサンプル ペアの数を表します。上記から、a=2 ([0,0] および [ 1,1] は質問の意味を満たします) b の定義によれば、b は
C と K の両方が異なるクラスター内のサンプルの数を表します 上記から、 b=1 ([0,1] ->[1,1] は条件を満たします) RI は 2 つのクラスター間の類似性の尺度です。
サンプル数が n であると仮定します。定義:
RI = a + b C n 2 RI=\frac{a+b}{ C_{n}^{2} }R I=Cn2ある+b
上記のサンプルに基づくと、n=6、クラスター=3 であるため、RI の計算結果は次のようになります。
RI = a + b C 6 3 = 2 + 1 15 = 1 5 RI=\frac{a+b}{ C_{6 }^{3} } =\frac{2+1}{15} =\frac{1}{5}R I=C63ある+b=152+1=51
2.2. 調整ランド係数(ARI)の計算方法
RI 係数の欠点は、クラスターの数が増加するにつれて、ランダムに割り当てられたクラスター クラス ベクトルの RI も徐々に増加し、理論と一致しないことです。ランダムに割り当てられたクラスター クラス ラベル ベクトルの RI は 0 である必要があります。
ランダムな結果の場合、RI はゼロに近いスコアを保証しません。「クラスタリング結果がランダムに生成される場合、インデックスはゼロに近づくべきである」を実現するために、より高い識別度を備えた調整ランドインデックス (Adjusted randindex) が提案され、その計算式は次のとおりです。 RI −
E [ RI ] max ( RI ) − E [ RI ] ARI=\frac{RI-E[RI]}{max(RI)-E[RI]}あーり_ _=マックス( R I ) _−E [ R I ]R I−E [ R I ] 。
関連する Python コードは次のとおりです。
from sklearn.metrics import adjusted_rand_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
ari_score = adjusted_rand_score(true_labels, predicted_labels)
print("调整兰德系数:",ari_score )
2.3. 均一性尺度の計算方法
均一性尺度の計算式は次のようになります。
h = 1 − H ( C ∣ K ) H ( C ) h=1-\frac{H(C|K)}{H(C)}h=1−H ( C )H ( C ∣ K )
H ( C ∣ K ) は、与えられたクラスター分割条件の下でのカテゴリー分割の条件付きエントロピーです。 H ( C ∣ K ) = − ∑ c = 1 ∣ C ∣ ∑ k = 1 ∣ K ∣ nc , kn log ( nc , knk ) 、H ( C ) はカテゴリ分割エントロピー、 H ( C ) = − ∑ c = 1 ∣ C ∣ ncn log ( ncn ) 、n はインスタンスの総数を表します。H(C \mid K) は、特定のクラスター分割条件の下でのカテゴリ分割の条件付きエントロピーです。 \\ H(C \mid K)= -\sum_{c=1}^{|C|} \sum_{k= 1 }^{|K|} \frac{n_{c, k}}{n} \log \left(\frac{n_{c, k}}{n_{k}}\right), H(C)は分類エントロピー、\\ H(C)=-\sum_{c=1}^{|C|} \frac{n_{c}}{n} \log \left(\frac{n_{c}}{ n}\right)、n はインスタンスの総数を表します。H ( C)∣K )は、与えられたクラスター分割条件下でのカテゴリー分割の条件付きエントロピーです。H ( C)∣K )=−c = 1∑∣ C ∣k = 1∑∣ K ∣nnc 、 kログ_(nknc 、 k)、H ( C )はカテゴリ分割エントロピー、H ( C )=−c = 1∑∣ C ∣nncログ_(nnc)、n はインスタンスの総数を表します。
関連する Python コードは次のとおりです。
from sklearn.metrics import homogeneity_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
homogeneity = homogeneity_score(true_labels, predicted_labels)
print("同质性:", homogeneity)
2.4. 完全性指標の計算方法
完全性尺度の各パラメータは均一性尺度と同様であり、その計算式は次のとおりです。
h = 1 − H ( K ∣ C ) H ( K ) h=1-\frac{H(K|C) }{ H(K)}h=1−H ( K )H ( K ∣ C )
関連する Python コードは次のとおりです。
from sklearn.metrics import completeness_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
completeness = completeness_score(true_labels, predicted_labels)
print("完整性:", completeness)
2.5.V-Measure値の計算方法
V-Measureの計算方法はhとcの調和平均であり、計算式は以下の通り
V = 2 hch + c V=\frac{2hc}{h+c}V=h+c2時間_
関連する Python コードは次のとおりです。
#%%
from sklearn.metrics import v_measure_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
v_measure = v_measure_score(true_labels, predicted_labels)
print("V度量:", v_measure)
3. 内部評価指標の算出
3.1. シルエット係数の計算方法
シルエット係数は、実際のカテゴリ情報が不明な状況に適しています。単一のサンプルについて、同じカテゴリ内の他のサンプルまでの平均距離を a、異なるカテゴリ内の最も近いサンプルまでの平均距離を b とし、シルエット係数を次のようにします。 s = b − amax ( a , b ) s= \
frac {ba}{max(a,b)}s=マックス( a , _b )b−あ
関連する Python コードは次のとおりです。
#%%
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
X=[[0,1,2,6],[1,0,2,6],[2,1,0,6],[6,6,6,0]]
y=[0,0,0,1]
kmeans = KMeans(n_clusters=3)
# 根据数据data进行聚类,结果存放于result_list中
result_list = kmeans.fit_predict(X)
# 将原始的数据data和聚类结果result_list
score = silhouette_score(X, result_list)
print(score)
3.2. カリンスキー・ハラバズの計算方法
この計算方法は単純かつ直接的であり、得られるデータが大きいほど優れています。Calinski-Harabaz 係数の計算方法は次のとおりです。つまり、
カテゴリ内のデータの共分散が小さいほど優れており、大きいほど優れています。カテゴリ間の共分散が良好であるほど、そのようなカリンスキー-ハラバス スコアは高くなります。
関連する Python コードは次のとおりです。
#%%
#%%
import numpy as np
from sklearn import metrics
from sklearn.cluster import KMeans
X=[[0,1,2,6],[1,0,2,6],[2,1,0,6],[6,6,6,0]]
y=[0,0,0,1]
kmeans = KMeans(n_clusters=3)
result_list = kmeans.fit_predict(X)
calinski_harabasz_score= metrics.calinski_harabasz_score(X, result_list)
print(calinski_harabasz_score)
4. 謝辞
本章内容的完成离不开以下大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.聚类评价指标的外部指标评价:https://blog.csdn.net/fengdu78/article/details/103951665
2.聚类评价指标的外部指标评价:https://zhuanlan.zhihu.com/p/145989213
3.聚类评价指标的内部指标评价:https://blog.csdn.net/sinat_26917383/article/details/70577710
在文章的最后再次表达由衷的感谢!!