kir*_*rev 4 python numpy machine-learning scipy scikit-learn
假设我有一个我想近似的假设函数:
def f(x):
return a * x ** 2 + b * x + c
Run Code Online (Sandbox Code Playgroud)
在哪里a,b以及c我不知道的值。
而且我知道函数输出的某些点,即
x = [-1, 2, 5, 100]
y = [123, 456, 789, 1255]
Run Code Online (Sandbox Code Playgroud)
(实际上还有更多的值)
我想得到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])
Run Code Online (Sandbox Code Playgroud)
这意味着最佳拟合是y ~ -1.05 x 2 + 115.157x + 236.16。
对于一般函数,您对它了解得越多(例如,它是凸的、可微的、二次可微的等),您就可以更好地使用scipy.optimize.minimize。例如,如果您对它几乎一无所知,您可以使用它指定使用 Nelder-Mead 方法。那里的其他方法(请参阅文档)可以使用 Jacobian 和 Hessian(如果已定义),并且您可以计算它们。
就我个人而言,我发现将它与 Nelder-Mead(几乎不需要参数)一起使用可以为我提供足够的结果来满足我的需要。
例子
假设你正在试图将Y = KX与ķ作为参数进行优化。你会写一个函数
x = ...
y = ...
def ss(k):
# use numpy.linalg.norm to find the sum-of-squares error between y and kx
Run Code Online (Sandbox Code Playgroud)
然后你会scipy.optimize.minimize在函数上使用ss。
| 归档时间: |
|
| 查看次数: |
7290 次 |
| 最近记录: |