TFIDF Matrix上的SVD返回奇怪的形状

时间:2017-01-19 13:48:49

标签: python scikit-learn tf-idf svd

首要问题: 我认为在fit_transformTruncatedSVD上的模型SparseVectors上运行TfidfVectorizer会产生具有维度的组件(n_samples,n_components),如上所述here(跳下来)到fit_transform部分。

然而,我正在找回一个形状矩阵(n_components,n_words)。

以下是重新创建问题的简单示例:

def build_tfidf_model(corpus):
    transformer = TfidfVectorizer(analyzer='word')
    matrix = transformer.fit_transform(corpus)
    return matrix

def svd_tfidf_matrix(matrix):
    svd = TruncatedSVD(n_components=3)
    svd.fit_transform(matrix)
    return svd.components_


corpus = ['sentence one', 'sentence two', 'another one', 'another sentence', 'two sentence', 'one sentence']
tfidf_model = build_tfidf_model(corpus)
reduced_vectors = svd_tfidf_matrix(matrix=tfidf_model)

因此,tfidf_model.shape会产生(6, 4)。这对我来说很有意义。我有六个文件的语料库,共包含4个不同的单词。

但是,reduced_vectors.shape会产生(3,4)。我期待它的形状(6,3)

我一定是误解了调用fit_transform应该返回的内容。我可以要求SVD让它返回一个矩阵,其中行是文档,列是缩小空间中的要素?

1 个答案:

答案 0 :(得分:1)

如果您想要在变换空间中表示输入,那么fit_transform将返回该对象。目前您正在调用它而不将结果分配给变量。 model.components_属性仅描述了如何将tfidf向量空间转换为svd空间。

def svd_tfidf_matrix(matrix):
    svd = TruncatedSVD(n_components=3)
    return svd.fit_transform(matrix)