【问题标题】:How can i reduce memory usage of Scikit-Learn Vectorizers?如何减少 Scikit-Learn Vectorizer 的内存使用量?
【发布时间】:2013-07-06 08:40:17
【问题描述】:

TFIDFVectorizer 占用大量内存,对 470 MB 的 100k 文档进行矢量化需要超过 6 GB,如果我们处理 2100 万个文档,它将无法容纳我们现有的 60 GB RAM。

所以我们选择了 HashingVectorizer,但仍然需要知道如何分发散列矢量化器。Fit 和部分拟合什么都不做,那么如何使用 Huge Corpus?

【问题讨论】:

    标签: python numpy machine-learning scipy scikit-learn


    【解决方案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 重新加权。
      猜你喜欢
      • 2018-02-17
      • 2018-07-12
      • 2021-12-12
      • 1970-01-01
      • 2019-01-23
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多