K-means法は、非階層型クラスタリングの一種です。非階層型クラスタリングとは、与えられたデータを、あらかじめ決められたクラスタ数 $K$ に分割し、各クラスタが互いに似た性質を持つようにグループ分けする手法を探索するものです。階層型クラスタリングとは異なり、階層的な構造を持たないため、サンプル数が多いビッグデータの分析に適しています。
K-means法は、データ点とクラスタの中心(重心)との距離を測定し、その距離が最小になるようにデータを $K$ 個のクラスタに分割する手法です。各クラスタ $C_j$ の重心 $c_j$ は、そのクラスタに属するデータ点の平均として計算されます。
$$ c_j = \frac{1}{|C_j|} \sum_{x \in C_j} x $$
K-means法は、以下の**評価関数(目的関数)**を最小化するようにクラスタリングを行います。この評価関数は、各データ点からそれが属するクラスタの重心までの距離の二乗和を表しており、クラスタ内の凝集度が高いほど値が小さくなります。
$$ J = \sum_{j=1}^K \sum_{x \in C_j} ||x - c_j||^2 $$
K-means法のアルゴリズム
- 初期化: データの中からランダムに $K$ 個の点を初期クラスタ重心として選択します。
- 割り当てステップ (E-step): 各データ点について、最も近いクラスタ重心を見つけ、そのデータ点をそのクラスタに割り当てます。
- 更新ステップ (M-step): 各クラスタに割り当てられたデータ点の平均を計算し、それを新しいクラスタ重心とします。
- 収束判定: クラスタ重心が移動しなくなるか、事前に設定した最大反復回数に達するまで、ステップ2とステップ3を繰り返します。
K-means法は、シンプルで高速なため広く利用されていますが、初期重心の選択に結果が依存する、クラスタの形状が球状であると仮定している、クラスタ数 $K$ を事前に指定する必要がある、といった課題も持ち合わせています。