简单的推荐系统教程

目标:给定一个电影表movie,一个分数表rating。通过这两个表格,给出电影表movie里任意一个电影相关的top-n。

思路:首先建立用户与项目矩阵,其次计算用户之间的相似度分数,最后相似度排名,取top-n作为推荐结果。


1. 导入库和数据

import pandas as pd

导入movie数据(数据获取方式见本博客底部)

movie=pd.read_csv(r'C:\Users\xbh\Desktop\movie.csv')
movie

简单的推荐系统教程_第1张图片

由于rating数据集已经把相似度算出来了,所以可以不用看genres这一列。取movieID和title这两列。 

movie=movie.loc[:,["movieId","title"]]   #loc通过行索引 "Index" 中的具体值来取行数据  
movie.head(10)

简单的推荐系统教程_第2张图片

导入rating数据(数据获取方式见本博客底部) 

rating=pd.read_csv(r'C:\Users\xbh\Desktop\rating.csv')
rating=rating.loc[:,["userId","movieId","rating"]]
rating.head(10)

简单的推荐系统教程_第3张图片


2.建立用户-项目矩阵 

将movie和rating两个数据集合并,建立用户-项目矩阵

data=pd.merge(movie,rating)
data.head(10)

简单的推荐系统教程_第4张图片

 为了加快运行速度,只采取前1000000行数据进行实验

data=data.iloc[:1000000,:]
data.head(10)

简单的推荐系统教程_第5张图片


3.建立透明表以进行排序 

将userId这一列作为索引建立透明表

pivot_table=data.pivot_table(index=["userId"],columns=["title"],values="rating")
pivot_table.head(10)

简单的推荐系统教程_第6张图片

 以Bad Boys (1995)这部电影为对象,求出这部电影的相似度矩阵,并进行相似度排序。

这里调用corrwith的函数。

movie_watched=pivot_table["Bad Boys (1995)"]
similarity_with_other_movies=pivot_table.corrwith(movie_watched)

简单的推荐系统教程_第7张图片


4.得出推荐结果

 取相似度排序后的top-10作为Bad Boys (1995)这部电影最后的推荐结果。

similarity_with_other_movies.sort_values(ascending=False).head(10)

简单的推荐系统教程_第8张图片


思考

1.怎么通过movie的genres属性得出评分?

2.怎么自己编写计算相似度的算法?

有思路的大佬们留个言。


数据获取方式:扫描下方二维码关注公众号“BoH工作室”,回复 data1 获取数据。

对推荐系统和图神经网络感兴趣的网友可以关注我的微信公众号“BoH工作室”,以后会陆续分享一些推荐系统和图神经网络的学习心得,欢迎大家关注并一起探讨。 

你可能感兴趣的:(推荐系统,推荐系统,机器学习,人工智能)