在训练整个数据集的分类器时出现内存错误,因此我将数据集分成小部分并为每个数据集训练单独的分类器对象。
为了进行测试,我需要这些单独的分类器对象的组合。那我怎么能这样做呢。我可以将对象存储在pickle文件中,但是它们再次只是单个对象。
我正在使用NLTK。
代码:
Set<String> wordSet = stream
.map(line -> line.split("[ .,;?!.:()]"))
.flatMap(Arrays::stream)
.map(String::toLowerCase)
.collect(Collectors.toCollection(TreeSet::new));
答案 0 :(得分:3)
分类器需要在整个数据集(代码中的training_set)上进行训练,以便能够进行正确的预测和测试(在testing_set上),因为使用数据集的一部分训练多个分类器将不起作用 - 或者至少它不是最佳解决方案。我会建议以下事项:
如果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()