基于协同过滤算法的电影推荐系统及相关电影数据挖掘
成员
- 郭强:2120160993
- 尚子钰:2120161034
- 廖晨宇:2120161014
1.问题描述
1.1问题背景分析及相关工作
推荐系统是一种信息过滤系统,用于预测用户对物品的“评分”或者“偏好”。推荐系统近年来非常流行,应用于各行各业。推荐的对象包括:电影、音乐、新闻、书籍、学术论文、搜索查询、分众分类以及其他产品。也有一些推荐系统专门为寻找专家、合作者、笑话、餐厅、美食、金融服务、生命保险、网络交友以及twitter页面设计。协同过滤,简单来说就是利用某些兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分,回应不一定局限于特别感兴趣的,特别不感兴趣的信息记录也相当重要)并记录下来以达到过滤的目的,进而帮助别人筛选信息。
1.2问题描述
(1)数据预处理。包括对数据进行分析与整理、填补缺失数据、对数值数据进行离散化。(2)挖掘关联信息和相关性信息,挖掘不同性别、年龄的观影者对不同电影的评分倾向性和关联性,挖掘不同性别的观影人群最具差异性评分的50部电影。(3)电影推荐系统。利用协同过滤算法对观影者进行推荐,推荐其最可能想看的电影。于此同时,为新上映电影预测目标观影人群。
2.目标
经过实验操作,挖掘电影评分当中蕴含的关联信息和相关性,为观影者推荐适合其的电影。
3.完成情况
3.1数据集及数据预处理工作(中期已完成)
3.2评价最多的前50部电影(中期已完成)
3.3评分最高的50部电影(中期已完成)
#
3.4性别差异对电影评分的影响
此项任务寻找出对于同一部电影,男性和女性评分差异最大的前50部电影。通过最后的结果我们可以发现,对于《Airplane》这部无厘头喜剧电影的开山之作,男性和女性在评价上是差异最大的,满分为5分的情况下,评分平均差异居然有0.4分之多。评分差距较大的电影有《God fatherⅡ》《Aliens》《Independent Day》《E.T.》《Galaxy Quest》等电影。可以看出首先科幻片是最容易男女产生观影分歧的电影类型,排名前6的分歧较大的电影里,有4部都是科幻片。可见如果是主打情侣档期的发行商,推出科幻片的时候一定要慎重。另一方面,女性偏爱感人的科幻片,注重情感特点;而男性偏爱动作火爆,注重感官刺激。
男女评分差异最高的50部电影
3.5年龄对电影评分的影响
我们按照年龄,将用户分为7组。探讨年龄对于评分习惯有何影响。下图表明年龄位于18-24的用户,对电影评分相对较低,对电影要求较为苛刻。而从中间往两边,随着年龄变小或者变大,对电影的评分都会有升高的趋势,相对来说比较宽容。
年龄对于电影评分的影响
3.6基于协同过滤算法推荐电影
基于用户的协同过滤算法是指对于给出的待推荐的用户A,根据他之前的电影评分信息,找到一些与其品味最相近的用户,我们认为A应该也会喜欢这些用户看过的电影,所以我们将这些用户看过而A没看过的电影推荐给A。
衡量两个用户相似度可以用欧几里德距离或皮尔逊相关系数来实现,本项目中,采用的是皮尔逊相关系数。它判断两组数据与某一直线的拟合程度,在数据不是很规范的时候,会倾向于给出更好的结果。
定义计算两个用户的皮尔逊相似度的函数sim_pearson。首先要选出这两个用户都评价过的电影,然后再根据皮尔逊相关性的公式得到最终的相关系数,代码如下:
部分代码截图
其中,为了防止由于两个用户只共同评价了极少数的电影而导致他们的皮尔逊相关系数偏高,我们对于共同评分少于6部时的相关系数置为0。对剩余其他用户进行加权平均来推荐电影,在这里我们取的是和被推荐用户相关系数大于0.8的用户。每个用户的权重为他与被推荐者的相似系数。注意只针对被推荐者没有看过的电影进行操作。调用getReconmendations函数即可取得某个用户的推荐电影列表,参数prefs表示构建的字典,参数person表示被推荐用户的ID,例如我们想要得到用户ID为1的推荐列表,只需使用getRecommendations(prefs,1)[0:m]即可,其中m是指推荐系数前m名的电影。 通过getRecommendations(prefs,1)[0:30]来得到针对ID为1的用户推荐系数排名前20的列表,结果如下:
电影推荐结果
4.实验总结
经过对数据集的整理和挖掘关联性相关性信息,本次实验从年龄,性别等方面入手,得到了一些新颖而且特别有趣的挖掘结果。通过基于协同过滤算法的推荐系统,我们为用户推荐其潜在的可能喜欢的电影。经过对一些同学的实际测试,这样的推荐结果还是比较令人满意的。