开源框架taste中有SlopOne的Java实现,效果不错。使用movielens的数据,代码如下

代码

#coding:utf-8import re
import math#读取数据,并生成矩阵
def getMatrix():mat = {}f = open("u.data", "r")for line in f:list = map(int, line.strip("\n").split("\t"))if list[0] in mat:mat[ list[0] ][ list[1] ] = list[2]else:mat[ list[0] ] = { list[1] : list[2] }f.close()return mat#计算某个用户的平均分
def getAvg(usr):res = 0.0for i in usr:res += usr[i]return res / len(usr)#预测分数, 返回矩阵mat中用户usr对item的评分
def getSlopOne(mat, user, item):#用户user的所有item的列表list = mat[user]#分子mole = 0.0#分母demo = 0.0#对于每一个物品,都计算它和物品item的差值,最终算出相对它item的scorefor it in list:diff_sum = 0.0user_num = 0for us in mat:us_it = mat[us]#如果该user同时评价过这两个item,则采纳他的评分if item in us_it and it in us_it:diff_sum += us_it[item] - us_it[it]user_num += 1#如果item被人评价过if user_num:diff_avg = diff_sum / user_nummole += (list[it] + diff_avg) * user_numdemo += user_num#如果没有人评价过,则取这个人的平均分if user_num == 0:return getAvg(list)#否则返回最终的scorereturn mole / demodef main():mat = getMatrix()rf = open("u.data", "r")wf = open("o.data", "w")for line in rf:list = map(int, line.strip("\n").split("\t"))score = getSlopOne(mat, list[0], list[1])output = str(list[0]) + "\t" + str(list[1]) + "\t" + str(list[2]) + "\t" + str(score) + "\n"wf.write(output)rf.close()wf.close()if __name__ == "__main__":main()


SlopOne推荐算法相关推荐

  1. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  2. 推荐算法工程师的成长之道

    作者 | gongyouliu 来源 | 大数据与人工智能(ID: ai-big-data) 本文,作者会基于自己的实践经验讲述推荐算法工程师的成长之道,这里的"道"有发展路径和道 ...

  3. 论文解读 | 微信看一看实时Look-alike推荐算法

    作者丨gongyouliu 编辑丨lily 来源 | 授权转载自大数据与人工智能(ID:ai-big-data) 微信看一看的精选文章推荐(见下面图1)大家应该都用过,微信团队在今年发表了一篇文章来专 ...

  4. 从原理到实现,详解基于朴素ML思想的协同过滤推荐算法

    作者丨gongyouliu 编辑丨Zandy 来源 | 大数据与人工智能(ID: ai-big-data) 作者在<协同过滤推荐算法>.<矩阵分解推荐算法>这两篇文章中介绍了几 ...

  5. 从原理到落地,七大维度详解矩阵分解推荐算法

    作者 | gongyouliu 编辑丨Zandy 来源 |  大数据与人工智能 ( ID: ai-big-data) 导语:作者在<协同过滤推荐算法>这篇文章中介绍了 user-based ...

  6. 从原理到落地,七大维度读懂协同过滤推荐算法

    作者丨gongyouliu 来源 | 大数据与人工智能 导语:本文会从协同过滤思想简介.协同过滤算法原理介绍.离线协同过滤算法的工程实现.近实时协同过滤算法的工程实现.协同过滤算法应用场景.协同过滤算 ...

  7. 一文全面了解基于内容的推荐算法

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) 这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文 ...

  8. 集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star...

     [AI科技大本营导读]在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了.LibRec 是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测 ...

  9. 都是推荐系统,广告算法和推荐算法有啥区别?

    Datawhale干货 作者:知乎King James,伦敦国王大学 导读:广告和推荐算法的技术框架比较相似,却在很多公司中分属两个团队,两者的区别在哪里?这里从两者在实际业务中运用的角度,聊聊它们的 ...

最新文章

  1. eureka源码:开启服务注册
  2. sc openscmanager 失败 5 mysql_如何增加windows服务
  3. 判读一个对象不为空_ArrayList实现分析(一)——对象创建
  4. hasp 加密 java_加密软件HASP的使用说明
  5. c语言提高,C语言提高-day2
  6. full join 和full outer join_28.MySQL中的左(右)外连接 LEFT(RIGHT) [OUTER] JOIN
  7. 机器学习代码实战——朴素贝叶斯(实现垃圾邮件分类)
  8. [Ubuntu]在Ubuntu系统下连接远程Ubuntu服务器并传输文件:安装putty, filezilla
  9. 通达信主力强势上涨预警副图指标公式(源码)
  10. 如何屏蔽百度搜索热点
  11. html鼠标移除事件监听,Javascript:DOM事件(监听鼠标点击/释放,鼠标悬停/离开等)...
  12. Go学习笔记 -- 异常处理
  13. 计算机维修中的五大基本原则(思路)
  14. echarts 数据区域缩放
  15. Fractal Streets
  16. 截至2022.2.1全网最全面最开放的蓝牙AOA高精度定位行业生态解决方案配套产品及商用案例真实视频合集分享来自深圳核芯物联科技
  17. ucla 计算机网络,2020年UCLA计算机工程排名珍贵干货专业讲解
  18. 开价20w美元,这家公司想买下你的脸!不限性别年龄,预计2023年投入机器人使用...
  19. NYOJ 1239 引水工程【prim算法】
  20. 【墨者学院】WebShell文件上传漏洞分析溯源(第3题)

热门文章

  1. MyBatis 架构分层与模块划分-核心处理层
  2. 注解方式使用 Redis 缓存
  3. 包含用法 includeFilters
  4. SpringBoot profile配置
  5. oracle xdb插件报错,注册XML Schema到ORACLE XDB并对XML进行验证
  6. Spring Boot Transaction 源码解析(二)
  7. mongodb语法与spring实现
  8. JDK1.8并发包中的类
  9. MAX13085E/MAX485 _中文翻译
  10. linux-Centos7安装python3并与python2共存