Python 之 sklearn 实现 PCA 降维

关于 PCA 算法的讲解文章不胜枚举,这里主要谈一谈 基于 Python 中 sklearn 模块的 PCA 算法实现。Explained Variance 累计贡献率 又名 累计方差贡献率 不要简单理解为 解释方差,它是 PCA 降维维度的重要指标,一般选取累计贡献率在90%左右的维度作为PCA 降维的参考维度。在识别算法的实现过程中,当我们求得某一数据库各类别特征参考维度时,取最大维度作为每一类特征的维度,即可实现数据降维。现对数据求取累计贡献率,算法实现如下。

[python]  view plain  copy
  1. import numpy  
  2. from sklearn import decomposition  
  3.   
  4.   
  5. # 构造聚类 类别数据  
  6. Data_Set = []  
  7. for k in range(5):  
  8.     arr = numpy.random.random([3000,45])  
  9.     for i in numpy.arange(0,3000):  
  10.         j = i%3  
  11.         arr[i,k*9+j*3:k*9+j*3+3] = arr[i,k*9+j*3:k*9+j*3+3]+k*0.25  
  12.     print arr.shape  
  13.     Data_Set.append(arr)  
  14. Dim_Set = []  
  15. for Cat_Num in range(len(Data_Set)):  
  16.     pca = decomposition.PCA()  
  17.     pca.fit(Data_Set[Cat_Num])  
  18.     # 累计贡献率 又名 累计方差贡献率 不要简单理解为 解释方差!!!   
  19.     EV_List = pca.explained_variance_  
  20.     EVR_List = []  
  21.     for j in range(len(EV_List)):  
  22.         EVR_List.append(EV_List[j]/EV_List[0])  
  23.     for j in range(len(EVR_List)):  
  24.         if(EVR_List[j]<0.10):  
  25.             Dim = j  
  26.             break  
  27.     Dim_Set.append(Dim)  

此时,即可根据参考维度,求得亟待处理数据的降维维度。sklearn 对数据的降维实现,函数详述如下。


sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)  

参数说明:


n_components:  
类型:int 或者 string,缺省时默认为None,所有成分被保留。
赋值为int,比如n_components=1,将把原始数据降到一个维度。
赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。
意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n

copy:
类型:bool,True或者False,缺省时默认为True。
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。

whiten:
类型:bool,缺省时默认为False
意义:白化,使得每个特征具有相同的方差。

[python]  view plain  copy
  1. Dim = max(Dim_Set)  
  2. pca = decomposition.PCA(n_components=Dim, copy=True, whiten=False)   
  3. for k in range(len(Data_Set)):  
  4.     Data_Set[k] = pca.fit_transform(Data_Set[k])  

你可能感兴趣的:(机器学习)