我正在尝试输入一些起始猜测估计值
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]))
也许这是我想念的简单事。 感谢
答案 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