今さらないーぶべいず

今週の言語処理のための機械学習入門を読む会(研究室内勉強会)は,ナイーブベイズの章に突入.
どうせなら復習ついでにC++で実装しようかな,となんとなく思い立ったので実装してみました.

コード

GitHub - oiwah/classifier: Online Classification Library
「言語処理のための」機械学習,なのでクラスや特徴はすべてstringで入力されることを想定した実装にしています.というか,汎用化するのが面d(ry

結果

training data

Positive good bad good good
Positive good excellent good excellent
Positive exciting good excellent exciting boring
Negative bad good bad
Negative excellent boring bad
Negative bad boring exciting

レーニングデータでは,各行の最初の単語がカテゴリ,その他の単語は各文書に属する単語群を指定します.
今回の例はPositive/Negativeの二値分類を行っていますが,実装自体は多値分類も可能なように設計されています.

test data

good excellent boring exciting
bad boring excellent

テストデータでは,各行に単語群のみを指定します.

Result

% build/src/naivebayes/nb_test data/train.dat data/test.dat
0th data : Positive
1th data : Negative

nb_testを走らせると,テストデータに対する予測結果が返されます.上記のデータの場合,1行目のデータはPositive,2行目のデータはNegativeと判定されています.

感想

スムージングパラメータ入れないと,ほとんど使えないですね( ゚д゚ )
そのうち,実装したいと思います.
(2011/04/29 15:00追記)実装しました.

good great excellent exciting
2th data : Positive (スムージングを導入しない場合,None)

学習時に用いなかった単語が来ても,スムージングを導入することで予測が可能になります.