kemba-svm.exe
Japanese スペース English

SVM ソフトウェア

サンプルデータ

スペース スペース スペース
このソフトウェアはサポートベクトルマシン(SVM)アルゴリズムの一つの実装である.このソフトウェアの使用方法を現在広く使われているlibsvmと使い方と比較しながら示す.画面のイメージを使ったより詳しい説明はこちらを参照されたい.
スペース    

kemba-svm.exe の使い方

 

libsvmの使い方

SVMを使うにはカーネルと呼ばれるものを選択しなければならない.kemba-svm.exe がサポートしているカーネルは

  • 線形カーネル
  • RBFカーネル
  • 多項式カーネル
  • partial distance カーネル[1]

の4つである.そのほかに予め計算済みのカーネル行列からSVMを動かすこともできるがここでは説明しない.

 

SVMを使うにはカーネルと呼ばれるものを選択しなければならない.現在 libsvm がサポートしているカーネルは

  • 線形カーネル
  • RBFカーネル
  • 多項式カーネル
  • シグモイドカーネル

の4つである.ただし,シグモイドカーネルは半正定値カーネルではないので,シグモイドカーネルを使った場合はSVM学習の理論保証は一般に得られない(パラメータの選び方によっては半正定値カーネルになる場合もある).そのほかに予め計算済みのカーネル行列からSVMを動かすこともできるがここでは説明しない.

サンプルデータを使って使用方法を説明する.このように47個の正例と25個の負例に対して100次元特徴ベクトルが与えられていたとする.このうち正例負例それぞれ10個だけ正解のクラスラベルが与えられており,残りの52個のクラスラベルを予測するタスクを考える.

正解
正解
クラスラベル
問題
特徴ベクトル
特徴ベクトル

クラスラベルは,正例を+1,負例を-1,未知データを0としたファイル「k.y-true.csv」で与える.特徴ベクトルは,72行100列の行列で特徴ベクトルを表したファイル「k.X.csv」で与える.この2つのファイルはMS-Excelなどで中身を確認することができる.

SVMは各々の例題にスコアを与える.そのスコアは「k.yhat.csv」という名前のファイルに出力される.そのスコアをある閾値以上なら正例と予測し,閾値以下なら負例と予測する.閾値としては,しばしば0が使われる.そのやりかたを線形カーネルから順番に説明する.ここでは,プラットフォームとして,Windows XP を仮定している.

 

左と同じサンプルデータをlibsvmでSVM識別をするには,libsvm用の書式に変換する必要がある.libsvm は,データを訓練用と評価用の2つのデータファイルに分ける必要がある.それぞれのデータファイルの書式は,

クラスラベル 番号:数値 番号:数値 ...
クラスラベル 番号:数値 番号:数値 ...

というように1行1例題となっている. 左のサンプルデータをlibsvmの形式に直したのが,

である.

訓練用例題が20個,評価用例題が52個であったが,たしかにこの2つのデータファイルは,それぞれ20行,52行のファイルになっていることが確認できる.

線形カーネルを使用する場合

