电影数据分析之Python

电影数据分析 一,,实验概述 1,1 实验标 本项目希望基于电影数据集,依据电影的简介,关键词,预算,票房,用户评分等特征来对电影进行分析,并完成以下任务: 对电影特征的可视化分析对电影票房的预测 多功能个性化的电影推荐算法 1

本文包含相关资料包-----> 点击直达获取<-------

电影数据分析

一、、实验概述

1.1 实验标

本项目希望基于电影数据集,依据电影的简介、关键词、预算、票房、用户评分等特征来对电影进行分析,并完成以下任务:

对电影特征的可视化分析对电影票房的预测

多功能个性化的电影推荐算法

1.2 .实验完成情况

  • 完成了对电影特征的可视化分析。
  • 完成了基于电影特征的电影票房预测算法,并在 Kaggle 的 TMDB Box Office Prediction 比赛中最终取得
  • 了前 6.8%(95/1400)的成绩。

  • 完成了基于简单特征(内容、评分、关键词)的三种推荐算法、基于 KNN 的两种协同过滤算法、基于奇异值分解的推荐算法以及三种集成推荐算法,共设计并实现了九种电影推荐算法。

二、、电影特征的可视化分析

本项目中,我首先对电影数据的一些特征进行了可视化分析,来为之后的票房预测和电影推荐做帮助。

首先我分别绘制了票房与预算、欢迎程度(popularity)、戏剧性程度(theatrical)的关系图,如下图所示:

相关关系,而与上映时间、id 等信息几乎没有相关关系,这也十分符合我们的预期。

我还研究了电影语言与票房的关系,如下图所示:

在,电影的预算分布相对越均匀,对应着越来越多的大制作电影,这里我认为上映年份这个特征对票房的影响主要是通过对预算的影响来体现的。

电影票房预测

2.1 Data Augmentation

  • 首先我对提供的数据进行了处理与清洗加入了一些额外的电影数据,包括电影上映日期、评分、受欢迎度等最终使用的特征包括了电影名称、发行公司、受欢迎程度、戏剧性程度、评分人数、评分、放映时长、预算等。

  • 对全部数据进行 5 折划分来进行 5-折交叉验证。

2.1.1 算法说明

  • 本次比赛中我主要使用了三种算法来进行预测,分别为 catboost、XGBoost、LightGBM 最终的结果为这三种算法的指数加权平均

2.1.1 XGBoost

  • 首先尝试了使用 XGBoost 算法来进行预测常用算法便不描述具体过程了

2.1.1 lightGBM

  • 在 XGBoost 的基础上,lightGBM 使用了 histogram 算法,同时优化了对类别特征的支持,可以进行分布式训练,极大的提升了训练速度。

  • 相比于 XGBoost, 在准确率相近的情况下,速度大大加快。

2.1.1 CatBoost

  • CatBoost 中使用了梯度提升(Gradient Boost)与类别型特征(Categorical Features),基于梯度提升决策

2.1.2 实验结果

  • 最终我将三个模型的输出进行了指数加权,即最终的输出为:

2.1.2 weight = exp(w1 cat + w2 xgb + w3 lgbm)

其中 1

电影推荐算法

这里将分别介绍我实现的九种电影推荐算法。

3.1 基于统计学的推荐

这里我实现了一个基于评分的推荐算法,对每部电影计算评分如下:

3.1.1 score = v +v m r + mm+ v c

其中 v 为当前电影的投票数目,m 为所有电影的平均投票数目,r 为当前电影的平均等级,c 为所有电影的平均等级

算法为用户推荐评分最高的 10 部电影。

结果示例:

c++ title score The Shawshank Redemption 8.059258 Fight Club 7.939256 The Dark Knight 7.920020 Pulp Fiction 7.904645 Inception 7.863239 The Godfather 7.851236 Interstellar 7.809479 Forrest Gump 7.803188 The Lord of the Rings: The Return of the King 7.727243 The Empire Strikes Back 7.697884

3.2 基于内容的推荐算法

  • 基于电影简介⽂本的推荐算法

  • 123

  • 基于电影内容的推荐算法

  • 这里我利用了电影中的关键词、类型、导演、演员等信息

  • 首先使用 sklearn 中的 CountVectorizer 将文本转换为词频矩阵,之后利用 cosine 距离来度量电影之间的相似度,与(1)算法很类似。

  • 用户输入一个电影名字,算法推荐与之最相近的 10 部电影。

  • 13

3.3 基于 KNN 的协同过滤算法

这里我实现了两种基于 KNN 的协同过滤算法,

这里我使用了 MovieLen 数据集中的用户对电影的评分矩阵

