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_size
SVD计算,而对于主成分分析,需要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_size 为None ,则从数据中推断出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
(1797, 7)
方法
方法 | 说明 |
---|---|
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],
... [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) # doctest: +SKIP