国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

梯度提升算法

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

掃碼添加小助手

加入工程師交流群

簡化復雜的算法

動機

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

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

Ensemble, Bagging, Boosting的簡單描述

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

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

Bagging是一個簡單的ensemble的技術,我們構建許多獨立的預測器/模型/學習器,通過模型平均的方式來組合使用。(如權值的平均,投票或者歸一化平均)

我們為每個模型使用隨機抽樣,所以每個模型都不太一樣。每個模型的輸入使用有放回的抽樣,所以模型的訓練樣本各不相同。因為這個技術使用了許多個不相關的學習器來進行最終的預測,它通過減少方差來減小誤差。bagging的一個例子是隨機森林模型。

Boosting在對模型進行ensemble的時候,不是獨立的,而是串行的。

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

Fig 1.Ensembling

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

梯度提升算法

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

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

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

我們希望我們的預測讓我們的損失函數最小。通過使用梯度提升算法,基于一個學習率來更新我們的預測,我們會發現一個讓MSE最小的值。

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

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

梯度提升背后的直覺

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

線性回歸模型的一個基本的假設是殘差是0,也就是說,參數應該在0的周圍分散。

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

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

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

總結一下:

我們首先使用一個簡單的模型對數據進行建模,分析數據的誤差。

這些誤差表示數據點使用簡單的模型很難進行擬合。

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

最后,我們將所有的預測器組合起來,對于每個預測器給定一個權重。

擬合梯度提升模型的步驟

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

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

上面的數據是通過下面的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.計算誤差,實際的目標值,最小化預測目標值[e1= y - y_predicted1 ]

3.把誤差作為目標值,擬合新的模型,使用同樣的輸入數據[叫做e1_predicted]

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

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

# 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

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

梯度提升樹的可視化工作

藍色的點(左邊)是輸入(x),紅色的線(左邊)是輸出(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)

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

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

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

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

我們發現,即使是50個迭代之后,殘差vs. x的圖和我們看到的20個迭代的圖也沒太大區別。但是模型正在變的越來越復雜,預測結果在訓練數據上出現了過擬合。所以,最好是在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')

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

更多有用的資源

我的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

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

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

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4838

    瀏覽量

    107791
  • 算法
    +關注

    關注

    23

    文章

    4784

    瀏覽量

    98064
  • 機器學習
    +關注

    關注

    66

    文章

    8553

    瀏覽量

    136954

原文標題:【算法理解】從頭開始理解梯度提升算法

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    景:神經網絡中的權重矩陣計算、降維算法(如PCA)等。 概率論與數理統計核心內容:貝葉斯定理、最大似然估計、假設檢驗等。應用場景:模型不確定性分析、A/B測試效果評估等。 微積分核心內容:導數、梯度
    發表于 02-27 10:53

    小華半導體數字電源算法配置工具DPACT介紹

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

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

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

    CNN卷積神經網絡設計原理及在MCU200T上仿真測試

    數的提出很大程度的解決了BP算法在優化深層神經網絡時的梯度耗散問題。當x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當x&lt;0 時,該層的輸出為0。 CNN
    發表于 10-29 07:49

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

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

    信號發生器如何與波束賦形算法配合優化?

    信號發生器與波束賦形算法的配合優化是無線通信系統(如5G毫米波、衛星通信、雷達系統)中提升信號質量、覆蓋范圍和抗干擾能力的關鍵環節。其核心在于通過信號發生器生成高精度、動態可調的測試信號,模擬真實
    發表于 08-08 14:41

    梯度結構聚氨酯研磨墊的制備及其對晶圓 TTV 均勻性的提升

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

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

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

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

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

    基于進給量梯度調節的碳化硅襯底切割厚度均勻性提升技術

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

    交流充電樁負載能效提升技術

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

    梯度科技參編兩項重磅標準正式發布

    近日,由梯度科技深度參與編制的團體標準《國家工業互聯網大數據中心體系 應用系統數據資源接入規范》(下稱《規范》)和《國家工業互聯網大數據中心體系 產業鏈編碼規則》(下稱《規則》)正式發布。兩項標準分
    的頭像 發表于 05-08 15:56 ?707次閱讀

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

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

    梯度科技助力客戶破解算力調度難題

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

    智慧路燈智能控制算法優化的探討

    叁仟智慧路燈智能控制算法的優化,在提升其性能與效率方面,占據著極為關鍵的地位。以下將深入探討具體的優化方法,并結合實際應用案例展開詳細分析。 1. 模糊控制算法 模糊控制算法通過模擬人
    的頭像 發表于 03-07 11:39 ?871次閱讀
    智慧路燈智能控制<b class='flag-5'>算法</b>優化的探討