Pythonで補完的な単純ベイズを実装しますか?


9

問題

犯罪データのラベルが付けられたデータセットでナイーブベイを使用してみましたが、結果は非常によくありません(7%の精度)。Naive Bayesは、これまで使用してきた他のアルゴリズムよりもはるかに高速に実行されるため、スコアが非常に低い理由を調べてみました。

研究

読んだ後、ナイーブベイは頻度の高いクラスに偏りがあるため、バランスのとれたデータセットで使用する必要があることに気付きました。私のデータは不均衡なので、データスキューを処理するために特別に作成されているので、補完的な単純ベイズを使用してみました。プロセスを説明する論文では、アプリケーションはテキスト分類用ですが、この手法が他の状況で機能しない理由はわかりません。ここで私が言及している論文を見つけることができます。つまり、クラスが表示されない発生に基づいて重みを使用するという考え方です。

いくつかの調査を行った後、Javaでの実装を見つけることができましたが、残念ながらJavaを知りませんし、自分で実装するためのアルゴリズムを十分に理解していません。

質問

Pythonでの実装はどこにありますか?それが存在しない場合、自分で実装するにはどうすればよいですか?

回答:


5

Naive Bayesは、不均衡なデータセットを処理できる必要があります。ベイズの式は

Py|バツ=Pバツ|yPyPバツαPバツ|yPy

Pバツ|yPyPy

あなたの場合、多分あなたはオーバーフィットし、いくつかのスムージングが必要ですか?+1の平滑化から始めて、改善が見られるかどうかを確認できます。Pythonでは、numpyを使用する場合、次のようにスムージングを実装します。

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

これは多項式ナイーブベイズを提供することに注意してください-これはカテゴリーデータにのみ適用されます。

次のリンクを提案することもできます:http : //www.itshared.org/2015/03/naive-bayes-on-apache-flink.html。これは、Apache FlinkにNaive Bayesを実装することです。それはJavaですが、アルゴリズムをよりよく理解するために必要な理論が得られるかもしれません。


あなたは正しいかもしれませんが、ナイーブベイズにはテキスト分類の不均衡問題しかありません。平滑化とは何か説明できますか?
バッタ

リンクを見ましたか?そこに説明されています。要するに、推定するときPバツ|y 時々 バツトレーニング中に見られることはなく、スムージングにより、すべての機能に追加のカウント(ラプラスまたは+1スムージングの場合)を追加することにより、分類器のパフォーマンスが損なわれないことが保証されます。
Alexey Grigorev

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.