前言
推荐系统挺有趣的,但对做研究的人来讲上手有很多坑。相比于图像领域数据集、代码公开透明,评价指标高度统一,推荐系统仍处在整合阶段,龙蛇混杂。
目录
本系列打算在推荐系统公开数据集上一步步实现完整推荐,并实现多个经典的推荐算法。由于本人技术、思路上才能有限,因此不能保证所写完全正确,同时也会有自己的疑惑,仅将自己的经验分享给大家,欢迎讨论。
如果你对本系列(未写完,持续更新中)感兴趣,可接以下传送门:
【推荐算法】从零开始做推荐(一)——认识数据
【推荐算法】从零开始做推荐(二)——推荐系统的评价指标,计算原理与样例
【推荐算法】从零开始做推荐(三)——传统矩阵分解的TopK推荐实战
【推荐算法】从零开始做推荐(四)——python Keras框架 利用Embedding实现矩阵分解TopK推荐
【推荐算法】从零开始做推荐(五)——贝叶斯个性化排序矩阵分解 (BPRMF) 推荐实战
【推荐算法】从零开始做推荐(六)——贝叶斯性化排序矩阵分解 (BPRMF) 的Tensorflow版
推荐是什么?
个人总结如下。
狭义上的推荐:给用户(User)推荐项目(Item),挖掘用户可能喜欢的项目展示给用户。
广义上的推荐:将推荐的主体和客体进行升华,主体和客体可以任意选择,如给项目推荐用户,给用户推荐用户等。值得注意的是,用户和项目也可以根据场景里不同的实体进行变换,如给用户集(如包含多个用户的群组)推荐项目等,给用户推荐项目集(如包含多个地点的行程)等。
推荐需要知道些什么?
从人的思维出发,如果要给任意一个用户u推荐项目,我应该知道什么?
1. 用户u的喜好,我得知道任意一个用户u∈U 的信息。
2. 认识项目i,我得知道任意一个项目i∈I 的信息。
3. 用户u以前喜欢什么项目,我得知道U 与I 的交互信息。
用图来表达:
这是我们最期望得到三个信息,但理想很丰满,现实很骨感,很多情况下能得到信息往往不是那么全。
对于表1,表2,表3,如果非要去掉一个选谁呢?
去掉表2,主体信息和客体信息,相对而言,主体更为重要。
如果还要去掉一个呢?
去掉表1,必须用户和项目的信息都知道一些,否则无法推荐。
因此,推荐所要的核心信息就是表3,业内有多种叫法:评分矩阵、签到矩阵或点击矩阵等。
经典数据集
之前的介绍是一个抽象的介绍,接下来我们一起来看看真实的数据集长啥样。要说推荐系统里用的最多的数据集,MovieLens肯定能占上名号,以下为其介绍。
这里我们看MovieLens给出的两个数据集,一个叫MovieLens 1M稍微大一些,另一个叫MovieLens 100K稍微小一些。
MovieLens 1M
进入如下界面,选择红色框框部分进行下载。
下载完成之后解压,解压完的文件如下图所示。
我平常接触的文件大多为txt,csv,dat接触的不多,但是也能用DF来进行读取。写一个函数,专门用来预览该数据集。
def veiw_data():
usnames = ['user','gender','age','occupation','zip']
user = pd.read_table("users.dat",sep = '::',header = None,names = usnames,engine='python')
itnames = ['item','title','genres']
item = pd.read_table("movies.dat",sep = '::',header = None,names