3

私はscikit-learnを使用してドキュメントのTf-idfの重みを見つけ、次に単純
ベイズ分類器を使用してテキストを分類しています。ただし、ドキュメント内のすべての単語のTf-idfの重みは、いくつかを除いて負です。しかし、私が知る限り、負の値は重要でない用語を意味します。では、Tf-idf値全体をベイズ分類器に渡す必要がありますか?それらのいくつかだけを渡す必要がある場合、どうすればそれを行うことができますか?また、linearSVCと比較して、ベイズ分類器はどの程度優れているか、または劣っていますか?Tf-idfを使用する以外に、テキスト内のタグを見つけるためのより良い方法はありますか?

ありがとう

4

3 に答える 3

6

そこにはたくさんの質問がありますが、私がお手伝いします。

私が覚えている限り、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ライブラリにアクセスする前に、まずそのショットを試してみます。

私は何かが足りないかもしれませんが、私はあなたが探しているものを正確に知っているとは確信していません-私の答えを修正して幸せです。

于 2012-03-13T02:50:02.730 に答える
6

このバグはmasterブランチで修正されています。トークン化のカスタマイズを容易にするために、テキストベクトライザーAPIも少し変更されていることに注意してください。

于 2012-03-13T07:47:03.650 に答える
2

私もこのテーマに興味があります。私がbaes分類を使用しているとき(baesアルゴリズムに関するこのロシアの記事があなたを助けることができるかもしれませんhttp://habrahabr.ru/blogs/python/120194/)私は20のトップワードのドキュメントだけを使用します。私は多くの値を試しました。私の実験的なトップ20では最高の結果が得られます。また、通常のtf-idfを次のように変更しました。

def f(word):
    idf = log10(0.5 / word.df)
    if idf < 0:
        idf = 0
    return word.tf * idf

この場合、「悪い言葉」は0に等しくなります。

于 2012-03-13T05:13:27.217 に答える