在Python中实现你自己的推荐系统
admin
2023-07-31 00:46:14
0

现今,推荐系统被用来个性化你在网上的体验,告诉你买什么,去哪里吃,甚至是你应该和谁做朋友。人们口味各异,但通常有迹可循。人们倾向于喜欢那些与他们所喜欢的东西类似的东西,并且他们倾向于与那些亲近的人有相似的口味。推荐系统试图捕捉这些模式,以助于预测你还会喜欢什么东西。电子商务、社交媒体、视频和在线新闻平台已经积极的部署了它们自己的推荐系统,以帮助它们的客户更有效的选择产品,从而实现双赢。

两种最普遍的推荐系统的类型是基于内容协同过滤(CF)。协同过滤基于用户对产品的态度产生推荐,也就是说,它使用“人群的智慧”来推荐产品。与此相反,基于内容的推荐系统集中于物品的属性,并基于它们之间的相似性为你推荐。一般情况下,协作过滤(CF)是推荐引擎的主力。该算法具有能够自身进行特征学习的一个非常有趣的特性,这意味着它可以开始学习使用哪些特性。CF可以分为基于内存的协同过滤基于模型的协同过滤。在本教程中,你将使用奇异值分解(SVD)实现基于模型的CF和通过计算余弦相似实现基于内存的CF。

我们将使用MovieLens数据集,它是在实现和测试推荐引擎时所使用的最常见的数据集之一。它包含来自于943个用户以及精选的1682部电影的100K个电影打分。你应该添加解压缩的movielens数据文件夹你的notebook目录下。你也可以在这里下载数据集。

12     import numpy as np    import pandas as pd

读入u.data文件,它包含完整的数据集。你可以 file, which contains the full dataset. You can在这里阅读该数据集的简要说明。

12     header = [\’user_id\’, \’item_id\’, \’rating\’, \’timestamp\’]    df = pd.read_csv(\’ml-100k/u.data\’, sep=\’\\t\’, names=header)

先看看数据集中的前两行。接下来,让我们计算唯一用户和电影的数量。

123     n_users = df.user_id.unique().shape[0]    n_items = df.item_id.unique().shape[0]    print \’Number of users = \’ + str(n_users) + \’ | Number of movies = \’ + str(n_items)  

1     Number of users = 943 | Number of movies = 1682

你可以使用scikit-learn库将数据集分割成测试和训练。Cross_validation.train_test_split根据测试样本的比例(test_size),本例中是0.25,来将数据混洗并分割成两个数据集。

12     from sklearn import cross_validation as cv    train_data, test_data = cv.train_test_split(df, test_size=0.25)

基于内存的协同过滤

基于内存的协同过滤方法可以分为两个主要部分:用户-产品协同过滤产品-产品协同过滤。一个用户-产品协同过滤将选取一个特定的用户,基于打分的相似性发现类似于该用户的用户,并推荐那些相似用户喜欢的产品。相比之下,产品-产品协同过滤会选取一个产品,发现喜欢该产品的用户,并找到这些用户或相似的用户还喜欢的其他的产品。输入一个产品,然后输出其他产品作为推荐。

  • 用户-产品协同过滤: “喜欢这个东西的人也喜欢……”
  • 产品-产品协同过滤: “像你一样的人也喜欢……”

在这两种情况下,从整个数据集构建一个用户-产品矩阵。由于你已经将数据拆分到测试集和训练集,那么你将需要创建两个[943 x 1682]矩阵。训练矩阵包含75%的打分,而测试矩阵包含25%的打分。

用户-产品矩阵的例子: blog8

在构建了用户-产品矩阵后,计算相似性并创建一个相似性矩阵。

产品-产品协同过滤中的产品之间的相似性值是通过观察所有对两个产品之间的打分的用户来度量的。

对于用户-产品协同过滤,用户之间的相似性值是通过观察所有同时被两个用户打分的产品来度量的。

通常用于推荐系统中的距离矩阵是余弦相似性,其中,打分被看成n维空间中的向量,而相似性是基于这些向量之间的角度进行计算的。用户am的余弦相似性可以使用下面的公式进行计算,其中,获取用户向量的点积,然后用向量的欧几里得长度的乘积来除以它。

要计算产品mb之间的相似性,使用公式:

第一步是创建用户-产品矩阵。由于你既有测试数据,又有训练数据,那么你需要创建两个矩阵。

12345678     #Create two user-item matrices, one for training and another for testing    train_data_matrix = np.zeros((n_users, n_items))    for line in train_data.itertuples():        train_data_matrix[line[1]1, line[2]1] = line[3]       test_data_matrix = np.zeros((n_users, n_items))    for line in test_data.itertuples():        test_data_matrix[line[1]1, line[2]1] = line[3]

