Tôi không hiểu curve_fit
không thể ước tính hiệp phương sai của thông số, do đó nâng cao số OptimizeWarning
bên dưới. Các MCVE sau đây giải thích vấn đề của tôi:Tại sao `curve_fit` không thể ước tính hiệp phương sai của tham số nếu thông số khớp chính xác?
MCVE đoạn 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)
Output
\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]]
Đối a = 1
chức năng phù hợp với xdata
và ydata
chính xác. Tại sao không phải là lỗi/phương sai 0
hoặc gần với 0
, nhưng thay vào đó, inf
?
Có trích dẫn này từ curve_fit
SciPy Reference Guide:
Nếu ma trận Jacobian tại các giải pháp không có một cấp bậc đầy đủ, sau đó phương pháp 'lm' trả về một ma trận đầy np.inf, mặt khác các phương thức 'trf' và 'dogbox' bằng tay sử dụng hàm pseudoinverse của Moore-Penrose để tính toán ma trận hiệp phương sai.
Vì vậy, vấn đề cơ bản là gì? Tại sao ma trận Jacobian tại giải pháp không có thứ hạng đầy đủ?