Python用户推荐系统曼哈顿算法实现完整代码


Posted in Python onDecember 01, 2017

出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。

Python用户推荐系统曼哈顿算法实现完整代码

图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。曼哈顿距离示意图在早期的计算机图形学中,屏幕是由像素构成,是整数,点的坐标也一般是整数,原因是浮点运算很昂贵,很慢而且有误差,如果直接使用AB的欧氏距离(欧几里德距离:在二维和三维空间中的欧氏距离的就是两点之间的距离),则必须要进行浮点运算,如果使用AC和CB,则只要计算加减法即可,这就大大提高了运算速度,而且不管累计运算多少次,都不会有误差。

Python用户推荐系统曼哈顿算法实现

#-*- coding: utf-8 -*-
 
import codecs
from math import sqrt
 
users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slightly Stoopid": 1.5, "The Strokes": 2.5, "Vampire Weekend": 2.0},
     "Bill":{"Blues Traveler": 2.0, "Broken Bells": 3.5, "Deadmau5": 4.0, "Phoenix": 2.0, "Slightly Stoopid": 3.5, "Vampire Weekend": 3.0},
     "Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0, "Deadmau5": 1.0, "Norah Jones": 3.0, "Phoenix": 5, "Slightly Stoopid": 1.0},
     "Dan": {"Blues Traveler": 3.0, "Broken Bells": 4.0, "Deadmau5": 4.5, "Phoenix": 3.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 2.0},
     "Hailey": {"Broken Bells": 4.0, "Deadmau5": 1.0, "Norah Jones": 4.0, "The Strokes": 4.0, "Vampire Weekend": 1.0},
     "Jordyn": {"Broken Bells": 4.5, "Deadmau5": 4.0, "Norah Jones": 5.0, "Phoenix": 5.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 4.0},
     "Sam": {"Blues Traveler": 5.0, "Broken Bells": 2.0, "Norah Jones": 3.0, "Phoenix": 5.0, "Slightly Stoopid": 4.0, "The Strokes": 5.0},
     "Veronica": {"Blues Traveler": 3.0, "Norah Jones": 5.0, "Phoenix": 4.0, "Slightly Stoopid": 2.5, "The Strokes": 3.0}
    }
 
# Python计算曼哈顿距离 www.iplaypy.com
def manhattan(rate1,rate2):
  distance = 0
  commonRating = False
  for key in rate1:
    if key in rate2:
      distance+=abs(rate1[key]-rate2[key])
      commonRating=True
  if commonRating:
    return distance
  else:
    return -1
 
# python返回最近距离用户
def computeNearestNeighbor(username,users):
  distances = []
  for key in users:
    if key<>username:
      distance = manhattan(users[username],users[key])
      distances.append((distance,key)) 
  distances.sort()     
  return distances
 
#推荐python实现
def recommend(username,users):
  #获得最近用户的name
  nearest = computeNearestNeighbor(username,users)[0][1]
  recommendations =[]
  #得到最近用户的推荐列表
  neighborRatings = users[nearest]
  for key in neighborRatings:
    if not key in users[username]:
      recommendations.append((key,neighborRatings[key]))
  recommendations.sort(key=lambda rat:rat[1], reverse=True)
  return recommendations
 
   
if __name__ == '__main__':
  print recommend('Hailey', users)

总结

以上就是本文关于Python用户推荐系统曼哈顿算法实现完整代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Python入门之modf()方法的使用
May 15 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
Django2.1.3 中间件使用详解
Nov 26 Python
Django学习笔记之为Model添加Action
Apr 30 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 #Python
vscode 远程调试python的方法
Dec 01 #Python
Python中单、双下划线的区别总结
Dec 01 #Python
从CentOS安装完成到生成词云python的实例
Dec 01 #Python
Django的分页器实例(paginator)
Dec 01 #Python
浅谈python装饰器探究与参数的领取
Dec 01 #Python
Python简单读取json文件功能示例
Nov 30 #Python
You might like
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
资产经营总监岗位职责范文
2013/12/01 职场文书
母亲节演讲稿范文
2014/01/02 职场文书
新教师工作感言
2014/02/16 职场文书
努力学习演讲稿
2014/05/10 职场文书
求职信格式要求
2014/05/23 职场文书
运动会开幕词
2015/01/28 职场文书
法律讲堂观后感
2015/06/11 职场文书
学历证明范文
2015/06/16 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL