1. 程式人生 > >梯度提升樹(GBDT)原理小結

梯度提升樹(GBDT)原理小結

 在整合學習之Adaboost演算法原理小結中,我們對Boosting家族的Adaboost演算法做了總結,本文就對Boosting家族中另一個重要的演算法梯度提升樹(Gradient Boosting Decison Tree, 以下簡稱GBDT)做一個總結。GBDT有很多簡稱,有GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ), GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Regression Tree),其實都是指的同一種演算法,本文統一簡稱GBDT。GBDT在BAT大廠中也有廣泛的應用,假如要選擇3個最重要的機器學習演算法的話,個人認為GBDT應該佔一席之地。

1. GBDT概述

    GBDT也是整合學習Boosting家族的成員,但是卻和傳統的Adaboost有很大的不同。回顧下Adaboost,我們是利用前一輪迭代弱學習器的誤差率來更新訓練集的權重,這樣一輪輪的迭代下去。GBDT也是迭代,使用了前向分佈演算法,但是弱學習器限定了只能使用CART迴歸樹模型,同時迭代思路和Adaboost也有所不同。

    在GBDT的迭代中,假設我們前一輪迭代得到的強學習器是ft1(x)ft−1(x), 損失函式是L(y,ft1(x))L(y,ft−1(x)), 我們本輪迭代的目標是找到一個CART迴歸樹模型的弱學習器

ht(x)">ht(x)ht(x),讓本輪的損失函式L(y,ft(x)=L(y,ft1(x)+ht(x))L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是說,本輪迭代找到決策樹,要讓樣本的損失儘量變得更小。

    GBDT的思想可以用一個通俗的例子解釋,假如有個人30歲,我們首先用20歲去擬合,發現損失有10歲,這時我們用6歲去擬合剩下的損失,發現差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有一歲了。如果我們的迭代輪數還沒有完,可以繼續迭代下面,每一輪迭代,擬合的歲數誤差都會減小。

    從上面的例子看這個思想還是蠻簡單的,但是有個問題是這個損失的擬合不好度量,損失函式各種各樣,怎麼找到一種通用的擬合方法呢?

2. GBDT的負梯度擬合

    在上一節中,我們介紹了GBDT的基本思路,但是沒有解決損失函式擬合方法的問題。針對這個問題,大牛Freidman提出了用損失函式的負梯度來擬合本輪損失的近似值,進而擬合一個CART迴歸樹。第t輪的第i個樣本的損失函式的負梯度表示為

rti=[L(yi,f(xi)))f(xi)]f(x)=ft1(x)rti=−[∂L(yi,f(xi)))∂f(xi)]f(x)=ft−1(x)

 

    利用(xi,rti)(i=1,2,..m)(xi,rti)(i=1,2,..m),我們可以擬合一顆CART迴歸樹,得到了第t顆迴歸樹,其對應的葉節點區域Rtj,j=1,2,...,JRtj,j=1,2,...,J。其中J為葉子節點的個數。

    針對每一個葉子節點裡的樣本,我們求出使損失函式最小,也就是擬合葉子節點最好的的輸出值ctjctj如下:

ctj=argmincxiRtjL(yi,ft1(xi)+c)ctj=argmin⏟c∑xi∈RtjL(yi,ft−1(xi)+c)

 

    這樣我們就得到了本輪的決策樹擬合函式如下:

ht(x)=j=1JctjI(xRtj)ht(x)=∑j=1JctjI(x∈Rtj)

 

    從而本輪最終得到的強學習器的表示式如下:

ft(x)=ft1(x)+j=1JctjI(xRtj)ft(x)=ft−1(x)+∑j=1JctjI(x∈Rtj)

 

    通過損失函式的負梯度來擬合,我們找到了一種通用的擬合損失誤差的辦法,這樣無輪是分類問題還是迴歸問題,我們通過其損失函式的負梯度的擬合,就可以用GBDT來解決我們的分類迴歸問題。區別僅僅在於損失函式不同導致的負梯度不同而已。

 3. GBDT迴歸演算法

    好了,有了上面的思路,下面我們總結下GBDT的迴歸演算法。為什麼沒有加上分類演算法一起?那是因為分類演算法的輸出是不連續的類別值,需要一些處理才能使用負梯度,我們在下一節講。

    輸入是訓練集樣本T={(x,y1),(x2,y2),...(xm,ym)}T={(x,y1),(x2,y2),...(xm,ym)}, 最大迭代次數T, 損失函式L。

    輸出是強學習器f(x)

    1) 初始化弱學習器

f0(x)=argminci=1mL(yi,c)f0(x)=argmin⏟c∑i=1mL(yi,c)

 

    2) 對迭代輪數t=1,2,...T有:

      a)對樣本i=1,2,...m,計算負梯度

