本文へスキップ

k-means 法クラスタリング

「点を一番近い重心に割り当てる」「重心を動かす」の 2 つを交互に繰り返すだけで、 データがいくつかのまとまりに分かれていきます。1 ステップずつ進めて観察してください。

操作方法

  1. クラスター数(k)とサンプル数を決めます。
  2. 初期化を押すと、白い点(データ)と色付きの四角(重心)がランダムに配置されます。
  3. 次へを押すたびに、次の 2 つが交互に実行されます。
    • 割り当て: 各点を、最も近い重心の色に塗り替え、その重心と線で結ぶ。
    • 更新: 各重心を、自分に割り当てられた点の平均の位置へ移動する。
  4. 何度か押すと重心がほとんど動かなくなります。そこが k-means 法の収束点です。

ここで何を見ているか

k-means 法は、あらかじめ正解が与えられていないデータを、指定した個数のまとまりに分ける手法です。 正解ラベルを使わないので「教師なし学習」に分類されます。 やっていることは上の 2 手順の繰り返しだけで、複雑な数式は出てきません。

点と重心を結ぶ線は、その点がどの重心に属していると判断されたかを示しています。 割り当てが変わると線の向きと色が変わり、重心が動くと線の根元がまとめて移動します。

試してみてほしいこと

  • 初期化を何度かやり直す。 同じクラスター数でも、重心の初期位置によって結果が変わることがあります。 k-means 法は初期値に影響を受ける手法です。
  • クラスター数を変える。 データ自体は一様な乱数なので、k をいくつにしても「それらしい」区切りができます。 分かれたからといって、そこに意味のある集団があるとは限りません。
  • サンプル数を減らす。 点が少ないと、重心の移動が 1 点に大きく引きずられることが見えます。

注意

  • このデモの点は、すべてブラウザ内で生成した一様乱数です。実在のデータではありません。
  • 距離はユークリッド距離で計算しています。実際の分析では、 変数のスケールをそろえる前処理をしないと、値の大きい変数に結果が引っ張られます。
  • クラスターに分かれたことは、そこに意味のある集団が存在することを意味しません。 結果の解釈は、データの背景を知る人が行う必要があります。
  • グラフの描画に D3.js と jQuery(いずれも CDN 配信)を使用しています。