XGBoost + LR 就是加特征而已
LR (邏輯回歸) 算法因其簡單有效,成為工業界最常用的算法之一。但 LR 算法是線性模型,不能捕捉到非線性信息,需要大量特征工程找到特征組合。為了發現有效的特征組合,Facebook 在 2014年介紹了通過 GBDT (Gradient Boost Decision Tree)+ LR 的方案 [1] (XGBoost 是 GBDT 的后續發展)。隨后 Kaggle 競賽實踐證明此思路的有效性 [2][3]。
1. XGBoost + LR 的原理
XGBoost + LR 融合方式原理很簡單。先用數據訓練一個 XGBoost 模型,然后將訓練數據中的實例給 XGBoost 模型得到實例的葉子節點,然后將葉子節點當做特征訓練一個 LR 模型。XGBoost + LR 的結構如下所示。
我***接觸到 XGBoost + LR 的時候,認為 XGBoost + LR 是嘗試自動替代特征工程的方法。深度學習在 CTR 領域便是在講述這樣的故事和邏輯:只需人工對原始特征進行簡單的變換,深度學習能取的比大量人工特征的 LR 好的效果。
2. XGBoost 葉子節點不能取代特征工程
為了驗證 XGBoost + LR 是嘗試自動替代特征工程的方法,還只是一種特征工程的方法,我們在自己業務的數據上做了一些實驗。下圖便是實驗結果,其中: “xgboost+lr1" 是 XGBoost 的葉子節點特征、原始屬性特征和二階交叉特征一起給 LR 進行訓練;"xgboost+lr2" 則只有葉子節點特征給 LR;"lr1" 是原始屬性特征和二階交叉特征; "lr2" 只有原始屬性特征。
從上面的實驗來看:1) "xgboost+lr2" 明顯弱于 "lr1" 方法,說明只用葉子節點特征的 XGBoost + LR 弱于有特征工程的 LR 算法。即 XGBoost 葉子節點不能取代特征工程,XGBoost + LR 無法取代傳統的特征工程。2) "xgboost+lr1" 取得了所有方法中的***效果,說明了保留原來的特征工程 XGBoost + LR 方法擁有比較好的效果。即 XGBoost 葉子節點特征是一種有效的特征,XGBoost + LR 是一種有效的特征工程手段。
上面的實驗結果和我同事二哥之前的實驗結果一致。在他實驗中沒有進行二階交叉的特征工程技巧,結果 XGBoost > XGBoost + LR > LR,其中 XGBoost +LR 類似我們的 "xgboost+lr2" 和 LR 類似于我們的 "lr2"。
3. 強大的 XGBoost
只用 XGBoost 葉子節點特征, XGBoost + LR 接近或者弱于 XGBoost 。在下圖中,我們發現 XGBoost 的每個葉子節點都有權重 w, 一個實例的預測值和這個實例落入的葉子節點的權重之和有關。
如果二分類 XGBoost 使用了 sgmoid 做激活函數, 即參數為 "binary:logistic", 則 XGBoost 的最終預測值等于 sgmoid(葉子節點的權重之和)。而 LR 的最終預測值等于 sgmoid (特征對應的權重之后)。因此 LR 只要學到葉子節點的權重,即可以將 XGBoost 模型復現出來。因此理論上,如果 LR 能學到更好的權重,即使只有葉子節點特征的 XGBoost + LR 效果應該好于 XGBoost。
但是從上面的結果來看,XGBoost + LR 要接近或者弱于 XGBoost。XGBoost 賦予葉子節點的權重是很不錯的,LR 學到的權重無法明顯地超過它。
4. 總結
XGBoost + LR 在工業和競賽實踐中,都取得了不錯的效果。但 XGBoost 的葉子節點不能完全替代人工特征, XGBoost + LR 并沒有像深度學習那樣試圖帶來自動特征工程的故事和邏輯。最終,XGBoost + LR 的格局沒有超越特征工程。
【本文為51CTO專欄作者“李立”的原創稿件,轉載請通過51CTO獲取聯系和授權】