Kernelized Passive Aggressive の微々たる高速化

インフルエンザの間に考えていたアイデアを実装したところ,多項式カーネルの学習・二値分類が約10-20%高速化された.うわショボ。せめて2倍ぐらいになってくれればいいのに.ダメ論文に封印だなこりゃ.で,とっととオープンソースで公開しよう.
[12/19; 追記] アイデアを splitSVM でも有効にするために,実装を変えたら splitSVM 自体が 10-40% ほど高速になってしまった.低頻度の素性をインクリメンタルに一つずつ処理するようにして,内積を取るのをやめただけ.高頻度の素性の部分の内積を何度も計算するため遅くなりそうだが,それ以上に低頻度の素性の部分の内積を unordered_map で保存するコストが大きかったらしい(インクリメンタルに低頻度の素性を処理する場合は,PKI の転置インデクスをそのまま使いまわせる).というわけで,展開する素性を極端に小さくしたときの速度劣化が大幅に抑えられるようになった.折角なので,公開版もアップデートしておいた.