【参考】
拟合函数:
f(x)=ae−bx+cf(x)=ae^{-bx}+cf(x)=ae−bx+c
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as npdef func(x, a, b, c):return a * np.exp(-b * x) + cxdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
rng = np.random.default_rng()
y_noise = 0.2 * rng.normal(size=xdata.size)
ydata = y + y_noiseprint("--- raw data----")
print(len(xdata), len(ydata))
plt.plot(xdata, ydata, 'b-', label='data')print("--- curve1----")
popt, pcov = curve_fit(func, xdata, ydata)
print("最优化参数:", popt)
print("协方差:\n", pcov)
plt.plot(xdata, func(xdata, *popt), 'r-',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))print("--- curve2----")
popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5]))
print(popt, '\n', pcov)
plt.plot(xdata, func(xdata, *popt), 'g--',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

总平方和: SST=∑(yi−yˉ)2SST=\sum{(y_i-\bar{y})^2}SST=∑(yi−yˉ)2
总平方和(SST) = 回归平方和(SSR)十残差平方和(SSE)
回归平方和: SSR=∑(y^i−yˉ)2SSR=\sum{(\hat{y}_i-\bar{y})^2}SSR=∑(y^i−yˉ)2
残差平方和: SSE=∑(yi−y^i)2SSE=\sum{(y_i-\hat{y}_i)^2}SSE=∑(yi−y^i)2
判定系数R-square:
R2=SSRSST=SST−SSESST=1−SSESSTR^2=\frac{SSR}{SST}=\frac{SST-SSE}{SST}=1-\frac{SSE}{SST}R2=SSTSSR=SSTSST−SSE=1−SSTSSE
矫正判定系数Adjusted R-square: Degree-of-freedom adjusted coefficient of determination
Radjusted2=1−(1−R2)(n−1)n−p−1R^2_{adjusted} = 1 - \frac{(1-R^2)(n-1)}{n-p-1}Radjusted2=1−n−p−1(1−R2)(n−1)
其中,n为样本个数,p为特征个数
R-square不适合用于判断非线性拟合的效果
MSEMSEMSE (均方差、方差): MSE=SSE/n=1n∑i=1n(yi−y^i)2MSE=SSE/n=\frac{1}{n}\sum_{i=1}^{n}{(y_i-\hat{y}_i)^2}MSE=SSE/n=n1i=1∑n(yi−y^i)2
RMSERMSERMSE(均方根、标准差):
RMSE=MSE=SSE/n=1n∑i=1n(yi−y^i)2RMSE=\sqrt{MSE}=\sqrt{SSE/n}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}{(y_i-\hat{y}_i)^2}}RMSE=MSE=SSE/n=n1i=1∑n(yi−y^i)2
未完待续。。。
上一篇:什么什么夜什么成语