【机器学习300问】52、什么是基于物品的协同过滤算法?

一、 基于物品的协同过滤算法定义

(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)

Sim(M1, M2) = (M1_{\text{Alice}} \times M2_{\text{Alice}}) + (M1_{\text{Bob}} \times M2_{\text{Bob}}) + (M1_{\text{Carol}} \times M2_{\text{Carol}}) + (M1_{\text{Dave}} \times M2_{\text{Dave}})=4 \times 5 = 20

        对于Bob、Carol和Dave,由于M1和M2至少有一部没有评分,所以这些用户的贡献为0,乘以0得0,所以就只剩下4x5了。

  • 计算向量M1和向量M2的欧几里得范数(向量长度)

        每个电影向量的欧几里得范数是该电影所有评分的平方和,然后取平方根。范数计算也很简单:

\|M1\| = \sqrt{(M1_{\text{Alice}})^2 + (M1_{\text{Bob}})^2} = \sqrt{4^2 + 5^2} = \sqrt{16 + 25} = \sqrt{41}

\|M2\| = \sqrt{(M2_{\text{Alice}})^2 + (M2_{\text{Carol}})^2 + (M2_{\text{Dave}})^2} = \sqrt{5^2 + 2^2 + 3^2} = \sqrt{25 + 4 + 9} = \sqrt{38}

  • 带入公式得到余弦相似度

Sim(M1,M2)= \frac{M1 \cdot M2}{\|M1\| \cdot \|M2\|}

Sim(M1,M2) = \frac{20}{\sqrt{41} \times \sqrt{38}}\approx 0.5065

        同理可以计算出电影M1与M3的余弦相似度\frac{15}{\sqrt{41} \times \sqrt{50}}\approx 0.3313

(3)选择相似物品

        假设现在来了一个新用户Eden,他只看了电影M1并给出了高分,算法会找出与电影M1相似度最高的几部电影

(4)生成推荐列表

        根据相似度计算的结果,结合用户Eden对电影M1的评分,可以进一步调整相似电影的推荐权重,生成一个推荐列表,如:

推荐电影 调整后的推荐度
电影M2 0.5065 * Eden对M1的评分
电影M3 0.3313 * Eden对M1的评分

(5)进行推荐

        系统会将上述推荐列表按照调整后的推荐度排序,然后呈现给用户Eden作为个性化推荐结果,建议他观看电影M2,因为它是与电影M2最相似且经过权重调整后排名靠前的电影。同时,为了多样性和新颖性,还可以结合其他策略(如热门度、多样性指标等)进行优化处理。

三、基于物品的协同过滤算法有什么优缺点?

(1)优点

  1. 避免用户增长:相比于基于用户的协同过滤,物品的数量通常远小于用户数量,因此计算物品之间的相似度可以更有效地处理大规模数据集,避免了因用户数量增长带来的计算复杂度剧增问题。
  2. 推荐的准确性:由于直接依据物品间的共现情况和用户行为模式,推荐的准确性相对较高。
  3. 推荐的稳定性:物品本身的特点相较于用户兴趣更稳定,因此基于物品的协同过滤算法推荐结果的稳定性较好。
  4. 预计算与缓存:物品相似度矩阵可以在一定程度上预先计算并保存,后续推荐过程可以直接调用,提高了实时响应速度。

(2)缺点

  1. 新物品问题:新加入系统的物品如果没有用户行为数据,则无法与其他物品建立相似度,因此在引入新物品时会出现冷启动问题,难以立即为新物品提供有效推荐。
  2. 时效性较弱:对于时效性要求较高的场景,如新闻、实时更新内容等,物品间的相似度随时间变化较大,传统的基于物品的协同过滤可能无法快速适应内容的变化。
  3. 计算复杂性:与基于用户的算法相比,虽然物品的相对数量可能更小,但是计算物品之间的相似度依旧是一个计算密集型的过程,尤其是在物品集很大的情况下。
  4. 长尾效应:过于依赖用户历史行为可能不利于发现新的、独特或创新的物品,因为这些非主流(长尾)物品可能没有足够的历史数据支持其相似度计算。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 22:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 22:24:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 22:24:04       82 阅读
  4. Python语言-面向对象

    2024-03-25 22:24:04       91 阅读

热门阅读

  1. 【MySql】MySQL表的结构

    2024-03-25 22:24:04       35 阅读
  2. AI大模型学习: 理论基础、训练优化与应用前景

    2024-03-25 22:24:04       39 阅读
  3. 7. 模型测试 - Simulink Test 功能测试

    2024-03-25 22:24:04       41 阅读
  4. QTimer

    2024-03-25 22:24:04       32 阅读
  5. LeetCode 第390场周赛个人题解

    2024-03-25 22:24:04       42 阅读
  6. VMware Workstation常见问题

    2024-03-25 22:24:04       37 阅读
  7. 教程1_图像入门

    2024-03-25 22:24:04       38 阅读
  8. 模型权重下载方法

    2024-03-25 22:24:04       45 阅读
  9. 全球化浪潮下的网络技术与安全策略

    2024-03-25 22:24:04       40 阅读