大数据推荐算法之基于物品协同过滤推荐实例
来源:互联网 发布:qq邮箱smtp端口号 编辑:程序博客网 时间:2024/05/19 00:37
ItemCF:ItemCollaborationFilter,基于物品的协同过滤算法核心思想:给用户推荐那些和他们之前喜欢的物品相似的物品。
Iterm-based的基本思想是预先根据所有用户的历史偏好数据计算物品之间的相似性,然后把与用户喜欢的物品相类似的物品推荐给用户。还是以之前的例子为例,可以知道物品a和c非常相似,因为喜欢a的用户同时也喜欢c,而用户A喜欢a,所以把c推荐给用户A。
基本步骤如下:
1. 训练数据准备,准备好用户与物品的喜欢数据。这里借助movielens的一个数据,每行一条数据,分别是用户,物品,评分和时间
2. 计算物品的相似度,本例采用最常用的余弦定理来计算相似度
以item-user做成倒排矩阵,如
user1 user2 ... usern
item1 2 4 ... 5
item2 1 3 ... 2
... ... ... ... ...
itemn 4 3 ... 1
01
def
ItemSimilarity():
02
#建立物品-物品的共现矩阵
03
C
=
dict
()
#物品-物品的共现矩阵
04
N
=
dict
()
#物品被多少个不同用户购买
05
for
user,items
in
user_items.items():
06
for
i
in
items.keys():
07
N.setdefault(i,
0
)
08
N[i]
+
=
1
09
C.setdefault(i,{})
10
for
j
in
items.keys():
11
if
i
=
=
j :
continue
12
C[i].setdefault(j,
0
)
13
C[i][j]
+
=
1
/
math.log(
1
+
len
(item_users[i]))
14
#计算相似度矩阵
15
itemSim
=
dict
()
16
for
i,related_items
in
C.items():
17
itemSim.setdefault(i,{})
18
for
j,cij
in
related_items.items():
19
itemSim[i][j]
=
cij
/
(math.sqrt(N[i]
*
N[j]))
20
return
itemSim
3. 找出与用户喜欢的物品相似度高的topN个作为推荐的候选。
最终相似计算得分=用户对物品的喜欢得分*物品相似度得分
01
#给用户user推荐,前N个相关物品
02
def
Recommend(user,N
=
10
):
03
rank
=
dict
()
04
action_item
=
user_items[user]
#用户user产生过行为的item和评分
05
for
item,score
in
action_item.items():
06
for
j,wj
in
sorted
(itemSim[item].items(),key
=
lambda
x:x[
1
],reverse
=
True
):
07
if
j
in
action_item.keys():
08
continue
09
rank.setdefault(j,
0
)
10
rank[j]
+
=
score
*
wj
11
12
return
dict
(
sorted
(rank.items(),key
=
lambda
x:x[
1
],reverse
=
True
)[
0
:N])
注:要排除用户已喜欢的物品
运行结果:
本例代码下载
阅读全文
0 0
- 大数据推荐算法之基于物品协同过滤推荐实例
- 推荐算法之基于物品的协同过滤算法
- 基于物品的协同过滤推荐算法
- Mahout系列之推荐算法-基于物品协同过滤实践
- [推荐算法]ItemCF,基于物品的协同过滤算法
- [推荐算法]ItemCF,基于物品的协同过滤算法
- [推荐算法]ItemCF,基于物品的协同过滤算法
- [推荐算法]ItemCF,基于物品的协同过滤算法
- [推荐算法]ItemCF,基于物品的协同过滤算法
- [推荐算法]ItemCF,基于物品的协同过滤算法
- 推荐算法——基于物品的协同过滤算法
- 推荐算法--基于物品的协同过滤算法
- Spark—基于物品的协同过滤推荐算法
- 基于物品的协同过滤推荐算法(矩阵相乘)
- 协同过滤--基于物品的推荐案例
- 基于物品的协同过滤推荐
- 基于物品的协同过滤-电影推荐
- 基于用户的协同过滤和基于物品的协同过滤推荐算法原理和实现
- 【GDOI2018模拟7.12】A
- 数组
- 对于兴建高铁这一题目的理解
- 丑数
- 二分三分总结(需要注意点)
- 大数据推荐算法之基于物品协同过滤推荐实例
- MATLAB中关于排序后,序号随着排序数组一同变化的方法
- Gradle学习系列之一——Gradle快速入门
- c#实现redis客户端(一)
- makefile for exe
- TCP滑动窗口和拥塞控制
- 数据库的三大范式
- 这是一张单纯的图片??(MISC)
- 苹果电脑mac os+win双系统在线安装回macos