Scikit Learn - Reducción de dimensionalidad usando PCA

La reducción de la dimensionalidad, un método de aprendizaje automático no supervisado, se utiliza para reducir la cantidad de variables de características para cada muestra de datos seleccionando un conjunto de características principales. El análisis de componentes principales (PCA) es uno de los algoritmos populares para la reducción de dimensionalidad.

PCA exacta

Principal Component Analysis (PCA) se utiliza para la reducción de dimensionalidad lineal utilizando Singular Value Decomposition(SVD) de los datos para proyectarlos a un espacio dimensional inferior. Mientras se descompone mediante PCA, los datos de entrada se centran pero no se escalan para cada característica antes de aplicar el SVD.

La biblioteca de aprendizaje automático de Scikit-learn proporciona sklearn.decomposition.PCAmódulo que se implementa como un objeto transformador que aprende n componentes en su método fit (). También se puede utilizar en datos nuevos para proyectarlos en estos componentes.

Ejemplo

El siguiente ejemplo utilizará el módulo sklearn.decomposition.PCA para encontrar los 5 mejores componentes principales del conjunto de datos de diabetes de los indios Pima.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\Users\Leekha\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', ‘class']
dataframe = read_csv(path, names = names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components = 5)
fit = pca.fit(X)
print(("Explained Variance: %s") % (fit.explained_variance_ratio_))
print(fit.components_)

Salida

Explained Variance: [0.88854663 0.06159078 0.02579012 0.01308614 0.00744094]
[
   [-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-029.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
   [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
   [-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]
   [-4.90459604e-02 1.19830016e-01 -2.62742788e-01 8.84369380e-01-6.55503615e-02 1.92801728e-01 2.69908637e-03 -3.01024330e-01]
   [ 1.51612874e-01 -8.79407680e-02 -2.32165009e-01 2.59973487e-01-1.72312241e-04 2.14744823e-02 1.64080684e-03 9.20504903e-01]
]

PCA incremental

Incremental Principal Component Analysis (IPCA) se utiliza para abordar la mayor limitación del análisis de componentes principales (PCA) y es que PCA solo admite el procesamiento por lotes, lo que significa que todos los datos de entrada que se procesarán deben caber en la memoria.

La biblioteca de aprendizaje automático de Scikit-learn proporciona sklearn.decomposition.IPCA módulo que hace posible implementar PCA fuera del núcleo utilizando su partial_fit método en fragmentos de datos obtenidos secuencialmente o al permitir el uso de np.memmap, un archivo mapeado en memoria, sin cargar el archivo completo en la memoria.

Igual que PCA, aunque se descompone mediante IPCA, los datos de entrada se centran pero no se escalan para cada característica antes de aplicar el SVD.

Ejemplo

El siguiente ejemplo utilizará sklearn.decomposition.IPCA módulo en el conjunto de datos de dígitos de Sklearn.

from sklearn.datasets import load_digits
from sklearn.decomposition import IncrementalPCA
X, _ = load_digits(return_X_y = True)
transformer = IncrementalPCA(n_components = 10, batch_size = 100)
transformer.partial_fit(X[:100, :])
X_transformed = transformer.fit_transform(X)
X_transformed.shape

Salida

(1797, 10)

Aquí, podemos ajustar parcialmente a lotes de datos más pequeños (como hicimos con 100 por lote) o puede dejar que el fit() función para dividir los datos en lotes.

Kernel PCA

Kernel Principal Component Analysis, una extensión de PCA, logra una reducción de dimensionalidad no lineal utilizando kernels. Es compatible con ambostransform and inverse_transform.

La biblioteca de aprendizaje automático de Scikit-learn proporciona sklearn.decomposition.KernelPCA módulo.

Ejemplo

El siguiente ejemplo utilizará sklearn.decomposition.KernelPCAmódulo en el conjunto de datos de dígitos de Sklearn. Estamos usando kernel sigmoide.

from sklearn.datasets import load_digits
from sklearn.decomposition import KernelPCA
X, _ = load_digits(return_X_y = True)
transformer = KernelPCA(n_components = 10, kernel = 'sigmoid')
X_transformed = transformer.fit_transform(X)
X_transformed.shape

Salida

(1797, 10)

PCA usando SVD aleatorizado

El Análisis de Componentes Principales (PCA) que usa SVD aleatorizado se usa para proyectar datos a un espacio de menor dimensión preservando la mayor parte de la varianza al eliminar el vector singular de componentes asociados con valores singulares más bajos. Aquí elsklearn.decomposition.PCA módulo con el parámetro opcional svd_solver=’randomized’ va a ser muy útil.

Ejemplo

El siguiente ejemplo utilizará sklearn.decomposition.PCA módulo con el parámetro opcional svd_solver = 'randomized' para encontrar los mejores 7 componentes principales del conjunto de datos de diabetes de los indios Pima.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\Users\Leekha\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names = names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components = 7,svd_solver = 'randomized')
fit = pca.fit(X)
print(("Explained Variance: %s") % (fit.explained_variance_ratio_))
print(fit.components_)

Salida

Explained Variance: [8.88546635e-01 6.15907837e-02 2.57901189e-02 1.30861374e-027.44093864e-03 3.02614919e-03 5.12444875e-04]
[
   [-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-029.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
   [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
   [-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]
   [-4.90459604e-02 1.19830016e-01 -2.62742788e-01 8.84369380e-01-6.55503615e-02 1.92801728e-01 2.69908637e-03 -3.01024330e-01]
   [ 1.51612874e-01 -8.79407680e-02 -2.32165009e-01 2.59973487e-01-1.72312241e-04 2.14744823e-02 1.64080684e-03 9.20504903e-01]
   [-5.04730888e-03 5.07391813e-02 7.56365525e-02 2.21363068e-01-6.13326472e-03 -9.70776708e-01 -2.02903702e-03 -1.51133239e-02]
   [ 9.86672995e-01 8.83426114e-04 -1.22975947e-03 -3.76444746e-041.42307394e-03 -2.73046214e-03 -6.34402965e-03 -1.62555343e-01]
]