通常情況下,我們人為在處理缺失值的時候大多會選用中位數、均值或是二者的融合來對數值型特征進行填補,使用出現次數最多的類別來填補缺失的類別特征。
很多的機器學習算法都無法提供缺失值的自動處理,都需要人為地去處理,但是xgboost模型卻能夠處理缺失值,也就是說模型允許缺失值存在。
原是論文中關于缺失值的處理將其看與稀疏矩陣的處理看作一樣。在尋找split point的時候,不會對該特征為missing的樣本進行遍歷統計,只對該列特征值為non-missing的樣本上對應的特征值進行遍歷,通過這個技巧來減少了為稀疏離散特征尋找split point的時間開銷。在邏輯實現上,為了保證完備性,會分別處理將missing該特征值的樣本分配到左葉子結點和右葉子結點的兩種情形,計算增益后選擇增益大的方向進行分裂即可。可以為缺失值或者指定的值指定分支的默認方向,這能大大提升算法的效率。如果在訓練中沒有缺失值而在預測中出現缺失,那么會自動將缺失值的劃分方向放到右子樹。
原文的偽代碼如下: