しろかい!

アプリ開発や機械学習などの開発Tips.

LIBLINEARのパラメータをグリッドサーチするスクリプト書いた

LIBLINEARのパラメータ(cost, bias)をグリッドサーチしてくれるスクリプト「grid_with_bias_and_solver.py」を書きました.
ついでにソルバーも最適なものを選択してくれます.

f:id:shun9167:20150126203138p:plain

ソースコード

Gistにあげておきました!

使い方

ソースコード上部のコメントに書いてある通り.
以下では使い方の一例を紹介します.

1. grid.pyの入手

※DL済の場合は飛ばしてください.

LIBSVMに付属されている,LIBSVMのパラメータをグリッドサーチするスクリプトgrid.pyをDLします.
LIBLINEARのパラメータのグリッドサーチにも利用できる優れものです(ただしcostのみ).

grid.pyは以下のサイトからLIBSVMをDLできます.
解凍して展開されたディレクトリ内のtoolsディレクトリにgrid.pyがあります.

2. grid.pyがあるディレクトリを指定

grid_with_bias_and_solver.pyの37行目のGRID_DIRPATHに,grid.pyがあるディレクトリを指定してください.

3. 実行!

以下のコマンドでグリッドサーチを実行できます. なお,以下の環境で実行するものとします.

  • LIBLINEARのtrainコマンドがあるディレクトリにPATHが通っている.
  • grid_with_bias_and_solver.pyはカレントディレクトリに存在.
  • 学習データはLIBLINEARに付属してくるheart_scaleとし,これもカレントディレクトリに存在.
$ python grid_with_bias_and_solver.py -i heart_scale

上記コマンドを実行するとグリッドサーチが始まります.
しばらくして実行が完了すると,以下のようにAccuracyが高かったパラメータTop10を表示してくれます.
(組み合わせが多かったり,学習データが大きいとかなり時間がかかるかもしれません)

======= Results (Top10) =======
(solver, bias, cost, accuracy)
('4', 1.0, 0.125, 84.8148)
('0', 1.0, 0.25, 84.4444)
('1', 0.1, 4.0, 84.4444)
('1', 1.0, 0.03125, 84.4444)
('2', 0.1, 0.5, 84.4444)
('2', 1.0, 0.03125, 84.4444)
('3', 0.0001, 0.125, 84.4444)
('3', 0.001, 0.125, 84.4444)
('3', 0.01, 0.125, 84.4444)

solver=4,bias=1.0,cost=0.125が最適のようです.
後は,このパラメータで実際にモデルを学習すればOKです!

利用上の注意

ソルバーがロジスティック回帰(0,6,7)のものでしか動作は検証していません*1.
利用時は自己責任でお願いします.

*1:一部のソルバーを使うと,例外が発生して途中でスクリプトが終了してしまうっぽいです…