一、 基于物品的协同过滤算法定义
(1)协同过滤的两种形式
- 基于用户的协同过滤:假设你在使用一款音乐应用,系统会观察到你和另一个用户A都喜欢同一组乐队和歌曲。基于此,当用户A喜欢一首你还没听过的歌时,系统可能会推断你也可能喜欢这首歌,并将其推荐给你。
- 基于物品的协同过滤:系统会找出具有相似被喜欢模式的商品。比如,在电商网站上,如果你喜欢的商品A和商品B经常同时被不同用户购买,那么当你购买了商品A后,系统会推荐商品B给你。
(2)基于物品的协同过滤
基于物品的协同过滤算法(Item-Based Collaborative Filtering, 简称ItemCF)是一种推荐系统算法,它的核心思想是基于用户历史的物品评分数据,计算物品之间的相似度,并利用这些相似度来进行推荐。
基于物品的协同过滤算法并不依赖于物品的内容属性,而是利用用户行为数据计算出物品之间的相似性来实现个性化推荐,这种做法可以有效解决新用户冷启动问题,并且通常能够提供较为稳定的推荐效果。
二、基于物品的协同过滤算法的步骤
(1)收集用户行为数据
假设我们正在构建一个流媒体平台的电影推荐系统,使用基于物品的协同过滤算法。用户-物品评分矩阵如下:
用户/物品 | 电影M1 | 电影M2 | 电影M3 |
---|---|---|---|
Alice | 4 | 5 | NaN |
Bob | 5 | NaN | 3 |
Carol | NaN | 2 | 4 |
Dave | NaN | 3 | 5 |
在这个矩阵中,每一行代表一个用户,每一列代表一部电影,矩阵中的数值代表用户对相应电影的评分(0到5分)。NaN则表示用户未对该电影进行评分或观看。
(2)计算物品相似度
针对每部电影,计算它与其他电影的相似度。例如,电影M1和电影M2的相似度计算。这里可以采用余弦相似度或者其他合适的度量方式。关于余弦相似度是什么?想深度了解的友友们可以看看我之前写的文章:【机器学习300问】51、余弦相似度一般用在哪儿?
- 计算点积 (M1 · M2)
对于Bob、Carol和Dave,由于M1和M2至少有一部没有评分,所以这些用户的贡献为0,乘以0得0,所以就只剩下4x5了。
- 计算向量M1和向量M2的欧几里得范数(向量长度)
每个电影向量的欧几里得范数是该电影所有评分的平方和,然后取平方根。范数计算也很简单:
- 带入公式得到余弦相似度
同理可以计算出电影M1与M3的余弦相似度
(3)选择相似物品
假设现在来了一个新用户Eden,他只看了电影M1并给出了高分,算法会找出与电影M1相似度最高的几部电影
(4)生成推荐列表
根据相似度计算的结果,结合用户Eden对电影M1的评分,可以进一步调整相似电影的推荐权重,生成一个推荐列表,如:
推荐电影 | 调整后的推荐度 |
---|---|
电影M2 | 0.5065 * Eden对M1的评分 |
电影M3 | 0.3313 * Eden对M1的评分 |
(5)进行推荐
系统会将上述推荐列表按照调整后的推荐度排序,然后呈现给用户Eden作为个性化推荐结果,建议他观看电影M2,因为它是与电影M2最相似且经过权重调整后排名靠前的电影。同时,为了多样性和新颖性,还可以结合其他策略(如热门度、多样性指标等)进行优化处理。
三、基于物品的协同过滤算法有什么优缺点?
(1)优点
- 避免用户增长:相比于基于用户的协同过滤,物品的数量通常远小于用户数量,因此计算物品之间的相似度可以更有效地处理大规模数据集,避免了因用户数量增长带来的计算复杂度剧增问题。
- 推荐的准确性:由于直接依据物品间的共现情况和用户行为模式,推荐的准确性相对较高。
- 推荐的稳定性:物品本身的特点相较于用户兴趣更稳定,因此基于物品的协同过滤算法推荐结果的稳定性较好。
- 预计算与缓存:物品相似度矩阵可以在一定程度上预先计算并保存,后续推荐过程可以直接调用,提高了实时响应速度。
(2)缺点
- 新物品问题:新加入系统的物品如果没有用户行为数据,则无法与其他物品建立相似度,因此在引入新物品时会出现冷启动问题,难以立即为新物品提供有效推荐。
- 时效性较弱:对于时效性要求较高的场景,如新闻、实时更新内容等,物品间的相似度随时间变化较大,传统的基于物品的协同过滤可能无法快速适应内容的变化。
- 计算复杂性:与基于用户的算法相比,虽然物品的相对数量可能更小,但是计算物品之间的相似度依旧是一个计算密集型的过程,尤其是在物品集很大的情况下。
- 长尾效应:过于依赖用户历史行为可能不利于发现新的、独特或创新的物品,因为这些非主流(长尾)物品可能没有足够的历史数据支持其相似度计算。