數據規約
在大數據集上進行復雜的數據分析和挖掘需要很長時間,數據規約產生更小但保持原數據完整性的新數據集。在規約后的數據集上進行分析和挖掘將更有效率。
數據規約的意義在于:
- 降低無效、錯誤數據對建模的影響,提高建模的準確性;
- 少量且具代表性的數據將大幅縮減數據挖掘所需的時間;
- 降低存儲數據的成本。
屬性規約
屬性規約通過屬性合并來創建新屬性維數,或者直接通過刪除不相關的屬性(維)來減少數據維數,從而提高數據挖掘的效率、降低計算成本。屬性規約的目標是尋找出最小的屬性子集并確保新數據子集的概率分布盡可能地接近原來數據集的概率分布。屬性規約常用的方法如下:
逐步向前選擇、逐步向后刪除和決策樹歸納是屬于直接刪除不相關屬性(維)方法。主成分分析是一種用于連續屬性的數據降維方法,它構造了原始數據的一個正交變換,新空間的基底去除了原始空間基底下數據的相關性,只需使用少數新變量就能夠解釋原始數據中的大部分變異。在應用中,通常是選出比原始變量個數少,能解釋大部分數據中的變量的幾個新變量,即所謂主成分,來代替原始變量進行建模。
主成分分析的計算步驟如下。
1)設原始變量X1,X2,...,Xp的n次觀測數據矩陣為:
2)將數據矩陣按列進行中心標準化。為了方便,將標準化后的數據矩陣仍然記為X。
3)求相關系數矩陣R,R=(rij)p×p,rij的定義為:
其中,rij=rji,rii=1。
4)求R的特征方程det(R-λE)=0的特征根λ1≥λ2≥λp>0。
5)確定主成分個數m:
α根據實際問題確定,一般取80%。
6)計算m個相應的單位特征向量:
7)計算主成分:
在Python中,主成分分析的函數位于Scikit-Learn下:
sklearn.decomposition.PCA(n_components = None, copy = True, whiten = False)
參數說明:
(1)n_components
意義:PCA算法中所要保留的主成分個數n,也即保留下來的特征個數n。
類型:int或者string,缺省時默認為None,所有成分被保留。賦值為int,比如n_components=1,將把原始數據降到一個維度。賦值為string,比如n_components='mle',將自動選取特征個數n,使得滿足所要求的的方差百分比。
(2)copy
類型:bool,True或者False,缺省時默認為True。
意義:表示是否在運行算法時,將原始訓練數據復制一份。若為True,則運行PCA算法,原始訓練數據的值不會有任何改變,因為是在原始數據的副本上進行運算;若為False,則運算PCA算法后,原始訓練數據的值會改,因為是在原始數據上進行降維計算。
(3)whiten
類型:bool,缺省時默認為False。
意義:白化,使得每個特征具有相同的方差。
使用主成分分析降維的程序如下所示:
import pandas as pd
# 參數初始化
inputfile = 'data/principal_component.xls'
outputfile = 'tmp/dimention_reducted.xls' # 降維后的數據
data = pd.read_excel(inputfile, header = None) # 讀入數據
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(data)
pca.components_ # 返回模型的各個特征向量
pca.explained_variance_ratio_ # 返回各個成分各自的方差百分比
運行代碼,得到如下結果:
從上面的結果可以得到特征方程det(R-λE)=0有7個特征根、對應的7個單位向量以及各個成分各自的方差百分比(也稱為貢獻率)。其中,方差百分比越大,說明向量的權重越大。
當選取前4個主成分時,累計貢獻率已達到97.37%,說明選取前3個主成分進行計算已經相當不錯了,因此可以重新建立PCA模型,設置n_components=3,計算出成分結果。
pca = PCA(3)
pca.fit(data)
low_d = pca.transform(data) # 用它來降低維度
pd.DataFrame(low_d).to_excel(outputfile) # 保存結果
pca.inverse_transform(low_d) # 必要時可以用inverse_transform()函數來復原數據
降維結果如下:
原始數據從8維被降維到了3維,同時這3維數據占了原始數據95%以上的信息。
數據規約
數據規約指通過選擇替代的、較小的數據來減少數據量,包括有參數方法和無參數方法兩類。有參數方法是使用一個模型來評估數據,只需存放參數,而不需要存放實際數據,例如回歸(線性回歸和多元回歸)和對數線性模型(近似離散屬性集中的多維概率分布)。無參數方法就需要存放實際數據,例如直方圖、聚類、抽樣(采樣)。
(1)直方圖
直方圖使用分箱來近似數據分布,是一種流行的數據規約形式。屬性A的直方圖將A的數據分布劃分為不相交的子集或桶。如果每個桶只代表單個屬性值/頻率對,則該桶稱為單桶。通常,桶表示給定屬性的一個連續區間。
(2)聚類
聚類技術將數據元組(即記錄,數據表中的一行)視為對象。它將對象劃分為簇,使一個簇的對象相互“相似”,而與其他簇中的對象“相異”。在數據規約中,用數據的簇替換實際數據。該技術的有效性依賴于簇的定義是否符合數據的分布性質。
(3)抽樣
抽樣也是一種數據規約技術,它用比原始數據小得多的隨機樣本(子集)表示原始數據集。假定原始數據集D包含N個元組,可以采用抽樣方法對D進行抽樣。常用的抽樣方法:
s個樣本無放回簡單隨機抽樣:從D的N個元組中抽取s個樣本(s<N),其中D中任意元組被抽取的概率均為1/N,即所有元組的抽取是等可能的。
s個樣本有放回簡單隨機抽樣:該方法類似于無放回簡單隨機抽樣,不同在于每次一個元組從D中抽取后,記錄它,然后放回原處。
聚類抽樣:如果D中的元組分組放入M個互不相交的“簇”,則可以得到s個簇的簡單隨機抽樣,其中s<M。例如,數據庫中元組通常一次檢索一頁,這樣每頁就可以視為一個簇。
分層抽樣:如果D劃分成互不相交的部分,稱作層,則通過對每一層的簡單隨機抽樣就可以得到D的分層樣本。例如,可以得到關于顧客數據的一個分層樣本,按照顧客的每個年齡組創建分層。
用于數據規約時,抽樣最常用來估計聚集查詢的結果。在制定的誤差范圍內,可以確定(使用中心極限定理)估計一個給定的函數所需的樣本大小。通常樣本的大小s相對于N非常小。而通過簡單地增加樣本大小,這樣的集合可以進一步求精。
(4)參數回歸
簡單線性模型和對數線性模型可以用來近似描述給定的數據。(簡單)線性模型對數據建模,使之擬合一條直線。一下介紹一個簡單線性模型的例子,對對數線性模型只進行簡單介紹。
把點對(2,5),(3,7),(4,9),(5,12),(6,11),(7,15),(8,18),(9,19),(11,22),(12,25),(13,24),(15,30),(17,35)規約成線性函數y=wx+b
。即擬合函數y=2x+1.3
線上對應的點可以近似看作已知點。
其中,
y
的方差是常量13.44。在數據挖掘中,x
和y
是數值屬性。系數2和1.3(稱作回歸系數)分別位直線的斜率和y軸截距。系數可以用最小二乘方法求解,它使數據的實際直線與估計直線之間的誤差最小化。多元線性回歸是(簡單)線性回歸的擴充,運行響應變量y
建模為兩個或多個預測變量的線性函數。對線性模型:用來描述期望頻數與協變量(指因變量有線性相關并在探討自變量與因變量關系時通過統計技術加以控制的變量)之間的關系。考慮期望頻數m取值在0到正無窮之間,故需要進行對數變換為
f(m)=lnm
,使它的取值在-∞與∞之間。對數線性模型:
對數線性模型一般用來近似離散的多維概率分布。在一個n元組的集合中,每個元組可以看作是n維空間中的一個點。可以使用對數線性模型基于維組合的一個較小子集,估計離散化的屬性集的多維空間中每個點的概率,這使得高位數據空間可以由較低維空間構造。因此,對數線性模型也可以用于維規約(由于低維空間的點通常比原來的數據點占據較少的空間)和數據光滑(因為與較高維空間的估計相比,較低維空間的聚集估計較少受抽樣方法影響)。