本文實(shí)例講述了Python基于最小二乘法實(shí)現(xiàn)曲線擬合。分享給大家供大家參考,具體如下:
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)朝陽,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
這里不手動(dòng)實(shí)現(xiàn)最小二乘,調(diào)用scipy庫中實(shí)現(xiàn)好的相關(guān)優(yōu)化函數(shù)。
考慮如下的含有4個(gè)參數(shù)的函數(shù)式:
構(gòu)造數(shù)據(jù)
?
123456789101112131415
import numpy as npfrom scipy import optimizeimport matplotlib.pyplot as pltdef logistic4(x, A, B, C, D):??return (A-D)/(1+(x/C)**B)+Ddef residuals(p, y, x):??A, B, C, D = p??return y - logisctic4(x, A, B, C, D)def peval(x, p):??A, B, C, D = p??return logistic4(x, A, B, C, D)A, B, C, D = .5, 2.5, 8, 7.3x = np.linspace(0, 20, 20)y_true = logistic4(x, A, B, C, D)y_meas = y_true + 0.2 * np.random.randn(len(y_true))
調(diào)用工具箱函數(shù),進(jìn)行優(yōu)化
?
1234
p0 = [1/2]*4plesq = optimize.leastsq(residuals, p0, args=(y_meas, x))????????????# leastsq函數(shù)的功能其實(shí)是根據(jù)誤差(y_meas-y_true)????????????# 估計(jì)模型(也即函數(shù))的參數(shù)
繪圖
?
12345678
plt.figure(figsize=(6, 4.5))plt.plot(x, peval(x, plesq[0]), x, y_meas, 'o', x, y_true)plt.legend(['Fit', 'Noisy', 'True'], loc='upper left')plt.title('least square for the noisy data (measurements)')for i, (param, true, est) in enumerate(zip('ABCD', [A, B, C, D], plesq[0])):??plt.text(11, 2-i*.5, '{} = {:.2f}, est({:.2f}) = {:.2f}'.format(param, true, param, est))plt.savefig('./logisitic.png')plt.show()
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
很多業(yè)務(wù)場(chǎng)景中,我們希望通過一個(gè)特定的函數(shù)來擬合業(yè)務(wù)數(shù)據(jù),以此來預(yù)測(cè)未來數(shù)據(jù)的變化趨勢(shì)。(比如用戶的留存變化、付費(fèi)變化等)
本文主要介紹在 Python 中常用的兩種曲線擬合方法:多項(xiàng)式擬合 和 自定義函數(shù)擬合。
通過多項(xiàng)式擬合,我們只需要指定想要擬合的多項(xiàng)式的最高項(xiàng)次是多少即可。
運(yùn)行結(jié)果:
對(duì)于自定義函數(shù)擬合,不僅可以用于直線、二次曲線、三次曲線的擬合,它可以適用于任意形式的曲線的擬合,只要定義好合適的曲線方程即可。
運(yùn)行結(jié)果:
在了解了最小二乘法的基本原理之后 python_numpy實(shí)用的最小二乘法理解 ,就可以用最小二乘法做曲線擬合了
從結(jié)果中可以看出,直線擬合并不能對(duì)擬合數(shù)據(jù)達(dá)到很好的效果,下面我們介紹一下曲線擬合。
b=[y1]
[y2]
......
[y100]
解得擬合函數(shù)的系數(shù)[a,b,c.....d]
CODE:
根據(jù)結(jié)果可以看到擬合的效果不錯(cuò)。
我們可以通過改變
來調(diào)整擬合效果。
如果此處我們把擬合函數(shù)改為最高次為x^20的多項(xiàng)式
所得結(jié)果如下:
矯正 過擬合 現(xiàn)象
在保持?jǐn)M合函數(shù)改為最高次為x^20的多項(xiàng)式的條件下,增大樣本數(shù):
通過結(jié)果可以看出,過擬合現(xiàn)象得到了改善。
Python中利用guiqwt進(jìn)行曲線數(shù)據(jù)擬合。
示例程序:
圖形界面如下:
標(biāo)題名稱:python函數(shù)擬合曲線,擬合曲線方程式
地址分享:http://jinyejixie.com/article46/hsegeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站收錄、靜態(tài)網(wǎng)站、服務(wù)器托管、自適應(yīng)網(wǎng)站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)