Bellona.Analysis でクラスタリング

以前にクラスタリングを実装する (C#) を投稿しましたが、
クラスタリングの機能をライブラリ化して Bellona.Analysis (GitHub) を作成しました。
NuGet にも同じ名前で登録してあります。

基本となるアルゴリズムは k 平均法 (k-means 法) です。
しかし通常の k 平均法では、

  • 生成されるクラスターの数をあらかじめ指定しなければならない
  • 初期クラスターの重心をランダムで決定するため、再現性がない
    • 偏りがあって納得感のない結果になることもある

という問題点がありました。
そこでこのライブラリでは、クラスター数をあらかじめ指定する通常の方法に加えて、
クラスター数が自動で決定される方法も用意しました。

クラスター数を自動で決定するために、各クラスター内において値のばらつき具合を判定して調整します。
すなわち、ある偏差値を閾値として、それを超える値がクラスター内に存在する場合はクラスターを分割します。
これにより、クラスターとして納得感のない状態を回避します。
また、クラスター数が 1 の状態から開始してクラスターを分割していくため、自然にどこかで収束し、
同じデータを使えば同じ結果が得られます。

基本的な使い方は次の通りです。

 

Train メソッドには、オプション引数として
最大クラスター数 (maxClustersNumber) および最大偏差値 (maxStandardScore) を指定できます。

maxStandardScore の既定値を 1.645 としています。これは、正規分布において 90% 以内を意味します。
データの性質に応じて、この maxStandardScore をチューニングするとよいでしょう。
(maxStandardScore の単位は標準偏差 σ です。偏差値 50, 60, 70 はそれぞれ 0, σ, 2σ に対応します。)

 

なお、クラスター数が 1 の状態から開始してクラスターを分割していくため、処理時間はかなりかかります。
したがってデータ数が大きい場合は、まずクラスター数が固定されたモデルで学習させ、
次に自動モードに変換して再学習するとよいでしょう。

 

サンプル

Bellona.Analysis を利用したサンプルのソースコードは ClusteringSample にあります。

System.Drawing.Color 構造体に含まれる色:

日本の都道府県庁所在地の緯度・経度:

 

バージョン情報
.NET Framework 4.5

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。