k平均法(k-means clustering)


k-meansとは非階層クラスタリングの手法の一つです。 クラスタの平均を用い、与えられたクラスタ数k個に分類することからk-meansと名付けられています。Rでk-meansによるクラスタリングを行う方法についてまとめます。

  1. データの準備
  2. クラスタリング
  3. 結果の検証(validation)

1.データの準備

あるサンプルについてのデータが行に、あるパラメータについての各サンプルのデータが列に並んだデータフレームまたは行列を用意します。 つまり、サンプル数をm、パラメータ数をnとすると、m×nのデータフレーム(または行列)となります。 このデータフレームにはNAのデータを含めることはできないので予め取り除いておく必要があります。

2.クラスタリング

kmeans() という関数を使います(パッケージは不要です)。最低限の書式は、kmeans(x=データ, centers=クラスタ数)です。クラスタ数は1からサンプル数m-1までの整数です。centersに数値を指定した場合、クラスタの代表点の初期値はランダムに選ばれますが、ベクトルを与えることで任意に選ぶこともできます。他の引数としては、繰り返しの最大値を与えるiter.max、アルゴリズムを指定するalgorithmなどがあります。それぞれデフォルトではiter.max=10L、algorithm=”Hartigan-Wong”となっています。kmeansの返り値は9つの要素からなるリストです。$clusterでクラスタリングの結果がベクトルで得られます。

3.結果の検証(validation)

適切なクラスタ数は目的によって異なりますが、少なすぎるとクラスタ内のばらつきが大きくなってしまいますし、多すぎては意味がわからなくなります。分割の適切さの尺度の1つとしてクラスター内平方和があります。$withinssでそれぞれのクラスターについての平方和、$tot.withinssで平方和の合計が得られます。クラスター数kがある程度以上になると平方和はあまり変化しなくなります。 https://towardsdatascience.com/clustering-analysis-in-r-using-k-means-73eca4fb7967

横軸はクラスター数、縦軸はクラスター内平方和の合計