使用线性回归预测票房收入 -- 机器学习项目基础篇(10)

news2024/11/22 8:24:20

当一部电影被制作时,导演当然希望最大化他/她的电影的收入。但是我们能通过它的类型或预算信息来预测一部电影的收入会是多少吗?这正是我们将在本文中学习的内容,我们将学习如何实现一种机器学习算法,该算法可以通过使用电影的类型和其他相关特征来预测票房收入。

数据集链接: https://drive.google.com/file/d/1D0iYGJJDUBeR8j33HUfHffEG2LJJfxIE/view

导入库和数据集

Python库使我们可以轻松地处理数据,并通过一行代码执行典型和复杂的任务。

  • Pandas -此库有助于以2D数组格式加载数据框,并具有多个功能,可一次性执行分析任务。
  • Numpy - Numpy数组非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn -此库用于绘制可视化。
  • Sklearn -该模块包含多个库,这些库具有预实现的功能,可以执行从数据预处理到模型开发和评估的任务。
  • XGBoost -这包含eXtreme Gradient Boosting机器学习算法,这是帮助我们实现高精度预测的算法之一。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import metrics
from xgboost import XGBRegressor
 
import warnings
warnings.filterwarnings('ignore')

现在将数据集加载到panda的数据框中。

df = pd.read_csv('boxoffice.csv',
                 encoding='latin-1')
df.head()

在这里插入图片描述
检查数据集的大小

df.shape

输出:

(2694, 10)

检查数据集的每列包含哪种类型的数据

df.info()

在这里插入图片描述

df.describe().T

在这里插入图片描述

数据清理

有时我们需要清理数据,因为原始数据包含大量噪声和不规则性,我们无法在这些数据上训练ML模型。因此,数据清理是任何机器学习的重要组成部分。

# We will be predicting only
# domestic_revenue in this article.
 
to_remove = ['world_revenue', 'opening_revenue']
df.drop(to_remove, axis=1, inplace=True)

让我们检查每列中为空的条目的百分比是多少。

df.isnull().sum() * 100 / df.shape[0]

在这里插入图片描述

# Handling the null value columns
df.drop('budget', axis=1, inplace=True)
 
for col in ['MPAA', 'genres']:
    df[col] = df[col].fillna(df[col].mode()[0])
 
df.dropna(inplace=True)
 
df.isnull().sum().sum()

输出:

0
df['domestic_revenue'] = df['domestic_revenue'].str[1:]
 
for col in ['domestic_revenue', 'opening_theaters', 'release_days']:
    df[col] = df[col].str.replace(',', '')
 
    # Selecting rows with no null values
    # in the columns on which we are iterating.
    temp = (~df[col].isnull())
    df[temp][col] = df[temp][col].convert_dtypes(float)
 
    df[col] = pd.to_numeric(df[col], errors='coerce')

探索性数据分析(EDA)

EDA是一种使用可视化技术分析数据的方法。它用于发现趋势和模式,或在统计摘要和图形表示的帮助下检查假设。

plt.figure(figsize=(10, 5))
sb.countplot(df['MPAA'])
plt.show()

在这里插入图片描述

df.groupby('MPAA').mean()['domestic_revenue']

在这里插入图片描述
在这里,我们可以观察到PG或PG-13评级的电影通常比其他评级级别的电影收入更高。

plt.subplots(figsize=(15, 5))
 
features = ['domestic_revenue', 'opening_theaters', 'release_days']
for i, col in enumerate(features):
    plt.subplot(1, 3, i+1)
    sb.distplot(df[col])
plt.tight_layout()
plt.show()

在这里插入图片描述

plt.subplots(figsize=(15, 5))
for i, col in enumerate(features):
    plt.subplot(1, 3, i+1)
    sb.boxplot(df[col])
plt.tight_layout()
plt.show()

在这里插入图片描述
当然,在上述特征中有很多离群值。

for col in features:
  df[col] = df[col].apply(lambda x: np.log10(x))

现在,我们上面可视化的列中的数据应该接近正态分布。

plt.subplots(figsize=(15, 5))
for i, col in enumerate(features):
    plt.subplot(1, 3, i+1)
    sb.distplot(df[col])
plt.tight_layout()
plt.show()

在这里插入图片描述

从类型创建特征

vectorizer = CountVectorizer()
vectorizer.fit(df['genres'])
features = vectorizer.transform(df['genres']).toarray()
 
genres = vectorizer.get_feature_names()
for i, name in enumerate(genres):
    df[name] = features[:, i]
 
df.drop('genres', axis=1, inplace=True)

但是会有某些类型不那么频繁,这将导致不必要地增加模型的复杂性。因此,我们将删除那些非常罕见的类型。

removed = 0
for col in df.loc[:, 'action':'western'].columns:
 
    # Removing columns having more
    # than 95% of the values as zero.
    if (df[col] == 0).mean() > 0.95:
        removed += 1
        df.drop(col, axis=1, inplace=True)
 
print(removed)
print(df.shape)

输出:

11
(2383, 24)
for col in ['distributor', 'MPAA']:
    le = LabelEncoder()
    df[col] = le.fit_transform(df[col])

由于所有分类特征都已标记编码,让我们检查数据集中是否存在高度相关的特征。

plt.figure(figsize=(8, 8))
sb.heatmap(df.corr() > 0.8,
           annot=True,
           cbar=False)
plt.show()

在这里插入图片描述

模型建立

现在,我们将分离特征和目标变量,并将它们分为训练数据和测试数据,我们将使用这些数据来选择在验证数据上表现最好的模型。

features = df.drop(['title', 'domestic_revenue', 'fi'], axis=1)
target = df['domestic_revenue'].values
 
X_train, X_val,\
    Y_train, Y_val = train_test_split(features, target,
                                      test_size=0.1,
                                      random_state=22)
X_train.shape, X_val.shape

输出:

((2144, 21), (239, 21))
# Normalizing the features for stable and fast training.
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)

XGBoost库模型在大多数情况下有助于实现最先进的结果,因此,我们还将训练此模型以获得更好的结果。

from sklearn.metrics import mean_absolute_error as mae
model = XGBRegressor()
model.fit(X_train, Y_train)

我们现在可以使用剩余的验证数据集来评估模型的性能。

train_preds = models[i].predict(X_train)
print('Training Error : ', mae(Y_train, train_preds))
 
val_preds = models[i].predict(X_val)
print('Validation Error : ', mae(Y_val, val_preds))

输出:

Training Error :  0.42856612214280154
Validation Error :  0.4440195944190588

我们看到的平均绝对误差值介于预测值和实际值的对数之间,因此实际误差将高于我们上面观察到的值。

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

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

相关文章

# ⛳ Docker 安装、配置和详细使用教程-Win10专业版

目录 ⛳ Docker 安装、配置和详细使用教程-Win10专业版🚜 一、win10 系统配置🎨 二、Docker下载和安装🏭 三、Docker配置🎉 四、Docker入门使用 ⛳ Docker 安装、配置和详细使用教程-Win10专业版 🚜 一、win10 系统配…

20230808在WIN10下使用python3将TXT文件转换为DOCX

20230808在WIN10下使用python3将TXT文件转换为DOCX 2023/8/8 19:30 缘起,由于google的文档翻译不支持SRT/TXT格式的字幕,因此需要将SRT格式的字幕转为DOCX。 Ch4.Unreported.World.2022.Mexicos.Psychedelic.Toads.1080p.HDTV.x265.AAC.MVGroup.org.mkv …

FK-坦克大战制作(一)菜单制作

