HaskellとMeCabで長門(その3) : Complement Naive Bayesもやってみた

結局やろうやろうおもいつつ全然やってなかったの続き。

今回は学習時の文書量に差があるときに効果を発揮するというComplement Naive Bayesを実装してみました。

どんなの

調べると、
新はてなブックマークでも使われてるComplement Naive Bayesを解説するよ - 射撃しつつ前転
をみつけました。

  1. そのクラスに属さない文書を使って学習
  2. そのクラスに属さない確率を計算
  3. その確率が一番低いクラスに分類

という、ほぼすべてをひっくり返した方法らしいです。これにより、学習時に文書量の多かったクラスにたくさんの単語が含まれていることにより、全体的な確率にばらつきが出てしまうことが防げるらしいです。

というわけで既存の分類器をあまりいじらずに出来ました。

どうだったの

学習元の文章自体少ないのですが、

と、かなり量がバラけています。
これは効果が期待できるのかな、と思ったけど殆ど変わりませんでした。具体的には以下から。
一応前回と同じ文章を使っています。上に表示されている結果はこれまでの普通のナイーブベイズで、下がComplement Naive Bayesです。
f:id:haru2036:20140120210025p:plain

f:id:haru2036:20140120210042p:plain

f:id:haru2036:20140120210054p:plain

f:id:haru2036:20140120210107p:plain

結局元から判別が難しいと思っていた艦これと戦艦はやっぱり無理でした。そして、長門有希に関しても"戦艦"の1語が入っていたために艦これと勘違いされています……これテーマ間違ったな。

まとめ

そもそも戦艦長門長門有希の時点でも結構テーマとしてもアレだったけどそれに人間でも紛らわしい艦これを突っ込んでしまったがためにかなりグダグダに。一応他のことにも使えるからいいか……

ソースはgithubにあります。実装もめっちゃグダグダですが……
haru2036/nagato · GitHub

次は何をしよう……