3.3.1 针对电影相似度的推荐算法

  • 这里我将全部的用户对某一电影的评分作为该电影的特征向量,使用 KNN 算法,对于用户输入的电影,选出与之最相似的十部电影进行推荐

14

  • 可以看到,输入的电影为《复仇者联盟三》,推荐的十部电影中有九部为漫威出品的超级英雄电影,另外
  • 一部也是科幻大片,可见这种衡量电影之间相似性的方法是十分有效的。

3.3.2 针对户相似度的推荐算法

  • 之前的推荐算法大多基于电影之间的相似度来进行推荐,但对于不同的用户,推荐的结果并没有任何不同,没有实现对于不同用户的个性化推荐,当前的算法就是为了解决这样的问题。

  • 这里我将一个用户对于全部电影的评分作为该用户的特征向量,使用 KNN 算法,对于输入的用户 ID

  • 15 我将用户评分矩阵的 85% 用来训练,15% 用作测试,具体划分方法为:对每个用户对每个电影的评分,生成一个随机数,若大于 0.85,则为测试;小于等于 0.85,则为训练使用本方法对每个用户推荐了 10 部电影,总共推荐了 6040 部电影,其中出现在测试集中的电影数目为 878 部,占 14.54%

3.4 基于奇异值分解的推荐算法

这里我实现了基于 SVD 分解的推荐算法,通过对用户-电影评分矩阵进行 SVD 分解,对用户未评分的电影预测评分。

这里我主要希望将这个算法作为一个二级筛选方法,即对于输入的用户 id 与一系列电影 id,去预测出当前用户对于这一系列电影的评分,从中挑选出评分最高的 10 部进行推荐。

  • 由于用户-电影评分矩阵是维度很高的系数矩阵,于是我使用了不同的算法来进行分解,包含了
  • 随机梯度下降算法(SGD)
  • 朗之万动态系统随机梯度方法(SGLD)
  • 随机梯度哈密顿蒙特卡洛方法(SGHMC)

其中 SGD 为基于优化的方法,而 SGLD 与 SGHMC 为基于采样的贝叶斯概率矩阵分解算法。我在 movielen 数据集的 mk-1m 中进行了 5-折交叉验证,最后的结果如图所示:

12

  • ​ 从图中可以看出,SGHMC算法的RMSE loss最低,达到了了0.84117,是⼀一种⽐比较好的优化⽅方法,得到的模型也具有⽐比较好的推荐效果。

3.5 集成推荐算法

上述的推荐算法均为针对某一个方面进行推荐,并且没有实现对特定用户输入的特定电影进行推荐,这里我将上面的算法组合起来,实现了三种集成推荐算法,可以进行更加个性化的推荐。

3.5.1 KNN+ 本的集成推荐

  • 我首先使用 KNN 算法对输入的当前用户 ID,查找与之最邻近的 10 位用户,将这些相似用户看过的电影并且当前用户没有看过的电影作为候选电影。
  • 之后将用户输入的文本转换为向量,将候选电影的文本信息(简介、名称、导演等)编码为向量。
  • 最后依据提取的候选电影向量与输入文本向量之间的 cosine 距离来为用户推荐距离最近的前 10 部电影。

3.5.2 户 KNN+ 电影 KNN

我首先使用 KNN 算法对输入的当前用户 ID,查找与之最邻近的 10 位用户,将这些相似用户看过的电影并且当前用户没有看过的电影作为候选电影。

之后对于电影数据进行 KNN 处理,挑选出与用户输入电影最邻近的 10 部电影进行推荐

3.5.3 户 KNN+ 奇异值分解

我首先使用 KNN 算法对输入的当前用户 ID,查找与之最邻近的 10 位用户,将这些相似用户看过的电影并且当前用户没有看过的电影作为候选电影。

之后利用矩阵分解,模拟当前用户对候选电影的评分,选择评分最高的十部电影进行推荐。

测试结果

这里采用了与 3.2 中相同的测试方法进行测试

对每个用户推荐了 10 部电影,总共推荐了 6040 部电影,其中出现在测试集中的电影数目为 602 部,占 9.97%,效果不如只使用用户 KNN 的算法

分析原因

用户、电影评分矩阵中包含了对于每部电影的评分,评分有高有低,即使是用户看过的电影也会有评分很低的,在本方法中会将这样的电影排除掉,为用户推荐的是模拟评分后分数高的电影 测试中没有涉及到这个问题,因此带来了结果的差异

总结

​ 本项目从收集数据集、分析用户需求,到论文的查阅、算法的实现,最后到推荐系统的构建,一步步地完成了一个小型(微型)机器学习系统的搭建,将课上的知识学以致用,增强了从较大的方面分析问题的能力。

