推荐系统笔记三、基于近邻的推荐系统(进阶篇)

一、概述:

基于近邻的推荐算法在推荐系统中占有重要的地位,是学术界的一个重点研究方向,在产业界也得到了广泛的应用。基于近邻的推荐算法大致可以分为user-based和item-based两类,关于近邻推荐算法的基础性介绍,请参见博文: “推荐系统笔记一、基于近邻的推荐系统(基础篇)”。由于user-based方法和item-based方法的相似性,本文主要讨论item-based方法上的一些技术,这些技术可以被直接套用到user-based方法上。本文主要介绍五种近邻模型。

二、符号定义:

  • U:用户集合;I:item集合;
  • R:评分集合, rui 表示用户 uU 对item iI 的评分;
  • Ui :已经给item i打分的用户集合; Iu :已经被用户u打分的item集合;
  • Iuv IuIv ,同时被用户u和用户v打过分的item集合; Uij :同时对item i和j打过分的用户集合;
  • wuv :用户u和v之间的相似度; wij :item i和j之间的相似度;

三、相似权值计算:

        两个用户或者item间的近邻关系是由他们之间的相似度来判断的,与一个用户(或item)相似度最大的k个用户(或item)称为他的k近邻。

        cosine相似度是其中一种常用的度量方法:

cos(i,j)=uUijruirujuUir2uivUjr2vj

Ui Uj 的相似度。在前面符号定义小节已经提到过 Uij 表示同时对item i和item j打过分的用户集合。

        如果考虑均值和方差,则得到Pearson相关系数:

PearsonCorrelation(i,j)=uUij(ruir¯i)(rujr¯j)vUij(rvir¯i)2kUij(rkjr¯j)2

Pearson Correlation是 在集合 Uij 上计算的,其他的评分都忽略,所以在分母上和cosine有一个小小的区别。另外,由于Pearson Correlation 的分子分母都要除以标准差项,所以可以分子分母同时约去。

相似权值改进:

    在实际中,不同用户或者item的评分往往是带偏差的,例如A和B两个用户的偏好类似,但是A比较容易满足,倾向于给item打高分;而B倾向于给item打低分(Item 上也有类似的情况)。为了解决这个问题,需要为每个用户和item增加一个偏置项。在前面的式子中,用均值 r¯i 作为这个偏置项,也可以用学习的方法得到一个较好的偏置项:

minb(u,i)K(ruiμbubi)2+λ(ub2u+ib2i)

其中 μ 是整体评分偏置, bu bi 是用户u和item i上额外的偏置。那么评分 rui 的偏置就等于:
bui=μ+bu+bi

    把这个偏置代入Pearson Correlation,得到:

PearsonCorrelation(i,j)=uUij(ruibui)(rujbuj)vUij(rvibvi)2kUij(rkjbkj)2

当使用Pearson Correlation方法时,如果item i和j只被一个用户同时评分过,并且恰好在这两个item上的评分相同,那么根据Pearson公式他们之间的相似度等于1,这显然不大合理。可以用以下方法对权值进行收缩:

sij=|Uij|1|Uij|1+βPearsonCorrelation(i,j)

β 的值可以通过交叉验证选择(例如 β=100 )。

四、相似度插值:

    Similarity-Based Interpolation:定义 Sk(i;u) 为用户u评分的item集合中和item i最相似的k个近邻。由用户对item的历史评分来预测评分:

r^ui=bui+jSk(i;u)sij(rujbuj)jSk(i;u)sij

这可以看做一个插值函数, sij 是插值系数。这种方法主要有一下两个优点:

  • 可解释性。通过用户对item的历史评分(喜好)推荐新的item。
  • 实时性。一旦用户给出新的评分,item-based模型可以立即提供新的推荐,而不需要重新训练模型或计算参数(通常认为item间的相似度在短时间内是恒定的,只需每隔较长一段时间重新计算)。

五、联合派生插值权重:

    Jointly Derived Interpolation Weights:相似度插值方法直接使用item间的相似度作为插值权重(系数),忽略了近邻间的相互关系,为了更好的预测评分,需要重新学习插值权重 {θuij|jSk(i;u)}

r^ui=bui+jSk(i;u)θuij(rujbuj)

插值权重通过求解一个最小二乘问题得到:

minθuvu{(rvibvi)jSk(i;u)θuij(rvjbvj)}2

    如果写成 Aw=b 的形式,则:

Ajl=vu(rvjbvj)(rvlbvl)bj=vu(rvjbvj)(rvibvi)

由于评分矩阵是稀疏的,很少有用户v对 Sk(i;u) 都进行了评分。可以同时用正则化和平滑的方式进行处理(结果会向avg收缩):
A^jl=Ajl+βavg|Ujl|+βb^j=bj+βavg|Uij|+β

六、全局近邻模型:

    前面介绍的近邻模型都是局部的(k近邻),全局近邻模型吸取了矩阵分解模型的优点,从而可以得到更优的结果。这种模型可以使用隐式反馈,并且具有较好的实时性。重新定义预测函数:

r^ui=μ+bu+bi+|Rk(i;u)|12jRk(i;u){wij(rujbuj)+cij}

     R(u) 是用户u的所有评分, cij 是用户u的隐式反馈,如租借、购买等。 Rk(i;u) 是item项的集合,这些item需要同时满足两个条件:一是用户u评过分;二是item i的k近邻。所以 Rk(i;u) 中item的个数通常是小于k的。需要学习的参数有: bu,bi,wij,cij ,同过梯度下降最优化下面这个目标函数来学习参数:

minb,w,c=(u,i){ruiμbubi|Rk(i;u)|12jRk(i;u)(wij(rujbuj)+cij)}2+λ{b2u+b2i+jRk(i;u)(w2ij+c2ij)}2

七、因子分解近邻模型:

    可以对全局近邻模进行因子分解以减少时间和空间复杂度,提高准确率:

r^ui=μ+bu+bi+|Rk(i;u)|12jRk(i;u){wij(rujbuj)+cij}=μ+bu+bi+|Rk(i;u)|12jRk(i;u){qixj(rujbuj)+qiyj}=μ+bu+bi+qi|Rk(i;u)|12jRk(i;u){xj(rujbuj)+yj}

可以发现最后的表示和SVD++很相似。

八、近邻模型添加时间信息:

    用户的偏好是随着时间不断发生变化的,\emph{如一个人喜欢的电影在2年前和2年后很可能是不同的}。在全局近邻模型中可以很容易加入时间信息:

r^ui=μ+bu(tui)+bi(tui)+|Rk(i;u)|12jRk(i;u)eβu|tuituj|{wij(rujbuj)+cij}

bu(tui),bi(tui) bu,bi 的时间函数,详见博文” 矩阵分解协同过滤“。 eβu|tuituj| 是指数衰退函数,如果用户u对item j的评分是在很久之前,那么item j的评分对现在的影响不大,用指数函数缩小其权重。其他项和原始的全局近邻模型一样,保持不变。

九、参考资料

Recommender Systems Handbook

你可能感兴趣的:(推荐系统,插值,近邻模型,联合派生,全局近邻)