通过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%的信息被丢失了。
下面显示上图的绘制代码:
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,)
推荐阅读