Я пытаюсь понять ошибки из Curve_Fit и был бы признателен, если бы кто-нибудь мог просмотреть мой код и сообщить, правильно ли я понял обработку ошибок.
Моя цель состоит в том, чтобы взять наблюдаемые, подогнать полином, а затем использовать параметры подгонки, использовать их для прогнозирования значений. Ключом к моей необходимости является не только прогнозируемое значение, но и мера ошибки для значения (y).
Я думаю, что я понял выходные данные стандартных ошибок из параметров curve_fit, и в моем понимании я использую их, чтобы вычислить стандартное отклонение для прогнозируемого значения (y).
Опять же, в моем понимании, ошибка, которую я вычислил, является стандартной ошибкой «1 * сигма», и одна сигма будет содержать 68% разбросанных показаний, предполагающих нормальное распределение.
Правильно ли я понял это и правильно ли использовал выходные данные из Curve_Fit для доставки?
Ниже приведено некоторое подтверждение концепции кода.
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt
import random
#####function
def dfunc(x, a, b, c):
return a*x*x + b*x + c
#Set up trial data
knt=20
ANAL = np.zeros((3,knt))
rand = 20 #% randomization in trial data
for i in range(0,knt):
ANAL[0,i] = i
ANAL[1,i] = dfunc(i,1,2,3)*random.randint(100-rand/2,100+rand/2)/100
#fit, determine parameters values and errors
dprm, dpcv = curve_fit(dfunc, ANAL[0,],ANAL[1,])
dgcv = np.sqrt(np.diag(dpcv))
print ("Parameter values a,b,c: %5.2f %5.2f %5.2f"
% (dprm[0],dprm[1],dprm[2]))
print ("Parameter standard err: %5.2f %5.2f %5.2f"
% (dgcv[0],dgcv[1],dgcv[2]))
#Utilize to predict "y std err" for x in range 0-20
for x in range(0,20):
ANAL[2,x]=dfunc(x,*dgcv)
print ("For x=%5.2f y=%6.2f with y std err(%6.2f)"
% (x,ANAL[1,x],ANAL[2,x]))
plt.plot(ANAL[0,], ANAL[1,], 'r+', label='trial data')
plt.plot(ANAL[0,], dfunc(ANAL[0,], *dprm), 'b-', label='best fit')
plt.errorbar(ANAL[0,], dfunc(ANAL[0,], *dprm), yerr=ANAL[2,],linestyle="none")
plt.xlabel('value x')
plt.ylabel('y observations')
plt.legend()
plt.show()