【问题标题】:Training classifier as a batch processing训练分类器作为批处理
【发布时间】:2014-11-13 10:55:10
【问题描述】:

我在 nltk 中使用大型数据集(15 个数据文件,每个文件具有 5 * 10^5 特征)训练分类器,

所以我陷入了这个错误之间:

Traceback (most recent call last):
  File "term_classify.py", line 51, in <module>
    classifier = obj.run_classifier(cltype)
  File "/root/Desktop/karim/software/nlp/nltk/publish/lists/classifier_function.py", line 146, in run_classifier
    classifier = NaiveBayesClassifier.train(train_set)
  File "/usr/local/lib/python2.7/dist-packages/nltk/classify/naivebayes.py", line 210, in train
    count = feature_freqdist[label, fname].N()
MemoryError

代码:

def run_classifier(self,cltype):
    # create our dict of training data
    texts = {}
    texts['act'] = 'act'
    texts['art'] = 'art'
    texts['animal'] = 'anim'
    texts['country'] = 'country'
    texts['company'] = 'comp'
    train_set = [] 
    train_set = train_set + [(self.get_feature(word), sense) for word in features]
    #len of train_set = 545668. Better if we can push 100000 at a time
    classifier = NaiveBayesClassifier.train(train_set)

有什么方法可以批量训练分类器或任何其他方式,以便在不影响结果的情况下减少负载

【问题讨论】:

  • 当您说lacks 时,我以为您的意思是10e5,所以我修改了它。如果没有,请随意回滚。

标签: python parallel-processing machine-learning batch-processing nltk


【解决方案1】:

您可以随时切换到支持批量学习(部分拟合)的scikit-learn贝叶斯

http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB

partial_fit(X, y, classes=None, sample_weight=None)

增量适合 一批样品。该方法预计会被调用多次 连续在数据集的不同块上以实现 非核心或在线学习。这在 整个数据集太大而无法一次放入内存。这种方法有 一些性能开销,因此最好调用 partial_fit 尽可能大的数据块(只要适合 内存预算)来隐藏开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 2017-04-05
    • 2016-12-27
    • 2013-04-11
    • 1970-01-01
    • 2015-09-21
    • 2018-04-06
    • 2019-02-19
    相关资源
    最近更新 更多