K 平均法というのは非階層型クラスタリングの手法のひとつ。これを手軽におこなう Rubygems パッケージを作った。
インストール
kmeans パッケージ
http://rubygems.org/gems/kmeans
ソースコード
https://github.com/id774/kmeans
仕事や勉強の合間にやるソリティアの代わりに、サンプリングした統計データを分割最適化クラスタリングしてちょっと気分転換するといった用途にも役立つ。
K 平均法のアルゴリズム
機械学習にはさまざまなアルゴリズムがあるが、大雑把に分類すると教師あり学習と教師なし学習に分けられる。教師なし学習とは、与えられたデータを外的基準なしに自動的に分類する手法である。より曖昧な問題設定となり、入力データのみが与えられる。 K 平均法は教師なし学習に分類されるクラスタ分析の一種である。
各観測値が d 次元の実数ベクトルである観測値の組 (x1, x2, …, xn) とする。各要素にランダムに値を割り当て、割り振ったデータごとに各クラスタの中心を求める。各要素をクラスタの中心に割り当てなおし、これをクラスタ割り当ての変化が無くなるまでイテレーションとして繰り返す。次の式で示される。
μi は Si 中の点の平均である。
nitoyon さんの K-means 法をビジュアライズしてみたというブログ記事がわかりやすいので併せて参照すると良い。
参考にした情報
kj-ki さん、 mem16 さん、 shokai さんのブログを大いに参考にさせていただきました。参考にしたというよりまんま流用したんじゃねえのかってレベルで参考にしました。ありがとうございます。
その他の Ruby による実装
Ruby による K 平均法の実装には以下のようなものがある。
AI4R :: Artificial Intelligence for Ruby
http://ai4r.org/index.html
K-Means
https://github.com/reddavis/K-Means
どう見ても車輪の再発明です。本当にありがとうございました。