資料規約產生更小但保持資料完整性的新資料集。在規約後的資料集上進行資料分析和挖掘將更有效率。
機器學習領域中所謂的降維就是指採用某種對映方法,將原高維空間中的資料點對映到低維度的空間中。降維的本質是學習一個對映函式 f : x->y,其中x是原始資料點的表達,目前最多使用向量表達形式。 y是資料點對映後的低維向量表達,通常y的維度小於x的維度(當然提高維度也是可以的)。f可能是顯式的或隱式的、線性的或非線性的。
目前大部分降維演算法處理向量表達的資料,也有一些降維演算法處理高階張量表達的資料。之所以使用降維後的資料表示是因為在原始的高維空間中,包含有冗餘資訊以及噪音資訊,在實際應用例如影像識別中造成了誤差,降低了準確率;而通過降維,我們希望減少冗餘資訊所造成的誤差,提高識別(或其他應用)的精度。又或者希望通過降維演算法來尋找資料內部的本質結構特徵。
在很多演算法中,降維演算法成為了資料預處理的一部分,如PCA。事實上,有一些演算法如果沒有降維預處理,其實是很難得到很好的效果的。1
主要是介紹了PCA,還有其他降維演算法:LDA(Linear Discriminant Analysis)2,LLE (Locally Linear Embedding) 區域性線性嵌入3,拉普拉斯特徵對映4。
主成分分析–PCA
主成分分析也稱為卡爾胡寧-勒夫變換(Karhunen-Loeve Transform),是一種用於探索高維資料結構的技術。PCA通常用於高維資料集的探索與視覺化。還可以用於資料壓縮,資料預處理等。PCA可以把可能具有相關性的高維變數合成線性無關的低維變數,稱為主成分( principal components)。新的低維資料集會經可能的保留原始資料的變數。
PCA將資料投射到一個低維子空間實現降維。例如,二維資料集降維就是把點投射成一條線,資料集的每個樣本都可以用一個值表示,不需要兩個值。三維資料集可以降成二維,就是把變數對映成一個平面。一般情況下,n 維資料集可以通過對映降成k 維子空間。5
在Python中,主成分的函式位於Scikit-Learn下:sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
引數說明:
-
n_components
-
意義:PCA演算法中所要保留的主成分個數n,也即保留下來的特徵個數。
-
型別:int或者string,預設時預設為None,所有成分保留。賦值為int,比如n_components=1,將把原始資料降到一個維度。賦值為string,比如n_components=`mle`,將自動選取特徵個數n,使得滿足所要求的方差百分比。
-
-
copy
-
型別:bool,True或者False,預設時預設為True
-
意義:表示是否在執行演算法時,將原始資料複製一份。如果為True,則執行PCA演算法後,原始資料的值不會有任何改變。因為是在原始資料的副本上進行運算的。
-
-
whiten
-
型別:bool,預設時預設為False
-
意義:白化,是的每個特徵具有相同的方差。
-
栗子
from sklearn.decomposition import PCA
import numpy as np
import pandas as pd
data=np.random.randn(10,4)
pca=PCA()
pca.fit(data)
pca.components_ #返回模型的各個特徵向量
pca.explained_variance_ratio_ #返回各個成為各自的方差百分比(貢獻率)
通過計算累計貢獻率,可以確定找到一個合適的n值,比如累計達到97%時,是前3的值,那麼下一步去降維時,確定n_components=3。那麼,這3維資料佔了原始資料95%以上的資訊。6
下面,再重新建立PCA模型。
pca=PCA(3)
pca.fit(data)
low_d=pca.transform(data) #用這個方法來降低維度
pd.DataFrame(low_d).to_excel(`result.xlsx`) #儲存結果
pca.inverse_transform(low_d) #必要時,可以用這個函式來複原資料。