相似度度量方法整理

相似度度量方法,相关实现代码使用python

导包

import numpy as np
from scipy.spatial.distance import euclidean
from sklearn.metrics.pairwise import euclidean_distances

一、距离度量方法:

这类方法基于距离的概念来衡量对象之间的相似度。距离度量方法通常适用于数值型数据,通过计算距离来衡量对象之间的相似程度,距离越小表示相似度越高。

给定样本集合X,X是m维实数向量空间 R m R^m Rm中点的集合,其中 x i , x j ∈ X , x i = ( x 1 i , x 2 i , ⋯   , x m i ) T , x j = ( x 1 j , x 2 j , ⋯   , x m j ) T x_i,x_j\in X,x_i=(x_{1i},x_{2i},\cdots,x_{mi})^T,x_j=(x_{1j},x_{2j},\cdots,x_{mj})^T xi,xjX,xi=(x1i,x2i,,xmi)T,xj=(x1j,x2j,,xmj)T

1.闵可夫斯距离(Minkowski Distance):

样本 x i x_i xi x j x_j xj的闵可夫斯距离定义为:

d i j = ( ∑ k = 1 m ∣ x k i − x k j ∣ p ) 1 p d_{ij}=(\sum_{k=1}^m{|x_{ki}-x_{kj}|}^p)^{\frac{1}{p}} dij=(k=1mxkixkjp)p1
这里 p ≥ 1 p\ge1 p1

(1).欧几里得距离(Euclidean Distance):

当p=2时称为欧几里得距离,简称欧氏距离,计算两个向量之间的欧氏距离,即它们之间的直线距离,欧氏距离的定义为:
d i j = ( ∑ k = 1 m ∣ x k i − x k j ∣ 2 ) 1 2 d_{ij}=(\sum_{k=1}^m{|x_{ki}-x_{kj}|}^2)^{\frac{1}{2}} dij=(k=1mxkixkj2)21

计算两个向量之间的欧式距离

# 计算两个向量之间的欧式距离
def eucliDist(A,B):
    return np.sqrt(np.sum(np.power((A - B), 2)))

#numpy库计算欧式距离
def eucliDist_np(A,B):
	return np.linalg.norm(A-B)

#scipy库计算欧式距离
def eucliDist_sp(A,B):
	return euclidean(A,B)

#sklearn库计算欧式距离
def eucliDist_sl(A,B):
    return euclidean_distances(A,B)

计算二维矩阵与一维向量之间的欧式距离,需要矩阵大小与向量大小匹配

#计算向量与矩阵的列向量之间的欧式距离
def calculate_col_distances(matrix, vector):
 	"""
    Args:
        matrix: shape为m*n
        vector: 长度为m
    Returns:
        向量与矩阵的列向量之间的欧式距离,结果长度为n
    """
    diff = matrix.reshape((-1,len(vector))) - vector # 计算差向量
    distances = np.linalg.norm(diff, axis=0)  # 计算范数
    return distances

#计算向量与矩阵的行向量之间的欧式距离
def calculate_row_distances(matrix, vector):
 	"""
    Args:
        matrix: shape为m*n
        vector: 长度为n
    Returns:
        向量与矩阵的列向量之间的欧式距离,结果长度为m
    """
    diff = matrix- vector # 计算差向量
    distances = np.linalg.norm(diff, axis=0)  # 计算范数
    return distances
(2).曼哈顿距离(Manhattan Distance):

当p=1时称为曼哈顿距离。计算两个向量之间的曼哈顿距离,即它们之间的城市街区距离(各个维度的差值的绝对值之和)。曼哈顿距离的定义为:
d i j = ∑ k = 1 m ∣ x k i − x k j ∣ d_{ij}=\sum_{k=1}^m{|x_{ki}-x_{kj}|} dij=k=1mxkixkj

(3).切比雪夫距离(Chebyshev Distance):

当p= ∞ \infty 时称为切比雪夫距离,取各个坐标数值差的绝对值的最大值,切比雪夫距离的定义为:
d i j = max ⁡ k ∣ x k i − x k j ∣ d_{ij}=\max_k{|x_{ki}-x_{kj}|} dij=kmaxxkixkj

2.马哈拉诺比斯距离(Mahalanobis Distance):

马哈拉诺比斯距离,简称马氏距离,考虑各个分量(特征)之间的相关性并与各个分量的尺度无关。马哈拉诺比斯距离越大相似度越小,距离越小相似度越大。

给定一个样本集合 X , X = [ x i j ] m × n X,X =[x_{ij}]_{m×n} XX=[xij]m×n,其协方差矩阵记作 S。样本 x i x_i xi与样本 x j x_j xj 之间的马哈拉诺比斯距离 d i j d_{ij} dij定义为:

d i j = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 d_{ij}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^{\frac{1}{2}} dij=[(xixj)TS1(xixj)]21
其中
x i = ( x 1 i , x 2 i , ⋯   , x m i ) T , x j = ( x 1 j , x 2 j , ⋯   , x m j ) T x_i=(x_{1i},x_{2i},\cdots,x_{mi})^T, x_j=(x_{1j},x_{2j},\cdots,x_{mj})^T xi=(x1i,x2i,,xmi)T,xj=(x1j,x2j,,xmj)T

当S为单位矩阵时,即样本数据的各个分量互相独立且各个分量的方差为1时,由马氏距离的定义可知马氏距离就是欧氏距离,所以马氏距离是欧氏距离的推广。

二、内积度量方法:

这类方法基于向量之间的内积来衡量相似度。

余弦相似度(Cosine Similarity):

计算两个向量之间的夹角余弦值,用于衡量它们的方向相似性,余弦相似度越接近1表示相似度越高,越接近0相似度越低。对于样本 x i x_i xi与样本 x j x_j xj之间的夹角余弦定义为:
s i j = ∑ k = 1 m x k i x k j [ ∑ k = 1 m x k i 2 ∑ k = 1 m x k j 2 ] 1 2 s_{ij}=\frac{\sum_{k=1}^m{x_{ki}}x_{kj}}{[\sum_{k=1}^m{x^2_{ki}}\sum_{k=1}^m{x^2_{kj}}]^{\frac{1}{2}}} sij=[k=1mxki2k=1mxkj2]21k=1mxkixkj

s i j = x i ⋅ x j ∣ ∣ x i ∣ ∣ ∗ ∣ ∣ x j ∣ ∣ s_{ij}=\frac{x_i\cdot x_j} { ||x_i|| * ||x_j||} sij=∣∣xi∣∣∣∣xj∣∣xixj
其中 x i ⋅ x j x_i\cdot x_j xixj表示向量的内积, ∣ ∣ x ∣ ∣ ||x|| ∣∣x∣∣ ∣ ∣ y ∣ ∣ ||y|| ∣∣y∣∣分别表示向量的范数。

三、相关系数方法

这类方法基于统计的相关性概念来衡量对象之间的相似度。

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

用于衡量两个变量之间的线性相关程度,相关系数的绝对值越接近于1,表示样本越相似,越接近于0,表示样本越不相似。对于两个m维向量 x i x_i xi x j x_j xj,相关系数定义为:

r i j = ∑ k = 1 m ( x k i − x ˉ i ) ( x k j − x ˉ j ) [ ∑ k = 1 m ( x k i − x ˉ i ) 2 ∑ k = 1 m ( x k j − x ˉ j ) 2 ] 1 2 r_{ij}=\frac{\sum_{k=1}^m{(x_{ki}-\bar{x}_i)}(x_{kj}-\bar{x}_j)}{[\sum_{k=1}^m{(x_{ki}-\bar{x}_i)^2}\sum_{k=1}^m{(x_{kj}-\bar{x}_j)^2}]^{\frac{1}{2}}} rij=[k=1m(xkixˉi)2k=1m(xkjxˉj)2]21k=1m(xkixˉi)(xkjxˉj)
其中
x ˉ i = 1 m ∑ k = 1 m x k i , x ˉ j = 1 m ∑ k = 1 m x k j \bar{x}_i=\frac1m\sum_{k=1}^m{x_{ki}},\bar{x}_j=\frac1m\sum_{k=1}^m{x_{kj}} xˉi=m1k=1mxki,xˉj=m1k=1mxkj
或:
r i j = c o v ( x i , x j ) s t d ( x i ) ∗ s t d ( x j ) r_{ij}=\frac{cov(x_i,x_j)}{std(x_i) * std(x_j)} rij=std(xi)std(xj)cov(xi,xj)
其中
c o v ( x i , x j ) cov(x_i,x_j) cov(xi,xj)表示 x i x_i xi x j x_j xj的协方差, s t d ( x i ) std(x_i) std(xi) s t d ( x j ) std(x_j) std(xj)分别表示 x i x_i xi x j x_j xj的标准差。

四、集合相似度方法

这类方法主要用于比较集合之间的相似度。

Jaccard相似度(Jaccard Similarity):

主要用于计算集合之间的相似度。对于两个集合A和B,Jaccard相似度可以表示为:sim(A, B) = |A∩B| / |A∪B|,其中|A∩B|表示A和B的交集的元素个数,|A∪B|表示A和B的并集的元素个数。

  • 28
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值