推荐系统

定义

推荐的基本思路是根据历史数据比如用户以往的喜好或者相似用户的喜好来预测用户未来的喜好。基本假设是:(1)用户的喜好是会保持的并且随着时间而缓慢改变。(2)拥有相同品味的用户对与一个项目的打分也是相似的。因此可以根据以往的历史数据来进行推荐。

与搜索的不同:搜索的数据不是根据用户的资料而定制的,给出的答案是与搜素查询语句相关联的结果。

推荐算法

基于内容的方法

基于内容的方法基于这样一个事实:一个用户的兴趣应该和被推荐物品的描述想匹配。核心思路是找到用户资料与物品之间的相似度,推荐相似度高的物品。

步骤为:

  • 描述将被推荐的物品I
  • 建立用户个人资料U来描述用户喜欢的物品
  • 比较物品和用户个人资料来决定推荐的物品

用户个人资料与物品的描述可以根据关键词进行向量化。使用例如TF-IDF的方法将物品与个人资料向量话后,就可以计算两者的相似度了。

余弦相似度

使用预先相似度计算这两个向量的相似度。对与两个n维向量X和Y其余弦相似度为:

分子是点乘,$||X||=\sqrt {x_1^2+x_2^2+\dots+x_n^2}$ 是向量的欧几里得范数,也就是向量的长度。

协同过滤算法

协同过滤Collaborative Filtering有两中假设

  • 基于用户的协同过滤:假设之前对各物品打分相似的用户对于一个新的物品的打分也是相似的
  • 基于物品的协同过滤:假设两个物品的用户打分是相似的,那么一个新用户对二者的打分也是相似的。

算法的步骤是:

  • 对所有的用户或物品根据他们与当前的用户或物品的相似度来进行赋权。
  • 选择相邻的用户或者物品的一个自己作为推荐
  • 对于一个用户对一个具体的物品的打分,使用相邻的用户对该物品(或者与该物品相似物品)的打分来预测。
  • 推荐拥有最高预测打分值的物品。

用户/物品之间的相似度可以用余弦相似度或者皮尔森相关系数。

最终的打分的预测更新为:

用户u对物品i的打分有原来的该用户的平均打分$\bar r_u$与和该用户最相似的用户一起决定。

例子

为了预测Jane对Aladdin的打分,第一步首先计算每个用户对电影的平均打分。第二步计算其他4个用户与Jane 的相似度,使用的是余弦相似度并且其他用户对Aladdin的打分不算进去,因此用的是除了Aladdin外的3部电影来计算的。计算出来选择与Jane最相似的2个用户Joe、Jorge。

根据前面两部计算的结果计算Jane对Aladdin的打分。

推荐系统的评测

主要使用精确率,召回率,F1-Score3个指标来进行评价。

F1-Score的计算方式为:

精确率表示所有相关的物品中被推荐出来的比例,召回率表示所有推荐的物品中实际相关的比例,F1-Score则是二者的总体评价。