クラスタリング — 「似たもの同士」を機械が見つける

正解ラベルのないデータから、点のまとまり=クラスタを自動で発見する教師なし学習。その代表選手 k-means の「割り当て → 重心移動」というシンプルな反復が収束していく様子を、1ステップずつ動かして観察します。

1. 教師なし学習 — 「正解」がなくても学べる

これまでの回帰や分類は、入力と正解ラベルのペアから学ぶ教師あり学習でした。しかし現実のデータの多くには正解ラベルがありません。顧客の購買履歴、センサーの記録、大量の文書 — 「ラベルはないが、何かの構造は隠れていそう」なデータです。

クラスタリングの目標はただひとつ。同じクラスタの中では点同士が近く、違うクラスタの間では遠くなるようにデータをグループ分けすることです。用途は幅広く、顧客のセグメント分け、似た画像・文書のグループ化、データの要約や異常検知の前処理などに使われます。

2. k-means のアルゴリズム — 2つのステップを繰り返すだけ

k-means は「クラスタの代表点=セントロイド(重心)を k 個置いて動かす」という発想のアルゴリズムです。手順は驚くほど単純です。

  1. セントロイドを k 個、適当な位置に置く(初期化)
  2. 割り当て:各データ点を、いちばん近いセントロイドのクラスタに所属させる
  3. 重心移動:各セントロイドを、自分に所属する点たちの平均位置(重心)へ動かす
  4. 変化がなくなるまで 2 と 3 を繰り返す

下のデモで、「1ステップ進める」を押しながらこの2つのステップが交互に実行される様子を追ってみてください。

k-means ステップ実行 — 割り当てと重心移動の反復
大きな丸=セントロイド(重心)、細い線=各点がどのクラスタに割り当てられたか、点線状の軌跡=重心が動いてきた道。「① 割り当て」と「② 重心移動」が交互に実行され、割り当てが変化しなくなったら収束です。
POINT — たった2ステップ、でも必ず収束する 「割り当て」も「重心移動」も、下の目的関数 J(WCSS)を決して増やさない操作になっている。割り当ての組み合わせは有限なので、k-means は有限回で必ず収束する。上のデモで WCSS の値がステップごとに減っていくのを確認してみよう。
J = Σk=1..K Σx∈Ck ‖x − μk‖² クラスタ内二乗和(WCSS)。「各点から自分のセントロイド μk までの距離²」の総和 — k-means はこれを小さくしていく

3. 初期値ガチャ — 同じデータでも違う答えに収束する

「必ず収束する」と「最良の答えに収束する」はまったく別の話です。k-means が保証するのは前者だけ。初期セントロイドの置き方しだいで、WCSS がベストよりずっと大きい中途半端な分割=局所解に落ち着いてしまうことがあります。

下のデータには4つの自然なまとまりがあります。「初期値を引き直す」を何度か押して、同じ k=4 でも結果が変わる瞬間を捕まえてください。

初期値ガチャ — 局所解に落ちる瞬間を見る
初期セントロイドはデータ点の中からランダムに選ばれます。運が悪いと、1つのクラスタが2つのまとまりを抱え込み、別のまとまりが2分割される「局所解」に収束します。良し悪しは WCSS で比較できます(小さいほど良い分割)。
注意 — 収束 ≠ 正解 k-means の結果を1回だけ見て信用してはいけない。実務では初期値を変えて複数回実行し、WCSS が最小の結果を採用するのが基本(scikit-learn の n_init パラメータがまさにこれ)。
一歩先へ — k-means++ 初期値ガチャの当たり確率そのものを上げる方法が k-means++。最初のセントロイドをランダムに選んだあと、2個目以降は「既存のセントロイドから遠い点ほど選ばれやすい」ように確率的に選ぶ。互いに離れた初期値から始まるので局所解に落ちにくく、scikit-learn のデフォルト初期化になっている。

4. k はいくつが正解? — エルボー法

k-means にはもうひとつ弱点があります。クラスタ数 k は人間が事前に与える必要があるのです。困ったことに、WCSS は k を増やせば必ず減ります(極端な話、k=点の数なら WCSS は 0)。だから「WCSS が最小になる k」を探しても意味がありません。

そこで、k を 1 から順に増やしながら WCSS をプロットし、減り方がガクッと鈍る「肘」の位置を探します。これがエルボー法です。

エルボー法 — WCSS の「肘」を探す
各 k で初期値を5回変えて実行し、ベストの WCSS をプロットします
左=各 k での最良の分割、右=k と WCSS の関係。本当のまとまりの数(4)までは WCSS が急降下し、それを超えると改善がほぼ止まってカーブが「肘」のように折れ曲がります。
POINT — 肘は「これ以上増やしても得しない」の目印 k を本物のクラスタ数より増やしても、すでにまとまっている塊を無理に切り刻むだけで WCSS はわずかしか減らない。急降下から微減に切り替わる点が、データが持つ自然なグループ数の有力な候補になる。ただし肘は目安であり、シルエット係数など他の指標と併用するのが実務の定石。

5. まとめ

一歩先へ — k-means が苦手な形 k-means は「距離が近い=同じクラスタ」なので、球状で同じくらいの大きさのクラスタを暗黙に仮定している。三日月形・輪っか状のクラスタや、密度がまちまちのデータでは失敗しやすい。そういうときは密度ベースの DBSCAN や、クラスタを楕円で捉える混合ガウスモデル(GMM)の出番になる。