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

简介: 五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离
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)


相关文章
|
1月前
|
机器学习/深度学习 算法 前端开发
公交站间的距离
公交站间的距离
29 0
二维平面的欧几里得距离
二维平面的欧几里得距离
|
1月前
|
存储 C++ 容器
[C++] 点到直线的最大、最小距离
[C++] 点到直线的最大、最小距离
43 0
|
10月前
|
机器学习/深度学习 算法 Python
欧几里得距离(Euclidean distance)
欧几里得距离(Euclidean distance)是在数学中常用于衡量两个点之间的距离的一种方法。它在几何学和机器学习等领域都有广泛的应用。欧几里得距离基于两点之间的直线距离,可以看作是在一个多维空间中测量两个点之间的直线距离。
434 1
|
9月前
|
算法 Perl
豪斯多夫(Hausdorff)距离
豪斯多夫距离量度度量空间中真子集之间的距离。Hausdorff距离是另一种可以应用在边缘匹配算法的距离,它能够解决SED方法不能解决遮挡的问题。
388 0
|
机器学习/深度学习 搜索推荐 数据挖掘
常见的几种距离量度(欧式距离、曼哈顿距离、切比雪夫距离等)
在机器学习和数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离。本文介绍几种常用的距离量度方法。
480 0
|
编译器 C语言 C++
移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
126 1
移动距离
|
人工智能 BI
余弦距离和欧氏距离,知道原理和公式后真的很简单
余弦距离和欧氏距离,知道原理和公式后真的很简单
515 0
余弦距离和欧氏距离,知道原理和公式后真的很简单
|
算法
曼哈顿距离和欧式距离
曼哈顿距离和欧式距离
465 0
曼哈顿距离和欧式距离