Programmation Probabiliste avec Infer.NET
← Série Probas | Série PyMC (Python) → | ML.NET (C#) →
Programmation probabiliste avec Microsoft Infer.NET : le corpus bayésien (19 notebooks, ce README) va des fondamentaux (distributions, factor graphs) aux frontières (modèles relationnels, TrueSkill, LDA, HMM, inférence causale (do-calculus de Pearl), processus gaussiens (GP sparse, frontières non-linéaires), modèles hiérarchiques (pooling partiel, shrinkage), filtre de Kalman, détection de rupture (change-point bayésien), analyse de survie (modèles de risque, censure)). Le corpus de théorie de la décision (10 notebooks, ../DecisionTheory/DecInfer/) couvre utilité espérée, EVPI, MDPs, indice de Gittins et bandits bayésiens (Thompson Sampling), avec des preuves formelles Lean 4.
À qui s’adresse cette série : étudiants en IA, développeurs .NET souhaitant maîtriser l’inférence probabiliste par message passing, et data scientists intéressés par les graphes de facteurs. Les notebooks C# requièrent .NET 9.0 + dotnet-interactive. Aucun prérequis en probabilités avancées : les concepts sont introduits progressivement.
Pourquoi cette sous-série
Infer.NET est le seul framework d’inférence probabiliste natif dans l’écosystème .NET. Il compile un modèle probabiliste déclaratif en un algorithme d’inférence spécialisé via reflection et compilation Roslyn, offrant trois moteurs complémentaires : Expectation Propagation (EP) pour les modèles continus et mixtes (défaut, rapide mais approximatif), Variational Message Passing (VMP) pour les modèles à composantes comme LDA (stable, sous-estime l’incertitude), et Gibbs Sampling pour la validation sur petits modèles (exact asymptotiquement, lent). Cette approche compilée contraste avec l’échantillonnage MCMC générique de PyMC et permet des inférences en millisecondes plutôt qu’en minutes. Cette série couvre les 19 notebooks du corpus bayésien (réseaux bayésiens, TrueSkill, LDA, HMM) — voir la table Vue d’ensemble ci-dessous pour la liste exhaustive. Le corpus de théorie de la décision (10 notebooks) et la preuve formelle Lean 4 de l’indice de Gittins vivent dans la sous-série DecisionTheory/DecInfer/.
| Algorithme | Force | Limite | Cas d’usage |
|---|---|---|---|
| EP | Rapide, bon pour gaussiennes | Approximatif, peut diverger | Modèles continus, facteurs mixtes |
| VMP | Stable, bon pour discret | Sous-estime l’incertitude | LDA, modèles à composantes |
| Gibbs | Exact asymptotiquement | Lent, convergence difficile | Validation, petits modèles |
flowchart LR
MOD["Modèle déclaratif<br/>Variables + priors +<br/>vraisemblance"] -->|"compilation Roslyn<br/>(reflection)"| SPEC["Algorithme d'inférence<br/>spécialisé"]
SPEC --> ENG{"Moteur"}
ENG -->|"continu / mixte<br/>(défaut)"| EP["<b>EP</b><br/>Expectation Propagation<br/>rapide · approximatif"]
ENG -->|"composantes<br/>(LDA)"| VMP["<b>VMP</b><br/>Variational MP<br/>stable · sous-estime<br/>l'incertitude"]
ENG -->|"validation<br/>(petits modèles)"| GIBBS["<b>Gibbs</b><br/>échantillonnage<br/>exact asymptotiquement · lent"]
EP --> POST["Posterior<br/>(millisecondes)"]
VMP --> POST
GIBBS --> POST
Le trait distinctif d’Infer.NET : le modèle déclaratif est compilé (via Roslyn/reflection) en un algorithme d’inférence spécialisé, et l’on choisit l’un des trois moteurs selon la structure du modèle. C’est l’inverse d’un échantillonneur MCMC générique (PyMC) qui traite tout modèle pareil — d’où des inférences en millisecondes plutôt qu’en minutes, au prix de l’approximation (EP) ou d’une incertitude sous-estimée (VMP).
Double approche : Cette série est le versant C#/.NET de la programmation probabiliste. Le versant Python (PyMC) couvre les mêmes modèles avec un moteur d’inférence différent. Voir PyMC/ pour la comparaison.
Applications réelles couvertes : TrueSkill (Xbox Live, 100M+ joueurs), Item Response Theory (GMAT/GRE), LDA (Google News), systèmes de recommandation, diagnostic médical.
Objectifs d’apprentissage
À l’issue de cette série, vous serez capable de :
- Construire un modèle probabiliste en Infer.NET (définition, inférence, validation)
- Interpréter les distributions postérieures (moyenne, variance, intervalles de crédibilité)
- Lire un graphe de facteurs et comprendre le flux de messages
- Appliquer la théorie de la décision bayésienne (utilité espérée, EVPI, MDPs)
- Comparer deux familles d’algorithmes sur les mêmes modèles : le message passing sur graphe de facteurs (Infer.NET, EP par défaut) et l’échantillonnage MCMC (PyMC, NUTS par défaut)
Vue d’ensemble
| # | Notebook | Durée | Concepts |
|---|---|---|---|
| 1 | Infer-1-Setup | 15 min | Installation, premier modèle |
| 2 | Infer-2-Gaussian-Mixtures | 50 min | Postérieurs, mélanges, Dirichlet |
| 2b | Infer-2b-Debugging-Bonnes-Pratiques | 45 min | Troubleshooting, diagnostics, algorithmes |
| 3 | Infer-3-Factor-Graphs | 45 min | Inférence discrète, Monty Hall |
| 4 | Infer-4-Bayesian-Networks | 55 min | CPT, D-séparation, causalité |
| 5 | Infer-5-Causal-Inference | 65 min | do-calculus, backdoor/front-door, paradoxe de Simpson |
| 7 | Infer-7-Skills-IRT | 60 min | IRT, DINA, many-to-many — MBML Ch.2 « Assessing People’s Skills » |
| 8 | Infer-8-TrueSkill | 55 min | Ranking, online learning, équipes — MBML Ch.3 « Meeting Your Match » |
| 8b | Infer-8b-TrueSkill-Formules-Fermees | 30 min | Formes fermées V(t)/W(t) de Herbrich-Minka-Graepel 2007, vérification exacte contre le moteur EP, diagnostics de convergence EP et ordonnancement des messages |
| 9 | Infer-9-Classification | 50 min | BPM, régression logistique, A/B, calibration hors échantillon (Brier/AUC/fiabilité) |
| 10 | Infer-10-Model-Selection | 45 min | Evidence, Bayes factors, ARD |
| 11 | Infer-11-Topic-Models | 60 min | LDA, documents-topics-mots |
| 12 | Infer-12-Modeles-Hierarchiques | 50 min | Modèles hiérarchiques, pooling partiel, shrinkage, VariableArray indexé |
| 13 | Infer-13-Crowdsourcing | 55 min | Workers, communautés, agrégation |
| 14 | Infer-14-Sequences | 65 min | HMM, séries temporelles, motifs |
| 15 | Infer-15-Recommenders | 60 min | Factorisation, Click Model |
| 16 | Infer-16-Sparse-Gaussian-Process | 55 min | Processus gaussiens, noyau RBF, classification non-linéaire, sparse GP |
| 17 | Infer-17-Kalman-Filter | 55 min | Filtre de Kalman, système dynamique linéaire gaussien, conjugaison, EP exacte |
| 18 | Infer-18-Change-Point | 50 min | Détection de rupture, DiscreteUniform, ForEach + If/IfNot sur plage, EP, Poisson |
| 19 | Infer-19-Survival-Analysis | 50 min | Analyse de survie, Exponentielle conjugée (Gamma), Weibull par transformée, S(t) forme fermée, censure à droite exécutée (ConstrainPositive vs Kaplan–Meier) |
Théorie de la décision : les notebooks de décision (utilité, EVPI, MDPs, Thompson Sampling, plus les companions Lean) forment désormais un arc autonome dans
../DecisionTheory/DecInfer/, adossé au lakedecision_theory_lean.
Durée totale : ~14h50 (corpus bayésien 1-19)
Ressource complémentaire : Glossaire - Définitions des termes techniques
Prérequis
- .NET 9.0 ou supérieur
- .NET Interactive / Polyglot Notebooks
- VS Code avec extension Polyglot Notebooks (recommandé)
- Graphviz (optionnel, pour visualisation des factor graphs)
Installation
1. .NET SDK 9.0+
# Installer depuis https://dotnet.microsoft.com/download
# Vérifier l'installation
dotnet --version2. Kernel dotnet-interactive
dotnet tool install -g Microsoft.dotnet-interactive
dotnet interactive jupyter install3. Ou utiliser le script d’environnement (recommandé)
# Windows (PowerShell) — installe dotnet-interactive, papermill et enregistre les kernels :
cd MyIA.AI.Notebooks/Probas/Infer/scripts
.\setup_environment.ps1
# Linux / macOS (bash) — jumeau du dépôt (même périmètre : dotnet-interactive,
# papermill, kernels Jupyter) :
./scripts/environment/setup_environment.sh --auto-fixLe script de série
setup_environment.ps1est Windows-only. Sur Linux/macOS, le jumeausetup_environment.shcouvre le même setup. Guide d’installation complet 3 OS :docs/reference/setup-linux-macos.md.
4. Extension VS Code
Installer l’extension “Polyglot Notebooks” depuis le marketplace VS Code.
5. Packages NuGet (automatique)
Chaque notebook inclut les références nécessaires :
#r "nuget: Microsoft.ML.Probabilistic"
#r "nuget: Microsoft.ML.Probabilistic.Compiler"6. Graphviz (optionnel)
Pour les visualisations de factor graphs dans les notebooks 11, 14-19 :
# Windows (chocolatey)
choco install graphviz
# macOS (via Homebrew)
brew install graphviz
# Linux (Debian/Ubuntu)
sudo apt install graphviz
# Ou téléchargement direct depuis https://graphviz.org/download/Vérification
jupyter kernelspec list # doit afficher .net-csharp et python3Tester tous les notebooks
python MyIA.AI.Notebooks/Probas/Infer/scripts/test_notebooks.py --validate-onlyProgression Pédagogique
flowchart TD
P1["<b>Fondamentaux</b> (1-3)<br/>inference · distributions · graphes de facteurs"]
P2["<b>Modèles classiques</b> (4-13)<br/>réseaux bayésiens · causalité · IRT · TrueSkill · classification · sélection · LDA · hiérarchique · crowdsourcing"]
P5["<b>Référence</b> · Debugging (accrétion 2b)<br/>comparaison algorithmes"]
P8["<b>Frontières</b> (14-19)<br/>causalité · GP sparse · hiérarchique · Kalman · change-point · survie"]
DT["<b>Théorie de la décision</b><br/>arc autonome : ../DecisionTheory/DecInfer/"]
P1 --> P2
P2 --> P8
P5 -.->|"diagnostics<br/>à tout moment"| P2
P5 -.-> P8
P8 -.->|"décision séquentielle,<br/>Thompson, Gittins"| DT
%% color: explicite -- sans lui, libelle clair sur fond clair en mode sombre GitHub (#15022) ; ne pas harmoniser le ton avec le stroke (libelle sinon illisible)
classDef decision fill:#d1ecf1,stroke:#0c5460,stroke-width:2px,color:#0c5460;
class DT decision;
Le corpus (1-19, le numéro 6 n’existe pas — le debugging vit en accrétion Infer-2b) se suit en séquence ; l’accrétion Debugging y joue un rôle transversal — elle compare aussi les trois algorithmes (EP/VMP/Gibbs) et sert de référence dès qu’une inférence dysfonctionne. Les notebooks 14-19 (Frontières) prolongent le corpus bayésien (causalité, processus gaussiens, modèles hiérarchiques, filtre de Kalman, détection de rupture, analyse de survie). La théorie de la décision — utilité espérée, EVPI, MDPs, Thompson Sampling, plus les companions Lean (indice de Gittins) — forme désormais un arc autonome dans ../DecisionTheory/DecInfer/, adossé au lake decision_theory_lean. Le détail notebook-par-notebook figure dans les sections détaillées ci-dessous.
Fondamentaux (Notebooks 1-3)
Les notebooks 1-3 introduisent les concepts fondamentaux de la programmation probabiliste avec Infer.NET.
Infer-1 : Configuration et Premier Modèle
Durée : 45 min | Prérequis : Notions de probabilités
Objectifs :
- Installer et configurer Infer.NET dans .NET Interactive
- Comprendre le workflow en 3 étapes : Modèle → Moteur → Inférence
- Implémenter un premier modèle bayésien (Two Coins)
- Maîtriser les priors conjugués Beta-Bernoulli
Sections :
- Configuration de l’environnement (.NET Interactive, CompilerChoice.Roslyn)
- Introduction à la programmation probabiliste
- Exemple : Problème des deux pièces (Two Coins)
- Exemple avancé : Estimation de pièce biaisée avec prior Beta
- Apprentissage en ligne : mise à jour séquentielle
Concepts clés :
| Concept | Description |
|---|---|
| Variable<T> | Représentation des quantités incertaines |
| Prior conjugué | Beta-Bernoulli pour inférence analytique |
| ExpectationPropagation | Algorithme d’inférence par défaut |
Applications : Estimation de pièce biaisée, apprentissage en ligne
Infer-2 : Distributions Continues et Mélanges
Durée : 50 min | Prérequis : Notebook 1
Objectifs :
- Modéliser des données continues avec distributions gaussiennes
- Maîtriser les priors conjugués Gaussian-Gaussian et Gamma-Gamma
- Implémenter l’apprentissage en ligne
- Découvrir les modèles de mélange avec
Variable.Switch
Sections :
- Modélisation de temps de trajet de cycliste
- Priors conjugués et apprentissage en ligne
- Mélanges gaussiens pour données multimodales
- Visualisation des factor graphs
Concepts clés :
| Distribution | Usage | Paramètres |
|---|---|---|
| Gaussian | Quantités continues | mean, precision |
| Gamma | Prior sur precision | shape, scale |
| Variable.Switch | Sélection de composante | index, values |
Applications : Temps de trajet cycliste, détection de modes multiples, clustering
Infer-3 : Graphes de Facteurs et Inférence Discrète
Durée : 55 min | Prérequis : Notebooks 1-2
Objectifs :
- Comprendre la représentation en graphes de facteurs
- Maîtriser
Variable.If/IfNotetVariable.Casepour branchements - Observer le phénomène d’explaining away
- Implémenter le paradoxe de Monty Hall
Sections :
- Introduction aux graphes de facteurs
- Exemple Murder Mystery (MBML Ch.1)
- Paradoxe de Monty Hall avec
Variable.Case - Phénomène Explaining Away
- Visualisation Graphviz
Concepts clés :
| Structure | Usage | Exemple |
|---|---|---|
| Variable.If | Conditionnement binaire | P(Y|X=true) |
| Variable.Case | Conditionnement multi-value | Switch sur enum |
| Explaining away | Causes alternatives | P(A|B,C) < P(A|C) |
Applications : Murder Mystery, Monty Hall (2/3 vs 1/3), systèmes experts
Modèles Classiques (Notebooks 4-6)
Les notebooks 4-6 couvrent les modèles bayésiens classiques : réseaux, compétences et classement.
Infer-4 : Réseaux Bayésiens
Durée : 60 min | Prérequis : Notebook 3
Objectifs :
- Construire des réseaux bayésiens avec tables de probabilité conditionnelle (CPT)
- Comprendre D-séparation et indépendance conditionnelle
- Distinguer inférence causale (do) vs observationnelle
- Implémenter des modèles hiérarchiques
Sections :
- Réseau Wet Grass/Sprinkler/Rain
- Construction de CPTs avec
Variable.Case - D-séparation et indépendance
- Inférence causale vs observationnelle
- Modèle hiérarchique Rats (BUGS)
Concepts clés :
| Concept | Formule | Description |
|---|---|---|
| CPT | P(X | Parents(X)) | Table de probabilité conditionnelle |
| D-séparation | - | Critère graphique d’indépendance |
| do-calculus | P(Y | do(X)) ≠ P(Y | X) | Intervention vs observation |
| Hiérarchique | θᵢ ~ F(λ) | Pooling partiel entre groupes |
Applications : Wet Grass, diagnostic médical, modèle Rats (8 laboratoires)
Infer-7 : Théorie de la Réponse à l’Item (IRT)
Durée : 65 min | Prérequis : Notebook 4
Objectifs :
- Implémenter IRT (Item Response Theory) Difficulty-Ability
- Découvrir DINA pour compétences discrètes
- Modéliser les paramètres slip et guess
- Gérer les relations many-to-many avec Q-matrix
- Évaluer avec courbes ROC
Sections :
- Modèle IRT Difficulty-Ability (continu)
- Modèle DINA avec compétences binaires
- Paramètres slip et guess
- Q-matrix pour compétences multiples
- Évaluation ROC
Concepts clés :
| Modèle | Formule | Usage |
|---|---|---|
| IRT | P(correct) = σ(ability - difficulty) | Compétence continue |
| DINA | ηᵢⱼ = Πₖ αⱼₖ^qᵢₖ | Compétences binaires |
| Slip | P(erreur | maîtrise) | Erreur d’inattention |
| Guess | P(succès | non-maîtrise) | Réponse au hasard |
Applications : Tests éducatifs, diagnostic de compétences, adaptive testing
Infer-8 : TrueSkill
Durée : 50 min | Prérequis : Notebook 2
Objectifs :
- Comprendre le système TrueSkill (Xbox Live)
- Modéliser le skill comme Gaussian(μ, σ²)
- Gérer les matchs avec
ConstrainBetween - Implémenter l’apprentissage en ligne
- Étendre au 2v2 et free-for-all
Sections :
- Modèle TrueSkill de base (1v1)
- Représentation du skill : N(μ, σ²)
- Modeling matches avec performance = skill + bruit
- Gestion des ex-aequo
- Extensions : Teams (2v2), Multi-player
Concepts clés :
| Composant | Formule | Description |
|---|---|---|
| Skill | N(μ, σ²) | Niveau + incertitude |
| Performance | pᵢ = skillᵢ + N(0, β²) | Skill + bruit de match |
| Team skill | Σ skills individuels | Somme des membres |
| Update | μ_new ∝ surprise | Plus grande si upset |
Applications : Classement Xbox Live, tournois esports, matchmaking équilibré
Infer-8b : TrueSkill — Formules Fermées
Durée : 30 min | Prérequis : Infer-8-TrueSkill
Objectifs :
- Dériver les fonctions de troncature V(t) et W(t) (cas à 2 joueurs)
- Implémenter la mise à jour closed-form — O(1) par match, sans inférence compilée
- Vérifier numériquement la cohérence exacte avec le moteur EP d’Infer.NET
- Comprendre le terme de dynamique τ² (équilibre contraction / regrowth)
Concepts clés :
| Composant | Formule | Description |
|---|---|---|
| Troncature | V(t) = φ(t)/Φ(t) | Ratio densité/CDF de la Gaussienne réduite |
| Troncature | W(t) = V(t)(V(t)+t) | Contraction de la variance |
| Mise à jour | μ’ = μ ± (σ²/c)·V(t) | Déplacement du skill, signé gagnant/perdant |
| Variance | σ’² = σ²(1 − (σ²/c²)·W(t)) | Contraction bornée par le ratio σ²/c² |
| Dynamique | σ² ← σ² + τ² | Régrowth entre matchs : l’incertitude d’un inactif remonte |
Applications : Vélocité de production Xbox Live — la lettre isole la contribution algorithmique du papier (Herbrich, Minka & Graepel, NeurIPS 2007) que le moteur EP d’Infer-8 calcule sous le capot.
Contenus ajoutés (croissance #17981) :
- Diagnostics de convergence EP sur matchs couplés — trajectoire, point fixe, et écart mesuré au postérieur exact (quadrature 1D) : l’approximation factorisée est surconfiante, le schéma online O(1) reste plus fidèle
- Ordonnancement des messages — séquentiel (Gauss-Seidel) vs parallèle (Jacobi) : même point fixe, vitesse de convergence mesurée (~2× moins de balayages en séquentiel)
Classification et Sélection (Notebooks 7-8)
Les notebooks 7-8 couvrent la classification bayésienne et la sélection de modèles.
Infer-9 : Classification Bayésienne
Durée : 55 min | Prérequis : Notebook 4
Objectifs :
- Implémenter la régression logistique bayésienne (probit model)
- Découvrir le Bayes Point Machine (BPM)
- Modéliser les tests A/B cliniques avec Beta-Binomial
- Propager l’incertitude dans les prédictions
Sections :
- Régression logistique bayésienne (probit)
- Bayes Point Machine (BPM) multi-features
- Test A/B clinique avec Beta-Binomial
- Propagation d’incertitude
- Exercice : Classification de spam
Concepts clés :
| Modèle | Formule | Description |
|---|---|---|
| Probit | P(y=1|x) = Φ(w·x) | CDF gaussienne |
| BPM | Moyenne du posterior sur w | Classification robuste |
| Beta-Binomial | Hiérarchique pour proportions | Test A/B |
Applications : Classification spam/ham, test A/B clinique, détection d’anomalies
Infer-10 : Sélection de Modèles
Durée : 50 min | Prérequis : Notebook 7
Objectifs :
- Calculer l’evidence (marginal likelihood)
- Comparer modèles avec Bayes Factor
- Comprendre Occam’s Razor automatique
- Implémenter ARD (Automatic Relevance Determination)
Sections :
- Evidence et marginal likelihood
- Bayes Factor pour comparaison de modèles
- Occam’s Razor : pénalisation automatique
- ARD pour sélection de features
- LOO-CV bayésien vs fréquentiste
Concepts clés :
| Concept | Formule | Interprétation |
|---|---|---|
| Evidence | P(D|M) = ∫ P(D|θ)P(θ|M)dθ | Vraisemblance marginale |
| Bayes Factor | BF₁₂ = P(D|M₁) / P(D|M₂) | >10 = forte evidence |
| ARD | wᵢ ~ N(0, λᵢ⁻¹) | λᵢ → ∞ si non pertinent |
Applications : Comparaison polynômes, feature selection, model averaging
Modèles Avancés (Notebooks 9-12)
Les notebooks 9-12 couvrent les modèles avancés : topics, crowdsourcing, séquences et recommandation.
Infer-11 : Topic Models (LDA)
Durée : 60 min | Prérequis : Notebook 4
Objectifs :
- Implémenter LDA (Latent Dirichlet Allocation)
- Maîtriser les priors Dirichlet
- Résoudre la convergence VMP vers solutions dégénérées
- Utiliser des priors asymétriques
Sections :
- Introduction à LDA et bag-of-words
- Priors Dirichlet conjugués
- Problème : VMP + priors symétriques → modes dégénérés
- Solution : Priors asymétriques
- Prédiction sur nouveaux documents
Concepts clés :
| Composant | Distribution | Rôle |
|---|---|---|
| θ_d | Dirichlet(α) | Proportions topics/document |
| z_dn | Categorical(θ_d) | Topic du mot n |
| φ_k | Dirichlet(β) | Distribution mots/topic |
Note : Utilise VMP au lieu d’EP pour les modèles LDA.
Applications : Analyse de corpus, détection de thèmes, recommandation de contenu
Infer-13 : Crowdsourcing
Durée : 55 min | Prérequis : Notebook 4
Objectifs :
- Agréger des annotations de multiples annotateurs
- Modéliser Honest Worker (capacité unique)
- Implémenter Biased Worker (matrice de confusion)
- Découvrir le modèle Community
- Appliquer l’apprentissage actif
Sections :
- Modèle Honest Worker
- Modèle Biased Worker (matrice de confusion)
- Modèle Community (groupes hiérarchiques)
- Active learning : sélection d’items
- Gold standard pour calibration
Concepts clés :
| Modèle | Formule | Description |
|---|---|---|
| Honest | P(label|true, worker) = α_worker | Capacité unique |
| Biased | C_worker[true, observed] | Matrice de confusion |
| Uncertainty | H(c | y₁:ₙ) | Entropie pour active learning |
Applications : Amazon Mechanical Turk, contrôle qualité, optimisation budget annotation
Infer-14 : Séquences (HMM)
Durée : 65 min | Prérequis : Notebook 10
Objectifs :
- Comprendre les Hidden Markov Models (HMM)
- Implémenter les émissions gaussiennes
- Décoder les séquences d’états cachés
- Appliquer au motif finding (bioinformatique)
Sections :
- Introduction aux HMM
- HMM avec émissions gaussiennes
- Approche simplifiée : classification indépendante
- HMM complet avec Forward-Backward
- Détection de régimes météo
- Motif finding ADN
- Exercice : Détection de promotions
Concepts clés :
| Algorithme | Formule | Usage |
|---|---|---|
| Forward | αₜ(k) = P(x₁:ₜ, zₜ=k) | Probabilité jointe |
| Backward | βₜ(k) = P(xₜ₊₁:T | zₜ=k) | Complément |
| Posterior | γₜ(k) ∝ αₜ(k)·βₜ(k) | État à chaque t |
Note : Infer.NET ne supporte pas nativement les HMM complets. Implémentation manuelle Forward-Backward recommandée.
Applications : Détection d’anomalies capteur, prévision météo, motif finding ADN
Infer-15 : Systèmes de Recommandation
Durée : 70 min | Prérequis : Notebook 7
Objectifs :
- Implémenter la factorisation matricielle probabiliste
- Gérer le cold-start avec features
- Découvrir le Click Model pour sources multiples
- Classer des documents par pertinence
Sections :
- Introduction aux systèmes de recommandation
- Factorisation matricielle (User × Item traits)
- Problème de sous-détermination avec peu de données
- Cold-start : régression avec features
- Click Model : agrégation de sources
- Classement de documents
- Exercice : Recommandation de films
Concepts clés :
| Modèle | Formule | Description |
|---|---|---|
| Factorisation | R_ui ≈ U_u · I_i | Traits latents |
| Cold-start | R ~ w·features | Features utilisateur/item |
| Click Model | P(click) = P(examine) × P(relevant) | Sources multiples |
Applications : Netflix/Amazon, moteurs de recherche, e-commerce
Référence (Infer-2b)
Infer-2b : Debugging et Bonnes Pratiques
Durée : 60 min | Prérequis : Tous les notebooks précédents
Objectifs :
- Diagnostiquer les erreurs courantes
- Comparer EP vs VMP
- Maîtriser les outils de debug Infer.NET
- Appliquer les bonnes pratiques
Sections :
- Erreurs courantes et solutions
- Comparaison EP vs VMP
- Outils de debug (ShowFactorGraph, BrowserMode)
- Bonnes pratiques de modélisation
- Checklist de debugging
- Fonctions de diagnostic
- Exercice : Debugger un modèle bugué
Problèmes courants :
| Problème | Symptôme | Solution |
|---|---|---|
| Observed + Inferred | PointMass | Ne pas ObservedValue sur variable inférée |
| Label switching | Modes symétriques | Priors asymétriques |
| Variance nulle | IsPointMass = true | Vérifier prior, observations |
| Convergence lente | Iterations > 50 | Vérifier graphe, utiliser VMP |
Comparaison EP vs VMP :
| Critère | EP | VMP |
|---|---|---|
| Exactitude | Exact (gaussiennes) | Approximation |
| Vitesse | Plus lent | Rapide |
| Convergence | Garantie | Peut diverger |
Bonnes pratiques :
- Nommer toutes les variables :
.Named("theta") - Vérifier le factor graph systématiquement
- Tester avec données simulées
- Choisir priors informatifs (Beta(2,2) > Beta(1,1))
- Valider posteriors (variance > 0, IsProper = true)
Théorie de la Décision (arc autonome)
Les notebooks de théorie de la décision — fondements de l’utilité (axiomes vNM, aversion au risque), utilité multi-attributs, réseaux de décision, valeur de l’information (EVPI/EVSI), systèmes experts (Minimax/regret), décisions séquentielles (MDPs), Thompson Sampling bayésien, plus les companions Lean (preuve formelle du théorème vNM, cohérence de de Finetti et indice de Gittins) — constituent désormais un arc autonome dans ../DecisionTheory/DecInfer/, adossé au lake decision_theory_lean.
Cette extraction clarifie les deux fils du corpus Probas : la modélisation bayésienne (ce README, notebooks 1-19) et la théorie de la décision (DecisionTheory/). Voir le README de DecisionTheory pour la vue d’ensemble, la progression pédagogique et le détail notebook-par-notebook.
Inférence Causale (Notebook 5)
Infer-5 : Inférence Causale et do-calculus
Durée : 65 min | Prérequis : Notebook 4 (réseaux bayésiens, CPT, D-séparation)
Objectifs :
- Distinguer observation
P(Y|X)et interventionP(Y|do(X))(Pearl, 2000) - Implémenter le do-opérateur par mutilation de graphe (
Variable.Bernoulli(1.0)coupe l’arc parent) - Calculer l’effet causal via backdoor et front-door adjustment
- Reconnaître et résoudre causalement le paradoxe de Simpson
- Aborder le contrefactuel (Niveau 3 de l’échelle de Pearl)
Concepts clés :
| Concept | Formule | Description |
|---|---|---|
| do-opérateur | P(Y\|do(X)) |
Intervention : coupe les arcs entrants de X |
| Backdoor | Σ_u P(Y\|X,u)P(u) |
Ajustement quand le confondeur U est observé |
| Front-door | Σ_m P(M\|X)Σ_{x'} P(Y\|M,x')P(x') |
Ajustement par médiateur quand U est inobservable |
| Simpson | agrégé ≠ conditionnel | Renversement : la conclusion s’inverse |
Positionnement : le notebook Infer-4 n’abordait la causalité qu’en deux cellules isolées. Infer-5 en fait un traitement dédié et distributionnel : les effets causaux sont calculés par le moteur d’inférence Infer.NET via mutilation de graphe, là où le jumeau symbolique Tweety-11-Causal raisonne en Java propositionnel, et où PyMC-4 démontre P(Cloudy|do(Rain)) en MCMC.
Ponts causaux : Infer-5 est le maillon distributionnel par message passing (Infer.NET, EP/VMP) d’un pont à quatre paradigmes autour du do(·) de Pearl — le jumeau symbolique Tweety-11-Causal (Java propositionnel), le jumeau MCMC PyMC-5, et la lecture par l’émergence causale ICT-5, où la distribution d’intervention p(C) uniforme est do(X_t = x). Vue d’ensemble : le README IIT, section « Ponts causaux : le do-calculus de Pearl à travers les paradigmes ».
Applications : baromètre (confondeur), diagnostic médical (paradoxe de Simpson), tabac-cancer (front-door), requêtes contrefactuelles.
Modèles Non-Linéaires (Notebook 16)
Infer-16 : Processus Gaussiens et frontières non-linéaires
Prolongement naturel de la classification bayésienne : là où Infer-9 (Bayes Point Machine) trace un hyperplan, le processus gaussien place un prior sur des fonctions (noyau RBF) et infère une frontière courbe et incertaine.
Durée : 55 min | Prérequis : Infer-9-Classification (BPM, modèle probit), Infer-2-Gaussian-Mixtures, Infer-12-Modeles-Hierarchiques (prior partagé = plus robuste qu’un prior isolé)
Objectifs :
- Comprendre le processus gaussien comme une distribution sur des fonctions (moyenne + noyau de covariance)
- Construire un prior via le noyau squared-exponential (RBF) et sa longueur de corrélation
- Implémenter la classification GP (modèle probit
y = [f(x) > 0]) sur des données non-linéairement séparables - Mesurer le rôle du basis set (points inducteurs) dans l’approximation sparse vs full
- Contraster avec le Bayes Point Machine : frontière linéaire vs courbe, coût \(O(nm^2)\) vs linéaire
Concepts clés :
| Concept | Formule / API | Description |
|---|---|---|
| Prior sur fonctions | Variable<IFunction>.Random(prior) |
Distribution sur \(f\), pas sur un vecteur de poids |
| Noyau RBF | \(k(x,x') = \exp(-\lVert x-x'\rVert^2 / 2\ell^2)\) | Covariance décroissant avec la distance |
| Modèle probit | \(y_j = [f(x_j) + \varepsilon_j > 0]\) | Score = fonction (non-linéaire), bruit gaussien |
| Sparse GP | SparseGPFixed(gp, basis) |
Approximation sur \(m\) points inducteurs, coût \(O(nm^2)\) |
| Full GP | basis = inputs (\(m = n\)) | Équivalent au GP non-sparse, coût \(O(n^3)\) |
Positionnement : Infer-9 introduisait le Bayes Point Machine (hyperplan séparateur, marginalisation sur les poids). Infer-16 en est le complément non-linéaire : le GP infère une fonction \(f\) tirée d’un processus gaussien, capable de frontières courbes. La démonstration sur un dataset « donut » (disque intérieur + anneau extérieur, non-séparable linéairement) prouve que le GP résout ce que le BPM ne peut pas — 16/16 sur le training, avec une incertitude calibrée (P ≈ 0.5 à mi-rayon, la zone d’indécision). La comparaison sparse (4 inducteurs) vs full (16) illustre le continuum coût-exactitude.
Applications : classification non-linéaire, régression avec incertitude calibrée, géostatistique (krigeage), optimisation bayésienne (l’acquisition exploite le posterior GP).
Modèles Hiérarchiques (Notebook 15)
Infer-12 : Modèles Hiérarchiques Bayésiens
Cas d’école du pooling partiel : quand les données sont structurées en groupes (élèves dans des classes, patients dans des hôpitaux, mesures répétées), ni le complete pooling (un seul paramètre global qui gomme la variabilité entre groupes) ni le no pooling (un paramètre indépendant par groupe qui surajuste les groupes clairsemés) ne sont satisfaisants. La solution bayésienne donne à chaque groupe son propre paramètre theta[c], mais tous tirés d’une loi de population commune (mu, tau) — les groupes mal informés rétractent (shrinkage) vers la moyenne globale.
Durée : 50 min | Prérequis : Infer-2-Gaussian-Mixtures (prior gaussien, précision), Infer-4-Bayesian-Networks (modèle Rats hiérarchique en deux cellules)
Objectifs :
- Comprendre le dilemme complete-pool / no-pool / partial-pool sur des groupes inégalement informés
- Construire un modèle hiérarchique natif Infer.NET :
theta[c] ~ Gaussian(mu, tau)viaVariableArrayindexé partheta[classOfI[i]] - Observer le shrinkage sur données synthétiques à vrais effets connus : les groupes clairsemés (effectif 1-2) rétractent vers
mu - Mesurer le gain de récupération (MSE hiérarchique vs no-pooling) et le rôle auto-calibré de la précision de population
tau - Prédire pour un nouveau groupe non observé (posterior prédictif = loi de population)
Concepts clés :
| Concept | Formule / API | Description |
|---|---|---|
| Prior de population | mu ~ Gaussian(0, grand), tau ~ Gamma |
Loi commune dont chaque groupe est tiré |
| Effet de groupe | theta[c] = GaussianFromMeanAndPrecision(mu, tau).ForEach(c) |
Un paramètre par groupe, partagé |
| Indexation | y[i] ~ Gaussian(theta[classOfI[i]], obsPrec) |
Rattachement observation → groupe |
| Shrinkage | theta[c] ↔︎ compromis données/moyenne |
Plus fort pour les groupes clairsemés |
Positionnement : le notebook Infer-4 effleurait le modèle Rats (8 laboratoires) en deux cellules ; Infer-12 en fait un traitement dédié et démonstratif — données synthétiques avec vrais effets connus, comparaison no-pool vs partial-pool mesurée en MSE de récupération. Le gain net (hierarchique bat le no-pooling) et la rétraction visible sur les groupes clairsemés prouvent que le prior de population partagé emprunte de la force statistique aux voisins — exactement le paradigme pour lequel Infer.NET (EP analytique sur gaussiennes, VariableArray + indexation) est un moteur natif, sans recours au MCMC.
Applications : estimations par établissement/classe, essais multi-centres, mesures répétées par sujet, modèles de recommandation (cf Infer-15), régressions à coefficients variables par groupe.
Filtrage et séquences continues (Notebook 17)
Infer-17 : Filtre de Kalman (système dynamique linéaire gaussien)
Le filtre de Kalman (Kalman, 1960) est l’analogue à état continu du HMM d’Infer-14 : l’état caché \(x_t\) (position, température, prix) évolue linéairement avec un bruit gaussien (la dynamique, variance \(Q\)), et on l’observe à travers un autre bruit gaussien (le capteur, variance \(R\)). Parce que tout est linéaire et gaussien, l’inférence est exactement conjugée : le postérieur reste gaussien à chaque pas, calculable en temps fermé — c’est le cas d’école où Infer.NET (EP) résout l’inférence de manière exacte, sans MCMC ni approximation variationnelle.
Durée : 55 min | Prérequis : Infer-14-Sequences (HMM, structure markovienne), Infer-2-Gaussian-Mixtures (conjugaison gaussienne)
Objectifs :
- Comprendre le filtre de Kalman comme le pendant continu du HMM discret
- Formuler un système dynamique linéaire gaussien (équations de transition et d’observation)
- Implémenter la récursion de filtrage bayésien (prédiction + mise à jour) via Infer.NET, en compilant le mini-modèle une fois et en le réutilisant via
ObservedValue - Mesurer l’apport du filtre : MSE filtrée vs MSE brute, variance postérieure bornée (équation de Riccati)
Concepts clés :
| Concept | Formule / API | Description |
|---|---|---|
| Transition | x[t] ~ N(x[t-1] + drift, Q) |
Dynamique : l’état évolue avec du bruit |
| Observation | y[t] ~ N(x[t], R) |
Capteur bruité de l’état caché |
| Prédiction | propager le postérieur (variance += Q) |
L’incertitude croît entre deux observations |
| Mise à jour | engine.Infer<Gaussian>(x) (EP) |
Conjugaison : postérieur gaussien exact |
| Borne de variance | équation de Riccati discrète | L’incertitude résiduelle plafonne (filtre fiable) |
Positionnement : Infer-14 couvrait le HMM à état discret (météo, mots) ; Infer-17 franchit le pas vers l’état continu — le filtre le plus utilisé au monde (navigation GPS, fusion de capteurs, contrôle, finance). La récursion pas-à-pas compile le mini-modèle linéaire-gaussien une fois (Variable.New<double> + ObservedValue), et EP retourne le postérieur exact qui sert d’a priori au pas suivant. Sur une trajectoire dérivante fortement bruitée (\(R = 4 \gg Q = 0{,}5\)), le filtre réduit l’erreur de ~74 % (MSE brute 4,88 → filtrée 1,28) et borne la variance postérieure vers 1,2 (vs \(R = 4\)) — la signature d’un filtre qui aide.
Applications : suivi de mobiles, navigation inertielle et GPS, fusion multi-capteurs, filtrage de signaux, tracking financier, estimation d’état en robotique et contrôle.
Infer-18 : Détection de rupture (change-point bayésien)
Le point de rupture (change-point) modélise une série qui suit un régime stable, puis bascule une seule fois vers un autre régime à un instant cp inconnu. Contrairement au HMM d’Infer-14 (état discret récurrent) et au filtre de Kalman d’Infer-17 (état continu récurrent), l’inconnue n’est pas une trajectoire d’états mais un unique entier — l’indice de la rupture. L’idiome Infer.NET : un a priori Variable.DiscreteUniform(N) sur cp, une sélection de vraisemblance Variable.If(block.Index <= cp) / IfNot à l’intérieur d’un Variable.ForEach sur la plage temporelle, et le moteur EP qui retourne un postérieur Discrete sur la localisation de la rupture.
Durée : 50 min | Prérequis : Infer-14-Sequences (Variable.ForEach), Infer-2-Gaussian-Mixtures (conjugaison), Infer-10-Model-Selection (Bayes factors)
Objectifs :
- Comprendre le change-point comme le quatrième membre de la famille « séquences dans le temps » (HMM, Kalman, GP, rupture)
- Maîtriser l’idiome
DiscreteUniform+ForEach+If(block.Index <= cp)couplé à une plage - Construire le modèle gaussien (saut de moyenne) et le modèle de Poisson (saut de taux — cas canonique des catastrophes minières)
- Mesurer la concentration du postérieur (entropie) et comprendre le piège du surajustement — pourquoi un Bayes factor est nécessaire pour distinguer une vraie rupture d’un caprice du bruit
Concepts clés :
| Concept | API | Description |
|---|---|---|
| Localisation de rupture | Variable.DiscreteUniform(N) |
A priori uniforme sur l’indice entier cp |
| Sélection de régime | Variable.If(block.Index <= cp) / IfNot |
Branche la vraisemblance avant/après la rupture |
| Postérieur discret | ie.Infer<Discrete>(cp) |
Vecteur de probabilités sur les \(N\) positions |
| Initialisation EP | taux.InitialiseTo(...) |
EP déterministe : amorcer les taux évite les optima locaux |
| Concentration | entropie \(H(\text{cp})\) | \(H \to 0\) = rupture certaine ; le Bayes factor teste sa réalite (cf. Infer-8) |
Positionnement : Infer-14 et Infer-17 infèrent un état récurrent (un par pas) ; Infer-18 infère un indice structurel unique couplé à toute la plage — un usage du If sur une plage qu’aucun autre notebook n’exploite. Sur le cas gaussien, EP récupère le vrai point caché exactement (mode = 50, masse 0,998) ; sur les catastrophes minières (1851–1962), la rupture est datée à 1890–1891 (taux 3,1 → 0,9, rapport 3,3×), soit le résultat canonique de la littérature. Le notebook pointe aussi vers Infer-5 (Causal) : un point de rupture est un changement de mécanisme générateur.
Applications : contrôle qualité (dérive de production), finance (changement de régime de marché), épidémiologie, surveillance de capteurs, datation d’événements structurels en sciences sociales et climatiques.
Concepts Clés Infer.NET
Types de Variables
| Type | Description | Exemple |
|---|---|---|
Variable<bool> |
Variable booléenne | Variable.Bernoulli(0.5) |
Variable<double> |
Variable continue | Variable.GaussianFromMeanAndVariance(0, 1) |
Variable<int> |
Variable discrète | Variable.DiscreteUniform(5) |
VariableArray<T> |
Tableau 1D | Variable.Array<double>(range) |
VariableArray2D<T> |
Tableau 2D | Variable.Array<double>(range1, range2) |
Distributions
| Distribution | Usage | Paramètres |
|---|---|---|
| Bernoulli | Bool | prob |
| Gaussian | Continue | mean, variance/precision |
| Gamma | Precision | shape, scale |
| Beta | Probabilité | alpha, beta |
| Dirichlet | Proportions | concentrations |
| Discrete | Catégorique | probs |
Structures de Contrôle
// Conditionnement
using (Variable.If(condition)) { ... }
using (Variable.IfNot(condition)) { ... }
// Sélection (switch)
using (Variable.Switch(variable)) { ... }
using (Variable.Case(variable, value)) { ... }
// Boucles
using (Variable.ForEach(range)) { ... }Inférence
InferenceEngine moteur = new InferenceEngine();
moteur.Compiler.CompilerChoice = CompilerChoice.Roslyn; // Important pour notebooks
moteur.Algorithm = new ExpectationPropagation(); // ou VariationalMessagePassing
var posterior = moteur.Infer<DistributionType>(variable);Structure des Fichiers
Infer/
+-- Infer-1-Setup.ipynb ... Infer-19-Survival-Analysis.ipynb # 19 notebooks (Infer-11 = Topic-Models)
+-- Infer-Glossary.md
+-- FactorGraphHelper.cs # Helper pour visualisation Graphviz
+-- README.md
+-- data/ # Datasets (murder_mystery.json, matches.csv, skills_quiz.csv, ...)
+-- scripts/ # Scripts de maintenance
Le companion Lean 4 (preuves formelles de l’indice de Gittins) vit dans l’arc théorie de la décision :
../DecisionTheory/DecInfer/DecInfer-08b-Lean-Gittins.ipynb(post-renumérotation #5200).
Domaines d’Application
| Domaine | Modèles | Notebooks |
|---|---|---|
| Jeux vidéo | TrueSkill, ranking | 8 |
| Éducation | IRT, DINA, compétences | 7 |
| NLP | LDA, topics | 11 |
| Médecine | Diagnostic bayésien, test A/B, analyse de survie | 4, 9, 19 |
| Crowdsourcing | Agrégation d’annotations | 13 |
| Finance | Détection de régimes (rupture) | 18 |
| E-commerce | Recommandation, factorisation | 15 |
| Bioinformatique | Motif finding (HMM, ADN) | 14 |
| Suivi, fusion de capteurs | Filtre de Kalman | 17 |
| Contrôle qualité | Détection de rupture (dérive de production) | 18 |
Les applications de théorie de la décision — MDPs, valeur de l’information (EVPI/EVSI), aversion au risque, Thompson Sampling, indice de Gittins — vivent dans l’arc autonome
../DecisionTheory/DecInfer/.
Sources et Références
Documentation Officielle
Livre de Référence
- Model-Based Machine Learning (MBML) - Bishop et al.
Références Théorie de la Décision
- von Neumann & Morgenstern (1944) : Theory of Games and Economic Behavior
- Arrow (1965) : Aspects of the Theory of Risk Bearing
- Keeney & Raiffa (1976) : Decisions with Multiple Objectives
- Howard (1966) : Information Value Theory
- Bellman (1957) : Dynamic Programming
Exemples Utilisés
- WetGrassSprinklerRain (Bayesian Networks)
- Murder Mystery (Factor Graphs, MBML Ch1)
- TrueSkill (Ranking, MBML Ch3)
- StudentSkills (IRT/DINA, MBML Ch2)
- ClinicalTrial (A/B Testing)
- LDA (Topic Models)
- Crowdsourcing (MBML Ch7)
- RecommenderSystem (Factorisation)
- ClickModel (Multi-vues)
- St-Petersburg Paradox (Decision Theory)
- Investment Portfolio (Decision Networks)
- Medical Diagnosis (Expert Systems)
- Inventory Management (MDPs)
Algorithmes d’Inférence
| Algorithme | Avantage | Utilisation |
|---|---|---|
| EP (Expectation Propagation) | Rapide, approximatif | Par défaut |
| VMP (Variational Message Passing) | Converge toujours | Modèles complexes |
| Gibbs Sampling | Exact (asymptotique) | Petits modèles |
FAQ / Troubleshooting
Pour un guide complet, voir Infer-2b-Debugging-Bonnes-Pratiques.
| Problème | Solution |
|---|---|
The type 'Variable' does not contain a definition for... |
Vérifier que le namespace MicrosoftResearch.Infer est importé. Le notebook 1 (Setup) couvre la configuration |
Inference exception: Improper distribution |
Le modèle contient une boucle causale ou une observation contradictoire. Le notebook 6 (Debugging) détaille les stratégies de diagnostic |
Algorithm compilation failed |
Infer.NET compile un algorithme d’inférence par reflection. Vérifier que le modèle est dans une famille supportée (conjugué). Modèles non-conjugués nécessitent EP ou VMP |
| Performance lente sur les grands modèles | Utiliser InferenceEngine.Compiler.ShowGeneratedSource = true pour inspecter le code généré. Le notebook 6 compare les algorithmes EP/VMP/Gibbs |
.NET kernel non disponible |
Installer .NET Interactive : dotnet tool install --global Microsoft.dotnet-interactive |
Erreur de compilation
moteur.Compiler.CompilerChoice = CompilerChoice.Roslyn;Cette ligne est obligatoire pour les notebooks .NET Interactive.
Convergence lente
- Réduire le nombre d’itérations :
moteur.NumberOfIterations = 50 - Simplifier le modèle
- Utiliser VMP au lieu d’EP
Mémoire insuffisante
- Réduire la taille des tableaux
- Utiliser des boucles
ForEachau lieu de développements explicites
Factor Graph non affiché
- Vérifier que Graphviz est installé et dans le PATH
- Vérifier que
FactorGraphHelper.csest présent dans le répertoire - Essayer
engine.ShowFactorGraph = trueavant l’inférence
Erreurs Infer.NET connues
Documentées lors du développement des notebooks de décision (désormais dans
../DecisionTheory/DecInfer/), ces pièges s’appliquent à tout le corpus.
Beta.GetQuantilen’existe pas : utiliser l’approximation normale pour les intervalles de crédibilitéShowFactorGraphpeut causer un crash du kernel : utiliser avec précaution
Glossaire
Consultez le Glossaire pour les définitions des termes techniques (EP, VMP, Factor Graph, EVPI, MDP, etc.)
Ponts inter-series
| Série | Lien | Relation |
|---|---|---|
| PyMC | Même 19 modèles en Python/NUTS | Message passing (EP) vs MCMC (NUTS) |
| Probas (parent) | Vue d’ensemble Probas | Contexte et parcours |
| ML.NET | TP prévision de ventes | Combine ML.NET + Infer.NET |
| Search/CSP | CSP-5 (Optimization) | Programmation par contraintes et probabilités |
| SymbolicAI/Lean | Infer-11 (Gittins, DecisionTheory) | Preuves formelles Lean 4 |
Conclusion / Prochaines étapes
Ce que vous avez appris
Cette série vous a fait parcourir l’arc complet de la programmation probabiliste en .NET : des fondamentaux (variables Variable<T>, InferenceEngine, compilation Roslyn — Infer-1-Setup à Infer-3-Factor-Graphs) aux modèles relationnels avancés (réseaux bayésiens, IRT, TrueSkill, LDA, HMM, recommandation — notebooks 4 à 12), jusqu’aux frontières (causalité, processus gaussiens, modèles hiérarchiques, filtre de Kalman — notebooks 14 à 17). La théorie de la décision (utilité espérée, EVPI/EVSI, MDPs, bandits) forme un arc autonome dans ../DecisionTheory/DecInfer/, dont le capstone formel Lean 4 (DecInfer-08b-Lean-Gittins) démontre l’indice de Gittins. Trois acquis clés :
- Penser en factor graphs et message passing — Infer.NET propose trois moteurs sur le graphe de facteurs : EP (message passing déterministe, rapide, par défaut, approximatif), VMP (déterministe, converge sur les modèles complexes) et Gibbs (échantillonnage, exact asymptotiquement). Les factor graphs (rendus via
FactorGraphHelperet Graphviz) exposent la structure du modèle, pas seulement ses posteriors. - Lire et choisir son algorithme d’inférence — contrairement à un échantillonneur générique, Infer.NET compile un algorithme dédié par modèle (reflection + Roslyn). Vous savez désormais quand le message passing déterministe (EP/VMP) sur modèles conjugués et structurés est avantageux, et quand il faut céder la place à MCMC.
- Relier inference et décision, jusqu’à la preuve — l’arc
../DecisionTheory/DecInfer/ferme la boucle (un posterior est l’input d’une politique optimale sous incertitude), et le companion Lean DecInfer-08b-Lean-Gittins pousse la rigueur jusqu’à la preuve formelle Lean 4 de l’indice de Gittins.
Prochaines étapes
- Le double regard MCMC — le port PyMC reprend les 19 mêmes modèles en NUTS : alterner chaque jumeau pour comparer le message passing sur graphe de facteurs (Infer.NET, EP par défaut) et l’échantillonnage MCMC (PyMC, NUTS) sur des modèles identiques.
- Le capstone ML.NET — ML.NET combine ML.NET et Infer.NET (TP de prévision de ventes) : une mise en pratique où l’incertitude bayésienne complète une pipeline ML classique.
- Les ponts latéraux — Search/Part2-CSP (CSP-5, optimisation sous contraintes) et le glossaire prolongent la modélisation déclarative.
Le fil rouge
Le fil rouge de cette série est la compilation d’un algorithme d’inférence dédié : à partir du modèle déclaratif, Infer.NET génère (via Roslyn) un solveur spécialisé qui propage des messages sur le graphe de facteurs. Ses moteurs par défaut — EP et VMP — exploitent la conjugaison des distributions pour des mises à jour déterministes en forme close, rapides et sans diagnostics de convergence ; un moteur de Gibbs (échantillonnage) prend le relais quand la conjugaison fait défaut. Là où PyMC fait tourner un échantillonneur MCMC générique sur une densité compilée, Infer.NET compile l’algorithme lui-même. Le capstone Lean 4 (DecInfer-08b-Lean-Gittins, dans l’arc DecisionTheory) élève ce fil rouge jusqu’à la preuve formelle : l’indice de Gittins n’est plus seulement calculé, il est démontré. Maîtriser Infer.NET, c’est savoir quand la structure d’un modèle se prête au message passing sur graphe de facteurs plutôt qu’à l’échantillonnage MCMC de PyMC.
Bonne exploration de la programmation probabiliste et de la théorie de la décision !