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 相关文章推荐
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
使用Python制作获取网站目录的图形化程序
May 04 Python
Python使用pymysql小技巧
Jun 04 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
Symfony控制层深入详解
2016/03/17 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
python正则表达式中的括号匹配问题
2014/12/14 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
css3中transition属性详解
2014/09/02 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
参观接待方案
2014/03/17 职场文书
业务内勤岗位职责
2014/04/30 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
2014年技术部工作总结
2014/12/12 职场文书
感恩父母主题班会
2015/08/12 职场文书
《大禹治水》教学反思
2016/02/22 职场文书