クラスタリング — 「似たもの同士」を機械が見つける
正解ラベルのないデータから、点のまとまり=クラスタを自動で発見する教師なし学習。その代表選手 k-means の「割り当て → 重心移動」というシンプルな反復が収束していく様子を、1ステップずつ動かして観察します。
1. 教師なし学習 — 「正解」がなくても学べる
これまでの回帰や分類は、入力と正解ラベルのペアから学ぶ教師あり学習でした。しかし現実のデータの多くには正解ラベルがありません。顧客の購買履歴、センサーの記録、大量の文書 — 「ラベルはないが、何かの構造は隠れていそう」なデータです。
クラスタリングの目標はただひとつ。同じクラスタの中では点同士が近く、違うクラスタの間では遠くなるようにデータをグループ分けすることです。用途は幅広く、顧客のセグメント分け、似た画像・文書のグループ化、データの要約や異常検知の前処理などに使われます。
2. k-means のアルゴリズム — 2つのステップを繰り返すだけ
k-means は「クラスタの代表点=セントロイド(重心)を k 個置いて動かす」という発想のアルゴリズムです。手順は驚くほど単純です。
- セントロイドを k 個、適当な位置に置く(初期化)
- 割り当て:各データ点を、いちばん近いセントロイドのクラスタに所属させる
- 重心移動:各セントロイドを、自分に所属する点たちの平均位置(重心)へ動かす
- 変化がなくなるまで 2 と 3 を繰り返す
下のデモで、「1ステップ進める」を押しながらこの2つのステップが交互に実行される様子を追ってみてください。
3. 初期値ガチャ — 同じデータでも違う答えに収束する
「必ず収束する」と「最良の答えに収束する」はまったく別の話です。k-means が保証するのは前者だけ。初期セントロイドの置き方しだいで、WCSS がベストよりずっと大きい中途半端な分割=局所解に落ち着いてしまうことがあります。
下のデータには4つの自然なまとまりがあります。「初期値を引き直す」を何度か押して、同じ k=4 でも結果が変わる瞬間を捕まえてください。
n_init パラメータがまさにこれ)。
4. k はいくつが正解? — エルボー法
k-means にはもうひとつ弱点があります。クラスタ数 k は人間が事前に与える必要があるのです。困ったことに、WCSS は k を増やせば必ず減ります(極端な話、k=点の数なら WCSS は 0)。だから「WCSS が最小になる k」を探しても意味がありません。
そこで、k を 1 から順に増やしながら WCSS をプロットし、減り方がガクッと鈍る「肘」の位置を探します。これがエルボー法です。
5. まとめ
- 教師なし学習:正解ラベルなしでデータの構造(クラスタ)を発見する。
- k-means:「割り当て」と「重心移動」の反復。WCSS を単調に減らし、有限回で必ず収束する。
- 局所解:収束先は初期値しだい。複数回実行+WCSS 比較、k-means++ 初期化で対策する。
- k の選び方:WCSS カーブの「肘」を探すエルボー法が第一歩。