Réduire la dimensionnalité des données à l'aide de PCA - Python
Tout ensemble de données utilisé dans les algorithmes de Machine Learning peut avoir plusieurs dimensions. Cependant, tous ne contribuent pas à fournir un résultat efficace et entraînent simplement de mauvaises performances du modèle ML en raison de sa taille et de sa complexité accrues. Il devient donc important d’éliminer ces caractéristiques de l’ensemble de données. Pour ce faire, nous utilisons un algorithme de réduction de dimension appelé PCA.
L'ACP ou analyse en composantes principales aide à supprimer les dimensions de l'ensemble de données qui ne contribuent pas à optimiser les résultats ; créant ainsi un ensemble de données plus petit et plus simple avec la plupart des informations originales et utiles. La PCA est basée sur le concept d'extraction de caractéristiques, qui dit que lorsque les données d'un espace de dimension supérieure sont mappées à celles d'un espace de dimension inférieure, la variance de cette dernière doit être maximale.
Syntaxe
pca = PCA(n_components = number)
Ici, PCA est la classe qui effectue la réduction de dimension et pca est l'objet créé à partir de celle-ci. Cela ne prend qu'un seul paramètre : le nombre de composants principaux que nous souhaitons en sortie.
De plus, il renvoie le nouvel ensemble de données avec les composants principaux sous forme de tableau lorsqu'il est utilisé avec les fonctions fit(), DataFrame() et head() comme nous le verrons dans l'exemple.
Algorithme
Étape 1 - Importez les bibliothèques sklearn et pandas de Python ainsi que les sous-modules associés.
-
Étape 2 - Chargez l'ensemble de données requis et remplacez-le par pandas dataframe.
Étape 3 - Utilisez Standard Scaler pour standardiser les fonctionnalités et stocker le nouvel ensemble de données sous forme de bloc de données pandas.
Étape 4 - Utilisez la classe PCA sur l'ensemble de données mis à l'échelle et créez un objet. Transmettez également le nombre de composants, ajustez et affichez les données résultantes en conséquence.
Exemple 1
Dans cet exemple, nous prendrons l'ensemble de données load_diabetes déjà présent dans la bibliothèque Python sklearn pour voir comment l'ACP est effectuée. Pour ce faire, nous utiliserons la classe PCA mais avant cela, nous devons traiter et standardiser l'ensemble de données.
#import the required libraries
from sklearn import datasets #to get the load_diabetes dataset
from sklearn.preprocessing import StandardScaler #this standardizes the dimensions
from sklearn.decomposition import PCA #to perform PCA
from sklearn.datasets import load_diabetes #the dataset that we will use to perform PCA
import pandas as pd #to work with the dataframes
#load the dataset as pandas dataframe
diabetes = datasets.load_diabetes()
df = pd.DataFrame(diabetes['data'], columns = diabetes['feature_names'])
df.head() #displays the data frame when run in a different cell
#standardize the dimensions by creating the object of StandardScaler
scalar = StandardScaler()
scaled_data = pd.DataFrame(scalar.fit_transform(df))
scaled_data #displays the dataframe after standardization when run in a different cell
#apply pca
pca = PCA(n_components = 4)
pca.fit(scaled_data)
data_pca = pca.transform(scaled_data)
data_pca = pd.DataFrame(data_pca,columns=['PC1','PC2','PC3', 'PC4'])
data_pca.head()
Les données sur le diabète sont chargées et renvoient un objet similaire au dictionnaire à partir duquel les données sont extraites dans un Pandas Dataframe. Nous standardisons les données à l'aide de la méthode StandardScaler et fit_transform() est appliquée au Pandas Dataframe créé.
La méthode fit() est appelée sur les données standardisées, que nous avons stockées dans une trame de données distincte, pour effectuer l'analyse PCA. Les données résultantes sont à nouveau stockées dans une trame de données distincte et sont imprimées comme indiqué ci-dessous.
Sortir
Puisque nous avons choisi 4 composants principaux, la sortie renvoyée comporte 4 colonnes représentant chaque composant.
Exemple 2
Dans cet exemple, nous prendrons l'ensemble de données load_wine de la bibliothèque sklearn. De plus, cette fois, nous fixerons le nombre de composants principaux à seulement 3.
#import the required libraries
from sklearn import datasets #to get the load_wine dataset
from sklearn.preprocessing import StandardScaler #this standardizes the dimensions
from sklearn.decomposition import PCA #to perform PCA
from sklearn.datasets import load_wine #the dataset that we will use to perform PCA
import pandas as pd #to work with the dataframes
#load the dataset as pandas dataframe
wine = datasets.load_wine()
df = pd.DataFrame(wine['data'], columns = wine['feature_names'])
df.head() #displays the dataframe when run in a different cell
#standardize the dimensions by creating the object of StandardScaler
scalar = StandardScaler()
scaled_data = pd.DataFrame(scalar.fit_transform(df))
scaled_data #displays the dataframe after standardization when run in a different cell
#apply pca
pca = PCA(n_components = 3)
pca.fit(scaled_data)
data_pca = pca.transform(scaled_data)
data_pca = pd.DataFrame(data_pca,columns=['PC1','PC2','PC3'])
data_pca.head()
Sortir
Puisque nous avons choisi cette fois seulement 3 composants principaux, la sortie renvoyée ne comporte que 3 colonnes représentant chaque composant.
Conclusion
La PCA rend non seulement les composants d'un ensemble de données indépendants les uns des autres, mais résout également le problème du surajustement en réduisant le nombre de fonctionnalités de l'ensemble de données. Cependant, la réduction de dimension ne se limite pas au seul PCA. Il existe d'autres méthodes comme LDA - Analyse discriminante linéaire et GDA - Analyse discriminante généralisée qui aident à atteindre le même objectif.

