我們對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應該佔一席之地。
我們先來看看提公升樹:
提公升樹模型實際是將多個決策樹簡單的疊加起來,用數學模型可表示為
$$ f_m(x) = \sum_^m t(x;\theta_m) $$
其中,$t(x;\theta_m)$表示決策樹,$\theta_m$ 表示決策樹的引數;$m$ 為樹的個數。
針對樣本$d=\$,提公升樹模型的訓練就是,選擇決策樹的引數$\theta=\$以最小化損失函式 $\sum l(y_i,f_m(x_i))$,即
$$ \arg \min_\theta \sum_^n l(y_i,f_m(x_i)) = \arg \min_\theta \sum_^n l\left(y_i, \sum_^m t(x;\theta_m)\right) $$
這裡,損失函式用來反應「樣本標籤 $y_i$ 」與提公升樹的輸出 $f_m(x_i)$ 之間的差別,這裡可以選擇平方誤差損失函式:
$$ l(y, f(x))=\left( y-f(x) \right)^2 $$
提公升樹模型也可以表示為迭代過程
$$ f_m(x)=f_(x)+t(x;\theta_m),~ m=1,2,...,m $$
因此,提公升樹的訓練也可以按照迭代的過程來完成,在 $m$次迭代中,生成乙個新的決策樹$t(x;\theta_m)$
具體而言,首先初始化提公升樹 $f_0(x)=0$,第 $m$ 步確定第 $m$ 個決策樹$t(x;\theta_m)$,即選擇合適的決策樹引數 $\theta_m$,使損失函式最小,即
$$ \hat_m = \arg \min_ \sum_^n l(y_i, f_(x_i) + t(x_i;\theta_m)) $$
對於上式的求解,即為提公升樹的關鍵所在。如果採用平方損失函式,則有
$$ \begin l(y_i,f_(x_i)+t(x_i;\theta_m)) &=& \left[\,y_i - f_(x_i) - t(x_i;\theta_m)\right]^2 \\ &=& \left[\,r_ - t(x_i;\theta_m)\right]^2 \end $$
這裡, $r_=y_i-f_(x_i)$ 表示模型$f_(x)$擬合資料 $(x_i,y_i)$ 的殘差。
就變成了選擇合適的決策樹引數$\theta_m$,使得決策樹的輸出 $t(x_i;\theta_m)$與 殘差 $r_$ 的誤差盡可能小。因此,可以使用 $\)\}_$來作為決策樹$t(x;\theta_m)$的樣本集,按照常規的決策樹生成過程獲得引數的最優值$\hat_m$。
綜上,我們可以得到提公升樹演算法如下:
上面我們講了提公升樹,在某些時候不方便求殘差,梯度提公升樹則是用損失函式的負梯度方向值來近似擬合殘差,下面來看看具體細節:
二元gbdt分類演算法
對於二分類問題,比較常用的損失函式為
$$ l(y,f(x))=\log (1+\exp (-y \cdot f(x))) \tag $$
其中 $y∈$,此時的負梯度誤差為
$$ r_ = -\left[ \frac \right]_(x)} = \frac(x_i))} $$
對於生成決策樹,其葉子節點的輸出值為
$$ c_ = \arg \min_c \sum_} \log (1+\exp (-y_i (f_(x_i) + c))) $$
由於上式比較難優化,我們一般使用近似值代替
$$ c_ =\left. \sum_} r_ \middle / \sum_} |r_|(1-|r_|) \right. $$
多元gbdt分類演算法
對於多分類問題,假設類別為$ k$,一般採用的損失函式為
$$ l(y,f(x)) = - \sum_^k y_k log p_k(x) $$
其中,如果樣本輸出類別為 $k$ ,則 $y_k=1$ ;$p_k(x)$ 表示模型 $f(x)$判定 $x$屬於第$k$ 類的概率,其表示式為
$$ p_k(x) = \frac^k \exp(f_l(x))} $$
注意此處,對於多分類問題,回歸樹訓練時,會為每乙個類別訓練乙個決策樹。
由此,我們可以計算出第 $m$ 輪的第$i$個樣本對應類別$ l$的負梯度誤差為
$$ r_ = -\left[ \frac \right]_(x)} = y_ - p_(x_i) $$
觀察上式可以看出,其實這裡的誤差就是樣本$i$對應類別$l$ 的真實概率和$m−1$ 輪**概率的差值。
對於生成的決策樹,對應第$l$類別的決策樹的葉節點輸出為
$$ c_ = \arg \min_c \sum_} l(y_, f_(x_i) + c) $$
類似的,我們用近似值代替
$$ c_ = \frac \frac}r_}} |r_|(1-|r_|) } $$
gbdt 的正則化
$$ f_m(x) = f_(x) + t(x;\theta_m) $$
引入正則化後,其迭代過程為
$$ f_m(x) = f_(x) + \alpha t(x;\theta_m) $$
其中,$0
$$ l_(y,f(x)) = l(y,f(x)) + \sum_ \omega(t(x;\theta_m)) \\ \mathrm ~~ \omega(t(x;\theta_m)) = \gamma t_ + \frac12 \lambda \| w \|^2 $$
其中,$l(y,f(x))$ 為常規的損失函式;$\omega(t(x;\theta_m))$表示決策樹的複雜度,$t_$為樹葉節點個數,$w$ 為葉節點的固定輸出值$c_m$組成的向量;$γ,λ$為相應的係數。
摘自:
提公升樹,梯度提公升樹(GBDT)筆記
決策樹可以分為二叉分類樹或者二叉回歸樹,剛剛我們講了分類樹,現在介紹一下回歸樹。回歸問題是用來處理連續值。提公升樹採用了前向分布演算法,模型如下 公式分析 演算法目標 圖中的x,y圖表示的就是,曲線上的點就是這個回歸樹所 到的殘差的 值,我們最後要的就是 值接近真實的殘差就是去擬合這個殘差 fitt...
GBDT 梯度提公升樹演算法
歡迎關注 生信修煉手冊 gbdt全稱為gradient boosting decision tree,是一種基於決策樹的整合學習演算法。在adaboost演算法中,弱分類器的模型可以根據需要靈活選擇,而gbdt則強制限定為決策樹演算法。基於cart決策樹演算法,gbdt可以用於處理分類和回歸兩項任務...
梯度提公升樹GBDT
上一節我們講了adaboost,而提公升樹也是提公升方法的一種,它的基分類器為分類樹或者回歸樹。ps 首先我們講一下殘差的概念 殘差是指實際值和估計值之間的差,就是相減。一般提公升樹的模型的損失函式是平方損失和對數損失,所以優化很簡單。但是對一般損失函式而言就有困難,所以又有了梯度提公升演算法,然後...