协同过滤推荐算法:基于用户的最近邻推荐
基于用户的最近邻推荐
如何判断用户喜欢什么东西?我们可以利用与该用户相似的人群,看看他们喜欢什么商品,然后推荐给该用户。
1.计算用户相似度:Pearson相关系数
下面表格给出了一个用户-物品评分矩阵。
表1 协同推荐的评分数据库
物品1 | 物品2 | 物品3 | 物品4 | 物品5 | |
---|---|---|---|---|---|
Alice | 5 | 3 | 4 | 4 | ? |
用户1 | 3 | 1 | 2 | 3 | 3 |
用户2 | 4 | 3 | 4 | 3 | 5 |
用户3 | 3 | 3 | 1 | 5 | 4 |
用户4 | 1 | 5 | 5 | 2 | 1 |
约定:用户集合 U = { u 1 , . . . , u n } U=\{u_1,...,u_n\} U={u1,...,un},产品集合 P = { p 1 , . . . , p m } P=\{p_1,...,p_m\} P={p1,...,pm},评分矩阵 R = { r i , j ∣ 1 ≤ i ≤ n , 1 ≤ j ≤ m } R= \{ r_{i,j}|1\le i\le n,1\le j\le m\} R={ri,j∣1≤i≤n,1≤j≤m}。
Pearson相关系数定义如下:
(1) s i m ( a , b ) = ∑ p ∈ P ( r a , p − r ˉ a ) ( r b , p − r ˉ b ) ∑ p ∈ P ( r a , p − r ˉ a ) 2 ∑ p ∈ P ( r b , p − r ˉ b ) 2 sim(a,b)=\frac{\sum_{p\in P}(r_{a,p}-\bar r_a)(r_{b,p}-\bar r_b)}{\sqrt{\sum_{p\in P}(r_{a,p}-\bar r_a)^2}\sqrt{\sum_{p\in P}(r_{b,p}-\bar r_b)^2}}\tag1 sim(a,b)=∑p∈P(ra,p−rˉa)2∑p∈P(rb,p−rˉb)2∑p∈P(ra,p−rˉa)(rb,p−rˉb)(1)
Perason相关系数从+1(强正相关)到-1(强负相关)。Alice 和用户1、用户2、用户3、用户4的相关系数分别为0.85、0.70、0.00、-0.79。
注意:Pearson相关系数中,数据是基于每个用户给产品评分的平均数计算的,也就是排除了有些用户喜欢高分,有些用户喜欢低分的偏好习惯。
2.预测用户偏好
Alice 会对物品5评多少分?
我们有理由选择用户1、用户2作为 Alice 的邻近用户。把用户1、用户2对物品5评分的偏差做一个加权平均,其中权重是用户1、用户2和 Alice 的相关系数。于是我们可以得到用户
a
a
a 对物品
p
p
p 的评分预测:
(2)
p
r
e
d
(
a
,
p
)
=
r
ˉ
a
+
∑
b
∈
N
s
i
m
(
a
,
b
)
(
r
b
,
p
−
r
ˉ
b
)
∑
b
∈
N
s
i
m
(
a
,
b
)
pred(a,p)=\bar r_a+\frac{\sum_{b\in N}sim(a,b)(r_{b,p}-\bar r_b)}{\sum_{b\in N}sim(a,b)}\tag2
pred(a,p)=rˉa+∑b∈Nsim(a,b)∑b∈Nsim(a,b)(rb,p−rˉb)(2)
在这个例子中,基于近邻用户1和用户2的评分预测Alice对物品5的评分为:
4
+
0.85
∗
(
3
−
2.4
)
+
0.7
∗
(
5
−
3.8
)
0.85
+
0.7
=
4.87
4+\frac{0.85*(3-2.4)+0.7*(5-3.8)}{0.85+0.7}=4.87
4+0.85+0.70.85∗(3−2.4)+0.7∗(5−3.8)=4.87
3.小结
Pearson 相关系数在基于用户的的最近邻推荐算法中一般来讲由于其他相关系数计算方法
提供了不错的思路,是一种最基本的推荐算法。事实上还存在一些需要解决的问题。例如,有些产品普遍得到用户的好评,另外有些产品的用户评价则参差不齐,对前者评价的预测和对后者评价的预测的意义肯定大不相同。另外实际应用中的用户-产品评价矩阵往往是稀疏的,这也导致一些改进技术陆续登场。
相关文章
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- 【算法】【二叉树模块】二叉树中判断两个节点之间最近的祖先节点问题的解法
- 基于离散Markov模型的Web用户行为预测算法的研究
- 基于BP/RBF神经网络的在线信道估计均衡算法matlab仿真
- 【GNN】基于GNN图神经网络模型的最小连通支配集的构造算法的MATLAB仿真
- 字节跳动面试——图形图像算法实习
- 百度面试——算法岗
- 基于PRM(probabilistic roadmaps)算法的机器人路线规划算法matlab仿真
- 基于MATLAB的LTEA载波聚合算法仿真
- 【AES图像加解密】基于AES图像加解密算法的MATLAB仿真
- 基于随机接入代价的异构网络速率分配算法研究
- 基于模糊神经网络PID算法的液位串级控制
- 基于形态学的复杂背景目标检测算法
- R语言数据挖掘2.2.5 基于最大频繁项集的GenMax算法
- Java实现银行家算法
- 基于C# 利用工程活动图 AOE 网设计算法【100010705】
- 基于LSD的直线提取算法
- 机器学习算法: 基于逻辑回归的分类预测Python实现
- 《Mahout算法解析与案例实战》一一1.2 Mahout算法库
- 强化学习baseline论文—— rainbow算法中给出实验结果的54个atari2600游戏名称列表
- 基于改进的颜色直方图的图像检索算法(论文草稿)
- 算法总结
- 推荐系统协同过滤-python实现(基于用户的协同过滤算法,基于物品的协同过滤算法,附数据集)
- 基于皮尔逊相关系数的用户相似推荐算法python实现
- 算法提高 9-2 文本加密
- 【历史上的今天】7 月 6 日:RSA 算法发明人诞生;AR 游戏 Pokémon GO 发布;Tumblr 创始人出生
- 【目录】Python算法指南
- python算法之组合总和