3

我想知道是否有人可以通过一个代码片段来帮助我,该代码片段演示了如何使用特征频率方法而不是特征存在来训练朴素贝叶斯分类器。

我认为第 6 章链接文本中所示的以下内容是指使用特征存在 (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 声明一个字典

6 次迭代所有最常见的 2000 个单词

7 创建一个字典,其中键是“包含(单词)”,值是真或假。如果单词出现在文档中则为真,否则为假

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 回答