機械学習アルゴリズム実装用行列計算ライブラリ

いま大学の研究室で機械学習アルゴリズムを勉強がてら、実装してみよう企画がある。基本的には実用的な高速なのを作るというよりも、コードがシンプルなものを作るのが目的。
で、使う言語はC++で固まりそうなのだが、困っているのが行列演算とかの数学系のライブラリを何使うか。


http://www.kmonos.net/alang/cpp/lib.htmlには

  • Blitz++
  • MTL
  • tvmet

の3つが行列計算用と書いてあったので見比べてみた。

MTLは高速なのかもしれないが、ただの足し算もaddなどでやらないといけないようだったので、ちょっとコードのわかりやすさとか、今回の観点からはずれている気がした。そういう意味で、tvmetは小規模で最低限やりたいことはできるし、ドキュメントも見やすいのでいい。ただ、Blitz++のポピュラーさによる安心感は捨てがたいものがあった。

そんなこんなで、Blitz++とtvmetで迷っていたのだが、SVDとかしたいと思った時にできるのかなと思って調べてみると、この3つともできないことが判明!


そこでSVDのできるライブラリを探すとOctaveというのが見つかった。
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/numerical/

基本的に、パターン認識と機械学習とか書いている人はMATLAB使いが多いというので、MATLABクローンだったら幸せにプログラミングできそうな気がする。リンクがめんどくさいとか言うの欠点があるらしいが、ここにコンパイルオプション書いといてといてくれてるから、大丈夫そうだし。


ただ、これ使うなら、そもそもMATLAB使えばって話になりそうだし、もっと言っちゃえば、これ使って組んで機械学習アルゴリズムの勉強になるのかな??


うーん、悩む・・・。