🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
🖍foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟👋
文章目录
推荐引擎
推荐引擎是一种使用有关用户偏好和产品详细信息的可用信息来提供明智推荐的方法。推荐引擎的目标是了解一组项目之间的相似性模式和/或制定用户和项目之间的交互。
本章首先介绍推荐引擎的基础知识。然后,它讨论了各种类型的推荐引擎。接下来,本章将讨论如何使用推荐引擎向不同的用户推荐商品和产品,以及推荐引擎的各种限制。最后,我们将学习使用推荐引擎来解决现实世界的问题。
本章讨论了以下概念:
-
介绍推荐引擎
-
推荐引擎的类型
-
了解推荐系统的局限性
-
实际应用领域
-
一个实际的例子——创建一个推荐引擎来向订阅者推荐电影
在本章结束时,您应该能够了解如何使用推荐引擎根据一些偏好标准来推荐各种项目。
让我们从研究推荐引擎的背景概念开始。
介绍推荐系统
推荐系统代表了研究人员最初开发的用于预测用户最可能感兴趣的项目的方法。推荐系统对项目提供个性化建议的能力使其可能成为在线购买世界中最重要的技术。
在电子商务应用程序中使用时,推荐引擎使用复杂的算法来改善购物者的购物体验,并允许服务提供商根据用户的喜好定制产品。
推荐引擎的类型
通常,有三种不同类型的推荐引擎:
-
基于内容的推荐引擎
-
协同过滤引擎
-
混合推荐引擎
基于内容的推荐引擎
基于内容的推荐引擎的基本思想是推荐与用户之前表现出兴趣的项目相似的项目。基于内容的推荐引擎的有效性取决于我们量化一个项目与其他项目的相似性的能力。
让我们看看下面的图表。如果User 1已经阅读过Doc 1,那么我们可以向用户推荐Doc 2,类似于Doc 1 :
现在,问题是如何确定哪些项目彼此相似。让我们看看几种在不同项目之间寻找相似之处的方法。
寻找非结构化文档之间的相似之处
确定不同文档之间相似性的一种方法是首先处理输入文档。处理非结构化文档后得到的数据结构称为术语文档矩阵( TDM ),如下图所示:
TDM 将所有词汇表作为行,将所有文档作为列。它可用于根据所选距离度量确定哪些文档与其他文档相似。例如,谷歌新闻根据与用户已经表现出兴趣的新闻项目的相似性向用户推荐新闻。
一旦我们有了 TDM,就有两种方法可以量化文档之间的相似性:
-
使用频率计数:这意味着我们假设一个词的重要性与每个词的频率成正比。这是计算重要性的最简单方法。
-
使用 TFIDF ( Term Frequency-Inverse Document Frequency 的缩写):这是一个数字,用于计算每个单词在我们试图解决的问题的上下文中的重要性。它是两个项的倍数:
-
词频( TF ):这是一个词或一个词在文档中出现的次数。词频与单词的重要性直接相关。
-
逆文档频率( IDF ):首先,文档频率( DF ) 是包含我们正在搜索的术语的文档数量。与 DF 相反,IDF 为我们提供了一个单词所代表的唯一性的度量,并将其与其重要性相关联。
-
由于 TF 和 IDF 都在我们试图解决的问题的上下文中量化单词的重要性,因此它们的组合 TF-IDF 可以很好地衡量每个单词的重要性,并且是使用简单频率的更复杂的替代方案计数。
-
使用共现矩阵
这种方法是基于这样的假设,即如果两件商品大部分时间是一起购买的,那么它们很可能是相似的,或者至少属于通常一起购买的同一类别的商品。
例如,如果人们大部分时间都在使用剃须膏和剃须刀,那么如果有人购买了剃须刀,那么建议该人也会购买剃须膏是有道理的。
我们来分析一下这四位用户的历史购买模式:
Razor | Apple | Shaving cream | Bike | Hummus | |
Mike | 1 | 1 | 1 | 0 | 1 |
Taylor | 1 | o | 1 | 1 | 1 |
Elena | 0 | 0 | 0 | 1 | 0 |
Amine | 1 | 0 | 1 | 0 | 0 |
这将创建以下共现矩阵:
Razor | Apple | Shaving cream | Bike | Hummus | |
Razor | - | 1 | 3 | 1 | 1 |
Apple | 1 | - | 1 | 0 | 1 |
Shaving cream | 3 | 1 | - | 1 | 2 |
Bike | 1 | 0 | 1 | - | 1 |
Hummus | 1 | 1 | 2 | 1 | - |
前面的共现矩阵总结了一起购买两件商品的可能性。让我们看看如何使用它。
协同过滤推荐引擎
协同过滤的推荐是基于对用户历史购买模式的分析。基本假设是,如果两个用户对几乎相同的项目表现出兴趣,我们可以将两个用户归类为相似。换句话说,我们可以假设以下内容:
-
如果两个用户的购买历史重叠超过一个阈值,我们可以将他们归类为相似用户。
-
查看相似用户的历史,购买历史中不重叠的商品通过协同过滤成为未来推荐的基础。
例如,让我们看一个具体的例子。我们有两个用户Mike和Elena,如下图所示:
请注意以下事项:
-
Mike 和 Elena 都对完全相同的文档Doc1和Doc2表现出了兴趣。
-
根据他们相似的历史模式,我们可以将他们都归类为相似用户。
-
如果 Elena 现在阅读Doc3,那么我们也可以向 Mike推荐Doc3 。
让我们假设 Elena 和 Mike 对Doc1表现出兴趣,这是关于摄影的(因为他们都喜欢摄影)。此外,他们两人都对关于云计算的Doc2表现出兴趣,因为他们两人都对该主题感兴趣。基于协同过滤,我们将他们归类为相似用户。现在 Elena 开始阅读Doc3杂志,这是一本关于女性时尚的杂志。如果我们遵循协同过滤算法,我们会建议 Mike 阅读它,他可能对它不太感兴趣。
请注意,协同过滤算法不依赖于任何其他信息,是一个独立的算法,基于用户行为的变化和协同推荐。
混合推荐引擎
到目前为止,我们已经讨论了基于内容和基于协同过滤的推荐引擎。两种类型的推荐引擎可以结合起来创建一个混合推荐引擎。为此,我们遵循以下步骤:
-
生成项目的相似度矩阵。
-
生成用户的偏好矩阵。
-
生成建议。
让我们一一研究这些步骤。
生成项目的相似度矩阵
在混合推荐中,我们首先使用基于内容的推荐创建项目的相似度矩阵。这可以通过使用共现矩阵或使用任何距离度量来量化项目之间的相似性来完成。
假设我们目前有五个项目。使用基于内容的推荐,我们生成了一个矩阵来捕捉项目之间的相似性,如下所示:
让我们看看如何将这个相似度矩阵与偏好矩阵结合起来生成推荐。
生成用户的参考向量
根据系统每个用户的历史,我们将生成一个偏好向量来捕捉这些用户的兴趣。
假设我们要为名为KentStreetOnline的在线商店生成推荐,该商店销售 100 件独特的商品。KentStreetOnline 很受欢迎,拥有 100 万活跃用户。需要注意的是,我们只需要生成一个维度为 100 x 100 的相似度矩阵。我们还需要为每个用户生成一个偏好向量;这意味着我们需要为 100 万用户中的每一个生成 100 万个偏好向量。
性能向量的每个条目代表一个项目的偏好。第一行的值意味着Item 1的偏好权重是4。例如,第二行的值意味着对Item 2没有偏好。
这在下图中以图形方式显示:
现在,让我们看看如何根据相似度矩阵 S 和用户偏好矩阵 U 生成推荐。
生成建议
为了提出建议,我们可以将矩阵相乘。用户更有可能对经常与他们给予高评价的项目同时出现的项目感兴趣:
矩阵[S] x 矩阵[U] = 矩阵[R]
此计算以图形方式显示在下图中:
为每个用户生成一个单独的结果矩阵。推荐矩阵Matrix[R]中的数字量化了用户对每个项目的预测兴趣。例如,在结果矩阵中,第四项的数字最高,为 58。因此,强烈建议此特定用户使用此项目。
现在,让我们看看不同推荐系统的局限性。
了解推荐系统的局限性
推荐引擎使用预测算法向大量用户推荐推荐。这是一项强大的技术,但我们应该意识到它的局限性。让我们看看推荐系统的各种限制。
冷启动问题
很明显,要使协同过滤起作用,我们需要有关于用户偏好的历史数据。对于新用户,我们可能没有任何数据,因此我们的用户相似度算法将基于可能不准确的假设。对于基于内容的推荐,我们可能无法立即获得有关新项目的详细信息。拥有关于项目和用户的数据以生成高质量推荐的这种要求称为冷启动问题。
元数据要求
基于内容的方法需要明确的项目描述来衡量相似性。这种明确详细的描述可能不可用,从而影响预测的质量。
数据稀疏问题
在大量项目中,用户只会对少数项目进行评分,从而导致用户/项目评分矩阵非常稀疏。
社会影响造成的偏见
社会影响力可以在推荐者中发挥重要作用。社会关系可以看作是影响用户偏好的一个因素。朋友倾向于购买相似的物品并给出相似的评价。
数据有限
有限数量的评论使得推荐系统难以准确衡量用户相似度。
实际应用领域
让我们看看推荐系统在实际世界中的应用:
-
推荐 Netflix 上三分之二的电影。
-
亚马逊 35% 的销售额来自推荐。
-
在 Google 新闻上,推荐产生的点击率提高了 38%。
-
尝试预测用户对某个项目的偏好是基于过去对其他项目的评级。
-
他们可以根据大学生的需求和喜好向他们推荐课程。
-
他们可以将简历与在线工作门户上的工作相匹配。
现在,让我们尝试使用推荐引擎来解决实际问题。
实际示例——创建推荐引擎
让我们构建一个可以向一群用户推荐电影的推荐引擎。我们将使用明尼苏达大学 GroupLens 研究小组汇总的数据。
按着这些次序:
1.首先,我们将导入相关的包:
import pandas as pd
import numpy as np
2.现在,让我们导入user_id和item_id数据集:
df_reviews = pd.read_csv('reviews.csv')
df_movie_titles = pd.read_csv('movies.csv',index_col=False)
3.我们通过电影 ID 合并两个 DataFrame:
df = pd.merge(df_users, df_movie_titles, on='movieId')
运行上述代码后, df DataFrame的 header如下所示:
列的详细信息如下:
-
userid :每个用户的唯一 ID
-
movieid : 每部电影的唯一 ID
-
rating:每部电影的评分从 1 到 5
-
timestamp : 电影评分的时间戳
-
title: 电影的标题
-
genres:电影的流派
4.要查看输入数据的汇总趋势,让我们使用 和 列计算每部电影评分的平均值groupby和title计数rating:
.5.现在让我们为推荐引擎准备数据。为此,我们将数据集转换为矩阵,该矩阵将具有以下特征:
-
电影标题将是列。
-
User_id将是索引。
-
评级将是价值。
我们将使用pivot_tableDataFrame 的函数来完成它:
movie_matrix = df.pivot_table(index='userId', columns='title', values='rating')
请注意,前面的代码将生成一个非常稀疏的矩阵。
6.现在,让我们使用我们创建的这个推荐矩阵来推荐电影。为此,让我们考虑一个看过电影Avatar (2009)的特定用户。首先,我们将找到所有对Avatar (2009)表现出兴趣的用户:
Avatar_user_rating = movie_matrix['Avatar (2009)']
Avatar_user_rating = Avatar_user_rating.dropna()
Avatar_user_rating.head()
7.现在,让我们尝试推荐与Avatar (2009)相关的电影。为此,我们将计算Avatar_user_ratingDataFrame 与的相关性movie_matrix,如下所示:
similar_to_Avatar=movie_matrix.corrwith(Avatar_user_rating)
corr_Avatar = pd.DataFrame(similar_to_Avatar, columns=['correlation'])
corr_Avatar.dropna(inplace=True)
corr_Avatar = corr_Avatar.join(df_ratings['number_of_ratings'])
corr_Avatar.head()
这给出了以下输出:
这意味着我们可以将这些电影用作对用户的推荐。
概括
在本章中,我们学习了推荐引擎。我们根据我们试图解决的问题研究了正确的推荐引擎的选择。我们还研究了如何为推荐引擎准备数据以创建相似度矩阵。我们还了解了如何使用推荐引擎来解决实际问题,例如根据用户过去的模式向用户推荐电影。