私がここに投稿しているクエリに関する私の検索によると、私は解決策を提案する多くのリンクを持っていますが、これがどのように行われるべきかについて正確に言及していません。たとえば、次のリンクを調べました。
等.
したがって、ここでは、tf-idfを使用したナイーブベイズ式をどのように使用できるかについての理解を示しています。これは次のとおりです。
単純ベイズ式:
P(Word|class)=(Word_count_in_class + 1)/(total_words_in_class+total_unique_words_in_all_classes(basically vocabulary of words in the entire training set))
tf-idfの重み付けは、上記の式で次のように使用できます。
Word_count_in_class : sum of(tf-idf_weights of the Word for all the documents belonging to that class) //basically replacing the counts with the tfidf weights of the same Word calculated for every document within that class.
total_words_in_class : sum of (tf-idf weights of all the words belonging to that class)
total_unique_words_in_all_classes : as is.
この質問はスタックオーバーフローに何度も投稿されていますが、これまでのところ実質的な回答はありません。私が問題について考えている方法が正しいかどうか、つまり上記で示した実装が正しいかどうかを知りたいです。 NaiveBayesとtf-idfの両方の組み込み関数に付属しているPythonライブラリを使用せずに、Naive Bayesを自分で実装しているので、これを知る必要があります。実際に必要なもの単純ベイズ分類器を使用していたモデルの精度(現在は30%)を向上させることです。したがって、優れた精度を実現するためのより良い方法があれば、提案を歓迎します。
私に提案してください。私はこのドメインに不慣れです。
使用したい正確な機能とクラスを実際に提供するか、少なくとも例を提供するとよいでしょう。それらのどれも具体的に与えられていないので、私は以下があなたの問題であると仮定します:
指定したtfidfは次のとおりです。
Word_count_in_class : sum of(tf-idf_weights of the Word for all the documents belonging to that class) //basically replacing the counts with the tfidf weights of the same Word calculated for every document within that class.
total_words_in_class : sum of (tf-idf weights of all the words belonging to that class)
あなたのアプローチは合理的に聞こえます。すべての確率の合計は、tf-idf関数とは無関係に合計1になり、特徴はtf-idf値を反映します。これは、tf-idfをNBに組み込むための確実な方法のように見えると思います。
この問題に頭を悩ませるのに少し時間がかかりました。これの主な理由は、確率の正規化を維持することを心配しなければならなかったことでした。 Gaussian Naive Bayesを使用すると、この問題を完全に無視するのに役立ちます。
この方法を使用したい場合:
Numpyには本質的にガウス関数があるため、これをハードコーディングするのはそれほど難しくありません。私はこれらのタイプの問題に対してこのタイプの一般的な解決策を好むだけです。
上記とは別に、次の手法を使用して精度を上げることもできます。
前処理:
アルゴリズム:
ナイーブベイは高速ですが、本質的に他のアルゴリズムよりもパフォーマンスが低下します。機能の削減を実行してから、SVMやロジスティック回帰などの識別モデルに切り替える方がよい場合があります。
その他.
ブートストラップ、ブーストなど。ただし、過剰適合しないように注意してください...
うまくいけば、これは役に立ちました。不明な点がある場合はコメントを残してください
P(Word | class)=
(Word_count_in_class+1)/(total_words_in_class+total_unique_words_in_all_classes
(基本的にトレーニングセット全体の単語の語彙))
これはどのように合計して1になりますか?上記の条件付き確率を使用する場合、SUMは次のようになります。
P(Word1|class)+P(Word2|class)+...+P(wordn|class) = (total_words_in_class + total_unique_words_in_class)/(total_words_in_class+total_unique_words_in_all_classes)
これを修正するには、P(Word | class)は次のようになります。
(Word_count_in_class + 1)/(total_words_in_class+total_unique_words_in_classes(vocabulary of words in class))
私が間違っている場合は私を訂正してください。
それを行うには2つの方法があると思います。
ガウス混合がより良いかどうかはわかりません。