使用Python进行数据拟合

文章目录

  • 使用Python进行数据拟合
  • 多项式拟合
  • 非多项式拟合

多项式拟合

任何一个函数都可以拆分成近似于这个函数的多项式表达。

多项式拟合需要用到的函数是numpy库当中的np.polyfit,它的使用方法为:

np.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

使用最小二乘法原理,根据已知的x与y对应值,拟合一个下面形式的多项式。
P(x)=P0xdeg+P1xdeg−1⋅⋅⋅+PdegP(x)=P{_0}x^{deg}+P{_1}x^{deg-1}···+P_{deg} P(x)=P0​xdeg+P1​xdeg−1⋅⋅⋅+Pdeg​
返回一系列的系数PPP.

参数说明:
一般情况下,我们只需要用到前三个参数。

x array类型,形状(M,),M 个样本点的 x 坐标(x[i], y[i])
y array类型,形状 (M,) 或 (M, K),样本点的 y 坐标。
deg int型常量,拟合多项式的最高次项。

返回值:

ppp 各个系数,ppp的个数为deg+1deg+1deg+1.

我们还可以使用polyval()来计算我们需要预测多项式的值.

import matplotlib.pyplot as plt
import numpy as npif __name__ == "__main__":x = np.arange(1, 31, 1)y = np.array([20, 23, 26, 29, 32, 35, 38, 45, 53, 62, 73, 86, 101, 118, 138, 161, 188, 220, 257, 300, 350, 409, 478, 558, 651, 760, 887, 1035, 1208, 1410])z1 = np.polyfit(x, y, 3)              # 曲线拟合,返回值为多项式的各项系数p1 = np.poly1d(z1)                    # 返回值为多项式的表达式,也就是函数式子print(p1)y_pred = p1(x)                        # 根据函数的多项式表达式,求解 y#print(np.polyval(p1, 29))             #根据多项式求解特定 x 对应的 y 值#print(np.polyval(z1, 29))             #根据多项式求解特定 x 对应的 y 值plot1 = plt.plot(x, y, '*', label='original values')plot2 = plt.plot(x, y_pred, 'r', label='fit values')plt.title('')plt.xlabel('')plt.ylabel('')plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0, 0))plt.show()

输出结果:

        3         2
0.1215 x - 3.045 x + 28.62 x - 34.47

则其拟合的函数为y=0.1215x3−3.045x2+28.62x−34.47y=0.1215 x{^3} - 3.045 x {^2}+ 28.62 x - 34.47y=0.1215x3−3.045x2+28.62x−34.47
将拟合的曲线与原数据各点进行对比发现拟合效果良好。

非多项式拟合

如果需要进行多项式拟合,前提是必须大体上知道散点的大致曲线形式,也就是大致的函数的形式。
比如,例子中的散点看起来像是指数的函数分布,因此可以给出假设的函数
y=bax+cy=ba{^x}+cy=bax+c
所以,只要给出具体的函数形式(可以是任意的,只要能写的出来皆可),用最小二乘的方式去逼近和拟合,即求出函数的各项系数。

此时用到的是scipy.optimize包下的curve_fit函数了:

代码示例:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fitdef func(x, a, b, c):return b * np.power(a, x) + cif __name__ == "__main__":x = np.arange(1, 31, 1)y = np.array([20, 23, 26, 29, 32, 35, 38, 45, 53, 62, 73, 86, 101, 118, 138, 161, 188, 220, 257, 300, 350, 409, 478, 558, 651, 760, 887, 1035, 1208, 1410])popt, pcov = curve_fit(func, x, y)                # 曲线拟合,popt为函数的参数listy_pred = [func(i, popt[0], popt[1], popt[2]) for i in x]    # 直接用函数和函数参数list来进行y值的计算print(popt)plot1 = plt.plot(x, y, '*', label='original values')plot2 = plt.plot(x, y_pred, 'r', label='fit values')plt.title('')plt.xlabel('')plt.ylabel('')plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0, 0))plt.show()

输出结果为:

[ 1.16791847 13.39168878  1.24633841]

