Python 之 sklearn 实现 PCA 降维

来源:互联网 发布:windows telnet服务器 编辑:程序博客网 时间:2024/06/05 08:01

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

import numpyfrom 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])


1 0
原创粉丝点击