前提
在數(shù)據(jù)挖掘中,海量的原始數(shù)據(jù)中存在大量不完整(有缺失值)肌访、不一致找默、有異常的數(shù)據(jù),會嚴重影響到數(shù)據(jù)挖掘建模的執(zhí)行效果吼驶,甚至?xí)?dǎo)致挖掘結(jié)果的偏差惩激,進而數(shù)據(jù)清洗就變得尤為重要。在數(shù)據(jù)清洗完成后接著甚至同時進行數(shù)據(jù)集成蟹演、變換风钻、規(guī)約等一系列的處理,而整個過程稱之為數(shù)據(jù)預(yù)處理酒请。在整個數(shù)據(jù)挖掘過程中骡技,數(shù)據(jù)預(yù)處理工作大致占據(jù)整個過程的60%。
一般來說羞反,數(shù)據(jù)預(yù)處理的主要包括如下內(nèi)容: 數(shù)據(jù)清洗布朦、數(shù)據(jù)集成、數(shù)據(jù)變換昼窗、數(shù)據(jù)規(guī)約是趴。
接下來的內(nèi)容,我們也是從這幾方面闡述澄惊。
數(shù)據(jù)預(yù)處理
1.1 數(shù)據(jù)清洗
數(shù)據(jù)清洗主要是刪除原始數(shù)據(jù)中的無關(guān)數(shù)據(jù)右遭、重復(fù)數(shù)據(jù)做盅、平滑噪聲數(shù)據(jù),篩選掉與挖掘主題無關(guān)的數(shù)據(jù)窘哈,處理缺失值及異常值等吹榴。
- 缺失值處理
從統(tǒng)計上說,缺失的數(shù)據(jù)可能產(chǎn)生偏估計滚婉,使得樣本數(shù)據(jù)不能很好代表總體數(shù)據(jù)集图筹。常見的缺失值的處理包括:缺失數(shù)據(jù)識別和缺失值處理兩個步驟。
注:由于R語言做數(shù)據(jù)挖掘让腹、分析相當便捷远剩,整個文章的實例都是基于R實現(xiàn)的。比如發(fā)現(xiàn)缺失值的存在:is.na(), 另外函數(shù)complete.cases()可識別樣本數(shù)據(jù)是否完整進而得出缺失情況等等
<code>
缺失數(shù)據(jù)的識別
is.na(inputfile) #判斷是否存在缺失
n=sum(is.na(inputfile)) #輸出缺失值個數(shù)
異常值識別
par(mfrow=c(1,2))#將繪圖窗口劃為1行兩列骇窍,同時顯示兩圖
dotchart(inputfile$sales)#繪制單變量散點圖
boxplot(inputfile$sales,horizontal=T)#繪制水平箱形圖
</code>
常見的缺失值處理方法: 刪除法瓜晤、替換法、插補法等
(1)腹纳、刪除法: 最簡單的缺失值處理方法痢掠。從不同角度進行數(shù)據(jù)處理劃分:
- 刪除觀測樣本 又稱為行刪除,直接移除所有含有缺失數(shù)據(jù)的行嘲恍,比較適用缺失值所占比例較小的情況
- 刪除變量 直接刪除整個變量足画,適用變量由較大的缺失且對研究目標影響不大的情況。
刪除法會存在信息浪費的問題并數(shù)據(jù)結(jié)構(gòu)會變動佃牛,致使后續(xù)得到的統(tǒng)計結(jié)果又偏差.
<code>
缺失值的處理
inputfile$date=as.numeric(inputfile$date)#將日期轉(zhuǎn)換成數(shù)值型變量
sub=which(is.na(inputfile$sales))#識別缺失值所在行數(shù)
inputfile1=inputfile[-sub,]#將數(shù)據(jù)集分成完整數(shù)據(jù)和缺失數(shù)據(jù)兩部分
inputfile2=inputfile[sub,]
行刪除法處理缺失淹辞,結(jié)果轉(zhuǎn)存
result1=inputfile1
</code>
(2)、替換法
一般根據(jù)屬性將變量分:數(shù)值型和非數(shù)值型
- 數(shù)值型:可用該變量在其他所有對象的取值的均值來替換缺失值
- 非數(shù)值型: 使用該變量其他全部有效觀測值的中位數(shù)或眾數(shù)進行替換
<code>
均值替換法處理缺失俘侠,結(jié)果轉(zhuǎn)存
avg_sales=mean(inputfile1$sales)#求變量未缺失部分的均值
inputfile2$sales=rep(avg_sales,n)#用均值替換缺失
result2=rbind(inputfile1,inputfile2)#并入完成插補的數(shù)據(jù)
</code>
(3)象缀、插補法
常見的插補法:回歸插補、多重插補等 - 回歸插補: 利用回歸模型將需要補缺的變量作為因變量爷速,其他相關(guān)變量作為自變量攻冷,通過回歸函數(shù)【比如在R中使用lm()】預(yù)測出因變量的值來對缺失變量進行補缺。
- 多重插補: 從一個包含缺失值的數(shù)據(jù)集中生成一組完整的數(shù)據(jù)遍希,如此進行多次等曼,從而產(chǎn)生缺失值的一個隨機樣本。
【注:在R中已經(jīng)提供了mice函數(shù)實現(xiàn)多重插補】
<code>
回歸插補法處理缺失凿蒜,結(jié)果轉(zhuǎn)存
model=lm(sales~date,data=inputfile1)#回歸模型擬合
inputfile2$sales=predict(model,inputfile2)#模型預(yù)測
result3=rbind(inputfile1,inputfile2)
多重插補法處理缺失禁谦,結(jié)果轉(zhuǎn)存
library(lattice) #調(diào)入函數(shù)包
library(MASS)
library(nnet)
library(mice) #前三個包是mice的基礎(chǔ)
imp=mice(inputfile,m=4) #4重插補,即生成4個無缺失數(shù)據(jù)集
fit=with(imp,lm(sales~date,data=inputfile))#選擇插補模型
pooled=pool(fit)
summary(pooled)
result4=complete(imp,action=3)#選擇第三個插補數(shù)據(jù)集作為結(jié)果
</code> - 異常值處理
前面也已經(jīng)提到異常值處理的方式废封,這里不會在舉例子州泊,只是簡單描述下在R中常見的處理:
使用dochart()、 boxplot()繪制單變量散點圖與箱形圖
1漂洋、刪除含有異常值的記錄: 直接刪除對應(yīng)的記錄
2遥皂、視為缺失值: 按照缺失值處理方法來處理
3力喷、平均值修正:用前后兩個觀測值的平均值修正該異常值
4、不處理:在異常值基礎(chǔ)上挖掘模型
1.2數(shù)據(jù)集成
在數(shù)據(jù)挖掘過程中演训,可能會存在數(shù)據(jù)分布在不同的數(shù)據(jù)源中弟孟,而這個時候需要將多個數(shù)據(jù)源合并存放在一個一致的數(shù)據(jù)存儲(如數(shù)據(jù)倉庫),整個過程稱之為數(shù)據(jù)集成样悟。
【
數(shù)據(jù)倉庫:
關(guān)于數(shù)據(jù)倉庫構(gòu)思
漫談數(shù)據(jù)倉庫之維度建模
漫談數(shù)據(jù)倉庫之拉鏈表(原理拂募、設(shè)計以及在Hive中的實現(xiàn))
】
在R中,通過將存儲在兩個數(shù)據(jù)框中的數(shù)據(jù)以關(guān)鍵字為依據(jù)窟她,以行為單位做列向合并陈症,直接通過merge()函數(shù)完成。
merge(數(shù)據(jù)框1震糖,數(shù)據(jù)框2录肯,by="關(guān)鍵字"),而合并后的新數(shù)據(jù)自動按照關(guān)鍵字取值大小升序排列吊说。不過在數(shù)據(jù)集成過程中存在表達形式不一樣论咏,導(dǎo)致不能直接完成匹配,就需要我們進行加以轉(zhuǎn)換疏叨、提煉潘靖、集成等操作穿剖。具體從如下幾方面:
(1)蚤蔓、實體識別
從不同數(shù)據(jù)源識別出現(xiàn)實世界的實體,來完成統(tǒng)一不同源的數(shù)據(jù)矛盾之處糊余。
- 同名異義
比如同是屬性ID:源A中為UserId 源B為OrderId秀又,描述不同的視聽 - 異名同義
比如源A中DetailOrderId:訂單ID 源B:OrderId 即為A.DetailOrderId = B.OrderId - 單位不一致
比如價格單位 采用不同的貨幣計量單位
實體識別承擔著檢測和解決這些沖突的任務(wù)
(2)、冗余屬性識別
- 同一屬性多次出現(xiàn)
- 同一屬性命名不一致贬芥,導(dǎo)致重復(fù)
通過整合不同源數(shù)據(jù)減少甚至避免數(shù)據(jù)冗余與不一致吐辙,提高數(shù)據(jù)挖掘的質(zhì)量和速度。
1.3數(shù)據(jù)變換
數(shù)據(jù)變換主要對數(shù)據(jù)進行規(guī)范化處理蘸劈、連續(xù)變量的離散化以及屬性屬性的構(gòu)造昏苏,將數(shù)據(jù)轉(zhuǎn)換成“適當?shù)摹毙问剑瑏頋M足挖掘任務(wù)及算法的需要威沫。
(1)贤惯、簡單函數(shù)變換
對原始數(shù)據(jù)進行某些數(shù)學(xué)函數(shù)變換,常見平方棒掠、開方孵构、取對數(shù)、差分運算等等
主要來完成不具有正態(tài)分布變換服從正態(tài)分布烟很;非平穩(wěn)序列變?yōu)槠椒€(wěn)序列等等
(2)颈墅、數(shù)據(jù)規(guī)范化
為了清除指標之間的量綱和取值范圍差異的影響蜡镶,需要進行標準化處理,將數(shù)據(jù)按照比例進行縮放恤筛,使之落入一個特定區(qū)域官还,便于進行綜合分析。
常見方法如下:
- 最小-最大規(guī)范化
也稱為離差標準化叹俏,是對原始數(shù)據(jù)的線性變換
x* = (x-min) / (max-min)
其中max:樣本數(shù)據(jù)最大值妻枕, min: 樣本數(shù)據(jù)最小值,max-min為極差
離差標準化保留了原來的數(shù)據(jù)中存在的關(guān)系粘驰,是清除量綱和數(shù)據(jù)取值范圍影響的最簡單方法屡谐。同樣它的缺點也明顯若是數(shù)集中某個數(shù)值很大,則規(guī)范化后各值會接近為0蝌数,并且將會相差不大愕掏。另外一旦超過[min,max]時,需要重新確定max和min
- 零-均值規(guī)范化
也稱為標準差標準化顶伞,處理后數(shù)據(jù)均值=0饵撑,標準差=1
x* = (x- x(均)) / σ
其中X(均)原始數(shù)據(jù)平均值,σ為原始數(shù)據(jù)的標準差
由于均值和標準差容易受離群點的影響唆貌,常常通過使用中位數(shù)M取代均值滑潘,其次使用絕對標準差取代標準差
σ* = ∑|Xi-W|,其中W為平均數(shù)或中位數(shù)
- 小數(shù)定標規(guī)范化
通過移動屬性值的小數(shù)位數(shù),將屬性映射到[-1,1],移動的小數(shù)位數(shù)取決于屬性值絕對值的最大值
x* = (x) / 10 ^ k
<code>
讀取數(shù)據(jù)
data=read.csv('./data/normalization_data.csv',he=F)
最小-最大規(guī)范化
b1=(data[,1]-min(data[,1]))/(max(data[,1])-min(data[,1]))
b2=(data[,2]-min(data[,2]))/(max(data[,2])-min(data[,2]))
b3=(data[,3]-min(data[,3]))/(max(data[,3])-min(data[,3]))
b4=(data[,4]-min(data[,4]))/(max(data[,4])-min(data[,4]))
data_scatter=cbind(b1,b2,b3,b4)
零-均值規(guī)范化
data_zscore=scale(data)
小數(shù)定標規(guī)范化
i1=ceiling(log(max(abs(data[,1])),10))#小數(shù)定標的指數(shù)
c1=data[,1]/10^i1
i2=ceiling(log(max(abs(data[,2])),10))
c2=data[,2]/10^i2
i3=ceiling(log(max(abs(data[,3])),10))
c3=data[,3]/10^i3
i4=ceiling(log(max(abs(data[,4])),10))
c4=data[,4]/10^i4
data_dot=cbind(c1,c2,c3,c4)
</code>
(3)锨咙、連續(xù)屬性離散化
在數(shù)據(jù)的取值范圍內(nèi)設(shè)定若干個離散的劃分點语卤,將取值范圍劃分為不同的離散化的區(qū)間,最后使用不同的符號或數(shù)值代表落在不同區(qū)間的數(shù)據(jù)值酪刀。
常見離散方法:
- 等寬法:均分對應(yīng)的屬性的值域
- 等頻法:相同數(shù)量的記錄放到一個區(qū)間
- 聚類(一維):采用聚類方法完成聚類粹舵,再將聚類得到簇合并到一個連續(xù)屬性并做同一標記。
<code>
等寬離散化
v1=ceiling(data[,1]*10)
等頻離散化
names(data)='f'#變量重命名
attach(data)
seq(0,length(f),length(f)/6)#等頻劃分為6組
v=sort(f)#按大小排序作為離散化依據(jù)
v2=rep(0,930)#定義新變量
for(i in 1:930) v2[i]=ifelse(f[i]<=v[155],1,
ifelse(f[i]<=v[310],2,
ifelse(f[i]<=v[465],3,
ifelse(f[i]<=v[620],4,
ifelse(f[i]<=v[775],5,6)))))
detach(data)
聚類離散化
result=kmeans(data,6)
v3=result$cluster
</code>
(4)骂倘、屬性構(gòu)造
利用已有的屬性構(gòu)造出新的屬性
(5)眼滤、小波變換(本次不進行闡述)
1.4數(shù)據(jù)規(guī)約
數(shù)據(jù)規(guī)約在大數(shù)據(jù)集上產(chǎn)生更小的且保持原數(shù)據(jù)完整性的新數(shù)據(jù)集,提升在數(shù)據(jù)集合上進行分析和挖掘的效率历涝。
意義如下:
- 降低無效诅需、錯誤數(shù)據(jù)對建模的影響,提高建模的準確性
- 少量且具有代表性的數(shù)據(jù)將大幅度縮減數(shù)據(jù)挖掘所需的時間
- 降低存儲數(shù)據(jù)的成本
常見規(guī)約
(1)荧库、屬性規(guī)約
合并屬性
逐步向前選擇
逐步向后刪除
決策樹歸納
主成分分析
(2)堰塌、數(shù)值規(guī)約
直方圖
聚類
抽樣(采樣)
參數(shù)回歸