文章來自微信公眾號:【機器學習煉丹術】
文章目錄:
0 前言
先縷一縷幾個關係:
- GBDT是gradient-boost decision tree
- GBDT的核心就是gradient boost,我們搞清楚什麼是gradient boost就可以了
- GBDT是boost中的一種方法,boost還有XGBoost,adaboost。
- GBDT的基模型一般是CART
1 基本概念
【Boost】 就是讓多個弱分類器,通過不同的整合方式,來讓多個弱分類器變成一個強分類器。
【gradient-boost】 梯度提升。簡單的說,先訓練一個弱分類器,然後弱分類器和目標值之間的殘差,作為下一個弱分類器訓練的目標值。這裡有一個非常簡單的例子
- 第一個模型預測年齡,雖然真實值是30歲,第一個模型只給出了20歲的估計值;
- 第二棵樹要預測的就是這個10歲的殘差,但是第二棵樹只給出了6歲的估計值;
- 第三棵樹預測的是第二棵樹的4歲的殘差,但是………………(禁止套娃)
2 梯度 or 殘差 ?
對於GBDT,網上的很多文章都沒有講清楚,學習梯度還是學習殘差?從上面的那個例子來看,是學習殘差的。
其實,從來GBDT都是學習梯度的,學習殘差只是學習梯度的一個特例!
如果我們是在做一個迴歸任務(就像是上面例子中預測年齡),採用平方損失:\(loss = \frac{1}{2}\sum^n_i{(y_i-\hat{y_i})^2}\)
其中\(y_i\)是真實數值,\(\hat{y_i}\)是模型預測的值。
然後想求取這個關於\(\hat{y_i}\)的梯度,那就是:
\(\frac{\partial loss}{\partial \hat{y^i}}=(-1)(y_i-\hat{y_i})\)
所以殘差在平方損失的情況下,就是等於負梯度,所以兩者一回事。
3 殘差過於敏感
對於資料不乾淨,沒有清晰掉異常值的資料樣本。使用平方損失對異常值過於敏感了:
敏感就是因為,異常值的損失過大了,導致下一個弱分類器就會強行擬合這個5.445的樣本,擬合異常值就意味著弱化了泛化能力,從而整體精度就可能會下降。
所以,這裡在迴歸問題中,也可以考慮使用下面的兩個損失函式:
-
Absolute loss:
\(loss=|y-\hat{y}|\) -
Huber loss:
這個是設定一個閾值,當\(|y-\hat{y}|\)小於這個閾值的時候,採用平方損失,當\(|y-\hat{y}|\)大於這個閾值的時候,採用類似於絕對損失的線性損失:
這裡看一下huber loss的函式影像:
就是一個平方損失,一個線性損失。
然後看一下平方損失,絕對損失,huber損失對於異常值的容忍程度:
【小小的總結】
GBDT是基於boosting的思想,序列地構造多棵決策樹來進行資料的預測,它是在損失函式所在的函式空間中做梯度下降,即把待求的決策樹模型當作引數,每輪迭代都去擬合損失函式在當前模型下的負梯度,從而使得引數朝著最小化損失函式的方向更新。
【現在還用嗎?】
學肯定是要學的,因為GBDT是非常經典的整合模型,知道了可以擴充知識面。但是其實在2010年橫霸大資料競賽的,現在10年過去了,在競賽中已經是老古董了。
【GBDT vs Adaboost】
Adaboost是boost整合的另一個非常經典的演算法。Adaboost只能採用指數損失的二分類任務,而GBDT可以使用各種可微分的損失函式來處理多分類、迴歸等任務。
4 兩個基模型的問題
【問題:為什麼GBDT模型都會使用CART(分類和迴歸樹)來作為基模型呢?】
這與決策樹演算法自身的優點有很大的關係。決策樹可以認為是if-then規則的集合,易於理解,可解釋性強,預測速度快 。同時,決策樹演算法相比於其他的演算法需要更少的特徵工程,比如可以不用做特徵標準化,可以很好的處理欄位缺失的資料,也可以不用關心特徵間是否相互依賴 等。決策樹能夠自動組合多個特徵,它可以毫無壓力地處理特徵間的互動關係並且是非引數化 的,因此你不必擔心異常值或者資料是否線性可分(舉個例子,決策樹能輕鬆處理好類別A在某個特徵維度x的末端,類別B在中間,然後類別A又出現在特徵維度x前端的情況)不過,單獨使用決策樹演算法時,有容易過擬合缺點。所幸的是,通過各種方法(比如剪枝、最大樹深度、最小葉子樣本數量、正則項等),抑制決策樹的複雜性,降低單顆決策樹的擬合能力,再通過梯度提升的方法整合多個決策樹,最終能夠很好的解決過擬合的問題。由此可見,梯度提升方法和決策樹學習演算法可以互相取長補短,是一對完美的搭檔。
【還有什麼抑制單棵決策樹的複雜度的方法?換言之,決策樹的避免過擬合的方法?】
- 限制樹的最大深度
- 限制葉子節點的最少樣本數量
- 限制節點分裂時的最少樣本數量
- 吸收bagging的思想對訓練樣本取樣(subsample)在學習單顆決策樹時只使用一部分訓練樣本(樣本取樣)
- 借鑑隨機森林的思路在學習單顆決策樹時只取樣一部分特徵(特徵取樣,同樣是bagging的思想)
- 在目標函式中新增正則項懲罰複雜的樹結構等。