python计算营业额代码_[Python]通过n次多项式线性回归计算拟合度估算销售额

本文基于Python3+

缘由是看到微博上某程序员通过计算拟合度估算出某猫2019双十一的销售额,与现实结果相差无几,本着试一试的态度,也想复现一下结果,而且预测下2020/2021的销售额

直接的线性回归没有太多的参考意义,所以从2次多项式计算到9次多项式的拟合度,代码过程比较简单,就是想得到结果,有兴趣的朋友,直接复制代码就能跑了

a7b76e4d2028

图表.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拭目以待!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值