缺失值處理1

數據預處理步驟有數據清洗、數據集成、數據變換、數據規(guī)約。實際工作中不是每一步都必須。

版本一:

缺失值處理
對于缺失值的處理總的來說分刪除法和插補法
(1)刪除法:刪除存在缺失值的記錄(僅當樣本量很大且缺失值記錄所占樣本比例<5%時可行)
(2)插補法:若屬性是連續(xù)的,則使用該屬性存在值的平均值去插補缺失值;若屬性是離散的,則可取該屬性的眾數來插補缺失值。
數據集成
即相當于從原始的ODS中將各個數據表盡量整合成一個一個方便查詢的表
數據規(guī)約
由于用于分析的數據集中可能包含數以百計的屬性,但是其中大部分屬性可能與挖掘任務不相關,或者是冗余的,則要盡量挑選出有用的屬性,這是一項困難費時的任務。

所以數據規(guī)約目標在于找到最小的屬性集,使現有概率分布盡可能接近使用所有屬性時的原始分布。

數據變換
數據變化是將數據由一種表現形式變?yōu)榱硪环N表現形式。常見的數據變換方式是:數據標準化、數據離散化、語義轉換。
(1)數據標準化
分為0-1標準化和z-score標準化
(2)離散化
指將連續(xù)性數據切分為多個“段”,有些數據挖掘算法要求數據是分類屬性的形式。
(3)語義轉換
將{非常好,好,一般,差,非常差}這種轉化為{1,2,3,4,5}來替代。

版本二:

數據清洗包括缺失值和異常值,這里只討論缺失值。

數據集成的實現是將兩個數據框以關鍵字為依據,在R里用merge函數實現,語句為merge(dataframe1, dataframe2,by=”關鍵字“”),默認按升序排列。

數據變換就是轉化成適當的形式,來滿足軟件或分析理論的需要。

  1. 簡單函數變換
    簡單函數變換用來將不具有正態(tài)分布的數據變成有正態(tài)分布的數據,常用的有平方、開方、取對數、差分等。如在時間序列里常對數據對數或差分運算,將非平穩(wěn)序列轉化成平穩(wěn)序列。
  2. 規(guī)范化
    規(guī)范化就是剔除掉變量量綱上的影響,比如:直接比較身高和體重的差異,單位的不同和取值范圍的不同讓這件事不能直接比較。
  3. 連續(xù)屬性離散化
    將連續(xù)屬性變量轉化成分類屬性,就是連續(xù)屬性離散化,特別是某些分類算法要求數據是分類屬性,如:ID3算法。

數據規(guī)約能夠降低無效錯誤的數據對建模的影響、縮減時間、降低存儲數據的空間。

  1. 屬性規(guī)約
    屬性規(guī)約是尋找最小的屬性子集并確定子集概率分布接近原來數據的概率分布。
    合并屬性:
    將一些舊的屬性合并一個新的屬性;
    逐步向前選擇:
    從一個空屬性集開始,每次在原來屬性集合選一個當前最優(yōu)屬性添加到當前子集中,一直到無法選擇最優(yōu)屬性或滿足一個約束值為止;
    逐步先后選擇:
    從一個空屬性集開始,每次在原來屬性集合選一個當前最差屬性并剔除當前子集中,一直到無法選擇最差屬性或滿足一個約束值為止;
    決策樹歸納:
    沒有出現在這個決策樹上的屬性從初始集合中刪除,獲得一個較優(yōu)的屬性子集;
    主成份分析:
    用較少的變量去解釋原始數據中大部分變量(用相關性高的變量轉化成彼此相互獨立或不相關的變量)。
  2. 數值規(guī)約
    通過減少數據量,包括有參數和無參數方法,有參數如線性回歸和多元回歸,無參數法如直方圖、抽樣等。

一、完整的處理方法

1.識別缺失數據
2.檢查導致數據缺失的原因
3.刪除包含缺失值的實例或用合理的數值代替(插補)缺失值

二、缺失數據的分類

1.完全隨機缺失MCAR:某變量的缺失數據與其他任何觀測或未觀測變量都不相關
2.隨機缺失MAR:某變量的缺失數據與其他觀測變量相關,與它自己的未觀測值不相關
3.非隨機缺失NMAR:不屬于MCAR和MAR的情況

三、具體處理步驟

1.識別缺失值
①概念解釋
1)NA:不可得,代表缺失值(is.na())
2)NaN:不是一個數,代表不可能值(is.nan())
3)Inf、-Inf:正無窮,負無窮(is.infinite())

②識別矩陣或數據框中沒有缺失值的行

install.packages(c("VIM","mice"))
data(sleep,package="VIM") #加載數據集
sleep[complete.cases(sleep),] #列出沒有缺失值的行
sleep[!complete.cases(sleep),] #列出有一個或多個缺失值的行

complete.case()只將NA和NaN識別為缺失值,結果顯示42個實例為完整數據,20個實例含一個或多個缺失值

③列表顯示缺失值

library(mice)
md.pattern(sleep)


mice包中的md.pattern()‘生成一個以矩陣或者數據框形式展示缺失值模式的表格。第一列表示個缺失值模式的實例個數,最后一列表示各模式中有缺失值的變量的個數,缺失值總個數等于第一列和最后一列一一對應相乘再相加。同時最后一行給出了每個變量中缺失值的數目。即缺失值總個數也等于最后一行之和。

④圖形探究缺失數據

library(VIM)
aggr(sleep,prop=FALSE,numbers=TRUE)#計數
aggr(sleep,prop=TRUE,numbers=TRUE)#比例


VIM包中的aggr()函數不僅繪制每個變量的缺失值數,還繪制每個變量組合的缺失值數

