Repository navigation
feat(notebooks,#16061): 2.11e-CVXPY-Optimisation — bloc B.7, Lasso declaratif - #17660
Conversation
…claratif Bloc B.7 de l'acceptance #16061 (« Notebook CVXPY-OPT ») : formulation declarative du Lasso, resolution CLARABEL/SCS/OSQP, comparaison aux solutions from scratch (2.11b/2.11c) et ADMM (2.11d) sur leurs problemes respectifs. Contenu mesure (36 cellules, 12 code, execution reelle 62.8s, 0 erreur) : - S2 : modele en une ligne, ruleset DCP verifie (is_dcp True/False sur variante concave) — certification de convexite a la compilation ; - S3 : canonicalisation mesuree via get_problem_data : 500 inconnues declarees deviennent 1200 variables canoniques (200 egalites + 1000 inegalites d'epigraphe), vecteur de cout c = 500 composantes valant toutes lambda ; - S4 : un modele, trois solveurs — CLARABEL 12 it., SCS 450 it., OSQP 2775 it., meme objectif, solutions a 4.6e-05 ; - S5 : confrontation — cvxpy 0.36064507, CD scratch 0.36064623, ISTA et sklearn 0.36064506 (ecarts <= 1.2e-06) : le verdict « meme optimum global » demande par l'acceptance, mesure et non affirme ; - S6 : dualite lue dans les variables duales (forme epigraphe) — stationnarite a 1.2e-15, complementarites a 7e-11, certificat KKT |c_j| <= lambda avec egalite sur le support, sans le recoder ; - S7 : chemin de 12 resolutions + seuil lambda_max = ||A^T b||_inf calcule (et non cherche), avec la degenerescence au seuil mesuree par l'ecart d'objectif ; - S8 : ADMM de 2.11d rejoue sur son propre design correle (reprise exacte de design_sparse_corr/admm_lasso) confronte a l'optimum certifie : rho=20 converge en 178 it. a 2.5e-04 de f*, rho=1 et 5 n'atteignent pas la borne ; - S9 : echelle n=200, p jusqu'a 4000 — le declaratif perd la course de vitesse (8.9s contre 0.315s pour sklearn) et gagne celle du changement de probleme. Licence pedagogique : meme probleme que 2.11b/2.11c (seed 42) pour la comparabilite, 3 exercices (group Lasso, forme contrainte et dual, lambda_max par le solveur), C.1 strict (stubs qui s'executent), C.2 strict (outputs reels). Note : ECOS n'est plus distribue avec cvxpy 1.9 (mesure : solveurs installes = CLARABEL/SCS/OSQP/HIGHS/GLOP/PDLP/SCIPY) — la lignee ECOS est portee par CLARABEL, ce que le notebook documente en S1 et en references. Co-authored-by: Claude-Code <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes] po-2026 — review #17660 @ head 4af3950739c3b76e409f4db32af324f2cafaa017 (DEEP/notebook-python, +1619/−0, 1 fichier, 36 cellules dont 12 code). Full read du notebook post-changement (extraction blob + vue structurelle nb_view, pas diff-only) + contrôle programmatique des ancrages gates #17040.
Gates vérifiées contre le notebook committé :
- Placement des lectures : les 8 lectures
### Lecturesuivent immédiatement leur cellule de code (5←4, 8←7, 11←10, 14←13, 17←16, 20←19, 23←22, 26←25) — jamais 2 prose consécutives, 0 header dupliqué. - Valeurs citées présentes dans les outputs (vérif programmatique, pas de lecture d'intention) : §5 « 12 itérations »/« 93 » (cell 4 : 12, 93) ; §3 « 1200 variables, 200 égalités, 1000 inégalités, c=λ×500, P 200 nnz, A 7 % » (cell 7 : 1200/1200, 200 eq, 1000 ineq, 500, 200, 7.1 %) ; §4 « ~5·10⁻⁵ » (4.63e-05) ; §5 « écarts ≤ 1,2·10⁻⁶ » (1.167e-06) ; §6 « stationnarité 10⁻¹⁵, complémentarités ~7·10⁻¹¹, |c_j|=λ à 2,5·10⁻⁵, marge ~10⁻⁴ » (1.20e-15, 6.94e-11/4.88e-11, 2.48e-05, 8.56e-05) ; §7 « 30 non-nuls à 20λ=0,2493 », « 0,999→3,1·10⁻³, −5·10⁻⁶ ; +1e-7 ; 1,4·10⁻⁶, +6,4·10⁻⁹ » (0.24929/30, 3.12e-03/−4.98e-06, +9.94e-08, 1.41e-06/+6.39e-09) ; §8 « 178 it., 2·10⁻⁴, κ≈82 » (178, +2.49e-04, 8.18e+01) ; §9 « ~9 s vs 0,3 s à p=4000, facteur ~30 » (8.898s/0.315s). 0 valeur orpheline.
- Exercices : 3 stubs
return None+ TODOs, outputs « à completer en TP », 0 leak de solution ; 0NotImplementedError(C.1 strict). - Outputs réels : exec counts 1→12 continus, 0 output d'erreur ; les 2 réserves d'honnêteté (§4 note seuil |x|₀, §6 dégénérescence du dual μ⁺+μ⁻≠λ) sont exactes et instructives — qualité, pas défaut.
Verdict d'acceptance (§8 de #16061) : la comparaison from-scratch/ADMM vs optimum certifié est mesurée (§5 quatre moteurs à ≤1,2·10⁻⁶, §8 ADMM ancré au niveau de sa tolérance) ; la note ECOS→CLARABEL est une mesure honnête, pas une esquive. Notebook PR Validation: PASS + 30 checks verts au head, 0 pending ; security scan : 0 match. Prose dense mais entièrement adossée aux sorties (pas de remplissage) — densité naturelle, pas une campagne seuil.
|
[ADJOINT PREFLIGHT] Prévalidation indépendante à la tête citée, pas approbation ni décision de merge. Diff intégral : un notebook neuf CVXPY (+1619/−0), sans remplacement d'implémentation existante. Lecture du body, des cinq commentaires bots, de la review Hermes APPROVED à la tête exacte et des threads (0). B.0 rc=0 ; 87 noms de checks latest-wins verts ou skips bénins, PR gate SUCCESS à 13:56Z ; GitHub MERGEABLE/CLEAN. Les 12 cellules code portent les compteurs 1 à 12 et des sorties réelles non vides, sans output error ni stub C.1 interdit ; trois exercices non résolus (TODO/indices, sorties d'invitation), huit lectures immédiatement après leurs sorties. Les chiffres cités dans le body ont été confrontés aux sorties committées ; CVXPY 1.9.2 et solveurs sont réellement invoqués selon ces sorties. Papermill bout-en-bout n'a pas été rejoué par l'adjoint : la preuve est celle des sorties committées et des checks CI. Ai-01 conserve la lecture finale B.0, la décision et le merge. |
Grain: DEEP/notebook-python — lane myia-po-2024:CoursIA — prev: DEEP/lean #17646
Scope
Bloc B.7 de l'acceptance #16061 (Notebook CVXPY-OPT), seul bloc restant avec B.8. Un fichier nouveau :
MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.11e-CVXPY-Optimisation.ipynb(36 cellules, 12 code). Rien d'autre n'est touché.Acceptance visée, mot pour mot : «
cvxpyformulation déclarative d'un problème Lasso et résolution via ECOS/SCS, comparaison avec les solutions ADMM/Proximal sur le même problème. Permet de valider que les solvers from scratch convergent vers le même optimum global. »Note sur ECOS : ECOS n'est plus distribué avec
cvxpy1.9 (mesure sur la machine : solveurs installés =CLARABEL, GLOP, HIGHS, OSQP, PDLP, SCIPY, SCS). La lignée ECOS est portée par CLARABEL (point intérieur, successeur moderne), et SCS est bien présent. Le notebook documente ce changement plutôt que de citer un solveur absent.Ce que le notebook démontre (mesuré, pas affirmé)
is_dcp()=Truesur la formulation,Falsesur la variante concave (refus avant tout calcul)get_problem_datac= 500 composantes valant toutes λoptimal, même objectif, solutions à 4,6·10⁻⁵|c_j| ≤ λavec égalité sur le supportLe verdict demandé par l'acceptance — les solveurs from scratch convergent vers le même optimum global — est mesuré : c'est le §5 pour la coordinate descent/ISTA/sklearn et le §8 pour ADMM, qui rejoue son propre problème de 2.11d (
design_sparse_corr+admm_lassorepris à l'identique, même graine 20260914, même ρ) contre un optimum certifié par un solveur d'une autre famille.Preuves de validation (point 4 des 5 points)
Les 3 stubs d'exercice s'exécutent et impriment (
Exercice N a completer en TP.), aucun n'échoue — C.1 strict. Les outputs sont réels (ré-exécution complète avant commit, aucun édité à la main) — C.2 strict.Réserve d'honnêteté : la jambe KaTeX de
check_math_render.pyn'est pas résoluble sur cette machine (node+katex non resolubles -- jambe KaTeX SAUTEE) — le tool rend un verdict partiel sur tout notebook, y compris les siblings déjà surmain(vérifié sur2.11c). Contrôle de substitution : équilibre des délimiteurs$/$$vérifié sur les 24 cellules markdown, 0 rupture.Points de review (CLAUDE.md §B)
python3local, 62,8 s, outputs committés.git diff --stat origin/main...HEAD= 1 fichier, +1619 lignes.SOTA (CLAUDE.md §H, Prong A)
SOTA-OK : le vrai outil est invoqué (
cvxpy1.9.2 + CLARABEL/SCS/OSQP réellement installés), la sortie commitée est sa sortie. Aucun workaround dégradé, aucune sortie fabriquée : les nombres du corps de PR sont ceux imprimés par le notebook.See #16061 (bloc B.7 ; B.8 reste)
🤖 Generated with Claude Code