推荐系统-近邻推荐

本文深入探讨了推荐系统中的近邻推荐方法,主要聚焦于协同过滤。协同过滤分为基于用户的协同过滤和基于物品的协同过滤。前者通过计算用户间的相似度来推荐物品,后者则计算物品之间的相似度,以此为基础进行推荐。文章还介绍了多种相似度计算方法,如余弦相似度、皮尔逊相关度和杰卡德相似度,并提到了slope one算法作为改进方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐系统-近邻推荐

说到推荐系统,最先想到肯定是协同过滤。协同过滤的重点在于协同”,所谓协同,也就是群体互帮互助,互相支持是集体智慧的体现,协同过滤也是这般简单直接,历久弥新。

协同过滤

当推荐系统先使用基于内容推荐的推荐系统之后,就有了可观的用户行为了,这些用户行为通常是正向的,也就是用户或名或暗的表达出自己喜欢的行为。这些行为可以表达成一个用户和物品的关系矩阵,或者说网络,或者是说图,其实都是一个东西。上述的用户物品的关系矩阵是协同过滤算法中最为重要的。协同过滤通常划分为两类:基于记忆的协同过滤;基于模型的协同过滤。

基于记忆的协同过滤

选择基于记忆的协同过滤中最具有代表性的一种-基于用户的协同过滤(User to User),通俗来说基于用户的协同过滤就是有某个人,跟你的习惯差不多,然后你就会总是问他,有什么可以推荐给你的,其实这也是给用户聚类了。

原理

step1.准备用户向量,理论上我们可以得到每一个用户的用户向量,为什么说是理论呢,因为得到用户向量的前提的是用户需要有用户行为。比如用户对物品的喜爱矩阵,这个向量的维度就是物品的个数;这个向量是稀疏的,并不是每个维度上都有数值;向量维度上的取值可以是简单的布尔值。

step2.用每一个用户的向量,两两计算用户之间的相似度,设定一个相似度阈值或者设定一个最大数量,为每个用户保留与其最相似的用户,计算相似度的方法有很多。

step3.为一个用户产生推荐结果
Pu,i=∑jn(simu,j∗Rj,i)∑jnsimu,j P_u,i=\frac{\sum_{j}^{n}{(sim_u,j*R_j,i)}}{\sum_{j}^{n}sim_u,j} Pu,i=jnsimu,jjn(simu,jRj,i)
等式左边为用户u与物品i的匹配分数,等式右边sim为用户u的所有相似用户,R为用户对物品的态度,分母为所有跟用户u相似用户的相似度之和,分子为相似用户的相似度与该用户对物品i加权求和。

要点

1.构造矩阵是采用的稀疏矩阵存储格式。

2.向量很长不利于计算相似度(a.对向量采样计算,DIMSUM算法;b.向量化计算);用户量很大,两两计算代价很大(将相似度计算拆成Map Reduce)

3.推荐分计算,为每一个用户计算每一个物品的推荐分数,计算次数是矩阵的所有元素个数,代价太大(a.只有相似用户喜欢过的物品需要计算;b.把计算过程拆成Map Reduce)

4.一些改进的思考(a.惩罚对热门物品的喜欢程度,因为热门的东西很难反应用户的真实兴趣,这是群体行为常见特点;b.增加喜欢程度的时间衰减,因为喜欢的口味是会发生变化的)

基于物品的协同过滤

“看了这个商品的还看了”,“喜欢了这部电影的还喜欢了”…,这种的推荐产品可以说是推荐系统的标配了。

原理

在基于物品协同过滤出现之前,大多都是用的上面的基于用户的协同过滤,先细数下基于用户协同过滤的几个问题:用户数量往往是比较大;用户的喜爱不是静态的,所以兴趣迁移问题很难反应处理;数据稀疏,用户与用户之间有共同消费行为实际上是比较小的。

和基于用户的不同,基于物品的协同过滤首先计算相似物品,然后再根据用户消费过,或者正在消费的物品为其推荐相似的。首先,物品的数量往往少于用户数量;其次,物品之间的相似度比较静态的;最后,物品对应的消费者数量较大。

怎么来构建这里的用户物品的关系矩阵呢?

step.构建用户物品的关系矩阵,矩阵元素可以是用户的消费行为,也可以是消费后的评价,还可以是对消费行为的某种量化如时间、次数、费用等;

step2.假如矩阵的行表示物品,列表示用户的话,那么就两两计算行向量之间的相似度,得到物品相似度矩阵,行和列都是物品;

step3.产生推荐结果,根据推荐场景不同,有两种产生结果的形式。一种是为某一个物品推荐相关物品,另一种是在个人首页产生类似“猜你喜欢”的推荐结果。

计算物品相似度

首先从用户物品矩阵(不管是基于用户还是基于物品都是同一个,但不同的是矩阵中的值,根据自己设定,比如只有单纯的喜欢与否,或者是消费行为量化数)中得到物品向量,这个物品向量是一个稀疏向量;维度是用户,一个用户代表向量的一维(这与基于用户的区别是,这里取的是行,基于用户取的是列)。

