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

TIM*_*MEX 44 algorithm computer-science vector

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

dsi*_*cha 50

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

  • 道歉.我有点不对劲.余弦相似度对于向所有元素添加常量不是**不变的.我已经修好了.更大的一点仍然存在. (3认同)

Aka*_*all 28

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

在此输入图像描述

Pearson Correlation Coefficient对于添加任何常数不变的原因是通过构造减去平均值.这也很容易看出,Pearson相关系数和余弦相似度是等价的时候XY有手段0,所以我们可以认为Pearson相关系数为余弦相似度的贬低版本.

对于实际使用,让我们考虑两种资产的收益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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这些资产的收益具有完全相同的可变性,这是通过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]])
Run Code Online (Sandbox Code Playgroud)