当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn PCA用法及代码示例


本文简要介绍python语言中 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 之前,输入数据居中,但未针对每个特征进行缩放。

它使用完整 SVD 的 LAPACK 实现或通过 Halko 等人的方法随机截断的 SVD。 2009,取决于输入数据的形状和要提取的组件数量。

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

请注意,此类不支持稀疏输入。有关稀疏数据的替代方案,请参见 TruncatedSVD

在用户指南中阅读更多信息。

参数

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 < 1svd_solver == 'full' ,选择分量数,使得需要解释的方差量大于 n_components 指定的百分比。

如果 svd_solver == 'arpack' ,组件的数量必须严格小于 n_features 和 n_samples 的最小值。

因此, None 情况导致:

n_components == min(n_samples, n_features) - 1
copy布尔,默认=真

如果为 False,传递给 fit 的数据将被覆盖并且运行 fit(X).transform(X) 不会产生预期的结果,请改用 fit_transform(X)。

whiten布尔,默认=假

当为 True(默认为 False)时,components_ 向量乘以 n_samples 的平方根,然后除以奇异值,以确保输出与单位 component-wise 方差不相关。

白化将从转换后的信号中删除一些信息(分量的相对方差尺度),但有时可以通过使下游估计器的数据尊重一些hard-wired假设来提高下游估计器的预测准确性。

svd_solver{‘auto’, ‘full’, ‘arpack’, ‘randomized’},默认='自动'
如果自动:

求解器由基于 X.shapen_components 的默认策略选择:如果输入数据大于 500x500 并且要提取的组件数低于数据最小维度的 80%,则效率更高‘randomized’ 方法已启用。否则,将计算精确的完整 SVD,然后可以选择截断。

如果满了:

通过scipy.linalg.svd调用标准LAPACK求解器运行精确的完整SVD并通过后处理选择组件

如果是 arpack:

运行 SVD 被截断为 n_components 通过 scipy.sparse.linalg.svds 调用 ARPACK 求解器。它严格要求 0 < n_components < min(X.shape)

如果随机:

通过 Halko 等人的方法运行随机 SVD。

tol浮点数,默认=0.0

由 svd_solver == ‘arpack’ 计算的奇异值的容差。必须在 [0.0, 无穷大) 范围内。

iterated_powerint 或 ‘auto’,默认='auto'

由svd_solver == ‘randomized’ 计算的幂方法的迭代次数。必须在 [0, 无穷大) 范围内。

random_stateint、RandomState 实例或无,默认=无

当使用 ‘arpack’ 或 ‘randomized’ 求解器时使用。传递 int 以获得跨多个函数调用的可重现结果。请参阅术语表。

属性

components_ndarray 形状(n_components,n_features)

特征空间中的主轴,表示数据中最大方差的方向。等效地,居中输入数据的右奇异向量与其特征向量平行。组件按 explained_variance_ 排序。

explained_variance_ndarray 形状 (n_components,)

每个选定组件解释的方差量。方差估计使用n_samples - 1 自由度。

等于 X 的协方差矩阵的 n_components 个最大特征值。

explained_variance_ratio_ndarray 形状 (n_components,)

每个选定组件解释的方差百分比。

如果未设置n_components,则存储所有分量并且比率之和等于 1.0。

singular_values_ndarray 形状 (n_components,)

对应于每个选定组件的奇异值。奇异值等于 lower-dimensional 空间中 n_components 变量的 2 范数。

mean_ndarray 形状 (n_features,)

Per-feature 经验平均值,根据训练集估计。

等于 X.mean(axis=0)

n_components_int

组件的估计数量。当 n_components 设置为 ‘mle’ 或 0 到 1 之间的数字(svd_solver == ‘full’)时,此数字是根据输入数据估算的。否则,它等于参数 n_components,或者如果 n_components 为 None,则等于 n_features 和 n_samples 的较小值。

n_features_int

训练数据中的特征数。

n_samples_int

训练数据中的样本数。

noise_variance_浮点数

根据 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) 个最小特征值的平均值。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

参考

对于 n_components == ‘mle’,此类使用以下方法:Minka, T. P..“PCA 维度的自动选择”。在 NIPS,第 598-604 页

从以下位置实现概率 PCA 模型:Tipping, M. E. 和 Bishop, C. M. (1999)。 “概率主成分分析”。皇家统计学会杂志:B 系列(统计方法),61(3),611-622。通过 score 和 score_samples 方法。

对于svd_solver == ‘arpack’,请参阅scipy.sparse.linalg.svds

对于svd_solver == ‘randomized’,请参见:Halko, N.、Martinsson, P. G. 和 Tropp, J. A. (2011)。 “寻找具有随机性的结构:构造近似矩阵分解的概率算法”。暹罗评论,53(2),217-288。并且Martinsson, P. G.、Rokhlin, V. 和 Tygert, M. (2011)。 “矩阵分解的随机算法”。应用和计算谐波分析,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...]

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.decomposition.PCA。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。