Skip to content

Instantly share code, notes, and snippets.

@beam2d
Last active December 26, 2015 22:59
Show Gist options
  • Save beam2d/7227556 to your computer and use it in GitHub Desktop.
Save beam2d/7227556 to your computer and use it in GitHub Desktop.

Eigen導入の検討

概要

0.5.0で導入予定のクラスタリングにおいてEigenを使っている。 この文書には以下の情報を掲載する。

  • Eigenをどの範囲で使っているか、Eigenの利用をoptionalにできるか
  • Eigenを導入するやり方にはどういう選択肢があるか

これらの情報をもとに、Eigenを導入するかどうか、どう導入するかを決めたい。 依存ライブラリが増えるかもしれない話なので開発陣はひと通り目を通して欲しい。

前提知識: Eigen

概要

Eigenは効率よい行列演算を簡潔に記述するためのC++のヘッダライブラリである。

ライセンス

  • 3.1.0まではLGPL3.0+
    • LGPL2と互換性がない
  • 3.1.1以降は一部を除いてMPL2

なので利用するなら3.1.1+。

使用範囲

jubatus/core/clustering内のGMMアルゴリズム内で使っている。

クラスタリングではk-Meansと混合ガウスモデル(GMM)という二つの手法を実装している。 このうちGMMにおいて、連立一次方程式のソルバーや行列式計算、行列の掛け算などが必要である。 特に連立一次方程式ソルバーや行列式計算を一から自分で書くのはコストが高く非効率なので、何らかのライブラリを利用する必要がある。 現状はそこでEigenを使用している。 Eigen以外の選択肢は特に検討していない。

使用箇所は以下のとおり。

  • jubatus/core/clustering/eigen_feature_mapper.{hpp|cpp}
  • jubatus/core/clustering/gmm.{hpp|cpp}
  • jubatus/core/clustering/gmm_clustering_method.cpp

オプショナル化

Eigenを使わないでビルドできるようにするには、GMMをdisableできるようにすれば良い。 必要な作業は以下のとおり。

  • configureのオプションでGMMに関するソースコードを外せるようにする
  • clustering_method_factoryのコードに#ifを入れる

導入方法の選択肢

Jubatusのソースツリー内に埋め込む

jubatus/core/third_party ディレクトリを作り、その中にEigen以下をまるっと入れる。

Pros

  • 依存パッケージが増えない
  • バージョンを自由に選べる
  • GMMのoptional化をしなくて良い

Cons

  • ソースツリーが太る

configure時にダウンロード

waf configure時にEigenがあるかどうか調べ、なかったらその場でダウンロードしてその場で展開、include pathを通す。

Pros

  • ソースツリーをいじらないで済む
  • バージョンを自由に選べる

Cons

  • Eigenがない環境でGMM enabledでビルドしたい場合、ビルド時にインターネット環境が必要になる

パッケージを使う

未調査。Eigen3.1.1がJuly, 2012なのでUbuntuのLTSなどで使えなさそう。

@beam2d
Copy link
Author

beam2d commented Nov 6, 2013

@suma
まとめありがとうございます。

@odasatoshi
おお、そうでしたか。
確認不足でした。ありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment