人気ブログランキング | 話題のタグを見る

[win][R] libsvm のグリッドサーチ

libsvm (e1071) のグリッドサーチで2点ほど。
実行環境は windows です。

グリッドサーチの分割方法


グリッドサーチの際、常に分割は同じなのか。
例えば、 cross=3 と指定して、複数回実行したら、
常に同じデータが同じグループになって実行されるのか。
毎回ランダムなデータがランダムにグループ分けされて実行されるのか。

ソースを見てみたところ、
R で書かれたソース(tune.R)では、特にランダマイズされていなかったが、
C で書かれたソース(Rsvm.c)では、ランダマイズされていた。
windows で実行する場合は、
多分 R ファイルを実行するのではなく dll を呼んでいると思うので、
ということであれば、毎回ランダムなのだろうなぁと思う。
想像でしかないのだが。

グリッドサーチの結果の正答率


SVM のチューニングのしかた(2) - ほくそ笑む
http://d.hatena.ne.jp/hoxo_m/20110325/p1
で、以下のようにある。
グリッドサーチの結果としてベストパラメータを出力しています。上記のプログラムを実行すると、結果は下記のように出ました。
- best parameters:
gamma = 0.1 ; cost = 1 ;
accuracy: 97.33187 %

gamma=0.1, cost=1 の組合せのとき、正答率 97.3 % を出していることがわかります。

gamma=0.1, cost=1 のときに、cross=3 であれば、
3回の svm が実行されていると思うのだが、
accuracy は一体何の数字なのか。

割とあっさり 100% が出たりするが、
3回実行してそう簡単に 100% が出るとは考えづらいので、
加算平均ではないような気がする。
てことは、3回の中の最高正答率なのかなという気もするが、
100% のときは dispersion (分散)も 0 と出るので、
やっぱり加算平均かもしれない。

なわけで、ソースを見てみた。
結果、3 回実行の中での平均値を選択していた。
それはそれでなんかびっくり。
3 回実行を更に複数回す設定 (nrepeat) をしている場合は、
nrepeat 回の中での最小エラー率が選択されるので、
やっぱりエラー率は 3 個得られて、
そこから平均を出すぽい。

あっさり 100% が出ても、
平均を取った結果の 100% なら、
ある程度の余裕を持って識別境界が決定されていて、
オーバーフィッティングの心配はないと思っていいのかな。
by xiaoxia | 2015-05-20 19:35 | プログラム言語
<< [win7]assemblyI... 人工知能の夢 >>