我正在使用SciKit Learn对大型数据集(+-34.000个文件)执行一些分析。现在我在想。 HashingVectorizer旨在降低内存使用量。是否可以先将一堆文件转换为HashingVectorizer对象(使用pickle.dump),然后将所有这些文件一起加载并将其转换为TfIdf功能?这些功能可以从HashingVectorizer中计算出来,因为可以存储计数并可以推导出文档数。我现在有以下内容:

for text in texts:
    vectorizer = HashingVectorizer(norm=None, non_negative=True)
    features = vectorizer.fit_transform([text])
    with open(path, 'wb') as handle:
        pickle.dump(features, handle)


然后,加载文件很简单:

data = []
for path in paths:
    with open(path, 'rb') as handle:
        data.append(pickle.load(handle))
tfidf = TfidfVectorizer()
tfidf.fit_transform(data)


但是,魔术不会发生。我如何让魔术发生?

最佳答案

看来问题是您正尝试向量化文本两次。建立计数矩阵后,应该可以使用sklearn.feature_extraction.text.TfidfTransformer而不是TfidfVectorizer将计数转换为tf-idf功能。

另外,看来您保存的数据是稀疏矩阵。您应该使用scipy.sparse.vstack()堆叠加载的矩阵,而不是将矩阵列表传递给TfidfTransformer

10-04 10:58