1. 程式人生 > >機器學習——boosting 與 bagging 知識點+面試題總結

機器學習——boosting 與 bagging 知識點+面試題總結

一、boosting與bagging: (1)bagging:從原始資料中隨機抽樣得到多個同樣大小的資料集,來訓練多個基學習 器,各學習器之間互不依賴。是一種並行的方法。各分類器的權重都是相等的。 (抽樣方法為有放回的抽樣:允許每個小資料集中可以有重複的值。) (2)boosting:用所有的資料去訓練基學習器,個體學習器之間存在依賴關係,每一個學習器都是基於之前訓練的學習器的結果,集中關注被錯分的資料,來獲得新的學習器,達到提升的效果。(通俗來說,就是每次都只學習一點,然後一步步的接近最終要預測的值。) 分類的結果是基於所有分類器的加權求和結果的,分類器的權重並不相等,每個權重代表的是其對應分類器在上一輪迭代中的成功度。
優點:泛化誤差低,易實現,分類準確率較高,可調引數少; 缺點:對離群點比較敏感。 兩者相同點:所使用的分類器的型別都是一致的。 1.1 Adaboost (一般用於二分類,如果用於多分類,需進行修改。)(利用前一輪迭代若學習器的誤差率來更新訓練集的權重) (1)步驟: 收集資料、分析資料、訓練資料集 訓練資料的過程:將訓練資料集中的每個樣本賦予一個權值,開始的時候,權重都初始化為相等值;1)首先,在整個資料集上訓練一個弱分類器,並計算錯誤率;2)在同一個資料集上再次訓練一個弱分類器,在訓練的過程中,權值重新調整,其中在上一次分類中分對的樣本權值將會降低,分錯的樣本權值將會提高。3)重複上述過程,序列的生成多個分類器,為了從所有弱分類器中得到多個分類結果,為每個分類器分配一個權值alpha,這些alpha值是基於每個弱分類器的錯誤率計算的。 (2)優缺點:
優點:泛化錯誤率低,易編碼,可以應用在大部分分類器上,無引數可調整。 缺點:對離群資料點敏感。 適用資料型別:數值型和標稱型資料。 (1)步驟: 用上一次損失函式的負梯度來擬合本輪損失的近似值。 a) 迴歸:(為什麼不和分類一起因為分類演算法的輸出是不連續的類別值,需要一些處理才能使用負梯度) 輸入:訓練集樣本T={(x_1,y_1)....(x_m,y_m)},最大迭代次數T,損失函式L。 輸出:強學習器f(x)。 1)初始化弱學習器, 2)對每個樣本x計算負梯度r,利用所有的(x,r),擬合一棵CART迴歸樹,該樹對應的葉子結點區域為R_j,對每個葉子區域j,計算最佳擬合值,更新強學習器。 3)得到強學習器。 b) 分類:
GBDT的分類演算法從思想上和GBDT的迴歸演算法沒有區別,但是由於樣本輸出不是連續的值,而是離散的類別,導致我們無法直接從輸出類別去擬合類別輸出的誤差。為了解決這個問題,主要有兩個方法:1)用指數損失函式,即退化為Adaboost演算法;2)用類似於邏輯迴歸的對數似然損失函式的方法,也就是,用類別的預測概率值和真實概率值的差來擬合損失。 (2)和傳統的boost的區別:(不是對樣本進行的權值進行改變,而是改變每個樣本的迴歸目標值,而Adaboost是按照分類對錯,分配不同的權重。)每一次的計算是為了減少上一次的殘差,通過在殘差減小的梯度方向上建立一個新的模型,與單純的對正確、錯誤的樣本進行加權不同。 (3)優缺點: 優點:能靈活處理各種型別的資料,不需要特徵歸一化(LR需要) 在相對較少的調參情況下,預測的準確率也相對比較高。(相對於SVM來說的。) 與傳統決策樹相比,每一步的殘差(殘差方向代表了梯度)計算相當於沿著最優的方向去學,變相增大了分錯例項的權重,使用更少的特徵來決策,防止過擬合。 缺點:是一個序列過程,不能並行化,不適合線性模型。 (4)防止過擬合的方法: 限制樹的棵數,設定學習率,設定每個葉子結點的最小結點數,增加懲罰項,基於bagging思想進行抽樣。 1.3 XGBoost (1)優點: 1)正則化,防止過擬合,顯示的將樹的複雜度作為正則項加入到優化目標當中。 2)實現了並行處理,不是tree粒度上的並行,也愛一次迭代完才能進行下次的迭代的,而是特徵粒度上的並行,在分割每層結點的時候,可以並行處理。(決策樹在訓練的時候,每次分割結點時要對特徵進行排序,xgboost在訓練之前,先對資料進行了排序,儲存為block結構,後面的迭代重複使用這個結構,使得並行成為了可能。) 3)可以自定義目標函式和評價函式。 4)可以處理缺失值。 5)考慮了當資料量比較大,記憶體不夠時,怎麼有效的使用磁碟,主要是結合多執行緒、資料壓縮、分片的方法,儘可能的提高演算法效率 (2)和GBDT的區別: 1)GBDT用CART作為基分類器,而xgboost還支援線性分類器,相當於加了正則項的邏輯迴歸或線性迴歸。 2)GBDT學習的時候,利用上次迭代模型的誤差,只用到了一階導數資訊;而Xgboost直接利用上一次迭代模型的一階導數資訊和二階導數資訊。 3)XGBoost在代價函式里加入了正則項,正則項與樹的葉子結點的數量與葉子結點的值有關,用於控制模型的複雜度,防止了過擬合。 4)借鑑了1隨機森林的列抽樣,不僅減少過擬合,還能減少計算。 (3)基本原理: 對損失函式進行泰勒展開,展開之後,得到迭代模型,使得目標函式只依賴於上一次迭代模型損失函式的一階導數和二階導數。 1.4 隨機森林 (1)與GBDT的區別: 1)基於bagging思想,而gbdt是boosting思想,即取樣方式不同 2)RF能夠並行生成,而GBDT只能序列生成。 (2)基本原理: 是一種bagging方法,每次取樣一部分訓練集,採用一部分特徵,(行取樣、列取樣)訓練弱分類器,多次取樣,訓練多棵樹,最後在預測的時候,將向量輸入到每棵樹中,每棵樹都會產生一個結果,統計每棵樹的結果,綜合得到最終的結果。 (3)優缺點: 優點: 1)由於採用了行取樣、列取樣,可以有效的避免過擬合,通過個體學習器之間差異度的增加提高泛化效能。 2)可處理高維度的特徵,並且不用做特徵選擇。(對多維特徵的資料集分類有很高的效率,還可以做特徵重要性的選擇,執行效率和準確率較高) 3)不需要對資料進行歸一化(不關心變數的值,關係變數的分佈) 4)簡單、容易實現、計算開銷小,訓練效率高。 缺點:在噪聲比較大的情況下會過擬合。 面試篇: 1、xgboost怎麼給特徵打分?如何解決缺失值問題? 1)在訓練的過程中,通過gini指數選擇分離點的特徵,一個特徵被選中的次數越多,評分越高。2)xgboost對缺失值有預設的處理方法,對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向,可以大大的提升演算法的效率。 2、什麼是OOB?隨機森中OOB如何計算的?(為什麼不用交叉驗證?) 隨機森林採用的bagging方法,其中有放回的取樣過程,每次都有一定比例的資料沒被選中,也就是說沒有參加當前決策樹的建立,把這部分資料成為袋外資料,可用來取代測試集做誤差估計。所以在隨機森林演算法中,不需要再進行交叉驗證或單獨的測試集。 3、學習器結合的好處? 1)統計學角度,由於學習任務的假設空間往往很大,很多假設在訓練集上表現的差不多,如果僅僅使用單個學習器,可能會導致泛化效能降低,而通過結合多個學習器,可以減小這一問題。2)計算角度看,單個學習器容易陷入區域性最優,通過多次執行之後結合,可降低陷入區域性最優的風險。 4、訓練過程中,每輪訓練一直存在分類錯誤的問題,整個Adaboost卻能快速收斂,為何? 每輪訓練結束後,AdaBoost框架會對樣本的權重進行調整,該調整的結果是越到後面被錯誤分類的樣本權重會越高。這樣到後面,單個弱分類器為了達到較低的帶權分類誤差都會把樣本權重高的樣本分類正確。雖然單獨來看,單個弱分類器仍會造成分類錯誤,但這些被錯誤分類的樣本的權重都較低,在AdaBoost框架的最後輸出時會被前面正確分類的高權重弱分類器“平衡”掉。這樣造成的結果就是,雖然每個弱分類器可能都有分錯的樣本,然而整個AdaBoost框架卻能保證對每個樣本進行正確分類,從而實現快速收斂。 參考 : 《統計學習方法》,李航 
《機器學習》,周志華