{ "cells": [ { "cell_type": "markdown", "id": "cceb0582", "metadata": {}, "source": [ "# Master M2DS-SAF: TP Optimisation\n", "\n", "## Algorithme Forward-Backward (gradient proximal)\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "aef4e820", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "# from dataclasses import dataclass, field" ] }, { "cell_type": "markdown", "id": "c22b1fd2", "metadata": {}, "source": [ "On souhaite programmer et tester un algorithme permettant de minimiser par rapport à $x$:\n", "$$\n", "\\frac{1}{2}\\|b-Ax\\|_2^2 + \\lambda\\|x\\|_1\n", "$$\n", "où sont donnés $b\\in\\mathbb{R}^m$, $A\\in\\mathbb{R}^{m\\times n}$ et $\\lambda>0$. On notera qu'il s'agit de l'estimateur dit \"LASSO\".\n", "\n", "On utilisera l'algorithme du gradient proximal (ou Forward-Backward). Programmer cet algorithme." ] }, { "cell_type": "markdown", "id": "22571b1a", "metadata": {}, "source": [ "Tester l'estimation LASSO dans le cas où $m=200, n=1000$, $x_0\\in\\mathbb{R}^n$ est un vecteur parcimonieux (2% coefficients non nuls) et $b\\in\\mathbb{R}^m$ est un vecteur d'observations bruitées $b=Ax_0+b$ avec $A\\in\\mathbb{R}^{m\\times n}$. Comparer l'estimateur du LASSO à $x_0$ pour différentes valeurs de $\\lambda$." ] }, { "cell_type": "code", "execution_count": 2, "id": "45f12074", "metadata": {}, "outputs": [], "source": [ "# génération des données\n", "m, n = 200, 1000\n", "s = 0.02\n", "\n", "A = np.random.randn(m, n)\n", "x0 = np.asarray([0 if np.random.rand() > s else np.random.randn()\n", " for i in range(n)])\n", "y0 = A@x0\n", "\n", "sigma = 0\n", "e = sigma*np.random.randn(m)\n", "yn = y0 + e" ] }, { "cell_type": "code", "execution_count": 3, "id": "d363c7fc", "metadata": {}, "outputs": [], "source": [ "# Compléter ici par une fonction lasso\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "b76b71e8", "metadata": {}, "outputs": [], "source": [ "# calcul du LASSO pour differents lambda\n", "lamb1, lamb2, lamb3 = 0.1, 1, 10\n", "# xlasso1 = lasso(A, yn, lamb1)\n", "# xlasso2 = lasso(A, yn, lamb2)\n", "# xlasso3 = lasso(A, yn, lamb3)" ] }, { "cell_type": "code", "execution_count": 5, "id": "7214aa6b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, '$x_0$ et LASSO, $\\\\lambda=$10')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Tracés\n", "FigLasso, AxLasso = plt.subplots(3, 1, num=3)\n", "AxLasso[0].plot(x0)\n", "# AxLasso[0].plot(xlasso1)\n", "AxLasso[0].set_title('$x_0$ et LASSO, $\\lambda=$'+str(lamb1))\n", "AxLasso[1].plot(x0)\n", "# AxLasso[1].plot(xlasso2)\n", "AxLasso[1].set_title('$x_0$ et LASSO, $\\lambda=$'+str(lamb2))\n", "AxLasso[2].plot(x0)\n", "# AxLasso[2].plot(xlasso3)\n", "AxLasso[2].set_title('$x_0$ et LASSO, $\\lambda=$'+str(lamb3))\n" ] }, { "cell_type": "code", "execution_count": null, "id": "8898ffae", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "formats": "ipynb,md" }, "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.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }