教師なし学習の代表、クラスタリング。k-meansと階層型の使い分け。
顧客を似た傾向ごとにグループ分けしたいんだけど、どうすればいいの?
そういうときはクラスタリングの出番ね。 代表的なのはk-meansと階層クラスタリングよ。
k-meansは『k個のクラスタ中心(セントロイド)を決め、各サンプルを最近距離のクラスタに割り当て、中心を再計算』を繰り返す手法。 シンプルで高速。
kって、事前に決めておくんですかぁ?
そう、kはハイパーパラメータ。 適切なkを選ぶ手法としてエルボー法やシルエット係数があるよ。
エルボー法って何?
kを変えながらクラスタ内分散をプロットすると、ある所で減少が緩やかになる『肘』のような点が現れるの。 そのkを適切な値とする方法ね。
階層クラスタリングはk指定不要。 全サンプルを最初は別クラスタとし、近いものから順に併合していく(凝集型)。 最後に階層樹図(デンドログラム)が得られる。
デンドログラムって、図で見られるんですねぇ。
k-meansの弱点って何?
(1)kを事前指定が必要、(2)初期値依存、(3)球形以外のクラスタが苦手、(4)外れ値に敏感、など。 球形でない密度ベースの問題ならDBSCANが有効。
クラスタリングは『正解』がないので、結果の解釈はビジネス文脈に強く依存する。 機械的にk-meansを当てはめるのではなく、結果が意味を持つかをドメイン知識で吟味することが大事。
DS検定では『k-meansはk事前指定』『階層型はデンドログラム』『k選択にエルボー法』が頻出。
from sklearn.cluster import KMeans
import numpy as np
# 適切な k をエルボー法で探す
inertias = []
for k in range(1, 11):
km = KMeans(n_clusters=k, random_state=42, n_init=10)
km.fit(X)
inertias.append(km.inertia_)
# inertias をプロットし、肘の位置のkを採用
確認クイズ
k-meansクラスタリングの特徴として正しいのはどれか。
- クラスタ数kを事前に指定する必要がある
- デンドログラムが出力される
- 正解ラベルが必要
- 確率を出力する
こたえを見る
正解: 1. クラスタ数kを事前に指定する必要がある
クラスタ数kを事前に指定する必要があるのがk-meansの特徴です。 適切なkはエルボー法・シルエット係数等で選択します。 デンドログラムを出力するのは階層クラスタリング、確率を出力するのはGMMです。