Confidence Weightedの挙動を見てた

理論は理解したつもりになって、実装してみたは良いものの、なかなか正体が見えないので、パラメータの更新量を調査してみることにする。

ブログで上手く紹介できないかとと計算機サービスを探してみたところ、instacalcというWebサービスを発見。早速入力してみた。

http://tinyurl.com/mgo69o

M_iはmean margin。パラメータと重みの線形和。|M_i|はi番目の事例がどれだけはっきり分類されているかを解釈することができる。負であれば正解ラベルと分類されたラベルが逆。
V_iはvariance margin。事例に出てきた素性の出現回数が少ないと素性に対応する分散は大きい値になる(出現するごとに分散は小さくなっていく)ので、V_iが大きい値になるということは、事例の素性が余り出てきていないと解釈することができる。ということはV_iはi番目の事例が目新しいほど高い値を示していると考えることが出来そう。こちらは正値のみ。

Cはconficdence parameter

alphaがM_i, V_i, Cを元に算出された更新量


V_iが大きくなるとalphaも大きくなる。これは、目新しい事例だと大きく更新してやろうとする、CWの計算通り。
M_iが正値で大きくなると、alphaは0になり、M_iが負値で小さくなるほどalphaは大きい値になる。事例とラベルが同じだとほとんど更新せず、逆だと大きく更新してくれる。
また、Cが大きいとalphaも大きくなる。Cが大きくなれば更新量も大きい

以上をまとめると、分類が誤っていた時、また分類が正しかったとしても目新しい事例を受け取った時はパラメータを大きく更新し、正しくて目新しくもないときはパラメータの更新量を小さく、もしくは全く更新しないようにする、ということになる。そして、その更新量はCにより制御できる、と。解析すればするほどよくできてる分類器だということが分かる。

んーでも、正例と負例の割合が偏ってる場合はどうなるんだろう。例えば負例がすごい多くて、久しぶりに正例が出てきた場合、既に目新しくない事例だとCWに理解されて全然更新されなくなってしまうという事態がおこる可能性が十分ありうる。インスタンスの値を上手く調整してやる必要が有りそうだ。