2017-01-18 28 views
6

我不明白curve_fit不能估计参数的协方差,从而提高了下面的OptimizeWarning。下面MCVE说明我的问题:如果参数完全符合,为什么'curve_fit`不能够估计参数的协方差?

MCVE蟒蛇片段

from scipy.optimize import curve_fit 
func = 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功能适合xdataydata准确。为什么不是错误/方差0,或者接近0,但是inf取而代之?

有这句话从curve_fit SciPy Reference Guide

如果在溶液中的雅可比矩阵不具有满秩,那么“LM”方法返回充满np.inf矩阵,对其他手'trf'和'dogbox'方法使用Moore-Penrose伪逆来计算协方差矩阵。

那么,底层的问题是什么?为什么解决方案中的雅可比矩阵没有满秩?

回答

6

参数协方差的公式(Wikipedia)具有分母自由度数。自由度计算为(数据点的数量) - (参数的数量),在您的示例中为1 - 1 = 0。并且this是SciPy在除以它之前检查自由度数的地方。

随着xdata = [1, 2], ydata = [1, 2]你会得到零协方差(请注意,该模型仍然适合:确切拟合不是问题)。

如果样本大小N为1(分母中样本方差的公式为(N-1)),则样本方差不确定,这与问题相同。如果我们只从总体中取大小为1的样本,我们不用零估计方差,我们对方差一无所知。

相关问题