sklearn.decomposition.PCA

class sklearn.decomposition.PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

[源码]

主成分分析(PCA)。

利用数据的奇异值分解将其投射到较低维空间的线性降维。在应用SVD之前,输入数据是居中的,但没有针对每个特征进行缩放。

根据输入数据的形状和提取的分量的数量,它使用LAPACK实现的完整SVD或随机截断的SVD Halko et al. 2009的方法。

它也可以使用scipy.sparse。linalg ARPACK的截断SVD实现。

请注意,这个类不支持稀疏输入。请参阅TruncatedSVD了解稀疏数据的替代方法。

用户指南中阅读更多内容

参数 说明
n_components int, float, None or str
要保存的样本数量。如果没有设置n_components,则保留所有样本:
n_components == min(n_samples, n_features)
如果 n_components == 'mle' and svd_solver == 'full', 则使用Minka’s MLE 来猜测维数. 使用n_components == 'mle' 讲把 svd_solver == 'auto' 解释为 svd_solver == 'full'.
如果 0 < n_components < 1 and svd_solver == 'full', 则选择样本的数量,以便需要解释的方差量大于n_components指定的百分比。
如果 svd_solver == 'arpack', 则组件的数量必须严格小于n_features和n_samples的最小值。
因此,None case的结果是:
n_components == min(n_samples, n_features) - 1
copy bool, default=True
如果为False,传递给fit的数据将被覆盖,运行fit(X).transform(X)将不会产生预期的结果,使用fit_transform(X)代替。
whiten bool, optional (default False)
当为真(默认为假)时,components_向量乘以n_samples的平方根,然后除以奇异值,以确保输出与单位分量方差不相关。

白化将从转换信号中去除一些信息(组件的相对方差尺度),但有时可以通过使下游估计器的数据尊重一些硬连接的假设来提高其预测精度。
svd_solver str {‘auto’, ‘full’, ‘arpack’, ‘randomized’}
If auto :

根据基于X的默认策略选择求解器。shape和n_components:如果输入数据大于500x500,并且要提取的组件数量小于数据最小维数的80%,那么就启用了更有效的“随机化”方法。否则,精确的完整SVD将被计算,然后选择性地截断。
If full :
通过scipy.linalg调用标准的LAPACK求解器运行精确的全SVD。svd和选择组件的后处理
If arpack :
通过sci . sparsee .linalg.svds调用ARPACK求解器来运行截断为n_components的SVD。它严格要求0 < n_components < min(X.shape)
If randomized :
使用Halko等的方法进行随机化SVD。
tol float >= 0, optional (default .0)
svd_solver == ' arpack '计算的奇异值的容忍度。

新版本0.18.0。
iterated_power int >= 0, or ‘auto’, (default ‘auto’)
svd_solver计算的幂次法的迭代次数== ' random '。

新版本0.18.0。
random_state int, RandomState instance, default=None
svd_solver == ' arpack '或' randomver '时使用。在多个函数调用中传递可重复的结果。详见术语表

新版本0.18.0。
属性 说明
components_ array, shape (n_components, n_features)
特征空间的主轴,表示数据中方差最大的方向。样本按explained_variance_排序。
explained_variance_ array, shape (n_components,)
所选择的每个分量所解释的方差量。
等于X的协方差矩阵的n个最大特征值。

新版本0.18。
explained_variance_ratio_ array, shape (n_components,)
所选择的每个组成部分所解释的方差百分比。

如果没有设置n_components,那么将存储所有组件,并且比率的总和等于1.0。
singular_values_ array, shape (n_components,)
对应于每个选定分量的奇异值。奇异值等于低维空间中n_component变量的2-范数。

新版本为0.19。
mean_ array, shape (n_features,)
每个特征的经验平均数,从训练集估计。
等于X.mean(axis=0).
n_components_ int
估计的组件数量。当n_components设置为' mle '或0到1之间的数字(with svd_solver == ‘full’)时,该数字是从输入数据估计的。否则等于参数n_components,或者如果n_componentsNone,则等于n_featuresn_samples的较小值。
n_features_ int
训练数据中的特征数。
n_samples_ int
训练数据中的样本数。
noise_variance_ float
根据Tipping和Bishop 1999年的概率PCA模型估计的噪声协方差。参见C. Bishop的“模式识别和机器学习”,12.2.1页,574或http://www.miketipping.com/papers/met-mppca.pdf。需要计算估计数据协方差和样本评分。
等于X的协方差矩阵的最小特征值(min(n_features, n_samples) - n_components)的平均值。

另见:

参考资料:

For n_components == ‘mle’, this class uses the method of Minka, T. P. “Automatic choice of dimensionality for PCA”. In NIPS, pp. 598-604

Implements the probabilistic PCA model from: Tipping, M. E., and Bishop, C. M. (1999). “Probabilistic principal component analysis”. Journal of the Royal Statistical Society: Series B (Statistical Methodology), 61(3), 611-622. via the score and score_samples methods. See http://www.miketipping.com/papers/met-mppca.pdf

For svd_solver == ‘arpack’, refer to scipy.sparse.linalg.svds.

