【问题标题】:scikit-learn vectorizing with big datasetscikit-learn 使用大数据集进行矢量化
【发布时间】:2017-02-24 13:17:00
【问题描述】:

我的磁盘上有 9GB 的分段文档,而我的 vps 只有 4GB 内存。

如何在初始化时不加载所有语料库的情况下对所有数据集进行矢量化?有没有示例代码?

我的代码如下:

contents = [open('./seg_corpus/' + filename).read()
            for filename in filenames]
vectorizer = CountVectorizer(stop_words=stop_words)
vectorizer.fit(contents)

【问题讨论】:

    标签: python numpy machine-learning scikit-learn


    【解决方案1】:

    试试这个,你可以只将文件句柄传递给fit方法,而不是将所有文本加载到内存中,但你必须在CountVectorizer构造函数中指定input='file'

    contents = [open('./seg_corpus/' + filename)
            for filename in filenames]
    vectorizer = CountVectorizer(stop_words=stop_words, input='file')
    vectorizer.fit(contents)
    

    【讨论】:

    • 谢谢。另一个问题,scikit-learn 的 KMeans 是否有一些技巧,例如“input='file'”,我也无法将稀疏矩阵加载到内存中。
    • @KalenBlue,很奇怪你不能将稀疏矩阵加载到内存中,有那么大吗?或者当您尝试在其上使用 KMeans 时是否会发生一些错误?因为当一个人无法将稀疏矩阵加载到内存中时,它看起来更像是程序员的错误。无论如何,您可以尝试将矩阵存储在不同的批次中,分别加载它们,然后使用 MiniBatchKMeans 和 partial_fit 方法。或者(更简单的方法)压缩特征空间,并使稀疏矩阵保持在内存中成为可能。例如,尝试删除所有由过于频繁的 n-gram 或过于罕见的特征创建的特征。
    • 您可以使用 max_features、max_df 和 min_df 参数来使 CountVectorizer 的结果矩阵更小。
    • 或者考虑使用不包含词汇表的替代矢量化器,比如 HashingVectorizer,我相信。
    • @IbraimGaniev 我已将语料库矢量化为文件系统。每个向量大约 2MB 没有压缩。而且有8000个文档,所以我的内存不够大。我将使用迭代器来
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 2014-10-07
    • 2019-06-09
    • 2013-02-21
    • 2015-07-10
    • 2015-03-02
    • 2016-07-13
    • 2015-02-24
    相关资源
    最近更新 更多