协同过滤分为基于用户的协同过滤(User-based-Collaborative Filtering)和基于商品的协同过滤(Item-based-Collaborative Filtering)

大致流程如下:

  1. 收集用户的行为数据:通过记录用户的历史行为数据,例如购买历史、评分数据、浏览历史等,来了解用户的兴趣爱好和行为习惯。
  2. 建立用户-商品的共现矩阵: 基于用户或者物品的历史数据生成共现矩阵,行代表用户,列代表商品。
  3. 计算相似度:计算用户之间或者商品之间的相似度,来确定用户之间或者商品之间的关系。常见的相似度计算方法余弦相似度、皮尔逊相关系数
  4. 找到相似的用户或商品:基于相似度计算的结果,找到与目标用户或者商品相似的用户或商品,一般是得到topk的集合
  5. 如果是用户相似的话,根据topn个相似用户的加权平均对目标用户进行预测(或者预测评分);如果是物品的话得到top k个相似物品的集合,根据相似度进行排名。

userCF的特点和缺点:
特点:

  1. 实现简单
  2. 可解释性强:就是通过用户的相似性在给其他用户来推荐商品。
  3. 可拓展性:有新用户进来时不需要重新训练,只要计算相似度就可以了。
  4. 易于发现热点,追踪热点趋势(新闻领域)

缺点:

  1. 计算和存储开销大:在互联网场景中,用户的数量往往远大于物品的数量,二UserCF需要维护用户相似度矩阵以便快速找出topn个相似用户。该用户相似度矩阵的存储开销非常大,随着业务发展,用户数的增长会导致相似度矩阵的存储空间以协同过滤算法实现java示例 协同过滤算法流程_相似度增长。
  2. 数据稀疏性:对于只有几次购买行为的用户,找到相似用户的准确性非常低。
  3. 容易推荐热门物品,单一化。容易忽略不那么热门的商品,导致结果缺乏多样性。

ItemCF特点和缺点:
特点:

  1. 实现简单
  2. 适合兴趣变化趋于稳定的应用,用户在一段时间内寻找相似的商品可以用ItemCF

缺点:

  1. 物品冷启动问题:当一个新商品推出市场时,由于没有足够的历史评价数据,所以ItemCF无法为其推荐。
  2. 稀疏性:真实场景中,用户和物品的数量通常非常大,但是用户与物品之间的交互数据通常很少,因此ItemCF很容易面对数据稀疏的问题,导致推荐效果不佳
  3. 对肠胃物品推荐效果不佳:协同过滤都容易受到热门物品的影响,对于长尾物品推荐效果不如其他算法,导致长尾物品流量下降

总之,协同过滤是一个非常直观,可解释性强的模型,但并不具备很强的泛化性。因此,热门物品具有很强的头部效应,容易和大量物品产生相似性;而尾部的物品由于特征向量稀疏,很少与物品产生相似性,所以很少被推荐。

为了解决上述问题,提出了矩阵分解。