机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据

这篇具有很好参考价值的文章主要介绍了机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

​ 当分析数据时,如果我们找的不是直线或者超平面,而是一条曲线,那么就可以用多项式回归来分析和预测。

2、定义及公式

​ 多项式回归可以写成:
Y i = β 0 + β 1 X i + β 2 X i 2 + . . . + β k X i k Y_{i} = \beta_{0} +\beta_{1}X_{i}+\beta_{2}X_{i}^2+...+\beta_{k}X_{i}^k Yi=β0+β1Xi+β2Xi2+...+βkXik
​ 例如二次曲线:
Y = a X + b X 2 + c Y=aX+bX^2+c Y=aX+bX2+c

3、案例代码

1、数据解析

​ 首先有1961年至2017年我国地表温度变化和温室气体排放量的时间序列数据,前十条数据如下。

temp emissions
0.257 5635838102
-0.142 6075180207
0.288 6510697811
-0.028 6946401541
0.076 7421082166
0.18 7942541079
-0.286 8374764636
-0.414 8842570279
-0.22 9418514950

2、绘制散点图

​ 对于该数据我们先通过绘制散点图,这可以看出该数据适用于什么模型。

import matplotlib.pyplot as plt
import xlrd
import numpy as np
# 载入数据,打开excel文件
ExcelFile = xlrd.open_workbook("sandian.xls")
sheet1 = ExcelFile.sheet_by_index(0)
x = sheet1.col_values(0)
y = sheet1.col_values(1)
# 将列表转换为matrix
x = np.matrix(x).reshape(48, 1)
y = np.matrix(y).reshape(48, 1)

# 划线y
plt.title("Epidemic and Dow Jones data analysis")
plt.xlabel("new cases")
plt.ylabel("Dow Jones Volume")
plt.plot(x, y, 'b.')
plt.show()

机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据

​ 上述使用xlrd方式不建议使用,简单了解即可,正常我们会使用下述更为方便且稳定的pandas来读取csv文件,这会大大简洁我们的代码并减少工作量。当然结果也是一样的。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


x = pd.read_csv('china.csv')['emissions']
y = pd.read_csv('china.csv')['temp']
# 划线y
plt.title("temp and emission")
plt.xlabel("emissions change")
plt.ylabel("temp change")
plt.plot(x, y, 'b.')
plt.show()

​ 如图所示很明显,在排放量变化达到1.5(1e11)时,斜率发生了改变,因此我们可以判断这是一个多项式模型。

3、多项式回归、拟合

​ 通过散点图的趋势,我们首先选择拟合3次来防止过拟合和欠拟合。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.metrics import r2_score
from matplotlib.font_manager import FontProperties  # 导入FontProperties

font = FontProperties(fname="simhei.ttf", size=14)  # 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] =False

x = pd.read_csv('china.csv')['emissions']
y = pd.read_csv('china.csv')['temp']

# 进行多项式拟合(这里选取3次多项式拟合)
z = np.polyfit(x, y, 3) # 用3次多项式拟合
 
# 获取拟合后的多项式
p = np.poly1d(z)
print(p)  # 在屏幕上打印拟合多项式
 
# 计算拟合后的y值
yvals=p(x)
 
# 计算拟合后的R方,进行检测拟合效果
r2 = r2_score(y, yvals)
print('多项式拟合R方为:', r2)
 
# 计算拟合多项式的极值点。
peak = np.polyder(p, 1)
print(peak.r)

# 画图对比分析
plot1 = plt.plot(x, y, '*', label='初始值', color='red')
plot2 = plt.plot(x, yvals, '-', label='训练值', color='blue',linewidth=2)
 
plt.xlabel('温室气体排放量',fontsize=13, fontproperties=font)
plt.ylabel('温度变化',fontsize=13, fontproperties=font)
plt.legend(loc="best")
plt.title('中国温室气体排放量与地表温度变化的关系')
plt.show()

​ 最后结果如下图
机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据

           3             2
3.002e-34 x - 1.351e-22 x + 2.284e-11 x - 0.2613
多项式拟合R方为: 0.7468687074304835
[1.50000065e+11+5.34488173e+10j 1.50000065e+11-5.34488173e+10j]

​ 我们发现,这并不符合我们的预期,因为温室气体排放量在1.5(1e11)时,散点图趋势有明显的凹陷,而使用三次拟合并不能让曲线拟合到散点上。所以我们将 z = np.polyfit(x, y, 4)中的3改为4,来进行四次拟合。
机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据

​ 这样就达到了我们的预期效果,并输出我们的多项式回归公式。

           4             3             2
1.702e-44 x - 6.273e-33 x + 6.634e-22 x - 9.696e-12 x + 0.03595
多项式拟合R方为: 0.7962406171380259
[1.60734484e+11 1.07514523e+11 8.24309615e+09]

