PCA Incremental

El análisis de componentes principales incremental (IPCA) se suele utilizar como sustituto del análisis de componentes principales (PCA) cuando el conjunto de datos que hay que descomponer es demasiado grande para que quepa en la memoria. El IPCA construye una aproximación de bajo rango para los datos de entrada utilizando una cantidad de memoria que es independiente del número de muestras de datos de entrada. Sigue dependiendo de las características de los datos de entrada, pero el cambio del tamaño del lote permite controlar el uso de la memoria.

Este ejemplo sirve para comprobar visualmente que el IPCA es capaz de encontrar una proyección de los datos similar a la del PCA (a un cambio de signo), mientras que sólo procesa unas pocas muestras a la vez. Puede considerarse un «ejemplo de juguete», ya que IPCA está pensado para grandes conjuntos de datos que no se ajustan en la memoria principal, lo que requiere enfoques incrementales.

  • Incremental PCA of iris dataset Mean absolute unsigned error 0.002201
  • PCA of iris dataset
print(__doc__)

# Authors: Kyle Kastner
# License: BSD 3 clause

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA, IncrementalPCA

iris = load_iris()
X = iris.data
y = iris.target

n_components = 2
ipca = IncrementalPCA(n_components=n_components, batch_size=10)
X_ipca = ipca.fit_transform(X)

pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(X)

colors = ['navy', 'turquoise', 'darkorange']

for X_transformed, title in [(X_ipca, "Incremental PCA"), (X_pca, "PCA")]:
    plt.figure(figsize=(8, 8))
    for color, i, target_name in zip(colors, [0, 1, 2], iris.target_names):
        plt.scatter(X_transformed[y == i, 0], X_transformed[y == i, 1],
                    color=color, lw=2, label=target_name)

    if "Incremental" in title:
        err = np.abs(np.abs(X_pca) - np.abs(X_ipca)).mean()
        plt.title(title + " of iris dataset\nMean absolute unsigned error "
                  "%.6f" % err)
    else:
        plt.title(title + " of iris dataset")
    plt.legend(loc="best", shadow=False, scatterpoints=1)
    plt.axis([-4, 4, -1.5, 1.5])

plt.show()

Tiempo total de ejecución del script: (0 minutos 0.528 segundos)

Galería generada por Sphinx-Gallery