クラスタリングだって進化する
今日はデータサイエンティストとしての話題です
私はデータサイエンティストです。なので、もちろんそっちのことも日々考えているんですよ。あんまりそうとはみえないんですが。
というわけで、今日はちょっと毛色の変わったクラスタリングの話題です。
クラスタリングはとても重要な技術です
それはそうなのですが、ちょっと使いにくい状況だったりします。
使いにくい理由はというと、k-means 以降、なんかこれと言ってすごいアルゴリズムが出てきていないということかなーって思っています。
私が知らないだけかもしれませんが。
もちろん、k-means は非常に強力なアルゴリズムです。ちょっとしたクラスタリングなら、これでぜんぜん問題はありません。
ただ、k-means が得意とする領域はしっかりと理解しておくべきです。
k-means はクラスタ数がさほど多くないケースを想定したアルゴリズムであり、クラスタ数が1000なんてことをやろうとするとあっさりと計算量が爆発します。
クラス数がすんごく大きいケースって何?
最近の機械学習技術では、高次のベクトルで色々なデータを表現するというのが何となく大きな流れとして存在していると思います。
で、この高次元のベクトルをうまく使うためには、高次元のベクトルに対して、クラスタ数=1000とか10000 とかそんなレベルでのクラスタリングの技術が必要となります。
でも、これは k-means をベースにしているかぎり、あんまり良い結果は得られないと思います。
というわけでアルゴリズムの特徴
こんなケースのクラスタリングに特化したアルゴリズムを実装したプログラムを近日中に Microsoft Store に登録します。実のところ、エンジンは既に出来上がっているので、今は GUI をかぶせているところです。
この技術の特徴は以下のようになります。
クラスタ数が増えても問題なクラスタリングできる。但し、クラスタ数の想定は 10000程度まで。
クラスタリングの対象データは、高次のベクトルである。但し、ベクトルの次元数は固定。
データをメモリ上に展開するため、ちょっとばかりメモリは大量に必要。
(ここは改善の余地あり)100万データぐらいのデータを1000クラスタにまとめ上げるなら、8C16T のちょっと良い程度のパソコンでも数日でクラスタリング結果が得られます。
多次元空間でのデータも密度のゆらぎについては、ペナルティを与えることである程度キャンセルするオプションが選択可能。
安定したクラスタリングアルゴリズムではない。そのため、実行結果は毎回微妙に変わる。
アルゴリズムの権利
特許を取ろうかと思ったのですが、やめました。お金がないんで。
まぁ、個人で使う程度ならば、無償でOKって形にするつもりなので、趣味でクラスタリングしたい方が見えましたらお試し下さいませ。
何に使うの?
実は、かなり色々な用途で使うことが出来ます。
意味ベクトルをクラスタリングすることで類義語辞書を自動作成
意味ベースの検索エンジン
画像の類似度検査
データの類似度検査
異常データの抽出
これは考えられる応用例のほんの一部です。かなりの応用が考えられる技術なので、公開してしまえ!ってしてしまいました。
個人経営の会社だから怒る人もいないしね。
近々公開予定のデータサイエンス系のプログラム
Microsoft Store でぼちぼちと公開していきます。
まずは、データの依存関係調査ツール。これは、当面は無償公開です。そのうちにサブスクリプションに移行しますが、個人が使うぐらいの利用頻度だったら無償で何とかなるような設定にするつもりです。
そのツールの機能の一部として、データ品質の評価ツール。こちらは依存関係のツールのサブ機能として実装しているので、個人で使うぐらいだったら問題ないぐらいです。
次に出すのが、この記事で書いたクラスタリングツールです。とりあえず、chiVe あたりを喰わせてみると良いでしょう。すると、類義語辞書が簡単にできます。
だから、検索エンジンにこの辞書組み込めば、簡単に曖昧検索のエンジンができます。顧客ごとにベクトル集合を作ることが出来れば、顧客ごとのカスタマイズだって出来ちゃいますね。
学習する文書セットごとにベクトル空間は変わると思いますが、計算コストが安いのでとっかえひっかえ試すこともさほど問題はないですね。
なお、ベクトル空間は別に意味だけでは無く画像にも適用できます。つまり、昔懐かしき Bag of Image もクラスタリング技術があれば復権できます。
既に、SIFT特徴量をクラスタリングして画像を高速検索するテストプログラムも普通のPCでも何とか動くこと確認できましたからね。
EBt に当面は軸足を置いてはいますが
こっちの技術も同様に進めています。こんなことをやっている野良のDSもいるということを、少しでも知ってもらえると嬉しいかなと思います。
なお、エンジンが欲しい方は連絡くださいませ。学術関係の方には基本無償で提供します。企業様はご相談させてくださいませ。
というわけで、今日は技術紹介(というか予告)でした。