LibSVM

LibSVMとは

簡単な用語の説明

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

簡単な使い方

学習データを用意する(場合によっては評価データも)

  • 書式:
    クラス☆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で各素性値をスケーリングする

  • 学習データと評価データが同じ場合の例(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で学習する

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

svm-predictで評価する

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

バランスを整える

  • 正例と負例の数のバランスがあまりにも違うと,データによっては極端な判定となってしまうことがある(すべて負例に予測される,など).=データの不均衡
  • 次のような方法で不均衡をなくすことができる
    • バランスがとれるように学習データを増やす
    •   〃            減らす(=アンダーサンプリング)
    • 学習時に素性ごとの重みを調整する(-wN オプション)

実際に音声の判別に使ってみる

  • テーマ: 工事中 [#uf423d42]
トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS