k-meansクラスタリング シミュレーター 戻る
機械学習

k-meansクラスタリング シミュレーター

教師なし学習の代表アルゴリズム k-means法(Lloyd法)を、その場で動かして観察できるツールです。クラスタ数 k や初期化方法を変えると、データ点の割り当てと重心の移動、クラスタ内二乗和 WCSS の収束、そしてエルボー法による k の選定がアニメーションとグラフでわかります。

パラメータ設定
クラスタ数 k
k-meansが分割するクラスタの個数
データ点数
真のクラスタ数(データ生成用)
合成データが本来もつクラスタの個数
クラスタの広がり
各クラスタのガウスノイズの標準偏差
最大反復回数
Lloyd法を打ち切る上限回数
初期化方法
初期重心の選び方
計算結果
反復回数
WCSS(クラスタ内二乗和)
クラスタ数 k
平均クラスタ半径
最大クラスタの点数
収束判定
クラスタリングの可視化 — 反復アニメーション

単位正方形 [0,1]² 上のデータ点。色は割り当てられたクラスタを表し、大きな ✕ が重心です。割り当てと重心移動が反復ごとに進み、収束したら最初から再生されます。

WCSS の収束
エルボー法 — 最終WCSS vs クラスタ数 k
理論・主要公式

$$\text{WCSS}=\sum_{j=1}^{k}\sum_{x\in C_j}\lVert x-\mu_j\rVert^2$$

クラスタ内二乗和 WCSS。各データ点 x から、属するクラスタ C_j の重心 μ_j までの距離の二乗を全点で合計した目的関数。小さいほどクラスタが密にまとまっている。

$$\mu_j=\frac{1}{|C_j|}\sum_{x\in C_j}x$$

重心の更新式。クラスタ C_j に属する点の平均位置が新しい重心 μ_j となる。|C_j| はクラスタ内の点数。

各反復はまず点を最も近い重心へ割り当て、続いて重心をクラスタの平均位置へ移動する。この2ステップで WCSS は単調に減少し、有限回で収束する。

k-meansクラスタリングとは

🙋
「クラスタリング」って、データをグループ分けすることですよね?でも、正解ラベルがないのに、どうやって「ここからここまでが1つのグループ」って決めるんですか?
🎓
いい質問だね。それがまさに「教師なし学習」の面白さなんだ。k-means法はざっくり言うと、「近いものどうしは仲間」という考え方だけでグループを作る。手順はたった2つ。まず各点を一番近い「重心」に割り当てる。次にその重心を、集まった点の平均位置に動かす。この2つを交互に繰り返すだけ。左のスライダーで k=3 のままアニメーションを見てごらん、✕印の重心がだんだん点の中心へ吸い寄せられていくのが分かるよ。
🙋
交互に繰り返すだけで、本当にちゃんと止まるんですか?ずっと動き続けたりしないんですか?
🎓
止まるよ、しかも数学的に保証されている。鍵は「WCSS(クラスタ内二乗和)」という数値だ。各点から自分の重心までの距離の二乗を全部足したもので、クラスタのまとまり具合を表す。割り当てステップでも更新ステップでも、WCSS は絶対に増えない——必ず減るか同じ。減り続ける値には下限があるから、いつか必ず止まる。右の「WCSS の収束」グラフを見ると、階段状にスッと下がって平らになるのが分かるはずだ。デフォルト設定だと7回くらいで収束する。
🙋
なるほど!じゃあ k はいくつにすればいいんですか?データが何グループあるかなんて、最初は分からないですよね。
🎓
そこで「エルボー法」の出番だ。k を 1,2,3,… と変えて、それぞれの最終 WCSS をグラフにする。k を増やせば WCSS は必ず下がるけど、データ本来のクラスタ数を超えると、下がり方が急に鈍る。グラフが肘(エルボー)みたいにカクッと折れる、その点が良い k の目安だよ。右の「エルボー法」グラフで、真のクラスタ数 3 のあたりで曲がっているのが見えるはずだ。真のクラスタ数スライダーを 5 にすると、折れ曲がりの位置もちゃんと移動する。
🙋
初期化方法に「k-means++」と「ランダム」がありますね。これって結果に影響するんですか?
🎓
するよ、けっこう大きく。k-means は「最初の重心をどこに置くか」で落ちつく先が変わる。ランダム初期化だと重心がたまたま固まって、悪い局所解にハマることがある。k-means++ は賢くて、すでにある重心から遠い点ほど高い確率で次の重心に選ぶ。だから初期重心がデータ全体に散らばって、良い解に届きやすい。実務で scikit-learn を使うと、デフォルトが k-means++ なのはそのためなんだ。初期化セレクトを切り替えて、収束後の WCSS を見比べてごらん。

よくある質問

