Multi-Class Support Vector Machine

one-versus-restでやっている実験をsvm_multiclass(SVM-Multiclass: Multi-Class Support Vector Machine)で実験してみた。
以下はメモ。

multiclassは多クラス分類用SVM
クラスごとにベクトル空間を作成し、テストデータがどのベクトルに近いかを見ている?

  • インストール
  1. svm_multiclass.tar.gzをダウンロード
  2. mkdir svm_multiclass
  3. mv svm_multiclass svm_multiclass.tar.gz
  4. cd svm_multiclass
  5. gunzip –c svm_multiclass.tar.gz | tar xvf –
  6. make


インストール完了後、パスを設定する
まずsetで現在使用しているシェルを確認
bashだとばかり思っていたらtcshだった)
パスの確認は echo $PATH

  • パスの設定
  1. ~/.tcshrcを作成
  2. ~/.tcshrc内にset path = ($path <追加したい path 名>)を追記
  3. 再度ログインするか、source .tcshrcを実行

<参考>パスを通す - bnote


パスを設定したディレクトリ内に、svm_multiclass_leranとsvm_multiclass_classifyを置いておく。

  • 使い方

<学習> svm_multiclass_learn -c 1.0 example_file model_file
example_file:学習データ
model_file:作成するモデルファイル名
cオプションは必ずいる。値が小さいほどソフトマージンで値が大きいほどハードマージンになる
正例が少なく、負例が多い場合にはハードマージンにした方がよいかも
<分類>svm_multiclass_classify [options] test_example_file model_file output_file
test_example_file:テストデータ
model_file:作成したモデルファイル
output_file:結果を出力するファイル

<クラス番号> <feature番号>:<重み> ...
3 1:0.43 3:0.12 9284:0.2
正解ラベルは+1,-1ではなくクラス番号(分類したい正解カテゴリに番号を振る)

  • 出力ファイル形式

<システムの出力クラス> <クラス1の期待値的なもの> <クラス2の期待値的なもの>....
7 -9.875518 -6.460163 -9.003758 -7.940923 -9.298646 -8.990040 89.529431 -33.355256 -4.605125
一番大きい数字のクラスを正解としている


先輩に教えて頂いたりして実験は終了したものの、結果は芳しくなさそうだった。
パラメーターによっても結果は変わるため、今後再実験と分析が必要。