rti=[L(yi,f(xi)))f(xi)]f(x)=ft1(x)rti=−[∂L(yi,f(xi)))∂f(xi)]f(x)=ft−1(x)

 

      b)利用(xi,rti)(i=1,2,..m)(xi,rti)(i=1,2,..m), 擬合一顆CART迴歸樹,得到第t顆迴歸樹,其對應的葉子節點區域為Rtj,j=1,2,...,JRtj,j=1,2,...,J。其中J為迴歸樹t的葉子節點的個數。

      c) 對葉子區域j =1,2,..J,計算最佳擬合值

ctj=argmincxiRtjL(yi,ft1(xi)+c)ctj=argmin⏟c∑xi∈RtjL(yi,ft−1(xi)+c)

 

      d) 更新強學習器

ft(x)=ft1(x)+j=1JctjI(xRtj)ft(x)=ft−1(x)+∑j=1JctjI(x∈Rtj)

 

    3) 得到強學習器f(x)的表示式

f(x)=fT(x)=f0(x)+t=1Tj=1JctjI(xRtj)f(x)=fT(x)=f0(x)+∑t=1T∑j=1JctjI(x∈Rtj)

 

4. GBDT分類演算法

    這裡我們再看看GBDT分類演算法,GBDT的分類演算法從思想上和GBDT的迴歸演算法沒有區別,但是由於樣本輸出不是連續的值,而是離散的類別,導致我們無法直接從輸出類別去擬合類別輸出的誤差。

    為了解決這個問題,主要有兩個方法,一個是用指數損失函式,此時GBDT退化為Adaboost演算法。另一種方法是用類似於邏輯迴歸的對數似然損失函式的方法。也就是說,我們用的是類別的預測概率值和真實概率值的差來擬合損失。本文僅討論用對數似然損失函式的GBDT分類。而對於對數似然損失函式,我們又有二元分類和多元分類的區別。

4.1 二元GBDT分類演算法

    對於二元GBDT,如果用類似於邏輯迴歸的對數似然損失函式,則損失函式為:

L(y,f(x))=log(1+exp(yf(x)))L(y,f(x))=log(1+exp(−yf(x)))

 

    其中y{1,+1}y∈{−1,+1}。則此時的負梯度誤差為

rti=[L(y,f(xi)))f(xi)]f(x)=ft1(x)=yi/(1+exp(yif(xi)))rti=−[∂L(y,f(xi)))∂f(xi)]f(x)=ft−1(x)=yi/(1+exp(yif(xi)))

 

    對於生成的決策樹,我們各個葉子節點的最佳殘差擬合值為

相關推薦

梯度提升(GBDT)原理小結

 在整合學習之Adaboost演算法原理小結中,我們對Boosting家族的Adaboost演算法做了總結,本文就對Boosting家族中另一個重要的演算法梯度提升樹(Gradient Boosting Decison Tree, 以下簡稱GBDT)做一個總結。GBDT有很多簡稱,有GBT(Gradient

GBDT梯度提升演算法原理小結(三)

首先我們回顧一下Gradient Boosting 的本質,就是訓練出,使損失函式最小,即 其求解步驟如下: 所以,我們首先得定義出損失函式,才能談求解的事情。接下來我們針對不同場景,介紹相應的損失函式。 迴歸 對於迴歸問題,定義好損失函式後,Gradient B

梯度提升(GBDT)原理

在整合學習之Adaboost演算法原理小結中,我們對Boosting家族的Adaboost演算法做了總結,本文就對Boosting家族中另一個重要的演算法梯度提升樹(Gradient Boosting Decison Tree, 以下簡稱GBDT)做一個總結。G

梯度提升GBDT原理

1.模型 提升方法實際採用加法模型(即基函式的線性組合)與前向分佈演算法。以決策樹為基函式的提升方法稱為提升樹(boosting tree)。對分類問題決策樹是二叉分類樹,對迴歸問題決策樹是二叉決策樹

sklearn.linear_model——梯度提升(GBDT)調參小結

1. scikit-learn GBDT類庫概述     在sacikit-learn中,GradientBoostingClassifier為GBDT的分類類, 而GradientBoostingRegressor為GBDT的迴歸類。兩者的引數型別完全相同,當

機器學習(七)—Adaboost 和 梯度提升GBDT

獲得 決策樹 info gin 否則 它的 均方差 但是 ont 1、Adaboost算法原理,優缺點:   理論上任何學習器都可以用於Adaboost.但一般來說,使用最廣泛的Adaboost弱學習器是決策樹和神經網絡。對於決策樹,Adaboost分類用了CART分類樹,

機器學習boosting演算法—梯度提升(GBDT)

1 迴歸樹演算法分析 Adaboost演算法是提升樹的特殊情況,主要用於分類問題,對於迴歸問題怎麼處理呢?? 已知一個訓練資料集T={(x1,y1),(x2,y2),...,(xN,yN)},假設輸入空間為χ,如果將輸入空間劃分為J個互不相交的區域R1,R2

筆記︱決策族——梯度提升(GBDT

每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~ ——————————————————————————— 本筆記來源於CDA DSC,L2-R語言課程所學進行的總結。 一、介紹:梯度提升樹(Gradie

機器學習 | 詳解GBDT梯度提升原理,看完再也不怕面試了

本文始發於個人公眾號:TechFlow,原創不易,求個關注 今天是機器學習專題的第30篇文章,我們今天來聊一個機器學習時代可以說是最厲害的模型——GBDT。 雖然文無第一武無第二,在機器學習領域並沒有什麼最厲害的模型這一說。但在深度學習興起和流行之前,GBDT的確是公認效果最出色的幾個模型之一。雖然現在

梯度提升GBDT)理解

GBDT是整合學習方法Boosting中的一種,所以其中每個弱分類器都有先後順序,同時每個弱分類器都有其的權重。 GBDT的思想 在GBDT的迭代過程中,假如前一輪迭代得到的強分類器是 Fm−1(x) F

GBDT梯度提升(一)

提升樹(例項) 已知訓練資料如上表所示,x的取值範圍為區間[0.5,10.5],y的取值範圍為區間[5.0,10.0],學習這個迴歸問題的提升樹模型,考慮只用樹樁作為基函式。 解   既然是一個提升樹,

GBDT(梯度提升)scikit-klearn中的引數說明及簡匯

1、GBDT(梯度提升樹)概述:   GBDT是整合學習Boosting家族的成員,區別於Adaboosting。adaboosting是利用前一次迭代弱學習器的誤差率來更新訓練集的權重,在對更新權重後的訓練集繼續迭代訓練。GBDT也是迭代演算法,但是不同於Adaboosting,GBDT是進行一

機器學習筆記10-梯度提升GBDT

機器學習筆記10-梯度提升樹(GBDT) 在上一節中講到了整合學習的Boosting方法,並詳細解釋了其中的代表性演算法AdaBoost演算法。除了AdaBoost演算法外,Boosting中還有另一個非常常用的演算法:提升樹和梯度提升樹(GBDT)。 提升樹 提升樹是以分

Python機器學習之梯度提升

pri () 糾正 ensemble depth del gbrt 1.5 cer #和隨機森林一樣,基於決策樹,采用連續的方式構建樹,深度很小max_depth<5.重要的參數n_estimate和learning_rate,這兩個參數的y作用在於對模型過擬合化得調

梯度提升中的負梯度和殘差關系

提升 方向 變化 最新 com nbsp 擬合 需要 產生 我們希望找到一個 使得 最小,那麽 就得沿著使損失函數L減小的方向變化,即: 同時,最新的學習器是由當前學習器 與本次要產生的回歸樹 相加得到的: 因此,為了讓損失函數減小,需要令: 即用損失函數對f

Spark-MLlib的快速使用之五(梯度提升GBT 迴歸)

(1)描述  梯度提升樹(GBT)是決策樹的集合。 GBT迭代地訓練決策樹以便使損失函式最小化。 spark.ml實現支援GBT用於二進位制分類和迴歸,可以使用連續和分類特徵。 (2)測試資料 1 153:5 154:63 155:197 181:20 182:254 183:230 1

Spark-MLlib的快速使用之四(梯度提升GBT 分類)

(1)描述  梯度提升樹(GBT)是決策樹的集合。 GBT迭代地訓練決策樹以便使損失函式最小化。 spark.ml實現支援GBT用於二進位制分類和迴歸,可以使用連續和分類特徵。 (2)測試資料 1 153:5 154:63 155:197 181:20 182:254 183:230 1

損失函式與梯度提升

上一篇文章簡單介紹了幾種整合方法,以隨機森林為代表的平均方法,以adaboost、提升樹為代表的提升方法。本文繼續提升樹的討論,採用梯度提升演算法,分析更一般的損失函式下的分類、迴歸問題。首先介紹幾種在機器學習演算法中常見的損失函式,繼而介紹GBDT演算法。

簡單易學的機器學習演算法——梯度提升決策GBDT

梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)演算法是近年來被提及比較多的一個演算法,這主要得益於其演算法的效能,以及該演算法在各類資料探勘以及機器學習比賽中的卓越表現,有很多人對GBDT演算法進行了開原始碼的開發,比較火的是陳

GBDT(Gradient boosting Decision Tree)梯度提升決策

參考資料 部落格1 GBDT演算法原理深入解析 這位大佬後面講了推導,讓我明白了這段話: Gradient Boosting是一種Boosting的方法,其與傳統的Boosting的區別是,每一次的計算是為了 **減少上一次的殘差(residual) **,而為了消除殘差,可以在殘差