欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过PCA选择合适降维维度

程序员文章站 2022-07-16 17:34:02
...

PCA的作用有:降低特征值维度,提高了计算效率,但丢失了信息。信息在PCA中我们用方差来表示。

一、PCA参数、属性简介

1.介绍PCA方法中参数:

n_components:
  默认值为保留所有特征值维度,即不进行主成分降维
  取大于等于1的整数时,即指定我们希望降维后的维数;
  取0-1的浮点数时,即指定降维后的方差和占比,比例越大,保留的信息越多。系统会自行计算保留的维度个数。

2.介绍PCA中的属性:

components_:降维后,保留的成分。每一行代表一个主成分,各成分按方差大小排序。
explained_variance_:降维后 ,各成分的方差
explained_variance_ratio_:降维后,各成分的方差占比

二、观察 在保留不同的维度个数时的方差和

横坐标:表示保留的维度个数

纵坐标:降维后的所有成分的方差和

通过下图,我们可以发现随着降维个数的增加,方差和占比是先快速增长,然后就平稳增长了。

当降维后的维度个数为20时,所有成分的方差和为90%,即约10%的信息被丢失了。

通过PCA选择合适降维维度

下面显示上图的绘制代码:

if __name__ == '__main__':
    #获得数据,X为特征值,y为标记值
    digits=datasets.load_digits()
    X=digits.data
    y=digits.target
    pca=PCA( )
    #pca=PCA(n_components=0.9)
    pca.fit(X,y)
    ratio=pca.explained_variance_ratio_
    print("pca.components_",pca.components_.shape)
    print("pca_var_ratio",pca.explained_variance_ratio_.shape)
    #绘制图形
    plt.plot([i for i in range(X.shape[1])],
             [np.sum(ratio[:i+1]) for i in range(X.shape[1])])
    plt.xticks(np.arange(X.shape[1],step=5))
    plt.yticks(np.arange(0,1.01,0.05))
    plt.grid()
    plt.show()

三、观察验证结果的正确性

将上文中的代码

pca=PCA( )替换为pca=PCA(n_components=0.9)

观察打印结果:由64维降维至21维

pca.components_ (21, 64)
pca_var_ratio (21,)
 

 
相关标签: PCA