Algorithm 欧几里德距离、皮尔逊相关、余弦相似性?

Algorithm 欧几里德距离、皮尔逊相关、余弦相似性?,algorithm,computer-science,vector,Algorithm,Computer Science,Vector,他们的目标都是一样的:找到相似的向量。 你在哪种情况下使用哪种?(有实际例子吗?皮尔逊相关性和余弦相似性对缩放不变性,即所有元素乘以一个非零常数。Pearson相关性对向所有元素添加任何常数也是不变的。例如,如果有两个向量X1和X2,并且皮尔逊相关函数被称为Pearson(),Pearson(X1,X2)==Pearson(X1,2*X2+3)。这是一个非常重要的属性,因为您通常不关心两个向量在绝对值上是否相似,只关心它们以相同的方式变化。皮尔逊相关系数和余弦相似性之间的差异可以从它们的公式中看

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

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

皮尔逊相关系数和余弦相似性之间的差异可以从它们的公式中看出:

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

实际使用中,考虑两个资产的返回值:代码> 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

这些资产的收益率具有完全相同的可变性(通过皮尔逊相关系数(1)进行衡量),但它们并不完全相似(通过余弦相似性(0.971)进行衡量)


除了@dsimcha的答案外,原始数据子集的余弦相似性与原始数据的余弦相似性相同,这对于Pearson相关性是不正确的。这在对数据子集进行聚类时非常有用:它们(在拓扑上)与原始聚类相同,因此更易于可视化和解释。我有点错了。余弦相似性对于向所有元素添加常数不是不变的。我已经修好了。较大的点仍然有效。欧几里德距离呢?
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]])