那么就有
{a=1.16791847b=13.39168878c=1.24633841\left\{ \begin{aligned} a & = & \ 1.16791847 \\ b & =&\ 13.39168878 \\ c & = & 1.24633841 \end{aligned} \right. ⎩⎪⎨⎪⎧​abc​===​ 1.16791847 13.391688781.24633841​
于是我们得到了拟合的函数为

y=13.39168878∗1.16791847x+1.24633841y=13.39168878*1.16791847{^x}+1.24633841y=13.39168878∗1.16791847x+1.24633841
将拟合的曲线与原数据各点进行对比发现拟合效果良好。

使用Python进行数据拟合相关推荐

  1. python三角函数拟合_使用python进行数据拟合最小化函数

    这是我对这个问题的理解. 首先,我通过以下代码生成一些数据import numpy as np from scipy.integrate import quad from random import ...

  2. MATLAB,Python,Pytorch实现数据拟合

    目录 1.MATLAB实现数据拟合 2.纯python实现数据拟合 3.pytorch实现数据拟合 1.MATLAB实现数据拟合 %MATLAB 数据拟合 x=linspace(-1,1,100); ...

  3. python数据趋势算法_Python数据拟合与广义线性回归算法学习

    机器学习中的预测问题通常分为2类:回归与分类. 简单的说回归就是预测数值,而分类是给数据打上标签归类. 本文讲述如何用Python进行基本的数据拟合,以及如何对拟合结果的误差进行分析. 本例中使用一个 ...

  4. python数据拟合fit

    文章目录 第0部分:多项式拟合数学基础 举例 第一部分:多项式拟合 第二部分 最小二乘法拟合(参考python科学计算) 使用幂律谱 使用e指数 三种方法总结 第三部分:使用窗口平滑化处理(scipy ...

  5. 用Python开始机器学习(3:数据拟合与广义线性回归)

    用Python开始机器学习(数据拟合与广义线性回归) 原文:http://blog.csdn.net/lsldd/article/details/41251583 本文发现,有的时候,次数是100的时 ...

  6. python数据拟合固定参数_如何将数据拟合到非理想二极管方程(隐式非线性函数)并检索参数 - python...

    散乱数据图 我需要将(x,y)-数据拟合到具有两个变量(x和y)的方程式中,并检索5个未知参数. 我正在编写一个脚本,以处理来自简单.txt文件的IV数据(电流电压),并将其拟合为称为非理想二极管方程 ...

  7. Python小白的数学建模课-23.数据拟合全集

    拟合是用一个连续函数(曲线)靠近给定的离散数据,使其与给定的数据相吻合. 数据拟合的算法相对比较简单,但调用不同工具和方法时的函数定义和参数设置有所差异,往往使小白感到困惑. 本文基于 Scipy 工 ...

  8. python数据拟合

    python数据拟合 文章目录 python数据拟合 1.多项式拟合 1.1 多项式拟合描述 1.2 多项式拟合实现 2.自定义函数拟合 2.1 自定义函数拟合描述 2.1 自定义函数拟合的实现 1. ...

  9. Python数据拟合幂函数y=ax^b

    Python数据拟合--幂函数y=ax^b from scipy.optimize import curve_fit import numpy as np import matplotlib.pypl ...

最新文章

  1. SQL Server 数据库清除日志的方法
  2. python3安装-Python3的安装
  3. 蓝牙 GameKit
  4. 量子计算机模型取,Grover算法在单道量子计算模型下的实现
  5. 8类网线利弊_超6类网线和7类网线有何区别?有何用途?家用电脑,看这
  6. 切割日志 python版
  7. Mr.J-- jQuery学习笔记(三)--静态方法详解
  8. Yii 2 —— Backend自动出现登录页
  9. 《霸王别姬》经典台词
  10. 坑爹的RockSaw和坑爹的windows7
  11. JSP 中 pageEncoding 和 charset 区别以及中文乱码解决方案
  12. 屏幕取色器,windows
  13. 苹果屏蔽更新描述文件_iPhone|IOS10-IOS12屏蔽系统更新描述文件|去除设置①小红点教程...
  14. 看板记录工具wekan
  15. 厚物科技PXIe机箱PXI机箱PXIe便携机HW-1693BAT
  16. 读书笔记——《柯维的智慧》格言
  17. 【windows】关于修改hosts文件的解释,hosts的作用,hosts文件的位置.....
  18. seo优化时网站_选择关键词的方法
  19. poi 读取word文字图片表格
  20. XTU数据结构(C语言版)

热门文章

  1. 专磕自动化营销,数据驱动让生意更有温度
  2. JS及JQuery对Html内容编码,Html转义
  3. 使用css去除input边框
  4. 上海市计量测试技术研究院“LIMS备份应急系统”项目招标公告
  5. 小程序逆向错误之 typeof3 is not a function
  6. 服装加盟系统选对了,服装连锁店的管理问题少一半!
  7. 实例中给出child-parent(孩子——父母)表,要求输出grandchild-grandparent(孙子——爷奶)表
  8. CHAPTER 19 Lexicons for Sentiment, Affect, and Connotation
  9. 欺骗的艺术——第二部分(5)
  10. 计算机学科相关资料,计算机学科概论复习资料汇总.doc