sklearn.decomposition.IncrementalPCA

class sklearn.decomposition.IncrementalPCA

Análisis de componentes principales incremental (Incremental principal components analysis, IPCA).

Reducción lineal de la dimensionalidad mediante la Descomposición en Valores Singulares de los datos, manteniendo sólo los vectores singulares más significativos para proyectar los datos a un espacio de menor dimensión. Los datos de entrada se centran pero no se escalan para cada característica antes de aplicar la SVD.

Dependiendo del tamaño de los datos de entrada, este algoritmo puede ser mucho más eficiente en cuanto a memoria que un PCA, y permite una entrada dispersa.

Este algoritmo tiene una complejidad de memoria constante, del orden de batch_size * n_features, lo que permite utilizar archivos np.memmap sin cargar todo el archivo en memoria. En el caso de las matrices dispersas, la entrada se convierte en densa por lotes (para poder restar la media), lo que evita almacenar la matriz densa completa en cualquier momento.

La sobrecarga computacional de cada SVD es O(batch_size * n_features ** 2), pero sólo 2 * batch_size muestras permanecen en memoria a la vez. Habrá n_samples / batch_size cálculos de SVD para obtener los componentes principales, frente a 1 SVD grande de complejidad O(n_samples * n_features ** 2) para PCA.

Lee más en el Manual de usuario.

Nuevo en la versión 0.16.

Parámetros
n_componentsint, default=None

Número de componentes a mantener. Si n_components es ``None, entonces n_components se establece en min(n_samples, n_features).

whitenbool, default=False

Cuando es True (False por defecto) los components_ vectores se dividen entre n_samples por components_ para asegurar salidas no correlacionadas con varianzas unitarias de los componentes.

El whitening eliminará parte de la información de la señal transformada (las escalas de varianza relativas de los componentes), pero a veces puede mejorar la precisión predictiva de los estimadores posteriores al hacer que los datos respeten algunos supuestos fijos.

copybool, default=True

Si es False, X se sobrescribirá. copy=False puede utilizarse para ahorrar memoria pero no es seguro para el uso general.

batch_sizeint, default=None

El número de muestras a utilizar para cada lote. Sólo se utiliza cuando se llama a fit. Si batch_size es None, entonces batch_size se infiere de los datos y se establece en 5 * n_features, para proporcionar un equilibrio entre la precisión de la aproximación y el consumo de memoria.

Atributos
components_ndarray de forma (n_components, n_features)

Componentes con máxima varianza.

explained_variance_ndarray de forma (n_components,)

Varianza explicada por cada uno de los componentes seleccionados.

explained_variance_ratio_ndarray de forma (n_components,)

Porcentaje de la varianza explicada por cada uno de los componentes seleccionados. Si se almacenan todos los componentes, la suma de las varianzas explicadas es igual a 1,0.

singular_values_ndarray de forma (n_components,)

Los valores singulares correspondientes a cada uno de los componentes seleccionados. Los valores singulares son iguales a las 2-normas de las n_components variables en el espacio de menor dimensión.

mean_ndarray de forma (n_features,)

Media empírica por característica, agregada sobre las llamadas a partial_fit.

var_ndarray de forma (n_features,)

Varianza empírica por característica, agregada sobre las llamadas a partial_fit.

noise_variance_float

La covarianza del ruido estimada según el modelo de PCA probabilístico de Tipping y Bishop 1999. Ver «Pattern Recognition and Machine Learning» de C. Bishop, 12.2.1 p. 574 o http://www.miketipping.com/papers/met-mppca.pdf.

n_components_int

El número estimado de componentes. Relevante cuando n_components=None.

n_samples_seen_int

El número de muestras procesadas por el estimador. Se restablecerá en las nuevas llamadas a fit, pero se incrementa a través de las llamadas a partial_fit.

batch_size_int

Tamaño de lote inferido a partir de batch_size.

Notas

Implementa el modelo de PCA incremental de: 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, Mayo de 2008. Ver https://www.cs.toronto.edu/~dross/ivt/RossLimLinYang_ijcv.pdf

Este modelo es una extensión de la Transformación Secuencial Karhunen-Loeve de: A. Levy y 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. Ver https://www.cs.technion.ac.il/~mic/doc/skl-ip.pdf

