1. 程式人生 > >提升方法:GBDT、XGBOOST、AdaBoost

提升方法:GBDT、XGBOOST、AdaBoost

提升 (boosting) 方法是一種常用的統計學習方法,應用廣泛且有效,在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類器效能。

GBDT

我們知道隨機森林的決策樹分別取樣建立, 相對獨立。 那麼引來了如下思考 :

  • 假定當前一定得到了  顆決策樹, 是否可以通過現有樣本和決策樹的資訊, 對第  顆決策樹的建立產生有益的影響呢 ?
  • 各個決策樹組成隨機森林後, 最後的投票過程可否在建立決策樹時即確定呢?

答案是肯定的,這也就是提升(boosting)的方法所解決的問題。

提升的概念

提升是一個機器學習技術, 可以用於迴歸和分類

問題, 它每一步產生一個弱預測模型(如決策樹), 並加權累加到總模型中,最終得帶一個強預測模型; 如果每一步的弱預測模型生成都是依據損失函式的梯度方向, 則稱之為梯度提升(Gradient boosting)

提升的方法基於這樣一個思想:對於一個複雜任務來說,將多個專家的判斷進行適當的綜合所得出的判斷,要比其中任何一個專家單獨的判斷好。實際上,就是“三個臭皮匠頂個諸葛亮”的道理。

梯度提升演算法首先給定一個目標損失函式, 它的定義域是所有可行的弱函式集合(基函式); 提升演算法通過迭代的選擇一個負梯度方向上的基函式來逐漸逼近區域性極小值。這種在函式域的梯度提升觀點對機器學習的很多領域有深刻影響。

梯度提升演算法實際上和梯度下降演算法是一樣的,只不過看問題的角度不同,比如線上性迴歸中,我們通過梯度下降來優化引數  ,使損失函式能達到(區域性)最小值;如果我們換個角度,我們優化的不是 ,而是  這個函式,再通過沿梯度方向下降的方法達到損失函式(區域性)最小值,就變成了梯度提升演算法。

提升演算法

給定輸入向量  和輸出變數  組成的若干訓練樣本  , 目標是找到近似函式  , 使得損失函式  的損失值最小。

損失函式  的定義不唯一,典型定義有以下兩種:

  • ,這個定義其實預設誤差服從高斯分佈
  • ,這個定義則認為誤差服從Laplace(雙指數)分佈

假設最優解為 

,則:

該式的意思就是使損失函式期望風險最小化的引數  為最優解 

我們知道任何函式都可以被分解為一族基函式的線性組合,比如傅立葉分解可以把任何函式分解為三角函式的線性組合,所以這裡的  也不例外,我們假設它是一族基函式  的線性組合,即: 

演算法推導

我們使用梯度提升方法尋找最優解 , 使得損失函式在訓練集上的期望最小。方法如下:

  • 首先, 令 ,求常係數  : 

    • 若損失函式採用平方定義,上式可以解得:
    • 若損失函式採用絕對值定義,則解  為  的中位數
  • 知道  之後,接下來用遞推的思路來想,如果已知  ,如何求  ?於是得到下面的公式: 
  • 我們可以用梯度下降的方法近似計算上式。若使  取得最小值,我們可以對  求偏導求出梯度,然後沿負梯度方向下降一個步長 ,由於這個步長可以通過線性搜尋求出最優值,所以該步長與負梯度的乘積可以近似為上式的最小值,於是得到如下的更新公式: 

提升演算法

  1. 初始給定模型為常數 
  2. 對於  到  
    1. 計算偽殘差 (pseudo residuals)  
    2. 使用資料  訓練擬合殘差的基函式  (比如一棵決策樹)
    3. 計算步長  
      • 一維優化問題
    4. 更新模型:

梯度提升決策樹 GBDT

在提升演算法中,如果基函式選擇的是決策樹,那麼演算法又叫梯度提升決策樹,也就是GBDT

