{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Advanced section 2 - Regularization\n", "\n", "This notebooks shows, in code, the effects of the regularization methods. We also show the instability that can arise in OLS." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/vnd.plotly.v1+html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Imports\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D as a3d\n", "\n", "from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot\n", "from plotly.plotly import plot, iplot\n", "import plotly.graph_objs as go\n", "init_notebook_mode(connected=True)\n", "\n", "from copy import deepcopy\n", "\n", "%matplotlib inline\n", "%matplotlib notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create regression problem\n", "\n", "To exemplify the estimators and their behavior on different types of data, we create a basic 2D regression, as well as a 2d regression with highly colinear predictors. Let's start with a normal regression with random predictor values:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "## Global variables for plots\n", "\n", "# True betas:\n", "b_true = np.array([3,7]).reshape((2,1))\n", "\n", "# Samples and Y noise\n", "N=100\n", "sigma = 5\n", "\n", "# linspaces\n", "lsp = np.linspace(-1.5,1.5,20)\n", "lsp_x, lsp_y = np.meshgrid(lsp,lsp)\n", "lsp_mat = np.column_stack((lsp_x.flatten(),lsp_y.flatten()))\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Generate random data from the true betas\n", "X = np.random.rand(N,2)*10-5\n", "X = (X - X.mean(axis=0))/X.std(axis=0)\n", "eps = np.random.normal(scale=sigma, size = (N,1))\n", "y = np.dot(X,b_true) + eps\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot regression problem" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 3D plot with Axes3D. 3D plotting with this is suboptimal, as it does no actual 3d rendering.\n", "\n", "def plot_scatter_axes3d(X,y,b_true):\n", " # y surface from true betas\n", " y_noiseless = np.dot(lsp_mat,b_true).reshape((20,20))\n", " fig = plt.figure(figsize=[9,7])\n", " ax = fig.gca(projection='3d')\n", " ax.scatter(X[:,0],X[:,1], y, color='red', alpha =1, zorder=y)\n", " ax.plot_surface(lsp_x, lsp_y, np.dot(lsp_mat,b_true).reshape((20,20)), color='black', alpha = 0.5, zorder = y_noiseless)\n", " plt.show()\n", " \n", "plot_scatter_axes3d(X,y,b_true);" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(100, 2) (100, 1)\n", "2\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/anaconda3/lib/python3.6/site-packages/IPython/core/display.py:689: UserWarning:\n", "\n", "Consider using IPython.display.IFrame instead\n", "\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 3D plot with plotly. Plotly is a much better approach for 3d plots, but it requires the user to have an online account.\n", "\n", "# plotly.tools.set_credentials_file(username='camilofosco', api_key='AY1QtDdBCza2qZePnygz')\n", "\n", "def plot_scatter_plotly(X,y,b_true):\n", "\n", " # y surface from true betas\n", " y_noiseless = np.dot(lsp_mat,b_true).reshape((20,20))\n", " \n", " data = [\n", " go.Scatter3d(\n", " x=X[:,0],\n", " y=X[:,1],\n", " z=y,\n", " mode='markers',\n", " marker=dict(\n", " size=5,\n", " color='green',\n", " line=dict(\n", " color='rgba(217, 217, 217, 0.14)',\n", " width=0.5\n", " ),\n", " opacity=1\n", " )\n", " ),\n", " go.Surface(\n", " x=lsp_x,\n", " y=lsp_y,\n", " z=y_noiseless,\n", " colorscale='Greens',\n", " opacity=0.8,\n", " showscale=False\n", " ),\n", "\n", " \n", " ]\n", "\n", " layout = go.Layout(\n", " title='2D Regression',\n", " autosize=False,\n", " width=700,\n", " height=700,\n", " )\n", "\n", " fig = go.Figure(data=data, layout=layout)\n", " \n", " return fig, data\n", "\n", "print(X.shape, y.shape)\n", "\n", "fig, data = plot_scatter_plotly(X,y,b_true)\n", "print(len(data))\n", "iplot(fig, filename='2D Regression - normal data')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Regression types to use:\n", "regr = ['OLS']\n", "colors = ['Blues', 'Reds']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculate regression coefficients for OLS (normal data)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True coefficents: [3 7]\n", "OLS coefficients: [2.7448308 7.30976811]\n" ] } ], "source": [ "from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet, RidgeCV, LassoCV, ElasticNetCV\n", "\n", "\n", "def fit_regression(X, y, regr=['OLS'], verbose=True):\n", " betas=[]\n", " if regr == 'all':\n", " regr = ['OLS','Ridge','LASSO','EN']\n", " \n", " for r in regr:\n", " if r == 'OLS':\n", " # OLS fit\n", " regr_ols = LinearRegression(fit_intercept=False)\n", " regr_ols.fit(X, y)\n", " beta_ols = regr_ols.coef_ \n", " if verbose:\n", " print(f'OLS coefficients: {beta_ols}')\n", " betas.append(beta_ols)\n", " \n", " elif r == 'Ridge':\n", " # Ridge fit\n", " regr_ridge = RidgeCV(fit_intercept=False)\n", " regr_ridge.fit(X, y)\n", " beta_ridge = regr_ridge.coef_\n", " if verbose:\n", " print(f'Ridge coefficients:{beta_ridge}, regularization coef: {regr_ridge.alpha_}')\n", " betas.append(beta_ridge)\n", " \n", " elif r == 'LASSO':\n", " # LASSO fit\n", " regr_lasso = LassoCV(fit_intercept=False)\n", " regr_lasso.fit(X, y)\n", " beta_lasso = regr_lasso.coef_ \n", " if verbose:\n", " print(f'LASSO coefficients:{beta_lasso}, regularization coef: {regr_lasso.alpha_}')\n", " betas.append(beta_lasso)\n", "\n", " elif r == 'EN':\n", " # Elastic Net fit\n", " regr_EN = ElasticNetCV(fit_intercept=False)\n", " regr_EN.fit(X, y)\n", " beta_EN = regr_EN.coef_ \n", " if verbose:\n", " print(f'ElasticNet coefficients:{beta_EN}, regularization coef: {regr_EN.alpha_}')\n", " betas.append(beta_EN)\n", " \n", " return betas\n", "\n", "print('True coefficents:', b_true.ravel())\n", "betas = fit_regression(X,y.ravel(),regr=regr);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot fitted planes (normal data)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/anaconda3/lib/python3.6/site-packages/IPython/core/display.py:689: UserWarning:\n", "\n", "Consider using IPython.display.IFrame instead\n", "\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def plot_fitted_planes(betas, colors, names, data=[], return_traces=False):\n", " \n", " for i,b in enumerate(betas):\n", " y = np.dot(lsp_mat,b.reshape((2,1))).reshape((20,20))\n", " data.append(go.Surface(\n", " x=lsp_x,\n", " y=lsp_y,\n", " z=y,\n", " colorscale=colors[i],\n", " text = names[i],\n", " showscale=False\n", " ))\n", "\n", " layout = go.Layout(\n", " title='2D Regression',\n", " autosize=False,\n", " width=700,\n", " height=700,\n", " )\n", " \n", " if return_traces:\n", " return data\n", " \n", " fig = go.Figure(data=data, layout=layout)\n", " return fig\n", " \n", "fig = plot_fitted_planes(betas, colors=colors, names=regr, data=deepcopy(data))\n", "iplot(fig, filename='2D Regression with different estimators - normal data')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create regression problem with colinearity" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Generate random data with high colinearity between predictors\n", "x1 = np.random.rand(N,1)*10-5\n", "x2 = x1 + np.random.normal(scale=0.2, size=(N,1))\n", "X_colin = np.column_stack((x1,x2))\n", "X_colin = (X_colin-X_colin.mean(axis=0))/X_colin.std(axis=0)\n", "eps = np.random.normal(scale=sigma, size = (N,1))\n", "y_colin = np.dot(X_colin,b_true)+eps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot regression problem with colinearity" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig, data_colin = plot_scatter_plotly(X_colin,y_colin,b_true)\n", "iplot(fig, filename='2D Regression - normal data')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculate regression coefficients (colinear data)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True coefficents: [3 7]\n", "OLS coefficients: [10.18864184 0.20719093]\n" ] } ], "source": [ "print('True coefficents:', b_true.ravel())\n", "betas_colin = fit_regression(X_colin,y_colin.ravel(),regr=regr);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot fitting planes (colinear data)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig = plot_fitted_planes(betas_colin, colors=colors, names=regr, data=deepcopy(data_colin))\n", "iplot(fig, filename='2D Regression with different estimators - colinear data')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add a small perturbation to the colinear data and fit again" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True coefficents: [3 7]\n", "OLS coefficients: [3.59464312 6.79142214]\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Perturbation is just a bit of small uniform noise:\n", "perturbation = np.random.rand(X_colin.shape[0],X_colin.shape[1])*0.05\n", "X_colin_pert = X_colin+perturbation\n", "y_colin_pert = np.dot(X_colin_pert,b_true)+eps\n", "\n", "print('True coefficents:', b_true.ravel())\n", "betas = fit_regression(X_colin_pert,y_colin_pert.ravel(),regr=regr);\n", "fig, data_colin_pert = plot_scatter_plotly(X_colin_pert,y_colin_pert,b_true)\n", "fig = plot_fitted_planes(betas, colors=colors, names=regr, data=deepcopy(data_colin_pert))\n", "\n", "iplot(fig, filename='2D Regression with different estimators - colinear data')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This clearly shows how unstable our estimates are in OLS. As expected, in this case, the inverse Gram Matrix $(X^TX)^{-1}$ (proportional to covariance) will present very large diagonal values:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Condition number and eigenvalues" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Inverse of Gram Matrix for colinear data (propto covariance matrix of betas):\n", "[[ 2.82282151 -2.81781707]\n", " [-2.81781707 2.82282151]]\n", "Condition number of Gram Matrix:\n", "1127.1277155550463\n" ] } ], "source": [ "print('Inverse of Gram Matrix for colinear data (propto covariance matrix of betas):')\n", "print(np.linalg.inv(np.dot(X_colin.T,X_colin)))\n", "\n", "print('Condition number of Gram Matrix:')\n", "print(np.linalg.cond(np.dot(X_colin.T,X_colin)))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix X[:5] =\n" ] }, { "data": { "text/plain": [ "array([[ 1.75683671, 0.65680951],\n", " [-1.60918975, 1.54938769],\n", " [ 0.20357474, -0.48327303],\n", " [ 0.72870872, 1.21985667],\n", " [ 0.15826972, -1.14201238]])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Eigenvalues =\n" ] }, { "data": { "text/plain": [ "array([1.77284892e-01, 1.99822715e+02])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Eigenvectors =\n" ] }, { "data": { "text/plain": [ "array([[-0.70710678, -0.70710678],\n", " [ 0.70710678, -0.70710678]])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Max(eigenvalues)/Min(eigenvalues)\n" ] }, { "data": { "text/plain": [ "1127.127715555074" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "eigval, eigvec = np.linalg.eig(np.dot(X_colin.T,X_colin))\n", "print(\"Matrix X[:5] =\")\n", "display(X[:5])\n", "print(\"Eigenvalues =\")\n", "display(eigval)\n", "print(\"Eigenvectors =\")\n", "display(eigvec)\n", "print(\"Max(eigenvalues)/Min(eigenvalues)\")\n", "display(max(eigval)/min(eigval))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Compare to non-colinear data:\n", "[[ 0.01033188 -0.00185174]\n", " [-0.00185174 0.01033188]]\n", "Condition number of Gram Matrix with non-colinear data:\n", "1.4367237004517126\n" ] } ], "source": [ "print('\\nCompare to non-colinear data:')\n", "print(np.linalg.inv(np.dot(X.T,X)))\n", "\n", "print('Condition number of Gram Matrix with non-colinear data:')\n", "print(np.linalg.cond(np.dot(X.T,X)))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix X[:5] =\n" ] }, { "data": { "text/plain": [ "array([[ 1.75683671, 0.65680951],\n", " [-1.60918975, 1.54938769],\n", " [ 0.20357474, -0.48327303],\n", " [ 0.72870872, 1.21985667],\n", " [ 0.15826972, -1.14201238]])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Eigenvalues =\n" ] }, { "data": { "text/plain": [ "array([117.92257778, 82.07742222])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Eigenvectors =\n" ] }, { "data": { "text/plain": [ "array([[ 0.70710678, -0.70710678],\n", " [ 0.70710678, 0.70710678]])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Max(eigenvalues)/Min(eigenvalues)\n" ] }, { "data": { "text/plain": [ "1.4367237004517126" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "eigval, eigvec = np.linalg.eig(np.dot(X.T,X))\n", "print(\"Matrix X[:5] =\")\n", "display(X[:5])\n", "print(\"Eigenvalues =\")\n", "display(eigval)\n", "print(\"Eigenvectors =\")\n", "display(eigvec)\n", "print(\"Max(eigenvalues)/Min(eigenvalues)\")\n", "display(max(eigval)/min(eigval))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyze loss surfaces" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "\n", "def OLS_loss(X, y, beta, lbda=0):\n", " y_hat = np.dot(X,beta)\n", " return np.sum((y_hat-y)**2,axis=0)\n", "\n", "def Ridge_loss(X, y, beta, lbda):\n", " y_hat = np.dot(X,beta)\n", " return np.sum((y_hat-y)**2,axis=0) + lbda*np.sum(beta**2, axis=0)\n", "\n", "def LASSO_loss(X, y, beta, lbda):\n", " y_hat = np.dot(X,beta)\n", " return (1 / (2 * len(X)))*np.sum((y_hat-y)**2,axis=0) + lbda*np.sum(np.abs(beta), axis=0)\n", "\n", "def EN_loss(X, y, beta, lbda):\n", " ratio=0.1\n", " y_hat = np.dot(X,beta)\n", " return (1 / (2 * len(X)))*np.sum((y_hat-y)**2,axis=0) + lbda*(ratio*np.sum(beta**2, axis=0) + (1-ratio)*np.sum(np.abs(beta), axis=0))\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# linspace for loss surface\n", "L=40\n", "lsp_b = np.linspace(-20,20,L)\n", "lsp_b_x, lsp_b_y = np.meshgrid(lsp_b,lsp_b)\n", "lsp_b_mat = np.column_stack((lsp_b_x.flatten(),lsp_b_y.flatten()))\n", "\n", "def build_surface_fig(loss_values):\n", " \n", " data = [\n", " go.Surface(\n", " x=lsp_b_x,\n", " y=lsp_b_y,\n", " z=loss_values,\n", " colorscale='Viridis',\n", " opacity=0.7,\n", " contours=dict(z=dict(show=True,\n", " width=3,\n", " highlight=True,\n", " highlightcolor='orange',\n", " project=dict(z=True),\n", " usecolormap=True))\n", " )\n", " ]\n", "\n", " layout = go.Layout(\n", " title='Loss surface',\n", " autosize=False,\n", " width=700,\n", " height=700,\n", " scene=dict(\n", " xaxis = dict(\n", " title='Beta 1'),\n", " yaxis = dict(\n", " title='Beta 2'),\n", " zaxis = dict(\n", " title='Loss')\n", " )\n", " )\n", "\n", " fig = go.Figure(data=data, layout=layout)\n", " display(iplot(fig, filename='2D Regression with different estimators - colinear data'))\n", "\n", "build_surface_fig(OLS_loss(X_colin,y_colin.reshape(-1,1), lsp_b_mat.T, 100).reshape((L,L)));" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# # OLS\n", "# loss_values = OLS_loss(X, y, lsp_b_mat.T).reshape((L,L))\n", "# fig, data = build_surface_fig(loss_values)\n", "# iplot(fig, filename='Loss Surface')\n", "\n", "# # Ridge\n", "# loss_values = Ridge_loss(X, y, lsp_b_mat.T, 100.0).reshape((L,L))\n", "# fig, data = build_surface_fig(loss_values)\n", "# iplot(fig, filename='Loss Surface')\n", "\n", "# # LASSO\n", "# loss_values = LASSO_loss(X, y, lsp_b_mat.T, 100.0).reshape((L,L))\n", "# fig, data = build_surface_fig(loss_values)\n", "# iplot(fig, filename='Loss Surface')\n", "\n", "# # Elastic Net\n", "# loss_values = EN_loss(X, y, lsp_b_mat.T, 100.0).reshape((L,L))\n", "# fig, data = build_surface_fig(loss_values)\n", "# fig['layout'].update()\n", "# iplot(fig, filename='Loss Surface')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "from ipywidgets import interactive, HBox, VBox\n", "\n", "def loss_3d_interactive(X, y, loss='Ridge'):\n", " '''Uses plotly to draw an interactive 3D representation of the loss function, \n", " with a slider to control the regularization factor.\n", " \n", " Inputs:\n", " X: predictor matrix for the regression problem. Has to be of dim n x 2\n", " y: response vector \n", " \n", " loss: string with the loss to plot. Options are 'Ridge', 'LASSO', 'EN'.\n", " '''\n", "\n", " if loss == 'Ridge':\n", " loss_function = Ridge_loss\n", " lbda_slider_min = 0\n", " lbda_slider_max = 1000\n", " lbda_step = 1\n", " clf = Ridge()\n", " elif loss == 'LASSO':\n", " loss_function = LASSO_loss\n", " lbda_slider_min = 1\n", " lbda_slider_max = 150\n", " lbda_step = 1\n", " clf = Lasso()\n", " elif loss == 'EN':\n", " loss_function = EN_loss\n", " lbda_slider_min = 1\n", " lbda_slider_max = 150\n", " lbda_step = 1\n", " clf = ElasticNet()\n", " else:\n", " raise ValueError(\"Loss string not recognized. Available options are: 'Ridge', 'LASSO', 'EN'.\")\n", " \n", " # linspace for loss surface\n", " L=20\n", " lsp_b = np.linspace(-10,10,L)\n", " lsp_b_x, lsp_b_y = np.meshgrid(lsp_b,lsp_b)\n", " lsp_b_mat = np.column_stack((lsp_b_x.flatten(),lsp_b_y.flatten()))\n", " \n", " # Get all optimal betas for current lambda range\n", " precomp_coefs=[]\n", " for l in range(lbda_slider_min,lbda_slider_max+1,lbda_step):\n", " clf.set_params(alpha=l)\n", " clf.fit(X, y)\n", " precomp_coefs.append(clf.coef_)\n", " \n", " f = go.FigureWidget(\n", " data=[\n", " go.Surface(\n", " x=lsp_b_x,\n", " y=lsp_b_y,\n", " z=loss_function(X,y.reshape(-1,1), lsp_b_mat.T, 0).reshape((L,L)),\n", " colorscale='Viridis',\n", " colorbar = dict(len=0.75),\n", " opacity=0.7,\n", " name=r\"Loss function\",\n", " contours=dict(z=dict(show=True,\n", " width=4,\n", " highlight=True,\n", " highlightcolor='orange',\n", " project=dict(z=True),\n", " usecolormap=True))\n", " ),\n", " \n", " go.Scatter3d(\n", " x=[p[0] for p in precomp_coefs],\n", " y=[p[1] for p in precomp_coefs],\n", " z=np.zeros(len(precomp_coefs)),\n", " name=r\"Trajectory Beta 1 and Beta 2\",\n", " marker=dict(\n", " size=1,\n", " color='red',\n", " line=dict(\n", " color='red',\n", " width=0\n", " ),\n", " opacity=1\n", " )\n", " ),\n", " go.Scatter3d(\n", " x=[0],\n", " y=[0],\n", " z=[0],\n", " name=r\"Beta 1 and Beta 2 with constraint\",\n", " marker=dict(\n", " size=10,\n", " color='orange',\n", " opacity=1\n", " ),\n", " ),\n", " go.Scatter3d(\n", " x=[3],\n", " y=[7],\n", " z=[0],\n", " name=r\"True Beta 1 and Beta 2 = (3,7)\",\n", " marker=dict(\n", " size=10,\n", " color='blue',\n", " opacity=1\n", " ),\n", " ),\n", " ],\n", "\n", " layout=go.Layout(scene=go.layout.Scene(\n", " xaxis = dict(\n", " title='Beta 1'),\n", " yaxis = dict(\n", " title='Beta 2'),\n", " zaxis = dict(\n", " title='Loss'),\n", " camera=go.layout.scene.Camera(\n", " up=dict(x=0, y=0, z=1),\n", " center=dict(x=0, y=0, z=0),\n", " eye=dict(x=1.25, y=1.25, z=1.25))\n", " ),\n", " width=1000,\n", " height=700,)\n", " )\n", "\n", " def update_z(lbda):\n", " f.data[0].z = loss_function(X, y.reshape(-1,1), lsp_b_mat.T, lbda).reshape((L,L))\n", " beta_opt = precomp_coefs[(lbda-lbda_slider_min)//(lbda_step)]\n", " f.data[-2].x = [beta_opt[0]]\n", " f.data[-2].y = [beta_opt[1]]\n", " f.data[-2].z = [0]\n", "\n", " lambda_slider = interactive(update_z, lbda=(lbda_slider_min, lbda_slider_max, lbda_step))\n", " vb = VBox((f, lambda_slider))\n", " vb.layout.align_items = 'center'\n", " display(vb)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(100, 2) (100, 1)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8e284f3a41e3458c986cc58884d9482f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(FigureWidget({\n", " 'data': [{'colorbar': {'len': 0.75},\n", " 'colorscale': 'Viridis',\n", "…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(X_colin.shape,y_colin.shape)\n", "loss_3d_interactive(X_colin, y_colin.ravel(), loss='Ridge')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(100, 2) (100, 1)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "101d731391e143428b508df21023fe1a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(FigureWidget({\n", " 'data': [{'colorbar': {'len': 0.75},\n", " 'colorscale': 'Viridis',\n", "…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(X_colin.shape,y_colin.shape)\n", "loss_3d_interactive(X_colin, y_colin.ravel(), loss='LASSO')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(100, 2) (100, 1)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "effb804b68c4440db9b90dadac812895", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(FigureWidget({\n", " 'data': [{'colorbar': {'len': 0.75},\n", " 'colorscale': 'Viridis',\n", "…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(X_colin.shape,y_colin.shape)\n", "loss_3d_interactive(X_colin, y_colin.ravel(), loss='EN')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayesian Interpretations of Lasso And Ridge " ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ff5a09b6755346e39e6e4b31f4ae526c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(FigureWidget({\n", " 'data': [{'name': 'Normal(mean = 0, scale = σ²/λ) = RIDGE',\n", " 't…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipywidgets import interactive, HBox, VBox\n", "import scipy.stats\n", "\n", "def interactive_dist():\n", " '''Uses plotly to draw an interactive 3D representation of the loss function, \n", " with a slider to control the regularization factor.\n", " \n", " Inputs:\n", " X: predictor matrix for the regression problem. Has to be of dim n x 2\n", " y: response vector \n", " \n", " loss: string with the loss to plot. Options are 'Ridge', 'LASSO', 'EN'.\n", " '''\n", "\n", " \n", " \n", " # linspace for loss surface\n", " L=20\n", " x = np.linspace(-0.6,0.6,1000)\n", " \n", " y = scipy.stats.norm.pdf(x, 0)\n", " y_2 = scipy.stats.laplace.pdf(x, 0, 2)\n", " \n", " f = go.FigureWidget(\n", " data=[\n", " go.Scatter(x=x, \n", " y=y_2,\n", " name=r\"Normal(mean = 0, scale = σ²/λ) = RIDGE\"),\n", " go.Scatter(x=x,\n", " y=y_2,\n", " name=r\"Laplacienne(mean = 0, scale = σ²/λ) = LASSO\")\n", "\n", " ],\n", " \n", " layout=go.Layout(\n", " title='Normal and Laplacienne Distribution with interactive λ (assume σ²=1)',\n", " xaxis=dict(title='Beta',),\n", " yaxis=dict(title='pdf',range=[0, 15]),\n", " width=1000,\n", " height=500,)\n", " \n", " )\n", "\n", " def update_z(lbda):\n", " f.data[0].y = scipy.stats.norm.pdf(x, 0, (1/lbda))\n", " f.data[1].y = scipy.stats.laplace.pdf(x, 0, (2/lbda))\n", " lambda_slider = interactive(update_z, lbda=(0.5, 30, 1))\n", " vb = VBox((f, lambda_slider))\n", " vb.layout.align_items = 'center'\n", " display(vb)\n", " \n", " \n", "interactive_dist()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.7" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }