-
2022-01-26 10:28:25
Python_拟合多项式并预测
需要使用的模块
numpy
初始化数据
以列表的形式导入(列表内的数据必须是数值型)
num_x = [...] num_y = [...] x = numpy.array(num_x) y = numpy.array(num_y)
也可以直接初始化
numpy.ndarray
对象num_x = [...] num_y = [...] x = numpy.zeros(len(num_x)) y = numpy.zeros(len(num_y)) # 然后逐一导入数据 for i in range(len(num_x)): x[i] = num_x[i] y[i] = num_x[i] # 注意这个对象虽然看来是列表形式的,但实际上不是,所以不能使用append()
该对象的内部数据形式
''' [0.46981163 0.80075814 0.09964955 0.37890761 0.2650933 0.31628878 0.91808893 0.0145856 0.57455246 0.53082407 0.02810338 0.82485248 0.27567205 0.86225695 0.67937601 0.64436468 0.50801514 0.74002311 0.35550654 0.59271749 0.32824979 0.04932156 0.58561606 0.48792921 0.11215748 0.19286186 0.25224102 0.76515066 0.04928864 0.62978241 0.62320733 0.93044909 0.5212575 0.02558131 0.42817565 0.24744022 0.91785279 0.13239371 0.65855355 0.92242441 0.280845 0.63201731 0.86534876 0.85806012 0.87509949 0.88361419 0.58132066 0.14300146 0.06674203 0.92075683 0.84842896 0.33914303 0.15057493 0.00295414 0.22454145 0.31915917 0.31217369 0.93501314 0.87887448 0.29873817 0.17098519 0.28102075 0.7320147 0.19014982 0.15022144 0.60383853 0.62033784 0.28640719 0.94580551 0.1557577 ] '''
拟合多项式
求多项式每项的系数(多项式的阶
deg
需要自己设定)coeff = numpy.polyfit(x,y,deg=2) # 这里拟合的是最高次为二次的多项式
求整个多项式
func = numpy.poly1d(coeff)
预测数据
直接代入系数求解
now_x = now_y = numpy.ployval(coeff,now_x)
使用求得的多项式函数求解
now_x = now_y = func(now_x)
P e f e r e n c e Peference Peference
(11条消息) python 对于任意数据和曲线进行拟合并求出函数表达式的三种方案。_changdejie的专栏-CSDN博客_python 曲线拟合
更多相关内容 -
python 拟合曲线并求参
2020-11-23 19:37:01python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。import numpy as npimport matplotlib...需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,
所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。
python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math
#单个高斯模型,如果曲线有多个波峰,可以分段拟合
def func(x, a,u, sig):
return a*np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (sig * math.sqrt(2 * math.pi))
#混合高斯模型,多个高斯函数相加
def func3(x, a1, a2, a3, m1, m2, m3, s1, s2, s3):
return a1 * np.exp(-((x - m1) / s1) ** 2) + a2 * np.exp(-((x - m2) / s2) ** 2) + a3 * np.exp(-((x - m3) / s3) ** 2)
#正弦函数拟合
#def fmax(x,a,b,c):
# return a*np.sin(x*np.pi/6+b)+c
#fita,fitb=optimize.curve_fit(fmax,x,ymax,[1,1,1])
#非线性最小二乘法拟合
#def func(x, a, b,c):
# return a*np.sqrt(x)*(b*np.square(x)+c)
#用3次多项式拟合,可推广到n次多项式,数学上可以证明,任意函数都可以表示为多项式形式
#f1 = np.polyfit(x, y, 3)
#p1 = np.poly1d(f1)
#yvals = p1(x) #拟合y值
#也可使用yvals=np.polyval(f1, x)
拟合,并对参数进行限制,bounds里面代表参数上下限,p0是初始范围,默认是[1,1,1]
x=np.arange(1,206,1)
num = []<-自己的y值
numhunt = []<-自己的y值
y = np.array(num)
yhunt = np.array(numhunt)
popt, pcov = curve_fit(func3, x, y)
popthunt, pcovhunt = curve_fit(func, x, yhunt,p0=[2,2,2])
ahunt = popthunt[0]
uhunt = popthunt[1]
sighunt = popthunt[2]
a1 = popt[0]
u1 = popt[1]
sig1 = popt[2]
a2 = popt[3]
u2 = popt[4]
sig2 = popt[5]
a3 = popt[6]
u3 = popt[7]
sig3 = popt[8]
yvals = func3(x,a1,u1,sig1,a2,u2,sig2,a3,u3,sig3) #拟合y值
yhuntvals = func(x,ahunt,uhunt,sighunt) #拟合y值
print(u'系数ahunt:', ahunt)
print(u'系数uhunt:', uhunt)
print(u'系数sighunt:', sighunt)
#绘图
plot1 = plt.plot(x, y, 's',label='insect original values')
plot2 = plt.plot(x, yvals, 'r',label='insect polyfit values')
plot3 = plt.plot(x, yhunt, 's',label='predator original values')
plot4 = plt.plot(x, yhuntvals, 'g',label='predator polyfit values')
plt.xlabel('date')
plt.ylabel('Nightly catches log10(N+1)')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('insect/predator')
plt.show()
下图是单个和多个高斯拟合图像
下图是多项式拟合图像
图例的位置可以自定义设置
lower left
upper center
lower right
center
upper left
center left
upper right
lower center
best
center right
right
以上就是python 拟合曲线并求参的全部内容。
-
数据预测与曲线拟合
2020-12-04 21:23:10曲线拟合的作用在数据分析时,我们有时需要通过已有数据来预测未来数据。在一些复杂的数据模型中,数据维度很多,数据之间的关系很复杂,我们可能会用到深度学习的算法。但是在一些简单的数据模型中,数据之间有很...什么是曲线拟合
所谓的曲线拟合,就是使用某一个模型(或者称为方程式),将一系列的数据拟成平滑的曲线,以便观察两组数据之间的内在联系,了解数据之间的变化趋势。
曲线拟合的作用
在数据分析时,我们有时需要通过已有数据来预测未来数据。在一些复杂的数据模型中,数据维度很多,数据之间的关系很复杂,我们可能会用到深度学习的算法。但是在一些简单的数据模型中,数据之间有很明显的相关性,那我们就可以使用简单的曲线拟合来预测未来的数据。
曲线拟合的方法
Excel曲线工具
假设我们有一组用户生命周期价值(LTV)和天数的对应数据
DayLTV1$0.202$0.353$0.454$0.525$0.576$0.607$0.628$0.63
将数据放进Excel中,插入折线图
右击蓝色曲线,选择“添加趋势线”,并选择趋势线为“对数”,并勾选“显示公式”
可以看到,曲线图中出现了一条虚线的曲线,并显示了对应的公式为
Excel的趋势线工具提供了几个常用的函数,包括指数函数、对数函数等,可以满足一般需求。但是如果数据曲线相对复杂的话,就需要用到下面的工具了。
Excel Solver
要使用Solver,首先需要进入Excel的选项,启用“规划求解”工具
启用之后,在工具栏“数据”标签页下,会多出一个“规划求解”的工具
我们先看一下这个工具的界面,就可以大概了解它的功能。简单来说,Solver可以通过改变一些单元格的值,来使一个目标单元格的值最接近理想值。
我们还是用之前的表格来举例如何使用Solver。现在已经知道了LTV对于Day来说是一条类似对数函数的曲线,可以使用对数函数来模拟。我们假设这个函数是
其中a和b为参数,是可变的。我们调整一下表格,添加一列Estimate LTV,为根据a、b和Day列计算出来的值。再增加一列Diff,为Estimate LTV和Real LTV的差值的平方(平方是为了防止不同行的正负差值会互相抵消),最后加总这些差值。
我们希望通过改变a、b的值,使通过公式得出的LTV与真实LTV的偏差最小,即Total Diff(F18)的值最小。打开规划求解工具,设置如下
点击求解,片刻后即可计算出最接近目标的a、b值
可以看到,a、b的值和使用趋势线得到的值是一样的。
在线工具
介绍一个非常好用的在线曲线拟合工具:
Python matplotlib库
Python的matplotlib库有一个自定义公式来拟合曲线的功能。下面代码演示了通过它来拟合上述例子的过程
# -*- coding: UTF-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import scipy.optimize as optimization
data_day = [1,2,3,4,5,6,7,8] #x坐标值|x coord
data_ltv = [0.2,0.35,0.45,0.52,0.57,0.6,0.62,0.63] #y坐标值|y coord
xdata = np.array(data_day)
ydata = np.array(data_ltv)
#定义使用的公式|customize equation
def lnFunction(x, A, B):
return A*np.log(x)+B
guess = [1, 1] #定义初始A、B|initialize a and b
try:
params, params_covariance = optimization.curve_fit(lnFunction, xdata, ydata, guess) #拟合,A、B结果存入params|curve fitting and store a, b values to params
print params
result = '' #输出结果|to store result
for i in range(1, 15):
result += str(round(lnFunction(i, params[0], params[1]), 2)) #将i带入公式中的x,使用拟合出的A、B值计算y值,并保留两位小数|calculate result for each i as x using the a, b values, and round the result to 2 points
if i != 14:
result += ',' #每个结果用逗号隔开,并省略最后一个逗号|separate each result with comma, and omit the last comma
print result
except:
print ''
输出结果为:
[0.21482987 0.20772681]
0.21,0.36,0.44,0.51,0.55,0.59,0.63,0.65,0.68,0.7,0.72,0.74,0.76,0.77
曲线拟合公式
在前面的例子中,我们使用了对数函数来进行拟合。在上文提到的在线曲线拟合工具网站中,也列出了一些常见的拟合方程,包括直线、多项式、对数、指数等。其中有一个方程对于拟合自然曲线非常好用,就是四参数方程。
四参数方程的格式为:
我们还是用最开始的Day/LTV数据来举例,比较一下它和对数函数拟合的结果。
四参数方程 – Solver比较
修改一下之前的Excel表,将Estimate LTV列使用的公式修改成四参数方程
在规划求解设置中,依然是期望Total Diff达到最小值,可变单元格增加了c、d两个参数
点击求解,获得a、b、c、d四个参数的最优解。我们可以看到,Total Diff比使用对数函数时减少了将近一半
四参数方程 – matplotlib比较
同样,我们修改一下python脚本,改为使用四参数方程。请注意,我们这次添加了一个param_bounds值,将C这个参数限定在了0.001到正无穷。这是因为C在公式中充当了分母,不能等于0,而我还没找到一个有效的限制C不为0的方法。
# -*- coding: UTF-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import scipy.optimize as optimization
data_day = [1,2,3,4,5,6,7,8] #x坐标值|x coord
data_ltv = [0.2,0.35,0.45,0.52,0.57,0.6,0.62,0.63] #y坐标值|y coord
xdata = np.array(data_day)
ydata = np.array(data_ltv)
#定义使用的公式|customize equation
def fourPL(x, A, B, C, D):
return ((A-D)/(1.0+((x/C)**(B))) + D)
guess = [1, 1, 1, 1] #定义初始A、B值|initialize a and b
param_bounds = ([-np.inf,-np.inf,0.001,-np.inf],[np.inf,np.inf,np.inf,np.inf])
try:
params, params_covariance = optimization.curve_fit(fourPL, xdata, ydata, guess, bounds = param_bounds) #拟合,A、B、C、D结果存入params|curve fitting and store a, b, c, d values to params
print params
result = '' #输出结果|to store result
for i in range(1, 15):
result += str(round(fourPL(i, params[0], params[1], params[2], params[3]), 2)) #将i带入公式中的x,使用拟合出的A、B、C、D值计算y值,并保留两位小数|calculate result for each i as x using the a, b, c, d values, and round the result to 2 points
if i != 14:
result += ',' #每个结果用逗号隔开,并省略最后一个逗号|separate each result with comma, and omit the last comma
print result
except:
print ''
输出结果为
[0.0923509 1.73652154 2.41689489 0.70144044]
0.2,0.35,0.45,0.52,0.57,0.6,0.62,0.63,0.65,0.65,0.66,0.67,0.67,0.67
可以看到,相对于Excel Solver来说,matplotlib库获得的结果更精准,预测值和真实值几乎没有偏差。
-
python曲线拟合
2020-12-10 14:35:47http://blog.sina.com.cn/s/blog_aed5bd1d0102vid7.html1.多项式拟合范例:import matplotlib.pyplot as pltimport numpy as np#潘海东,2014/1/13x = np.arange(1, 17, 1)y = np.array([4.00, 6.40, 8.00, 8.80, ...http://blog.sina.com.cn/s/blog_aed5bd1d0102vid7.html
1.多项式拟合范例:
import matplotlib.pyplot as plt
import numpy as np
#潘海东,2014/1/13
x = np.arange(1, 17, 1)
y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])
z1 = np.polyfit(x, y, 3)#用3次多项式拟合
p1 = np.poly1d(z1)
print(p1) #在屏幕上打印拟合多项式
yvals=p1(x)#也可以使用yvals=np.polyval(z1,x)
plot1=plt.plot(x, y, '*',label='original values')
plot2=plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend(loc=4)#指定legend的位置,读者可以自己help它的用法
plt.title('polyfitting')
plt.show()
plt.savefig('p1.png')
2.指定函数拟合
#潘海东,2014/1/13
#使用非线性最小二乘法拟合
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
#用指数形式来拟合
x = np.arange(1, 17, 1)
y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])
def func(x,a,b):
return a*np.exp(b/x)
popt, pcov = curve_fit(func, x, y)
a=popt[0]#popt里面是拟合系数,读者可以自己help其用法
b=popt[1]
yvals=func(x,a,b)
plot1=plt.plot(x, y, '*',label='original values')
plot2=plt.plot(x, yvals, 'r',label='curve_fit values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend(loc=4)#指定legend的位置,读者可以自己help它的用法
plt.title('curve_fit')
plt.show()
plt.savefig('p2.png')
-
python拟合数据,并通过拟合的曲线去预测新值的方法
2018-10-29 10:49:00from scipy import interpolate import matplotlib.pyplot as plt ...绘制拟合曲线图 plt.show() return interpolate.splev(x, tck) print (f(10)) 结果: 参考资料: ... -
如何利用excel和python构建拟合曲线预测可转债股票价格?
2021-09-26 10:47:57文中提到利用excel拟合曲线插值预测转债价格的方法,点赞过30了,看来感兴趣的朋友不少,今天给大家详细地写一下教程。 一、准备工具 1、Microsoft Excel 2、可转债数据:转股价值和转债价格 二、操作方法 1、从集思... -
用python做曲线拟合
2020-12-04 21:23:06我们也可以尝试用python编写脚本来拟合数据,方便数据自动化处理。曲线拟合分为一般多项式拟合和指定函数拟合。准备工作:1.建立python环境(https://www.jianshu.com/p/daf5d33ae62e)2.安装模块numpy、matplotlib、... -
运用python实现2019-nCoV疫情确诊数据拟合与预测
2021-01-06 20:05:01第三步,利用拟合曲线对未来预测 下面严格按照这散布走模式进行 第一步 散点图 按照时间序列将确诊病人数在坐标轴上描出散点,同时添加坐标的标签,顺便更改横坐标的刻度标签,使得其看起来像随时间变化而变化的。 ... -
Python函数曲线拟合
2022-07-27 13:19:54对一些实验数据点的曲线拟合。 -
使用Python最小二乘法拟合曲线的代码实现
2022-03-30 18:40:57使用Python简单通过最小二乘法输出拟合曲线及多项式拟合方程 -
2019_nCoV_利用python根据已知点求拟合曲线及简单预测(无实际意义)
2020-12-13 05:43:45前言本文仅做根据已知点求拟合曲线的几种方法的python实现,无任何实际意义数据来源(另一篇博文) 利用Python爬取新冠肺炎疫情实时数据,Pyecharts画2019-nCoV疫情地图参考 ... -
python散点图拟合曲线-python散点图拟合
2020-11-01 13:12:55下面是我在文本文件中绘制数据散点图的代码。 我打开的文件包含两列。 左列为x坐标,右列为y坐标。 代码创建了x和y之间的散点图,我需要一段代码来过度绘制一条最适合散点图中的数据的行,而且我没有一个内置的pylab... -
Python计算&绘图——曲线拟合问题(转)
2020-12-10 14:35:13#-*-coding:cp936-*-importmathimportrandomimportmatplotlib.pyplotaspltimportnumpyasnp'''''在x=[0,1]上均匀采样10个点组成一个数据集D=[a,b]'''a=[]b=[]x=0deffunc(x):mu=0sigma=0.1epsilon=random.gauss(mu... -
曲线拟合python代码
2022-04-02 19:33:30import numpy as np import matplotlib.pyplot as plt # 导入用到的库 ... _x, _y = sample.split(',') # 数据是用逗号隔开的,所以调用python的split方法并将逗号作为参数传入 x.append(float... -
机器学习之多项式曲线拟合的Python实现
2021-10-27 17:17:491、什么是多项式曲线拟合 多项式拟合就是我们需要得到一个无限逼近真实曲线的的多项式: y(x,W)=w0+w1x+w2x2+…+wkxk=∑i=0kwixi y(x,W) = w_0 + w_1x + w_2x^2 + … + w_kx^k = \sum_{i=0}^{k}w_ix^i y(x,W)=w0+... -
Python日记(9)——曲线拟合
2022-03-30 19:27:43Python日记(9)——曲线拟合 每天做一个Python小练习,顺便记录一些小技巧。 曲线拟合 应用方法: 最小二乘法 原理: 函数解析式未知,通过实验观测得到的一组数据,即在某个区间[a,b]上给出 一系列点的函数值yi = f... -
使用Python进行数据拟合
2021-07-08 19:46:54使用Python进行数据拟合 文章目录使用Python进行数据拟合多项式拟合非多项式拟合 多项式拟合 任何一个函数都可以拆分成近似于这个函数的多项式表达。 多项式拟合需要用到的函数是np.polyfit,它的使用方法为: np... -
【Python】keras使用LSTM拟合曲线
2020-12-22 00:05:36'g') plt.plot(test_y, 'r') plt.show() plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=False) 拟合结果: 基于 Keras 用 LSTM 网络做时间序列预测 目录 基于 Keras 用 LSTM 网络做... -
python 线性回归分析模型检验标准--拟合优度详解
2020-09-17 20:37:34今天小编就为大家分享一篇python 线性回归分析模型检验标准--拟合优度详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
[C#] 使用 Excel 和 Math.Net 进行曲线拟合和数据预测
2022-01-21 01:19:30以前在工作中遇到了一个数据错误的问题,顺便写下 用 Math.Net 解决的思路。1. 错误的数据上图是同一组探测器在同一天采集到的 19 次数据,总体来说重复性不错,但很明显最后 8 个... -
python – 指数曲线拟合的置信区间
2021-03-17 22:42:27在这里用红色显示他的数据的95%置信区间,由GraphPad Prism计算: 背景:“拟合曲线的置信区间”通常称为置信带.对于95%置信区间,可以95%确信它包含真实曲线. (这与预测频带不同,如上所示为灰色.预测频带是关于... -
拓端tecdat|Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例
2021-12-28 22:30:11原文出处:拓端数据部落公众号 支持向量回归(SVR)是一种回归算法,它应用支持向量机(SVM)的...在本教程中,我们将通过在 Python 中使用 SVR ,简要了解如何使用 SVR 方法拟合和预测回归数据。教程涵盖: .. -
[Python] 多项式曲线拟合(Polynomial Curve Fitting)
2020-03-30 17:40:56多项式曲线拟合Polynomial Curve Fitting实验目标实现过程- Step 1 :生成观测集和目标函数- Step 2 :比较不同阶数多项式的拟合效果- Step 3 :通过增大数据规模改善过拟合现象- Step 4 : 通过正则化改善过拟合... -
挖掘建模②—分类与预测(python实现简单线性关系 多项式拟合/回归)
2021-12-05 18:02:18挖掘建模②—Python实现分类与预测Python实现分类与预测 Python实现分类与预测 -
python数据处理三:使用sklearn实现曲线拟合
2020-12-05 16:17:15from sklearn.linear_model import LinearRegression from sklearn.preprocessing ...#获取待拟合数据 x = np.linspace(1, 50, 50) f = np.poly1d([2,5,10]) y = f(x) #注意,x的形状要是2D, #因为fit_transform函数 -
python进行数据预处理(最大最小值规范化、零均值规范化、剔除奇异值、去噪、曲线拟合)
2021-10-23 17:29:04python进行数据预处理(最大最小值规范化、零均值规范化、剔除奇异值、去噪、曲线拟合),小白也能看懂!! -
Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)
2021-07-01 10:50:39绘制带有最佳拟合线的散点图最佳拟合线数据准备数据展示图例选择根据图例筛选数据绘制图像 最佳拟合线 •当我们想要研究数据集中两个变量之间如何相互改变,使用最佳拟合...