liblinear-poly2

liblinear の低次多項式カーネル版拡張という明日原稿を出す論文と関連する研究の実装があったので試してみた.論文を読む時間が無いので,手持ちのデータで試そうとしたが segmentation fault.もしやと思って中を見たら,二次の全組み合わせ素性の重み (= n*(n-1)/2) を保存する配列を作っていた (素性の種類数が少ないときしか対応出来ない実装) ので,コンパイルオプションに -m64 をつけて,素性番号を密にして,さらに配列の添字周りを int -> int64_t にすると動いた.

                 | Train  |  Mem  |  Acc. |  Test  
---------------------------------------------------
 liblinear-poly2 | 347.3s |  16GB | 93.0% | 289.2s 
 pa poly2        |  27.1s | 130MB | 92.9% |   0.5s 

精度ほぼ同じで学習時間は1/12.学習時間の差はほとんど IO が原因のようだ.多分,近いうちにある程度は改善されるだろう.pa の方のテストには公開中のライブラリを使ってみた.最速の設定だともうちょっと速くなる.開発データのイベント数は 60766 件,分類にはモデルの読み込みを除いて0.105sかかっているので,1秒当たり 578724 (= 60766 / 0.105) イベント分類できることになる.

[追記] liblinear に手を入れていつもの学習データで実験したのに,pa の実験結果のメモリサイズが小規模データのままになっていたので直した.