此示例代码使用具有两个形状参数(a和b)和偏移项(不影响曲率)的表达式。方程为“y=1.0/(1.0+exp(-a(x-b)))+Offset”,参数值a=2.1540318329369712E-01,b=-6.6744890642157646E+00,Offset=-3.524129985969645e-01,R平方为0.988,RMSE为0.0085。

该示例包含您用Python代码发布的数据,用于拟合和绘制,并使用scipy.optimize.differential_evolution遗传算法自动估计初始参数。差分进化的scipy实现使用拉丁超立方体算法来确保对参数空间的彻底搜索,这需要搜索的范围-在本示例代码中,这些范围基于最大和最小数据值。

import numpy, scipy, matplotlib

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

from scipy.optimize import differential_evolution

import warnings

xData = numpy.array([19.1647, 18.0189, 16.9550, 15.7683, 14.7044, 13.6269, 12.6040, 11.4309, 10.2987, 9.23465, 8.18440, 7.89789, 7.62498, 7.36571, 7.01106, 6.71094, 6.46548, 6.27436, 6.16543, 6.05569, 5.91904, 5.78247, 5.53661, 4.85425, 4.29468, 3.74888, 3.16206, 2.58882, 1.93371, 1.52426, 1.14211, 0.719035, 0.377708, 0.0226971, -0.223181, -0.537231, -0.878491, -1.27484, -1.45266, -1.57583, -1.61717])

yData = numpy.array([0.644557, 0.641059, 0.637555, 0.634059, 0.634135, 0.631825, 0.631899, 0.627209, 0.622516, 0.617818, 0.616103, 0.613736, 0.610175, 0.606613, 0.605445, 0.603676, 0.604887, 0.600127, 0.604909, 0.588207, 0.581056, 0.576292, 0.566761, 0.555472, 0.545367, 0.538842, 0.529336, 0.518635, 0.506747, 0.499018, 0.491885, 0.484754, 0.475230, 0.464514, 0.454387, 0.444861, 0.437128, 0.415076, 0.401363, 0.390034, 0.378698])

def func(x, a, b, Offset): # Sigmoid A With Offset from zunzun.com

return 1.0 / (1.0 + numpy.exp(-a * (x-b))) + Offset

# function for genetic algorithm to minimize (sum of squared error)

def sumOfSquaredError(parameterTuple):

warnings.filterwarnings("ignore") # do not print warnings by genetic algorithm

val = func(xData, *parameterTuple)

return numpy.sum((yData - val) ** 2.0)

def generate_Initial_Parameters():

# min and max used for bounds

maxX = max(xData)

minX = min(xData)

maxY = max(yData)

minY = min(yData)

parameterBounds = []

parameterBounds.append([minX, maxX]) # seach bounds for a

parameterBounds.append([minX, maxX]) # seach bounds for b

parameterBounds.append([0.0, maxY]) # seach bounds for Offset

# "seed" the numpy random number generator for repeatable results

result = differential_evolution(sumOfSquaredError, parameterBounds, seed=3)

return result.x

# generate initial parameter values

geneticParameters = generate_Initial_Parameters()

# curve fit the test data

fittedParameters, pcov = curve_fit(func, xData, yData, geneticParameters)

print('Parameters', fittedParameters)

modelPredictions = func(xData, *fittedParameters)

absError = modelPredictions - yData

SE = numpy.square(absError) # squared errors

MSE = numpy.mean(SE) # mean squared errors

RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE

Rsquared = 1.0 - (numpy.var(absError) / numpy.var(yData))

print('RMSE:', RMSE)

print('R-squared:', Rsquared)

print()

##########################################################

# graphics output section

def ModelAndScatterPlot(graphWidth, graphHeight):

f = plt.figure(figsize=(graphWidth/100.0, graphHeight/100.0), dpi=100)

axes = f.add_subplot(111)

# first the raw data as a scatter plot

axes.plot(xData, yData, 'D')

# create data for the fitted equation plot

xModel = numpy.linspace(min(xData), max(xData))

