精华内容
下载资源
问答
  • python拟合曲线数据预测
    千次阅读
    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:01
    python的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()

    下图是单个和多个高斯拟合图像

    20200412001252603.png

    下图是多项式拟合图像

    20200412001252799.png

    图例的位置可以自定义设置

    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:47
    http://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')

    展开全文
  • from scipy import interpolate import matplotlib.pyplot as plt ...绘制拟合曲线图 plt.show() return interpolate.splev(x, tck) print (f(10))   结果:   参考资料: ...
  • 文中提到利用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函数曲线拟合

    2022-07-27 13:19:54
    对一些实验数据点的曲线拟合
  • 使用Python简单通过最小二乘法输出拟合曲线及多项式拟合方程
  • 前言本文仅做根据已知点求拟合曲线的几种方法的python实现,无任何实际意义数据来源(另一篇博文) 利用Python爬取新冠肺炎疫情实时数据,Pyecharts画2019-nCoV疫情地图参考 ...
  • 下面是我在文本文件中绘制数据散点图的代码。 我打开的文件包含两列。 左列为x坐标,右列为y坐标。 代码创建了x和y之间的散点图,我需要一段代码来过度绘制一条最适合散点图中的数据的行,而且我没有一个内置的pylab...
  • #-*-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:30
    import numpy as np import matplotlib.pyplot as plt # 导入用到的库 ... _x, _y = sample.split(',') # 数据是用逗号隔开的,所以调用python的split方法并将逗号作为参数传入 x.append(float...
  • 1、什么是多项式曲线拟合 多项式拟合就是我们需要得到一个无限逼近真实曲线的的多项式: 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:43
    Python日记(9)——曲线拟合 每天做一个Python小练习,顺便记录一些小技巧。 曲线拟合 应用方法: 最小二乘法 原理: 函数解析式未知,通过实验观测得到的一组数据,即在某个区间[a,b]上给出 一系列点的函数值yi = f...
  • 使用Python进行数据拟合

    千次阅读 2021-07-08 19:46:54
    使用Python进行数据拟合 文章目录使用Python进行数据拟合多项式拟合非多项式拟合 多项式拟合 任何一个函数都可以拆分成近似于这个函数的多项式表达。 多项式拟合需要用到的函数是np.polyfit,它的使用方法为: np...
  • '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 线性回归分析模型检验标准--拟合优度详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 以前在工作中遇到了一个数据错误的问题,顺便写下 用 Math.Net 解决的思路。1. 错误的数据上图是同一组探测器在同一天采集到的 19 次数据,总体来说重复性不错,但很明显最后 8 个...
  • 在这里用红色显示他的数据的95%置信区间,由GraphPad Prism计算: 背景:“拟合曲线的置信区间”通常称为置信带.对于95%置信区间,可以95%确信它包含真实曲线. (这与预测频带不同,如上所示为灰色.预测频带是关于...
  • 原文出处:拓端数据部落公众号 支持向量回归(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实现分类与预测Python实现分类与预测 Python实现分类与预测
  • from 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进行数据预处理(最大最小值规范化、零均值规范化、剔除奇异值、去噪、曲线拟合),小白也能看懂!!
  • 绘制带有最佳拟合线的散点图最佳拟合线数据准备数据展示图例选择根据图例筛选数据绘制图像 最佳拟合线        •当我们想要研究数据集中两个变量之间如何相互改变,使用最佳拟合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,303
精华内容 5,321
关键字:

python拟合曲线数据预测