LibSVM

LibSVMは台湾国立大学のLinらによって作られたSVMのライブラリです。 nu-SVMが使えたり、modelパラメータの探索を行うスクリプトがついており 非常に使い勝手の良いパッケージになっています。 使い方は付属のREADMEとFAQ.htmlを参照すれば大体わかると思います。 以下もほとんどこの2つを日本語に直しただけのものです。

の3つのコマンドからなっており、svm-scaleで訓練セットをスケーリングした後、 svm-trainでmodelを構築し、svm-predictによって予測を行います。

svm-scale

作成した訓練セットを引数に従ってスケーリングしてくれます。Optionは以下のとおりです。 -l,-uオプションはスケーリングの最大、最小値を指定するオプションでデフォルトはそれぞれ、-1、1です。 [0,1]でスケーリングした方が計算時間は早くなるようですが、基本的にデフォルトのままでよいと思います。
-s オプションと-rオプションは訓練セットとテストセットを同じようにスケーリングしたいときに、
svm-scale -s scaling_parameters traing_data > scaled_traing_data 
svm-scale -r scaling_parameters test_data > scaled_test_data 
のように用います。scaling_parametersには各特徴ベクトルの最大値と最小値が記録されており、 これによってテストセットを訓練セットと同じようにスケーリングしてやることができます。 このオプションを使わないと、テストセットはテストセットの最大値と最小値に従ってスケーリングされてしまうので 注意が必要です。

svm-train

訓練セットから予測のためのモデルを生成します。Optionは以下のとおりです。
-s svm_type : SVMタイプの指定 (デフォルト 0)
        0 -- C-SVC
        1 -- nu-SVC
        2 -- one-class SVM
        3 -- epsilon-SVR
        4 -- nu-SVR
-t kernel_type : カーネル関数の指定 (デフォルト 2)
        0 -- 線形(linear): u'*v
        1 -- 多項式(polynomial): (gamma*u'*v + coef0)^degree
        2 -- RBF(radial basis function): exp(-gamma*|u-v|^2)
        3 -- シグモイド(sigmoid): tanh(gamma*u'*v + coef0)
-d degree : カーネル関数のdegreeの指定 (デフォルト 3)
-g gamma : カーネル関数のgammaの指定 (デフォルト 1/k, kは訓練セットのインデックスの最大の値、つまり入力ベクトルの次元)
-r coef0 : カーネル関数のcoef0の指定 (デフォルト 0)
-c cost : コストパラメータの指定 (C-SVC, epsilon-SVR, and nu-SVRで使用、デフォルト 1)
-n nu : nuパラメータの指定 (nu-SVC, one-class SVM, and nu-SVRで使用、デフォルト 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (デフォルト 0.1)
-m cachesize : 使用キャッシュメモリサイズの指定(単位MB, デフォルト 40)
-e epsilon : 終了の閾値の設定 (デフォルト 0.001)
-h shrinking: whether to use the shrinking heuristics, 0 or 1 (デフォルト 1)
-wi weight: クラスiに対するコストパラメータの重み、weight*C (デフォルト 1)
-v n: n-foldのクロスバリデーションを実行
SVMのタイプはnu-SVMを使用するかC-SVMを使用するかは判断が難しいのですが、自分の対象としている問題から自ずと明らかになると思います。 カーネル関数の選択には常に頭を悩まされますが、Vapnikがカーネルの選択よりカーネルパラメータの選択の方が重要だというようなことを言っていますし、 LibSVMのマニュアルにあるようにとりあえずRBFカーネルを使っておけばよいでしょう。用意されていないストリングカーネルなどが使いたいときは svm.cppのKernelクラスを修正する必要があります。-vオプションでn-foldのクロスバリデーションが自動的でできるので性能の評価は手軽に行えます。 学習がなかなか終わらないという際には、-cオプションのコストパラメータを小さくしてみるか-eオプションで終了条件を緩めてやればよいようです。

svm-predict

予測を実行します。
svm-predict test_file model_file output_file
オプションは特にありません。
戻る