碟中谍这么火,我用机器学习做个迷你推荐系统电影

阿汤哥的碟中谍系列一直是我的最爱,惊险刺激,场面火爆。最近碟中谍6更是全面上映,一路从地上打到天上,尤其最后两架直升机追逐的场面非常好看!看完之后不过瘾,想想还有啥有类似碟中谍的好看的电影,不如我们用万能的Python+机器学习里的协同过滤的算法来写一个电影推荐系统。

01.准备数据集

机器学习离不开数据集,我们必须要有一些数据喂给机器学习,训练模型之后才能让算法运行起来,这里我们准备了两份数据集:

1).电影数据

我们准备了一份有1682份数据的电影集:

1682行,3列数据,其实有电影的id,电影的名字和电影上映的日期

2).用户点评数据10000条

这里我们拿到了有10000名用户电影评分的数据,从movielen网上获得!这样的数据集kaggle上也有很多。为了简单期间,我们只选择其中的4列特征数据作为分析(用户的id,电影的id,评分等级和时间):

10000行,4列数据,大家看一些时间戳,这个时间戳用time.localtime换算一下,发现大部分都是2000年左右的点评数据,数据集稍微有点旧,但是对我们练手一个小的推荐系统足以!

3).读取数据集

先把两份文件的数据读到内存里面,这当然是用pandas来做数据读取。

02.协同过滤算法

协同过滤方法可以分为两个主要部分,基于用户协同过滤和产品-产品协同过滤。一个基于用户协同过滤将选取一个特定的用户,基于打分的相似性发现类似于该用户的用户,并推荐那些相似用户喜欢的产品。

简单来说,就是:

基于用户协同过滤: “喜欢这个东西的人也喜欢……”

基于产品协同过滤: “像你一样的人也喜欢……”

其中有一个关键点,就是计算相似度。这里将要用到的方法是余弦相似度,类似的还有欧几里得距离,曼哈顿距离等等来衡量两者之间的距离(相似性)。但在这里,协同过滤用余弦相似度要更好,也更合理。

1).构造用户-电影矩阵

输出的矩阵,看起来就是我们想要的,每一行代表一个用户,每一列代表一部电影,矩阵元素则是评分。那接下来就可以进行第二步了——相似度计算。

2).相似度计算

sklearn应该是用的非常多的机器学习库,里面内置了大量的成熟的库,非常方面,这里我们导入余弦相似度cosine_similarity库。

到这里,已经获得了电影的相似度矩阵了。这里有个小细节,在计算时我用了矩阵转置,为什么呢?因为现在是计算电影相似度,不转置的话计算的是用户的相似性!所以这里要注意一下转置。

03.写一个小推荐系统应用程序

既然核心的两部分我们都求出来了,下面编写一个应用小程序,希望的功能如下:

利用电影间的相似程度,当我们输入一部电影的片名(不需要全部)可以返回想要的推荐个数,分别是什么,有多少用户评分,得分多少。

1).迷你推荐系统

因为前面有的了矩阵和相识度,其实我们只需要获取电影的名字和推荐的个数,查表即可,然后把结果保存到movie_list

2).获取用户的输入

我们写一个小程序来获取用户想推荐的电影,比如现在用户看了碟中谍,想再推荐5部类似的电影:

按完回车之后我们可以得到一个推荐电影列表:

跟碟中谍类似的电影有:

独立日 Independence Day

勇闯夺命岛 The Rock

龙卷风 Twister

蒸发密令 Eraser

断箭 Broken Arrow

还是蛮准的,至少推荐的几部确实对我胃口,当然你也可以询问相似度的阈值,得到更精准的推送!

人工智能已经慢慢的侵入我们的生活,在海量的大数据面前,机器通过各种算法的学习和训练变的越来越聪明。这样的推荐系统,尤其是协同过滤算法在很大电商网站上都经常使用!其实整个这个小程序代码量很小,有兴趣的同学可以试试!

需要本篇源码和数据集练手,请找小助手!

Python就是这么有趣好玩

另外发现很多同学有入门的问题,到处找资料,现在关注码题达人小助手,我会送一些我自己精选的入门的资料,有兴趣的可以关注,非诚勿扰!

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180909G135SF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券