使用 Python 构建混合推荐系统

2024年8月29日 | 阅读 10 分钟

通过组合两个或多个不同的推荐系统,混合推荐系统提供了一种全面而周全的方法。它通过利用各种方法的优势并提供有益的用户体验,力求为客户提供更精确、更多样化和更个性化的建议。如果您想学习如何创建混合推荐系统,本教程将是您的不二之选。在本教程中,我将指导您使用 Python 创建一个混合推荐系统。

什么是混合推荐系统?

为了向客户提供更准确、更多样化的推荐,混合推荐系统整合了不同的推荐算法。它通过利用多种技术的优势(如协同过滤和基于内容的过滤)来改进推荐过程,以克服它们的缺点。

您应该熟悉协同过滤和基于内容的过滤这两个术语。为了生成推荐,协同过滤会检查用户-项目交互,并找到用户或项目之间的共性。它推荐与具有相似偏好的消费者或用户喜欢或使用的产品。然而,对于互动数据很少的专业或新产品,它可能会遇到困难。

相反,基于内容的过滤侧重于项目的特征和属性,根据用户的偏好向消费者推荐相似的项目。它寻找诸如品牌名称、产品描述、类别名称和用户配置文件等特征。

然而,它可能无法充分捕捉用户的多样化偏好,并产生不太多样化的推荐。

在这种情况下,混合推荐系统就派上用场了。通过将协同过滤和基于内容的过滤集成到混合方法中,我们可以克服它们的缺点。虽然基于内容的过滤部分考虑了每个项目的独特特征和属性,但基于用户群体的过滤部分利用了公众的集体知识。当用户-项目交互不常见或需要个性化建议时,这种组合使系统能够提供更准确的推荐。

到目前为止,您已经了解了什么是混合推荐系统。在下一部分中,我将指导您使用 Python 创建混合推荐系统。

数据探索与分析

我们可以用于此任务的数据集如下。

混合推荐的数据集概述

电子商务系统必须识别个人品味并提供个性化建议,以提高时尚行业的消费者满意度和销售额。通过使用混合推荐系统,我们可以为客户提供更具体、更量身定制的推荐。

该数据集包含一家在线服装店的用户-产品交互信息。数据集具有以下特征

  • 用户 ID:每个用户的唯一标识符。
  • 项目 ID:每个产品都有唯一的标识号。
  • 产品名称:物品的名称或摘要。
  • 品牌:商品的制造商或名称。
  • 类别:产品的正确类别(例如,男士时尚或女士时尚)。
  • 价格:商品的价格。
  • 消费者对产品的评分(1 到 5 分)。
  • 颜色:物品的色调。
  • 尺码:物品的测量值。

您的目标是开发一个混合推荐系统,结合协同过滤和基于内容的方法。通过协同过滤可以找到彼此相似的人,然后可以利用这些信息推荐不同相似用户喜欢的产品。相反,您可以通过检查项目标题、品牌和类别等详细信息来利用基于内容的方法来比较不同产品的优点。

主表(仅供参考)

用户 ID项目 ID产品名称品牌类别价格评级颜色大小
191连衣裙阿迪达斯男装401.043159红色XLL
972鞋子H&M女装544.044414红色L
253连衣裙阿迪达斯女装443.337935黄色XLL
574鞋子ZARA男装431.049543黑色S
795T恤阿迪达斯男装794.304773红色M
986连衣裙阿迪达斯男装471.379544黄色L
167牛仔裤古驰男装371.35475黑色XLL
638运动衫ZARA童装444.340303蓝色XLL
969运动衫H&M男装534.444154绿色XLL
3610T恤ZARA童装554.093434黑色XLL
6911T恤阿迪达斯男装511.140955红色S
8712运动衫古驰童装914.499734黄色M
913牛仔裤耐克童装351.401194红色M
5014连衣裙ZARA女装344.941004黑色L
3115鞋子ZARA男装543.470414黄色M
3716连衣裙阿迪达斯女装471.444714蓝色S
4117连衣裙古驰女装751.450434蓝色XLL
1518牛仔裤古驰女装734.495445红色XLL
8419鞋子古驰女装543.475341黑色M
5620连衣裙古驰男装533.755445绿色L
8721牛仔裤H&M男装544.409557黄色S
5622牛仔裤古驰女装594.545434绿色L
6023牛仔裤ZARA童装914.074745黄色M
6424牛仔裤ZARA女装154.499754黄色XLL
6525运动衫H&Ms童装351.040493绿色S
2626连衣裙Gucci's女装414.745149绿色S
8227T恤阿迪达斯童装743.301743红色L
8728鞋子ZARA女装344.544503黄色L
9829鞋子古驰女装554.940955黄色M

Python:混合推荐系统

让我们通过加载数据集和所需的 Python 库来开始创建混合推荐系统的过程

源代码片段

输出

   User ID  Item ID Product Name   Brand         Category  Price    Rating  \
