PyTorch深度学习实战 | 基于深度学习的电影票房预测研究

news2024/11/23 20:05:15

基于深度学习的映前票房预测模型(Cross&Dense网络结构模型),该模型通过影片基本信息如:电影类型、影片制式、档期和电影的主创阵容和IP特征等信息对上映影片的票房进行预测。

本篇采用451部电影作为训练模型,最后再在194部影片上进行测试,模型的绝对精度为55%,相对精度为92%。该模型在使用相同的特征的情况下好于SVM、随机森林等算法。上升了至少5%。同时还对模型进行了超参调优工作,通过实验发现:当模型的批大小为128,学习率设置为0.001,迭代次数设置为150,多任务调节权重为0.4的时候预测效果最好。通过该模型对映前票房的成功预测将对影片的制作发行和放映有着重要的指导意义。

01、数据探索

选取2013—2016年在国内上映的影片。票房过小的影片一方面研究价值较低,另一方面存在着严重的特征缺失的问题,所以只筛选了票房超过一千万的影片作为研究对象,最终经过筛选最后共有645部。从互联网上采集了电影的特征(类型、播放制式、上映时间、主创人员信息、发行放映信息和网络口碑等数据),这些数据主要来自于豆瓣网、时光网和猫眼电影专业版和微博电影。这些特征包括连续数据和离散的类别数据。

从图1中可以发现,电影票房收入相差比价大,大部分电影的票房集中在1千万到5亿这个范围内,极少数电影可以超过10亿票房。票房数据的偏度为3.71,峰度为21,因此要研究的票房数据偏离正态分布,呈现出右偏态,同时也可以发现该数据峰度值远大于0,分布比较陡峭,如表1所示。

表1 连续变量统计表

■ 图1 票房直方图

1●连续变量

如图2所示,分析连续变量和票房的关系可以发现采集的连续变量和票房之间没有明显的线性关系,这也是票房预测一直没有取得特别精确的原因之一,同时采集了2015年和2016年的微博指数数据,使用全部数据进行建模时存在缺失值过多,使用两年数据建模时性能较低情况,所以最后舍弃。

■ 图2 连续特征与票房关系散点图

2●离散特征

各个离散变量和票房之间的箱型图可以直观地展示这些变量和票房的关系,为了便于画图,对票房数据进行取对数处理。其中表2展示了电影类型、电影制式等特征,图3给出了票房的箱型图。

表2 样本中各类型影片占比及平均票房表

■ 图3 离散特征和票房箱型图

02、模型设计

为了获得一个有效的票房预测模型,将连续的票房值进行了离散化处理。基于实际需求和模型构建要求将票房离散化成为4个区域,如表3所示。

表3 电源票房分区表

图4 为基于深度学习的电影票房预测模型框架

■ 图4 基于 Cross&Dense 网络的映前票房预测框架图

1●特征层

由于连续特征中各个特征有着不同的量纲和量纲单位,即取值范围存在巨大的差异,例如网络口碑取值范围是[0,10],而主创阵容的取值范围为[0,175492]。这种情况会影响网络训练的精度效率,所以在特征层对连续特征做了归一化处理,使各个特征处于同一个数级。使用标准归一化方法处理后的特征服从标准正太分布,特征的取值范围为[-1,1]:

其中,μ为该特征的均值,δ为该特征的标准差。

对于离散特征进行了one-hot编码。

2●嵌入层

在嵌入层对经过编码的离散特征进行了嵌入计算,具体的处理细节如表4所示。

表4 嵌入层参数设置表

3●深度网络层

电影票房模型使用的深层网路的结构细节如下:深度网络使用了3层,其中每层的神经单元数为50、25和10。稠密跳接网络的深度为4,每层增加的神经元个数都设置为50。同时为了防止模型过拟合使用了dropout技术,dropout的参数本文设置为0.3。

4●输出层

多任务学习是一个在机器学习领域很早就被提出的技术,之前常被应用于决策树、随机森林和神经网络中。它是一种归纳转移的方法,使用包含在相关任务的训练数据中的信息来改善泛化能力,使用并行学习但用分享特征表示,每个任务学习到的特征表达和知识可以帮助更好地学习其他任务[35]。随着深度学习技术的发展,多任务学习技术也成了一个研究的热点。为了提高预测准确率,针对电影票房预测这一问题,对上文中提出的预测框架进行了进一步的改进,引入了多任务学习技术。

(1)任务一:预测电影票房属于每个区域的概率;

(2)任务二:预测票房的实际值。框架中具体的实现方式是,在输出层输出两个预测结果:Y_out1通过softmax层输出多分类的预测结果,损失函数使用常用的多类的对数损失(对应于keras中的categorical_crossentropy);Y_out2通过一层神经网络输出票房的预测值,该预测值为连续的实数对应于票房的真实值,损失函数使用平均绝对值误差(对应于keras中的mean_absolute_error)。

其中,softmax是一种常用于多分类的方法

softmax层输出为该影片属于每一个类的概率,输出为4个类别,所以Y_out1向量表示有y=1、y=2、y=3和y=4的概率,概率最大的那个类别为最终的预测结果。Y_out2输出的预测值和用来训练的票房真实值,采取了取对数的运算,使得模型更优。因此,在输出层这两个输出共享下面的网络和这些网络表征的特征和知识。在训练阶段,设计的模型最小化这两个损失的加权和

其中,参数γ被用来调节两项损失函数的权重。

03、实例验证

1●票房预测分类性能指标

针对多分类问题,研究人员常用混淆矩阵和根据混淆矩阵得到的绝对精度(Bingo)和相对精度(1-Away)来分析分类器的性能优劣。绝对精度准确预测到实际类别的影片个数占整个实际类别影片总数的比率。相对精度准确预测到对应的区间(相邻类别)的影片个数占整个实际类别影片总数的比率。

2●超参数调优

本实验对以下参数进行了分析、实验调优,这些参数包括批大小、学习率、迭代次数及γ。同时以下部分都用箱线图的方式展示,每个实验都重复20次,以保证实验结果的可信。将实验数据以7∶3的比例,随机分成了测试集和训练集,其中训练集共有451部电影,测试集共有194部电影。同时使用了箱形图来展示实验结果,箱形图又称为盒须图或箱线图,可以展示多次实验的统计结果,也可以展示多次实验结果的最大值、最小值、两个四分位数和中位数。

(1)批大小调优:在模型训练时,在每个迭代中,模型的参数需要在每批数据处理结束后进行更新。参数的更新基于每批数据的平均误差,所以每批数据的数据量大小对模型的训练有重要的影响。如图5所示,通过实验可以发现,随着批大小的增加,训练得到的模型在测试集上的预测分类效果越来越好。当批大小为128时模型取得了最好的效果,之后随着批大小的增加模型效果下降。

■ 图5 批大小对模型效果的影响(迭代次数=200,学习率=0.001,γ=0)

(2)学习率调优:在模型训练时,学习率对参数的更新速度有重要的影响,如图6所示,随着学习率的减小,训练得到的模型在测试集上的预测分类结果越好。

■ 图6 学习率对模型效果的影响(批大小=128,迭代次数=200,γ=0)

(3)迭代次数调优:如图7所示,随着迭代次数的增加,训练得到的模型在测试集上的预测精度越来越高,当迭代次数为150时,预测分类效果最好,之后当迭代次数为200时预测准确率降低。

■ 图7 迭代次数对模型效果的影响(批大小=128,学习率=0.001,γ=0)

(4)γ调优:在模型训练时,γ影响着多任务学习中两个损失函数的权重。如图8所示,随着γ的增加,模型的预测能力逐渐提高,在0.4时模型获得最好的预测效果,然后模型预测效果逐渐降低。当取值0时,模型预测分类效果明显降低,这是由于模型只考虑回归的损失函数。

■ 图8 γ对模型效果的影响(批大小=128,迭代次数=150,学习率=0.001)

3●票房预测分类结果及分析

对模型的超参数做了如下设置:学习率设置为0.001,批大小为128,迭代次数为150,γ为0.4。表5为实验票房分类预测效果的混淆矩阵,实验结果表明该预测模型的绝对精度还需要提高,但是相对精度较高。

表5 票房预测分类结果混淆矩阵表

为了说明模型的有效性,进一步将模型与现有的几种算法SVM、决策树CART、随机森林算法进行了对比,先使用训练集对模型进行了训练,然后在测试集上计算了每种算法的准确率。其中SVM、决策树和随机森林使用了Python程序库sklearn中的程序实现的。SVM中参数选择为C=1.0,cache_size=200。决策树选择树的最大深度为5,随机森林选择树的子树的数量为20,树的深度为10。DNN算法采用多层全连接网络,该网络由4层神经网络构成,每层的神经单元数为100、50、25和20,激活函数使用Relu函数。

具体的实验结果如表6所示,为了试验的可靠性,每个算法都经过20次试验然后取其平均值作为最后的预测效果。

表6 电源票房数据集上几种算法预测效果表

如表6所示,通过实验可以发现,该算法更加能够充分利用特征中的信息,同时新的框架相对于普通的DNN网络,更加适用于离散类别特征数据,能够提升3%,也证明了这种框架可以更好地将深度学习应用于含有离散类别数据的分析中。同时,将多任务学习引入之后,回归和分类结果可以共享下层网络的参数和提出的特征和知识,能够有效地提高预测分类的效果,在本实验中提高了3%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring AOP实现原理

从入口 org.springframework.context.support.AbstractApplicationContext#refresh 开始看 找到Bean的创建方法进入: 再进入详细方法: 找到getBean(beanName): 找到doGetBean(xxx,xxx,xxx,xxx); 找到实际的Bean创建方法createBean(beanName, mdb, args);可以非常明显…

【C++学习笔记】变量和基本类型

2.1 基本内置类型 C中包括 算数类型(arithmetic type) 和 空类型(void) 的数据类型,其中,算数类型包括字符、整型数、布尔值和浮点数;空类型不对应具体的值,当函数不返回值时用void作为返回类型 2.1.1算数类型 对于数组或者字符…

一篇搞定CDH 5.x 核心概念与集群部署

一、概述 1.1 Hadoop发行商 Apache:开源免费 CDH: Clouder公司研发。只支持64位操作系统。更加详细信息后面会介绍。 HDP: Hortonworks公司研发。 1.2 公司常用版本及介绍 apache -> cdh | hdp 常见问题: apache与cdh的比较?&#xf…

在国内怎么玩chatgpt,有可行的gpt游玩攻略么

首先你想玩chatgpt,你要明白一点这是一个国外的软件,所以你懂的,如果你不会魔法,那么就必须要改其他途径去探索游玩咯。今天我们就来探讨一下国内怎么玩chatgpt,可行的gpt游玩攻略。 一.Chatgpt的版本 我们先来认识一…

61 openEuler 22.03-LTS 搭建MySQL数据库服务器-管理数据库用户

文章目录 61 openEuler 22.03-LTS 搭建MySQL数据库服务器-管理数据库用户61.1 创建用户示例 61.2 查看用户示例 61.3 修改用户61.3.1 修改用户名61.3.2 修改用户示例61.3.3 修改用户密码61.3.4 修改用户密码示例 61.4 删除用户示例 61.5 用户授权示例 61.6 删除用户权限示例 61…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(面试刷题链表相交) 2023.4.24

目录 前言面试题(链表相交)—(保姆级别讲解)分析题目:链表相交代码:算法思想 结束语 前言 本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自…

LVS负载均衡—DR模式

DR模式的特点 (1)Director Server(调度器) 和 Real Server(节点服务器) 必须在同一个物理网络中。 (2)Real Server可以使用私有地址,也可以使用公网地址。如果使用公网…

零代码平台如何帮助服装企业实现数字化转型?

随着互联网的不断发展,数字化转型已经成为各行各业必须跨越的一道坎,而服装行业也不例外。 但是,服装行业相对于其他行业来说,数字化转型面临着更多的挑战: 生产环节复杂:服装制造涉及到复杂的生产工序&a…

问题定位及解决方案

1.视频沉浸页快速滑动后,必现不能向下划动 复现步骤: 进入视频沉浸页,快速向下划动,滑动到第一页最后一个时,不能再向下划动。 解决步骤: 1.确定请求API: mtop.aliexpress.ugc.feed.video.lis…

Vivado关联第三方编辑器的方法

​Vivado是一个非常强大的工具,但是在一些方面可能不能完全满足我们的需求,比如代码编辑器的功能。幸运的是,Vivado允许我们关联第三方编辑器来扩展其代码编辑器的功能。在本文将介绍如何配置Vivado与第三方编辑器一起使用,并提供…

Pulsar幂等性开发的设计文档

PIP: https://github.com/apache/pulsar/issues/19744 具体设计 每个TC维护一个Map<ClientName,List> terminatedTxnMetaMap&#xff0c;维护每个客户端最新N个事务的状态&#xff0c;事务结束前&#xff0c;会把事务元数据写入这个List里&#xff0c;同时写入一个Compa…

高分辨率光学遥感图像水体分类综述2022.03

本文是Water body classification from high-resolution optical remote sensing imagery: Achievements and perspectives的学习笔记。 相关资源被作者整理到&#xff1a;这里 文章目录 Introduction基本知识 挑战和机遇挑战1. 有限的光谱信息和小场景覆盖2. 形状、大小和分布…

开放原子训练营(第三季)RT-Thread Nano学习营北京站

开放原子训练营&#xff08;第三季&#xff09;RT-Thread Nano学习营北京站学习心得 文章目录 开放原子训练营&#xff08;第三季&#xff09;RT-Thread Nano学习营北京站学习心得RT-Thread简介会议议程介绍RT-Thread Nano介绍RT-Thread Nano实操训练总结 RT-Thread简介 RT-Th…

【网络安全】XXE--XML外部实体注入

XXE XXE定义XML初识菜鸟xml概念初识DTD解答疑虑1&#xff1a;&#xff01;DOCTYPE是干什么用的疑虑2&#xff1a;&#xff01;ELEMENT是干什么用的疑虑3&#xff1a;#PCDATA是干什么用的疑虑4&#xff1a;为什么元素要再次声明类型 内部实体和外部实体的区别内部实体外部实体通…

【Spring篇】DI相关内容

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 目录 一、setter注入 1.环境准备 2.注入引用数据类型 3.注入简单数据类型 二、构造器注入 1.环境准备 2.构造器注入引用数据类型 3.构造器注入多个引用数据类型 4.构造器注入多个简单数据类型 …

OAuth2学习(实操OAuth微信登录)

文章目录 前言1 OAuth2基本概念2 网站应用微信登录2.1 大概流程2.2 前期准备2.3 将微信登录二维码内嵌到自己页面2.3.1 后端接口编写(向前端提供参数)2.3.2 前端显示二维码页面 2.4 编写回调接口2.4.1 回调接口根据code获取access_token 这个令牌2.4.2 回调接口根据access_toke…

大数据分析工具Power BI(十三):制作占比分析图表

文章目录 制作占比分析图表 一、饼图 二、环形图 三、树状图

赛题解析 | kaggle百万奖金新赛--图书墨水检测大赛

整理自kaggle平台 比赛题目 Vesuvius Challenge - Ink Detection kaggle-图书墨水检测 比赛背景 赫库兰尼姆卷轴中使用的墨水在X射线扫描中不容易显示出来。但我们发现机器学习模型可以检测到它。幸运的是&#xff0c;我们有地面实况数据。自从近300年前发现赫库兰尼姆Papyr…

【K8S系列】深入解析Service

序言 Dont count the days. Make the days count 不要数着日子。让日子过得有意义 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 Kubernetes (k8s) 是一个容器编排平…

React 组件 API

常用 React 组件 API&#xff1a; 设置状态&#xff1a;setState替换状态&#xff1a;replaceState设置属性&#xff1a;setProps替换属性&#xff1a;replaceProps强制更新&#xff1a;forceUpdate获取DOM节点&#xff1a;findDOMNode判断组件挂载状态&#xff1a;isMounted …