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 相关文章推荐
深入理解Javascript中的this关键字
Mar 27 Python
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
初步解析Python下的多进程编程
Apr 28 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
使用python远程操作linux过程解析
Dec 04 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
Python中lru_cache的使用和实现详解
Jan 25 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
20个最新的jQuery插件
2012/01/13 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
会计电算化应届生求职信
2013/11/03 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
应用外语系自荐信
2014/06/26 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
领导干部失职检讨书
2015/05/05 职场文书
升学宴来宾致辞
2015/07/27 职场文书
在Django中使用MQTT的方法
2021/05/10 Python