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 complejidadO(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
, entoncesn_components
se establece enmin(n_samples, n_features)
.- whitenbool, default=False
Cuando es True (False por defecto) los
components_
vectores se dividen entren_samples
porcomponents_
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
. Sibatch_size
esNone
, entoncesbatch_size
se infiere de los datos y se establece en5 * 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
.
Ver también
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
Ajuste del modelo con X, utilizando minilotes de tamaño batch_size.
Ajusta a los datos y luego los transforma.
Calcula la covarianza de los datos con el modelo generativo.
Obtiene los parámetros para este estimador.
Calcula la matriz de precisión de los datos con el modelo generativo.
Transforma los datos de nuevo a su espacio original.
Ajuste incremental con X.
Establece los parámetros de este estimador.
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
ey
con los parámetros opcionalesfit_params
y devuelve una versión transformada deX
.- 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)