增量PCA#

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_components整数,默认值=None

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

whiten布尔值,默认值=False

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

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

copy布尔值,默认值=True

如果为 False,X 将被覆盖。copy=False 可以用来节省内存,但对于一般用途是不安全的。

batch_size整数,默认值=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_浮点数

根据Tipping和Bishop 1999年提出的概率PCA模型估算的噪声协方差。参阅C. Bishop的《模式识别与机器学习》第12.2.1节第574页,或 http://www.miketipping.com/papers/met-mppca.pdf

n_components_整数

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

n_samples_seen_整数

估计器处理的样本数量。在新调用 fit 时会重置,但在 partial_fit 调用之间会累加。

batch_size_整数

batch_size 推断出的批次大小。

n_features_in_整数

拟合 期间观察到的特征数量。

自 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, Incremental Learning for Robust Visual Tracking, International Journal of Computer Vision, Volume 77, Issue 1-3, pp. 125-141, May 2008. 参阅 https://www.cs.toronto.edu/~dross/ivt/RossLimLinYang_ijcv.pdf

此模型是以下论文中序贯Karhunen-Loeve变换的扩展:A. Levy and M. Lindenbaum, Sequential Karhunen-Loeve Basis Extraction and its Application to Images, IEEE Transactions on Image Processing, Volume 9, Number 8, pp. 1371-1374, August 2000.

我们特意放弃了两篇论文作者使用的一种优化方法,即在特定情况下用于降低SVD算法复杂度的QR分解。此技术的来源是Matrix Computations, Third Edition, G. Holub and C. Van Loan, Chapter 5, section 5.4.4, pp 252-253.。此技术已被省略,因为它仅在分解一个矩阵时(其中 n_samples(行)>= 5/3 * n_features(列))才具有优势,并且会影响已实现算法的可读性。如果认为有必要,这将是未来优化的一个良好机会。

参考文献

D. Ross, J. Lim, R. Lin, M. Yang. Incremental Learning for Robust Visual Tracking, International Journal of Computer Vision, Volume 77, Issue 1-3, pp. 125-141, May 2008.

G. Golub and C. Van Loan. Matrix Computations, Third Edition, Chapter 5, Section 5.4.4, pp. 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]#

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

参数:
X{类数组,稀疏矩阵},形状为 (n_samples, n_features)

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

y已忽略

未使用,按约定存在以保持API一致性。

返回:
self对象

返回实例本身。

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

拟合数据,然后进行转换。

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

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组,默认值=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字符串类数组或 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_original,其转换结果将是X。

参数:
X形状为 (n_samples, n_components) 的类数组

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

返回:
X_original形状为 (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) 的类数组

训练数据,其中 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)

新数据,其中 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)