基于近邻的推荐系统

本文介绍了推荐系统的分类,包括基于记忆的、基于模型的、基于内容的等,并详细探讨了基于邻域的推荐方法,如基于用户的协同过滤和基于物品的协同过滤。文中还讨论了时间复杂度、近邻算法与回归的联系以及图算法的应用。

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

推荐系统

1. 分类

  • CF Bases
    • Memory Based: User CF, Item CF
    • Model Based
  • Content Based
  • Knowledge Based
  • Demographic Based

2. 评分矩阵

  • 评分矩阵的类型有:连续值、整形、离散值、二元、一元(隐反馈)
    • 离散值举例:trongly Disagree、Disagree、Neutral、Agree、Strongly Agree
    • 对于隐反馈来说,缺失的部分在初始的时候一般会被替换为0,若不替换为0会带来严重的过拟合问题
  • 用户对于物品的评分符合现实生活中的长尾现象,只有少部分的物品会被大量的评价,而大量的物品很少被评价
  • 在大多数情况下,这些被大量的评分的物品相对而言属于利润较少的物品,另一方面那些低频的物品往往有着大量的利润,在这样的条件下,推荐这些低频商品会带来更大的利润
  • 大多数的推荐系统相对于低频物品会推荐高频物品,这种现象会导致推荐系统多样性的降低,频繁推荐这些流行物品,会使得用户感觉厌烦

3. 基于邻域的推荐系统

  • 基于领域的推荐系统基于如下假设:相似用户具有具有相似的评分行为,相似的物品受到的评分类似
  • 基于用户与基于物品的最大不同点在于,基于用户的其评价来自于相似用户,而基于物品评分来自于自己
  • 评分的长尾分布的现象表明经常被用户访问的商品在数目上是较少的,这就会严重影响基于邻域的协同过滤方法,因为近邻经常是基于常被访问的物品,在很多情况下对于高频物品的评分并不能代表低频物品的评分,这会导致用预测出 misleading result

3. 1 基于用户的协同过滤

  • 相似用户对于物品的打分类似
  • 用户A对于物品的B的评价来来自于与用户A相似的用户群体对于物品B的评价的加权平均

3.1.1 相似函数

  • Jaccard 系数
    sim(u,v)=N(u)N(v)|N(u)||N(v)|(1)(1)sim(u,v)=N(u)∩N(v)|N(u)||N(v)|
  • 用户平均评分
    μu=kIuruk|Iu|(2)(2)μu=∑k∈Iuruk|Iu|
  • 皮尔逊相关系数/去中心化的余弦相似度
    sim(u,v)=kIuIv(rukμu)(rvkμv)kIuIv(rukμu)2kIuIv(rvkμv)2(3)(3)sim(u,v)=∑k∈Iu∩Iv(ruk−μu)⋅(rvk−μv)∑k∈Iu∩Iv(ruk−μu)2⋅∑k∈Iu∩Iv(rvk−μv)2
  • 余弦相似度
    &nbsp&nbsp&nbsp&nbsp5, 6为两种形式的余弦相似度,区别是,在用户u、v评分物品的交集在还是用户u评分物品的全集上做normalization
    sim(u,v)=N(u)N(v)|N(u)||N(v)|(4)(4)sim(u,v)=N(u)∩N(v)|N(u)||N(v)|

    sim(u,v)=kIuIvrukrvkkIuIvr2ukkIuIvr2vk(5)(5)sim(u,v)=∑k∈Iu∩Ivruk⋅rvk∑k∈Iu∩Ivruk2⋅∑k∈Iu∩Ivrvk2

    sim(u,v)=kIuIvrukrvkkIur2ukkIur2vk(6)(6)sim(u,v)=∑k∈Iu∩Ivruk⋅rvk∑k∈Iuruk2⋅∑k∈Iurvk2

    • Jaccard系数没有考虑到用户评分数据的差异性
    • 有些用户对所有物品评分都很高很容易满足,而有些用户口味挑剔,他对很多物品评分都很低。皮尔逊相关系数做了一个mean-centering,较余弦相似度更能捕捉用户评分行为之间的差异,可以使得更好刻画用户评分行为的global pattern
  • Discount similarity
    sim(u,v)=sim(u,v)min{|IuIv|,β}β(7)(7)sim(u,v)=sim(u,v)⋅min{|Iu∩Iv|,β}β

    • sim(u, v)会受到用户u与用户公共评分物品数目|IuIv||Iu∩Iv|影响,如果用户u与用户v只有少部分相似的公共评分物品,将sim(u,v)乘以一定的系数减少重要性,这种方法被叫做significance weighting.