⑤用相關性探索缺失值
先用指示變量替代數據集中數據,(1表示缺失,0表示存在),即影子矩陣

head(sleep,n=5)
as.data.frame(is.na(sleep))
as.data.frame(abs(is.na(sleep)))
x=as.data.frame(abs(is.na(sleep)))
head(x,n=5)



提取含(但不全是)缺失值的變量

y<-x[which(apply(x,2,sum)>0)]
y

再求這些指示變量之間的相關性

cor(y)

可以得出Dream和NonD常常一起缺失,相對可能性比較小的是Sleep和Dream。
最后求含缺失值變量和其他可觀測變量之間的關系

cor(sleep,y,use="pairwise.complete.obs")


2.理解缺失值的來由
①弄清楚幾個問題:
1)缺失數據的比例多大
2)缺失數據是否集中在少數幾個變量
3)缺失是隨機產生的嗎
4)缺失數據間的相關性或者與其他可觀測數據間的相關性,是否可以表明產生缺失值的機制
②判斷哪種統(tǒng)計方法最適合用來分析你的數據:
1)如果缺失數據集中在幾個相對不太重要的變量,則可以刪除這些變量
2)如果一小部分數據隨機分布在整個數據集,即MCAR,則可以分析數據完整的實例,仍可以得到有效結果
3)如果假定數據為MCAR或者MAR,則可以應用多重插補法來獲得有效結論
4)如果數據為NMAR,則需借助專門方法,收集新數據。
3.實際處理缺失數據
①行刪除/個案刪除
當數據是MCAR時,后續(xù)樣本量的減少對統(tǒng)計檢驗效力不會造成很嚴重的影響時,行刪除法非常有用。
只有每個變量都包含了有效數據值的觀測才會被保留下來,導致包含一個或多個缺失值的任意一行都會被刪除
當變量有較大缺失并且對研究目標影響不大時,可以使用mydata【,-p】直接刪除變量

newdata<-mydata[complete.cases(mydata),]
#等價形式
newdata<-na.omit(mydata)
#na.omit刪除含缺失值的行

②多重插補MI
當數據為MCAR或MAR時,并且缺失數據問題非常復雜時,多重插補很實用。
是一種基于重復模擬的處理缺失值的方法,它將從一個包含缺失值的數據集中生成一組完整的數據集(通常是3到10)。每個模擬數據集中,缺失數據將用蒙特卡洛方法來填補。
這里我們重點學習mice包。
mice包:利用鏈式方程的多元插補。具體過程:首先從一個包含缺失數據的數據框開始,返回一個包含多個(默認5個)完整數據集的對象;然后,with()函數可依次對每個完整數據集應用統(tǒng)計模型;最后,pool()函數將這些單獨的分析結果整合為一組結果。最終模型的標準誤和p值都將準確地反映出由于缺失值和多重插補而產生的不確定性。
mice如何插補缺失值:通過Gibbs抽樣完成。每個缺失值由數據集中其他預測變量預測得來,該過程不斷迭代,直到所有預測值收斂。
通常過程:

library(mice)
imp <- mice(mydata, m)#mydata是待插補的數據框,m默認5,imp里含有m個插補數據集
fit <- with(imp, analysis)#analysis是一個表達式對象,設定應用于m個插補數據集的統(tǒng)計分析方法
pooled <- pool(fit)#fit包含了m個單獨統(tǒng)計分析結果
summary(pooled)#pooled包含m個統(tǒng)計分析平均結果

注:還有回歸插補,回歸插補指的是將插補的變量當作因變量y,其他變量看錯自變量,利用回歸模型進行擬合,在R里使用lm回歸函數對缺失值進行插補。
③推理法
當數據存在冗余信息或者有外部信息可用時,推理法可用來恢復缺失值。
根據變量間的數學或者邏輯關系來填補或者恢復缺失數據。
④成對刪除(盡量避免使用)

cor(sleep,y,use="pairwise.complete.obs")

⑤簡單(非隨機)插補(盡量避免使用)
即用某個值(如均值,中位數或眾數)來替換變量中的缺失值。
⑥總結
變量中如果有缺失值,針對缺失值有四種情況:
缺省值極少:若缺省值樣本占總數比例極高,直接舍棄,因為作為特征加入反而會引入噪聲值。
非連續(xù)特征缺省值適中:如果缺值的樣本適中,而該屬性非連續(xù)值特征屬性,就把NaN作為一個新類別,加入到類別特征中。
連續(xù)特征缺省值適中:如果缺值的樣本適中,考慮給定一個step,然后離散化,將NaN作為一個type加入到屬性類目中。
缺省值較多:考慮利用填充的辦法進行處理。其中有均值、眾數、中位數填充;用sklearn里的RandomForest模型去擬合數據樣本訓練模型,然后去填充缺失值;拉格朗日插值法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容

  • 一、認識缺失值 在我們的數據分析過程中,經常會碰到缺失值的情況。缺失值產生的原因很多,比如人工輸入失誤,系統(tǒng)出錯,...
    鳴人吃土豆閱讀 6,178評論 0 11
  • 前提 在數據挖掘中,海量的原始數據中存在大量不完整(有缺失值)、不一致、有異常的數據,會嚴重影響到數據挖掘建模的執(zhí)...
    神奇的考拉閱讀 2,007評論 0 3
  • 一、缺失值產生的原因 缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。機械原因是由于機械原因導致的數據收集...
    hello風一樣的男子閱讀 1,397評論 0 1
  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,067評論 6 13
  • 1. 刪除 主要有簡單刪除法和權重法。簡單刪除法是對缺失值進行處理的最原始方法。 (1) 簡單刪除法 此方法將存在...
    ZhangShiWen閱讀 1,659評論 0 2