1. 程式人生 > >資料分析與挖掘之資料預處理

資料分析與挖掘之資料預處理

目錄

資料整合

簡單變換

資料整合

#資料整合
import numpy
a=numpy.array([[1,5,6],[9,4,3]])
b=numpy.array([[6,36,7],[2,3,39]])
c=numpy.concatenate((a,b))  #資料整合

簡單變換

1、資料變換的目的是將資料轉換為更方便分析的資料

2、簡單變換通常使用函式變換的方式進行,常見的函式變換包括:開方,平方,對數等;

資料規範化—標準化

資料規範化(歸一化)處理是資料探勘的一項基礎工作。不同評價指標往往具有不同的量綱,數值間的差別可能很大,不進行處理可能會影響到資料分析的結果。為了消除指標之間的量綱和取值範圍差異的影響,需要進行標準化處理,將資料按照比例進行縮放,使之落入一個特定的區域,便於進行綜合分析。如將工資收入屬性值對映到[-1, 1]或者[0, 1]內。

一、中心化(又叫零均值化)和標準化(又叫歸一化)概念及目的?

1、在迴歸問題和一些機器學習演算法中,以及訓練神經網路的過程中,通常需要對原始資料進行中心化(Zero-centered或者Mean-subtraction(subtraction表示減去))處理和標準化(Standardization或Normalization)處理。

  1. 意義:資料中心化和標準化在迴歸分析中是取消由於量綱不同、自身變異或者數值相差較大所引起的誤差;對特殊模型資料標準化,能夠加速權重引數的收斂。對資料進行中心化預處理,這樣做的目的是要增加基向量的正交性。 原理
  2. 資料標準化:是指數值減去均值,再除以標準差;
  3. 資料中心化:是指變數減去它的均值。
  4. 目的:通過中心化和標準化處理,得到均值為0,標準差為1的服從標準正態分佈的資料。

下圖中以二維資料為例:左圖表示的是原始資料;中間的是中心化後的資料,資料被移動大原點周圍;右圖將中心化後的資料除以標準差,得到為標準化的資料,可以看出每個維度上的尺度是一致的(紅色線段的長度表示尺度)。
其實,在不同的問題中,中心化和標準化有著不同的意義,

1、離差標準化(歸一化)

也叫最大最小標準化,其核心思想是把原始資料的數值線性變換到[0,1]之間,公式如下:

其中,max、min分別為樣本資料的最大值、最小值。

優點:保留源資料存在的關係,消除不同資料之間的量綱影響,方便資料比較共同處理

,比如在神經網路中,歸一化可以加快訓練網路的收斂性; 

缺點:極易受個別離群值影響,如果資料集中某個數值很大,其他各值歸一化後會接近0;此外,如果遇到超出[min,max]的值,會出現錯誤。

2、Z-score標準化(0-1標準化)

也叫標準差標準化,這種方法給予原始資料的均值(mean)和標準差(standard deviation)進行資料的標準化。經過處理的資料符合標準正態分佈,即均值為0,標準差為1。

其中μ為所有樣本資料的均值,σ為所有樣本資料的標準差。

優點:標準化是為了方便資料的下一步處理,而進行的資料縮放等變換,並不是為了方便與其他資料一同處理或比較,比如資料經過零-均值標準化後,更利於使用標準正態分佈的性質,進行處理 ;

3、小數定標規範化

該方法是通過移動特徵資料的小數位數,將其轉換到[-1,1]之間,移動的小數位由特徵值絕對值的最大值決定,公式如下:

K=log10(x的絕對值的最大值)

三種常用標準化的程式碼實現:

