相似度计算

很多时候,相似度可以理解为两样物体的距离,相似度计算在数据挖掘和推荐系统中有着广泛的应用场景。例如:

  • CF协同过滤算法中,可以利用相似度计算用户之间(User-Based)或者物品之间(Item-Based)的相似度;
  • 在利用k-means进行聚类时,判断个体所属类别,可以使用相似度计算公式计算个体到簇类中心的距离;
  • 利用KNN进行分类时,也可以利用相似度计算个体与已知类别之间的相似性,判断个体所属的类别;

1、欧式距离

        欧式距离,也叫欧几里得距离,指在m维空间中两点的真实距离。

        在二维空间中,计算点与点之间的欧式距离,

其公式为:

2、曼哈顿距离

        曼哈顿距离又叫城市街区距离。所谓的城市街区距离,就是将城市比喻为二维矩阵,从一个十字路口开到另外一个十字路口,驾驶距离显然不是欧式距离,而是“曼哈顿”距离。

        在二维空间中,计算点与点之间的曼哈顿距离,

其公式为:

3、切比雪夫距离

        切比雪夫距离(Chebyshev Distance)的定义:

        在二维空间中,计算点与点之间的切比雪夫距离,

其公式为:

4、马氏距离

        马氏距离指的是协方差距离。有m个样本向量,协方差矩阵为。其中,向量和之间的马氏距离为:

式中,为样本向量,为协方差矩阵。

5、夹角余弦距离

        几何中的夹角余弦用来衡量两个向量方向的差异。

        在二维空间中,向量与向量的夹角余弦公式如下:

6、杰卡德相似系数与杰卡德距离

        两个集合和的交集元素在和的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号表示,对应的公式:

杰卡德相似系数是衡量两个集合相似度的一种指标。

有时候,分母会变成两个集合的平均长度。

如Python代码:

def JaccardSimilarityCoefficient(a,b):
    set_a = set(a)
    set_b = set(b)
    # 原式
    dis = float(len(set_a & set_b)) / len(set_a | set_b)
    # 变式
    dis = 2 * float(len(set_a & set_b)) / (len(set_a)+len(set_b))
    return dis
知识兔

        与杰卡德系数相反的概念,就是杰卡德距离,即两个集合中不同元素占所有元素的比例,用来衡量两个集合的区分度。

公式:

7、相关系数与相关距离

        相关系数是衡量随机变量和相关程度的一种方法,相关系数的取值范围是[-1, 1]。相关系数的绝对值越大,表明与的相关度越高。

        当和线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

随机变量与的相关系数:

则随机变量与的相关距离为:

计算机