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 相关文章推荐
Python的函数嵌套的使用方法
Jan 24 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
python绘制简单彩虹图
Nov 19 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
php基础知识:函数基础知识
2006/12/13 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
Python抓取框架 Scrapy的架构
2016/08/12 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
小学生考试获奖感言
2014/01/30 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
爱心倡议书范文
2014/05/12 职场文书
护士求职信
2014/07/05 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
借钱欠条怎么写
2015/07/03 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python