1. #定义几种距离计算函数
  2. #更高效的方式为把得分向量化之后使用scipy中定义的distance方法
  3.  
  4. from math import sqrt
  5. def euclidean_dis(rating1, rating2): #欧式距离计算
  6. """计算2个打分序列间的欧式距离. 输入的rating1和rating2都是打分dict
  7. 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
  8. distance = 0
  9. commonRatings = False
  10. for key in rating1:
  11. if key in rating2:
  12. distance += (rating1[key] - rating2[key])^2
  13. commonRatings = True
  14. #两个打分序列之间有公共打分电影
  15. if commonRatings:
  16. return distance
  17. #无公共打分电影
  18. else:
  19. return -1
  20.  
  21. def manhattan_dis(rating1, rating2): #曼哈顿距离计算
  22. """计算2个打分序列间的曼哈顿距离. 输入的rating1和rating2都是打分dict
  23. 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
  24. distance = 0
  25. commonRatings = False
  26. for key in rating1:
  27. if key in rating2:
  28. distance += abs(rating1[key] - rating2[key])
  29. commonRatings = True
  30. #两个打分序列之间有公共打分电影
  31. if commonRatings:
  32. return distance
  33. #无公共打分电影
  34. else:
  35. return -1
  36.  
  37. def cos_dis(rating1, rating2): #余弦相似度计算
  38. """计算2个打分序列间的cos距离. 输入的rating1和rating2都是打分dict
  39. 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
  40. distance = 0
  41. dot_product_1 = 0
  42. dot_product_2 = 0
  43. commonRatings = False
  44.  
  45. for score in rating1.values():
  46. dot_product_1 += score^2
  47. for score in rating2.values():
  48. dot_product_2 += score^2
  49.  
  50. for key in rating1:
  51. if key in rating2:
  52. distance += rating1[key] * rating2[key]
  53. commonRatings = True
  54. #两个打分序列之间有公共打分电影
  55. if commonRatings:
  56. return 1-distance/sqrt(dot_product_1*dot_product_2)
  57. #无公共打分电影
  58. else:
  59. return -1
  60.  
  61. def pearson_dis(rating1, rating2): #皮尔逊相似度计算
  62. """计算2个打分序列间的pearson距离. 输入的rating1和rating2都是打分dict
  63. 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
  64. sum_xy = 0
  65. sum_x = 0
  66. sum_y = 0
  67. sum_x2 = 0
  68. sum_y2 = 0
  69. n = 0
  70. for key in rating1:
  71. if key in rating2:
  72. n += 1
  73. x = rating1[key]
  74. y = rating2[key]
  75. sum_xy += x * y
  76. sum_x += x
  77. sum_y += y
  78. sum_x2 += pow(x, 2)
  79. sum_y2 += pow(y, 2)
  80. # now compute denominator
  81. denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n)
  82. if denominator == 0:
  83. return 0
  84. else:
  85. return (sum_xy - (sum_x * sum_y) / n) / denominator

相似度与距离计算python代码实现的更多相关文章

  1. 计算Python代码运行时间长度方法

    在代码中有时要计算某部分代码运行时间,便于分析. import time start = time.clock() run_function() end = time.clock() print st ...

  2. 皮尔逊相关系数的计算(python代码版)

    from math import sqrt def multipl(a,b): sumofab=0.0 for i in range(len(a)): temp=a[i]*b[i] sumofab+= ...

  3. 余弦相似性计算及python代码实现

    A:西米喜欢健身 B:超超不爱健身,喜欢打游戏 step1:分词 A:西米/喜欢/健身 B:超超/不/喜欢/健身,喜欢/打/游戏 step2:列出两个句子的并集 西米/喜欢/健身/超超/不/打/游戏 ...

  4. 10行Python代码计算汽车数量

    当你还是个孩子坐车旅行的时候,你玩过数经过的汽车的数目的游戏吗? 在这篇文章中,我将教你如何使用10行Python代码构建自己的汽车计数程序. 以下是环境及相应的版本库: Python版本 3.6.9 ...

  5. 【Python学习】指定两点地理位置经纬度的距离计算

    指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...

  6. Python地理位置信息库geopy的使用(二):根据中心点坐标,方向,距离计算坐标

    上一篇文章我们介绍了geopy的基本使用,这一篇文章我们根据中心点坐标,方向,距中心点距离计算出对应的坐标点,这种用法官网并没有给出详细的文档,我们这里做一下说明 生成坐标点的具体方法 import ...

  7. 机器学习中常用的距离及其python实现

    1 概述 两个向量之间的距离(此时向量作为n维坐标系中的点)计算,在数学上称为向量的距离(Distance),也称为样本之间的相似性度量(Similarity Measurement).它反映为某类事 ...

  8. 【路径规划】 Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame (附python代码实例)

    参考与前言 2010年,论文 Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame 地址:https ...

  9. [转] Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

随机推荐

  1. redis 五大数据类型之hash篇

    1.hset/hget/hmset/hmget/hgetall/hdel --hgetall 是以截图中 key-value 分别一一显示出来,k1对应v1 ,k2对应v2 2.hlen 3.hexi ...

  2. Sass 混合宏、继承、占位符 详解

    混合宏-声明混合宏如果你的整个网站中有几处小样式类似,比如颜色,字体等,在 Sass 可以使用变量来统一处理,那么这种选择还是不错的.但当你的样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无 ...

  3. 自动化测试-20.selenium之FireFox下载项配置

    前言: 当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置 ...

  4. 【Python】基础练习题-1

    #练习1:从键盘输入两个数,并比较其大小,直到输入e/E退出程序 while 1: input_number=raw_inut("please input two numbers,enter ...

  5. asp.net 后台执行js

    1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("XXX ...

  6. 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)

    题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...

  7. python开发day02

    一 while循环 while 条件 代码块(循环体)  #:  判断条件是否为真,如果是真,则执行代码块, 然后再次回头判断条件是否为真,如果为真,则只执行代码块.......知道循环的判断出代码为 ...

  8. wireshark显示过滤器的几种用法(转自他人博客)

    本文章转自:http://blog.51cto.com/houm01/1872652 几种条件操作符 ==   eq    等于    ip.addr == 192.168.0.1   ip.addr ...

  9. 聊聊 CAS

    哥有故事,你有酒,长夜漫漫,听我给你说. 参考资源: https://blog.csdn.net/hsuxu/article/details/9467651 1.概述 CAS,compare and ...

  10. ApplicationContext之getBean方法详解

    转自:http://www.sohu.com/a/115194552_466964 我们知道可以通过ApplicationContext的getBean方法来获取Spring容器中已初始化的bean. ...