La matrice de design et le modèle linéaire vectorisé
Les modules précédents ont utilisé scikit-learn comme une boîte à outils : fit(), predict(), sans jamais regarder ce qui se passe à l’intérieur. Ce module ouvre le capot : on va coder soi-même, en NumPy pur, un moteur de régression et de classification — sans appeler sklearn.linear_model une seule fois pendant l’entraînement.
Le scénario : GradientForge
Section titled “Le scénario : GradientForge”Un data center facture son électricité au kWh. On dispose de relevés de télémétrie (charge CPU, RAM, trafic réseau) et de la consommation électrique associée, et on veut prédire la consommation à partir de ces métriques — un cas d’usage FinOps réaliste pour un profil Cloud.
L’astuce du biais
Section titled “L’astuce du biais”Un modèle linéaire s’écrit habituellement y = a·x + b. Le paramètre b (l’ordonnée à l’origine, ou biais) demande un traitement à part… sauf si on triche un peu : en ajoutant une colonne de 1 à la matrice de features, b devient un paramètre comme un autre.
import numpy as np
def make_design_matrix(*columns): """Empile des colonnes de features et ajoute la colonne de biais (1).""" X = np.column_stack(columns) bias = np.ones((X.shape[0], 1)) return np.hstack([X, bias])Avec cette astuce, le modèle entier tient en une seule opération matricielle :
def model(X, theta): return X @ thetaX a la forme (m échantillons, n features + 1), theta la forme (n features + 1, 1) — le produit matriciel X @ theta calcule en une opération la prédiction des m échantillons à la fois, sans boucle Python.
Pourquoi vectoriser plutôt que boucler ?
Section titled “Pourquoi vectoriser plutôt que boucler ?”Une boucle for sur chaque exemple fonctionnerait aussi, mais serait des dizaines de fois plus lente sur un jeu de données de taille réelle : NumPy délègue le produit matriciel à du code compilé (BLAS), optimisé et parallélisé, invisible depuis Python. Cette vectorisation est le fil conducteur de tout ce module.
Prochaine étape
Section titled “Prochaine étape”👉 Fonction de coût et descente de gradient
Junior TSAFACK – 12/09/2026