相似度计算

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

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

1、欧式距离

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

        在二维空间中,计算点a(x_1,y_1)与点b(x_2,y_2)之间的欧式距离,

其公式为:d_{ab} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

2、曼哈顿距离

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

        在二维空间中,计算点a(x_1,y_1)与点b(x_2,y_2)之间的曼哈顿距离,

其公式为:d_{ab} = |x_1-x_2|+|y_1-y_2|

3、切比雪夫距离

        切比雪夫距离(Chebyshev Distance)的定义:max(|x_1-X_2|, |y_1-y_2|, ...)

        在二维空间中,计算点a(x_1,y_1)与点b(x_2,y_2)之间的切比雪夫距离,

其公式为:d_{ab} = max(|x_1-x_2|,|y_1-y_2,...|)

4、马氏距离

        马氏距离指的是协方差距离。有m个样本向量(X_1, X_2,...,X_m),协方差矩阵为S。其中,向量X_iX_j之间的马氏距离为:

D(X_i,X_j) = \sqrt{(X_i-X_j)^TS^{-1}(X_i-X_j)}

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

5、夹角余弦距离

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

        在二维空间中,向量a(x_1,y_1)与向量b(x_2,y_2)的夹角余弦公式如下:

cos(\theta ) = \frac{x_1x_2+y_1y_2}{\sqrt{{x_1}^2+{y_1}^2}\sqrt{{x_2}^2+{y_2}^2}}

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

        两个集合AB的交集元素在AB的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示,对应的公式:J(A,B) = \frac{|A\cap B|}{|A\cup B|}

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

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

如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

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

公式:J_\delta (A,B) = \frac{|A\cup B|-|A\cap B|}{|A\cup B|}

7、相关系数与相关距离

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

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

随机变量与的相关系数:\rho _{XY} = \frac{Cov(X,Y)}{\sqrt{D(X)}\sqrt{D(Y)}} = \frac{E((E-EX)(Y-EY))}{\sqrt{D(X)}\sqrt{D(Y)}}

则随机变量与的相关距离为:D_{XY} = 1 - \rho_{XY}

posted @ 2019-09-28 07:41  KamShing  阅读(1063)  评论(0编辑  收藏  举报