Aller au contenu principal

Module 1 — Vecteurs et matrices : le langage des données

Avant toute formule, une idée : en apprentissage automatique, les données sont des nombres rangés. Un vecteur range les caractéristiques d'une observation, une matrice empile toutes les observations. Comprendre ce rangement, c'est déjà lire la moitié de ce que fait un modèle.

Le vecteur : une observation, une liste de nombres

Un vecteur est une liste ordonnée de nombres. En apprentissage, il décrit une observation par ses caractéristiques :

x=(surface,chambres,aˆge)=(72,3,15)x = (\text{surface}, \text{chambres}, \text{âge}) = (72, 3, 15)

Ce logement devient le point (72,3,15)(72, 3, 15) dans un espace à trois dimensions. Chaque caractéristique est un axe ; l'observation est un point. Avec 50 caractéristiques, on ne peut plus dessiner l'espace, mais l'algèbre continue de fonctionner exactement pareil — c'est là toute sa force.

import numpy as np
logement = np.array([72, 3, 15]) # un vecteur à 3 composantes
logement.shape # (3,) — 3 caractéristiques

La matrice : tout le jeu de données

Empilez plusieurs observations et vous obtenez une matrice : une ligne par observation, une colonne par caractéristique.

X=(72315904845230)X = \begin{pmatrix} 72 & 3 & 15 \\ 90 & 4 & 8 \\ 45 & 2 & 30 \end{pmatrix}

C'est exactement la forme d'un DataFrame pandas ou d'un fichier CSV. La convention est universelle en science des données : X de forme (n_observations, n_caractéristiques). La retenir évite l'erreur la plus fréquente du débutant — confondre lignes et colonnes.

X = np.array([[72, 3, 15],
[90, 4, 8],
[45, 2, 30]])
X.shape # (3, 3) — 3 logements, 3 caractéristiques
X[0] # premier logement (première ligne)
X[:, 0] # colonne des surfaces (toutes observations)

Lire les dimensions : le réflexe qui évite les bugs

La quasi-totalité des erreurs en algèbre linéaire appliquée vient d'un désaccord de dimensions. Prenez l'habitude d'annoncer la forme de chaque objet :

ObjetFormeSignification
Un vecteur d'observation(d,)d caractéristiques
Le jeu de données X(n, d)n observations, d caractéristiques
Le vecteur cible y(n,)une valeur à prédire par observation
Les poids d'un modèle linéaire(d,)un poids par caractéristique

Quand une opération échoue, la première question est toujours : « les formes sont-elles compatibles ? » Ce réflexe résout la majorité des messages d'erreur avant même de lire la trace.

Opérations de base : addition et multiplication par un scalaire

Deux vecteurs de même taille s'additionnent composante par composante ; multiplier par un nombre étire ou réduit le vecteur :

2(72,3,15)=(144,6,30)2 \cdot (72, 3, 15) = (144, 6, 30)
a = np.array([72, 3, 15])
b = np.array([10, 1, 5])
a + b # array([82, 4, 20]) — addition composante par composante
2 * a # array([144, 6, 30]) — mise à l'échelle

Ces deux opérations, anodines en apparence, sont le fondement de tout : un modèle linéaire n'est rien d'autre qu'une combinaison de vecteurs (mise à l'échelle puis addition), et une normalisation de données est une multiplication scalaire appliquée colonne par colonne.

Pourquoi ce cadre plutôt que des boucles

On aurait pu additionner deux listes avec une boucle Python. Mais dès que les données grandissent, écrire l'opération en langage vectoriel permet à NumPy de la déléguer à du code optimisé — c'est la vectorisation vue dans le cours Python. Le langage matriciel n'est pas qu'une notation élégante : c'est ce qui rend les calculs assez rapides pour être utilisables.

En résumé

  • Un vecteur décrit une observation par ses caractéristiques ; c'est un point dans un espace à d dimensions.
  • Une matrice X de forme (n, d) empile n observations en lignes, d caractéristiques en colonnes — la forme d'un CSV.
  • Lire et annoncer les dimensions est le réflexe qui prévient la majorité des bugs d'algèbre linéaire.
  • Addition composante par composante et multiplication scalaire sont les briques de tout modèle linéaire et de toute normalisation.

Module suivant : le produit matriciel, l'opération qui transforme réellement les données et fait tourner chaque couche d'un réseau.