如果参数完全适合,为什么“ curve_fit”无法估计参数的协方差?
我不明白curve_fit
无法估计参数的协方差,因此提出了OptimizeWarning
以下问题。以下MCVE解释了我的问题:
from scipy.optimize import curve_fitfunc = lambda x, a: a * x
popt, pcov = curve_fit(f = func, xdata = [1], ydata = [1])
print(popt, pcov)
\python-3.4.4\lib\site-packages\scipy\optimize\minpack.py:715:OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
[ 1.] [[ inf]]
对于a = 1
功能适合xdata
和ydata
确切。为什么不是错误/变化0
,或者相近的0
,但是inf
呢?
《curve_fit
SciPy参考指南》中有这句话:
如果解决方案中的雅可比矩阵不具有完整的秩,则“ lm”方法返回一个填充有np.inf的矩阵,另一方面,“ trf”和“
dogbox”方法使用Moore-Penrose伪逆来计算协方差矩阵。
那么,潜在的问题是什么?为什么解决方案中的雅可比矩阵不具有完整等级?
回答:
参数的协方差公式(Wikipedia)具有分母的自由度数。自由度的计算方式为(数据点数)-(参数数),在您的示例中为1-1
0。而这是由它划分之前在那里SciPy的检查自由度的数量。
这样一来,xdata = [1, 2], ydata = [1, 2]
您将获得零协方差(请注意,模型仍然完全适合:完全适合不是问题)。
如果样本大小N为1(样本方差的公式的分母为(N-1)),则这与未定义样本方差相同。如果仅从总体中抽取大小=
1的样本,则不会将方差估计为零,而对方差一无所知。
以上是 如果参数完全适合,为什么“ curve_fit”无法估计参数的协方差? 的全部内容, 来源链接: utcz.com/qa/398537.html