基于协同滤波的推荐技术可以细分为基于用户的协同过滤方法、基于产品的协同过滤方法、基于模型的协同过滤方法;本博文进行了一一测试。
1. 数据准备、评价指标
由于协同滤波模型需要用到用户的行为,这里选用MovieLen数据集进行测试研究。
MovieLen是明尼苏达大学计算机科学系GroupLens研究中心开发和维护的,也是最常用于测试协同滤波算法性能的公开数据集之一。Movielens提供了大量电影的用户评分。完整的版本包括超过了26000000的电影评分,他们来源于270000用户观看45000部电影的体会。GroupLens网站上提供的数据集不再提供用户人口统计信息。因此,这里使用Prajit-Datta在kaggle上提供的部分数据集。
- 数据下载
下载地址:https://www.kaggle.com/prajitdatta/movielens-100k-dataset/data
该数据集包括:1682部电影上943名用户的100000个评分(1-5)。每个用户至少为20部电影打分。该数据集也为用户提供简单的人口统计信息(年龄、性别、工作等)。这些数据是在1997年9月19日至1998年4月22日的七个月期间通过Movielens网站(movielens.umn.edu)收集的。此数据已被清除-从该数据集中删除了评分低于20或没有完整人口统计信息的用户。
- 数据浏览
在解压文件中,只需要使用u.date/ u.user/ u.item三个文件。
① 查看用户图谱文件
import pandas as pd
# load the u.user file into a dataframe
u_cols = ['user_id', 'age', 'sex', 'occupation', 'zip_code']
users = pd.read_csv('C:/Users/Administrator/Desktop/RecoSys/data/movielens/u.user',
sep='|',names=u_cols, encoding='latin-1')
users.head()
可以看到,u.user文件中主要包含的用户图谱,如年龄,性别,职业,zip_code。
② 查看电影描述文件
i_cols = ['movie_id', 'title', 'release date', 'video release date', 'IMDB URL',
'unknow', 'Action', 'Adventure', 'Animation', 'Children\'s', 'Comedy',
'Crime', 'Documentary', 'Drama', 'Fantasy', 'Film-Noir', 'Horror',
'Musical', 'Mystery', 'Romance', 'Sci-Fi', 'Thriller', 'War','Western']
movies = pd.read_csv('C:/Users/Administrator/Desktop/RecoSys/data/movielens/u.item',
sep='|', names=i_cols, encoding='latin-1')
movies.head()