python - NLTK 分类器对象

标签 python nltk

在为整个数据集训练分类器时,我遇到了内存错误,因此我将数据集分成小部分,并为每个部分训练一个单独的分类器对象。

为了进行测试,我需要这些单独的分类器对象的组合。那么我该怎么做呢。我可以将对象存储在 pickle 文件中,但它们又只是单独的对象。

我正在使用 NLTK。

代码:

documents = [(list(movie_reviews.words(fileid)), category)
         for category in movie_reviews.categories()
         for fileid in movie_reviews.fileids(category)]

all_words = []
for w in movie_reviews.words():
    all_words.append(w.lower())
all_words = nltk.FreqDist(all_words)
word_features = list(all_words.keys())[:3000]

def find_features(document):
    words = set(document)
    features = {}
    for w in word_features:
        features[w] = (w in words)
    return features



#print((find_features(movie_reviews.words('neg/cv000_29416.txt'))))
featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90 / 100)
training_set = featuresets[:numtrain]
testing_set = featuresets[numtrain:]

classifier = nltk.NaiveBayesClassifier.train(training_set)

最佳答案

分类器需要在整个数据集(代码中的训练集)上进行训练,以便能够做出正确的预测和测试(在测试集上),因为使用部分数据集训练多个分类器将不起作用——或者至少它不是最佳解决方案。我建议采取以下措施:

  1. 尝试解决内存错误(如果您在 Windows 和 python 32 位上运行,请看一下:http://gisgeek.blogspot.gr/2012/01/set-32bit-executable-largeaddressaware.html)
  2. 尝试优化您的代码/数据,也许使用更少的功能,或者以更节省空间/内存的方式表示它们。
  3. 如果 1 和 2 不起作用并且想要将许多分类器对象组合为一个(但仅当涉及到它们的预测时),您可以尝试集成方法,但我真的相信这超出了您正在尝试做的事情并不能解决您面临的问题。无论如何,下面是 MaxVote 分类器的示例: https://bitbucket.org/roadrunner_team/large-scale-sentiment-analysis/src/a06d51ef42325293f0296270ca975341c847ab9f/SentimentAnalysis/FigurativeTextAnalysis/models/Classifier_.py?at=master&fileviewer=file-view-default

    class MaxVoteClassifier(object):
        """
            Takes as input a list of pre-trained classifiers and calculates the Frequency Distribution of their predictions
        """
        def __init__(self, classifiers):
            self._classifiers = classifiers
            self.predictions = None
    
        def classify(self, tweet_fea):
            counts = FreqDist()
            for classifier in self._classifiers:
                classifier.set_x_trial([tweet_fea])
                counts[classifier.predict()[0]] += 1
    
            return counts.max()
    

关于python - NLTK 分类器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966184/

相关文章:

python - 查找并替换为以小写字母开头的正确句子案例句子。正则表达式或崇高

python - nltk python 3 如果用户输入中有名词,如何返回 true?

python - 分发带有 __main__.py 的可执行 zip 文件,如何访问额外数据?

python - 具有多个输入序列和相应的多个输出序列的 LSTM

python - 如何从代码配置 nltk 数据目录?

python - 使用 NLTK 删除停用词时对象没有属性

python - 经验丰富的 Python 程序员(尤其是前 php 程序员): How do I debug python?

python - 使用SciPy的线性代数方法求解三个联立方程

未捕获 Python 请求 ProxyError

python - 如何从 WordNet NLTK 中提取所有附属形容词并将其保存到文本文件中?