随火花机森林实现票房预测

  

<强>前言

  

最近一段时间都在处理电影领域的数据,而电影票房预测是电影领域数据建模中的一个重要模块,所以我们针对电影数据做了票房预测建模。

  

<强>前期工作

  

一开始的做法是将这个问题看待成回归的问题,采用GBDT回归树去做。训练了不同残差的回归树,然后做集成学习。考虑的影响因子分别有电影的类型,豆瓣评分,导演的影响力,演员的影响力,电影的出品公司。不过预测的结果并不是那么理想,准确率为真实值的+/- 0.3区间情况下的80%,且波动性较大,不容易解析。

  

<强>后期的改进

  

总结之前的失败经验,主要归纳了以下几点:

  

1。影响因子不够多,难以建模
  2 .票房成绩的区间较大(一百万到10个亿不等),分布不均匀,大多数集中与亿级,所以不适合采用回归方法解决。
  3.数据样本量比较少,不均匀,预测百万级的电影较多,影响预测结果
  

  

后期,我们重新规范了数据的输入格式,即影响因子,具体如下:

  
  

第一行:电影名字
  第二行:电影票房(也就是用于预测的,以万为单位)
  第三行:电影类型
  第四行:片长(以分钟为单位)
  第五行:上映时间(按月份)
  第六行:制式(一般分为2 d, 3 d IMAX)
  第七行:制作国家
  第八行:导演影响(以导演的平均票房成绩为衡量,以万为单位)
  第九行:演员影响(以所有演员的平均票房成绩为衡量,以万为单位)
  第十行:制作公司影响(以所有制作公司的平均票房成绩为衡量,以万为单位)
  第十一行:发行公式影响(以所有制作公司的平均票房成绩为衡量,以万为单位)
  

     

收集了05-17年的来自中国,日本,美国、英国的电影,共1058部电影。由于处理成为分类问题,故按将电影票房分为以下等级:

  

火花随机森林实现票房预测“> <br/>
  </p>
  <p>在构建模型之前,先将数据处理成libsvm格式文件,然后采用随机森林模型训练。<br/>
  </p>
  <p>随机森林由许多的决策树组成,因为这些决策树的形成采用随机的策略,每个决策树都随机生成,相互之间独立。模型最后输出的类别是由每个树输出的类别的众数而定。在构建每个决策树的时候采用的策略是信息熵,决策树为多元分类决策树。随机森林的流程图如下图所示:</p>
  <p> <img src=

  

随机森林是采用spark-mllib提供的随机森林,由于超过10个亿的电影的数据相对比较少,为了平衡各数据的分布,采用了过分抽样的方法,训练模型的代码如下:

        公共空间预测()抛出IOException {   配置=new SparkConf SparkConf () .setAppName(“支持向量机”).setMaster(“本地”);   conf.set (“spark.testing。记忆”、“2147480000”);   SparkContext sc=new SparkContext(设计);   SQLContext SQLContext=new SQLContext (sc);//加载和解析数据文件,将它转换为一个DataFrame。   DataFrame trainData=https://www.yisu.com/zixun/sqlContext.read () .format (libsvm) .load (this.trainFile);   DataFrame testData=https://www.yisu.com/zixun/sqlContext.read () .format (libsvm) .load (this.testFile);//索引标签,将元数据添加到标签栏。//健康>   树16(1.0重量):   如果(功能10 {0.0})   如果(特性48 & lt;=110.0)   如果(86 & lt;=13698.87)   如果(功能21 {0.0})   如果(功能54 {0.0})   预测:0.0   其他(功能54不是{0.0})   预测:1.0   其他(功能21不是{0.0})   预测:0.0   其他(86比;13698.87)   如果(功能21 {0.0})   如果(85 & lt;=39646.9)   预测:2.0   其他(85比;39646.9)   预测:3.0   其他(功能21不是{0.0})   预测:3.0   其他(48比特性;110.0)   如果(85 & lt;=15003.3)   如果(功能9 {0.0})   如果(功能54 {0.0})   预测:0.0   其他(功能54不是{0.0})   预测:2.0   其他(功能9不是{0.0})   预测:2.0   其他(85比;15003.3)   如果{0.0}(65)   如果(85 & lt;=66065.0)   预测:3.0   其他(85比;66065.0)   预测:2.0   其他(65年特性不是{0.0})   预测:3.0   其他(功能10不是{0.0})   如果(功能51 {0.0})   如果(85 & lt;=6958.4)   如果(功能11 {0.0})   如果(特性50 & lt;=1.0)   预测:1.0   其他(50比特性;1.0)   预测:0.0   其他(功能11不是{0.0})   预测:0.0   其他(85比;6958.4)   如果(功能5 {0.0})   如果(功能4 {0.0})   预测:3.0   其他(功能4不是{0.0})   预测:1.0   其他(功能5不是{0.0})   预测:2.0   其他(功能51不是{0.0})   如果(特性48 & lt;=148.0)   如果(功能0 {0.0})   如果(功能6 {0.0})   预测:2.0   其他(功能6不是{0.0})   预测:0.0   其他(功能0不是{0.0})   如果(特性50 & lt;=4.0)   预测:2.0   其他(50比特性;4.0)   预测:3.0   其他(48比特性;148.0)   如果(功能9 {0.0})   如果(特性49 & lt;=3.0)   预测:2.0   其他(49比特性;3.0)   预测:0.0   其他(功能9不是{0.0})   如果(功能36 {0.0})   预测:3.0   其他(功能36不是{0.0})   预测:2.0

随火花机森林实现票房预测