數據缺失值處理辦法


1.隨機森林模型怎么處理異常值?

隨機森:林是已故統計學家Leo Breiman提出的,和gradient boosted tree—樣,它的基模型是決策樹。在介紹RF時,Breiman就提出兩種解決缺失值的方去 (Random forests - classification description):

方法1-眾數填充(快速簡草但效果差):

把數值型變畺(numerical variables)中的缺失值用其所對應的類別中 (class)的中位數(median)替換。描述型變畺(categorical variables)缺失的部分用所對應類別中出現最多的數值替代(most frequent non-missing value)。以數值型變懸為例:

[公式]

方法2(耗時費力但效果好):

雖然依然是便用中位數出現次敎最多的數來進行替換,方法2引入了權重。即對需要替換的數據先和其他數據做相似度測量(proximity measurement)也就是下面公式中的Weight,在補全缺失點是相似的點的數據會有更高的權重W。以數值型變畺為例:

[公式]

Breiman說明了第二種方法的效果更好,但雲要的時間更長,這也是為什么工具包中不提供數據補全的功能,因為會影響到工具包的效率。

在訓練、驗證、測試含有缺失值時怎么辦?

1. 在選擇分裂屬性的時候,訓練樣本存在缺失值,如何處理?

(計算分裂損失減少值時,忽略特征缺失的樣本,最終計算的值乘以比例(實際參與計算的樣本數除以總的樣本數))

假如你使用ID3算法,那么選擇分類屬性時,就要計算所有屬性的熵增(信息增益,Gain)。假設10個樣本,屬性是a,b,c。在計算a屬性熵時發現,第10個樣本的a屬性缺失,那么就把第10個樣本去掉,前9個樣本組成新的樣本集,在新樣本集上按正常方法計算a屬性的熵增。然后結果乘0.9(新樣本占raw樣本的比例),就是a屬性最終的熵。

2. 分類屬性選擇完成,對訓練樣本分類,發現樣本屬性缺失怎么辦?

(將該樣本分配到所有子節點中,權重由1變為具有屬性a的樣本被划分成的子集樣本個數的相對比率,計算錯誤率的時候,需要考慮到樣本權重)

比如該節點是根據a屬性划分,但是待分類樣本a屬性缺失,怎么辦呢?假設a屬性離散,有1,2兩種取值,那么就把該樣本分配到兩個子節點中去,但是權重由1變為相應離散值個數占樣本的比例。然后計算錯誤率的時候,注意,不是每個樣本都是權重為1,存在分數。

這也是C4.5的算法。例如分西瓜中“紋理”是所有屬性中最大屬性,被用於對根節點進行划分。划分結果是使用編號為{1,2,3,4,5,6,15}的樣本進入了“紋理=清晰”,{7,9,13,14,17}樣本進入了“紋理=稍糊”,{12,11,16}進入了“樣本=模糊”分支,且權重都為1。編號為{8}的樣本在屬性=“紋理”上出現了缺失值,因此它將同時進入三個分支中,但是權重在三個子節點分別調整為\(\frac{7}{15},\frac{5}{15},\frac{3}{15}\)

3. 訓練完成,給測試集樣本分類,有缺失值怎么辦?

(分類時,如果待分類樣本有缺失變量,而決策樹決策過程中沒有用到這些變量,則決策過程和沒有缺失的數據一樣;否則,如果決策要用到缺失變量,決策樹也可以在當前節點做多數投票來決定(選擇樣本數最多的特征值方向)。)

(U)如果有單獨的缺失分支,使用此分支。(c)把待分類的樣本的屬性a值分配一個最常出現的a的屬性值,然后進行分支預測。(S)根據其他屬性為該待分類樣本填充一個屬性a值,然后進行分支處理。(F)在決策樹中屬性a節點的分支上,遍歷屬性a節點的所有分支,探索可能所有的分類結果,然后把這些分類結果結合起來一起考慮,按照概率決定一個分類。(H)待分類樣本在到達屬性a節點時就終止分類,然后根據此時a節點所覆蓋的葉子節點類別狀況為其分配一個發生概率最高的類。

2.xgboost怎幺處理缺失值?

In many real-world problems, it is quite common for the input x to be sparse. There are multiple possible causes
for sparsity: 1) presence of missing values in the data; 2)frequent zero entries in the statistics; and, 3) artifacts of
feature engineering such as one-hot encoding. It is important to make the algorithm aware of the sparsity pattern in
the data. In order to do so, we propose to add a default direction in each tree node, which is shown in Fig. 4. When
a value is missing in the sparse matrix x, the instance is classified into the default direction. There are two choices
of default direction in each branch. The optimal default directions are learnt from the data. The algorithm is shown in
Alg. 3. The key improvement is to only visit the non-missing entries Ik. The presented algorithm treats the non-presence
as a missing value and learns the best direction to handle missing values. The same algorithm can also be applied
when the non-presence corresponds to a user specified value by limiting the enumeration only to consistent solutions.
xgboost處理缺失值的方法和其他樹模型不同。根據作者TianqiChen在論文[1]中章節3.4的介紹,xgboost把缺失值當做稀疏矩陣來對待,本身的在節點分裂時不考慮的缺失值的數值。缺失值數據會被分到左子樹和右子樹分別計層損失,選擇較優的那一個。如果訓練中沒有數據缺失,預測時出現了數據缺失,那么默認被分類到右子樹。具體的介紹可以參考[2,3]。
img

這樣的處理方法固然巧妙,但也有風險:假設了訓練數據和預測數據的分布相同,比如缺失值的分布也相同,不過直覺上應該影響不是很大。

3.什么樣的模型對缺失值更敏感?
樹模型對缺失值的敏感度低,大部分時候可以在數據缺失時時使用。
涉及到距離度量(distance measurement)時,如計算兩個點之間的距離,缺失數據就變得比較重要。因為涉及到"距離離"這個概念,那么缺失值處理不當就會導致效果很差,如K近鄰算法(KNN)、支持向量機(SVM)。
線性模型的代價函數(loss function)往往涉及到距離(distance)的計算,計罰篩則值和真實值之間的差別,這容易導致對缺失值敏感。
神經網絡的魯棒強,對於缺失數據不是非常敏感,但一是沒有那么多數據可供使用。
貝葉斯模型對於缺失數據也比較穩定,數據量很小的時候貝葉斯模型。
總體來看,對於有缺失值的數據在經過缺失處理后:

數據量很小,朴素貝葉斯
數據量適中或者較大,用樹橫型,優先xgboost
數據量較大,也可以用神經網絡
避免使用距離度量相關的模型,如KNN和SVM

4.xgboost 判斷特征重要程度的三種指標
get_fscore 有三種種評判特征重要程度的方法:

‘weight’ - the number of times a feature is used to split the data across all trees. ‘gain’ - the average gain of the feature when it is used in trees. ‘cover’ - the average coverage of the feature when it is used in trees.

weight - 該特征在所有樹中被用作分割樣本的特征的次數。

gain - 在所有樹中的平均增益。

cover - 在樹中使用該特征時的平均覆蓋范圍。(還不是特別明白)
————————————————


免責聲明!

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



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