1. 程式人生 > >[面試筆記] 決策樹、隨機森林、GBDT、XGBoost

[面試筆記] 決策樹、隨機森林、GBDT、XGBoost

摘要

本文主要分享了 決策樹、隨機森林、GBDT、XGBoost 四種模型的原理

決策樹

對於決策樹,李航老師在《統計學習方法》裡有詳細的解釋

分為ID3, C4.5, CART三個基本的樹生成演算法

  • ID3 是一個多叉樹,使用了熵作為資訊增益,不能處理連續值,而且有偏向性,傾向於選擇類別較多的特徵,因為IG相對偏大

  • C4.5 是一個多叉樹,使用了熵計算資訊增益比,資訊增益比進行子節點分裂,對類別較多的特徵進行懲罰

  • CART是一棵二叉樹,對分類和迴歸都適用,對於迴歸樹用平方誤差最小化,對分類樹用基尼指數進行特徵選擇。分類時和ID3、C4.5類似;迴歸時會遍歷變數j, 對固定的切分變數掃描切分點s,計算MSE,選擇使得MSE最小的(j,s)對。

  • CART之所以使用Gini指數是因為熵需要計算log,速度較慢

隨機森林(Bagging進化版)

RF使用了CART決策樹作為弱學習器,並行的訓練出多棵互相獨立的樹,最後通過投票得出結果

  • RF有兩個隨機取樣過程:
    • 行取樣:採用有放回的方式,也就是在取樣得到的樣本集合中,可能有重複的樣本
    • 列取樣: 從M個feature中,選擇m個(m << M)

通過樣本的隨機取樣和特徵的隨機取樣,RF的魯棒性非常好

傳統Boosting 與 GradientBoost

  • 原始的Boost演算法是在演算法開始的時候,為每一個樣本賦上一個權重值,初始的時候,大家都是一樣重要的。

  • 在每一步訓練中得到的模型,會使得資料點的估計有對有錯,我們就在每一步結束後,增加分錯的點的權重,減少分對的點的權重,這樣使得某些點如果老是被分錯,那麼就會被“嚴重關注”,也就被賦上一個很高的權重。

  • 然後等進行了N次迭代(由使用者指定),將會得到N個簡單的分類器(basic learner),然後我們將它們組合起來(比如說可以對它們進行加權、或者讓它們進行投票等),得到一個最終的模型

  • 而Gradient Boost與傳統的Boost的區別是,每一次的計算是為了減少上一次的殘差(residual),而為了消除殘差,我們可以在殘差減少的梯度(Gradient)方向上建立一個新的模型。

  • GBDT每一步都通過上一時刻的輸出加上當前時刻的負梯度來得到一個Loss更小的強模型。對於迴歸而言,就直接是算梯度就行,對於分類而言,需要Logistics變換

XGBoost

  • 根據GBDT的原理,為了在每次迭代中找到負梯度ft(xi),我們需要通過求導得到負梯度

  • 然而XGB不通過求導,而是通過將損失函式(MSE或Logistics)進行泰勒展開,得到一次和二次導數項,得到當前時間步的梯度值。問題轉化為如何使得當前梯度值最大,目標函式變為一次、二次導數之和

  • 然後就要開始建樹了,建樹的目標是使得當前梯度最大

  • 為了防止過擬合,在當前目標函式(一次、二次導數之和)的基礎上加入了正則項,包括葉節點個數和對葉節點得分score的L2正則

  • The Structure Score 這個score你可以理解成類似於資訊增益的一個指標,在切分點查詢演算法中用到

  • 切分點查詢演算法(貪心演算法) ,需要掃描所有排序過的特徵的得分,得出最優切分點

這裡寫圖片描述

  • 最後通過縮減因子(類似學習率),減小本次迭代中變化的幅度,防止過擬合, 通過這種方式來減小每棵樹的影響力,給後面的樹提供空間去優化模型

  • 全過程如下:

這裡寫圖片描述