For svd_solver == ‘randomized’, see: Halko, N., Martinsson, P. G., and Tropp, J. A. (2011). “Finding structure with randomness: Probabilistic algorithms for constructing approximate matrix decompositions”. SIAM review, 53(2), 217-288. and also Martinsson, P. G., Rokhlin, V., and Tygert, M. (2011). “A randomized algorithm for the decomposition of matrices”. Applied and Computational Harmonic Analysis, 30(1), 47-68.

>>> import numpy as np
>>> from sklearn.decomposition import PCA
>>> X = np.array([[-1-1], [-2-1], [-3-2], [11], [21], [32]])
>>> pca = PCA(n_components=2)
>>> pca.fit(X)
PCA(n_components=2)
>>> print(pca.explained_variance_ratio_)
[0.9924... 0.0075...]
>>> print(pca.singular_values_)
[6.30061... 0.54980...]

>>>

>>> pca = PCA(n_components=2, svd_solver='full')
>>> pca.fit(X)
PCA(n_components=2, svd_solver='full')
>>> print(pca.explained_variance_ratio_)
[0.9924... 0.00755...]
>>> print(pca.singular_values_)
[6.30061... 0.54980...]

>>>

>>> pca = PCA(n_components=1, svd_solver='arpack')
>>> pca.fit(X)
PCA(n_components=1, svd_solver='arpack')
>>> print(pca.explained_variance_ratio_)
[0.99244...]
>>> print(pca.singular_values_)
[6.30061...]

方法

方法 说明
fit(X[, y]) 用X拟合模型。
fit_transform(X[, y]) 用X拟合模型,对X进行降维。
get_covariance() 用生成模型计算数据协方差。
get_params([deep]) 获取这个估计器的参数。
get_precision() 利用生成模型计算数据精度矩阵。
inverse_transform(X) 将数据转换回其原始空间。
score(X[, y]) 返回所有样本的平均对数似然值。
score_samples(X) 返回每个样本的对数似然值。
set_params(**params) 设置这个估计器的参数。
transform(X) 对X应用维数约简。
__init__(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

[源码]

初始化self. See 请参阅help(type(self))以获得准确的说明。

fit(X, y=None)

[源码]

用X拟合模型,对X进行降维。

参数 说明
X array-like, shape (n_samples, n_features)
训练向量,其中样本数量中的n_samples和n_features为feature的数量。
y Ignored
返回值 说明
X_new ndarray array of shape (n_samples, n_features_new)
转换的数组

注意:

此方法返回一个按fortran顺序排列的数组。要将其转换为c顺序数组,请使用“np. ascontinuity array”。

get_covariance()

[源码]

用生成模型计算数据协方差。

cov = components_.T * S**2 * components_ + sigma2 * eye(n_features) S**2包含被解释的方差,sigma2包含噪声方差。

返回值 说明
cov array, shape=(n_features, n_features)
数据的估计协方差。
get_params(deep=True)

[源码]

利用生成模型计算数据精度矩阵。

等于协方差的逆,但为了效率,用矩阵逆引理计算。

返回值 说明
precision **array, shape=(n_features, n_features)****
数据的估计精度。
inverse_transform(X)

[源码]

将数据转换回其原始空间。

换句话说,返回一个转换为X的输入X_original。

参数 说明
X array-like, shape (n_samples, n_components)
新数据,其中n_samples是样本的数量,n_components是组件的数量。
返回值 说明
X_original array-like, shape (n_samples, n_features)

注意:

如果启用了白化,inverse_transform将计算精确的反运算,其中包括反向白化。

score(X, y=None)

[源码]

返回所有样本的平均对数似然值。

另见:

“Pattern Recognition and Machine Learning” by C. Bishop, 12.2.1 p. 574 or http://www.miketipping.com/papers/met-mppca.pdf

参数 说明
X array-like, shape (n_samples, n_features)
数据
y None
忽略的变量。
返回值 说明书
II float
样本在当前模型下的对数似然平均数。
score_samples(X)

[源码]

返回每个样本的对数似然值。

另见:

“Pattern Recognition and Machine Learning” by C. Bishop, 12.2.1 p. 574 or http://www.miketipping.com/papers/met-mppca.pdf

参数 说明
X array-like, shape (n_samples, n_features)
数据
返回值 说明书
II array, shape (n_samples,)
样本在当前模型下的对数似然平均数。
set_params(**params)

[源码]

设置这个估计器的参数。

该方法适用于简单估计量和嵌套对象。后者具有形式为<component>_<parameter>的参数,这样就让更新嵌套对象的每个组件成为了可能。

参数 说明
**params dict
估计器参数。
返回值 说明书
self object
估计器参数。
transform(X)

[源码]

对X应用维数约简。

X被投影到之前从训练集中提取的第一个主成分上。

参数 说明
X array-like, shape (n_samples, n_features)
新数据,其中n_samples为样本数量,n_features为特征数量。
返回值 说明书
X_new array-like, shape (n_samples, n_components)

示例:

>>> import numpy as np
>>> from sklearn.decomposition import IncrementalPCA
>>> X = np.array([[-1-1], [-2-1], [-3-2], [11], [21], [32]])
>>> ipca = IncrementalPCA(n_components=2, batch_size=3)
>>> ipca.fit(X)
IncrementalPCA(batch_size=3, n_components=2)
>>> ipca.transform(X) # doctest: +SKIP