機器學習中數據缺失的處理及建模方法


  在機器學習中建模的時候,往往面臨兩個困難,一是選擇哪個模型,二是怎樣處理數據。處於數據包括數據獲取、數據清洗和數據分析。其實對於不同的場景和不同的數據,選擇的模型也是不一樣的,本文簡單聊一聊在數據缺失的時候該怎樣選擇合適的模型。

一、缺失數據處理及建模方法

  數據缺失時,處理數據的方式有如下三種:

  (1)  若數據的特點已經知道,可以根據已知數據比較准確的得到未知數據時,可以使用預測的方式,先填補未知數據,再根據數據和場景的特點,以不存在數據缺失的方式選擇合適的模型。

  (2)  若數據量遠遠超出要研究問題的規模,而存在缺失的數據條目比較少,去掉存在缺失數據的記錄對要研究的問題不存在影響,則可以把存在缺失值的記錄去掉,然后以不存在數據缺失的方式選擇合適的模型。

  (3)  使用可以處理有缺失數據的工具包或者算法對存在缺失數據的數據集進行建模。

  方式(1)和(2)是把存在缺失數據的數據集轉換成不具有缺失值的方式進行建模,然而對於(1),預測的值並不是真實值,這還是會導致數據的不確定性,所以這種方式要慎用。對於(2),在機器學習中,數據是最寶貴的財富,所以要說數據太多了是假話,所以這種方式只是在最無奈的時候才選擇。接下來詳細講解使用工具包或者特殊算法對存在缺失值的數據集進行建模方法。

  使用工具包或者特殊的算法對存在缺失數據的數據集進行建模

  首先,要明確一點,工具包和特殊的算法也許是可以對存在缺失值的數據集進行建模的。但是工具包進行了封裝,內部的結構和實現過程是不透明的。實際上,工具包之所以可以處理有缺失值的數據集,是因為加了缺失值處理函數。要明白,工具/算法本身是不應該處理缺失值的,應該處理缺失值的是用戶。工具或者某些特殊的算法為了方便用戶的使用,提供了默認的缺失值處理函數,如果用戶沒有提供自己的缺失值處理函數,就使用工具或者算法默認的缺失值處理函數。

  常用的處理具有缺失數據的工具或者算法有兩種:(1)決策樹;(2)xgboost

  (1)  決策樹處理缺失數據

  在決策樹中,以隨機森林為例簡單說明。在隨機森林中,處理缺失值的方式如下:

  方法一(快速簡單但效果差):把數值型變量中的缺失值用對應類別中的中位數替換;把非數值型數據的缺失值使用出現次數最多的數據替換。這種處理方式快速、簡單,但是效果較差。以數值型變量為例:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1  (2)  Xgboost處理缺失數據

  Xgboost把缺失值當做稀疏矩陣來對待,本身的在節點分裂時不考慮的缺失值的數值。缺失值數據會被分到左子樹和右子樹分別計算損失,選擇較優的那一個。如果訓練中沒有數據缺失,預測時出現了數據缺失,那么默認被分類到右子樹。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

  這樣的處理方法固然巧妙,但也有風險:即我們假設了訓練數據和預測數據的分布相同,比如缺失值的分布也相同。

  使用工具處理缺失數據的優缺點

  優點:

  1、可以節省用戶的時間,快速建模;

  2、防止因用戶導入的數據集存在缺失值導致模型訓練失敗。

  缺點:

  1、工具提供的缺失值處理方法也許並不適用所有的數據,可能使模型訓練時間延長;

  2、工具提供的方法要應對的是所有可能的情況,對特殊的情形並不事最佳的選擇方案;

  3、簡單粗暴的處理模式會影響模型的結果,自動化的數據清理不可靠;

  4、用戶應該提供符合模型要求的數據,這不是算法工具庫的責任。算法工具包的默認要求就是用戶提供適合的數據,因為用戶對數據有更深刻的理解;

  5、可能會大幅度增加模型的運算時間。

二、模型選擇

  主流的機器學習模型千千萬,很難一概而論。但有一些經驗法則(rule of thumb)供參考:

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

  總結來看,對於有缺失值的數據在經過缺失值處理后:

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

 

參考:

https://www.pianshen.com/article/78051638258/

https://blog.csdn.net/jp_666/article/details/78244530


免責聲明!

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



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