推荐系统中基于深度学习的混合协同过滤模型

【声明:鄙人菜鸟一枚,写的都是入门级博客,如遇大神路过鄙地,请多赐教;内容有误,请批评指教,如有雷同,属我偷懒转运的,能给你带来收获就是我的博客价值所在。】
  欢迎各路大神小妖精来这看我的博客,这周太忙了,明早要赶飞机参加一个沙漠拓展活动,就匆匆整了篇本人翻译的论文,这是携程网BI团队发表在国际人工智能顶级会议AAAI 2017上的文章《A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems》,是深度学习与推荐系统综合领域的研究与应用。虽说基于协同过滤算法的推荐模型已经被“整容”了多年,但仍有可整之处,只要刀子好,哪里整不好,是吧~闲话不多扯,翻译的论文如下:
原文来源:Xin Dong, Lei Yu, ZhonghuoWu, Yuxia Sun,Lingfeng Yuan, Fangxi Zhang. “A Hybrid Collaborative Filtering Model with DeepStructure for Recommender Systems”, AAAI 2017
摘要:协同过滤算法是推荐系统解决许多现实问题方面普遍使用的一种方法,传统的基于协同过滤方法使用用户-物品(user-item)矩阵来进行推荐,这种矩阵是对模型学习所需的用户对物品的个人偏好(数据)进行编码而得到的。在实际应用中,这种评分矩阵通常是十分稀疏的,这就导致基于协同过滤的方法在推荐性能上有显著的下降,倘若这样,一些改进的协同过滤方法利用增加辅助信息的方法来解决数据稀疏性和冷启动问题。然而, 因为user-item矩阵和辅助信息的稀疏性质的缘故,学习到的潜在因子可能没有什么作用效果。为了解决这个问题,我们利用深度学习中学习有效的代表,提出一种混合模型,该模型着眼于从辅助信息中学习以及从评分矩阵中协同过滤得到的深度用户与物品的潜在因子,综合运用了这两个潜在因子。经过在三个真实数据集上的实验,大量的实验结果表明我们提出的混合模型在辅助信息的有效利用和性能提高方面有着优于其他方法的表现。

1 前言

  近年来,随着线上可供选择的增加,推荐系统变得越来越不可或缺了。推荐系统的目标是帮助用户从大量的物品中筛选出最适合其偏好的个性化物品,除此之外,许多商业公司将推荐系统运用到了实际中,通过推按物品来确定他们的目标用户。多年来,用于推荐系统的不同算法已得到了发展。这种算法大致能被分成两大类(Shi, Larson, and Hanjalic 2014):基于内容的方法和基于协同过滤的方法。基于内容的方法(Lang 1995)使用用户资料或者用于推荐的物品内容信息,基于协同过滤方法。另一方面,基于协同过滤的方法(Salakhutdinov and Mnih 2011)忽略了用户或物品内容信息,并且是使用历史行为或历史偏好,如用户的购买或浏览历史,或者用户对物品的评分来进行推荐的。然而,基于协同过滤的方法常倾向于基于内容的方法,因为基于内容的方法有着很好的效果(Su and Khoshgoftaar 2009)。
  在基于协同过滤的方法中,最成功的就是通过矩阵分解的方法,从用户-物品评分矩阵中学习出有效的潜在因子。然而实际中的评分矩阵往往是非常稀疏的,这导致基于协同过滤的方法在学习合适的潜在因子时性能显著下降。尤其是,这种现象在在线旅游代理(OTA)网站(如:携程网)的应用中发生得更加严重,因为用户访问这些网站的频率要更低。此外,基于协同过滤方法的另一个缺陷就是当系统中出现新的物品时如何提供推荐的问题,也就是冷启动问题。冷启动存在的原因是系统无法推荐还未得到用户评分的新物品。
  为了克服冷启动和数据稀疏问题,基于协同过滤的方法不可避免的要寻求更多的信息资源。所以近些年来,混合协同过滤方法得到越来越多研究人员的青睐(Shi, Larson, and Hanjalic 2014)。我们可以从用户信息和物品内容信息之类的信息中获取辅助信息,一些混合基于协同过滤的方法(Singh and Gordon 2008; Nickel, Tresp,and Kriegel 2011; Wang and Blei 2011)将辅助信息集成到矩阵分解过程中,以学习有效的潜在因子。然而,这些方法将辅助信息应用成正则化,且学习出的潜在因子往往是无效的,特别是在评分矩阵和辅助信息非常稀疏的情况下(Agarwal, Chen, and Long 2011)。因此,实现潜在因子从这种数据集中学习相关问题是十分需要的。
  最近,学习有效代表的强大方法之一便是深度学习(Hinton and Salakhutdinov, 2006; Hinton,Osindero, Teh 2006)。因此,随着大规模评分和丰富的附加辅助信息,将深度学习与推荐系统相结合,来学习潜在因子。由此,一些研究已经直接利用深度学习来进行协同过滤的任务。 某研究(Salakhutdinov,Mnih和Hinton 2007)使用受限的玻尔兹曼机执行协同过滤。虽然这种方法结合深度学习和协同过滤,但它不包含辅助信息,这对于准确的推荐至关重要。此外,有研究(Van den Oord,Dieleman and Schrauwen,2013; Wang and Wang 2014)直接使用卷积神经网络(CNN)或深层信念网络(DBN)来获取内容信息的潜在因子,但它们是基于内容的方法,仅推断物品的潜在因子,且这种方法特别适合音乐数据集。此外,有研究工作(Wang,Wang,and Yeung 2015; Li,Kawaleand Fu 2015)利用贝叶斯叠加的自动编码器(SDAE)或边缘化的SDAE来进行协同过滤,但是需要学习大量的手动调整的超参数。
  在本文中,为了解决上述挑战,我们提出了一种具有深度结构的推荐系统的混合协同过滤模型。我们首先提出一种称为附加堆叠去噪自动编码器(aSDEA)的新型深度学习模型,其扩展了堆叠去噪自动编码器,以将附加的辅助信息集成到输入中,然后克服了冷启动问题和数据稀疏问题。接下来,将介绍我们的混合模型,它将深度表征学习紧密结合在一起,用于评分矩阵的附加辅助信息和协同过滤。实验表明,我们提出的混合模型相比现有技术有着显著的优势。具体来说,本文的主要贡献可概括为以下三个方面:
我们提出一种混合协同过滤模型,它将深度表征学习与矩阵分解相结合。 同时,它从辅助信息中提取有效的潜在因子,并捕获用户和物品之间的隐含关系。
我们提出一种新的深度学习模型aSDAE,它是SDAE的一个变体,可以将辅助信息有效地融入学习到的潜在因子中。
我们对三个实际数据集进行实验,以评估我们的混合模型的有效性。 实证结果表明,我们的混合模型在均方根误差(RMSE)和回归指标方面优于四种最先进的方法。

2 前期准备工作

  在本节中,我们先对本文讨论的问题做出定义,然后对矩阵分解进行简要说明。

2.1 问题定义

  类似于一些现有的研究工作(Hu, Koren, and Volinsky 2008),本文还将隐含的反馈作为训练和测试数据来完成推荐任务。在一个标准的推荐设置中,我们有 m 个用户,n 个物品和一个非常稀疏的评分矩阵 RRm×n R 的每个元素 Rij 对应于 i 用户对物品 j 的评分。如果 Rij0 ,这意味着用户 i 对物品 j 的评分是可观测的,否则不可观测。每个用户 i 都可以用部分观测矢量 s(u)i=(Ri1,...,Rin)Rn 来识别。同样地,每个物品 j 可由部分观测矢量 s(i)j=(R1j,...,Rmj)Rm 来表示。此外,表示用户和物品的附加辅助信息矩阵分别为 XRm×p YRn×q
 令用户 i 的隐向量和物品 j 的隐向量分别为 ui,vjRk ,其中k是隐空间的维数。因此,用户和物品潜在因子的相应矩阵形式分别为 U=u1:m V=v1:n 。给定稀疏评分矩阵 R 和辅助信息矩阵 X Y ,目标是学习用户潜在因子 U 和物品潜在因子 V ,从而预测 R 中的缺失评分。

