{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis\n", "\n", " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", "Date: **Sep 11, 2020**\n", "\n", "Copyright 1999-2020, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", "\n", "\n", "\n", "\n", "\n", "## Why Linear Regression (aka Ordinary Least Squares and family)\n", "\n", "Fitting a continuous function with linear parameterization in terms of the parameters $\\boldsymbol{\\beta}$.\n", "* Method of choice for fitting a continuous function!\n", "\n", "* Gives an excellent introduction to central Machine Learning features with **understandable pedagogical** links to other methods like **Neural Networks**, **Support Vector Machines** etc\n", "\n", "* Analytical expression for the fitting parameters $\\boldsymbol{\\beta}$\n", "\n", "* Analytical expressions for statistical propertiers like mean values, variances, confidence intervals and more\n", "\n", "* Analytical relation with probabilistic interpretations \n", "\n", "* Easy to introduce basic concepts like bias-variance tradeoff, cross-validation, resampling and regularization techniques and many other ML topics\n", "\n", "* Easy to code! And links well with classification problems and logistic regression and neural networks\n", "\n", "* Allows for **easy** hands-on understanding of gradient descent methods\n", "\n", "* and many more features\n", "\n", "For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n", "Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n", "\n", "\n", "## Regression analysis, overarching aims\n", "\n", "Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\\boldsymbol{x} =[x_0, x_1,\\dots, x_{n-1}]^T$. \n", "The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n", "\n", "A regression model aims at finding a likelihood function $p(\\boldsymbol{y}\\vert \\boldsymbol{x})$, that is the conditional distribution for $\\boldsymbol{y}$ with a given $\\boldsymbol{x}$. The estimation of $p(\\boldsymbol{y}\\vert \\boldsymbol{x})$ is made using a data set with \n", "* $n$ cases $i = 0, 1, 2, \\dots, n-1$ \n", "\n", "* Response (target, dependent or outcome) variable $y_i$ with $i = 0, 1, 2, \\dots, n-1$ \n", "\n", "* $p$ so-called explanatory (independent or predictor) variables $\\boldsymbol{x}_i=[x_{i0}, x_{i1}, \\dots, x_{ip-1}]$ with $i = 0, 1, 2, \\dots, n-1$ and explanatory variables running from $0$ to $p-1$. See below for more explicit examples. \n", "\n", " The goal of the regression analysis is to extract/exploit relationship between $\\boldsymbol{y}$ and $\\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things.\n", "\n", "\n", "\n", "## Regression analysis, overarching aims II\n", "\n", "\n", "Consider an experiment in which $p$ characteristics of $n$ samples are\n", "measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix \n", "$\\mathbf{X}$.\n", "\n", "The matrix $\\mathbf{X}$ is called the *design\n", "matrix*. Additional information of the samples is available in the\n", "form of $\\boldsymbol{y}$ (also as above). The variable $\\boldsymbol{y}$ is\n", "generally referred to as the *response variable*. The aim of\n", "regression analysis is to explain $\\boldsymbol{y}$ in terms of\n", "$\\boldsymbol{X}$ through a functional relationship like $y_i =\n", "f(\\mathbf{X}_{i,\\ast})$. When no prior knowledge on the form of\n", "$f(\\cdot)$ is available, it is common to assume a linear relationship\n", "between $\\boldsymbol{X}$ and $\\boldsymbol{y}$. This assumption gives rise to\n", "the *linear regression model* where $\\boldsymbol{\\beta} = [\\beta_0, \\ldots,\n", "\\beta_{p-1}]^{T}$ are the *regression parameters*. \n", "\n", "Linear regression gives us a set of analytical equations for the parameters $\\beta_j$.\n", "\n", "\n", "\n", "\n", "\n", "## Examples\n", "In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n", "consider the model we discussed for describing nuclear binding energies. \n", "\n", "There we assumed that we could parametrize the data using a polynomial approximation based on the liquid drop model.\n", "Assuming" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we have five predictors, that is the intercept, the $A$ dependent term, the $A^{2/3}$ term and the $A^{-1/3}$ and $A^{-1}$ terms.\n", "This gives $p=0,1,2,3,4$. Furthermore we have $n$ entries for each predictor. It means that our design matrix is a \n", "$p\\times n$ matrix $\\boldsymbol{X}$.\n", "\n", "Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the\n", "so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \\times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "## General linear models\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", "\n", "Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i)=\\tilde{y}_i+\\epsilon_i=\\sum_{j=0}^{n-1} \\beta_j x_i^j+\\epsilon_i,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $\\epsilon_i$ is the error in our approximation.\n", "\n", "\n", "\n", "\n", "## Rewriting the fitting procedure as a linear algebra problem\n", "For every set of values $y_i,x_i$ we have thus the corresponding set of equations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "y_0&=\\beta_0+\\beta_1x_0^1+\\beta_2x_0^2+\\dots+\\beta_{n-1}x_0^{n-1}+\\epsilon_0\\\\\n", "y_1&=\\beta_0+\\beta_1x_1^1+\\beta_2x_1^2+\\dots+\\beta_{n-1}x_1^{n-1}+\\epsilon_1\\\\\n", "y_2&=\\beta_0+\\beta_1x_2^1+\\beta_2x_2^2+\\dots+\\beta_{n-1}x_2^{n-1}+\\epsilon_2\\\\\n", "\\dots & \\dots \\\\\n", "y_{n-1}&=\\beta_0+\\beta_1x_{n-1}^1+\\beta_2x_{n-1}^2+\\dots+\\beta_{n-1}x_{n-1}^{n-1}+\\epsilon_{n-1}.\\\\\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rewriting the fitting procedure as a linear algebra problem, more details\n", "Defining the vectors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the design matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\n", "\\begin{bmatrix} \n", "1& x_{0}^1 &x_{0}^2& \\dots & \\dots &x_{0}^{n-1}\\\\\n", "1& x_{1}^1 &x_{1}^2& \\dots & \\dots &x_{1}^{n-1}\\\\\n", "1& x_{2}^1 &x_{2}^2& \\dots & \\dots &x_{2}^{n-1}\\\\ \n", "\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n", "1& x_{n-1}^1 &x_{n-1}^2& \\dots & \\dots &x_{n-1}^{n-1}\\\\\n", "\\end{bmatrix}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can rewrite our equations as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix).\n", "\n", "\n", "\n", "\n", "## Generalizing the fitting procedure as a linear algebra problem\n", "\n", "We are obviously not limited to the above polynomial expansions. We\n", "could replace the various powers of $x$ with elements of Fourier\n", "series or instead of $x_i^j$ we could have $\\cos{(j x_i)}$ or $\\sin{(j\n", "x_i)}$, or time series or other orthogonal functions. For every set\n", "of values $y_i,x_i$ we can then generalize the equations to" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n", "y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n", "y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_2\\\\\n", "\\dots & \\dots \\\\\n", "y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_i\\\\\n", "\\dots & \\dots \\\\\n", "y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_{n-1}x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**\n", "\n", "\n", "\n", "\n", "## Generalizing the fitting procedure as a linear algebra problem\n", "We redefine in turn the matrix $\\boldsymbol{X}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\n", "\\begin{bmatrix} \n", "x_{00}& x_{01} &x_{02}& \\dots & \\dots &x_{0,n-1}\\\\\n", "x_{10}& x_{11} &x_{12}& \\dots & \\dots &x_{1,n-1}\\\\\n", "x_{20}& x_{21} &x_{22}& \\dots & \\dots &x_{2,n-1}\\\\ \n", "\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n", "x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \\dots & \\dots &x_{n-1,n-1}\\\\\n", "\\end{bmatrix}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and without loss of generality we rewrite again our equations as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values?\n", "\n", "\n", "\n", "\n", "## Optimizing our parameters\n", "We have defined the matrix $\\boldsymbol{X}$ via the equations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n", "y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n", "y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_1\\\\\n", "\\dots & \\dots \\\\\n", "y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_1\\\\\n", "\\dots & \\dots \\\\\n", "y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_{n-1}x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we noted above, we stayed with a system with the design matrix \n", " $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times n}$, that is we have $p=n$. For reasons to come later (algorithmic arguments) we will hereafter define \n", "our matrix as $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$, with the predictors refering to the column numbers and the entries $n$ being the row elements.\n", "\n", "\n", "\n", "\n", "## Our model for the nuclear binding energies\n", "\n", "In our [introductory notes](https://compphysics.github.io/MachineLearning/doc/pub/How2ReadData/html/How2ReadData.html) we looked at the so-called [liquid drop model](https://en.wikipedia.org/wiki/Semi-empirical_mass_formula). Let us remind ourselves about what we did by looking at the code.\n", "\n", "We restate the parts of the code we are most interested in." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
1AA^(2/3)A^(-1/3)1/A
A
11.01.01.0000001.0000001.000000
21.02.01.5874010.7937010.500000
31.03.02.0800840.6933610.333333
41.04.02.5198420.6299610.250000
51.05.02.9240180.5848040.200000
..................
2641.0264.041.1531060.1558830.003788
2651.0265.041.2569620.1556870.003774
2661.0266.041.3606880.1554910.003759
2691.0269.041.6710890.1549110.003717
2701.0270.041.7743000.1547200.003704
\n", "

267 rows × 5 columns

\n", "
" ], "text/plain": [ " 1 A A^(2/3) A^(-1/3) 1/A\n", "A \n", "1 1.0 1.0 1.000000 1.000000 1.000000\n", "2 1.0 2.0 1.587401 0.793701 0.500000\n", "3 1.0 3.0 2.080084 0.693361 0.333333\n", "4 1.0 4.0 2.519842 0.629961 0.250000\n", "5 1.0 5.0 2.924018 0.584804 0.200000\n", ".. ... ... ... ... ...\n", "264 1.0 264.0 41.153106 0.155883 0.003788\n", "265 1.0 265.0 41.256962 0.155687 0.003774\n", "266 1.0 266.0 41.360688 0.155491 0.003759\n", "269 1.0 269.0 41.671089 0.154911 0.003717\n", "270 1.0 270.0 41.774300 0.154720 0.003704\n", "\n", "[267 rows x 5 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "# Common imports\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from IPython.display import display\n", "import os\n", "\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "infile = open(data_path(\"MassEval2016.dat\"),'r')\n", "\n", "\n", "# Read the experimental data with Pandas\n", "Masses = pd.read_fwf(infile, usecols=(2,3,4,6,11),\n", " names=('N', 'Z', 'A', 'Element', 'Ebinding'),\n", " widths=(1,3,5,5,5,1,3,4,1,13,11,11,9,1,2,11,9,1,3,1,12,11,1),\n", " header=39,\n", " index_col=False)\n", "\n", "# Extrapolated values are indicated by '#' in place of the decimal place, so\n", "# the Ebinding column won't be numeric. Coerce to float and drop these entries.\n", "Masses['Ebinding'] = pd.to_numeric(Masses['Ebinding'], errors='coerce')\n", "Masses = Masses.dropna()\n", "# Convert from keV to MeV.\n", "Masses['Ebinding'] /= 1000\n", "\n", "# Group the DataFrame by nucleon number, A.\n", "Masses = Masses.groupby('A')\n", "# Find the rows of the grouped DataFrame with the maximum binding energy.\n", "Masses = Masses.apply(lambda t: t[t.Ebinding==t.Ebinding.max()])\n", "A = Masses['A']\n", "Z = Masses['Z']\n", "N = Masses['N']\n", "Element = Masses['Element']\n", "Energies = Masses['Ebinding']\n", "\n", "# Now we set up the design matrix X\n", "X = np.zeros((len(A),5))\n", "X[:,0] = 1\n", "X[:,1] = A\n", "X[:,2] = A**(2.0/3.0)\n", "X[:,3] = A**(-1.0/3.0)\n", "X[:,4] = A**(-1.0)\n", "# Then nice printout using pandas\n", "DesignMatrix = pd.DataFrame(X)\n", "DesignMatrix.index = A\n", "DesignMatrix.columns = ['1', 'A', 'A^(2/3)', 'A^(-1/3)', '1/A']\n", "display(DesignMatrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "throughout these lectures. \n", "\n", "\n", "## Optimizing our parameters, more details\n", "With the above we use the design matrix to define the approximation $\\boldsymbol{\\tilde{y}}$ via the unknown quantity $\\boldsymbol{\\beta}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function is one possible way to define the so-called cost function.\n", "\n", "\n", "\n", "It is also common to define\n", "the function $C$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out.\n", "\n", "\n", "\n", "\n", "## Interpretations and optimizing our parameters\n", "\n", "The function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "can be linked to the variance of the quantity $y_i$ if we interpret the latter as the mean value. \n", "When linking (see the discussion below) with the maximum likelihood approach below, we will indeed interpret $y_i$ as a mean value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "y_{i}=\\langle y_i \\rangle = \\beta_0x_{i,0}+\\beta_1x_{i,1}+\\beta_2x_{i,2}+\\dots+\\beta_{n-1}x_{i,n-1}+\\epsilon_i,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $\\langle y_i \\rangle$ is the mean value. Keep in mind also that\n", "till now we have treated $y_i$ as the exact value. Normally, the\n", "response (dependent or outcome) variable $y_i$ the outcome of a\n", "numerical experiment or another type of experiment and is thus only an\n", "approximation to the true value. It is then always accompanied by an\n", "error estimate, often limited to a statistical error estimate given by\n", "the standard deviation discussed earlier. In the discussion here we\n", "will treat $y_i$ as our exact value for the response variable.\n", "\n", "In order to find the parameters $\\beta_i$ we will then minimize the spread of $C(\\boldsymbol{\\beta})$, that is we are going to solve the problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", "{\\mathbb{R}}^{p}}}\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In practical terms it means we will require" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)^2\\right]=0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which results in" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_{ij}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)\\right]=0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpretations and optimizing our parameters\n", "We can rewrite" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We note also that since our design matrix is defined as $\\boldsymbol{X}\\in\n", "{\\mathbb{R}}^{n\\times p}$, the product $\\boldsymbol{X}^T\\boldsymbol{X} \\in\n", "{\\mathbb{R}}^{p\\times p}$. In the above case we have that $p \\ll n$,\n", "in our case $p=5$ meaning that we end up with inverting a small\n", "$5\\times 5$ matrix. This is a rather common situation, in many cases we end up with low-dimensional\n", "matrices to invert. The methods discussed here and for many other\n", "supervised learning algorithms like classification with logistic\n", "regression or support vector machines, exhibit dimensionalities which\n", "allow for the usage of direct linear algebra methods such as **LU** decomposition or **Singular Value Decomposition** (SVD) for finding the inverse of the matrix\n", "$\\boldsymbol{X}^T\\boldsymbol{X}$.\n", "\n", "\n", "\n", "**Small question**: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$? What kind of problems can we expect?\n", "\n", "\n", "\n", "## Some useful matrix and vector expressions\n", "\n", "The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and \n", "matrices as upper case boldfaced letters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\n", "6\n", " \n", "<\n", "<\n", "<\n", "!\n", "!\n", "M\n", "A\n", "T\n", "H\n", "_\n", "B\n", "L\n", "O\n", "C\n", "K" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\n", "7\n", " \n", "<\n", "<\n", "<\n", "!\n", "!\n", "M\n", "A\n", "T\n", "H\n", "_\n", "B\n", "L\n", "O\n", "C\n", "K" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\n", "8\n", " \n", "<\n", "<\n", "<\n", "!\n", "!\n", "M\n", "A\n", "T\n", "H\n", "_\n", "B\n", "L\n", "O\n", "C\n", "K" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}} = (\\boldsymbol{A}^{-1})^T.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpretations and optimizing our parameters\n", "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and with" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we have" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n", "\n", "\n", "\n", "\n", "Let us now return to our nuclear binding energies and simply code the above equations. \n", "\n", "## Own code for Ordinary Least Squares\n", "\n", "It is rather straightforward to implement the matrix inversion and obtain the parameters $\\boldsymbol{\\beta}$. After having defined the matrix $\\boldsymbol{X}$ we simply need to \n", "write" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# matrix inversion to find beta\n", "beta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Energies)\n", "# and then make the prediction\n", "ytilde = X @ beta" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, you can use the least squares functionality in **Numpy** as" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "fit = np.linalg.lstsq(X, Energies, rcond =None)[0]\n", "ytildenp = np.dot(fit,X.T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally we plot our fit with and compare with data" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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J5KBP37iVSodye6JLFo9PT00NDTQ1dWllWwvgrszMDBAT08Pa9eunfLzIjkEHg/8jGr4IgtKLpejra1NYX+RzIy2trYL/qYUyUQMS+OzdDTCF1loFPYzYzr/jtEM/KJG+CIip4pkIoaV9fDTquGLyBl8+9vfxsx48cUXZ+T1vva1r7F582Y2b97Mddddx7PPPjux7Qc/+AGXXnop69ev59577524/+tf/zqXX345sViM7du3n/R6O3fu5K1vfSuXX345V1555Ywd5I5c4Ls7XqnhpzXCF5Ez2LZtG29729t48MEHZ+T11q5dy2OPPQs7MJkAAAu/SURBVMbOnTv57Gc/y9133w1AEAT8zu/8Dg899BC7du1i27Zt7Nq1C4ArrriCb33rW7zjHe846bVKpRIf+9jH+NKXvsQLL7zAo48+ekEzcc4lckNgD5zAHTeoUQ1fZMH6l19+alZe94E7rz3n9pGREX7605/yyCOPcOutt/L5z3+eRx99lM997nMsXbqUHTt2cNttt3HllVdy3333kc1m+c53vsMll1xCf38/n/jEJ9i/fz8Af/VXf8X111/PddddN/H6b3nLW+jp6QHgySefZP369axbtw6A22+/ne9+97ts2rSJyy677Izte/jhh9m8eTNXXXUVAG1tbRf9bzIuekPgAMIQwjiktXiaiJziO9/5DjfddBMbN26ktbWVZ555BoBnn32W++67j+eee46vfOUr7NmzhyeffJK77rqLv/7rvwbgU5/6FPfccw9PPfUU3/zmN7nrrrtOe/0HHniA9773vQD09vayatWqiW2dnZ309vaes3179uzBzLjxxhu5+uqr+bM/+7OZ6noER/glJ3TH45BJ6kxbkYXqfCPx2bJt2zY+/elPA+UR97Zt27jlllu49tprWb58OQCXXHIJ73nPewC48soreeSRRwD44Q9/OFGSARgeHubEiRM0NDQA8Mgjj/DAAw/w+OOPA+US86nON7umVCrx+OOP89RTT1FbW8sNN9zANddcww033HCRPY9i4AeVwI9BRiN8EZlkYGCAH//4xzz//POYGUEQYGbcfPPNpNPpicfFYrGJv2OxGKVSCYAwDPn5z39OTU3Naa+9c+dO7rrrLh566KGJMkxnZycHDhyYeExPTw8rVqw4Zxs7Ozt55zvfSXt7OwA333wzzzzzzIwEfuQSsZgP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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "Masses['Eapprox'] = ytilde\n", "# Generate a plot comparing the experimental with the fitted values values.\n", "fig, ax = plt.subplots()\n", "ax.set_xlabel(r'$A = N + Z$')\n", "ax.set_ylabel(r'$E_\\mathrm{bind}\\,/\\mathrm{MeV}$')\n", "ax.plot(Masses['A'], Masses['Ebinding'], alpha=0.7, lw=2,\n", " label='Ame2016')\n", "ax.plot(Masses['A'], Masses['Eapprox'], alpha=0.7, lw=2, c='m',\n", " label='Fit')\n", "ax.legend()\n", "save_fig(\"Masses2016OLS\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding error analysis and training set up\n", "\n", "We can easily test our fit by computing the $R2$ score that we discussed in connection with the functionality of **Scikit-Learn** in the introductory slides.\n", "Since we are not using **Scikit-Learn** here we can define our own $R2$ function as" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def R2(y_data, y_model):\n", " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and we would be using it as" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9547578478889096\n" ] } ], "source": [ "print(R2(Energies,ytilde))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can easily add our **MSE** score as" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.037875961483052376\n" ] } ], "source": [ "def MSE(y_data,y_model):\n", " n = np.size(y_model)\n", " return np.sum((y_data-y_model)**2)/n\n", "\n", "print(MSE(Energies,ytilde))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and finally the relative error as" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A \n", "1 0 inf\n", "2 1 1.123190\n", "3 2 0.327631\n", "4 6 0.344172\n", "5 9 0.044402\n", " ... \n", "264 3304 0.009911\n", "265 3310 0.009154\n", "266 3317 0.007824\n", "269 3338 0.011347\n", "270 3344 0.009790\n", "Name: Ebinding, Length: 267, dtype: float64\n" ] } ], "source": [ "def RelativeError(y_data,y_model):\n", " return abs((y_data-y_model)/y_data)\n", "print(RelativeError(Energies, ytilde))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", "Normally, the response (dependent or outcome) variable $y_i$ is the\n", "outcome of a numerical experiment or another type of experiment and is\n", "thus only an approximation to the true value. It is then always\n", "accompanied by an error estimate, often limited to a statistical error\n", "estimate given by the standard deviation discussed earlier. In the\n", "discussion here we will treat $y_i$ as our exact value for the\n", "response variable.\n", "\n", "Introducing the standard deviation $\\sigma_i$ for each measurement\n", "$y_i$, we define now the $\\chi^2$ function (omitting the $1/n$ term)\n", "as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\chi^2(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\frac{\\left(y_i-\\tilde{y}_i\\right)^2}{\\sigma_i^2}=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\frac{1}{\\boldsymbol{\\Sigma^2}}\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements.\n", "\n", "\n", "\n", "## The $\\chi^2$ function\n", "\n", "In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\boldsymbol{\\beta})$ by requiring" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)^2\\right]=0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which results in" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}\\frac{x_{ij}}{\\sigma_i}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)\\right]=0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$.\n", "\n", "\n", "\n", "## The $\\chi^2$ function\n", "\n", "We can rewrite" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", "If we then introduce the matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\beta_j = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}\\frac{y_i}{\\sigma_i}\\frac{x_{ik}}{\\sigma_i} = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}b_ia_{ik}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\sigma^2(\\beta_j) = \\sum_{i=0}^{n-1}\\sigma_i^2\\left( \\frac{\\partial \\beta_j}{\\partial y_i}\\right)^2,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "resulting in" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\sigma^2(\\beta_j) = \\left(\\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}a_{ik}\\right)\\left(\\sum_{l=0}^{p-1}h_{jl}\\sum_{m=0}^{n-1}a_{ml}\\right) = h_{jj}!\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "The first step here is to approximate the function $y$ with a first-order polynomial, that is we write" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_0} = -2\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_1} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_i\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", "For a linear fit (a first-order polynomial) we don't need to invert a matrix!! \n", "Defining" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we obtain" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This approach (different linear and non-linear regression) suffers\n", "often from both being underdetermined and overdetermined in the\n", "unknown coefficients $\\beta_i$. A better approach is to use the\n", "Singular Value Decomposition (SVD) method discussed below. Or using\n", "Lasso and Ridge regression. See below.\n", "\n", "\n", "\n", "\n", "## Fitting an Equation of State for Dense Nuclear Matter\n", "\n", "Before we continue, let us introduce yet another example. We are going to fit the\n", "nuclear equation of state using results from many-body calculations.\n", "The equation of state we have made available here, as function of\n", "density, has been derived using modern nucleon-nucleon potentials with\n", "[the addition of three-body\n", "forces](https://www.sciencedirect.com/science/article/pii/S0370157399001106). This\n", "time the file is presented as a standard **csv** file.\n", "\n", "The beginning of the Python code here is similar to what you have seen\n", "before, with the same initializations and declarations. We use also\n", "**pandas** again, rather extensively in order to organize our data.\n", "\n", "The difference now is that we use **Scikit-Learn's** regression tools\n", "instead of our own matrix inversion implementation. Furthermore, we\n", "sneak in **Ridge** regression (to be discussed below) which includes a\n", "hyperparameter $\\lambda$, also to be explained below.\n", "\n", "## The code" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean squared error: 12.36\n", "Variance score: 1.00\n", "Mean absolute error: 2.83\n", "[ 0. 618.32047562 -861.13519106 1404.91549644] -11.057088709963296\n", "Mean squared error: 197.93\n", "Variance score: 1.00\n", "Mean absolute error: 11.69\n", "[ 0. 28.18220995 282.79902342 842.30879705] 12.946893955209475\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Common imports\n", "import os\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import matplotlib.pyplot as plt\n", "import sklearn.linear_model as skl\n", "from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error\n", "\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "infile = open(data_path(\"EoS.csv\"),'r')\n", "\n", "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", "EoS = EoS.dropna()\n", "Energies = EoS['Energy']\n", "Density = EoS['Density']\n", "# The design matrix now as function of various polytrops\n", "X = np.zeros((len(Density),4))\n", "X[:,3] = Density**(4.0/3.0)\n", "X[:,2] = Density\n", "X[:,1] = Density**(2.0/3.0)\n", "X[:,0] = 1\n", "\n", "# We use now Scikit-Learn's linear regressor and ridge regressor\n", "# OLS part\n", "clf = skl.LinearRegression().fit(X, Energies)\n", "ytilde = clf.predict(X)\n", "EoS['Eols'] = ytilde\n", "# The mean squared error \n", "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, ytilde))\n", "# Explained variance score: 1 is perfect prediction \n", "print('Variance score: %.2f' % r2_score(Energies, ytilde))\n", "# Mean absolute error \n", "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, ytilde))\n", "print(clf.coef_, clf.intercept_)\n", "\n", "# The Ridge regression with a hyperparameter lambda = 0.1\n", "_lambda = 0.1\n", "clf_ridge = skl.Ridge(alpha=_lambda).fit(X, Energies)\n", "yridge = clf_ridge.predict(X)\n", "EoS['Eridge'] = yridge\n", "# The mean squared error \n", "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, yridge))\n", "# Explained variance score: 1 is perfect prediction \n", "print('Variance score: %.2f' % r2_score(Energies, yridge))\n", "# Mean absolute error \n", "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, yridge))\n", "print(clf_ridge.coef_, clf_ridge.intercept_)\n", "\n", "fig, ax = plt.subplots()\n", "ax.set_xlabel(r'$\\rho[\\mathrm{fm}^{-3}]$')\n", "ax.set_ylabel(r'Energy per particle')\n", "ax.plot(EoS['Density'], EoS['Energy'], alpha=0.7, lw=2,\n", " label='Theoretical data')\n", "ax.plot(EoS['Density'], EoS['Eols'], alpha=0.7, lw=2, c='m',\n", " label='OLS')\n", "ax.plot(EoS['Density'], EoS['Eridge'], alpha=0.7, lw=2, c='g',\n", " label='Ridge $\\lambda = 0.1$')\n", "ax.legend()\n", "save_fig(\"EoSfitting\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above simple polynomial in density $\\rho$ gives an excellent fit\n", "to the data. \n", "\n", "We note also that there is a small deviation between the\n", "standard OLS and the Ridge regression at higher densities. We discuss this in more detail\n", "below.\n", "\n", "\n", "## Splitting our Data in Training and Test data\n", "\n", "It is normal in essentially all Machine Learning studies to split the\n", "data in a training set and a test set (sometimes also an additional\n", "validation set). **Scikit-Learn** has an own function for this. There\n", "is no explicit recipe for how much data should be included as training\n", "data and say test data. An accepted rule of thumb is to use\n", "approximately $2/3$ to $4/5$ of the data as training data. We will\n", "postpone a discussion of this splitting to the end of these notes and\n", "our discussion of the so-called **bias-variance** tradeoff. Here we\n", "limit ourselves to repeat the above equation of state fitting example\n", "but now splitting the data into a training set and a test set." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training R2\n", "0.9999848494015684\n", "Training MSE\n", "6.636161909712815\n", "Test R2\n", "0.9999887201912121\n", "Test MSE\n", "5.338085330411524\n" ] } ], "source": [ "import os\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.model_selection import train_test_split\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "def R2(y_data, y_model):\n", " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n", "def MSE(y_data,y_model):\n", " n = np.size(y_model)\n", " return np.sum((y_data-y_model)**2)/n\n", "\n", "infile = open(data_path(\"EoS.csv\"),'r')\n", "\n", "# Read the EoS data as csv file and organized into two arrays with density and energies\n", "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", "EoS = EoS.dropna()\n", "Energies = EoS['Energy']\n", "Density = EoS['Density']\n", "# The design matrix now as function of various polytrops\n", "X = np.zeros((len(Density),5))\n", "X[:,0] = 1\n", "X[:,1] = Density**(2.0/3.0)\n", "X[:,2] = Density\n", "X[:,3] = Density**(4.0/3.0)\n", "X[:,4] = Density**(5.0/3.0)\n", "# We split the data in test and training data\n", "X_train, X_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)\n", "# matrix inversion to find beta\n", "beta = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(y_train)\n", "# and then make the prediction\n", "ytilde = X_train @ beta\n", "print(\"Training R2\")\n", "print(R2(y_train,ytilde))\n", "print(\"Training MSE\")\n", "print(MSE(y_train,ytilde))\n", "ypredict = X_test @ beta\n", "print(\"Test R2\")\n", "print(R2(y_test,ypredict))\n", "print(\"Test MSE\")\n", "print(MSE(y_test,ypredict))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## The Boston housing data example\n", "\n", "The Boston housing \n", "data set was originally a part of UCI Machine Learning Repository\n", "and has been removed now. The data set is now included in **Scikit-Learn**'s \n", "library. There are 506 samples and 13 feature (predictor) variables\n", "in this data set. The objective is to predict the value of prices of\n", "the house using the features (predictors) listed here.\n", "\n", "The features/predictors are\n", "1. CRIM: Per capita crime rate by town\n", "\n", "2. ZN: Proportion of residential land zoned for lots over 25000 square feet\n", "\n", "3. INDUS: Proportion of non-retail business acres per town\n", "\n", "4. CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", "\n", "5. NOX: Nitric oxide concentration (parts per 10 million)\n", "\n", "6. RM: Average number of rooms per dwelling\n", "\n", "7. AGE: Proportion of owner-occupied units built prior to 1940\n", "\n", "8. DIS: Weighted distances to five Boston employment centers\n", "\n", "9. RAD: Index of accessibility to radial highways\n", "\n", "10. TAX: Full-value property tax rate per USD10000\n", "\n", "11. B: $1000(Bk - 0.63)^2$, where $Bk$ is the proportion of [people of African American descent] by town\n", "\n", "12. LSTAT: Percentage of lower status of the population\n", "\n", "13. MEDV: Median value of owner-occupied homes in USD 1000s\n", "\n", "## Housing data, the code\n", "We start by importing the libraries" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt \n", "\n", "import pandas as pd \n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and load the Boston Housing DataSet from **Scikit-Learn**" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.datasets import load_boston\n", "\n", "boston_dataset = load_boston()\n", "\n", "# boston_dataset is a dictionary\n", "# let's check what it contains\n", "boston_dataset.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we invoke Pandas" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)\n", "boston.head()\n", "boston['MEDV'] = boston_dataset.target" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and preprocess the data" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CRIM 0\n", "ZN 0\n", "INDUS 0\n", "CHAS 0\n", "NOX 0\n", "RM 0\n", "AGE 0\n", "DIS 0\n", "RAD 0\n", "TAX 0\n", "PTRATIO 0\n", "B 0\n", "LSTAT 0\n", "MEDV 0\n", "dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check for missing values in all the columns\n", "boston.isnull().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can then visualize the data" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# set the size of the figure\n", "sns.set(rc={'figure.figsize':(11.7,8.27)})\n", "\n", "# plot a histogram showing the distribution of the target values\n", "sns.distplot(boston['MEDV'], bins=30)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is now useful to look at the correlation matrix" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# compute the pair wise correlation for all columns \n", "correlation_matrix = boston.corr().round(2)\n", "# use the heatmap function from seaborn to plot the correlation matrix\n", "# annot = True to print the values inside the square\n", "sns.heatmap(data=correlation_matrix, annot=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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RkREREREREREQsw4KjBOVSMiIiIiIqJSwTEsMXBUQLHeeFZV+cGhBLbsPAQA/OERERERERGRr3AMSwCnqhXU9u7+rKUIAWA0mcb27v4itYiIiIiIiIhIjGNYAhg4KqjBoYStx4mIiIiIiIiKhWNYAjhVLW925ns21EeFP7CG+qjXzSQiIiIiIiKyRBnn6uEYNliYcZQHZb6nEgxS5nvGeuPC5y9rb0ZlJPuQV0ZCWNbe7HlbiYiIiIiIiMxox7laHMMGDwNHebA737OttQkrO1oy0dmG+ihWdrSwqBgRERERERH5gmicq+AYNpg4VS0PduZ7aqe03dE5hz82IiIiIiIi8hWj+kXrV883fb2dci5UGphxlAe9eZ3ax+1OaSMiIiIiIiIqBqvjXBGOfcsTA0d5sFqziEsYEhERERERUSnIpzYvx77liVPV8qCk25ml4RlNaVuzoYcpfEREREREROQLVse5InbKuRQDp9E5w8BRntpam0y/aA31UdMfkJLCp7wnERERERERUTFYGeeK6I19rUxz85oyjU7JiOIY3DpOVSsAUaqfCFP4iIiIiIiIqFTlM83Na5xG5xwzjgpAlOrn9xQ+IiIiIiIiIjvymebmNY7BnWPgqEC0qX5KbSMtP6TwERERERERETnhdJqb1/w8jc7vGDhyid0iW8vam7PmVwL+SeEjIiIiIiKi0sQC0GIcgzvHwJEL9IpsHT12Cvv7B4U/WD+n8BEREREREVHp8UMBaL8GrjgGd46BIxfoFdl6ft/xzP9FP1i/pvARERERERFR6TEqAF2IsacfAldGOAZ3hququcBqMS1WbCciIiIiIiKvFLsANFcuK08MHLmgpips+bms2E5EREREREReMCr0HOuNe779YgeuyBucquYCSZIsP7dUKrb7dV4qERERERERiS1rb8bGHX3Cv23bc8TzMR5XLitPDBy54Mxw0tLzwhJKomK73+elEhERERERUa621ibdwNGZ4WRm7OrVGM/vK5cxQcIZTlVzgdXoqRSynplUTJyXSkREREREVJqsjk+9GOO1tTZhZUdLpg0N9VGs7GjxRXBGSZBQMqKU4FkhpvCVOmYcuUAUVRVJpuSCVbPPB+elEhERERERlSar41PAmzGeX1cuK/aKc6WMgSMXtLU24eixU+h+/TjSMhCSgLQsfm4pBF84L5WIiIiIiKg0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OfPa2uoIhkeSSKlWP6uMhDD/iibs7x8UrqpmNuXt7EgKD3613XbbreyzqJBbTVUYt11nXribiIiIiIhIjxslMfSee3YkhYXzpmXGWLXVEciyjI07+rC9u99WgEa74rXeOElLG6gyWl16/er5pvvKch/kNQaO8mBUkd/K0vLaH7iVQE5jYx2eeeG3mecZMUqRzGdFNL1UyqrK3DRNIiIiIiIiO6yMpZy+BwD0HIhjZUcLANgaE2nHb42NdRgYOJ35v944qbY6gmhFWHecl+/q0m7UgyIywsBRHoxSKPWWVxwcSuAL39krnDamPhEpP0rOgP0AACAASURBVH71ko1trU144dV3HEWx1e+pnromarvZScaLothEREREREQAMLe5Iaesh92SGEbL3Y8m09i4oy+vMZGI3njozHASD3zlmqwxnjq7yc50M22QaG5zA3oOxB0lBBBZxcBRHowCKNofv5pyctL7URtlAz310puOotja99SeIM32Sc2NOwBERERERERasd44eg7kFsGef4W96VjKczfu6NN9Tj5jIhGjcZLZjA8r081E7yGqm5tP8ItIhKuq5cFsVbG21iasXz3fMKCi/KjVHtt9WDeT6f2Tw8L3OTOcxPrV87Fp7aLMso5qVir1G+2TmqhyP4tiExERERFRvvTGLfv7B22/V1trk6Ob2zVVYduvAYzHSUazVayyOqYDOBuE3MXAUR6sBlDMfrTqv8d64zg7Iq7CPziUgE5Q3PSEaOXEYTX409bahJUdLZltNtRHsbKjxbcR7VhvHGs29GDVur1Ys6HH1jKeRERERERUOG6XxdBbrt5IYiztaMxgNE7Kd79ivXFbx4CzQchNnKqWB6tzUc1WP6utjmDNhp5M7SG7rAR89NqgzOu1W0StVCr351MEnIiIiIiICsto3LJq3V5H4xZgfFaH3g16rWRKdjzVS2+clE+5D2VMYxVng5DbGDjKk5UAilFhtkhYwvBIEmeGkwD059nqsXri1KvU7+dMITcYpYT6eb9FKyMsXVBX7GYREREREXlKb+xkVifWSFtrE7Z391sOHCnbMRLrjeOpl2IYODlsaUyWz8ppRlPUKiMhzL+iCfv7B7mqGnmGgaMC0GYmqbN8RkaTtk5gWutXz3fUhqCcUEpxBTi9LKn6uiq0Xjy5yK0jIiIiIvKO3thJzcqNYO2NWLv9f6NM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b6KwMA/NzW1xf3d7GxARkXMZ3cekcjw96y+5oX8nIndi4oiISAdxGLj4RE+c5gXANYkLt68hlA5tQEREzmR0H2Nln+X2/p2InItT1YiIdEiHYeBuX0MoHdqAiIicyeg+xso+y+39OxE5F0ccERHpkA7DwMUnnG6d6pUObUBERM5kdB9jZZ+V2L9zVzUiMgoTR0REOqTLMHA9ayY4Tbq0AREROY/RfYzVfZbaGoFERMngVDUiIh04DNx+bAMiIjKL0X0M+ywiSgcccUREpIPbp3mlA7YBERGZxeg+hn0WEaUDJo6IiHRy8zSvdME2ICIisxjdx7DPIiK341Q1IiIiIiIiIiKSxMQRERERERERERFJYuKIiIiIiIiIiIgkMXFERERERERERESSmDgiIiIiIiIiIiJJTBwREREREREREZEkv90FSEZGhs/uItjKy+fv5XMHvH3+Xj53gOfv5fP30rl76VzdyKvt49Xztgrr11ysX/Oxjs3F+jWXWL9q9ewTBEGwokBEREREREREROQunKpGRERERERERESSmDgiIiIiIiIiIiJJTBwREREREREREZEkJo6IiIiIiIiIiEgSE0dERERERERERCSJiSMiIiIiIiIiIpLExBEREREREREREUli4oiIiIiIiIiIiCQxcURERERERERERJJckziqq6vDjBkzUFlZiT/+8Y92F8dyCxYsQHV1NWbNmoVZs2bh0KFDdhfJdO3t7aipqcGpU6cAAAcOHEBtbS0qKyuxevVqm0tnvsTzv++++1BZWRm9Bnbv3m1zCc3z+OOPo7q6GtXV1Xj00UcBeKf9pc7dS23/m9/8BjNmzEB1dTU2bNgAwDttD0ifv5fan8hpHnnkEdx77712FyPteDGutVp9fT3mzJmDqqoqPPTQQ3YXJ608//zz0Wt31qxZGDt2LH72s5/ZXay0sm3btmg8/Mgjj9hdnLT05JNPYtq0aaitrcVvf/tb9RcILtDU1CRMnjxZOHv2rHD+/HmhtrZWeP/99+0ulmUikYhQUVEh9PT02F0Uy7z99ttCTU2NUFZWJnz66adCMBgUJk6cKHzyySdCT0+PsHjxYuG1116zu5imSTx/QRCEmpoa4cyZMzaXzHwNDQ3CTTfdJHR1dQnd3d3CwoULhbq6Ok+0v9S5v/rqq55p+9dff12YN2+e0NPTIwSDQWHy5MnC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tw7bt2+HIAiIRCKYMGECli1bhs7OTixYsAAA0NHRgTNnzmDo0KEAgOuuuw733HMPenp6MHnyZJSWluL3v/89AODJJ5/EX/7yFwDAJ598gvz8fOTl5QEAHnvsMQwZMsSKUyYiIiJyvCuvvBLDhw9HRkYGfD4fgsEgcnNzsXz5cowcORIvvvgi7rvvPtx5551YunRp9HWCIGDq1KkIBALYvn27jWdARFZi4oiILLdz507s2bMHW7ZsQU5ODrq6urB06VI8/vjj+OEPf4ht27YBAF5//XX8/Oc/j/4s2r17N0pLS/HOO+/gxIkTGDZsGJYsWYIlS5YAABYsWIDvfve7mD59uuXnRkREROQGGzduxKBBg6I/r1+/Hg899BC2bNkCALjkkkvw8ssvxyWO3njjDXR2diIQCFheXiKyD6eqEZHlmpubEQ6H0dnZCQDIzs7GAw88gKlTp2p6/ebNm/Htb38bM2bMwMaNG80sKhEREVHaC4VCOH36NAYMGBD93fDhw9G3b1+8+eab0d+99NJLmDlzph1FJCIbMXFERJa74YYb0L9/f1RUVOCmm27CypUrcfr0aYwaNUr1tR988AHeeustTJ8+HbNnz8a2bdtw9uxZC0pNRERElD4WLVqE2tpaVFRUYNq0aQCAX/ziF3H/R4y1ACAYDOLgwYOYMGGC5WUlInsxcURElsvLy8NTTz2FnTt3Yu7cuWhpacGSJUuwatUq1ddu3rwZkydPRn5+PkaNGoVLL70UW7dutaDUREREROlj48aNqKurw+9+9zt0dnbimmuuQUFBQdz/qa2txe7du9Hd3Y3du3djypQpyMzMtKnERGQXJo6IyHLr1q3Dm2++iZKSEnznO9/BqlWrsG7dOmzatEnxdR0dHdi2bRsOHjyIKVOmYMqUKWhubsazzz6Lnp4ei0pPRERElD7Kyspw33334d5778WpU6fi/lZYWIgRI0bg73//O/785z/jhhtusKmURGQnJo6IyHKdnZ341a9+hXPnzkV/995772HEiBGKr6urq8PAgQOxb98+1NfXo76+Hnv27EFHRwd27dpldrGJiIiI0lJNTQ1GjRrVa6oacGG62oYNG9DW1obhw4fbUDoisht3VSMiU3V0dGDMmDFxv9u8eTN8Ph/mzZsHn8+HSCSCr33ta/j1r3+teKzNmzfj1ltvjRsi3b9/fyxYsABPP/00amtrTTkHIiIionT3wAMPYObMmdi3b1/c76dOnYoHH3wQy5Yts6lkRGQ3nyAIgt2FICIiIiIiIiIi5+FUNSIiIiIiIiIiksTEERERERERERERSWLiiIiIiIiIiIiIJDFxREREREREREREkpg4IiIiIiIiIiIiSUwcERERERERERGRJCaOiIiIiIiIiIhIEhNHREREREREREQk6f8DB/JCQBlla9IAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(20, 5))\n", "\n", "features = ['LSTAT', 'RM']\n", "target = boston['MEDV']\n", "\n", "for i, col in enumerate(features):\n", " plt.subplot(1, len(features) , i+1)\n", " x = boston[col]\n", " y = target\n", " plt.scatter(x, y, marker='o')\n", " plt.title(col)\n", " plt.xlabel(col)\n", " plt.ylabel('MEDV')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we start training our model" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns = ['LSTAT','RM'])\n", "Y = boston['MEDV']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We split the data into training and test sets" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(404, 2)\n", "(102, 2)\n", "(404,)\n", "(102,)\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "# splits the training and test data set in 80% : 20%\n", "# assign random_state to any value.This ensures consistency.\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=5)\n", "print(X_train.shape)\n", "print(X_test.shape)\n", "print(Y_train.shape)\n", "print(Y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we use the linear regression functionality from **Scikit-Learn**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The model performance for training set\n", "--------------------------------------\n", "RMSE is 5.6371293350711955\n", "R2 score is 0.6300745149331701\n", "\n", "\n", "The model performance for testing set\n", "--------------------------------------\n", "RMSE is 5.137400784702911\n", "R2 score is 0.6628996975186953\n" ] } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "from sklearn.metrics import mean_squared_error, r2_score\n", "\n", "lin_model = LinearRegression()\n", "lin_model.fit(X_train, Y_train)\n", "\n", "# model evaluation for training set\n", "\n", "y_train_predict = lin_model.predict(X_train)\n", "rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))\n", "r2 = r2_score(Y_train, y_train_predict)\n", "\n", "print(\"The model performance for training set\")\n", "print(\"--------------------------------------\")\n", "print('RMSE is {}'.format(rmse))\n", "print('R2 score is {}'.format(r2))\n", "print(\"\\n\")\n", "\n", "# model evaluation for testing set\n", "\n", "y_test_predict = lin_model.predict(X_test)\n", "# root mean square error of the model\n", "rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))\n", "\n", "# r-squared score of the model\n", "r2 = r2_score(Y_test, y_test_predict)\n", "\n", "print(\"The model performance for testing set\")\n", "print(\"--------------------------------------\")\n", "print('RMSE is {}'.format(rmse))\n", "print('R2 score is {}'.format(r2))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plotting the y_test vs y_pred\n", "# ideally should have been a straight line\n", "plt.scatter(Y_test, y_test_predict)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reducing the number of degrees of freedom, overarching view\n", "\n", "Many Machine Learning problems involve thousands or even millions of\n", "features for each training instance. Not only does this make training\n", "extremely slow, it can also make it much harder to find a good\n", "solution, as we will see. This problem is often referred to as the\n", "curse of dimensionality. Fortunately, in real-world problems, it is\n", "often possible to reduce the number of features considerably, turning\n", "an intractable problem into a tractable one.\n", "\n", "Later we will discuss some of the most popular dimensionality reduction\n", "techniques: the principal component analysis (PCA), Kernel PCA, and\n", "Locally Linear Embedding (LLE). \n", "\n", "\n", "Principal component analysis and its various variants deal with the\n", "problem of fitting a low-dimensional [affine\n", "subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of\n", "data points in a high-dimensional space. With its family of methods it\n", "is one of the most used tools in data modeling, compression and\n", "visualization.\n", "\n", "\n", "\n", "\n", "## Preprocessing our data\n", "\n", "Before we proceed however, we will discuss how to preprocess our\n", "data. Till now and in connection with our previous examples we have\n", "not met so many cases where we are too sensitive to the scaling of our\n", "data. Normally the data may need a rescaling and/or may be sensitive\n", "to extreme values. Scaling the data renders our inputs much more\n", "suitable for the algorithms we want to employ.\n", "\n", "**Scikit-Learn** has several functions which allow us to rescale the\n", "data, normally resulting in much better results in terms of various\n", "accuracy scores. The **StandardScaler** function in **Scikit-Learn**\n", "ensures that for each feature/predictor we study the mean value is\n", "zero and the variance is one (every column in the design/feature\n", "matrix). This scaling has the drawback that it does not ensure that\n", "we have a particular maximum or minimum in our data set. Another\n", "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", "## More preprocessing\n", "\n", "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", "radius of 1. This means every data point is scaled by a different number (by the\n", "inverse of it’s length).\n", "This normalization is often used when only the direction (or angle) of the data matters,\n", "not the length of the feature vector.\n", "\n", "The **RobustScaler** works similarly to the StandardScaler in that it\n", "ensures statistical properties for each feature that guarantee that\n", "they are on the same scale. However, the RobustScaler uses the median\n", "and quartiles, instead of mean and variance. This makes the\n", "RobustScaler ignore data points that are very different from the rest\n", "(like measurement errors). These odd data points are also called\n", "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", "\n", "\n", "## Simple preprocessing examples, Franke function and regression" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE before scaling: 0.00\n", "R2 score before scaling 0.99\n", "Feature min values before scaling:\n", " [1.00000000e+00 5.70647611e-04 2.86109530e-05 3.25638696e-07\n", " 1.63267720e-08 8.18586633e-10 1.85824944e-10 9.31683343e-12\n", " 4.67124506e-13 2.34205437e-14 1.06040560e-13 5.31662874e-15\n", " 2.66563483e-16 1.33648773e-17 6.70084075e-19 6.05117923e-17\n", " 3.03392149e-18 1.52113815e-19 7.62663530e-21 3.82381876e-22\n", " 1.91717440e-23]\n", "Feature max values before scaling:\n", " [1. 0.99888596 0.99975377 0.99777316 0.99864 0.99950759\n", " 0.9966616 0.99752748 0.9983941 0.99926148 0.99555128 0.99641619\n", " 0.99728185 0.99814827 0.99901543 0.9944422 0.99530615 0.99617084\n", " 0.99703629 0.99790249 0.99876944]\n", "Feature min values after scaling:\n", " [ 0. -1.75397908 -1.83893651 -1.13595195 -1.1563748 -1.17802223\n", " -0.89555231 -0.9052364 -0.91523154 -0.92555908 -0.76154161 -0.76696392\n", " -0.77251583 -0.77820271 -0.78403036 -0.6735038 -0.67668971 -0.67993767\n", " -0.68324996 -0.68662897 -0.69007714]\n", "Feature max values after scaling:\n", " [0. 1.70542138 1.71231136 2.1970696 2.20495992 2.2124631\n", " 2.59210628 2.60447702 2.61644742 2.6280031 2.9321519 2.94723175\n", " 2.96200187 2.97645003 2.99056362 3.23417362 3.25065381 3.26687534\n", " 3.28282987 3.2985088 3.3139033 ]\n", "MSE after scaling: 0.00\n", "R2 score for scaled data: 0.99\n" ] } ], "source": [ "# Common imports\n", "import os\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import sklearn.linear_model as skl\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import MinMaxScaler, StandardScaler, Normalizer\n", "\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "\n", "def FrankeFunction(x,y):\n", "\tterm1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n", "\tterm2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n", "\tterm3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n", "\tterm4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n", "\treturn term1 + term2 + term3 + term4\n", "\n", "\n", "def create_X(x, y, n ):\n", "\tif len(x.shape) > 1:\n", "\t\tx = np.ravel(x)\n", "\t\ty = np.ravel(y)\n", "\n", "\tN = len(x)\n", "\tl = int((n+1)*(n+2)/2)\t\t# Number of elements in beta\n", "\tX = np.ones((N,l))\n", "\n", "\tfor i in range(1,n+1):\n", "\t\tq = int((i)*(i+1)/2)\n", "\t\tfor k in range(i+1):\n", "\t\t\tX[:,q+k] = (x**(i-k))*(y**k)\n", "\n", "\treturn X\n", "\n", "\n", "# Making meshgrid of datapoints and compute Franke's function\n", "n = 5\n", "N = 1000\n", "x = np.sort(np.random.uniform(0, 1, N))\n", "y = np.sort(np.random.uniform(0, 1, N))\n", "z = FrankeFunction(x, y)\n", "X = create_X(x, y, n=n) \n", "# split in training and test data\n", "X_train, X_test, y_train, y_test = train_test_split(X,z,test_size=0.2)\n", "\n", "\n", "clf = skl.LinearRegression().fit(X_train, y_train)\n", "\n", "# The mean squared error and R2 score\n", "print(\"MSE before scaling: {:.2f}\".format(mean_squared_error(clf.predict(X_test), y_test)))\n", "print(\"R2 score before scaling {:.2f}\".format(clf.score(X_test,y_test)))\n", "\n", "scaler = StandardScaler()\n", "scaler.fit(X_train)\n", "X_train_scaled = scaler.transform(X_train)\n", "X_test_scaled = scaler.transform(X_test)\n", "\n", "print(\"Feature min values before scaling:\\n {}\".format(X_train.min(axis=0)))\n", "print(\"Feature max values before scaling:\\n {}\".format(X_train.max(axis=0)))\n", "\n", "print(\"Feature min values after scaling:\\n {}\".format(X_train_scaled.min(axis=0)))\n", "print(\"Feature max values after scaling:\\n {}\".format(X_train_scaled.max(axis=0)))\n", "\n", "clf = skl.LinearRegression().fit(X_train_scaled, y_train)\n", "\n", "\n", "print(\"MSE after scaling: {:.2f}\".format(mean_squared_error(clf.predict(X_test_scaled), y_test)))\n", "print(\"R2 score for scaled data: {:.2f}\".format(clf.score(X_test_scaled,y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The singular value decomposition\n", "\n", "\n", "The examples we have looked at so far are cases where we normally can\n", "invert the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$. Using a polynomial expansion as we\n", "did both for the masses and the fitting of the equation of state,\n", "leads to row vectors of the design matrix which are essentially\n", "orthogonal due to the polynomial character of our model. Obtaining the inverse of the design matrix is then often done via a so-called LU, QR or Cholesky decomposition. \n", "\n", "\n", "\n", "This may\n", "however not the be case in general and a standard matrix inversion\n", "algorithm based on say LU, QR or Cholesky decomposition may lead to singularities. We will see examples of this below.\n", "\n", "There is however a way to partially circumvent this problem and also gain some insights about the ordinary least squares approach, and later shrinkage methods like Ridge and Lasso regressions. \n", "\n", "This is given by the **Singular Value Decomposition** algorithm, perhaps\n", "the most powerful linear algebra algorithm. Let us look at a\n", "different example where we may have problems with the standard matrix\n", "inversion algorithm. Thereafter we dive into the math of the SVD.\n", "\n", "\n", "\n", "\n", "\n", "## Linear Regression Problems\n", "\n", "One of the typical problems we encounter with linear regression, in particular \n", "when the matrix $\\boldsymbol{X}$ (our so-called design matrix) is high-dimensional, \n", "are problems with near singular or singular matrices. The column vectors of $\\boldsymbol{X}$ \n", "may be linearly dependent, normally referred to as super-collinearity. \n", "This means that the matrix may be rank deficient and it is basically impossible to \n", "to model the data using linear regression. As an example, consider the matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "\\mathbf{X} & = \\left[\n", "\\begin{array}{rrr}\n", "1 & -1 & 2\n", "\\\\\n", "1 & 0 & 1\n", "\\\\\n", "1 & 2 & -1\n", "\\\\\n", "1 & 1 & 0\n", "\\end{array} \\right]\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The columns of $\\boldsymbol{X}$ are linearly dependent. We see this easily since the \n", "the first column is the row-wise sum of the other two columns. The rank (more correct,\n", "the column rank) of a matrix is the dimension of the space spanned by the\n", "column vectors. Hence, the rank of $\\mathbf{X}$ is equal to the number\n", "of linearly independent columns. In this particular case the matrix has rank 2.\n", "\n", "Super-collinearity of an $(n \\times p)$-dimensional design matrix $\\mathbf{X}$ implies\n", "that the inverse of the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ (the matrix we need to invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "\\boldsymbol{X} & = \\left[\n", "\\begin{array}{rr}\n", "1 & -1\n", "\\\\\n", "1 & -1\n", "\\end{array} \\right].\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see easily that $\\mbox{det}(\\boldsymbol{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \\times (-1) - 1 \\times (-1) = 0$. Hence, $\\mathbf{X}$ is singular and its inverse is undefined.\n", "This is equivalent to saying that the matrix $\\boldsymbol{X}$ has at least an eigenvalue which is zero.\n", "\n", "\n", "## Fixing the singularity\n", "\n", "If our design matrix $\\boldsymbol{X}$ which enters the linear regression problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", "\\boldsymbol{\\beta} = (\\boldsymbol{X}^{T} \\boldsymbol{X})^{-1} \\boldsymbol{X}^{T} \\boldsymbol{y},\n", "\\label{_auto1} \\tag{1}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "has linearly dependent column vectors, we will not be able to compute the inverse\n", "of $\\boldsymbol{X}^T\\boldsymbol{X}$ and we cannot find the parameters (estimators) $\\beta_i$. \n", "The estimators are only well-defined if $(\\boldsymbol{X}^{T}\\boldsymbol{X})^{-1}$ exits. \n", "This is more likely to happen when the matrix $\\boldsymbol{X}$ is high-dimensional. In this case it is likely to encounter a situation where \n", "the regression parameters $\\beta_i$ cannot be estimated.\n", "\n", "A cheap *ad hoc* approach is simply to add a small diagonal component to the matrix to invert, that is we change" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^{T} \\boldsymbol{X} \\rightarrow \\boldsymbol{X}^{T} \\boldsymbol{X}+\\lambda \\boldsymbol{I},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $\\boldsymbol{I}$ is the identity matrix. When we discuss **Ridge** regression this is actually what we end up evaluating. The parameter $\\lambda$ is called a hyperparameter. More about this later. \n", "\n", "\n", "\n", "## Basic math of the SVD\n", "\n", "\n", "From standard linear algebra we know that a square matrix $\\boldsymbol{X}$ can be diagonalized if and only it is \n", "a so-called [normal matrix](https://en.wikipedia.org/wiki/Normal_matrix), that is if $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times n}$\n", "we have $\\boldsymbol{X}\\boldsymbol{X}^T=\\boldsymbol{X}^T\\boldsymbol{X}$ or if $\\boldsymbol{X}\\in {\\mathbb{C}}^{n\\times n}$ we have $\\boldsymbol{X}\\boldsymbol{X}^{\\dagger}=\\boldsymbol{X}^{\\dagger}\\boldsymbol{X}$.\n", "The matrix has then a set of eigenpairs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "(\\lambda_1,\\boldsymbol{u}_1),\\dots, (\\lambda_n,\\boldsymbol{u}_n),\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the eigenvalues are given by the diagonal matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\Sigma}=\\mathrm{Diag}(\\lambda_1, \\dots,\\lambda_n).\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The matrix $\\boldsymbol{X}$ can be written in terms of an orthogonal/unitary transformation $\\boldsymbol{U}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X} = \\boldsymbol{U}\\boldsymbol{\\Sigma}\\boldsymbol{V}^T,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with $\\boldsymbol{U}\\boldsymbol{U}^T=\\boldsymbol{I}$ or $\\boldsymbol{U}\\boldsymbol{U}^{\\dagger}=\\boldsymbol{I}$.\n", "\n", "Not all square matrices are diagonalizable. A matrix like the one discussed above" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X} = \\begin{bmatrix} \n", "1& -1 \\\\\n", "1& -1\\\\\n", "\\end{bmatrix}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "is not diagonalizable, it is a so-called [defective matrix](https://en.wikipedia.org/wiki/Defective_matrix). It is easy to see that the condition\n", "$\\boldsymbol{X}\\boldsymbol{X}^T=\\boldsymbol{X}^T\\boldsymbol{X}$ is not fulfilled. \n", "\n", "\n", "## The SVD, a Fantastic Algorithm\n", "\n", "\n", "However, and this is the strength of the SVD algorithm, any general\n", "matrix $\\boldsymbol{X}$ can be decomposed in terms of a diagonal matrix and\n", "two orthogonal/unitary matrices. The [Singular Value Decompostion\n", "(SVD) theorem](https://en.wikipedia.org/wiki/Singular_value_decomposition)\n", "states that a general $m\\times n$ matrix $\\boldsymbol{X}$ can be written in\n", "terms of a diagonal matrix $\\boldsymbol{\\Sigma}$ of dimensionality $m\\times n$\n", "and two orthognal matrices $\\boldsymbol{U}$ and $\\boldsymbol{V}$, where the first has\n", "dimensionality $m \\times m$ and the last dimensionality $n\\times n$.\n", "We have then" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X} = \\boldsymbol{U}\\boldsymbol{\\Sigma}\\boldsymbol{V}^T\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an example, the above defective matrix can be decomposed as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X} = \\frac{1}{\\sqrt{2}}\\begin{bmatrix} 1& 1 \\\\ 1& -1\\\\ \\end{bmatrix} \\begin{bmatrix} 2& 0 \\\\ 0& 0\\\\ \\end{bmatrix} \\frac{1}{\\sqrt{2}}\\begin{bmatrix} 1& -1 \\\\ 1& 1\\\\ \\end{bmatrix}=\\boldsymbol{U}\\boldsymbol{\\Sigma}\\boldsymbol{V}^T,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with eigenvalues $\\sigma_1=2$ and $\\sigma_2=0$. \n", "The SVD exits always! \n", "\n", "The SVD\n", "decomposition (singular values) gives eigenvalues \n", "$\\sigma_i\\geq\\sigma_{i+1}$ for all $i$ and for dimensions larger than $i=p$, the\n", "eigenvalues (singular values) are zero.\n", "\n", "In the general case, where our design matrix $\\boldsymbol{X}$ has dimension\n", "$n\\times p$, the matrix is thus decomposed into an $n\\times n$\n", "orthogonal matrix $\\boldsymbol{U}$, a $p\\times p$ orthogonal matrix $\\boldsymbol{V}$\n", "and a diagonal matrix $\\boldsymbol{\\Sigma}$ with $r=\\mathrm{min}(n,p)$\n", "singular values $\\sigma_i\\geq 0$ on the main diagonal and zeros filling\n", "the rest of the matrix. There are at most $p$ singular values\n", "assuming that $n > p$. In our regression examples for the nuclear\n", "masses and the equation of state this is indeed the case, while for\n", "the Ising model we have $p > n$. These are often cases that lead to\n", "near singular or singular matrices.\n", "\n", "The columns of $\\boldsymbol{U}$ are called the left singular vectors while the columns of $\\boldsymbol{V}$ are the right singular vectors.\n", "\n", "## Economy-size SVD\n", "\n", "If we assume that $n > p$, then our matrix $\\boldsymbol{U}$ has dimension $n\n", "\\times n$. The last $n-p$ columns of $\\boldsymbol{U}$ become however\n", "irrelevant in our calculations since they are multiplied with the\n", "zeros in $\\boldsymbol{\\Sigma}$.\n", "\n", "The economy-size decomposition removes extra rows or columns of zeros\n", "from the diagonal matrix of singular values, $\\boldsymbol{\\Sigma}$, along with the columns\n", "in either $\\boldsymbol{U}$ or $\\boldsymbol{V}$ that multiply those zeros in the expression. \n", "Removing these zeros and columns can improve execution time\n", "and reduce storage requirements without compromising the accuracy of\n", "the decomposition.\n", "\n", "If $n > p$, we keep only the first $p$ columns of $\\boldsymbol{U}$ and $\\boldsymbol{\\Sigma}$ has dimension $p\\times p$. \n", "If $p > n$, then only the first $n$ columns of $\\boldsymbol{V}$ are computed and $\\boldsymbol{\\Sigma}$ has dimension $n\\times n$.\n", "The $n=p$ case is obvious, we retain the full SVD. \n", "In general the economy-size SVD leads to less FLOPS and still conserving the desired accuracy.\n", "\n", "## Codes for the SVD" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. -1. 2.]\n", " [ 1. 0. 1.]\n", " [ 1. 2. -1.]\n", " [ 1. 1. 0.]]\n", "[[ 4. 2. 2.]\n", " [ 2. 6. -4.]\n", " [ 2. -4. 6.]]\n", "[[-1.96889890e-16 8.16496581e-01 -5.77350269e-01]\n", " [-7.07106781e-01 4.08248290e-01 5.77350269e-01]\n", " [ 7.07106781e-01 4.08248290e-01 5.77350269e-01]]\n", "[1.00000000e+01 6.00000000e+00 2.38805416e-31]\n", "[[-5.76324444e-17 -7.07106781e-01 7.07106781e-01]\n", " [ 8.16496581e-01 4.08248290e-01 4.08248290e-01]\n", " [-5.77350269e-01 5.77350269e-01 5.77350269e-01]]\n", "[[ 1.39583657e+30 -1.39583657e+30 -1.39583657e+30]\n", " [-1.39583657e+30 1.39583657e+30 1.39583657e+30]\n", " [-1.39583657e+30 1.39583657e+30 1.39583657e+30]]\n" ] } ], "source": [ "import numpy as np\n", "# SVD inversion\n", "def SVDinv(A):\n", " ''' Takes as input a numpy matrix A and returns inv(A) based on singular value decomposition (SVD).\n", " SVD is numerically more stable than the inversion algorithms provided by\n", " numpy and scipy.linalg at the cost of being slower.\n", " '''\n", " U, s, VT = np.linalg.svd(A)\n", "# print('test U')\n", "# print( (np.transpose(U) @ U - U @np.transpose(U)))\n", "# print('test VT')\n", "# print( (np.transpose(VT) @ VT - VT @np.transpose(VT)))\n", " print(U)\n", " print(s)\n", " print(VT)\n", "\n", " D = np.zeros((len(U),len(VT)))\n", " for i in range(0,len(VT)):\n", " D[i,i]=s[i]\n", " UT = np.transpose(U); V = np.transpose(VT); invD = np.linalg.inv(D)\n", " return np.matmul(V,np.matmul(invD,UT))\n", "\n", "\n", "X = np.array([ [1.0, -1.0, 2.0], [1.0, 0.0, 1.0], [1.0, 2.0, -1.0], [1.0, 1.0, 0.0] ])\n", "print(X)\n", "A = np.transpose(X) @ X\n", "print(A)\n", "# Brute force inversion of super-collinear matrix\n", "#B = np.linalg.inv(A)\n", "#print(B)\n", "C = SVDinv(A)\n", "print(C)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The matrix $\\boldsymbol{X}$ has columns that are linearly dependent. The first\n", "column is the row-wise sum of the other two columns. The rank of a\n", "matrix (the column rank) is the dimension of space spanned by the\n", "column vectors. The rank of the matrix is the number of linearly\n", "independent columns, in this case just $2$. We see this from the\n", "singular values when running the above code. Running the standard\n", "inversion algorithm for matrix inversion with $\\boldsymbol{X}^T\\boldsymbol{X}$ results\n", "in the program terminating due to a singular matrix.\n", "\n", "\n", "\n", "## Mathematical Properties\n", "\n", "There are several interesting mathematical properties which will be\n", "relevant when we are going to discuss the differences between say\n", "ordinary least squares (OLS) and **Ridge** regression.\n", "\n", "We have from OLS that the parameters of the linear approximation are given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta} = \\boldsymbol{X}\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The matrix to invert can be rewritten in terms of our SVD decomposition as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{X} = \\boldsymbol{V}\\boldsymbol{\\Sigma}^T\\boldsymbol{U}^T\\boldsymbol{U}\\boldsymbol{\\Sigma}\\boldsymbol{V}^T.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the orthogonality properties of $\\boldsymbol{U}$ we have" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{X} = \\boldsymbol{V}\\boldsymbol{\\Sigma}^T\\boldsymbol{\\Sigma}\\boldsymbol{V}^T = \\boldsymbol{V}\\boldsymbol{D}\\boldsymbol{V}^T,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with $\\boldsymbol{D}$ being a diagonal matrix with values along the diagonal given by the singular values squared. \n", "\n", "This means that" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "(\\boldsymbol{X}^T\\boldsymbol{X})\\boldsymbol{V} = \\boldsymbol{V}\\boldsymbol{D},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "that is the eigenvectors of $(\\boldsymbol{X}^T\\boldsymbol{X})$ are given by the columns of the right singular matrix of $\\boldsymbol{X}$ and the eigenvalues are the squared singular values. It is easy to show (show this) that" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "(\\boldsymbol{X}\\boldsymbol{X}^T)\\boldsymbol{U} = \\boldsymbol{U}\\boldsymbol{D},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "that is, the eigenvectors of $(\\boldsymbol{X}\\boldsymbol{X})^T$ are the columns of the left singular matrix and the eigenvalues are the same. \n", "\n", "Going back to our OLS equation we have" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}\\boldsymbol{\\beta} = \\boldsymbol{X}\\left(\\boldsymbol{V}\\boldsymbol{D}\\boldsymbol{V}^T \\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}=\\boldsymbol{U\\Sigma V^T}\\left(\\boldsymbol{V}\\boldsymbol{D}\\boldsymbol{V}^T \\right)^{-1}(\\boldsymbol{U\\Sigma V^T})^T\\boldsymbol{y}=\\boldsymbol{U}\\boldsymbol{U}^T\\boldsymbol{y}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will come back to this expression when we discuss Ridge regression. \n", "\n", "\n", "## Ridge and LASSO Regression\n", "\n", "Let us remind ourselves about the expression for the standard Mean Squared Error (MSE) which we used to define our cost function and the equations for the ordinary least squares (OLS) method, that is \n", "our optimization problem is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p}}}\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or we can state it as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", "{\\mathbb{R}}^{p}}}\\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\frac{1}{n}\\vert\\vert \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where we have used the definition of a norm-2 vector, that is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\vert\\vert \\boldsymbol{x}\\vert\\vert_2 = \\sqrt{\\sum_i x_i^2}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By minimizing the above equation with respect to the parameters\n", "$\\boldsymbol{\\beta}$ we could then obtain an analytical expression for the\n", "parameters $\\boldsymbol{\\beta}$. We can add a regularization parameter $\\lambda$ by\n", "defining a new cost function to be optimized, that is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", "{\\mathbb{R}}^{p}}}\\frac{1}{n}\\vert\\vert \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\vert\\vert_2^2+\\lambda\\vert\\vert \\boldsymbol{\\beta}\\vert\\vert_2^2\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which leads to the Ridge regression minimization problem where we\n", "require that $\\vert\\vert \\boldsymbol{\\beta}\\vert\\vert_2^2\\le t$, where $t$ is\n", "a finite number larger than zero. By defining" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{X},\\boldsymbol{\\beta})=\\frac{1}{n}\\vert\\vert \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\vert\\vert_2^2+\\lambda\\vert\\vert \\boldsymbol{\\beta}\\vert\\vert_1,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we have a new optimization equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", "{\\mathbb{R}}^{p}}}\\frac{1}{n}\\vert\\vert \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\vert\\vert_2^2+\\lambda\\vert\\vert \\boldsymbol{\\beta}\\vert\\vert_1\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which leads to Lasso regression. Lasso stands for least absolute shrinkage and selection operator. \n", "\n", "Here we have defined the norm-1 as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\vert\\vert \\boldsymbol{x}\\vert\\vert_1 = \\sum_i \\vert x_i\\vert.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More on Ridge Regression\n", "\n", "Using the matrix-vector expression for Ridge regression," ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{X},\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})^T(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\right\\}+\\lambda\\boldsymbol{\\beta}^T\\boldsymbol{\\beta},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "by taking the derivatives with respect to $\\boldsymbol{\\beta}$ we obtain then\n", "a slightly modified matrix inversion problem which for finite values\n", "of $\\lambda$ does not suffer from singularity problems. We obtain" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta}^{\\mathrm{Ridge}} = \\left(\\boldsymbol{X}^T\\boldsymbol{X}+\\lambda\\boldsymbol{I}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with $\\boldsymbol{I}$ being a $p\\times p$ identity matrix with the constraint that" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\sum_{i=0}^{p-1} \\beta_i^2 \\leq t,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with $t$ a finite positive number. \n", "\n", "We see that Ridge regression is nothing but the standard\n", "OLS with a modified diagonal term added to $\\boldsymbol{X}^T\\boldsymbol{X}$. The\n", "consequences, in particular for our discussion of the bias-variance tradeoff \n", "are rather interesting.\n", "\n", "Furthermore, if we use the result above in terms of the SVD decomposition (our analysis was done for the OLS method), we had" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "(\\boldsymbol{X}\\boldsymbol{X}^T)\\boldsymbol{U} = \\boldsymbol{U}\\boldsymbol{D}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can analyse the OLS solutions in terms of the eigenvectors (the columns) of the right singular value matrix $\\boldsymbol{U}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}\\boldsymbol{\\beta} = \\boldsymbol{X}\\left(\\boldsymbol{V}\\boldsymbol{D}\\boldsymbol{V}^T \\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}=\\boldsymbol{U\\Sigma V^T}\\left(\\boldsymbol{V}\\boldsymbol{D}\\boldsymbol{V}^T \\right)^{-1}(\\boldsymbol{U\\Sigma V^T})^T\\boldsymbol{y}=\\boldsymbol{U}\\boldsymbol{U}^T\\boldsymbol{y}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For Ridge regression this becomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}\\boldsymbol{\\beta}^{\\mathrm{Ridge}} = \\boldsymbol{U\\Sigma V^T}\\left(\\boldsymbol{V}\\boldsymbol{D}\\boldsymbol{V}^T+\\lambda\\boldsymbol{I} \\right)^{-1}(\\boldsymbol{U\\Sigma V^T})^T\\boldsymbol{y}=\\sum_{j=0}^{p-1}\\boldsymbol{u}_j\\boldsymbol{u}_j^T\\frac{\\sigma_j^2}{\\sigma_j^2+\\lambda}\\boldsymbol{y},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with the vectors $\\boldsymbol{u}_j$ being the columns of $\\boldsymbol{U}$. \n", "\n", "## Interpreting the Ridge results\n", "\n", "Since $\\lambda \\geq 0$, it means that compared to OLS, we have" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{\\sigma_j^2}{\\sigma_j^2+\\lambda} \\leq 1.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ridge regression finds the coordinates of $\\boldsymbol{y}$ with respect to the\n", "orthonormal basis $\\boldsymbol{U}$, it then shrinks the coordinates by\n", "$\\frac{\\sigma_j^2}{\\sigma_j^2+\\lambda}$. Recall that the SVD has\n", "eigenvalues ordered in a descending way, that is $\\sigma_i \\geq\n", "\\sigma_{i+1}$.\n", "\n", "For small eigenvalues $\\sigma_i$ it means that their contributions become less important, a fact which can be used to reduce the number of degrees of freedom.\n", "Actually, calculating the variance of $\\boldsymbol{X}\\boldsymbol{v}_j$ shows that this quantity is equal to $\\sigma_j^2/n$.\n", "With a parameter $\\lambda$ we can thus shrink the role of specific parameters. \n", "\n", "\n", "## More interpretations\n", "\n", "For the sake of simplicity, let us assume that the design matrix is orthonormal, that is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{X}=(\\boldsymbol{X}^T\\boldsymbol{X})^{-1} =\\boldsymbol{I}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case the standard OLS results in" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta}^{\\mathrm{OLS}} = \\boldsymbol{X}^T\\boldsymbol{y}=\\sum_{i=0}^{p-1}\\boldsymbol{u}_j\\boldsymbol{u}_j^T\\boldsymbol{y},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta}^{\\mathrm{Ridge}} = \\left(\\boldsymbol{I}+\\lambda\\boldsymbol{I}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}=\\left(1+\\lambda\\right)^{-1}\\boldsymbol{\\beta}^{\\mathrm{OLS}},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "that is the Ridge estimator scales the OLS estimator by the inverse of a factor $1+\\lambda$, and\n", "the Ridge estimator converges to zero when the hyperparameter goes to\n", "infinity.\n", "\n", "We will come back to more interpreations after we have gone through some of the statistical analysis part. \n", "\n", "For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n", "Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n", "\n", "\n", "\n", "## A better understanding of regularization\n", "\n", "The parameter $\\lambda$ that we have introduced in the Ridge (and\n", "Lasso as well) regression is often called a regularization parameter\n", "or shrinkage parameter. It is common to call it a hyperparameter. What does it mean mathemtically?\n", "\n", "Here we will first look at how to analyze the difference between the\n", "standard OLS equations and the Ridge expressions in terms of a linear\n", "algebra analysis using the SVD algorithm. Thereafter, we will link\n", "(see the material on the bias-variance tradeoff below) these\n", "observation to the statisical analysis of the results. In particular\n", "we consider how the variance of the parameters $\\boldsymbol{\\beta}$ is\n", "affected by changing the parameter $\\lambda$.\n", "\n", "## Decomposing the OLS and Ridge expressions\n", "\n", "We have our design matrix\n", " $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$. With the SVD we decompose it as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X} = \\boldsymbol{U\\Sigma V^T},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with $\\boldsymbol{U}\\in {\\mathbb{R}}^{n\\times n}$, $\\boldsymbol{\\Sigma}\\in {\\mathbb{R}}^{n\\times p}$\n", "and $\\boldsymbol{V}\\in {\\mathbb{R}}^{p\\times p}$.\n", "\n", "The matrices $\\boldsymbol{U}$ and $\\boldsymbol{V}$ are unitary/orthonormal matrices, that is in case the matrices are real we have $\\boldsymbol{U}^T\\boldsymbol{U}=\\boldsymbol{U}\\boldsymbol{U}^T=\\boldsymbol{I}$ and $\\boldsymbol{V}^T\\boldsymbol{V}=\\boldsymbol{V}\\boldsymbol{V}^T=\\boldsymbol{I}$.\n", "\n", "\n", "\n", "## Introducing the Covariance and Correlation functions\n", "\n", "Before we discuss the link between for example Ridge regression and the singular value decomposition, we need to remind ourselves about\n", "the definition of the covariance and the correlation function. These are quantities \n", "\n", "Suppose we have defined two vectors\n", "$\\hat{x}$ and $\\hat{y}$ with $n$ elements each. The covariance matrix $\\boldsymbol{C}$ is defined as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{C}[\\boldsymbol{x},\\boldsymbol{y}] = \\begin{bmatrix} \\mathrm{cov}[\\boldsymbol{x},\\boldsymbol{x}] & \\mathrm{cov}[\\boldsymbol{x},\\boldsymbol{y}] \\\\\n", " \\mathrm{cov}[\\boldsymbol{y},\\boldsymbol{x}] & \\mathrm{cov}[\\boldsymbol{y},\\boldsymbol{y}] \\\\\n", " \\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where for example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathrm{cov}[\\boldsymbol{x},\\boldsymbol{y}] =\\frac{1}{n} \\sum_{i=0}^{n-1}(x_i- \\overline{x})(y_i- \\overline{y}).\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With this definition and recalling that the variance is defined as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathrm{var}[\\boldsymbol{x}]=\\frac{1}{n} \\sum_{i=0}^{n-1}(x_i- \\overline{x})^2,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can rewrite the covariance matrix as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{C}[\\boldsymbol{x},\\boldsymbol{y}] = \\begin{bmatrix} \\mathrm{var}[\\boldsymbol{x}] & \\mathrm{cov}[\\boldsymbol{x},\\boldsymbol{y}] \\\\\n", " \\mathrm{cov}[\\boldsymbol{x},\\boldsymbol{y}] & \\mathrm{var}[\\boldsymbol{y}] \\\\\n", " \\end{bmatrix}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The covariance takes values between zero and infinity and may thus\n", "lead to problems with loss of numerical precision for particularly\n", "large values. It is common to scale the covariance matrix by\n", "introducing instead the correlation matrix defined via the so-called\n", "correlation function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathrm{corr}[\\boldsymbol{x},\\boldsymbol{y}]=\\frac{\\mathrm{cov}[\\boldsymbol{x},\\boldsymbol{y}]}{\\sqrt{\\mathrm{var}[\\boldsymbol{x}] \\mathrm{var}[\\boldsymbol{y}]}}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The correlation function is then given by values $\\mathrm{corr}[\\boldsymbol{x},\\boldsymbol{y}]\n", "\\in [-1,1]$. This avoids eventual problems with too large values. We\n", "can then define the correlation matrix for the two vectors $\\boldsymbol{x}$\n", "and $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{K}[\\boldsymbol{x},\\boldsymbol{y}] = \\begin{bmatrix} 1 & \\mathrm{corr}[\\boldsymbol{x},\\boldsymbol{y}] \\\\\n", " \\mathrm{corr}[\\boldsymbol{y},\\boldsymbol{x}] & 1 \\\\\n", " \\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above example this is the function we constructed using **pandas**.\n", "\n", "## Correlation Function and Design/Feature Matrix\n", "\n", "In our derivation of the various regression algorithms like **Ordinary Least Squares** or **Ridge regression**\n", "we defined the design/feature matrix $\\boldsymbol{X}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\\begin{bmatrix}\n", "x_{0,0} & x_{0,1} & x_{0,2}& \\dots & \\dots x_{0,p-1}\\\\\n", "x_{1,0} & x_{1,1} & x_{1,2}& \\dots & \\dots x_{1,p-1}\\\\\n", "x_{2,0} & x_{2,1} & x_{2,2}& \\dots & \\dots x_{2,p-1}\\\\\n", "\\dots & \\dots & \\dots & \\dots \\dots & \\dots \\\\\n", "x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \\dots & \\dots x_{n-2,p-1}\\\\\n", "x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \\dots & \\dots x_{n-1,p-1}\\\\\n", "\\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$, with the predictors/features $p$ refering to the column numbers and the\n", "entries $n$ being the row elements.\n", "We can rewrite the design/feature matrix in terms of its column vectors as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\\begin{bmatrix} \\boldsymbol{x}_0 & \\boldsymbol{x}_1 & \\boldsymbol{x}_2 & \\dots & \\dots & \\boldsymbol{x}_{p-1}\\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with a given vector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{x}_i^T = \\begin{bmatrix}x_{0,i} & x_{1,i} & x_{2,i}& \\dots & \\dots x_{n-1,i}\\end{bmatrix}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With these definitions, we can now rewrite our $2\\times 2$\n", "correaltion/covariance matrix in terms of a moe general design/feature\n", "matrix $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$. This leads to a $p\\times p$\n", "covariance matrix for the vectors $\\boldsymbol{x}_i$ with $i=0,1,\\dots,p-1$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{C}[\\boldsymbol{x}] = \\begin{bmatrix}\n", "\\mathrm{var}[\\boldsymbol{x}_0] & \\mathrm{cov}[\\boldsymbol{x}_0,\\boldsymbol{x}_1] & \\mathrm{cov}[\\boldsymbol{x}_0,\\boldsymbol{x}_2] & \\dots & \\dots & \\mathrm{cov}[\\boldsymbol{x}_0,\\boldsymbol{x}_{p-1}]\\\\\n", "\\mathrm{cov}[\\boldsymbol{x}_1,\\boldsymbol{x}_0] & \\mathrm{var}[\\boldsymbol{x}_1] & \\mathrm{cov}[\\boldsymbol{x}_1,\\boldsymbol{x}_2] & \\dots & \\dots & \\mathrm{cov}[\\boldsymbol{x}_1,\\boldsymbol{x}_{p-1}]\\\\\n", "\\mathrm{cov}[\\boldsymbol{x}_2,\\boldsymbol{x}_0] & \\mathrm{cov}[\\boldsymbol{x}_2,\\boldsymbol{x}_1] & \\mathrm{var}[\\boldsymbol{x}_2] & \\dots & \\dots & \\mathrm{cov}[\\boldsymbol{x}_2,\\boldsymbol{x}_{p-1}]\\\\\n", "\\dots & \\dots & \\dots & \\dots & \\dots & \\dots \\\\\n", "\\dots & \\dots & \\dots & \\dots & \\dots & \\dots \\\\\n", "\\mathrm{cov}[\\boldsymbol{x}_{p-1},\\boldsymbol{x}_0] & \\mathrm{cov}[\\boldsymbol{x}_{p-1},\\boldsymbol{x}_1] & \\mathrm{cov}[\\boldsymbol{x}_{p-1},\\boldsymbol{x}_{2}] & \\dots & \\dots & \\mathrm{var}[\\boldsymbol{x}_{p-1}]\\\\\n", "\\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the correlation matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{K}[\\boldsymbol{x}] = \\begin{bmatrix}\n", "1 & \\mathrm{corr}[\\boldsymbol{x}_0,\\boldsymbol{x}_1] & \\mathrm{corr}[\\boldsymbol{x}_0,\\boldsymbol{x}_2] & \\dots & \\dots & \\mathrm{corr}[\\boldsymbol{x}_0,\\boldsymbol{x}_{p-1}]\\\\\n", "\\mathrm{corr}[\\boldsymbol{x}_1,\\boldsymbol{x}_0] & 1 & \\mathrm{corr}[\\boldsymbol{x}_1,\\boldsymbol{x}_2] & \\dots & \\dots & \\mathrm{corr}[\\boldsymbol{x}_1,\\boldsymbol{x}_{p-1}]\\\\\n", "\\mathrm{corr}[\\boldsymbol{x}_2,\\boldsymbol{x}_0] & \\mathrm{corr}[\\boldsymbol{x}_2,\\boldsymbol{x}_1] & 1 & \\dots & \\dots & \\mathrm{corr}[\\boldsymbol{x}_2,\\boldsymbol{x}_{p-1}]\\\\\n", "\\dots & \\dots & \\dots & \\dots & \\dots & \\dots \\\\\n", "\\dots & \\dots & \\dots & \\dots & \\dots & \\dots \\\\\n", "\\mathrm{corr}[\\boldsymbol{x}_{p-1},\\boldsymbol{x}_0] & \\mathrm{corr}[\\boldsymbol{x}_{p-1},\\boldsymbol{x}_1] & \\mathrm{corr}[\\boldsymbol{x}_{p-1},\\boldsymbol{x}_{2}] & \\dots & \\dots & 1\\\\\n", "\\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Covariance Matrix Examples\n", "\n", "\n", "The Numpy function **np.cov** calculates the covariance elements using\n", "the factor $1/(n-1)$ instead of $1/n$ since it assumes we do not have\n", "the exact mean values. The following simple function uses the\n", "**np.vstack** function which takes each vector of dimension $1\\times n$\n", "and produces a $2\\times n$ matrix $\\boldsymbol{W}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{W} = \\begin{bmatrix} x_0 & y_0 \\\\\n", " x_1 & y_1 \\\\\n", " x_2 & y_2\\\\\n", " \\dots & \\dots \\\\\n", " x_{n-2} & y_{n-2}\\\\\n", " x_{n-1} & y_{n-1} & \n", " \\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which in turn is converted into into the $2\\times 2$ covariance matrix\n", "$\\boldsymbol{C}$ via the Numpy function **np.cov()**. We note that we can also calculate\n", "the mean value of each set of samples $\\boldsymbol{x}$ etc using the Numpy\n", "function **np.mean(x)**. We can also extract the eigenvalues of the\n", "covariance matrix through the **np.linalg.eig()** function." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.0735582043568682\n", "3.7149125577492423\n", "[[0.83993344 2.70399972]\n", " [2.70399972 9.43403589]]\n" ] } ], "source": [ "# Importing various packages\n", "import numpy as np\n", "n = 100\n", "x = np.random.normal(size=n)\n", "print(np.mean(x))\n", "y = 4+3*x+np.random.normal(size=n)\n", "print(np.mean(y))\n", "W = np.vstack((x, y))\n", "C = np.cov(W)\n", "print(C)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Correlation Matrix\n", "\n", "The previous example can be converted into the correlation matrix by\n", "simply scaling the matrix elements with the variances. We should also\n", "subtract the mean values for each column. This leads to the following\n", "code which sets up the correlations matrix for the previous example in\n", "a more brute force way. Here we scale the mean values for each column of the design matrix, calculate the relevant mean values and variances and then finally set up the $2\\times 2$ correlation matrix (since we have only two vectors)." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.07408034549174136\n", "1.227878920600447\n", "[[1. 0.56471431]\n", " [0.56471431 1. ]]\n" ] } ], "source": [ "import numpy as np\n", "n = 100\n", "# define two vectors \n", "x = np.random.random(size=n)\n", "y = 4+3*x+np.random.normal(size=n)\n", "#scaling the x and y vectors \n", "x = x - np.mean(x)\n", "y = y - np.mean(y)\n", "variance_x = np.sum(x@x)/n\n", "variance_y = np.sum(y@y)/n\n", "print(variance_x)\n", "print(variance_y)\n", "cov_xy = np.sum(x@y)/n\n", "cov_xx = np.sum(x@x)/n\n", "cov_yy = np.sum(y@y)/n\n", "C = np.zeros((2,2))\n", "C[0,0]= cov_xx/variance_x\n", "C[1,1]= cov_yy/variance_y\n", "C[0,1]= cov_xy/np.sqrt(variance_y*variance_x)\n", "C[1,0]= C[0,1]\n", "print(C)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the matrix elements along the diagonal are one as they\n", "should be and that the matrix is symmetric. Furthermore, diagonalizing\n", "this matrix we easily see that it is a positive definite matrix.\n", "\n", "The above procedure with **numpy** can be made more compact if we use **pandas**.\n", "\n", "## Correlation Matrix with Pandas\n", "\n", "We whow here how we can set up the correlation matrix using **pandas**, as done in this simple code" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.07759721 4.53322612]\n", " [-0.00649067 -1.36010021]\n", " [-0.85832442 -3.75508933]\n", " [-0.37345884 -1.18878828]\n", " [ 0.57144364 1.84634906]\n", " [-1.38212043 -4.65301078]\n", " [-0.65245525 -1.6006181 ]\n", " [ 1.83103728 6.43606823]\n", " [-0.7874819 -1.38076019]\n", " [ 0.58025338 1.12272347]]\n", " 0 1\n", "0 1.077597 4.533226\n", "1 -0.006491 -1.360100\n", "2 -0.858324 -3.755089\n", "3 -0.373459 -1.188788\n", "4 0.571444 1.846349\n", "5 -1.382120 -4.653011\n", "6 -0.652455 -1.600618\n", "7 1.831037 6.436068\n", "8 -0.787482 -1.380760\n", "9 0.580253 1.122723\n", " 0 1\n", "0 1.000000 0.971936\n", "1 0.971936 1.000000\n" ] } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "n = 10\n", "x = np.random.normal(size=n)\n", "x = x - np.mean(x)\n", "y = 4+3*x+np.random.normal(size=n)\n", "y = y - np.mean(y)\n", "X = (np.vstack((x, y))).T\n", "print(X)\n", "Xpd = pd.DataFrame(X)\n", "print(Xpd)\n", "correlation_matrix = Xpd.corr()\n", "print(correlation_matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We expand this model to the Franke function discussed above.\n", "\n", "## Correlation Matrix with Pandas and the Franke function" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "1 0.0 0.084667 0.085622 0.084600 0.084265 0.083876 0.075986 0.075499 \n", "2 0.0 0.085622 0.088547 0.088431 0.089114 0.089546 0.081167 0.081248 \n", "3 0.0 0.084600 0.088431 0.089974 0.091151 0.092025 0.084268 0.084657 \n", "4 0.0 0.084265 0.089114 0.091151 0.092931 0.094306 0.086374 0.087133 \n", "5 0.0 0.083876 0.089546 0.092025 0.094306 0.096103 0.088060 0.089134 \n", "6 0.0 0.075986 0.081167 0.084268 0.086374 0.088060 0.081340 0.082355 \n", "7 0.0 0.075499 0.081248 0.084657 0.087133 0.089134 0.082355 0.083612 \n", "8 0.0 0.075062 0.081279 0.084969 0.087758 0.090029 0.083217 0.084683 \n", "9 0.0 0.074679 0.081285 0.085233 0.088289 0.090794 0.083968 0.085617 \n", "10 0.0 0.067442 0.073098 0.077082 0.079656 0.081772 0.076102 0.077480 \n", "11 0.0 0.067096 0.073089 0.077282 0.080091 0.082412 0.076723 0.078263 \n", "12 0.0 0.066811 0.073089 0.077476 0.080488 0.082988 0.077292 0.078974 \n", "13 0.0 0.066586 0.073106 0.077674 0.080864 0.083521 0.077826 0.079634 \n", "14 0.0 0.066416 0.073146 0.077885 0.081231 0.084028 0.078339 0.080260 \n", "\n", " 8 9 10 11 12 13 14 \n", "0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "1 0.075062 0.074679 0.067442 0.067096 0.066811 0.066586 0.066416 \n", "2 0.081279 0.081285 0.073098 0.073089 0.073089 0.073106 0.073146 \n", "3 0.084969 0.085233 0.077082 0.077282 0.077476 0.077674 0.077885 \n", "4 0.087758 0.088289 0.079656 0.080091 0.080488 0.080864 0.081231 \n", "5 0.090029 0.090794 0.081772 0.082412 0.082988 0.083521 0.084028 \n", "6 0.083217 0.083968 0.076102 0.076723 0.077292 0.077826 0.078339 \n", "7 0.084683 0.085617 0.077480 0.078263 0.078974 0.079634 0.080260 \n", "8 0.085937 0.087033 0.078670 0.079596 0.080434 0.081207 0.081935 \n", "9 0.087033 0.088272 0.079721 0.080773 0.081724 0.082600 0.083420 \n", "10 0.078670 0.079721 0.072443 0.073326 0.074132 0.074882 0.075591 \n", "11 0.079596 0.080773 0.073326 0.074322 0.075229 0.076069 0.076860 \n", "12 0.080434 0.081724 0.074132 0.075229 0.076226 0.077148 0.078014 \n", "13 0.081207 0.082600 0.074882 0.076069 0.077148 0.078145 0.079080 \n", "14 0.081935 0.083420 0.075591 0.076860 0.078014 0.079080 0.080079 \n" ] } ], "source": [ "# Common imports\n", "import numpy as np\n", "import pandas as pd\n", "\n", "\n", "def FrankeFunction(x,y):\n", "\tterm1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n", "\tterm2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n", "\tterm3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n", "\tterm4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n", "\treturn term1 + term2 + term3 + term4\n", "\n", "\n", "def create_X(x, y, n ):\n", "\tif len(x.shape) > 1:\n", "\t\tx = np.ravel(x)\n", "\t\ty = np.ravel(y)\n", "\n", "\tN = len(x)\n", "\tl = int((n+1)*(n+2)/2)\t\t# Number of elements in beta\n", "\tX = np.ones((N,l))\n", "\n", "\tfor i in range(1,n+1):\n", "\t\tq = int((i)*(i+1)/2)\n", "\t\tfor k in range(i+1):\n", "\t\t\tX[:,q+k] = (x**(i-k))*(y**k)\n", "\n", "\treturn X\n", "\n", "\n", "# Making meshgrid of datapoints and compute Franke's function\n", "n = 4\n", "N = 100\n", "x = np.sort(np.random.uniform(0, 1, N))\n", "y = np.sort(np.random.uniform(0, 1, N))\n", "z = FrankeFunction(x, y)\n", "X = create_X(x, y, n=n) \n", "\n", "Xpd = pd.DataFrame(X)\n", "# subtract the mean values and set up the covariance matrix\n", "Xpd = Xpd - Xpd.mean()\n", "covariance_matrix = Xpd.cov()\n", "print(covariance_matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We note here that the covariance is zero for the first rows and\n", "columns since all matrix elements in the design matrix were set to one\n", "(we are fitting the function in terms of a polynomial of degree $n$).\n", "\n", "This means that the variance for these elements will be zero and will\n", "cause problems when we set up the correlation matrix. We can simply\n", "drop these elements and construct a correlation\n", "matrix without these elements. \n", "\n", "\n", "## Rewriting the Covariance and/or Correlation Matrix\n", "\n", "We can rewrite the covariance matrix in a more compact form in terms of the design/feature matrix $\\boldsymbol{X}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{C}[\\boldsymbol{x}] = \\frac{1}{n}\\boldsymbol{X}^T\\boldsymbol{X}= \\mathbb{E}[\\boldsymbol{X}^T\\boldsymbol{X}].\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To see this let us simply look at a design matrix $\\boldsymbol{X}\\in {\\mathbb{R}}^{2\\times 2}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\\begin{bmatrix}\n", "x_{00} & x_{01}\\\\\n", "x_{10} & x_{11}\\\\\n", "\\end{bmatrix}=\\begin{bmatrix}\n", "\\boldsymbol{x}_{0} & \\boldsymbol{x}_{1}\\\\\n", "\\end{bmatrix}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we then compute the expectation value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E}[\\boldsymbol{X}^T\\boldsymbol{X}] = \\frac{1}{n}\\boldsymbol{X}^T\\boldsymbol{X}=\\begin{bmatrix}\n", "x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\\\\n", "x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\\\\n", "\\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which is just" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{C}[\\boldsymbol{x}_0,\\boldsymbol{x}_1] = \\boldsymbol{C}[\\boldsymbol{x}]=\\begin{bmatrix} \\mathrm{var}[\\boldsymbol{x}_0] & \\mathrm{cov}[\\boldsymbol{x}_0,\\boldsymbol{x}_1] \\\\\n", " \\mathrm{cov}[\\boldsymbol{x}_1,\\boldsymbol{x}_0] & \\mathrm{var}[\\boldsymbol{x}_1] \\\\\n", " \\end{bmatrix},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where we wrote $$\\boldsymbol{C}[\\boldsymbol{x}_0,\\boldsymbol{x}_1] = \\boldsymbol{C}[\\boldsymbol{x}]$$ to indicate that this the covariance of the vectors $\\boldsymbol{x}$ of the design/feature matrix $\\boldsymbol{X}$.\n", "\n", "It is easy to generalize this to a matrix $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$.\n", "\n", "\n", "## Linking with SVD\n", "\n", "See lecture september 11. More text to be added here soon.\n", "\n", "\n", "\n", "\n", "## Where are we going?\n", "\n", "Before we proceed, we need to rethink what we have been doing. In our\n", "eager to fit the data, we have omitted several important elements in\n", "our regression analysis. In what follows we will\n", "1. look at statistical properties, including a discussion of mean values, variance and the so-called bias-variance tradeoff\n", "\n", "2. introduce resampling techniques like cross-validation, bootstrapping and jackknife and more\n", "\n", "This will allow us to link the standard linear algebra methods we have discussed above to a statistical interpretation of the methods. \n", "\n", "\n", "\n", "\n", "\n", "## Resampling methods\n", "Resampling methods are an indispensable tool in modern\n", "statistics. They involve repeatedly drawing samples from a training\n", "set and refitting a model of interest on each sample in order to\n", "obtain additional information about the fitted model. For example, in\n", "order to estimate the variability of a linear regression fit, we can\n", "repeatedly draw different samples from the training data, fit a linear\n", "regression to each new sample, and then examine the extent to which\n", "the resulting fits differ. Such an approach may allow us to obtain\n", "information that would not be available from fitting the model only\n", "once using the original training sample.\n", "\n", "Two resampling methods are often used in Machine Learning analyses,\n", "1. The **bootstrap method**\n", "\n", "2. and **Cross-Validation**\n", "\n", "In addition there are several other methods such as the Jackknife and the Blocking methods. We will discuss in particular\n", "cross-validation and the bootstrap method.\n", "\n", "\n", "\n", "\n", "## Resampling approaches can be computationally expensive\n", "\n", "Resampling approaches can be computationally expensive, because they\n", "involve fitting the same statistical method multiple times using\n", "different subsets of the training data. However, due to recent\n", "advances in computing power, the computational requirements of\n", "resampling methods generally are not prohibitive. In this chapter, we\n", "discuss two of the most commonly used resampling methods,\n", "cross-validation and the bootstrap. Both methods are important tools\n", "in the practical application of many statistical learning\n", "procedures. For example, cross-validation can be used to estimate the\n", "test error associated with a given statistical learning method in\n", "order to evaluate its performance, or to select the appropriate level\n", "of flexibility. The process of evaluating a model’s performance is\n", "known as model assessment, whereas the process of selecting the proper\n", "level of flexibility for a model is known as model selection. The\n", "bootstrap is widely used.\n", "\n", "\n", "\n", "## Why resampling methods ?\n", "**Statistical analysis.**\n", "\n", "\n", "* Our simulations can be treated as *computer experiments*. This is particularly the case for Monte Carlo methods\n", "\n", "* The results can be analysed with the same statistical tools as we would use analysing experimental data.\n", "\n", "* As in all experiments, we are looking for expectation values and an estimate of how accurate they are, i.e., possible sources for errors.\n", "\n", " \n", "\n", "## Statistical analysis\n", "\n", "* As in other experiments, many numerical experiments have two classes of errors:\n", "\n", " * Statistical errors\n", "\n", " * Systematical errors\n", "\n", "\n", "* Statistical errors can be estimated using standard tools from statistics\n", "\n", "* Systematical errors are method specific and must be treated differently from case to case.\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "## Linking the regression analysis with a statistical interpretation\n", "\n", "\n", "The\n", "advantage of doing linear regression is that we actually end up with\n", "analytical expressions for several statistical quantities. \n", "Standard least squares and Ridge regression allow us to\n", "derive quantities like the variance and other expectation values in a\n", "rather straightforward way.\n", "\n", "\n", "It is assumed that $\\varepsilon_i\n", "\\sim \\mathcal{N}(0, \\sigma^2)$ and the $\\varepsilon_{i}$ are\n", "independent, i.e.:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*} \n", "\\mbox{Cov}(\\varepsilon_{i_1},\n", "\\varepsilon_{i_2}) & = \\left\\{ \\begin{array}{lcc} \\sigma^2 & \\mbox{if}\n", "& i_1 = i_2, \\\\ 0 & \\mbox{if} & i_1 \\not= i_2. \\end{array} \\right.\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The randomness of $\\varepsilon_i$ implies that\n", "$\\mathbf{y}_i$ is also a random variable. In particular,\n", "$\\mathbf{y}_i$ is normally distributed, because $\\varepsilon_i \\sim\n", "\\mathcal{N}(0, \\sigma^2)$ and $\\mathbf{X}_{i,\\ast} \\, \\boldsymbol{\\beta}$ is a\n", "non-random scalar. To specify the parameters of the distribution of\n", "$\\mathbf{y}_i$ we need to calculate its first two moments. \n", "\n", "Recall that $\\boldsymbol{X}$ is a matrix of dimensionality $n\\times p$. The\n", "notation above $\\mathbf{X}_{i,\\ast}$ means that we are looking at the\n", "row number $i$ and perform a sum over all values $p$.\n", "\n", "\n", "## Assumptions made\n", "\n", "The assumption we have made here can be summarized as (and this is going to be useful when we discuss the bias-variance trade off)\n", "that there exists a function $f(\\boldsymbol{x})$ and a normal distributed error $\\boldsymbol{\\varepsilon}\\sim \\mathcal{N}(0, \\sigma^2)$\n", "which describe our data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We approximate this function with our model from the solution of the linear regression equations, that is our\n", "function $f$ is approximated by $\\boldsymbol{\\tilde{y}}$ where we want to minimize $(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2$, our MSE, with" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Expectation value and variance\n", "\n", "We can calculate the expectation value of $\\boldsymbol{y}$ for a given element $i$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*} \n", "\\mathbb{E}(y_i) & =\n", "\\mathbb{E}(\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}) + \\mathbb{E}(\\varepsilon_i)\n", "\\, \\, \\, = \\, \\, \\, \\mathbf{X}_{i, \\ast} \\, \\beta, \n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "while\n", "its variance is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*} \\mbox{Var}(y_i) & = \\mathbb{E} \\{ [y_i\n", "- \\mathbb{E}(y_i)]^2 \\} \\, \\, \\, = \\, \\, \\, \\mathbb{E} ( y_i^2 ) -\n", "[\\mathbb{E}(y_i)]^2 \\\\ & = \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\,\n", "\\beta + \\varepsilon_i )^2] - ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 \\\\ &\n", "= \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 + 2 \\varepsilon_i\n", "\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta} + \\varepsilon_i^2 ] - ( \\mathbf{X}_{i,\n", "\\ast} \\, \\beta)^2 \\\\ & = ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 + 2\n", "\\mathbb{E}(\\varepsilon_i) \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta} +\n", "\\mathbb{E}(\\varepsilon_i^2 ) - ( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta})^2 \n", "\\\\ & = \\mathbb{E}(\\varepsilon_i^2 ) \\, \\, \\, = \\, \\, \\,\n", "\\mbox{Var}(\\varepsilon_i) \\, \\, \\, = \\, \\, \\, \\sigma^2. \n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence, $y_i \\sim \\mathcal{N}( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}, \\sigma^2)$, that is $\\boldsymbol{y}$ follows a normal distribution with \n", "mean value $\\boldsymbol{X}\\boldsymbol{\\beta}$ and variance $\\sigma^2$ (not be confused with the singular values of the SVD). \n", "\n", "## Expectation value and variance for $\\boldsymbol{\\beta}$\n", "\n", "With the OLS expressions for the parameters $\\boldsymbol{\\beta}$ we can evaluate the expectation value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E}(\\boldsymbol{\\beta}) = \\mathbb{E}[ (\\mathbf{X}^{\\top} \\mathbf{X})^{-1}\\mathbf{X}^{T} \\mathbf{Y}]=(\\mathbf{X}^{T} \\mathbf{X})^{-1}\\mathbf{X}^{T} \\mathbb{E}[ \\mathbf{Y}]=(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\mathbf{X}^{T}\\mathbf{X}\\boldsymbol{\\beta}=\\boldsymbol{\\beta}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This means that the estimator of the regression parameters is unbiased.\n", "\n", "We can also calculate the variance\n", "\n", "The variance of $\\boldsymbol{\\beta}$ is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{eqnarray*}\n", "\\mbox{Var}(\\boldsymbol{\\beta}) & = & \\mathbb{E} \\{ [\\boldsymbol{\\beta} - \\mathbb{E}(\\boldsymbol{\\beta})] [\\boldsymbol{\\beta} - \\mathbb{E}(\\boldsymbol{\\beta})]^{T} \\}\n", "\\\\\n", "& = & \\mathbb{E} \\{ [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{Y} - \\boldsymbol{\\beta}] \\, [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{Y} - \\boldsymbol{\\beta}]^{T} \\}\n", "\\\\\n", "% & = & \\mathbb{E} \\{ [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{Y}] \\, [(\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{Y}]^{T} \\} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", "% \\\\\n", "% & = & \\mathbb{E} \\{ (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\mathbf{Y} \\, \\mathbf{Y}^{T} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", "% \\\\\n", "& = & (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\, \\mathbb{E} \\{ \\mathbf{Y} \\, \\mathbf{Y}^{T} \\} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", "\\\\\n", "& = & (\\mathbf{X}^{T} \\mathbf{X})^{-1} \\, \\mathbf{X}^{T} \\, \\{ \\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} \\, \\mathbf{X}^{T} + \\sigma^2 \\} \\, \\mathbf{X} \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", "% \\\\\n", "% & = & (\\mathbf{X}^T \\mathbf{X})^{-1} \\, \\mathbf{X}^T \\, \\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^T \\, \\mathbf{X}^T \\, \\mathbf{X} \\, (\\mathbf{X}^T % \\mathbf{X})^{-1}\n", "% \\\\\n", "% & & + \\, \\, \\sigma^2 \\, (\\mathbf{X}^T \\mathbf{X})^{-1} \\, \\mathbf{X}^T \\, \\mathbf{X} \\, (\\mathbf{X}^T \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\boldsymbol{\\beta}^T\n", "\\\\\n", "& = & \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} + \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1} - \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T}\n", "\\, \\, \\, = \\, \\, \\, \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1},\n", "\\end{eqnarray*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where we have used that $\\mathbb{E} (\\mathbf{Y} \\mathbf{Y}^{T}) =\n", "\\mathbf{X} \\, \\boldsymbol{\\beta} \\, \\boldsymbol{\\beta}^{T} \\, \\mathbf{X}^{T} +\n", "\\sigma^2 \\, \\mathbf{I}_{nn}$. From $\\mbox{Var}(\\boldsymbol{\\beta}) = \\sigma^2\n", "\\, (\\mathbf{X}^{T} \\mathbf{X})^{-1}$, one obtains an estimate of the\n", "variance of the estimate of the $j$-th regression coefficient:\n", "$\\boldsymbol{\\sigma}^2 (\\boldsymbol{\\beta}_j ) = \\boldsymbol{\\sigma}^2 \\sqrt{\n", "[(\\mathbf{X}^{T} \\mathbf{X})^{-1}]_{jj} }$. This may be used to\n", "construct a confidence interval for the estimates.\n", "\n", "\n", "In a similar way, we can obtain analytical expressions for say the\n", "expectation values of the parameters $\\boldsymbol{\\beta}$ and their variance\n", "when we employ Ridge regression, allowing us again to define a confidence interval. \n", "\n", "It is rather straightforward to show that" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E} \\big[ \\boldsymbol{\\beta}^{\\mathrm{Ridge}} \\big]=(\\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I}_{pp})^{-1} (\\mathbf{X}^{\\top} \\mathbf{X})\\boldsymbol{\\beta}^{\\mathrm{OLS}}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see clearly that \n", "$\\mathbb{E} \\big[ \\boldsymbol{\\beta}^{\\mathrm{Ridge}} \\big] \\not= \\boldsymbol{\\beta}^{\\mathrm{OLS}}$ for any $\\lambda > 0$. We say then that the ridge estimator is biased.\n", "\n", "We can also compute the variance as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mbox{Var}[\\boldsymbol{\\beta}^{\\mathrm{Ridge}}]=\\sigma^2[ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1} \\mathbf{X}^{T} \\mathbf{X} \\{ [ \\mathbf{X}^{\\top} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and it is easy to see that if the parameter $\\lambda$ goes to infinity then the variance of Ridge parameters $\\boldsymbol{\\beta}$ goes to zero. \n", "\n", "With this, we can compute the difference" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mbox{Var}[\\boldsymbol{\\beta}^{\\mathrm{OLS}}]-\\mbox{Var}(\\boldsymbol{\\beta}^{\\mathrm{Ridge}})=\\sigma^2 [ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}[ 2\\lambda\\mathbf{I} + \\lambda^2 (\\mathbf{X}^{T} \\mathbf{X})^{-1} ] \\{ [ \\mathbf{X}^{T} \\mathbf{X} + \\lambda \\mathbf{I} ]^{-1}\\}^{T}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The difference is non-negative definite since each component of the\n", "matrix product is non-negative definite. \n", "This means the variance we obtain with the standard OLS will always for $\\lambda > 0$ be larger than the variance of $\\boldsymbol{\\beta}$ obtained with the Ridge estimator. This has interesting consequences when we discuss the so-called bias-variance trade-off below. \n", "\n", "\n", "## Resampling methods\n", "\n", "With all these analytical equations for both the OLS and Ridge\n", "regression, we will now outline how to assess a given model. This will\n", "lead us to a discussion of the so-called bias-variance tradeoff (see\n", "below) and so-called resampling methods.\n", "\n", "One of the quantities we have discussed as a way to measure errors is\n", "the mean-squared error (MSE), mainly used for fitting of continuous\n", "functions. Another choice is the absolute error.\n", "\n", "In the discussions below we will focus on the MSE and in particular since we will split the data into test and training data,\n", "we discuss the\n", "1. prediction error or simply the **test error** $\\mathrm{Err_{Test}}$, where we have a fixed training set and the test error is the MSE arising from the data reserved for testing. We discuss also the \n", "\n", "2. training error $\\mathrm{Err_{Train}}$, which is the average loss over the training data.\n", "\n", "As our model becomes more and more complex, more of the training data tends to used. The training may thence adapt to more complicated structures in the data. This may lead to a decrease in the bias (see below for code example) and a slight increase of the variance for the test error.\n", "For a certain level of complexity the test error will reach minimum, before starting to increase again. The\n", "training error reaches a saturation.\n", "\n", "\n", "\n", "\n", "## Resampling methods: Jackknife and Bootstrap\n", "\n", "Two famous\n", "resampling methods are the **independent bootstrap** and **the jackknife**. \n", "\n", "The jackknife is a special case of the independent bootstrap. Still, the jackknife was made\n", "popular prior to the independent bootstrap. And as the popularity of\n", "the independent bootstrap soared, new variants, such as **the dependent bootstrap**.\n", "\n", "The Jackknife and independent bootstrap work for\n", "independent, identically distributed random variables.\n", "If these conditions are not\n", "satisfied, the methods will fail. Yet, it should be said that if the data are\n", "independent, identically distributed, and we only want to estimate the\n", "variance of $\\overline{X}$ (which often is the case), then there is no\n", "need for bootstrapping. \n", "\n", "## Resampling methods: Jackknife\n", "\n", "The Jackknife works by making many replicas of the estimator $\\widehat{\\theta}$. \n", "The jackknife is a resampling method where we systematically leave out one observation from the vector of observed values $\\boldsymbol{x} = (x_1,x_2,\\cdots,X_n)$. \n", "Let $\\boldsymbol{x}_i$ denote the vector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{x}_i = (x_1,x_2,\\cdots,x_{i-1},x_{i+1},\\cdots,x_n),\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which equals the vector $\\boldsymbol{x}$ with the exception that observation\n", "number $i$ is left out. Using this notation, define\n", "$\\widehat{\\theta}_i$ to be the estimator\n", "$\\widehat{\\theta}$ computed using $\\vec{X}_i$. \n", "\n", "\n", "## Jackknife code example" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Runtime: 0.233321 sec\n", "Jackknife Statistics :\n", "original bias std. error\n", " 99.6932 99.6833 0.149184\n" ] } ], "source": [ "from numpy import *\n", "from numpy.random import randint, randn\n", "from time import time\n", "\n", "def jackknife(data, stat):\n", " n = len(data);t = zeros(n); inds = arange(n); t0 = time()\n", " ## 'jackknifing' by leaving out an observation for each i \n", " for i in range(n):\n", " t[i] = stat(delete(data,i) )\n", "\n", " # analysis \n", " print(\"Runtime: %g sec\" % (time()-t0)); print(\"Jackknife Statistics :\")\n", " print(\"original bias std. error\")\n", " print(\"%8g %14g %15g\" % (stat(data),(n-1)*mean(t)/n, (n*var(t))**.5))\n", "\n", " return t\n", "\n", "\n", "# Returns mean of data samples \n", "def stat(data):\n", " return mean(data)\n", "\n", "\n", "mu, sigma = 100, 15\n", "datapoints = 10000\n", "x = mu + sigma*random.randn(datapoints)\n", "# jackknife returns the data sample \n", "t = jackknife(x, stat)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Resampling methods: Bootstrap\n", "Bootstrapping is a nonparametric approach to statistical inference\n", "that substitutes computation for more traditional distributional\n", "assumptions and asymptotic results. Bootstrapping offers a number of\n", "advantages: \n", "1. The bootstrap is quite general, although there are some cases in which it fails. \n", "\n", "2. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small. \n", "\n", "3. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. \n", "\n", "4. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).\n", "\n", "\n", "\n", "\n", "## Resampling methods: Bootstrap background\n", "\n", "Since $\\widehat{\\theta} = \\widehat{\\theta}(\\boldsymbol{X})$ is a function of random variables,\n", "$\\widehat{\\theta}$ itself must be a random variable. Thus it has\n", "a pdf, call this function $p(\\boldsymbol{t})$. The aim of the bootstrap is to\n", "estimate $p(\\boldsymbol{t})$ by the relative frequency of\n", "$\\widehat{\\theta}$. You can think of this as using a histogram\n", "in the place of $p(\\boldsymbol{t})$. If the relative frequency closely\n", "resembles $p(\\vec{t})$, then using numerics, it is straight forward to\n", "estimate all the interesting parameters of $p(\\boldsymbol{t})$ using point\n", "estimators. \n", "\n", "\n", "## Resampling methods: More Bootstrap background\n", "\n", "In the case that $\\widehat{\\theta}$ has\n", "more than one component, and the components are independent, we use the\n", "same estimator on each component separately. If the probability\n", "density function of $X_i$, $p(x)$, had been known, then it would have\n", "been straight forward to do this by: \n", "1. Drawing lots of numbers from $p(x)$, suppose we call one such set of numbers $(X_1^*, X_2^*, \\cdots, X_n^*)$. \n", "\n", "2. Then using these numbers, we could compute a replica of $\\widehat{\\theta}$ called $\\widehat{\\theta}^*$. \n", "\n", "By repeated use of (1) and (2), many\n", "estimates of $\\widehat{\\theta}$ could have been obtained. The\n", "idea is to use the relative frequency of $\\widehat{\\theta}^*$\n", "(think of a histogram) as an estimate of $p(\\boldsymbol{t})$.\n", "\n", "## Resampling methods: Bootstrap approach\n", "\n", "But\n", "unless there is enough information available about the process that\n", "generated $X_1,X_2,\\cdots,X_n$, $p(x)$ is in general\n", "unknown. Therefore, [Efron in 1979](https://projecteuclid.org/euclid.aos/1176344552) asked the\n", "question: What if we replace $p(x)$ by the relative frequency\n", "of the observation $X_i$; if we draw observations in accordance with\n", "the relative frequency of the observations, will we obtain the same\n", "result in some asymptotic sense? The answer is yes.\n", "\n", "\n", "Instead of generating the histogram for the relative\n", "frequency of the observation $X_i$, just draw the values\n", "$(X_1^*,X_2^*,\\cdots,X_n^*)$ with replacement from the vector\n", "$\\boldsymbol{X}$. \n", "\n", "## Resampling methods: Bootstrap steps\n", "\n", "The independent bootstrap works like this: \n", "\n", "1. Draw with replacement $n$ numbers for the observed variables $\\boldsymbol{x} = (x_1,x_2,\\cdots,x_n)$. \n", "\n", "2. Define a vector $\\boldsymbol{x}^*$ containing the values which were drawn from $\\boldsymbol{x}$. \n", "\n", "3. Using the vector $\\boldsymbol{x}^*$ compute $\\widehat{\\theta}^*$ by evaluating $\\widehat \\theta$ under the observations $\\boldsymbol{x}^*$. \n", "\n", "4. Repeat this process $k$ times. \n", "\n", "When you are done, you can draw a histogram of the relative frequency\n", "of $\\widehat \\theta^*$. This is your estimate of the probability\n", "distribution $p(t)$. Using this probability distribution you can\n", "estimate any statistics thereof. In principle you never draw the\n", "histogram of the relative frequency of $\\widehat{\\theta}^*$. Instead\n", "you use the estimators corresponding to the statistic of interest. For\n", "example, if you are interested in estimating the variance of $\\widehat\n", "\\theta$, apply the etsimator $\\widehat \\sigma^2$ to the values\n", "$\\widehat \\theta ^*$.\n", "\n", "\n", "## Code example for the Bootstrap method\n", "\n", "The following code starts with a Gaussian distribution with mean value\n", "$\\mu =100$ and variance $\\sigma=15$. We use this to generate the data\n", "used in the bootstrap analysis. The bootstrap analysis returns a data\n", "set after a given number of bootstrap operations (as many as we have\n", "data points). This data set consists of estimated mean values for each\n", "bootstrap operation. The histogram generated by the bootstrap method\n", "shows that the distribution for these mean values is also a Gaussian,\n", "centered around the mean value $\\mu=100$ but with standard deviation\n", "$\\sigma/\\sqrt{n}$, where $n$ is the number of bootstrap samples (in\n", "this case the same as the number of original data points). The value\n", "of the standard deviation is what we expect from the central limit\n", "theorem." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Runtime: 2.03116 sec\n", "Bootstrap Statistics :\n", "original bias std. error\n", " 99.8535 14.9035 99.8557 0.149538\n" ] }, { "ename": "AttributeError", "evalue": "'Rectangle' object has no property 'normed'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbootstrap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdatapoints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[0;31m# the histogram of the bootstrapped data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 31\u001b[0;31m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbinsboot\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpatches\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m50\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnormed\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfacecolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'red'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.75\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 32\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0;31m# add a 'best fit' line\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mhist\u001b[0;34m(x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, data, **kwargs)\u001b[0m\n\u001b[1;32m 2608\u001b[0m \u001b[0malign\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0malign\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morientation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morientation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrwidth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlog\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2609\u001b[0m color=color, label=label, stacked=stacked, **({\"data\": data}\n\u001b[0;32m-> 2610\u001b[0;31m if data is not None else {}), **kwargs)\n\u001b[0m\u001b[1;32m 2611\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2612\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1563\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1565\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msanitize_sequence\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1566\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1567\u001b[0m \u001b[0mbound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_sig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mhist\u001b[0;34m(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)\u001b[0m\n\u001b[1;32m 6806\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mpatch\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6807\u001b[0m \u001b[0mp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6808\u001b[0;31m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6809\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlbl\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6810\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlbl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36mupdate\u001b[0;34m(self, props)\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1005\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1006\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_update_property\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mprops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1007\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1005\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1006\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_update_property\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mprops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1007\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36m_update_property\u001b[0;34m(self, k, v)\u001b[0m\n\u001b[1;32m 1000\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mcallable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1001\u001b[0m raise AttributeError('{!r} object has no property {!r}'\n\u001b[0;32m-> 1002\u001b[0;31m .format(type(self).__name__, k))\n\u001b[0m\u001b[1;32m 1003\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mAttributeError\u001b[0m: 'Rectangle' object has no property 'normed'" ] }, { "data": { "image/png": "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Y8eOtLS0ZNasWWlqasqePXuSJO3t7WlpaRn1gQEA4JWM+JXbpqambNiwIatWrUpfX18WLlyYJUuWJEk2btyYdevWpaenJ/PmzcvKlStHfWAAAHglw47bhx56aOifFyxYkG3btp2wZu7cudm6devoTAYAACPkE8oAACiGuAUAoBjiFgCAYohbAACKIW4BACiGuAUAoBjiFgCAYvigezhFzedOz7QmdyGgDMeOD6RSaR72+t6+/nQfOVrHieDUeGaGUzStqTGtq9uHvX77ncvrOA3A6Zk6ZfKIH9O66zgPnCqXJQAAUAxxCwBAMcQtAADFELcAABRD3AIAUAxxCwBAMcQtAADFELcAABRD3AIAUAxxCwBAMcQtAADFELcAABRD3AIAUAxxCwBAMRrHegAAYOI5dnwglUrzsNf39vWn+8jROk4EvyJuAYARmzplclpXtw97/fY7l6e7jvPAb7gsAQCAYohbAACKIW4BACiGa27h15rPnZ5pTe4SADCReSaHX5vW1DjiX44AAMYXlyUAAFAMcQsAQDHELQAAxXDNLQBQdy/3iWav9AlnPs2M0yFuAYC6G8knmvk0M06HyxIAACiGuAUAoBjiFgCAYohbAACK4RfKKJaP0wWAs49nforl43QB4OzjsgQAAIohbgEAKIa4BQCgGOIWAIBiiFsAAIrh3RIYUyN9u66+YwNpmjq5jhMBABOZuGVMncrbdQ13vbf2AoCzj7gFAMaVY8cHUqk0D3t9b19/uo8creNETCTiFgAYV6ZOmTzin+p113EeJha/UAYAQDG8cgsATGguY+CFxC0AMKG5jIEXEre8Kv83DABMJOKWV+X/hgFgZEb6Hu5eGBpd4hYAOKvU+6eSp/Ie7l4YGj3illE10gcMADjT/FSybOL2LDPSH5WM1Kk8YADAeOaFm4mlLpWzffv23H333env78/73ve+XHPNNfX4NpyCU/lRCQCczbxwM7GMetx2dnZm06ZNuf/++zN16tSsWLEif/RHf5Tf//3fH+1vVSQXoQPA2WU8vTPReJrlVI163O7evTtvfetb85rXvCZJsnjx4nR0dOQjH/nIsG4/aVLDaI80pmbMmJamEV4G8P/u+Kdhr737428f8Y9KqudNP2vWj6dZzrb142mWs239eJploq8fT7OcbevH0yz1Xj91yuS6Pvf39fWnp6e3LrN8ed2iPH+G2+1krdhQq9Vqo/kNv/SlL+WXv/xlbrnlliTJt771rezduzef/vSnR/PbAADACSaN9l84ODiYhob/v6hrtdqLvgYAgHoZ9bidOXNmurq6hr7u6upKtVod7W8DAAAnGPW4fdvb3pYf//jHefbZZ3P06NH80z/9U1paWkb72wAAwAlG/RfKLrjggtxyyy1ZuXJljh8/nquuuipvetObRvvbAADACUb9F8oAAGCsjPplCQAAMFbELQAAxRC3AAAUQ9wCAFAMcXsWu+eee7J48eK0trbm7rvvTpLcf//9ueKKK9La2po77rgj/f39r3j7xx57LH/4h394psY9a5zqvhw8eDAf+tCH8q53vSsrVqzI008/faZHL9qp7svTTz+da665JsuXL8+1116bAwcOnOnRi9PT05Nly5YN/Te+e/futLa2ZtGiRdm0adPQun379qWtrS2LFy/O2rVrX3Z/jhw5kg996EO5/PLLc80117zofdoZmdHcl5///OdD95v3vOc92bdv3xk7j9KM5r78xv/+7//mLW95y/h9nqlxVvrXf/3X2rJly2rd3d21/v7+2vXXX1/70pe+VLv00ktrnZ2dtVqtVrv99ttr995778ve/pe//GVtxYoVtT/4gz84k2MX73T25X3ve1/tG9/4Rq1Wq9W+8Y1v1G666aYzOnvJTmdfPvaxj9W+/vWv12q1Wu2rX/1qbfXq1Wd09tL8x3/8R23ZsmW1efPm1Z566qna0aNHawsXLqz9z//8T+348eO1D3zgA7Uf/OAHtVqtVlu6dGnt3//932u1Wq32N3/zN0P78ELr16+vfelLX6rVarXaAw884H5zikZ7X1asWFH7/ve/X6vVarXdu3fXWltbz9i5lGS096VWq9UGBgZqH/jAB2rz58+vPfXUU2fsXEbCK7dnqcceeyx/8id/khkzZmTy5Mm59NJL88UvfjHz588f+kS5yy67LN/97ndf9vYbNmzI+973vjM58lnhVPfl2Wefzc9+9rOsWLEiSXLllVfm5ptvPuPzl+p07i+Dg4Pp6elJkhw9ejTTpk07o7OXZsuWLbn99tuH/r3v3bs3c+bMyezZs9PY2JjW1tZ0dHTkwIED6e3tzfz585MkbW1t6ejoOOHv+8EPfpDW1tYkybJly/Iv//IvOX78+Jk7oUKM9r68+93vzqWXXpokeeMb35hnnnnmzJ1MQUZ7X5Lk7//+7/O2t70t55133hk7j5ESt2epefPm5Uc/+lGee+659PX15aGHHsr8+fPzyCOP5JlnnsnAwEA6Ojpy6NChE277ve99L729vVmyZMkYTF62U92Xp556Kr/zO7+TDRs25Morr8xHP/rRTJkyZYzOojync3+56aab8g//8A+59NJLc++99+aDH/zgGJxBOT7zmc/kkksuGfr64MGDqVQqQ19Xq9V0dnaecLxSqaSzs/OEv++F6xobGzNjxow8++yzdTyDMo32vrS1tWXy5MlJkrvuuivveMc76jh9uUZ7Xx599LNj6HQAAAPTSURBVNH85Cc/yV/+5V/Wd/DTJG7PUgsWLEhbW1uuvfbaXHfddbn44oszffr0rF69OjfeeGOuueaavPGNbzwhkLq6unL33Xfnk5/85BhNXrZT3Zf+/v489thjeetb35pvf/vbefvb355PfOITY3QW5TnVfUmSj3/84/nUpz6VH/7wh1m/fn0+8pGPpOazc0bN4OBgGhoahr6u1WppaGh4xeMnU6vVMmmSp8bTNRr7UqvV8rnPfS6PPPJI1qxZU/eZzwansy9Hjx7N+vXrc8cdd4z7+8j4no666enpyaJFi7J9+/bcd999mTp1ai644IK86U1vyne+851885vfzAUXXJDZs2e/6HY/+MEP8txzzw1d6J8ky5cvH/qxK6fnVPelUqnknHPOyWWXXZbkVz9e3bt371icQpFOdV+effbZPP7440OvOi1evDhdXV35xS9+MRanUaSZM2e+6JfAurq6Uq1WTzh+6NChoR/NvlC1Wh16xb2/vz/PP/98XvOa19R/8MKd7r709/fnYx/7WP7zP/8zX/3qV9Pc3HxG5i7d6ezLww8/nMOHD+fGG2/M8uXLh36J+fHHHz9j8w+XuD1LPf300/mrv/qr9Pf3p7u7O1u3bs3y5cvz/ve/Pz09PTl27Fi+9rWv5YorrnjR7d797nfnu9/9btrb29Pe3p4kaW9vz4wZM8biNIpzqvvyu7/7u5k5c2Z27dqVJPn+97+fefPmjcUpFOlU9+W8885LU1NTHn744STJnj17cs455+S1r33tWJxGkS666KI88cQT2b9/fwYGBrJjx460tLRk1qxZaWpqyp49e5L86nGqpaXlhNsvXLgw3/nOd5IkO3fuzCWXXOKSnlFwuvvyuc99Lj09Pbn33nuF7Sg6nX259NJL89BDDw09/1er1dxzzz15/etfPxan8qoax3oAxsbcuXOzaNGivPOd78zAwEDe//735+KLL86HP/zhvOc970l/f3+WLVs29IsWa9euzZ/92Z/l7W9/+xhPXrbT2ZcvfOELuf322/N3f/d3mTFjRjZs2DDGZ1OO09mXL37xi/n0pz+d3t7enHPOOfnCF74wxmdTlqampmzYsCGrVq1KX19fFi5cOPT7ABs3bsy6devS09OTefPmZeXKlUmSz3/+86lWq3nve9+bm266KZ/4xCeydOnSNDc3Z+PGjWN5OsU4nX1ZvHhxvv71r+fCCy/Mu9/97qG/8zcvqHDqTvf+MlE01Fz8BQBAIVyWAABAMcQtAADFELcAABRD3AIAUAxxCwBAMcQtAADFELcAABRD3AIAUIz/D/YNsOLkFOpDAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy import *\n", "from numpy.random import randint, randn\n", "from time import time\n", "import matplotlib.mlab as mlab\n", "import matplotlib.pyplot as plt\n", "\n", "# Returns mean of bootstrap samples \n", "def stat(data):\n", " return mean(data)\n", "\n", "# Bootstrap algorithm\n", "def bootstrap(data, statistic, R):\n", " t = zeros(R); n = len(data); inds = arange(n); t0 = time()\n", " # non-parametric bootstrap \n", " for i in range(R):\n", " t[i] = statistic(data[randint(0,n,n)])\n", "\n", " # analysis \n", " print(\"Runtime: %g sec\" % (time()-t0)); print(\"Bootstrap Statistics :\")\n", " print(\"original bias std. error\")\n", " print(\"%8g %8g %14g %15g\" % (statistic(data), std(data),mean(t),std(t)))\n", " return t\n", "\n", "\n", "mu, sigma = 100, 15\n", "datapoints = 10000\n", "x = mu + sigma*random.randn(datapoints)\n", "# bootstrap returns the data sample \n", "t = bootstrap(x, stat, datapoints)\n", "# the histogram of the bootstrapped data \n", "n, binsboot, patches = plt.hist(t, 50, normed=1, facecolor='red', alpha=0.75)\n", "\n", "# add a 'best fit' line \n", "y = mlab.normpdf( binsboot, mean(t), std(t))\n", "lt = plt.plot(binsboot, y, 'r--', linewidth=1)\n", "plt.xlabel('Smarts')\n", "plt.ylabel('Probability')\n", "plt.axis([99.5, 100.6, 0, 3.0])\n", "plt.grid(True)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Various steps in cross-validation\n", "\n", "When the repetitive splitting of the data set is done randomly,\n", "samples may accidently end up in a fast majority of the splits in\n", "either training or test set. Such samples may have an unbalanced\n", "influence on either model building or prediction evaluation. To avoid\n", "this $k$-fold cross-validation structures the data splitting. The\n", "samples are divided into $k$ more or less equally sized exhaustive and\n", "mutually exclusive subsets. In turn (at each split) one of these\n", "subsets plays the role of the test set while the union of the\n", "remaining subsets constitutes the training set. Such a splitting\n", "warrants a balanced representation of each sample in both training and\n", "test set over the splits. Still the division into the $k$ subsets\n", "involves a degree of randomness. This may be fully excluded when\n", "choosing $k=n$. This particular case is referred to as leave-one-out\n", "cross-validation (LOOCV). \n", "\n", "\n", "## How to set up the cross-validation for Ridge and/or Lasso\n", "\n", "* Define a range of interest for the penalty parameter.\n", "\n", "* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", "\n", "* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\boldsymbol{\\sigma}_{-i}^2(\\lambda)$, as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "\\boldsymbol{\\beta}_{-i}(\\lambda) & = ( \\boldsymbol{X}_{-i, \\ast}^{T}\n", "\\boldsymbol{X}_{-i, \\ast} + \\lambda \\boldsymbol{I}_{pp})^{-1}\n", "\\boldsymbol{X}_{-i, \\ast}^{T} \\boldsymbol{y}_{-i}\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\boldsymbol{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\boldsymbol{X}_{i, \\ast} \\boldsymbol{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", "\n", "* Repeat the first three steps such that each sample plays the role of the test set once.\n", "\n", "* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}.\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-validation in brief\n", "\n", "For the various values of $k$\n", "\n", "1. shuffle the dataset randomly.\n", "\n", "2. Split the dataset into $k$ groups.\n", "\n", "3. For each unique group:\n", "\n", "a. Decide which group to use as set for test data\n", "\n", "b. Take the remaining groups as a training data set\n", "\n", "c. Fit a model on the training set and evaluate it on the test set\n", "\n", "d. Retain the evaluation score and discard the model\n", "\n", "\n", "5. Summarize the model using the sample of model evaluation scores\n", "\n", "## Code Example for Cross-validation and $k$-fold Cross-validation\n", "\n", "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.model_selection import KFold\n", "from sklearn.linear_model import Ridge\n", "from sklearn.model_selection import cross_val_score\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "# A seed just to ensure that the random numbers are the same for every run.\n", "# Useful for eventual debugging.\n", "np.random.seed(3155)\n", "\n", "# Generate the data.\n", "nsamples = 100\n", "x = np.random.randn(nsamples)\n", "y = 3*x**2 + np.random.randn(nsamples)\n", "\n", "## Cross-validation on Ridge regression using KFold only\n", "\n", "# Decide degree on polynomial to fit\n", "poly = PolynomialFeatures(degree = 6)\n", "\n", "# Decide which values of lambda to use\n", "nlambdas = 500\n", "lambdas = np.logspace(-3, 5, nlambdas)\n", "\n", "# Initialize a KFold instance\n", "k = 5\n", "kfold = KFold(n_splits = k)\n", "\n", "# Perform the cross-validation to estimate MSE\n", "scores_KFold = np.zeros((nlambdas, k))\n", "\n", "i = 0\n", "for lmb in lambdas:\n", " ridge = Ridge(alpha = lmb)\n", " j = 0\n", " for train_inds, test_inds in kfold.split(x):\n", " xtrain = x[train_inds]\n", " ytrain = y[train_inds]\n", "\n", " xtest = x[test_inds]\n", " ytest = y[test_inds]\n", "\n", " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", "\n", " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", " ypred = ridge.predict(Xtest)\n", "\n", " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", "\n", " j += 1\n", " i += 1\n", "\n", "\n", "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", "\n", "## Cross-validation using cross_val_score from sklearn along with KFold\n", "\n", "# kfold is an instance initialized above as:\n", "# kfold = KFold(n_splits = k)\n", "\n", "estimated_mse_sklearn = np.zeros(nlambdas)\n", "i = 0\n", "for lmb in lambdas:\n", " ridge = Ridge(alpha = lmb)\n", "\n", " X = poly.fit_transform(x[:, np.newaxis])\n", " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", "\n", " # cross_val_score return an array containing the estimated negative mse for every fold.\n", " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", "\n", " i += 1\n", "\n", "## Plot and compare the slightly different ways to perform cross-validation\n", "\n", "plt.figure()\n", "\n", "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", "\n", "plt.xlabel('log10(lambda)')\n", "plt.ylabel('mse')\n", "\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The bias-variance tradeoff\n", "\n", "\n", "We will discuss the bias-variance tradeoff in the context of\n", "continuous predictions such as regression. However, many of the\n", "intuitions and ideas discussed here also carry over to classification\n", "tasks. Consider a dataset $\\mathcal{L}$ consisting of the data\n", "$\\mathbf{X}_\\mathcal{L}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$. \n", "\n", "Let us assume that the true data is generated from a noisy model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $\\epsilon$ is normally distributed with mean zero and standard deviation $\\sigma^2$.\n", "\n", "In our derivation of the ordinary least squares method we defined then\n", "an approximation to the function $f$ in terms of the parameters\n", "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$. \n", "\n", "Thereafter we found the parameters $\\boldsymbol{\\beta}$ by optimizing the means squared error via the so-called cost function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can rewrite this as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The three terms represent the square of the bias of the learning\n", "method, which can be thought of as the error caused by the simplifying\n", "assumptions built into the method. The second term represents the\n", "variance of the chosen model and finally the last terms is variance of\n", "the error $\\boldsymbol{\\epsilon}$.\n", "\n", "To derive this equation, we need to recall that the variance of $\\boldsymbol{y}$ and $\\boldsymbol{\\epsilon}$ are both equal to $\\sigma^2$. The mean value of $\\boldsymbol{\\epsilon}$ is by definition equal to zero. Furthermore, the function $f$ is not a stochastics variable, idem for $\\boldsymbol{\\tilde{y}}$.\n", "We use a more compact notation in terms of the expectation value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}})^2\\right],\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and adding and subtracting $\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]$ we get" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}}+\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right],\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which, using the abovementioned expectation values can be rewritten as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{y}-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right]+\\mathrm{Var}\\left[\\boldsymbol{\\tilde{y}}\\right]+\\sigma^2,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "that is the rewriting in terms of the so-called bias, the variance of the model $\\boldsymbol{\\tilde{y}}$ and the variance of $\\boldsymbol{\\epsilon}$.\n", "\n", "\n", "\n", "\n", "\n", "## Example code for Bias-Variance tradeoff" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.utils import resample\n", "\n", "np.random.seed(2018)\n", "\n", "n = 500\n", "n_boostraps = 100\n", "degree = 18 # A quite high value, just to show.\n", "noise = 0.1\n", "\n", "# Make data set.\n", "x = np.linspace(-1, 3, n).reshape(-1, 1)\n", "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2) + np.random.normal(0, 0.1, x.shape)\n", "\n", "# Hold out some test data that is never used in training.\n", "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", "\n", "# Combine x transformation and model into one operation.\n", "# Not neccesary, but convenient.\n", "model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", "\n", "# The following (m x n_bootstraps) matrix holds the column vectors y_pred\n", "# for each bootstrap iteration.\n", "y_pred = np.empty((y_test.shape[0], n_boostraps))\n", "for i in range(n_boostraps):\n", " x_, y_ = resample(x_train, y_train)\n", "\n", " # Evaluate the new model on the same test data each time.\n", " y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()\n", "\n", "# Note: Expectations and variances taken w.r.t. different training\n", "# data sets, hence the axis=1. Subsequent means are taken across the test data\n", "# set in order to obtain a total value, but before this we have error/bias/variance\n", "# calculated per data point in the test set.\n", "# Note 2: The use of keepdims=True is important in the calculation of bias as this \n", "# maintains the column vector form. Dropping this yields very unexpected results.\n", "error = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n", "bias = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n", "variance = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n", "print('Error:', error)\n", "print('Bias^2:', bias)\n", "print('Var:', variance)\n", "print('{} >= {} + {} = {}'.format(error, bias, variance, bias+variance))\n", "\n", "plt.plot(x[::5, :], y[::5, :], label='f(x)')\n", "plt.scatter(x_test, y_test, label='Data points')\n", "plt.scatter(x_test, np.mean(y_pred, axis=1), label='Pred')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Understanding what happens" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Polynomial degree: 0\n", "Error: 0.2937910450030775\n", "Bias^2: 0.2929212799917661\n", "Var: 0.0008697650113114119\n", "0.2937910450030775 >= 0.2929212799917661 + 0.0008697650113114119 = 0.2937910450030775\n", "Polynomial degree: 1\n", "Error: 0.06894146856540674\n", "Bias^2: 0.06832043024896824\n", "Var: 0.0006210383164384989\n", "0.06894146856540674 >= 0.06832043024896824 + 0.0006210383164384989 = 0.06894146856540674\n", "Polynomial degree: 2\n", "Error: 0.06106765054837855\n", "Bias^2: 0.060547654220995305\n", "Var: 0.0005199963273832372\n", "0.06106765054837855 >= 0.060547654220995305 + 0.0005199963273832372 = 0.061067650548378545\n", "Polynomial degree: 3\n", "Error: 0.03346202229536659\n", "Bias^2: 0.0331409564680546\n", "Var: 0.00032106582731199456\n", "0.03346202229536659 >= 0.0331409564680546 + 0.00032106582731199456 = 0.03346202229536659\n", "Polynomial degree: 4\n", "Error: 0.0335277871704832\n", "Bias^2: 0.03311607538577367\n", "Var: 0.0004117117847095335\n", "0.0335277871704832 >= 0.03311607538577367 + 0.0004117117847095335 = 0.03352778717048321\n", "Polynomial degree: 5\n", "Error: 0.025517151530854786\n", "Bias^2: 0.024968890209256463\n", "Var: 0.0005482613215983259\n", "0.025517151530854786 >= 0.024968890209256463 + 0.0005482613215983259 = 0.02551715153085479\n", "Polynomial degree: 6\n", "Error: 0.01994607606842793\n", "Bias^2: 0.019502076889868637\n", "Var: 0.00044399917855929527\n", "0.01994607606842793 >= 0.019502076889868637 + 0.00044399917855929527 = 0.019946076068427934\n", "Polynomial degree: 7\n", "Error: 0.018695928655417676\n", "Bias^2: 0.01797984009000237\n", "Var: 0.0007160885654153078\n", "0.018695928655417676 >= 0.01797984009000237 + 0.0007160885654153078 = 0.01869592865541768\n", "Polynomial degree: 8\n", "Error: 0.010736105188369479\n", "Bias^2: 0.010376602508045063\n", "Var: 0.00035950268032441344\n", "0.010736105188369479 >= 0.010376602508045063 + 0.00035950268032441344 = 0.010736105188369477\n", "Polynomial degree: 9\n", "Error: 0.01101329065273084\n", "Bias^2: 0.010539027867197629\n", "Var: 0.0004742627855332104\n", "0.01101329065273084 >= 0.010539027867197629 + 0.0004742627855332104 = 0.01101329065273084\n", "Polynomial degree: 10\n", "Error: 0.010972468815261078\n", "Bias^2: 0.010593565969983903\n", "Var: 0.00037890284527716995\n", "0.010972468815261078 >= 0.010593565969983903 + 0.00037890284527716995 = 0.010972468815261073\n", "Polynomial degree: 11\n", "Error: 0.01084055593776807\n", "Bias^2: 0.010348475861989281\n", "Var: 0.0004920800757787882\n", "0.01084055593776807 >= 0.010348475861989281 + 0.0004920800757787882 = 0.01084055593776807\n", "Polynomial degree: 12\n", "Error: 0.010192472149429362\n", "Bias^2: 0.009610568640072627\n", "Var: 0.0005819035093567355\n", "0.010192472149429362 >= 0.009610568640072627 + 0.0005819035093567355 = 0.010192472149429362\n", "Polynomial degree: 13\n", "Error: 0.010312285920590011\n", "Bias^2: 0.009802534263801815\n", "Var: 0.0005097516567881938\n", "0.010312285920590011 >= 0.009802534263801815 + 0.0005097516567881938 = 0.01031228592059001\n", "Polynomial degree: 14\n", "Error: 0.010722455299595876\n", "Bias^2: 0.01008891676024437\n", "Var: 0.0006335385393515036\n", "0.010722455299595876 >= 0.01008891676024437 + 0.0006335385393515036 = 0.010722455299595875\n", "Polynomial degree: 15\n", "Error: 0.011155437503231998\n", "Bias^2: 0.010311761228670724\n", "Var: 0.0008436762745612778\n", "0.011155437503231998 >= 0.010311761228670724 + 0.0008436762745612778 = 0.011155437503232002\n", "Polynomial degree: 16\n", "Error: 0.011028026782676708\n", "Bias^2: 0.010223572382311492\n", "Var: 0.0008044544003652116\n", "0.011028026782676708 >= 0.010223572382311492 + 0.0008044544003652116 = 0.011028026782676703\n", "Polynomial degree: 17\n", "Error: 0.011628743129658555\n", "Bias^2: 0.010533948734129592\n", "Var: 0.001094794395528961\n", "0.011628743129658555 >= 0.010533948734129592 + 0.001094794395528961 = 0.011628743129658553\n", "Polynomial degree: 18\n", "Error: 0.014371682171531027\n", "Bias^2: 0.010922362242870073\n", "Var: 0.0034493199286609573\n", "0.014371682171531027 >= 0.010922362242870073 + 0.0034493199286609573 = 0.01437168217153103\n", "Polynomial degree: 19\n", "Error: 0.026986306199342624\n", "Bias^2: 0.01214176442858653\n", "Var: 0.014844541770756087\n", "0.026986306199342624 >= 0.01214176442858653 + 0.014844541770756087 = 0.026986306199342617\n", "Polynomial degree: 20\n", "Error: 0.012249244024160728\n", "Bias^2: 0.01006785246285396\n", "Var: 0.002181391561306766\n", "0.012249244024160728 >= 0.01006785246285396 + 0.002181391561306766 = 0.012249244024160727\n", "Polynomial degree: 21\n", "Error: 0.014973172820830053\n", "Bias^2: 0.010154371176360328\n", "Var: 0.00481880164446972\n", "0.014973172820830053 >= 0.010154371176360328 + 0.00481880164446972 = 0.014973172820830048\n", "Polynomial degree: 22\n", "Error: 0.014186606932681737\n", "Bias^2: 0.009594131981212376\n", "Var: 0.0045924749514693625\n", "0.014186606932681737 >= 0.009594131981212376 + 0.0045924749514693625 = 0.014186606932681738\n", "Polynomial degree: 23\n", "Error: 0.025574552577788824\n", "Bias^2: 0.009477519033249752\n", "Var: 0.016097033544539077\n", "0.025574552577788824 >= 0.009477519033249752 + 0.016097033544539077 = 0.02557455257778883\n", "Polynomial degree: 24\n", "Error: 0.03147298632679604\n", "Bias^2: 0.009565267585507206\n", "Var: 0.021907718741288846\n", "0.03147298632679604 >= 0.009565267585507206 + 0.021907718741288846 = 0.03147298632679605\n", "Polynomial degree: 25\n", "Error: 0.03929027799369515\n", "Bias^2: 0.009776269005896726\n", "Var: 0.029514008987798424\n", "0.03929027799369515 >= 0.009776269005896726 + 0.029514008987798424 = 0.03929027799369515\n", "Polynomial degree: 26\n", "Error: 0.15813256009613183\n", "Bias^2: 0.013239726753028333\n", "Var: 0.14489283334310352\n", "0.15813256009613183 >= 0.013239726753028333 + 0.14489283334310352 = 0.15813256009613186\n", "Polynomial degree: 27\n", "Error: 0.1360840943498259\n", "Bias^2: 0.01326608592145169\n", "Var: 0.12281800842837416\n", "0.1360840943498259 >= 0.01326608592145169 + 0.12281800842837416 = 0.13608409434982585\n", "Polynomial degree: 28\n", "Error: 0.7210723692205014\n", "Bias^2: 0.04436186918146108\n", "Var: 0.6767105000390408\n", "0.7210723692205014 >= 0.04436186918146108 + 0.6767105000390408 = 0.7210723692205019\n", "Polynomial degree: 29\n", "Error: 0.48454430745837984\n", "Bias^2: 0.011809368338879722\n", "Var: 0.4727349391195001\n", "0.48454430745837984 >= 0.011809368338879722 + 0.4727349391195001 = 0.48454430745837984\n" ] }, { "data": { "image/png": "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AIAS53qekpmkJBFoJ0CgBQAAKHFJOyP505IItBMh0AIAAJQ4y07LMLOBlh7aoxFoAQAASlx2ZJcjiR3aiRBoAQAASlzCdsZ2aAm0RyPQAgAAlLjRGbQSLQcTIdACAACUOCvpyDBpOZgMgRYAAKDEje7QBnwBmT6OEXglAi0AAECJSySzPbTszk6MQAsAAFDiLNuRP+AoTP/shAi0AAAAJS4baDn2djIEWgAAgBI32nJQSaCdEIEWAACgxI3eFEbLwcQItAAAACXOSjryfNwUNhkCLQAAQIkbtlNyCbSTItACAACUuISTlMQpYZMh0AIAAJQwz/PGAi07tBMj0AIAAJQwO52R50tJItBOhkALAABQwqyRkV2SGNs1CQItAABACcuO7HIkibFdkyDQAgAAlLCEfXiHlpaDiRFoAQAASpiVdGT4aTk4FgItAABACbNsRzLT8smnCn+w2OWUJAItAABACcvu0DqqNCtlGEaxyylJeQXa7du3a+3atVq9erW2bt161PM/+9nP1NbWpiuuuEI33XSTUqnUtBcKAAAwFyVGdmi5IWxyOQNtZ2enNm/erG3btunee+/VXXfdpb179449b1mWbrvtNn3nO9/RT37yE9m2rR/+8IcFLRoAAGCusGxHvoBDoD2GnIF2165dWrFiherq6hQOh7VmzRrt2LFj7PlwOKwHH3xQ8+bNUyKRUE9Pj2pqagpaNAAAwFxhJR35TYcJB8eQM9B2dXUpGo2OPW5qalJnZ+e4awKBgH75y1/qL//yL9XX16fXvva1018pAADAHGTZjgwC7TGZuS5wXXdcA7LneRM2JL/uda/Tww8/rC996Uu69dZb9cUvfjHvIhobI3lfO52i0eqifC6OjXUpTaxL6WJtShPrUprKcV0c15PMtBqqa8qy/nydyHfLGWhjsZj27Nkz9jgej6upqWnscX9/v5588smxXdm2tjZt2rRpSkX09AzJdb0pveZERaPViscHZ/QzkRvrUppYl9LF2pQm1qU0leu69A8m5damZDhmWdafj1xr4/MZx9wAzdlysHLlSu3evVu9vb1KJBLauXOnVq1aNfa853n68Ic/rPb2dknSjh07dN55503lO8y4rj5LqXSm2GUAAADkZKVsyfBoOTiGnDu0zc3N2rRpk9avX690Oq1169Zp2bJl2rBhgzZu3KilS5fqk5/8pK6/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t90mdaYAOBwOnnnmGbZs2cKtt946Lb8zcyqhtSwLpVRmXGudMy7yY+3atTz55JOUlZVRXV3NfffdxxtvvJHvsESK1JvCNW/ePJ577jn8fj8ej4eHHnpI6k6eHDt2jEceeYQ///M/Z968eVJnCkh22SxcuFDqTIH44he/yK5du+ju7qajo2PKdWZOJbT19fX09/dnxvv7+zOH7kT+vP/+++zatSszrrXGbrfnMSKRTepN4Tpy5AivvPJKZlzqTn588MEH/P7v/z5/9md/xqc//WmpMwVkYtlIncm/48ePc+jQIQA8Hg+bN29m9+7dU64zcyqh3bBhA7t27WJoaIhwOMzOnTv55Cc/me+w5ryxsTGefPJJotEogUCAn/70p9x+++35DkukrF69mpMnT3Lq1CkSiQS/+MUvpN4UCK01TzzxBCMjI8TjcX784x9L3bnGuru7+eM//mOeeuoptmzZAkidKRSTlY3Umfw7e/YsX/va14jFYsRiMX71q1+xY8eOKdeZObVbUldXx2OPPcbDDz9MPB7nvvvuY9WqVfkOa87btGkT+/btY/v27ViWxQMPPMDatWvzHZZIcblcfOc73+ELX/gC0WiUjRs3cuedd+Y7LAFcd911fP7zn+f+++/HNE02b97M1q1b8x3WnPL973+faDTKd77zncy0HTt2SJ0pABcqG6kz+bVx40b279/P9u3bsdlsbN68mS1btlBdXT2lOqO01nqGYhZCCCGEEGLGzakuB0IIIYQQYvaRhFYIIYQQQhQ1SWiFEEIIIURRk4RWCCGEEEIUNUlohRBCCCFEUZOEVgghhBBCFDVJaIUQQgghRFGThFYIIYQQQhS1/w/t6SApUuQsvQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.utils import resample\n", "\n", "np.random.seed(2018)\n", "\n", "n = 400\n", "n_boostraps = 100\n", "maxdegree = 30\n", "\n", "\n", "# Make data set.\n", "x = np.linspace(-3, 3, n).reshape(-1, 1)\n", "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n", "error = np.zeros(maxdegree)\n", "bias = np.zeros(maxdegree)\n", "variance = np.zeros(maxdegree)\n", "polydegree = np.zeros(maxdegree)\n", "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", "\n", "for degree in range(maxdegree):\n", " model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", " y_pred = np.empty((y_test.shape[0], n_boostraps))\n", " for i in range(n_boostraps):\n", " x_, y_ = resample(x_train, y_train)\n", " y_pred[:, i] = model.fit(x_, y_).predict(x_test).ravel()\n", "\n", " polydegree[degree] = degree\n", " error[degree] = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n", " bias[degree] = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n", " variance[degree] = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n", " print('Polynomial degree:', degree)\n", " print('Error:', error[degree])\n", " print('Bias^2:', bias[degree])\n", " print('Var:', variance[degree])\n", " print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))\n", "\n", "plt.plot(polydegree, error, label='Error')\n", "plt.plot(polydegree, bias, label='bias')\n", "plt.plot(polydegree, variance, label='Variance')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Summing up\n", "\n", "\n", "\n", "\n", "The bias-variance tradeoff summarizes the fundamental tension in\n", "machine learning, particularly supervised learning, between the\n", "complexity of a model and the amount of training data needed to train\n", "it. Since data is often limited, in practice it is often useful to\n", "use a less-complex model with higher bias, that is a model whose asymptotic\n", "performance is worse than another model because it is easier to\n", "train and less sensitive to sampling noise arising from having a\n", "finite-sized training dataset (smaller variance). \n", "\n", "\n", "\n", "The above equations tell us that in\n", "order to minimize the expected test error, we need to select a\n", "statistical learning method that simultaneously achieves low variance\n", "and low bias. Note that variance is inherently a nonnegative quantity,\n", "and squared bias is also nonnegative. Hence, we see that the expected\n", "test MSE can never lie below $Var(\\epsilon)$, the irreducible error.\n", "\n", "\n", "What do we mean by the variance and bias of a statistical learning\n", "method? The variance refers to the amount by which our model would change if we\n", "estimated it using a different training data set. Since the training\n", "data are used to fit the statistical learning method, different\n", "training data sets will result in a different estimate. But ideally the\n", "estimate for our model should not vary too much between training\n", "sets. However, if a method has high variance then small changes in\n", "the training data can result in large changes in the model. In general, more\n", "flexible statistical methods have higher variance.\n", "\n", "\n", "You may also find this recent [article](https://www.pnas.org/content/116/32/15849) of interest.\n", "\n", "## Another Example from Scikit-Learn's Repository" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\"\"\"\n", "============================\n", "Underfitting vs. Overfitting\n", "============================\n", "\n", "This example demonstrates the problems of underfitting and overfitting and\n", "how we can use linear regression with polynomial features to approximate\n", "nonlinear functions. The plot shows the function that we want to approximate,\n", "which is a part of the cosine function. In addition, the samples from the\n", "real function and the approximations of different models are displayed. The\n", "models have polynomial features of different degrees. We can see that a\n", "linear function (polynomial with degree 1) is not sufficient to fit the\n", "training samples. This is called **underfitting**. A polynomial of degree 4\n", "approximates the true function almost perfectly. However, for higher degrees\n", "the model will **overfit** the training data, i.e. it learns the noise of the\n", "training data.\n", "We evaluate quantitatively **overfitting** / **underfitting** by using\n", "cross-validation. We calculate the mean squared error (MSE) on the validation\n", "set, the higher, the less likely the model generalizes correctly from the\n", "training data.\n", "\"\"\"\n", "\n", "print(__doc__)\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.model_selection import cross_val_score\n", "\n", "\n", "def true_fun(X):\n", " return np.cos(1.5 * np.pi * X)\n", "\n", "np.random.seed(0)\n", "\n", "n_samples = 30\n", "degrees = [1, 4, 15]\n", "\n", "X = np.sort(np.random.rand(n_samples))\n", "y = true_fun(X) + np.random.randn(n_samples) * 0.1\n", "\n", "plt.figure(figsize=(14, 5))\n", "for i in range(len(degrees)):\n", " ax = plt.subplot(1, len(degrees), i + 1)\n", " plt.setp(ax, xticks=(), yticks=())\n", "\n", " polynomial_features = PolynomialFeatures(degree=degrees[i],\n", " include_bias=False)\n", " linear_regression = LinearRegression()\n", " pipeline = Pipeline([(\"polynomial_features\", polynomial_features),\n", " (\"linear_regression\", linear_regression)])\n", " pipeline.fit(X[:, np.newaxis], y)\n", "\n", " # Evaluate the models using crossvalidation\n", " scores = cross_val_score(pipeline, X[:, np.newaxis], y,\n", " scoring=\"neg_mean_squared_error\", cv=10)\n", "\n", " X_test = np.linspace(0, 1, 100)\n", " plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label=\"Model\")\n", " plt.plot(X_test, true_fun(X_test), label=\"True function\")\n", " plt.scatter(X, y, edgecolor='b', s=20, label=\"Samples\")\n", " plt.xlabel(\"x\")\n", " plt.ylabel(\"y\")\n", " plt.xlim((0, 1))\n", " plt.ylim((-2, 2))\n", " plt.legend(loc=\"best\")\n", " plt.title(\"Degree {}\\nMSE = {:.2e}(+/- {:.2e})\".format(\n", " degrees[i], -scores.mean(), scores.std()))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More examples on bootstrap and cross-validation and errors" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Common imports\n", "import os\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.utils import resample\n", "from sklearn.metrics import mean_squared_error\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "infile = open(data_path(\"EoS.csv\"),'r')\n", "\n", "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", "EoS = EoS.dropna()\n", "Energies = EoS['Energy']\n", "Density = EoS['Density']\n", "# The design matrix now as function of various polytrops\n", "\n", "Maxpolydegree = 30\n", "X = np.zeros((len(Density),Maxpolydegree))\n", "X[:,0] = 1.0\n", "testerror = np.zeros(Maxpolydegree)\n", "trainingerror = np.zeros(Maxpolydegree)\n", "polynomial = np.zeros(Maxpolydegree)\n", "\n", "trials = 100\n", "for polydegree in range(1, Maxpolydegree):\n", " polynomial[polydegree] = polydegree\n", " for degree in range(polydegree):\n", " X[:,degree] = Density**(degree/3.0)\n", "\n", "# loop over trials in order to estimate the expectation value of the MSE\n", " testerror[polydegree] = 0.0\n", " trainingerror[polydegree] = 0.0\n", " for samples in range(trials):\n", " x_train, x_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)\n", " model = LinearRegression(fit_intercept=True).fit(x_train, y_train)\n", " ypred = model.predict(x_train)\n", " ytilde = model.predict(x_test)\n", " testerror[polydegree] += mean_squared_error(y_test, ytilde)\n", " trainingerror[polydegree] += mean_squared_error(y_train, ypred) \n", "\n", " testerror[polydegree] /= trials\n", " trainingerror[polydegree] /= trials\n", " print(\"Degree of polynomial: %3d\"% polynomial[polydegree])\n", " print(\"Mean squared error on training data: %.8f\" % trainingerror[polydegree])\n", " print(\"Mean squared error on test data: %.8f\" % testerror[polydegree])\n", "\n", "plt.plot(polynomial, np.log10(trainingerror), label='Training Error')\n", "plt.plot(polynomial, np.log10(testerror), label='Test Error')\n", "plt.xlabel('Polynomial degree')\n", "plt.ylabel('log10[MSE]')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## The same example but now with cross-validation" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Common imports\n", "import os\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.model_selection import KFold\n", "from sklearn.model_selection import cross_val_score\n", "\n", "\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "infile = open(data_path(\"EoS.csv\"),'r')\n", "\n", "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", "EoS = EoS.dropna()\n", "Energies = EoS['Energy']\n", "Density = EoS['Density']\n", "# The design matrix now as function of various polytrops\n", "\n", "Maxpolydegree = 30\n", "X = np.zeros((len(Density),Maxpolydegree))\n", "X[:,0] = 1.0\n", "estimated_mse_sklearn = np.zeros(Maxpolydegree)\n", "polynomial = np.zeros(Maxpolydegree)\n", "k =5\n", "kfold = KFold(n_splits = k)\n", "\n", "for polydegree in range(1, Maxpolydegree):\n", " polynomial[polydegree] = polydegree\n", " for degree in range(polydegree):\n", " X[:,degree] = Density**(degree/3.0)\n", " OLS = LinearRegression()\n", "# loop over trials in order to estimate the expectation value of the MSE\n", " estimated_mse_folds = cross_val_score(OLS, X, Energies, scoring='neg_mean_squared_error', cv=kfold)\n", "#[:, np.newaxis]\n", " estimated_mse_sklearn[polydegree] = np.mean(-estimated_mse_folds)\n", "\n", "plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')\n", "plt.xlabel('Polynomial degree')\n", "plt.ylabel('log10[MSE]')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-validation with Ridge" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.model_selection import KFold\n", "from sklearn.linear_model import Ridge\n", "from sklearn.model_selection import cross_val_score\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "# A seed just to ensure that the random numbers are the same for every run.\n", "np.random.seed(3155)\n", "# Generate the data.\n", "n = 100\n", "x = np.linspace(-3, 3, n).reshape(-1, 1)\n", "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n", "# Decide degree on polynomial to fit\n", "poly = PolynomialFeatures(degree = 10)\n", "\n", "# Decide which values of lambda to use\n", "nlambdas = 500\n", "lambdas = np.logspace(-3, 5, nlambdas)\n", "# Initialize a KFold instance\n", "k = 5\n", "kfold = KFold(n_splits = k)\n", "estimated_mse_sklearn = np.zeros(nlambdas)\n", "i = 0\n", "for lmb in lambdas:\n", " ridge = Ridge(alpha = lmb)\n", " estimated_mse_folds = cross_val_score(ridge, x, y, scoring='neg_mean_squared_error', cv=kfold)\n", " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", " i += 1\n", "plt.figure()\n", "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", "plt.xlabel('log10(lambda)')\n", "plt.ylabel('MSE')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Ising model\n", "\n", "The one-dimensional Ising model with nearest neighbor interaction, no\n", "external field and a constant coupling constant $J$ is given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " H = -J \\sum_{k}^L s_k s_{k + 1},\n", "\\label{_auto2} \\tag{2}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $s_i \\in \\{-1, 1\\}$ and $s_{N + 1} = s_1$. The number of spins\n", "in the system is determined by $L$. For the one-dimensional system\n", "there is no phase transition.\n", "\n", "We will look at a system of $L = 40$ spins with a coupling constant of\n", "$J = 1$. To get enough training data we will generate 10000 states\n", "with their respective energies." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "import seaborn as sns\n", "import scipy.linalg as scl\n", "from sklearn.model_selection import train_test_split\n", "import tqdm\n", "sns.set(color_codes=True)\n", "cmap_args=dict(vmin=-1., vmax=1., cmap='seismic')\n", "\n", "L = 40\n", "n = int(1e4)\n", "\n", "spins = np.random.choice([-1, 1], size=(n, L))\n", "J = 1.0\n", "\n", "energies = np.zeros(n)\n", "\n", "for i in range(n):\n", " energies[i] = - J * np.dot(spins[i], np.roll(spins[i], 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we use ordinary least squares\n", "regression to predict the energy for the nearest neighbor\n", "one-dimensional Ising model on a ring, i.e., the endpoints wrap\n", "around. We will use linear regression to fit a value for\n", "the coupling constant to achieve this.\n", "\n", "## Reformulating the problem to suit regression\n", "\n", "A more general form for the one-dimensional Ising model is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " H = - \\sum_j^L \\sum_k^L s_j s_k J_{jk}.\n", "\\label{_auto3} \\tag{3}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we allow for interactions beyond the nearest neighbors and a state dependent\n", "coupling constant. This latter expression can be formulated as\n", "a matrix-product" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " \\boldsymbol{H} = \\boldsymbol{X} J,\n", "\\label{_auto4} \\tag{4}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $X_{jk} = s_j s_k$ and $J$ is a matrix which consists of the\n", "elements $-J_{jk}$. This form of writing the energy fits perfectly\n", "with the form utilized in linear regression, that is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " \\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta} + \\boldsymbol{\\epsilon},\n", "\\label{_auto5} \\tag{5}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We split the data in training and test data as discussed in the previous example" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "X = np.zeros((n, L ** 2))\n", "for i in range(n):\n", " X[i] = np.outer(spins[i], spins[i]).ravel()\n", "y = energies\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear regression\n", "\n", "In the ordinary least squares method we choose the cost function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " C(\\boldsymbol{X}, \\boldsymbol{\\beta})= \\frac{1}{n}\\left\\{(\\boldsymbol{X}\\boldsymbol{\\beta} - \\boldsymbol{y})^T(\\boldsymbol{X}\\boldsymbol{\\beta} - \\boldsymbol{y})\\right\\}.\n", "\\label{_auto6} \\tag{6}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then find the extremal point of $C$ by taking the derivative with respect to $\\boldsymbol{\\beta}$ as discussed above.\n", "This yields the expression for $\\boldsymbol{\\beta}$ to be" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} = \\frac{\\boldsymbol{X}^T \\boldsymbol{y}}{\\boldsymbol{X}^T \\boldsymbol{X}},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which immediately imposes some requirements on $\\boldsymbol{X}$ as there must exist\n", "an inverse of $\\boldsymbol{X}^T \\boldsymbol{X}$. If the expression we are modeling contains an\n", "intercept, i.e., a constant term, we must make sure that the\n", "first column of $\\boldsymbol{X}$ consists of $1$. We do this here" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X_train_own = np.concatenate(\n", " (np.ones(len(X_train))[:, np.newaxis], X_train),\n", " axis=1\n", ")\n", "X_test_own = np.concatenate(\n", " (np.ones(len(X_test))[:, np.newaxis], X_test),\n", " axis=1\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "LinAlgError", "evalue": "singular matrix", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mLinAlgError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mols_inv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mscl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mbeta\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mols_inv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train_own\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36mols_inv\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mols_inv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mscl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mbeta\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mols_inv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train_own\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/scipy/linalg/basic.py\u001b[0m in \u001b[0;36minv\u001b[0;34m(a, overwrite_a, check_finite)\u001b[0m\n\u001b[1;32m 977\u001b[0m \u001b[0minv_a\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minfo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetri\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpiv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlwork\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlwork\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite_lu\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 978\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minfo\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 979\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"singular matrix\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 980\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minfo\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 981\u001b[0m raise ValueError('illegal value in %d-th argument of internal '\n", "\u001b[0;31mLinAlgError\u001b[0m: singular matrix" ] } ], "source": [ "def ols_inv(x: np.ndarray, y: np.ndarray) -> np.ndarray:\n", " return scl.inv(x.T @ x) @ (x.T @ y)\n", "beta = ols_inv(X_train_own, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Singular Value decomposition\n", "\n", "Doing the inversion directly turns out to be a bad idea since the matrix\n", "$\\boldsymbol{X}^T\\boldsymbol{X}$ is singular. An alternative approach is to use the **singular\n", "value decomposition**. Using the definition of the Moore-Penrose\n", "pseudoinverse we can write the equation for $\\boldsymbol{\\beta}$ as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} = \\boldsymbol{X}^{+}\\boldsymbol{y},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where the pseudoinverse of $\\boldsymbol{X}$ is given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^{+} = \\frac{\\boldsymbol{X}^T}{\\boldsymbol{X}^T\\boldsymbol{X}}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using singular value decomposition we can decompose the matrix $\\boldsymbol{X} = \\boldsymbol{U}\\boldsymbol{\\Sigma} \\boldsymbol{V}^T$,\n", "where $\\boldsymbol{U}$ and $\\boldsymbol{V}$ are orthogonal(unitary) matrices and $\\boldsymbol{\\Sigma}$ contains the singular values (more details below).\n", "where $X^{+} = V\\Sigma^{+} U^T$. This reduces the equation for\n", "$\\omega$ to" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " \\boldsymbol{\\beta} = \\boldsymbol{V}\\boldsymbol{\\Sigma}^{+} \\boldsymbol{U}^T \\boldsymbol{y}.\n", "\\label{_auto7} \\tag{7}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that solving this equation by actually doing the pseudoinverse\n", "(which is what we will do) is not a good idea as this operation scales\n", "as $\\mathcal{O}(n^3)$, where $n$ is the number of elements in a\n", "general matrix. Instead, doing $QR$-factorization and solving the\n", "linear system as an equation would reduce this down to\n", "$\\mathcal{O}(n^2)$ operations." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def ols_svd(x: np.ndarray, y: np.ndarray) -> np.ndarray:\n", " u, s, v = scl.svd(x)\n", " return v.T @ scl.pinv(scl.diagsvd(s, u.shape[0], v.shape[0])) @ u.T @ y" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "beta = ols_svd(X_train_own,y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When extracting the $J$-matrix we need to make sure that we remove the intercept, as is done here" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "J = beta[1:].reshape(L, L)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A way of looking at the coefficients in $J$ is to plot the matrices as images." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4IAAAM2CAYAAACjUj0CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdfaxdVZk4/ufse6cvlNZ4Y20KBXmJxpkSS38TLyPzHSVSixawOMhb6hehgg7RP4TMIBpGRzIjAzpfEoKDxCIIFtAmWNKpQ8yYMerASERnhveBUklpyptgX7XlnnN+f5ReuN72nn3a1XPWvvvzSfrPOat7P/vZa+9znrvWWbvRbrfbAQAAQG0U/Q4AAACA3lIIAgAA1IxCEAAAoGYUggAAADWjEAQAAKgZhSAAAEDNDPY7AACqb9euXbFy5cpYu3ZtPP3009FoNOLII4+MU089Nc4555yYOXPmaNsrrrgivv/978ePfvSjmDdv3oTbbbVa8d3vfje+//3vx1NPPRWtVisOP/zwWLRoUVx00UVjtgsAlKcQBOCAPP/883HRRRfFk08+GYsWLYqPfOQj0W6341e/+lVcd9118d3vfjduuummOOaYY7re9uWXXx4/+MEP4kMf+lCcfvrpURRFPPzww7FixYq4995746677oo3v/nNB+GoAGByUwgCsN927doVl1xySTz77LNxyy23xHve857R9z72sY/F+eefH5/85Cfj4osvjn/5l3+J6dOnl972L3/5y1izZk1cccUVceGFF455773vfW989rOfjRUrVsTf/M3fJDseAKgLvxEEYL+tXr06Hnnkkfjc5z43pgjcY8GCBfGFL3whnn322bj55pu72vavfvWriIj48z//83HvfehDH4o5c+bEf/3Xf+1f4ABQcwpBAPbb6tWr45BDDomPfOQj+2zz4Q9/OGbPnh1r1qzpatszZsyIiIjvfe970Wq1xr3/b//2b7Fy5cruAgYAIkIhCMB+ajab8dBDD8Wf/MmfxNSpU/fZrtFoxAknnBC//vWv48UXXyy9/cWLF8eb3vSmuP3222PRokVxzTXXxE9+8pPYsWNHRERMmTLlgI8BAOpKIQjAftm8eXPs2rUrZs+e3bHtW9/61oiIeOGFF0pvf2hoKL75zW/GEUccERs3boxvfetbcfHFF8fw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x3/8x39ERMRTTz0VERHHHnvsQQoVAAAgX7muGro3HQvBQw89NO69994xReAer7zySgwMDERExJNPPhkRrxeCO3bsiEMOOWR/4gUAAOAg6vhUx4GBgTjqqKNizpw5Y15//PHH45e//GUsXLgwInYXgjNmzIirr746Fi5cGAsXLoxFixbF2rVrD07kAAAA7Jf9enzE9u3b43Of+1xERHzyk5+MiN1TQ7dv3x5bt26Na6+9NrZs2RK33XZbXHbZZfHqq6/GGWec0dU+io4lark2JWrd0tJtKf3WUikbVbncpzT5z2O+ua+Lkomt8AnIN/J0uc/1+k6p1Uq5tXS570tcddDzfp92i5W+Jvtwv690voiISbhq6Bv97ne/i0suuSQef/zx+NSnPhXDw8MREXH22WdHq9WKZcuWjbY99dRT47TTTouvfvWrcfrpp49OIy2j0wdKUZT70Cki3SdTK+mNMeknZjJljrFs7lOqw3nMNfd1UepcVvwEpOz7KaXMfa7Xd0rFYLpjbI2ky33P46qDPvT7iHp85nbeWX/u95XNV1kV/mPqZNTV2diyZUssX748fv7zn8eZZ54Zl1566eh755133pgiMCJi2rRpsXTp0njppZdGF5MBAACgv0qPCP7mN7+JT3ziE/HYY4/FOeecE1/+8pej0Wh0/H9DQ0MRsXvxGAAAgMmqSquGlhoR3LZt22gReMEFF8RVV101pgh8/vnn49RTT40bbrhh3P9dv359RETMmzevy7ABAAA4GEoVgldddVU89thjcf7558fnP//5ce/PmTMntm7dGqtWrYpt27aNvr5p06a4++6744QTTojZs2enixoAAID91nFq6Lp16+Kee+6JmTNnxh//8R/HPffcM67N0qVL44tf/GJ8+tOfjnPPPTfOOuus2L59e6xcuTIGBwfjS1/60kEJHgAAIBeTatXQBx54ICIitm7dutfRwIjdheCiRYvi61//etx0003xta99LaZNmxbDw8Nx2WWXjT5kHgAAgP5rtNvtdr+D2BuPj+iPXB9hUIfzmGvu68LjI/rH4yO64/ERNeLxEWN4fER3sryH1eDxEVdeGfHyy/2O4nVDQxF///d7f2+/HijfC507b1Gqg0/6Cyr6cYzlcp9Srl9g65D71Kp8LovS7ap9jnpN7ruTskgqU7y1WiXbJYyrMZDub9TtZucVzvtB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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(20, 14))\n", "im = plt.imshow(J, **cmap_args)\n", "plt.title(\"OLS\", fontsize=18)\n", "plt.xticks(fontsize=18)\n", "plt.yticks(fontsize=18)\n", "cb = fig.colorbar(im)\n", "cb.ax.set_yticklabels(cb.ax.get_yticklabels(), fontsize=18)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is interesting to note that OLS\n", "considers both $J_{j, j + 1} = -0.5$ and $J_{j, j - 1} = -0.5$ as\n", "valid matrix elements for $J$.\n", "In our discussion below on hyperparameters and Ridge and Lasso regression we will see that\n", "this problem can be removed, partly and only with Lasso regression. \n", "\n", "In this case our matrix inversion was actually possible. The obvious question now is what is the mathematics behind the SVD?\n", "\n", "\n", "\n", "\n", "\n", "## The one-dimensional Ising model\n", "\n", "Let us bring back the Ising model again, but now with an additional\n", "focus on Ridge and Lasso regression as well. We repeat some of the\n", "basic parts of the Ising model and the setup of the training and test\n", "data. The one-dimensional Ising model with nearest neighbor\n", "interaction, no external field and a constant coupling constant $J$ is\n", "given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " H = -J \\sum_{k}^L s_k s_{k + 1},\n", "\\label{_auto8} \\tag{8}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $s_i \\in \\{-1, 1\\}$ and $s_{N + 1} = s_1$. The number of spins in the system is determined by $L$. For the one-dimensional system there is no phase transition.\n", "\n", "We will look at a system of $L = 40$ spins with a coupling constant of $J = 1$. To get enough training data we will generate 10000 states with their respective energies." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "import seaborn as sns\n", "import scipy.linalg as scl\n", "from sklearn.model_selection import train_test_split\n", "import sklearn.linear_model as skl\n", "import tqdm\n", "sns.set(color_codes=True)\n", "cmap_args=dict(vmin=-1., vmax=1., cmap='seismic')\n", "\n", "L = 40\n", "n = int(1e4)\n", "\n", "spins = np.random.choice([-1, 1], size=(n, L))\n", "J = 1.0\n", "\n", "energies = np.zeros(n)\n", "\n", "for i in range(n):\n", " energies[i] = - J * np.dot(spins[i], np.roll(spins[i], 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A more general form for the one-dimensional Ising model is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " H = - \\sum_j^L \\sum_k^L s_j s_k J_{jk}.\n", "\\label{_auto9} \\tag{9}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we allow for interactions beyond the nearest neighbors and a more\n", "adaptive coupling matrix. This latter expression can be formulated as\n", "a matrix-product on the form" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " H = X J,\n", "\\label{_auto10} \\tag{10}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $X_{jk} = s_j s_k$ and $J$ is the matrix consisting of the\n", "elements $-J_{jk}$. This form of writing the energy fits perfectly\n", "with the form utilized in linear regression, viz." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " \\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta} + \\boldsymbol{\\epsilon}.\n", "\\label{_auto11} \\tag{11}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We organize the data as we did above" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "X = np.zeros((n, L ** 2))\n", "for i in range(n):\n", " X[i] = np.outer(spins[i], spins[i]).ravel()\n", "y = energies\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.96)\n", "\n", "X_train_own = np.concatenate(\n", " (np.ones(len(X_train))[:, np.newaxis], X_train),\n", " axis=1\n", ")\n", "\n", "X_test_own = np.concatenate(\n", " (np.ones(len(X_test))[:, np.newaxis], X_test),\n", " axis=1\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will do all fitting with **Scikit-Learn**," ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "clf = skl.LinearRegression().fit(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When extracting the $J$-matrix we make sure to remove the intercept" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "J_sk = clf.coef_.reshape(L, L)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And then we plot the results" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4IAAAM2CAYAAACjUj0CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdf1yV9f3/8SdwIkAkIhREQkIjhuavmZQ5c0Y4tdS2tB+mbWWtZbX6tJr18Vtbn5baWj/MVmuuH5qzcrl+6WdZ2W8r1/o0Naap+BvBCAmRgIDz/UM5iiDXpeclXHge99vNW7fOefO8Xlxc13XO+7zf532F+f1+vwAAAAAAISO8rQsAAAAAALQuOoIAAAAAEGLoCAIAAABAiKEjCAAAAAAhho4gAAAAAIQYOoIAAAAAEGLoCAI4aqZOnarTTjtN27Ztc9XOqxYtWqTTTjutyb+ePXvqrLPO0jXXXKNVq1a1dZmt4pNPPtFpp52mRYsWtep2t2/frokTJ6p3797KyclRaWlpq27frVWrVunGG2/U2WefrV69emnw4MG6+eabj+j42LZtm0477TQ98sgjgcdOO+00TZ06tcWfGzZsmCZOnNjosa+//lqVlZWO2/T6uQgAsONr6wIA4OKLL9ZZZ53V1mU4uvjii/X9738/8P81NTVau3atnnvuOf3zn//Uyy+/rLS0tDas8Ojr3r277rvvPvXv379Vtztz5kx9+umnuv7669WpUyclJCS06vbdeO+993TttdeqR48emjRpkhISErRjxw69+OKL+sc//qFHHnlEubm5rvMSEhJ03333HXbH7I477lB0dHTg/99991396le/0t///nfFxMQcVhYA4NhFRxBAm+vXr5/69evX1mU46tu3r8aMGdPk8f79++vmm2/Wk08+qd/85jetX1grSkxMbHYfHG1r167V9773PU2ZMqXVt+3W7373O2VlZen555/XcccdF3h80qRJGjNmjO6++24NHTpUPp+7l96YmJgj2tcHdzZXrlyp8vLyw84BABzbmBoKAEEaMWKEoqOj9e9//7utSzlmfffdd+rQoUNbl3FIpaWl2rRpk3Jychp1AiUpPj5eY8eOVUlJieM0aQAAWgsdQQBt7uDvJU2dOlU/+tGPtHLlSl1++eXq06ePBg0apHvuuUdVVVWNfraoqEi33XabzjzzTJ1++ukaO3asXnnllSbb+OijjzR58mTl5OSoZ8+e+sEPfqA777yz0UhJw3bnz5+vM844Q2eccYbee+89x/rDwsJ0/PHHy+/3N3p8/fr1mjJligYMGKA+ffrokksu0fvvv9/k5//9739r0qRJ6tevn37wgx/okUce0ezZs5vdJ83V5mYf+P1+zZ49W8OHD9fpp5+uQYMG6dZbb9WOHTsatVuwYIEuuOAC9enTRzk5OZoyZYrWrVsXeL657wjW1dVpzpw5Gj58eOB7cXfddVej7/E1/NyHH36o3/72tzrrrLPUp08fXXHFFVqzZs0h923Dz23fvl0rVqwIfGeu4fG///3vuuCCC3T66afr9ttvP+x6li9frv/+7//WGWecoe9///u6/fbbVVlZqXfffVdjxoxRnz59NGbMGH300UeHrFGSoqOjFRERobfeektfffVVk+dvuOEGffHFF0pPT2/0N5k7d67OP/989e7dW8OGDdP999+vb7/9VlLz3xE82IYNG5STk6Phw4erpKREUuPvCE6dOlWzZ8+WJJ177rlNvjvoRmucY4dzzgMAbDA1FIAnlZaW6qqrrtKIESM0evRovffee5o3b54iIyN12223SZKKi4s1btw4+f1+TZw4USeccILeeust3Xrrrdq5c6cmT54sSfrggw909dVXq3///rrxxhsVFhamDz/8UM8//7y+++47TZ8+PbDdHTt26NFHH9X111+vnTt3qk+fPnrrrbdarHXVqlUqKyvTsGHDAo+tXbtWl112mRITE/Xzn/9cxx13nF577TVdc801+sMf/qCRI0dKklavXq1JkyYpMTFRU6ZM0bfffqu5c+cqPLzp53TN1eZ2Hzz++ON69NFHNWHChMACPnPnztXq1av12muvKSIiQq+88op+85vfaOzYsZo4caJKS0v1zDPPaOLEiXrjjTfUsWPHZn//m2++Wa+//rry8vI0adIkbdy4UQsWLNDHH3+shQsXKi4uLtB22rRp6ty5s6677jp98803mjNnjq6++mq9/fbbzU6ZbPhO4vTp03XiiSfq2muv1WmnnaZvvvlGknT33XdrzJgxGjdunFJSUg67nqlTp6pHjx665ZZbtGLFCi1atEhFRUXKz8/XxIkT1bFjRz3xxBP65S9/qTfffLPRzx4oOjpaI0eO1Kuvvqrc3FwNGzZMgwcP1plnnqmuXbs2+7v99re/1YIFC/TDH/5Ql156qTZu3Kgnn3xSmzZtCnTeWlJYWKgrr7xSsbGxeuaZZ5SYmNikzcUXX6yKigq98cYbuv3223Xqqac65h6otc6xJUuWuDrnAQCG/ABwlPz617/2Z2Zm+rdu3eqq3cH/P3fu3EbtRowY4R88eHCjdgMHDvQXFxc3avdf//Vf/l69evlLSkr8fr/ff9VVV/l/+MMf+qurqxu1Gz9+vL9fv35Ntvviiy82avfiiy/6MzMz/fPmzfN//fXXgX+FhYX+N954w5+bm+vv3bu3v6CgIPAzl19+uT83N9e/Z8+ewGPfffed/7LLLvMPGjQoUMukSZP8AwYM8H/99deBdl988YU/Kyur2X1ycG1u98GIESP811xzTaM2CxYs8I8ePdq/efNmv9/v90+ePNk/atSoRm3eeecd/8iRI/2ffvqp3+/3+z/++ONGdbz77rv+zMxM/z333NPo55YsWeLPzMz033fffY1+7ic/+Ym/trY20O5Pf/qTPzMz0//BBx/4W/LDH/7Qf/nllwf+vyHvwMeOtJ66ujq/3+/319XV+c8++2x/Zmam/9133w387AsvvOCqxoqKCv9NN93kz8zMbPRv1KhR/meffTawHb/f71+3bp3/tNNO80+bNq1RxgMPPODPzMz0r1u3zr9161Z/Zmamf9asWYHnMzMz/b/+9a/9X3/9tT8vL88/ZMiQJufXwftq1qxZrs5Dv7/5c7E1zjG35zwAwA5TQwF41ogRIxr9f1ZWlr7++mtJUn19vd58800NGDBAPp9PpaWlgX95eXmqqanRhx9+KEn605/+pBdffFGRkZGBrF27dik2NrbZJfUHDx7cbD3/8z//o7POOivwb+jQobrhhhvUuXNnPffcczrllFMC2StWrNA555yjqqqqQF3l5eU677zzVFJSolWrVumbb77RihUrNGbMmEarYGZnZ+vss89utoYDazucfZCcnKxPPvlEzzzzTGAK4SWXXNJopdPk5GQVFBRo9uzZge+ynXPOOVq8eHGj1VIPtGzZMknSz3/+80aPjxgxQqeccorefPPNRo/n5eUpIiIi8P/f+973JKnZ6ZRuHPy3Otx6zj333MDoa3h4uE4++WRFRUVpyJAhgTapqamuauzQoYMefPBBLVmyRDfccIP69esnn8+ndevW6e67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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(20, 14))\n", "im = plt.imshow(J_sk, **cmap_args)\n", "plt.title(\"LinearRegression from Scikit-learn\", fontsize=18)\n", "plt.xticks(fontsize=18)\n", "plt.yticks(fontsize=18)\n", "cb = fig.colorbar(im)\n", "cb.ax.set_yticklabels(cb.ax.get_yticklabels(), fontsize=18)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results perfectly with our previous discussion where we used our own code.\n", "\n", "## Ridge regression\n", "\n", "Having explored the ordinary least squares we move on to ridge\n", "regression. In ridge regression we include a **regularizer**. This\n", "involves a new cost function which leads to a new estimate for the\n", "weights $\\boldsymbol{\\beta}$. This results in a penalized regression problem. The\n", "cost function is given by" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1\n", "3\n", "6\n", " \n", "<\n", "<\n", "<\n", "!\n", "!\n", "M\n", "A\n", "T\n", "H\n", "_\n", "B\n", "L\n", "O\n", "C\n", "K" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4IAAAM2CAYAAACjUj0CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzde3hU1b3/8U8mcUhCGOM0EAgxRqAjQoyACkItKka0UsUbiCLeW7S0VVqtl1rk6WlVqpUWtdQeQEQutVjqjfa0tdRLjwrHH6UICBEUQoQEYwghhDAkmd8fkIGQkL1hviQ7zPv1PDw+7v3Nd3+zZ+89s7LWrJUQiUQiAgAAAADEDV9bFwAAAAAAaF00BAEAAAAgztAQBAAAAIA4Q0MQAAAAAOIMDUEAAAAAiDM0BAEAAAAgztAQBIBmPPDAAzrttNOa/MvPz9eFF16ohx56SGVlZY1+ZtiwYRo3bpxjbrdx1mbPnq3zzjtP+fn5evLJJ1v9+G6Ew2H97ne/0xVXXKF+/fppwIABuvrqq/W73/1Oe/bsOeJ8Da9jg6efflqnnXaaiouLD/szixYt0mmnnaalS5c22r5582bH4xUXF+u0007T008/fcS1AgDQmpLaugAA8LIHH3xQJ510UvT/q6qq9P777+uPf/yjVq1apZdffll+v1+S9NBDDyklJaWtSm3RunXr9Nhjj6lfv366++671bt377YuqYna2lrdfvvtWrFiha688kpdd911qqur04cffqinnnpKS5Ys0Zw5c6Ln243rrrtOgwcPPqI6zjnnHP3iF79Qz549o9tuv/12de7cWY8//vgR5QIAwKtoCAJACwoKCpSdnd1o29ixYzV58mQtWLBAb775pi677LJorFcVFhZKksaPH69hw4a1cTXN+8tf/qJly5bp6aef1vDhw6Pbb7rpJs2YMUNPPPGEXn75Zd1www2uc/bv31/9+/c/ojpOPvlknXzyyY22/etf/9JVV111RHkAAPAyhoYCwFFoaBT85z//aeNK3Nm7d68kqWPHjm1cyeH9+9//liR97Wtfa7Jv7NixOuGEE7RixYrWLgsAgOMSDUEAOAoNQ0AjkUh0W3Pf/fvzn/+skSNHKj8/X9/85jf1wQcfNJvv7bff1qhRo9SvXz9ddNFFmjt3rn784x836b1bv369JkyYoLPPPltnnnmmxowZo3fffbfFWseNG6cHH3xQ0r7etYbvzI0bN0633367pk6dqv79+2vw4MFat26dpH1DSb/zne/o7LPPVn5+vkaPHq0333yzSd7x48frzTff1BVXXKEzzjhDI0aM0Ntvv62qqipNmjRJAwcO1ODBgzVp0iTV1NS0WGdDI/Wll15qsi8lJUXLly/XL37xi0bbN2zYoLvvvluDBg3SWWedpXHjxunDDz+M7j/0O4LNmTx5sk477TTNnj1bUuPvCDZ850+S/vSnPzX73UE3Fi1apCuvvFJnnHGGzj33XD3wwAPatm1bo5iqqir98pe/1KWXXqozzjhD/fv31+jRo/WPf/wjGtNQz+zZs3X99dcrLy9Pt9xyS3T7K6+8oqlTp2ro0KE644wzNGrUqMNecwCA+MbQUAA4Cg2Nrz59+hw2ZtGiRXrwwQfVv39/3Xfffdq0aZPuvPNO1dfXq3v37tG4f/7zn5owYYJCoZAmTpyo0tJSTZkyRampqY168NatW6cbbrhBGRkZGj9+vE444QS98cYb+va3v61f/vKX0SGqh7rzzjt16qmn6qWXXtKdd96pHj16RPctX75cmzZt0n333afi4mL16tVLK1eu1E033aS0tDTdeuut6tixo1599VVNmDBBkyZN0tixY6M/v3r1av373//WTTfdpE6dOum5557TPffco9NPP10pKSmaOHGiPvzwQ7300kvq0qWLvvvd7x72fF1xxRV6/vnnNWXKFC1atEgFBQUaPHiw+vfvL7/f3+S7gRs3btTo0aOVlJSkG2+8UcFgUL///e916623at68ecrPzz/ssRr86le/0oIFCzRx4kTdcsstTfYHg0H94he/0I9+9COdffbZGj16dKPvDrrxzDPP6Omnn9Yll1yi0aNHq7S0VHPnztWyZcv08ssvKxgMKhKJaPz48VqzZo1uvPFG5eTkqKSkRL///e/1ve99T3/9618bDVf99a9/rfPPP1+XX365OnTo0Gh7SkqKbrvtNu3du1ezZs3S+PHj9dZbbzX6risAAIoAAJq4//77I6FQKLJ69erIl19+Gf23adOmyNy5cyP9+vWLfOMb34iEw+Hoz1x44YWRG2+8MRKJRCK1tbWRwYMHR6655ppGMX/84x8joVAoGheJRCIFBQWR4cOHR3bv3h3d9ve//z0SCoUiF154YXTbjTfeGCkoKIjs2rUrum3v3r2RG264ITJkyJDInj17Dvv7NBz3gw8+aJTv0G2RSCQyatSoSL9+/SJbt26NbqupqYlcddVVkfz8/MiXX37Z6OeXLFkSjZs7d24kFApFRo8eHd1WX18fGTp0aOS66647bH0N/vnPf0YGDx4cCYVC0X/9+vWL/OAHP4h8+umnjWLvvvvuSH5+fmTjxo3RbeXl5ZGzzjor8v3vfz8SiRx4HRtMmzYtEgqFIps3b4688MILkVAoFHnqqaccz1UoFIrcf//9jvVv3rw5EgqFItOmTYtEIpFIUVFRpHfv3pEnn3yyUdy6desiffv2jfz85z+PRCKRyIoVKyKhUCiyYMGCRnHvvPNOJBQKRWbNmtUo/8UXX9zoumrYfv755ze6PhYvXhwJhUKRl156ybF2AEB8YWgoALTgqquu0uDBg6P/Lr74Yj3xxBO68MILNW/ePJ1wwgnN/tzq1av15Zdf6uqrr24UM3LkSJ144onR/1+7dq2Kioo0ZswYJScnR7cXFBQ06nnavn27li1bpvPPP181NTUqLy9XeXm5KisrdfHFF6usrEwfffTREf9+ycnJOuecc6L/X1ZWpv/85z8aOXKkunbtGt3eoUMH3X777aqpqdF7773XaPvXv/716P+feuqpkqSLLrooui0hIUHdu3fXF1984VjPBRdcoH/+85+aOnWqRo4cqc6dO6u6ulpvvPGGRo4cqWXLlkmS6uvr9fbbb+v888/XKaecEv35k046SfPnz9fDDz/c4nFee+01Pfroo7r66qs1ceJEx7qO1t///nfV19dr2LBh0desvLxcGRkZOv300/XWW29Jks4880z93//9n66++uroz9bV1am+vl6StGvXrkZ5zz333GavvfPPP1+pqanR/2+YHdbNuQcAxBeGhgJAC5544gllZGRo7969evfddzVv3jx94xvf0OTJkxsNyTvU559/LknKyclptD0xMbFRw2XTpk2S1Ghbg1NPPVUff/yxpANr2L344ot68cUXmz3m1q1bj+A32yc9PV0+34G/CTbU3dCgO1hDw3TLli2Nfj4p6cBbSWJioiTpK1/5SqOfTUxMbPR9ypZ06NBBl112WXSo6+rVqzVr1iy98cYbeuSRR/SXv/xFFRUVqq6ubva8hUIhx2P8+te/ls/n08qVK7V3797DNugPp6KiIjoB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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_lambda = 0.1\n", "clf_ridge = skl.Ridge(alpha=_lambda).fit(X_train, y_train)\n", "J_ridge_sk = clf_ridge.coef_.reshape(L, L)\n", "fig = plt.figure(figsize=(20, 14))\n", "im = plt.imshow(J_ridge_sk, **cmap_args)\n", "plt.title(\"Ridge from Scikit-learn\", fontsize=18)\n", "plt.xticks(fontsize=18)\n", "plt.yticks(fontsize=18)\n", "cb = fig.colorbar(im)\n", "cb.ax.set_yticklabels(cb.ax.get_yticklabels(), fontsize=18)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LASSO regression\n", "\n", "In the **Least Absolute Shrinkage and Selection Operator** (LASSO)-method we get a third cost function." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "$$\n", "\\begin{equation}\n", " C(\\boldsymbol{X}, \\boldsymbol{\\beta}; \\lambda) = (\\boldsymbol{X}\\boldsymbol{\\beta} - \\boldsymbol{y})^T(\\boldsymbol{X}\\boldsymbol{\\beta} - \\boldsymbol{y}) + \\lambda \\sqrt{\\boldsymbol{\\beta}^T\\boldsymbol{\\beta}}.\n", "\\label{_auto13} \\tag{13}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finding the extremal point of this cost function is not so straight-forward as in least squares and ridge. We will therefore rely solely on the function ``Lasso`` from **Scikit-Learn**." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4IAAAM2CAYAAACjUj0CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdaZRV5ZUw4F11EQGBpGkJoGhEOmAaFEojrmg0Dggq2hAHREsR0MSVmI5iEqePqGBHFDEYxGBQRFE0Wi2RROxEM5imHTO2cWIhGhsIDggyFDLdut8Pw9WyoKqAU9xTnOdZq1biOW+9Z9fLjanN3nffskKhUAgAAAAyo7zUAQAAALBzSQQBAAAyRiIIAACQMRJBAACAjJEIAgAAZIxEEAAAIGMkggCfcMUVV0TPnj1j8eLFpQ4lUU8//XSceOKJ0bt37zj77LNLHc5WPfbYY3HuuefGoYceGgcddFAMGDAg/uM//iPeeeedbd5r9uzZ0bNnz3juueciIuK5556Lnj17xuzZs7f6PYsXL46ePXvGrbfeWuv6okWLGvXMY489Ns4999xtjhUAdqYWpQ4AgKZXU1MT3/72tyOXy8WVV14ZnTt3LnVIWzRp0qS4/fbb4+ijj46LLrooWrVqFQsWLIj//M//jLlz58aDDz4Y++67b6P3O/TQQ2PChAnRvXv3Rn9Phw4dYsKECdGzZ8/itR/96Efx05/+NJ544olt+nkAIK0kggAZ8O6778by5ctj5MiRUVlZWepwtmjp0qVxxx13xLnnnhtjxoypde/kk0+OysrK+MEPfhC33HJLo/fcZ599Yp999tmmONq0aRODBw+ude2ZZ56JfD6/TfsAQJppDQXIgI0bN0ZExB577FHiSLbuf//3fyOfz8cRRxxR515FRUUcdNBB8Ze//KUEkQHArkciCLADfvGLX8Q555wThxxySPTu3TuOPfbYmDBhQmzYsKG4ZsOGDfH9738/jjvuuOjdu3d8+ctfjrFjx8bKlSuLawqFQkyZMiUGDhwYBx54YBx++OHx3e9+N5YuXVrreStWrIhrr702jjzyyOjdu3cMHDgwpk2bVm+16tZbb43jjjsuIiKmTJlSfM/crbfeGgceeGA88cQTccQRR0RFRUVUVVU1+jm33nprVFRUxGuvvRYjR46Mvn37xpFHHhl33HFHFAqFmD59ehxzzDFx8MEHx/nnn9/gey43J6k//elPa53fZjNnzownn3yy1rU1a9bE9ddfH0cffXT06dMnTjnllOLPEFH3PYJbMnfu3Pj85z8f3/rWtyKfz9d5j+Cxxx4bzz//fCxZsmSL7x1sjD//+c8xcuTIqKioiIqKihg1alS88MILtdYUCoV44IEH4vTTT4+Kioo48MAD44QTTohp06ZFoVAorjv22GNjzJgxcdVVV8WBBx4YRx11VCxfvjyOPfbYuPrqq2POnDkxaNCgOPDAA2PAgAExa9asbY4XgF2f1lCA7VRVVRVjxoyJY489Nr7zne/Exo0b44knnojp06dHmzZt4pvf/GZERIwbNy4effTRGD58eOyzzz6xYMGCmDVrVrz55ptx1113RUTE7bffHrfddltUVlYWB9XMnDkzXnzxxXj00Ucjl8vFypUrY9iwYbFkyZIYNmxYdOvWLZ566qm4+eab4+WXX95qy+Txxx8f7dq1i/Hjx8fxxx8fxx9/fHTv3j2ef/752LRpU4wZMybOP//82LBhQxxyyCHb9JyNGzfGeeedF/37948BAwbEww8/HBMnToxnn302lixZEuedd16sWLEi7rzzzrjyyivj3nvv3ep5HnbYYdG1a9f45S9/GX/84x9jwIABccQRR8Shhx4an/rUp6Jly5a11m/YsCEqKytjwYIFMXTo0DjggAPid7/7XYwZMyY++OCDGD58eIN/hvPmzYvLL788jjrqqLj55psjl8vVWXPVVVfFzTffHCtWrIgrr7yy1nsHG+Opp56KCy+8MA444IC4+OKLY8OGDTF79uyorKyMGTNmxBe+8IWIiLjlllvi9ttvj6985SsxdOjQqK6ujkceeSRuvvnm6NixY3zlK18p7jl37tzo1q1b/L//9/9i2bJl0aFDh+LPs/kvJ/bcc8948MEHY9y4cdG1a9f48pe/vE1xA7CLKwBQy+WXX17o0aNHYdGiRfWuO+GEEwpnnnlmoaampnht48aNhaOOOqpw8sknF68ddNBBhbFjx9b63kmTJhVOPfXUwpo1awqFQqFw4oknFr72ta/VWvPAAw8U/u3f/q3w5ptvFgqFQuGmm24q9OjRo/DEE0/UWnfttdcWevToUXjyySe3GuuiRYsKPXr0KEyePLl4bfLkyXWubctzNn//DTfcUFyzYMGCQo8ePQoVFRWF9957r3j929/+dqFnz56F9evXbzXGQqFQeP311wtDhgwp9OjRo/j1+c9/vnDuuecW5s2bV2vtrFmzCj169Cj87Gc/K16rqakpnH322YUjjjiisGnTpsLDDz9c6NGjR+HZZ58tFAqFwrPPPlvo0aNH4eGHHy786U9/KvTp06dw3nnnFdatW1fvWZ1zzjmFY445pt7YNzvmmGMK55xzTqFQKBTy+XzhuOOOKwwbNqywadOm4prq6urC8ccfXxg8eHChUCgUNmzYUDj44IMLo0ePrrXX6tWrC7179y5ceOGFtfY/4IADiq+Lj1/v2bNn4ZVXXilee+eddwo9e/YsXHrppY2KHYDs0BoKsJ1+9rOfxbRp06KsrKx47b333ov27dvH2rVri9c6d+4cjz32WMyePTtWrVoVERGXXHJJPPzww8V2yM6dO8dzzz0X99xzTyxbtiwiIoYNGxZz5swpTsn8zW9+E927d4/+/fvXiuMb3/hGRET8+te/3q6f40tf+lKtf97W53x83X777RcREQcffHCxShUR0bVr1ygUCsWfbWu6desWs2fPjpkzZ8bw4cOje/fukc/n47nnnovzzz8/pk2bVlz75JNPRocOHeLkk08uXisrK4sJEybErFmzorx86/8Xt2DBgrjwwgtj7733jqlTp8buu+9eb1zb6+WXX45FixZF//79Y+XKlbF8+fJYvnx5rFu3Lo455ph45ZVX4q233orddtstnn766Rg3blyt71+xYkW0bdu21uspImLffffd4vTUbt26xQEHHFD8544dO8aee+7Z4LkDkD1aQwG202677Ra///3v49FHH43XX389/u///i/ee++9iIjYe++9i+uuvfbauOSSS+LKK6+M733ve9G3b984/vjj47TTTot27dpFRMRll10WX//61+P666+P8ePHR69eveLYY4+NoUOHRseOHSPiw8+3O/LII+vE0bFjx2jfvn0sWbJku36Of/7nf671z9v6nD333LP431u0aLHFPTe3XNbU1DQYT1lZWRx22GFx2GGHRUTE3//+93j44Yfjxz/+cfzwhz+MwYMHR6dOnWLJkiWx77771krEI2qf/dbcddddUV5eHuvWrYt33313mz6SIiKiurq6TnLWrl27aNWqVa1r//d//xcRERMmTIgJEyZsca+lS5dG586dY7fddosnn3wyfv3rX8cbb7wRb775ZvF9pIWPvUcwou75bvbx5Huzli1bNurcAcgWiSDAdrr55ptj2rRp8a//+q/Rt2/fGDx4cFRUVMR1111Xa8jLF7/4xfjtb39b/Hrqqadi/Pjxcffdd8fs2bOjQ4cOccABB8Qvf/nLmDdvXvz2t7+NefPmxeTJk+Puu++On/zkJ9G9e/c6ycDH1dTUxG677bZdP8cnK2fb+pwtva/uk8lZY9x7772xfv36uOCCC2pd32uvveLf//3fY/fdd4+bb745/vKXv8TAgQMjn89v13MiInr27BlXX311jBgxIsaOHRvTp0/fpu+/6667YsqUKbWujR8/Pk499dRa1zYnYBdffHH07dt3i3vtv//+USgU4rvf/W48+uijccghh0RFRUWceeaZceihh8Z5551X53u2dOYRdf8sAWBrJIIA22HJkiUxbdq0GDx4cJ1Kz8fb8DZs2BCvvPJKdO7cOQYNGhSDBg2KmpqamDFjRkyYMCHmzp0bZ599drz66qvRtm3bOO6444oTPh977LEYPXp0VFVVxRVXXBF77713vP7663Vieffdd2PNmjXRpUuXRH62nfWcT/rVr34VL7zwQpx99tnRpk2bOvd79OgREVGsuu21114xf/78Out+97vfxWOPPRbf/e53t/qsESNGxBe+8IUYMWJE3HHHHfHoo4/WajFtyJAhQ+KQQw6pde1f/uVf6qzbXJ1s06ZNHH744bXuvfDCC7Fy5cpo1apV/OEPf4hHH300vvGNb8TFF19cXLNp06Z4//33t/mzEAGgIf7qEGA7bG7Z++Qv/7/73e/ib3/7W2zatCkiIt5///0488wz48c//nFxTXl5eRx44IHF/57P52P48OFx/fXX19qrT58+xTUREcccc0y8/vrr8atf/arWus3vmzv66KMT+dl21nM+6ZRTTom1a9fGDTfcUKeVsaamJqqqqqJ9+/Zx6KGHRkTEUUcdFcuWLYsnnnii1tp77rknnnzyyfinf/qnBp/5jW98I7p06RLjx48vvn9zS8rLy2vFtM8++8Thhx9e6+szn/lMne/r3bt3dOzYMe69996orq4uXl+zZk2xXTiXy8X7778fEXVfTw899FB88MEHxdcTACRFRRBgKyZNmrTFD2A/8cQT45BDDom99torbr/99li/fn107tw5XnjhhfjpT38au+++e/GX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HQA0G+URUSh1EB+jNRQAAIAiiSAAAEDGaA0FAABIgNZQAAAAUksiCAAAkDFaQwEAABKgNRQAAIDUkggCAABkjNZQAACABJRF/e2YaaIiCAAAkDESQQAAgIzRGgoAAJCA5lRla06xAgAAkACJIAAAQMZoDQUAAEhAc6qyNadYAQAASIBEEAAAIGO0hgIAACSgOVXZJIJkTqtWye21eHFye+XzlyS2Lpe7YUfD+cQzr0h0v11dTbP6vwEAIIskggAAALuwpUuXRj6fr3VNIggAAJCAsrKyiLKyUofxkX/EUllZGUuWLKl1SyIIAACwC5s1a5aKIAAAQJZ06dKlzrXtSgTHjBkTb775Ztx77721ri9atChuvPHGeP755yMi4uijj44rrrgiOnTosD2PAQAAaD5atPjwKy3qiWWbo6yqqoqqqqro169fresrVqyI8847LzZs2BAXXHBB5PP5mD59esyfPz+qqqqiZcuW2x44AAAAiWt0IpjP52Pq1KkxZcqULd6/++6746233oqf//zn0b1794iI6NOnT4wcOTIeeeSRGDp0aDIRAwAAsEMalQiuX78+zjjjjJg/f34MGTIknnnmmTpr5s6dG/369SsmgRERhx9+eHTr1i3mzp0rEQQAAHZtuVy6WkNzua3eatSnHq9fvz7WrFkTkyZNihtvvDFafOKHW7lyZSxatCh69epV53t79eoVL7744jZGDAAAQFNpVLratm3bePzxx+skgJu9/fbbERHRqVOnOvc6duwYa9asidWrV0e7du12IFQAAACS0KhEsLy8PMrLt148rK6ujoiI1q1b17m3++67R0TE2rVrtykRrOdx27SGpuHsP7Tvvjv/mY05+0LhiqYPJKO89kvH2ZeOsy8dZ186zp7tsitPDd2SmpqaBtfUl0huec+G9mt4DU3D2X9k8eLk9urateE1jT37XO6GHQ/oY/J5iWWE134pOfvScfal4+xLx9k3Dcl1uiTyx7HHHntExIfvJfykzdc2rwEAAKC0EqkI7rXXXhER8e6779a5984770T79u2jTZs2STwKAAAgnXa1qaENad++fXTt2jVeeumlOvdefvnl6N27dxKPAQAAIAGJdeoOGDAgnnnmmVi4cGHx2tNPPx1vvPFGnHTSSUk9BgAAgB2UWN3yq1/9asyZMydGjBgRo0aNivXr18edd94ZvXr1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seeee8ahhx4af/7znyMiYu7cudGvX79iEhgRcfjhh0e3bt1i7ty5TRA6AABAeuTzH7aHpuXrE/NhammwIti2bdv4xS9+USsJ3GzFihWRy+Vi5cqVsWjRohg4cGCdNb169Yonn3xymw4QAACAptNgRTCXy8V+++0XnTp1qnX91VdfjT/96U9RUVERb7/9dkREnTURER07dow1a9bE6tWrEwoZAACAHbFdHx9RXV0dl19+eUREfO1rX4vq6uqIiC1WDXffffeIiFi7dm20a9eu0c9ozJtJs/CG07Ry9qXj7EvL+ZdOY86+UDDgpSl43ZeOsy8dZ8/22LQpouFRnDtPWdnW721zIvjBBx/E17/+9Xj11VfjwgsvjH79+sUf//jHBr+vfBv/12RqaHo5+9Jx9qXl/EvH1NDS8bovHWdfOs6+aUiu02Wb/jhWrVoVo0aNiueeey5OO+20GD16dERE7LHHHhERsX79+jrfs/na5jUAAACUVqMrgu+9916cf/758corr8SZZ54ZY8eOjbJ/1Br32muviIh4991363zfO++8E+3bt482bdokFDIAAED65PPpqibXV4VtVCK4Zs2aYhI4YsSIuPLKK2vdb9++fXTt2jVeeumlOt/78ssvR+/evbctYgAAAJpMo1pDx40bF6+88koMHz68ThK42YABA+KZZ56JhQsXFq89/fTT8cYbb8RJJ52UTLQAAADssLJCof65NgsXLoyTTjop2rVrF1dddVXkcrk6awYPHhzLly+Pk08+OXK5XIwaNSrWr18fd955Z+y7777xk5/8JFq2bLlNgRkWk17OvnScfWk5/9IxLKZ0vO5Lx9mXjrNvGlkYFrNsWbpeO+XlEXvuueV7DSaCDzzwQFx77bX1PmD+/PkREfH666/H+PHj4w9/+EO0atUqvvzlL8dll10WHTp02OagJYLp5exLx9mXlvMvHYlg6Xjdl46zLx1n3zQkgjvfDiWCpSIRTC9nXzrOvrScf+lIBEvH6750nH3pOPumIRHc+epLBLfrA+UBII2STN5yuasS2yufvz6xvQBIr3z+w6+02MK7+ooykJcDAADwcRJBAACAjNEaCgAAkIBNm9LVGlrfNBgVQQAAgIyRCAIAAGSM1lAAAIAE5PMftoc2ByqCAAAAGSMRBAAAyBitoQAAAAnYtElrKAAAACklEQQAAMgYraEA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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "clf_lasso = skl.Lasso(alpha=_lambda).fit(X_train, y_train)\n", "J_lasso_sk = clf_lasso.coef_.reshape(L, L)\n", "fig = plt.figure(figsize=(20, 14))\n", "im = plt.imshow(J_lasso_sk, **cmap_args)\n", "plt.title(\"Lasso from Scikit-learn\", fontsize=18)\n", "plt.xticks(fontsize=18)\n", "plt.yticks(fontsize=18)\n", "cb = fig.colorbar(im)\n", "cb.ax.set_yticklabels(cb.ax.get_yticklabels(), fontsize=18)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is quite striking how LASSO breaks the symmetry of the coupling\n", "constant as opposed to ridge and OLS. We get a sparse solution with\n", "$J_{j, j + 1} = -1$.\n", "\n", "\n", "\n", "## Performance as function of the regularization parameter\n", "\n", "We see how the different models perform for a different set of values for $\\lambda$." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/10 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lambdas = np.logspace(-4, 5, 10)\n", "\n", "train_errors = {\n", " \"ols_sk\": np.zeros(lambdas.size),\n", " \"ridge_sk\": np.zeros(lambdas.size),\n", " \"lasso_sk\": np.zeros(lambdas.size)\n", "}\n", "\n", "test_errors = {\n", " \"ols_sk\": np.zeros(lambdas.size),\n", " \"ridge_sk\": np.zeros(lambdas.size),\n", " \"lasso_sk\": np.zeros(lambdas.size)\n", "}\n", "\n", "plot_counter = 1\n", "\n", "fig = plt.figure(figsize=(32, 54))\n", "\n", "for i, _lambda in enumerate(tqdm.tqdm(lambdas)):\n", " for key, method in zip(\n", " [\"ols_sk\", \"ridge_sk\", \"lasso_sk\"],\n", " [skl.LinearRegression(), skl.Ridge(alpha=_lambda), skl.Lasso(alpha=_lambda)]\n", " ):\n", " method = method.fit(X_train, y_train)\n", "\n", " train_errors[key][i] = method.score(X_train, y_train)\n", " test_errors[key][i] = method.score(X_test, y_test)\n", "\n", " omega = method.coef_.reshape(L, L)\n", "\n", " plt.subplot(10, 5, plot_counter)\n", " plt.imshow(omega, **cmap_args)\n", " plt.title(r\"%s, $\\lambda = %.4f$\" % (key, _lambda))\n", " plot_counter += 1\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that LASSO reaches a good solution for low\n", "values of $\\lambda$, but will \"wither\" when we increase $\\lambda$ too\n", "much. Ridge is more stable over a larger range of values for\n", "$\\lambda$, but eventually also fades away.\n", "\n", "## Finding the optimal value of $\\lambda$\n", "\n", "To determine which value of $\\lambda$ is best we plot the accuracy of\n", "the models when predicting the training and the testing set. We expect\n", "the accuracy of the training set to be quite good, but if the accuracy\n", "of the testing set is much lower this tells us that we might be\n", "subject to an overfit model. The ideal scenario is an accuracy on the\n", "testing set that is close to the accuracy of the training set." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(20, 14))\n", "\n", "colors = {\n", " \"ols_sk\": \"r\",\n", " \"ridge_sk\": \"y\",\n", " \"lasso_sk\": \"c\"\n", "}\n", "\n", "for key in train_errors:\n", " plt.semilogx(\n", " lambdas,\n", " train_errors[key],\n", " colors[key],\n", " label=\"Train {0}\".format(key),\n", " linewidth=4.0\n", " )\n", "\n", "for key in test_errors:\n", " plt.semilogx(\n", " lambdas,\n", " test_errors[key],\n", " colors[key] + \"--\",\n", " label=\"Test {0}\".format(key),\n", " linewidth=4.0\n", " )\n", "plt.legend(loc=\"best\", fontsize=18)\n", "plt.xlabel(r\"$\\lambda$\", fontsize=18)\n", "plt.ylabel(r\"$R^2$\", fontsize=18)\n", "plt.tick_params(labelsize=18)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the above figure we can see that LASSO with $\\lambda = 10^{-2}$\n", "achieves a very good accuracy on the test set. This by far surpasses the\n", "other models for all values of $\\lambda$." ] } ], "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.8" } }, "nbformat": 4, "nbformat_minor": 2 }