見出し画像

SVMについてのメモ。エセ理系のざっくり理解

SVMについてのメモ。

用語のざっくり理解。


スケーリング

サンプルプログラムの学習データの中身を見ると下のような感じ。

-1 3:1 11:1 14:1 19:1 39:1 42:1 55:1 64:1 67:1 73:1 75:1 76:1 80:1 83:1
-1 3:1 6:1 17:1 27:1 35:1 40:1 57:1 63:1 69:1 73:1 74:1 76:1 81:1 103:1
-1 4:1 6:1 15:1 21:1 35:1 40:1 57:1 63:1 67:1 73:1 74:1 77:1 80:1 83:1

一番初めの数字はラベル。

あとは 要素ナンバー:要素の値 という風に並んでる。


次元数が揃ってないのはスケーリング(正規化と0の要素の削除)を行っているから。

スケーリングによりベクトルの要素ごとのレンジが違っていても結果が悪くなりにくい。

大きい値のものは逆数をとるなどの方法もあり。


多分、内部的には以下のようなことを行っている。

例えば要素の最大の数字が-2,最大の数字が3だったとする。


これを-2→-1,3→1とする関数を求める。

y=ax+bに(0,-1),(0.6,1)を代入。

このa,bを記録→テストデータを得られた式に代入してスケーリング。


カーネル

カーネル関数は特徴空間上の要素を区分する関数。

RBFカーネル:円のような関数で区分。設定できる値Gammaは円の半径にあたる。
線形カーネル:Cのみ設定すれば使える。1を使うケースも多い。C値が高いことをハードマージンという。
多項式カーネル:2,3次関数のような関数で区分。


C#の場合のパラメータの設定は以下のようにする。

param.weight[-1]=2.0 //重み指定
param.probability=true //スコア出力できるようにする
param.KernelType=KernelType.hoge //カーネルタイプの変更


SVMの精度を上げる

元々同じ情報でも、別の加工すれば精度があがるかも。

訳の分からないデータは対数や極座標などで表現してみると違う見え方をするかも。

全要素が増えたらラベル1,減ったらラベル-1など,方向を一致させるとベター。


その他注意点

認識が難しいものは学習に時間がかかる。

次元が過剰で過学習起こることもある。

認識結果の確率がほぼ0.5対0.5になる現象は問題が難しすぎるためかも。

いいなと思ったら応援しよう!