3

機能の存在ではなく、機能頻度法を使用して単純ベイズ分類器をトレーニングする方法を示すコード スニペットを通じて誰かが私を助けることができるかどうか疑問に思っていました。

第6章のリンクテキストに示されているように、以下はFeature Presence(FP)を使用して機能セットを作成することを指していると思います-

def document_features(document): 
    document_words = set(document) 

    features = {}
    for word in word_features:
        features['contains(%s)' % word] = (word in document_words)

    return features

ご意見をお聞かせください

4

3 に答える 3

3

あなたが送信したリンクでは、この機能は、これらの各単語が特定のドキュメントに存在するかどうかを単純にチェックする特徴抽出器であると書かれています。

各行に番号を付けたコード全体を次に示します。

1     all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
2     word_features = all_words.keys()[:2000] 

3     def document_features(document): 
4          document_words = set(document) 
5          features = {}
6          for word in word_features:
7               features['contains(%s)' % word] = (word in document_words)
8          return features

1 行目で、すべての単語のリストを作成しました。

2 行目では、最も頻繁に使用される 2000 語が使用されます。

3 関数の定義

4 文書リストを変換し (リストである必要があると思います)、リストをセットに変換します。

5 辞書を宣言します

最も頻繁に使用される 2000 語すべてを 6 回繰り返します。

7 は、キーが「contains(theword)」で、値が true または false の辞書を作成します。単語がドキュメントに存在する場合は true、そうでない場合は false

8 は、ドキュメントに最も頻繁に使用される 2000 語が含まれているかどうかを示す辞書を返します。

これはあなたの質問に答えていますか?

于 2010-01-29T22:26:03.453 に答える
3

トレーニングのために、ProbDists の作成に使用できる適切な FreqDists を作成し、NaiveBayesClassifier に渡すことができます。しかし、分類は実際には、頻度ではなくブール値を使用する機能セットで機能します。したがって、FreqDist に基づいて分類する場合は、NLTK 機能セットを使用しない独自の分類子を実装する必要があります。

于 2010-02-09T01:18:35.600 に答える
0

これがあなたを助ける方法です:

''' Returns the frequency of letters '''
def get_freq_letters(words):
    fdist = nltk.FreqDist([char.lower() for word in words for char in word if char.isalpha()])
    freq_letters = {}
    for key,value in fdist.iteritems():
        freq_letters[key] = value
    return freq_letters
于 2011-05-04T22:50:06.687 に答える