Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。

scipy.optimize中有curve_fit方法可以拟合自定义的曲线,如指数函数拟合,幂指函数拟合和多项式拟合,下面导入相应的包进行拟合的一个例子:

导入需要的包

from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np
import pandas as pdplt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
%matplotlib inline # jupyter notebook图像显示设置
%config InlineBackend.figure_format = 'svg' # jupyter notebook图像矢量图设置

自定义函数拟合

# 自定义函数,curve_fit支持自定义函数的形式进行拟合,这里定义的是指数函数的形式
# 包括自变量x和a,b,c三个参数
def func(x, a, b, c):return a * np.exp(-b * x) + c# 产生数据
xdata = np.linspace(0, 4, 50) # x从0到4取50个点
y = func(xdata, 2.5, 1.3, 0.5) # 在x取xdata,a,b,c分别取2.5, 1.3, 0.5条件下,运用自定义函数计算y的值# 在y上产生一些扰动模拟真实数据
np.random.seed(1729)
# 产生均值为0,标准差为1,维度为xdata大小的正态分布随机抽样0.2倍的扰动
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'b-', label='data')# 利用“真实”数据进行曲线拟合
popt, pcov = curve_fit(func, xdata, ydata) # 拟合方程,参数包括func,xdata,ydata,
# 有popt和pcov两个个参数,其中popt参数为a,b,c,pcov为拟合参数的协方差# plot出拟合曲线,其中的y使用拟合方程和xdata求出
plt.plot(xdata, func(xdata, *popt), 'r-',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))#     如果参数本身有范围,则可以设置参数的范围,如 0 <= a <= 3,
#     0 <= b <= 1 and 0 <= c <= 0.5:
popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5])) # bounds为限定a,b,c参数的范围plt.plot(xdata, func(xdata, *popt), 'g--',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

结果展示

popt为限定参数a,b,c的参数拟合值

函数参数设置

scipy.optimize.curve_fit(fxdataydatap0=Nonesigma=Noneabsolute_sigma=Falsecheck_finite=Truebounds=- inf, infmethod=Nonejac=None**kwargs)[source]

f: 函数形式

xdata:自变量x,一般为数组或者向量

ydata:应变量y,一般为一维数组

bounds:参数的范围设置

具体参数设置见:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

散点图显示拟合方程及R2

# 画散点图并标记拟合方程以及R2
from scipy.optimize import curve_fit
def curve_fitting(data, x_col,y_col):# 自定义函数,curve_fit支持自定义函数的形式进行拟合,这里定义的是指数函数的形式def func(x, a, b):return a * x + bxdata = data[x_col]ydata = data[y_col]# 利用“真实”数据进行曲线拟合popt, pcov = curve_fit(func, xdata, ydata) # 拟合方程,参数包括func,xdata,ydata# 有popt和pcov两个个参数,其中popt参数为a,b,c,pcov为拟合参数的协方差plt.scatter(xdata,ydata)plt.plot(xdata, func(xdata, *popt), 'b-',label='y = %5.2f * x + %5.2f' % (tuple(popt)))plt.plot(xdata, func(xdata, *popt), 'b-',label='R2:%5.2f' % (np.corrcoef(ydata,func(xdata,*popt))[0,1]**2))plt.xlabel(x_col)plt.ylabel(y_col)plt.legend()# 调用函数
# data为画图数据的dataframe,x_col='单均骑手耗时',y_col = '非预定单均配送时长'
fig,ax = plt.subplots(1,2,figsize=(10,4))
plt.subplot(121)
curve_fitting(data,'单均骑手耗时','非预定单均配送时长')plt.subplot(122)
curve_fitting(data,'平均od距离','非预定单均配送时长')

scipy.optimize.curve_fit-曲线拟合相关推荐

  1. python 曲线拟合(numpy.polyfit、scipy.optimize.curve_fit)

    小白的学习笔记,欢迎各位大神批评指正. python 曲线拟合 (一次二次比较简单,直接使用numpy中的函数即可,来自 <https://blog.csdn.net/yefengzhichen ...

  2. scipy.optimize.curve_fit函数用法解析

    scipy.optimize.curve_fit函数用法解析 转:https://zhuanlan.zhihu.com/p/144353126 optimize.curve_fit()函数,用于日常数 ...

  3. scipy中的scipy.optimize.curve_fit

    scipy中的scipy.optimize.curve_fit 这里写目录标题 scipy中的scipy.optimize.curve_fit 参数 Return scipy.optimize.``c ...

  4. python中curve fit_scipy.optimize.curve_fit函数用法解析

    在日常数据分析中,免不了要用到数据曲线拟合,而optimize.curve_fit()函数正好满足你的需求 scipy.optimize.curve_fit(f,xdata,ydata,p0=None ...

  5. python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合

    #2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...

  6. python实例 优化目标函数_Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()

    scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...

  7. 高级优化算法scipy.optimize

    scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...

  8. scipy.optimize函数介绍

    scipy.optimize模块使用 前言 一.scipy.optimize模块包含什么? 二.使用步骤 1.函数介绍 前言 简单使用scipy.optimize,训练逻辑回归损失函数,得到权值. 一 ...

  9. python网页优化公司_使用python优化scipy.optimize.minimize公司

    我将逐行检查您的代码,并强调一些问题:from scipy.optimize import minimize import numpy as np prices=np.array([[1.5,50,3 ...

最新文章

  1. 如何快速优化机器学习的模型参数
  2. 传智播客视频学习 ---- 字符串含义( C 语言中)
  3. 149.从网络的作用范围分类 150.使用范围分类 151.拓扑结构分类
  4. C++中max,min函数,以及vector字符未定义问题(未声明的标志符)
  5. Boost:Porthopper服务测试程序
  6. 什么是 Visual VM?
  7. android es管理工具,Android
  8. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  9. 孙燕姿发博求推荐电动汽车,众多车企官微、老总亲自“上门”推销...
  10. win10动态壁纸怎么设置_电脑怎么设置动态桌面
  11. vb.net 组合快捷键如何设置_你不知道的PPT快捷键
  12. SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查
  13. [No00004C]软件工程师的创业陷阱:接私活
  14. STM32——库函数版——数码管流动显示程序
  15. Linux开发之libaio源码分析及应用
  16. Function与function的区别
  17. Flowable工作流引擎表用途整理
  18. AppIcon 生成工具
  19. 题解 CF1389B 【Array Walk】
  20. 后端API接口的错误信息返回规范

热门文章

  1. linux7.2 静态IP设置,Centos 7 学习之静态IP设置
  2. GitHub, Google Code, and other
  3. Mybatis报错: Invalid bound statement (not found)...
  4. 密位测距离口诀_电气故障怎么查?最新最全的79条电气故障诊断口诀
  5. 无法跳转 vscode_爱了爱了,这个VSCode插件将极大提高你的工mo作yu效率
  6. Linux Redhat5.7系统配置网易的yum源
  7. numpy之高维数组的转置:transpose方法——通过几何体来迅速理解
  8. redis服务器防止入侵,加ip,密码限制
  9. cmake 编译安装方法
  10. CentOS 7时间命令timedatectl