宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

本篇文章将从多个方面详细介绍Python中的拟合函数

一、基础介绍

Python中的拟合函数可以使用NumPy库中的polyfit(多项式拟合)函数进行实现。该函数的基本语法如下:

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

其中,x表示自变量数据,y表示因变量数据,deg表示拟合的多项式阶数,默认为一次多项式。

在拟合的过程中,可以使用Matplotlib库进行可视化操作。例如:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6])
y = np.array([1, 3, 2, 5, 7, 8])

plt.scatter(x, y)
plt.show()

# 进行一次多项式拟合并绘制拟合曲线
p = np.polyfit(x, y, 1)
plt.plot(x, np.polyval(p, x), 'r')
plt.show()

以上代码中,首先使用scatter函数绘制原始数据的散点图,然后使用polyfit函数进行一次多项式拟合,并使用plot函数绘制拟合曲线。结果如下图所示:

[![Python拟合函数1](https://img-blog.csdnimg.cn/20220723145209625.png)](https://img-blog.csdnimg.cn/20220723145209625.png)

二、拟合函数的应用

1.函数拟合的原理

拟合函数的目的是尽可能的通过一系列的点,用一个函数来描述这些点的运动规律。在拟合的过程中,通过选择不同的函数类型和阶数,可以得到不同的拟合结果。

2.多项式拟合

多项式拟合可以用来拟合非常复杂的数据。例如,对于下面的一组数据:

x = np.array([1, 2, 3, 4, 5, 6])
y = np.array([5, 7, 8, 9, 12, 14])

可以通过三次多项式拟合来找到合适的函数来描述数据

p = np.polyfit(x, y, 3)
plt.plot(x, np.polyval(p, x), 'r')
plt.show()

结果如下图所示:

[![Python拟合函数2](https://img-blog.csdnimg.cn/20220723145240733.png)](https://img-blog.csdnimg.cn/20220723145240733.png)

3.曲线拟合

曲线拟合可以用来拟合非线性的数据。例如,对于下面的一组数据:

x = np.array([2, 3, 4, 5, 6, 7])
y = np.array([4, 5, 6, 8, 11, 14])

可以通过曲线拟合来找到合适的函数来描述数据

from scipy.optimize import curve_fit

def func(x, a, b, c):
    return a*x**2 + b*x + c

popt, pcov = curve_fit(func, x, y)
plt.plot(x, func(x, *popt), 'r')
plt.show()

其中,curve_fit函数是用来拟合非线性数据的函数,func是我们自己定义的拟合函数,通过该函数来描述数据,其中a,b,c是需要我们拟合的参数,popt表示拟合出的参数值,pcov表示参数的协方差矩阵。结果如下图所示:

[![Python拟合函数3](https://img-blog.csdnimg.cn/20220723145511789.png)](https://img-blog.csdnimg.cn/20220723145511789.png)

4.最小二乘拟合

在实际应用中,我们可能会遇到数据量非常大的情况。这时,我们需要尽可能的减小误差,增加拟合的准确性。这时,就可以使用最小二乘拟合。例如,对于下面的一组数据:

x = np.arange(10)
y = 2*np.sin(2*np.pi*x) + np.random.normal(size=10)

可以使用最小二乘拟合来减小误差,使得拟合结果更加准确

from scipy.optimize import leastsq

def residuals(p, y, x):
    a, b, c = p
    err = y - (a * np.sin(b * x + c))
    return err

p0 = [1, 1, 1]
plsq = leastsq(residuals, p0, args=(y, x))

plt.plot(x, y, 'o')
plt.plot(x, plsq[0][0] * np.sin(plsq[0][1] * x + plsq[0][2]), 'r')
plt.show()

其中,leastsq函数就是最小二乘拟合函数,residuals函数是我们自己定义的误差函数,p0是拟合的初值,plsq[0]表示拟合出的最优参数。结果如下图所示:

[![Python拟合函数4](https://img-blog.csdnimg.cn/20220723145707216.png)](https://img-blog.csdnimg.cn/20220723145707216.png)

三、总结

本篇文章主要介绍了Python中的拟合函数。首先从基础介绍开始,讲解了使用polyfit函数进行多项式拟合的方法,并给出了相应的代码实例。然后从不同的拟合方式入手,分别介绍了多项式拟合、曲线拟合以及最小二乘拟合的方法,同时也给出了相应的代码实例。通过本篇文章的学习,相信大家对Python中的拟合函数有了更深入的了解和掌握。