🔥

シルエットスコア(シルエット係数)とは

に公開

シルエットスコア(シルエット係数)とは

シルエットスコア(silhouette)とは、定量的にクラスタリングの性能評価を行うための指標です。
この指標では、値が 1 に近いほど適切にクラスタリングが行われていることを意味します。

詳細

シルエットスコアでは、距離として「ユークリッド距離」や「マンハッタン距離」など、任意の定義を使用することができます。

また、値の範囲は -1 から +1 で、+1 に近いほどデータが自身のクラスターとよく一致し、隣接するクラスターからは離れていことを示します。

ほとんどのデータで高い値を持つ場合、クラスタリングは適切に行われています。
逆に、ほとんどのデータで低い値を持つ場合、クラスタの数が多すぎるか少なすぎる可能性があります。

シルエットスコアの平均が 0.7 を超える場合は「強い」クラスタリングで、0.5 を超える値は「妥当」、0.25 を超えるクラスタリングは「弱い」とみなされます。

しかし、データの次元数が増えると、どのデータに対しても距離が類似してくるため、高い値を達成することが困難になります。

凝縮度

データ点 i, ji, j \in C_{i} を満たす(データ点 i, j はクラスタ C_{i} に含まれている)場合、凝縮度を以下のように定義します

a(i) = \frac{1}{|C_{i}| - 1}\sum_{j \in C_{i}, i \neq j} d(i, j)

ここで|C_{i}| はクラスタ C_{i} に含まれるデータ数であり、d(i, j) はデータ i, j における距離です。

凝縮度の意味は、あるデータと、自身が含まれるクラスタ内のデータとの距離の平均です。
分母が |C_{i}| - 1 となっているのは、データ i 自身がクラスタに含まれるからです。

分離度

あるデータ点が i \in C_{i} を満たし、C_{i} \neq C_{j} を満たす場合、分離度を以下のように定義します

b(i) = \min_{i \neq j} \frac{1}{|C_{i}|}\sum_{j \in C_{j}} d(i, j)

分離度の意味は、あるデータと、そのデータが含まれるクラスタの隣のクラスタ内のデータとの距離の平均です。

シルエットスコア(silhouette)

あるデータ点 i におけるシルエットスコアを以下のように定義します

s(i) = \frac{b(i) - a(i)}{\max \left( a(i), b(i) \right) }

ただし、i がデータ一つでクラスタとみなされている場合(|C_{i}| = 0の場合)

s(i) = 0
少し書き直すと

シルエットスコアは以下のように書くこともできます

s(i) = \left\{ \begin{array}{ll} 1 - \frac{a(i)}{b(i)} && \mathrm{if} & a(i)<b(i) \\ 0 && \mathrm{if} & a(i)=b(i) \\ \frac{a(i)}{b(i)} - 1 && \mathrm{if} & a(i)>b(i) \\ \end{array} \right.
GitHubで編集を提案

Discussion