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 :
Ce logement devient le point 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.
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 :
| Objet | Forme | Signification |
|---|---|---|
| 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 :
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.
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 à
ddimensions. - Une matrice
Xde forme(n, d)empilenobservations en lignes,dcaracté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.