論文はこちら。

Adaptive Subgradient Methods for Online Learning and Stochastic Optimization

ソースコードはこちら。 多値分類問題にも対応できるようにした。二値分類問題と比べてヒンジ損失が少し変わる(ので重みの更新も二値分類の場合とと少し違う)。

データを次のように作成。

$perl -MList::Util=shuffle -e 'print shuffle(<>)' < ../data/news20.binary > news
$head -15000 news > news.train
$tail -4996  news > news.test

例えばこのデータは素性の値が0.04くらいなので、その平均を取ると0.01よりも小さくなるため、式(24)中の右辺の第三項が0になり、ほとんどすべての重みが0になってしまう。 正則化項の重み(c)をもう少し小さくしてやると、次の結果になった(本当は論文のように交差検定をして決めてやったほうが良いけど、人手でチューニング)。

$./adagrad -f news.train -m learn -w model -l 1 -c 0.01
$./adagrad -f news.test -m test -w model -l 1 -c 0.01
Recall[-1]: 0.011142 (28/2513)
Prec[-1]: 0.848485 (28/33)
--
Recall[+1]: 0.997986 (2478/2483)
Prec[+1]: 0.499295 (2478/4963)
--
Acc: 0.5016012810248198
$./adagrad -f news.train -m learn -w model -l 1 -c 0.0001
$./adagrad -f news.test -m test -w model
Recall[+1]: 0.836891 (2078/2483)
Prec[+1]: 0.833200 (2078/2494)
--
Recall[-1]: 0.834461 (2097/2513)
Prec[-1]: 0.838129 (2097/2502)
--
Acc: 0.8356685348278623
$./adagrad -f news.train -m learn -w model -l 1 -c 0.00001
$./adagrad -f news.test -m test -w model
Recall[+1]: 0.950463 (2360/2483)
Prec[+1]: 0.946651 (2360/2493)
--
Recall[-1]: 0.947075 (2380/2513)
Prec[-1]: 0.950859 (2380/2503)
--
Acc: 0.9487590072057646

参考


関連記事



最近の記事