流行りに乗り遅れてGo言語始めました。ので、試しにパーセプトロンを書いてみました。 ソースコードはこちら

素性ベクトルのフォーマットは<数値>:<数値> である必要はなくて、<文字列>:<数値> でも読み込めるようにしました。 また、ラベルの値も数値である必要はなくて、例えば以下のように「food」とか、「sports」というラベルも扱えるようにしています。 多値分類もできます。

sports soccer:1 baseball:1
food beef:1 pork:1

今回はLIBSVM Data: Classification, Regression, and Multi-labelで公開されている二値分類用データを使って動かしてみました。

$go build
$./perceptron -f=../data/a1a -m=learn -w=model -l=10
$./perceptron -f=../data/a1a.t -m=test -w=model
Acc: 0.8257203773097299

-fオプションで素性ベクトルのファイルを指定して、-mオプションで学習(learn)、テスト(test)のどちらかを指定して-lオプションでループ回数(デフォルトは10)を指定して、-wオプションで学習結果を保存するファイルを指定します。 テストする時は、-mオプションでtestを指定して、-fオプションでテストデータを指定してやれば予測します。-vオプションをつけると、各事例に対する予測ラベルを出力します。

このデータは、

$grep "^+1" ../data/a1a.t|wc -l
7446
$grep "^-1" ../data/a1a.t|wc -l
23510

とラベルの偏りがあり、すべての事例のラベルを-1と答えたらaccuracyは0.76程度なので、一応学習できているようです。

confusion matrixを書く元気は残っていなかったのでaccuracyしか出力しません・・・。 出力するようにしました。 (2014/09/17追記)


最近の記事