2017-01-18 5 views
6

私は理解していませんcurve_fitは、パラメータの共分散を推定することができませんので、下にOptimizeWarningを上げてください。パラメータが正確に収まる場合、 `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) 

機能が正確にxdataydataに合う

\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ための出力:以下MCVEは私の問題を説明します。エラー/分散が0、または0に近いものが、代わりにinfになるのはなぜですか? curve_fit SciPy Reference Guideからこの引用があり

:ソリューションでのヤコビ行列がフルランクを持っていない場合は

は、その後、「LM」メソッドは他に、np.infで満たされた行列を返します手の 'trf'と 'dogbox'メソッドはMoore-Penrose pseudoinverseを使って共分散行列を計算します。

だから根本的な問題は何ですか?なぜソリューションのヤコビ行列がフルランクを持っていないのですか?

答えて

6

パラメータの共分散式(Wikipedia)には、分母の自由度があります。自由度は、(データ点数) - (パラメータ数)として計算されます。この例では、1 - 1 = 0です。そしてthisは、SciPyがそれによって分割する前の自由度の数をチェックする場所です。

xdata = [1, 2], ydata = [1, 2]とすると、ゼロ共分散が得られます(モデルはまだ正確にフィットしますが、正確なフィットは問題ではありません)。

これは、サンプルサイズNが1の場合(サンプル分散の式が分母に(N-1)を持つ場合)、サンプル分散が未定義の場合と同じ種類の問題です。私たちが人口からサイズ= 1サンプルしか取っていない場合、分散をゼロで推定するわけではありません。

関連する問題