Repository navigation
Fix(search,#23384): App-18-HyperparameterTuning -- convergence kernel 3.13 et re-execution canonique - #23469
Conversation
… 3.13 et re-execution canonique Le carnet etait execute hors canon (Python 3.11.9). Re-execution complete sous le canon kernel `python3` 3.13 (3.13.3) : 34/34 cellules, 0 erreur, 14 cellules code, execution_count non nul partout, 2 figures PNG. Mesure de la derive (deux runs canoniques independants) : tous les scores et tous les jeux de parametres sont identiques entre les deux runs ; seuls les temps d'horloge varient (il s'agit de la colonne 'Temps (s)' de la sortie, non reproductible par nature et non reprise dans la prose). La divergence avec les sorties commitees porte donc sur les trajectoires de recherche de GA (0,7854 -> 0,7750) et d'Optuna (0,7812 -> 0,7833) -- la fonction d'evaluation, elle, est invariante (re-evaluation des jeux de parametres commites sous sklearn 1.6.1 : memes scores a 1e-5 pres). La prose de md[30] est re-derivee par script depuis les sorties (aucune valeur recopiee a la main) : classement PSO 0,788 > Bayesian 0,783 = Optuna 0,783 > GA 0,775 > Grid 0,769 > Random 0,767 ; etendue 0,021 ; profondeurs des meilleurs points 13 a 16 sur une echelle de 3 a 30 ; max_features 0,10 a 0,15 ; min_samples_leaf 1 sauf la GA a 6. La mention 'min_samples_leaf eleve' de la prose precedente etait fausse sous les sorties canoniques et a ete retiree. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ces et attestation de rebaseline Re-audit firsthand : la derive porte sur le seul cote Python (blob C# inchange, 1b519d3 cote main et cote branche) ; le contenu Python change par la convergence #23384 (kernel 3.13.3, re-execution canonique), decrite en known_differences. Attestation 0010 avec --by explicite, --update en dernier. check_twin_parity --check --pair 'App-18 HyperparameterTuning' -> OK=1 DRIFT=0. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine. Le label Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans Seuil, historique et exceptions : cf. |
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #23454
Objet
Convergence du carnet
App-18-HyperparameterTuningau kernel canonpython33.13 et re-execution reelle (census #23384).Voir #23384.
Etat avant
Les sorties commitees avaient ete produites hors canon :
metadata.language_info.version = 3.11.9. Le carnet etait donc execute dans un environnement different du canon du depot (3.13.x), sans que la derive soit tracee.Diagnostic dérive
Cause : (a) environnement / kernel hors canon — les sorties commitees dataient d'une execution sous Python 3.11.9, le canon du depot etant
python33.13.Verdict :
CAUSE_FIXED.Mesure de la derive (avant correctif)
La question etait : la derive vient-elle de la fonction d'evaluation ou de la recherche ?
Le
evaluate_rfdu carnet (sklearnRandomForestClassifier(random_state=42, n_jobs=-1)+cross_val_score(cv=5)) a ete rejoue sous sklearn 1.6.1 sur les jeux de parametres commites :L'evaluation est invariante : tous les scores commites sont reproduits a 1e-5 pres. La derive porte donc sur les trajectoires de recherche de GA (0,7854 -> 0,7750) et d'Optuna (0,7812 -> 0,7833) ; Grid (0,7688), Random (0,7667), Bayesian (0,7833) et PSO (0,7875) sont identiques au bit pres.
Reproductibilite du resultat canonique
Deux runs canoniques independants (deux processus separes, kernel 3.13.3, sklearn 1.6.1 / numpy 2.3.5 / optuna 5.0.0) : scores et jeux de parametres identiques pour les six methodes. Les seules differences entre les deux runs sont les temps d'horloge de la sortie (colonne
Temps (s)du tableau comparatif), qui ne sont pas reproductibles par nature et ne sont repris nulle part dans la prose.Ce n'est donc pas un defaut de type « budget mural » (cf. la lecon CP-SAT) : le carnet n'a aucun
timeoutni plafond temporel -- GA 5 generations x 20 individus, Optuna 50 trials, PSO 10 iterations x 10 particules, Grid/Random/Bayesian 50 evaluations.Ce qui change dans le carnet
Sorties : re-execution complete sous 3.13.3 -- 34/34 cellules, 0 erreur, 14 cellules code,
execution_countnon nul partout, 2 figures PNG preservees,metadata.language_info.version = 3.13.3.Prose de md[30] : re-derivee par script depuis les sorties (
scripts/notebook_tools/-- aucune valeur recopiee a la main) :max_featuresdes meilleurs points : 0,10 a 0,15 (contre 0,5 pour Grid, 0,33 pour Random) ;min_samples_leaf: 1 partout sauf la GA a 6.Deux affirmations de la prose precedente sont devenues fausses sous les sorties canoniques et ont ete corrigees : « min_samples_leaf eleve » (la valeur mesuree est 1 pour cinq methodes sur six) et « PSO (0,788) et GA (0,785) dominent » (GA n'est plus qu'en 4e position, et Optuna n'etait pas cite).
Seule la cellule markdown 30 a change ; aucune source de cellule code n'a ete modifiee (verifie cellule par cellule base vs head). C.3 : la re-execution porte sur le carnet entier, la modification de contenu est la prose.
Garde-fous (diff commite, base
origin/main6d50cc0)validate_pr_notebooks.py origin/mainpassed: true,EXEC_PROVED, 14 cellules codecheck_kernel_drift.py origin/mainfindings: []check_output_collapse.py origin/mainflagged: 0,regressed: false(2153 -> 2152 caracteres de sortie)check_source_collapse.py origin/mainflagged: 0,regressed: false(advisory) — source inchangeecheck_output_failure_text.py origin/mainregressions: 0(TOOL_FAILURE / MACHINE_PATH / DECLARED_FALLBACK : 0 -> 0)check_activity_leak.py --diff origin/main...HEAD[OK]check_prose_quantitative_claims.py --diff origin/main...HEAD[OK]check_twin_parity.py --check --pair "App-18 HyperparameterTuning"OK=1 DRIFT=0Fuite de chemin machine : 0 occurrence stricte ;
metadata.papermillnormalise en basename ;probeAddressesabsent (carnet Python).Perimetre
3 fichiers :
MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-18-HyperparameterTuning.ipynb— re-execution canonique 3.13.3 + prose re-derivee de md[30] ;scripts/notebook_tools/twin_pairs.d/app-18-hyperparametertuning.yaml— entreeknown_differences(append-only) ;scripts/notebook_tools/twin_pairs.d/app-18-hyperparametertuning/0010-2026-10-30-myia-po-2023-CoursIA.yaml— attestation de rebaseline.Le jumeau C#
App-18b-HyperparameterTuning-CSharp.ipynbn'est pas touche (blob1b519d3fidentique amain) : sa comparaison de reference (ML.NET AutoML 0,7714 vs k-NN from-scratch 0,7143) porte sur son propre split deterministe (TrainTestSplitseed 424242) et sur son propre modele (k-NN), donc l'ecart de classement mesure cote Python ne s'y applique pas. Parite semantique preservee.🤖 Generated with Claude Code