上一篇文章中,以鸢尾花数据集分类问题为例,实现了PCA降维后的分类和可视化,本节继续介绍PCA的属性和参数,并介绍如何通过探索属性返回值,找到合适的参数。
0、加载数据集
from sklearn.datasets import load_iris from sklearn.decomposition import PCA import pandas as pd iris = load_iris() x = iris.data y = iris.target
1、属性探索
# PCA(n_components=None) 默认取样本数量和特征数量的最小值 pca = PCA().fit(x) # 查看降维后,每个特征向量上信息量的大小(方差大小) print(pca.explained_variance_) # 查看降维后,每个特征向量信息量占原信息量的百分比 # 也可解释为方差贡献率 print(pca.explained_variance_ratio_)
2、绘制方差贡献率曲线
由图可以得出n=2时,累计信息量就已经接近98%,可以确定PAC()最佳n值为2
import matplotlib.pyplot as plt import numpy as np ratios = pca.explained_variance_ratio_ plt.plot(range(1,len(ratios)+1), np.cumsum(ratios)) plt.xticks(range(1,len(ratios)+1)) plt.show()
3、最大似然估计自选超参数
除了以上绘制方差贡献率曲线确定最佳n值外,PCA类还可以传递最大似然估计自选超参数。
pca_mle = PCA(n_components="mle") pca_mle.fit(x) x_dr = pca_mle.transform(x) # mle为我们选择了三个特征 print(x_dr.shape) #(150, 3) # 0.994,得到了比设定两个特征时更高的信息量 print(pca_mle.explained_variance_ratio_.sum())
4、按信息量占比选超参数
出入[0,1]范围内的浮点数,并且让参数svd_solver='full',表示希望降维后的总解释性方差占比大于n_components的值。
pca_f = PCA(0.97, svd_solver='full') pca_f.fit(x) x_dr = pca_f.transform(x) # 0.977 (150,2) 最终保留两个综合特征,就达到了97%以上的信息量 print(pca_f.explained_variance_ratio_.sum()) print(x_dr.shape)
本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/275
- 下一篇:
- 数据结构之栈与括号匹配问题