NLTK分类器对象

时间:2016-05-01 11:33:23

标签: python nltk

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

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

我正在使用NLTK。

代码:

Set<String> wordSet = stream
            .map(line -> line.split("[ .,;?!.:()]"))
            .flatMap(Arrays::stream)
            .map(String::toLowerCase)
            .collect(Collectors.toCollection(TreeSet::new));

1 个答案:

答案 0 :(得分:3)

分类器需要在整个数据集(代码中的training_set)上进行训练,以便能够进行正确的预测和测试(在testing_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()