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

代码

#coding:utf-8

import 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.0
for 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的score
for it in list:
diff_sum = 0.0
user_num = 0
for 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_num
mole += (list[it] + diff_avg) * user_num
demo += user_num #假设没有人评价过,则取这个人的平均分
if user_num == 0:
return getAvg(list) #否则返回终于的score
return mole / demo def 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. Mahout推荐算法之SlopOne

    Mahout推荐算法之SlopOne 一.       算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分.如下图,估计UserB对 ...

  2. Mahout推荐算法API详解

    转载自:http://blog.fens.me/mahout-recommendation-api/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...

  3. 【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)

    原书作者使用字典dict实现推荐算法,并且惊叹于18行代码实现了向量的余弦夹角公式. 我用pandas实现相同的公式只要3行. 特别说明:本篇笔记是针对矩阵数据,下篇笔记是针对条目数据. ''' 基于 ...

  4. FP-tree推荐算法

    推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这 ...

  5. apriori推荐算法

    大数据时代开始流行推荐算法,所以作者写了一篇教程来介绍apriori推荐算法. 推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐 ...

  6. 推荐算法——距离算法

    本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...

  7. 将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库

    本文内容 最近看<写给程序员的数据挖掘指南>,研究推荐算法,书中的测试数据集是 Book-Crossing Dataset 提供的亚马逊用户对书籍评分的真实数据.推荐大家看本书,写得不错, ...

  8. 美团网基于机器学习方法的POI品类推荐算法

    美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...

  9. Mahout推荐算法基础

    转载自(http://www.geek521.com/?p=1423) Mahout推荐算法分为以下几大类 GenericUserBasedRecommender 算法: 1.基于用户的相似度 2.相 ...

随机推荐

  1. SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里

    表一: SPRD PRD_NO      SPC 001                NULL 002               NULL 003               NULL ...   ...

  2. Linux Socket编程注意事项

    Socket API 是网络应用程序开发中实际应用的标准 API.虽然该 API 简单.可是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示怎样避免它们. 隐患 1.忽略返回状态 ...

  3. Android开发之style属性和提前定义样式

    摘要 Android平台定义的主题样式: android:theme="@android:style/Theme.Dialog" // 将一个Activity显示为对话框模式and ...

  4. schedule()函数的调用时机(周期性调度)

    今天纠正了一个由来已久的认识错误:一个进程的时间片用完之后,当再次发生时钟中断时内核会调用schedule()来进行调度,把当前的进程上下文切出CPU,并把选定的下一个进程切换进来运行.我一直以为sc ...

  5. 在Mybatis中使用注解@多个參数查询

    @Select("SELECT * FROM wc_homework WHERE organization_id=#{classId} ORDER BY createtime DESC LI ...

  6. HADOOP2.6

    LINUX下HADOOP2.6.0集群环境的搭建 本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 基础环境 JDK的安 ...

  7. hdu4283(区间dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4283 题意:有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边 ...

  8. 阿里云免费试用之体验——阿里云serverECS试用心得

    自上次參加了阿里云的开发人员大会回来 心里就一直惦记着阿里云 由于曾经各种各样什么的server也用了不少 年前開始接触阿里云 一直没有给予很多其它的关注 參加了这次的开发人员大会后 就想更进一步的了 ...

  9. 深入java并发Lock一

    java有像syncronized这种内置锁,但为什么还须要lock这种外置锁? 性能并非选择syncronized或者lock的原因,jdk6中syncronized的性能已经与lock相差不大. ...

  10. Java对Xml进行操作的实例(转)

    这是一个用JAVA W3C DOM 进行XML操作的例子,包含了查询.增加.修改.删除.保存的基本操作.较完整的描述了一个XML的整个操作流程.适合刚入门JAVA XML操作的朋友参考和学习. 假设有 ...