3.1.2 预测函数

  • 基础
    r^uj=vPu(j)sim(u,v)ruj(1)(1)r^uj=∑v∈Pu(j)sim(u,v)ruj
  • 去中值
    r^uj=μu+vPu(j)sim(u,v)svjvPu(j)|sim(u,v)|(2)(2)r^uj=μu+∑v∈Pu(j)sim(u,v)⋅svj∑v∈Pu(j)|sim(u,v)|

    svj=rvjμv(3)(3)svj=rvj−μv

    预测可以更好的利用已观测到的评分,他也会影响物品评分的相对排序
  • Z-socre
    σμ=jIu(rujμu)2|Iu|1zuj=rujμuσμ=sujσμr^uj=μu+σuvPu(j)sim(u,v)zvjvPu(j)|sim(u,v)|(4)(5)(6)(4)σμ=∑j∈Iu(ruj−μu)2|Iu|−1(5)zuj=ruj−μuσμ=sujσμ(6)r^uj=μu+σu∑v∈Pu(j)sim(u,v)⋅zvj∑v∈Pu(j)|sim(u,v)|

    注意到σuσu,更一般的是当使用g()g(⋅)对于评分进行变换,在最后的预测函数要应用他的反函数
    Z-score会带来一定的预测性能提高,但他也有问题,例如超出范围的评分

3.1.3 相似用户(Peer Group)的选择

  • 最简单的选择方法是选择相似度最高的k个用户,这样选择出来的用户可能与目标关联性很小或负相关。
  • 弱相关用户可能导致预测结果出错,Furthermore,negatively correlated ratings often do not have as much predictive value in terms of potential inversion of the ratings。
  • 一般而言,需要将弱相关与负相关用户过滤掉。

3.1.4 长尾现象

  • 长尾现象指的是,只有少数的物品被大量的用户评分(购买、发生行为),而大量的物品只有少数用户有过行为。
  • 长尾现象普遍存在于评分中,一些流行物品会普遍的存在于用户的评分商品中,这些评分有时候会降低推荐系统的质量,因为他们对于不同用户没有区分性。
  • 与IDF类似,可以使用 Inverse User Frequence, mjmj为物品j评分的数目,m为用户的总数,物品j的权值为

    wj=log(mmj)(1)(1)wj=log(mmj)

    sim(u,v)=kIuIvwk(rukμu)(rvkμv)kIuIv(rukμu)2kIuIv(rvkμv)2(2)(2)sim(u,v)=∑k∈Iu∩Ivwk(ruk−μu)⋅(rvk−μv)∑k∈Iu∩Iv(ruk−μu)2⋅∑k∈Iu∩Iv(rvk−μv)2
  • 在计算相似度的时候,乘以权值

3. 2 基于物品的协同过滤

  • 用户对于相似物品的评价相似,基于物品之间的相似性
  • 物品A与物品B的相似度由共同评分过A、B的用户决定
  • 用户A对于物品的B的评价来自于其历史访问物品与物品B的加权
  • 物品相似度函数:
    • AdjustedCosine 为去中心化的余弦相似度,ruirui减去用户uiui评分的均值
      AdjustedCosine(i,j)=uUiUjsuisujuUiUjs2uiuUiUjs2uj(1)(1)AdjustedCosine(i,j)=∑u∈Ui∩Ujsui⋅suj∑u∈Ui∩Ujsui2⋅∑u∈Ui∩Ujsuj2
    • 皮尔逊相关系数,ruirui减去物品iiii评分的均值,一般而言adjust cosine的性能更好
  • 预测
    • 与基于用户的CF利用相似用户的评分不同,基于物品的CF只利用自己的历史评分
      r^ut=jQt(u)sim(j,t)rujjQt(u)|sim(j,t)|(2)(2)r^ut=∑j∈Qt(u)sim(j,t)ruj∑j∈Qt(u)|sim(j,t)|
    • 相似物品具有相同的元素,用户对于这类物品的历史评分能够反映用户对于这类物品的兴趣

3.3 时间复杂度

  • m,n 分别为用户数与物品数,nn′为用户最多的评分数目,mm′为物品最多的评分数目,则nn′为计算一对用户的时间复杂度, mm′为计算一对物品的时间复杂度
  • 基于用户的CF,单个用户时间复杂度 O(mn)O(m∗n′),所有用户时间复杂度O(m2n)O(m2∗n′),空间复杂度O(m2)O(m2)
  • 基于物品的CF,单个用户时间复杂度 O(nm)O(n∗m′),所有用户时间复杂度O(n2m)O(n2∗m′),空间复杂度O(n2)O(n2)
  • User CF、Item CF推荐 K Item 的时间在 O(kn)O(k∗n),Top K user O(km)O(k∗m)

3.4 比较

基于用户基于物品
两个用户共同看过某个物品,则这两个用户具有一定的关联两个物品被同一个用户看过,那么这两个物品有一定的关联
寻找相似用户寻找相似物品
推荐相似用户买过的物品根据用户历史兴趣推荐相似物品
相比ItemCF多样性更好,会增加惊喜度,没有惊喜度用户
很快会对类似的物品感到厌倦
可解释弱,只能给出近邻的评分,未从自己的兴趣出发可解释性强,e.g.你观看了A,所以向你推荐类似的B
一般网站的用户数大于物品数,需要更大的内存和计算量只需计算物品之间的相似关系,所以对内存和计算量的要求
小了很多
具备热点效应,推荐好友圈访问的物品,实时性强,利于热
点扩散
个性化
能缓解新物品冷启动问题,只要新物品被小圈子的用户评
分过,他就能扩散出去
能缓解用户冷启动问题,只要用户对物品有过评分,就可以
推荐相似物品,而新物品不更新相似度无法推荐
用有新行为不一定造成推荐结果实时变化,需要先离线计算
相似度矩阵再影响推荐结果
用户有新行为一定造成推荐结果实时变化,改变用户历史访
问之后,根据该物品可以推荐相似物品

