Scikit Learn - Réduction de dimensionnalité avec PCA

La réduction de dimensionnalité, une méthode d'apprentissage automatique non supervisée, est utilisée pour réduire le nombre de variables de fonctionnalité pour chaque échantillon de données en sélectionnant un ensemble de fonctionnalités principales. L'analyse en composantes principales (ACP) est l'un des algorithmes populaires pour la réduction de la dimensionnalité.

PCA exact

Principal Component Analysis (PCA) est utilisé pour la réduction de dimensionnalité linéaire en utilisant Singular Value Decomposition(SVD) des données pour les projeter dans un espace dimensionnel inférieur. Lors de la décomposition à l'aide de PCA, les données d'entrée sont centrées mais pas mises à l'échelle pour chaque fonction avant d'appliquer le SVD.

La bibliothèque ML Scikit-learn fournit sklearn.decomposition.PCAmodule qui est implémenté comme un objet transformateur qui apprend n composants dans sa méthode fit (). Il peut également être utilisé sur de nouvelles données pour les projeter sur ces composants.

Exemple

L'exemple ci-dessous utilisera le module sklearn.decomposition.PCA pour trouver les 5 meilleurs composants principaux de l'ensemble de données Pima Indians Diabetes.

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

Production

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 incrémental

Incremental Principal Component Analysis (IPCA) est utilisé pour traiter la plus grande limitation de l'analyse en composants principaux (PCA) et c'est-à-dire que PCA ne prend en charge que le traitement par lots, ce qui signifie que toutes les données d'entrée à traiter doivent tenir dans la mémoire.

La bibliothèque ML Scikit-learn fournit sklearn.decomposition.IPCA module qui permet d'implémenter Out-of-Core PCA soit en utilisant son partial_fit méthode sur des morceaux de données extraits séquentiellement ou en permettant l'utilisation de np.memmap, un fichier mappé en mémoire, sans charger le fichier entier en mémoire.

Identique à PCA, lors de la décomposition utilisant IPCA, les données d'entrée sont centrées mais pas mises à l'échelle pour chaque fonction avant d'appliquer le SVD.

Exemple

L'exemple ci-dessous utilisera sklearn.decomposition.IPCA module sur l'ensemble de données numériques 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

Production

(1797, 10)

Ici, nous pouvons partiellement adapter sur de plus petits lots de données (comme nous l'avons fait sur 100 par lot) ou vous pouvez laisser le fit() fonction pour diviser les données en lots.

PCA du noyau

L'analyse en composantes principales du noyau, une extension de l'ACP, permet une réduction de dimensionnalité non linéaire à l'aide de noyaux. Il prend en charge à la foistransform and inverse_transform.

La bibliothèque ML Scikit-learn fournit sklearn.decomposition.KernelPCA module.

Exemple

L'exemple ci-dessous utilisera sklearn.decomposition.KernelPCAmodule sur l'ensemble de données numériques Sklearn. Nous utilisons un noyau sigmoïde.

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

Production

(1797, 10)

PCA utilisant SVD randomisé

L'analyse en composantes principales (ACP) utilisant la SVD randomisée est utilisée pour projeter des données dans un espace de dimension inférieure préservant la majeure partie de la variance en supprimant le vecteur singulier des composants associés aux valeurs singulières inférieures. Ici lesklearn.decomposition.PCA module avec le paramètre optionnel svd_solver=’randomized’ va être très utile.

Exemple

L'exemple ci-dessous utilisera sklearn.decomposition.PCA module avec le paramètre facultatif svd_solver = 'randomized' pour trouver les 7 meilleurs composants principaux de l'ensemble de données Pima Indians Diabetes.

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

Production

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