sklearn.decomposition.IncrementalPCA

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

[源码]

增量主成分分析(IPCA)。

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

根据输入数据的大小,该算法比PCA的内存效率更高,并且允许稀疏输入。

该算法具有不变的内存复杂度,大小依次为 batch_size * n_features,可以使用np.memmap文件,而不加载整个文件到内存。对于稀疏矩阵,输入被批量转换为密集矩阵(以便能够减去平均值),避免在任何时候存储整个密集矩阵。

每个SVD的计算代价是 O(batch_size * n_features ** 2),但是每次只有2 * batch_size样本保留在内存中。为了得到主成分,需要进行n_samples / batch_sizeSVD计算,而对于主成分分析,需要1个大的SVD复杂度O(n_samples * n_features ** 2)

用户指南中阅读更多内容

新版本0.16。

参数 说明
n_components int or None, (default=None)
要保存的组件数量。如果n_components ' 'is' ' None,那么n_components被设置为min(n_samples, n_features)
whiten bool, optional
当为真(默认为假)时,components_向量除以n_samples乘以components_以确保输出与单位样本方差不相关。

白化将从转换信号中去除一些信息(样本的相对方差尺度),但有时可以通过使数据尊重一些硬连接的假设来提高下游估计器的预测精度。
copy bool, (default=True)
如果为假,X将被覆盖。copy=False可以用于节省内存,但一般使用不安全。
batch_size int or None, (default=None)
每批使用的样品数量。只在使用fit时使用。如果batch_sizeNone,则从数据中推断出batch_size并设置为5 * n_features,以在近似精度和内存消耗之间提供平衡。
属性 说明
components_ array, shape (n_components, n_features)
方差最大的分量。
explained_variance_ array, shape (n_components,)
方差由每个选择的样本部分解释。
explained_variance_ratio_ array, shape (n_components,)
所选择的每个样本所解释的方差百分比。如果所有样本都被存储,则已解释方差之和为1.0。
singular_values_ array, shape (n_components,)
对应于每个选定分量的奇异值。奇异值等于低维空间中n_component变量的2-范数。
mean_ array, shape (n_features,)
每个特性的经验平均值,通过调用partial_fit进行聚合
var_ array, shape (n_features,)
每个特性的经验方差,通过调用partial_fit进行聚合。
noise_variance_ float
根据Tipping和Bishop 1999年的概率PCA模型估计的噪声协方差。参见“Pattern Recognition and Machine Learning” by C. Bishop, 12.2.1 p. 574 or 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推断批大小。

另见

笔记

实现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

该模型是由: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. See https://www.cs.technion.ac.il/~mic/doc/skl-ip.pdf

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

参考资料:

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
(17977)

方法

方法 说明
fit(self, X[, y]) 使用小批量batch_size,使模型与X匹配。
fit_transform(self, X[, y]) 拟合数据,然后转换它。
get_covariance(self) 用生成模型计算数据协方差。
get_params(self[, deep]) 获取这个估计器的参数。
get_precision(self) 利用生成模型计算数据精度矩阵。
inverse_transform(self, X) 将数据转换回其原始空间。
partial_fit(self, X[, y, check_input]) 增量拟合。
set_params(self, **params) 设置这个估计器的参数。
transform(self, X) 对X应用维数约简。
__init__(self, n_components=None, *, whiten=False, copy=True, batch_size=None)

初始化self. See 请参阅help(type(self))以获得准确的说明。

fit(self, X, y=None)              

[源码]

使用小批量batch_size,使模型与X匹配。

参数 说明
X **array-like or sparse matrix, shape (n_samples, n_features)**训练数据,其中n_samples为样本数量,n_features为特征数量。
y Ignored
返回值 说明
self object
返回距离自身
fit_transform(self, X, y=None, *fit_params)

[源码]

拟合数据,然后转换它。

使用可选参数fit_params将transformer与X和y匹配,并返回X的转换版本。

参数 说明
X {array-like, sparse matrix, dataframe} of shape (n_samples, n_features)
Y ndarray of shape (n_samples,), default=None
目标值
**fit_params dict :
其他拟合参数。
返回值 说明
X_new ndarray array of shape (n_samples, n_features_new)
转换数组
get_covariance(self)

[源码]

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

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

返回值 说明
cov shape=(n_features, n_features)
数据的估计协方差。
get_params(self, deep=True)

[源码]

获取这个估计器的参数。

参数 说明
deep bool, default=True
如果为真,将返回此估计器的参数以及包含的作为估计器的子对象。
返回值 说明
params mapping of string to any
参数名称映射到它们的值。。
get_precision(self)

[源码]利用生成模型计算数据精度矩阵。

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

返回值 说明
precision array, shape=(n_features, n_features)
数据的估计精度。。
inverse_transform(self, X)

[源码]

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

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

参数 说明
X array-like, shape (n_samples, n_components)
新数据,其中n_samples是样本数量,n_components是组件数量。
返回值 X_original array-like, shape (n_samples, n_features)

笔记

如果启用了白化,inverse_transform将计算精确的反运算,其中包括反向白化。

partial_fit(self, X, y=None, check_input=True)

增量拟合。所有的X都作为一个batch。

参数 说明
X array-like, shape (n_samples, n_features)
训练数据,其中n_samples为样本数量,n_features为特征数量。
check_input bool
在X上运行check_array。
y Ignored
返回值 说明
self object
返回实例本身。
set_params(self, **params)

设置这个估计器的参数。

该方法适用于简单估计器和嵌套对象(如pipelines)。后者具有形式为___的参数,这样就可以更新嵌套对象的每个样本。

参数 说明
**params dict
参数估计器。
返回值 说明
self object
实例估计。
transform(self, X)

对X应用维数约简。

X被投影到之前从训练集中提取的第一个主成分上,如果X是稀疏的,则使用size为minibatches的batch_size。

参数 说明
X **array-like, shape (n_samples, n_features)****
新数据,其中n_samples为样本数量,n_features为特征数量。
返回值 说明
X_new array-like, shape (n_samples, n_components)
>>> import numpy as np
>>> from sklearn.decomposition import IncrementalPCA
>>> X = np.array([[-1-1], [-2-1], [-3-2],
...               [11], [21], [32]])
>>> ipca = IncrementalPCA(n_components=2, batch_size=3)
>>> ipca.fit(X)
IncrementalPCA(batch_size=3, n_components=2)
>>> ipca.transform(X) # doctest: +SKIP

示例 sklearn.decomposition.IncrementalPCA