歡迎關注」生信修煉手冊」!
gbdt全稱為gradient boosting decision tree, 是一種基於決策樹的整合學習演算法。在adaboost演算法中,弱分類器的模型可以根據需要靈活選擇,而gbdt則強制限定為決策樹演算法。
基於cart決策樹演算法,gbdt可以用於處理分類和回歸兩項任務。由此,gbdt又有了各種不同的叫法
1. gbdt, gradient boosting decision tree
2. gbrt,gradient boosting regression tree
3. mart, multiple addtive regression tree
從名稱可以看出,gbdt和adaboost演算法一樣,都是屬於boosting的整合策略,多次迭代之間是存在乙個鏈式的依賴關係。在adaboost演算法中,根據每次迭代調整下一次迭代樣本的權重值,而在gbdt中,則將每次迭代的損失函式值作為下次迭代擬合的目標值。
在求解回歸問題時,gbdt可以使用均方差作為誤差的衡量值,在求解分類問題時,則使用邏輯回歸中目標和損失函式的定義方式來量化計算過程。
以下列資料為例,具體看下演算法的求解過程
該資料表示泰塔尼克號上乘客的生存情況,第一步,計算初始值,利用了邏輯回歸中目標值的定義,計算如下
樣本共6名乘客,其中4名生還,p表示生還的概率,1-p則表示死亡的概率,帶入上述公式,即可算出初始值。
計算出初始值之後,計算樣本初始值與真實值之間的殘差,結果如下
將殘差作為擬合的目標值,構建分類樹,結果如下所示
注意,這個分類樹是為了便於展示演算法過程,構建的示例,並不是真實的分類結果。根據建好的分類樹,要計算樣本對應的新的擬合值,為了方便計算,引入了如下轉換公式
使用該公式,對於示例中的決策樹,第乙個葉子節點的計算結果如下
第二個葉子節點的計算結果如下
第三個葉子節點的計算結果如下
整顆決策樹的結果如下所示
接下來,引入學習率來定義每顆決策樹的貢獻,公式如下
學習率是自定義的,比如學習率設定為0.1, 根據上述公式計算每個乘客新的log odds, 以第一名乘客為例,結果如下
首先初始值為0.7,在第一次的決策樹中該樣本所在葉子節點的值為-0.16, 所以根據公式可以求解新的log odds值。接下來的迭代過程也是如此,每次迭代不斷使用殘差來計算新的log odds值,直到迭代終止。
在scikit-learn中,使用gbdt演算法的**如下
1. 分類
>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import gradientboostingclassifier
>>> x, y = make_hastie_10_2(random_state=0)
>>> x_train, x_test = x[:2000], x[2000:]
>>> y_train, y_test = y[:2000], y[2000:]
>>> clf = gradientboostingclassifier(n_estimators=100, learning_rate=1.0,max_depth=1, random_state=0).fit(x_train, y_train)
>>> clf.score(x_test, y_test)
0.913
2. 回歸
>>> from sklearn.metrics import mean_squared_error
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.ensemble import gradientboostingregressor
>>> x, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0)
>>> x_train, x_test = x[:200], x[200:]
>>> y_train, y_test = y[:200], y[200:]
>>> est = gradientboostingregressor(n_estimators=100, learning_rate=0.1,max_depth=1, random_state=0, loss='ls').fit(x_train, y_train)
>>> mean_squared_error(y_test, est.predict(x_test))
5.009154859960321
對於gbdt演算法而言,其優點如下
1. 準確度和靈活性很高
2. 不需要資料預處理
3. 可以處理缺失值
缺點如下
1. 計算費時
2. 解釋性不強
3. 容易過擬合
在實際運用中,相比adaboost演算法,gbdt的應用更多,無論在分類還是回歸問題中,都可以嘗試使用該模型。
·end·
—如果喜歡,快分享給你的朋友們吧—
原創不易,歡迎收藏,點讚,**!生信知識浩瀚如海,在生信學習的道路上,讓我們一起並肩作戰!
寫在最後
乙個只分享乾貨的
梯度提公升樹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 棵樹 結果的殘差。這種思想就像準備考試前的複習,先做一遍習題...