2.2 矩阵分解

  矩阵分解(Koren等人,2009)是有效的协同过滤方法,通过对用户-物品交互矩阵进行分解,矩阵分解可以将用户和物品映射到联合潜在因子空间。因此,用户-物品交互被建模为该空间中的内部结果。原则上,矩阵分解将原始评分矩阵 R 分解为由用户和物品隐向量组成的两个低阶矩阵 U V ,使得 RUV 。给定用户和物品的隐向量,用户对某部电影的评分可通过这些向量的内部结果预测得到。
矩阵分解的目标函数可以写为:

argminU,VL(R,UVT+λ(U2F+V2F))

 其中 L(.,.) 是测量相同大小的两个矩阵之间的距离的损失函数,最后两个项是用于避免过度确定的正则化, F 表示Frobenius范数。已经通过指定不同的 L(.,.) 提出了许多矩阵分解模型,例如,非负矩阵分解(Lee和Seg,2001),概率矩阵分解(Salakhutdi- nov和Mnih 2011),贝叶斯概率矩阵因子化(Salakhutdinov和Mnih 2008),最大边缘矩阵因子(Srebro,Ren​​nie ,和Jaakkola2004)等。
  当辅助信息可用时,一些矩阵因子分解模型从包含用户或物品的附加信息的隐向量的乘积产生评分。各种模型表明,附加信息可以作为一个有用的信息先验分布,可显著地优化结果(Porteous,Asuncion和Welling 2010; Singh和Gordon2008)。

3 附加堆叠去噪自动编码器

  在本节中,我们首先介绍附加去噪自动编码器,然后详细说明附加堆叠去噪自动编码器(aSDAE)。

3.1 附加去噪自动编码器

  自动编码器是一种特定的神经网络,由编码器和解码器组成。编码器 g() 取一个给定的输入,并将其映射到隐含观测量 g(s) ,而解码器 将这个隐含观测量映射回 s 的重构值,使得 f(g(s))s 。学习自动编码器的参数,以最小化重构误差,而重构误差可通过一些损失值 L(s,f(g(s))) 测量得到。为了从损失值重构输入,需进行一个设置,即从输入中学习更有效的观测量,然而去噪自动编码器(DAE)对该设置进行了轻微的修改(Vincent et al. 2008)。这里对一个去噪自动编码器进行了训练,使它能通过最小化 L(s,f(g(s̃ ))) 实现由损坏版本 s̃  重构原始输入。通常来说,损失源的选择包括加性各向同性高斯噪声或二进制掩蔽噪声(Vincent et al. 2008)。此外,在多个领域已经开发了各种类型的自动编码器,以获得期望的结果(Chen et al. 2012; Lee et al. 2009)。

(a) 附加去噪自动编码器 (aDAE) (b) 附加堆叠去噪自动编码器 (aSDAE)
图1:aDAE和aSDAE模型
  在本文中,我们扩展了去噪自动编码器,将附加的辅助信息集成到输入中,如图1(a) 所示,给定样本集 S=[s1,...,sn] ,相应的辅助信息集 X=[x1,...,xn] ,附加去噪自动编码器(aDAE)考虑了对S的随机扰动,X获得 和 。编码器和解码器的输入如下:
     h=g(W1s̃ +V1x̃ +bh)  (3-1-1)
      s^=f(W2h+bs^)    (3-1-2)
      x̂ =f(V2h+bx^)     (3-1-3)
  其中 s̃  和 表示原始输入 s x 的损失值, s^ x^ 表示 s x 的重建值,h表示输入的隐含观测量, W V 是权重矩阵, b 是偏差向量, g() f() 是激活函数,如 tanh()
  目标函数考虑所有人之间的损失投入及其重建。然后,aDAE解决了以下优化问题:
argminWl,Vl,blαSS^2F+(1α)XX^2F+λlWl2F+Vl2F     (3-1-4)
  其中 α 是用于稳定输出的权重参数,λ 是正则化参数。

