PCA01-重要参数

源文件链接:n_components参数详解实例

重要参数n_components

n_components ,是我们降维后需要的维度,即降维后需要保留的特征数量,降维流程中第二步里需要确认的k值,一般输入[0, min(X.shape)]范围中的整数

n_estimators,这是一个需要我们人为去确认的超参数,并且我们设定的数字会影响到模型的表现。

n_components的选择

当参数n_components中不填写任何值,则默认返回min(X.shape)个特征,一般来说,样本量都会大于特征数目,所以什么都不填就相当于转换了新特征空间,但没有减少特征的个数。所有会采取一定的方式来选择这个参数

使用可解释性方差贡献率曲线

累积可解释方差贡献率曲线是一条以降维后保留的特征个数为横坐标,降维后新特征矩阵捕捉到的可解释方差贡献率为纵坐标的曲线,能够帮助我们决定n_components最好的取值。

以鸢尾花数据集为例

#使用累积可解释方差贡献率曲线
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris#鸢尾花数据集
import numpy as np
from sklearn.decomposition import PCA
#提取数据集
iris = load_iris()
y = iris.target
X = iris.data
pca_line = PCA().fit(X)
plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_))
plt.xticks([1,2,3,4]) #这是为了限制坐标轴显示为整数
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance ratio")
plt.show()

解释性方差贡献率

由上图可以看出,选择2或3个特征作为降维后的值,可以表示原数据的大部分信息

让机器自己选: 最大似然估计自选超参数

数学大神Minka, T.P.在麻省理工学院媒体实验室做研究时找出了让PCA用最大似然估计(maximum likelihood estimation)自选超参数的方法,输入“mle”作为n_components的参数输入,就可以调用这种方法。

pca_mle = PCA(n_components="mle")
pca_mle = pca_mle.fit(X)
X_mle = pca_mle.transform(X)

按信息量占比选超参数

输入[0,1]之间的浮点数,并且让参数svd_solver =='full',表示希望降维后的总解释性方差占比大于n_components指定的百分比,即是说,希望保留百分之多少的信息量。

比如说,如果我们希望保留97%的信息量,就可以输入n_components = 0.97,PCA会自动选出能够让保留的信息量超过97%的特征数量。

pca_f = PCA(n_components=0.97,svd_solver="full")
pca_f = pca_f.fit(X)
X_f = pca_f.transform(X)
pca_f.explained_variance_ratio_

PCA中的SVD

svd_solver是奇异值分解器的意思,奇异值分解可以不计算协方差矩阵等等结构复杂计算冗长的矩阵,就直接求出新特征空间和降维后的特征矩阵SVD在矩阵分解中的过程比PCA简单快速,虽然两个算法都走一样的分解流程,但SVD可以作弊耍赖直接算出V

sklearn将降维流程拆成了两部分:一部分是计算特征空间V,由奇异值分解完成(SVD),另一部分是映射数据和求解新特征矩阵,由主成分分析(PCA)完成,实现了用SVD的性质减少计算量,却让信息量的评估指标是方差

总之,通过SVD和PCA的合作,sklearn实现了一种计算更快更简单,但效果却很好的“合作降维“

X_dr(m,k)=X(m,n)*转至后的V(k,n)

上面这个公式就是PCA降维的核心

svd_solver

参数svd_solver是在降维过程中,用来控制矩阵分解的一些细节的参数。有四种模式可选:"auto", "full", "arpack","randomized",默认”auto"。

PCA(n_components=0.97,svd_solver="full")

full

适合数据量比较适中,计算时间充足的情况

arpack

可以加快运算速度,适合特征矩阵很大的时候,但一般用于特征矩阵为稀疏矩阵的情况

randomized

适合特征矩阵巨大,计算量庞大的情况。
源文件点这也ok

posted @ 2022-03-22 21:43  Brett-Xie  阅读(257)  评论(0)    收藏  举报