一般选择余弦相似度:
simi,j=∑k=1nRi,k∗Rj,k∑k=1nRik2∑k=1nRjk2 sim_{i,j}=\frac{\sum_{k=1}^{n}{R_{i,k}*R_{j,k}}}{\sqrt{\sum_{k=1}^{n}R_{ik}^2}\sqrt{\sum_{k=1}^{n}R_{jk}^2}} simi,j=k=1nRik2k=1nRjk2k=1nRi,kRj,k
分母是计算两个物品向量的长度,求元素值的平方和再开方。分子是两个向量的点积,相同位置的元素值相乘再求和。

改进

**物品中心化:**把矩阵中的分数,减去物品分数的均值,这样避免铁杆粉丝群体的非理性因素。

用户中心化:把矩阵中的分数,减去对应用户分数的均值,这样可以去掉了主观成分。

计算推荐结果

在得到物品相似度之和,接下来就是为用户推荐可能感兴趣的物品了,基于物品的协同过滤有两种应用场景。

第一种属于TopK推荐
Pu,i=∑j=1msimi,j∗Ruj∑j=1msimi,j P_{u,i}=\frac{\sum_{j=1}^{m}sim_{i,j}*R_{uj}}{\sum_{j=1}^{m}sim_{i,j}} Pu,i=j=1msimi,jj=1msimi,jRuj
核心思想就和基于用户的推荐算法一样,加权求和。保留分数最高的k个结果

第二种属于相关推荐

这种推荐不需要提前合并计算,当用户访问一个物品的详情页面时,或者完成一个物品消费的结果,直接获取这个物品的相似物品推荐,就是“看了又看”或者“买了又买”的推荐结果了。

slope one算法

经典的基于物品推荐,相似度矩阵计算无法实时更新,整个过程都是离线计算的,而且相似度计算是没有考虑相似度的置信问题。例如,两个物品,他们都被同一个用户喜欢了,且只被这一个用户喜欢了,那么余弦相似度计算的结果是 1,这个 1 在最后汇总计算推荐分数时,对结果的影响却最大。slope one算法专门针对评分矩阵,计算的不是物品之间的相似度,而是计算物品之间的距离。

在这里插入图片描述

这个矩阵反应了这些事实:用户 1 给物品 A、B、C 都评分了,分别是 5,3,2;用户 2 给物品 A、B 评分了,分别是 3、4;用户 3 给物品 B、C 评分了,分别是 2、5。现在首先来两两计算物品之间的差距:

在这里插入图片描述

括号里表示两个物品的共同用户数量,代表两个物品差距的置信程度。比如物品 A 和物品 B 之间的差距是 0.5,共同用户数是 2,反之,物品 B 和物品 A 的差距是 -0.5,共同用户数还是 2。知道这个差距后,就可以用一个物品去预测另一个物品的评分。如果只知道用户 3 给物品 B 的评分是 2,那么预测用户 3 给物品 A 的评分呢就是 2.5,因为从物品 B 到物品 A 的差距是 0.5。物品A到物品B的距离等于{(5-3)+(3-4)}/2。

相似度计算方法

欧氏距离

欧氏距离,如名字所料,是一个欧式空间下度量距离的方法。两个物体,都在同一个空间下表示为两个点,假如叫做 p 和 q,分别都是 n 个坐标。那么欧式距离就是衡量这两个点之间的距离,从 p 到 q 移动要经过的距离。欧式距离不适合布尔向量之间。

余弦相似度

余弦相似度在度量文本相似度、用户相似度、物品相似度的时候都较为常用;但是在这里需要提醒你一点,余弦相似度的特点:它与向量的长度无关。因为余弦相似度计算需要对向量长度做归一化。

皮尔逊相关度

皮尔逊相关度,实际上也是一种余弦相似度,不过先对向量做了中心化,向量 p 和 q 各自减去向量的均值后,再计算余弦相似度,皮尔逊相关度计算结果范围在 -1 到 1。-1 表示负相关,1 比表示正相关。皮尔逊相关度其实度量的是两个随机变量是不是在同增同减。如果同时对两个随机变量采样,当其中一个得到较大的值另一也较大,其中一个较小时另一个也较小时,这就是正相关,计算出来的相关度就接近 1,这种情况属于沆瀣一气,反之就接近 -1。

杰拉德相似度

在同增同减。如果同时对两个随机变量采样,当其中一个得到较大的值另一也较大,其中一个较小时另一个也较小时,这就是正相关,计算出来的相关度就接近 1,这种情况属于沆瀣一气,反之就接近 -1。

杰拉德相似度

杰卡德相似度,是两个集合的交集元素个数在并集中所占的比例。由于集合非常适用于布尔向量表示,所以杰卡德相似度简直就是为布尔值向量私人定做的。余弦相似度适用于评分数据,杰卡德相似度适合用于隐式反馈数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值