From a4d7e8122132dbc7be6179640cab5dff7050031c Mon Sep 17 00:00:00 2001 From: jsboige Date: Tue, 27 Oct 2026 07:17:31 +0100 Subject: [PATCH 1/2] Fix(ml,#17692): 2.8 theorie PAC -- hypothese de realisabilite retablie sur les trois enonces-pave MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contre-audit de fond du carnet 2.8-Theorie-PAC (3/5 de #17692). Tous les nombres du carnet reproduits exactement (meme graine, meme protocole) : m_min=70, premier m empirique a 0.95 = 15, minorant a m_min = 0.969, franchissement du minorant a m=70 (= m_min sur la grille), aucun point empirique sous le minorant sur les 50 valeurs de m, facteur 70/15 = 4,67, accuracies VC 0.775/0.825/0.925/0.925 et 0.831/0.872/0.914/0.897, ecarts -0.056/-0.047/+0.011/+0.028, quatre demi-largeurs de Hoeffding 0.2757/0.1949/0.0872/0.0616. Un defaut confirme, corrige a la cause (4 cellules markdown, aucune cellule de code) : D1 -- L'hypothese de realisabilite disparait des trois endroits qui enoncent la formule de complexite d'echantillonnage comme un resultat a retenir (en-tete, synthese point 2, conclusion), alors que le carnet la porte correctement en section 1, en section 2 et dans sa liste de references (« classes finies realisables »). La formule m >= (1/eps)(ln|H| + ln(1/delta)) n'est valable que dans le cas realisable ; dans le cadre agnostique que le carnet introduit au §5, la vitesse est en 1/eps^2. L'ecart se chiffre avec l'organe du carnet lui-meme (borne_agnostique) : pour |H|=50, eps=0.1, delta=0.05, 70 exemples realisables contre 380,05 agnostiques (facteur 5,43) ; pour |H|=1000, eps=0.05, delta=0.1, 185 contre 1980,70 (facteur 10,71). Les quatre enonces donnent desormais l'hypothese ET la valeur agnostique correspondante. L'exercice 3 est corrige a la meme cause : il appliquait la borne realisable a un make_classification bruite, qui n'est realisable dans aucune classe finie. Verifie et conserve sans changement : le minorant n'est jamais viole, il franchit 1-delta exactement a m_min=70 sur la grille (la formulation du carnet, « au voisinage de m_min », est en deca de la mesure) ; l'ecart borne/empirique est bien impute au union bound ; la section VC est coherente avec sa propre sortie, inversion de signe des ecarts incluse. Re-execution complete (C.2) avec le kernel coursia-ml-training : 10/10 cellules code, 0 erreur, execution_count tous non nuls, sorties stdout IDENTIQUES a celles de HEAD sur les 10 cellules (determinisme total). Aucune sortie editee a la main (regle 6). C.1 conforme, trois exercices avec leurs stubs TODO executables. Portee : les cinq references (Valiant 1984, Vapnik-Chervonenkis 1971, Hoeffding 1963, Shalev-Shwartz-Ben-David 2014, Pedregosa 2011) n'ont pas ete confrontees a une copie archivee -- les quatre premieres sont absentes du gisement ; aucune de leurs attributions n'est reecrite ici. See #17692 Co-Authored-By: Claude Sonnet 5.5 --- .../02-ML-Cours/2.8-Theorie-PAC.ipynb | 276 +++++++++--------- 1 file changed, 138 insertions(+), 138 deletions(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb index d60a7be476f..bd1a83ce01a 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb @@ -5,10 +5,10 @@ "id": "cell-00", "metadata": { "papermill": { - "duration": 0.014025, - "end_time": "2026-06-26T09:05:07.429291+00:00", + "duration": 0.004722, + "end_time": "2026-10-27T06:16:14.556474+00:00", "exception": false, - "start_time": "2026-06-26T09:05:07.415266+00:00", + "start_time": "2026-10-27T06:16:14.551752+00:00", "status": "completed" }, "tags": [] @@ -30,7 +30,7 @@ "\n", "La réponse s'articule autour de deux cadres fondateurs :\n", "\n", - "- **L'apprentissage PAC** (*Probably Approximately Correct*, Valiant 1984) : la définition ε-δ de ce qu'est un « bon » apprenant, et la **complexité d'échantillonnage** `m ≥ (1/ε)(ln|H| + ln(1/δ))` pour une classe finie.\n", + "- **L'apprentissage PAC** (*Probably Approximately Correct*, Valiant 1984) : la définition ε-δ de ce qu'est un « bon » apprenant, et la **complexité d'échantillonnage** `m ≥ (1/ε)(ln|H| + ln(1/δ))` pour une classe finie **réalisable** (`h* ∈ H`). Cette hypothèse n'est pas décorative : dans le cas agnostique (§5), la vitesse change de nature et passe en `1/ε²`.\n", "- **La dimension de Vapnik-Chervonenkis** (VC, 1971) : la mesure combinatoire de « richesse » qui étend la garantie aux classes infinies (frontières polynomiales, réseaux de neurones…).\n", "\n", "L'enjeu du notebook est **la confrontation expérience/théorie** : la borne de complexité d'échantillonnage *prédit quantitativement* le comportement observé lorsqu'on lance l'apprenant.\n", @@ -44,16 +44,16 @@ "id": "cell-01", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:07.462813Z", - "iopub.status.busy": "2026-06-26T09:05:07.462813Z", - "iopub.status.idle": "2026-06-26T09:05:09.787552Z", - "shell.execute_reply": "2026-06-26T09:05:09.787552Z" + "iopub.execute_input": "2026-10-27T06:16:14.566991Z", + "iopub.status.busy": "2026-10-27T06:16:14.566991Z", + "iopub.status.idle": "2026-10-27T06:16:17.541326Z", + "shell.execute_reply": "2026-10-27T06:16:17.540067Z" }, "papermill": { - "duration": 2.338198, - "end_time": "2026-06-26T09:05:09.788558+00:00", + "duration": 2.981836, + "end_time": "2026-10-27T06:16:17.542203+00:00", "exception": false, - "start_time": "2026-06-26T09:05:07.450360+00:00", + "start_time": "2026-10-27T06:16:14.560367+00:00", "status": "completed" }, "tags": [] @@ -89,10 +89,10 @@ "id": "cell-02", "metadata": { "papermill": { - "duration": 0.003001, - "end_time": "2026-06-26T09:05:09.795560+00:00", + "duration": 0.00223, + "end_time": "2026-10-27T06:16:17.546879+00:00", "exception": false, - "start_time": "2026-06-26T09:05:09.792559+00:00", + "start_time": "2026-10-27T06:16:17.544649+00:00", "status": "completed" }, "tags": [] @@ -122,16 +122,16 @@ "id": "cell-03", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:09.802539Z", - "iopub.status.busy": "2026-06-26T09:05:09.802539Z", - "iopub.status.idle": "2026-06-26T09:05:09.856515Z", - "shell.execute_reply": "2026-06-26T09:05:09.856515Z" + "iopub.execute_input": "2026-10-27T06:16:17.552435Z", + "iopub.status.busy": "2026-10-27T06:16:17.551905Z", + "iopub.status.idle": "2026-10-27T06:16:17.557139Z", + "shell.execute_reply": "2026-10-27T06:16:17.556516Z" }, "papermill": { - "duration": 0.059431, - "end_time": "2026-06-26T09:05:09.857521+00:00", + "duration": 0.009172, + "end_time": "2026-10-27T06:16:17.558283+00:00", "exception": false, - "start_time": "2026-06-26T09:05:09.798090+00:00", + "start_time": "2026-10-27T06:16:17.549111+00:00", "status": "completed" }, "tags": [] @@ -171,10 +171,10 @@ "id": "cell-04", "metadata": { "papermill": { - "duration": 0.003008, - "end_time": "2026-06-26T09:05:09.863528+00:00", + "duration": 0.002318, + "end_time": "2026-10-27T06:16:17.562763+00:00", "exception": false, - "start_time": "2026-06-26T09:05:09.860520+00:00", + "start_time": "2026-10-27T06:16:17.560445+00:00", "status": "completed" }, "tags": [] @@ -202,16 +202,16 @@ "id": "cell-05", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:09.871528Z", - "iopub.status.busy": "2026-06-26T09:05:09.871528Z", - "iopub.status.idle": "2026-06-26T09:05:09.878447Z", - "shell.execute_reply": "2026-06-26T09:05:09.878447Z" + "iopub.execute_input": "2026-10-27T06:16:17.568716Z", + "iopub.status.busy": "2026-10-27T06:16:17.568716Z", + "iopub.status.idle": "2026-10-27T06:16:17.579833Z", + "shell.execute_reply": "2026-10-27T06:16:17.578793Z" }, "papermill": { - "duration": 0.012928, - "end_time": "2026-06-26T09:05:09.879454+00:00", + "duration": 0.015693, + "end_time": "2026-10-27T06:16:17.580889+00:00", "exception": false, - "start_time": "2026-06-26T09:05:09.866526+00:00", + "start_time": "2026-10-27T06:16:17.565196+00:00", "status": "completed" }, "tags": [] @@ -277,10 +277,10 @@ "id": "cell-06", "metadata": { "papermill": { - "duration": 0.003007, - "end_time": "2026-06-26T09:05:09.886462+00:00", + "duration": 0.004262, + "end_time": "2026-10-27T06:16:17.587424+00:00", "exception": false, - "start_time": "2026-06-26T09:05:09.883455+00:00", + "start_time": "2026-10-27T06:16:17.583162+00:00", "status": "completed" }, "tags": [] @@ -307,16 +307,16 @@ "id": "cell-07", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:09.893462Z", - "iopub.status.busy": "2026-06-26T09:05:09.893462Z", - "iopub.status.idle": "2026-06-26T09:05:11.000653Z", - "shell.execute_reply": "2026-06-26T09:05:11.000653Z" + "iopub.execute_input": "2026-10-27T06:16:17.596459Z", + "iopub.status.busy": "2026-10-27T06:16:17.595917Z", + "iopub.status.idle": "2026-10-27T06:16:18.931178Z", + "shell.execute_reply": "2026-10-27T06:16:18.930052Z" }, "papermill": { - "duration": 1.113301, - "end_time": "2026-06-26T09:05:11.002762+00:00", + "duration": 1.340389, + "end_time": "2026-10-27T06:16:18.932129+00:00", "exception": false, - "start_time": "2026-06-26T09:05:09.889461+00:00", + "start_time": "2026-10-27T06:16:17.591740+00:00", "status": "completed" }, "tags": [] @@ -369,16 +369,16 @@ "id": "cell-08", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:11.010662Z", - "iopub.status.busy": "2026-06-26T09:05:11.010662Z", - "iopub.status.idle": "2026-06-26T09:05:11.309387Z", - "shell.execute_reply": "2026-06-26T09:05:11.308351Z" + "iopub.execute_input": "2026-10-27T06:16:18.938608Z", + "iopub.status.busy": "2026-10-27T06:16:18.938608Z", + "iopub.status.idle": "2026-10-27T06:16:19.316303Z", + "shell.execute_reply": "2026-10-27T06:16:19.315102Z" }, "papermill": { - "duration": 0.30362, - "end_time": "2026-06-26T09:05:11.310372+00:00", + "duration": 0.384085, + "end_time": "2026-10-27T06:16:19.318729+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.006752+00:00", + "start_time": "2026-10-27T06:16:18.934644+00:00", "status": "completed" }, "tags": [] @@ -420,10 +420,10 @@ "id": "cell-09", "metadata": { "papermill": { - "duration": 0.004067, - "end_time": "2026-06-26T09:05:11.318454+00:00", + "duration": 0.002562, + "end_time": "2026-10-27T06:16:19.328105+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.314387+00:00", + "start_time": "2026-10-27T06:16:19.325543+00:00", "status": "completed" }, "tags": [] @@ -455,10 +455,10 @@ "id": "cell-10", "metadata": { "papermill": { - "duration": 0.004003, - "end_time": "2026-06-26T09:05:11.327456+00:00", + "duration": 0.00373, + "end_time": "2026-10-27T06:16:19.334482+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.323453+00:00", + "start_time": "2026-10-27T06:16:19.330752+00:00", "status": "completed" }, "tags": [] @@ -481,16 +481,16 @@ "id": "cell-11", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:11.337458Z", - "iopub.status.busy": "2026-06-26T09:05:11.337458Z", - "iopub.status.idle": "2026-06-26T09:05:11.342020Z", - "shell.execute_reply": "2026-06-26T09:05:11.342020Z" + "iopub.execute_input": "2026-10-27T06:16:19.347290Z", + "iopub.status.busy": "2026-10-27T06:16:19.345765Z", + "iopub.status.idle": "2026-10-27T06:16:19.352467Z", + "shell.execute_reply": "2026-10-27T06:16:19.351899Z" }, "papermill": { - "duration": 0.011046, - "end_time": "2026-06-26T09:05:11.343505+00:00", + "duration": 0.015515, + "end_time": "2026-10-27T06:16:19.353858+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.332459+00:00", + "start_time": "2026-10-27T06:16:19.338343+00:00", "status": "completed" }, "tags": [] @@ -518,10 +518,10 @@ "id": "cell-12", "metadata": { "papermill": { - "duration": 0.004015, - "end_time": "2026-06-26T09:05:11.351694+00:00", + "duration": 0.002664, + "end_time": "2026-10-27T06:16:19.359567+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.347679+00:00", + "start_time": "2026-10-27T06:16:19.356903+00:00", "status": "completed" }, "tags": [] @@ -544,16 +544,16 @@ "id": "cell-13", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:11.362246Z", - "iopub.status.busy": "2026-06-26T09:05:11.362246Z", - "iopub.status.idle": "2026-06-26T09:05:11.486190Z", - "shell.execute_reply": "2026-06-26T09:05:11.486190Z" + "iopub.execute_input": "2026-10-27T06:16:19.366447Z", + "iopub.status.busy": "2026-10-27T06:16:19.366447Z", + "iopub.status.idle": "2026-10-27T06:16:19.559006Z", + "shell.execute_reply": "2026-10-27T06:16:19.557875Z" }, "papermill": { - "duration": 0.131961, - "end_time": "2026-06-26T09:05:11.487655+00:00", + "duration": 0.197774, + "end_time": "2026-10-27T06:16:19.559970+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.355694+00:00", + "start_time": "2026-10-27T06:16:19.362196+00:00", "status": "completed" }, "tags": [] @@ -624,10 +624,10 @@ "id": "cell-14", "metadata": { "papermill": { - "duration": 0.005, - "end_time": "2026-06-26T09:05:11.497664+00:00", + "duration": 0.003522, + "end_time": "2026-10-27T06:16:19.568603+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.492664+00:00", + "start_time": "2026-10-27T06:16:19.565081+00:00", "status": "completed" }, "tags": [] @@ -652,10 +652,10 @@ "id": "cell-15", "metadata": { "papermill": { - "duration": 0.005002, - "end_time": "2026-06-26T09:05:11.507174+00:00", + "duration": 0.004413, + "end_time": "2026-10-27T06:16:19.577307+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.502172+00:00", + "start_time": "2026-10-27T06:16:19.572894+00:00", "status": "completed" }, "tags": [] @@ -678,16 +678,16 @@ "id": "cell-16", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:11.519173Z", - "iopub.status.busy": "2026-06-26T09:05:11.518173Z", - "iopub.status.idle": "2026-06-26T09:05:11.523481Z", - "shell.execute_reply": "2026-06-26T09:05:11.522474Z" + "iopub.execute_input": "2026-10-27T06:16:19.585636Z", + "iopub.status.busy": "2026-10-27T06:16:19.585107Z", + "iopub.status.idle": "2026-10-27T06:16:19.590916Z", + "shell.execute_reply": "2026-10-27T06:16:19.589817Z" }, "papermill": { - "duration": 0.011307, - "end_time": "2026-06-26T09:05:11.523481+00:00", + "duration": 0.010179, + "end_time": "2026-10-27T06:16:19.591863+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.512174+00:00", + "start_time": "2026-10-27T06:16:19.581684+00:00", "status": "completed" }, "tags": [] @@ -716,10 +716,10 @@ "id": "cell-17", "metadata": { "papermill": { - "duration": 0.005002, - "end_time": "2026-06-26T09:05:11.533482+00:00", + "duration": 0.004278, + "end_time": "2026-10-27T06:16:19.601020+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.528480+00:00", + "start_time": "2026-10-27T06:16:19.596742+00:00", "status": "completed" }, "tags": [] @@ -746,16 +746,16 @@ "id": "cell-18", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:11.544483Z", - "iopub.status.busy": "2026-06-26T09:05:11.544483Z", - "iopub.status.idle": "2026-06-26T09:05:11.550020Z", - "shell.execute_reply": "2026-06-26T09:05:11.549508Z" + "iopub.execute_input": "2026-10-27T06:16:19.608048Z", + "iopub.status.busy": "2026-10-27T06:16:19.608048Z", + "iopub.status.idle": "2026-10-27T06:16:19.612845Z", + "shell.execute_reply": "2026-10-27T06:16:19.611767Z" }, "papermill": { - "duration": 0.012545, - "end_time": "2026-06-26T09:05:11.551027+00:00", + "duration": 0.00963, + "end_time": "2026-10-27T06:16:19.613764+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.538482+00:00", + "start_time": "2026-10-27T06:16:19.604134+00:00", "status": "completed" }, "tags": [] @@ -790,10 +790,10 @@ "id": "cell-19", "metadata": { "papermill": { - "duration": 0.003998, - "end_time": "2026-06-26T09:05:11.560025+00:00", + "duration": 0.00332, + "end_time": "2026-10-27T06:16:19.620879+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.556027+00:00", + "start_time": "2026-10-27T06:16:19.617559+00:00", "status": "completed" }, "tags": [] @@ -803,7 +803,7 @@ "\n", "Pour une classe plus large (`|H| = 1000`), `ε = 0.05`, `δ = 0.1` :\n", "\n", - "1. Calculez le `m_min` PAC via `m_min_pac(1000, 0.05, 0.1)`.\n", + "1. Calculez le `m_min` PAC via `m_min_pac(1000, 0.05, 0.1)` — c'est la borne **réalisable** ; elle sert ici d'ordre de grandeur, car un `make_classification` bruité n'est pas réalisable dans une classe finie. La borne **agnostique** du §5, en `1/ε²`, en demanderait bien davantage (≈ 1981 exemples, soit un facteur ≈ 10,7).\n", "2. Générez un jeu de données avec `make_classification`, entraînez un modèle sklearn (par exemple `LogisticRegression`), et vérifiez sur plusieurs essais que l'erreur de test respecte l'ordre de grandeur prédit par la borne.\n", "\n", "Indices :\n", @@ -819,16 +819,16 @@ "id": "cell-20", "metadata": { "execution": { - "iopub.execute_input": "2026-06-26T09:05:11.572027Z", - "iopub.status.busy": "2026-06-26T09:05:11.571028Z", - "iopub.status.idle": "2026-06-26T09:05:11.575137Z", - "shell.execute_reply": "2026-06-26T09:05:11.575137Z" + "iopub.execute_input": "2026-10-27T06:16:19.629578Z", + "iopub.status.busy": "2026-10-27T06:16:19.629578Z", + "iopub.status.idle": "2026-10-27T06:16:19.633043Z", + "shell.execute_reply": "2026-10-27T06:16:19.633043Z" }, "papermill": { - "duration": 0.011119, - "end_time": "2026-06-26T09:05:11.576145+00:00", + "duration": 0.010088, + "end_time": "2026-10-27T06:16:19.635495+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.565026+00:00", + "start_time": "2026-10-27T06:16:19.625407+00:00", "status": "completed" }, "tags": [] @@ -856,10 +856,10 @@ "id": "cell-21", "metadata": { "papermill": { - "duration": 0.005001, - "end_time": "2026-06-26T09:05:11.586146+00:00", + "duration": 0.002822, + "end_time": "2026-10-27T06:16:19.641223+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.581145+00:00", + "start_time": "2026-10-27T06:16:19.638401+00:00", "status": "completed" }, "tags": [] @@ -870,7 +870,7 @@ "**Ce qu'il faut retenir** :\n", "\n", "1. Le cadre **PAC** transforme la question vague « est-ce que ça généralise ? » en une garantie **ε-δ** : avec probabilité `≥ 1-δ`, l'erreur vraie est `≤ ε`.\n", - "2. La **complexité d'échantillonnage** `(1/ε)(ln|H| + ln(1/δ))` quantifie *combien d'exemples suffisent* — et la dépendance en `ln|H|` est *logarithmique* (doubler la classe coûte peu).\n", + "2. La **complexité d'échantillonnage** `(1/ε)(ln|H| + ln(1/δ))` quantifie *combien d'exemples suffisent* — **dans le cas réalisable**, celui où `h* ∈ H`. La dépendance en `ln|H|` y est *logarithmique* (doubler la classe coûte 7 exemples à `ε = 0.1`). Sans réalisabilité, la vitesse retombe en `1/ε²` : pour `|H| = 50`, `ε = 0.1`, `δ = 0.05`, la borne agnostique demande ≈ 380 exemples là où la borne réalisable en demande 70 — un facteur ≈ 5,4.\n", "3. La **dimension VC** étend cette garantie aux classes infinies : la richesse se paie en exemples, et le compromis biais-variance de 2.5 en est la traduction empirique.\n", "4. La borne **agnostique** (Hoeffding) lève l'hypothèse de réalisabilité : `|err_train − err_true| ≤ O(√(ln|H|/m))`.\n", "\n", @@ -891,10 +891,10 @@ "id": "cell-22", "metadata": { "papermill": { - "duration": 0.004006, - "end_time": "2026-06-26T09:05:11.595586+00:00", + "duration": 0.004103, + "end_time": "2026-10-27T06:16:19.648508+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.591580+00:00", + "start_time": "2026-10-27T06:16:19.644405+00:00", "status": "completed" }, "tags": [] @@ -902,7 +902,7 @@ "source": [ "## Conclusion et transition\n", "\n", - "Nous avons fermé la boucle ouverte en 2.5 : le **compromis biais-variance** n'est pas seulement un phénomène observé, il découle d'une **garantie mathématique**. La théorie PAC dit *quand* un apprenant généralise (probablement, approximativement), la complexité d'échantillonnage dit *combien* d'exemples suffisent (`(1/ε)(ln|H| + ln(1/δ))`), et la dimension VC étend cela aux classes infinies. La borne agnostique de Hoeffding, enfin, est la version réaliste qui sous-tend l'estimation d'erreur par validation croisée.\n", + "Nous avons fermé la boucle ouverte en 2.5 : le **compromis biais-variance** n'est pas seulement un phénomène observé, il découle d'une **garantie mathématique**. La théorie PAC dit *quand* un apprenant généralise (probablement, approximativement), la complexité d'échantillonnage dit *combien* d'exemples suffisent **dans le cas réalisable** (`(1/ε)(ln|H| + ln(1/δ))`), et la dimension VC étend cela aux classes infinies. La borne agnostique de Hoeffding, enfin, est la version réaliste qui sous-tend l'estimation d'erreur par validation croisée.\n", "\n", "Ce notebook conclut le socle théorique du parcours ML. Pour voir la théorie PAC **appliquée à des objets symboliques** (concepts logiques, automates), poursuivez vers les notebooks **SL-3** et **SL-10** de la série *SymbolicLearning*.\n" ] @@ -912,10 +912,10 @@ "id": "cell-23", "metadata": { "papermill": { - "duration": 0.005517, - "end_time": "2026-06-26T09:05:11.606102+00:00", + "duration": 0.003637, + "end_time": "2026-10-27T06:16:19.655589+00:00", "exception": false, - "start_time": "2026-06-26T09:05:11.600585+00:00", + "start_time": "2026-10-27T06:16:19.651952+00:00", "status": "completed" }, "tags": [] @@ -932,6 +932,23 @@ } ], "metadata": { + "cost": { + "api_provider": "none", + "api_usd_est": 0.0, + "cpu_min": 2, + "external_account": "none", + "free_alternative": "self", + "gpu_min": 0, + "gpu_required": false, + "metadata_written": "2026-07-23T13:00Z", + "network": false, + "notes": "Theorie PAC : borne de generalisation e <= sqrt(log|H|/m) + epsilon.\nValidation empirique par Monte-Carlo sur hypotheses finies. Comparaison\navec VC-dimension et Rademacher complexity.", + "reduced_pedagogical": "self", + "reproducibility": "HIGH", + "validator": "papermill", + "vram_gb": 0, + "vram_tier": "LITE" + }, "kernelspec": { "display_name": "Python 3", "language": "python", @@ -951,34 +968,17 @@ }, "papermill": { "default_parameters": {}, - "duration": 6.660731, - "end_time": "2026-06-26T09:05:12.073887+00:00", + "duration": 7.772903, + "end_time": "2026-10-27T06:16:20.102556+00:00", "environment_variables": {}, "exception": null, "input_path": "2.8-Theorie-PAC.ipynb", - "output_path": "2.8-executed-v2.ipynb", + "output_path": "2.8-Theorie-PAC.ipynb", "parameters": {}, - "start_time": "2026-06-26T09:05:05.413156+00:00", + "start_time": "2026-10-27T06:16:12.329653+00:00", "version": "2.7.0" - }, - "cost": { - "api_usd_est": 0.0, - "api_provider": "none", - "cpu_min": 2, - "gpu_min": 0, - "gpu_required": false, - "vram_gb": 0, - "vram_tier": "LITE", - "network": false, - "external_account": "none", - "free_alternative": "self", - "reduced_pedagogical": "self", - "reproducibility": "HIGH", - "metadata_written": "2026-07-23T13:00Z", - "validator": "papermill", - "notes": "Theorie PAC : borne de generalisation e <= sqrt(log|H|/m) + epsilon.\nValidation empirique par Monte-Carlo sur hypotheses finies. Comparaison\navec VC-dimension et Rademacher complexity." } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file From 37b1b2b27de7bf27b83a8041e5b41b75d961d466 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 28 Oct 2026 12:31:08 +0100 Subject: [PATCH 2/2] Fix(ml,#17692): conventions de delta explicites aux deux ratios du carnet 2.8 Review NanoClaw du 2026-10-27T07:02:12Z sur PR #22888 : les facteurs 10,7 (exercice 3) et 5,4 (synthese) comparent la borne realisable (ln(1/delta), m_min_pac) a la borne agnostique (ln(2/delta), borne_agnostique) sans dire que chaque borne est evaluee sous sa propre convention de delta. La demi- phrase demandee est ajoutee aux deux sites (cellules 19 et 21), avec le detail des deux logarithmes. Markdown-only : aucune cellule code touche (exception C.2), outputs intacts. Co-Authored-By: Claude Sonnet 5.5 --- .../02-ML-Cours/2.8-Theorie-PAC.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb index bd1a83ce01a..44a5cb299c3 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.8-Theorie-PAC.ipynb @@ -803,7 +803,7 @@ "\n", "Pour une classe plus large (`|H| = 1000`), `ε = 0.05`, `δ = 0.1` :\n", "\n", - "1. Calculez le `m_min` PAC via `m_min_pac(1000, 0.05, 0.1)` — c'est la borne **réalisable** ; elle sert ici d'ordre de grandeur, car un `make_classification` bruité n'est pas réalisable dans une classe finie. La borne **agnostique** du §5, en `1/ε²`, en demanderait bien davantage (≈ 1981 exemples, soit un facteur ≈ 10,7).\n", + "1. Calculez le `m_min` PAC via `m_min_pac(1000, 0.05, 0.1)` — c'est la borne **réalisable** ; elle sert ici d'ordre de grandeur, car un `make_classification` bruité n'est pas réalisable dans une classe finie. La borne **agnostique** du §5, en `1/ε²`, en demanderait bien davantage (≈ 1981 exemples, soit un facteur ≈ 10,7, à conventions de δ près : `ln(1/δ)` dans `m_min_pac`, `ln(2/δ)` dans `borne_agnostique`).\n", "2. Générez un jeu de données avec `make_classification`, entraînez un modèle sklearn (par exemple `LogisticRegression`), et vérifiez sur plusieurs essais que l'erreur de test respecte l'ordre de grandeur prédit par la borne.\n", "\n", "Indices :\n", @@ -870,7 +870,7 @@ "**Ce qu'il faut retenir** :\n", "\n", "1. Le cadre **PAC** transforme la question vague « est-ce que ça généralise ? » en une garantie **ε-δ** : avec probabilité `≥ 1-δ`, l'erreur vraie est `≤ ε`.\n", - "2. La **complexité d'échantillonnage** `(1/ε)(ln|H| + ln(1/δ))` quantifie *combien d'exemples suffisent* — **dans le cas réalisable**, celui où `h* ∈ H`. La dépendance en `ln|H|` y est *logarithmique* (doubler la classe coûte 7 exemples à `ε = 0.1`). Sans réalisabilité, la vitesse retombe en `1/ε²` : pour `|H| = 50`, `ε = 0.1`, `δ = 0.05`, la borne agnostique demande ≈ 380 exemples là où la borne réalisable en demande 70 — un facteur ≈ 5,4.\n", + "2. La **complexité d'échantillonnage** `(1/ε)(ln|H| + ln(1/δ))` quantifie *combien d'exemples suffisent* — **dans le cas réalisable**, celui où `h* ∈ H`. La dépendance en `ln|H|` y est *logarithmique* (doubler la classe coûte 7 exemples à `ε = 0.1`). Sans réalisabilité, la vitesse retombe en `1/ε²` : pour `|H| = 50`, `ε = 0.1`, `δ = 0.05`, la borne agnostique demande ≈ 380 exemples là où la borne réalisable en demande 70 — un facteur ≈ 5,4, à conventions de δ près (`ln(1/δ)` côté réalisable, `ln(2/δ)` côté agnostique).\n", "3. La **dimension VC** étend cette garantie aux classes infinies : la richesse se paie en exemples, et le compromis biais-variance de 2.5 en est la traduction empirique.\n", "4. La borne **agnostique** (Hoeffding) lève l'hypothèse de réalisabilité : `|err_train − err_true| ≤ O(√(ln|H|/m))`.\n", "\n", @@ -881,7 +881,7 @@ "La théorie PAC n'est pas qu'un cadre abstrait : elle est **appliquée** concrètement dans deux notebooks de la série `SymbolicLearning`, où l'on retrouve exactement les mêmes quantités `ε`, `δ` et `m` :\n", "\n", "- **[SL-3 — Relevance Learning](../../../SymbolicAI/SymbolicLearning/SL-3-RelevanceLearning.ipynb)** : la borne PAC est appliquée au **Relevance-Based Learning** (RBL) de l'IA symbolique — combien d'exemples suffisent pour identifier les littéraux pertinents d'un concept conjonctif.\n", - "- **[SL-10 — Active Automata Learning](../../../SymbolicAI/SymbolicLearning/SL-10-ActiveAutomataLearning.ipynb)** : la théorie PAC rencontre l'algorithme **L\\*** d'Angluin pour l'apprentissage actif d'automates (*query learning* + borne d'échantillonnage minimale).\n", + "- **[SL-10 — Active Automata Learning](../../../SymbolicAI/SymbolicLearning/SL-10-ActiveAutomataLearning.ipynb)** : la théorie PAC rencontre l'algorithme **L\\\\*** d'Angluin pour l'apprentissage actif d'automates (*query learning* + borne d'échantillonnage minimale).\n", "\n", "Ici, PAC est enseigné **comme socle théorique du ML** ; dans SL-3 et SL-10, il est **réinvesti comme outil**. Aucune duplication de contenu : ce notebook pose les définitions, les notebooks SL les mettent en œuvre sur des objets symboliques.\n" ] @@ -981,4 +981,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +}