这篇文章将围绕着 Python 中 fit 的用法,从多个方面进行详细阐述。
一、基本概念
在 Pyhon 中,fit 主要是指对数据进行拟合,用拟合函数逼近原数据,以求得更加精确的结果。其中的函数包括多项式函数、正弦函数、指数函数等等。而拟合主要分为线性拟合和非线性拟合。
#线性拟合 import numpy as np from scipy.optimize import curve_fit def linear(x, a, b): return a * x + b x = np.array([1, 2, 3, 4, 5]) y = np.array([4.8, 10.5, 15.2, 21.0, 22.8]) popt, pcov = curve_fit(linear, x, y)
在上面的代码中,curve_fit() 函数用于对 linear() 函数进行线性拟合,计算出最优的拟合参数,并返回拟合参数值 popt 和协方差矩阵 pcov。
二、多项式拟合
多项式拟合是一种比较常见的拟合方式,通常采用最小二乘法进行计算。在 Python 中,使用 numpy 中的 polyfit() 函数进行多项式拟合。
#多项式拟合 import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1,1,101) y = x + np.random.random(101) * 0.4 - 0.2 # 加上一些噪声 z = np.polyfit(x, y, 1) # 随便选个1次多项式 p = np.poly1d(z) # 创建多项式对象 plt.plot(x, y, 'b.', label='Original data') plt.plot(x, p(x), 'r-', label='Fitted line') plt.legend() plt.show()
在上面的代码中,使用 numpy 中的 polyfit() 函数进行多项式拟合,其中的参数 n 代表多项式的次数。polyfit() 函数计算后返回的结果是拟合函数的系数,在创建多项式对象时需要将这些系数传入。
三、非线性方程拟合
对于非线性方程的拟合,Python 中的常用方法是使用 scipy 库中的 curve_fit() 函数。curve_fit() 函数通过最小化残差平方和来拟合一个非线性方程。例如以下例子:
#非线性方程拟合 import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt def func(x, a, b, c): return a * np.exp(-b * x) + c x = np.linspace(0, 4, 50) y = func(x, 2.5, 1.3, 0.5) + 0.2 * np.random.normal(size=len(x)) # 加入一些随机噪声 popt, pcov = curve_fit(func, x, y, (1, 1, 1)) # 最小化残差平方和,拟合出最优参数 a, b, c = popt plt.plot(x, y, 'b.', label='Original') plt.plot(x, func(x, *popt), 'r-', label='Fit curve') plt.legend() plt.show()
在上面的代码中,定义了一个非线性函数 func(),然后使用 curve_fit() 函数进行非线性拟合,计算出最优参数 popt,其中的参数(1,1,1)代表了参数的初始值。
四、总结
通过以上的介绍,我们可以发现,在 Python 中进行拟合十分方便快捷,只需要选择对应的拟合函数,传递参数,还可以使用最小二乘法等多种方法来拟合数据。建议大家多尝试,多实践,从实践中加深对这些拟合方法的理解。
最新评论