python计算营业额代码_[Python]通过n次多项式线性回归计算拟合度估算销售额
本文基于Python3+
缘由是看到微博上某程序员通过计算拟合度估算出某猫2019双十一的销售额,与现实结果相差无几,本着试一试的态度,也想复现一下结果,而且预测下2020/2021的销售额
直接的线性回归没有太多的参考意义,所以从2次多项式计算到9次多项式的拟合度,代码过程比较简单,就是想得到结果,有兴趣的朋友,直接复制代码就能跑了
图表.png
#!/usr/bin/python3
import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression # 导入线性回归模型
from sklearn.preprocessing import PolynomialFeatures # 导入多项式回归模型
# 字体
myfont = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
plt.title('样本', fontproperties=myfont) # 图像标题
plt.xlabel('年', fontproperties=myfont) # x轴文本
plt.ylabel('销售额', fontproperties=myfont) # y轴文本
plt.grid(True) # 是否绘制网格线
X = [[2009], [2010], [2011], [2012], [2013], [2014], [2015], [2016], [2017], [2018], [2019]]
y = [[0.5], [9.36], [33.6], [191], [350], [571], [912], [1207], [1682], [2135], [2684]]
# 训练数据
X_train = X[:-2]
y_train = y[:-2]
# 做拟合度的数据取训练数据的最后两个
X_test = X[-2:]
y_test = y[-2:]
# 绘制散点图
plt.scatter(X, y, marker='*', color='blue', label='样本')
plt.scatter(X, y, color='blue')
# 线性回归
lin = LinearRegression()
lin.fit(X, y)
plt.plot(X, lin.predict(X), color='green')
def lineReg():
for k in range(2, 10):
# 实例化一个n次多项式特征实例
k_featurizer = PolynomialFeatures(degree=k)
# 用n次多项式对样本X值做变换
X_train_k = k_featurizer.fit_transform(X_train)
# 创建一个线性回归实例
regressor_k = LinearRegression()
# 以n次多项式变换后的X值作为输入,带入线性回归模型做训练
regressor_k.fit(X_train_k, y_train)
# 预测 X_train_k 回归结果
k_predict = regressor_k.predict(X_train_k)
# 计算test 的 拟合度
X_test_k = k_featurizer.transform(X_test)
# 计算拟合度
score = regressor_k.score(X_test_k, y_test)
# test数据集的预测值
predict = regressor_k.predict(X_test_k)
print('%d项式r^2是%.9f' % (k , score))
print('2018预测值:%f,2019预测值:%f ' % (predict[0], predict[1]))
print('2018实际值:%f,2019实际值:%f ' % (y_test[0][0], y_test[1][0]))
def predict():
for k in range(2, 10):
# 实例化一个n次多项式特征实例
k_featurizer = PolynomialFeatures(degree=k)
# 用n次多项式对样本X值做变换
X_train_k = k_featurizer.fit_transform(X)
# 创建一个线性回归实例
regressor_k = LinearRegression()
# 以n次多项式变换后的X值作为输入,带入线性回归模型做训练
regressor_k.fit(X_train_k, y)
# 预测 X_train_k 回归结果
k_predict = regressor_k.predict(X_train_k)
# 用numpy取 [2019. 2020. 2021.]
temp = np.linspace(2019, 2021, 3)
# 把训练好X值的多项式特征实例应用到一系列点上, 预测 [2019. 2020. 2021.] 的结果
temp_cubic = k_featurizer.transform(temp.reshape(temp.shape[0], 1))
predict = regressor_k.predict(temp_cubic)
print('2019预测值:%f,2020预测值:%f,2021年预测值:%f' % (predict[0], predict[1],predict[2]))
# 显示 图表
plt.plot(X, k_predict)
def main():
# 通过循环的方式计算多次回归的拟合度
lineReg()
# 预测
predict()
plt.show()
if __name__ == "__main__":
main()
拟合度结果:
2项式r^2是0.999009072
2018预测值:2146.347619,2019预测值:2688.534857
2018实际值:2135.000000,2019实际值:2684.000000
3项式r^2是0.981902029
2018预测值:2164.020737,2019预测值:2727.418546
2018实际值:2135.000000,2019实际值:2684.000000
4项式r^2是0.981797451
2018预测值:2164.078316,2019预测值:2727.561275
2018实际值:2135.000000,2019实际值:2684.000000
5项式r^2是0.981711425
2018预测值:2164.123781,2019预测值:2727.679546
2018实际值:2135.000000,2019实际值:2684.000000
6项式r^2是0.981627012
2018预测值:2164.168360,2019预测值:2727.795265
2018实际值:2135.000000,2019实际值:2684.000000
7项式r^2是0.981544027
2018预测值:2164.212177,2019预测值:2727.908690
2018实际值:2135.000000,2019实际值:2684.000000
8项式r^2是0.981462598
2018预测值:2164.255172,2019预测值:2728.019663
2018实际值:2135.000000,2019实际值:2684.000000
9项式r^2是0.981382766
2018预测值:2164.297314,2019预测值:2728.128153
2018实际值:2135.000000,2019实际值:2684.000000
从结果总可以看到 二次多项式的拟合度高达99.9%,n次多项式的拟合度高达98.2%
2019 2020 2021 销售额的预测值:
2019预测值:2681.617623,2020预测值:3282.276000,2021年预测值:3943.452000
2019预测值:2683.370096,2020预测值:3287.587899,2021年预测值:3954.073977
2019预测值:2683.370031,2020预测值:3287.595234,2021年预测值:3954.094960
2019预测值:2683.371401,2020预测值:3287.602068,2021年预测值:3954.111979
2019预测值:2683.372503,2020预测值:3287.607168,2021年预测值:3954.124381
2019预测值:2683.373335,2020预测值:3287.610530,2021年预测值:3954.132155
2019预测值:2683.373900,2020预测值:3287.612158,2021年预测值:3954.135298
2019预测值:2683.374207,2020预测值:3287.612072,2021年预测值:3954.133848
因为二次多项式的拟合度高达99.9%,2020年的预测值为3282.27
n次多项式的预测值为3287.61
结果怎么样,2020拭目以待!
python计算营业额代码_[Python]通过n次多项式线性回归计算拟合度估算销售额相关推荐
- python计算面积代码_利用Python求阴影部分的面积实例代码
利用Python求阴影部分的面积实例代码 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...
- python 运行程序代码_一些python程序
<从问题到程序:用Python学编程和计算>--1.2 Python语言简介 本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第1章,第1.2节,作者 ...
- python 动态编译代码_使用PyQt(Python+Qt)+动态编译36行代码实现的计算器
PyQt是基于跨平台的图形界面C++开发工具Qt加Python包装的一个GPL软件(GPL是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译),Qt基于 ...
- python 运行部分代码_改改Python代码,运行速度还能提升6万倍
如果摩尔定律注定终结,人类的算力会被「锁死」吗?MIT.英伟达.微软研究者合著的一篇 Science 论文告诉我们:不会. 这份最新研究指出,在后摩尔定律时代,人类所获得的的算力提升将更大程度上来源于 ...
- python好玩的代码_一行 Python 能实现什么丧心病狂的功能?
能够把自身代码打印出来的程序,叫做Quine.下面是python的一行quine: 有人说有分号不算一行,无分号版: 其实,如果你用程序语言的名字+quine作为关键字去搜索,你能找到各种语言实现的 ...
- python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...
开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...
- python嵌入shell代码_大家一起学python-Python基础1
本节内容 Python简介 Python的发展史 选择Python 2 还是python 3? Python安装 第一个Python程序 Python变量 学习怎么输入 数据类型 数据运算基础 表达式 ...
- python人机交互界面设计_[译]学习IPython进行交互式计算和数据可视化(五)
第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...
- python人工智能课程设计_中小学课程设计:以计算思维培养为核心的人工智能课程设计与实践...
面对国际日趋紧张的科技竞争,发展新一代人工智能已成为各国的重要国家战略.人工智能人才的梯队建设是我国发展人工智能技术和推动产业应用的重要基础. 01存在问题 近年来教育部和各省市教育主管部门发布了一系 ...
最新文章
- influxdb介绍,安装,使用等(转载:http://www.jianshu.com/p/d2935e99006e)
- HarmonyOS之组件布局的创建和使用
- 【MySQL】MySQL USE 库的时候报错 Reading table information for completion of table and column names
- 基于JAVA+Servlet+JSP+MYSQL的新闻发布系统
- 笔记.解决实现客户端修改tls指纹后导致的HTTP2.0 Push数据接收问题
- 【python】语义分割(标签)黑色(单通道)图片的读取和显示方法
- 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
- 拓端tecdat:matlab用Logistic逻辑回归建模和马尔可夫链蒙特卡罗MCMC方法分析汽车实验数据
- [UWP]了解模板化控件(8):ItemsControl
- 求助matable基本
- 中标麒麟操作系统yum源配置
- 基于JavaWeb的会议室预约管理系统
- 国民生产总值饼状图_预期寿命和国内生产总值
- 站桩功(初稿)王芗斋 著
- 身份证号码校验算法(附Python代码)
- 极客日报:中国批准AMD收购赛灵思;微信可直接打开淘宝链接购买商品;​马斯克称今年将实现全自动驾驶
- Unity 调用C# Speech类将文字转换为语音
- Mysql语句DUPLICATE配合IF使用当,插入/更新值大于当前值,更新小于则不更新
- java时间转时间戳_java时间与时间戳互转
- HTML最给力的入门教程
热门文章
- 面试总结及我的准备面试过程。
- 动态menus 动态传参 递归数据
- matlab一计算自动四舍五入6,matlab总结 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...
- 计算机地址栏乱跳,电脑页面会自己乱晃
- .NET中,在方法参数的类型前加一个OUT是做什么用的
- 【华为OD机试】五子棋迷【2023 B卷|100分】
- 《海外社交媒体营销》一一1.1 社交媒体营销——一座潜力巨大的金矿
- UML:UML中的关系
- Tensorflow API 学习(3)-tf.slice()
- Fedora安装到U盘中的教程