Menu
CoddyTech

PCA

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 26 sur 51.

PCA trouve la direction de plus grande dispersion, puis la meilleure direction perpendiculaire à celle-ci, et ainsi de suite : les composantes. Pour les jumeaux du vin :

Les jumeaux du vin mis à l’échelle forment un nuage qui monte vers la droite, avec deux flèches rouges partant du centre : une longue, composante 1, le long du nuage, et une courte, composante 2, qui le traverse

Les ombres de chaque ligne sur les premières composantes deviennent ses nouvelles caractéristiques :

from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)

Pour les 13 mesures du vin, cela affiche (178, 13) (178, 2).

Commencez par mettre à l’échelle. La PCA privilégie la dispersion, donc une caractéristique exprimée dans de grandes unités, comme la proline qui se compte en centaines, l’emporte par sa seule grandeur :

Deux cartes PCA des 178 vins. À gauche, sans mise à l’échelle : les trois cépages se chevauchent en une seule masse. À droite, après mise à l’échelle : trois groupes distincts

challenge icon

Défi

Moyen

Un laboratoire d’analyse de l’eau teste des bouteilles provenant de trois sources, avec 8 mesures chacune. Une carte en 2D peut-elle distinguer les sources ? draw_springs(ax, points) colore les points en 2D selon la source.

  1. Normalisez X, puis réduisez-le à 2 composantes avec PCA, dans points.
  2. Affichez le nombre de caractéristiques avant et après.
  3. Tracez les points avec draw_springs et affichez le graphique.

Pour un autre laboratoire, avec 6 mesures :

From 6 features to 2

Graphique intitulé Spring Waters in 2D, avec la première composante en abscisse et la deuxième en ordonnée : les bouteilles alpines en bas à gauche, les volcaniques en bas à droite, les côtières en haut, avec une légende

Coddy décrit votre carte.

Essayez vous-même

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Un laboratoire d’analyse de l’eau : 8 mesures pour chacune des 120 bouteilles provenant de trois sources
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# Affiche des points en 2D, un groupe par source, avec une légende
def draw_springs(ax, points):
    for spring in ["alpine", "volcanic", "coastal"]:
        rows = (waters["spring"] == spring).to_numpy()
        ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne