Aller au contenu
learn

L'apprentissage automatique, appliqué dans IX — Mission

Art conceptuel : une ville souterraine de machines dans une immense caverne. Des engrenages de laiton géants et des bras robotisés se penchent sur des dômes de verre qui abritent des forges incandescentes, une passerelle franchit les parois rocheuses, de petites silhouettes humaines traversent le sol, et un puits circulaire de lumière du jour s’ouvre tout en haut.

Art conceptuel, pas un schéma : une ville souterraine originale de machines de précision, inspirée de la planète-machine Ix du Dune de Frank Herbert. Elle ne montre rien des crates IX ni de leur code. Générée sur la machine de l’auteur avec ComfyUI 0.36.0 et Z-Image-Turbo (licence Apache 2.0), graine 20260927 ; un panneau indicateur de 36 × 20 pixels a été flouté pour retirer des marques semblables à des glyphes. Prompt, workflow et temps de génération.

IX est un workspace Rust d’algorithmes d’apprentissage automatique et de mathématiques que Claude Code peut appeler comme outils : k-means, arbres de décision, descente de gradient, et environ quatre-vingts autres crates. Quand un outil répond « 3 clusters, silhouette 0.50 », je veux savoir ce qui a été calculé, si c’est juste, et à quoi ressemblerait une meilleure réponse.

Ma façon d’apprendre un algorithme, c’est de l’écrire. Chaque leçon écrit un algorithme en quelques dizaines de lignes, l’exécute, ainsi que la version d’IX, sur les mêmes données, et compare les deux jusqu’au dernier chiffre affiché. Quand elles diffèrent, l’une des deux a tort, et c’est en cherchant laquelle que j’apprends le plus : c’est ce que consigne le journal, leçon par leçon.

Tu écris du C# ou du Java. L’algèbre du lycée ne te fait pas peur : une droite y = w·x + b, une somme Σ, une racine carrée, une dérivée. Tu n’as besoin de rien savoir de l’apprentissage automatique. Tu n’as pas non plus besoin de bien connaître Rust : le code utilise des boucles, des closures et les matrices de ndarray, et le cours Rust couvre le reste.

Si tu as utilisé ML.NET, Tribuo ou Deeplearning4j, chaque leçon relie ce que tu connais à ce que fait IX.

ML.NET Tribuo IX
Langage C#, F# Java Rust
Un jeu de données IDataView, colonnes typées Dataset<T> d’Example<T> deux matrices ndarray : Array2<f64> pour les caractéristiques, Array1 pour les étiquettes
Un modèle IEstimator.Fit renvoie un ITransformer Trainer.train renvoie un Model une struct avec fit et predict (traits Regressor, Classifier, Clusterer)
Prétraitement NormalizeMeanVariance, ajusté comme un modèle TransformationMap StandardScaler::fit, puis transform
Depuis un assistant IA — — outils MCP comme ix_kmeans et ix_ml_pipeline

Sources : tâches et entraîneurs ML.NET, partitionnement dans Tribuo, README d’IX.

Aucun jeu de données téléchargé : les deux fichiers viennent de ce dépôt, et data/extract.py les reconstruit à partir de l’historique CI que le cours DuckDB a exporté le 2026-09-14 (runs.json et jobs.json) et à partir de Git :

  • builds.csv, pour la régression : les 65 builds réussis de ce site, dans l’ordre des commits, avec le nombre de pages Markdown à ce commit (18 à 289) et les secondes de l’étape qui les construit (10 à 48). Le temps de build augmente-t-il avec le nombre de pages ?
  • jobs.csv, pour la classification, le partitionnement et tout ce qui suit : 186 jobs CI, chacun avec cinq durées en secondes entières (attente dans la file, préparation du job, checkout du dépôt, nettoyage du checkout, fin du job) et l’OS du runner : 121 Ubuntu, 34 Windows, 31 macOS. Les durées permettent-elles de dire quel OS a exécuté un job ?

