*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つをもとに「健康か否か」の二値分類を行う場合. スケーリングを行わないと,値変動の大きい素性が判定を支配してしまう.例の4つの素性の中では,摂取kcalが最も人によって変動する素性値であると考えられる(1500kcalの人もいれば10000kcalの人もいる).したがってSVMは摂取kcalを常に信頼して判定を行う可能性がある. スケーリングを行い,各素性値の最大値と最小値を用いて正規化を行うことにより,すべての素性値を平等に用いて判定を行ってくれる.よって,スケーリングは精度向上のためには欠かせない操作となる. -モデルファイル --学習データをトレーニングすると生成されるファイル --このファイルを用いて評価を行う -クローズド/オープンテスト --学習データの全部,もしくは一部をそのまま評価データとして使う評価方法をクローズドテストといい,対して,学習データには用いていないデータ(未知のデータ)を評価データとして使う評価方法をオープンテストという. --当たり前だが,クローズドテストの結果の方が高い精度となる --データ準備の都合上,オープンテストを行うことが困難な場合などには交差検定(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は多値分類もできる --クラス以降に素性値を入力していく.素性番号は飛び飛びでも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 に書きだされた結果が実際に予測された結果となる ***バランスを整える [#h2b36ed2] -正例と負例の数のバランスがあまりにも違うと,データによっては極端な判定となってしまうことがある(すべて負例に予測される,など).=データの不均衡,過学習 -次のような方法で不均衡をなくすことができる --バランスがとれるように学習データを増やす -- 〃 減らす(=アンダーサンプリング) --学習時に素性ごとの重みを調整する(-wN オプション) ***実際に音声の判別に使ってみる [#j7a3a673] -テーマ: 工事中 [#uf423d42]