缺失值的處理方法


轉載自http://blog.sina.com.cn/s/blog_670445240102v08m.html

對於數據挖掘和分析人員來說,數據准備(Data Preparation,包括數據的抽取、清洗、轉換和集成)常常占據了70%左右的工作量。而在數據准備的過程中,數據質量差又是最常見而且令人頭痛的問題。本文針對缺失值和特殊值這種數據質量問題,進行了初步介紹並推薦了一些處理方法。
值得注意的是,這里所說的缺失值,不僅包括數據庫中的NULL值,也包括用於表示數值缺失的特殊數值(比如,在系統中用-999來表示數值不存在)。如果我們僅有數據庫的數據模型,而缺乏相關說明,常常需要花費更多的精力來發現這些數值的特殊含義。而如果我們漠視這些數值的特殊性,直接拿來進行挖掘,那么很可能會得到錯誤的結論。
還有一種數值缺失的情況,是因為我們要求統計的時間窗口並非對所有數據都適合。例如,我們希望計算出“客戶在以前六個月內的最大存款余額”,對於那些建立賬戶尚不滿六個月的客戶來說,統計出來的數值與我們想要得到的就可能存在差距。
一般來說,對缺失值的填充方法有多種,用某個常數來填充常常不是一個好方法。最好建立一些模型,根據數據的分布來填充一個更恰當的數值。(例如根據其它變量對記錄進行數據分箱,然后選擇該記錄所在分箱的相應變量的均值或中位數,來填充缺失值,效果會更好一些)
造成數據缺失的原因
在各種實用的數據庫中,屬性值缺失的情況經常發全甚至是不可避免的。因此,在大多數情況下,信息系統是不完備的,或者說存在某種程度的不完備。
缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。機械原因是由於機械原因導致的數據收集或保存的失敗造成的數據缺失,比如數據存儲的失敗,存儲器損壞,機械故障導致某段時間數據未能收集(對於定時數據采集而言)。人為原因是由於人的主觀失誤、歷史局限或有意隱瞞造成的數據缺失,比如,在市場調查中被訪人拒絕透露相關問題的答案,或者回答的問題是無效的,數據錄入人員失誤漏錄了數據
造成數據缺失的原因是多方面的,主要可能有以下幾種:
1)有些信息暫時無法獲取。例如在醫療數據庫中,並非所有病人的所有臨床檢驗結果都能在給定的時間內得到,就致使一部分屬性值空缺出來。又如在申請表數據中,對某些問題的反映依賴於對其他問題的回答。
2)有些信息是被遺漏的。可能是因為輸入時認為不重要、忘記填寫了或對數據理解錯誤而遺漏,也可能是由於數據采集設備的故障、存儲介質的故障、傳輸媒體的故障、一些人為因素等原因而丟失了。
3)有些對象的某個或某些屬性是不可用的。也就是說,對於這個對象來說,該屬性值是不存在的,如一個未婚者的配偶姓名、一個兒童的固定收入狀況等。
4)有些信息(被認為)是不重要的。如一個屬性的取值與給定語境是無關的,或訓練數據庫的設計者並不在乎某個屬性的取值(稱為dont-care value)。
5)獲取這些信息的代價太大。
6)系統實時性能要求較高,即要求得到這些信息前迅速做出判斷或決策。

數據缺失機制
在對缺失數據進行處理前,了解數據缺失的機制和形式是十分必要的。將數據集中不含缺失值的變量(屬性)稱為完全變量,數據集中含有缺失值的變量稱為不完全變量,Little 和 Rubin定義了以下三種不同的數據缺失機制:
1)完全隨機缺失(Missing Completely at Random,MCAR)。數據的缺失與不完全變量以及完全變量都是無關的。
2)隨機缺失(Missing at Random,MAR)。數據的缺失僅僅依賴於完全變量。
3)非隨機、不可忽略缺失(Not Missing at Random,NMAR,or nonignorable)。不完全變量中數據的缺失依賴於不完全變量本身,這種缺失是不可忽略的。
從缺失值的所屬屬性上講,如果所有的缺失值都是同一屬性,那么這種缺失成為單值缺失,如果缺失值屬於不同的屬性,稱為任意缺失。另外對於時間序列類的數據,可能存在隨着時間的缺失,這種缺失稱為單調缺失。

