svmtools version 36

※これはversion 20用のマニュアルであり内容は古い可能性があります

===============================================================================
1. はじめに

svmtoolsは、機械学習アルゴリズムの一つであるSupport Vector Machine (SVM)[1]に
関する処理を行う、いくつかのプログラムを集めたものです。
できるだけシンプルでいじりやすいものを目指して作られています。
svmtoolsは次のプログラムからなっています。
 svm_train
 svm_classify
 svm_fv2ft
 svm_fv2sv
 svm_sv2fv
svmtoolsでは次のようなことを行えます。
・訓練データに対してSVMのモデルを学習する
  (svm_train)
・評価データに対して、SVMのモデルで分類を行ない評価をする
  (svm_classify)
・事例データのインデックス部に対して、文字列と数値の変換を行う
  (svm_fv2ft, svm_fv2sv, svm_sv2fv)
・C言語で、他のプログラムから上記の処理を行う関数を呼び出す



===============================================================================
2. プログラムのコンパイル

プログラムは全てC言語で書かれています。ソースファイルのあるディレクトリで
% make
と実行することで全てのプログラムがコンパイルされます。



===============================================================================
3. 使用するファイルの説明(フォーマット)

svmtoolsで使用するデータは基本的にSVM^light version 3.02 [2]で使用するものと
同じフォーマットです。


-------------------------------------------------------------------------------
3.1. 事例(訓練／評価)データ(sparse vector) [*.sv]

訓練、評価に使用するデータは、1行が1事例からなっているテキストファイルで、
各事例は次のようなスパーズなベクトル表現になっています。
---
+1 1:1.5 2:3.34 5:4.33
-1 2:4 3:566.6
---
始めにその事例のラベルがあり、その後に1以上の値を持つベクトルの要素が
空白で区切られて並んでいます。
ラベルは、二値分類の場合は 1(+1) か -1 で、マルチクラスの場合は 0 から
(<クラスの数> - 1) の値です。
ベクトルの要素は、その要素の次元の番号(1以上の整数)とその値(実数)をコロンで
つなげたものです。値が0である要素は省くことができます。
各要素は、その次元の番号の昇順でソートされていなければなりません。
上の2つの例は、次のようなベクトルを表しています。
---
+1 (1.5, 3.34,     0, 0, 4.33)
-1 (  0,    4, 566.6, 0,    0)
---
このフォーマットは、SVM^light、Tiny SVM[3]、libsvm[4]等で使用されているものと
同じです。


-------------------------------------------------------------------------------
3.2. モデルデータ [*.mdl]

SVMの学習結果を格納するモデルデータのフォーマットは、SVM^light version 3.02と
同一のものを使用しています。


-------------------------------------------------------------------------------
3.3. 事例(訓練／評価)データ(feature vector) [*.fv]

上記の事例データ(*.sv)は、ベクトルの要素の次元が整数で表現されていますが、
このフォーマットでは数値以外に文字列を使うことができます。例として、
---
+1 price:100 size:40 weight:50
+1 price:80 size:60 weight:20
---
というようなデータを扱えます。文字列の部分には、空白やタブや改行以外の
文字が使えます。
各要素がソートされている必要はありません。
EUCの日本語も使えます。


-------------------------------------------------------------------------------
3.4. 素性テーブル [*.ft]

上で説明して2つの事例データ(*.svと*.fv)の対応をとるために必要な、素性のテーブル
です。事例データ(*.fv)を扱う際は、各次元の文字列に対して1から順番に数値を
割り当てて処理しますが、このファイルにはその文字列が1から順番に1行ずつ
格納されます。



===============================================================================
4. 各プログラムの説明


-------------------------------------------------------------------------------
4.1. svm_train

このプログラムはSVMの学習を行います。
使い方はSVM^lightやTinySVMとほぼ同じです。
例として、C=1、2次のpolynomial kernelを使用して、train.svという訓練データから
model.mdlというモデルを学習したいときは、
---
% ./svm_train -c 1 -t 1 -d 2 train.sv model.mdl
---
と実行します。
オプションを何もつけずに実行すると下記のように説明が表示されます。
---
usage: ./svm_train [<options>...] <example file> <model file> [<alpha file>]
<options>:
        -c <cost> : cost C of constraints violation [1]
        -t <kernel_type> : kernel type [1]
           0 - linear <x,y>
           1 - polynomial (g <x, y> + c)^d
           2 - rbf exp(-g ||x - y||^2)
           3 - sigmoid tanh(g <x, y> + c)
        -d <degree> : degree [2]
        -g <gamma> : gamma [1]
        -r <coef> : coef [1]
        -m <cache_size> : cache size (MB) [40]
