シルエット分析とは
クラスタリングの性能の評価手法の1つ。
以下の基準に従って、クラスタリングの性能を可視化する。
- クラスタ内は密に凝集されているほど良い
- 異なるクラスタは遠く離れているほど良い
方法
各データサンプル \(\boldsymbol{x}^{(i)}\) に関して、以下の手順で シルエット係数(silhouette coefficient) を計算する。
1. シルエット係数の計算
クラスタ内の 凝集度 として、\(\boldsymbol{x}^{(i)}\) が属するクラスタ \(C_{\rm in}\) の他の点までの平均距離を計算:
\[a^{(i)} = \cfrac{1}{|C_{\rm in}|-1} \displaystyle \sum_{\boldsymbol{x}^{(j)} \in C_{\rm in}} \left\| \boldsymbol{x}^{(i)} - \boldsymbol{x}^{(j)} \right\|\]別クラスタからの 乖離度 として、\(\boldsymbol{x}^{(i)}\) に最も近い別クラスタ \(C_{\rm near}\) に属する点までの平均距離を計算:
\[b^{(i)} = \cfrac{1}{|C_{\rm near}|} \displaystyle \sum_{\boldsymbol{x}^{(j)} \in C_{\rm near}} \left\| \boldsymbol{x}^{(i)} - \boldsymbol{x}^{(j)} \right\|\]\(a^{(i)}, b^{(i)}\) のうち大きい方で \(b^{(i)} - a^{(i)}\) を割って シルエット係数 を計算:
\[s^{(i)} = \cfrac{b^{(i)} - a^{(i)}}{\max(a^{(i)}, b^{(i)})}\]2. シルエット係数の解釈
その定義から、シルエット係数は \([-1, 1]\) の区間に収まる。
- 値が1に近いほど性能が高い
- 値が負になると、所属クラスタの判別が間違っている可能性がある
全データサンプルでシルエット係数の平均値を取り、1に近いほどクラスタリングの性能が良いと言える。
3. 可視化
得られたシルエット係数を以下のルールでソートする。
- 所属クラスタ番号でソート
- 同じクラスタ内ではシルエット係数の値でソート
これを棒グラフにすると、クラスタリング全体の性能、およびクラスタごとの性能が可視化できる。
コード・動作確認
乖離度・凝集度が低くシルエット係数が小さい
乖離度・凝集度が高くシルエット係数が大きい
クラスタが重なり、シルエット係数が負の値を取る(所属クラスタの判定が誤っている恐れ)
クラスタ数が適切ではなく、シルエット係数が小さい