很多时候,相似度可以理解为两样物体的距离,相似度计算在数据挖掘和推荐系统中有着广泛的应用场景。例如:
- 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(负线性相关)。
随机变量与的相关系数:
则随机变量与的相关距离为: