scikit-learn线性回归法进行利润预测

大家好,生成式人工智能无疑是一个改变游戏规则的技术,但对于大多数商业问题来说,回归和分类等传统的机器学习模型仍然是首选。

私募股权或风险投资这样的投资者利用机器学习,首先必须了解关注的数据以及它是如何被使用的。投资公司的决策不仅仅基于可量化的数据,如支出、增长和烧钱率等,还包括创始人的记录、客户反馈、产品体验等定性数据。

本文将介绍线性回归的基础知识,完整的代码可以从下面的链接获取。

【使用Python机器学习线性回归模型进行利润预测 】

1.项目设置

本文将使用Jupyter Notebook进行这个项目,首先导入一些库。

# 绘制图表
import matplotlib.pyplot as plt
# 数据管理和处理
from pandas import DataFrame
# 绘制热力图
import seaborn as sns
# 分析
from sklearn.metrics import r2_score
# 用于训练和测试的数据管理
from sklearn.model_selection import train_test_split
# 导入线性模型
from sklearn.linear_model import LinearRegression
# 代码注释
from typing import List

2.数据

为了简化问题,本文将使用区域数据。这些数据代表了公司的支出类别和利润。可以看到一些不同数据点的示例。本文希望使用支出数据来训练一个线性回归模型并预测利润。

重要的是要理解本文将使用的数据描述的是一家公司的支出情况,只有将支出数据与收入增长、当地税收、摊销和市场状况等数据结合起来时,才能得到有意义的预测能力。

R&D SpendAdministrationMarketingSpend Profit
165349.2136897.8471784.1192261.83
162597.7151377.59443898.53191792.06
153441.51101145.55407934.54191050.39

加载数据

companies: DataFrame = pd.read_csv("companies.csv", header = 0)

3.数据可视化

了解数据对于确定要使用的特征、需要进行归一化和转换的特征、从数据中删除异常值以及对特定数据点进行的处理是很重要的。

可以直接访问利润,使用DataFrame绘制直方图(Pandas使用Matplotlib来绘制数据帧):

companies['Profit'].hist( color='g', bins=100);

可以看到,利润超过20万美元的异常值非常少,由此还可以从中推断出本文的数据代表的是具有特定规模的公司。由于异常值的数量相对较少,可以将其保留。 

下面绘制支出特征直方图,希望可以看到使用特征的直方图并查看其分布情况,Y轴表示数字频率,X轴表示支出。

companies[["R&D Spend", "Administration", "Marketing Spend"
]].hist(figsize=(16, 20), bins=50, xlabelsize=8, ylabelsize=8)

图片

还可以看到有一个健康的分布,只有少量的异常值,可以预期在研发和市场营销上花费更多的公司利润更高。从下面的散点图中可以看出,研发支出和利润之间存在明显的相关性。

profits: DataFrame = companies[["Profit"]]
research_and_development_spending: DataFrame = companies[["R&D Spend"]]figure, ax = plt.subplots(figsize = (9, 9))
plt.xlabel("R&D Spending")
plt.ylabel("Profits")
ax.scatter(research_and_development_spending, profits, s=60, alpha=0.7, edgecolors="k",color='g',linewidths=0.5
)

图片

通过相关热图进一步探索支出和利润之间的相关性,从图中可以看出,研发和市场营销支出与利润的相关性比行政支出更高。

sns.heatmap(companies.corr())

图片

4.模型训练

需要将数据集分割为训练集和测试集两部分,Sklearn提供了一个辅助方法来完成这个任务。鉴于本文的数据集很简单且足够小,可以按照以下方式将特征和目标分离开来。

features: DataFrame = companies[["R&D Spend", "Administration", "Marketing Spend",
]]
targets: DataFrame = companies[["Profit"]]train_features, test_features, train_targets, test_targets = train_test_split(features, targets,test_size=0.2
)

大多数人会使用不同的命名约定,如X_trainy_train或其他类似的变体,创建并训练模型。

model: LinearRegression = LinearRegression()
model.fit(train_features, train_targets)

5.模型评估

对模型的性能及其可用性进行评估,首先查看计算得到的系数。在机器学习中,系数是用来与每个特征相乘的学习到的权重或数值,期望看到每个特征都有一个学习系数。

coefficients = model.coef_"""
We should see the following in our consoleCoefficients  [[0.55664299 1.08398919 0.07529883]]
"""

正如上述所看到的,有3个系数,每个特征对应一个系数(“研发支出”、“行政支出”、“市场营销支出”)。还可以将其绘制成图表,以便更直观地了解每个系数。

plt.figure()
plt.barh(train_features.columns, coefficients[0])
plt.show()

图片

为了解模型的误差率,将使用Sklearn的R2得分:

test_predictions: List[float] = model.predict(test_features)
root_squared_error: float = r2_score(test_targets, test_predictions)
"""float
We should see an ouput similar to this
0.9781424529214315
"""

离1越近,模型就越准确,实际上可以用一种非常简单的方式对这一点进行测试。

可以取数据集的第一行,如果使用下面的支出模型来预测利润,期望得到一个足够接近192261美元的数字。

"R&D Spend" |  "Administration" |  "Marketing Spend" | "Profit"
165349.2       136897.8            471784.1            192261.83

接下来创建一个推理请求:

inference_request: DataFrame = pd.DataFrame([{"R&D Spend":165349.2, "Administration":136897.8, "Marketing Spend":471784.1 
}])

运行模型:

inference: float = model.predict(inference_request)
"""
We should get a number that is around
199739.88721901
"""

现在可以看到的误差率是abs(199739-192261)/192261=0.0388,这说明模型是非常准确的。

综上,处理数据、搭建模型和分析数据有很多方法,没有一种解决方案适用于所有情况。当用机器学习解决业务问题时,其中一个关键过程是搭建多个旨在解决同一个问题的模型,并选择最有前途的模型。

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

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

相关文章

anaconda 笔记:安装anaconda之后显示conda command not found

解决方法是在.bashrc文件中添加如下一行文字(如果没有.bashrc文件,就在root中新建一个这个文件) export PATH$PATH:/home/Your_name/anaconda3/bin也就是安装anaconda3的路径 然后退出编辑,在命令行中敲入 source ~/.bashrc即可…

云原生Kubernetes系列 | init container初始化容器的作用

云原生Kubernetes系列 | init container初始化容器的作用 kubernetes 1.3版本引入了init container初始化容器特性。主要用于在启动应用容器(app container)前来启动一个或多个初始化容器,作为应用容器的一个基础。只有init container运行正常后,app container才会正常运行…

Spring——IOC,DI,AOP

Spring框架是一个轻量级的Java开发框架,它提供了许多功能强大的特性来简化Java应用程序的开发。其中,IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)是Spring框架的三大核心特性。…

k8s安装学习环境

目录 环境准备 配置hosts 关闭防火墙 关闭交换分区 调整swappiness参数 关闭setlinux Ipv4转发 时钟同步 安装Docker 配置Yum源 安装 配置 启动 日志 安装k8s 配置Yum源 Master节点 安装 初始化 配置kubectl 部署CNI网络插件 Node节点 检查 环境准备 准…

同步代码,异步代码-微任务 宏任务 事件循环(输出题)

1.知识点 事件循环: 由浏览器Web API管理的异步代码,如果有结果后,会根据这个异步代码的类型,被放入对应的微任务或宏任务当中。当执行栈的任务(同步代码)全部执行完毕后,再执行完所有微任务的…

springboot(ssm 二手图书交易系统 图书销售系统Java(codeLW)

springboot(ssm 二手图书交易系统 图书销售系统Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#…

Google Guava 缓存工具使用详解

文章目录 缓存工具Cache接口LoadingCache接口CacheBuilder类CacheLoader类CacheStats类RemovalListener类 缓存工具 Guava提供了Cache接口和相关的类来支持缓存功能,它提供了高性能、线程安全的内存缓存,可以用于优化应用程序的性能。 特点&#xff1a…

Flutter 控件查阅清单

为了方便记录和使用Flutter中的各种控件,特写此博客以记之,好记性不如烂笔头嘛:) 通过控件的首字母进行查找,本文会持续更新 控件目录 AAppBar BCContainerColumn (列) DDivider (分割线) EElev…

oj赛氪练习题,

区间内的真素数 import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int M scanner.nextInt();int N scanner.nextInt();scanner.close();ArrayList<Integer>…

Google Guava 散列工具使用详解

文章目录 散列哈希函数哈希码布隆过滤器 散列 Guava 提供了一组散列&#xff08;哈希&#xff09;相关的工具类和方法&#xff0c;包括哈希函数接口、哈希算法实现、哈希码&#xff08;HashCode&#xff09;类、布隆过滤器&#xff08;BloomFilter&#xff09;等等。 Guava 提…

【大连民族大学C语言CG题库练习题】——组合1

【问题描述】 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 【输入形式】 【输出形式】 【样例输入】 4 2 【样例输出】 [2,4] [3,4] [2,3] [1,2] [1,3] [1,4] 【样例说明】 【评分标准】 代码思路&a…

吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析

一、首先要做什么 选择特征向量的关键决策 以垃圾邮件分类器算法为例&#xff0c;首先需要决定如何选择和表达特征向量 &#x1d465;。视频提到的一个示例是构建一个由 100 个最常出现在垃圾邮件中的词构成的列表&#xff0c;根据这些词是否在邮件中出现来创建特征向量&…

Java CompletableFuture使用示例

在我之前的文章IO密集型服务提升性能的三种方法中提到过&#xff0c;提升IO密集型应用性能有个方式就是异步编程&#xff0c;实现异步时一定会用到Future&#xff0c;使用多线程Future我们可以让多个任务同时去执行&#xff0c;最后统一去获取执行结果&#xff0c;这样整体执行…

Docker下安装可视化工具Portainer

目录 Portainer简介 Portainer安装 Portainer简介 Portainer是一款开源的容器管理平台&#xff0c;支持多种容器技术&#xff0c;如Docker、Kubernetes和Swarm等。它提供了一个易于使用的Web UI界面&#xff0c;可用于管理和监控容器和集群。Portainer旨在使容器管理更加简单…

如何在Ubuntu上安装pip3

一、检查系统是否安装pip3 首先&#xff0c;我们需要检查系统中是否已经安装了pip3。为此&#xff0c;我们可以运行以下命令&#xff1a; pip3 --version如果系统已经安装了pip3&#xff0c;您将会看到输出结果类似于&#xff1a; pip 19.0.3 from /usr/local/lib/python3.6…

内部类Lambda

静态内部类 /*** 静态成员是在类加载成字节码时就已经存在的,静态只能访问静态*/ public class Demo {public static void main(String[] args) {Outer.Inner.show();} }class Outer {int num1 10;static int num2 20;static class Inner {static void show() {Outer outer …

Kubernetes实战(六)-多系统架构容器镜像构建实战

1 背景 最近在一个国产化项目中遇到了这样一个场景&#xff0c;在同一个 Kubernetes 集群中的节点是混合架构的&#xff0c;即其中某些节点的 CPU 架构是 x86 的&#xff0c;而另一些节点是 ARM 的。为了让镜像在这样的环境下运行&#xff0c;一种最简单的做法是根据节点类型为…

6-15 复制字符串

#include<stdio.h> #include<string.h> int main(){int i;char s1[80],s2[80];printf("输入的s2是&#xff1a;");scanf("%s",s2);for(i0;i<strlen(s2);i)s1[i]s2[i];printf("复制后的s1是&#xff1a;%s\n",s1); return 0;}

ES如何提高召回率之【词干提取】

想要提高召回率就需要尽可能匹配相关的文档&#xff0c;其中一个办法就是在索引阶段对词语分析&#xff08;分词器&#xff09;的时候提取词干&#xff0c;搜索的时候也取词干。 不取词干 es默认使用的是标准的分词器&#xff0c;是不会取词干的。 但是标准分词器是包含小写转…

HttpRunner自动化工具之实现参数化传递

参数化实现及重复执行 参数化测试&#xff1a;在接口测试中&#xff0c;为了实现不同组数据对同一个功能模块进行测试&#xff0c;需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化&#xff1a; 1、在YAML/JSON 中直接指定参数列表 2、…