{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#
NYU CSCI-UA 9473 Intro to Machine Learning\n", "##
Additional Note on LASSO and RIDGE
\n", "
Augustin Cosse
\n", " \n", "This short note compares the effects of $\\ell_1$ (LASSO) and $\\ell_2$ (Ridge) regularization on a simple linear regression problem. In particular it illustrates why $\\ell_1$ minimization is more efficient at performing feature selection (i.e returning zero coefficients). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part I comparison of the weights returned for various data misfit\n", "\n", "#### I.1 Ridge\n", "\n", "We start by displaying a set of $(\\beta_0, \\beta_1)$ pairs, solutions to the problem \n", "$$\\min_{\\boldsymbol \\beta} \\sum_{i=1}^N \\left(t^{(i)} - (\\beta_0 + \\beta_1 x^{(i)})\\right)^2 + \\lambda \\sum_{j=0}^1 |\\beta_j|^2$$ \n", "where $t^{(i)}$ are generated as $t^{(i)} = \\beta_0+\\beta_1x^{(i)} + \\varepsilon^{(i)}$\n", "all around the origin. You can play with the value of $\\lambda$ and $\\varepsilon$ below to see how this affects the distribution of all $(\\beta_0, \\beta_1)$ solutions" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "radius = 1\n", "\n", "\n", "i=0\n", "ridgeSolution = np.zeros((2, len(anglevec)))\n", "\n", "\n", "# change the value of lbda to control the distortion of the circle below\n", "lbda = 0.6\n", "\n", "for angle in anglevec:\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", " \n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", " \n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", " \n", " # adding some noise\n", " \n", " noise = np.random.normal(0,.01,target.shape)\n", " target_noisy = target + noise\n", "\n", " tmp = np.linalg.inv(\n", " np.dot(XTildematrix.T, XTildematrix) + lbda*np.identity(2))\n", " ridgeSolution[:,i] = np.dot(tmp,np.dot(XTildematrix.T,target_noisy))\n", " \n", " i+=1\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Note how the circle gets distorted from the choice of the regularization \n", "# parameter lbda\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "\n", "plt.scatter(ridgeSolution[0,:], ridgeSolution[1,:], alpha=0.5)\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### I.2 LASSO\n", "\n", "We do the same with the LASSO penalty. Here we generate the pairs $(\\beta_0, \\beta_1)$ so that they are located all around the origin and are solutions to the problem\n", "\n", "$$\\min_{\\boldsymbol \\beta} \\sum_{i=1}^N \\left(t^{(i)} - (\\beta_0 + \\beta_1 x^{(i)})\\right)^2 + \\lambda \\sum_{j=0}^1 |\\beta_j|$$\n", "\n", "where $t^{(i)}$ are generated as $t^{(i)} = \\beta_0+\\beta_1x^{(i)} + \\varepsilon^{(i)}$\n", "all around the origin. Again, you can play with the value of $\\lambda$ and $\\varepsilon$ below to see how this affects the distribution of all $(\\beta_0, \\beta_1)$ solutions" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "from sklearn import linear_model\n", "\n", "\n", "# same idea with ridge\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "anglevec = np.linspace(0,2*np.pi,100)\n", "radius = 1\n", "\n", "\n", "i=0\n", "lassoSolution = np.zeros((2, len(anglevec)))\n", "\n", "\n", "lbda = 0.06\n", "\n", "for angle in anglevec:\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", " \n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", " \n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", " \n", " # adding some noise\n", " \n", " noise = np.random.normal(0,.01,target.shape)\n", " target_noisy = target + noise\n", "\n", " clf = linear_model.Lasso(alpha=lbda)\n", " clf.fit(x.reshape(-1,1), target_noisy.reshape(-1,1)) \n", " \n", " lassoSolution[:,i] = np.squeeze(np.array([clf.intercept_, clf.coef_ ],dtype=\"object\"))\n", " \n", " i+=1\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the distribution of those solutions, you can already see that unlike the Ridge formulation, the pairs $(\\beta_0, \\beta_1)$ will not be distributed uniformly around the origin but many of them (as we require the pairs to be solutions to the LASSO objective) will have one of their components ($\\beta_0$ or $\\beta_1$) set to $0$." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from __future__ import division\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "plt.scatter(lassoSolution[0,:], lassoSolution[1,:], alpha=0.5)\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part II. Geometric intuition\n", "\n", "So far we have see how the distribution of pairs $(\\beta_0,\\beta_1)$ varies from one regularization approach to the other. We haven't provided much intuition for why there is such an increase in 'sparse' $(\\beta_0,\\beta_1)$ pairs when switching from Ridge to LASSO. What we can do to get some intuition is to draw the level lines of the data misfit $\\sum_{i=1}^N \\left(t^{(i)} - (\\beta_0 + \\beta_1 x^{(i)})\\right)^2$ on the one hand, and the level lines of the Ridge (resp. LASSO) penalty on the other. The solution of the minimization \n", "\n", "$$\\min_{\\boldsymbol \\beta} \\sum_{i=1}^N \\left(t^{(i)} - (\\beta_0 + \\beta_1 x^{(i)})\\right)^2 + \\lambda \\sum_{j=0}^1 |\\beta_j|^2$$\n", "\n", "and \n", "\n", "$$\\min_{\\boldsymbol \\beta} \\sum_{i=1}^N \\left(t^{(i)} - (\\beta_0 + \\beta_1 x^{(i)})\\right)^2 + \\lambda \\sum_{j=0}^1 |\\beta_j|$$\n", "\n", "will be given by the intersection of the curves." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### II.1 Geometric intersection between the data misfit and the $\\ell_1$ ball" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "\n", "for angle in anglevec:\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", " \n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", " \n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", " \n", " # adding some noise\n", " \n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", " \n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", "\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.2], colors='red', alpha=0.1);\n", "\n", " \n", " \n", " \n", "l1ballfunction = np.abs(xx) + np.abs(yy)\n", " \n", "plt.contour(xx, yy, l1ballfunction, [0.6], colors='blue', alpha=0.9);\n", "plt.axis(\"equal\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To understand why the LASSO formulation is better at feature selection, we can focus on a couple of parabolas and look at the evolution of the intersection between the parabola and $\\ell_1$ ball as a function of the angle. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.4], colors='red', alpha=0.1);\n", " \n", " \n", " if i==4:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.4], colors='red');\n", " i+=1\n", " \n", " \n", " \n", "l1ballfunction = np.abs(xx) + np.abs(yy)\n", " \n", "plt.contour(xx, yy, l1ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the first parabola, you can see that the intersection occurs at the (spiky) tip of the $\\ell_1$ ball. The solution returned in this case will thus have one weight set to $0$. Let us now take the second parabola." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "\n", "\n", "\n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.65], colors='red', alpha=0.1);\n", " if i==5:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.65], colors='red');\n", " i+=1\n", "\n", " \n", " \n", " \n", " \n", " \n", "l1ballfunction = np.abs(xx) + np.abs(yy)\n", " \n", "plt.contour(xx, yy, l1ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this second parabola, we see once again, that because of the structure of the LASSO penalty, the intersection occurs on the axis. The solution will againn have a zero coefficient. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABAx0lEQVR4nO2deXxkZZnvf0/tVUll66TplWaxEQEHBxuEAecCA9IwONAoiojLRUUURhgdRhw38M71uq+oiIi7SDvKooCICOMyLgQGZGk2W5YGujudfU8lee8fvzy+pyqnslZSldTz/XzqU6lzTp1zqtHf+5xnFeccDMMwjOVPpNw3YBiGYSwOJviGYRhVggm+YRhGlWCCbxiGUSWY4BuGYVQJsXLfwFQ0Nze7ffbZp9y3YRiGsWS455579jjnWsL2VbTg77PPPmhtbS33bRiGYSwZROSpYvvMpWMYhlElmOAbhmFUCSb4hmEYVYIJvmEYRpVggm8YhlElmOAbhmFUCSb4hmEYVYIJvmEYRpVQEsEXkWtEZLeIPFhk/7Ei0i0i9028PlSK6xqGYRgzp1SVtt8EcAWAb09xzK+dc6eW6HqGYRjGLCmJhe+c+xWAjlKcyzAMw1gYFtOHf5SI3C8it4rIwcUOEpHzRKRVRFrb2toW8fYMwzCWN4sl+PcC2OCcOxTAFwHcUOxA59xVzrlNzrlNLS2hDd8MwzCMObAogu+c63HO9U38fQuAuIg0L8a1DcMwDLIogi8iq0REJv4+YuK67YtxbcMwDIOUJEtHRK4FcCyAZhHZAeDDAOIA4Jy7EsCrAbxDREYBDAI4yznnSnFtw1i2OAfQTjKMklASwXfOvW6a/VeAaZuGYUzF+DgwMMDX6Ci3iQDJJF/pNBCxekljblT0xCvDqCrGxoA9e/ieSADZLLePjwNDQ3z19AA1NXxFo+W9X2PJYYJvGJVCZyfdOC0tQDyev6++HsjlgL4+vvr7gbo6Cr9hzBB7NjSMSqCvDxgZoYgXir0SjwONjcDKlXwC6O4G2tq868cwpsEE3zAqgb4++ugzmemPjcWAFSso/mNjFP2BgYW/R2PJY4JvGOVmZIR++pmIfZB02rt/urpo8VvymzEFJviGUW5GRvieTM7+u9Eo0NwM1NbSr9/RwcXDMEIwwTeMcjM6ylTLsHRL57ggDA/zVUzM6+ro4hkZ8Zk+hlGAZekYRrkZG6NfvpCBAaC3d7J4x+NAKsUMneAioTn6HR0U/RUrws9rVC32vwbDKDfj45Nz6js7gcFBZuPU1Xlhz+Vo6ff2MtCbyTBfX/cnk3TxBEW/WNaPUXWY4BtGuSlsodDfT7HPZn3xlZJM0l8/Ourz8fVYzcmPxyn07e18megbE5gP3zAqCedovQcrbcOIxYCGBp+l091NcVf3TyxGS1+E23O5Rbl9o7IxwTeMSkDTKQcG6OKZSuyDqDXf0MCAbVsbXT6Az+BR0bcCrarHBN8wyo2IF/yhIYr4bFM0Mxla+9Eoxb2vj9ujUS4IQP4TgFGVmOAbRrmJRHy6ZS5Hd85cUDdOOs0ma11dXEi0Mtc5ir7l6VctJviGUW6iUYqwvoqlUo6McEGYykoXYT5+Nkv3UEcHhT4eB5qa+F3dZlQdlqVjGOUmGqUQq5AHUzTHxmitFxZdRSLMxU+nw90/2SzP09Xl0zMTCS4GHR1M+2xqWtCfZVQeJviGUW5U4DWTRnPqx8cp1uPjXthF+Hl4mP7+gQFa79ksF4AgmQzP1dnp0zNTKbZa7u7mQlJXt3i/0yg7JviGUW7UhVOYRdPZSXFX6zxIJkO3zOAg0zg7OryYB58QUila8lqI1dzMfH3N44/FZt+0zViymA/fMMpNmOD39dGKr68vHsQVoVivXElLfXgY2L17cqvkZJKLxtiYD9rW13N7d7dv3mYse0zwDaPcaOM0demo5Z5IzMz6FmH1rQ5G6ery07OURIKW/uioF/3GRj4NdHRYumaVYIJvGJVAPO5Fd3SU4l/ok58Ozbmvq+OCUTgNK5mk6OdyFHkRH7i1zJ2qwATfMCqBRIKC75yvlJ1Lf3yA1v6KFT7oq+fTc2ob5c5O36Ihl6N7x1jWmOAbRiUQj9Oto73vgfB8fM3Vnw7tmqntkoeG/L50mj78oSGKfCrl8/b7+0vze4yKpCRZOiJyDYBTAex2zh0Ssl8AfB7AKQAGALzZOXdvKa5tGMuCRIIulrExir6mYAIU5t2786dZaXO1+npa6GFo5W1HB1/19b6jZk0Nr9XXR1dQNksrv6eH57bumsuSUln43wSweYr9JwPYOPE6D8BXSnRdw1geRCLej68TsAC6ZB5+mILd2AisWsVXOk3rfPt24KGHuCAUO6/m33d351vwdXW+DcPgIBcOfSKw9gvLkpJY+M65X4nIPlMcchqAbzvnHIDfi0iDiKx2zj1fiusbxrIgkaDQjozQuh8aAnbsoPW9YcPk9MzxcWbktLXxuLY2Hldbm3+ctlvo7PSDzvWYhgYuMl1dfBpobOQi09VllbjLkMXy4a8F8Ezg846JbZMQkfNEpFVEWtva2hbl5gyjIkgm6YbRNgrPPEOLe999w3PxIxGK8gtfCOy3H4X8sceAp5+ebKGr6KtFr5a+ZuqoZR+N0vIfGjJ//jJksQRfQraF5oA5565yzm1yzm1qaWlZ4NsyjAoikaDg6yDy3l66b2Yyl7ahATjoIFrpe/YA27blB2oBL/rq3tECLV04xsf5FFBTw8Wnp8d66C8zFkvwdwBYH/i8DsBzi3Rtw1gaRCIstBodpbUdiVDAZ/P9vfcGXvACumkeeYTnKaSxkYLe1UXfPcD4gaZr9vTwbxHLz19mLJbg3wTgjUKOBNBt/nvDCEF75HR10dKOzOH/onV1wIEH0n3z5JPAcwW2lbpxtCpX00BTKfr2+/v5dNDYyMWnp2eeP8qoFEqVlnktgGMBNIvIDgAfBhAHAOfclQBuAVMynwDTMv93Ka5rGMuOZNIL8VwHoQD87saNjAPs3MmUy/Xr/QKior9nD6345mZa+XV1vghLG63193MxmGshmFExlCpL53XT7HcALijFtQxjWZNIUFgHB2npOwfcfDNw3XXAL39Jf35jI3DYYcCrXgWceGLxhSESYdZOPE7RHxkB9t/fi76mbAZFPxrl+dva6M9fsYJPAJ2d7NUzlycOo2Kw/3qGUWloEVQuB7ztbcArXwnccANw+OHAy15Gy/y664BTTwX22Qf4xCf8DNsw1qyhb7+3F/jzn/MzeKJRH7BVf30k4t053d382zlrvbAMMME3jEqjro4ul/e/H/j614ELL2Rh1Q03AFu30tJva6Po77cf8N730nL/zneKB1ibm7k49PYCjz+eL/o6/jCXoyUP8KlB0zNHRujbHxz0QV5jSWKCbxiVRipFUf7hD2nhf+ELDMAGyWSA17wG+M1vuACsXg288Y108Tz9dPh5m5oo+v39k0U/mfT9dTRIW1vr0zNTKS4M3d1WhbuEMcE3jEojGgV+8Qvm1n/6076nTjGOOw645x66dv77v4GXvAT40Y/Cjw2KfqF7p6aGC0lfn7fkGxv9mMSGBp9BZCxJTPANo9IYHGT/nCOPnPk0qmgUuOQS4I9/pM/+1a8GLroofLCJin5vL/CXv+Tv0wlbXV108QT9+f39jC8MDZlrZ4ligm8YlUZrKy3vQw6hr342HHIIv3/uuXQFnXyy98sHaWoC1q2ji+app/z2YKsFnambSNC9MzDALCFz7SxZTPANo9JobeX7oYd60Z0NqRSDvZ/7HHDnncDRRzMfv5CVK9m6ob09vzgraNWr+yabpdB3dTGYa1k7SxITfMOoNJ55hqK9ejUFf/t2WvptbRTcgYGZLQIXXQTcdBODuEcdBTz44ORj1qxhrv3OnczHVxIJH8Tt6/N9eJyja0ezdoLTtIyKxwTfMCqNnTt9wVN/P0VeB50PDfHzrl18n6652cknM4tneJjB3fvum3zM+vW04HfsyG+jUFPDhaenh7GEWMynakYi/NzVZb12lhAm+IZRaQwO+olXaye6iDc2chFYtQpoaWGa5uAg8/On86cfcQRw110U6OOPB+6+O3+/tmCOx9l7J9hls6GBAWF1LQU7aWazDAr39pb4H8BYKEzwDaPSGBjw3Svr6nxrAyUepxDvtRfTKPv7KfyF7ZCDHHww/fmZDHDSScC9BRNGYzEWbwFM19Qnh2DrZPXn60jFgQGfxpnLleCHGwuNCb5hVBK5nO9/H5wtG9bmOBKh+La00Arv6PATrcI48ECKfipF0X/oofz9qRTTNYeH8zN34nGfjtnfz2vV1/O4aJT3YQHcJYEJvmFUEv39dNeote4cP/f1FQ+QxuNsnaCtjdvbw/PvAXbQ/PnP+feJJzIgHKSuzqdrBjN3amu9Pz+Xo2WfTPK+amro49eBKkbFYoJvGJXEyAhdKF1dFNTRUVrTIyPh+fSKCMVae+K0tRUv2jrkEOBnP6NAn3TS5AHoK1f6zJ1gVW1DA6+jgVp17YyM8Gmkp8dy8yscE3zDqBSco8CvWkULOxqlpZ5O080zk5z8VIounkiEln4xv/5LXwr8+MdMAT3llMndNtev9wNU9Byan5/LMVCr82+Hh/0AdgvgVjQm+IZRKYyNUTR1lvPjj9PK3rXLB26naoOsxGJ+oElHR/Fh5McfD3z728D//A8bsQXdQJGI753/l7/4hSaZpAtHXUw1NRT7gQEuEP39FsCtYEzwDaNSyOVole+1Fz/399NXrsHb3l7g0Udp/Rfz0Ss63EQHlhdbKF7zGuDjHwduvRW4+OL8fYkE++gPDuZX6tbV5efga1O18XEL4FY4JviGUSm0t1M4X/pSft61i/77VIr5+CtX0l/e0UG/ezHLXdHq2HSa/vVi7pZ//Ve2Yb7iCvbfCdLQ4NsvaKaQCLePjVHcYzEGdYeH+QQwMmLN1SoUE3zDqATUFZLNAi94AS37bdv4eXDQtzrQwqdEgmLb1jZ1ta2KfiZDwS9m6X/5y8AJJwDveQ8rc4OsWcPrPv209+cHG6oNDfHvWMynlfb0WAVuBWKCbxjlxjmKcTJJa1wEOOAACr6mPIrQrROPU7QbGijkY2MU/elSIhsavKUfJvqxGCdobdhAN8+f/5y/f999J/vzs1l+T3P/6+u5+GiweSbxBmNRMcE3jBnS3g4ceyxd2HV1wObN+a1n5kwu59sWABTPF78YeOABiihAKzoa9S0VNF+/pcV3sZyq6ArId++ELRBNTcCNN/J+Tjst/5igP1/z8/XpYWyM59QFa2TEL0zTxRqMRcUE3zBmQHs7PR6//z3wpjcB55wD3HFHiURf8+V1jOH4OHDYYczK2bGDQjowQNGNxfjSgePR6OSiq6lSNxsaeL6urvCUzYMPBr71LVbhvvWt+QtIQwMDwbt3e+s9HveuneFhroRBSrIiGqXCBN8wpkHFfts2GsBf/CJd3lu3sg/ZvEVf3SDaUmF8nD3sAeDXv6aV39tLwY9GGcTt78+3wOvqfI78nj3FLWsdcJJIcEEJK846/XQORr/2WuCzn83ft349F4wnn/SxA3XtaFfPbJb3EY3yicDSNCuGkgi+iGwWkUdF5AkRuTRk/7Ei0i0i9028PlSK6xrGQlMo9ied5Pdt2eJF/6ST5iH6Y2O+J40IPx92GC3nX/86v6I1EqFYhw0gSadpgY+P069fTGhV9LX/TljQ96Mf5Y+69FLgt7/127Wz5siIT9UMZu309tI1FYvxs4hZ+RXEvAVfRKIAvgTgZAAHAXidiBwUcuivnXMvmXh9ZL7XNYyFZiqxV1T0W1vnIfqavw74gGc0CrzsZRRbzYDRwG4kQiu/t3eyWyaRoItHhD+gmOhrF0z9oYVuoEgE+O53mQp61ln5w1EyGaZqdnb6VM1EwnfO1HYQzvE+hoen7uRpLBqlsPCPAPCEc267c24EwA8AnFaC8xpG2ZiJ2CvzFn0VRoBCrxb33/89C6127vRunVSKx2YytLLDcuu10lZFv1hPnVjMtz7WmECQ5mZm7uzaxaBFcFFYtYpPFDt2+Putq+NCoX2AUil+x6z8iqEUgr8WQHBg5o6JbYUcJSL3i8itInJwsZOJyHki0ioirW2zHeBsGCVgNmKvlMTSBxgEVQE9/ni+3367T3nM5fz0K824CRN0DeZGIhTzYpZ+IkF3zMhIeIXs0UfTvXPbbcCnPuW3q2tnfNy3Uo5EeJ+5HGMM9fUUe+0RZMVYZacUgi8h2wpzw+4FsME5dyiALwK4odjJnHNXOec2Oec2tWhPEcNYJOYi9sq8RF+t63jcC+SRRzIAescd+dZzOs1jamroKilWQRuN0qevln6xAq10mtcZGAjPnX/PexiZ/uAH/YB1gBa8NnpT1046Teu+t5fXDaaaWjFW2SmF4O8AsD7weR2A54IHOOd6nHN9E3/fAiAuIs0luLZhlIz5iL2yZQu9ILMSfbWCAT/wRGfIHn00h5Zoznt3txd8DeD29ha34IOiP1X2Tjbr+90X9t0XYapmYyNw9tn5C0yYa0f9993dPG80yu1jY9Yzv8yUQvDvBrBRRPYVkQSAswDcFDxARFaJ0EkpIkdMXLe9BNc2jJJQCrFXzjhjlqIfiXj/eCxGgVUBP/FEtjTYto2COzrqc/IBWtCDg1NXtcZiFH39ocXy9BsbfRvmwoVh5Urgm98EnngCuOii/H3q2tGsHe2tMzjIhSub5W/S9slm5ZeNeQu+c24UwIUAbgOwDcBW59xDInK+iJw/cdirATwoIvcD+AKAs5yz/+pGZVBKsVdmJfrRaL4IJxLeL3/aRP7DjTf6LpWdnQzajo3x2EjEZ8cUQwO0Y2O+SVshmq4JhAdxN28GLrwQ+MY32EtfUddOZ6cfmFJby9/V3c17VVfV2Nj0Td+MBUMqWXc3bdrkWoM+Q8MoMUGxv+EGalopuf56tqbZtIlxz8JCVAC0ent7gdWrfUZLX5//fPDB/OLvfkdrv6ODrRfa2ijkQ0O0+leu9Dn7xRga4vdTKS/uxY6pqfGtHYL7XvpSZu488ADvEeCC9eijFPSDDuIipOepr+d9appoMskW0BIW/jPmi4jc45zbFLbPKm2NqmWhxR7I9+kXrchVH7da+equUSv/la8E/vAHpmdqGmVnJ33nuZxvuNbfP7WVD1Do6+spxsUeO1Ip36qhMLMmlQK+/30uSOee658CIhFW4Y6M0J+vxyaTvE487msIRketsVqZMME3qpJCN85CiL1yxhnTtGHQlgoq1oWC/6pXUVh//GMKcTJJwa+p8Tn82lRtJkJaU+OnVhULomazvI+ursmLyKGHAh/+MOfiXnON315by1TQPXv8fegTQk8Pn1K0zqCvz+bflgETfKPqWAif/XRM2YahUPAjEVrEKvibNtF6vv56fl6xgi6g0VGKfy7ni5z6+2fWobK+nt/t7g7P49esIBEuLoWu33/7N+CII5iy+fTTfvu6dVwoggHcmhq/sKTT3so3X/6iY4JvVBXlEHulaJ6+FlIFUyt1cpRa8KedBvzXf1F81fe+Zw/FdGyMwppOT52XX0hjo++nE7ZIRKOMCeRykx9LolGmao6MTHbtrFvHp42dO7mtttaPPqyr88Vl/f2WsbPImOAbVUM5xV4pKvrx+GTBd87nxJ95Jvf/+Md++lVXFy17dZOkUvzOwMD0vnwgv59OWFYOwHPW1FCcC/vhHHggcPnlLAz7xjf89oYG3t/Onb7hWzbLv0dGmLUTifBvs/IXFRN8oyqoBLFXQkU/kaCgq+gmEr7xGAAccwzn2v7gB/y8YgUFs6vLT8XS/jWzsfJjMW/FFxs+rlZ5V9dkv/u73w0cfjjn4j4XqLdcP1GL+eyzfK+p4Tl6emjxJxLel29W/qJhgm8seypJ7JVJoj9UEKgVoYCrVR2JAK99Latun3/e5+S3t9Ni1rbK2jp5cHBmVj7ARUJbK4RZ3OrPd87n2SvRKAO3AwPA29/utycSTBPt7PSPMXV1vMehIS4AauVb9e2iYYJvLGsqUeyVPNH/pwR6eiU/gJpKUSDV1fPmN/Pzd77j3THd3RR2rbjNZLhQDA/PrplPsLVCWJuGWIyCPTQ0eVE45BDg/e8HfvpT5qAqq1b5AO74OO9L++wE79Os/EXDBN9YtlSy2Cs+T19w0uub0dMeENtUiu9q5b/4xUyJvPZafl65ku+7d/smZePjPq1zaKh4a+QwGhp8d82wlMmaGp9XXxjkfe97WXD1L//iFxoN4A4P8x4BLhrj47Tqtc//0JB10lwkTPCNZclSEHvlr20Y7o/hpFfXoqc7kPGSSOQHS88+G7jvPla5avC2o8Pn4vf3U5i1PcNsrPxIhK6b8fHJrhtFK3k7O/O3JxLAV7/KQO0ll+QfrwHc0VH68TMZ3mcqxXtWK99YcEzwjWXHUhJ75YwzgK3fzaH1/jhOOsl5nU6l6GJRi/qcc7zfHABaWiikXV20mJ2jYGtu/8jI7KZNJRJ074S5bgBeu76e5y0U6WOOAd72NuBrX2MbCGXtWt6TBnCzWb7r4qSzb20q1oJjgm8sK5ai2Ctbzoxh65WdaL1HfEWuunXU5bFmDTtofv/7FN26OrpZ2tp8+4L+foq/5rvPdhqLVvP29IQHfjMZP2KxcP8nPkFX0zve4RepVIoVuO3tdOVEozzHwACvk8nMvErYmBcm+MayYSmLPQAgEsGWfxrD1qt7fRuGgRiFO+jjfstb6BO/4QZ+bmmhyA8M0HpW/7v21teWyrNBq2yL5efrNKtC1099PfDJTwL33w987nN++5o1fOrQClxtmdzX5335/f2zizkYs8YE31gWLHmxV1IpbDmxD1t/MO5FPzfRJE2t6dNPZwbM177GzzrKcNcuumQSCQppNkshHRub/bQp9ecXe0KIRvl0EebaOecc4LjjgMsuy2+xsGoVRb2ri+evraUbRwegF0sLNUqGCb6x5Fk2Yg/QxQFgyynDvvfOGTVM2VQrPxYD3vAGVrg++STFs7mZgdSREQrp2BgFXgeqjI/P3mWSTPoq28IpWEC+ayeYtSMCfPnLvJdgALe5med89lnej7ZcUBdUJDL5XEZJMcE3ljTLSuwBWrvRKDA05PP07xFsfkMzenYHgppa5HTVVXwPpmimUnTn9PX5WbjO8fNsxTQ4dCUsVVO7YRZW6R54IIelXHcdewABvI+1a7l47NnDhUGt/HjcLy5m5S8YJvjGkmXZib2i7RGc8102/yeGza+t93n6++8PHHssxw6OjHChaGz0OfTZLN0xzvk2DTpIfDYEq2zDWi+oaycsl/6yy+jGede7/ELT0MB727mT96kVtxp/AGwM4gJigm8sSZat2AO+CdqEG2XLFuC6ax3uvj+Ok04Wr9kXXMA2Cz/8IT9rimbQyu/t9WO2RPyc2dkQj1OMBwfDC6Q077+7O/8pIJtl1s6f/gRccYXfvnYt73PnTm/lDw/zHOk0n0SsEGtBMME3lhzLWuwBb5EH8tLPeHUEW6/pR+v/RH2e/umnAxs2AF/8Ig+qraXI7tnjfeSjo7SuJ2IDfx2hOFs0zbNQ1JX6em4vPPc55wB/93fARz7Cpw+Avv/GRi5M2hZCrfxiOf5GSTDBN5YUy17sAYpywK2jbHlNnHn62nCtPwqcdx7HH+rs5732omB2dNBajsW8le/c/BqWFWugBnAxqK3leYNPECLAZz/LGMCHP+y3r17NBeK558Kt/J4eS9FcAEzwjSVDVYi9kk5TEIOil0xiy6k5bP16nxf9172di8MXvsBj6ur43V27/OfRUaZ1ZjI8ZzRKQZ3tiMFYzFfhhrlcslmeu6sr3wd/xBHA61/P1gvbtnGbFmPt2ZPfPXN4mFb+4KAFbxcAE3xjSVBVYg/4gd+Flngmgy0n9GLrD8Yo+mevQM+WN9GPryK/114UTh2Qor782lru1zTNmfbMDzKVa0eEYh1W6PXxj9N6f897/LZVq3z9QDBjR++5WGaQMWdM8I2Kp+rEHijq1kEmAwDY8ooB31r5oU+jZyjurfymJi4Yzz/Pz9qHfnjY+/XjcVrQYa2Qp2OqrJ1UyrdlCIr1mjUU+1tvBX75S25LJHzLhaCVn8vxaaG/34K3JaYkgi8im0XkURF5QkQuDdkvIvKFif1/EpHDSnFdY/kTFPsbbqgSsVcyGQprsKlYNEpBHRjAltMdRf/hGpxU/3v0XPl9L5B77cW/u7p4vFbfqqiqP7/YlKupiMW4cAwOhhdkFcvN/7d/o+/+kkv8IqZW/vPPc5GrqeHv1aeRYl07jTkxb8EXkSiALwE4GcBBAF4nIgcVHHYygI0Tr/MAfGW+1zWWP84Bp5zixX7z5nLf0SKjRViFVq4OLp8ozrruOqC170Bs6bjaz5ZtauL3C638gQHv14/H5z5XVvvfFPrrAW7XgSzBGERNDQO3997LIS56rE7GGhjgMepyymS4aFjwtmSUwsI/AsATzrntzrkRAD8AcFrBMacB+LYjvwfQICKrS3BtYxnT3w/88Y/A+95XhWKvpNO0eIPuER1cPiHUZ5wBXHSR4Jf4B+Dzn+exkQit58FBulcSCX6vr8/7yEdHub23d/a+chEWUY2NhccCNIBbaOW/9a3AwQcDH/ygfzpYudJb+ZEIhX5oiOe3FM2SUgrBXwvgmcDnHRPbZnsMAEBEzhORVhFpbWtrK8HtGUsd7RBclUz47CcFQXVw+URDtXRGuP2xx4Drr+ffhVa+dtLs66PbZWyMolzMHz8d2vSsr29yLECETxK5XP69R6PA//t/wNNPA1/6Erepld/d7d05zvm5vu3tVnlbIkoh+BKyrfC/zkyO4UbnrnLObXLObWppaZn3zRlLl3SadUWf+hTw4IPlvpsyEYtRWEOydSAC9PejtZW1Vy860HGk4Mc/7n30wQ6V8bifihWN+qeHdLq4P346tFdP2IKRTvPeCzt1nnoqi7E+9jH/dBC08vXehod5/oEBG45SIkoh+DsArA98XgfguTkcYxh5RKPAz39OzTjuuCoW/UyGlnzQlx2JAOk0Wn+XwwknODQ2Arf+TIB3v5stNu+4g8eF+fIBirD+PTZW3B8/HZGIb5McVsylFbhBt48Ixb6tja0XAF5fO34GrXx9vCscqWjMiVII/t0ANorIviKSAHAWgJsKjrkJwBsnsnWOBNDtnHu+BNc2ljkHHADceSc16/jjq1T002mKZIGgtj5SixPPakJjg8Ndd/FpCG9/O3vqfPSjPCjoy+/q4iqqGTbaZG14mNco5o+fjkzGW/KFsYDgDNtgp86Xv5wR+c99jsIP5GfsxOM8Zy5H95Xl5JeEeQu+c24UwIUAbgOwDcBW59xDInK+iJw/cdgtALYDeALA1wC8c77XNaqHAw4A7rqLGlCVoq8DylWkwfz7E0+OoaHe4a7/bMeGvScs80yGTdXuvJMRbyC/Dz3ge893d1NMYzEuJuqPn0tWTEND8WIu7YJZ2Gfnox/lQvCxj/Fz0MrXvv7j47TybdB5SShJHr5z7hbn3AHOuf2dc/93YtuVzrkrJ/52zrkLJva/2DnXWorrGtXDxo3UsKoV/ZoaujgGByn2J1Jj7/p5DhvW5PJ93O96F90sl1/ut61end+HPpulqGorg7ExLgJhrRFmgqZihhVzRaM+TTO479BD2Qr0yit9lbD68nfupNDHJkY8xmK++ZoxZ6zS1lgyqHunKkU/HgficbT+dtiL/V3AhhdOiGLQ+m1sBN75TuCWW3xTtaYmPiVoH/pMht/r7vYNy3Ty1Ojo3Fw72WzxAG6xfZdfzsXqP/6Dn4N9/bWT5tiYz8m3aVjzwgTfWFJUs+i3PprFia9poBvnrgmfPUBRzOXys2wuuWSylb92La16tfLVsu/v9wHcoaG5u3aCAdzCYrHgU0XwaeSQQ4DXvha4+mo//3avvbgo7dzp4xfJJO91Lumjxl8xwTeWHNXo029tBU44NYmGunHcdWO3F3uAAh2J5Fv5TU3A+ecDP/0pcN993FZXlz9tKpn0M2l1//AwLf+5unYyGf6HCRuark8VhU8Pl1/OBevjH+fnVMpb+QBFPxr1oxaNOWOCbyxJqsmn39rKfkJNTYK7bhnEhpaByUPDtZ980Ed+ySXc/qEP+W06beq5iazoYJqmTq7SWbhzde3ok0NhkFWt/MJirI0bgTPPBL7+dS5GgJ/etWcP7wvwC4m5deaMCb6xZKkGS18DtE1NXOA2vGii8raw/40WYgVFtrmZvvyf/MRn7Oi0qT176F4JNkIbGfHZNtq9sq9v9gVZwVGFheKcTvt2zcEngA98gNfRjJ3aWl5/926foplMzr0q2ABggm8scZazpR/MxrnzzgmfvVahDgzkC2Yk4jNhJtotAAAuvZQn+MAH/La1E11NtBirttb3vdEhJ4ODFFktyJptDnzwySFsnzZyUw4+mE2BvvY1ijyQP72rpsbP+jW3zpwxwTeWPMsxkJuXenkX8n32NTUU4LD+OoVWfmMjcPHFwO23A7/6FbcF+9APDPgAbi7nM3ViMYq1WvyztaqLpWIC+e2ag4vWhz7E4z/5SX5uaOCxbW0U+0jEF3iZW2dOmOAby4LlJPrqs29sDBF7gKKnghkkGqXLZqDAx//udwMrVtDKD/ahj8V8Zkzh4BLthDk46C3+2c7B1QKvqaz8oGvqb/6G1bdf+5qPHbS08Jj+fj7ZpFKWrTMPTPCNZUNQ9Jdq752g2P/VjRNGoCd+HrW1k638bBZ473uBX/8auPlmbovF8hurAX5wibZT1kKqeJyLQXd3vrtoOiIR37qh8D7VJ19o5V96Ka9zxRX83NzM87S1cTHLZPi7wxYRY1pM8I1lxVLuvaNunKKWfRBNVZyplf/P/wzsvTeHC6g/fuVK33JhfHzyJKu6Ou/Dr6/nQtLZObtUTU3FDBNobdcctPKPOQY4+mi2/xweptg3NXEREPFxhb4+660zB0zwjWXHUnTvTOmzL0ZtLYOahQVS2mkyuBikUsBll/Ef49vf9tvXr6ewaqBU/ffqMlHXTl8f/87lZmddayrm6OjkYqyprPznnweuuYafV66kuO/ezQUkleKCNlsXk2GCbyxPgimble7eUTfOrMQe8AVXhbnyxaz8N72J2TCXXeZdLHV1tN537uTCoQFczcFPJLgIqLjW1s5+uLimYoYVY4VZ+f/4j6zA/fznfYvkbJbZOum0ryyeS41AlWOCbyxbNGWzkt07s3LjFKJDvwsLrgDfoTIoipEI89yfegr47Gf99vUToyq0m2YymT/JKpulYHd1+eKsrq7Z+fPDUjGBcCtfhJlFjz7KSmGAwduRES4a2SyPLczlN6bFBN9Y1lSye2dObpxCwlIxgeJW/qmn8h/iE59g8RVA0dVB4noenWSlAd3GRl/01NjIa3Z0zFxwk0m+wkQ6zMo/5xzm4evC1NDA+2xv98Hb3l6bhDVLTPCNZU8lVuTO2Y1TSLGCK8Bn7BS6Pj79aVrKwZYLq1ZRUJ96yg9BV599X58vyBoa4hNFYyOvN5siqDBhB3yaaX+/XwySSQ5zufNO3wtIg7f6m2304awxwTeqgkqqyPW9ceYp9kpYKibgi58GBvIXg5e8BHj969mh8pFHuC0S4TzcYAA3lfItEkZHeR1Nz4xG+RQwNDTzwSRB901hhk026/P+lQsv5D18+tP83NzM9/Z2XrswMG1Miwm+UTVUgqU/qTfOfMUeoFir+6aYlR82bSqRAP7lX/y2hob8AC7g0zHVtdPQ4NMza2q4IPT0zNzSrqsLt/KTSf6HCQp4Swtw9tnAD3/IRSiR8MFbTRnt6ZldLKHKMcE3qopyWvqhvXFKRTErX4ufhoby0zfXrWMx1s9+5ouxAB/A1QrcSISiPzLCc0ejdOdoemZDA/8xOztnJrzxOK32MCtfh68Erfx3vYtPHV/9Kj+vWMF7GRvz55ltc7cqxgTfqDrKEcgtSYB2KooFaQFa4mEtDi65hDfyr//qxTqRoD+/u9tb9drSoLeXQp9M+vTMoSE+rmgQdybFUJplU2jlp9OTp3cdeijwd3/HdgtjY/wHjMW8W6dwoIoxJSb4RlWymO6daXvjlIpiQdpi06ZSKaZpPvII8IUv+O2rVlF8d+zwC4G6cnQoSjbr0zOdo+iPjc0sc0et/GCQVtEc++DTyDvfySeOG2/0weTubt4jYH78WWCCb1QtQffOQhVnzbg3TikIWvmF7pViLQ5e+1rgf/0vTp3SdskAb3RkxA9KCWbt9PZS/DU9s7OT/4gNDfyOPhlMRbGMnbDpXWeeyRTNL32Jn5uafM/+aDQ8Q8kIxQTfqGqCvXdKLfrzKqqaK9lscStfp1gFRVaEQjo4SNeOkskwK2bPHi++qVT+vNugP7+rixZ3XR3PNV37haAvP2jlazHZ0FC+m+ktbwF++UsWY9XW+jROrQI2P/6MMME3qp6FaLi24D77YkyVl59K8UcWFj8dfDBwwQXA978P/OY3fvu6dfm5+QADuDpbVufiavtkFWCdlDWdq6W2NtzK12Ky4PbzzuNv+/rX+bmpiftjscnpnEZR5iX4ItIkIreLyOMT741FjntSRB4QkftEpHU+1zSMhaCUPv2SFVXNlWKpmAAFe3w8fJD4qlXAO97hF4pIhB02h4e9a0fEN1TTBmvZLBeT7m5a/vX1Pl1zqgZnYQVXel2d6qULzYYN/A/zve/x2k1NPG5wMHwwuhHKfC38SwHc4ZzbCOCOic/FOM459xLn3KZ5XtMwFoRSpGwG8+zLIvYAhbC2dnIqJsAfl8lQZIPZPHV1LHB68EHgM5/J375iBfPg1WLXfPjgUBTNnuno8Nk0ySRdPVNZ32EFVwCtfOfyF4xzz+XCc/PN3r00MBC+aBihzFfwTwPwrYm/vwXg9HmezzDKynws/aDPfsEDtNMx1bQpbaxWuO91r+OjyUc+QjeOsnbtZNdONps/FEX71gMUfYCfk0m6f4qJfljBFeAHlwfdOmecwcXnqqv4ub6egh+LMY5Q2EDOmMR8BX8v59zzADDxvrLIcQ7Az0XkHhE5b6oTish5ItIqIq1tbW3zvD3DmD0bN85e9Be0qGouFEvFBBhsDQ46CX7nK1+hxf3P/+y3x2KTXTuAT9XUVMxYzAdxOzu5r6mJwj2V6GvBVeF9Fk71Sia5KN12G7Brl19gRkd5fcvHn5ZpBV9EfiEiD4a8TpvFdY52zh0G4GQAF4jI3xc70Dl3lXNuk3NuU0tLyywuYRilYzbunbIFaKdjqmlTtbUU/u7ufFfIC17ACtyf/ATYutVvr6tj1k7QtaNZOqOjPhUzmaTlPTTkp1StWOEt/TCffrHpXakUtwet/Le8hdf79rf9MHSNORQGf41JTCv4zrkTnHOHhLxuBLBLRFYDwMT77iLneG7ifTeA6wEcUbqfYBgLw0zcO4tWVDUXgqmYhUIbHHRSuO/f/50DSC66KH9YuGbtPPmkF9lglo6ep6bGV+L29XlLX336YQHWsOldIly0hof99V7yEt7bddfRvaRpoBrANaZkvi6dmwC8aeLvNwG4sfAAEakRkaz+DeAVACqgQa1hTM9UxVmLWlQ1VzQVM2zaVCrle9QHWyIkEvST79rF9gtKJALssw9FWXvtAPn+fPWj19X5TJ3BQS/62sdeK3SVTGZyKqZuB/IXpde+FrjnHmDbNl47GuWCYLn40zJfwf8YgBNF5HEAJ058hoisEZFbJo7ZC8BvROR+AH8EcLNz7mfzvK5hLBrBPP3DD6fH44tfLENR1VzRDpVhefGaplno9jnqKOa+X301C56U2lqmb3Z2+uAswH+ISCS/n45m6nR2Uow1pTObpYC3t/tjteBqcDA/eyga9TNsdYE45xy+f+97vsWDPgVYxe2UiKvgVKZNmza51lZL2zcqg8cfB84/3+vf/vsDd9xR4WKvdHbSr75yJUU0SE8PF4PmZoqn0tdH94kI8MADFHuAIv344xTZAw/038nlWJmbSNBvr8e2t1OIV6zwxw4O0srXlg3JJIV+1y5ep67O38fQEBeSpiaKP8CGart2Ab//Pe/zqae46Gzc6J8KqhQRuadY+rtV2hrGDNm4kQkiO3bw9fDDS0TsAS+gxdI0o9HJbpbaWrp2nnxysmtn330p5n/5i98ej/OJYXjY+/4jEQp9NErhVx99Os0FRoTbe3ryC66C9xEWvH3Na4Dt2/kfob7e+/AtNXNKTPANYxbEYkxL19T0JUMwFbOwGCsYwC30ob/iFcBb38p+9Hfe6bcnEkzV7O/PT9XMZHzAVv3uKvqRSL7ox+MccqL9edra+A88Pj45AKvBW3X3bN7M33Tjjf7JIxjcNUIxwTeMakFTMcOs/FTK97wv7Kf/mc9Q3N/85vwMm6YmCvnOnfnnrKvzGTkaSI1GadEXWvrq11+xglZ9by/PFYwPAN5NMzjIxaGuDnjZy4Cf/tSPThwaMgt/GkzwDaNaCBZjheXD19fzvbC9cTYLXHMNM3Pe/e78fevXU2yffDL/yaGx0TdZU6s7Gs137wSzapJJxhfq6ijgu3fTb9bd7V01uRzw9NNcENJpYMsWxhIefpgLQi7Hp4MKjkuWGxN8w6gmMhmfplk4nUoHkw8PT3apHH88B5FcfXX+SMRIhNHr8fH8dgzqxgHys3HU0tepVcHriPApZJ99fG/9gQGfEZTL8ekjk+GCcsYZ/N7113MBEAmfBWD8FRN8w6g2inXMBJgaGY/Tsi5cED7xCeCFL2S16+5AjWUqRZdPby+tckUtes3U0fNFIhR9TdksvA9dLNJpWv0rV9LXv/fePtALAPvtx9bO2kwtHg8f8Wj8FRN8w6g24nEKe39/uM+7sZFukWCVLUDL+jvfoUi/+c35rpOmJt96Ieh/j8e5b3Q0f/xhYSFWZ+fkQiztjxOL+WZqyWT+U8EppwB/+AO/r8HimczVrVJM8A2jGslmaUkXijpAgdWMnsKGZIcfDlx2GXDrrcCXv5y/b906LiRPP50fI0gmvYsmKOwasNX2CG1tfgGKx73FHiSToaCr//+00/j5jjt4rsFBE/wpMME3jGokEqFrZ2QkvOlYbS2FP8y18973Ascey5GI992Xf8599+X3tm/P96Wn076pWqE1X1vrs3R0pKJzPhAbDAYnk1wo1Mo/6ig+Kfzyl75Tp2XqFMUE3zCqlXQ6vJcO4IeUBydbKZEIxyFms8BZZ+Vb4YkEfeujo8Cf/5x/3poaL/qFmUDJJP30ySQDym1tjAFoIDZ4X6mUf/IYGQGOPJIVt1qFa03UimKCbxjVTH19uL8eoEtFO2EWunZWr2aq5qOPAhdemL8vk/FFWcEmawBFX104QZ8+4IeoNDVxe0eHb8EQXDhSKd8bqLMTePnLuUA8/TT3WxO1opjgG0Y1E/TXhwllbS2Fv1B0AeDUU4GLLwa+8Q2+gjQ1sclae3t+Ja6eUy39QtEHKOgrV/KYaJTHPPUUz6Vzczs6mBEUjQL/+I/83q9+xScAE/yimOAbRrWj/vrCXjqAD6w6N9kNAwCf/CRdKhdeyAZrQdasoVto587JlbM1NTzv8HB+ymbwujU1fFIINmIbGOCTg45GbG5mg7cVK4Df/pbbLC2zKCb4hlHtqKiPjYXn5qtrZ2hoctZMLMZhJOk0cOaZk7+/YYPP3Cls6ZDJ8ElAu2yGFUxpLCGZpKivXs2FZO1aXnNsjMcceSTwu9+Z4E+DCb5hGAy2ahOzwuZqAJ8CgkPLg+y9N0cOPv44e9UX+uX335/f3b598oKRSvnirD17wt0x6TTfg8FYDdBqbOHII7moFI5sNPIwwTcMg6jPPMy1A/ih5YVplQALoP7P/wFuugm4/PL8fbEYRT8WA554YnIAOJFgho722OntzT9/PM7vBgU/EuF2XSCOOorv27aZ4E+BCb5hGERdO6Oj4a6daJT7c7nw/e97H/vbfOQj7G8TJJHggPRIJFz0tceOVt4WunjSaT55BN01qRS3jY8Dhx3G+3/8cSu8mgITfMMwPMnk1K6dVMrvL3S/iADf+haDqG98Y35Rln73BS+gIIeJvi44mv+/e7efxatuneB3dCDByAiP2Wcf4LHHuM1EPxQTfMMw8pnOtVNf71sfFwprbS3wk59wUTj99Pwma8D0og/4pmm6sOzcSXdOJBIu+Hv2cPvBB/OcRlFM8A3DyGc61442PnOOol/Ihg3Af/4nhfrUU8P74ajoP/ZYeG9+nXWr1be9vQzIPv88F6LeXr66ungP6TTwohcBzz5Liz9i0haG/asYhjGZZJLplGGuG4AWvs6vDVsUXv5yVuK2tgKvf/3kJ4FMBjjgAArzY4/xOmFot82VK+njB3xgt6/Pj1Ssr2dg2DkuNEYoJviGYYRTV+cLssJ84pmMD7KGuWbOPpuZOzfcAFx0UXhF7QEHUNSfeGJycVaQWIzpmy0tXAA0H3/NGi5OIyNMDwW4IBihmOAbhhGOFj2Nj4f32gFoWcfj+aMMg/z7vwPnnQdccQXwH/8xeX8iwaEq6TTHJAYHqIShs2uVeJz3OTLCcYvA1AtHlTMvwReRM0XkIREZF5FNUxy3WUQeFZEnROTS+VzTMIxFJNhALczXrv78Yvn5IsBXvgK86lXAhz4EXHnl5HPEYsDGjX6AyuOPh2cIAXwqcC5/CHosxlTR2lpus26ZRZmvhf8ggDMA/KrYASISBfAlACcDOAjA60TkoHle1zCMxWKqKluAGT3aiz4siBuJAN/7HnDccZyLW9hoTY/Ze2/fZfORR8J792g//GBcIR7ntWMxfjbBL8q8BN85t8059+g0hx0B4Ann3Hbn3AiAHwA4bT7XNQxjkZmqyhagEGsHzLAgbjLJdM2jjwbe9jbg2mvDr9PcDBx4IEV8+3bgL3/Jt/ZF8itsAX4eGmJ6JmA5+FOwGD78tQCCTbF3TGwLRUTOE5FWEWlta2tb8JszDGMGBKtsC5ugKTU1PogbZmXX1AC33AK89KXAG94AfPOb4edJpejXX7WKTxUPP8w+OSr8ySTvIzgU/ZlnfDqmNU8rSmy6A0TkFwBWhex6v3PuxhlcQ0K2FW124Zy7CsBVALBp0yZrimEYlUIqRfdOXx+DrVr9GqS+nm6fri4uElocpWSzwO23s/fOuefSMj///MnniUSYgdPczNz7PXv4qqnhffT18fy5HLNyBgZ4/Pi4b6xmTGJawXfOnTDPa+wAsD7weR2A54ocaxhGJZPN0pLu6vJNzYJoELetjdky2hQtSF0dcNttwCtfCbzjHcyb//CH+d1CEgkWcq1ezfN1dnrxb2/nubJZtlVQGhpK/KOXD9MKfgm4G8BGEdkXwLMAzgJw9iJc1zCMUqOpmkFBLxTqSIQ58yrKzc2TK1/VvXPOOeyu+eyzzOApXByURIIunlWr+ASxcyff996b5969G3jwQR67enXpf/cyYb5pmVtEZAeAowDcLCK3TWxfIyK3AIBzbhTAhQBuA7ANwFbn3EPzu23DMMqGZuWMjoZn5QC0/Jua6E9vbw8P9KZSwNatwLveBVx9NfAP/8CFZDpiMVr1mrEDUPS3bePfL3rR3H5XFTDfLJ3rnXPrnHNJ59xezrmTJrY/55w7JXDcLc65A5xz+zvn/u98b9owjDKTTNKdMjRUvC1CIuHTNcNm1wIU6s9/HvjylzmxatMm4I9/nP76iQTPp2mi0Shw773cboJfFKu0NQxjbtTWMnDb0xPeWgGgFd/YyDTKYimdAH35d9zB+MAxx7Aqd6r0ynic77kc30dGgBtvZK5/WDDZAGCCbxjGfGhomLq1AkABbmjgojCV6B9zDPCnPwEnnQR88IOcYnX33eHHxmJ056jgf+5zdB1dcME8f9DyxgTfMIy5E2yt0N5e3CrPZHxh1lSi39LCMYlf/Sobqh15JHP2H3hg8rGxGBeZ3/wG+NSngM2b2Y7ZKIq4Cp7/uGnTJtfa2lru2zAMYzpGRij48TgzdMJSLAG2TejuZgxAF4pidHQAH/gAWzEMDQGHHw68+tXAsccyy+fZZ4Hvfhf40Y/oNrr9dvPfAxCRe5xzob3NTPANwygNQ0MU6XSaAlyMgQHm8ScSFP3phpXs2sXA7o03suo2SCzGxmwXXwzstx/75lc5JviGYSwOfX0M4tbU0IVTjMFBX427YkXx/PtCtm9nNs/oKF+HHgr87d/69FAdklLFTCX4i1F4ZRhGtVBbSz++tj7QlsWFpNO07Ds7mXvf1DS5DUMY++3HF+CfKMbHGbzNZEr3O5YpFrQ1DKO01NX5dM3+/uLHJZO+Cre9vXg+fzHUFTQywiCwpmoaRTHBNwyj9DQ0MAe/uzt8cIoSi1H0k0kuEFNl+hSigq/nTybndcvVgAm+YRilR3vuJJP01U81lCQSoUunvp7W+u7dUz8ZBHGOxyYSM48DVDEm+IZhLAyao59I0Fc/laUPMNDb0kLXTHc3ffvFKngBin1nJ/v1ZLOlvfdligVtDcNYOESYhdPRQUvfOQp7MWIxHj84SBdPRwe3pdN8WohG/dDyzk6+r11r7pwZYoJvGMbCopZ+Zyct9/Hx6S3ydJqvgQG+ensnj04cHaUbyLJzZowJvmEYC4+KflcXhXtsjGI9VaUtQDHPZHzq5eioz8gZHeUCYr77GWOCbxjG4tHQQIHu7aVgNzbOTLAjEbptgq4bHWRugj9jLGhrGMbiks3S2s/lOBVLhXu2jIwwIDzdU4LxV0zwDcNYfFIp5t9rl82enuIdNMMYG6PgW7B2VpjgG4ZRHuJxpmFmMqyybWububXf2cnFwgK2s8IE3zCM8iFCv/6KFfzc3s7XVMLf10frvr7e/PezxIK2hmGUn2SS1n5/PwW9vZ1inkp5P/3YGFM0czmmbJp1P2tM8A3DqAxE2F2zpoYVtoODFPhgm4V43HLv54EJvmEYlYWIL7xyjpa9c9weM8maD/avZxhG5WIiX1LmFbQVkTNF5CERGReR0AkrE8c9KSIPiMh9ImIjrAzDMMrAfJfOBwGcAeCrMzj2OOfcnnlezzAMw5gj8xJ859w2ABCrdDMMw6h4FisP3wH4uYjcIyLnTXWgiJwnIq0i0trW1rZIt2cYhrH8mdbCF5FfAFgVsuv9zrkbZ3ido51zz4nISgC3i8gjzrlfhR3onLsKwFUAsGnTplnUWhuGYRhTMa3gO+dOmO9FnHPPTbzvFpHrARwBIFTwDcMwjIVhwV06IlIjIln9G8ArwGCvYRiGsYjMNy1zi4jsAHAUgJtF5LaJ7WtE5JaJw/YC8BsRuR/AHwHc7Jz72XyuaxiGYcye+WbpXA/g+pDtzwE4ZeLv7QAOnc91DMMwjPlj3TINwzCqBBN8wzCMKsEE3zAMo0owwTcMw6gSTPANwzCqBBN8wzCMKsEE3zAMo0oQ5yq3XY2ItAF4qtz3UYRmANXc7tl+v/1++/2VyQbnXEvYjooW/EpGRFqdc0WHvix37Pfb77ffv/R+v7l0DMMwqgQTfMMwjCrBBH/uXFXuGygz9vurG/v9SxDz4RuGYVQJZuEbhmFUCSb4hmEYVYIJ/jwQkU+KyCMi8icRuV5EGsp9T4uJiJwpIg+JyLiILLkUtbkgIptF5FEReUJELi33/Sw2InKNiOwWkaqbWici60XkThHZNvG/+4vKfU+zxQR/ftwO4BDn3N8AeAzA+8p8P4vNgwDOQJXMJxaRKIAvATgZwEEAXiciB5X3rhadbwLYXO6bKBOjAN7jnHsRgCMBXLDU/vub4M8D59zPnXOjEx9/D2BdOe9nsXHObXPOPVru+1hEjgDwhHNuu3NuBMAPAJxW5ntaVJxzvwLQUe77KAfOueedc/dO/N0LYBuAteW9q9lhgl86zgVwa7lvwlhQ1gJ4JvB5B5bY/+GN0iAi+wD4WwB/KPOtzIp5zbStBkTkFwBWhex6v3Puxolj3g8+7n1vMe9tMZjJ768iJGSb5TVXGSJSC+BHAC52zvWU+35mgwn+NDjnTphqv4i8CcCpAP7BLcOihul+f5WxA8D6wOd1AJ4r070YZUBE4qDYf8859+Ny389sMZfOPBCRzQDeC+CfnHMD5b4fY8G5G8BGEdlXRBIAzgJwU5nvyVgkREQAfB3ANufcZ8p9P3PBBH9+XAEgC+B2EblPRK4s9w0tJiKyRUR2ADgKwM0iclu572khmQjQXwjgNjBgt9U591B572pxEZFrAfwOwAtFZIeIvKXc97SIHA3gDQCOn/j/+30ickq5b2o2WGsFwzCMKsEsfMMwjCrBBN8wDKNKMME3DMOoEkzwDcMwqgQTfMMwjCrBBN8wDKNKMME3DMOoEv4/P8q/ObYJDwoAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "\n", "\n", "\n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.7,1.7,100),np.linspace(-1.7,1.7,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [1.1], colors='red', alpha=0.1);\n", " \n", " if i == 6:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [1.1], colors='red');\n", "\n", " i+=1\n", " \n", " \n", " \n", "l1ballfunction = np.abs(xx) + np.abs(yy)\n", " \n", "plt.contour(xx, yy, l1ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the third parabola, we observe the same phenomenon. Because of the \"spiky\" structure of the ball. The parabola hits the tip of the blue ball first." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "\n", "\n", "\n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [1.1], colors='red', alpha=0.1);\n", " \n", " if i == 6:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [1.1], colors='red', alpha=0.8);\n", "\n", " \n", " i+=1\n", " \n", " \n", " \n", "l1ballfunction = np.abs(xx) + np.abs(yy)\n", " \n", "plt.contour(xx, yy, l1ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this last example above, we see that the parabola hits the tip of the ball again" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### II.2 Geometric intersection between the data misfit and the $\\ell_2$ ball\n", "\n", "We apply the same approach to the $\\ell_2$ ball and study when a parabola generated at a particular angle around the origin hits the $\\ell_2$ ball corresponding to the 'Ridge' penalty." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "\n", "for angle in anglevec:\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", " \n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", " \n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", " \n", " # adding some noise\n", " \n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", " \n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", "\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.2], colors='red', alpha = 0.1);\n", "\n", " \n", " \n", " \n", "l2ballfunction = np.sqrt(np.abs(xx)**2 + np.abs(yy)**2)\n", " \n", "plt.contour(xx, yy, l2ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "\n", "\n", "\n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.32], colors='red', alpha=0.1);\n", " \n", " \n", " if i==4:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.32], colors='red');\n", " tt0 = target_noisy\n", " i+=1\n", " \n", " \n", " \n", "l2ballfunction = np.sqrt(np.abs(xx)**2 + np.abs(yy)**2)\n", " \n", "plt.contour(xx, yy, l2ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "beta1 = np.linspace(-0.6, 0.6,100)\n", "beta0 = np.sqrt(abs((0.6)**2 -beta1**2))\n", "betaTest = np.hstack((beta1.reshape(-1,1), beta0.reshape(-1,1)))\n", "\n", "\n", "objective = np.sum((np.dot(XTildematrix,betaTest.T) - np.matmul(tt0.reshape(-1,1),np.ones((1, len(betaTest)))))**2, axis = 0 )\n", "\n", "minBeta1_1 = beta1[np.argmin(objective)]\n", "minBeta0_1 = np.sqrt(abs(0.6**2 - minBeta1_1**2))\n", "\n" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.5,1.5,100),np.linspace(-1.5,1.5,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.45], colors='red', alpha=0.1);\n", " if i==5:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.45], colors='red');\n", " tt1 = target_noisy\n", " i+=1\n", "\n", " \n", " \n", " \n", " \n", " \n", "l2ballfunction = np.sqrt(np.abs(xx)**2 + np.abs(yy)**2)\n", " \n", "plt.contour(xx, yy, l2ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "beta1 = np.linspace(-0.6, 0.6,100)\n", "beta0 = np.sqrt(abs((0.6)**2 -beta1**2))\n", "betaTest = np.hstack((beta1.reshape(-1,1), beta0.reshape(-1,1)))\n", "\n", "\n", "objective = np.sum((np.dot(XTildematrix,betaTest.T) - np.matmul(tt1.reshape(-1,1),np.ones((1, len(betaTest)))))**2, axis=0 )\n", "\n", "minBeta1_2 = beta1[np.argmin(objective)]\n", "minBeta0_2 = np.sqrt(abs(0.6**2 - minBeta1_2**2))\n", "\n" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#extending the parabolas \n", "\n", "# selecting the angles corresponding to zero coefficients \n", "\n", "\n", "\n", "# plotting the level lines \n", "\n", "import numpy as np\n", "\n", "\n", "x = np.linspace(0,1,10)\n", "\n", "XTildematrix = np.hstack((np.ones(np.shape(x.reshape(-1,1))), x.reshape(-1,1)))\n", "\n", "\n", "anglevec = np.linspace(0,2*np.pi,50)\n", "\n", "radius = 1\n", "\n", "\n", "i=0\n", "\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.7,1.7,100),np.linspace(-1.7,1.7,100))\n", "\n", "\n", "betaMat = np.hstack((xx.flatten().reshape(-1,1), yy.flatten().reshape(-1,1)))\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "i=0\n", "\n", "for angle in anglevec:\n", " \n", " \n", " if ((angle 2*np.pi - np.pi/8) ):\n", " \n", " beta0 = radius*np.cos(angle)\n", " beta1 = radius*np.sin(angle)\n", "\n", " beta = np.array([beta0, beta1], dtype=\"object\")\n", "\n", " target = np.dot(beta, np.array([1, x],dtype=\"object\"))\n", "\n", " # adding some noise\n", "\n", " noise = np.random.normal(0,.0,target.shape)\n", " target_noisy = target + noise\n", "\n", "\n", " costfun = np.sum((np.dot(betaMat,XTildematrix.T) - np.matmul(np.ones((len(xx.flatten()),1)),\n", " \n", " np.expand_dims(target_noisy, axis=1).T))**2, axis=1)\n", " \n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.68], colors='red', alpha=0.1);\n", " \n", " if i == 6:\n", " plt.contour(xx, yy, np.reshape(costfun,np.shape(xx)), [0.68], colors='red');\n", " tt2 = target_noisy\n", " i+=1\n", " \n", " \n", "l2ballfunction = np.sqrt(np.abs(xx)**2 + np.abs(yy)**2)\n", " \n", "plt.contour(xx, yy, l2ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "beta1 = np.linspace(-0.6, 0.6,100)\n", "beta0 = np.sqrt(abs((0.6)**2 -beta1**2))\n", "betaTest = np.hstack((beta1.reshape(-1,1), beta0.reshape(-1,1)))\n", "\n", "\n", "objective = np.sum((np.dot(XTildematrix,betaTest.T) - np.matmul(tt2.reshape(-1,1),np.ones((1, len(betaTest)))))**2, axis=0)\n", "\n", "minBeta1_3 = beta1[np.argmin(objective)]\n", "minBeta0_3 = np.sqrt(abs(0.6**2 - minBeta1_3**2))\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now plot each of the intersections on the circle to study which of the pairs $(\\beta_0, \\beta_1)$ will have a zero weight." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAYA0lEQVR4nO3de5BV1Zn+8e8DghcioNB4AeQyMYmIEU1LZJh4j0HFkBhNRHSMP1OUgjGOmfE6YypO/VIpU/ESJSImBC9RRyaKBEFEowVRURpFBdsLgyItZmwvAduI2PDOH6uJLXZDN+dw9jm9n09V1zln781Z72ntp3evvfZaigjMzKzj65R1AWZmVhoOfDOznHDgm5nlhAPfzCwnHPhmZjmxQ9YFbEnv3r1j4MCBWZdhZlYxFi9e/HZEVLW0r6wDf+DAgdTU1GRdhplZxZC0srV97tIxM8sJB76ZWU448M3McsKBb2aWEw58M7OccOCbmeWEA9/MLCcc+GZmOVGUwJc0VdJbkpa2sv8ISWskLWn6uqIY7ZqZWdsV607bacANwK1bOGZBRIwuUntmZtZORTnDj4j5wLvFeC8zM9s+StmHP0LSs5LmSNq/tYMkjZdUI6mmvr6+hOWZmXVspQr8p4EBEXEgcD0wo7UDI2JKRFRHRHVVVYsTvpmZ2TYoSeBHxNqIaGh6PhvoIql3Kdo2M7OkJIEvaU9Jano+vKndd0rRtpmZJUUZpSPpTuAIoLekOuAnQBeAiJgMnAycK6kR+BA4NSKiGG2bmVnbFCXwI2LsVvbfQBq2aWZmGfGdtmZmOeHANzPLCQe+mVlOOPDNzHLCgW9mlhMOfDOznHDgm5nlhAPfzCwnHPhmZjnhwDczywkHvplZTjjwzcxywoFvZpYTDnwzs5xw4JuZ5YQD38wsJxz4ZmY54cA3M8sJB76ZWU448M3McsKBb2aWEw58M7OccOCbmeVEUQJf0lRJb0la2sp+SfqVpOWSnpN0cDHaNTOztivWGf40YNQW9h8H7Nv0NR64sUjtmplZGxUl8CNiPvDuFg4ZA9wayUKgp6S9itG2mZm1Tan68PsCq5q9rmva9hmSxkuqkVRTX19fkuLMzPKgVIGvFrZFSwdGxJSIqI6I6qqqqu1clplZfpQq8OuA/s1e9wNWl6htMzOjdIE/E/jnptE6hwJrIuLNErVtZmbADsV4E0l3AkcAvSXVAT8BugBExGRgNnA8sBz4G3BWMdo1M7O2K0rgR8TYrewPYGIx2jIzs23jO23NzHLCgW9mlhMOfDOznHDgm5nlhAPfzCwnHPhmZjnhwDczywkHvplZTjjwzcxywoFvZpYTDnwzs5xw4JuZ5YQD38wsJxz4ZmY54cA3M8sJB76ZWU448M3McsKBb2aWE0VZ4tAsLzZsgMbG9HyHHaBz52zrMWsPB77ZZlavhiefhOefh9paWLkS6urg3Xfhgw8+feznPge77w79+8OAATBkCBxwAAwfDnvumU39Zq1x4FvuffABPPQQzJoFDz8Mr776yb6BA2HQIDjySOjVC3r0gK5d076PPoK1a+Htt2HVKnjsMbjjjk/+7ec/D8ccA6NHw1FHwc47l/RjmX2GA99yKQIeeQSmTYN77kmh3717CuYf/hBGjIChQ9MZfHusXZv+MnjiCZg/H267DSZPhl13hVNOge9/H/7pn0DaHp/KbMsUEVnX0Krq6uqoqanJugzrQD76CG69Fa67DpYtS2fs3/sefPe78LWvfXL2Xsz2Hn0U/uu/YPp0aGiAYcPgggvgtNOgS5fitmcmaXFEVLe0ryijdCSNkvSSpOWSLmlh/xGS1kha0vR1RTHaNWurxka4+WbYd18YPz4F7bRp8Je/wE03wdFHFz/sAXbcEb7xDZg6NbV1883w8cfpTP9LX0q/fDZsKH67Zi0pOPAldQYmAccBQ4Cxkoa0cOiCiBjW9HVloe2atdWCBXDwwSno+/aFBx+Ep5+GM8+EnXYqXR3dusEPfpC6fGbNgp49Uw2HHgpPPVW6Oiy/inGGPxxYHhErImI9cBcwpgjva1aQtWvh7LPhsMNgzRr4wx/g8cfh61/Ptg9dghNOgEWL0kXeN95IoX/eeZ8dBWRWTMUI/L7Aqmav65q2bW6EpGclzZG0f2tvJmm8pBpJNfX19UUoz/LoiSdSX/m0aXDxxWl45UknldfF0k6dYOxYePFFOP98mDQJvvIVWLw468qsoypG4Lf0I7T5leCngQERcSBwPTCjtTeLiCkRUR0R1VVVVUUoz/IkAq6/Pp3VR6SRMj//OeyyS9aVta57d7j22jQ0tKEBRo5Mff5mxVaMwK8D+jd73Q9Y3fyAiFgbEQ1Nz2cDXST1LkLbZn/X2AjnnJPOlo87Dp55JoVnpTj6aFiyJI0WOvtsuPBC2Lgx66qsIylG4C8C9pU0SFJX4FRgZvMDJO0ppT+mJQ1vavedIrRtBsC6dXDyyTBlClxyCcyYkS6KVprevWHOnHQvwDXXwBlnpFE9ZsVQ8I1XEdEo6TxgLtAZmBoRyySd07R/MnAycK6kRuBD4NQo5xsArKJ8+CGMGQPz5qXx9eefn3VFhdlhh/Q59toLLrssXcidPt1j9q1wvvHKKlpjI3znO/DHP8JvfwtnnZV1RcV1ww3pbP+009Jdu508v61txZZuvPLUClaxIlKf/cyZaYRLRwt7SEM1Gxrg0kuhT5/UzWO2rRz4VrGuuSad1f/7v8OECVlXs/1cfDG8+WYaybP//unmLbNt4T8QrSLNnw8XXZTG1v/0p1lXs31JcPXVcOyxMHFiumHLbFs48K3ivPcejBsHgwenG6vy0K/duXO6K3ePPVJ/fkND1hVZJcrBj4p1NBMnponI7rgjTTucF716pQu3//M/8OMfZ12NVSIHvlWUuXPhzjvhP/4Dqlsch9CxHX54CvspU9K8QGbt4WGZVjE++igtHwhpxskdd8y2nqw0NMB++6WbtBYtSuP2zTbZ7vPhm5XCpEnwyivwq1/lN+whrcJ19dVpGoZp07KuxiqJz/CtIjQ0pLVlhw1Ld9TmXURahnH16vRLMM+/AO3TfIZvFe+mm9Ji4f/5n1lXUh6k9L1YtQpuueWT7eV8AmfZc+Bb2WtsTN04RxyRFgqx5OXev6bvF//CtdcGESnsr1p0Fb9e8uusS7My5cC3sjdzJrz+elr425KIoOHj9+Gw66itFfPmpbC/vfZ23l+/1mf61iIHvpW93/0urUU7enTWlZQPSVx0yEWce/SrdO62hu/+ZDa3197O6fuN46K330OP/jzrEq0MOfCtrNXXp/nhx41Ld5vaJwRctusAenx1DmufPooNH+6Swv6pybBuTbqya9aMA9/K2qxZsGEDnHpq1pWUnwCu6r0bPb76ALF+ZxqWjuSq5XcRw88hvvGz8lrA18qCb9mwsjZrFvTrl4Zj2ic2XaC9vfb3fOXLJ/LXnd6jatEIbj9kHtFrN9bNeoEeO3flX77+haxLtTLiM3wrWxs2wMMPw6hRPlndnCR27bor4740jgvffYtj/+FP/KV2JOP+upa1zz3KtMdfY+26j33x1j7FgW9la9kyWLMGDjss60rK04QDz+Xid95jxFvT6bf/Ola/vze8MpqfvfEEd+1zH1ecsB/yb0prxoFvZWvhwvQ4cmS2dZQtCe3cE756LuMuHgvAL18/m6mNo/jqfoNQHuaNtnZxH76VreeeS/PGDBqUdSVl7MhLiY0buWfGi9DpS6yv786VjWewqmEQV0T4DN8+xYFvZWvZsrSknzOrdRHBlffXcttTr1HVbzAj+vwDB4/8iN899hoAV4we4tC3v3PgW9laudJTKWyNJLrv1IWzRg6kZtmOrFwpZoweAkD3nbo47O1THPhWliKgrg7698+6kvL3L1//AhHBxDni8cfTLwGf2VtLinJVR9IoSS9JWi7pkhb2S9KvmvY/J+ngYrRrHVdDA3z8MVRVZV1JZZBE795pvd+NG3HYW4sKDnxJnYFJwHHAEGCspCGbHXYcsG/T13jgxkLbtY5tzZr02KNHtnVUkh490l9GXuDcWlOMM/zhwPKIWBER64G7gDGbHTMGuDWShUBPSXsVoW3roNavT49e2KPtNn2vPvoo2zqsfBUj8PsCq5q9rmva1t5jAJA0XlKNpJr6+voilGeWD+7Fsa0pRuC39L/Z5vdzt+WYtDFiSkRUR0R1lTtwc2vTwtybzvRt6zZ9r7youbWmGIFfBzQfS9EPWL0Nx5j9Xffu6XHt2mzrqCSbrnts+t6Zba4Ygb8I2FfSIEldgVOBmZsdMxP456bROocCayLizSK0bR1U9+7QqRO8807WlVSOd99N3zevG2CtKfiPv4holHQeMBfoDEyNiGWSzmnaPxmYDRwPLAf+BpxVaLvWsXXqBHvvncbiW9usWpWmkjZrTVF6+yJiNinUm2+b3Ox5ABOL0Zblx4AB8NprWVdROVauhH32yboKK2eeTs/K1n77pfl0PKX71m3YALW1MGTzO2DMmnHgW9k64IDUh/+mr/Zs1SuvwLp1MHRo1pVYOXPgW9kaPjw9PvFEtnVUgk3fo03fM7OWOPCtbB18MOy8MyxYkHUl5W/BAth999QNZtYaB76Vra5d4WtfgwceyLqS8hYBc+fCEUek0U1mrfH/HlbWRo+Gl15KfdTWsiVLYPVqOPHErCuxcufAt7L2zW+mx+nTs62jnN19d7rZ6vjjs67Eyp0D38ragAGpW+fWWz08syUbNsDtt8OoUdCnT9bVWLlz4FvZO/PM1K3ji7ef9cAD6W7kM8/MuhKrBA58K3tjx6YRKNddl3Ul5efaa6FvX/jWt7KuxCqBA9/K3i67wDnnwIwZ8PLLWVdTPp55Bh56CCZOhC5dsq7GKoED3yrCj34EO+0EP/1p1pWUjyuugJ49YcKErCuxSuHAt4rQpw+cfz7ceSc8/XTW1WRvwQKYNQsuusjr/lrbKcp46EN1dXXU1NRkXYaVib/+Fb74RRg8GB57LL83GTU2pruQ16yBF16Abt2yrsjKiaTFEVHd0r6c/shYJerZE666ChYuhKlTs64mO9dfD88/ny7YOuytPRz4VlHOOAMOPxwuvBBefTXrakqvthYuvxxOOMEjc6z9HPhWUTp1gmnTQILTT0/dG3mxbh2cdlo6q7/55vQ9MGsPB75VnIEDYfJkePzxdNEyDyLghz9M8+ZMnQp77ZV1RVaJirLEoVmpjR2b5oC/5pq0UMpZHXyV5Ouvh9/8Bi67zJOk2bZz4FvF+uUv0yiV8eNhjz067uRh06fDBRfAmDFw5ZVZV2OVzF06VrG6dIF77oEvfxm+8x149NGsKyq+OXNg3DgYORLuuCPNimm2rRz4VtG6d08TiA0enM7wZ8/OuqLi+e//Tmf1BxwAf/xjmmLCrBAOfKt4VVXwyCNpeb8xY+CWW7KuqHA33gjf+x4cckiaL6dnz6wrso6goMCXtLukeZJeaXrcrZXjXpP0vKQlknzrrBVdnz4p9A87DL7/ffjXf63MIZvr16e5cSZMSH+xzJsHu7X4U2XWfoWe4V8CPBwR+wIPN71uzZERMay1W37NCrWpe2fChHRB96ijYOXKrKtqu+XL02IvN96YfmHNmOFuHCuuQgN/DLDpD+hbgG8V+H5mBenSBSZNSitkPfMMHHhg6uIp4ymj2LgRbroJhg1L0z9Pnw6/+IUv0FrxFRr4e0TEmwBNj60tshbAg5IWSxq/pTeUNF5SjaSa+vr6AsuzvDrjDHj2WRg6NHXxHH44PPdc1lV9Vk0NjBiR5vs/9NBU48knZ12VdVRbDXxJD0la2sLXmHa0MzIiDgaOAyZKOqy1AyNiSkRUR0R1VVVVO5ow+7TBg2H+/DQNwQsvwEEHpRu0VqzIurK0ZONpp6WLsitXwm23pf76/v2zrsw6sq0GfkQcExFDW/i6D/hfSXsBND2+1cp7rG56fAu4FxhevI9g1rpOneAHP0gBe8EFaT79L3wh3an75JOlrSUC/vzndAY/ZAjcdx9cemmq7fTTPTeObX+FdunMBDYtn3wmcN/mB0jqJmnXTc+BY4GlBbZr1i69eqULuStWpNWzZs9OXSjDhsHVV8Prr2+/tleuTNM6H3BAuij7pz/Bv/1bmu3zZz/zAiZWOgUtgCKpF3A3sA/wOnBKRLwraW/gNxFxvKTBpLN6SFM53BER/78t7+8FUGx7ef/91I0ybRosWpS2HXQQjBqVQnnEiG0f+/7OO2men/nz06ih559P2//xH9P1hE0zXpptD1taAMUrXlnuvfwy3Htvupt14ULYsCFt32cf2H//NDtn//7pr4QePWDHHdP+detg7Vp4+21YtSqdsS9dCm+8kfZ36ZJC/sQT0w1hn/98Jh/PcsaBb9ZGH3yQ+vaffDKdmb/wQuruee+9Lf+7Xr0++QUxdGjqLjrkEI+jt9LbUuB7tkyzZrp1SzdsHXXUp7d/8EEK/TVr4OOP07auXdMZ/267OditMjjwzdqgW7f01a9f1pWYbTtPnmZmlhMOfDOznHDgm5nlhAPfzCwnHPhmZjnhwDczywkHvplZTjjwzcxywoFvZpYTDnwzs5xw4JuZ5YQD38wsJxz4ZmY54cA3M8sJB76ZWU448M3McsKBb2aWEw58M7OccOCbmeWEA9/MLCcKCnxJp0haJmmjpOotHDdK0kuSlku6pJA2zcxs2xR6hr8UOAmY39oBkjoDk4DjgCHAWElDCmzXzMzaaYdC/nFE1AJI2tJhw4HlEbGi6di7gDHAC4W0bWZm7VOKPvy+wKpmr+uatrVI0nhJNZJq6uvrt3txZmZ5sdUzfEkPAXu2sOvyiLivDW20dPofrR0cEVOAKQDV1dWtHmdmZu2z1cCPiGMKbKMO6N/sdT9gdYHvaWZm7VSKLp1FwL6SBknqCpwKzCxBu2Zm1kyhwzK/LakOGAHcL2lu0/a9Jc0GiIhG4DxgLlAL3B0Rywor28zM2qvQUTr3Ave2sH01cHyz17OB2YW0ZWZmhfGdtmZmOeHANzPLCQe+mVlOOPDNzHLCgW9mlhMOfDOznHDgm5nlhAPfzCwnHPhmZjnhwDczywkHvplZTjjwzcxywoFvZpYTDnwzs5xw4JuZ5YQD38wsJxz4ZmY54cA3M8sJB76ZWU448M3McsKBb2aWEw58M7OccOCbmeVEQYEv6RRJyyRtlFS9heNek/S8pCWSagpp08zMts0OBf77pcBJwE1tOPbIiHi7wPbMzGwbFRT4EVELIKk41ZiZ2XZTqj78AB6UtFjS+C0dKGm8pBpJNfX19SUqz8ys49vqGb6kh4A9W9h1eUTc18Z2RkbEakl9gHmSXoyI+S0dGBFTgCkA1dXV0cb3NzOzrdhq4EfEMYU2EhGrmx7fknQvMBxoMfDNzGz72O5dOpK6Sdp103PgWNLFXjMzK6FCh2V+W1IdMAK4X9Lcpu17S5rddNgewJ8lPQs8BdwfEQ8U0q6ZmbVfoaN07gXubWH7auD4pucrgAMLacfMzArnO23NzHLCgW9mlhMOfDOznHDgm5nlhAPfzCwnHPhmZjnhwDczywlFlO90NZLqgZVZ19GK3kCep3v25/fn9+cvTwMioqqlHWUd+OVMUk1EtLroS0fnz+/P789feZ/fXTpmZjnhwDczywkH/rabknUBGfPnzzd//grkPnwzs5zwGb6ZWU448M3McsKBXwBJv5D0oqTnJN0rqWfWNZWSpFMkLZO0UVLFDVHbFpJGSXpJ0nJJl2RdT6lJmirpLUm5W7VOUn9Jj0iqbfr//kdZ19ReDvzCzAOGRsSXgZeBSzOup9SWAieRk/WJJXUGJgHHAUOAsZKGZFtVyU0DRmVdREYagR9HxH7AocDESvvv78AvQEQ8GBGNTS8XAv2yrKfUIqI2Il7Kuo4SGg4sj4gVEbEeuAsYk3FNJRUR84F3s64jCxHxZkQ83fT8faAW6JttVe3jwC+e/wfMyboI2676Aquava6jwn7grTgkDQQOAp7MuJR2KWhN2zyQ9BCwZwu7Lo+I+5qOuZz0597vS1lbKbTl8+eIWtjmcc05I+lzwB+ACyJibdb1tIcDfysi4pgt7Zd0JjAaODo64E0NW/v8OVMH9G/2uh+wOqNaLAOSupDC/vcRcU/W9bSXu3QKIGkUcDHwzYj4W9b12Ha3CNhX0iBJXYFTgZkZ12QlIknAb4HaiLg663q2hQO/MDcAuwLzJC2RNDnrgkpJ0rcl1QEjgPslzc26pu2p6QL9ecBc0gW7uyNiWbZVlZakO4EngC9KqpN0dtY1ldBI4AzgqKaf9yWSjs+6qPbw1ApmZjnhM3wzs5xw4JuZ5YQD38wsJxz4ZmY54cA3M8sJB76ZWU448M3McuL/AKXt0QMfVWfDAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(minBeta1_1, minBeta0_1, marker='x')\n", "plt.scatter(minBeta1_2, minBeta0_2, marker='x')\n", "plt.scatter(minBeta1_3, minBeta0_3, marker='x')\n", "plt.contour(xx, yy, l2ballfunction, [0.6], colors='blue');\n", "plt.axis(\"equal\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAD8CAYAAACYebj1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAbn0lEQVR4nO3de3hU5bn38e+dhIiCSIWACihYKCdBiynqtoKoWLAH6qEaVKTuXSgWajfdnqqtvu/rtvVYVIq60e1bD7UUW7G0RdANinsXDwSLHKRgiigRCwEsViwEyL3/WJMwhglZyUyy1sz8PteVazJrnme4HxcXP591eJa5OyIiIgAFURcgIiLxoVAQEZE6CgUREamjUBARkToKBRERqaNQEBGROqFCwcxGmdlaM6swsxtSfD7GzFaY2XIzKzezL4btKyIi8WGN3adgZoXAOmAkUAksBca6+1tJbdoDO93dzWwwMNvd+4XpKyIi8RFmpjAUqHD39e5eDcwCxiQ3cPePfX+6tAM8bF8REYmPohBtugEbk95XAqfUb2Rm5wM/AboAX25K30T/icBEgHbt2p3cr1+/EKVJrvv4Y1i3Dg49FD73OSgsjLoikXhatmzZVncvSfd7woSCpdh2wDEnd58DzDGzYcCtwDlh+yb6zwRmApSWlnp5eXmI0iQfzJsHY8ZAx47w3HPQtm3UFYnEj5m9m4nvCXP4qBLokfS+O7Cpocbu/jLwWTPr3NS+Iqmcdx489hgsXgyXXAJ790ZdkUjuChMKS4E+ZtbLzIqBMmBucgMz621mlvh9CFAMbAvTVySMSy+F6dNh7lz41regpibqikRyU6OHj9x9r5lNARYAhcCj7r7azCYlPn8IuBC4wsz2AP8ALkmceE7Zt4XGIjlu8mTYvh1uvhmOPBLuuQcs1QFKEWm2Ri9JjYLOKUhD3GHqVLjvPrjtNrjxxqgrEokHM1vm7qXpfk+YE80isWEGP/0pbNsGN90EffvChRdGXZVI7tAyF5J1CgrgkUfg1FNh/HhYsSLqikRyh0JBstIhh8Azz8ARRwSXq27dGnVFIrlBoSBZ6+ijYc4c+OADuPhi2LMn6opEsp9CQbLa0KEwcya8+CJcc03U1YhkP51olqx3xRWwfDlMmwYnnQRXXhl1RSLZSzMFyQl33gnnnAOTJsGrr0ZdjUj2UihITigqglmzoHt3uOAC2KTFVESaRaEgOaNTJ/jtb+Gjj+D882HXrqgrEsk+CgXJKSecAE88Aa+/HhxKiuEN+yKxplCQnHP++XDLLcHKqvfdF3U1ItlFoSA56eab4etfDy5TfemlqKsRyR4KBclJBQXBTKF37+AZDO+/H3VFItlBoSA5q0OHYCmMnTuDO56rq6OuSCT+FAqS0wYMgP/8T1iyRHc8i4ShUJCcd8klwTMYpk+Hp56KuhqReFMoSF644w744hdhwgRYtSrqakTiS6EgeaFNG5g9OzjPcMEFsGNH1BWJxJNCQfLG0UcHwbB+PXzzm7qxTSQVhYLklTPOgLvvhmefDRbRE5FPUyhI3vne94KTzzfeCAsXRl2NSLwoFCTvmAXPeO7bF8rKYOPGqCsSiQ+FguSl9u2DG9t27YJvfAN27466IpF4UChI3urXD37+c3jtteA+BhFRKEieu/BCuPZaePDBYMltkXynUJC89+MfB1clTZkC770XdTUi0VIoSN4rKgoOI+3bB9/6lu5fkPwWKhTMbJSZrTWzCjO7IcXnl5nZisTPEjM7MemzDWa20syWm1l5JosXyZTjjw/uX3jhBfiP/4i6GpHoNBoKZlYIzABGAwOAsWY2oF6zd4Dh7j4YuBWYWe/zEe5+kruXZqBmkRbx7W/DOecEq6m+807U1YhEI8xMYShQ4e7r3b0amAWMSW7g7kvc/cPE21eB7pktU6TlmQXLbBcUwJVXQk1N1BWJtL4wodANSL69pzKxrSH/AjyX9N6B581smZlNbHqJIq3n2GNh2jRYvBhmzIi6GpHWFyYULMW2lKfizGwEQShcn7T5dHcfQnD4abKZDWug70QzKzez8qqqqhBlibSMf/5nGD0arr8e3n476mpEWleYUKgEeiS97w5sqt/IzAYDjwBj3H1b7XZ335R43QLMITgcdQB3n+nupe5eWlJSEn4EIhlmBg8/DIccEqymum9f1BWJtJ4wobAU6GNmvcysGCgD5iY3MLNjgWeAce6+Lml7OzM7vPZ34FxAjziR2OvWDe6/P3iM5733Rl2NSOtpNBTcfS8wBVgArAFmu/tqM5tkZpMSzW4GOgEP1Lv0tCvwP2b2JvA68Ad3n5/xUYi0gMsvhzFj4KabYM2aqKsRaR3mMbxTp7S01MvLdUuDRO+vf4WBA6F3b/jjH4Mb3UTiyMyWZeKyf93RLHIQRx0FDzwAr78Od90VdTUiLU+hINKIiy+Giy6CW26BlSujrkakZSkURBphFswWOnaE8eNhz56oKxJpOQoFkRBKSuChh+BPfwpWVRXJVQoFkZAuuAAuvRT+/d+DcBDJRQoFkSaYPh06dw4OI+kRnpKLFAoiTXDkkcHdzitXwq23Rl2NSOYpFESa6CtfCZa/uP12WLo06mpEMkuhINIM06YF9zCMHw+7dkVdjUjmKBREmqFjx+DZC2vWwM03R12NSOYoFESa6UtfggkTgsd4LlkSdTUimaFQEEnDPfcED+b55jfhk0+irkYkfQoFkTQcfjg8+mjwMJ4bb4y6GpH0KRRE0nTWWTB5Mtx3H/z3f0ddjUh6FAoiGXDHHcFhpKuv1pPaJLspFEQyoF274L6F5cvhsceirkak+RQKIhlSVgannhqcW/j736OuRqR5FAoiGWIWPM958+Zg1iCSjRQKIhl0yilw2WXBparvvht1NSJNp1AQybCf/AQKCuD666OuRKTpFAoiGdajB1x7LfzqV7rTWbKPQkGkBXT7yi/o3HU3U6dCTU3qNos3Luax1bpUSeKlKOoCRHLNY6sfY/pbd3PY19by+sP/j6eegssv/3SbxRsXM/WlqeypCR74PH7g+AgqFTmQZgoiGdazQ0/aFLTh8NOe5dCeb/H963Z9al2k5EBoU9CGnh16RlarSH0KBZEMG95jONPOnEZxURFHjb2Dqg/aMuVHG4ADA2HamdMY3mN4tAWLJNHhI5EWUBsMU5lKhy8s4LGfDaPT8HtZuONxBYLEmmYKIi2kNhi6l03Hawp55M5eCgSJPYWCSAsa3mM4ZaedQqdzn+BvfxzDJ+sHcn7v8xUIEluhQsHMRpnZWjOrMLMbUnx+mZmtSPwsMbMTw/YVyWWLNy5mTsUcSr76MIUdtvHXX17HM2/PYfHGxVGXJpJSo6FgZoXADGA0MAAYa2YD6jV7Bxju7oOBW4GZTegrkpOSTyq3bVfNl696hU/eHsK210Yw9aWpCgaJpTAzhaFAhbuvd/dqYBYwJrmBuy9x9w8Tb18FuoftK5KLUl1l9MxtX+Gz/T9m8+zvs3uXKRgklsKEQjdgY9L7ysS2hvwL8FxT+5rZRDMrN7PyqqqqEGWJxFNDl50WFsLMn7Wnems3PnxhPHtq9igYJHbChIKl2OYpG5qNIAiF2qXAQvd195nuXurupSUlJSHKEomnDR9taPAqo7POgjFj4G/zvgMfHcWemj1s+GhDdMWK1BPmPoVKoEfS++7ApvqNzGww8Agw2t23NaWvSC6pXbKiZ4eeKa8yuusu+MOAInq99hgX/uAFLXEhsRJmprAU6GNmvcysGCgD5iY3MLNjgWeAce6+ril9RXLR+IHjG7zstE8f+M534A+/PIYvmAJB4qXRUHD3vcAUYAGwBpjt7qvNbJKZTUo0uxnoBDxgZsvNrPxgfVtgHCJZ5Uc/gvbt9cwFiR9zT3mIP1KlpaVeXl4edRkiLerOO4NQWLQIRoyIuhrJdma2zN1L0/0e3dEsEpGrr4Zjj4Vrrmn4mQsirU2hIBKRtm3hxz+GN96AWbOirkYkoFAQidDYsXDCCcFznWN4JFfykEJBJEIFBcHznFetgvnzo65GRKEgErmyMujWLbh/QSRqCgWRiBUXw9Sp8OKLsHRp1NVIvlMoiMTAhAlwxBGaLUj0FAoiMdChA0yaBL/5DfzlL1FXI/lMoSASE1dfDUVF8NOfRl2J5DOFgkhMHHMMjBsHjz4KWj1eoqJQEImRfzvrSXbtghkzDtJo7XxYMr3VapL8olAQiYsl0+m/bjJf6/ccP7uvmp07U7RZOx9mj4Pnf6hgkBahUBCJi059oLCY606bxra/FfP/b3/r05/XBsK+aigsDtqLZJhCQSQu+o6Ci5/g9F5/4rTur3HPz9qxd/WC4LP6gXDxE0F7kQxTKIjESSIYrjtjBhv+dhy/+b+/ht9PVSBIq9HzFERiqGbNfPqf0Zv2xR9TPmE4ZigQ5KD0PAWRHFbQfxTXjF3GGx+cxKJ3Eo/1/PzlCgRpcQoFkThaO59xn/k3urbbzF1Lrg62/enJ4NyCSAtSKIjETeKkctuCv/O90x5mwV/O4c2qzwfnFGaPUzBIi1IoiMRJvauMJt12Ku3bw10bnwrOKSgYpIUpFETiIsVlp58Zeg4TJsCsecfw7ulPKxikxSkUROJi29spLzv9138FM7j3d2cG22uDYdvbkZYruUmXpIrEyZLpwZ3K9a4yuuIKeOYZeO89OLJqfhAI//TdiIqUONIlqSK56J++m/Ky02uugZ074cEHCT5XIEgLUSiIZIHBg2HUKLj/fti1K+pqJJcpFESyxHXXwZYt8PjjUVciuUyhIJIlzjwTTj4Z7rkHYngqUHJEqFAws1FmttbMKszshhSf9zOzV8xst5ldU++zDWa20syWm5nOHos0kxlMngzr1sGrr0ZdjeSqRkPBzAqBGcBoYAAw1swG1Gu2HbgauLuBrxnh7idl4sy4SD678EJo2xaeeCLqSiRXhZkpDAUq3H29u1cDs4AxyQ3cfYu7LwX2tECNIpLQoQN8/evwq19BdXXU1UguChMK3YCNSe8rE9vCcuB5M1tmZhMbamRmE82s3MzKq/TUcpEGXX45bN8Ozz0XdSWSi8KEgqXY1pTTXKe7+xCCw0+TzWxYqkbuPtPdS929tKSkpAlfL5Jfzj0XSkp0CElaRphQqAR6JL3vDmwK+we4+6bE6xZgDsHhKBFppjZtYOxY+N3v4MMPo65Gck2YUFgK9DGzXmZWDJQBc8N8uZm1M7PDa38HzgVWNbdYEQmMGxecU3j66agrkVzTaCi4+15gCrAAWAPMdvfVZjbJzCYBmNlRZlYJfB/4oZlVmlkHoCvwP2b2JvA68Ad319KOImk6+WTo1w+efDLqSiTXFIVp5O7zgHn1tj2U9PtfCQ4r1fcRcGI6BYrIgcyC2cJNN8GGDdCzZ9QVSa7QHc0iWerSS4NXzRYkkxQKIlmqZ08YNiy4CknLXkimKBREsti4ccGyF0uXRl2J5AqFgkgWu+giOOQQHUKSzFEoiGSxjh3ha1+DWbNgjxaZkQxQKIhkuXHjoKoKFiyIuhLJBQoFkSz3pS9Bp05a9kIyQ6EgkuWKi6GsDH77W9ixI+pqJNspFERywLhxsHs3/PrXUVci2U6hIJIDhg6FPn10FZKkT6EgkuUefnk9i/68mXHj4KWX4L33DmyzcM1mHn55favXJtkn1NpHIhJPD7+8ntvmraG4sIAfDf8C0Jlf/AJ+8IP9bRau2cxVT75B9b4aACYMOz6aYiUraKYgksWOL2lHcWEB1ftquHXxUgYOqf7UshfJgVBcWMDxJe2iLVhiT6EgksXO7t+VBy8fUhcMVV3WsWYNvPHGgYHw4OVDOLt/16hLlphTKIhkueRgKO77PlZYw1X/Z6sCQZpFoSCSA2qD4dB2NRz62c0se7E9u/cqEKTpFAoiOeLs/l35Rml3Du29mZqdbdmzpQPfKO2uQJAmUSiI5IiFazbzdHklbXtuBeAfGzrzdHklC9dsjrgyySYKBZEckHxS+bCOe+jcYxfV75ZQva+Gq558Q8EgoSkURLJcqquMLrugLXs3daLIixQM0iQKBZEs1tBlpyNHQvVu49t9h9ZdrqpgkDAUCiJZbH3VzpSXnQ4bBkVFsG3dZz51H8P6qp0RVyxxp2UuRLJY7ZIVx5e0+9RVRocfDqedBi+8ALffHlyuur5qp5a4kEYpFESyXEP/0I8cCbfcAlu3Bpernt2/lQuTrKTDRyI5auTIYA2kRYuirkSyiUJBJEeVlsIRRwSHkETCUiiI5KiiIhgxIgiF2lVTRRoTKhTMbJSZrTWzCjO7IcXn/czsFTPbbWbXNKWviLSckSPh3XehoiLqSiRbNBoKZlYIzABGAwOAsWY2oF6z7cDVwN3N6CsiLWTkyOBVh5AkrDAzhaFAhbuvd/dqYBYwJrmBu29x96XAnqb2FZGW07s3HHcc/Nd/RV2JZIswodAN2Jj0vjKxLYzQfc1sopmVm1l5VVVVyK8XkYMxC2YLixbB3r1RVyPZIEwoWIptYU9bhe7r7jPdvdTdS0tKSkJ+vYg0ZuRI2LEDysujrkSyQZhQqAR6JL3vDmwK+f3p9BWRDDjrrGDGoPMKEkaYUFgK9DGzXmZWDJQBc0N+fzp9RSQDOneGz39eoSDhNBoK7r4XmAIsANYAs919tZlNMrNJAGZ2lJlVAt8HfmhmlWbWoaG+LTUYEUlt5Eh45RX4+9+jrkTizjyGd7WUlpZ6uQ6AimTMwoVwzjnw+9/Dl78cdTXSEsxsmbuXpvs9uqNZJA+cfjq0batDSNI4hYJIHmjbFs44Q6EgjVMoiOSJkSPhrbfg/fejrkTiTKEgkidql7zQ3c1yMAoFkTwxeDCUlMCLL0ZdicSZQkEkTxQUwJAh8OabUVcicaZQEMkjgwfDmjVaB0kaplAQySODBsHu3fD221FXInGlUBDJI4MGBa8rVkRbh8SXQkEkj/TvD4WFsHJl1JVIXCkURPLIIYdA376aKUjDFAoieWbwYM0UpGEKBZE8M2gQbNgAH30UdSUSRwoFkTwzeHDwumpVtHVIPCkURPKMrkCSg1EoiOSZY4+FDh10XkFSUyiI5BmzYLagmYKkolAQyUO1VyDF8MGLEjGFgkgeGjQIduyAjRujrkTiRqEgkodqr0DSeQWpT6EgkodOOCF41XkFqU+hIJKHjjgCjjtOMwU5kEJBJE/pCiRJRaEgkqcGD4a1a4PnK4jUUiiI5KlBg4InsP35z1FXInGiUBDJU7oCSVJRKIjkqT59oLhY5xXk00KFgpmNMrO1ZlZhZjek+NzM7P7E5yvMbEjSZxvMbKWZLTez8kwWLyLN16ZN8CQ2zRQkWVFjDcysEJgBjAQqgaVmNtfd30pqNhrok/g5BXgw8VprhLtvzVjVIpIRgwfDwoVRVyFxEmamMBSocPf17l4NzALG1GszBnjcA68CHc3s6AzXKiIZNnAgbNqkB+7IfmFCoRuQvEJKZWJb2DYOPG9my8xsYnMLFZHMO+aY4HXz5mjrkPgIEwqWYlv9tRUP1uZ0dx9CcIhpspkNS/mHmE00s3IzK6+qqgpRloikq2vX4FWhILXChEIl0CPpfXdgU9g27l77ugWYQ3A46gDuPtPdS929tKSkJFz1IpIWhYLUFyYUlgJ9zKyXmRUDZcDcem3mAlckrkI6Fdjh7h+YWTszOxzAzNoB5wJ6MqxITHTpErxu2RJtHRIfjV595O57zWwKsAAoBB5199VmNinx+UPAPOA8oAL4BLgy0b0rMMfMav+sp9x9fsZHISLNUjsp10xBajUaCgDuPo/gH/7kbQ8l/e7A5BT91gMnplmjiLSQoiLo1EkzBdlPdzSL5LmuXTVTkP0UCiJ5TqEgyRQKInmuSxcdPpL9FAoieU4zBUmmUBDJc126BMtc7NoVdSUSBwoFkTxXewObDiEJKBRE8p7uapZkCgWRPKe7miWZQkEkz2mmIMkUCiJ5TjMFSaZQEMlzhx0G7dtrpiABhYKI6F4FqaNQEBHd1Sx1FAoiopmC1FEoiIhmClJHoSAidO0KW7fCvn1RVyJRUyiICF27Qk1NEAyS3xQKIqJ7FaSOQkFE6NQpeN2+Pdo6JHoKBRGhIPEvgXu0dUj0FAoiIlJHoSAiInUUCiIiUkehICIidRQKIiJSR6EgIiJ1FAoiIlJHoSAiInVChYKZjTKztWZWYWY3pPjczOz+xOcrzGxI2L4iIhIfjYaCmRUCM4DRwABgrJkNqNdsNNAn8TMReLAJfUVEJCbCzBSGAhXuvt7dq4FZwJh6bcYAj3vgVaCjmR0dsq+IiMREUYg23YCNSe8rgVNCtOkWsi8AZjaRYJYBsNvMVoWoLRt1BnJ5gWKNL4uNGJHb4yO391/fTHxJmFCwFNvqL5vVUJswfYON7jOBmQBmVu7upSFqyzq5PDbQ+LKdxpe9zKw8E98TJhQqgR5J77sDm0K2KQ7RV0REYiLMOYWlQB8z62VmxUAZMLdem7nAFYmrkE4Fdrj7ByH7iohITDQ6U3D3vWY2BVgAFAKPuvtqM5uU+PwhYB5wHlABfAJcebC+Ieqa2ZzBZIlcHhtofNlO48teGRmbuZ6qISIiCbqjWURE6igURESkTquGQtglL8zsC2a2z8wuamrfKKU5vg1mttLMlmfq0rJMC7HcyZlmtiMxhuVmdnPYvlFLc2xZv+8Sbc5MjGG1mS1uSt+opTm+rN9/ZnZt0t/NVYl/X44M0/cA7t4qPwQnmv8CHE9wqeqbwIAG2i0iOHl9UVP6RvmTzvgS2zcAnaMeRzrjA84Eft/c/zbZOLYc2ncdgbeAYxPvu2TDvkt3fLmy/+q1/yqwqLn7rzVnCmGXvPgu8BtgSzP6Rimd8WWDdPZB3Pdf3OtLV5jxXQo84+7vAbj7lib0jVo648sGTd0HY4FfNrNvq4ZCQ0th1DGzbsD5wENN7RsD6YwPgju9nzezZYklP+Im7D44zczeNLPnzGxgE/tGJZ2xQW7su88BnzGzlxLjuKIJfaOWzvggN/YfAGZ2GDCK4H88m9S3Vpg7mjMlzJIX9wLXu/s+s081D71cRoTSGR/A6e6+ycy6AC+Y2Z/d/eUWqLO5wozvDeA4d//YzM4DniVYOTfu+y+dsUFu7Lsi4GTgbOBQ4BUzezVk36g1e3zuvo7c2H+1vgr80d23N6Mv0LqhEGa5jFJgVuIfzM7AeWa2N2TfqDV7fO7+rLtvgmBaa2ZzCKZ9cfqL2ej43P2jpN/nmdkDZtY5TN+INXts7r41F/Zdos1Wd98J7DSzl4ETQ/aNWjrjW5cj+69WGfsPHTW1b6AVT5YUAeuBXuw/4THwIO1/zv4TzU3qG8VPmuNrBxye9PsSYFTUY2rq+ICj2H9D5FDgPYL/U4n1/ktzbLmy7/oDCxNtDwNWASfEfd9lYHw5sf8S7Y4AtgPtmto3+afVZgoebrmMJvVtjbrDSmd8QFdgTmIGUQQ85e7zW7rmpgg5vouAqxKzu38AZR78zYz1/ktnbGaWE/vO3deY2XxgBVADPOLuqwDivO8gvfGZ2fHkwP5LND0feN6D2dBB+x7sz9MyFyIiUkd3NIuISB2FgoiI1FEoiIhIHYWCiIjUUSiIiEgdhYKIiNRRKIiISJ3/BfNNDFOKy1pUAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(minBeta1_1, minBeta0_1,marker='x', s= 120,linewidths=2.5)\n", "plt.scatter(minBeta1_2, minBeta0_2,marker='x', s= 120,linewidths=2.5)\n", "plt.scatter(minBeta1_3, minBeta0_3,marker='x', s= 120,linewidths=2.5)\n", "\n", "xx, yy = np.meshgrid(np.linspace(-1.7,1.7,100),np.linspace(-1.7,1.7,100))\n", "\n", "l2ballfunction = np.sqrt(np.abs(xx)**2 + np.abs(yy)**2)\n", "\n", "plt.contour(xx, yy, l2ballfunction, [0.6], colors='blue');\n", "plt.xlim((0.4,0.7))\n", "plt.ylim((0,0.3))\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, you see that because of the 'smooth' structure of the $\\ell_2$ norm (vs the $\\ell_1$ which is much more spiky near the axes), a small change in the angle of the ellipsoid, leads to a small change in the intersection between the circle and the parabola, and hence to a small displacement of the solution along the circle. Even the first parabola was intersecting the circle on the axis, the next one already has a distinct intersection." ] } ], "metadata": { "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }