Python 之 sklearn 实现 PCA 降维

关于 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.10):
            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])


你可能感兴趣的:(python,pca,sklearn,variance,explained,累计贡献率)