空值語義
對於某個對象的屬性值未知的情況,我們稱它在該屬性的取值為空值(null value)。空值的來源有許多種,因此現實世界中的空值語義也比較復雜。總的說來,可以把空值分成以下三類:
1)不存在型空值。即無法填入的值,或稱對象在該屬性上無法取值,如一個未婚者的配偶姓名等。
2)存在型空值。即對象在該屬性上取值是存在的,但暫時無法知道。一旦對象在該屬性上的實際值被確知以后,人們就可以用相應的實際值來取代原來的空值,使信息趨於完全。存在型空值是不確定性的一種表征,該類空值的實際值在當前是未知的。但它有確定性的一面,諸如它的實際值確實存在,總是落在一個人們可以確定的區間內。一般情況下,空值是指存在型空值。
3)占位型空值。即無法確定是不存在型空值還是存在型空值,這要隨着時間的推移才能夠清楚,是最不確定的一類。這種空值除填充空位外,並不代表任何其他信息。

空值處理的重要性和復雜性
數據缺失在許多研究領域都是一個復雜的問題。對數據挖掘來說,空值的存在,造成了以下影響:首先,系統丟失了大量的有用信息;第二,系統中所表現出的不確定性更加顯著,系統中蘊涵的確定性成分更難把握;第三,包含空值的數據會使挖掘過程陷入混亂,導致不可靠的輸出。

數據挖掘算法本身更致力於避免數據過分適合所建的模型,這一特性使得它難以通過自身的算法去很好地處理不完整數據。因此,空缺的數據需要通過專門的方法進行推導、填充等,以減少數據挖掘算法與實際應用之間的差距。