你可以使用sklearnpairwise_distances函数来计算余弦相似性。注意,输出范围从0到1,因为打分都是正的。


在网上的体验,告诉你买什么,去哪里吃,甚至是你应该和谁做朋友。人们口味各异,但通常有迹可循。人们倾向于喜欢那些与他们所喜欢的东西类似的东西,并且他们倾向于与那些亲近的人有相似的口味。推荐系统试图捕捉这些模式,以助于预测你还会喜欢什么东西。电子商务、社交媒体、视频和在线新闻平台已经积极的部署了它们自己的推荐系统,以帮助它们的客户更有效的选择产品,从而实现双赢。
两种最普遍的推荐系统的类型是基于内容协同过滤(CF)。协同过滤基于用户对产品的态度产生推荐,也就是说,它使用“人群的智慧”来推荐产品。与此相反,基于内容的推荐系统集中于物品的属性,并基于它们之间的相似性为你推荐。一般情况下,协作过滤(CF)是推荐引擎的主力。该算法具有能够自身进行特征学习的一个非常有趣的特性,这意味着它可以开始学习使用哪些特性。CF可以分为基于内存的协同过滤基于模型的协同过滤。在本教程中,你将使用奇异值分解(SVD)实现基于模型的CF和通过计算余弦相似实现基于内存的CF。

我们将使用MovieLens数据集,它是在实现和测试推荐引擎时所使用的最常见的数据集之一。它包含来自于943个用户以及精选的1682部电影的100K个电影打分。你应该添加解压缩的movielens数据文件夹你的notebook目录下。你也可以在这里下载数据集。

12     import numpy as np    import pandas as pd

读入u.data文件,它包含完整的数据集。你可以 file, which contains the full dataset. You can在这里阅读该数据集的简要说明。

12     header = [\’user_id\’, \’item_id\’, \’rating\’, \’timestamp\’]    df = pd.read_csv(\’ml-100k/u.data\’, sep=\’\\t\’, names=header)

先看看数据集中的前两行。接下来,让我们计算唯一用户和电影的数量。

123     n_users = df.user_id.unique().shape[0]    n_items = df.item_id.unique().shape[0]    print \’Number of users = \’ + str(n_users) + \’ | Number of movies = \’ + str(n_items)  

1     Number of users = 943 | Number of movies = 1682

你可以使用scikit-learn库将数据集分割成测试和训练。Cross_validation.train_test_split根据测试样本的比例(test_size),本例中是0.25,来将数据混洗并分割成两个数据集。

12     from sklearn import cross_validation as cv    train_data, test_data = cv.train_test_split(df, test_size=0.25)

基于内存的协同过滤

基于内存的协同过滤方法可以分为两个主要部分:用户-产品协同过滤产品-产品协同过滤。一个用户-产品协同过滤将选取一个特定的用户,基于打分的相似性发现类似于该用户的用户,并推荐那些相似用户喜欢的产品。相比之下,产品-产品协同过滤会选取一个产品,发现喜欢该产品的用户,并找到这些用户或相似的用户还喜欢的其他的产品。输入一个产品,然后输出其他产品作为推荐。

  • 用户-产品协同过滤: “喜欢这个东西的人也喜欢……”
  • 产品-产品协同过滤: “像你一样的人也喜欢……”

在这两种情况下,从整个数据集构建一个用户-产品矩阵。由于你已经将数据拆分到测试集和训练集,那么你将需要创建两个[943 x 1682]矩阵。训练矩阵包含75%的打分,而测试矩阵包含25%的打分。

用户-产品矩阵的例子: blog8

在构建了用户-产品矩阵后,计算相似性并创建一个相似性矩阵。

产品-产品协同过滤中的产品之间的相似性值是通过观察所有对两个产品之间的打分的用户来度量的。

对于用户-产品协同过滤,用户之间的相似性值是通过观察所有同时被两个用户打分的产品来度量的。

通常用于推荐系统中的距离矩阵是余弦相似性,其中,打分被看成n维空间中的向量,而相似性是基于这些向量之间的角度进行计算的。用户am的余弦相似性可以使用下面的公式进行计算,其中,获取用户向量的点积,然后用向量的欧几里得长度的乘积来除以它。

要计算产品mb之间的相似性,使用公式:

第一步是创建用户-产品矩阵。由于你既有测试数据,又有训练数据,那么你需要创建两个矩阵。

12345678     #Create two user-item matrices, one for training and another for testing    train_data_matrix = np.zeros((n_users, n_items))    for line in train_data.itertuples():        train_data_matrix[line[1]1, line[2]1] = line[3]       test_data_matrix = np.zeros((n_users, n_items))    for line in test_data.itertuples():        test_data_matrix[line[1]1, line

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...