IncrementalPCA#
- class sklearn.decomposition.IncrementalPCA(n_components=None, *, whiten=False, copy=True, batch_size=None)#
增量主成分分析(IPCA)。
使用数据的奇异值分解(SVD)进行线性降维,只保留最显著的奇异向量,以将数据投影到低维空间。在应用SVD之前,输入数据会被中心化,但不会对每个特征进行缩放。
根据输入数据的大小,该算法可以比PCA更节省内存,并且允许稀疏输入。
该算法具有恒定的内存复杂度,大约为
batch_size * n_features
,使得可以使用np.memmap文件而无需将整个文件加载到内存中。对于稀疏矩阵,输入数据会分批转换为密集格式(以便能够减去均值),这样可以避免在任何时候存储整个密集矩阵。每个SVD的计算开销为
O(batch_size * n_features ** 2)
,但一次只保留2 * batch_size个样本在内存中。需要进行n_samples / batch_size
次SVD计算以获得主成分,而PCA则需要进行一次复杂度为O(n_samples * n_features ** 2)
的大型SVD。有关使用示例,请参见 增量PCA 。
更多信息请参阅 用户指南 。
Added in version 0.16.
- Parameters:
- n_componentsint, default=None
要保留的成分数量。如果
n_components
为None
,则n_components
设置为min(n_samples, n_features)
。- whitenbool, default=False
当为True时(默认情况下为False),
components_
向量会除以n_samples
乘以components_
,以确保输出不相关且成分方差单位化。白化会从变换后的信号中移除一些信息(成分的相对方差尺度),但有时可以通过使数据符合某些硬编码假设来提高下游估计器的预测准确性。
- copybool, default=True
如果为False,X将被覆盖。
copy=False
可以用于节省内存,但通常不安全。- batch_sizeint, default=None
每个批次使用的样本数量。仅在调用
fit
时使用。如果batch_size
为None
,则从数据中推断batch_size
并设置为5 * n_features
,以在近似精度和内存消耗之间提供平衡。
- Attributes:
- components_ndarray of shape (n_components, n_features)
特征空间中的主轴,表示数据中最大方差的方向。等效地,是中心化输入数据的右奇异向量,平行于其特征向量。成分按
explained_variance_
降序排列。- explained_variance_ndarray of shape (n_components,)
每个选定成分解释的方差。
- explained_variance_ratio_ndarray of shape (n_components,)
每个选定成分解释的方差百分比。如果存储了所有成分,解释的方差总和等于1.0。
- singular_values_ndarray of shape (n_components,)
每个选定成分对应的奇异值。奇异值等于低维空间中
n_components
变量的2-范数。- mean_ndarray of shape (n_features,)
每个特征的经验均值,通过
partial_fit
调用聚合。- var_ndarray of shape (n_features,)
每个特征的经验方差,通过
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
在 fit 期间看到的特征数量。
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) 在 fit 期间看到的特征名称。仅当
X
的特征名称均为字符串时定义。Added in version 1.0.
See also
PCA
主成分分析(PCA)。
KernelPCA
核主成分分析(KPCA)。
SparsePCA
稀疏主成分分析(SparsePCA)。
TruncatedSVD
使用截断SVD进行降维。
Notes
实现了来自以下文献的增量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
(列)时才有优势,并且会损害所实现算法的可读性。如果认为有必要,这可能是未来的优化机会。References
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.
Golub and C. Van Loan. Matrix Computations, Third Edition, Chapter 5, Section 5.4.4, pp. 252-253.
Examples
>>> 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)#
拟合模型与X,使用大小为batch_size的小批量。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练数据,其中
n_samples
是样本数量,n_features
是特征数量。- y忽略
未使用,为了API一致性而存在。
- Returns:
- selfobject
返回实例本身。
- fit_transform(X, y=None, **fit_params)#
拟合数据,然后进行转换。
将转换器拟合到
X
和y
,并带有可选参数fit_params
, 并返回X
的转换版本。- Parameters:
- X形状为 (n_samples, n_features) 的类数组
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组, 默认=None
目标值(无监督转换为 None)。
- **fit_paramsdict
其他拟合参数。
- Returns:
- X_new形状为 (n_samples, n_features_new) 的 ndarray 数组
转换后的数组。
- get_covariance()#
计算数据与生成模型之间的协方差。
cov = components_.T * S**2 * components_ + sigma2 * eye(n_features)
其中 S**2 包含解释的方差,sigma2 包含噪声方差。
- Returns:
- covarray of shape=(n_features, n_features)
数据的估计协方差。
- get_feature_names_out(input_features=None)#
获取转换后的输出特征名称。
输出特征名称将以小写的类名作为前缀。例如,如果转换器输出3个特征,那么输出特征名称将是:
["class_name0", "class_name1", "class_name2"]
。- Parameters:
- input_features类似数组的对象或None,默认为None
仅用于验证特征名称与
fit
中看到的名称。
- Returns:
- feature_names_outndarray of str对象
转换后的特征名称。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- get_precision()#
计算数据精度矩阵与生成模型。
等于协方差的逆,但为了提高效率,使用矩阵求逆引理进行计算。
- Returns:
- precisionarray, shape=(n_features, n_features)
数据的估计精度。
- inverse_transform(X)#
将数据转换回其原始空间。
换句话说,返回一个输入
X_original
,其转换结果将是 X。- Parameters:
- Xarray-like of shape (n_samples, n_components)
新数据,其中
n_samples
是样本数量 且n_components
是组件数量。
- Returns:
- X_original array-like of shape (n_samples, n_features)
原始数据,其中
n_samples
是样本数量 且n_features
是特征数量。
Notes
如果启用了白化,inverse_transform 将计算 精确的逆操作,其中包括反转白化。
- partial_fit(X, y=None, check_input=True)#
增量拟合数据X。所有的X数据被作为一个单独的批次处理。
- Parameters:
- X形状为 (n_samples, n_features) 的类数组
训练数据,其中
n_samples
是样本的数量,n_features
是特征的数量。- y忽略
未使用,为了API一致性而存在。
- check_inputbool, 默认=True
对X运行check_array。
- Returns:
- selfobject
返回实例本身。
- set_output(*, transform=None)#
设置输出容器。
请参阅 介绍 set_output API 以了解如何使用API的示例。
- Parameters:
- transform{“default”, “pandas”, “polars”}, 默认=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
Added in version 1.4:
"polars"
选项已添加。
- Returns:
- self估计器实例
估计器实例。
- set_params(**params)#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
)。后者具有形式为<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- set_partial_fit_request(*, check_input: bool | None | str = '$UNCHANGED$') IncrementalPCA #
Request metadata passed to the
partial_fit
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed topartial_fit
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it topartial_fit
.None
: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str
: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED
) retains the existing request. This allows you to change the request for some parameters and not others.Added in version 1.3.
Note
This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a
Pipeline
. Otherwise it has no effect.- Parameters:
- check_inputstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
check_input
parameter inpartial_fit
.
- Returns:
- selfobject
The updated object.
- transform(X)#
应用降维到X。
X被投影到之前从训练集中提取的第一主成分上,如果X是稀疏的,则使用大小为batch_size的小批量。
- Parameters:
- X{array-like, sparse matrix} of shape (n_samples, n_features)
新数据,其中
n_samples
是样本的数量,n_features
是特征的数量。
- Returns:
- X_newndarray of shape (n_samples, n_components)
X在第一主成分上的投影。
Examples
>>> 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)