python-3.x 如何找到适合数据的曲线拟合模型?

tquggr8v  于 2022-11-19  发布在  Python
关注(0)|答案(2)|浏览(188)

我有一个2D数组,我正在尝试拟合数据曲线。我的目标函数是多项式函数:

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

我使用curve_fitscipy.optimize找到适合数据的曲线。但是,我需要知道这个模型有多好。实际数据和估计曲线之间的差异是什么?我如何找到这个?curve_fit是否使用均方误差找到曲线?我如何控制这个差异?

e3bfsja2

e3bfsja22#

根据curve_fit的文档,将输入参数full_output设置为True,该函数返回一些关于优化的附加信息;具体来说,函数返回一个字典(infodict),其中包含fvec项,该项包含在解处计算的残差(y - y_star)。此外,如果适用,用于优化的默认方法是最小二乘法(请查看method参数)。
所以,如果你想知道拟合函数的误差,你可以使用那些信息:

from scipy.optimize import curve_fit
import numpy as np

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

x = np.arange(-10, 10, 1)
data = objective(x, 1, 2, 3) + np.random.normal(0, 10, (len(x),))

potp, pcov, info, msg, ier = curve_fit(objective, x, data, full_output=True,  method='lm')
y_hat = objective(x, *potp.tolist())

# residuals are in the entry 'fvec' of the info dict.
# These are the residuals evaluated at the solution, i.e., f(x) - data
# Compute sum of squared residuals
err = np.dot(info['fvec'], info['fvec'])

这是表示原始数据和上一代码中插值的图

相关问题