首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要一个整洁的数据结构建议来存储一个非常大的数据集(用Python训练朴素的Bayes )

我需要一个整洁的数据结构建议来存储一个非常大的数据集(用Python训练朴素的Bayes )
EN

Stack Overflow用户
提问于 2011-09-17 06:22:57
回答 4查看 381关注 0票数 1

我将用Python实现朴素的Bayes分类器,并将电子邮件归类为垃圾邮件。我有一个非常稀疏和长的数据集,包含许多条目。每个条目如下:

1 9:3 94:1 109:1 163:1 405:1 406:1 415:2 416:1 435:3 436:3 437:4

其中1是标签(垃圾邮件,而不是垃圾邮件),每一对对应于一个单词及其频率。例如,9:3对应于单词9,在这个电子邮件示例中发生了3次。

我需要阅读这个数据集并将其存储在一个结构中。由于它是一个非常大且稀疏的数据集,所以我正在寻找一个整洁的数据结构来存储以下变量:

  • 每个电子邮件
  • 标签的索引(1或-1)
  • word及其每封电子邮件的频率
  • I还需要用标签信息

创建一个包含所有单词及其频率的语料库。

对这种数据结构有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-17 11:09:08

我会生成一个类

代码语言:javascript
复制
class Document(object):

    def __init__(self, index, label, bowdict):
        self.index = index
        self.label = label
        self.bowdict = bowdict

将稀疏向量存储在bowdict中,例如

代码语言:javascript
复制
{ 9:3, 94:1, 109:1,  ... } 

并将所有数据保存在Document的列表中。

若要获得具有给定标签的所有文档的聚合,请执行以下操作:

代码语言:javascript
复制
from collections import defaultdict

def aggregate(docs, label):
    bow = defaultdict(int)
    for doc in docs:
        if doc.label == label:
           for (word, counter) in doc.bowdict.items():
                bow[word] += counter  
    return bow    

您可以使用cPickle模块持久化所有数据。

另一种方法是使用http://docs.scipy.org/doc/scipy/reference/sparse.html。你可以用一行稀疏矩阵来表示一个弓形向量.如果你想聚合弓,你只需要把它们加起来。这可能比上面简单的解决方案要快得多。

此外,可以将所有稀疏文档存储在一个大型矩阵中,其中文档实例包含对矩阵的引用,以及关联行的行索引。

票数 0
EN

Stack Overflow用户

发布于 2011-09-17 07:06:20

如果您假设您不关心电子邮件中每个单词的多次出现,那么您真正需要知道的就是(也就是说,您的功能是布尔型的):

对于每一个特性,积极联想和消极联想的计数是多少?

您可以很容易地在网上一次通过,只跟踪这两个数字为每个功能。

非布尔型的特性意味着你必须以某种方式对这些特性进行离散化,但你并不是真的在问如何做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2011-09-17 07:29:06

https://github.com/Yelp/sqlite3dbm

http://packages.python.org/sqlite3dbm/

这就像python字典,只是它将您给它的所有内容都存储在磁盘上,因此,它是持久的!这不会增加大量内存,因为它把东西写到磁盘上。您可以让一个程序设置这些文件,而另一个程序使用它们进行分类,而不必担心序列化问题。

您可以将第一个问题清晰地建模为

代码语言:javascript
复制
doc_to_info[doc_id] = {'label': 'label_0', 'word_freqs': {'this': 3, 'is': 4, ...}}

您可以将第二个问题建模为

代码语言:javascript
复制
word_to_freq[word] = {'label_0': 42, 'label_1': 314}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7452917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档