相似度

Basics

  • 可以分为距离类、角度类、角度+距离类

距离类

欧式距离(Euclidean Distance)

  • 欧式距离:欧式空间中两点间的距离公式。
  • 例如平面空间内的欧式距离:

曼哈顿距离(Manhattan Distance)

1
2
3
def Manhattan(dataA,dataB):
return np.sum(np.abs(dataA - dataB))
print(Manhattan(dataA,dataB))

汉明距离(Hamming distance)

  • 汉明距离表示的是两个字符串(相同长度)对应位不同的数量。比如有两个等长的字符串 str1 = “11111” 和 str2 = “10001” 那么它们之间的汉明距离就是3(这样说就简单多了吧。哈哈)。
  • 汉明距离多用于图像像素的匹配(同图搜索)、通信领域统计错误数据位的数量等
    1
    2
    3
    def hammingDistance(dataA,dataB):
    distanceArr = dataA - dataB
    return dataA.shape[0] - np.sum(distanceArr == 0)

角度类

余弦相似度(Cosine)

  • 首先,样本数据的夹角余弦并不是真正几何意义上的夹角余弦,只不过是借了它的名字,实际是借用了它的概念变成了是代数意义上的“夹角余弦”,用来衡量样本向量间的差异
  • 二维情况下,即几何意义上的夹角余弦。夹角越小,余弦值越接近于1,反之则趋于-1。
  • 余弦相似度对夹角敏感,对数值的相对大小不敏感

皮尔逊相关系数(Pearson Correlation Coefficient)

  • 在计算夹角余弦之前将两个向量减去各个样本的平均值,达到中心化的目的。皮尔逊相关函数是余弦相似度在维度缺失上面的一种改进方法

角度+距离

点积相似度(Dot)

  • 常见于word2vec、deepwalk等算法中,用于作为loss(最小化向量ab的模以及两者的夹角),也可以理解为decoder(两向量的点积可以理解为原空间的两点相似度)
  • 当向量模长固定时,点积相似度等同于余弦相似度

Refs