空值處理方法的分析比較
處理不完備數據集的方法主要有以下三大類:
(一)刪除元組
也就是將存在遺漏信息屬性值的對象(元組,記錄)刪除,從而得到一個完備的信息表。這種方法簡單易行,在對象有多個屬性缺失值、被刪除的含缺失值的對象與信息表中的數據量相比非常小的情況下是非常有效的,類標號(假設是分類任務)缺少時通常使用。然而,這種方法卻有很大的局限性。它是以減少歷史數據來換取信息的完備,會造成資源的大量浪費,丟棄了大量隱藏在這些對象中的信息。在信息表中本來包含的對象很少的情況下,刪除少量對象就足以嚴重影響到信息表信息的客觀性和結果的正確性;當每個屬性空值的百分比變化很大時,它的性能非常差。因此,當遺漏數據所占比例較大,特別當遺漏數據非隨機分布時,這種方法可能導致數據發生偏離,從而引出錯誤的結論。
(二)數據補齊
這類方法是用一定的值去填充空值,從而使信息表完備化。通常基於統計學原理,根據決策表中其余對象取值的分布情況來對一個空值進行填充,譬如用其余屬性的平均值來進行補充等。數據挖掘中常用的有以下幾種補齊方法:
(1)人工填寫(filling manually)
由於最了解數據的還是用戶自己,因此這個方法產生數據偏離最小,可能是填充效果最好的一種。然而一般來說,該方法很費時,當數據規模很大、空值很多的時候,該方法是不可行的。
(2)特殊值填充(Treating Missing Attribute values as Special values)
將空值作為一種特殊的屬性值來處理,它不同於其他的任何屬性值。如所有的空值都用“unknown”填充。這樣將形成另一個有趣的概念,可能導致嚴重的數據偏離,一般不推薦使用。
(3)平均值填充(Mean/Mode Completer)
將信息表中的屬性分為數值屬性和非數值屬性來分別進行處理。如果空值是數值型的,就根據該屬性在其他所有對象的取值的平均值來填充該缺失的屬性值;如果空值是非數值型的,就根據統計學中的眾數原理,用該屬性在其他所有對象的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值。另外有一種與其相似的方法叫條件平均值填充法(Conditional Mean Completer)。在該方法中,缺失屬性值的補齊同樣是靠該屬性在其他對象中的取值求平均得到,但不同的是用於求平均的值並不是從信息表所有對象中取,而是從與該對象具有相同決策屬性值的對象中取得。這兩種數據的補齊方法,其基本的出發點都是一樣的,以最大概率可能的取值來補充缺失的屬性值,只是在具體方法上有一點不同。與其他方法相比,它是用現存數據的多數信息來推測缺失值。
(4)熱卡填充(Hot deck imputation,或就近補齊)
對於一個包含空值的對象,熱卡填充法在完整數據中找到一個與它最相似的對象,然后用這個相似對象的值來進行填充。不同的問題可能會選用不同的標准來對相似進行判定。該方法概念上很簡單,且利用了數據間的關系來進行空值估計。這個方法的缺點在於難以定義相似標准,主觀因素較多。
(5)K最近距離鄰法(K-means clustering)
先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據。
同均值插補的方法都屬於單值插補,不同的是,它用層次聚類模型預測缺失變量的類型,再以該類型的均值插補。假設X=(X1,X2…Xp)為信息完全的變量,Y為存在缺失值的變量,那么首先對X或其子集行聚類,然后按缺失個案所屬類來插補不同類的均值。如果在以后統計分析中還需以引入的解釋變量和Y做分析,那么這種插補方法將在模型中引入自相關,給分析造成障礙。
(6)使用所有可能的值填充(Assigning All Possible values of the Attribute)
這種方法是用空缺屬性值的所有可能的屬性取值來填充,能夠得到較好的補齊效果。但是,當數據量很大或者遺漏的屬性值較多時,其計算的代價很大,可能的測試方案很多。另有一種方法,填補遺漏屬性值的原則是一樣的,不同的只是從決策相同的對象中嘗試所有的屬性值的可能情況,而不是根據信息表中所有對象進行嘗試,這樣能夠在一定程度上減小原方法的代價。
(7)組合完整化方法(Combinatorial Completer)
這種方法是用空缺屬性值的所有可能的屬性取值來試,並從最終屬性的約簡結果中選擇最好的一個作為填補的屬性值。這是以約簡為目的的數據補齊方法,能夠得到好的約簡結果;但是,當數據量很大或者遺漏的屬性值較多時,其計算的代價很大。另一種稱為條件組合完整化方法(Conditional Combinatorial Complete),填補遺漏屬性值的原則是一樣的,不同的只是從決策相同的對象中嘗試所有的屬性值的可能情況,而不是根據信息表中所有對象進行嘗試。條件組合完整化方法能夠在一定程度上減小組合完整化方法的代價。在信息表包含不完整數據較多的情況下,可能的測試方案將巨增。
(8)回歸(Regression)
基於完整的數據集,建立回歸方程(模型)。對於包含空值的對象,將已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。當變量不是線性相關或預測變量高度相關時會導致有偏差的估計。
(9)期望值最大化方法(Expectation maximization,EM)
在缺失類型為隨機缺失的條件下,假設模型對於完整的樣本是正確的,那么通過觀測數據的邊際分布可以對未知參數進行極大似然估計(Little and Rubin)。這種方法也被稱為忽略缺失值的極大似然估計,對於極大似然的參數估計實際中常采用的計算方法是期望值最大化(Expectation Maximization,EM)。該方法比刪除個案和單值插補更有吸引力,它一個重要前提:適用於大樣本。有效樣本的數量足夠以保證ML估計值是漸近無偏的並服從正態分布。但是這種方法可能會陷入局部極值,收斂速度也不是很快,並且計算很復雜。
EM算法是一種在不完全數據情況下計算極大似然估計或者后驗分布的迭代算法。在每一迭代循環過程中交替執行兩個步驟:E步(Excepctaion step,期望步),在給定完全數據和前一次迭代所得到的參數估計的情況下計算完全數據對應的對數似然函數的條件期望;M步(Maximzation step,極大化步),用極大化對數似然函數以確定參數的值,並用於下步的迭代。算法在E步和M步之間不斷迭代直至收斂,即兩次迭代之間的參數變化小於一個預先給定的閾值時結束。該方法可能會陷入局部極值,收斂速度也不是很快,並且計算很復雜。
(10)多重填補(Multiple Imputation,MI)
多值插補的思想來源於貝葉斯估計,認為待插補的值是隨機的,它的值來自於已觀測到的值。具體實踐上通常是估計出待插補的值,然后再加上不同的噪聲,形成多組可選插補值。根據某種選擇依據,選取最合適的插補值。
多重填補方法分為三個步驟:;為每個空值產生一套可能的填補值,這些值反映了無響應模型的不確定性;每個值都被用來填補數據集中的缺失值,產生若干個完整數據集合。;每個填補數據集合都用針對完整數據集的統計方法進行統計分析。;對來自各個填補數據集的結果進行綜合,產生最終的統計推斷,這一推斷考慮到了由於數據填補而產生的不確定性。該方法將空缺值視為隨機樣本,這樣計算出來的統計推斷可能受到空缺值的不確定性的影響。該方法的計算也很復雜。
多重插補方法分為三個步驟:①為每個空值產生一套可能的插補值,這些值反映了無響應模型的不確定性;每個值都可以被用來插補數據集中的缺失值,產生若干個完整數據集合。②每個插補數據集合都用針對完整數據集的統計方法進行統計分析。③對來自各個插補數據集的結果,根據評分函數進行選擇,產生最終的插補值。
假設一組數據,包括三個變量Y1,Y2,Y3,它們的聯合分布為正態分布,將這組數據處理成三組,A組保持原始數據,B組僅缺失Y3,C組缺失Y1和Y2。在多值插補時,對A組將不進行任何處理,對B組產生Y3的一組估計值(作Y3關於Y1,Y2的回歸),對C組作產生Y1和Y2的一組成對估計值(作Y1,Y2關於Y3的回歸)。
當用多值插補時,對A組將不進行處理,對B、C組將完整的樣本隨機抽取形成為m組(m為可選擇的m組插補值),每組個案數只要能夠有效估計參數就可以了。對存在缺失值的屬性的分布作出估計,然后基於這m組觀測值,對於這m組樣本分別產生關於參數的m組估計值,給出相應的預測即,這時采用的估計方法為極大似然法,在計算機中具體的實現算法為期望最大化法(EM)。對B組估計出一組Y3的值,對C將利用 Y1,Y2,Y3它們的聯合分布為正態分布這一前提,估計出一組(Y1,Y2)。
上例中假定了Y1,Y2,Y3的聯合分布為正態分布。這個假設是人為的,但是已經通過驗證(Graham和Schafer於1999),非正態聯合分布的變量,在這個假定下仍然可以估計到很接近真實值的結果。
多重插補和貝葉斯估計的思想是一致的,但是多重插補彌補了貝葉斯估計的幾個不足。
(1)貝葉斯估計以極大似然的方法估計,極大似然的方法要求模型的形式必須准確,如果參數形式不正確,將得到錯誤得結論,即先驗分布將影響后驗分布的准確性。而多重插補所依據的是大樣本漸近完整的數據的理論,在數據挖掘中的數據量都很大,先驗分布將極小的影響結果,所以先驗分布的對結果的影響不大。
(2)貝葉斯估計僅要求知道未知參數的先驗分布,沒有利用與參數的關系。而多重插補對參數的聯合分布作出了估計,利用了參數間的相互關系。
(11)C4.5方法
通過尋找屬性間的關系來對遺失值填充。它尋找之間具有最大相關性的兩個屬性,其中沒有遺失值的一個稱為代理屬性,另一個稱為原始屬性,用代理屬性決定原始屬性中的遺失值。這種基於規則歸納的方法只能處理基數較小的名詞型屬性。
就幾種基於統計的方法而言,刪除元組法和平均值法差於hot deck、EM和MI;回歸是比較好的一種方法,但仍比不上hot deck和EM;EM缺少MI包含的不確定成分[46]。值得注意的是,這些方法直接處理的是模型參數的估計而不是空缺值預測本身。它們合適於處理無監督學習的問題,而對有監督學習來說,情況就不盡相同了。譬如,你可以刪除包含空值的對象用完整的數據集來進行訓練,但預測時你卻不能忽略包含空值的對象。另外,C4.5和使用所有可能的值填充方法也有較好的補齊效果,人工填寫和特殊值填充則是一般不推薦使用的。
補齊處理只是將未知值補以我們的主觀估計值,不一定完全符合客觀事實,在對不完備信息進行補齊處理的同時,我們或多或少地改變了原始的信息系統。而且,對空值不正確的填充往往將新的噪聲引入數據中,使挖掘任務產生錯誤的結果。因此,在許多情況下,我們還是希望在保持原始信息不發生變化的前提下對信息系統進行處理。這就是第三種方法:
(三)不處理
直接在包含空值的數據上進行數據挖掘。這類方法包括貝葉斯網絡和人工神經網絡等。
貝葉斯網絡是用來表示變量間連接概率的圖形模式,它提供了一種自然的表示因果信息的方法,用來發現數據間的潛在關系。在這個網絡中,用節點表示變量,有向邊表示變量間的依賴關系。貝葉斯網絡僅適合於對領域知識具有一定了解的情況,至少對變量間的依賴關系較清楚的情況。否則直接從數據中學習貝葉斯網的結構不但復雜性較高(隨着變量的增加,指數級增加),網絡維護代價昂貴,而且它的估計參數較多,為系統帶來了高方差,影響了它的預測精度。當在任何一個對象中的缺失值數量很大時,存在指數爆炸的危險。
人工神經網絡可以有效的對付空值,但人工神經網絡在這方面的研究還有待進一步深入展開。人工神經網絡方法在數據挖掘應用中的局限性

總結:大多數數據挖掘系統都是在數據挖掘之前的數據預處理階段采用第一、第二類方法來對空缺數據進行處理。並不存在一種處理空值的方法可以適合於任何問題。無論哪種方式填充,都無法避免主觀因素對原系統的影響,並且在空值過多的情形下將系統完備化是不可行的。從理論上來說,貝葉斯考慮了一切,但是只有當數據集較小或滿足某些條件(如多元正態分布)時完全貝葉斯分析才是可行的。而現階段人工神經網絡方法在數據挖掘中的應用仍很有限。值得一提的是,采用不精確信息處理數據的不完備性已得到了廣泛的研究。不完備數據的表達方法所依據的理論主要有可信度理論、概率論、模糊集合論、可能性理論,D-S的證據理論等。


免責聲明!

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



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