---
[]内の数値はデフォルトの値です。
-cはSVMの訓練誤差を調節するパラメータCの値を設定します。
-tはカーネルの種類を指定します。
-dと-gと-rはカーネルのパラメータを指定します。
-mは学習時に使用するキャッシュの大きさを指定するもので、訓練データの量が大きい
場合に、ここで大きな値を指定すると学習にかかる時間が短くなります。
<alpha file>を指定した場合、SVMの学習によって各学習事例に割り当てられた
αの値が<example file>と対応する順番でこのファイルの各行に出力されます。
学習に用いるアルゴリズムにはSMO[5]を使用しています。


-------------------------------------------------------------------------------
4.2. svm_classify

このプログラムはSVMで分類を行います。
例として、model.mdlというSVMのモデルでtest.svという評価データの評価を
行いたい場合は、
---
% ./svm_classify test.sv model.mdl
---
と実行します。
結果として次の値が出力されます:
 Accuracy:  正例を正、負例を負と判定した割合
 Precision: SVMが正と判定した中で実際に正例であった事例の割合
 Recall:    正例の事例の中でSVMが正と判定したものの割合
 F-measure: 2 * Recall * Precision / (Recall + Precision)
オプションを何もつけずに実行すると下記のように説明が表示されます。
---
usage: ./svm_classify <example file> <model file> [<output file>]
---
<output file>を指定した場合、SVMによって分類を行った時の判別関数の値が
<example file>と対応する順番でこのファイルの各行に出力されます。

-------------------------------------------------------------------------------
4.3. svm_fv2ft

このプログラムは *.fv 形式の事例ファイルから素性テーブル(*.ftファイル)を作成
します。生成される *.ft ファイルの要素はソートされます。
例:
---
% ./svm_fv2ft < examples.fv > examples.ft
% cat examples.fv
+1 size:10 値段:2000 weight:3.4
-1 size:5  値段:1000 weight:2
% cat examples.ft
size
weight
値段
---


-------------------------------------------------------------------------------
4.4. svm_fv2sv

このプログラムは *.fv 形式の事例ファイルと素性テーブル(*.ftファイル)から
*.sv 形式の事例ファイルを作成します。

上の例の続き:
---
% ./svm_fv2sv examples.ft < examples.fv > examples.sv
% cat examples.sv
+1 1:10 2:3.4 3:2000
-1 1:5 2:2 3:1000
---


-------------------------------------------------------------------------------
4.5. svm_sv2fv

このプログラムは *.sv 形式の事例ファイルと素性テーブル(*.ftファイル)から
*.fv 形式の事例ファイルを再現します。
しかし、ベクトルの各要素の順番は始めの *.fv ファイルと異なります。

上の例の続き:
---
% ./svm_sv2fv examples.ft < examples.sv > examples2.fv
% cat examples2.fv
+1 size:10 weight:3.4 値段:2000
-1 size:5 weight:2 値段:1000
---

-------------------------------------------------------------------------------
4.6. svm_mc_train

このプログラムはマルチクラスの分類問題に対してSVMの学習を行います。
使い方は svm_train とほぼ同じです。
-mcオプションで、マルチクラスの分類を行う方法を指定しますが、このプログラムで
は one-versus-rest、pairwise[6]、sequential binary tree[7]の3つをサポートして
います。

-------------------------------------------------------------------------------
4.7. svm_mc_classify

このプログラムはマルチクラスの分類問題に対してSVMで分類を行います。
<output file>には svm_classify の場合とは異なり、各事例がどのクラスに分類
されたかが出力されます。



===============================================================================
5. 参考文献

[1] Vladimir Vapnik. 1998. Statistical Learning Theory. Springer.
[2] Joachims,T. SVM light : Support Vector Machine.
    http://www-ai.cs.uni-dortmund.de/SOFTWARE/SVM_LIGHT/
    svm_light_v3.02.eng.html.
[3] Taku Kudo. Tiny SVM. http://cl.aist-nara.ac.jp/~taku-ku/software/TinySVM/
[4] Chih-Chung Chang and Chih-Jen Lin.
    LIBSVM -- A Library for Support Vector Machines.
    http://www.csie.ntu.edu.tw/~cjlin/libsvm/
[5] John C. Platt.
    Fast Training of Support Vector Machines using Sequential Minimal
    Optimization. Advances in Kernel Methods -- Support Vector Learning.
    MIT Press.
[6] Ulrich Kressel. Pairwise Classification and Support Vector Machines.
    Advances in Kernel Methods -- Support Vector Learning. MIT Press.
[7] 山田寛康, 松本裕治. Support Vector Machineの多値分類問題への適用法について.
    情報処理学会研究報告 2001-NL-146


---
Copyright(C) 2007-2012 National Institute of Information and Communications Technology