[shogun 1] shogunを使ってみよう

最近Shogun – A Large Scale Machine Learning Toolbox という機械学習のツールボックスを使い始めたので,shogunについて紹介します.
まず紹介ページの英語を適当に日本語に訳してみます.

SHOGUNは大規模なカーネル法と特にサポートベクタマシン(Support Vector Machine: SVM)[1]に重点を置いている機械学習ツールボックスである.いろいろなSVM実装(OCAS [21], Liblinear [20], LibSVM [2], SVMLight, [3] SVMLin [4] and GPDT [5])に対するインターフェースになる汎用的なSVMオブジェクトを提供する.SVMは様々なカーネルと組み合わせることができる.このツールボクスは線形カーネル,多項式カーネル,ガウシアンカーネル,シグモイドカーネルだけでなく,Locality Improved [6], Fischer [7], TOP [8], Spectrum [9], Weighted Degree Kernel (with shifts) [10] [11] [12]なども提供する.また効率的なLINADD [12]最適化法も実装している.線形SVMに対して,COFFIN framework [22][23]は疎行列,密行列他様々なデータタイプの混合に対してもオンデマンドで処理ができる.さらにSHOGUNは様々なpre-computedなカーネルで動くようになっている.重要なものとしては,サブカーネルの重み付き線形和による結合カーネルがある.この各サブカーネルは必ずしも同じドメインである必要はない.最適なサブカーネルの重みはMultiple Kernel Learning (MKL) [13][14][18][19]で学習できる.現在SVMは,1クラス,2クラス,多クラス分類,回帰問題を扱える.SHOGUNは線形判別分析(Linear Discriminant Analysis: LDA),線形計画マシン(Linear Programming Machine: LPM),パーセプトロン((Kernel) Perceptrons),隠れマルコフモデル(Hidden Markov Model)も実装されている.入力データは様々な型の疎・密行列を利用することができる.平均を引くなどの一連の前処理を各入力データに適用することもできる.
SHOGUNはC++で実装されており,Matlab, R, Octave, Python, Java, Ruby向けのインタフェースが用意されており,機械学習のオープンソースソフトウェアとして公開されている.

長々と書きましたが,重要なのは以下のポイントになります.

  • 様々なSVM実装が利用できる
  • 様々なカーネルを使える
  • SVM以外にもLDAとかHMMとかいろいろ使える
  • C++/Matlab/R/Octave/Python/Ruby/Javaなどで使える
  • オープンソースソフトウェアである

関西CV・PRML勉強会で紹介した時のスライドはこちらにあります.

僕はこのツールボックスを,Pythonから利用しはじめました.スライド中ではapt-getやMacPortsでインストールできると言っていますが,サンプルコードなどを入手したい場合は,gitを使ってソースコードをダウンロードし,コンパイルしてインストールするのがお勧めです.
gitがインストールされているならば

git clone git://github.com/shogun-toolbox/shogun.git
git clone git://github.com/shogun-toolbox/shogun-data.git

のコマンドで,shogunディレクトリとshogun-dataディレクトリができます.shogunディレクトリにはshogunのソースコードとサンプルコードが,shogun-dataディレクトリにはサンプルのデータが入っています.
ソースコードをダウンロードしたら,

cd shogun/src
./configure
make

し,管理者権限で

make install

することでインストールすることができます.
./configureの前に,swigがインストールされていないとpythonなどからの利用ができないので,先にインストールしておく必要があります.これはapt-getやMacPortsなどでインストールすることができます.
サンプルコードを動かすためには,サンプルデータのディレクトリの設定をする必要があります.shogunディレクトリ中で

rmdir data
ln -s ../shogun-data data

としてリンクを張っておく,もしくはshogun-dataの中身をshogun/dataへ移動すると完了です.
次のエントリではPython版のサンプルコードを動かすためのノウハウについて書きます.