我有一组数据点,如图所示。
我需要在这些点上拟合曲线,使得曲线单调递减。曲线没有指定的函数形式。我第一次尝试曲线拟合,一般来说,我想知道如何选择某些功能,适合它们并比较它们适合选择最佳功能。
我认为对于单调递减的曲线,约束条件是一阶导数是负的。我正在查看scipy.curve_fit和scipy.interpolate.UnivariateSpline函数,但它们似乎没有约束拟合的选项。在这种情况下使用的最佳功能是什么?感谢。
答案 0 :(得分:1)
我担心一般功能配件没有包装。您必须选择并定义您的功能空间。当你这样做时,它肯定是有限的,并且没有问题来增加系数的约束,以确保你的函数正在减少。
此外,您必须选择指标/目标函数。你想最小化SSE还是你的分数有一些权重?或者也许是一个完全不同的目标?
您可以从以下内容开始:
import numpy as np
impoty scipy.optimize as opt
def objective(pars):
a, b, c = pars
return np.sum((y-(a*np.exp(-b*x)+c))**2)
opt.minimize(objective, x0=np.array([12000, 0.3, 2000]))