91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

梯度提升算法

深度學(xué)習(xí)自然語言處理 ? 來源:AI公園 ? 作者:AI公園 ? 2021-03-05 16:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡化復(fù)雜的算法

動機

盡管大多數(shù)的Kaggle競賽的獲勝者使用了多個模型的集成,這些集成的模型中,有一個必定是各種變體的梯度提升算法。舉個例子,Kaggle競賽:Safe Driver Prediction:https://www.kaggle.com/c/porto-seguro-safe-driver-prediction/discussion/44629#250927,Michael Jahrer的方案,使用了表示學(xué)習(xí),使用了6個模型的綜合。1個LightGBM和5個神經(jīng)網(wǎng)絡(luò)。盡管他的成功歸功他使用了結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行了半監(jiān)督學(xué)習(xí),梯度提升算法也實現(xiàn)了非常重要的部分。

盡管GBM使用的非常廣泛,許多使用者仍然把這個東西當(dāng)做一個黑盒子算法,只是使用預(yù)編譯好的庫跑一跑。寫這篇文章的目的是簡化復(fù)雜的算法,幫助讀者可以直觀的理解算法。我會解釋原汁原味的梯度提升算法,然后分享一些變種的鏈接。我基于fast.ai的庫做了一個決策樹的代碼,然后構(gòu)建了一個自己的簡單的基礎(chǔ)的梯度提升模型。

Ensemble, Bagging, Boosting的簡單描述

當(dāng)我們使用一個機器學(xué)習(xí)技術(shù)來預(yù)測目標(biāo)變量的時候,造成實際值和預(yù)測值之間的差別的原因有噪聲,方差和偏差。集成方法能夠幫助減少這些因素(除了噪聲,不可約誤差)。

Ensemble是幾個預(yù)測器在一起(比如求平均),給出一個最終的結(jié)果。使用ensemble的原因是許多不同的預(yù)測器預(yù)測同一個目標(biāo)會比單個預(yù)測器的效果要好。Ensemble技術(shù)又可以分成Bagging和Boosting。

Bagging是一個簡單的ensemble的技術(shù),我們構(gòu)建許多獨立的預(yù)測器/模型/學(xué)習(xí)器,通過模型平均的方式來組合使用。(如權(quán)值的平均,投票或者歸一化平均)

我們?yōu)槊總€模型使用隨機抽樣,所以每個模型都不太一樣。每個模型的輸入使用有放回的抽樣,所以模型的訓(xùn)練樣本各不相同。因為這個技術(shù)使用了許多個不相關(guān)的學(xué)習(xí)器來進(jìn)行最終的預(yù)測,它通過減少方差來減小誤差。bagging的一個例子是隨機森林模型。

Boosting在對模型進(jìn)行ensemble的時候,不是獨立的,而是串行的。

這個技術(shù)使用了這樣的邏輯,后面的預(yù)測器學(xué)習(xí)的是前面的預(yù)測器的誤差。因此,觀測數(shù)據(jù)出現(xiàn)在后面模型中的概率是不一樣的,誤差越大,出現(xiàn)的概率越高。(所以觀測數(shù)據(jù)不是基于隨機又放回抽樣bootstrap的方式,而是基于誤差)。預(yù)測器可以從決策樹,回歸器,分類器中選取。因為新的預(yù)測器是從前面的預(yù)測器的誤差中學(xué)習(xí)的,接近實際的預(yù)測只需要更少的時間和迭代次數(shù)。但是我們不得不選擇嚴(yán)格的停止策略,否則可能會出現(xiàn)過擬合。梯度提升算法就是提升算法的一個例子。

Fig 1.Ensembling

Fig 2.Bagging (independent models) & Boosting (sequential models).Reference:https://quantdare.com/what-is-the-difference-between-bagging-and-boosting/

梯度提升算法

梯度提升是一個機器學(xué)習(xí)技術(shù),用來做回歸和分類的問題,通過組合弱預(yù)測模型如決策樹,來得到一個強預(yù)測模型。(維基百科定義)

監(jiān)督學(xué)習(xí)算法的目標(biāo)是定義一個損失函數(shù),然后最小化它。我們來看看,數(shù)學(xué)上梯度提升算法是怎么工作的。比如我們使用均方誤差(MSE)作為損失函數(shù):