k-means法(Lloydのアルゴリズム)は2つのステップを交互に繰り返します。(1) 割り当てステップ:各データ点を最も近い重心(セントロイド)のクラスタに割り当てる。(2) 更新ステップ:各クラスタの重心を、そのクラスタに属する点の平均位置へ移動する。この2ステップを、どの点の割り当ても変化しなくなるまで繰り返します。各反復でクラスタ内二乗和 WCSS は必ず減少し、有限回で収束することが保証されています。
WCSS(Within-Cluster Sum of Squares)は、各データ点から自分が属するクラスタの重心までの距離の二乗を、全点について足し合わせた値です。WCSS = Σ_j Σ_{x∈C_j} ‖x−μ_j‖² で表され、クラスタリングの「まとまりの良さ」を示す目的関数です。値が小さいほど各クラスタが密にまとまっていることを意味します。k-means法は反復のたびにこの WCSS を単調に減少させていきます。
エルボー法は、k を 1,2,3,… と変えながら k-means を実行し、それぞれの最終 WCSS を k に対してプロットする方法です。k を増やすと WCSS は必ず下がりますが、データの本来のクラスタ数を超えると下がり方が急に緩やかになります。この「肘(エルボー)」のように折れ曲がる点が、過不足の少ない k の目安です。本ツールの右側のグラフで、その折れ曲がりを確認できます。
ランダム初期化は最初の重心を無作為に選ぶため、重心が偏って悪い局所解に落ちやすい欠点があります。k-means++ は、最初の重心を1つ無作為に選んだあと、次の重心を「既存の重心から遠い点ほど高い確率」で選びます(距離の二乗 D² に比例する確率)。これにより初期重心がデータ全体に散らばり、収束後の WCSS が小さく安定しやすくなります。本ツールでは初期化方法を切り替えて結果の違いを比較できます。

実世界での応用

顧客セグメンテーション:マーケティングでは、購入金額・来店頻度・最終購入日などの指標で顧客を k-means でグループ分けし、「優良顧客」「離反しかけ」「新規」などのセグメントに整理します。各セグメントに合わせた施策を打つための定番手法で、エルボー法やシルエット係数でセグメント数を決めます。スケールの異なる指標を混ぜるときは、事前に標準化しておくことが重要です。

画像の色量子化:1枚の写真には数万色が含まれますが、各ピクセルを RGB 空間の点とみなして k-means でクラスタリングすると、代表色 k 個に減色できます。GIF のパレット作成や、画像圧縮、ポスタリゼーション風の加工に使われます。k を 16 や 256 にすれば、見た目をほとんど損なわずにファイルサイズを小さくできます。

異常検知・前処理:正常なデータでクラスタを学習しておき、どの重心からも遠い点を「異常」とみなす使い方があります。また、大規模データを k-means でいったん要約し、各クラスタの代表点だけで後段の重い解析を回す、というベクトル量子化(VQ)的な前処理にも使われます。センサーデータの状態分類などが典型例です。

工学・CAEでのデータ整理:多数の解析ケースの結果(応力・変位・固有振動数など)を k-means で分類すると、似た挙動を示すケース群が見えてきます。設計探索(DOE)で得た膨大な結果を代表ケースに集約したり、メッシュ上の要素を物理量で分類して可視化したりと、シミュレーション結果の整理にも応用されています。

よくある誤解と注意点

まず最大の誤解が、「k-means は必ず最良のクラスタリングを見つける」というものです。k-means が保証するのは、WCSS が反復のたびに減って「ある局所最適解」に収束することだけで、それが全体で最良の解(大域最適解)である保証はありません。初期重心の置き方しだいで、収束先は変わります。だから実務では初期化を変えて複数回実行し、最も WCSS が小さい結果を採用します。k-means++ は良い初期解を与えてくれますが、それでも複数回試すのが定石です。本ツールで初期化方法を切り替えると、同じ k でも WCSS が変わることが確認できます。

次に、「k-means はどんな形のクラスタでも見つけられる」という思い込み。k-means は各点を最も近い重心に割り当てるため、決定境界は必ず直線(高次元では超平面)になり、得られるクラスタは球状(等方的)で大きさも揃った形を暗黙に仮定しています。三日月形・リング状・細長い帯のような非凸クラスタや、サイズや密度が大きく異なるクラスタは正しく分けられません。そうしたデータには DBSCAN やスペクトラルクラスタリング、ガウス混合モデルなど、別の手法が向いています。

最後に、「前処理は不要」という油断です。k-means はユークリッド距離に基づくため、スケールの大きい特徴量が距離を支配してしまいます。たとえば「年収(数百万)」と「年齢(数十)」をそのまま混ぜると、年収だけでクラスタが決まってしまいます。各特徴量を標準化(平均0・分散1)するのが基本です。また外れ値は平均で計算する重心を大きく引っ張るため、k-means は外れ値に弱い点にも注意が必要です。外れ値が多い場合は、中央値を使う k-medoids(PAM)が選択肢になります。

使い方ガイド

  1. クラスタ数k(2~10範囲)とデータ点数n(50~500点)を設定してから「シミュレーション開始」をクリック
  2. Lloyd法による反復過程をアニメーション表示で観察し、WCSS値の収束曲線をリアルタイム監視
  3. 反復回数が安定したら「分析結果」タブでエルボー法グラフを確認し、最適なkを判定
  4. 平均クラスタ半径と最大クラスタの点数から、クラスタの均衡度を評価

具体的な計算例

500点のマーケティング顧客データ(2次元:購買額、訪問頻度)をk=3で処理した場合、初期WCSS=125000から開始し、反復7回でWCSS=18500に収束。各クラスタは平均半径8.2単位、最大クラスタは215点を含有。k=4では反復6回でWCSS=14200に低下するも、改善率は低下(エルボー地点)。k=3が最適クラスタ数と判定。

実務での注意点