GBDT

  • 在第  步的梯度提升是根據偽殘差資料計算決策樹 
  • 令樹  的葉節點數目為 , 即樹  將輸入空間劃分為  個不相交區域 ,並且決策樹  可以在每個區域中給出某個型別的確定性預測。使用指示記號 , 對於輸入  為: 

  • 其中, 是樣本  在區域  的預測值,

  • 使用線性搜尋計算學習率,最小化損失函樹

    • 相關推薦

      提升方法GBDTXGBOOSTAdaBoost

      提升 (boosting) 方法是一種常用的統計學習方法,應用廣泛且有效,在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類器效能。 GBDT 我們知道隨機森林的決策樹分別取樣建立, 相對獨立。 那

      StackingCatboostXgboostLightGBMAdaboostRF etc

      歷史 最終 edi 全球 ssi 使用 bm算法 oos cat python風控評分卡建模和風控常識(博客主親自錄制視頻教程) https://study.163.com/course/introduction.htm?courseId=1005214003&u

      boosting-adaboostGBDTxgboostlightGBM

      提升方法,是將多個專家的判斷進行適當的綜合所得出的判斷,要比其中任何一個專家單獨的判斷好。 Kearns和Valiant提出了“強可學習”和“弱可學習”的概念 強可學習:在概率近似正確學習的框架中,一個概念(一個類),如果存在一個多項式的學習演算法能夠學習它

      [Visual Studio C++][MFC] fstream函式的使用方法C++檔案寫入讀出函式。

      文章轉自:https://www.cnblogs.com/zhoug2020/p/8427277.html [導讀]      ofstream是從記憶體到硬碟,ifstream是從硬碟到記憶體,其實所謂的流緩衝就是記憶體空間     &

      作業系統(10)程序--死鎖概念;死鎖處理方法死鎖預防死鎖避免銀行家演算法死鎖檢測

      文章目錄 1. 死鎖概念 2. 死鎖處理方法 1. 死鎖預防 2. 死鎖避免 3. 銀行家演算法 4. 死鎖檢測 1. 死鎖概念 死鎖是指:由於競爭資源或者通

      GBDTXGBoostLightGBM演算法公式推導

      一、GBDT公式推導 1、第一個基函式: (1.1)F0(X)=12log1+y‾1−y‾F_0(X)=\frac{1}{2}log\frac{1+\overline{y}}{1-\overline{y

      決策樹的進化(ID3C4.5CARTGBDTRFDARTlambdaMARTXGBoostlightGBM)

      pipeline 在資料探勘領域中,決策樹是對資料進行建模的一種很有效的手段。當資料集被清洗好後,資料集就是樣本的集合,每一個樣本都是有一樣多的屬性,但屬性值可能不同(也有可能不存在即屬性值缺失)。每一個樣本,分為屬性(也可稱為特徵)和label兩部分,我們運用決策樹處理資

      利用隨機森林GBDTxgboostLightGBM計算準確率和auc

      利用隨機森林、GBDT、xgboost、LightGBM計算準確率和auc 用到的模組 import pandas as pd import lightgbm as lgb from sklearn.model_selection import train_test_s

      機器學習中常見的優化方法梯度下降法牛頓法擬牛頓法共軛梯度法拉格朗日乘數法

      機器學習中常見的優化方法: 梯度下降法、牛頓法擬牛頓法、共軛梯度法、拉格朗日乘數法 主要內容 梯度下降法 牛頓法擬牛頓法 共軛梯度法 拉格朗日乘數法   許多機器學習演算法,往往建立目標函式(損失函式+正則項),通過優化方法進行優化,根據訓練

      提升方法Adaboost演算法與證明

      這基本就是關於《統計學習方法》的筆記,當然自己會記的讓人容易讀懂,為了加深記憶,證明都證了兩遍,便於加深理解還是打算寫在部落格裡好了。接下來會先介紹什麼是提示方法,再介紹Adaboost演算法,接著會給個書上的例子,最後再給出一些推導(由於之前是寫過的但是沒儲存好,所以這次有的部分就貼上

      深度學習之(十一)Deep learning中的優化方法隨機梯度下降受限的BFGS共軛梯度法

        三種常見優化演算法:SGD(隨機梯度下降),LBFGS(受限的BFGS),CG(共軛梯度法)。      1.SGD(隨機梯度下降)        隨機梯度下降(Stochastic Gradient Descent, SGD)是隨機和優化相結合的產物,是一種很神奇的優化方法,屬於

      RFGBDTXGBoostlightGBM原理與區別

        RF、GBDT和XGBoost都屬於整合學習(Ensemble Learning),整合學習的目的是通過結合多個基學習器的預測結果來改善單個學習器的泛化能力和魯棒性。   根據個體學習器的生成方式,目前的整合學習方法大致分為兩大類:即個體學習器之間存在強

      windows下Python機器學習依賴庫安裝——numpyscipysklearnxgboosttheano等

      接觸機器學習一段時間了,在環境配置上遇到不少坑,windows下環境配置尤甚,但近期發現了簡單也較直接的安裝方式,目前所接觸的所有依賴包無一例外都安裝成功,現分享出來,讓新手朋友少走彎路。 一、多版本Python安裝 先不論Python2.x與3.x如何取捨,兩個大的版

      提升方法前向分步演算法與提升

      這篇內容為《統計學習方法》的學習筆記,也看過其他書和培訓班的視訊ppt等,但是感覺都是離不開《統計學習方法》這本書,還是這本書讀起來乾淨利落(雖然有很少的地方有點暈)。 接下來首先介紹加法模型和前向分步演算法,接著介紹提升樹,最後補充梯度提升方法。 1、加法模型和前向分步演算法

      機器學習提升演算法之AdaboostGBGBDTXGBoost演算法

      一、提升演算法概論 Boosting(提升)是一族可將弱學習器提升為強學習器的演算法。提升演算法基於這樣一種思想:對於一個複雜的任務,將多個專家的判斷總和得出的結果要比任何一個專家單獨的判斷好。這族演算法的工作機制類似:先從初始訓練集訓練出一個基學習器,再根據基學習器表現

      整合學習之boosting,AdaboostGBDTxgboost(二)

      AdaBoost 演算法的訓練誤差分析 AdaBoost最基本的性質是它能在學習過程中不斷減少訓練誤差,即在訓練資料集上的分類誤差率。 定理:AdaBoost的訓練誤差界: 1

      整合學習之boosting,AdaboostGBDTxgboost(一)

      在前面的部落格(https://blog.csdn.net/qq_16608563/article/details/82878127) 介紹了整合學習的bagging方法及其代表性的隨機森林。此次接著介紹整合學習的另一個方法boosting以及boosting系列的一些演算法,具體包括 Ad

      整合學習之boosting,AdaboostGBDTxgboost(三)

      AdaBoost演算法的解釋——前向分步法與提升樹(GBDT) 可以認為AdaBoost演算法是模型為加法模型,損失函式為指數函式、學習演算法為前向分步演算法時的二類分類學習方法。 前向分步演算法: 考慮加法模型

      ml課程決策樹隨機森林GBDTXGBoost相關(含程式碼實現)

      以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 基礎概念: 熵Entropy:是衡量純度的一個標準,表示式可以寫為: 資訊增益Information Gain:熵變化的一個量,表示式可以寫為: 資訊增益率Gain Ratio:資訊增益的變化率,表示式可以寫為:

      機器學習sklearn19.0——整合學習——boosting與梯度提升演算法(GBDTAdaboost演算法

      一、boosting演算法原理 二、梯度提升演算法 關於提升梯度演算法的詳細介紹,參照部落格:http://www.cnblogs.com/pinard/p/6140514.html 對該演算法的sklearn的類庫介紹和調參,參照網址:http://