有時候對資料的分析處理,需要進行曲線擬合,python提供了豐富的工具,其中scipy中的curve_fit可以用來進行冪數擬合或者指數擬合等各種型別的擬合。
先定義好要擬合的函式形式target_func,然後呼叫函式popt, pcov = curve_fit(target_func, xdata, ydata)可以返回target_func中的引數,引數儲存在popt陣列中。
擬合度r²
衡量的是擬合函式整體的擬合度,r²最大值為1,越接近於1,說明函式的擬合度越好,公式表達為r²=1-ssres/sstot。ssres為殘差平方和,sstot為去掉均值後的平方和。
計算過程如下:
如下**給定了一組x,y資料,使用函式y = a * x^b來擬合這組資料,並計算擬合度r²。最後列印出了擬合函式的引數a、b,及擬合度r²
from scipy.optimize import curve_fit
import numpy as np
xdata = [0.1738, 0.0325, 0.0135, 0.0058, 0.0028]
ydata = [11.313, 15.953, 21.599, 33.212, 54.098]
### define the fit functions, y = a * x^b ###
def target_func(x, a, b):
return a*(x**b)
### curve fit ###
popt, pcov = curve_fit(target_func, xdata, ydata)
### calculate r square ###
calc_ydata = [target_func(i, popt[0], popt[1]) for i in xdata]
res_ydata = np.array(ydata) - np.array(calc_ydata)
ss_res = np.sum(res_ydata**2)
ss_tot = np.sum((ydata - np.mean(ydata))**2)
r_squared = 1 - (ss_res / ss_tot)
### output results ###
print "a = %f b = %f r2 = %f"%(popt[0], popt[1], r_squared)
print ydata, calc_ydata
輸出結果為:a = 2.761469 b = -0.499174 r2 = 0.965864, 即 y = 2.76 * x^(-0.499),擬合度高達96.6%。 python指數 冪數擬合curve fit
1 一次二次多項式擬合 一次二次比較簡單,直接使用numpy中的函式即可,polyfit x,y,degree 2 指數冪數擬合curve fit 使用scipy.optimize 中的curve fit,冪數擬合例子如下 from scipy.optimize import curve fit i...
過擬合 欠擬合及避免方法
在我們機器學習或者訓練深度神經網路的時候經常會出現欠擬合和過擬合這兩個問題,但是,一開始我們的模型往往是欠擬合的,也正是因為如此才有了優化的空間,我們需要不斷的調整演算法來使得模型的表達能拿更強。但是優化到了一定程度就需要解決過擬合的問題了,這個問題也在學術界討論的比較多。之前搜了很多有的部落格,講...
如何防止過擬合及欠擬合
1.過擬合 1.1 定義 是指模型對於訓練資料擬合呈現過當的情況,反映到評估指標上就是模型在訓練集上的表現很好,但是在測試集上的表現較差。結果就是訓練出的模型泛化能力差。1.2 如何防止過擬合 防止過擬合的方法有4種 1 增加訓練集資料 該方式是從資料入手,將更多的資料參與到模型的訓練中,這是最有效...