【问题标题】:Handle incompatible matrices shapes in tf-idf处理 tf-idf 中不兼容的矩阵形状
【发布时间】:2017-03-14 22:51:40
【问题描述】:

我正在尝试匹配两个不同数据框 df1 和 df2 的公司名称。我正在尝试在两列上实现 tf-idf 和余弦相似度——df1 中的 company1 和 df2 中的 company2。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
v = TfidfVectorizer()
tfidf_matrix1 = v.fit_transform(df1['company1'])
tfidf_matrix2 = v.fit_transform(df2['company2'])
cosine_similarity(tfidf_matrix2, tfidf_matrix1)

这给了我一个错误:

ValueError: Incompatible dimension for X and Y matrices: X.shape[1] 
== 31089 while Y.shape[1] == 46844

这可能是因为:

tfidf_matrix1.shape

给我 (78684, 46844) 作为输出。还有-

tiff_matrix2.shape

给我 (39462, 31089) 作为输出。如何纠正此错误?

【问题讨论】:

  • 这真的是一个错误吗?您是否期望矩阵具有相同的形状?如果您不希望它们具有相同的形状,那么您希望如何“解决”问题?
  • 我是 tf-idf 的新手。我想找到每个公司名称之间的余弦相似度,以便找到匹配的公司。我的主要目标是找到匹配的公司。由于此错误,我不知道如何继续。

标签: python pandas tf-idf cosine-similarity sklearn-pandas


【解决方案1】:

基本上:

tfidf_matrix1 = v.fit_transform(df1['company1'])

tfidf_matrix2 = v.transform(df2['company2'])

你只需要变换一次就适应。

【讨论】:

  • 字符串长度不同有关系吗?我对每个数据框都有相同的行数,但不断收到:ValueError:X 和 Y 矩阵的不兼容维度:X.shape[1] == 27 而 Y.shape[1] == 508。对我来说,第一个 DF 是标题,第二个 DF 是文章正文
【解决方案2】:

问题是因为您正在对两个数据集执行 fit_transform。拟合的第一步是学习您在文档中使用的词汇表(忽略 hashingTF),因此矩阵 1 有 31089 个唯一术语,而 2 有 46844 个。

余弦相似度然后将两个矩阵相乘以产生相似度,因此每列匹配不同的术语。但是,因为您适合两次,所以您使用的是两个不同的词汇表。你需要适应一次,然后转换两次。

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2020-10-15
    • 2020-05-11
    • 2016-05-08
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多