1、Adaboost算法原理,優缺點:
理論上任何學習器都可以用于Adaboost.但一般來說,使用最廣泛的Adaboost弱學習器是決策樹和神經網絡。對于決策樹,Adaboost分類用了CART分類樹,而Adaboost回歸用了CART回歸樹。
Adaboost算法可以簡述為三個步驟:
(1)首先,是初始化訓練資料的權值分布D1。假設有N個訓練樣本資料,則每一個訓練樣本最開始時,都被賦予相同的權值:w1=1/N。
(2)然後,訓練弱分類器hi。具體訓練過程中是:如果某個訓練樣本點,被弱分類器hi準确地分類,那麼在構造下一個訓練集中,它對應的權值要減小;相反,如果某個訓練樣本點被錯誤分類,那麼它的權值就應該增大。權值更新過的樣本集被用于訓練下一個分類器,整個訓練過程如此疊代地進行下去。
(3)最後,将各個訓練得到的弱分類器組合成一個強分類器。各個弱分類器的訓練過程結束後,加大分類誤差率小的弱分類器的權重,使其在最終的分類函數中起着較大的決定作用,而降低分類誤差率大的弱分類器的權重,使其在最終的分類函數中起着較小的決定作用。
換而言之,誤差率低的弱分類器在最終分類器中占的權重較大,否則較小。
Adaboost的主要優點有:
1)Adaboost作為分類器時,分類精度很高。
2)在Adaboost的架構下,可以使用各種回歸分類模型來建構弱學習器,不用對特征進行篩選,非常靈活。
3)作為簡單的二進制分類器時,構造簡單,結果可了解。
4)不容易發生過拟合。
Adaboost的主要缺點有:
1)對異常樣本敏感,異常樣本在疊代中可能會獲得較高的權重,影響最終的強學習器的預測準确性。
算法推導見筆記。
2、GBDT算法原理
GBDT在BAT大廠中也有廣泛的應用,假如要選擇3個最重要的機器學習算法的話,個人認為GBDT應該占一席之地。
基本思想:積跬步以至千裡,每次學習一點。先用一個初始值來學習一棵決策樹,葉子處可以得到預測的值,以及預測之後的殘差,然後後面的決策樹就是要基于前面決策樹的殘差來學習,直到預測值和真實值的殘差為0。最後對于測試樣本的預測值,就是前面許多棵決策樹預測值的累加。
GBDT的思想可以用一個通俗的例子解釋,假如有個人30歲,我們首先用20歲去拟合,發現損失有10歲,這時我們用6歲去拟合剩下的損失,發現差距還有4歲,第三輪我們用3歲拟合剩下的差距,差距就隻有一歲了。如果我們的疊代輪數還沒有完,可以繼續疊代下面,每一輪疊代,拟合的歲數誤差都會減小。
GBDT也是疊代,使用了前向分布算法,但是弱學習器限定了隻能使用CART回歸樹模型.(GBDT的會累加所有樹的結果,而這種累加是無法通過分類完成的,是以GBDT的樹都是CART回歸樹,而不是分類樹(盡管GBDT調整後也可以用于分類但不代表GBDT的樹為分類樹))
它的每一次計算都是為了減少上一次的殘差,而為了消除殘差,我們可以在殘差減小的梯度方向上建立模型,是以說,在GradientBoost中,每個新的模型的建立是為了使得之前的模型的殘差往梯度下降的方法,與傳統的Boosting中關注正确錯誤的樣本權重有着很大的差別。
GBDT通過多輪疊代,每輪疊代産生一個弱分類器,每個分類器在上一輪分類器的殘差基礎上進行訓練。對弱分類器的要求一般是足夠簡單,并且是低方差和高偏差的。因為訓練的過程是通過降低偏差來不斷提高最終分類器的精度。
通過損失函數的負梯度來拟合,我們找到了一種通用的拟合損失誤差的辦法,這樣無輪是分類問題還是回歸問題,我們通過其損失函數的負梯度的拟合,就可以用GBDT來解決我們的分類回歸問題。差別僅僅在于損失函數不同導緻的負梯度不同而已。
3、GBDT算法步驟
損失函數主要有:指數損失、對數損失、均方差、絕對損失
讓損失函數沿着梯度方向的下降。這個就是gbdt 的 gb的核心了。 利用損失函數的負梯度在目前模型的值作為回歸問題提升樹算法中的殘差的近似值去拟合一個回歸樹。gbdt 每輪疊代的時候,都去拟合損失函數在目前模型下的負梯度。
由于上述高偏差和簡單的要求,每個分類回歸樹的深度不會很深。最終的總分類器 是将每輪訓練得到的弱分類器權重求和得到的(也就是加法模型)。
對于回歸問題:
對于分類問題:樣本輸出不是連續的值,而是離散的類别,導緻我們無法直接從輸出類别去拟合類别輸出的誤差。
主要有兩個方法:一個是用指數損失函數,此時GBDT退化為Adaboost算法。另一種方法是用類似于邏輯回歸的對數似然損失函數的方法。也就是說,我們用的是類别的預測機率值和真實機率值的差來拟合損失。
4、gbdt 如何建構特征
gbdt 本身是不能産生特征的,但是我們可以利用gbdt去産生特征的組合。利用gbdt去産生特征的組合,再采用邏輯回歸進行處理,增強邏輯回歸對非線性分布的拟合能力。
我們使用 GBDT 生成了兩棵樹,兩顆樹一共有五個葉子節點。我們将樣本 X 輸入到兩顆樹當中去,樣本X 落在了第一棵樹的第二個葉子節點,第二顆樹的第一個葉子節點,于是我們便可以依次建構一個五緯的特征向量,每一個緯度代表了一個葉子節點,樣本落在這個葉子節點上面的話那麼值為1,沒有落在該葉子節點的話,那麼值為 0。于是對于該樣本,我們可以得到一個向量[0,1,0,1,0] 作為該樣本的組合特征,和原來的特征一起輸入到邏輯回歸當中進行訓練。實驗證明這樣會得到比較顯著的效果提升。
補充:
GBDT選擇特征的細節其實是想問你CART Tree生成的過程。CART TREE 生成的過程其實就是一個選擇特征的過程。
選擇特征是:周遊每個特征和每個特征的所有切分點,找到最優的特征和最優的切分點。多個CART TREE 生成過程中,選擇最優特征切分較多的特征就是重要的特征。
5、GBDT 如何用于分類 ?
參考:https://www.cnblogs.com/ModifyRong/p/7744987.html
gbdt 無論用于分類還是回歸一直都是使用的CART 回歸樹。這裡面的核心是因為gbdt 每輪的訓練是在上一輪的訓練的殘差基礎之上進行訓練的。這裡的殘差就是目前模型的負梯度值 。這個要求每輪疊代的時候,弱分類器的輸出的結果相減是有意義的。殘差相減是有意義的,類别相減是沒有意義的。
方法流程:
(1)我們在訓練的時候,是針對樣本 X 每個可能的類都訓練一個分類回歸樹。舉例說明,目前樣本有三類,也就是 K = 3。樣本 x 屬于 第二類。那麼針對該樣本 x 的分類結果,其實我們可以用一個 三維向量 [0,1,0] 來表示。0表示樣本不屬于該類,1表示樣本屬于該類。由于樣本已經屬于第二類了,是以第二類對應的向量次元為1,其他位置為0。
針對樣本有 三類的情況,我們實質上是在每輪的訓練的時候是同時訓練三顆樹。第一顆樹針對樣本x的第一類,輸入為(x,0)。第二顆樹輸入針對 樣本x 的第二類,輸入為(x,1)。第三顆樹針對樣本x 的第三類,輸入為(x,0)。
在這裡每顆樹的訓練過程其實就是就是我們之前已經提到過的CATR TREE 的生成過程。在此處我們參照之前的生成樹的程式 即可以就解出三顆樹,以及三顆樹對x 類别的預測值f1(x),f2(x),f3(x)。那麼在此類訓練中,我們仿照多分類的邏輯回歸 ,使用softmax 來産生機率,則屬于類别 1 的機率。
這樣我們可以周遊所有特征的所有特征值,找到讓均方損失最小的特征以及其對應的特征值。生成三顆樹後,對于測試樣本預測機率。
6、優缺點:
目前GBDT的算法比較好的庫是xgboost。當然scikit-learn也可以。
GBDT主要的優點有:
1) 可以靈活處理各種類型的資料,包括連續值和離散值,處理分類和回歸問題。
2) 在相對少的調參時間情況下,預測的準備率也可以比較高。這個是相對SVM來說的。
3) 可以用于篩選特征。
4)使用一些健壯的損失函數,對異常值的魯棒性非常強。比如 Huber損失函數和Quantile損失函數。
GBDT的主要缺點有:
1)由于弱學習器之間存在依賴關系,難以并行訓練資料。不過可以通過自采樣的SGBT來達到部分并行。
7、GBDT和随機森林對比
相同點:
1.都是由多棵樹組成;
2.最終的結果都是由多棵樹一起決定;
不同點:
(1)随機森林的子樹可以是分類或回歸樹,而GBDT隻能是回歸樹;
(2)基于bagging思想,而gbdt是boosting思想,即采樣方式不同
(3)随機森林可以并行生成,而GBDT隻能是串行;
(4)輸出結果,随機森林采用多數投票,GBDT将所有結果累加起來;
(5)随機森林對異常值不敏感,GBDT敏感,随進森林減少方差,GBDT減少偏差;
8、GBDT和随機森林哪個容易過拟合?
随機森林,因為随機森林的決策樹嘗試拟合資料集,有潛在的過拟合風險,而boosting的GBDT的決策樹則是拟合資料集的殘差,然後更新殘差,由新的決策樹再去拟合新的殘差,雖然慢,但是難以過拟合。
轉自:部落格園 - 深度機器學習