首先,xgboost與gbdt的區別 :
- GBDT是機器學習算法,XGBoost是該算法的工程實現。
- 在使用CART作為基分類器時,XGBoost顯式地加入了正則項來控制模 型的復雜度,有利於防止過擬合,從而提高模型的泛化能力。
- GBDT在模型訓練時只使用了代價函數的一階導數信息,XGBoost對代 價函數進行二階泰勒展開,可以同時使用一階和二階導數。
- 傳統的GBDT采用CART作為基分類器,XGBoost支持多種類型的基分類 器,比如線性分類器。
- 傳統的GBDT在每輪迭代時使用全部的數據,XGBoost則采用了與隨機 森林相似的策略,支持對數據進行采樣。
- 傳統的GBDT沒有設計對缺失值進行處理,XGBoost能夠自動學習出缺 失值的處理策略。
Xgboost如何處理缺失值:
通常情況下,我們人為在處理缺失值的時候大多會選用中位數、均值或是二者的融合來對數值型特征進行填補,使用出現次數最多的類別來填補缺失的類別特征。
論文中關於缺失值的處理將其看與稀疏矩陣的處理看作一樣。在尋找split point的時候,不會對該特征為missing的樣本進行遍歷統計,只對該列特征值為non-missing的樣本上對應的特征值進行遍歷,通過這個技巧來減少了為稀疏離散特征尋找split point的時間開銷。在邏輯實現上,為了保證完備性,會分別處理將missing該特征值的樣本分配到左葉子結點和右葉子結點的兩種情形,計算增益后選擇增益大的方向進行分裂即可。可以為缺失值或者指定的值指定分支的默認方向,這能大大提升算法的效率。如果在訓練中沒有缺失值而在預測中出現缺失,那么會自動將缺失值的划分方向放到右子樹。