怎么用Python来搭建一个简单的推荐系统

这篇文章主要介绍了怎么用Python来搭建一个简单的推荐系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

我们会使用Movielens构建一个基于item的简易的推荐系统。在开始前,第一件事就是导入pandas和numPy。

import pandas as pd import numpy as np import warnings warnings.filterwarnings('ignore')

接下来,我们使用pandas read_csv()加载数据集。数据集由制表符分隔,所以我们将\ t传递给sep参数。然后,使用names参数传入列名。

df = pd.read_csv('u.data', sep='\t', names=['user_id','item_id','rating','titmestamp'])

接下来查看表头,检查一下正在处理的数据。

df.head()

如果我们能够看到电影的标题而不仅仅是ID,那再好不过了。之后加载电影标题并把它与此数据集合并。

movie_titles = pd.read_csv('Movie_Titles') movie_titles.head()

由于item_id列相同,我们可以在此列上合并这些数据集。

df = pd.merge(df, movie_titles, on='item_id') df.head()

数据集中的每一列分部代表:

  • user_id - 评级电影的用户的ID。

  • item_id- 电影的ID。

  • rating - 用户为电影提供的评级,介于1和5之间。

  • timestamp - 电影评级的时间。

  • title - 电影标题。

使用describe或info命令,就可以获得数据集的简要描述。如果想要真正了解正在使用的数据集的话,这一点非常重要。

df.describe()

可以看出,数据集共有100003条记录,电影的平均评分介于3.52-5之间。

现在我们再创建一个dataframe,其中包含每部电影的平均评分和评分数量。之后,这些评分将用来计算电影之间的相关性。相关性是一种统计指标,表示两个或多个变量一起波动的程度。相关系数越高,电影越为相似。

以下例子将使用Pearson相关系数 (Pearson correlation coefficient),该数字介于-1和1之间,1表示正线性相关,-1表示负相关, 0表示没有线性相关。也就是说,具有零相关性的电影完全不相似。

我们会使用pandas groupby 功能来创建dataframe。按照标题对数据集进行分组,并计算其平均值获得每部电影的平均评分。

ratings = pd.DataFrame(df.groupby('title')['rating'].mean()) ratings.头()

接下来我们创建number_of_ratings列,这样就能看到每部电影的评分数量。完成这步操作后,就可以看到电影的平均评分与电影获得的评分数量之间的关系。五星级电影很有可能只被一个人评价,而这种五星电影在统计上是不正确的。

因此,在构建推荐系统时,我们需要设置阈值。我们可以使用熊猫groupby功能来创建新列,然后按标题栏分组,使用计数函数计算每部电影的评分。之后,便可以使用头()函数查看新的dataframe。

rating  [& # 39; number_of_ratings& # 39;],=, df.groupby(& # 39;标题# 39;)[& # 39;评级# 39;].count(),评级。头()

接下来我们使用熊猫绘制功能来绘制直方图,显示评级的分布:

import  matplotlib.pyplot  as  plt  % matplotlib  inline 评级(& # 39;评级# 39;].hist(垃圾箱=50)

可以看的到,大多数电影的评分都在2.5 - 4之间。通过类似的方法还可以将number_of_ratings列可视化。

评级(& # 39;number_of_ratings& # 39;] .hist(垃圾箱=60)

从上面的直方图中可以清楚地看的出,多数电影的评分都很低,评分最高的电影是一些非常有名的电影。

现在让我们再来看一下电影评级与评分数量之间的关系。我们可以使用seaborn绘制散点图,然后使用jointplot()函数执行此操作。

import  seaborn  as  sns  sns.jointplot (x=& # 39;评级# 39;,,y=& # 39; number_of_ratings& # 39;,, data=https://www.yisu.com/zixun/ratings)

从图中我们可以看的出,电影平均评分与评分数量之间呈正相关关系,电影获得的评分数量越多,其平均评分越高。

<强>创建基于项目的简易推荐系统

接下来我们会快速创建一个基于项目的简单的推荐系统。

首先,我们需要将数据集转换为矩阵,电影标题为列,user_id为索引,评级为值。完成这一步,我们将得到一个dataframe,其中列是电影标题,行是用户ID。每列代表所有用户对电影的所有评级。评级为南表示用户未对这部电影评分。

怎么用Python来搭建一个简单的推荐系统