ktongue/docker_container / Kalman-and-Bayesian-Filters-in-Python /02-Discrete-Bayes-Comprehension-Tests.ipynb
download
raw
9.28 kB
{
"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.