2017-01-18 1 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를 사용하여 공분산 행렬을 계산합니다.

그럼 근본적인 문제가 무엇인가요? 왜 솔루션의 Jacobian 행렬이 완전한 계급을 가지고 있지 않습니까?

답변

6

매개 변수의 공분산 계산식 (Wikipedia)은 분모의 자유도가 있습니다. 자유도는 (데이터 요소 수) - (매개 변수 수)로 계산되며, 예제에서는 1 - 1 = 0입니다. 그리고 this은 SciPy가 자유도의 수를 나누기 전에 확인하는 곳입니다.

xdata = [1, 2], ydata = [1, 2]으로하면 공분산이 없을 것입니다 (모델은 여전히 ​​정확하게 맞습니다 : 정확한 적합은 문제가 아닙니다).

표본 크기 N이 1 인 경우 (표본 분산의 수식이 분모에 (N-1)이 있음) 표본 분산이 정의되지 않은 것과 같은 문제입니다. 우리가 단지 인구 = 1 표본을 취한 경우, 우리는 분산을 0으로 추정하지 않으며, 우리는 분산에 대해 아무것도 모릅니다.

관련 문제