数学建模之多项式回归
多项式回归(Polynomial Regression)
- 前言
- 一、多项式回归的原理
- 二、多项式回归方法
- 2.1polyfit函数
- 2.2poly1d函数
- 2.3poly1d和polyfit同时使用
前言
对于多项式回归方法来说,若你的数据点不适合线性回归(就是直线大部分不穿过数据点),那么使用该方法就比较合适。
并且多项式回归像线性回归一样,都是用变量 x 和 y 之间的关系来找到绘制数据点线最好的方法。
一、多项式回归的原理
Python 中有一些方法可以找到数据点之间的关系并画出多项式回归线。
例如:研究乙醇转化率与温度的关系
# 建立一元一次方程y = ax + b
import numpy as np
import matplotlib.pyplot as plt# A1组温度与乙醇转换率的关系图-散点图
x=np.array([250,275,300,325,350]).reshape((-1, 1))
y=np.array([2.07,5.85,14.97,19.68,36.80])plt.scatter(x, y) # 绘制散点图
plt.title('A1')
plt.show()
结果如下:
很明显如果用线性回归的,所有的数据点不能落在同一条直线上
用多项式回归方法来做:
# 多项式拟合
import numpy
import matplotlib.pyplot as pltx=[250,275,300,325,350]
y=[2.07,5.85,14.97,19.68,36.80]mymodel = numpy.poly1d(numpy.polyfit(x, y, 4)) # 四阶myline = numpy.linspace(250, 350, 100) # 从位置250开始,到位置350结束plt.scatter(x, y) # 散点图
plt.plot(myline, mymodel(myline), label='A1') # 多项式回归
plt.legend() # 设置图例
plt.show() # 显示
print('A1组中温度与乙醇转换率的关系中阶数的系数:', numpy.polyfit(x, y, 4))
结果如下:
A1组中温度与乙醇转换率的关系中阶数的系数: [ 2.83413333e-06 -3.36325333e-03 1.49119667e+00 -2.92472967e+022.14005200e+04]
温度和乙醇转换率的关系为:
# y=2.83413333e-06 * x ^4 -3.36325333e-03 * x^3 + 1.49119667e+00 * x ^2 -2.92472967e+02 * x + 2.14005200e+04
上述代码详解:
- 导入模块:`
import numpy
import matplotlib.pyplot as plt
- 创建x和y轴的数组
x=[250,275,300,325,350]
y=[2.07,5.85,14.97,19.68,36.80]
- numpy-poly1d方法来建立多项式模型
mymodel = numpy.poly1d(numpy.polyfit(x, y, 4)) # 四阶
- 指定行的显示方法,从位置250开始,到位置350结束
myline = numpy.linspace(250, 350, 100) # 从位置250开始,到位置350结束
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
作用:在指定的大间隔内(start,stop),返回固定间隔的数据。他们返回num个等间距的样本。
参数介绍:start : scalar(标量) — 队列的开始值
stop:scalar — 队列的结束值 (当endpoint=False时,不包含该点。)
num:int,optional(可选填),生成序列的个数,默认为50,必须为整数。
endpoint:bool,True时stop是最后的样本。False时stop不被包含。默认为True。
retstep:bool,True时会改变计算的输出结果,输出为一个元组,元组的两个元素分别是需要生成的数列和数列的步长值。默认为False。
- 绘制散点图
plt.scatter(x, y) # 散点图
- 多项式回归线mymodel(行位置变量)
plt.plot(myline, mymodel(myline), label='A1') # 多项式回归
二、多项式回归方法
2.1polyfit函数
polyfit对应的是多项式系数
函数原型为:
numpy.polyfit(x,y,num)
可以对一组数据进行多项式拟合。
例子:
import matplotlib.pyplot as plt
import numpy as np# 构建噪声数据xu,yu
xu = np.random.rand(50) * 4 * np.pi - 2 * np.pi
def f(x):return np.sin(x) + 0.5 * x
yu = f(xu)plt.figure(figsize=(8, 4))
# 用噪声数据xu,yu,得到拟合多项式系数,自由度为5
reg = np.polyfit(xu, yu, 5)
# 计算多项式的函数值。返回在x处多项式的值,p为多项式系数,元素按多项式降幂排序
ry = np.polyval(reg, xu)
# 原先函数绘制
plt.plot(xu, yu, 'bo', label='f(x)')#蓝色虚线
# 拟合绘制
plt.plot(xu, ry, 'r.', label='regression')#红色点状
plt.legend(loc=0)# 位置
plt.show()# 显示
结果如下:
2.2poly1d函数
poly1d对应的就是多项式表达式
numpy.poly1d()函数有以下几个参数。
分别为:
- 参数为:系数
import numpya= numpy.array([2,1,1])
f = numpy.poly1d(a)
print('表达式为:\n', f)
- 参数为:bool
把数组的值作为根,然后反向推导多项式,例如:(x-2)(x-4)(x-5)
则有:(x - 2)(x - 4)(x - 5) = x^3 - 11x^2 + 38x -40
- poly1d还可以计算多项式的值
2.3poly1d和polyfit同时使用
例子:
import numpy
import matplotlib.pyplot as pltx=[250,275,300,325,350]
y=[2.07,5.85,14.97,19.68,36.80]polyfit=numpy.polyfit(x, y, 4)# 多项式系数
poly1d = numpy.poly1d(polyfit)# 多项式表达式myline = numpy.linspace(250, 350, 100) # 从位置250开始,到位置350结束plt.scatter(x, y) # 散点图
plt.plot(myline, poly1d(myline), label='A1') # 多项式回归
plt.legend() # 设置图例
plt.show() # 显示
print('系数:\n', polyfit)
print('表达式:\n', poly1d)
数学建模之多项式回归相关推荐
- Algorithm:数学建模大赛(CUMCM/NPMCM)之全国大学生数学建模竞赛历年考察知识点统计可视化分析、论文评阅标准参考、国内外CUMCM数学建模类参考文献论文集合之详细攻略
Algorithm:数学建模大赛(CUMCM/NPMCM)之全国大学生数学建模竞赛历年考察知识点统计可视化分析.论文评阅标准参考.国内外CUMCM数学建模类参考文献论文集合之详细攻略 目录 全国大学生 ...
- 2021数学建模国赛B题复盘详细解析
声明:本赛题为去年的题目,想着2022的国赛即将来临,我决定花一个晚上再次回顾经典题目. 未经允许,不得转载.--CSDN:川川菜鸟 题目 C4 烯烃广泛应用于化工产品及医药的生产,乙醇是生产制备 C ...
- 【2022年华为杯数学建模E题赛后总结加思路详细介绍配代码----10月11号写的总结】
提示:下文将介绍2022年华为杯数学建模E题赛后总结加思路详细介绍配代码 傻逼队友,傻逼队友,傻逼队友一定要看好人在进行组队,这是劝告. 这里有几点总结进行描述: 第一,图一定要尽量多,对图的解释要多 ...
- 2020“数维杯”国际大学生数学建模竞赛赛题分析
2020"数维杯"国际大学生数学建模竞赛赛题分析 1.ABCD赛题分析 1.1A题翻译:中国螺纹钢需求预测 1.2B题翻译:股票价格的混沌模型 1.3C题翻译:城市道路最佳除雪方案 ...
- 数学建模预测模型实例(一)---大学生体测数据模型
数学建模预测模型实例–大学生体测数据模型 数学建模预测模型实例(一)-大学生体测数据模型 数学建模预测模型实例(二)-表白墙影响力量化模型 python预测算法-线性回归 建立模型的目的 本篇文章中, ...
- u=q k 的交通流模型图 matlab,数学建模回归分析matlab版.ppt
<数学建模回归分析matlab版.ppt>由会员分享,可在线阅读,更多相关<数学建模回归分析matlab版.ppt(51页珍藏版)>请在装配图网上搜索. 1.2020/11/2 ...
- 数学建模——对2017年国赛C题论文的学习
2017年C题论文总结 思想和算法 回归分析 简单地说,回归分析就是对拟合问题做的统计分析. 我们根据一个样本算出的那些系数,只是它们的一个(点)估计,应该对它们作区间估计或假设检验,如果置信区间太大 ...
- Matlab与数学建模
一.学习目标. (1)了解Matlab与数学建模竞赛的关系. (2)掌握Matlab数学建模的第一个小实例-评估股票价值与风险. (3)掌握Matlab数学建模的回归算法. 二.实例演练. 1.谈谈你 ...
- 2021 年高教社杯全国大学生数学建模竞赛A题分析
2021 年高教社杯全国大学生数学建模竞赛A题分析 题目 赛题分析 前言 问题一分析 问题二分析 问题三分析 题目 A 题 "FAST"主动反射面的形状调节 中国天眼--500 米 ...
最新文章
- Arduino可穿戴教程ArduinoIDE新建编辑源文件
- Qt利用avilib实现录屏功能_利用 dogtail 快速进行 GUI 自动化测试
- 化腐朽为神奇:推荐一个让算法动起来更好理解的学习项目!
- Iterator迭代器原理
- 为Elasticsearch添加中文分词
- linux网卡IP同一网段,Linux下多网卡不同IP在同一网段的情况
- java的标识符可以以数字开头_标识符可以以数字开头,但不能是Java中的关键字...
- python读取数据库数据类型_Python中从SQL型数据库读写dataframe型数据
- 剑指offer 面试题59 - II. 队列的最大值
- Android源码分析之 JobScheduler
- 10种用户友好的验证码
- python中文显示不出来_彻底解决Python里matplotlib不显示中文的问题
- No pubspec.yaml file found. This command should be run from the root of your Flutter project. Do not
- iphone已停用怎么解锁_iPhone X已停用 连接iTunes 怎么办
- <永洪BI>慢查询记录
- msm8953 usb记录
- buuctf Mark loves cat
- 开源自主导航小车MickX4(五)gmapping建图
- 计算机三级嵌入式上传学习资源介绍
- 第三节:带你详解Java的操作符,控制流程以及数组
热门文章
- qa 芯片测试_[转]芯片设计中验证Verification,确认Validation以及测试Test的区别
- 最近有些无聊写了一个抓取github的ss账号的东西
- 大数据来了!长沙互联网人才工作满意度、幸福感指数全国第二
- ftp服务器上的文件发生错误450,FTP常见错误解决办法
- java json 下划线_为什么rest接口返回json建议采用下划线形式,不要用驼峰
- 手机腾讯缓存视频地址
- Postgre SQL 跨数据库解决方案
- 数据科学、管理科学系课程教学课件——FineReport实验指导书节选====双十二仓库出单
- DTOJ 1587:Hamsters(hamsters)
- 3.04.08localStorage与sessionStorage