python PCA

作者: 你的仙女本仙 | 来源:发表于2020-03-13 16:53 被阅读0次

    sklearn.decomposition.PCA参数介绍

    接下来我们主要基于sklearn.decomposition.PCA类来讲解如何使用scikit-learn进行PCA降维。PCA类基本不需要调参,一般来说,我们只需要指定要降维到的维度,或者希望降维后主成分的方差和占原始维度所有特征方差和的比例阈值就可以了。
    现在我们介绍一下sklearn.decomposition.PCA的主要参数:

    1. n_components:这个参数指定了希望PCA降维后的特征维度数目。最常用的做法是直接指定降维到的维度数目
    2. whiten:判断是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1。对于PCA降维本身来说,一般不需要白化。如果在PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。
    3. svd_solver:即指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{'auto', 'full', 'arpack', 'randomized'}。'randomized'一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。'full'则是传统意义上的SVD,使用了scipy库中的实现。'arpack'和'randomized'的适用场景类似,区别是'randomized'使用的是scikit-learn中的SVD实现,而'arpack'直接使用了scipy库的sparse SVD实现。默认是'auto',即PCA类会自己去权衡前面讲到的三种算法,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。
      除了这些输入参数外,有两个PCA类的成员值得关注。第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。
    image.png
    import matplotlib.pyplot as plt
    from sklearn.decomposition import PCA
    from sklearn import preprocessing
    import pandas as pd
    
    df = pd.read_excel("第二版表6.1.xlsx")
    array =df.values
    datamat =array[0:14,1:9]
    dataname=array[0:14,0:1]
    
    scaler = preprocessing.StandardScaler().fit(datamat)
    dataMat = scaler.transform(datamat)
    
    pca=PCA(n_components=8)#原始数据维度是8
    pca.fit(dataMat)
    
    explained_vari=pca.explained_variance_
    explained_vari_rito=pca.explained_variance_ratio_
    com=pca.components_#特征向量;返回8个主成份矩阵,可以写出主成分的具体形式
    print(explained_vari)#返回模型特征值
    print(explained_vari_rito) #返回各自方差占比 可以看见前三个组成份占比超过85%
    print(com)
    
    image.png
    from mpl_toolkits.mplot3d import Axes3D #降成3维之后绘图
    fig,ax =plt.subplots()
    pca=PCA(n_components=3)
    pca.fit(dataMat)
    
    
    plt.rcParams['font.sans-serif']=['SimHei'] #python 解决绘图中文显示问题
    plt.rcParams['axes.unicode_minus'] = False
    
    data_pca = pca.fit_transform(dataMat)
    ax = Axes3D(fig)
    for i in range(int(data_pca.size / 3)):
        team = data_pca[i]
        ax.scatter3D(team[0], team[1], team[2],label=dataname[i])
        # ax.legend()
        ax.text(team[0], team[1], team[2],dataname[i])
    plt.show()
    
    
    image.png

    相关文章

      网友评论

        本文标题:python PCA

        本文链接:https://www.haomeiwen.com/subject/jahrshtx.html