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函数嵌套实例
Sep 23 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
详解python时间模块中的datetime模块
Jan 13 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
Python之reload流程实例代码解析
Jan 29 Python
实例讲解Python爬取网页数据
Jul 08 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
Python基于pandas爬取网页表格数据
May 11 Python
方法汇总:Python 安装第三方库常用
Apr 26 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后门代码解析
2014/07/05 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
PHP实现简易图形计算器
2020/08/28 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python如何保存文本文件
2020/06/07 Python
python计算auc的方法
2020/09/09 Python
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
毕业自我评价范文
2013/11/17 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
周一问候语大全
2015/11/10 职场文书
小学班主任研修日志
2015/11/13 职场文书
销售口号霸气押韵
2015/12/24 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS