Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"\n",
"**Série 02-ML-Cours** (Data Science With Agents) — **Bloc B.7** de l'issue #16061 (*Optimisation convexe avancée from scratch*). Le Bloc A a construit les méthodes **from scratch** (proximal en `2.11b`, ADMM en `2.11d`), le début du Bloc B a pris le côté **SOTA bibliothèque** (`sklearn` en `2.11c`). Ce notebook prend le **troisième** chemin : la **modélisation déclarative**. On n'écrit plus l'algorithme du tout — on **écrit le problème**, et on choisit le solveur par son nom.\n",
"\n",
"- la même formulation Lasso écrite en **une ligne** avec `cvxpy`, sur **le même problème** que `2.11b`/`2.11c` (seed 42), donc comparable nombre à nombre ;\n",
"- la même formulation Lasso écrite avec `cvxpy`, sur **le même problème** que `2.11b`/`2.11c` (seed 42), donc comparable nombre à nombre ;\n",
"- ce que la couche de modélisation **fabrique** avant d'appeler le solveur : la reformulation canonique, lue sur les données réellement transmises ;\n",
"- **un problème, plusieurs solveurs** — CLARABEL (point intérieur), SCS (premier ordre), OSQP (QP) : même optimum, tarifs différents ;\n",
"- la **dualité lue dans les variables duales** : le certificat KKT des blocs A et B sort directement du solveur, sans le recoder ;\n",
Expand Down Expand Up @@ -236,7 +236,7 @@
"tags": []
},
"source": [
"### Lecture — une ligne de modèle, et une solution au sixième chiffre\n",
"### Lecture — un modèle déclaratif, et une solution au sixième chiffre\n",
"\n",
"`is_dcp()` rend `True` sur la formulation correcte **et** `False` sur la variante concave : la couche de modélisation ne résout pas seulement, elle **vérifie**. C'est une différence de nature avec le from scratch — là-bas, une erreur de signe se paie en itérations silencieuses ; ici, elle se paie à la compilation.\n",
"\n",
Expand Down Expand Up @@ -346,7 +346,7 @@
"\n",
"Le vecteur de coût linéaire le confirme sans ambiguïté : ses **500 composantes non nulles valent toutes exactement $\\lambda$** — ce sont les variables d'épigraphe $t_j$, celles que la reformulation a introduites, et que le modélisateur n'a jamais écrites. La matrice $P$ est extrêmement creuse (200 non-nuls : le terme quadratique ne touche que les résidus), et $A$ l'est à 7 %.\n",
"\n",
"C'est le contrat du déclaratif, énoncé honnêtement : **on paie en structure canonique ce qu'on économise en lignes de code**. Un modèle écrit en une ligne produit un problème 2,4 fois plus gros que le problème mathématique. Le from scratch n'a pas ce coût de traduction — mais il n'a pas non plus la garantie de convexité, ni le choix du solveur. C'est cet arbitrage que le $\\S9$ chiffre à l'échelle.\n"
"C'est le contrat du déclaratif, énoncé honnêtement : **on paie en structure canonique ce qu'on économise en lignes de code**. Un modèle déclaratif produit un problème 2,4 fois plus gros que le problème mathématique. Le from scratch n'a pas ce coût de traduction — mais il n'a pas non plus la garantie de convexité, ni le choix du solveur. C'est cet arbitrage que le $\\S9$ chiffre à l'échelle.\n"
]
},
{
Expand Down Expand Up @@ -628,7 +628,7 @@
"| Statut | optimal (certifié DCP) | certificat KKT | point fixe proximal | optimal |\n",
"| Itérations | ~12 | ~82 epochs | 2000 (fixes) | warm start |\n",
"\n",
"Ce que chaque colonne apporte, et qu'aucune autre ne remplace : le from scratch **explique** la mécanique (soft-threshold par coordonnée, point fixe proximal) ; `sklearn` **optimise** la boucle ; `cvxpy` **change le problème** qu'on peut écrire, pas seulement la vitesse à laquelle on le résout. Un group Lasso, une contrainte $\\|x\\|_1 \\le \\tau$, un objectif à trois termes : le from scratch demanderait trois algorithmes, le déclaratif demande trois lignes — c'est le sujet des exercices du $\\S11$.\n"
"Ce que chaque colonne apporte, et qu'aucune autre ne remplace : le from scratch **explique** la mécanique (soft-threshold par coordonnée, point fixe proximal) ; `sklearn` **optimise** la boucle ; `cvxpy` **change le problème** qu'on peut écrire, pas seulement la vitesse à laquelle on le résout. Un group Lasso, une contrainte $\\|x\\|_1 \\le \\tau$, un objectif à trois termes : le from scratch demanderait trois algorithmes, le déclaratif se contente de l'énoncé — c'est le sujet des exercices du $\\S11$.\n"
]
},
{
Expand Down Expand Up @@ -967,7 +967,7 @@
"- à $\\lambda_{\\max}$ exactement, l'écart à $f(0)$ est de l'ordre du bruit du solveur ($+10^{-7}$) et une coordonnée traîne encore à $3\\cdot10^{-4}$ : c'est le point de dégénérescence annoncé, où plusieurs points sont optimaux ;\n",
"- au-delà ($1{,}001\\,\\lambda_{\\max}$), la coordonnée rendue vaut $1{,}4\\cdot10^{-6}$ — indistinguable de zéro, l'écart d'objectif étant retombé à $6\\cdot10^{-9}$ : c'est le seuil de comptage ($10^{-6}$) qui la fait encore apparaître, pas la solution.\n",
"\n",
"La leçon de méthode est double. D'abord, un seuil se **calcule** ($\\|A^{\\top}b\\|_{\\infty}$, une ligne) plutôt que se chercher : la condition KKT le donne, le solveur ne fait que le confirmer. Ensuite, à la frontière d'un régime, **le comptage de non-nuls est un mauvais instrument** — c'est l'écart d'objectif qui départage une coordonnée vraie d'une coordonnée fantôme.\n"
"La leçon de méthode est double. D'abord, un seuil se **calcule** ($\\|A^{\\top}b\\|_{\\infty}$) plutôt que se chercher : la condition KKT le donne, le solveur ne fait que le confirmer. Ensuite, à la frontière d'un régime, **le comptage de non-nuls est un mauvais instrument** — c'est l'écart d'objectif qui départage une coordonnée vraie d'une coordonnée fantôme.\n"
]
},
{
Expand Down Expand Up @@ -1277,8 +1277,7 @@
"| Temps ($p=500$) | ~0,1-0,5 s | ~0,01 s | ~0,6 s |\n",
"| Temps ($p=4000$) | ~0,2-2 s | ~0,3 s | plusieurs s |\n",
"| Itérations | 82 epochs / 2000 / 500 | warm start | ~12-18 |\n",
"| Lignes de code | 15-25 | 1 | 2 |\n",
"| Coût du changement de problème | un nouvel algorithme | non couvert | une ligne |\n",
"| Coût du changement de problème | un nouvel algorithme | non couvert | réécrire l'énoncé |\n",
"| Garantie de convexité | analyse manuelle | non | ruleset DCP |\n",
"| Certificat dual | codé à la main | non exposé | lu dans les duales |\n"
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"\n",
"- [2.14-Explicabilite-SHAP-LIME-Contrefactuels](2.14-Explicabilite-SHAP-LIME-Contrefactuels.ipynb) — la base XAI (SHAP Tree/Kernel, LIME, DiCE contrefactuels, acceptance 7/7)\n",
"- [CausalBridges-01-Do-Calculus.ipynb](../../../Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb) — do-calculus Bareinboim-Pearl R-90, mediation counterfactuelle (P2 EPIC #16620)\n",
"- [CausalBridges-01-Do-Calculus.ipynb](../../../Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb) — do-calculus ≅ conditional Shapley (P4 EPIC #16620, 30→43 cellules)\n",
"- [CausalBridges-01-Do-Calculus.ipynb](../../../Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb) — do-calculus ≅ conditional Shapley (P4 EPIC #16620)\n",
"- [Causal-Bridges](../../../Probas/DecisionTheory/Causal-Bridges/README.md) — versant causal pur (DoWhy, contrefactuels sur DAG)\n",
"\n",
"**Acceptance** (8 critères du cadrage c.655 / #16669) :\n",
Expand All @@ -49,7 +49,7 @@
"4. ≥ 1 visualisation LIME.\n",
"5. ≥ 1 contrefactuel DiCE.\n",
"6. Section 5 « Jonction Shap ↔ do-calculus (T9) » mesure l'ecart KernelShap vs conditional Shapley.\n",
"7. Section 6 « Ponts » renvoie aux 6 notebooks causaux.\n",
"7. Section 6 « Ponts » renvoie aux notebooks causaux.\n",
"8. Section 7 « Note explicatif ≠ causal » cite R4 §3.3 + R3 §2.4."
]
},
Expand Down
Loading