Cuối cùng tìm thấy câu trả lời cho câu hỏi dài này! Tôi hy vọng điều này có thể ít nhất là tiết kiệm cho ai đó một vài giờ nghiên cứu vô vọng cho chủ đề này. Scipy có một chức năng đặc biệt gọi là curve_fit trong phần tối ưu hóa của nó. Nó sử dụng phương pháp tối thiểu để xác định các hệ số và tốt nhất của tất cả, nó mang lại cho bạn ma trận hiệp phương sai. Ma trận hiệp phương sai chứa phương sai của mỗi hệ số. Chính xác hơn, đường chéo của ma trận là phương sai và bằng cách căn lề các giá trị, lỗi chuẩn của mỗi hệ số có thể được xác định! Scipy không có nhiều tài liệu hướng dẫn cho điều này vì vậy đây là một mẫu mã cho một sự hiểu biết tốt hơn:
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plot
def func(x,a,b,c):
return a*x**2 + b*x + C#Refer [1]
x = np.linspace(0,4,50)
y = func(x,2.6,2,3) + 4*np.random.normal(size=len(x)) #Refer [2]
coeff, var_matrix = curve_fit(func,x,y)
variance = np.diagonal(var_matrix) #Refer [3]
SE = np.sqrt(variance) #Refer [4]
#======Making a dictionary to print results========
results = {'a':[coeff[0],SE[0]],'b':[coeff[1],SE[1]],'c':[coeff[2],SE[2]]}
print "Coeff\tValue\t\tError"
for v,c in results.iteritems():
print v,"\t",c[0],"\t",c[1]
#========End Results Printing=================
y2 = func(x,coeff[0],coeff[1],coeff[2]) #Saves the y values for the fitted model
plot.plot(x,y)
plot.plot(x,y2)
plot.show()
- gì hàm này trả về là rất quan trọng vì nó xác định những gì sẽ được sử dụng để phù hợp cho mô hình
- Sử dụng chức năng để tạo ra một số dữ liệu tùy ý + một số tiếng ồn
- Tiết kiệm ma trận hiệp phương sai của đường chéo để một ma trận 1D mà chỉ là một mảng bình thường
- Quảng trường rễ phương sai để có được những sai số chuẩn (SE)
Cảm ơn bạn đã liên kết! Cuối cùng tôi đã không sử dụng mpfit nhưng tài liệu đã giúp tôi rất nhiều để hiểu curve_fit cho scipy! – syntaxing