Buckets:
ktongue/docker_container / Kalman-and-Bayesian-Filters-in-Python /02-Discrete-Bayes-Comprehension-Tests.ipynb
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Tests de Compréhension - Filtre de Bayes Discret\n", | |
| "\n", | |
| "Ce notebook contient des exercices et questions pour tester votre compréhension du chapitre 02-Discrete-Bayes.ipynb. Répondez aux questions et complétez les exercices ci-dessous.\n", | |
| "\n", | |
| "## Question 1: Concepts de Base\n", | |
| "\n", | |
| "Expliquez brièvement ce que représentent les termes suivants dans le contexte du filtre de Bayes :\n", | |
| "- Prior est la prédiction faite qui represente la mesure\n", | |
| "- Posterior est l'estimation qui reprensente l'état simulé actuel du systeme\n", | |
| "- Likelihood est la vraisemblance qui represente la certitude sur les mesures \n", | |
| "\n", | |
| "(Réponse en markdown)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Question 2: Étape de Mise à Jour\n", | |
| "\n", | |
| "Dans le code du chapitre, l'étape de mise à jour (update) fait quoi exactement ? Décrivez le processus mathématique en utilisant les termes prior, likelihood et posterior.\n", | |
| "\n", | |
| "la mise à jour consiste à multiplier le prior par la vraisemblance(likelihood). Autrement dit, elle actualise le poids des mesures en lui attribuant les certitudes de mesure.\n", | |
| "\n", | |
| "$posterior=\\frac{likelihood\\times prior}{normalization factor}$\n", | |
| "\n", | |
| "(Réponse en markdown)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Exercice 3: Implémentation Simple\n", | |
| "\n", | |
| "Complétez le code ci-dessous pour implémenter une fonction `update_belief` qui met à jour la croyance avec une mesure. Utilisez les fonctions de FilterPy si nécessaire.\n", | |
| "\n", | |
| "```python\n", | |
| "import numpy as np\n", | |
| "from filterpy.discrete_bayes import update\n", | |
| "\n", | |
| "# Exemple de couloir et croyance initiale\n", | |
| "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])\n", | |
| "belief = np.array([0.1] * 10)\n", | |
| "\n", | |
| "# Fonction à compléter\n", | |
| "def update_belief(hall, belief, z, z_prob):\n", | |
| " # Calculez la likelihood\n", | |
| " # Mettez à jour la croyance\n", | |
| " # Retournez la nouvelle croyance\n", | |
| " pass\n", | |
| "\n", | |
| "# Test\n", | |
| "new_belief = update_belief(hallway, belief, z=1, z_prob=0.75)\n", | |
| "print(new_belief)\n", | |
| "```\n", | |
| "\n", | |
| "(Complétez le code dans la cellule ci-dessous)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[0.21052632 0.21052632 0.05263158 0.05263158 0.05263158 0.05263158\n", | |
| " 0.05263158 0.05263158 0.21052632 0.05263158]\n", | |
| "0.9999999999999997\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from filterpy.discrete_bayes import update\n", | |
| "\n", | |
| "# Exemple de couloir et croyance initiale\n", | |
| "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])\n", | |
| "belief = np.array([0.1] * 10)\n", | |
| "\n", | |
| "# Fonction à compléter\n", | |
| "def update_belief(hall, belief, z, z_prob):\n", | |
| " try:\n", | |
| " scale=z_prob/(1-z_prob)\n", | |
| " except ZeroDivisionError:\n", | |
| " scale=1e8\n", | |
| " likelihood=np.ones(len(hall))\n", | |
| " likelihood[hall==z]*=scale\n", | |
| " new_belief = update(belief, likelihood)\n", | |
| " return new_belief\n", | |
| " \n", | |
| "\n", | |
| "# Test\n", | |
| "new_belief = update_belief(hallway, belief, z=1, z_prob=0.8)\n", | |
| "print(new_belief)\n", | |
| "a=sum(new_belief)\n", | |
| "print(a)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Question 4: Convolution et Prédiction\n", | |
| "\n", | |
| "Pourquoi utilise-t-on la convolution dans l'étape de prédiction ? Expliquez avec un exemple simple (ex. : mouvement avec erreur possible de ±1).\n", | |
| "\n", | |
| "On utilise la convolution permet distribuer les incertitudes sur le modèle.\n", | |
| "Cela parait plus clair car à l'étape de prédiction, c'est le modèle seul qui est pris en compte.\n", | |
| "\n", | |
| "Un exemple numérique permettant d'illustrer la convolution est la distribution des incertitudes sur les prédictions des positions d'un système à plusieurs variables.\n", | |
| "(Réponse en markdown)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Exercice 5: Scénario avec Bruit\n", | |
| "\n", | |
| "Imaginez un couloir avec 5 positions : [1, 0, 1, 0, 0]. La croyance initiale est uniforme. Une mesure retourne 1 avec une probabilité de 80%. Calculez manuellement la posterior après cette mesure.\n", | |
| "$posterior=\\frac{likelihood\\times prior}{normalization factor}$\n", | |
| "Or likelihood=80%\n", | |
| "prior=20%\n", | |
| "posterior=\n", | |
| "\n", | |
| "(Réponse en markdown ou calculs)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Question 6: Limites et Généralisation\n", | |
| "\n", | |
| "Quelles sont les principales limitations du filtre de Bayes discret ? Comment la généralisation avec convolution aide-t-elle à les surmonter ?\n", | |
| "\n", | |
| "Le filtre de Bayes discret a l'avantage d'être facile à mettre en oeuvre mais il a l'inconvenient d'être multimodal, discret( ne modélise pas les systèmes continus); a une complexité en $O_{n^4}$ pour la modélisation en deux dimensions de la position et la vitesse d'un système.\n", | |
| "(Réponse en markdown)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Exercice 7: Simulation Complète\n", | |
| "\n", | |
| "Écrivez un script simple qui simule le suivi d'un chien sur 10 positions avec des mesures bruitées et des mouvements. Utilisez les fonctions du chapitre pour prédire et mettre à jour sur 5 étapes.\n", | |
| "\n", | |
| "(Code dans la cellule ci-dessous)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Étape 1: Position estimée 2, Confiance 0.13\n", | |
| "Étape 2: Position estimée 4, Confiance 0.16\n", | |
| "Étape 3: Position estimée 6, Confiance 0.20\n", | |
| "Étape 4: Position estimée 7, Confiance 0.25\n", | |
| "Étape 5: Position estimée 8, Confiance 0.46\n", | |
| "Étape 6: Position estimée 9, Confiance 0.54\n", | |
| "Étape 7: Position estimée 9, Confiance 0.21\n", | |
| "Étape 8: Position estimée 0, Confiance 0.31\n", | |
| "Étape 9: Position estimée 1, Confiance 0.51\n", | |
| "Étape 10: Position estimée 1, Confiance 0.38\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from filterpy.discrete_bayes import predict,update\n", | |
| "# couloir et paramètres\n", | |
| "hallway=np.array([1,1,0,0,0,0,0,0,1,0])\n", | |
| "belief=np.array([0.1]*10)\n", | |
| "kernel=np.array([0.1,0.8,0.1])\n", | |
| "# bruit\n", | |
| "z_prob=.8\n", | |
| "def lh_hallway(hall,z,z_prob):\n", | |
| " try:\n", | |
| " scale=z_prob/(1-z_prob)\n", | |
| " except ZeroDivisionError:\n", | |
| " scale=1e8\n", | |
| " likelihood=np.ones(len(hall))\n", | |
| " likelihood[hall==z]*=scale\n", | |
| " return likelihood\n", | |
| "# simulation sur 10 étapes\n", | |
| "\n", | |
| "for step in range(10):\n", | |
| " # Prediction\n", | |
| " belief=predict(belief, offset=1,kernel=kernel)\n", | |
| " # Mesure simulée (bruitée): supposons une position réelle fictive, ou utilisez une mesure basée sur la position la plus probable\n", | |
| " pos=np.argmax(belief)\n", | |
| " z=hallway[pos] if np.random.rand()< z_prob else 1-hallway[pos] # mesure bruitée\n", | |
| "\n", | |
| " #Mise à jour\n", | |
| " likelihood=lh_hallway(hallway,z,z_prob)\n", | |
| " belief=update(likelihood=likelihood,prior=belief)\n", | |
| " print(f\"Étape {step+1}: Position estimée {np.argmax(belief)}, Confiance {belief[np.argmax(belief)]: .2f}\")\n", | |
| "\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Question 1: Concepts de Base\n", | |
| "\n", | |
| "Expliquez brièvement ce que représentent les termes suivants dans le contexte du filtre de Bayes :\n", | |
| "- Prior : La croyance sur l'état avant d'incorporer la nouvelle mesure (prédiction basée sur le modèle).\n", | |
| "- Posterior : La croyance mise à jour après incorporation de la mesure (estimation finale).\n", | |
| "- Likelihood : La probabilité de la mesure donnée l'état (combien la mesure soutient chaque état possible).\n", | |
| "\n", | |
| "**Corrections** : Prior n'est pas la mesure, mais la croyance prédite. Posterior est l'état estimé après update. Likelihood est la probabilité conditionnelle P(mesure|état), pas la certitude sur les mesures.\n", | |
| "\n", | |
| "(Réponse en markdown)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "dolfinx-env", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.12.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } | |
Xet Storage Details
- Size:
- 9.28 kB
- Xet hash:
- 4fb081f3455a869c3918794acd247721eff2e1c8d9edb0a8e40aaed31b055e90
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.