我不明白curve_fit
是不是能够估计参数的协方差,从而提高了OptimizeWarning
下面的内容.以下MCVE解释了我的问题:
MCVE python片段
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
功能适合xdata
和ydata
准确.为什么不是错误/差异0
,或接近0
,inf
而是?
curve_fit
SciPy参考指南中有这样的引用:
如果解的雅可比矩阵没有满秩,那么'lm'方法返回一个填充np.inf的矩阵,另一方面'trf'和'dogbox'方法使用Moore-Penrose伪逆来计算协方差矩阵.
那么,潜在的问题是什么?为什么解决方案中的雅可比矩阵不具有满秩?
参数协方差的公式(维基百科)具有分母中的自由度数.自由度计算为(数据点数) - (参数个数),在您的示例中为1 - 1 = 0.而这是由它划分之前在那里SciPy的检查自由度的数量.
随着xdata = [1, 2], ydata = [1, 2]
你将得到零协方差(请注意,模型仍然完全适合:精确拟合不是问题).
如果样本大小N为1(样本方差的公式在分母中具有(N-1)),则这与样本方差未定义的问题相同.如果我们只从群体中取出size = 1样本,我们不会将方差估计为零,我们对方差一无所知.