精华内容
下载资源
问答
  • 以前都是用origin来进行拟合,但是参数...花了一下午了解了一下用Python拟合已有的函数,感觉还不错,分享出来给大家。初学Python,大神们多多包涵。# -*- coding: utf-8 -*-"""Created on Tue Nov 24 14:50:56 20...

    以前都是用origin来进行拟合,但是参数初值需要猜测,有时候不一定能够得到正确结果。后来用过MATLAB的工具箱,可以拟合,但电脑要安装MATLAB还是占挺大空间的。花了一下午了解了一下用Python来拟合已有的函数,感觉还不错,分享出来给大家。初学Python,大神们多多包涵。

    # -*- coding: utf-8 -*-

    """

    Created on Tue Nov 24 14:50:56 2020

    @author: fan

    """

    import pandas as pd

    import numpy as np

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit

    df1 = pd.read_excel('F:/langmuir.xls',header=None,usecols="A") #导入数据,A列为x轴备用

    df2 = pd.read_excel('F:/langmuir.xls',header=None,usecols="B") #导入数据,B列为y轴备用

    Ce0 = np.array(df1) #dataframe转数组,此时为单列数组,需要转置为单行

    Ce = Ce0[:,0]  #转置

    print(Ce)

    qe0 = np.array(df2) #dataframe转数组,此时为单列数组,需要转置为单行

    qe = qe0[:,0] #转置

    print(qe)

    # 这里的函数可以自定义任意形式。

    def func(Ce, qm, Ka):

    return qm*Ka*Ce/(1+Ka*Ce)

    # popt返回的是给定模型的最优参数。我们可以使用pcov的值检测拟合的质量,其对角线元素值代表着每个参数的方差。

    param_bounds=([0,0],[np.inf,np.inf]) #参数上下限,第一个方括号为所有参数下限,第二个为所有参数上限

    popt, pcov = curve_fit(func, Ce, qe, bounds=param_bounds) #拟合函数

    qm = popt[0]

    Ka = popt[1]

    qe_pre = func(Ce,qm,Ka) #拟合y值

    plot1 = plt.plot(Ce, qe, 's',label='original values')

    plot2 = plt.plot(Ce, qe_pre, 'r',label='polyfit values')

    plt.xlabel('Ce')

    plt.ylabel('qe')

    plt.legend(loc=4) #右下角画图例

    SSE = ((qe_pre-qe)**2).sum()

    chi_square = ((qe-qe_pre)**2/qe_pre).sum()

    #计算R平方

    from sklearn.metrics import r2_score

    r2 = r2_score(qe, qe_pre)

    print('qm=',qm)

    print('Ka=',Ka)

    print('拟合R方为:',r2)

    print('SSE =',SSE)

    print('chi_square =',chi_square)

    展开全文
  • 因为你想要拟合一个遵循高斯、洛伦兹等分布的数据集,你可以通过提供它们的具体方程来实现。在举个小例子:import numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fitimport numpy .....

    一般来说,只要我们知道最适合数据集的等式,scipy.optimize.curve_fit就可以工作了。因为你想要拟合一个遵循高斯、洛伦兹等分布的数据集,你可以通过提供它们的具体方程来实现。在

    举个小例子:import numpy as np

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit

    import numpy as np

    xdata = np.array([-2,-1.64,-1.33,-0.7,0,0.45,1.2,1.64,2.32,2.9])

    ydata = np.array([0.69,0.70,0.69,1.0,1.9,2.4,1.9,0.9,-0.7,-1.4])

    def func(x, p1,p2):

    return p1*np.cos(p2*x) + p2*np.sin(p1*x)

    # Here you give the initial parameters for p0 which Python then iterates over

    # to find the best fit

    popt, pcov = curve_fit(func,xdata,ydata,p0=(1.0,0.3))

    print(popt) # This contains your two best fit parameters

    # Performing sum of squares

    p1 = popt[0]

    p2 = popt[1]

    residuals = ydata - func(xdata,p1,p2)

    fres = sum(residuals**2)

    print(fres)

    xaxis = np.linspace(-2,3,100) # we can plot with xdata, but fit will not look good

    curve_y = func(xaxis,p1,p2)

    plt.plot(xdata,ydata,'*')

    plt.plot(xaxis,curve_y,'-')

    plt.show()

    以上是针对我的具体情况,其中我使用了一个Harmonic addition formula,它适合我的数据集。通过在func定义中提供它,您可以相应地更改高斯方程或任何其他方程。在

    您的参数将相应地变化。如果它是一个高斯分布,你将有你的sigma(标准差)和mean作为未知参数。在

    展开全文
  • 个分段函数拟合到该数据集中,然后绘制结果.数据在下面以红色绘制.为了提供一些背景信息,y值表示电动机旋转x度所花费的毫秒数.我已将原始值上传到this Pastebin.我现在想分段地拟合三个函数:>多项式适合数据的...

    我有一个与this previous StackOverflow question类似的问题.我有一个数据集,我想将几??个分段函数拟合到该数据集中,然后绘制结果.

    数据在下面以红色绘制.

    为了提供一些背景信息,y值表示电动机旋转x度所花费的毫秒数.我已将原始值上传到this Pastebin.

    我现在想分段地拟合三个函数:

    >多项式适合数据的开始,在该数据处电动机正在加速到最大速度.

    >达到最大速度时的线性拟合.

    >多项式拟合后,电动机将关闭并减速.

    到目前为止,我已经尝试使用下面的代码对两个线性函数进行分段拟合.给定数据的样子,我期望看到一个沿数据从原点到大约ms = 550的斜率,然后从那里平行于x轴的第二条线.

    但是,这不是我得到的:

    ?

    在尝试使用三个函数进行逐段拟合之前,我首先要了解为什么得到此图而不是我期望的图.

    所以我的问题是:

    >谁能解释如何更正我的代码以使其适合两个线性函数?

    >如何使用三个函数扩展代码以绘制分段拟合?

    用于创建以上绘图的代码如下:

    from pandas import *

    import matplotlib.pyplot as plt

    import numpy as np

    from scipy import optimize

    #Getting data using Pandas

    df = read_csv("test_data.csv")

    ms = df["ms"].values

    degrees = df["Degrees"].values

    #A piece wise function taken from the other stackoverflow

    def piecewise_linear(x, x0, y0, k1, k2):

    return np.piecewise(x, [x < x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])

    #Setting linspace and making the fit

    x_new = np.linspace(ms[0], ms[-1])

    p , e = optimize.curve_fit(piecewise_linear, ms, degrees)

    #Plotting data and fit

    fig = plt.figure()

    ax = fig.add_subplot(111)

    ax.plot(x_new, piecewise_linear(x_new, *p), '.', df)

    ax.set_ylim([0, 450])

    ax.set_xlim([0, 800])

    展开全文
  • import numpy as npz1 = np.polyfit(X_train[:,1], y_train, 1) #一次多项式拟合,相当于线性拟合,返回的是[k,b],即模型的系数p1 = np.poly1d(z1)#给出模型表达式,真tm人性化print z1 #[ 1. 1.49333333]print p1...

    import numpy as np

    z1 = np.polyfit(X_train[:,1], y_train, 1) #一次多项式拟合,相当于线性拟合,返回的是[k,b],即模型的系数

    p1 = np.poly1d(z1)#给出模型表达式,真tm人性化

    print z1 #[ 1. 1.49333333]

    print p1 # 1 x + 1.493

    [ 0.13493869 21.35130147]

    0.1349 x + 21.35

    z = np.polyval(z1, X_train[:,1])#用刚刚拟合处理的模型z1来代入X_train[:,1]求得预模型的测值并保存在z中

    z

    array([ 24.05007536, 21.35130147, 21.35130147, 28.77292967,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 34.17047745, 24.05007536, 23.03803515,

    21.35130147, 21.35130147, 21.35130147, 24.05007536,

    25.93921708, 32.14639703, 21.35130147, 25.80427839,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 32.14639703, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 24.31995275, 21.35130147,

    21.35130147, 26.07415578, 21.35130147, 21.35130147,

    32.14639703, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 24.31995275, 21.35130147,

    24.72476883, 24.05007536, 21.35130147, 21.35130147,

    21.35130147, 24.05007536, 25.12958491, 21.35130147,

    21.35130147, 24.72476883, 21.35130147, 32.82109051,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 32.14639703, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 26.07415578, 28.43558293,

    21.35130147, 31.47170356, 34.17047745, 24.18501405,

    24.05007536, 21.35130147, 21.35130147, 24.05007536,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    32.14639703, 25.3994623 , 21.35130147, 21.35130147,

    21.35130147, 24.05007536, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    24.05007536, 24.72476883, 24.05007536, 21.35130147,

    24.72476883, 23.03803515, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    32.14639703, 21.35130147, 25.93921708, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 23.03803515,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 26.74884925, 21.35130147, 28.43558293,

    21.35130147, 21.35130147, 29.44762314, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 25.80427839,

    24.05007536, 25.3994623 , 21.35130147, 21.35130147,

    21.35130147, 23.03803515, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 25.12958491, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    32.14639703, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 25.12958491, 24.72476883,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 28.77292967, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 26.74884925, 24.05007536, 26.74884925,

    21.35130147, 21.35130147, 21.35130147, 24.05007536,

    23.03803515, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 27.42354272, 21.35130147, 21.35130147,

    24.31995275, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 24.05007536,

    27.42354272, 21.35130147, 24.31995275, 21.35130147,

    27.42354272, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 28.43558293, 21.35130147, 32.14639703,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 24.05007536, 21.35130147,

    31.47170356, 25.80427839, 24.72476883, 26.74884925,

    21.35130147, 21.35130147, 24.05007536, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 24.31995275, 21.35130147, 21.35130147,

    24.18501405, 33.49578398, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 30.79701009,

    21.35130147, 29.44762314, 21.35130147, 32.48374377,

    21.35130147, 21.35130147, 21.35130147, 32.14639703,

    32.14639703, 21.35130147, 24.31995275, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 25.3994623 ,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    33.49578398, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 23.03803515, 31.47170356, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    27.42354272, 24.05007536, 24.72476883, 34.17047745,

    33.49578398, 24.18501405, 21.35130147, 21.35130147,

    21.35130147, 24.05007536, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 24.31995275,

    21.35130147, 21.35130147, 23.03803515, 21.35130147,

    23.03803515, 24.72476883, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 28.77292967,

    21.35130147, 21.35130147, 24.31995275, 21.35130147,

    21.35130147, 24.72476883, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    21.35130147, 21.35130147, 21.35130147, 21.35130147,

    32.14639703, 25.93921708, 21.35130147, 21.35130147,

    21.35130147, 24.72476883, 21.35130147, 32.14639703,

    34.84517093, 32.48374377, 21.35130147, 32.14639703,

    21.35130147, 21.35130147, 21.35130147])

    展开全文
  • 这是我的问题:我有实验数据以适应模型 . 为此,我使用了scipy中的curve_fit . 该脚本没有任何错误或警告,但没有给出令人满意的结果(它给了我一条准线而不是两个洛伦兹形图) .但最奇怪的是,当我给拟合函数一个猜测...
  • 专栏作者简书专栏:https://www.jianshu.com/u/2f376f777ef1公众号:Python爱好者社区编者注:本文采用梯度下降法来求解的logistic回归,关于其思想以及编程原理见本人之前文章《梯度下降法求解线性回归的python实现...
  • 回归分析可分为线性回归和非线性回归。线性回归分析相信大家都已经非常熟悉了,它主要分析有线性回归趋势的两个变量间的关系。但是在处理许多实际问题时,变量间的关系并非直线关系,例如细菌生长曲线、药物动力学、...
  • 1. 非线性回归当出现非线性关系的时候,有多种解决方案可扩展线性回归模型以捕获这些非线性效应,包括:多项式回归:这是建模非线性关系的简单方法。它将多项式项或二次项(预测变量的平方、立方等)添...
  • 就可以改进我们的线性回归法,使得它可以对非线性的数据进行处理,相应的进行预测,也就是所谓的多项式回归,通过多项式回归这种方法,将引出在机器学习中或许是最为重要的概念,也就是模型泛化相关的问...
  • 本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型模型中的特征为(x1,x2,...,xn)表示为:引入x0=1,则...
  • 当使用散点图观察自变量...1 概念曲线回归是指对于非线性关系的变量进行回归分析的方法。曲线回归实际上是将数学关系表达式,转换成线性表达式,然后进行线性回归分析,SPSSAU默认给出转换后的模型结果。曲线回归方...
  • 来自烟水暖的学习笔记回归分析(Regression analysis) 回归分析... 回归分析的分类:1) 按自变量的个数,可以分为一元回归,多元回归2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。 ...
  • python线性拟合curve_fit

    千次阅读 2019-12-27 16:36:09
        非线性回归的情况太过复杂,在生产实践中也尽量避免使用这种模型。好在分类算法有很多,而且更多的是为了处理半结构化数据,所以非线性回归相关的内容只做一般了解即可。     非线性回归一般可以分为...
  • 但是,如果您的线性回归模型无法为目标变量和预测变量之间的关系建模,该怎么办?换句话说,如果它们没有线性关系怎么办?好吧,这就是多项式回归可能会提供帮助的地方。在本文中,我们将学习多项式回归,并使用...
  • (小小:机器学习的经典算法与应用)(小小:机器学习理论(一)KNN-k近邻算法)(小小:机器学习理论(二)简单线性回归)(小小:机器学习理论(三)多元线性回归)(小小:机器学习理论(四)线性回归中的梯度下降法)(小小...
  • 常见的回归:线性回归、岭回归、非线性回归 回归拟合目标:计算自变量与因变量关系的函数参数 通过不断拟合缩小预测值与真实值的差距:最终使得这个差距(误差项)成为一组均值为0,方差为1的随机数。 2、损失函数 ...
  • 常见的回归:线性回归、岭回归、非线性回归;回归拟合目标:计算自变量与因变量关系的函数参数;通过不断拟合缩小预测值与真实值的差距:最终使得这个差距(误差项)成为一组均值为0,方差为1的随机数。2、损失函数总...
  • 01 非线性决策边界的logistic回归拟合常规的logistic回归在解决分类问题时,通常是用于线性决策边界的分类(如下图-左图),因为logistic回归可以视为线性回归的一种转化,其回归模型为 (sigmoid函数):式中的z=θTx...
  • python求解多元多次方程组或非线性方程组

    万次阅读 多人点赞 2020-02-24 18:15:05
    背景:如何使用python求解多元多次方程组或者非线性方程组。 原创内容,转载注明出处! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容也新发了新的更新...
  • 来自烟水暖的学习笔记回归分析(Regression analysis) 回归分析... 回归分析的分类:1) 按自变量的个数,可以分为一元回归,多元回归2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。 ...
  • Fabber是一种贝叶斯模型拟合框架,旨在将非线性参数化模型拟合到时间序列数据,尤其是4D fMRI数据,例如ASL,CEST,DCE,DSC等。 PYFAB为该工具提供了Python界面,该界面可以与命令行Fabber工具或共享库版本一起...
  • 3.1案例背景遗传算法(Genetic ...非线性函数:$y=x_{1}^{2}+x_{2}^{2}$3.2模型建立3.2.1算法流程遗传算法优化使用遗传算法优化BP神经网络的权值和阔值,种群中的每个个体都包含了一 个网络所有权值和阔值,个...
  • 目的是使用约束优化函数(例如复数非线性最小二乘法)来计算最优电路元件。 获得最佳拟合后,工具箱还会估算卡方拟合优度。 此参数描述拟合数据与原始测量数据的匹配程度。 指示 运行“ python3 pyeis.py”以打开主...
  • 拟合拟合 #过拟合和欠拟合 import numpy as np import matplotlib.pyplot as plt x = np.random.uniform(-3,3,size=100) #在最新版本的sklearn中,所有的数据都应该是二维...plt.scatter(x,y)#非线性关系 #print(X
  • 下面的代码为我提供了一条最适合的直线,而不是沿着e^(-x)模型的一条很好的曲线来拟合数据。有人能告诉我如何修复下面的代码,使其适合我的数据吗?在import numpy as npimport matplotlib.pyplot as pltimport ...
  • 线性回归中的“线性”指的是系数的线性,而通过对特征的非线性变换,以及广义线性模型的推广,输出和特征之间的函数关系可以是高度非线性的。另一方面,也是更为重要的一点,线性模型的易解释性使得它在物理学、经济...
  • 拟合(overfitting)---训练误差小,但测试误差大---模型过于复杂(特征太多,使用了复杂的非线性关系;训练样本有误、过少) 过拟合的解决办法: 1、增加训练样本数 2、进行特征选择、特征降维,消除嘈杂特征,...
  • 模型拟合一般来说有这么三种:切比雪夫近似准则极小化绝对偏差之和最小二乘准则这几个原则各有各的适用范围。...拟合直线如果我们要拟合的是直线,即 ,计算过程如下:拟合幂函数可化为线性拟合非线性...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

python拟合非线性模型

python 订阅