機器學習中資料缺失的處理及建模方法

早起的小蟲子發表於2021-01-31

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

一、缺失資料處理及建模方法

  資料缺失時,處理資料的方式有如下三種:

  (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

相關文章