私は、Pythonでのテキスト分類のために、多項式Naive Bayes Classifierをゼロから実装しています。テキスト分類でNaive Bayesを使用して希望するクラスを予測する方法
フィーチャの各クラスと確率分布のフィーチャ数を計算します。
は私の実装によると、私は次のような結果が得られます。両方のクラスの事前確率は0.5
になります。このコーパスのためにナイーブベイズによるとcorpus = [
{'text': 'what is chat service?', 'category': 'what_is_chat_service'},
{'text': 'Why should I use your chat service?', 'category': 'why_use_chat_service'}
]
:
は、私は、次のコーパスがあるとし
小文字に変換、ストップワードの削除と句読点の削除を含むいくつかの前処理を行うと、次のトークンリストが得られます。
- テキスト1:[サービス、チャット]
- テキスト2:私は、テキストのためのクラスを予測したい場合は、[使用、チャット、サービス]
今すぐ 前処理した後、「何がチャットサービスです」 Naive Bayes Ruleによれば、以下の確率が得られる。
class chat service P(class|features)
what_is_chat_service 1 1 0.5
why_use_chat_service 1 1 0.5
私は2つのクラスに対して等しい確率を得る。私はこの状況の改善のために勉強してきました。
可能な方法は、ストップワードを含めることです。我々はストップワードが含まれている場合は、私たち取得するには、次の機能確率:機能のデフォルト確率を仮定し
class what is chat service P(class|features)
what_is_chat_service 1 1 1 1 0.5(higher)
why_use_chat_service 1e-9 1e-9 1 1 5e-19
= 1E-9
すなわちその機能は、その内のクラス
に属していませんクラス1の確率が高くなるケース:what_is_chat_service
ストップワードを含めると、まだ等しい確率 コーパスは次のようになります。
corpus = [
{'text': 'what is chat service?', 'category': 'what_is_chat_service'},
{'text': 'what is the benefit of using chat service?', 'category': 'why_use_chat_service'}
]
この場合、すべての機能確率は両方のクラスで1になります。
また、「チャットサービスとは何か?」というテキストを予測する確率は、等しくなります。
しかし、私はwhat_is_chat_serviceクラスを予測する必要があります。
希望のクラスを予測するにはどうすればよいですか?私はsklearnからNaive Bayes Classifierを試しました。希望の結果を得られなかった。
私の質問が冗長であるか不明な場合、または詳細情報が必要な場合はお知らせください。
ありがとうございます。
@Pascalありがとうございます。私は機能カウントから生成されたNaive Bayesのバイアス問題の解決策が必要です。フィーチャがクラス1で頻度が高い場合、このフィーチャを含むサンプルはその事前分類に関係なくそのクラスに分類されます。 –
"事前分類"とは何ですか? –
トレーニングデータの各テキストにはクラスが割り当てられています。私の例では、 'what_is_chat_service'は最初のテキストに割り当てられ、 'why_use_chat_service'は2番目のテキストに割り当てられます。 –