相似度计算是很多具体的应用了里面都会使用到的一些东西,我们学过的有很多相似度计算的方法,最初的相似度计算是为了表征向量的重合程度的,在这里最经典的就是余弦相似度了,当然使用正弦或者是正切等等三角函数也都是可以的,只不过余弦使用的更广泛一些所以提到三角函数计算向量相似度的时候大家往往都会使用余弦来作为相似度的计算工具。

可能最开始会觉得相似度计算没有什么,因为现在已经有很多应用于了实践的相似度计算方法,但是你可能不太了解很多任务里面的核心工作就是在进行相似度计算。比如文本情感分析、文本语义理解、商场系统里面的个性化推荐等等,相似度计算可以独立进行也可以是作为某一项具体任务里面的一部分进行,不同的业务场景里面会需要用到不同的相似度计算策略。比如:给定两个字符串,想要计算两个字符串之间的相似度,那么可能最好的相似度计算方法就会是字符串的编辑距离了;给定两个一维的向量数据,想要计算这一对向量之间的相似度,那么可能最直接的相似度计算策略就会是余弦相似度了;给定两个商品,以及商品各自的很多属性,或者是给定两个人以及每个人各自的性格、兴趣、爱好等等,想要来计算商品或者是人物之间的相似度那么可能最好的相似度计算方法就会是杰卡德相似系数了。因为Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具 体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。

类似上面的实例还会有很多,简单列举这些知识想说明:在不同的人物场景里面,为了完成特征的计算任务,我们选择的计算策略和方法往往都是不同的。

除此之外,还有距离计算方法可以用来计算相似度,比如:欧式距离、闵可夫斯基距离、切比雪夫距离等等,都是广泛用来计算相似度的工具,本文简单整理了一些统计学中常用的距离计算方法如下:

1、欧几里得距离(Eucledian Distance)
欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离。

2、曼哈顿距离(Manhattan Distance)
曼哈顿距离依赖坐标系统的转度,而非系统在坐标轴上的平移或映射,他是使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。

3.切比雪夫距离
在数学中,切比雪夫距离(Chebyshev distance)或是L∞度量,是向量空间中的一种度量,二个点之间的距离定义是其各坐标数值差绝对值的最大值。以数学的观点来看,切比雪夫距离是由一致范数(uniform norm)(或称为上确界范数)所衍生的度量,也是超凸度量(injective metric space)的一种。

4、明可夫斯基距离(Minkowski distance)
明氏距离是欧氏距离的推广。闵氏距离不是一种距离,而是一组距离的定义。闵氏距离的定义:两个n维变量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
其中p是一个变参数。
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离
根据变参数的不同,闵氏距离可以表示一类的距离。

处理上面列举的一些距离方法之外还有一种经典的距离计算方法叫做:编辑距离。编辑距离经常用于计算字符串之间的差异或者说是相似度,感兴趣的也可以去查一下相关的资料,这里就不再多解释了。

除此之外,还有统计学中的三大相关性系数:皮尔森系数、斯皮尔曼系数和肯德尔系数。这些都是可以直接拿来计算向量之间的相似度的。另外还可以使用集合来计算相似度,杰卡德系数就是这一方面的实例,两个集合的交集除以两个集合的并集来作为两个集合的相似度。

