欧几里德距离与皮尔森相关性与余弦相似度?

时间:2009-12-03 09:41:14

标签: algorithm computer-science vector

他们的目标都是一样的:找到类似的向量。 你在哪种情况下使用哪种? (任何实际例子?)

3 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分:28)

Pearson Correlation Coefficient和Cosine Similarity之间的差异可以从他们的公式中看出:

enter image description here

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

在实际使用中,让我们考虑两个资产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

enter image description here

这些资产的回报具有完全相同的变异性,这是通过Pearson Correlation Coefficient(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]])

答案 2 :(得分:2)

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