【数学】k-means法とは
グループ化(クラスタリング)には、様々な手法がありますが、k-means法とは、その中でも単純な手法です。
■アルゴリズム
1. 各データに対して、ランダムにクラスタを割り当てる。
2. 各クラスタに対して、データの中心(クラスタ中心)を算出する。
3. 各データと各クラスタ中心の距離を算出し、最も距離が近いクラスタ中心と同じクラスタに再度割り当てる。
4. 2と3を繰り返し実施し、割り当てが変化しなくなった時に終了する。
■アルゴリズムの具体的説明
①変数の定義
記号、ベクトルの要素の割り当てなどは、下記の限りではありません。(例えば、記号はxでなくてyでもよいし、gなんてものを用意しないでベクトルxの要素に足してもよい。私のやりやすいようにやってます。)
<変数>
②アルゴリズム
1. 各データに対して、ランダムにクラスタを割り当てる。
1.1. データを取得する。
当然ですが、クラスタリングするにはデータが必要です。
ここでは例として、下図のようにのデータがあったとします。
1.2. 各データに対して、ランダムにクラスタを割り当てる。
下図のように、各データに対して、ランダムにクラスタ番号を割り当てます。
※下図の例では、,はクラスタ1、~はクラスタ2となっています。
また、各データのクラスタ番号の情報は、各クラスタが持つこととします。
※例えば、はクラスタ1であるので、に対応したは1となっています。
2. 各クラスタに対して、データの中心(クラスタ中心)を算出する。
各クラスタに対して、データの中心(クラスタ中心)を算出します。
クラスタ中心は、一般的には相加平均(一般的に平均と呼ばれるもの)で計算します。
数学っぽく式で表せば下記となります。
例えば、クラスタ1の場合は、クラスタ1に含まれる,からクラスタ中心を計算します。
3. 各データと各クラスタ中心の距離を算出し、最も距離が近いクラスタ中心と同じクラスタに再度割り当てる。
各データと各クラスタ中心の距離を算出し、最も距離が近いクラスタ中心と同じクラスタに再度割り当てます。
例えば、下図のようにについて考えます。
データと各クラスタ中心,との距離をそれぞれ,とした時、図のようにだったとします。(がの方が近いとします。)
この場合、データをクラスタ1に割り当て直します。
全データに対して行い、本例の場合、下図のよう,,はクラスタ1、,,はクラスタ2と割り当て直されます。
4. 2と3を繰り返し実施し、割り当てが変化しなくなった時に終了する。
2と3を繰り返すと、いずれ収束して、割り当てが変化しなくなります。(アルゴリズムの作り方によっては例外あるかもですが。。)
割り当てが変化しなくなった時に終了となります。
本例だと、「2. 各クラスタに対して、データの中心(クラスタ中心)を算出する。」を再度行うと下図のようになり、これ以上クラスタ中心が変化しなくなります。
以上、無事にクラスタリングされました。
ただ、よく言われるデメリットとして、クラスタの初期割り当てによっては、私達が思うクラスタの割り当てと実行結果に差が出ることがあります。
本例で言えば、だけがクラスタ1に割り当てられて、~がクラスタ2に割り当てられることがあります。
これは、私達が思うクラスタの割り当てと異なりますよね。