*LibSVM [#i1a24718]
-http://www.csie.ntu.edu.tw/~cjlin/libsvm/
**LibSVMとは [#xd93c22f]
-SVM(Support Vector Machine) ツールの一つ
-学習が早い
--OpenMPを用いてマルチコアでの並列学習も可能.参考→http://qiita.com/niam/items/e3e970c40ddb8457b1d0
-幾つかの種類のカーネル関数を選べる

**簡単な用語の説明 [#ve520b12]
-学習データ
--学習させるためのテキストデータ
-評価データ
--システムの評価に使うテキストデータ
-クラス/正例/負例 (Positive/Negative)
--何のデータが正解で,何のデータが不正解なのか
--基本的には何の数値を使ってもいいが,正例を+1,負例を-1 or 0とすることが多い
-素性(値)
--データとなる特徴量
-スケーリング
--正規化.素性値のスケールがばらばらだと素性に対する重みが変わってくることを防ぐ
--例: 「年齢」「身長(cm)」「体重(kg)」「一日の平均摂取kcal」の4つをもとに「健康か否か」の二値分類を行う場合.
スケーリングを行わないと,各素性の値の違いを平等に捉えてしまう.すなわち,2人分のデータを比べる場合身長が1cm違うことと摂取kcalが1kcal違うこととを同等に考えることになる.
スケーリングを行い,各素性値の最大値と最小値を用いて正規化を行うことにより,判定の結果を限られた素性に依存しないようにすることができる.
-モデルファイル
--学習データをトレーニングすると生成されるファイル
--このファイルを用いて評価を行う
-クローズド/オープンテスト
--学習データの全部,もしくは一部をそのまま評価データとして使う評価方法をクローズドテストといい,対して,学習データには用いていないデータ(未知のデータ)を評価データとして使う評価方法をオープンテストという.
--当たり前だが,クローズドテストの結果の方が高い精度となる
--データ準備の都合上,オープンテストを行うことが困難な場合などには交差検定(Cross Validation)を用いることが多い

**簡単な使い方 [#da463469]
***学習データを用意する(場合によっては評価データも) [#of89e15e]
--書式:
 クラス☆1:値☆2:値☆3:値☆4:値...
(☆=スペース or Tab)
--例
 +1 1:0.97 2:1.4 3:1 4:2 5:1.3
 -1 1:-1.2 2:0.1 3:0.1 4:-2 5:1.1 
---クラスが判定させたいブール値となる.基本的には2値だが,LibSVMは多値分類もできる.その際はIDを増やすだけでOK
---クラス以降に素性値を入力していく.素性番号は飛び飛びでもOKだが自然数でなければならない
---SVMを活かすも殺すも素性次第

***svm-scaleで各素性値をスケーリングする [#p59260e8]
--学習データと評価データが同じ場合の例(Cross Validation を使う際も含む)
 $ ./svm-scale data.train > data.scale
--学習データと評価データが違う場合の例
 $ ./svm-scale -s data.minmax data.train > data.train.scale
 $ ./svm-scale -r data.minmax data.measure > data.measure.scale
(学習データと評価データのスケールを同じにするため,学習データの最大値と最小値をファイルに保存することで評価データの方にも同じスケーリングを施している)

***svm-trainで学習する [#i94db550]
--モデルファイルの作成
 $ ./svm-train data.train.scale
---これでdata.train.scale.modelという名前のモデルファイルができる
--10-Fold Cross Validationを行う
---学習データの量が少ないとき,評価データを用意していないとき等に行う評価方法
---学習データを10個に分割して,1個を評価データ,残りの9個を学習データとして評価する
---これを分割数(10回)行い,その平均を結果とする
#ref(crossvalidation.png)
 $ ./svm-train -v 10 data.train.scale

***svm-predictで評価する [#ke229d75]
--評価データを用意しているときは,Cross Validationを行う必要はない
--作成したモデルファイルを利用し実際に予測を行う
 $ ./svm-predict data.measure.scale data.train.scale.model > result.txt
---result.txt に書きだされた結果が実際に予測された結果となる

***実際に音声の判別に使ってみる [#j7a3a673]
--テーマ: 工事中 [#uf423d42]
トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS