LibSVM

比較的簡単に扱えるSVMライブラリ.
多値分類も可能.

導入

公式ページよりzipまたはtar.gzをDL.
中に入ってるsvm-predict, svm-scale, svm-trainはそのまま実行可能.
pathの通ってる場所においておくと良い.

素性のフォーマット

1行1データ形式.
行頭にそのデータのクラス,その後ろに半角スペース区切りで(素性番号):(値)を追加していく.
具体的にはこんな感じ
1 1:1.0 2:0.5
1 1:-0.5 2:1.0
-1 1:-1.0 2:-1.0
-1 1:1.0 2:-2.0

特徴値(素性の値)のスケーリング

基本的にはスケーリングを行うことをおすすめする.

デフォルトで-1~+1にスケーリングする.オプションで範囲を指定可能.
% svm-scale data_train.dat > data_train_scaled.dat       # data_train.datを-1~+1の範囲でスケーリングし,data_train_scaled.datに出力
% svm-scale -l 0 data_train.dat > data_train_scaled.dat  # data_train.datを0~1の範囲でスケーリングし,data_train_scaled.datに出力


スケーリングのパラメータをファイルに出力し,同じパラメータで別のファイルをスケーリングすることもできる.
(訓練データをスケーリングしたうえで,評価データも同じパラメータでスケーリングする際に利用)
% svm-scale -s scale_param data_train.dat > data_train_scaled.dat
% svm-scale -r scale_param data_test.dat > data_test_scaled.dat    # data_train.datと同じパラメータでスケーリング

学習

SVMの種類やカーネル関数をオプション指定できる.
svm-trainとだけ打つと,使い方とオプションの説明が見られる.
自然言語処理においては,素性種類数が多いので,線形カーネル(-t 0オプション)を用いるとうまく行きやすい.

% svm-train -t 0 -c 0.5 data_train_scaled.dat model.txt # data_train_scaled.datより学習,学習したモデルをmodel.txtに出力(線形カーネルを使用,Cパラメータは0.5)

-vオプションでn分割交差検定も行うことが出来るので,パラメータの決定に便利.
`% svm-train -t 0 -c 0.5 -v 10 data_train_scaled.dat # data_train_scaled.datを用いて10分割交差検定(カーネル関数は上に同じ)

分類

学習したモデルを用いて分類を行うには
% svm-predict data_test_scaled.dat model.txt result.txt # data_test_scaled.datを対象としモデルmodel.txtによる分類を行う.分類結果はresult.txtに出力.

とすれば良い.
標準出力には分類精度が出力される.
Comments