唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

libsvmで遊んでみた

↑の記事が面白かったのと、SVMを触ったことがなかったのでlibsvmをいじくって遊んだメモ。

クロスバリデーション

libsvmでのクロスバリデーションは"svm-train -v N"

パラメーター調整

上の記事では30%強程度の精度しか出ていません。
実際以下の同様の設定でやると似たような結果が得られます。
"svm-train -v 2 vector.txt"
SVMではパラメーター調整が重要だと聞いたことがあったので、色々と調整したところ56,7%ぐらいの精度がでました。

カーネル

線形カーネルにしたらそれだけで55%ぐらいの精度に。
"svm-train -t 0 -v 2 vector.txt"

RBFカーネルでもパラメーターを調整したら57%ぐらいの精度。
"svm-train -v 2 -c 8 -g 0.02 vector.txt"

パラメーターの選択方法

以下の記事がわかりやすいです

またsvm-gridっていうパラメーターのグリッドサーチ用のスクリプトがlibsvmにはある模様。
http://manpages.ubuntu.com/manpages/natty/man1/svm-grid.1.html

学習した重みベクトルを調べる

学習した重みベクトルの絶対値が大きな素性を調べることで、どの素性が効いていそうかを調べることができます。
どうやって重みを調べるのかググってもあまり記事が見つからなかったのですが、たぶんこのへんの内容だと思います。
いつの間にか記述がなくなっているみたいです(2013-07-09)
重みを見る方法の記事を追加しました(2013-07-10)

SVMは基本的に2値分類のため、ほむらとそれ以外(まどか、さやか、マミ、杏子、QB)のキャラで識別したときの重みの大きな素性を以下に列挙しておきます。
一応各キャラの特徴的な単語がとれているように見えます。

ほむら その他
貴女 あんた
けど
うう ちゃん
美樹
ます
たく 今日
なさい アタシ
いいえ

まとめ

カーネル選択やパラメーター調整が精度に大きな影響を与えることがわかった。
重みベクトルを見ることで、効いていそうな素性を確認できた。

後日、いくつかのことを追加でメモったので、よかったらそちらの記事↓もどうぞ