線性回歸梯度下降法_第1頁
線性回歸梯度下降法_第2頁
線性回歸梯度下降法_第3頁
線性回歸梯度下降法_第4頁
線性回歸梯度下降法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、線性回歸-梯度下降法梯度下降法求解最小二乘咚警二茲(外用嘗1狙七乙區(qū)(0-0)垠八梯度下降(GD)是最小化風(fēng)險函數(shù)、損失函數(shù)的一種常用方法,隨機梯度下降和批量梯度下降迭代求解思路,下面從公式和實現(xiàn)的角度對兩者進行分析下面的h(x)是要擬合的函數(shù),J(theta)是損失函數(shù),theta是參數(shù),要迭代求解的值,theta求解出來了那最終要擬合的函數(shù)h(theta)就出來了。其中n是訓(xùn)練集的樣本數(shù)量,j是參數(shù)的個數(shù)。1、批量梯度下降法構(gòu)造損失函數(shù)求梯度對J(theta)關(guān)于theta求偏導(dǎo),得到損失函數(shù)關(guān)于每個theta對應(yīng)的的梯度咚警丄茲的丫)嘗1狙設(shè)置參數(shù)1.學(xué)習(xí)率:學(xué)習(xí)率不能設(shè)置過大,否則每次

2、theta改變的太快,可能會跳過全局最優(yōu)解。而陷入局部最優(yōu)解,但是也不能設(shè)置的過小,否則要經(jīng)過很多次迭代才能收斂到全局最優(yōu)解2最大迭代次數(shù):即梯度下降法迭代的最大次數(shù)3誤差閾值:和迭代次數(shù)一樣是用來控制迭代的結(jié)束條件的,當(dāng)誤差小于某個閾值或者迭代次數(shù)大于最大迭代次數(shù)時就結(jié)束迭代迭代更新theta梯度是函數(shù)增長最快的方向,因此最小化損失函數(shù),要沿著梯度的反方向進行尋優(yōu),來更新每個thetaJ叫=弓j=nj-1從上面公式可以注意到,每迭代一步,都要用到訓(xùn)練集所有的數(shù)據(jù),如果樣本數(shù)量n很大,那么批量梯度下降的迭代速度會很慢!所以,這就引入了另外一種方法,隨機梯度下降。python的實現(xiàn)#coding

3、=UTF-8importnumpyasnpimportmatplotlib.pyplotaspitclasslinear_regression_gradient_descent:def_init_(self,x,y,eps,alpha,max_iter_times):HIinitalizefeature、dependentvariable、learningrate、iterationtimes:paramx:paramy:paramalpha:parammax_iter_times:HIself.x=xself.y=yself.n=len(self.x)self.w=np.zeros(x.sh

4、ape1,1)self.alpha=alphaself.iteration=max_iter_timesself.eps=epsself.cost_review=np.zeros(0,0)deferror_function(self):HIcomputeerroroftrainingdataineveryiteration:return:avectoroferrorHI#step1computecostfunctionn=len(self.x)y_pred=np.dot(self.x,self.w)error=y_pred-self.yreturnerrordefpartial_devativ

5、e(self):HIcomputethepartialderivativesofcostfunctionsonthetaineveryturn:return:HIn=len(self.x)error=self.error_function()delta_w=np.dot(self.x.T,error)/nreturndelta_wdefbatch_gradient_descent(self):HIgradientdescenttosolvetheparameteroflinearregression:return:HIn=len(self.x)itera=0error=self.error_f

6、unction()cost=np.sum(error*2)/2*nwhile(iteraself.eps):#step1computethepartialderivativesofcostfunctionsonthetadelta_w=self.partial_devative()#step2updatethetaself.w=self.w-self.alpha*delta_w#step3computecostfunctionerror=self.error_function()cost=np.sum(error*2)/2*n#printcostself.cost_review=np.appe

7、nd(self.cost_review,cost)itera+=1returnself.w_name=main:x=np.array(1,2,2,0,1,3,4,2,0,1,2,5,1,0,2,2,3,5,1,3,1,4,2,3,1,3,4,2,2,1)x_thetaO=np.ones(x.shape0)#insertafull-1colinthefirstcolofXmatrixtogetthedesignmatrixdesign_matrix=np.insert(x,0,values=x_theta0,axis=1)y=np.array(1.2,0.4,0.6,2.1,0.9,0.3).r

