梯度提公升樹GBDT

2022-08-31 18:00:16 字數 1567 閱讀 5483

gbdt是boosting家庭中,除adaboost外另乙個重要的演算法。演算法思想同樣是讓本輪迭代找到的決策樹的損失比上輪更小。

用損失函式負梯度來擬合本輪損失近似值,進而擬合乙個cart回歸樹。第t輪的第i個樣本的損失函式的負梯度表示為:

\[r_=-[\frac ]_(x)}

\]利用\((x_i,r_)\quad i=1,2,...,m\)我們可以擬合一棵cart回歸樹,得到了第t棵回歸樹,對應的葉節點區域\(r_,j=1,2,...,j\)其中j為葉子節點的個數。

針對每乙個葉子節點裡的樣本,我們求出使用損失函式最小,也就是擬合葉節點最好的輸出值\(c_\)如下

\[c_=\underbrace_c\sum_}l(y_i,f_(x_i)+c)

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

\[h_t(x)=\sum_^jc_i(x\in r_)

\]從而本輪最終得到的強學習器表達如下:

\[f_t(x)=f_(x)+\sum_^jc_(x\in r_)

\]通過損失函式負梯度擬合,來減小誤差。

\[l(y,f(x))=\exp(-yf(x))

\]\[l(y,f(x))=-\sum_^ky_k\log p_k(x)

\]\[l(y,f(x))=(y-f(x))^2

\]\[l(y,f(x))=|y-f(x)|

\]見劉建平

為防止過擬合,主要有三種方式

1)學習步長

2)子取樣比例,這裡是不放回抽樣

3)cart樹進行剪枝

gbdt優點:

可以靈活處理各型別資料,包括連續值和離散值

調參較少,也可達到較好的準確率,相對svm

對異常點的魯棒性強

gbdt缺點:

學習器之間存在信賴關係,不能並行

from sklearn.ensemble import gradientboostingclassifier

from sklearn.ensemble import gradientboostingregressor

n_estimators:最大迭代次

learning_rate:學習器權重縮減係數

subsample:子取樣

init:初始化學習器

loss:損失函式

gbm = gradientboostingclassifier(random_state=10)

gbm.fit(x,y)

然後使用gridsearchcv對各引數進行除錯。

param_test = 

gs = gridsearchcv(estimator=gradientboostingclassifier(learning_rate=0.1, min_samples_split=300, min_samples_leaf=20, max_depth=8,max_features='sqrt', subsample=0.8, random_state=10), param_grid=param_test,scoring='roc_auc', iid=false, cv=5)

梯度提公升樹GBDT

上一節我們講了adaboost,而提公升樹也是提公升方法的一種,它的基分類器為分類樹或者回歸樹。ps 首先我們講一下殘差的概念 殘差是指實際值和估計值之間的差,就是相減。一般提公升樹的模型的損失函式是平方損失和對數損失,所以優化很簡單。但是對一般損失函式而言就有困難,所以又有了梯度提公升演算法,然後...

gbdt梯度提公升樹

這採用boosting的思想,把表現一般的學習器通過一定的方法結合成效果相對比較好的學習器 gbdt是提公升樹的一種,是多棵樹的加權結果。採用的是分類回歸樹 cart 樹的劃分採用基尼係數。採用前向分布演算法 1 gbdt為什麼是用負梯度代替殘差?首先這是邏輯上顛倒的錯誤。實質沒有明白gbdt是怎麼...

梯度提公升樹GBDT

gbdt全稱gradient boosting decision tree,即用gradient boosting策略訓練出來的決策樹模型。模型的結果是一組cart樹 回歸分類樹 的組合 t 1,t k 其中 t j 學習的是之前 j 1 棵樹 結果的殘差。這種思想就像準備考試前的複習,先做一遍習題...