SlopOne推荐算法
在开源框架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推荐算法的更多相关文章
- Mahout推荐算法之SlopOne
Mahout推荐算法之SlopOne 一. 算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分.如下图,估计UserB对 ...
- Mahout推荐算法API详解
转载自:http://blog.fens.me/mahout-recommendation-api/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...
- 【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)
原书作者使用字典dict实现推荐算法,并且惊叹于18行代码实现了向量的余弦夹角公式. 我用pandas实现相同的公式只要3行. 特别说明:本篇笔记是针对矩阵数据,下篇笔记是针对条目数据. ''' 基于 ...
- FP-tree推荐算法
推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这 ...
- apriori推荐算法
大数据时代开始流行推荐算法,所以作者写了一篇教程来介绍apriori推荐算法. 推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐 ...
- 推荐算法——距离算法
本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...
- 将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库
本文内容 最近看<写给程序员的数据挖掘指南>,研究推荐算法,书中的测试数据集是 Book-Crossing Dataset 提供的亚马逊用户对书籍评分的真实数据.推荐大家看本书,写得不错, ...
- 美团网基于机器学习方法的POI品类推荐算法
美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...
- Mahout推荐算法基础
转载自(http://www.geek521.com/?p=1423) Mahout推荐算法分为以下几大类 GenericUserBasedRecommender 算法: 1.基于用户的相似度 2.相 ...
随机推荐
- hdu2066一个人的旅行
枚举全部相邻城市,作为起点,多次spfa,然后每次在想去的城市中找出spfa后的距离起点最短的花费时间 #include <iostream> #include <cstring&g ...
- C语言函数参数压栈顺序为何是从右到左?(从左向右的话,碰到printf的会陷入死循环)
上学期学习了汇编语言,并在操作系统实验中使用了汇编+C语言混合编程,中间也了解了一些C语言与汇编语言的对应关系. 由于汇编语言是底层的编程语言,各种函数参数都要直接控制栈进行存取,在混合编程中,要用汇 ...
- Android开发:TextView添加超链接的简便方法
TextView中加入超链接的方式很多,但下面的方式应该的最简便合理的 strings.xml中定义字串 <string name="blog"><a href= ...
- SICP 解题集 — SICP 解题集
SICP 解题集 — SICP 解题集 SICP 解题集¶ 这个文档的目标是成为中文化的.完整的<计算机程序的构造和解释>一书的解题集. 这个解题集的特色是: 对于每道习题,除了习题答案之 ...
- 【MongoDB】The description of index(一)
From this blog, we start to talk about the index in mongo Database, which is similar to the traditio ...
- A Game of Thrones(14) - Catelyn
Ned and the girls were eight days gone when Maester Luwin came to her one night in Bran’s sickroom, ...
- 该项目的建设maven片:4.协调和依赖,spring依赖注入demo
源码下载 协调 <groupId>com.demo.animal</groupId> <artifactId>animal-core</artifactId& ...
- android中Sensor 工作流程
JAVA 程序 我们使用 sensor 接口一般只要注册一下 SensorListener 像下面这样 ************************************************ ...
- ASP.NET MVC 4高级编程(第4版)
<ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott All ...
- [LeetCode] Search for a Range [34]
题目 Given a sorted array of integers, find the starting and ending position of a given target value. ...