PCA#
- class sklearn.decomposition.PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', n_oversamples=10, power_iteration_normalizer='auto', random_state=None)[源代码]#
主成分分析(PCA)。
使用数据的奇异值分解进行线性降维,将其投影到较低维空间。在应用奇异值分解之前,输入数据会针对每个要素对中,但不会缩放。
它根据输入数据的形状和要提取的分量的数量,使用完整的奇异值分解的LAPACK实现或Halko等人2009的方法进行随机截断的奇异值分解。
对于稀疏输入,可以使用截断的MVD的ARPACK实现(即通过
scipy.sparse.linalg.svds
).或者,人们可以考虑TruncatedSVD
数据不集中的地方。请注意,此类仅支持某些解算器的稀疏输入,例如“arpack”和“conservation_eigh”。看到
TruncatedSVD
for an alternative替代with sparse稀疏data数据.有关使用示例,请参阅 Iris数据集的主成分分析(PCA)
阅读更多的 User Guide .
- 参数:
- n_componentsint、float或' mle ',默认=无
要保留的组件数量。如果未设置n_components,则保留所有组件::
n_components == min(n_samples, n_features)
如果
n_components == 'mle'
和svd_solver == 'full'
,Minka的MLE用于猜测维度。使用n_components == 'mle'
将解释svd_solver == 'auto'
作为svd_solver == 'full'
.如果
0 < n_components < 1
和svd_solver == 'full'
,选择组件数量,以便需要解释的方差量大于n_components指定的百分比。如果
svd_solver == 'arpack'
,组件数量必须严格小于n_features和n_samples中的最小值。因此,无情况会导致::
n_components == min(n_samples, n_features) - 1
- copy布尔,默认=True
如果为False,则传递给fit的数据将被覆盖,并且运行fit(X).transform(X)不会产生预期的结果,请改用fit_transform(X)。
- whiten布尔,默认=假
When True (False by default) the
components_
vectors are multiplied by the square root of n_samples and then divided by the singular values to ensure uncorrelated outputs with unit component-wise variances.白化将从转换后的信号中删除一些信息(成分的相对方差尺度),但有时可以通过使下游估计器的数据尊重一些硬假设来提高下游估计器的预测准确性。
- svd_solver'自动'、' arpack '、' arpack '、'随机化' 默认='自动'
- “自动”:
通过默认“自动”策略选择求解器基于
X.shape
和n_components
:如果输入数据的特征少于1000个,样本数量超过10倍,则使用“concotton_eigh”解算器。否则,如果输入数据大于500 x500并且要提取的成分数量低于数据最小维度的80%,则选择更有效的“随机化”方法。否则,将计算精确的“完整”MVD,并在随后可选地进行截断。- “满”:
通过以下方式运行精确完整的DID调用标准LAPACK求解器
scipy.linalg.svd
并通过后处理选择组件- “concotton_eigh”:
预先计算协方差矩阵(在中心数据上),通常使用LAPACK对协方差矩阵运行经典的特征值分解,并通过后处理选择分量。此求解器对于n_samples >> n_features和小的n_features非常有效。然而,对于大的n_features(需要大量内存来实现协方差矩阵),它是不容易处理的。还要注意,与“完整”求解器相比,此求解器有效地将条件数加倍,因此数值稳定性较差(例如,在具有大范围奇异值的输入数据上)。
- “arpack”:
运行DDD被截断至
n_components
通过以下方式调用ARPACK求解器scipy.sparse.linalg.svds
.它要求严格0 < n_components < min(X.shape)
- “随机化”:
通过Halko等人的方法运行随机的奇异值分解
Added in version 0.18.0.
在 1.5 版本发生变更: 添加了“covariance_eigh”求解器。
- tolfloat,默认=0.0
奇异值的容差由svd_solver ==“arpack”计算。必须在范围[0.0,无限大)。
Added in version 0.18.0.
- iterated_powerint或'自动',默认='自动'
svd_solver计算的乘方法迭代次数==“随机化”。必须在范围[0,无限大)。
Added in version 0.18.0.
- n_oversamplesint,默认值=10
此参数仅在以下情况下才相关
svd_solver="randomized"
.它对应于对范围进行采样的随机载体的额外数量X
以确保适当的条件反射。看到randomized_svd
了解更多详细信息。Added in version 1.1.
- power_iteration_normalizer' Auto ',' QR ',' LU ',
随机SVD求解器的幂迭代归一化器。ARPACK未使用。看到
randomized_svd
了解更多详细信息。Added in version 1.1.
- random_stateint,RandomState实例或无,默认=无
当使用“arpack”或“随机化”解算器时使用。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .
Added in version 0.18.0.
- 属性:
- components_ndrow形状数组(n_components,n_features)
特征空间中的主要轴,代表数据中最大方差的方向。等效地,中心输入数据的右奇异向量,平行于其特征向量。组件按递减排序
explained_variance_
.- explained_variance_形状的nd数组(n_components,)
每个选定组件解释的方差量。方差估计使用
n_samples - 1
自由度。等于X的协方差矩阵的n个分量的最大特征值。
Added in version 0.18.
- explained_variance_ratio_形状的nd数组(n_components,)
每个选定成分解释的方差百分比。
如果
n_components
未设置,则存储所有分量,并且比率之和等于1.0。- singular_values_形状的nd数组(n_components,)
The singular values corresponding to each of the selected components. The singular values are equal to the 2-norms of the
n_components
variables in the lower-dimensional space.Added in version 0.19.
- mean_形状的nd数组(n_features,)
每个特征的经验平均值,从训练集估计。
等于
X.mean(axis=0)
.- n_components_int
估计的组件数量。当n_components设置为“mle”或0和1之间的数字(svd_solver ==' full ')时,该数字根据输入数据估计。否则,它等于参数n_components,或者如果n_components为无,则等于n_features和n_samples的较小值。
- n_samples_int
训练数据中的样本数。
- noise_variance_浮子
遵循Tipping和Bishop 1999年的概率PCA模型估计的噪音协方差。请参阅C的“模式识别和机器学习”。Bishop,12.2.1 p. 574或http://www.miketipping.com/papers/met-mppca.pdf。需要计算估计的数据协方差和评分样本。
等于X的协方差矩阵的(min(n_features,n_samples)- n_components)最小特征值的平均值。
- n_features_in_int
期间看到的功能数量 fit .
Added in version 0.24.
- feature_names_in_ :nd形状数组 (
n_features_in_
,)nd数组形状( Names of features seen during fit. Defined only when
X
has feature names that are all strings.Added in version 1.0.
参见
KernelPCA
核心主成分分析。
SparsePCA
稀疏主成分分析。
TruncatedSVD
使用截断的奇异值降低维度。
IncrementalPCA
增量主成分分析。
引用
对于n_components ==' mle ',此类使用以下方法: Minka, T. P.. "Automatic choice of dimensionality for PCA". In NIPS, pp. 598-604
从以下步骤实现概率PCA模型: 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. 通过score和score_samples方法。
对于svd_solver ==“arpack”,请参阅
scipy.sparse.linalg.svds
.对于svd_solver ==“随机化”,请参阅: 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. 并且还 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], [1, 1], [2, 1], [3, 2]]) >>> 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=None)[源代码]#
Fit the model with X.
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
训练数据,在哪里
n_samples
是样本数量和n_features
是功能的数量。- y忽视
忽视
- 返回:
- self对象
返回实例本身。
- fit_transform(X, y=None)[源代码]#
将模型与X匹配并对X应用降维。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
训练数据,在哪里
n_samples
是样本数量和n_features
是功能的数量。- y忽视
忽视
- 返回:
- X_new形状的nd数组(n_samples,n_components)
转变的价值观。
注意到
此方法返回一个Fortran排序的数组。要将其转换为C顺序数组,请使用'np. ascontiguousarray'。
- get_covariance()[源代码]#
使用生成模型计算数据协方差。
cov = components_.T * S**2 * components_ + sigma2 * eye(n_features)
其中S**2包含解释的方差,西格玛2包含噪音方差。- 返回:
- cov形状数组=(n_features,n_features)
估计的数据协方差。
- get_feature_names_out(input_features=None)[源代码]#
获取用于转换的输出要素名称。
输出的功能名称将以大写的类别名称为开头。例如,如果Transformer输出3个特征,则输出的特征名称为:
["class_name0", "class_name1", "class_name2"]
.- 参数:
- input_features字符串或无的类数组,默认=无
仅用于通过中看到的名称验证要素名称
fit
.
- 返回:
- feature_names_out字符串对象的nd数组
转换的功能名称。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- get_precision()[源代码]#
用生成式模型计算数据精度矩阵。
等于协方差的倒数,但为了效率而使用矩阵求逆引理计算。
- 返回:
- precision数组,形状=(n_features,n_features)
估计的数据精度。
- inverse_transform(X)[源代码]#
将数据转换回其原始空间。
换句话说,返回输入
X_original
其变换将是X。- 参数:
- X形状类似阵列(n_samples,n_components)
新数据,其中
n_samples
是样本数量和n_components
是组件的数量。
- 返回:
- X_原始阵列状形状(n_样本,n_特征)
原始数据,其中
n_samples
是样本数量和n_features
是功能的数量。
注意到
如果启用白化,inverate_transform将计算精确的逆操作,其中包括反向白化。
- score(X, y=None)[源代码]#
返回所有样本的平均log似然度。
明白了“模式识别与机器学习”作者:C。Bishop,12.2.1 p. 574或http://www.miketipping.com/papers/met-mppca.pdf
- 参数:
- X形状类似阵列(n_samples,n_features)
数据。
- y忽视
忽视
- 返回:
- ll浮子
当前模型下样本的平均log似然。
- score_samples(X)[源代码]#
返回每个样本的log似然性。
明白了“模式识别与机器学习”作者:C。Bishop,12.2.1 p. 574或http://www.miketipping.com/papers/met-mppca.pdf
- 参数:
- X形状类似阵列(n_samples,n_features)
数据。
- 返回:
- ll形状的nd数组(n_samples,)
当前模型下每个样本的log似然。
- set_output(*, transform=None)[源代码]#
设置输出容器。
看到 介绍 set_output API 了解如何使用API的示例。
- 参数:
- transform{“默认”,“pandas”,“polars”},默认=无
配置输出
transform
和fit_transform
."default"
:Transformer的默认输出格式"pandas"
:DataFrame输出"polars"
:两极输出None
:转换配置不变
Added in version 1.4:
"polars"
添加了选项。
- 返回:
- self估计器实例
估计实例。