3.2附加堆叠去噪自动编码器(aSDAE)

  已有文献表明,堆叠在一起的多层可以在隐含层中产生丰富的观测量,因此导致各种更好的表现(Rifai et al. 2011; Chen et al. 2012; Kavukcuogluet al. 2009; Glorot,Bordes,Bengio2011)。堆叠去噪自动编码器(SDAE)将几个DAE堆叠在一起以创建更高级别的表示(Vincent等人,2010)。由堆叠去噪自动编码器引起的,我们将多个aDAE堆叠在一起,形成一个附加堆叠去噪自动编码器(aSDAE)。aSDAE模型如图1(b)所示,生成过程如下:
•对于aSDAE模型的每个隐含层 l{1,...,L1} 隐含观测量计算为:
hl=g(Wlhl1+Vlx̃ +bl) (3-2-1)
  其中 h0=s̃  为一个有损输入。
•对于输出层L,输出计算为:
ŝ =f(WLhL+bs^) (3-2-2)
x^=f(VLhL+bx^) (3-2-3)
  值得注意,模型的前L / 2层作为编码器,后L / 2层用作解码器。aSDAE采用深层网络来重建输入,并最大限度地减少输入之间的平方损失及其重构。aSDAE的目标函数与等式(1) 类似。因此,我们可以使用反向传播算法为每一层学习 Wl , Vl bl 。在我们的aS-DAE模型中,假设只有一个隐含层靠近潜在因子,且隐向量是从L/ 2层生成的,给定总层数为L。

4 混合协同过滤模型

  在一些基于协同过滤的方法中,主要的难点是为原始投入的用户和物品提供有效且高水平的隐向量。基于MF的方法能够满足要求,以捕获用户和物品之间的隐含关系。 然而,它们遭受冷启动和数据稀疏问题的困扰。此外,深度学习模型已经被证明在从各种任务的原始输入数据中发现高层次的隐含观测量非常有效(Shen et al. 2014; Li,Kawale and Fu 2015; Wang, Wang, 和Yeung 2015)。因此,直接从深度学习中获得表达能力,从而改进协同算法。
  在本节中,我们提出了一种混合协同过滤模型,它将我们的aSDAE模型与推荐系统的矩阵因子相统一。

4.1概述

  本文所提出的模型是一种混合模型,它利用了评分矩阵和辅助信息,并将aSDAE和矩阵分解结合起来。矩阵分解是一种广泛使用的基于模型的协同过滤方法,具有优异的可扩展性和准确性,而aSDAE是从原始输入中提取高层次的隐含观测量的强大方法。 这两个模型的结合充分利用了学习更多表达模型的好处。
  给定用户-物品评分矩阵 R ,我们先将 R 变换成 S(u) 集,此集合包括m个样本 {s(u)1,,s(u)m} ,其中 s(u)i={Ri1,...,Rin} 是用户i在所有物品上的n维反馈矢量。类似的,我们得到集 S(i) ,此集合包括n个样本 {s(i)1,,s(i)n} ,其中 s(i)j={R1j,...,Rmj} 是物品 j 在所有用户上的 m 维反馈矢量。本文的混合模型从 R,S(u),S(i) 以及附加的辅助信息中学习出物品潜在因子(例如 U V ),该过程通过以下的优化目标实现:

argminU,VLR(R,UVT+λ(U2F+V2F))+βL(S(u),X,U)+δL(S(i),Y,V)
(4-1)
 其中 LR(.,.) 是用于分解的损失函数将矩阵 R 分解为两个潜在因子矩阵 U V L(.,.) 是连接用户或物品的功能具有潜在因子,β 和 δ 的信息是权衡的参数和 λ 是正则化参数。注意,使用我们的aSDAE设计方程(4-1)中的最后两项从评分中提取潜在因子矩阵的模型矩阵和附加辅助信息。

