樹模型們是如何處理缺失值的?


樹模型缺失值處理總結

除了ID3算法之外,其他的樹模型基本上都能夠處理缺失值。雖然如此,但如scikit-learn之類的庫,其在支持gbdt的時候,並沒有支持缺失值的處理

  1. C4.5
    第一步,計算所有特征的信息增益或者信息增益率的時候,假設數據集一共10000個樣本,特征A中缺失了5000個,則無視缺失值,在剩下的5000個特征中計算信息增益(或者信息增益率),最后乘以0.5,思想就是缺失值多的特征通過這種降低權重的方式來體現信息的缺失;
    第二步,如果運氣不好,正好這個A特征乘0.5之后得到的信息增益或者增益率還是最大的,那么就像西瓜書中提到的那樣,存在缺失值的樣板按照比例進入分裂之后的新的分支,假設根據特征A分裂得到兩個新的分支,一個分支有2000個樣本有2000個樣本,一個分支有3000個樣本,則按照比例2000個缺失值和3000個缺失值樣本分別進入兩個分支。(實際上ID3我沒有明確去查是否采用了這種處理方法,c4.5是采用了這種,不過問題不大,應用在ID3上也沒啥毛病。。)

CART

1、首先,如果某個存在缺失值的特征恰好是當前的分裂增益最大的特征,那么我們需要遍歷剩余的特征,剩余的特征中如果有也存在缺失值的特征,那么這些特征忽略,僅僅在完全沒有缺失值的特征上進行選擇,我們選擇其中能夠與最佳增益的缺失特征分裂之后增益最接近的特征進行分裂。

2、如果我們事先設置了一定的標准僅僅選擇僅僅選擇差異性在一定范圍內的特征作為代理特征進行分裂而導致了沒有特征和最佳缺失特征的差異性滿足要求,或者所有特征都存在缺失值的情況下,缺失樣本默認進入個數最大的葉子節點。

顯然這種缺失值的處理方式的計算量是非常大的,我們需要遍歷其它的特征來進行代理特征選擇,這個在數據量很大的情況下開銷太大,而帶來的性能提升確很有限,所以后來就不怎么用這種處理方式,

XGB 如何處理缺失值

原是論文中關於缺失值的處理將其看與稀疏矩陣的處理看作一樣。在尋找split point的時候,不會對該特征為missing的樣本進行遍歷統計,只對該列特征值為non-missing的樣本上對應的特征值進行遍歷,通過這個技巧來減少了為稀疏離散特征尋找split point的時間開銷。在邏輯實現上,為了保證完備性,會分別處理將missing該特征值的樣本分配到左葉子結點和右葉子結點的兩種情形,計算增益后選擇增益大的方向進行分裂即可。可以為缺失值或者指定的值指定分支的默認方向,這能大大提升算法的效率。如果在訓練中沒有缺失值而在預測中出現缺失,那么會自動將缺失值的划分方向放到右子樹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM