【问题标题】:Nltk naive bayesian classifier memory issueNltk 朴素贝叶斯分类器内存问题
【发布时间】:2012-04-01 04:56:10
【问题描述】:

我在这里的第一篇文章! 我在使用 nltk NaiveBayesClassifier 时遇到问题。我有一个包含 7000 个项目的训练集。每个训练项目都有 2 或 3 个世界的描述和一个代码。我想将代码用作类的标签,将描述的每个世界用作特征。 一个例子:

“我叫奥巴马”,001 ...

训练集 = {[feature['My']=True,feature['name']=True,feature['is']=True,feature[Obama]=True], 001}

不幸的是,使用这种方法,训练程序 NaiveBayesClassifier.train 最多使用 3 GB 的内存。 我的方法有什么问题? 谢谢!

def document_features(document): # feature extractor
document = set(document)
return dict((w, True) for w in document)

...
words=set()
entries = []
train_set= []
train_length = 2000
readfile = open("atcname.pl", 'r')
t = readfile.readline()
while (t!=""):
  t = t.split("'")
  code = t[0] #class
  desc = t[1] # description
  words = words.union(s) #update dictionary with the new words in the description
  entries.append((s,code))
  t = readfile.readline()
train_set = classify.util.apply_features(document_features, entries[:train_length])
classifier = NaiveBayesClassifier.train(train_set) # Training

【问题讨论】:

    标签: python nltk bayesian classification


    【解决方案1】:

    使用nltk.classify.apply_features 返回一个对象,该对象的作用类似于列表,但不会将所有功能集存储在内存中。

    from nltk.classify import apply_features

    更多信息和示例here

    无论如何,您都在将文件加载到内存中,您需要使用某种形式的延迟加载方法。这将根据需要加载。 考虑查看this

    【讨论】:

    • 感谢您的建议!我试过了,但我在内存使用方面没有一些改进。使用 train_set =classify.util.apply_features(document_features, entries[:1500]),只有 1500 个项目,我使用 1.7GB....
    • 您能否发布您的训练集的要点以及您尝试使用的确切语法。 apply_features 通常效果很好。
    猜你喜欢
    • 2012-12-05
    • 2017-08-30
    • 2016-09-28
    • 2015-12-20
    • 2017-04-19
    • 2012-04-18
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多