本文对常用的一些相似度计算方法进行总结实现,具体内容如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能:  相似度度量准则总结实现
'''import math
import numpy as np
from scipy.stats import pearsonr,spearmanr,kendalltauimport sys
reload(sys)
sys.setdefaultencoding('utf-8')def pearsonrSim(x,y):'''皮尔森相似度'''return pearsonr(x,y)[0]def spearmanrSim(x,y):'''斯皮尔曼相似度'''return spearmanr(x,y)[0]def kendalltauSim(x,y):'''肯德尔相似度'''return kendalltau(x,y)[0]def cosSim(x,y):'''余弦相似度计算方法'''tmp=sum(a*b for a,b in zip(x,y))non=np.linalg.norm(x)*np.linalg.norm(y)return round(tmp/float(non),3)def eculidDisSim(x,y):'''欧几里得相似度计算方法'''return math.sqrt(sum(pow(a-b,2) for a,b in zip(x,y)))def manhattanDisSim(x,y):'''曼哈顿距离计算方法'''return sum(abs(a-b) for a,b in zip(x,y))def minkowskiDisSim(x,y,p):'''明可夫斯基距离计算方法'''sumvalue=sum(pow(abs(a-b),p) for a,b in zip(x,y))tmp=1/float(p)return round(sumvalue**tmp,3)def MahalanobisDisSim(x,y):'''马氏距离计算方法'''npvec1,npvec2=np.array(x),np.array(y)npvec=np.array([npvec1, npvec2])sub=npvec.T[0]-npvec.T[1]inv_sub=np.linalg.inv(np.cov(npvec1, npvec2))return math.sqrt(np.dot(inv_sub, sub).dot(sub.T))def levenshteinDisSim(x,y):'''字符串编辑距离、相似度计算方法'''res=Levenshtein.distance(x,y)similarity=1-(res/max(len(x), len(y)))return similaritydef jaccardDisSim(x,y):'''杰卡德相似度计算'''res=len(set.intersection(*[set(x),set(y)]))union_cardinality=len(set.union(*[set(x),set(y)]))return res/float(union_cardinality)if __name__=='__main__':x=[1,2,3,4,5]y=[2,4,0,8,9]print 'pearsonrSim:',pearsonrSim(x,y)print 'spearmanrSim:',spearmanrSim(x,y)print 'kendalltauSim:',kendalltauSim(x,y)print 'cosSim:',cosSim(x,y)print 'eculidDisSim:',eculidDisSim(x,y)print 'manhattanDisSim:',manhattanDisSim(x,y)print 'minkowskiDisSim:',minkowskiDisSim(x,y,2)print 'MahalanobisDisSim:',MahalanobisDisSim(x,y)print 'jaccardDisSim:',jaccardDisSim(x,y)

结果如下:

pearsonrSim: 0.7397954428741078
spearmanrSim: 0.7
kendalltauSim: 0.6
cosSim: 0.913
eculidDisSim: 6.78232998313
manhattanDisSim: 14
minkowskiDisSim: 6.782
MahalanobisDisSim: 0.637157868392
jaccardDisSim: 0.25

记录一下!

python实现常用的相似度计算方法相关推荐

  1. NLP中常用的相似度计算方法

    文章目录 相似度计算方法 1. 文本距离 1.1 编辑距离(Edit Distance) 1.2 最长公共子串.最长公共子序列(Long Common Subsequence,LCS) 1.3 句向量 ...

  2. 常用的相似度计算方法原理及实现

    在数据分析和数据挖掘以及搜索引擎中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别.常见的比如数据分析中比如相关分析,数据挖掘中的分类聚类(K-Means等)算法,搜索引擎进行物品推荐时 ...

  3. jaccard相似度_推荐系统中常用计算相似度的方法和工具

    常用的相似度计算方法:(1)欧氏距离(2)余弦相似度 (3)皮尔逊相关系数 (4)修正余弦相似度(5)汉明距离 (6)曼哈顿距离 1.欧式距离:就是计算空间中两点的距离 def EuclideanDi ...

  4. python 文本相似度计算函数_一文讲述常见的文本相似度计算方法

    作者 | LU_ZHAO 责编 | 徐威龙 前言 在自然语言处理中,我们经常需要判定两个东西是否相似. 比如,在微博的热点话题推荐那里,我们需要比较微博之间的相似度,让相似度高的微博聚集在一起形成一个 ...

  5. 关于相似度计算方法的python实现

    关于相似度计算方法的python实现 参考 各种相似度计算的python实现 [KNN]基于numpy的曼哈顿距离实现 余弦距离介绍 欧氏距离,曼哈顿距离:计算两个向量间的相似程度,值越小,相似度越高 ...

  6. Python协同过滤推荐算法(Collaborative Filtering)2.相似度的计算,相似度计算方法

    1.数据分类 实物值(物品或者其他的评分) 布尔值(是或者否的行为),1,0这种布尔值,表肯定或者否定的行为 2.余弦相似度 度量的是两个向量之间的夹角,用夹角的余弦值来度量相似的情况 两个向量的夹角 ...

  7. python图像识别之图片相似度计算

    作者 | a1131825850疯子  来源 | Python爬虫scrapy 1.背景 要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等-对应的风景照是蓝天还是大海-做一系列 ...

  8. Python的常用包有哪些,分别有什么作用?

    [每日一问] Python的常用包有哪些,分别有什么作用? 来自Datawhale优秀回答者:追风者 Python常用包 1.Numpy(数值运算库) 2.Scipy(科学计算库) 3.Matplot ...

  9. Python自学——python的常用模块

    Python学习--python的常用模块 原文作者:佛山小程序员 原文链接:https://blog.csdn.net/weixin_44192923/article/details/8656325 ...

最新文章

  1. POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]
  2. Angular 中得 scope 作用域梳理
  3. C++ leetcode 面试题64. 求1+2+…+n
  4. 06_NoSQL数据库之Redis数据库:Redis的高级应用之登录授权和主从复制
  5. php判断是否为数字_PHP将英文数字转换为阿拉伯数字
  6. Mysql中Innodb大量插入数据时SQL语句的优化
  7. 阿里云再降价 数据库产品降20%
  8. 【J2SE】java实现简单照片查看器
  9. CODE[VS]1012 最大公约数和最小公倍数问题
  10. 基于python的在线考试系统-基于 Python 的电子教室和在线考试系统源代码
  11. iOS 解决报错 dyld: Library not loaded: @rpath/xxx.framework Reason: image not found
  12. JFlash软件解锁GD32MCU
  13. 商业计划书PPT模板
  14. 网络略谈(一).局域网游戏谈起红警尤里的复仇
  15. 浅谈软件测试测试策略几点总结内容
  16. ThinkPHP 笔记
  17. 画春天的景色计算机教案,幼儿园中班教案《画春天》含反思
  18. 网站权重优化?怎么优化网站权重?网站权重优化工具免费
  19. TCP连接建立/断开
  20. 基于小程序云开发的在线答题小程序源码含答题分类答题记录错题集适合学习适合毕业设计使用

热门文章

  1. appnode面板中php命令 appnode-php80换成php
  2. 转载--CST UTC CMT时间的区别和联系
  3. oracle如何取正负数,ORACLE 统计正负个数sql
  4. 算法的末日来了!阿里裁掉大量算法,数量远超其他岗位,因为算法拿着高薪,就知道调参发论文!...
  5. Excel复杂表头构建
  6. 5g的云计算机,三家运营商怎样看待云计算和5G的关系?
  7. Mac OS X 10.4.7 DMG 文件如何转化成ISO文件
  8. 【黑马程序员C++ STL】学习记录
  9. 计算机的kb代表着什么,计算机中KB与Kb的技术差别详解
  10. 如何修复硬盘坏道(360)