summaryrefslogtreecommitdiff
path: root/PVCM/cama/fr/ma34 ACP -- Exercice.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'PVCM/cama/fr/ma34 ACP -- Exercice.ipynb')
-rw-r--r--PVCM/cama/fr/ma34 ACP -- Exercice.ipynb295
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