五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离

简介: 五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离
from math import*
from decimal import Decimal
 
class Similarity():
 
    """ Five similarity measures function """
 
  def euclidean_distance(self,x,y):
  # 欧式距离
   
          """ return euclidean distance between two lists """
   
          return sqrt(sum(pow(a-b,2) for a, b in zip(x, y)))
   
  def manhattan_distance(self,x,y):
  # 曼哈顿距离
   
          """ return manhattan distance between two lists """
   
          return sum(abs(a-b) for a,b in zip(x,y))
   
  def minkowski_distance(self,x,y,p_value):
  # 闵可夫斯基距离
   
          """ return minkowski distance between two lists """
   
          return self.nth_root(sum(pow(abs(a-b),p_value) for a,b in zip(x, y)),
             p_value)
   
  def nth_root(self,value, n_root):
  # 开n次方
   
          """ returns the n_root of an value """
   
          root_value = 1/float(n_root)
          return round (Decimal(value) ** Decimal(root_value),3)
   
  def cosine_similarity(self,x,y):
  # 余弦相似度
   
          """ return cosine similarity between two lists """
   
          numerator = sum(a*b for a,b in zip(x,y))
          denominator = self.square_rooted(x)*self.square_rooted(y)
          return round(numerator/float(denominator),3)
   
  def square_rooted(self,x):
  # 平方根距离
   
          """ return 3 rounded square rooted value """
   
          return round(sqrt(sum([a*a for a in x])),3)
   
  def jaccard_similarity(self,x,y):
  # 杰卡德距离
   
      """ returns the jaccard similarity between two lists """
   
          intersection_cardinality = len(set.intersection(*[set(x), set(y)]))
          union_cardinality = len(set.union(*[set(x), set(y)]))
          return intersection_cardinality/float(union_cardinality)


目录
打赏
0
0
0
0
127
分享
相关文章
海明距离(Hamming Distance)
海明距离(Hamming Distance)是用来衡量两个二进制数之间差异程度的指标,它表示两个二进制数之间最多有多少个比特的差异。海明距离可以用于衡量数据传输或存储中的错误率,以及检测噪声干扰。 海明距离的计算方法是:对于两个 n 位二进制数,将它们进行逐位比较,如果对应位上的数字不同,则计算距离时增加 1。然后将所有位上的距离加在一起,得到海明距离。
2043 1
|
5月前
acwing 173 矩阵距离
acwing 173 矩阵距离
30 0
|
10月前
|
欧几里得
欧几里得
85 4
|
10月前
二维平面的欧几里得距离
二维平面的欧几里得距离
欧几里得距离(Euclidean distance)
欧几里得距离(Euclidean distance)是在数学中常用于衡量两个点之间的距离的一种方法。它在几何学和机器学习等领域都有广泛的应用。欧几里得距离基于两点之间的直线距离,可以看作是在一个多维空间中测量两个点之间的直线距离。
892 1
豪斯多夫(Hausdorff)距离
豪斯多夫距离量度度量空间中真子集之间的距离。Hausdorff距离是另一种可以应用在边缘匹配算法的距离,它能够解决SED方法不能解决遮挡的问题。
721 0
常见的几种距离量度(欧式距离、曼哈顿距离、切比雪夫距离等)
在机器学习和数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离。本文介绍几种常用的距离量度方法。
1260 0
移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
177 1
移动距离