【问题标题】:Python: Cosine Similarity m * n matricesPython:余弦相似度 m * n 矩阵
【发布时间】:2012-07-09 11:29:00
【问题描述】:

我在从图像中提取数据后构建了两个 M X N 矩阵。两个向量都有很长的第一行,在第三行之后它们都变成了第一列。 例如原始向量看起来像这样

1,23,2,5,6,2,2,6,2,
12,4,5,5,
1,2,4,
1,
2,
2
:

两个向量都有一个相似的模式,前三行有很长的行,然后随着它的进展而变细。做余弦相似度我正在考虑使用填充技术来添加零并使这两个向量 N X N。我查看了余弦相似度的 Python 选项,但一些示例使用的是包调用 numpy。我无法弄清楚 numpy 究竟如何进行这种类型的填充并进行余弦相似度。任何指导将不胜感激。

【问题讨论】:

    标签: python vector numpy cosine-similarity


    【解决方案1】:

    如果两个数组的维度相同,我会使用 NumPy 将它们展平。 NumPy(和 SciPy)是一种强大的科学计算工具,它使矩阵操作变得更加容易。

    这是我如何使用 NumPy 和 SciPy 的示例:

    import numpy as np
    from scipy.spatial import distance
    
    A = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object )
    B = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object )
    
    Aflat = np.hstack(A)
    Bflat = np.hstack(B)
    
    dist = distance.cosine(Aflat, Bflat)
    

    这里的结果是dist = 1.10e-16(即0)。

    请注意,我在这里使用了dtype=object,因为这是我知道能够将不同形状存储到 NumPy 中的数组中的唯一方法。这就是为什么后来我使用hstack() 来展平数组(而不是使用更常见的flatten() 函数)。

    【讨论】:

      【解决方案2】:

      我会将它们制成一个 scipy 稀疏矩阵 (http://docs.scipy.org/doc/scipy/reference/sparse.html),然后从 scikit learn 模块运行余弦相似度。

      from scipy import sparse
      sparse_matrix= scipy.sparse.csr_matrix(your_np_array)
      
      from sklearn.metrics import pairwise_distances
      from scipy.spatial.distance import cosine
      
      distance_matrix= pairwise_distances(sparse_matrix, metric="cosine")
      

      【讨论】:

      • 这是如何获得赞成票的。这是 scipy 提供的错误:TypeError: scipy distance metrics do not support sparse matrices.我错过了什么吗?
      • 它不适用于稀疏矩阵。我得到了同样的错误。你能解决问题吗?
      • 使用 from sklearn.metrics.pairwise import cosine_similarity 代替工作
      【解决方案3】:

      为什么你不能只在两个锯齿状列表上运行一个嵌套循环(大概),使用欧几里得/向量点积对每一行求和,并将结果用作相似性度量。这假设锯齿状尺寸是相同的。

      虽然我不太确定您是如何从位图图像中获取锯齿状数组(我会假设它是 MxN 形式的适当密集矩阵),或者上面的锯齿状数组数组如何表示MxN 矩阵/图像数据,因此,用零填充数据如何有意义?如果这是一种稀疏矩阵表示,人们会期望使用值注释的行/列信息。

      【讨论】:

        猜你喜欢
        • 2015-07-17
        • 2019-12-23
        • 1970-01-01
        • 2016-10-22
        • 2021-06-30
        • 2021-08-20
        • 2017-06-13
        • 2016-09-08
        • 2020-10-28
        相关资源
        最近更新 更多