Nos hemos abstenido específicamente de una optimización utilizada por los autores de ambos artículos, una descomposición QR utilizada en situaciones específicas para reducir la complejidad algorítmica de la SVD. La fuente de esta técnica es Matrix Computations, Tercera Edición, G. Holub y C. Van Loan, Capítulo 5, Sección 5.4.4, pp 252-253.. Esta técnica se ha omitido porque sólo es ventajosa al descomponer cuando se descompone una matriz con n_samples (filas) >= 5/3 * ``n_features``(columnas), y perjudica la legibilidad del algoritmo implementado. Esta sería una buena oportunidad para una optimización futura, si se considera necesaria.

Referencias

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.

Ejemplos

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

Métodos

fit

Ajuste del modelo con X, utilizando minilotes de tamaño batch_size.

fit_transform

Ajusta a los datos y luego los transforma.

get_covariance

Calcula la covarianza de los datos con el modelo generativo.

get_params

Obtiene los parámetros para este estimador.

get_precision

Calcula la matriz de precisión de los datos con el modelo generativo.

inverse_transform

Transforma los datos de nuevo a su espacio original.

partial_fit

Ajuste incremental con X.

set_params

Establece los parámetros de este estimador.

transform

Aplica la reducción de la dimensionalidad a X.

fit()

Ajuste del modelo con X, utilizando minilotes de tamaño batch_size.

Parámetros
X{array-like, sparse matrix} de forma (n_samples, n_features)

Datos de entrenamiento, donde n_samples es el número de muestras y n_features es el número de características.

yIgnorado
Devuelve
selfobject

Devuelve la propia instancia.

fit_transform()

Ajusta a los datos y luego los transforma.

Ajusta el transformador a X e y con los parámetros opcionales fit_params y devuelve una versión transformada de X.

Parámetros
Xarray-like de forma (n_samples, n_features)

Muestras de entrada.

yarray-like de forma (n_samples,) o (n_samples, n_outputs), default=None

Valores objetivo (None para transformaciones no supervisadas).

**fit_paramsdict

Parámetros de ajuste adicionales.

Devuelve
X_newarreglo ndarray de forma (n_samples, n_features_new)

Arreglo transformado.

get_covariance()

Calcula la covarianza de los datos con el modelo generativo.

cov = components_.T * S**2 * components_ + sigma2 * eye(n_features) donde S**2 contiene las varianzas explicadas, y sigma2 contiene las varianzas del ruido.

Devuelve
covarreglo, forma=(n_features, n_features)

Covarianza estimada de los datos.

get_params()

Obtiene los parámetros para este estimador.

Parámetros
deepbool, default=True

Si es True, devolverá los parámetros para este estimador y los subobjetos contenidos que son estimadores.

Devuelve
paramsdict

Los nombres de los parámetros mapeados a sus valores.

get_precision()

Calcula la matriz de precisión de los datos con el modelo generativo.

Es igual a la inversa de la covarianza, pero calculada con el lema de inversión de matrices por eficiencia.

Devuelve
precisionarreglo, forma=(n_features, n_features)

Precisión estimada de los datos.

inverse_transform()

Transforma los datos de nuevo a su espacio original.

En otras palabras, devuelve una entrada X_original cuya transformación sería X.

Parámetros
Xarray-like, forma (n_samples, n_components)

Nuevos datos, donde n_samples es el número de muestras y n_components es el número de componentes.

Devuelve
X_original array-like, de forma (n_samples, n_features)

Notas

Si whitening está activado, inverse_transform calculará la operación inversa exacta, que incluye el whitening reversible.

partial_fit()

Ajuste incremental con X. Todo X se procesa como un solo lote.

Parámetros
Xarray-like de forma (n_samples, n_features)

Datos de entrenamiento, donde n_samples es el número de muestras y n_features es el número de características.

check_inputbool, default=True

Ejecuta check_array en X.

yIgnorado
Devuelve
selfobject

Devuelve la propia instancia.

set_params()

Establece los parámetros de este estimador.

El método funciona tanto en estimadores simples como en objetos anidados (como Pipeline). Estos últimos tienen parámetros de la forma <component>__<parameter> para que sea posible actualizar cada componente de un objeto anidado.

Parámetros
**paramsdict

Parámetros del estimador.

Devuelve
selfinstancia del estimador

Instancia del estimador.

transform()

Aplica la reducción de la dimensionalidad a X.

X se proyecta sobre los primeros componentes principales previamente extraídos de un conjunto de entrenamiento, utilizando minilotes de tamaño batch_size si X es disperso.

Parámetros
X{array-like, sparse matrix} de forma (n_samples, n_features)

Nuevos datos, donde n_samples es el número de muestras y n_features es el número de características.

Devuelve
X_newndarray de forma (n_samples, n_components)

Ejemplos

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