Python中拟合函数的功能都存在于scipy.optimize.curve_fit
模块之中。为了完成三变量拟合,必须准备好已知数据,并通过变量表示出需要拟合的函数。
下面来详细讲解如何进行三变量拟合:
准备数据
通过numpy
模块可以轻松生成任意数据,例如:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.2, 3.7, 4.6, 8.1, 9.9])
z = np.array([1.8, 3.3, 5.5, 6.3, 8.0])
拟合模型
拟合模型用函数式表达式表示。在使用三元组变量x, y, z时,常常使用的是以下这个形式:
f(x, y, z) = a * x + b * y + c * z + d
其中,a, b, c, d是需要拟合的系数。根据具体的实际需求,需要拟合的方程也会发生变化。最终的拟合结果是系数a, b, c, d,分别表示函数中三个变量和一个截距的权重。
进行拟合
通过调用curve_fit
函数进行拟合。代码示例如下:
from scipy.optimize import curve_fit
def f(x, a, b, c, d):
return a * x[0] + b * x[1] + c * x[2] + d
x0 = np.array([x, y, z])
popt, pcov = curve_fit(f, x0, y)
以上代码中,curve_fit
函数中的f
函数为拟合的函数,x0
为输入的数据样本,后面是待拟合的结果。运行curve_fit
函数即可得到拟合结果。
示例
下面是一个完整的包含两个示例的三变量拟合代码:
import numpy as np
from scipy.optimize import curve_fit
def f(x, a, b, c, d):
return a * x[0] + b * x[1] + c * x[2] + d
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.2, 3.7, 4.6, 8.1, 9.9])
z = np.array([1.8, 3.3, 5.5, 6.3, 8.0])
# 示例1:多维变量拟合
x0 = np.array([x, y, z])
popt, pcov = curve_fit(f, x0, y)
# 示例2:参数较多的多维变量拟合
def g(x, a, b, c, d, e, f, g):
return a * x[0] + b * x[1] + c * x[2] + d * x[1] * x[2] + e * x[1] * x[0] + f * x[2] * x[0] + g
x0 = np.array([x, y, z])
popt, pcov = curve_fit(f, x0, y)
以上代码演示了两种拟合方式。第一种是一个简单的形式,只需要赋值好变量就可以直接进行拟合。第二种是一个更为复杂的形式,通过指定更多的变量和系数,实现了更为复杂的拟合操作。