整合學習:隨機森林/GBDT/XGBoost (學習筆記一)
知識點:
-
隨機森林
-
提升演算法
-
GBDT(迭代決策樹)
-
Adaboost
-
XGBoost
-
Stacking
整合學習(Ensemble Learning)
整合學習的思想就是將若干個學習器(分類器&迴歸器)組合之後產生一個新學習器.弱分類器(weak learner)指那些分類準確率只稍微好於隨機猜測的分類器(error<0.5);
整合演算法的成功在於保證弱分類器的多樣性(Diversity).而且整合不穩定的演算法也能夠得到一個較為明顯的效能提升.
常見的整合學習思想有:
Bagging
Boosting
Stacking
Why need Ensemble Learning?
1.弱分類器間存在一定的差異性,這會導致分類的邊界不同,也就是說可能存在錯誤.那麼將多個弱分類器合併後,就可以得到更加合理的邊界,減少整體的錯誤率,
2.對於資料過大或者過小,可以分別進行劃分和有放回的操作產生不同的資料子集,然後使用資料子集訓練不同的分類器,最終再合併成為一個大分類器;
3.如果資料劃分邊界過於複雜,使用線性模型很難描述情況,那麼可以訓練多個模型,然後再進行模型的融合;
4.對於多個異構的特徵集的時候,很難進行融合,那麼可以考慮每個資料集構建一個分類模型,然後將多個模型融合.
Bagging方法
Bagging方法又叫做自舉匯聚法(BoostStrap Aggregating),思想就是:在原始資料集上通過有放回的抽樣方式,重新選怎S個新資料集來分別訓練S個分類器的整合技術.也就是說這些模型的訓練資料中允許存在重複資料.
Bagging方式訓練出來的模型在預測新樣本分類的時候,會使用多數投票法或者求均值的方式來統計最終的分類結果.
Bagging方法的弱學習器可以是基本的演算法模型,eg:Liner,Ridge,Lasso,Logistic,Softmax,ID3,C4.5,CART,SVM,KNN等.
備註:Bagging方式是有放回的抽樣,並且每個子集的樣本數量必須和原始樣本數量一致,但子集中允許重複資料.
Bagging方法_訓練過程
Bagging方法_預測過程
隨機森林(Random Forest)
在Bagging策略的基礎上進行修改後的一種演算法
- 從原始樣本集(n個樣本)中使用booststrap取樣(有放回重取樣)選出n個樣本;
- 從所有屬性中隨機選擇k個屬性,選擇最佳分割屬性作為節點建立決策樹;
- 重複以上兩步m次,即建立m棵決策樹
- 這m個決策樹形成隨機森林,通過投票表決結果決定資料屬於哪一類
袋外錯誤率
隨機森林有一個重要的優點,沒必要對它,進行交叉驗證或者用一個獨立的測試集來獲得誤差的一個無偏估計.它可以在內部進行評估,也就是說生成的過程中就可以對誤差建立一個無偏估計.
我們知道,在構建每棵樹的時候,我們對於每棵樹而言使用了不同的boostrap sample (隨機且有放回的抽取).對於每棵樹而言(假設對於第k棵樹),大約有1/3的訓練例項沒有參與第k棵樹的生成,它們稱為第k棵樹的oob樣本.
而這樣的取樣點就允許我們進行oob估計,它的計算方式如下:
對每個樣本,計算它作為oob樣本的樹對它的分類情況(約1/3的樹);
然後以簡單多數投票作為該樣本的分類結果;
最後用誤分個數佔樣本總數的比率作為隨機森林的oob誤分率.
oob誤分率是隨機森林泛化誤差的一個無偏估計,它的結果近似於需要大量計算的k折交叉驗證.
特徵重要度
作為單個的決策樹模型,在模型建立時實際上是尋找到某個特徵合適的分割點.這個資訊可以作為衡量所有特徵重要性的一個指標.
它的基本思想:如果一個特徵被選為分割點的次數越多,那麼這個特徵的重要性就越強.這個理念可以被推廣到整合演算法當中,只要將每棵樹的特徵重要性進行簡單的平均就可以啦.
根據特徵重要度進行特徵選擇.
RF的推廣演算法
RF演算法在實際應用中具有比較好的特性,應用也比較廣泛,主要應用在:分類,迴歸,特徵轉換,異常點檢測等.常見的RF變種演算法如下:
- EXtra tree
- TRTE(Totally Random Trees Embedding)
- Isolation Forest
Extra Tree
Extra Tree 是RF的一個變種,原理基本和RF一樣,區別如下:
- 1.RF會隨機取樣來作為子決策樹的訓練集,而Extra Tree每個子決策樹採用原始資料集訓練;
- 2.RF在選擇劃分特徵點的時候回合傳統決策樹一樣,會基於資訊增益,資訊增益率,基尼係數,均方差等原則來選擇最優特徵值;而Extra Tree會隨機選擇特徵進行劃分決策樹.
Extra Tree因為是隨機選擇特徵值的劃分點,這樣會導致決策樹的規模一般大於RF所生成的決策樹.也就是說ExtraTree模型的方差相對於RF進一步減少.在某些情況下,Extra Tree的泛化能力比RF的強.
TRTE(Totally Random Trees Embedding)
TRTE是一種非監督的資料轉化方式.將低維資料對映到高維,從而讓對映到高維的資料更好 的應用於分類迴歸模型.
TRTE演算法的轉換過程類似RF演算法的方法,建立T個決策樹來擬合數據.當決策樹構建完成後,資料集裡的每個資料在T個決策樹中葉子節點的位置就定下來了,將位置資訊轉換為向量就完成了特徵轉換操作.
案例:有3棵決策樹,每顆決策樹和有5個葉子節點,某個資料x劃分到第一個決策樹的第三個葉子節點,第三個決策樹的第五個葉子節點,那麼最終的x對映特徵編碼為:(0,0,1,0,0,1,0,0,0,0,0,0,0,0,1)
IForest(Isolation Forest)
IForest是一種異常點檢測演算法,使用類似RF的方式來檢測異常點;IForest演算法和RF演算法的區別在於:
1.在隨機取樣的過程中,一般只需要少量資料即可;
2.在進行決策樹構建過程中,IForest演算法會隨機選擇一個劃分特徵,並對劃分特徵隨機選擇一個劃分閾值;
3.IForest演算法構建的決策樹一般深度max_depth是比較小的.
區別原因:目的是異常點檢測,所以只要能夠區分異常的即可,不需要大量資料;另外在異常點檢測的過程中,一般不需要太大規模的決策樹.
對於異常點的判斷,則是將測試樣本x擬合到T棵決策樹上.計算在每棵樹上該樣本的葉子節點的深度ht(x).從而計算出平均深度h(x);然後就可以使用下列公式極端樣本點x的異常概率值,p(s,m)的取值範圍為[0,1],越接近於1,則是異常點的概率越大.
RF的主要優點:
1. 訓練可以並行化,對於大規模樣本的訓練具有速度的優勢;
2. 由於進行隨機選擇決策樹劃分特徵列表,這樣在樣本維度比較高的時候,仍然具有比較高的訓練效能;
3. 給以給出各個特徵的重要性列表;
4. 由於存在隨機抽樣,訓練出來的模型方差小,泛化能力強;
5. RF實現簡單;
6. 對於部分特徵的缺失不敏感。
RF的主要缺點:
1. 在某些噪音比較大的特徵上,RF模型容易陷入過擬合;
2. 取值比較多的劃分特徵對RF的決策會產生更大的影響,從而有可能影響模型的效果。
隨機森林的思考
在隨機森林的構建過程中,由於各棵樹之間是沒有關係的,相互獨立的,在構建的過程中,構建第m棵子樹的時候,不會考慮前面的m-1棵樹.
思考:
如果構建第m棵樹的時候,考慮到前m-1棵子樹的結果,會不會對最終結果產生有益的影響?
各個決策樹組成隨機森林後,在形成最終結果的時候能不能給定一種既定得到決策順序呢?(也就是那顆子樹先進行決策,那顆子樹後進行決策)
Boosting
- 提升學習(Boosting)是一種機器學習技術,可以用於迴歸和分類問題,它每一步產生弱預測模型(如決策樹)並加權累加到總模型中;如果每一步的弱預測模型的生成都是依據損失函式的梯度方式的,那麼就稱為梯度提升(Gradient Boosting);
- 提升技術的意義:如果一個問題存在弱預測模型,那麼可以通過提升技術的方法得到一個強預測模型
常見模型有:
Adboost
Gradient Boosting(GBDT/GBT/GBRT)
AdaBoost演算法原理
Adaptive Boosting是一種迭代演算法.每輪迭代中會在訓練集上產生一個新的學習器,然後使用該學習器對所有樣本進行預測,以評估每個樣本的重要性(Informative).換句話說就是,演算法會為每個樣本賦予一個權重,每次用訓練好的學習器標註/預測各個樣本,如果某個樣本點唄預測的越正確,則將其權重降低,否則提高樣本的權重.權重越高的樣本在下一次迭代訓練中所佔的比重就會越大,也就是說越難區分的樣本在訓練過程中會變得越重要;
整個迭代過程知道錯誤率足夠小或者達到一定的迭代次數為止.
樣本加權
Adaboost演算法
Adaboost演算法將基分類器的線性組合作為強分類器,同時給分類誤差率較小的基本分類器以大的權值,給分類誤差率較大的分類器以較小的權重值;構建的線性組合為:
最終分類器是線上性組合的基礎上進行Sign函式轉換:
AdaBoost演算法原理
Adaboost演算法構建過程
AdaBoost總結
AdaBoost的優點如下:
- 可以將處理連續值和離散值;
- 可以將不同的分類演算法作為弱分類器;
- 解釋強,結構簡單
- 精度高
AdaBoost的缺點如下:
- 對異常樣本敏感,異常樣本可能會在迭代過程中獲得較高的權重值,最終影響模型效果
- 迭代次數(弱分類器個數)不好確定
梯度提升迭代決策樹GBDT
GBDT也是Boosting演算法的一種,但是和AdaBoost演算法不同;區別如下:AdaBoost演算法是利用前一輪的弱學習器的誤差來更新樣本權重值,然後一輪一輪的迭代;GBDT也是迭代,但是GBDT要求弱學習器必須是CART模型,而且GBDT在模型訓練的時候,是要求模型預測的樣本損失儘可能的小.
當給定步長的時候,給定一個步長step,在構建下一棵樹的時候使用step*殘差值作為輸入值,這種方式可以減少過擬合發生.
梯度提升迭代決策樹GBDT
GBDT由三部分構成:DT(Regression Decistion Tree),GB(Gradient Boosting)和Shrinkage(衰減)
由於多棵決策樹組成,所有樹的結果累加起來就是最終結果
迭代決策樹和隨機森林的區別:
- 隨機森林使用抽取不同的樣本構建不同的子樹,也就是說第m棵樹的構建和前m-1棵樹的結果沒有關係.
- 迭代決策樹在構建子樹的時候,使用之前子樹構建結果後形成的殘差作為輸入資料構建下一個子樹;然後最終預測的時候按照子樹構建的順序進行預測,並將預測結果相加
GBDT的演算法原理
給定輸入向量x和輸出變數Y組成的若干訓練樣本(X1,Y1),(X1,Y1),......(Xn,Yn),目標是找到近似函式F(x)的損失函式L(Y,F(x))的損失值最小
L損失函式一般採用最小二乘損失函式或者絕對值損失函式
GBDT迴歸演算法和分類演算法的區別
GBDT scikit-learn相關
GBDT總結
GBDT的優點如下:
- 可以處理連續值和離散值;
- 在相對少的調參情況下,模型的預測值效果也不錯;
- 模型的魯棒性比較強
GBDT的缺點如下:
- 由於弱學習器之間存在關聯關係,難以並行訓練模型
Bagging、Boosting的區別
- 1.樣本選擇:Bagging演算法是有放回的隨機取樣,Boosting演算法每一輪訓練集不變,只是訓練集中的每個樣例在分類器中的權重發生變化,而權重根據上一輪的分類結果進行調整;
- 2.樣例權重:Bagging使用隨機抽樣,樣例的權重相等;Boosting根據錯誤率不斷地調整樣例的權重值,錯誤率越大權重越大
- 3.預測函式:Bagging所有預測模型的權重相等;Boosting演算法對於誤差小的分類器具有更大的權重.
- 4.平行計算:Bagging演算法可以並行生成各個基模型;Boosting理論上只能順序生產,因為後一個模型需要前一個的結果;
- 5.Bagging是減少模型的variance(方差),Boosting是減少模型的Bias(偏度)
- 6.Bagging裡每個分類模型都是強分類器,因為降低的是方差,方差過高需要降低是過擬合;Boosting裡每個分類模型都是弱分類器,因為降低的是偏度,偏度過高是欠擬合.
Bagging對樣本重取樣,對每一輪的取樣資料集都訓練一個模型,最後取平均.由於樣本集的相似性和使用的同種模型,因此各個模型具有相似的bias和variance;
XGBoost概述
XGBoost是GBDT演算法的一種變種,是一種常用的有監督整合學習演算法;是一種伸縮性強,便捷的可並行構建模型的Gradient Boosting演算法.
XGBoost官網:http://xgboost.readthedocs.io;
XGBoost Github原始碼位置:https://github.com/dmlc/xgboost;
XGBoost支援開發語言:Python,R,Java,Scala,C++等
XGBoost公式推導
XGBoost 的學習策略
當樹的結構確定的時候,我們可以得到最優的葉子點數以及對應的最小損失值,問題在於如何確定樹結構
- 暴力窮舉所有可能得結構,選擇損失值最小的(很難求解);
- 貪心法,每次嘗試選擇一個分類點進行分裂,計算操作前後的增益,選擇增益最大的方式進行分裂
決策樹相關演算法計算指標:
- ID3演算法:資訊增益
- C4.5演算法:資訊增益率
- CART演算法:Gini係數
XGBoost的學習策略
樹節點分裂方法
精確演算法:遍歷所有特徵的所有可能得分割點,計算gain值,選擇最大的gain值對應的(feature value)進行分割
近似演算法:對於每個特徵,只考慮分位點,減少計算複雜度
樹節點分裂方法
近似演算法案例:三分位數
XGBoost的其他特性
XGBoost相關係數
參考連結:http://xgboost.readthedocs.io/en/latest/python/python_api.html#module- xgboost.sklearn