0       19           1        Dress  Adidas    Men Fashion     40  1.043159   
1       97           2        Shoes     H&M  Women Fashion     82  4.026416   
2       25           3        Dress  Adidas  Women Fashion     44  3.337938   
3       57           4        Shoes    Zara    Men Fashion     23  1.049523   
4       79           5      T-shirt  Adidas    Men Fashion     79  4.302773   
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -
    Color Size  
0   Red   XLL  
1   Red    L  
2  Yellow   XLL  
3   Black    S  
4   Red    M  

解释:因此,统计数据基于女装、男装和童装。我们的目标是设计两个推荐系统,分别采用协同过滤和基于内容的过滤,然后合并这两个系统以生成混合推荐系统。

让我们开始导入我们将在任务其余步骤中需要的 Python 库

源代码片段

解释:我们在上面的代码中导入了 Surprise 库,您可能需要进一步熟悉它。为了使用 SVD 算法,加载了 surprise 库。SVD 代表奇异值分解。它是一种矩阵分解方法,通常用于协同过滤算法。您可以通过以下命令在计算机上安装它

  • 要在命令行或终端中使用,请键入 pip 并安装 sci-kit-surprise。
  • 要在 Colab Notebook 中使用 sci-kit-surprise,请键入!pip install。

第一种方法:基于内容的过滤

让我们继续开发一个利用基于内容过滤的推荐系统

源代码片段

解释:混合推荐系统中的基于内容过滤部分已在上面的代码中实现。我们首先从数据集中选择了项目 ID、名称、公司、类别、颜色、尺寸和其他相关属性。然后,对于每个产品,我们将所有这些属性聚合到一个名为“Content”的列中。

然后使用词频-逆文档频率 (TF'S-IDF1) 向量化器将材料转换为 TF'S-IDF1 特征矩阵。此矩阵显示了每个单词在与整个语料库相比时的内容重要性。

然后使用余弦相似度度量来确定基于其内容的项目之间的相似度。基于其内容,此相似度矩阵中的产品彼此相似。

我们首先在相似度矩阵中找到所需产品的索引,以获得基于内容的推荐。然后,在按降序对相似度分数进行排序后,我们选择了 N 个最相似的产品。最后,我们返回了推荐的项目 ID。

第二种方法:协同过滤

现在,让我们使用协同过滤创建一个推荐系统。

源代码片段

解释:我们在上面的代码中使用了奇异值分解方法来创建混合推荐系统的协同过滤部分。

首先使用数据集初始化并训练了 SVD 方法。此阶段包括分解用户-项目评分矩阵,以识别影响用户偏好的更深层次的趋势和潜在因素。

下一步是开发一个需要包含在训练集中的用户-项目对的测试集,以提供协同过滤推荐。此测试集已过滤,仅包含属于由 user__id 标识的目标用户的项目。

然后使用训练好的 SVD 模型对测试集对象的评分进行了预测。这些预测是对用户会给产品打多少分的估计。

然后按预测评分的降序排列预测。我们选择评分最高的 N 个产品作为用户的协同过滤推荐。

最后,混合方法

现在,让我们采用混合方法来合并基于内容和协同过滤技术,以创建一个推荐系统

源代码片段

解释:我们在上面的代码中通过合并基于内容和协同过滤的方法来构建混合推荐系统。

用户 ID、项目 ID 以及所需的 top n 推荐数量是 get__hybrid__recommendations 方法的输入。

它首先使用 get__content__based__recommendations 方法获取给定 product__id 的基于内容的推荐列表。这些推荐基于给定产品特征与其他数据集项目特征的相似程度。

然后,它使用 get__group__filtering__recommendations 方法获取给定 user__id 的协同过滤推荐列表。这些推荐是通过借鉴过去的用户-项目交互并根据先前的用户行为推断用户偏好而得出的。

然后通过将两个列表合并在一起来组合来自协同过滤和基于内容过滤的推荐。它确保混合推荐包含基于内容和基于用户偏好的协同过滤推荐。

要根据用户当前正在浏览的项目提供产品推荐,请执行以下步骤

源代码片段

输出

Hybrid Recommendations for User 6 based on Product 11:
1- - - > Item ID: 9281
1. - - - > Item ID: 9218
2. - - - >Item ID: 1311
2- - - >. Item ID: 1311
3. - - - >Item ID: 4511
3. - - - > Item ID: 4511
4. - - - > Item ID: 8371
4. - - - >Item ID: 8371
5. - - - >Item ID: 8751
5. - - - > Item ID: 8751
6. - - - >Item ID: 5941
6. - - - > Item ID: 5941
7. - - - >Item ID: 14631
7. - - - > Item ID: 14631
8. - - - >Item ID: 16881
8. - - - >Item ID: 16881
9. - - - >Item ID: 6011
9. - - - >Item ID: 6011
10. - - - >Item ID: 15616
10. - - - >Item ID: 15661

总结

因此,这就是如何使用 Python 构建混合推荐系统。为了向客户提供更准确、更多样化的推荐,混合推荐系统整合了不同的推荐算法。它通过利用多种技术的优势(如协同过滤和基于内容的过滤)来改进推荐过程,以克服它们的缺点。希望您喜欢这篇关于使用 Python 构建混合推荐系统的教程。