cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

機械学習ライブラリShogun3.2をWindowsのCygwinで使う

機械学習が花盛りです。数多くの機械学習ライブラリが世に出ていますが、c++インターフェースでWindowsで動く物が、あまり多くないように見えます。更にMSVCで使えるもの、が見つかりません。MSVCで動かすことを妥協して探すと、ShogunというライブラリがCygwinで動くと書いてありました。これを試してみます。

Cygwin64ビット版にインストール

Cygwin32ビット版およびMingwでは、cmakeの段階でcmTryCompileExec~~というエラーが出て上手く動きませんでした。

Cygwin64ビット版では、上手く動きます。[7]で setup-x86_64.exeをダウンロードしてインストールします。適当に、devなどのパッケージもinstallしておきます。

Cygwin64 Terminalを開いて[2]を見ながら、順にインストール作業を進めます。

$ cd "$HOME"
$ wget ftp://shogun-toolbox.org/shogun/releases/3.2/sources/shogun-3.2.0.tar.bz2
$ tar xjf shogun-3.2.0.tar.bz2

$ wget ftp://shogun-toolbox.org/shogun/data/shogun-data-0.7.tar.bz2
$ tar xjf shogun-data-0.7.tar.bz2

$ cd shogun-3.2.0
$ rm -rv data/
$ ln -s ../shogun-data-0.7 data

 

$ cd "$HOME/shogun-3.2.0"

$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX="$HOME/shogun-install" ..

$ make -j5 all
$ make install

 

makeの段階で、fdopenが無いなどのエラーが出てきます。これは、[6]で言及されているように、

-std=c++11 を指定すると、__STRICT_ANSI__ が定義されるため

とのことなので、

shogun-3.2.0/src/shogun/io/File.cpp

を同じように編集します。

#include <stdio.h>
#include <stdlib.h>

を、 

/**** ここから ****/
#ifdef __STRICT_ANSI__
# undef __STRICT_ANSI__
# include <cstdio>
# include <string.h>
# include <stdlib.h>
# define __STRICT_ANSI__
#else
#include <stdio.h>
#include <stdlib.h>
#endif
/**** ここまで ****/

に変更します。

Exampleの実行

$LD_LIBRARY_PATHの変更が上手く反映されないので、dllを実行ファイルの場所に直接コピーします。shogun-3.2.0\build\src\shogunからcygshogun-16.dllをコピーして、shogun-install\share\shogun\examples\libshogunに貼り付けます。

$ export LD_LIBRARY_PATH="$HOME/shogun-install/lib:$LD_LIBRARY_PATH"
$ cd "$HOME/shogun-install/share/shogun/examples/libshogun"
$ chmod +x ./so_multiclass_BMRM && ./so_multiclass_BMRM

実行結果は、

$ chmod +x ./so_multiclass_BMRM && ./so_multiclass_BMRM
Train using lambda = 1000.000000 ICP removal = 1
result = { Fp=312.107662, Fd=309.663205, nIter=152, nCP=27, nzA=12, exitflag=1 }

Error = 3.000000 %

 何をしているのかよくわからないけれど、動いてはいるようです。

 

[1] The SHOGUN Machine Learning Toolbox

[2] SHOGUN: SHOGUN-TOOLBOX Quickstart

[3] 機械学習ライブラリ SHOGUN入門 « Rest Term

[4] SHOGUN使ってみました

[5] Robotics/Shogun - NAIST::OnlineText

[6] ブログズミ: Google Test を -std=c++11 でビルドするとエラーになっていたので修正した

[7] Cygwin Installation