今さらないーぶべいず
今週の言語処理のための機械学習入門を読む会(研究室内勉強会)は,ナイーブベイズの章に突入.
どうせなら復習ついでに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)
学習時に用いなかった単語が来ても,スムージングを導入することで予測が可能になります.