Python 如何减少Scikit学习矢量器的内存使用?

Python 如何减少Scikit学习矢量器的内存使用?,python,numpy,machine-learning,scipy,scikit-learn,Python,Numpy,Machine Learning,Scipy,Scikit Learn,TFIDFVectorizer占用了大量内存,对470 MB的100k文档进行矢量化需要超过6 GB,如果我们处理2100万个文档,它将无法容纳我们现有的60 GB RAM 因此,我们选择HashingVectorizer,但仍然需要知道如何分发HashingVectorizer。Fit和partial Fit不起任何作用,因此如何使用大型语料库?我强烈建议您在大型数据集上拟合模型时使用 HashingVectorizer是独立于数据的,只有来自vectorizer.get_params()的参

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


因此,我们选择HashingVectorizer,但仍然需要知道如何分发HashingVectorizer。Fit和partial Fit不起任何作用,因此如何使用大型语料库?

我强烈建议您在大型数据集上拟合模型时使用


HashingVectorizer
是独立于数据的,只有来自
vectorizer.get_params()
的参数才是重要的。因此,(取消)pickle`hashingvectorier实例应该非常快


基于词汇表的向量器更适合于对小型数据集进行探索性分析。

克服HashingVectorizer无法解释IDF的一种方法是将数据索引到elasticsearch或lucene中,并从中检索术语向量,使用它们可以计算Tf IDF。

非常好,我发现了这一点:和测试。我们可以使用无监督学习(KMeans)吗?在TFIDF向量器上,我们可以使用随机PCA进行绘图,但HashingVectorizer输出是不同的,对吗?我们怎么能在上面做散点图呢?为什么会不一样呢?RandomizedPCA可以将任何稀疏矩阵作为输入,不管它是以何种方式生成的。如果你想进行核心无监督学习(聚类),你应该使用MiniBatchKMeans而不是KMeans。只有前者有一个
partial_fit
方法。
hashingvectorier
不进行IDF加权。这可能是你问题的原因。您可以尝试通过管道
TfidfTransformer
手动对
hashingvectorier
的输出执行IDF重新加权。