bddbdbae-7c22-11eb-8b86-12bb97331649.jpg

我們希望我們的預(yù)測讓我們的損失函數(shù)最小。通過使用梯度提升算法,基于一個學(xué)習(xí)率來更新我們的預(yù)測,我們會發(fā)現(xiàn)一個讓MSE最小的值。

be251cd8-7c22-11eb-8b86-12bb97331649.png

所以,我們基本上是在更新預(yù)測,讓殘差的和接近于0(或者最?。?,這樣預(yù)測的值就和實際的值足夠的接近了。

梯度提升背后的直覺

梯度提升背后的邏輯很簡單,(可以很直觀的理解,不用數(shù)據(jù)公式)。我希望讀這篇文章的人能夠熟悉一下簡單的線性回歸模型。

線性回歸模型的一個基本的假設(shè)是殘差是0,也就是說,參數(shù)應(yīng)該在0的周圍分散。

be8c21b2-7c22-11eb-8b86-12bb97331649.png

現(xiàn)在,把這些殘差作為誤差提交到我們的預(yù)測模型中。盡管,基于樹的模型(將決策樹作為梯度提升的基礎(chǔ)模型)不是基于這個假設(shè),但是如果我們對這個假設(shè)進(jìn)行邏輯思考,我們也許能提出,如果我們能發(fā)現(xiàn)在0的周圍的殘差一些模式,我們可以利用這個模式來擬合模型。

所以,梯度提升背后的直覺就是重復(fù)的利用殘差中的模式利用弱預(yù)測器來加強模型,讓模型變得更好。一旦我們到了一個階段,殘差不具有任何的模式,無法進(jìn)行建模,我們就可以停止了(否則會導(dǎo)致過擬合)。從算法的角度講,我們在最小化損失函數(shù),直到測試損失達(dá)到最小。

總結(jié)一下:

我們首先使用一個簡單的模型對數(shù)據(jù)進(jìn)行建模,分析數(shù)據(jù)的誤差。

這些誤差表示數(shù)據(jù)點使用簡單的模型很難進(jìn)行擬合。

然后對于接下來的模型,我們特別的專注于將那些難于擬合的數(shù)據(jù),把這些數(shù)據(jù)預(yù)測正確。

最后,我們將所有的預(yù)測器組合起來,對于每個預(yù)測器給定一個權(quán)重。

擬合梯度提升模型的步驟

我們來模擬一些數(shù)據(jù),如下面的散點圖所示,一個輸入,一個輸出。

beb975d6-7c22-11eb-8b86-12bb97331649.png

上面的數(shù)據(jù)是通過下面的python代碼生成的。

x = np.arange(0,50) x = pd.DataFrame({'x':x}) # just random uniform distributions in differnt range y1 = np.random.uniform(10,15,10) y2 = np.random.uniform(20,25,10) y3 = np.random.uniform(0,5,10) y4 = np.random.uniform(30,32,10) y5 = np.random.uniform(13,17,10) y = np.concatenate((y1,y2,y3,y4,y5)) y = y[:,None]

1.擬合一個簡單的線性回歸模型或者決策樹模型(在我的代碼中選擇了決策樹)[x作為輸入,y作為輸出]

xi = x # initialization of input yi = y # initialization of target # x,y --> use where no need to change original y ei = 0 # initialization of error n = len(yi) # number of rows predf = 0 # initial prediction 0 for i in range(30): # loop will make 30 trees (n_estimators). tree = DecisionTree(xi,yi) # DecisionTree scratch code can be found in shared github/kaggle link. # It just create a single decision tree with provided min. sample leaf tree.find_better_split(0) # For selected input variable, this splits (n) data so that std. deviation of # target variable in both splits is minimum as compared to all other splits r = np.where(xi == tree.split)[0][0] # finds index where this best split occurs left_idx = np.where(xi <= tree.split)[0] # index lhs of split ? ? ?right_idx = np.where(xi > tree.split)[0] # index rhs of split

2.計算誤差,實際的目標(biāo)值,最小化預(yù)測目標(biāo)值[e1= y - y_predicted1 ]

3.把誤差作為目標(biāo)值,擬合新的模型,使用同樣的輸入數(shù)據(jù)[叫做e1_predicted]

4.將預(yù)測的誤差加到之前的預(yù)測之中[y_predicted2 = y_predicted1 + e1_predicted]

5.在剩下的殘差上擬合另一個模型,[e2 = y - y_predicted2],重復(fù)第2到第5步,直到開始過擬合,或者殘差的和開始不怎么變換。過擬合可以通過驗證數(shù)據(jù)上的準(zhǔn)確率來發(fā)現(xiàn)。

# predictions by ith decisision tree predi = np.zeros(n) np.put(predi, left_idx, np.repeat(np.mean(yi[left_idx]), r)) # replace left side mean y np.put(predi, right_idx, np.repeat(np.mean(yi[right_idx]), n-r)) # right side mean y predi = predi[:,None] # make long vector (nx1) in compatible with y predf = predf + predi # final prediction will be previous prediction value + new prediction of residual ei = y - predf # needed originl y here as residual always from original y yi = ei # update yi as residual to reloop

為了幫助理解劃線部分的概念,這里有個鏈接,有完整的梯度提升模型的實現(xiàn) [[Link: Gradient Boosting from scratch]](https://www.kaggle.com/grroverpr/gradient-boosting-simplified/)。????????????

梯度提升樹的可視化工作

藍(lán)色的點(左邊)是輸入(x),紅色的線(左邊)是輸出(y)顯示了決策樹的預(yù)測值,綠色的點(右邊)顯示了第i次迭代的殘差vs.輸入(x),迭代表示擬合梯度提升樹的了序列的順序。

bee0a444-7c22-11eb-8b86-12bb97331649.jpg

Fig 5.Visualization of gradient boosting predictions (First 4 iterations)

bf1d7572-7c22-11eb-8b86-12bb97331649.jpg

Fig 6.Visualization of gradient boosting predictions (18th to 20th iterations)

我們發(fā)現(xiàn)過了20個迭代,殘差變成了0附近的隨機分布(我不會說是隨機正態(tài)分布),我們的預(yù)測也非常接近于實際值。這時可以停止訓(xùn)練模型了,否則要開始過擬合了。

我們來看看,50個迭代之后的樣子:

bf64abcc-7c22-11eb-8b86-12bb97331649.jpg

Fig 7. Visualization of gradient boosting prediction (iteration 50th)

我們發(fā)現(xiàn),即使是50個迭代之后,殘差vs. x的圖和我們看到的20個迭代的圖也沒太大區(qū)別。但是模型正在變的越來越復(fù)雜,預(yù)測結(jié)果在訓(xùn)練數(shù)據(jù)上出現(xiàn)了過擬合。所以,最好是在20個迭代的時候就停止。

用來畫圖的python代碼。

# plotting after prediction xa = np.array(x.x) # column name of x is x order = np.argsort(xa) xs = np.array(xa)[order] ys = np.array(predf)[order] #epreds = np.array(epred[:,None])[order] f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize = (13,2.5)) ax1.plot(x,y, 'o') ax1.plot(xs, ys, 'r') ax1.set_title(f'Prediction (Iteration {i+1})') ax1.set_xlabel('x') ax1.set_ylabel('y / y_pred') ax2.plot(x, ei, 'go') ax2.set_title(f'Residuals vs. x (Iteration {i+1})') ax2.set_xlabel('x') ax2.set_ylabel('Residuals')

我希望這個博客可以幫助你對梯度提升算法的工作有一個基本的直覺。為了理解梯度提升回歸算法的細(xì)節(jié),我強烈建議你讀一讀下面這些文章。

更多有用的資源

我的github倉庫和kaggle的kernel的鏈接,從頭開始GBM

https://www.kaggle.com/grroverpr/gradient-boosting-simplified/https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/01_Gradient_Boosting_Scratch.ipynb

一個直觀和細(xì)致的梯度提升算法的解釋

http://explained.ai/gradient-boosting/index.html

Fast.ai的github倉庫鏈接,從頭開始做決策樹

https://github.com/fastai/fastai

Alexander Ihler的視頻,這視頻幫我理解了很多。

https://youtu.be/sRktKszFmSk

最常用的GBM算法

XGBoost || Lightgbm || Catboost || sklearn.ensemble.GradientBoostingClassifier

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4838

    瀏覽量

    107859
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98095
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8554

    瀏覽量

    136996

原文標(biāo)題:【算法理解】從頭開始理解梯度提升算法

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    算法工程師需要具備哪些技能?

    景:神經(jīng)網(wǎng)絡(luò)中的權(quán)重矩陣計算、降維算法(如PCA)等。 概率論與數(shù)理統(tǒng)計核心內(nèi)容:貝葉斯定理、最大似然估計、假設(shè)檢驗等。應(yīng)用場景:模型不確定性分析、A/B測試效果評估等。 微積分核心內(nèi)容:導(dǎo)數(shù)、梯度
    發(fā)表于 02-27 10:53

    小華半導(dǎo)體數(shù)字電源算法配置工具DPACT介紹

    參考設(shè)計算法基礎(chǔ)上完成定制化開發(fā),高效生成符合項目需求的算法程序;用戶幾乎不需要懂電力電子算法、顯著降低開發(fā)門檻、縮短產(chǎn)品上市周期、既提升開發(fā)效率又
    的頭像 發(fā)表于 02-11 11:28 ?313次閱讀
    小華半導(dǎo)體數(shù)字電源<b class='flag-5'>算法</b>配置工具DPACT介紹

    SM4算法實現(xiàn)分享(一)算法原理

    SM4分組加密算法采用的是非線性迭代結(jié)構(gòu),以字為單位進(jìn)行加密、解密運算,每次迭代稱為一輪變換,每輪變換包括S盒變換、非線性變換、線性變換、合成變換。加解密算法與密鑰擴展都是采用32輪非線性迭代結(jié)構(gòu)
    發(fā)表于 10-30 08:10

    CNN卷積神經(jīng)網(wǎng)絡(luò)設(shè)計原理及在MCU200T上仿真測試

    數(shù)的提出很大程度的解決了BP算法在優(yōu)化深層神經(jīng)網(wǎng)絡(luò)時的梯度耗散問題。當(dāng)x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當(dāng)x&lt;0 時,該層的輸出為0。 CNN
    發(fā)表于 10-29 07:49

    國密系列算法簡介及SM4算法原理介紹

    一、 國密系列算法簡介 國家商用密碼算法(簡稱國密/商密算法),是由我國國家密碼管理局制定并公布的密碼算法標(biāo)準(zhǔn)。其分類1所示: 圖1 國家商用密碼
    發(fā)表于 10-24 08:25

    梯度科技亮相第27屆中國軟博會

    10月15日,第27屆中國國際軟件博覽會在鄭州國際會展中心盛大開幕。梯度科技作為廣西科技展團的重要成員,攜旗下云數(shù)智能底座產(chǎn)品精彩亮相,全面展示公司在政企與軍工等領(lǐng)域數(shù)字化轉(zhuǎn)型的創(chuàng)新成果與標(biāo)桿案例。
    的頭像 發(fā)表于 10-17 17:43 ?1351次閱讀

    信號發(fā)生器如何與波束賦形算法配合優(yōu)化?

    信號發(fā)生器與波束賦形算法的配合優(yōu)化是無線通信系統(tǒng)(如5G毫米波、衛(wèi)星通信、雷達(dá)系統(tǒng))中提升信號質(zhì)量、覆蓋范圍和抗干擾能力的關(guān)鍵環(huán)節(jié)。其核心在于通過信號發(fā)生器生成高精度、動態(tài)可調(diào)的測試信號,模擬真實
    發(fā)表于 08-08 14:41

    梯度結(jié)構(gòu)聚氨酯研磨墊的制備及其對晶圓 TTV 均勻性的提升

    摘要 本文聚焦半導(dǎo)體晶圓研磨工藝,介紹梯度結(jié)構(gòu)聚氨酯研磨墊的制備方法,深入探究其對晶圓總厚度變化(TTV)均勻性的提升作用,為提高晶圓研磨質(zhì)量提供新的技術(shù)思路與理論依據(jù)。 引言 在半導(dǎo)體制造過程中
    的頭像 發(fā)表于 08-04 10:24 ?790次閱讀
    <b class='flag-5'>梯度</b>結(jié)構(gòu)聚氨酯研磨墊的制備及其對晶圓 TTV 均勻性的<b class='flag-5'>提升</b>

    梯度科技亮相2025可信云大會

    近日,由中國通信標(biāo)準(zhǔn)化協(xié)會主辦,中國信息通信研究院(以下簡稱“中國信通院”)承辦的2025可信云大會在北京召開。梯度算力調(diào)度平臺入選《AI Cloud MSP大模型工程化交付服務(wù)商能力圖譜》,同時其
    的頭像 發(fā)表于 07-29 17:01 ?1332次閱讀

    梯度科技亮相廣西科技成果展示活動

    此前,6月23日-24日,廣西科技成果展示活動在南寧成功舉辦。本次活動重點展示了廣西科技“尖鋒”行動成效、中國科學(xué)院重大科技成果、自治區(qū)重大與重點科普成果等。梯度科技作為本土科技創(chuàng)新企業(yè)代表之一,攜自主研發(fā)的人工智能平臺及行業(yè)解決方案重磅亮相,成為本次前沿科技成果展示活動中的亮點。
    的頭像 發(fā)表于 06-27 17:48 ?1313次閱讀

    基于進(jìn)給量梯度調(diào)節(jié)的碳化硅襯底切割厚度均勻性提升技術(shù)

    碳化硅襯底切割過程中,厚度不均勻問題嚴(yán)重影響其后續(xù)應(yīng)用性能。傳統(tǒng)固定進(jìn)給量切割方式難以適應(yīng)材料特性與切割工況變化,基于進(jìn)給量梯度調(diào)節(jié)的方法為提升切割厚度均勻性提供了新思路,對推動碳化硅襯底加工
    的頭像 發(fā)表于 06-13 10:07 ?637次閱讀
    基于進(jìn)給量<b class='flag-5'>梯度</b>調(diào)節(jié)的碳化硅襯底切割厚度均勻性<b class='flag-5'>提升</b>技術(shù)

    交流充電樁負(fù)載能效提升技術(shù)

    沖損耗,降低無效能耗5%~10%。 谷值充電與分時電價協(xié)同 通過內(nèi)置能源管理算法,在電網(wǎng)負(fù)荷低谷期(如夜間)自動提高充電功率,利用低價電降低用戶成本,同時平衡電網(wǎng)負(fù)載,提升能源利用率。 多模塊并聯(lián)
    發(fā)表于 05-21 14:38

    梯度科技參編兩項重磅標(biāo)準(zhǔn)正式發(fā)布

    近日,由梯度科技深度參與編制的團體標(biāo)準(zhǔn)《國家工業(yè)互聯(lián)網(wǎng)大數(shù)據(jù)中心體系 應(yīng)用系統(tǒng)數(shù)據(jù)資源接入規(guī)范》(下稱《規(guī)范》)和《國家工業(yè)互聯(lián)網(wǎng)大數(shù)據(jù)中心體系 產(chǎn)業(yè)鏈編碼規(guī)則》(下稱《規(guī)則》)正式發(fā)布。兩項標(biāo)準(zhǔn)分
    的頭像 發(fā)表于 05-08 15:56 ?717次閱讀

    鈣鈦礦/硅疊層電池效率達(dá)30.74%,梯度折射率IZrO/IZO多層透明電極的應(yīng)用突破

    鈣鈦礦/硅疊層太陽能電池因其理論效率超40%而成為光伏領(lǐng)域的研究熱點。然而,透明電極的光學(xué)損失(如反射與寄生吸收)嚴(yán)重限制了短路電流密度JSC的提升。傳統(tǒng)單層透明導(dǎo)電氧化物(TCO)如IZO(鋅摻雜
    的頭像 發(fā)表于 05-07 09:03 ?3159次閱讀
    鈣鈦礦/硅疊層電池效率達(dá)30.74%,<b class='flag-5'>梯度</b>折射率IZrO/IZO多層透明電極的應(yīng)用突破

    梯度科技助力客戶破解算力調(diào)度難題

    在數(shù)字經(jīng)濟與人工智能深度融合的新階段,算力已成為支撐人工智能發(fā)展的核心生產(chǎn)力。梯度科技基于云原生技術(shù)架構(gòu)研發(fā)的算力調(diào)度平臺,以“算力彈性調(diào)度、異構(gòu)資源兼容、業(yè)務(wù)智能運維”為核心能力,為客戶構(gòu)建全場景算力中樞,實現(xiàn)資源利用率、業(yè)務(wù)敏捷性、成本效益的全面提升。
    的頭像 發(fā)表于 04-27 16:32 ?1330次閱讀