3.5 优缺点

  • 优点
    • 简单、易于实施
    • 可解释性强,尤其是基于物品的CF
    • 对于新物品、用户的加入相对而言较为稳定
    • 可做增量学习扩展
  • 缺点
    • 是实际中,离线计算困难,甚至不可能,例如User CF 需要O(m2)O(m2)的空间复杂度,太浪费存储空间,计算速度也慢。而,线上阶段的计算很方便。
    • 另一个主要的缺点是,覆盖率, 数据的稀疏性会带来低覆盖率,例如用户A的近邻只对物品B,C产生过行为,那么用户A接受到的推荐只能在这些物品中。稀疏性也会降低用户相似度的可靠性,如果用户之间公共评分的物品很少,则计算出的相似度不够robust

3.6 聚类改善离线计算时间

  • 以基于用户的CF的离线计算时间复杂度是O(m2n)O(m2n′),以m=108,n=100m=108,n′=100为例,O(m2n)=1018O(m2n′)=1018,一台10GHZ的计算机也需要100多天的时间来计算
  • 使用聚类算法来降低时间复杂度,与User—CF不同的是,使用聚类之后簇的K近邻来进行预测,近邻计算局限于聚类之后的簇中,极大的降低了时间复杂度
  • 这一方法是牺牲精度,带来时间与空间复杂度的提升,可以用聚类的粒度来权衡精度与时间复杂度
  • 所使用的聚类方法需要能够处理大量的数据缺失问题,因为我们的评分矩阵存在大量的缺失。计算距离时,只考虑存在评分的部分,

3.7 降维

  • 降维方法可以同时提高推荐的性能与效率,在如此稀疏的矩阵中相似度,这样得到得到相似度不够robust
  • 降维方法可以得到隐向量的低维表示,尽管两个用户只有少数共同评份物品,可以通过他们低维的隐向量来计算距离,同时在低位计算实际复杂度也低
  • 隐语义模型在近邻方法的应用: 对行或列进行降维,降维之后用于Item CF 或 User CF 。这里的隐语义模型并不同时对行列进行降维
  • 以 User CF为例:
    • m×nm×n的矩阵RR降维,得到m×d的矩阵RR′,将原始的空间压缩到d维空间
    • 在降维之后的特征空间进行计算相似度,这样计算出的相似度更为鲁棒,计算的速度也更快
    • 如何降维
      • 首先将缺失的部分替换为相应行的的平均值(用户评分的均值)
      • 进行SVD 或 PCA等方法

3.8 近邻与回归的联系

r^uj=μu+vPu(j)sim(u,v)svjvPu(j)|sim(u,v)|(1)(1)r^uj=μu+∑v∈Pu(j)sim(u,v)⋅svj∑v∈Pu(j)|sim(u,v)|

+ 用户u对物品j的评分可以看做,与其最相近的K个用户且评分过物品j的用户对j的评分的加权。如果去除Pu(j)Pu(j)这一条件,这可以看成线性回归问题。
+ 回归使用优化模型来求解系数,而近邻模型使用一种启发式的方式(用户相似度、物品相似度)

3.8.1 基于用户的K近邻回归

  • wuservuwvuuser 表示了评分的权重,表示对于用户u,用户v对物品j的评分对于用户u对物品j评分的产生的影响
  • 通过优化(3)(3)来优化模型
    r^uj=μ+vPu(j)wuservu(rvjμv)(2)(2)r^uj=μ+∑v∈Pu(j)wvuuser(rvj−μv)

    minJu=jIu(ruir^uj)2(3)(3)minJu=∑j∈Iu(rui−r^uj)2

3.8.2 基于物品的K近邻回归

r^ut=vQt(u)wtemjtruj(4)(4)r^ut=∑v∈Qt(u)wjttem⋅ruj

minJu=uUt(rutr^ut)2(5)(5)minJu=∑u∈Ut(rut−r^ut)2

3.9 图算法

3.9.1 用户-物品图

  • 用户-物品图是一个无向二部图,图中所有的连边都只存在与用户与物品之间,用户邻居不在需要评分过很多同样的物品,只需二者之间存在足够的最短路径
  • 随机游走定义近邻
  • Katz Measure
    Katz(i,j)=t=1βtn(t)ij(1)(1)Katz(i,j)=∑t=1∞βt⋅nij(t)

    ββ为惩罚系数,惩罚过长的路径,n(t)ijnij(t)为结点i,j距离为为t的路径个数
    若A是无向图的邻接矩阵
    K=i=1(βA)i=(IβA)1IK=∑i=1∞(βA)i=(I−βA)−1−I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值