線性回歸:
成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、薩爾圖網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為薩爾圖等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
設(shè)x,y分別為一組數(shù)據(jù),代碼如下
import matplotlib.pyplot as plt
import numpy as np
ro=np.polyfit(x,y,deg=1) #deg為擬合的多項(xiàng)式的次數(shù)(線性回歸就選1)
ry=np.polyval(ro,x) #忘記x和ro哪個(gè)在前哪個(gè)在后了。。。
print ro #輸出的第一個(gè)數(shù)是斜率k,第二個(gè)數(shù)是縱截距b
plt.scatter(x,y)
plt.plot(x,ry)
在函數(shù)擬合中,如果用p表示函數(shù)中需要確定的參數(shù),那么目標(biāo)就是找到一組p,使得下面函數(shù)S的值最小:
這種算法稱為最小二乘法擬合。Python的Scipy數(shù)值計(jì)算庫中的optimize模塊提供了 leastsq() 函數(shù),可以對(duì)數(shù)據(jù)進(jìn)行最小二乘擬合計(jì)算。
此處利用該函數(shù)對(duì)一段弧線使用圓方程進(jìn)行了擬合,并通過Matplotlib模塊進(jìn)行了作圖,程序內(nèi)容如下:
Python的使用中需要導(dǎo)入相應(yīng)的模塊,此處首先用 import 語句
分別導(dǎo)入了numpy, leastsq與pylab模塊,其中numpy模塊常用用與數(shù)組類型的建立,讀入等過程。leastsq則為最小二乘法擬合函數(shù)。pylab是繪圖模塊。
接下來我們需要讀入需要進(jìn)行擬合的數(shù)據(jù),這里使用了 numpy.loadtxt() 函數(shù):
其參數(shù)有:
進(jìn)行擬合時(shí),首先我們需要定義一個(gè)目標(biāo)函數(shù)。對(duì)于圓的方程,我們需要圓心坐標(biāo)(a,b)以及半徑r三個(gè)參數(shù),方便起見用p來存儲(chǔ):
緊接著就可以進(jìn)行擬合了, leastsq() 函數(shù)需要至少提供擬合的函數(shù)名與參數(shù)的初始值:
返回的結(jié)果為一數(shù)組,分別為擬合得到的參數(shù)與其誤差值等,這里只取擬合參數(shù)值。
leastsq() 的參數(shù)具體有:
輸出選項(xiàng)有:
最后我們可以將原數(shù)據(jù)與擬合結(jié)果一同做成線狀圖,可采用 pylab.plot() 函數(shù):
pylab.plot() 函數(shù)需提供兩列數(shù)組作為輸入,其他參數(shù)可調(diào)控線條顏色,形狀,粗細(xì)以及對(duì)應(yīng)名稱等性質(zhì)。視需求而定,此處不做詳解。
pylab.legend() 函數(shù)可以調(diào)控圖像標(biāo)簽的位置,有無邊框等性質(zhì)。
pylab.annotate() 函數(shù)設(shè)置注釋,需至少提供注釋內(nèi)容與放置位置坐標(biāo)的參數(shù)。
pylab.show() 函數(shù)用于顯示圖像。
最終結(jié)果如下圖所示:
用Python作科學(xué)計(jì)算
numpy.loadtxt
scipy.optimize.leastsq
線性模型(二)之多項(xiàng)式擬合
1. 多項(xiàng)式擬合問題
??多項(xiàng)式擬合(polynominal curve fitting)是一種線性模型,模型和擬合參數(shù)的關(guān)系是線性的。多項(xiàng)式擬合的輸入是一維的,即x=xx=x,這是多項(xiàng)式擬合和線性回歸問題的主要區(qū)別之一。
??多項(xiàng)式擬合的目標(biāo)是構(gòu)造輸入xx的MM階多項(xiàng)式函數(shù),使得該多項(xiàng)式能夠近似表示輸入xx和輸出yy的關(guān)系,雖然實(shí)際上xx和yy的關(guān)系并不一定是多項(xiàng)式,但使用足夠多的階數(shù),總是可以逼近表示輸入xx和輸出yy的關(guān)系的。
??多項(xiàng)式擬合問題的輸入可以表示如下:
D={(x1,y1),(x2,y2),...,(xi,yi),...,(xN,yN)}xi∈Ryi∈R
D={(x1,y1),(x2,y2),...,(xi,yi),...,(xN,yN)}xi∈Ryi∈R
??目標(biāo)輸出是得到一個(gè)多項(xiàng)式函數(shù):
f(x)=w1x1+w2x2+wixi+...+wMxM+b=(∑i=1Mwixi)+b
f(x)=w1x1+w2x2+wixi+...+wMxM+b=(∑i=1Mwixi)+b
其中MM表示最高階數(shù)為MM。
??可見在線性擬合的模型中,共包括了(M+1)(M+1)個(gè)參數(shù),而該模型雖然不是輸入xx的線性函數(shù),但卻是(M+1)(M+1)個(gè)擬合參數(shù)的線性函數(shù),所以稱多項(xiàng)式擬合為線性模型。對(duì)于多項(xiàng)式擬合問題,其實(shí)就是要確定這(M+1)(M+1)個(gè)參數(shù),這里先假設(shè)階數(shù)MM是固定的(MM是一個(gè)超參數(shù),可以用驗(yàn)證集來確定MM最優(yōu)的值,詳細(xì)的關(guān)于MM值確定的問題,后面再討論),重點(diǎn)就在于如何求出這(M+1)(M+1)個(gè)參數(shù)的值。
2.優(yōu)化目標(biāo)
??多項(xiàng)式擬合是利用多項(xiàng)式函數(shù)逼近輸入xx和輸出yy的函數(shù)關(guān)系,通過什么指標(biāo)來衡量某個(gè)多項(xiàng)式函數(shù)的逼近程度呢?(其實(shí)這就是誤差/損失函數(shù))。擬合/回歸問題常用的評(píng)價(jià)指標(biāo)是均方誤差(在機(jī)器學(xué)習(xí)中的模型評(píng)估與度量博客中,我進(jìn)行了介紹)。多項(xiàng)式擬合問題也同樣采用該評(píng)價(jià)指標(biāo),以均方誤差作為誤差/損失函數(shù),誤差函數(shù)越小,模型越好。
E(w,b)=1N∑i=1N[f(xi)?yi]2
E(w,b)=1N∑i=1N[f(xi)?yi]2
??系數(shù)1N1N是一常數(shù),對(duì)優(yōu)化結(jié)果無影響,可以去除,即將均方誤差替換為平方誤差:
E(w,b)=∑i=1N[f(xi)?yi]2
E(w,b)=∑i=1N[f(xi)?yi]2
?? 到這里,就成功把多項(xiàng)式擬合問題變成了最優(yōu)化問題,優(yōu)化問題可表示為:
argminw,bE(w,b)
arg?minw,b?E(w,b)
即需要求得參數(shù){w1,...,wM,b}{w1,...,wM,b}的值,使得E(w,b)E(w,b)最小化。那么如何對(duì)該最優(yōu)化問題求解呢?
3. 優(yōu)化問題求解
3.1 求偏導(dǎo),聯(lián)立方程求解
?? 直觀的想法是,直接對(duì)所有參數(shù)求偏導(dǎo),令偏導(dǎo)為0,再聯(lián)立這M+1M+1個(gè)方程求解(因?yàn)楣灿蠱+1M+1個(gè)參數(shù),故求偏導(dǎo)后也是得到M+1M+1個(gè)方程)。
E(w,b)=∑i=1N[f(xi)?yi]2=∑i=1N[(w1x1i+w2x2i+wixji+...+wMxMi+b)?yi]2
E(w,b)=∑i=1N[f(xi)?yi]2=∑i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)?yi]2
利用E(w,b)E(w,b)對(duì)各個(gè)參數(shù)求偏導(dǎo),如下:
?E(w,b)?wj?E(w,b)?b=2∑i=1N[(w1x1i+w2x2i+wixji+...+wMxMi+b)?yi]xji=2∑i=1N[(w1x1i+w2x2i+wixji+...+wMxMi+b)?yi]
?E(w,b)?wj=2∑i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)?yi]xij?E(w,b)?b=2∑i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)?yi]
求導(dǎo)之后,將各個(gè)點(diǎn)(xi,yi)(xi,yi)的值帶入偏導(dǎo)公式,聯(lián)立方程求解即可。
??針對(duì)該解法,可以舉個(gè)例子詳細(xì)說明,比如有兩個(gè)點(diǎn)(2,3),(5,8)(2,3),(5,8),需要利用二階多項(xiàng)式f(x)=w1x+w2x2+bf(x)=w1x+w2x2+b擬合。求解過程如下:
該二階多項(xiàng)式對(duì)參數(shù)求偏導(dǎo)得到
?E(w,b)?wj?E(w,b)?b=2∑i=12[(w1x1i+w2x2i+b)?yi]xji=[(w1x1+w2x21+b)?y1]xj1+[(w1x2+w2x22+b)?y2]xj2=2∑i=12[(w1x1i+w2x2i+b)?yi]=[(w1x1+w2x21+b)?y1]+[(w1x2+w2x22+b)?y2]
?E(w,b)?wj=2∑i=12[(w1xi1+w2xi2+b)?yi]xij=[(w1x1+w2x12+b)?y1]x1j+[(w1x2+w2x22+b)?y2]x2j?E(w,b)?b=2∑i=12[(w1xi1+w2xi2+b)?yi]=[(w1x1+w2x12+b)?y1]+[(w1x2+w2x22+b)?y2]
將點(diǎn)(2,3),(5,8)(2,3),(5,8)帶入方程,可以得到3個(gè)方程,
2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
聯(lián)立這三個(gè)方程求解,發(fā)現(xiàn)有無窮多的解,只能得到3w1+21w2=53w1+21w2=5,這三個(gè)方程是線性相關(guān)的,故沒有唯一解。
??該方法通過求偏導(dǎo),再聯(lián)立方程求解,比較復(fù)雜,看著也很不美觀。那么有沒有更加方便的方法呢?
3.2 最小二乘法
?? 其實(shí)求解該最優(yōu)化問題(平方和的最小值)一般會(huì)采用最小二乘法(其實(shí)最小二乘法和求偏導(dǎo)再聯(lián)立方程求解的方法無本質(zhì)區(qū)別,求偏導(dǎo)也是最小二乘法,只是這里介紹最小二乘的矩陣形式而已)。最小二乘法(least squares),從英文名非常容易想到,該方法就是求解平方和的最小值的方法。
??可以將誤差函數(shù)以矩陣的表示(NN個(gè)點(diǎn),最高M(jìn)M階)為:
∥Xw?y∥2
‖Xw?y‖2
其中,把偏置bb融合到了參數(shù)ww中,
w={b,w1,w2,...,wM}
w={b,w1,w2,...,wM}
XX則表示輸入矩陣,
??????11...1x1x2...xNx21x22...x2N............xM1xM2...xMN??????
[1x1x12...x1M1x2x22...x2M...............1xNxN2...xNM]
yy則表示標(biāo)注向量,
y={y1,y2,...,yN}T
y={y1,y2,...,yN}T
因此,最優(yōu)化問題可以重新表示為
minw∥Xw?y∥2
minw‖Xw?y‖2
對(duì)其求導(dǎo),
?∥Xw?y∥2?w=?(Xw?y)T(Xw?y)?w=?(wTXT?yT)(Xw?y)?w=?(wTXTXw?yTXw?wTXTy+yTy)?w
?‖Xw?y‖2?w=?(Xw?y)T(Xw?y)?w=?(wTXT?yT)(Xw?y)?w=?(wTXTXw?yTXw?wTXTy+yTy)?w
在繼續(xù)對(duì)其求導(dǎo)之前,需要先補(bǔ)充一些矩陣求導(dǎo)的先驗(yàn)知識(shí)(常見的一些矩陣求導(dǎo)公式可以參見轉(zhuǎn)載的博客),如下:
?xTa?x=a?ax?x=aT?xTA?x=Ax+ATx
?xTa?x=a?ax?x=aT?xTA?x=Ax+ATx
根據(jù)上面的矩陣求導(dǎo)規(guī)則,繼續(xù)進(jìn)行損失函數(shù)的求導(dǎo)
?∥Xw?y∥2?w=?(wTXTXw?yTXw?wTXTy+yTy)?w=XTXw+(XTX)Tw?(yTX)T?XTy=2XTXw?2XTy
?‖Xw?y‖2?w=?(wTXTXw?yTXw?wTXTy+yTy)?w=XTXw+(XTX)Tw?(yTX)T?XTy=2XTXw?2XTy
其中XTXw=(XTX)TwXTXw=(XTX)Tw.令求導(dǎo)結(jié)果等于0,即可以求導(dǎo)問題的最小值。
2XTXw?2XTy=0w=(XTX)?1XTy
2XTXw?2XTy=0w=(XTX)?1XTy
??再利用最小二乘法的矩陣形式對(duì)前面的例子進(jìn)行求解,用二階多項(xiàng)式擬合即兩個(gè)點(diǎn)(2,3),(5,8)(2,3),(5,8)。
表示輸入矩陣 XX和標(biāo)簽向量yy
X=[1125425]y=[38]T
X=[1241525]y=[38]T
計(jì)算XTXXTX
XTX=???272972913329133641???
XTX=[272972913329133641]
矩陣求逆,再做矩陣乘法運(yùn)算
但 XTXXTX不可逆,故無唯一解。
??關(guān)于矩陣的逆是否存在,可以通過判斷矩陣的行列式是否為0(det(A)=?0det(A)=?0 來判斷,也可以通過初等行變換,觀察矩陣的行向量是否線性相關(guān),在這個(gè)例子下,矩陣不可逆,故有無窮多解。但如果新增一個(gè)點(diǎn)(4,7)(4,7),則就可以解了。
??其實(shí)這和數(shù)據(jù)集的點(diǎn)數(shù)和選擇的階數(shù)有關(guān),如果點(diǎn)數(shù)小于階數(shù)則會(huì)出現(xiàn)無窮解的情況,如果點(diǎn)數(shù)等于階數(shù),那么剛好有解可以完全擬合所有數(shù)據(jù)點(diǎn),如果點(diǎn)數(shù)大于階數(shù),則會(huì)求的近似解。
??那么對(duì)于點(diǎn)數(shù)小于階數(shù)的情況,如何求解?在python的多項(xiàng)式擬合函數(shù)中是可以擬合的,而且效果不錯(cuò),具體算法不是很了解,可以想辦法參考python的ployfit()函數(shù)的實(shí)現(xiàn)。
4. 擬合階數(shù)的選擇
?? 在前面的推導(dǎo)中,多項(xiàng)式的階數(shù)被固定了,那么實(shí)際場(chǎng)景下應(yīng)該如何選擇合適的階數(shù)MM呢?
一般會(huì)選擇階數(shù)MM小于點(diǎn)數(shù)NN
把訓(xùn)練數(shù)據(jù)分為訓(xùn)練集合驗(yàn)證集,在訓(xùn)練集上,同時(shí)用不同的MM值訓(xùn)練多個(gè)模型,然后選擇在驗(yàn)證集誤差最小的階數(shù)script type="math/tex" id="MathJax-Element-5573"M/script
分享題目:python函數(shù)擬合誤差 python擬合曲線誤差分析
新聞來源:http://jinyejixie.com/article46/dochheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、用戶體驗(yàn)、ChatGPT、定制網(wǎng)站、Google、標(biāo)簽優(yōu)化
聲明:本網(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)