4.2 混合模型

  让 S(u)Rm×n 和 表示在上述部分中获得的矩阵,且令 S̃ (u) S̃ (i) 分别表示他们的损失值。此外, XRm×p YRn×q 分别为关于用户和物品的附加辅助信息矩阵,相应的损失值为 X̃  Ỹ  。 显然,图2说明了我们的混合协同过滤模型。这表明混合模型的输入是 S̃ (u)S̃ (i)X̃ Ỹ  R 。如式(4-1)所示,第一项是矩阵分解的损失函数,将评分矩阵 R 转换为用户和物品潜在因子矩阵,即,
LR(R,UVT)=i,jIij(RijuivTj)2 (4-2-1)
  其中 I R 中非空实指示矩阵。最后两个项是aSDAE模型的损失函数,他们分别从用户和物品的隐含层中提取潜在因子。为简单起见,我们将式 (4-1) 中的 β 和 δ 设为1。因此,本文的混合模型的目标函数如下:
L=i,jIij(RijuivTj)2+α1i(s(u)is^(u)i)2+(1α1)i(xix^i)2
+α2j(s(i)js^(i)j)2+(1α2)j(yjy^j)2+λfreg (4-2-2)
 其中 α1,α2 是权衡参数和 freg 是防止过度拟合的正则化项,即, freg=iui2F+ivj2F+l(Wl2F+Vl2F+bl+Wl2F
+Vl2F+bl2F (4-2-3)
Wl,Vl Wl,Vl l 层上的两个aSDAE的权重矩阵,bl 层和 bl 层是相应的偏置向量。
  通常,两个aSDAE的中间层作为评分和附加辅助信息之间的桥梁。这两个中间层是使我们的混合模型能够同时学习有效潜在因子并捕获用户和物品之间的相似性和关系的关键。

4.3 模型优化

 虽然目标函数的优化在所有变量中不是共同凸出的,但在固定其他变量时,它们中的每一个都是凸性的。因此,我们可以反复地优化上述目标函数中的每个变量。
  对于 ui vj ,我们使用随机梯度下降(SGD)算法来学习这些潜在因子。为了简单起见,当与 U V 无关的其他变量是固定的时,我们让 L(U,V) 表示目标函数。因此,更新规则是:
       ui=uiηuiL(U,V)                  (4-3-1)
       vj=vjηvjL(U,V)                  (4-3-2)
  其中η是学习率,细节梯度如下:
这里写图片描述
  注意,为了简化,我们将式(4-2-2)中的 α1 设置为 α2 。此外,给定 U V ,我们可以使用流行的反向传播学习算法来学习每层的权重矩阵和偏差。通过交替更新变量,可以找到L的局部最优值。然而,我们可以使用一些常用的技术,例如使用动量项来减轻局部最优问题。

4.4 预测

  在了解每个用户和物品的潜在因子后,我们将预测的评分 R^ij 近似为: R^ijuivTj ,然后基于这些预测评分,为每个用户生成一个排好序的物品序列。

5 实验

  在本节中,我们使用来自不同领域的三个实际中的数据集来评估混合模型的性能,并将我们的混合模型与四种最先进的算法进行比较。

5.1 数据集

  我们使用来自不同实际领域的三个数据集,两个来自MovieLens,另一个来自Book-Crossing数据集,用于我们的实验。前两个数据集,MovieLens-100K和MovieLens-1M,通常用于评估推荐系统的性能(Wang,Shi,andYeung 2015; Li,Kawale和Fu2015)。MovieLens-100K数据集包含1682部电影中943位用户的100K评分,而MovieLens-1M数据集包含3706部电影中6040位用户的100多万评分。每个评分是1到5之间的整数。我们通过保持四或更高的评分来对显式数据进行二进制化,并将其解释为隐含的反馈。因此,MovieLens-1M更加轻松,因为只有2.57%的用户物品矩阵条目包含评分但是MovieLens-100K在3.49%的用户物品矩阵条目中具有等级。此外,我们提取数据集提供的用户和物品信息,分别构造附加矩阵 X Y 。总而言之,用户辅助信息包含用户ID、年龄、性别、职业和邮政编码被编码为长度为1943的二进制值向量。同样,物品辅助信息包含物品的标题、发行数据和18类电影类型编码成长度为1822的二进制值向量。
  最后一个数据集,Book-Crossing数据集,包含来自278138位用户的评论,其中包括271379本书的评分。评分以0到10的比例表示,值越高表示越偏好。然而,我们通过保持6或更高的评分来对显式数据进行二值化,并将其解释为隐式反馈。这导致用户-物品矩阵的稀疏度为99.99%。此数据集中还提供了用户和图书的某些属性。生成用户和物品附加矩阵作为上述数据集,并且两个二进制向量的长度为1973和3679。

5.2 评价指标

  我们采用均方根误差(RMSE)作为评估指标之一,
RMSE=(1|T|(ijT)(RijR^ij)2 (5-2)
 其中 Rij 是用户 i 对物品 j 的评分, R^ij 表示相应的预测等级, T 是测试集, |T| 是测试集中的评分总数。
  类似于(Wang,Wang,and Yeung 2015; Wang and Blei 2011),我们使用查全率作为另一个评估指标,因为评分信息是隐式反馈的形式(Hu,Koren和Volinsky 2008; Rendle et al. 2009)。具体来说,另一个常用度量精度不适用于隐式反馈。 因为用户物品矩阵中的零评分可能是由于用户对该物品不感兴趣的事实,或者用户不知道该事实。为了评估我们的混合模型,我们对每个用户的所有物品的预测评分进行排序,然后向每个用户推荐顶级 K 项。每个用户的 K 查全率(recall@K)定义如下:
这里写图片描述
  最终的度量结果是所有用户的平均查全率。

5.3 基线和参数设置

  为了评估我们的模型的性能,我们将其与以下推荐算法进行比较:
•PMF 概率矩阵分解(Salakhutdinov和Mnih 2011)是将用户物品矩阵分解为用户和物品因素的模型。 假设隐向量存在高斯观测噪声和高斯先验。
•CMF集体矩阵分解(Singh and Gordon 2008)是一种同时对多个来源进行分解的模型,包括用户物品矩阵和包含附加辅助信息的矩阵。
•CDL 协同深度学习(Wang,Wang,and Yeung,2015)是一种层次深度的贝叶斯模型,用于实现用户物品矩阵的物品信息和协同过滤的深度预测学习。
这里写图片描述
•DCF 深度协同过滤模式(Li,Kawale和Fu2015)是将PMF与边缘化去噪堆叠自动编码器相结合,从而实现推荐。
•本文方法 我们提出的方法如上所述,它是一个混合协同过滤模型,将我们的aSDAE模型与矩阵分解相结合。
  对于所有比较模型,我们对不同比例(60%,80%和95%)的评分进行比较。我们从每个数据集中随机选择训练集,并使用剩余的数据作为测试集。我们用不同的随机选择的训练集重复五次评估,并报告平均表现。对于我们的混合模型,我们将参数α,β和λ分别设置为0.2,0.8和0.01。SGD算法使用的学习速率η设定为0.004。类似于(Wang,Wang,and Ye-Ung​​2015),我们使用噪声水平为0.3的掩蔽噪声来从原始输入中得到损坏的输入。在深度网络架构方面,在本文的实验中,将层数设置为4。此外,将用户和物品的学习潜在因子的维度设置为64。

5.4 实验结果总结

  表1显示了PMF、CMF、CDL、DCF和本文的混合模型在三个数据集上具有不同百分比的训练数据的平均RMSE。从表1可以看出,CMF、CDL、DCF和我们的混合模型实现了比PMF更好的性能。它显示了加入附加信息的有效性。此外,CDL,DCF和我们的混合模型优于PMF和CMF。也就是说,深层结构可以到辅助信息的更好的特征质量。此外,从表1可以看出:本文的混合模型能获得比CDL和DCF更低的RMSE,这证实了aSDAE模型在学习隐向量上具有的优势。因此,RMSE度量证明了本文混合模型的有效性。
  图3显示了使用三个数据集,比较PMF,CMF,CDL,DCF和提出的混合模型的K查全率。我们可以看到PMF模式的结果比较差,因为它缺乏额外的附加信息。此外,CMF相比CDL,DCF和本文提出的混合模型要差。这可能与Agarwal,Chen和Long 2011中的讨论有关,也就是说,当辅助信息备用时,CMF可能无法正常运行。图3还显示,我们的混合模型比CDL和DCF实现更好的性能,因为它利用了我们的aSDAE模型。因此,通过将用户-物品评分矩阵的附加辅助信息和矩阵分解的aSDAE模型无缝结合,我们的混合模型可以更好地处理稀疏的用户-物品评分矩阵和备用辅助信息,并学习对于每个用户和物品来说,这是一个更有效的潜在因子,因此提供了更为精确的推荐。

6 结论

  在本文中,我们提出了一个综合了aSDAE和矩阵分解的混合协同过滤模型。我们的混合模型可以从用户物品评估矩阵和用户和物品的辅助信息中学习有效的潜在因子。此外,提出的深度学习模型aSDAE是SDAE的一个变形,可以有效地将辅助信息整合到学习到的潜在因子中。我们的实验结果表明,本文所提出的混合模型优于其他四种最先进的算法。作为未来工作的一部分,我们将调查其他深度学习模式来取代一个SDA,用于提高更多其他的性能,例如复现神经网络和卷积神经网络。

协同过滤法是一种推荐系统法,它基于用户历史行为数据,通过计用户之间的相似度,来预测用户对未知物品的喜好程度。协同过滤法主要分为两种:基于用户的协同过滤(UserCF)和基于物品的协同过滤(ItemCF)。 基于用户的协同过滤法(UserCF)是通过计用户之间的相似度,来预测用户对未知物品的喜好程度。具体来说,对于一个目标用户,找到和他兴趣相似的其他用户,然后将这些用户喜欢的物品推荐给目标用户。但是,UserCF法存在两个缺陷:一是用户数目很大时,计用户之间的相似度非常耗时;二是UserCF法存在“热门物品”和“长尾物品”问题,即只推荐热门物品或者只推荐长尾物品。 基于物品的协同过滤法(ItemCF)是通过计物品之间的相似度,来预测用户对未知物品的喜好程度。具体来说,对于一个目标用户,找到他喜欢的物品,然后找到和这些物品相似的其他物品,将这些相似的物品推荐给目标用户。相比于UserCF法,ItemCF法具有计复杂度低、推荐结果多样性高等优点,因此被广泛应用于推荐系统。 下面是一个基于物品的协同过滤法的示例代码: ```python # 假设有5个用户,4个物品 data = [ [5, 3, 0, 1], [4, 0, 4, 1], [1, 1, 5, 5], [1, 4, 1, 4], [0, 3, 4, 5] ] # 计物品之间的相似度 def item_similarity(data): item_num = len(data[0]) sim_matrix = [[0 for _ in range(item_num)] for _ in range(item_num)] for i in range(item_num): for j in range(i+1, item_num): item_sim = sum([1 for user_rating in data if user_rating[i]>0 and user_rating[j]>0]) # 计同时评价物品i和物品j的用户数 if item_sim > 0: sim_matrix[i][j] = sim_matrix[j][i] = item_sim / (sum([pow(user_rating[i]-user_rating[j], 2) for user_rating in data if user_rating[i]>0 and user_rating[j]>0]) ** 0.5) # 计物品i和物品j的相似度 return sim_matrix # 给用户推荐物品 def recommend(data, user_id, sim_matrix): item_num = len(data[0]) user_rating = data[user_id] scores = [0 for _ in range(item_num)] sim_scores = [0 for _ in range(item_num)] for i in range(item_num): if user_rating[i] == 0: for j in range(item_num): if user_rating[j] > 0: scores[i] += sim_matrix[i][j] * user_rating[j] # 计物品i的得分 sim_scores[i] += sim_matrix[i][j] # 计物品i的相似度之和 rankings = [(score/sim_scores[i], i) for i, score in enumerate(scores) if sim_scores[i] > 0] # 计物品的得分除以相似度之和,得到最终的推荐结果 rankings.sort(reverse=True) return rankings # 示例 sim_matrix = item_similarity(data) print(recommend(data, 0, sim_matrix)) # 给用户0推荐物品 ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值