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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
Django中对数据查询结果进行排序的方法
Jul 17 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
Jun 04 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
pandas值替换方法
Jul 10 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Python上下文管理器用法及实例解析
Nov 11 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 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
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python3中property使用方法详解
2019/04/23 Python
python3 mmh3安装及使用方法
2019/10/09 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
python实现人机猜拳小游戏
2020/02/03 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
给女朋友的道歉信
2014/01/10 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
面试通知短信
2015/04/20 职场文书
宝宝满月祝酒词
2015/08/10 职场文书