1、Cocos Creator新建2d项目 2.在资源管理器中新建场景menu 新建scences文件夹》新建场景》改名为menu 3.在层级管理器的Canvas下新建Layout节点,并在此节点下新建Label标签 4.双击Label,在属性检查器中进行编辑 5. 添加动画:(对文本进行放大…

代码随想录算法训练营day57

文章目录 Day57回文子串题目思路代码 最长回文子序列题目思路代码 Day57 回文子串 647. 回文子串 - 力扣(LeetCode) 题目 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。…

JavaWeb学习|JSP相关内容

1.什么是JSP Java Server Pages: Java服务器端页面,也和Servlet一样,用于动态Web技术! 最大的特点: 。写JSP就像在写HTML 。区别: 。HTML只给用户提供静态的数据 。JSP页面中可以嵌入JAVA代码,为用户提供动态数据 JSP最终也会被转换成为一…

使用Python和wxPython将图片转换为草图

导语: 将照片转换为艺术风格的草图是一种有趣的方式,可以为您的图像添加独特的效果。在本文中,我们将介绍如何使用Python编程语言和wxPython图形用户界面库来实现这一目标。我们将探讨如何使用OpenCV库将图像转换为草图,并使用wxPython创建一…

科研热点|5本Scopus期刊不再被收录,Scopus期刊目录更新(附下载)!

此次Scopus期刊目录更新后,有5本期刊不再被收录(Discontinued titles July 2023),同上次更新时相比,此次又新增139本期刊(Accepted titles)进入Scopus数据库。目前Scopus 来源出版物列表(Scopus Sources&am…

[Java]JDK新特性

目录 一、JDK新特性 1.1Java Record 1.1.1Record的使用 1.1.2Instance Methods 1.1.3静态方法 Static Method 1.1.4Record构造方法 1.1.5Record与Lombok 1.1.6Record实现接口 1.1.7Local Record 1.1.8嵌套Record 1.1.9instanceof判断Record类型 1.1.10总结 1.2Swit…

std::string 的append方法 存放文本和非文本数据

今天在用std::string来拼接数据 有文本数据 也有 非文本数据 如果是文本数据那么append方法参数为 ( char *data, int len) 将data的前len个字节附加到 string中 如果是非文本数据 则参数为(int size, char data); 重复size个data 附加…

【IMX6ULL驱动开发学习】02.hello驱动程序之cdev注册字符设备驱动程序和设置次设备号

目录 ​编辑 一、register_chrdev 二、解决方法 2.1 alloc_chrdev_region函数:注册一系列字符设备编号 2.2 cdev_init函数:初始化cdev结构体 2.3 cdev_add函数:将字符设备添加到系统中 三、驱动程序 一、register_chrdev major reg…

Java SPI机制的原理和实践

SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。Java 中 SPI 机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心…

【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SpringMVC的架构有什么优势?——表单和数据校验(四)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Qt5.14.2+QtCreator+PDB 查看源码

1. 在Creator添加源码 2. 安装PDB文件 Qt下载时没有整合最新的PDB文件下载,如果没有安装PDB文件,即使安装了src也无法调试。 双击MaintenanceTool.exe->设置->资料档案库->临时资料档案库->添加按钮,添加如下下载源&#xff1a…

Android平台GB28181设备接入端如何实现多视频通道接入?

技术背景 我们在设计Android平台GB28181设备接入模块的时候,有这样的场景诉求,一个设备可能需要多个通道,常见的场景,比如车载终端,一台设备,可能需要接入多个摄像头,那么这台车载终端设备可以…

接口测试—Fiddler工具

文章目录 Fiddler 知识1. 导语2. 配置3. 常用命令面试题1. 利用Fiddler抓取android设备https请求 Fiddler 知识 未完待续 1. 导语 为什么要用Fiddler? 提高测试效率. 测试人员通过使用Fiddler自己调试接口,无需麻烦后台同学帮忙. 模拟多种测试环境. 可…

项目管理者联盟创始人宣晓锋受邀为第十二届中国PMO大会演讲嘉宾

项目管理者联盟创始人宣晓锋先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:项目集管理PgMP:升维项目管理认知与能力。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 从组织战略…

【C语言题解】将一句话的单词进行倒置,标点不倒置。

题目描述:将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。 文章目录 原题目题目描述:输入描述:输出描述:题目链接: 整体思路分…

rv1126移植并部署自写手写数字识别模型

首先搭建好rknntoolkit以及rknpu环境 --> MNIST->https://github.com/warren-wzw/MNIST-pytorch.git 大致流程 生成rknn文件----------------------------------------------------------------------------------------- 1:进入docker docker run -t -i…

【工具插件类教学】电脑端移动端缩放大图自适应Simple Zoom

目录 简介 1.创建Canvas并设置 2.使用预制体Zoom 3.商店地址 简介 特点: •易于使用和高度可定制。 •支持鼠标(桌面)和触摸(移动)。 •指定最小和最大缩放的限制。 •缩放指针(鼠标/手指)或屏幕上预定义的自定义位置。 •变焦时使用夹紧/弹性变焦类型。 •定义缩…