はじめに
SVM(サポートベクターマシーン)を使うことになった
大まかに仕組みはわかってる(線形に対して直角のベクトルを最大化???)が、
実装は面倒なのでライブラリを使うことに
ggったら
LIBSVM
www.csie.ntu.edu.tw
とやらがあったのでこれを使うことにした
プログラム言語の種類は割とある
必要なのはjavaなんで下の方のリンクからDL
とりあえずREADMEの中身
Quick Start
とりあえずSVMをやりたいならeasy.pyを使ってねって書いてある
Usageもある
Installation and Data Format
最初の方は、trainとかpredictは引数なしでやればusage見れるとかなんとか
トレーニングセットやテストセットは次のようにしないといけない
クラス分類の場合
<クラス番号> <インデックス>:<データ値> <インデックス>:<データ値>
...
回帰の場合
<任意の実数?> <インデックス>:<データ値> <インデックス>:<データ値>
...
サンプルはheart_scaleに書いてある
区切りは改行('¥n')と空白
<インデックス>:<データ値>は恐らく、特徴量の番号とその値だと思われる
なので<クラス番号>はその特徴量の値における正解クラスかな
trainを実行するとmodelができて、modelをテストセットとpredictすると精度が出るらしい
他にもスケーリングしてくれるツールもあると書いてある
各Usage
コマンドラインでの使い方一覧
Tips
スケールしてとか、うまくいかない場合はとか、みたいな感じ
Examples
やり方が書いてある
Precomputed Kernels
なんか事前に計算して、テストセットとかを分けなくて済む?
みたいなことが書いてある
それ以降の内容
ライブラリの内容とかその他もろもろ
サンプルを動かしてみる
Macなんでターミナルから以下のようにコマンド
%javac svm_train.java
%javac svm_predict.java
クラスファイル(?)ができあがるので続けて
とすると、推定結果(ターミナル上)とモデル(.modelファイル)が出て来る
最後に、モデルを使って精度を確認する
%java svm_predict heart_scale heart_scale.model output.txt
2つ目の引数は、本当はテスト用のデータセットだが面倒なので元のファイルのまま
精度がターミナル上に表示され、クラスの振り分け結果は新規作成されるoutput.txtに格納される