一直想把數據預處理的邏輯給理清楚點,在這里和大家一起分享。
一:缺失值的處理
-
刪除缺失值
這是一種很常用的策略。
缺點:如果缺失值太多,最終刪除到沒有什么數據了。那就不好辦了。
2.2 缺失值的填補
(1)均值法
根據缺失值的屬性相關系數最大的那個屬性把數據分成幾個組,然后分別計算每個組的均值,把這些均值放入到缺失的數值里面就可以了。
缺點:改變了數據的分布,還有就是有的優化問題會對方差優化,這樣會讓對方差優化問題變得不准確。
(2)隨機填補
一直感覺這個方法不好,就是隨機在那一列屬性中找個數填補到缺失值里。
缺點:不靠譜。
(3)熱卡填補法
對於一個包含缺失值的變量,熱卡填充法的做法是:在數據庫中找到一個與它最相似的對象,然后用這個相似對象的值來進行填充。不同的問題可能會選用不同的標准來對相似進行判定。最常見的是使用相關系數矩陣來確定哪個變量(如變量Y)與缺失值所在變量(如變量X)最相關。然后把所有變量按Y的取值大小進行排序。那么變量X的缺失值就可以用排在缺失值前的那個個案的數據來代替了。
缺點:太麻煩。與均值替換法相比,利用熱卡填充法插補數據后,其變量的標准差與插補前比較接近。但在回歸方程中,使用熱卡填充法容易使得回歸方程的誤差增大,參數估計變得不穩定,而且這種方法使用不便,比較耗時。
(4)最近距離決定填補法
假設現在為時間y,前一段時間為時間x,然后根據x的值去把y的值填補好。
缺點:一般就是在時間因素決定不顯著的時候,比如一天的氣溫,一般不會突然降到很低,然后第二天就升的很高。但是對時間影響比較大的,可能就不可以了。
(5)回歸填補法
假設我y屬相缺失,然后我知道x屬性,然后我用回歸方法對沒有確實的數據進行訓練模型,再把這個值得x屬性帶進去,對這個y屬性進行預測,然后填補到缺失處。
缺點:由於是根絕x屬性預測y屬性,這樣會讓屬性之間的相關性變大。這可能會影響最終模型的訓練。
(6)多重填補方法(M-試探法)
它是基於貝葉斯理論的基礎上,然后用EM算法來實現對缺失值進行處理的算法。對每一個缺失值都給M個缺失值,這樣數據集就會變成M個,然后用相同的方法對這M個樣本集進行處理,得到M個處理結果,總和這M個結果,最終得到對目標變量的估計。其實這個方法很簡單,就是我盡量多做模型,然后找出最好的,我就叫它M-試探法吧
2.3 基於距離的填補方法
1 k-最近鄰法
先根絕歐氏距離和馬氏距離函數來確定具有缺失值數據最近的k個元祖,然后將這個k個值加權(權重一般是距離的比值吧)平均來估計缺失值。
-
有序最近鄰法
這個方法是在K-最近鄰法的基礎上,根據屬性的缺失率進行排序,從缺失率最小的進行填補。這樣做的好處是講算法處理后的數據也加入到對新的缺失值的計算中,這樣即使丟了很多數據,依然會有很好的效果。在這里需要注意的是,歐式距離不考慮各個變量之間的相關性,這樣可能會使缺失值的估計不是最佳的情況,所以一般都是用馬氏距離進行最近鄰法的計算。
2.4 基於貝葉斯的方法
就是分別將缺失的屬性作為預測項,然后根據最簡單的貝葉斯方法,對這個預測項進行預測。但是這個方法有一個缺點,就是說不能把之前的預測出來的數據加入到樣本集,會丟失一些數據,會影響到預測。所以現在就是對屬性值進行重要性排序,然后把重要的先預測出來,在加入新的數據集,再用新的數據集預測第二個重要的屬性,這樣一直處理到最后為止。
二:平滑噪聲數據
暫略(等我下篇文章在總結)
三:探測異常值
首先來說說什么叫異常值。
定義:由於系統誤差,人為誤差或者固有數據的變異使得他們與總體的行為特征,結構或相關性等不一樣,這部分數據稱為異常值。
再來說說異常值檢測的作用。
應用:異常值檢測在數據挖掘中有着重要的意義,比如如果異常值是由於數據本身的變異造成的,那么對他們進行分析,就可以發現隱藏的更深層次的,潛在的,有價值的信息。例如發現金融和保險的欺詐行為,黑客入侵行為,還有就是追尋極低或者極高消費人群的消費行為,然后做出相對應的產品。
那我們如何把異常值檢查出來呢?
異常值檢測的方法:
3.1 統計學方法對異常值的檢測
(1)3σ探測方法
3σ探測方法的思想其實就是來源於切比雪夫不等式。
對於任意ε>0,有:
當時,如果總體為一般總體的時候,統計數據與平均值的離散程度可以由其標准差
反映,因此有:
。
一般所有數據中,至少有3/4(或75%)的數據位於平均數2個標准差范圍內。
所有數據中,至少有8/9(或88.9%)的數據位於平均數3個標准差范圍內。
所有數據中,至少有24/25(或96%)的數據位於平均數5個標准差范圍內。
所以如果我們一般是把超過三個離散值的數據稱之為異常值。這個方法在實際應用中很方便的使用,但是他只有在單個屬性的情況下才適用。
(2)散點圖
其實就是畫圖。把所有點都畫出來。自然異常點就出來了。形如這樣:
是不是這樣異常點一下就看出來了?當然這不就是聚類嗎。。。聚類我們之后在說,不急,哈哈。
(3)四分位數展布法
首先,我們介紹什么叫四分位數。如下圖所示:
把數據按照從小到大排序,其中25%為上四分位用FL表示,75%處為下四分位用FU表示。
計算展布為:
上截斷為:
下截斷點為:
上面的參數1.5不是絕對的,而是根據經驗,但是效果很好哦。我們把異常值定義為小於上截斷點,或者大於下截斷點的數據稱為異常值。
優點:與方差和極差相比,更加不如意受極端值的影響,且處理大規模數據效果很好。
缺點:小規模處理略顯粗糙。而且只適合單個屬相的檢測。
(4)基於分布的異常值檢測
本方法是根據統計模型或者數據分布。然后根絕這些模型對樣本集中的每個點進行不一致檢驗的方法。
不一致檢驗:零假設和備選假設。表示我的數據分布或者概率模型滿足H1,但是如果我這個值接受另外的數據模型或者概率分布H2。那么我們就認為這個數據點與總體分布不符合,是一個異常值。
下面介紹幾種方法:
1:Grubbs檢驗
步驟一:先把數據按照從小到大的順序排列x1,x2…xn。
步驟二:假設我們認為xi為異常點。計算平均值。
步驟三:計算算數平均值和標准差的估計量s。
公式為:
步驟四:計算統計量gi
計算公式為:
步驟五:將gi與查Grubbs檢驗法的臨界值表所得的g(a,n)進行比較。如果gi< g(a,n),那么則認為不存在異常值,如果大於,就認為這個點是異常值。
這樣異常值被選出來后,重復以上步驟,直到沒有異常值為止。
2:Dixon檢測方法
步驟一:先把數據按照從小到大的順序排列x1,x2…xn。
步驟二:當3時候,r大=,r小=
,
當8時候,r大=,r小=
當n時候,r大=,r小=
步驟三:將r大,r小分別與Dixon檢驗法的臨界值表得到的臨界值r(a,n)進行比較、如果r大(r小)>r(a,n),可以認為最大(最小)的值為異常值,否則就不是異常值。
3t分布檢驗方法
將懷疑是異常值的數據選出來,然后根據,然后查t分布臨界值得到臨界值t(a,n-1)。如果被挑出的數據確實為異常值的話應該滿足下式子:
。這樣異常值就確認了。
上面的一些方法只適用於單維數據。而且還必須確定其數據分布,所以不是太准確。
3.2 基於距離的異常值檢測
基於距離的定義:在樣本集S中,O是一個異常值,僅當 S中有p部分的距離大於d。可以這樣理解:
圖中與五角星1距離超過d的有三個點。。。我們就可以說他是異常點,假如閥值是2,現在2五角星的距離超過d的只有五角星一個。所以五角星2不是異常點。當然這個距離的計算還是用到馬氏距離。
優缺點:可以多維數據監測,無需估計樣本的分布,但是受參數影響嚴重。
3.3 基於偏離的異常值檢測
假設N的數據集,建立數據子集。求出子集間得相異度,然后確定異常值。
較為復雜,計算量大。不建議使用.
3.4 基於分類模型的異常值檢測
根據已有的數據,然后建立模型,得到正常的模型的特征庫,然后對新來的數據點進行判斷。從而認定其是否與整體偏離,如果偏離,那么這個就是異常值。
-
建立貝葉斯模型
-
神經網絡模型
-
分類模型
-
決策類分類
-
SVM的方法
其實這些和以前介紹的基本方法差不多。
總結:數據預處理是數據挖掘前期最重要的部分,本文對缺失數據及異常值檢測進行了總結,具體實現,還得看你在什么樣的平台上實現。這里只是提供邏輯上的思考。本花一直認為邏輯正確才能下手做事!。。。邏輯混亂,那么大腦就一直是混沌狀態。。。
祝大家元旦快樂!