关于 PCA 算法的讲解文章不胜枚举,这里主要谈一谈 基于 Python 中 sklearn 模块的 PCA 算法实现。Explained Variance 累计贡献率 又名 累计方差贡献率 不要简单理解为 解释方差,它是 PCA 降维维度的重要指标,一般选取累计贡献率在90%左右的维度作为PCA 降维的参考维度。在识别算法的实现过程中,当我们求得某一数据库各类别特征参考维度时,取最大维度作为每一类特征的维度,即可实现数据降维。现对数据求取累计贡献率,算法实现如下。
import numpy from sklearn import decomposition # 构造聚类 类别数据 Data_Set = [] for k in range(5): arr = numpy.random.random([3000,45]) for i in numpy.arange(0,3000): j = i%3 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 print arr.shape Data_Set.append(arr) Dim_Set = [] for Cat_Num in range(len(Data_Set)): pca = decomposition.PCA() pca.fit(Data_Set[Cat_Num]) # 累计贡献率 又名 累计方差贡献率 不要简单理解为 解释方差!!! EV_List = pca.explained_variance_ EVR_List = [] for j in range(len(EV_List)): EVR_List.append(EV_List[j]/EV_List[0]) for j in range(len(EVR_List)): if(EVR_List[j]<0.90): Dim = j break 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
意义:白化,使得每个特征具有相同的方差。
Dim = max(Dim_Set) pca = decomposition.PCA(n_components=Dim, copy=True, whiten=False) for k in range(len(Data_Set)): Data_Set[k] = pca.fit_transform(Data_Set[k])
版权声明:本文为博主原创文章,未经博主允许不得转载。