Installing libsvm-3.1 for Python on Mac OS X 10.6

Share on:

libsvmをコンパイルして「その場で動かす」だけなら README に書いてある手順で進められますが、実用的には好きな場所で実行できるようにしたい。ということでその手順です。

【蛇足コラム】
svm-trainとかの場所をos.path.exists()で確認するようなスクリプトになっているので絶対パスで指定せざるを得ないのだけど、cdll.LoadLibrary()のように環境変数か何かで指定されたPATHを参照して対象ファイルが存在するかを判断するようなライブラリって無いんだろうか。
ConfigParserあたりで変更箇所を一括管理する形で書くのも良いかもしれないけど。

環境構築手順

  1. libsvm本家サイトからソースをダウンロード。
  2. コンパイル。
  3. > tar xvfz libsvm-3.1.tar.gz
    > cd libsvm-3.1
    > make
    
  4. 実行ファイルを ~/bin/libsvm/ に、ツールを ~/bin/libsvm/tools/ にコピー。(要PATH設定)
  5. > mkdir -p ~/bin/libsvm/tools
    > cp svm-predict svm-scale svm-train ~/bin/libsvm/
    > cp tools/*.py ~/bin/libsvm/tools/
    
  6. スクリプトのパスを修正。
  7. > emacs ~/bin/libsvm/tools/easy.py
    is_win32でWindowsか否かに分けてパスをしている箇所で、
    svmscale_exe 等のパスを絶対パスで指定。下記は記入例。
    =====begin(easy.py)=====
    svmscale_exe = "/Users/tnal/bin/libsvm/svm-scale"
    svmtrain_exe = "/Users/tnal/bin/libsvm/svm-train"
    svmpredict_exe = "/Users/tnal/bin/libsvm/svm-predict"
    grid_py = "/Users/tnal/bin/libsvm/tools/grid.py"
    gnuplot_exe = "/usr/local/bin/gnuplot"
    =====end=====
    
  8. バイナリの動作確認
  9. > svm-train
    等と引数無しで実行した時にエラーが出なければ
    (使い方が出力されるだけなら)OK。
    
  10. Python用 shared libraryのインストール
  11. > cd python
    > make     #../libsvm.so.2 が作成される
    > sudo cp ../libsvm.so.2 /usr/local/lib/
    
  12. Python用ライブラリ(スクリプト)の編集
  13. # ライブラリをインストールする場所の確認。
    > python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
    # 以下は「/Library/Python/2.6/site-packages」と出力された場合の例。
    > emacs svm.py
    「if sys.platform == 'win32':」後でパスを指定している箇所にて、
    以下のように変更。元のインデントを保つように注意。
    =====begin(svm.py)=====
    #libsvm = CDLL(os.path.join(os.path.dirname(__file__),\
    #                '../libsvm.so.2'))
    cdll.LoadLibrary("libsvm.so.2")
    libsvm = CDLL("libsvm.so.2")
    =====end=====
    
  14. Python用ライブラリ(スクリプト)のインストール。
  15. > mkdir /Library/Python/2.6/site-packages/libsvm
    > cp svm.py svmutil.py /Library/Python/2.6/site-packages/libsvm/
    > touch  /Library/Python/2.6/site-packages/libsvm/__init__.py
    
  16. Python用ライブラリの動作確認。
  17. > python
    >> from libsvm import svm
    でエラーが出なければOK。
    

参考サイト: Installing libsvm-3.0 for Python on OSX 10.6

Tags: , , ,