【问题标题】:Euclidean distance vs Pearson correlation vs cosine similarity?欧几里得距离vs皮尔逊相关vs余弦相似度?
【发布时间】:2010-12-22 18:25:18
【问题描述】:

他们的目标都是一样的:找到相似的向量。 你在什么情况下使用哪个? (有实际例子吗?)

【问题讨论】:

    标签: algorithm computer-science vector


    【解决方案1】:

    除了@dsimcha 的回答之外,原始数据子集的余弦相似度与原始数据的余弦相似度相同,这对于 Pearson 相关性不成立。这在对数据子集进行聚类时很有用:它们(在拓扑上)与原始聚类相同,因此可以更轻松地可视化和解释

    【讨论】:

      【解决方案2】:

      皮尔逊相关系数和余弦相似度的区别可以从他们的公式看出:

      皮尔逊相关系数对于添加任何常数都是不变的原因是通过构造减去均值。也很容易看出,当XY 具有0 的均值时,皮尔逊相关系数和余弦相似度是等价的,因此我们可以将皮尔逊相关系数视为余弦相似度的贬义版本。

      为了实际使用,我们考虑xy这两种资产的收益:

      In [275]: pylab.show()
      
      In [276]: x = np.array([0.1, 0.2, 0.1, -0.1, 0.5])
      
      In [277]: y = x + 0.1
      

      这些资产的收益具有完全相同的可变性,以 Pearson 相关系数 (1) 衡量,但它们并不完全相似,以余弦相似性 (0.971) 衡量。

      In [281]: np.corrcoef([x, y])
      Out[281]: 
      array([[ 1.,  1.],   # The off diagonal are correlations 
             [ 1.,  1.]])  # between x and y
      
      In [282]: from sklearn.metrics.pairwise import cosine_similarity
      
      In [283]: cosine_similarity(x, z)
      Out[283]: array([[ 0.97128586]])
      

      【讨论】:

        【解决方案3】:

        皮尔逊相关性和余弦相似性对于缩放是不变的,即将所有元素乘以一个非零常数。皮尔逊相关对于向所有元素添加任何常数也是不变的。例如,如果您有两个向量 X1 和 X2,并且您的 Pearson 相关函数称为 pearson()pearson(X1, X2) == pearson(X1, 2 * X2 + 3)。这是一个非常重要的属性,因为您通常不关心两个向量在绝对意义上是否相似,只关心它们以相同的方式变化。

        【讨论】:

        • 道歉。我错了。余弦相似度对于向所有元素添加一个常数不是不变的。我已经解决了这个问题。较大的一点仍然成立。
        • 欧几里得距离呢?
        猜你喜欢
        • 2012-08-20
        • 2016-01-01
        • 2018-09-28
        • 2013-10-24
        • 2018-04-20
        • 2012-10-30
        • 2015-01-10
        • 2017-12-12
        • 2017-09-27
        相关资源
        最近更新 更多