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使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Python计时相关操作详解【time,datetime】
May 26 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
Python通用循环的构造方法实例分析
Dec 19 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
Jupyter Notebook 安装配置与使用详解
Jan 06 Python
Pytest allure 命令行参数的使用
Apr 18 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小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
html读出文本文件内容
2007/01/22 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python3实现字符串操作的实例代码
2019/04/16 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
python编写计算器功能
2019/10/25 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
祖国在我心中演讲稿
2014/01/15 职场文书
中考标语大全
2014/06/05 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
房地产端午节活动方案
2014/08/24 职场文书
热血教师观后感
2015/06/10 职场文书