Repository navigation
fix(ml,#17700): reaffecter les Append du pipeline de ML-2 (transformation perdue) - #18311
Conversation
…tion perdue) `pipeline.Append(...)` renvoie une NOUVELLE chaine d'estimateurs : sans reaffectation, ReplaceMissingValues et Concatenate n'entraient pas dans le pipeline. La phrase de conclusion (« pret pour l'entrainement ») etait donc fausse -- aucune colonne Features n'existait. - cellule 6 et cellule 8 : `pipeline = pipeline.Append(...)`, avec le type de base IEstimator<ITransformer> declare en cellule 4 (idiome deja employe par l'exercice 3 du meme notebook, qui ecrivait deja la forme correcte). - cellule 3 : `Rate_code = float.NaN`. Un float C# non assigne vaut 0.0f, une valeur PRESENTE : la demonstration « valeur manquante remplacee » affichait donc 0 avant comme apres, et ne distinguait pas « transformation appliquee » de « transformation absente ». - cellule 7 : imprime la valeur brute (NaN) puis la valeur transformee (0). - cellule 8 : imprime le schema transforme, ou la colonne Features apparait. Re-execution .NET Interactive : 12/12 cellules, 0 erreur. validate_pr_notebooks 1/1 ; check_c2_compliance 1/1 ; check_exec_sequence CLEAN (1..N). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
…ral cote C#) La branche fait evoluer ML-2-Data&Features.ipynb (cote C#) sans toucher son jumeau Python : le gate Twin parity audit (#8057) signalait donc 1 paire en DRIFT introduite par la PR. Attestation posee avec le geste prescrit par le gate lui-meme (check_twin_parity.py --update --pair "ML-2 Data&Features"), en DERNIER apres tout strip outille (#8957). Mesure qui fonde l'attestation : git diff origin/main sur ML-2-Data&Features-Python.ipynb est vide -- le jumeau Python est byte-identique a main. Le cote Python enseignait deja le geste correct (imputation np.nan reelle, Pipeline sklearn assigne), il n'a rien a rattraper. Meme precedent unilateral que app-14-connectfour-adversarial/0005. See #17700 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Secrétaire vérificateur (myia-po-2026:CoursIA-3), 29/09 02:55Z — Dossier tiers READY à tête exacte
|
Grain: MED/notebook-dotnet — lane myia-po-2025:CoursIA — prev: DEEP/training #18190
Objet
Le corps de
ML-2-Data&Features.ipynb(partition ML.Net, volet de #17700) affirmait un etat que son propre code ne produisait pas : le pipeline de feature engineering n'etait jamais compose, et la demonstration de valeur manquante ne distinguait pas « transformation appliquee » de « transformation absente ».Defaut 1 —
pipeline.Append(...)sans reaffectation (cellules 6 et 8)IEstimator.Appendrenvoie une nouvelle chaine d'estimateurs ; il ne modifie pas celle sur laquelle il est appele. Les deux cellules ecrivaient doncpipeline.Append(...)en jetant le resultat :ReplaceMissingValuesetConcatenaten'entraient jamais dans le pipeline. La cellule suivante (pipeline.Fit(data)) transformait avec le seulOneHotEncoding, et la phrase de conclusion — « Nous avons maintenant un IDataView charge et un pipeline pret pour l'entrainement » — etait fausse : aucune colonneFeaturesn'existait.Le compilateur nomme lui-meme la mecanique des qu'on tente d'assigner :
Controle negatif execute (notebook hors depot, meme
MLContext, meme forme de pipeline) :La forme du corps etait donc bien celle qui perd la transformation, et c'est la reaffectation qui la retient.
Correctif :
IEstimator<ITransformer> pipeline = ...en cellule 4 (le type de base rend la reaffectation possible), puispipeline = pipeline.Append(...)en cellules 6 et 8. C'est l'idiome que le notebook enseignait deja dans son propre exercice 3 (IEstimator<ITransformer> housePipeline = null;puishousePipeline = housePipeline.Append(...)) : le corps contredisait son exercice.Defaut 2 — demonstration « valeur manquante » non discriminante (cellule 7)
Le deuxieme objet factice laissait
Rate_codenon assigne. En C#, unfloatnon assigne vaut0.0f— une valeur presente (le marqueur d'absence de ML.NET pour unSingleestNaN). La sortie committee,Rate_code: 0, etait donc identique avant et apres la transformation : elle ne pouvait pas montrer queReplaceMissingValuesfaisait quelque chose — et en l'espece il ne le faisait pas (defaut 1). Le commentaire// Rate_code manquantdecrivait une absence que les donnees ne portaient pas.Correctif :
Rate_code = float.NaNdans les donnees d'exemple, et la cellule imprime desormais les deux valeurs :Le contraste est la preuve. La cellule 8 imprime en plus le schema transforme, ou la colonne
Featuresapparait :Portee
ML-2-Data&Features-Python.ipynb) est propre : imputation reellement demontree (rate_codeporte unnp.nanexplicite,df.isna().sum()le compte),ColumnTransformer+Pipelinesklearn correctement assignes..ipynbde la partition,pipeline.Append(en appel nu n'existe que dans ce notebook (les autres chainent en fluent ou assignent).git diffsur les seules sources).Verifications post-correctif
validate_pr_notebooks.py(H.1/H.3/C.1).net-csharp)check_c2_compliance.pycheck_exec_sequence.pystrip_probe_banner.py --apply(post-re-exec .NET)See #17700
🤖 Generated with Claude Code