增量主成分分析#

class sklearn.decomposition.IncrementalPCA(n_components=None, *, whiten=False, copy=True, batch_size=None)[source]#

增量主成分分析 (IPCA)。

使用数据的奇异值分解进行线性降维,只保留最重要的奇异向量将数据投影到低维空间。在应用奇异值分解之前,输入数据针对每个特征进行中心化,但不进行缩放。

根据输入数据的大小,此算法比 PCA 更节省内存,并允许稀疏输入。

此算法具有恒定的内存复杂度,约为 batch_size * n_features,从而可以使用 np.memmap 文件而无需将整个文件加载到内存中。对于稀疏矩阵,输入将分批转换为密集矩阵(以便能够减去均值),这避免了同时存储整个密集矩阵。

每次 SVD 的计算开销为 O(batch_size * n_features ** 2),但一次仅保留 2 * batch_size 个样本在内存中。将会有 n_samples / batch_size 次 SVD 计算来获取主成分,而 PCA 的一次大型 SVD 计算复杂度为 O(n_samples * n_features ** 2)

有关使用方法示例,请参见 增量 PCA

用户指南 中了解更多信息。

在 0.16 版本中添加。

参数:
n_componentsint,默认值=None

要保留的成分数量。如果 n_componentsNone,则 n_components 设置为 min(n_samples, n_features)

whitenbool,默认值=False

当为 True(默认为 False)时,components_ 向量将除以 n_samples 乘以 components_,以确保具有单位分量方差的输出不相关。

白化会去除变换信号中的一些信息(成分的相对方差尺度),但有时可以通过使数据符合某些硬编码假设来提高下游估计器的预测精度。

copybool,默认值=True

如果为 False,则将覆盖 X。 copy=False 可用于节省内存,但在一般情况下不安全。

batch_sizeint,默认值=None

每次批次使用的样本数量。仅在调用 fit 时使用。如果 batch_sizeNone,则 batch_size 从数据中推断,并设置为 5 * n_features,以在逼近精度和内存消耗之间取得平衡。

属性:
components_形状为 (n_components, n_features) 的 ndarray

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

explained_variance_形状为 (n_components,) 的 ndarray

每个选定成分解释的方差。

explained_variance_ratio_形状为 (n_components,) 的 ndarray

每个选定成分解释的方差百分比。如果存储所有成分,则解释方差的总和等于 1.0。

singular_values_形状为 (n_components,) 的 ndarray

与每个选定成分对应的奇异值。奇异值等于低维空间中 n_components 个变量的 2 范数。

mean_形状为 (n_features,) 的 ndarray

每个特征的经验均值,在对 partial_fit 的调用中进行汇总。

var_形状为 (n_features,) 的 ndarray

每个特征的经验方差,在对 partial_fit 的调用中进行汇总。

noise_variance_float

根据 Tipping 和 Bishop 1999 年的概率 PCA 模型估计的噪声协方差。参见 C. Bishop 的“模式识别和机器学习”12.2.1 页 574 或 http://www.miketipping.com/papers/met-mppca.pdf

n_components_int

估计的成分数量。当 n_components=None 时相关。

n_samples_seen_int

估计器处理的样本数量。将在对 fit 的新调用时重置,但在 partial_fit 调用中会递增。

batch_size_int

batch_size 推断的批次大小。

n_features_in_int

拟合 期间看到的特征数量。

在 0.24 版本中添加。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

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

在 1.0 版本中添加。

另请参见

PCA

主成分分析 (PCA)。

KernelPCA

核主成分分析 (KPCA)。

SparsePCA

稀疏主成分分析 (SparsePCA)。

TruncatedSVD

使用截断 SVD 的降维。

备注

实现了以下增量 PCA 模型:D. Ross、J. Lim、R. Lin、M. Yang,《用于鲁棒视觉跟踪的增量学习》,《国际计算机视觉杂志》,第 77 卷,第 1-3 期,第 125-141 页,2008 年 5 月。参见 https://www.cs.toronto.edu/~dross/ivt/RossLimLinYang_ijcv.pdf

此模型是来自以下内容的顺序 Karhunen-Loeve 变换的扩展:A. Levy 和 M. Lindenbaum,《顺序 Karhunen-Loeve 基提取及其在图像中的应用》,《IEEE 图像处理汇刊》,第 9 卷,第 8 期,第 1371-1374 页,2000 年 8 月。

我们特别避免了这两篇论文的作者使用的一种优化方法,即在特定情况下用于降低 SVD 算法复杂度的 QR 分解。此技术的来源是《矩阵计算》,第三版,G. Holub 和 C. Van Loan,第 5 章,第 5.4.4 节,第 252-253 页。。省略此技术是因为它仅在分解具有 n_samples(行)>= 5/3 * n_features(列)的矩阵时才有效,并且会影响已实现算法的可读性。如果认为必要,这将是未来优化的一个好机会。

