学習器の実装を公開

8月末に発表する分類器の学習手法の実装をホームページで公開した.古くは Passive Aggressive - ny23の日記, Passive Aggressive と多項式カーネル - ny23の日記 ぐらいから書いていたもので,LIBLINEAR と oll - ny23の日記, Kernelized Passive Aggressive の微々たる高速化 - ny23の日記, AROW は CW より幾分マシか - ny23の日記, liblinear-poly2 - ny23の日記 ときて,突然来た - ny23の日記 で出てきたアイデアを実装したもの.最近では,文節区切り - ny23の日記粗末な(素性とモデルで)単語分割 - ny23の日記 でも使っている.
オンライン学習で適当に書くとボトルネックになりがちな IO 周りの実装に気をつけて,二値素性に特化した最適化をしたからか,(特別なことは何もしてないが)線形学習でも oll より繰り返し部で2倍,IOを入れたトータルの学習時間で約10倍程度(これはややズル)高速.線形学習器としては最速レベルの liblinear 比でも,(同程度の精度を出すモデルの学習で)約2-3倍ほど速いようだ.まあ線形学習だと学習速度はこれ以上速くする必要はないかも知れず,どちらかというと分類が速いことの方が売りかもしれない(oll の10倍,liblinear の3倍高速).
本来の売りの多項式カーネルを用いたカーネル学習(正確には線形学習とのハイブリッド方式)の方は,訓練例を全てメモリに載せた場合でも,SVM と同程度以下のメモリ消費で約100-1000倍高速(二値素性のための最適化が入っている TinySVM 比の場合.SVMlightlibSVM だともう少し差は開く),PKI を使ったオンライン(カーネル)学習比でも約30-250倍高速.liblinear-poly2 みたいにやたらとメモリを食うこともないのがポイント.コードは相変わらず惨めなものだけど.
別に公開している解析器の方からも使えるようになっている.これで,別の学習ライブラリを入れなくても一通り解析できる.