機械学習アルゴリズムの基礎 ~クラスタリング問題の評価指標~

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 IE [ 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=1H ( 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 = 1Ck = 1Knnc kログ_(nnc k)H ( C )はカテゴリ分割エントロピーH ( C )=c = 1Cnncログ_(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=1H ( 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
在文章的最后再次表达由衷的感谢!!

おすすめ

転載: blog.csdn.net/m0_71819746/article/details/133465439