yModel = func(xModel, *fittedParameters)

# now the model as a line plot

axes.plot(xModel, yModel)

axes.set_xlabel('X Data') # X axis data label

axes.set_ylabel('Y Data') # Y axis data label

plt.show()

plt.close('all') # clean up after using pyplot

graphWidth = 800

graphHeight = 600

ModelAndScatterPlot(graphWidth, graphHeight)

python 非线性多项式拟合_用python进行非线性回归-有什么简单的方法可以更好地拟合这些数据?...相关推荐

  1. python求抛物线函数_在python中利用最小二乘拟合二次抛物线函数的方法

    1.最小二乘也可以拟合二次函数 我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的.下面我们就来试试用最小二乘来拟合抛物线形状的的图像. 对于二次函数 ...

  2. python 科学计算设计_《Python科学计算-(第2版)》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 Python科学计算环境的安装与简介 1 1.1 Python简介 1 1.1.1 Python 2还是Python 3 1 1.1.2 开发环境 2 1.1.3 集成开发环境(IDE) 5 ...

  3. python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?

    原标题:基于Python建立深度神经网络!你学会了嘛? 图1 神经网络构造的例子(符号说明:上标[l]表示与第l层:上标(i)表示第i个例子:下标i表示矢量第i项) 单层神经网络 图2 单层神经网络示 ...

  4. python网格搜索核函数_(转载)Python机器学习笔记GridSearchCV(网格搜索)

    转载声明 介绍 在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就 ...

  5. python 决策树回归参数_使用 Python 和 scikit-learn 学习回归算法

    本教程已纳入面向开发者的机器学习这一学习路径. 简介 在本教程中,我们将介绍解决基于回归的机器学习问题的基础知识,并对当前最流行的一些算法进行比较研究. 设置 注册或登录. 从 Try IBM Wat ...

  6. python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础

    本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...

  7. python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单

    处理文本数据的一个主要任务就是创建许多以文本为基础的特性. 人们可能想要在文本中找出特定格式的内容,比如找出存在于文本中的电子邮件,或者大型文本中的电话号码. 虽然想要实现上述功能听起来很繁琐,但是如 ...

  8. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  9. python常用模块教程_盘点Python常用的模块和包

    模块 1.定义 计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里.在python里,一个.py文件就是一个模块. 2.优点: 提高代码 ...

最新文章

  1. 某程序员对比美团和阿里的卷文化区别:美团重过程,死抠没用细节;阿里更自由,注重结果!...
  2. keras.layers 各种层介绍
  3. 语音预处理:服务器平台“部署”
  4. 具备自动刷新功能的 SAP ABAP ALV 报表
  5. JS之颠倒数组元素的reverse方法
  6. 当个年轻的又不太有经验的老板有多难?
  7. reverse-nodes-in-k-group
  8. ChromeTimeline
  9. RESTful Web Service - JAX-RS Annotations
  10. intellij HTTP状态 404 - 未找到_IntelliJ静态分析竟有代码检测优化,删除冗余等功能...
  11. win10系统安装+激活+去水印
  12. 2019年电赛D题简易电路特性测试仪试题ad5933测量小阻抗值
  13. 利用js书写正三角形
  14. matlab拟合sin函数原理,matlabsin函数拟合
  15. 航空发动机涂层行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  16. 这个网站做数据科学家的FB 但除了社交还做实事
  17. 如何制定有效的项目进度计划——甘特图
  18. Preftest测试
  19. C# 篇基础知识6——文件和流
  20. 路径规划算法C++实现(三)--DWA

热门文章

  1. 【Java】浅析equals()和hashCode()
  2. Ubuntu 完全卸载 Apache2
  3. 记一次培训机构“面试”过程
  4. JVM系列一:Java虚拟机与操作系统结构比较
  5. js正则函数match、exec、test、search、replace、split使用集合
  6. Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
  7. JavaScript中substr和substring
  8. 前端技术选型最佳神器!
  9. 为什么要使用Base64?
  10. 从会计到IT老兵,我的11年转行经历