参考文献

D. Ross、J. Lim、R. Lin、M. Yang。《用于鲁棒视觉跟踪的增量学习》,《国际计算机视觉杂志》,第 77 卷,第 1-3 期,第 125-141 页,2008 年 5 月。

G. Golub 和 C. Van Loan. 矩阵计算,第三版,第 5 章,第 5.4.4 节,第 252-253 页。

示例

>>> from sklearn.datasets import load_digits
>>> from sklearn.decomposition import IncrementalPCA
>>> from scipy import sparse
>>> X, _ = load_digits(return_X_y=True)
>>> transformer = IncrementalPCA(n_components=7, batch_size=200)
>>> # either partially fit on smaller batches of data
>>> transformer.partial_fit(X[:100, :])
IncrementalPCA(batch_size=200, n_components=7)
>>> # or let the fit function itself divide the data into batches
>>> X_sparse = sparse.csr_matrix(X)
>>> X_transformed = transformer.fit_transform(X_sparse)
>>> X_transformed.shape
(1797, 7)
fit(X, y=None)[source]#

使用大小为 batch_size 的小批量数据拟合模型。

参数:
X形状为 (n_samples, n_features) 的 {array-like, sparse matrix}

训练数据,其中 n_samples 是样本数,n_features 是特征数。

y忽略

未使用,出于 API 一致性约定而存在。

返回:
self对象

返回实例本身。

fit_transform(X, y=None, **fit_params)[source]#

拟合数据,然后转换它。

使用可选参数 fit_params 将转换器拟合到 Xy,并返回 X 的转换版本。

参数:
X形状为 (n_samples, n_features) 的 array-like

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like,默认为 None

目标值(无监督转换则为 None)。

**fit_params字典

附加拟合参数。

返回:
X_new形状为 (n_samples, n_features_new) 的 ndarray 数组

转换后的数组。

get_covariance()[source]#

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

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

返回:
cov形状为 (n_features, n_features) 的数组

估计的数据协方差。

get_feature_names_out(input_features=None)[source]#

获取转换后的输出特征名称。

输出的特征名称将以小写的类名作为前缀。例如,如果转换器输出 3 个特征,则输出的特征名称为:["class_name0", "class_name1", "class_name2"]

参数:
input_features字符串类型的 array-like 或 None,默认为 None

仅用于使用在 fit 中看到的名称验证特征名称。

返回:
feature_names_out字符串对象的 ndarray

转换后的特征名称。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看 用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

一个 MetadataRequest 封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

如果为 True,则将返回此估计器和包含的作为估计器的子对象的参数。

返回:
params字典

参数名称映射到其值。

get_precision()[source]#

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

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

返回:
precision数组,形状为 (n_features, n_features)

估计的数据精度。

inverse_transform(X)[source]#

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

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

参数:
X形状为 (n_samples, n_components) 的 array-like

新数据,其中n_samples是样本数量,n_components是成分数量。

返回:
X_original array-like,形状为 (n_samples, n_features)

原始数据,其中n_samples是样本数量,n_features是特征数量。

备注

如果启用白化,inverse_transform 将计算精确的逆运算,包括反转白化。

partial_fit(X, y=None, check_input=True)[source]#

使用 X 进行增量拟合。所有 X 都作为单个批次进行处理。

参数:
X形状为 (n_samples, n_features) 的 array-like

训练数据,其中 n_samples 是样本数,n_features 是特征数。

y忽略

未使用,出于 API 一致性约定而存在。

check_input布尔值,默认为 True

对 X 运行 check_array。

返回:
self对象

返回实例本身。

set_output(*, transform=None)[source]#

设置输出容器。

参见 介绍 set_output API,了解如何使用该 API 的示例。

参数:
transform{"default", "pandas", "polars"},默认为 None

配置transformfit_transform的输出。

  • "default":转换器的默认输出格式

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置保持不变

版本 1.4 中新增: 添加了"polars"选项。

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[source]#

将降维应用于 X。

如果 X 为稀疏,则将 X 投影到先前从训练集中提取的前几个主成分上,使用大小为 batch_size 的小批量。

参数:
X形状为 (n_samples, n_features) 的 {array-like, sparse matrix}

新数据,其中n_samples是样本数量,n_features是特征数量。

返回:
X_new形状为 (n_samples, n_components) 的 ndarray

X 在前几个主成分上的投影。

示例

>>> import numpy as np
>>> from sklearn.decomposition import IncrementalPCA
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2],
...               [1, 1], [2, 1], [3, 2]])
>>> ipca = IncrementalPCA(n_components=2, batch_size=3)
>>> ipca.fit(X)
IncrementalPCA(batch_size=3, n_components=2)
>>> ipca.transform(X)