参数的方差是方差 – 协方差矩阵的对角元素,标准误差是它的平方根. np.sqrt(np.diag(pcov))
关于获取inf,请查看并比较这两个示例:
In [129]:
import numpy as np
def func(x, a, b, c, d):
return a * np.exp(-b * x) + c
xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5, 1)
ydata = y + 0.2 * np.random.normal(size=len(xdata))
popt, pcov = so.curve_fit(func, xdata, ydata)
print np.sqrt(np.diag(pcov))
[ inf inf inf inf]
和:
In [130]:
def func(x, a, b, c):
return a * np.exp(-b * x) + c
xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
ydata = y + 0.2 * np.random.normal(size=len(xdata))
popt, pcov = so.curve_fit(func, xdata, ydata)
print np.sqrt(np.diag(pcov))
[ 0.11097646 0.11849107 0.05230711]
在这个极端的例子中,d对函数func没有影响,因此它将与inf的方差相关联,换句话说,它可以是任何值.从func中删除d将获得有意义的东西.
实际上,如果参数的比例非常不同,请说:
def func(x, a, b, c, d):
#return a * np.exp(-b * x) + c
return a * np.exp(-b * x) + c + d*1e-10
由于浮点溢出/下溢,您也会得到inf.
在你的情况下,我认为你从未使用过a和b.所以它就像这里的第一个例子.