LIBSVM

== LIBSVM(A Library for Support Vector Machines)とは? ==
* 台湾国立大学のLinらによって作成されたSVMのライブラリ
* 現在はVersion 3.11が公開されています (2011年11月)
* サポートベクタ分類器(C-SVC、nu-SVC)、回帰分析(epsilon-SVR、nu-SVR)、分布評価(1クラスSVM)のための統合ソフト
* 多クラス(マルチクラス:multi-class)の分類にも対応

== LIBSVMの入手方法 ==
* 下記のサイトよりダウンロードが可能です
: [http://www.csie.ntu.edu.tw/~cjlin/libsvm/ LIBSVM -- A Library for Support Vector Machines]
* ページ内の「Download LIBSVM」という項目にzip fileとtar.gz fileの2種類が置いてあります

== LIBSVMの使用方法 ==
* 初めに入手したファイルを展開し、展開したディレクトリ内で'''make'''を実行(Linuxの場合)
* make実行後に以下のファイルが作成されます
 svm-scale
 svm-train
 svm-predict
* LIBSVMの処理手順は以下のような感じになります
# svm-scaleコマンドにより、学習データと評価データのスケーリングを行う
# svm-trainコマンドにより、学習データに基づいたモデルを構築する
# svm-predictコマンドにより、評価データに対する2値分類の結果を求める

== 使用するデータ(学習・評価データ)のフォーマット ==
* 以下のように、1つのクラスラベルに対する素性情報を1行で記述します
 クラスラベル 素性番号:数値 素性番号:数値 ・・・
 クラスラベル 素性番号:数値 素性番号:数値 ・・・
* クラスラベルや各素性情報の間(区切り)には半角スペースを入れます
* クラスラベルには正例と負例を表す値が入ります
 正例データならクラスラベルは '''1'''
 負例データならクラスラベルは '''-1'''
* 学習データで用いる正例と負例のデータ数は同じでなければなりません

== svm-scaleコマンドについて ==
: 学習データと評価データのスケーリングを行う際に使用するコマンド

=== svm-scaleコマンドで使用できるオプション ===
: 以下のオプションを指定することができます
 -l lower (スケーリングの最小値の指定、デフォルトの設定は -1)
 -u upper (スケーリングの最大値の指定、デフォルトの設定は 1)
 -y y_lower y_upper
 -s savefile
 -r restorefile

=== svm-scaleコマンドの使用方法 ===
* 学習データと評価データを同じようにスケーリングするためには、以下のように行えばよいです
 1. -sオプションで学習データのスケーリングを行い、学習データに関する各素性の最大値と最小値を記録したファイルを作成する
 2. -rオプションで記録した各素性の最大値と最小値に従って、評価データのスケーリングを行う
 
 コマンドの使用例:
 svm-scale -s 各素性の最大値と最小値の情報を記録するファイル名を指定 学習データのファイル名を指定 > スケーリング後の学習データを保存するファイル名を指定
 svm-scale -r 各素性の最大値と最小値の情報が記録されているファイル名を指定 評価データのファイル名を指定 > スケーリング後の評価データを保存するファイル名を指定

* -sオプションと-rオプションを使用しない場合、学習データと評価データはそれぞれの最大値と最小値に従ってスケーリングされてしまうので注意が必要です

== svm-trainコマンドについて ==
: 学習データからモデルを構築する際に使用するコマンド

=== svm-trainコマンドで使用できるオプション ===
: 以下のオプションを指定することで初期設定を変更することができます

* SVMのタイプに関するオプション
 -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 : SVMタイプがC-SVC,epsilon-SVR,nu-SVRの時に使用するコストパラメータの指定 (デフォルトの設定は 1)
 -n nu : SVMタイプがnu-SVC,one-class SVM,nu-SVRの時に使用するnuパラメータの指定 (デフォルトの設定は 0.5)
 -m cachesize : 使用キャッシュメモリサイズの指定(単位MB, デフォルトの設定は 40)
 -e epsilon : 終了の閾値の設定 (デフォルトの設定は 0.001)
 -v n: n-foldのクロスバリデーションを実行

=== svm-trainコマンドの使用方法 ===
* オプションでいろいろと設定できますが、とりあえずデフォルトの設定で問題ないと思います
 コマンドの使用例:
 svm-train 学習データのファイル名を指定
* 実行後、「学習データのファイル名.model」というファイルが作成されます

== svm-predictコマンドについて ==
: 学習データから構築したモデルを使用して、評価データの2値分類を行い、結果を出力するコマンド

=== svm-predictコマンドの使用方法 ===
 コマンドの使用例:
 svm-predict 評価データのファイル名を指定 svm-trainコマンドで作成したモデルのファイル名を指定 評価データの2値分類の結果を出力するファイル名を指定 > 精度(Accuracy)を出力するファイル名を指定

==  参考ページ ==
: 以下のページを参考にさせていただきました
* [http://www.csie.ntu.edu.tw/~cjlin/libsvm/ LIBSVM -- A Library for Support Vector Machines]
* [http://www.okuma.nuee.nagoya-u.ac.jp/~sakaguti/wiki/index.php?LibSVM LibSVM - 名古屋大学大熊研究室]
* [http://www.bi.a.u-tokyo.ac.jp/~tak/libsvm.html LibSVM]
* [http://d.hatena.ne.jp/momo_dev/20080331/p2 LIBSVMの使いかたまとめ]
* [http://www.statsoft.com/textbook/support-vector-machines/ Support Vector Machines (SVM)]

[[Category:用語集]]

Comments