Python用户推荐系统minkowski算法的实现

#-*- coding: utf-8 -*-

'''

python: www.iplaypy.com

@author: Jekey

欧几里得距离

如果数据很稠密,使用该算法较好

'''

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}

}

#Minkowski 距离

def minkowski(rate1,rate2,r):

distance = 0

commonRating = False

for key in rate1:

if key in rate2:

distance+=pow(abs(rate1[key]-rate2[key]),r)

commonRating=True

if commonRating:

return pow(distance,1/r)

else:

return -1

#返回最近距离用户

def computeNearestNeighbor(username,users):

distances = []

for key in users:

if key<>username:

distance = minkowski(users[username],users[key],2)

distances.append((distance,key))

distances.sort()

return distances

#推荐

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)

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/algorithm/a2064.html

相关文章 Recommend

python 推荐系统算法,Python用户推荐系统minkowski算法的实现相关推荐

  1. 基于Python机器学习算法的电影推荐系统以及票房预测系统

    电影数据分析 目录 电影数据分析 1 一..实验概述 1 1.1 实验标 1 1.2 .实验完成情况 1 二..电影特征的可视化分析 2 电影票房预测 9 2.1 Data Augmentation ...

  2. python编程顺序_Python编程中归并排序算法的实现步骤详解

    基本思想:归并排序是一种典型的分治思想,把一个无序列表一分为二,对每个子序列再一分为二,继续下去,直到无法再进行划分为止.然后,就开始合并的过程,对每个子序列和另外一个子序列的元素进行比较,依次把小元 ...

  3. python实现mini-batch_Mini-Batch 、Momentum、Adam算法的实现

    def random_mini_batches(X,Y,mini_batch_size=64,seed=0):"""从(X,Y)中创建一个随机的mini-batch列表 ...

  4. python素数算法,Python中的AKS素数算法

    是的,去看看rosettacode.org上的AKS test for primes页面def expand_x_1(p): ex = [1] for i in range(p): ex.append ...

  5. C语言雪花算法,记一次雪花算法的实现

    作者最近在实现雪花算法生成主键,看了不少文章.个人觉得雪花算法的最大的优点是有序(减少数据库的页分裂页合并).雪花算法本身很简单,但他依赖于时间,也就是机器或容器的时间一回拨就出现问题了.网上也出现了 ...

  6. 银行家算法中安全性检查子算法的实现

    实验内容: 编程实现银行家算法中的安全性检查子算法,要求: (1) 本程序要能描述 n 个并发进程共享 m 类资源,在某一时刻的资源分配状态: n.m 自定,但都不能小于 3: (2) 本程序功能: ...

  7. 关于近邻保持算法LLE,LPP,NPE等算法的实现---流行学习

    需要注意的是: 1.在基于流行学习的方法中,所谓的M=(I-W)*(I-W)'中的I是单位矩阵.而不是1 2.对于图W,我们将系数按照一列一列的形式放,并且,Sw = Train_Ma*Mg*Trai ...

  8. 粒子群算法(8)---混合粒子群算法的实现

    混合粒子群算法将全局粒子群算法与局部粒子群算法结合,其速度更新采用公式 其中G(k+1)是全局版本的速度更新公式,而L(k+1)是局部版本的速度更新公式,混合粒子群算法采用H(k+1)的公式. 位置更 ...

  9. c语言kmp算法代码,C语言KMP算法的实现

    KMP算法在模式与主串之间存在许多"部分匹配"的情况下,比BF算法快.(注意,接下来的串都是以下标为1作为起始储存位置.) 下面说一下实现代码: 首先是预定义和类型定义: #def ...

最新文章

  1. Delphi 与 C/C++ 数据类型对照表
  2. 13.2.2 路由层——URL控制器
  3. Ninject依赖注入(一)
  4. js html 转换为富文本,如何将富文本得到的html转换为pdf?
  5. 这个工具可以组合参数画出2种单细胞Marker显示图
  6. HUE与HBase的集成
  7. html5 跳转参数不显示_TeeChart for PHP教程(十二):Javascript / HTML5图表
  8. MultipartFile接口实现文件上传
  9. php 验证是否是xml,php判断str字符串是否是xml格式数据
  10. LayaAir UI 组件 # Button 按钮
  11. Nginx从入门到入坟(九)- Nginx静态资源如何防盗链
  12. 曲奇云盘资源搜索引擎_曲奇云盘下载-曲奇云盘资源共享群组下载_快啦网
  13. 基于C#的在线语音识别软件开发
  14. gimp 抠图_自动抠图工具,不用懂PS,还可以批量抠图
  15. MATLAB图像形状识别
  16. win11u盘无法弹出怎么办?win11u盘老是被占用不能退出?
  17. 如何查看ftp服务器信息,如何查看FTP空间使用了多少?
  18. 实现网站的高并发访问
  19. 数字电路基础知识——反相器的相关知识(噪声容限、VTC、转换时间、速度的影响因素、传播延时等)
  20. 2019计算机应用基础平时作业答案,2019年计算机应用基础作业一答案.docx

热门文章

  1. 攻防世界--MISC题之掀桌子
  2. 光伏并网发电系统MATLAB Simulink仿真设计。 该仿真包括电池,BOOST升压电路,单相全桥逆变电路
  3. 摒弃单一变现手段,开拓多元商业模式,破解场景单一APP盈利难题!
  4. 高速多通道误码测试仪BERT
  5. javafx 报错javafx.fxml.LoadException:和Caused by: java.lang.NullPointerException
  6. Tushare数据库公司基本面信息获取
  7. 这10 个工具,让你效率提升
  8. Emoji表情转换工具类
  9. 适用于快递物流行业的呼叫中心系统方案
  10. 现在国内IT行业是不是程序员过多了?