前言

在机器学习中有很多地方要计算相似度,比如聚类分析和协同过滤。计算相似度的有许多方法,其中有欧几里德距离(欧式距离)、曼哈顿距离、Jaccard系数和皮尔逊相关度等等。我们这里把一些常用的相似度计算方法,用python进行实现以下。大家都是初学者,我认为把公式先写下来,然后再写代码去实现比较好。

欧几里德距离(欧式距离)

几个数据集之间的相似度一般是基于每对对象间的距离计算。最常用的当然是欧几里德距离,其公式为:#-*-coding:utf-8 -*-

#计算欧几里德距离:

def euclidean(p,q):

#如果两数据集数目不同,计算两者之间都对应有的数

same = 0

for i in p:

if i in q:

same +=1

#计算欧几里德距离,并将其标准化

e = sum([(p[i] - q[i])**2 for i in range(same)])

return 1/(1+e**.5)

我们用数据集可以去算一下:p = [1,3,2,3,4,3]

q = [1,3,4,3,2,3,4,3]

print euclidean(p,q)

得出结果是:0.261203874964

皮尔逊相关度

几个数据集中出现异常值的时候,欧几里德距离就不如皮尔逊相关度‘稳定’,它会在出现偏差时倾向于给出更好的结果。其公式为:-*-coding:utf-8 -*-

#计算皮尔逊相关度:

def pearson(p,q):

#只计算两者共同有的

same = 0

for i in p:

if i in q:

same +=1

n = same

#分别求p,q的和

sumx = sum([p[i] for i in range(n)])

sumy = sum([q[i] for i in range(n)])

#分别求出p,q的平方和

sumxsq = sum([p[i]**2 for i in range(n)])

sumysq = sum([q[i]**2 for i in range(n)])

#求出p,q的乘积和

sumxy = sum([p[i]*q[i] for i in range(n)])

# print sumxy

#求出pearson相关系数

up = sumxy - sumx*sumy/n

down = ((sumxsq - pow(sumxsq,2)/n)*(sumysq - pow(sumysq,2)/n))**.5

#若down为零则不能计算,return 0

if down == 0 :return 0

r = up/down

return r

用同样的数据集去计算:p = [1,3,2,3,4,3]

q = [1,3,4,3,2,3,4,3]

print pearson(p,q)

得出结果是:0.00595238095238

曼哈顿距离

曼哈顿距离是另一种相似度计算方法,不是经常需要,但是我们仍然学会如何用python去实现,其公式为:#-*-coding:utf-8 -*-

#计算曼哈顿距离:

def manhattan(p,q):

#只计算两者共同有的

same = 0

for i in p:

if i in q:

same += 1

#计算曼哈顿距离

n = same

vals = range(n)

distance = sum(abs(p[i] - q[i]) for i in vals)

return distance

用以上的数据集去计算:p = [1,3,2,3,4,3]

q = [1,3,4,3,2,3,4,3]

print manhattan(p,q)

得出结果为4

小结

这里只讲述了三种相似度的计算方法,事实上还有很多种,由于我也是刚学,其他的方法还不是很了解,以后碰到了再补上。一般情况下,这三种方法是最常用的,足够我们使用了。

python 拼音相似度_多种相似度计算的python实现相关推荐

  1. python求反余弦_余弦相似度计算公式:python代码找出相似文章

    余弦相似度计算公式:python代码找出相似文章 用TF-IDF算法可以自动提取关键词.除了找到关键词,怎么找到与原文章相似的其他文章.比如,"百科TA说"在词条最下方,还提供多条 ...

  2. 利用python 对比相似度_牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息...

    前言 在有一些电影里面,特别是科幻高科技电影里面经常出现的一幕,获得某人的照片然后进行各种数据对比,然后找出这个人的个人信息:姓名.年龄.性别.工作等等. 理论上:你可以建立一个你感兴趣的百万级的数据 ...

  3. java 圈复杂度_圈复杂度和代码质量优化(附带示例代码纠正代码质量)

    什么是圈复杂度? --------------------------------------- 圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施.它根据程序从 ...

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

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

  5. python 拼音姓名排序_实用小技巧,Python一秒将全部中文姓名转为拼音!

    有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三种Python实现的方法,最后给一个批量操作的代码案例! 一.xpinyin 开门见山,Python中文字转拼音可 ...

  6. python接口测试覆盖率统计_从 jacoco 报告数据分析,python 脚本实现增量覆盖率统计...

    jacoco的增量覆盖率报告实现的逻辑和一些个人想法. jacoco报告分析 从jacococli.jar的使用方法可以看到,导出的文件格式有csv,xml,html等多种格式. 进行尝试后,可以看到 ...

  7. numpy是python标准库吗_吐血 整理!140种Python标准库、第三方库和外部工具都有了...

    Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连接.数 ...

  8. python释放变量内存_看完2019年阿里巴巴Python面试题详解,月薪3万不是梦

    很多人想自学Python找工作,下面给大家分享一部分阿里巴巴的Python开发工程师的面试题目: 概念理解类题目: 1.请说一下你对迭代器和生成器的区别? 答:(1)迭代器是一个更抽象的概念,任何对象 ...

  9. python作者龟叔_龟叔和他的Python

    经过了漫长的旅程,终于要看到主角Python了.Python是现在非常非常流行的编程语言,在我们能看到的大部分编程语言排行榜中,Python都能在前三甲中拥有一席之地 ,并且发展势头非常之猛,可以这么 ...

最新文章

  1. 「NLP-语义匹配」详解深度语义匹配模型DSSM
  2. 13.13通过代码创建数据库和表
  3. struts 普通的action
  4. java strategy模式,Java Strategy 模式简介
  5. 成大事必备的9种心态
  6. PAT_B_1003_Java(20分)
  7. 算法-找出最近点对问题
  8. java8 camel_Meet Fabric8:基于Camel和ActiveMQ的开源集成平台
  9. Nuxt --- 也来说说vue服务端渲染
  10. widget 工具 widget tools (add this , share this, jia this)
  11. Eclipse 下用Maven构建ssh框架web工程
  12. php网站建设步骤,「php环境搭建」简单6个步骤教会你快速搭建一个网站(windows环境) - seo实验室...
  13. 国务院关于取消一批职业资格许可和认定事项的决定国发〔2016〕5号
  14. 几款优秀的Windows密码抓取工具
  15. [linux内核] 3.系统调用处理过程
  16. 群晖(synology)日历与IPhone日历同步
  17. 网络安全等保/安全合规总结
  18. excel相乘再相加_excel现乘积再求和如何自动生成
  19. 美国诚实签经验——回答签证官的问题时,一定要问什么才答什么,不要犹豫改口、做很多解释或开玩笑,自信且镇静地与他对话,着装得体、举止自然、言谈自信...
  20. UE5 WebUI 5.0.1插件下载

热门文章

  1. 软件测试用例设计之Pairwise算法
  2. Verilog编程之乘法器的实现
  3. C语言经典练习题(2)——“冒泡排序(Bubble Sort)“
  4. 程序员的算法课(6)-最长公共子序列(LCS)
  5. Photoshop调出清晰的阴雨天气山水风景照
  6. 时序预测 | MATLAB实现BiLSTM时间序列未来多步预测
  7. windox连接电子秤通过COM口获取数据(java)
  8. PC - Chrome 浏览器如何开启无痕模式?
  9. linux python 路径获取
  10. Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择