8、eshape(len(design_matrix),1)Ir=linear_regression_gradient_descent(design_matrix,y,0.15,0.01,100)w=lr.batch_gradient_descent()printparameteroflinearregression:+str(w)printiterationtimesare:+str(len(lr.cost_review)#showthecurveofcostfunctionfig=plt.figure(1)plt.plot(lr.cost_review,color=r)plt.ylim(ymi

9、n=np.min(lr.cost_review),ymax=np.max(lr.cost_review)plt.xlim(xmin=0,xmax=len(lr.cost_review)+1)plt.ylabel(costfunction)plt.xlabel(idofiteration)plt.title(costfunctionoflinearregression)plt.grid()plt.show()costfunctionoflinesrregression匸口一4uun445OU02004QD600800idofiterationcost_function.png可以看出:雖然迭代次

10、數(shù)設(shè)置了100次,但是因為誤差一直沒有達到設(shè)置的閾值0.15以內(nèi),因為一直在迭代,大約迭代了將近1000次才結(jié)束,在迭代的過程中,可以看到誤差一直在不斷減小,直至達到閾值要求2、隨機梯度下降法構(gòu)造損失函數(shù)上面批量梯度下降對應(yīng)的是所有的訓(xùn)練樣本,可以寫成如下這種形式:損失函數(shù)此時的損失函數(shù)對應(yīng)的是訓(xùn)練集中每個樣本的損失函數(shù),是樣本粒度的求梯度對每個樣本的損失函數(shù)關(guān)于theta求偏導(dǎo)得到梯度梯度設(shè)置參數(shù)參照批量梯度下降法迭代更新theta迭代更新公式3.SGD與BGD的比較相同點:都是全局尋優(yōu)的:BGD是最小化所有訓(xùn)練樣本的損失函數(shù),使得最終求解的是全局的最優(yōu)解,即求解的參數(shù)是使得風(fēng)險函數(shù)最??;S

11、GD是最小化每條樣本的損失函數(shù),SGD伴隨的一個問題是噪音較BGD要多,使得SGD并不是每次迭代都向著整體最優(yōu)化方向。但是大的整體的方向是向全局最優(yōu)化的,最終的結(jié)果往往是在全局最優(yōu)解附近??傊?,SGD和BGD都是在整個參數(shù)區(qū)間上進行搜索,學(xué)習(xí)率越大,每次參數(shù)的變動越大,那么可能容易陷入局部最小值,但是整體思想是全局尋優(yōu)的不同點:效率上:隨機梯度下降(SGD)是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那么可能只用其中幾萬條或者幾千條的樣本,就已經(jīng)將theta迭代到最優(yōu)解了;對比上面的批量梯度下降,迭代一次需要用到十幾萬訓(xùn)練樣本,一次迭代不可能最優(yōu),如果迭代10次的話就需要

12、遍歷訓(xùn)練樣本10次。因此SGD在計算的效率上要高于BGD局部最小值問題因為SGD是通過每次對部分樣本進行迭代,是對BGD的一個隨機近似,那么當(dāng)目標(biāo)函數(shù)有多個局部極小值時,SGD比BGD反而更可能避免進入局部極小值中。學(xué)習(xí)率n的選擇對于步長n的取值,一般BGD的n比SGD的大。因為GD的是使用準(zhǔn)確的梯度,理直氣壯地走,SGD使用的是近似的梯度,就得小心翼翼地走,怕一不小心誤入歧途南轅北轍了。4梯度下降法和最小二乘法求解線性回歸的比較梯度下降法是迭代算法,通過每一次迭代不斷沿著函數(shù)減小最快的方向來改變代價函數(shù)的自變量theta,進而減小代價函數(shù)值,這一過程我們可以看出:梯度下降法是全局尋優(yōu)的過程,只要theta設(shè)置合理,就不會陷入局部最小值,我們會逐漸收斂到全局最優(yōu)值;(2)最小二乘法是對代價函數(shù)直接求偏導(dǎo)令其為0,因此是局部尋優(yōu),實踐表明在屬性或者樣本數(shù)目比較多時,梯度下降法效果更好,且在參數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論