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: 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)をおいて、コンパイルしてみます。
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を利用するのはバージョン管理の面でも便利かと思います。少なくとも闇雲にパスやリンクを弄りつづけるよりは、安全かつ精神をすり減らさないので快適です。
あとこの記事、別に機械学習とは関係ないかも・・・。
Author And Source
この問題について(LibSVMをC/C++のライブラリとして使う準備(2018/9/30)), 我々は、より多くの情報をここで見つけました https://qiita.com/Kazuki-Nakamae/items/936e38f79c6dce9a5e3e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .