numpy多項式擬合函數(shù)polyfit的使用方法代碼
import numpy as np def fit(x,y,m,w): if len(x)<=m: return False xishu = np.polyfit(x,y,m,w=w) p = np.poly1d(xishu) # 構(gòu)造多項式 yfit = p(x) # 擬合的y值 yresid = y - yfit # 殘差 SSresid = sum(pow(yresid, 2)) # 殘差平方和 SStotal = len(y) * np.var(y) # 總體平均方差 if SStotal==0:#水平線 r2=1 else: r2 = 1 - SSresid/SStotal # 擬合優(yōu)度 return (xishu,r2,yfit) if __name__=="__main__": x = np.arange(0,5,0.1) z = [2+3*x+4*x**2 for x in x] y = np.array([np.random.normal(z,3) for z in z]) weight=[1 for one in x] print(fit(x,y,2,weight))
polyfit(x,y,m,w) 參數(shù)m為多項式的次數(shù)+1,w為權(quán)重。權(quán)重的含義是這個數(shù)據(jù)點的誤差要乘以權(quán)重,低點給予高權(quán)重可以減少低點的誤差,避免低點的相對誤差過大。
自定義函數(shù)fit(x,y,m,w)的返回值 (xishu,r2,yfit)分別為系數(shù)、相關(guān)系數(shù)、擬合Y值。
過原點也可以通過權(quán)重實現(xiàn)。代碼如下:
if must00: x=np.append(x,0)#.append(0) y=np.append(y,0)#y.append(0) w=np.append(w,100000000)#.append(10000) fit_r=fit(x,y,m,w) if fit_r: (xishu,r,y_fitted)=fit_r else: #fit error xishu=[0,1,0] y_fitted=x r=0
總結(jié)
到此這篇關(guān)于numpy多項式擬合函數(shù)polyfit使用的文章就介紹到這了,更多相關(guān)numpy多項式擬合函數(shù)polyfi內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)交通數(shù)據(jù)可視化的示例代碼
本文主要分享了Python交通數(shù)據(jù)分析與可視化的實戰(zhàn)!其中主要是使用TransBigData庫快速高效地處理、分析、挖掘出租車GPS數(shù)據(jù),感興趣的可以了解一下2023-04-04Python必備技巧之Pandas數(shù)據(jù)合并函數(shù)
Pandas中一共有五個數(shù)據(jù)合并函數(shù),分別為:concat、append、merge、join、combine,本文詳細(xì)講解這五個函數(shù)的使用方法,需要的可以參考一下2022-03-03pandas把dataframe轉(zhuǎn)成Series,改變列中值的類型方法
下面小編就為大家分享一篇pandas把dataframe轉(zhuǎn)成Series,改變列中值的類型方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04基于Python對數(shù)據(jù)shape的常見操作詳解
今天小編就為大家分享一篇基于Python對數(shù)據(jù)shape的常見操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12