​ 我们可以得到数学模型:
Y = 1.702 ∗ 1 0 − 44 X − 6.273 ∗ 1 0 − 33 X + 6.634 ∗ 1 0 − 22 X − 9.696 ∗ 1 0 − 12 X + 0.03595 Y=1.702*10^{-44}X -6.273*10^{-33}X + 6.634*10^{-22}X-9.696*10^{-12}X +0.03595 Y=1.7021044X6.2731033X+6.6341022X9.6961012X+0.03595

4、注意事项

from matplotlib.font_manager import FontProperties  # 导入FontProperties
font = FontProperties(fname="simhei.ttf", size=14)  # 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] =False

​ 这些代码用于显示汉字标题,这需要你的本机中有一个汉字字体文件,simhei.ttf或其他字体文件。

​ 如果需要引入,在第二行中指定文件路径。文章来源地址https://www.toymoban.com/news/detail-420491.html

到了这里,关于机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python做曲线拟合(一元多项式拟合及任意函数拟合)

    目录 1. 一元多项式拟合 使用方法 np.polyfit(x, y, deg) 2. 任意函数拟合 使用 curve_fit() 方法 实例: (1)初始化 x 和 y 数据集 (2)建立自定义函数 (3)使用自定义的函数生成拟合函数绘图  polyfig 使用的是最小二乘法,用于拟合一元多项式函数。 参数说明: x 就是x坐标,

    2024年02月02日
    浏览(41)
  • 自动驾驶规划 - 5次多项式拟合

    自动驾驶运动规划中会用到各种曲线,主要用于生成车辆的轨迹,常见的轨迹生成算法, 如贝塞尔曲线,样条曲线,以及apollo EM Planner的五次多项式曲线 ,城市场景中使用的是分段多项式曲线,在 EM Planner和Lattice Planner 中思路是,都是先通过动态规划生成点,再用5次多项式

    2024年02月03日
    浏览(62)
  • 【Matlab】最小二乘法拟合多项式

    在最近的电机项目中,有遇到有传感器数据并不线性的问题,然后想要用最小二乘法做个曲线拟合,反过来去校准不线性的传感器的数据,因此记录一下使用最小二乘法来拟合多项式的曲线的步骤。本篇从最小二乘法的原始公式入手编写M文件,目的是方便使用单片机实现,或

    2023年04月22日
    浏览(35)
  • matlab RANSAC拟合多项式曲线

    本文由CSDN点云侠原创,原文链接。爬虫网站自重,把自己当个人。爬些不完整的误导别人有意思吗????

    2024年02月12日
    浏览(37)
  • MATLAB polyfit函数——多项式拟合

        此函数用一个n次多项式来拟合一组数据点(x,y),并且将多项式系数以数组p的形式输出,p中的系数按降幂排列,数组长度为 n+1。     如果要将拟合好的多项式系数绘制出来,可以使用polyval函数:     此函数的作用是对给定的x1的值,通过多项式系数数组p计算对应的y1值

    2024年02月16日
    浏览(38)
  • 机器学习-朴素贝叶斯之多项式模型

    贝叶斯概率公式,来自Wang’s Blog的原创 输出结果: 显示的没办法爬数据,我又换了一组数据 输出的效果还挺不错

    2024年02月08日
    浏览(32)
  • Python 中的机器学习简介:多项式回归

            多项式回归可以识别自变量和因变量之间的非线性关系。本文是关于回归、梯度下降和 MSE 系列文章的第三篇。前面的文章介绍了简单线性回归、回归的正态方程和多元线性回归。         多项式回归用于最适合曲线拟合的复杂数据。它可以被视为多元线性回

    2024年02月13日
    浏览(38)
  • 机器学习-朴素贝叶斯(高斯、多项式、伯努利)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 贝叶斯分类器主要思想是基于贝叶斯定理,是机器学习中重要的分类算法,适用于高维度的大数据集,速度快,准确率高,一个经典的应用场景是识别垃圾邮件。

    2023年04月09日
    浏览(64)
  • Matlab 线性拟合、一维、多维度非线性拟合、多项式拟合

      线性拟合 我随便设定一个函数然后通过解方程计算出对应的系数 假设我的函数原型是 y=a*sin(0.1*x.^2+x)+b* squre(x+1)+c*x+d  拟合系数:   利用matlab实现非线性拟合(三维、高维、参数方程)_matlab多元非线性拟合_hyhhyh21的博客-CSDN博客 简单的一维的拟合: 思路: 将非线性-》线

    2024年02月12日
    浏览(39)
  • 数学建模--多项式拟合方法Python实现

    目录    1.算法设计思路  2.算法核心代码  3.算法效果展示 1.算法设计思路  2.算法核心代码  3.算法效果展示

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包