#匯入資料
import pymysql
import numpy as npy
import pandas as pda
import matplotlib.pylab as pyl
pyl.rcParams['font.sans-serif']=['SimHei']  # 用來正常顯示中文標籤  
pyl.rcParams['axes.unicode_minus']=False  # 用來正常顯示負號
conn=pymysql.connect(host="127.0.0.1",user="root",password="root",db="csdn")
sql="select  hits,comment from hexun"  
data=pda.read_sql(sql,conn)
#離差標準化
data2=(data-data.min())/(data.max()-data.min())
#標準差標準化
data3=(data-data.mean())/data.std()
#小數定標規範化--消除單位影響
k=npy.ceil(npy.log10(data.abs().max()))#絕對值的最大值(進1取整:1.1→2)
data4=data/10**k  

資料規範化—離散化

離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。離散化指把連續型資料切分為若干“段”,也稱bin,是資料分析中常用的手段。切分的原則有等距,等頻,優化,或根據資料特點而定。在營銷資料探勘中,離散化得到普遍採用。究其原因,有這樣幾點: ①演算法需要。例如決策樹,NaiveBayes等演算法本身不能直接使用連續型變數,連續型資料只有經離散處理後才能進入演算法引擎。這一點在使用具體軟體時可能不明顯。因為大多數資料探勘軟體內已經內建了離散化處理程式,所以從使用介面看,軟體可以接納任何形式的資料。但實際上,在運算決策樹或NaiveBayes模型前,軟體都要在後臺對資料先作預處理。 ②離散化可以有效地克服資料中隱藏的缺陷:使模型結果更加穩定。例如,資料中的極端值是影響模型效果的一個重要因素。極端值導致模型引數過高或過低,或導致模型被虛假現象“迷惑”,把原來不存在的關係作為重要模式來學習。而離散化,尤其是等距離散,可以有效地減弱極端值和異常值的影響, ③有利於對非線性關係進行診斷和描述:對連續型資料進行離散處理後,自變數和目標變數之間的關係變得清晰化。如果兩者之間是非線性關係,可以重新定義離散後變數每段的取值,如採取0,1的形式, 由一個變數派生為多個啞變數,分別確定每段和目標變數間的聯絡。這樣做,雖然減少了模型的自由度,但可以大大提高模型的靈活度。 即使在連續型自變數和目標變數之間的關係比較明確,例如可以用直線描述的情況下,對自變數進行離散處理也有若干優點。一是便於模型的解釋和使用,二是可以增加模型的區別能力。常見的正態假設是連續變數,離散化減少了對於分佈假設的依賴性,因此離散資料有時更有效。

1、等寬離散化

將連續型變數的取值範圍均勻劃成n等份,每份的間距相等。例如,客戶訂閱刊物的時間是一個連續型變數,可以從幾天到幾年。採取等距切分可以把1年以下的客戶劃分成一組,1-2年的客戶為一組,2-3年為一組..,以此類分,組距都是一年。

2、等頻率離散化

:把觀察點均勻分為n等份,每份內包含的觀察點數相同。還取上面的例子,設該雜誌訂戶共有5萬人,等頻分段需要先把訂戶按訂閱時間按順序排列,排列好後可以按5000人一組,把全部訂戶均勻分為十段。 等距和等頻在大多數情況下導致不同的結果。等距可以保持資料原有的分佈,段落越多對資料原貌保持得越好。等頻處理則把資料變換成均勻分佈,但其各段內觀察值相同這一點是等距分割作不到的。

3、優化離散

需要把自變數和目標變數聯絡起來考察。切分點是導致目標變量出現明顯變化的折點。常用的檢驗指標有卡方,資訊增益,基尼指數,或WOE(要求目標變數是兩元變數)

#連續型資料離散化
#等寬離散化
data1=data[u"hits"].copy()  #U避免變數轉換
data1=data1.fillna(data1.mean())  #缺失值均值替換
data2=data1.T  #轉置
data3=data2.values  #轉換成陣列
k=4  #等寬4份
c1=pda.cut(data3,k,labels=["低關注","一般","適中","高價值"])
#等頻率離散化
k=[0,500,1000,3000,5000,20000,data2.max()]  #等頻分層
c2=pda.cut(data3,k,labels=["低關注","一般","適中","較好","非常好","異常好 "])