碟中谍这么火,我用机器学习做个迷你推荐系统电影
阿汤哥的碟中谍系列一直是我的最爱,惊险刺激,场面火爆。最近碟中谍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就是这么有趣好玩
另外发现很多同学有入门的问题,到处找资料,现在关注码题达人小助手,我会送一些我自己精选的入门的资料,有兴趣的可以关注,非诚勿扰!
往期精彩: