2017-01-18 71 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的樣本,我們不用零估計方差,我們對方差一無所知。

相關問題