データフォーマット

LIBSVMで使用するデータフォーマット (トレーニング、テストデータセット共に) は、データがN個のフィーチャーとラベルからなる場合、以下のようになる。

<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
.
.
.
<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>

エントリーの特徴量 (フィーチャーベクトル) およびそのラベル (レスポンスベクトル) は各エントリーを1行に表記する。'index'、'value' および 'label' を含むすべてのデータは数値である必要がある。'index' は1から始まる連番の整数である。

Rのデータセット 'iris' は以下のようなデータである。以下のデータをLIBSVMのデータ形式に変換する。

setosa 5.1 3.5 1.4 0.2
setosa 4.9 3.0 1.4 0.2
setosa 4.7 3.2 1.3 0.2
.
.
.
virginica 5.9 3.0 5.1 1.8

これをLIBSVMの入力形式に合わせると以下のようになる。'setosa' は '0'、'virginica' は '1' に置換した。

0 1:5.1 2:3.5 3:1.4 4:0.2
0 1:4.9 2:3.0 3:1.4 4:0.2
0 1:4.7 2:3.2 3:1.3 4:0.2
.
.
.
1 1:5.9 2:3.0 3:5.1 4:1.8

以下のように 'value' の値が0であった場合、その場合の 'index' および 'value' の表記は省略する。

setosa 5.1 0 0 0.2

上と同様にラベル 'setosa' を '0' に置換した場合の変換後の表記は以下のようになる。表記を省略しているだけであるので、'index' の値は1からはじまる連番である必要がある。すなわち、0のときも 'index' の値は加算する。

0 1:5.1 4:0.2

データファイルの最後の行には改行を入れる必要がある。改行がないとエラーが出る。そのようなことを防ぐために、データフォーマットが正しいか否かをLIBSVM付属の 'checkdata.py' によって確認できる。データファイル 'iris.dat' のデータフォーマットの確認は以下のように行う。

1|$checkdata.py iris.dat

問題ない場合は、'No error.' とだけ表示される。また、csvファイルからのデータの変換は、公式ページのFAQの 'convert.c' をコンパイルして得られるプログラムで実行できる。

以上のデータフォーマットはトレーニングデータセットおよびテストデータセットに共通である。もちろんテストデータセットにおいては、そのラベルは未知なので、テストデータセットにおける 'label' の部分には何でも良いので適当な値を入力する。

このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る