如何减少 Scikit-Learn Vectorizer 的内存使用量?
Posted
技术标签:
【中文标题】如何减少 Scikit-Learn Vectorizer 的内存使用量?【英文标题】:How can i reduce memory usage of Scikit-Learn Vectorizers? 【发布时间】:2013-07-06 08:40:17 【问题描述】:TFIDFVectorizer 占用大量内存,对 470 MB 的 100k 文档进行矢量化需要超过 6 GB,如果我们处理 2100 万个文档,它将无法容纳我们现有的 60 GB RAM。
所以我们选择了 HashingVectorizer,但仍然需要知道如何分发散列矢量化器。Fit 和部分拟合什么都不做,那么如何使用 Huge Corpus?
【问题讨论】:
【参考方案1】:克服 HashingVectorizer 无法解释 IDF 的一种方法是将您的数据索引到 elasticsearch 或 lucene 并从中检索词向量,您可以使用它们计算 Tf-IDF。
【讨论】:
【参考方案2】:我强烈建议您在大型数据集上拟合模型时使用HashingVectorizer。
HashingVectorizer
与数据无关,只有来自vectorizer.get_params()
的参数很重要。因此 (un)pickling `HashingVectorizer 实例应该非常快。
基于词汇的矢量化器更适合对小型数据集进行探索性分析。
【讨论】:
很好,我发现了这个:t.co/12cFDYlTil 和测试。我们可以使用无监督学习(KMeans)吗? 在 TFIDFVectorizers 上我们可以使用 Randomized PCA 进行绘图,但是 HashingVectorizer 的输出是不同的,对吧?我们如何在上面做散点图? 为什么会有所不同? RandomizedPCA 可以将任何稀疏矩阵作为输入,无论其生成方式如何。 如果你想做核外无监督学习(集群),你应该使用 MiniBatchKMeans 而不是 KMeans。只有前者有partial_fit
方法。
HashingVectorizer
不进行 IDF 加权。这可能是您的问题的原因。您可以尝试将TfidfTransformer
流水线化以手动对HashingVectorizer
的输出进行IDF 重新加权。以上是关于如何减少 Scikit-Learn Vectorizer 的内存使用量?的主要内容,如果未能解决你的问题,请参考以下文章
调整 leaf_size 以减少 Scikit-Learn KNN 中的时间消耗