他们的目标都是一样的:找到类似的向量。 你在哪种情况下使用哪种? (任何实际例子?)
答案 0 :(得分:49)
Pearson相关和余弦相似性对于缩放是不变的,即将所有元素乘以非零常数。 Pearson相关性对于向所有元素添加任何常量也是不变的。例如,如果您有两个向量X1和X2,并且您的Pearson相关函数称为pearson()
,pearson(X1, X2) == pearson(X1, 2 * X2 + 3)
。这是一个非常重要的属性,因为你通常不关心两个向量在绝对意义上是相似的,只是它们以相同的方式变化。
答案 1 :(得分:28)
Pearson Correlation Coefficient和Cosine Similarity之间的差异可以从他们的公式中看出:
Pearson Correlation Coefficient对于添加任何常数不变的原因是通过构造减去平均值。当X
和Y
具有0
的均值时,也很容易看出Pearson Correlation Coefficient和Cosine Similarity是等价的,因此我们可以将Pearson Correlation Coefficient视为余弦相似度的贬值版本。
在实际使用中,让我们考虑两个资产x
和y
的回报:
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 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相关性则不然。这在聚类数据子集时非常有用:它们(拓扑上)与原始聚类相同,因此可以更容易地对其进行可视化和解释