leastsq()得到了参数' x0'的多个值。 scipy.optimize.curve_fit中的错误

时间:2017-12-05 16:58:58

标签: python scipy curve-fitting

我正在尝试输入一些起始猜测估计值 scipy.optimize.curve_fit函数。 根据{{​​3}} 和 this link

我应该在x0中对它们进行定义,但是我尝试了不同的方式,我得到以下错误。 (注意:没有x0参数,它可以正常工作)

TypeError:leastsq()获得了参数' x0'的多个值。

我在下面提供了一个可重现的例子:

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import scipy.optimize
iris = load_iris()
data1 = pd.DataFrame(data= np.c_[ iris['target'], iris['data']],  columns=  ['target'] + iris['feature_names'] )

def formula_nls(data, pot, sp):
    return pot * np.tanh(data1.iloc[:,2] * sp / 2)

scipy.optimize.curve_fit(f = formula_nls, xdata= data1.iloc[:,1:],
                                                ydata= data1.iloc[:,0], method = 'lm',
                                             sigma = 1/data1.iloc[:,1], absolute_sigma=False,
                                                x0  = np.ndarray([ 1, 2]))

也许这是我想念的简单事。 感谢

1 个答案:

答案 0 :(得分:2)

为什么在x0的文档说:

时使用参数curve_fit
  

p0:无,标量或N长度序列,可选

     

参数的初始猜测。如果为None,则初始值将全为1(如果可以使用内省确定函数的参数数量,否则会引发ValueError。)

这与最小化和最小二乘中的API不同,例如:对于后者:

  

x0:array_like with shape(n,)或float

     

对自变量的初步猜测。如果是float,它将被视为带有一个元素的一维数组。

是的,在curve_fit内部,您p0 becomes x0 least_squares中的res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)

x0

由于curve_fit不是leastsq的参数,我希望将其视为用于的参数:

  

kwargs

     

关键字参数传递给methods ='lm'的最小值,否则传递给least_squares。

这意味着它将x0作为x0传递给curve_fit以及来自def fun(x0, **kwargs): return 1 print(fun(1)) # 1 print(fun(1, x0=3)) # TypeError: fun() got multiple values for argument 'x0' 的来电的CMenu

这样的事情:

CMenu