Le cours utilise pour l’instant sept crates IX : ix-math (statistiques, mise à l’échelle, découpage, calcul différentiel), ix-supervised (régression, classification, métriques, validation croisée), ix-optimize (descente de gradient, recuit, essaim particulaire), ix-unsupervised (k-means, DBSCAN, mélanges gaussiens, ACP), ix-ensemble (forêts aléatoires, gradient boosting), ix-nn (couches, pertes, attention) et ix-voicings (le score de silhouette et le partitionnement des voicings de guitare). Cargo.toml les prend depuis Git, épinglées à un commit, comme le décrit la référence Cargo :

ix-supervised = { git = "https://github.com/GuitarAlchemist/ix", rev = "490c39533627d296bf9f8f050e6fafc14d7a20c2" }

Chaque lien vers du code IX dans les leçons pointe vers ce commit, si bien que les numéros de ligne restent justes quand IX change.

  • découper des données pour l’entraînement et le test, choisir une référence, et évaluer un modèle avec la métrique qui convient à la question ;
  • ajuster une droite de deux façons, par la forme close et par descente de gradient, et dire pourquoi la descente diverge ;
  • entraîner et comparer une régression logistique, les k plus proches voisins et un arbre de décision, avec validation croisée ;
  • regrouper des données sans étiquettes avec k-means, DBSCAN et un mélange gaussien, et juger les groupes ;
  • réduire cinq dimensions à deux, et dire exactement ce que la réduction a coûté ;
  • combiner des modèles faibles par bagging et par boosting, et savoir lequel des deux pardonne un mauvais réglage ;
  • dériver un réseau à la main et vérifier la réponse par différences finies ;
  • choisir une règle de mise à jour, et distinguer une exécution qui a divergé d’une qui a convergé ;
  • lire un algorithme dans IX, le vérifier face à une version écrite à la main et à scikit-learn, et décrire précisément une différence.

Les leçons 1 à 9 sont écrites. Le reste est le plan, une leçon par famille d’algorithmes qu’IX implémente, et chacune sera publiée avec son code et sa vérification croisée comme les autres.

# Leçon Crates IX Si tu connais ML.NET
1 Données, caractéristiques et évaluation ix-math IDataView, TrainTestSplit, RegressionMetrics
2 Régression linéaire et descente de gradient ix-supervised, ix-optimize Ols, OnlineGradientDescent
3 Classification : régression logistique, k plus proches voisins, arbres de décision ix-supervised LbfgsLogisticRegression, FastTree, CrossValidate
4 Partitionnement : k-means, DBSCAN, mélanges gaussiens ix-unsupervised, ix-voicings KMeansTrainer
5 Composantes principales, et ce que signifie un ratio de variance ix-unsupervised ProjectToPrincipalComponents
6 Ensembles : bagging, forêts aléatoires et gradient boosting ix-ensemble FastForest, LightGbm
7 Réseaux de neurones, et les différences finies comme juge ix-nn —
8 Optimisation : descente, momentum, Adam, et recherches sans gradient ix-optimize, ix-math —
9 Les autres réducteurs : MDS, ACP à noyau, NMF, LDA, t-SNE ix-unsupervised —
10 Séquences : chaînes de Markov, modèles de Markov cachés et Viterbi ix-graph —
11 Compter sans compter : filtres de Bloom, HyperLogLog, count-min, coucou ix-probabilistic —
12 Différentiation automatique : le ruban de Wengert ix-autograd —
13 Attention, normalisation de couche et un bloc transformeur ix-nn —
14 Apprentissage par renforcement : bandits et Q-learning ix-rl —
15 Signaux : transformée de Fourier, ondelettes, filtres et Kalman ix-signal —
16 Recherche : A*, recherche arborescente Monte-Carlo, recherche locale ix-search, ix-graph —
17 Évolution : algorithmes génétiques, évolution différentielle, fronts de Pareto ix-evolution —
18 Exemples adverses, empoisonnement et les défenses ix-adversarial —
19 La forme des données : homologie persistante ix-topo, ix-manifold —
20 Sur le GPU : produits matriciels, distances et k plus proches voisins en WGSL ix-gpu —
21 Pipelines de bout en bout, et les outils MCP qu’appelle un assistant ix-pipeline, ix-agent MLContext
— Chaque crate et chaque fonction publique les 80 qui ont une surface publique —
— Journal