备注:在检查之后,做了如下补充:

  • 增加了对于用户 KNN 算法的评测

  • 增加了对于用户 KNN+SVD 集成算法的评测(结果在报告中相应算法内容之后)

参考文献

  • 基于关键词提取技术的协同过滤算法研究与应用(南京邮电大学·李吉祺)
  • 基于知识图谱的电影推荐研究(深圳大学·)
  • 具有反爬虫机制的影评系统的设计与实现(北京交通大学·高萍)
  • 基于知识图谱的电影推荐算法研究与应用(南昌大学·肖鹏)
  • 融合属性特征的电影推荐系统研究(辽宁工程技术大学·于慧)
  • 面向显式反馈和隐式反馈的电影推荐算法的研究(中国计量大学·杜民双)
  • 影视大数据分析系统中数据存储的关键问题研究与实现(北京邮电大学·董亚鹏)
  • 面向显式反馈和隐式反馈的电影推荐算法的研究(中国计量大学·杜民双)
  • 基于情感分析的评论极性分类和电影推荐系统的设计与实现(安徽大学·夏明星)
  • 基于情感分析的评论极性分类和电影推荐系统的设计与实现(安徽大学·夏明星)
  • 基于自编码器混合推荐算法的研究(中北大学·于悦)
  • 基于两步预测的电影推荐系统的研究——以豆瓣电影为例(上海财经大学·肖惠萍)
  • 基于知识图谱的电影推荐算法研究与应用(南昌大学·肖鹏)
  • 面向特定领域的知识图谱构建与实现(北京邮电大学·陈剑冲)
  • Research on Movie Recommendation Method Based on Convolution Neural Network and Long Short Term Memory Network(华中师范大学·唐忆缘)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码货栈 ,原文地址:https://m.bishedaima.com/yuanma/35726.html

相关推荐

  • 基于SpringBoot框架的IT技术交流分享平台

    这是一份采用Java语言构建的🔥🔥SpringBoot核心框架的IT技术讨论平台源代码项目🔥🔥,我们利用SpringBoot和Vue,js技术栈进行开发,并在Idea或Eclipse环境下进行操作
    2024年05月23日
    3 1 1
  • 中药实验管理系统

    这是一个🔥🔥基于SpringBoot框架的中药实验管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Java+SSM的失物招领平台

    这是一个🔥🔥基于SSM的失物招领平台🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 失物招领平台开发技术栈为SSM项目,可以作为毕业设计课程设计作业基于Java+SSM框架实现一个失物招领平台
    2024年05月23日
    7 1 3
  • 基于JSP实现的学生成绩管理系统

    基于JSP实现的学生成绩管理系统 1 引言 1,1 任务简介 多用户管理:用户分管理员,学生 网页界面设计:利用HTML和CSS实现客户端前台设计 类间关系的设计
    2024年05月14日
    6 1 1
  • 基于python实现的比价网站

    1,项目简介 1,1你低我低 是什么? (Introduction) 你低我低 致力于建设绝无人工干预的比价网站 现支持淘宝,亚马逊 支持自定义排序方式 1
    2024年05月14日
    2 1 1
  • 基于SSM框架的考勤签到请假系统

    基于SSM框架的考勤签到请假系统是一种基于web的员工管理系统,旨在解决传统考勤管理方式中存在的效率低下等问题,随着信息技术的发展,企业管理逐渐向数字化,网络化方向转变
    2024年05月07日
    16 1 4
  • 新闻稿件管理系统

    这是一个🔥🔥基于SpringBoot框架的新闻稿件管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    3 1 1
  • 基于SpringBoot框架的个人博客系统

    这是一套采用Java语言构建的🔥🔥SpringBoot为核心的个人博客系统源代码🔥🔥,项目中应用了SpringBoot框架和Vue技术,开发工具为Idea或Eclipse
    2024年05月23日
    15 1 2
  • 中医藏象辨证量化诊断系统之Python

    中医藏象辨证量化诊断系统 1,内容 对深度学习,集成学习等算法进行深入研究,探索利用相关算法开展中医辨证的创新研究与应用,利用相关算法实现临床数据采集,量化诊断和可视化结果展示
    2024年05月14日
    48 1 10
  • 基于springboot+vue框架实现的在线教育系统

    基于springboot+vue框架实现的在线教育系统 一,引言 1,编写目的 希望给广大程序员们提供一个分享交流的平台,主要提供视频与文档的上传共享功能
    2024年05月14日
    16 1 3

发表回复

登录后才能评论