數據預處理步驟有數據清洗、數據集成、數據變換、數據規(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=”關鍵字“”),默認按升序排列。
數據變換就是轉化成適當的形式,來滿足軟件或分析理論的需要。
- 簡單函數變換
簡單函數變換用來將不具有正態(tài)分布的數據變成有正態(tài)分布的數據,常用的有平方、開方、取對數、差分等。如在時間序列里常對數據對數或差分運算,將非平穩(wěn)序列轉化成平穩(wěn)序列。 - 規(guī)范化
規(guī)范化就是剔除掉變量量綱上的影響,比如:直接比較身高和體重的差異,單位的不同和取值范圍的不同讓這件事不能直接比較。 - 連續(xù)屬性離散化
將連續(xù)屬性變量轉化成分類屬性,就是連續(xù)屬性離散化,特別是某些分類算法要求數據是分類屬性,如:ID3算法。
數據規(guī)約能夠降低無效錯誤的數據對建模的影響、縮減時間、降低存儲數據的空間。
- 屬性規(guī)約
屬性規(guī)約是尋找最小的屬性子集并確定子集概率分布接近原來數據的概率分布。
合并屬性:
將一些舊的屬性合并一個新的屬性;
逐步向前選擇:
從一個空屬性集開始,每次在原來屬性集合選一個當前最優(yōu)屬性添加到當前子集中,一直到無法選擇最優(yōu)屬性或滿足一個約束值為止;
逐步先后選擇:
從一個空屬性集開始,每次在原來屬性集合選一個當前最差屬性并剔除當前子集中,一直到無法選擇最差屬性或滿足一個約束值為止;
決策樹歸納:
沒有出現在這個決策樹上的屬性從初始集合中刪除,獲得一個較優(yōu)的屬性子集;
主成份分析:
用較少的變量去解釋原始數據中大部分變量(用相關性高的變量轉化成彼此相互獨立或不相關的變量)。 - 數值規(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模型去擬合數據樣本訓練模型,然后去填充缺失值;拉格朗日插值法。