diff options
Diffstat (limited to 'PVCM/cama/fr/ma34 ACP -- Exercice.ipynb')
| -rw-r--r-- | PVCM/cama/fr/ma34 ACP -- Exercice.ipynb | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/PVCM/cama/fr/ma34 ACP -- Exercice.ipynb b/PVCM/cama/fr/ma34 ACP -- Exercice.ipynb new file mode 100644 index 0000000..9cd80ca --- /dev/null +++ b/PVCM/cama/fr/ma34 ACP -- Exercice.ipynb @@ -0,0 +1,295 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import numpy.linalg as lin\n", + "import matplotlib.pylab as plt\n", + "import plotly.graph_objects as go\n", + "np.set_printoptions(precision=3, linewidth=150, suppress=True)\n", + "\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'retina'\n", + "\n", + "np.random.seed(0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "## Exercice : Nuage de points en 3D\n", + "\n", + "On a des résultats de mesures et on sait qu'on doit avoir une relation\n", + "quadratique entre x et z :\n", + "\n", + "$$ z = \\alpha \\, x^2 + \\beta \\, x + \\gamma $$\n", + "\n", + "Comment trouver ces 3 coefficients ?\n", + "\n", + "Bien sûr on va faire une analyse en composante principale mais attention, cela\n", + "ne marche que pour les relations linéaires (ca nous donne un vecteur). Aussi\n", + "il faut introduire une nouvelle variable pour que notre équation soit linéaire.\n", + "\n", + "Comment écrire notre équation pour qu'elle soit linéaire suivant 2 variables ?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### réponse :\n", + "\n", + "..." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "### Données de l'expérience\n", + "\n", + "Fabriquer un nuage de point 2D avec l'équation \n", + "\n", + "$$ z = -1.3 \\, x^2 + 0.2 \\, x + 1.45 + U(-1,1)$$ \n", + "\n", + "où U est la loi uniforme qui simule du bruit." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "N = 50\n", + "x = ... # x varie entre -3 et 3\n", + "z = ...\n", + "nuage = np.array([x,z])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(nuage[0], nuage[1], 'x')\n", + "plt.title('Un nuage de points')\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "### Calculs pour trouver les caractéristiques de notre nuage\n", + "\n", + "Fabriquer à partir de notre nuage de points 2D un nuage de points 3D en introduisant la nouvelle\n", + "variable qu'on a choisit.\n", + "\n", + "Le nouveau nuage s'appelle `nuage3D`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig = go.Figure(data=[go.Scatter3d(x=nuage3D[0], y=nuage3D[1], z=nuage3D[2], mode='markers')])\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "Calculer la matrice de covariance de notre nuage et ses vecteurs propres (on stockera les vecteurs propres dans la variable `vec`)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig = go.Figure(data=[go.Scatter3d(x=nuage3D[0], y=nuage3D[1], z=nuage3D[2], mode='markers'),\n", + " go.Scatter3d(x=[0,-5*vec[0,0]], y=[0,-5*vec[1,0]], z=[0,-5*vec[2,0]]),\n", + " go.Scatter3d(x=[0,vec[0,1]], y=[0,vec[1,1]], z=[0,vec[2,1]])])\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "Que peut-on déduire de notre premier vecteur propre ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### réponse\n", + "\n", + "..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "Créer un nuage de point en 2D qui ne prend plus en compte l'impact du coefficient\n", + "que l'on vient de trouver.\n", + "\n", + "On appelle ce nouveau nuage `nuage2D` (ce n'est pas le même que notre `nuage` initial)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(nuage2D[0], nuage2D[1], 'x')\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "Que peut-on en déduire ?\n", + "\n", + "#### réponse\n", + "\n", + "...." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Les coefficients de z fonction polynomiale de degré 2 en x sont :\\n\")\n", + "print(f\"alpha = {alpha}\")\n", + "print(f\"beta = {beta}\")\n", + "print(f\"gamma = {gamma}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "lang": "fr" + }, + "source": [ + "Vous pouvez tout relancer en changer la valeur de la graine de l'aléatoire. Vous allez voir que parfois le\n", + "bruit perturbe bien plus les résultats." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ] +}
\ No newline at end of file |
