LibSVMをC/C++のライブラリとして使う準備(2018/9/30)


はじめに

LibSVM( https://www.csie.ntu.edu.tw/~cjlin/libsvm/ )をC/C++上でライブラリとして使用するための準備過程がどこにも書かれていなかったので、私が行ったやり方をメモしておこうと思います。

0.環境

macOS High Sierra version 10.13.6
gccコンパイラ 4.2.1

1.ダウンロードとインストール

LibSVM は上記のURLからダウンロードできますが、素のソースコードからライブラリ化するのはやや億劫でした。
代わりにhomebrewからダウンロードとインストールを行います。

$ brew install libsvm;

インストールすると、svm-trainなどが実行バイナリとして使えるようになりますが、今回はライブラリの状態で使いたいのでこれ自体に興味はありません。

2.インストール先の確認

次にhomebrewでのインストール先を確認します。

$ brew info libsvm;
libsvmの情報
libsvm: stable 3.22 (bottled)
Library for support vector machines
https://www.csie.ntu.edu.tw/~cjlin/libsvm/
/usr/local/Cellar/libsvm/3.22 (10 files, 230.3KB) *
  Poured from bottle on 2018-09-30 at 02:05:39
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/libsvm.rb
==> Analytics
install: 75 (30d), 377 (90d), 1,474 (365d)
install_on_request: 64 (30d), 303 (90d), 1,117 (365d)
build_error: 0 (30d)

libsvmは、"/usr/local/Cellar/libsvm/3.22"にあることがわかります。
この場所をopenコマンドを使ってファイダーで開くと、include,libといったディレクトリがあります。この場所をメモできたら準備完了です。

3.実際にコンパイルしてみる

今回は、えくー様のブログの記事( http://fe0km.blog.fc2.com/blog-entry-95.html )のプログラム(おまけ1:unique_ptrとか使ったC++コード)を再現することを行いました。
恐縮ながらライブラリのインクルード表記のみ変えさせていただきました。

変更前
#include <libsvm/svm.h>

変更後
#include <svm.h>

それでは、カレントディレクトリにコード(libsvm_test.cpp)をおいて、コンパイルしてみます。

libsvm_test.cppをコンパイル
g++ -std=c++14 -o libsvm_test libsvm_test.cpp -I /usr/local/Cellar/libsvm/3.22/include -L /usr/local/Cellar/libsvm/3.22/lib -l svm `pkg-config --libs opencv`;

無事エラーもなく、終了。それでは実行してみましょう。

実行
./libsvm_test

Accuracy[%] = 93となっているところからおおよそ上手く学習できていそうですね。

4.所感

Makefileがそれほど充実していないライブラリの管理において、homebrewを利用するのはバージョン管理の面でも便利かと思います。少なくとも闇雲にパスやリンクを弄りつづけるよりは、安全かつ精神をすり減らさないので快適です。

あとこの記事、別に機械学習とは関係ないかも・・・。