TFIDF 矩阵上的 SVD returns 奇怪的形状
SVD on TFIDF Matrix returns an odd shape
首要问题:
我认为来自 TfidfVectorizer
的 SparseVectors
模型 TruncatedSVD
上的 运行 fit_transform
会产生尺寸为 (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
应该是 return。我可以要求 SVD
将它变成 return 一个矩阵,其中行是文档,列是减少的 space 中的特征?
如果您想要在变换 space 中表示输入,那么 fit_transform 将 return 该对象。目前你在调用它时没有将结果分配给变量。 model.components_ 属性仅描述如何将 tfidf 向量 space 转换为 svd space.
def svd_tfidf_matrix(matrix):
svd = TruncatedSVD(n_components=3)
return svd.fit_transform(matrix)
首要问题:
我认为来自 TfidfVectorizer
的 SparseVectors
模型 TruncatedSVD
上的 运行 fit_transform
会产生尺寸为 (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
应该是 return。我可以要求 SVD
将它变成 return 一个矩阵,其中行是文档,列是减少的 space 中的特征?
如果您想要在变换 space 中表示输入,那么 fit_transform 将 return 该对象。目前你在调用它时没有将结果分配给变量。 model.components_ 属性仅描述如何将 tfidf 向量 space 转换为 svd space.
def svd_tfidf_matrix(matrix):
svd = TruncatedSVD(n_components=3)
return svd.fit_transform(matrix)