機械学習アルゴリズム実装用行列計算ライブラリ
いま大学の研究室で機械学習アルゴリズムを勉強がてら、実装してみよう企画がある。基本的には実用的な高速なのを作るというよりも、コードがシンプルなものを作るのが目的。
で、使う言語は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使えばって話になりそうだし、もっと言っちゃえば、これ使って組んで機械学習アルゴリズムの勉強になるのかな??
うーん、悩む・・・。