使用Python单调递减曲线拟合

时间:2014-02-10 07:31:55

标签: python numpy scipy

我有一组数据点,如图所示。 enter image description here

我需要在这些点上拟合曲线,使得曲线单调递减。曲线没有指定的函数形式。我第一次尝试曲线拟合,一般来说,我想知道如何选择某些功能,适合它们并比较它们适合选择最佳功能。

我认为对于单调递减的曲线,约束条件是一阶导数是负的。我正在查看scipy.curve_fit和scipy.interpolate.UnivariateSpline函数,但它们似乎没有约束拟合的选项。在这种情况下使用的最佳功能是什么?感谢。

1 个答案:

答案 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]))