數(shù)據(jù)預(yù)處理步驟有數(shù)據(jù)清洗、數(shù)據(jù)集成、數(shù)據(jù)變換蛉顽、數(shù)據(jù)規(guī)約护姆。實際工作中不是每一步都必須矾端。
版本一:
缺失值處理
對于缺失值的處理總的來說分刪除法和插補法
(1)刪除法:刪除存在缺失值的記錄(僅當樣本量很大且缺失值記錄所占樣本比例<5%時可行)
(2)插補法:若屬性是連續(xù)的,則使用該屬性存在值的平均值去插補缺失值卵皂;若屬性是離散的秩铆,則可取該屬性的眾數(shù)來插補缺失值。
數(shù)據(jù)集成
即相當于從原始的ODS中將各個數(shù)據(jù)表盡量整合成一個一個方便查詢的表
數(shù)據(jù)規(guī)約
由于用于分析的數(shù)據(jù)集中可能包含數(shù)以百計的屬性灯变,但是其中大部分屬性可能與挖掘任務(wù)不相關(guān)殴玛,或者是冗余的,則要盡量挑選出有用的屬性添祸,這是一項困難費時的任務(wù)滚粟。
所以數(shù)據(jù)規(guī)約目標在于找到最小的屬性集,使現(xiàn)有概率分布盡可能接近使用所有屬性時的原始分布刃泌。
數(shù)據(jù)變換
數(shù)據(jù)變化是將數(shù)據(jù)由一種表現(xiàn)形式變?yōu)榱硪环N表現(xiàn)形式坦刀。常見的數(shù)據(jù)變換方式是:數(shù)據(jù)標準化愧沟、數(shù)據(jù)離散化、語義轉(zhuǎn)換鲤遥。
(1)數(shù)據(jù)標準化
分為0-1標準化和z-score標準化
(2)離散化
指將連續(xù)性數(shù)據(jù)切分為多個“段”沐寺,有些數(shù)據(jù)挖掘算法要求數(shù)據(jù)是分類屬性的形式。
(3)語義轉(zhuǎn)換
將{非常好盖奈,好混坞,一般,差钢坦,非常差}這種轉(zhuǎn)化為{1,2,3,4,5}來替代究孕。
版本二:
數(shù)據(jù)清洗包括缺失值和異常值,這里只討論缺失值爹凹。
數(shù)據(jù)集成的實現(xiàn)是將兩個數(shù)據(jù)框以關(guān)鍵字為依據(jù)厨诸,在R里用merge函數(shù)實現(xiàn),語句為merge(dataframe1, dataframe2,by=”關(guān)鍵字“”)禾酱,默認按升序排列微酬。
數(shù)據(jù)變換就是轉(zhuǎn)化成適當?shù)男问剑瑏頋M足軟件或分析理論的需要颤陶。
- 簡單函數(shù)變換
簡單函數(shù)變換用來將不具有正態(tài)分布的數(shù)據(jù)變成有正態(tài)分布的數(shù)據(jù)颗管,常用的有平方、開方滓走、取對數(shù)垦江、差分等。如在時間序列里常對數(shù)據(jù)對數(shù)或差分運算搅方,將非平穩(wěn)序列轉(zhuǎn)化成平穩(wěn)序列比吭。 - 規(guī)范化
規(guī)范化就是剔除掉變量量綱上的影響,比如:直接比較身高和體重的差異姨涡,單位的不同和取值范圍的不同讓這件事不能直接比較衩藤。 - 連續(xù)屬性離散化
將連續(xù)屬性變量轉(zhuǎn)化成分類屬性,就是連續(xù)屬性離散化绣溜,特別是某些分類算法要求數(shù)據(jù)是分類屬性,如:ID3算法娄蔼。
數(shù)據(jù)規(guī)約能夠降低無效錯誤的數(shù)據(jù)對建模的影響怖喻、縮減時間、降低存儲數(shù)據(jù)的空間岁诉。
- 屬性規(guī)約
屬性規(guī)約是尋找最小的屬性子集并確定子集概率分布接近原來數(shù)據(jù)的概率分布锚沸。
合并屬性:
將一些舊的屬性合并一個新的屬性;
逐步向前選擇:
從一個空屬性集開始涕癣,每次在原來屬性集合選一個當前最優(yōu)屬性添加到當前子集中哗蜈,一直到無法選擇最優(yōu)屬性或滿足一個約束值為止;
逐步先后選擇:
從一個空屬性集開始,每次在原來屬性集合選一個當前最差屬性并剔除當前子集中距潘,一直到無法選擇最差屬性或滿足一個約束值為止炼列;
決策樹歸納:
沒有出現(xiàn)在這個決策樹上的屬性從初始集合中刪除,獲得一個較優(yōu)的屬性子集音比;
主成份分析:
用較少的變量去解釋原始數(shù)據(jù)中大部分變量(用相關(guān)性高的變量轉(zhuǎn)化成彼此相互獨立或不相關(guān)的變量)俭尖。 - 數(shù)值規(guī)約
通過減少數(shù)據(jù)量,包括有參數(shù)和無參數(shù)方法洞翩,有參數(shù)如線性回歸和多元回歸稽犁,無參數(shù)法如直方圖、抽樣等骚亿。
一已亥、完整的處理方法
1.識別缺失數(shù)據(jù)
2.檢查導(dǎo)致數(shù)據(jù)缺失的原因
3.刪除包含缺失值的實例或用合理的數(shù)值代替(插補)缺失值
二、缺失數(shù)據(jù)的分類
1.完全隨機缺失MCAR:某變量的缺失數(shù)據(jù)與其他任何觀測或未觀測變量都不相關(guān)
2.隨機缺失MAR:某變量的缺失數(shù)據(jù)與其他觀測變量相關(guān)来屠,與它自己的未觀測值不相關(guān)
3.非隨機缺失NMAR:不屬于MCAR和MAR的情況
三虑椎、具體處理步驟
1.識別缺失值
①概念解釋
1)NA:不可得,代表缺失值(is.na())
2)NaN:不是一個數(shù)的妖,代表不可能值(is.nan())
3)Inf绣檬、-Inf:正無窮,負無窮(is.infinite())
②識別矩陣或數(shù)據(jù)框中沒有缺失值的行
install.packages(c("VIM","mice"))
data(sleep,package="VIM") #加載數(shù)據(jù)集
sleep[complete.cases(sleep),] #列出沒有缺失值的行
sleep[!complete.cases(sleep),] #列出有一個或多個缺失值的行
complete.case()只將NA和NaN識別為缺失值嫂粟,結(jié)果顯示42個實例為完整數(shù)據(jù)娇未,20個實例含一個或多個缺失值
③列表顯示缺失值
library(mice)
md.pattern(sleep)
mice包中的md.pattern()‘生成一個以矩陣或者數(shù)據(jù)框形式展示缺失值模式的表格。第一列表示個缺失值模式的實例個數(shù)星虹,最后一列表示各模式中有缺失值的變量的個數(shù)零抬,缺失值總個數(shù)等于第一列和最后一列一一對應(yīng)相乘再相加。同時最后一行給出了每個變量中缺失值的數(shù)目宽涌。即缺失值總個數(shù)也等于最后一行之和平夜。
④圖形探究缺失數(shù)據(jù)
library(VIM)
aggr(sleep,prop=FALSE,numbers=TRUE)#計數(shù)
aggr(sleep,prop=TRUE,numbers=TRUE)#比例
VIM包中的aggr()函數(shù)不僅繪制每個變量的缺失值數(shù),還繪制每個變量組合的缺失值數(shù)
⑤用相關(guān)性探索缺失值
先用指示變量替代數(shù)據(jù)集中數(shù)據(jù)卸亮,(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
再求這些指示變量之間的相關(guān)性
cor(y)
可以得出Dream和NonD常常一起缺失兼贸,相對可能性比較小的是Sleep和Dream段直。
最后求含缺失值變量和其他可觀測變量之間的關(guān)系
cor(sleep,y,use="pairwise.complete.obs")
2.理解缺失值的來由
①弄清楚幾個問題:
1)缺失數(shù)據(jù)的比例多大
2)缺失數(shù)據(jù)是否集中在少數(shù)幾個變量
3)缺失是隨機產(chǎn)生的嗎
4)缺失數(shù)據(jù)間的相關(guān)性或者與其他可觀測數(shù)據(jù)間的相關(guān)性,是否可以表明產(chǎn)生缺失值的機制
②判斷哪種統(tǒng)計方法最適合用來分析你的數(shù)據(jù):
1)如果缺失數(shù)據(jù)集中在幾個相對不太重要的變量溶诞,則可以刪除這些變量
2)如果一小部分數(shù)據(jù)隨機分布在整個數(shù)據(jù)集鸯檬,即MCAR,則可以分析數(shù)據(jù)完整的實例螺垢,仍可以得到有效結(jié)果
3)如果假定數(shù)據(jù)為MCAR或者MAR喧务,則可以應(yīng)用多重插補法來獲得有效結(jié)論
4)如果數(shù)據(jù)為NMAR赖歌,則需借助專門方法,收集新數(shù)據(jù)功茴。
3.實際處理缺失數(shù)據(jù)
①行刪除/個案刪除
當數(shù)據(jù)是MCAR時庐冯,后續(xù)樣本量的減少對統(tǒng)計檢驗效力不會造成很嚴重的影響時,行刪除法非常有用痊土。
只有每個變量都包含了有效數(shù)據(jù)值的觀測才會被保留下來肄扎,導(dǎo)致包含一個或多個缺失值的任意一行都會被刪除
當變量有較大缺失并且對研究目標影響不大時,可以使用mydata【赁酝,-p】直接刪除變量
newdata<-mydata[complete.cases(mydata),]
#等價形式
newdata<-na.omit(mydata)
#na.omit刪除含缺失值的行
②多重插補MI
當數(shù)據(jù)為MCAR或MAR時犯祠,并且缺失數(shù)據(jù)問題非常復(fù)雜時,多重插補很實用酌呆。
是一種基于重復(fù)模擬的處理缺失值的方法衡载,它將從一個包含缺失值的數(shù)據(jù)集中生成一組完整的數(shù)據(jù)集(通常是3到10)。每個模擬數(shù)據(jù)集中隙袁,缺失數(shù)據(jù)將用蒙特卡洛方法來填補痰娱。
這里我們重點學(xué)習(xí)mice包。
mice包:利用鏈式方程的多元插補菩收。具體過程:首先從一個包含缺失數(shù)據(jù)的數(shù)據(jù)框開始梨睁,返回一個包含多個(默認5個)完整數(shù)據(jù)集的對象;然后娜饵,with()函數(shù)可依次對每個完整數(shù)據(jù)集應(yīng)用統(tǒng)計模型坡贺;最后,pool()函數(shù)將這些單獨的分析結(jié)果整合為一組結(jié)果。最終模型的標準誤和p值都將準確地反映出由于缺失值和多重插補而產(chǎn)生的不確定性。
mice如何插補缺失值:通過Gibbs抽樣完成芥炭。每個缺失值由數(shù)據(jù)集中其他預(yù)測變量預(yù)測得來,該過程不斷迭代愿伴,直到所有預(yù)測值收斂。
通常過程:
library(mice)
imp <- mice(mydata, m)#mydata是待插補的數(shù)據(jù)框电湘,m默認5隔节,imp里含有m個插補數(shù)據(jù)集
fit <- with(imp, analysis)#analysis是一個表達式對象,設(shè)定應(yīng)用于m個插補數(shù)據(jù)集的統(tǒng)計分析方法
pooled <- pool(fit)#fit包含了m個單獨統(tǒng)計分析結(jié)果
summary(pooled)#pooled包含m個統(tǒng)計分析平均結(jié)果
注:還有回歸插補寂呛,回歸插補指的是將插補的變量當作因變量y怎诫,其他變量看錯自變量,利用回歸模型進行擬合昧谊,在R里使用lm回歸函數(shù)對缺失值進行插補刽虹。
③推理法
當數(shù)據(jù)存在冗余信息或者有外部信息可用時酗捌,推理法可用來恢復(fù)缺失值呢诬。
根據(jù)變量間的數(shù)學(xué)或者邏輯關(guān)系來填補或者恢復(fù)缺失數(shù)據(jù)涌哲。
④成對刪除(盡量避免使用)
cor(sleep,y,use="pairwise.complete.obs")
⑤簡單(非隨機)插補(盡量避免使用)
即用某個值(如均值,中位數(shù)或眾數(shù))來替換變量中的缺失值尚镰。
⑥總結(jié)
變量中如果有缺失值阀圾,針對缺失值有四種情況:
缺省值極少:若缺省值樣本占總數(shù)比例極高,直接舍棄狗唉,因為作為特征加入反而會引入噪聲值初烘。
非連續(xù)特征缺省值適中:如果缺值的樣本適中,而該屬性非連續(xù)值特征屬性分俯,就把NaN作為一個新類別肾筐,加入到類別特征中。
連續(xù)特征缺省值適中:如果缺值的樣本適中缸剪,考慮給定一個step吗铐,然后離散化,將NaN作為一個type加入到屬性類目中杏节。
缺省值較多:考慮利用填充的辦法進行處理唬渗。其中有均值、眾數(shù)奋渔、中位數(shù)填充镊逝;用sklearn里的RandomForest模型去擬合數(shù)據(jù)樣本訓(xùn)練模型,然后去填充缺失值嫉鲸;拉格朗日插值法撑蒜。