クラスタリングの評価

Pythonで学ぶ教師なし学習

Benjamin Wilson

Director of Research at lateral.io

クラスタリングの評価

  • 例:アイリスの種と対応を確認可能
  • しかし、種など比較対象がない場合は?
  • クラスタリングの品質を測定
  • 探すクラスター数の判断に使う
Pythonで学ぶ教師なし学習

アイリス:クラスター vs 種

  • k-meansはアイリスに3クラスターを検出
  • それらは種に対応しているか?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Pythonで学ぶ教師なし学習

pandasでクロス集計

  • クラスター vs 種は「クロス集計」
  • pandasライブラリを使用
  • 各サンプルの種をリストspeciesで与える
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Pythonで学ぶ教師なし学習

ラベルと種の整列

import pandas as pd
df = pd.DataFrame({'labels': labels, 'species': species})
print(df)
     labels     species
0         1      setosa
1         1      setosa
2         2  versicolor
3         2   virginica
4         1      setosa
...
Pythonで学ぶ教師なし学習

ラベルと種のクロス集計

ct = pd.crosstab(df['labels'], df['species'])
print(ct)
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14

種情報がない場合、クラスタリングをどう評価するか?

Pythonで学ぶ教師なし学習

クラスタリング品質の測定

  • サンプルとそのクラスタラベルのみを使用

  • 良いクラスタリングはクラスターが密

  • 各クラスター内のサンプルがまとまっている

Pythonで学ぶ教師なし学習

慣性はクラスタ品質を測る指標

  • クラスターの散らばりを測定(低いほど良い)
  • 各サンプルから所属クラスター重心までの距離
  • fit()後、属性inertia_で取得
  • k-meansはクラスタ選択でこの慣性を最小化
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Pythonで学ぶ教師なし学習

クラスター数の決定

  • アイリスデータでクラスター数を変えた例
  • クラスター数が多いほど慣性は低下
  • 最適なクラスター数は?

クラスター数と慣性の折れ線グラフ

Pythonで学ぶ教師なし学習

クラスター数はどう選ぶか

  • 良いクラスタリングは密(= 慣性が低い)
  • ただし、クラスター数が多すぎないこと
  • 慣性プロットの「肘」を選ぶ
  • 慣性低下が緩やかになる点
  • 例:アイリスでは3が妥当

クラスター数と慣性の折れ線グラフ

Pythonで学ぶ教師なし学習

Passons à la pratique !

Pythonで学ぶ教師なし学習

Preparing Video For Download...