diff --git a/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb b/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb index b56cb9d504..f6bb9db7c5 100644 --- a/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb +++ b/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb @@ -34,7 +34,7 @@ "\n", "## Navigation\n", "\n", - "| précédent | Suivant |\n", + "| Précédent | Suivant |\n", "|-----------|--------|\n", "| [Infer-2-Gaussian-Mixtures](Infer-2-Gaussian-Mixtures.ipynb) | [Infer-3-Factor-Graphs](Infer-3-Factor-Graphs.ipynb) |\n", "\n", @@ -393,7 +393,7 @@ "1. L'observation est déterministe (`ObservedValue`)\n", "2. Le prior est suffisamment large pour \"accepter\" cette valeur\n", "\n", - "> **règle pratique** : Si votre prior a une precision `prec`, alors les observations situees a plus de `3/sqrt(prec)` ecarts-types du centre auront un support quasi-nul. Avec `prec=1000`, cela represente environ `0.1` unites autour de la moyenne." + "> **règle pratique** : Si votre prior a une precision `prec`, alors les observations situees a plus de `3/sqrt(prec)` unites (soit 3 ecarts-types) du centre auront un support quasi-nul. Avec `prec=1000`, cela represente environ `0.1` unites autour de la moyenne." ] }, { @@ -1091,6 +1091,37 @@ "> **Leçon de debugging** : face à un résultat EP surprenant, **augmentez `NumberOfIterations` et observez la trajectoire** plutôt que le seul point final. Une oscillation précoce qui se stabilise (EP ici) se distingue d'une divergence franche (valeurs NaN/Inf, ou croissance monotone non bornée). Le réflexe « EP = instable » est juste mais doit être **diagnostiqué, jamais présupposé** : sur modèle conjugué EP est impeccable (cf. §3 ci-dessus), sur modèle non-conjugué elle oscille mais converge si le modèle est bien posé. C'est cette nuance que la simple ligne de tableau ne pouvait pas capturer.\n" ] }, + { + "cell_type": "markdown", + "id": "c3138f24", + "metadata": { + "papermill": { + "duration": 0.006957, + "end_time": "2026-06-06T14:50:44.751168+00:00", + "exception": false, + "start_time": "2026-06-06T14:50:44.744211+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "## Exercice 1 : Diagnostic d'un modèle de melange gaussien\n", + "\n", + "**Objectif** : Identifiez et corrigez les problemes dans un modèle de melange gaussien a 2 composantes.\n", + "\n", + "**Contexte** : Un modèle de melange gaussien tente de separer des données issues de deux distributions distinctes, mais l'inference produit des résultats inattendus (moyennes identiques ou divergence).\n", + "\n", + "**étapes** :\n", + "1. Analysez le modèle fourni et identifiez au moins 2 problemes parmi : prior symetrique, algorithme mal adapte, observation hors-support\n", + "2. Corrigez chaque problème en vous basant sur les bonnes pratiques vues dans ce notebook\n", + "3. Comparez les résultats obtenus avec EP et VMP sur votre modèle corrige\n", + "\n", + "**Indices** :\n", + "- **Indice** 1 : Les composantes d'un melange doivent avoir des priors distincts pour eviter le label switching\n", + "- **Indice** 2 : Testez avec `engine.ShowProgress = true` pour observer la convergence\n", + "- **Indice** 3 : Utilisez `DiagnosticGaussian()` pour verifier la sante des posterieurs" + ] + }, { "cell_type": "code", "execution_count": 8, @@ -1145,37 +1176,6 @@ "Console.WriteLine(\"Exercice a completer : diagnostiquer et corriger le melange gaussien\");" ] }, - { - "cell_type": "markdown", - "id": "c3138f24", - "metadata": { - "papermill": { - "duration": 0.006957, - "end_time": "2026-06-06T14:50:44.751168+00:00", - "exception": false, - "start_time": "2026-06-06T14:50:44.744211+00:00", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "## Exercice 1 : Diagnostic d'un modèle de melange gaussien\n", - "\n", - "**Objectif** : Identifiez et corrigez les problemes dans un modèle de melange gaussien a 2 composantes.\n", - "\n", - "**Contexte** : Un modèle de melange gaussien tente de separer des données issues de deux distributions distinctes, mais l'inference produit des résultats inattendus (moyennes identiques ou divergence).\n", - "\n", - "**étapes** :\n", - "1. Analysez le modèle fourni et identifiez au moins 2 problemes parmi : prior symetrique, algorithme mal adapte, observation hors-support\n", - "2. Corrigez chaque problème en vous basant sur les bonnes pratiques vues dans ce notebook\n", - "3. Comparez les résultats obtenus avec EP et VMP sur votre modèle corrige\n", - "\n", - "**Indices** :\n", - "- **Indice** 1 : Les composantes d'un melange doivent avoir des priors distincts pour eviter le label switching\n", - "- **Indice** 2 : Testez avec `engine.ShowProgress = true` pour observer la convergence\n", - "- **Indice** 3 : Utilisez `DiagnosticGaussian()` pour verifier la sante des posterieurs" - ] - }, { "cell_type": "code", "execution_count": 9, @@ -1737,6 +1737,34 @@ "> La force de l'effet du prior depend du ratio entre les pseudo-observations du prior ($\\alpha + \\beta$) et les observations reelles (5 dans cet exemple)." ] }, + { + "cell_type": "markdown", + "id": "835a51ef", + "metadata": { + "papermill": { + "duration": 0.006704, + "end_time": "2026-06-06T14:50:47.315549+00:00", + "exception": false, + "start_time": "2026-06-06T14:50:47.308845+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### Exercice 2 : Impact du prior sur un diagnostic medical\n", + "\n", + "**Objectif** : Modeliser un test de depistage avec des priors différents et observer l'impact sur le diagnostic posterieur.\n", + "\n", + "**Contexte** : Un test medical a un taux de faux positifs de 5% et un taux de sensibilite de 90%. La prevalence de la maladie est de 1%. Vous observez un test positif. Quelle est la probabilite que le patient soit reellement malade ?\n", + "\n", + "**Indices** :\n", + "- **Indice** 1 : Modelisez la probabilite de maladie avec `Variable.Beta(alpha, beta)` ou `Variable.Bernoulli(prevalence)`\n", + "- **Indice** 2 : Testez avec `Beta(1, 99)` (prevalence 1%), puis `Beta(10, 90)` (prevalence 10%)\n", + "- **Étape** 1 : définir le modèle avec la probabilite de maladie comme variable latente\n", + "- **Étape** 2 : Ajouter la vraisemblance du test (sensibilite et taux de faux positifs)\n", + "- **Étape** 3 : Observer un test positif et calculer le posterieur pour différentes prevalences" + ] + }, { "cell_type": "code", "execution_count": 13, @@ -1772,34 +1800,6 @@ "Console.WriteLine(\"Exercice a completer : test de depistage medical\");" ] }, - { - "cell_type": "markdown", - "id": "835a51ef", - "metadata": { - "papermill": { - "duration": 0.006704, - "end_time": "2026-06-06T14:50:47.315549+00:00", - "exception": false, - "start_time": "2026-06-06T14:50:47.308845+00:00", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "### Exercice 2 : Impact du prior sur un diagnostic medical\n", - "\n", - "**Objectif** : Modeliser un test de depistage avec des priors différents et observer l'impact sur le diagnostic posterieur.\n", - "\n", - "**Contexte** : Un test medical a un taux de faux positifs de 5% et un taux de sensibilite de 90%. La prevalence de la maladie est de 1%. Vous observez un test positif. Quelle est la probabilite que le patient soit reellement malade ?\n", - "\n", - "**Indices** :\n", - "- **Indice** 1 : Modelisez la probabilite de maladie avec `Variable.Beta(alpha, beta)` ou `Variable.Bernoulli(prevalence)`\n", - "- **Indice** 2 : Testez avec `Beta(1, 99)` (prevalence 1%), puis `Beta(10, 90)` (prevalence 10%)\n", - "- **Étape** 1 : définir le modèle avec la probabilite de maladie comme variable latente\n", - "- **Étape** 2 : Ajouter la vraisemblance du test (sensibilite et taux de faux positifs)\n", - "- **Étape** 3 : Observer un test positif et calculer le posterieur pour différentes prevalences" - ] - }, { "cell_type": "markdown", "id": "68678e15", diff --git a/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md b/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md index d238a8cfb6..82f39afb40 100644 --- a/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md +++ b/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md @@ -9,8 +9,8 @@ Ce glossaire recapitule les termes techniques utilises dans la serie de notebook | Terme | Definition | Notebook(s) | |-------|------------|-------------| | **EP (Expectation Propagation)** | Algorithme d'inference approchee qui propage des messages gaussiens entre facteurs. Rapide mais peut diverger. | Tous | -| **VMP (Variational Message Passing)** | Algorithme variationnel qui minimise la divergence KL. Plus stable que EP, mais sous-estime l'incertitude. | Infer-2, Infer-11 | -| **Gibbs Sampling** | Methode MCMC qui echantillonne chaque variable conditionnellement aux autres. Exact asymptotiquement mais lent. | Infer-13 | +| **VMP (Variational Message Passing)** | Algorithme variationnel qui minimise la divergence KL. Plus stable que EP, mais sous-estime l'incertitude. | Infer-1b, Infer-2, Infer-2b, Infer-10, Infer-11 | +| **Gibbs Sampling** | Methode MCMC qui echantillonne chaque variable conditionnellement aux autres. Exact asymptotiquement mais lent. | Infer-1 | | **Message Passing** | Paradigme ou les distributions sont propagees entre variables via des "messages". | Infer-3, Infer-2b | --- @@ -23,7 +23,7 @@ Ce glossaire recapitule les termes techniques utilises dans la serie de notebook | **Beta** | [0, 1] | alpha, beta | Prior sur probabilités | | **Gaussian** | R | mean, precision | Valeurs continues | | **TruncatedGaussian** | [a, b] | mean, variance, lower, upper | Valeurs contraintes | -| **Gamma** | R+ | shape, scale | Prior sur precisions | +| **Gamma** | R+ | shape, rate (`GammaFromShapeAndRate`) | Prior sur precisions | | **Dirichlet** | Simplex | alpha[] | Prior sur poids de mélange | | **Discrete** | {0, ..., K-1} | probs[] | Variables categoriques | diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..1da454a067 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-08' +by: myia-po-2027:CoursIA +python_sha: bf93bf3fd1522445e6a1ecce8c5d8e65303aff6e +csharp_sha: f6bb9db7c5fbcf8e6c640a3b360e7553586b5246 +content_python_sha: 1bbe48aeb3a65546ff1de2d0e001cf286fe1cb0082621919c196495c890704b9 +content_csharp_sha: ae4dfbaf07293ce9bcd1bffbdae79da1417be5c8e328215a44e119b298dae997