kemba-svm.exe のパッケージを上記のリンクからダウンロードしてフォルダ「マイドキュメント」の下に展開する.そこに,ファイル「k.y-true.csv」とファイル「k.X.csv」をおく.さらに,線形カーネル用のパラメータファイルをそのフォルダ「kemba-svm1-ts」に入れる.(より詳しい説明はこちら

Windowsの「スタートボタン」から「すべてのプログラム-アクセサリ-コマンドプロンプト」をクリックする.すると,コマンドプロンプトのウィンドウが表示される.コマンドプロンプト上で,

cd "My Documents\kemba-svm1-ts"
      

を実行することにより,フォルダ「kemba-svm1-ts」に移動する.そこで,

kemba-svm.exe --cb2007a kemba-param.lin.data

とうつ.すると,画面に

kemba-svm.exe Tsuyoshi Kato
Reading k.X.csv...done.
Reading k.y-true.csv...done.
Writing k.yhat.csv...k.yhat.csv written.
done.
Writing k.params-exp.txt...done.

と表示される.この「k.yhat.csv」に各例題のスコアが入っている.そのスコアが0以上なら,正例,0以下なら負例と識別した結果を図示したのが次の図である.

線形カーネル
 

libsvmのウェブページからパッケージ「libsvm-2.**.zip」をダウンロードしてフォルダ「マイドキュメント」の下に展開する.そこに,訓練用データ「k.yX-tra.dat」と評価用データ「k.yX-tst.dat」をおく.

Windowsの「スタートボタン」から「すべてのプログラム-アクセサリ-コマンドプロンプト」をクリックする.すると,コマンドプロンプトのウィンドウが表示される.コマンドプロンプト上で,

cd "My Documents\libsvm-2.84\windows"

を実行することにより,libsvm のソフトウェアが入ったフォルダ「windows」に移動する.そこで,

svmtrain.exe -s 0 -t 0 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.res.dat

と2つのコマンドを実行する.すると,52個の未知データに対する予測結果「k.res.dat」が得られる.

RBFカーネルを使用する場合

RBFカーネル用のパラメータファイルをフォルダ「kemba-svm1-ts」に入れる.

RBFカーネルはスケールパラメータγを持っている.このパラメータファイルでは,γ=0.01,0.05,0.1,0.5の4つの場合を試すように指定されている.線形カーネルの場合と同様に,コマンドプロンプトで

kemba-svm.exe --cb2007a kemba-param.rbf.data

と実行する.すると,「k.yhat.csv」というファイルが出力される.このファイルには4行72列の行列が入っている.1行目はγ=0.01の場合の各例題のスコア,2行目はγ=0.05の場合のスコア,3行目はγ=0.1の場合のスコア,4行目はγ=0.5の場合のスコアが入っている.そのスコアが0以上なら,正例,0以下なら負例と識別した結果を図示したのが次の図である.

RBFカーネル

各行にどのパラメータを使った場合のスコアが入っているか確かめるには,ファイル「k.params-exp.txt」を見ればよい.このファイルの各行はファイル「k.yhat.csv」の各行に対応しており,どの値を使ったか示している.

 

RBFカーネルはスケールパラメータγを持っている.γ=0.01,0.05,0.1,0.5の4つの場合,次のように行う.コマンドプロンプトで

svmtrain.exe -s 0 -t 2 -g 0.01 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.g_0.01.res.dat
svmtrain.exe -s 0 -t 2 -g 0.05 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.g_0.05.res.dat
svmtrain.exe -s 0 -t 2 -g 0.1 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.g_0.1.res.dat
svmtrain.exe -s 0 -t 2 -g 0.5 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.g_0.5.res.dat

と8つのコマンドを実行する.γ=0.01,0.05,0.1,0.5の4つの場合の識別結果はそれぞれ,「k.g_0.01.res.dat」,「k.g_0.05.res.dat」,「k.g_0.1.res.dat」,「k.g_0.5.res.dat」に入っている.

多項式カーネルを使う場合

多項式カーネル用のパラメータファイルをフォルダ「kemba-svm1-ts」に入れる.

多項式カーネルは次数パラメータpを持っている.このパラメータファイルでは,p=2, 3, 4の3つの場合を試すように指定されている.線形カーネルやRBFカーネルの場合と同様に,コマンドプロンプトで

kemba-svm.exe --cb2007a kemba-param.poly.data

と実行する.すると,「k.yhat.csv」というファイルが出力される.このファイルには3行72列の行列が入っている.1行目はp=2の場合の各例題のスコア,2行目はp=3の場合のスコア,3行目はp=4の場合のスコアが入っている.そのスコアが0以上なら,正例,0以下なら負例と識別した結果を図示したのが次の図である.

多項式カーネル

各行にどのパラメータを使った場合のスコアが入っているか確かめるには,ファイル「k.params-exp.txt」を見ればよい.このファイルの各行はファイル「k.yhat.csv」の各行に対応しており,どの値を使ったか示している.

 

多項式カーネルは次数パラメータpを持っている.p=2, 3, 4の3つの場合を試すには,コマンドプロンプトで

svmtrain.exe -s 0 -t 1 -d 2 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.d_2.res.dat
svmtrain.exe -s 0 -t 1 -d 3 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.d_3.res.dat
svmtrain.exe -s 0 -t 1 -d 4 k.yX-tra.dat k.model
svmpredict.exe k.yX-tst.dat k.model k.d_4.res.dat

と6つのコマンドを実行する.p=2, 3, 4の3つの場合の識別結果はそれぞれ,「k.d_2.res.dat」,「k.d_3.res.dat」,「k.d_4.res.dat」に入っている.

partial distance カーネル[1]を使う場合

partial distance カーネル用のパラメータファイルをフォルダ「kemba-svm1-ts」に入れる.

コマンドプロンプトで

kemba-svm.exe --cb2007a kemba-param.kernemb.data

と実行する.この実行には,ほかのカーネルよりも少し時間がかかる.各例題のスコアはファイル「k.yhat.csv」に出力される.そのスコアが0以上なら,正例,0以下なら負例と識別した結果を図示したのが次の図である.

partial distance カーネル
 

あらゆるカーネルを試す場合

パラメータファイルをフォルダ「kemba-svm1-ts」に入れる.

このパラメータファイルは,

  • 線形カーネル
  • RBFカーネル γ=0.01, 0.05, 0.1, 0.5
  • 多項式カーネル p=2, 3, 4
  • partial distance カーネル[1]

の合計9(=1+4+3+1)つの場合のすべてを一気に実行するように指定している.これまでと同様に,コマンドプロンプトで

kemba-svm.exe --cb2007a kemba-param.all.data

と実行する.すると,「k.yhat.csv」というファイルが出力される.このファイルには9行72列の行列が入っている.そのスコアが0以上なら,正例,0以下なら負例と識別した結果を図示したのが次の図である.

すべてのカーネル

各行にどのパラメータを使った場合のスコアが入っているか確かめるには,ファイル「k.params-exp.txt」を見ればよい.このファイルの各行はファイル「k.yhat.csv」の各行に対応しており,どの値を使ったか示している.

 
スペース    
libsvmの結果とkemba-svm.exeの結果は多少異なっている.それは,libsvmはカーネルの正規化(normalization)は行わないが,kemba-svm.exeはデフォルトではカーネルを正規化した値を用いていることによる.そのほかにも,最適化算法の違いにより多少スコアに差が出る.そもそもソフトマージンSVMではバイアスと呼ばれるモデルパラメータの最適解は一意ではないにもかかわらず,多くのSVMソフトウェアは一つの最適解しか出力しない.
スペース

Partial Distance カーネル

partial distance カーネル[1]は,雑音に強いカーネルとして設計されている.雑音の影響をなるべく受けないように対象間の関係を測るために,文献[1]では partial distance という雑音に頑健な距離関数を定義した.さらにSVMなどのカーネル法に適用できるように,エントロピ最大の原理に基づく方法で距離からカーネルに変換した.このように作られたカーネルを partial distance カーネルと呼ぶ.実際にこのカーネルをマイクロアレイ遺伝子発現データの解析に用いたところ,従来のカーネルよりよい性能を示した[2]
スペース

参考文献

[1] Tsuyoshi Kato, Wataru Fujibuchi, Kiyoshi Asai:
Kernels for Noisy Microarray Data,
CBRC Technical Report, AIST-02-J00001-8.Jun. 12, 2006.[pdf]
[2] Wataru Fujibuchi* and Tsuyoshi Kato*:
Classification of Heterogeneous Microarray Data by Maximum Entropy Kernel,
BMC Bioinformatics, accepted. (*These authors contributed equally.) [pdf][suppl]

2007年07月 加藤 毅