python三变量拟合函数

  • Post category:Python

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)

以上代码演示了两种拟合方式。第一种是一个简单的形式,只需要赋值好变量就可以直接进行拟合。第二种是一个更为复杂的形式,通过指定更多的变量和系数,实现了更为复杂的拟合操作。