そこにはたくさんの質問がありますが、私がお手伝いします。
私が覚えている限り、TF-IDFは負の値であってはなりません。TFは、用語の頻度(特定のドキュメントに用語が表示される頻度)と逆のドキュメントの頻度(コーパス内のドキュメントの数/用語を含むドキュメントの数)です。その後、通常はログ加重されます。ゼロによる除算を避けるために、分母にも1を追加することがよくあります。したがって、負のtf * idfが得られるのは、その用語がコーパスのすべてのドキュメントに含まれている場合のみです(これは、情報を追加しないため、前述のように検索するのにあまり役立ちません)。私はあなたのアルゴリズムを再確認します。
与えられた用語t、ドキュメントd、コーパスc:
tfidf = term freq * log(document count / (document frequency + 1))
tfidf = [# of t in d] * log([#d in c] / ([#d with t in c] + 1))
機械学習では、ナイーブベイとSVMはどちらも優れたツールです。それらの品質はアプリケーションによって異なり、私はそれらの精度が同等であることが判明したプロジェクトを実行しました。ナイーブベイズは通常、手作業で簡単にハッキングできます。SVMライブラリにアクセスする前に、まずそのショットを試してみます。
私は何かが足りないかもしれませんが、私はあなたが探しているものを正確に知っているとは確信していません-私の答えを修正して幸せです。