python-通过某些点的值获取功能

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

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

其中a,b和c是我不知道的值.

我在某些地方知道函数输出,即

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

(实际上还有更多的方法)

我想在最小化平方误差的同时获得a,b和c(并获得平方误差).

用Python执行此操作的方式是什么?

scipy,numpy或类似的地方应该有现有的解决方案.

解决方法:

由于您要拟合的函数是多项式,因此可以使用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方法.如果定义了其他方法(请参阅文档),则可以使用Jacobian和Hessian,并且可以对其进行计算.

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

假设您要尝试使用k作为要优化的参数来拟合y = kx.你会写一个函数

x = ...
y = ...

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

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

上一篇:python-scipy中的line_search的示例


下一篇:Selenium 与 PhantomJS