通过函数在某些点上的值获取函数



>假设我有一个假设函数,我想近似:

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

abc是我不知道的值。

我在某些点上知道函数输出,即

x = [-1, 2, 5, 100]
y = [123, 456, 789, 1255]

(实际上还有更多的值)

我想得到abc,同时最小化平方误差(此外还要得到平方误差)。

在Python中做到这一点的方法是什么?

scipynumpy或类似的地方都应该有现有的解决方案。

由于您尝试拟合的函数是多项式,因此您可以使用numpy.polyfit

>>> numpy.polyfit(x, y, 2) # The 2 signifies a polynomial of degree 2
array([  -1.04978546,  115.16698544,  236.16191491])

这意味着最佳拟合为 y ~ -1.05 x2 + 115.157x + 236.16

对于一般函数,您对它的了解越多(例如,它是凸的、可微的、两次可微的等),你就越能用scipy.optimize.minimize做得更好。 例如,如果你对它几乎一无所知,你可以使用它来指定使用Nelder-Mead方法。那里的其他方法(请参阅文档)可以使用雅可比和黑森,如果它们已定义,您可以计算它们。

就个人而言,我发现将其与Nelder-Mead一起使用(几乎不需要任何参数)可以满足我的需求。


假设您正在尝试拟合 y = kx,并将 k 作为优化参数。你会写一个函数

x = ...
y = ...
def ss(k):
    # use numpy.linalg.norm to find the sum-of-squares error between y and kx

然后,您将在函数上使用scipy.optimize.minimize ss .

相关内容

  • 没有找到相关文章

最新更新