今度は CLUTO を試してみた話を書こうと思っていたのですけど、あまりふくらみそうにないので、保留。
オンライン学習(逐次学習)に興味があるので、まずは Perceptron 周辺を勉強し始めてます。
が、その前に動くものをさわっておこうということで、岡野原さんのオンライン機械学習ライブラリをちょっぴり試してみました。
ビルド
Linux なら ./configure & make でOK。
Windows の場合 oll.hpp の先頭のどこかに
#include <algorithm>
を追加すれば VC++ でもコンパイルできました。
サンプルデータ
サンプルデータには、プロジェクトページにも実験としてあがっている news20.binary をまずは使ってみることにしましょう。
「シャッフルし、15000例の訓練データと4996例のテストデータに分けた」とあるので、その通りにします。
$ sort -R news20.binary > news20.random $ head -15000 news20.random > news20.train $ tail -4996 news20.random > news20.test
実際に中谷が興味があるのは自然言語処理なので、NLP らしいデータはまた別途用意して試してみたいと思います。
まずはパーセプトロン。
学習&テスト
ビルドが通ってデータの用意もできました。
実行。
$ ./oll_train P news20.train news20.model.p -C=2.0 -b=1.0 -I=10
15000 例の学習データを用いて、Perceptron(P) で10回繰り返して学習(-I=10)、結果を news20.model.p に保存します。
学習手法は先頭の "P" を "AP" などに変更することで変えられます。そのあたり、コマンドラインの仕様はプロジェクトページで見てください。
「同じデータを10回繰り返して学習する」というあたりが、収束(の可能性)がある線形識別器ならでは、でしょうか。
Naive Bayes とかだと同じデータで10回学習なんて考えられないですから。
$ ./oll_test news20.test news20.model.p Accuracy 94.235% (4708/4996) (Answer, Predict): (p,p):2425 (p,n):35 (n,p):253 (n,n):2283
学習結果を用いて、テストデータを分類させてみて、その正解率を出しています。
(p|n,p|n) は positive|negative を positive|negative に分類した件数で、正解率は 94%。
プロジェクトページの例と大きく違っていないので、一応動いていることが確認できました。
これで自分で勉強&実装したものとのベンチマークがとれますね。
次は、Perceptron を理解するために、「手で Perceptron を計算」してみます。