{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "collapsed": true, "id": "w7MXPqK01Xy5" }, "source": [ "Simplex Regression with Trend Filtering\n", "=========================================\n", "\n", "This notebook showcase a structured regression method which defines a predictor as an average of several values (e.g. baseline methods), with a temporal regularization which enforces piecewise constant choices (often called \"trend filtering\").\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "5BusadJ61Xy9" }, "source": [ "You need to install [CVXPY](https://www.cvxpy.org/). _Warning:_ seems to not be working on Python 3.7, use rather 3.6." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "IUcJ_Idz1XzA" }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import cvxpy as cp" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "xd-RcmvWNi8Z" }, "source": [ "Simplex Regression\n", "=========================================" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wfk382Jc1XzG" }, "source": [ "In the following $n$ is the number of \"temporal\" samples (for instance angle) and $m$ the number of methods." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "YJ66nNMD1XzH" }, "outputs": [], "source": [ "n = 360 # angles\n", "m = 4 # methods" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0vZIRnfb1XzM" }, "source": [ "The set of regression weights is $W \\in \\RR^{n \\times m}$ and the linear regression of $y_i$ at time (or angle $i$) reads\n", "$$\n", " y_i \\approx \\sum_{j} M_{i,j} W_{i,j}.\n", "$$\n", "Here $M_{i,j}$ is the output of method $j$ at time $i$.\n", "\n", "The constraint is that for each time $i$, the set of weights $W_{i,\\cdot} = (W_{i,j})_{j=1}^m$ is in the probability simplex\n", "$$\n", " W_{i,j} \\geq 0 \\qandq\n", " \\sum_j W_{i,j}=1.\n", "$$\n", "We re-write this constraint conveniently as $W \\geq 0, W 1_m = 1_n$." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ZlhwDoxX1XzN" }, "source": [ "We use a $\\ell^2$ regression penalized by the sum of absolute value of temporal differences\n", "$$ \\min_{W \\geq 0, W 1_m = 1_n} \\sum_i \\Big( y_i - \\sum_{j} M_{i,j} W_{i,j} \\Big)^2 + \\lambda \\sum_{i,j} |W_{i+1,j}-W_{i,j}| $$" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QAe49Qj11XzP" }, "source": [ "Generate random data $M$ and $y$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "nJTgEK2T1XzQ" }, "outputs": [], "source": [ "M = np.random.randn(n,m)\n", "y = np.random.randn(n)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "AeJ-Xjar1XzU" }, "source": [ "Define the optimized over variable $W$." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "O0C3ZQ8W1XzW" }, "outputs": [], "source": [ "W = cp.Variable((n,m))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "fIDhpMft1Xzc" }, "source": [ "Define the set constraints (vectors in the simplex)." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "5uSu4smY1Xzd" }, "outputs": [], "source": [ "u = np.ones((m,1))\n", "v = np.ones((n,1))\n", "U = [0 <= W, cp.matmul(W,u)==v]" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TyCMnJXe1Xzg" }, "source": [ "Regularization parameter $\\lambda$. Increase this value makes the resulting weights more and more constant." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "jh4w-0fN1Xzi" }, "outputs": [], "source": [ "Lambda = 10" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Lvri3u5T1Xzl" }, "source": [ "Solve the minimization using CVXPY" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "0O_uYMmp1Xzm" }, "outputs": [], "source": [ "objective = cp.Minimize( cp.sum( ( cp.sum(cp.multiply(M,W), axis=1) - y )**2 ) + Lambda * cp.sum( cp.abs(W[1:,:] - W[:-1,:]) ) )\n", "prob = cp.Problem(objective, U)\n", "result = prob.solve()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "jBLAEBja1Xzq" }, "source": [ "Display the evolution of the weights associated to the three first variables as function of time." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "colab_type": "code", "id": "R0G2QDV61Xzr", "outputId": "61d9565c-c128-4add-bac9-4374b5d2358a" }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "Wm = W.value\n", "plt.plot(Wm[:,0])\n", "plt.plot(Wm[:,1])\n", "plt.plot(Wm[:,2]);" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yb1QOJ0s7EIR" }, "source": [ "Group-Lasso Regularization\n", "============================\n", "\n", "It is possible to enforce that breakpoints in time are somehow \"synchronized\" by using a group lasso regularization.\n", "$$\n", " \\min_{W \\geq 0, W 1_m = 1_n}\n", " \\sum_i \\Big( y_i - \\sum_{j} M_{i,j} W_{i,j} \\Big)^2\n", " + \\lambda \\sum_{i} \\sqrt{ \\sum_j|W_{i+1,j}-W_{i,j}|^2 }\n", "$$" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "RdlULDXw7N_I" }, "outputs": [], "source": [ "Lambda = 20\n", "objective = cp.Minimize( cp.sum( ( cp.sum(cp.multiply(M,W), axis=1) - y )**2 ) + Lambda * cp.mixed_norm( W[1:,:] - W[:-1,:], 2, 1 ) )\n", "prob = cp.Problem(objective, U)\n", "result = prob.solve()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "colab_type": "code", "id": "P1iz8gMJ7tV1", "outputId": "82121dc7-08f9-4e32-cf9a-d38a25a85457" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "Wm = W.value\n", "plt.plot(Wm[:,0])\n", "plt.plot(Wm[:,1])\n", "plt.plot(Wm[:,2]);" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DA-sZSsslkGX" }, "source": [ "We now show the evolution of the solution for varying $\\lambda$." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 268 }, "colab_type": "code", "id": "_m6bmsjekpCe", "outputId": "372d5086-3f0d-4da4-aab2-b892423bf1d7" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "Lambda_list = np.array([2, 5, 10, 20])\n", "for i in np.arange(0,4):\n", " Lambda = Lambda_list[i];\n", " objective = cp.Minimize( cp.sum( ( cp.sum(cp.multiply(M,W), axis=1) - y )**2 ) + Lambda * cp.mixed_norm( W[1:,:] - W[:-1,:], 2, 1 ) )\n", " prob = cp.Problem(objective, U)\n", " result = prob.solve()\n", " Wm = W.value\n", " ax1=plt.subplot(2, 2, i+1)\n", " plt.plot(Wm[:,0])\n", " plt.plot(Wm[:,1])\n", " plt.plot(Wm[:,2])\n", " plt.title('$\\lambda$='+str(Lambda))\n", " ax1.set_xticklabels([])\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "yxWu3vnECTZd" }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "colab": { "name": "Simplex Regression with Trend Filtering", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 }