對GBDT的一點理解

2021-07-11 11:20:52 字數 2197 閱讀 2205

gbdt由一系列的回歸樹組成,如下圖所示(樹的深度未必都要一樣,下圖僅為示意圖)。

gbdt原理

針對每乙個類別訓練一系列的回歸樹,再累加每個類別回歸樹的**值得到針對每個類別的最終的**值。單獨拿乙個類別來說,訓練的過程中假設需要**的值為f(

xi) ,實際的值為yi

,有loss function l(

yi,f

(xi)

) ,f(

xi) 為引數。訓練的過程就是讓loss function最小化的過程。最小化可以通過梯度下降完成,令loss function對引數f(

xi) 求梯度有 gf

(x)=

∂l(y

i,f(

xi))

∂f(x

i)那麼,只要引數f(

xi) 不斷往梯度方向變化,loss function就會減小直至收斂。即每一次迭代為 f(

xi)t

+1=f

(xi)

t−η∗

gf(x

)(1)

其中η 為學習率。

假設第一棵回歸樹t1

的**值為f(

xi)0

,對這一時刻的引數f(

xi)0

求梯度,得到gf

(x)0

,因為梯度是根據訓練樣本中的實際值yi

得到的,**未知樣本時,並沒有實際的yi

,因此需要估計這一時刻的梯度gf

(x)0

,這就需要通過第二棵回歸樹來擬合。故利用根據訓練樣本求得的梯度值gf

(x)0

作為目標值,利用訓練樣本再訓練一棵回歸樹t2

,並用t2

再求一遍梯度g′

,之後更新引數得到f(

xi)1

。以此類推,迭代直到得到給定數目的回歸樹。

此時這一系列的回歸樹t1

,t2,

...,

tn的**值累加後得到f(

xi)n

,可以令loss function足夠小,也就得到了乙個訓練好的gbdt模型。

選取不同的loss function可以達到不同的目的,比如對於信用模型需要分類的情形,loss function為deviance,對應的梯度為 i(

yi=g

k)−p

k(xi

) pk

表示樣本xi

屬於第k 個類別的概率,通過softmax方法求得。因為有

k個類別,所以得到

k 個系列的回歸樹,每個系列最終的**值分別為f1

(x),

f2(x

),..

.,fk

(x),具體計算公式如下所示 pk

(x)=

efk(

x)∑k

l=1e

fl(x

) i(

·)為指示函式。也就是當**第k個類別概率時,如果真實類別恰好為該類別,梯度為1−

pk(x

i),否則為−p

k(xi

) 。所以後一棵樹擬合的也就是之前**值的殘差。

gbdt的正則化

訓練的過程可以指定需要

m 棵回歸樹,新的回歸樹不斷擬合之前的殘差,在訓練集上的誤差可能逐漸變為0,導致過擬合。gbdt也有相應避免過擬合的方法。如

1. early stopping策略,保留乙個驗證集,每增添一棵樹通過驗證集測試誤差是否下降,當增添一定數目的樹時驗證誤差不再下降的時候,就可以終止迭代了,得到m∗

棵回歸樹。

2. shrinkage,也就是減小每一棵回歸樹對**值得貢獻。這就對應上了公式(1

) 中的學習率

η ,

0<

η<

1 ,比較小的學習率會導致需要更多的回歸樹,也就是更大的m∗

,根據經驗,最好的策略是選取較小的

η ,(η

<

0.1)

,然後通過early stopping選取m∗

。 3. 二次抽樣,即在擬合一棵新的回歸樹時,不用完全的樣本集,而僅是無放回的抽樣其中的部分,通常為12

,對於大的資料集,抽樣的比例可以小於12

。subsampling的方式可以避免過擬合,同樣地,更小的訓練集也可以更快的完成訓練。

對 threadfence的一點理解

一直沒搞清楚,cuda 2.2版增加的 threadfence到底有何作用,直到今天看到sdk 3.0手冊 中的下面例子才恍然大悟.中文為我的理解,嘿嘿 乙個求和的例子 device unsigned int count 0 統計有幾個block結束的變數 shared bool islastblo...

對block的一點理解

對block的理解 block宣告的寫法 property strong,nonatomic void block void property copy,nonatomic void block void block的本質 就是oc的物件,內部也有isa指標,block是封裝了函式呼叫以及函式呼叫環...

對索引的一點理解

以前在網上看到一些觀點,in 或者not in 都不會用到索引,昨天在優化sql的時候,發現這些觀點並不對 select from wf doc gw fawen f where f.cfbt ee and f.ndocid in select distinct gi.src ndocid from...