4808 lines
567 KiB
Plaintext
4808 lines
567 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "51186d57",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- HTML file automatically generated from DocOnce source (https://github.com/doconce/doconce/)\n",
|
||
"doconce format html chapter3.do.txt -->"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "79a63fb4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"# Resampling Methods"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f3d916b4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## Introduction\n",
|
||
"\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",
|
||
"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",
|
||
"* 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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "46cb3279",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## Reminder on Statistics\n",
|
||
"\n",
|
||
"* As in other experiments, many numerical experiments have two classes of errors:\n",
|
||
"\n",
|
||
" * Statistical errors\n",
|
||
"\n",
|
||
" * Systematical errors\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",
|
||
"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",
|
||
"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",
|
||
"id": "0fe38e07",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "d9d6955b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"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",
|
||
"id": "f41f7049",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2ee172f4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "1aecc768",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "12e9bdea",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We can calculate the expectation value of $\\boldsymbol{y}$ for a given element $i$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8f9db9db",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "b10abe89",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"while\n",
|
||
"its variance is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bec51521",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "4859640c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"With the OLS expressions for the parameters $\\boldsymbol{\\beta}$ we can evaluate the expectation value"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "69978823",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "5caee9d9",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "6791e5b4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "4f747992",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"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",
|
||
"id": "d4679496",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "bd3534e1",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "125b139e",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "98b59ea0",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "dcfd7a6c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "30f43be3",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e3c1bf3c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## 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 be 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",
|
||
"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",
|
||
"The Jackknife works by making many replicas of the estimator $\\widehat{\\beta}$. \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",
|
||
"id": "3925f435",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{x}_i = (x_1,x_2,\\cdots,x_{i-1},x_{i+1},\\cdots,x_n),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "cc6328ee",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"which equals the vector $\\boldsymbol{x}$ with the exception that observation\n",
|
||
"number $i$ is left out. Using this notation, define\n",
|
||
"$\\widehat{\\beta}_i$ to be the estimator\n",
|
||
"$\\widehat{\\beta}$ computed using $\\vec{X}_i$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "b751a941",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Runtime: 0.179404 sec\n",
|
||
"Jackknife Statistics :\n",
|
||
"original bias std. error\n",
|
||
" 100.039 100.029 0.150726\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",
|
||
"id": "25ff562a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Bootstrap\n",
|
||
"\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",
|
||
"Since $\\widehat{\\beta} = \\widehat{\\beta}(\\boldsymbol{X})$ is a function of random variables,\n",
|
||
"$\\widehat{\\beta}$ 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{\\beta}$. 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",
|
||
"In the case that $\\widehat{\\beta}$ 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{\\beta}$ called $\\widehat{\\beta}^*$. \n",
|
||
"\n",
|
||
"By repeated use of (1) and (2), many\n",
|
||
"estimates of $\\widehat{\\beta}$ could have been obtained. The\n",
|
||
"idea is to use the relative frequency of $\\widehat{\\beta}^*$\n",
|
||
"(think of a histogram) as an estimate of $p(\\boldsymbol{t})$.\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",
|
||
"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",
|
||
"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{\\beta}^*$ by evaluating $\\widehat \\beta$ 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 \\beta^*$. 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{\\beta}^*$. 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",
|
||
"\\beta$, apply the estimator $\\widehat \\sigma^2$ to the values\n",
|
||
"$\\widehat \\beta^*$.\n",
|
||
"\n",
|
||
"Before we proceed however, we need to remind ourselves about a central\n",
|
||
"theorem in statistics, namely the so-called **central limit theorem**.\n",
|
||
"This theorem plays a central role in understanding why the Bootstrap\n",
|
||
"(and other resampling methods) work so well on independent and\n",
|
||
"identically distributed variables.\n",
|
||
"\n",
|
||
"Suppose we have a PDF $p(x)$ from which we generate a series $N$\n",
|
||
"of averages $\\langle x_i \\rangle$. Each mean value $\\langle x_i \\rangle$\n",
|
||
"is viewed as the average of a specific measurement, e.g., throwing \n",
|
||
"dice 100 times and then taking the average value, or producing a certain\n",
|
||
"amount of random numbers. \n",
|
||
"For notational ease, we set $\\langle x_i \\rangle=x_i$ in the discussion\n",
|
||
"which follows. \n",
|
||
"\n",
|
||
"If we compute the mean $z$ of $m$ such mean values $x_i$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fa55ab5a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"z=\\frac{x_1+x_2+\\dots+x_m}{m},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "697c0c94",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"the question we pose is which is the PDF of the new variable $z$.\n",
|
||
"\n",
|
||
"The probability of obtaining an average value $z$ is the product of the \n",
|
||
"probabilities of obtaining arbitrary individual mean values $x_i$,\n",
|
||
"but with the constraint that the average is $z$. We can express this through\n",
|
||
"the following expression"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bd26bbd1",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\tilde{p}(z)=\\int dx_1p(x_1)\\int dx_2p(x_2)\\dots\\int dx_mp(x_m)\n",
|
||
" \\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m}),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "68664e4f",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"where the $\\delta$-function enbodies the constraint that the mean is $z$.\n",
|
||
"All measurements that lead to each individual $x_i$ are expected to\n",
|
||
"be independent, which in turn means that we can express $\\tilde{p}$ as the \n",
|
||
"product of individual $p(x_i)$. The independence assumption is important in the derivation of the central limit theorem.\n",
|
||
"\n",
|
||
"If we use the integral expression for the $\\delta$-function"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "742a107a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m})=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n",
|
||
" dq\\exp{\\left(iq(z-\\frac{x_1+x_2+\\dots+x_m}{m})\\right)},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b6d624c1",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"and inserting $e^{i\\mu q-i\\mu q}$ where $\\mu$ is the mean value\n",
|
||
"we arrive at"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "46458586",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\tilde{p}(z)=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n",
|
||
" dq\\exp{\\left(iq(z-\\mu)\\right)}\\left[\\int_{-\\infty}^{\\infty}\n",
|
||
" dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ca119461",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"with the integral over $x$ resulting in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f75b40fc",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}=\n",
|
||
" \\int_{-\\infty}^{\\infty}dxp(x)\n",
|
||
" \\left[1+\\frac{iq(\\mu-x)}{m}-\\frac{q^2(\\mu-x)^2}{2m^2}+\\dots\\right].\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a4b64e20",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The second term on the rhs disappears since this is just the mean and \n",
|
||
"employing the definition of $\\sigma^2$ we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fc76951f",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\int_{-\\infty}^{\\infty}dxp(x)e^{\\left(iq(\\mu-x)/m\\right)}=\n",
|
||
" 1-\\frac{q^2\\sigma^2}{2m^2}+\\dots,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "76979572",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"resulting in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3edff7d2",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\left[\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m\\approx\n",
|
||
" \\left[1-\\frac{q^2\\sigma^2}{2m^2}+\\dots \\right]^m,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "73a9341f",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"and in the limit $m\\rightarrow \\infty$ we obtain"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "88f1cc30",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\tilde{p}(z)=\\frac{1}{\\sqrt{2\\pi}(\\sigma/\\sqrt{m})}\n",
|
||
" \\exp{\\left(-\\frac{(z-\\mu)^2}{2(\\sigma/\\sqrt{m})^2}\\right)},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1aec913e",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"which is the normal distribution with variance\n",
|
||
"$\\sigma^2_m=\\sigma^2/m$, where $\\sigma$ is the variance of the PDF $p(x)$\n",
|
||
"and $\\mu$ is also the mean of the PDF $p(x)$. \n",
|
||
"\n",
|
||
"Thus, the central limit theorem states that the PDF $\\tilde{p}(z)$ of\n",
|
||
"the average of $m$ random values corresponding to a PDF $p(x)$ \n",
|
||
"is a normal distribution whose mean is the \n",
|
||
"mean value of the PDF $p(x)$ and whose variance is the variance\n",
|
||
"of the PDF $p(x)$ divided by $m$, the number of values used to compute $z$.\n",
|
||
"\n",
|
||
"The central limit theorem leads to the well-known expression for the\n",
|
||
"standard deviation, given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "42b317e7",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sigma_m=\n",
|
||
"\\frac{\\sigma}{\\sqrt{m}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e5baf71d",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The latter is true only if the average value is known exactly. This is obtained in the limit\n",
|
||
"$m\\rightarrow \\infty$ only. Because the mean and the variance are measured quantities we obtain \n",
|
||
"the familiar expression in statistics"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8e2b39e5",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sigma_m\\approx \n",
|
||
"\\frac{\\sigma}{\\sqrt{m-1}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "472e7c2c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"In many cases however the above estimate for the standard deviation,\n",
|
||
"in particular if correlations are strong, may be too simplistic. Keep\n",
|
||
"in mind that we have assumed that the variables $x$ are independent\n",
|
||
"and identically distributed. This is obviously not always the\n",
|
||
"case. For example, the random numbers (or better pseudorandom numbers)\n",
|
||
"we generate in various calculations do always exhibit some\n",
|
||
"correlations.\n",
|
||
"\n",
|
||
"The theorem is satisfied by a large class of PDFs. Note however that for a\n",
|
||
"finite $m$, it is not always possible to find a closed form /analytic expression for\n",
|
||
"$\\tilde{p}(x)$.\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": 2,
|
||
"id": "0ff7b796",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Bootstrap Statistics :\n",
|
||
"original bias std. error\n",
|
||
" 100.092 14.9578 100.093 0.149299\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"%matplotlib inline\n",
|
||
"\n",
|
||
"import numpy as np\n",
|
||
"from time import time\n",
|
||
"from scipy.stats import norm\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"# Returns mean of bootstrap samples \n",
|
||
"# Bootstrap algorithm\n",
|
||
"def bootstrap(data, datapoints):\n",
|
||
" t = np.zeros(datapoints)\n",
|
||
" n = len(data)\n",
|
||
" # non-parametric bootstrap \n",
|
||
" for i in range(datapoints):\n",
|
||
" t[i] = np.mean(data[np.random.randint(0,n,n)])\n",
|
||
" # analysis \n",
|
||
" print(\"Bootstrap Statistics :\")\n",
|
||
" print(\"original bias std. error\")\n",
|
||
" print(\"%8g %8g %14g %15g\" % (np.mean(data), np.std(data),np.mean(t),np.std(t)))\n",
|
||
" return t\n",
|
||
"\n",
|
||
"# We set the mean value to 100 and the standard deviation to 15\n",
|
||
"mu, sigma = 100, 15\n",
|
||
"datapoints = 10000\n",
|
||
"# We generate random numbers according to the normal distribution\n",
|
||
"x = mu + sigma*np.random.randn(datapoints)\n",
|
||
"# bootstrap returns the data sample \n",
|
||
"t = bootstrap(x, datapoints)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "22680159",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We see that our new variance and from that the standard deviation, agrees with the central limit theorem.\n",
|
||
"\n",
|
||
"We plot then the histogram together with a best fit for the data set."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "fe018bb3",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_51_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# the histogram of the bootstrapped data (normalized data if density = True)\n",
|
||
"n, binsboot, patches = plt.hist(t, 50, density=True, facecolor='red', alpha=0.75)\n",
|
||
"# add a 'best fit' line \n",
|
||
"y = norm.pdf(binsboot, np.mean(t), np.std(t))\n",
|
||
"lt = plt.plot(binsboot, y, 'b', linewidth=1)\n",
|
||
"plt.xlabel('x')\n",
|
||
"plt.ylabel('Probability')\n",
|
||
"plt.grid(True)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5bbd613c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## The bias-variance tradeoff\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",
|
||
"id": "ca3fde4a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8e11f84b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "026a65c8",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "e59918c7",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We can rewrite this as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2fd3f73c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "7daf46c9",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The first term represents 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 stochastic variable, idem for $\\boldsymbol{\\tilde{y}}$.\n",
|
||
"We use a more compact notation in terms of the expectation value"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6094266b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "643e0047",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"and adding and subtracting $\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]$ we get"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1319bde5",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "9c6d6da1",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"which, using the abovementioned expectation values can be rewritten as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "855756ef",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "34d24717",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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}$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "d51b6100",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Error: 0.013121574062587286\n",
|
||
"Bias^2: 0.012073649469946107\n",
|
||
"Var: 0.0010479245926411787\n",
|
||
"0.013121574062587286 >= 0.012073649469946107 + 0.0010479245926411787 = 0.013121574062587286\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_65_1.png"
|
||
}
|
||
},
|
||
"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 = 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": "code",
|
||
"execution_count": 5,
|
||
"id": "bd636def",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Polynomial degree: 0\n",
|
||
"Error: 0.32149601703519115\n",
|
||
"Bias^2: 0.3123314713548606\n",
|
||
"Var: 0.009164545680330616\n",
|
||
"0.32149601703519115 >= 0.3123314713548606 + 0.009164545680330616 = 0.3214960170351912\n",
|
||
"Polynomial degree: 1\n",
|
||
"Error: 0.08426840630693412\n",
|
||
"Bias^2: 0.0796891867672603\n",
|
||
"Var: 0.004579219539673834\n",
|
||
"0.08426840630693412 >= 0.0796891867672603 + 0.004579219539673834 = 0.08426840630693413\n",
|
||
"Polynomial degree: 2\n",
|
||
"Error: 0.10398646080125037\n",
|
||
"Bias^2: 0.10077114273548984\n",
|
||
"Var: 0.0032153180657605116\n",
|
||
"0.10398646080125037 >= 0.10077114273548984 + 0.0032153180657605116 = 0.10398646080125036\n",
|
||
"Polynomial degree: 3\n",
|
||
"Error: 0.06547790180152352\n",
|
||
"Bias^2: 0.062082386342319454\n",
|
||
"Var: 0.0033955154592040923\n",
|
||
"0.06547790180152352 >= 0.062082386342319454 + 0.0033955154592040923 = 0.06547790180152355\n",
|
||
"Polynomial degree: 4\n",
|
||
"Error: 0.06844519414009445\n",
|
||
"Bias^2: 0.06453579006728322\n",
|
||
"Var: 0.003909404072811221\n",
|
||
"0.06844519414009445 >= 0.06453579006728322 + 0.003909404072811221 = 0.06844519414009444\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Polynomial degree: 5\n",
|
||
"Error: 0.05227921801205679\n",
|
||
"Bias^2: 0.04818727730430286\n",
|
||
"Var: 0.004091940707753925\n",
|
||
"0.05227921801205679 >= 0.04818727730430286 + 0.004091940707753925 = 0.05227921801205679\n",
|
||
"Polynomial degree: 6\n",
|
||
"Error: 0.03781367141738902\n",
|
||
"Bias^2: 0.03365768507152769\n",
|
||
"Var: 0.0041559863458613296\n",
|
||
"0.03781367141738902 >= 0.03365768507152769 + 0.0041559863458613296 = 0.03781367141738902\n",
|
||
"Polynomial degree: 7\n",
|
||
"Error: 0.027609773491022394\n",
|
||
"Bias^2: 0.022999498260366198\n",
|
||
"Var: 0.004610275230656182\n",
|
||
"0.027609773491022394 >= 0.022999498260366198 + 0.004610275230656182 = 0.02760977349102238\n",
|
||
"Polynomial degree: 8\n",
|
||
"Error: 0.017355848195593312\n",
|
||
"Bias^2: 0.010331721306655165\n",
|
||
"Var: 0.007024126888938144\n",
|
||
"0.017355848195593312 >= 0.010331721306655165 + 0.007024126888938144 = 0.01735584819559331\n",
|
||
"Polynomial degree: 9\n",
|
||
"Error: 0.026605727637184558\n",
|
||
"Bias^2: 0.010018312644139219\n",
|
||
"Var: 0.016587414993045335\n",
|
||
"0.026605727637184558 >= 0.010018312644139219 + 0.016587414993045335 = 0.026605727637184554\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Polynomial degree: 10\n",
|
||
"Error: 0.021592704588021178\n",
|
||
"Bias^2: 0.010516485576646504\n",
|
||
"Var: 0.01107621901137467\n",
|
||
"0.021592704588021178 >= 0.010516485576646504 + 0.01107621901137467 = 0.021592704588021174\n",
|
||
"Polynomial degree: 11\n",
|
||
"Error: 0.07160048164232538\n",
|
||
"Bias^2: 0.014436800088896381\n",
|
||
"Var: 0.05716368155342902\n",
|
||
"0.07160048164232538 >= 0.014436800088896381 + 0.05716368155342902 = 0.0716004816423254\n",
|
||
"Polynomial degree: 12\n",
|
||
"Error: 0.11547777218876518\n",
|
||
"Bias^2: 0.016285782696017142\n",
|
||
"Var: 0.09919198949274803\n",
|
||
"0.11547777218876518 >= 0.016285782696017142 + 0.09919198949274803 = 0.11547777218876518\n",
|
||
"Polynomial degree: 13\n",
|
||
"Error: 0.2284246870217162\n",
|
||
"Bias^2: 0.01975416527168255\n",
|
||
"Var: 0.20867052175003364\n",
|
||
"0.2284246870217162 >= 0.01975416527168255 + 0.20867052175003364 = 0.2284246870217162\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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AQMG8O6779K5c2dCQ0O54YYbKCwsdJ5jt9t5+umn6datG1arlYSEBJ544gnn8+np6UyePJnw8HAiIyO5+uqrOXjwYOP9wOqhwNJQLr1YbHaDw8dKPVyQiEjbZRgGJZUlHnmc7t7BPj4+3HrrrSxcuNDtNR9++CEVFRXccccdDB48mM8//5yff/6Zu+66iylTprBp0ya367z99tv4+Piwbt06Xn/99Tq/V7t27Vi4cCHbt2/nhRde4I033mDu3Llu5+zbt49PPvmEzz//nM8//5xVq1bx1FNPOZ+fPXs2Tz/9NA8//DDbt29n0aJFxMTEAI6QNWHCBIKDg1m9ejVr164lODiYSy65xDnq01S0W3NDFefCs47Q0rNsIQtuH824HtFN9/1ERMTpxF1/SypLGLZomEdq2XTTJgJ9A0/r3J07d9K7d2+++eYbJkyYAMC4cePo1KkTixYtqnX+5ZdfTu/evfn73/8OOEZY8vPz2bp1q9t5JpOJjz/+mGuuuabO7/vss8+yZMkSvvvuO8AxwvLss8+SmZlJu3btALjvvvtYvXo1GzdupLCwkOjoaF5++WXuuOOOWtd78803eeaZZ9ixYwcmkwlw3J4KCwvjk08+YeLEiXXW0Ri7NfvU+4zULTACrKFQnk+CKZvU3GJAgUVEROrXq1cvRo4cyZtvvsmECRPYt28fa9asYfny5dhsNp566imWLFlCeno65eXllJeXExQU5HaNIUOGnPL7/Pvf/2bevHns3buXoqIiqqqqaoWAzp07O8MKQIcOHcjOzgZgx44dlJeXc8EFF9R5/S1btrB3716314MjkOzbt++0fhZnSoGloUwmiOwCh7fS2ZSpTRBFRDwowCeATTdtOvWJTfS9G2Lq1KncfffdvPLKK7z11lskJiZywQUX8OyzzzJ37lzmzZtH//79CQoKYubMmbVusZwYYE60ceNGbrjhBh577DEuvvhiQkNDef/993nuuefczvP19XX72mQyYbc75mMGBJz8PdntdgYPHsx7771X67no6Kb9x7sCy5mIcASWRO3aLCLiUSaT6bRvy3japEmTuOeee1i0aBFvv/02d955JyaTiTVr1nD11Vdzyy23AI5QsGfPHnr37t2g669bt47ExEQefPBB57G6ViadTPfu3QkICODrr7+u85bQoEGDWLJkCe3bt2/a6Rd10KTbM1Ez8daUSYqax4mIyGkIDg5m8uTJ/PnPf+bw4cPcdtttAHTr1o3k5GTWr1/Pjh07+N3vfkdmZmaDr9+tWzdSU1N5//332bdvHy+++CIff/xxg67h7+/P/fffz3333cc777zDvn372LhxI//85z8BuPnmm4mKiuLqq69mzZo1HDhwgFWrVnHPPfdw6NChBtfcEAosZ8IlsKTmlWC3t4p5yyIi0sSmTp3K0aNHufDCC0lISADg4YcfZtCgQVx88cWMHz+e2NjYeifRnszVV1/Nvffey913382AAQNYv349Dz/8cIOv8/DDD/OnP/2Jv/zlL/Tu3ZvJkyc757gEBgayevVqEhIS+NWvfkXv3r25/fbbKS0tbfIRF60SOhOpG+HNizlkRDG6/EU2zD6fDqENu5cpIiINd7LVJuK9GmOVkEZYzkT1CEtHUy5+VKpFv4iISBNTYDkTQdHgF4wZg3hTtuaxiIiINDEFljNhMrnsKaRNEEVERJqaAsuZck68zSJFmyCKiIg0KQWWM6WlzSIiIs1GgeVMuQWW098ES0REzp5+57YsjfHfS4HlTLnMYSksq+JoSeUpXiAiImfLYrEANPnOwNK4SkocUydO3BagIdSa/0xVB5Y4cw6+VJGSW0xEkJ+HixIRad18fHwIDAzkyJEj+Pr6Yjbr393ezDAMSkpKyM7OJiwszBk4z4QCy5lqFwu+gVgqS+hkOkJKbgkDE8I9XZWISKtmMpno0KEDBw4caPA+OeI5YWFhxMbGntU1FFjOVM3S5qyfHSuFtLRZRKRZ+Pn50b17d90WaiF8fX3PamSlhgLL2YhIqg4sWikkItKczGazWvO3Mbr5dzZcm8epF4uIiEiTUWA5G+rFIiIi0iwUWM6GywhLTlEFReVVHi5IRESkdVJgORvVgSXefAQLNlI18VZERKRJKLCcjXYdwccfX2x0NOXotpCIiEgTUWA5G2YzhCcB2gRRRESkKSmwnC1NvBUREWlyCixnK8JlhEVzWERERJqEAsvZcq4UylRgERERaSIKLGfLeUsoi8P5pZRX2TxckIiISOujwHK2IrsCkGDKxmTYScsr9XBBIiIirc8ZBZb58+eTlJSEv78/gwcPZs2aNfWe+9FHH3HRRRcRHR1NSEgII0aM4Msvv3Q7Z+HChZhMplqPsrKyMymveYV0AosffqYqOpBLap4m3oqIiDS2BgeWJUuWMHPmTB588EG2bt3KmDFjuPTSS0lNTa3z/NWrV3PRRRexbNkytmzZwoQJE7jyyivZunWr23khISFkZGS4PVrExlZmC4R3BqCzOZODOZrHIiIi0tgavFvz888/z9SpU7njjjsAmDdvHl9++SWvvvoqc+bMqXX+vHnz3L5+8skn+fTTT/nPf/7DwIEDncdNJhOxsbENLcc7RHSBnN10NmWRql4sIiIija5BIywVFRVs2bKFiRMnuh2fOHEi69evP61r2O12CgsLiYiIcDteVFREYmIicXFxXHHFFbVGYE5UXl5OQUGB28NjXHdtVi8WERGRRtegwJKTk4PNZiMmJsbteExMDJmZmad1jeeee47i4mImTZrkPNarVy8WLlzIZ599xuLFi/H392fUqFHs2bOn3uvMmTOH0NBQ5yM+Pr4hb6VxuTWP0wiLiIhIYzujSbcmk8nta8Mwah2ry+LFi3n00UdZsmQJ7du3dx4fPnw4t9xyC+eeey5jxozhgw8+oEePHrz00kv1Xmv27Nnk5+c7H2lpaWfyVhqHywhL2tESbHbDc7WIiIi0Qg2awxIVFYXFYqk1mpKdnV1r1OVES5YsYerUqXz44YdceOGFJz3XbDZz3nnnnXSExWq1YrVaT7/4puQSWKpsNg4fKyU+ItDDRYmIiLQeDRph8fPzY/DgwSQnJ7sdT05OZuTIkfW+bvHixdx2220sWrSIyy+//JTfxzAMtm3bRocOHRpSnueExoPZB39TJTEc1cRbERGRRtbgVUKzZs1iypQpDBkyhBEjRrBgwQJSU1OZNm0a4LhVk56ezjvvvAM4wsqtt97KCy+8wPDhw52jMwEBAYSGhgLw2GOPMXz4cLp3705BQQEvvvgi27Zt45VXXmms99m0LD4Qlgh5+0gyZ3Iwt5hR3aI8XZWIiEir0eDAMnnyZHJzc3n88cfJyMigX79+LFu2jMTERAAyMjLcerK8/vrrVFVVMWPGDGbMmOE8/pvf/IaFCxcCcOzYMe666y4yMzMJDQ1l4MCBrF69mqFDh57l22tGEV0gbx+JpixSNfFWRESkUZkMw2gVM0QLCgoIDQ0lPz+fkJCQ5i9g2X3w7eu8VnUlW3vO5PUpQ5q/BhERkRbmdP9+ay+hxqJdm0VERJqMAktjqd4EsabbbSsZuBIREfEKCiyNxWVpc0lFFUeKyj1ckIiISOuhwNJYQuPBZCHQVE57jum2kIiISCNSYGksPn4Q5tgeQC36RUREGpcCS2OquS1kziJVmyCKiIg0GgWWxuSyCeJBjbCIiIg0GgWWxhThWCmUaMoiRe35RUREGo0CS2NyjrBkkaJbQiIiIo1GgaUxudwSOlZSQX5JpYcLEhERaR0UWBpTeCJgIthURhQFpORplEVERKQxKLA0Jh+rox8LatEvIiLSmBRYGltEEqB5LCIiIo1JgaWxOXuxaIRFRESksSiwNDaXTRAVWEREpDVI3p7F2j05VFTZPVaDAktjc9kEUZNuRUSkNZjzxQ5u+ecmvtqR5bEaFFgaW3VgSTJlklVQRmmFzcMFiYiInLmU3GL2HynGx2xidPcoj9WhwNLYwjsDEGIqIZxCUtXxVkREWrAVO7MBGNI5nBB/X4/VocDS2HwDIKQToJVCIiLS8q3YdQSACT3be7QOBZam4DqPRRNvRUSkhSqpqGLD/lwAzu+lwNL61LToN2dq4q2IiLRYG/blUlFlp1NYAN3aB3u0FgWWpqARFhERaQW+qZ6/cn6v9phMJo/WosDSFFxWCimwiIhIS2QYBitr5q/0ivZwNQosTcNlhCX9WCmVNs812hERETkTu7OKSD9WitXHzIgunlvOXEOBpSlU7ycUbioi2F5I+tFSDxckIiLSMCt2OW4HjegaSYCfxcPVKLA0Db8gCI4FHKMsB7W0WUREWhjX+SveQIGlqbjsKaTmcSIi0pLkl1ayJeUo4Pn+KzUUWJpK9W2hRFMmB3MUWEREpOVYs+cINrtBt/bBxEcEerocQIGl6bj0YklVLxYREWlBVuys6W7r+dVBNRRYmkpNYFEvFhERaUHsdoNVux3zVyZ4yfwVUGBpOq7N4/JKsNsNDxckIiJyaj+l55NTVEGw1YchiRGeLsdJgaWphDvmsESZCrBWFZFVWObhgkRERE6tZjnzmO5R+Pl4T0zwnkpaG/8QCHLc+0swZWnirYiItAgrqpcze8vqoBoKLE0pwnVpsybeioiIdztSWM4Ph/IBGO9FE25BgaVpOeexZHJQE29FRMTLrdrtWB3Ur1MI7UP8PVyNOx9PF9CquWyCuFKBRUREvFzN/JUTbwct2bkEk8nEBQkXEBkQ6YnSFFiaVE3zOLPa84uIiHertNlZvbtmd+bjgcUwDN746Q2ySrKIDYplbNxYj9SnW0JNyaUXS2puCYahpc0iIuKdvk85SmFZFRFBfpwbF+Y8vjNvJ1klWQT4BDCswzCP1afA0pSqA0t70zFs5UXkFVd4uCAREZG6fVN9O2hcj2gsZpPz+MpDKwEY3mE4VovVE6UBCixNKyAMAh33+moayImIiHijldXt+E9cHbQ6bbXjePz45i7JjQJLU3PpeJuqibciIuKF0o+VsiurELPJMcJS40jJEX7O/RnAY3NXaiiwNDWXlUKaeCsiIt6oplncoIRwwgL9nMdXH3KMrvSL7EdUQJRHaqtxRoFl/vz5JCUl4e/vz+DBg1mzZk2953700UdcdNFFREdHExISwogRI/jyyy9rnbd06VL69OmD1WqlT58+fPzxx2dSmvdx6cWiERYREfFGzu62J2x2WDN/ZVz8uOYuqZYGB5YlS5Ywc+ZMHnzwQbZu3cqYMWO49NJLSU1NrfP81atXc9FFF7Fs2TK2bNnChAkTuPLKK9m6davznA0bNjB58mSmTJnCDz/8wJQpU5g0aRKbNm0683fmLWpWCmlps4iIeKGyShvr9uUA7v1XyqrK2Hh4I+D5+SsAJqOBa22HDRvGoEGDePXVV53HevfuzTXXXMOcOXNO6xp9+/Zl8uTJ/OUvfwFg8uTJFBQU8MUXXzjPueSSSwgPD2fx4sWndc2CggJCQ0PJz88nJCSkAe+oiR36Dv5xARlGBFf6LuC7hy7ydEUiIiJOK3dlc9tbm4kN8WfD7PMxmRwrhFYfWs2Mr2cQGxTL8uuWO483ttP9+92gEZaKigq2bNnCxIkT3Y5PnDiR9evXn9Y17HY7hYWFREQc37J6w4YNta558cUXn/Sa5eXlFBQUuD28UvUISwdTHkVFhRSVV3m4IBERkeNW7qppFhftFkpWpa0CYFzcuCYLKw3RoMCSk5ODzWYjJibG7XhMTAyZmZmndY3nnnuO4uJiJk2a5DyWmZnZ4GvOmTOH0NBQ5yM+Pr4B76QZBUaAfxgACaZsUnRbSEREvIRhGHxTx+7MhmGw6pAjsHh6dVCNM5p0e2LSMgzjtNLX4sWLefTRR1myZAnt27tP7GnoNWfPnk1+fr7zkZaW1oB30MycHW8zSdHEWxER8RL7c4pJzSvBz2JmVLfjq4C8pbutqwbtJRQVFYXFYqk18pGdnV1rhORES5YsYerUqXz44YdceOGFbs/FxsY2+JpWqxWr1XMd9xokogsc/l6BRUREvErN6qBhXSIIsh6PBN7S3dZVg0ZY/Pz8GDx4MMnJyW7Hk5OTGTlyZL2vW7x4MbfddhuLFi3i8ssvr/X8iBEjal1z+fLlJ71mi+Kyp5BuCYmIiLeo2Z15/Am7M9fMX/GG1UE1Grxb86xZs5gyZQpDhgxhxIgRLFiwgNTUVKZNmwY4btWkp6fzzjvvAI6wcuutt/LCCy8wfPhw50hKQEAAoaGhANxzzz2MHTuWp59+mquvvppPP/2Ur776irVr1zbW+/Qsl263/9EIi4iIeIGi8iq+PZAHwISe7t1tf8n9BfCe+StwBnNYJk+ezLx583j88ccZMGAAq1evZtmyZSQmJgKQkZHh1pPl9ddfp6qqihkzZtChQwfn45577nGeM3LkSN5//33eeustzjnnHBYuXMiSJUsYNsw77pudtZrAYtYIi4iIeIe1e3KotBl0jgykS3Sw83hNd9v+Uf093t3WVYNHWACmT5/O9OnT63xu4cKFbl+vXLnytK55/fXXc/31159JOd4vsisAHcklt6CA8iobVh+Lh4sSEZG2bGU9t4Nq5q940+gKaC+h5hEYiWENwWwyiOMIaXmlnq5IRETaMMMwnPNXzu/lvd1tXSmwNAeTCVNEEuDYBFG3hURExJO2ZxSQVVBOgK+FoUnHG7l+m/ktZbYyYoNi6Rne04MV1qbA0lxcNkHU0mYREfGkmuXMo7pF4e97fIrCyrSVgPd0t3WlwNJctLRZRES8xAqXdvw1XLvbjovz/O7MJ1JgaS4uS5tT8jTCIiIinnG0uIKtqUcB93b8O/N2kl2STYBPAEM7DPVUefVSYGkuEY6VQup2KyIinrR6zxHsBvSKbUfHsADncW/sbutKgaW5VI+wdDLlkHW0gCqb3cMFiYhIW+Tc7LCX93e3daXA0lyC22P4BmExGcTas8jIL/N0RSIi0sbY7AardlfPX3G5HZRdku2V3W1dKbA0F5MJk+s8Ft0WEhGRZrYt7SjHSioJ8fdhUEKY87i3drd1pcDSnKp7sXQ2ZXJQK4VERKSZrdjpGF0Z2yMaH8vxCODNq4NqKLA0J5cRllStFBIRkWZWM3+lpXS3daXA0pzUi0VERDwkM7+M7RkFmEyOEZYart1te4T38GCFJ6fA0pyqN0FUt1sREWluNZsdnhMXRlTw8WXL3tzd1pUCS3OqHmGJM+WQnluAYRgeLkhERNoK52aHLquDvL27rSsFluYUHIvhE4CvyUZEVRZHCss9XZGIiLQB5VU21u7JAdzb8Xt7d1tXCizNyWx27trcWS36RUSkmXx38CjFFTaigq306xjqPF7T3XZEhxFe2d3WlQJLc3PZtflgjibeiohI06vZnXl8z2jM5uPzVLy9u60rBZbm5jLCoqXNIiLSHL7ZVXs5s2t32zFxYzxSV0MosDS3iJqVQlkc1EohERFpYim5xew/UoyP2cTo7se72LaE7rauFFiam7MXSyap6sUiIiJNrOZ20JDO4YT4+zqP19wO8vbVQTUUWJpbdWCJN2WTllPo4WJERKS1W7Gr9maHZVVlbMzw/u62rhRYmltIJwyLFT+TjcDyTPJLKj1dkYiItFIlFVVs2J8LuM9faSndbV0psDQ3sxlTeGegZmmzbguJiEjT2LAvl4oqO53CAujWPth5vKV0t3WlwOIJLvNYNPFWRESaiutmhzXBpCV1t3WlwOIJrrs2a+KtiIg0AcMwWFkzf8Wlu+2OvB0tprutKwUWT4g8vmuzRlhERKQp7M4qIv1YKVYfMyO6HF+2XLM6qCV0t3WlwOIJbkubFVhERKTx1Wx2OKJrJAF+FufxmttBLWV1UA0FFk+oDiwJpixScwo8XIyIiLRGrvNXatR0tzVhahHdbV0psHhCSByG2RerqQpzUSYlFVWerkhERFqR/NJKtqQcBWB8j+OBpaV1t3WlwOIJFh9M4YkAJJq1p5CIiDSuNXuOYLMbdI0OIiEy0Hm8Zv7K2LixnirtjCmweIrLPJYUzWMREZFGtGKnY3WQ6+2gltjd1pUCi6e4bIKYoqXNIiLSSOx2g1W7HfNXXNvxt8Tutq4UWDwl4vjSZo2wiIhIY/kpPZ+cogqCrT4M6RzhPN4Su9u6UmDxFN0SEhGRJlCzOmh0tyj8fBx/5l2727bE20GgwOI5EUlATbdb7dosIiKNY+Wu2suZXbvbnhd7nqdKOysKLJ4SloBhshBgqqDyWAYVVXZPVyQiIi3ckcJyfjiUD8D4nsfb8bfU7rauFFg8xeILYQkAJJBF+rFSDxckIiIt3ardjtVB/TqF0D7E33l85aGVQMu9HQQKLB5lqtkE0ZyplUIiInLWatrxu64Oyi7JZnvu9hbZ3daVAosnRTqWNmulkIiInK1Km53Vu2t2Z24d3W1dKbB4klYKiYhII/k+5SiFZVVEBPlxblyY83jN/JVx8eM8VFnjUGDxJLdeLLolJCIiZ+6b6ttB43pEYzE7+qy4drcdF9cGA8v8+fNJSkrC39+fwYMHs2bNmnrPzcjI4KabbqJnz56YzWZmzpxZ65yFCxdiMplqPcrKys6kvJajZg6LSXNYRETk7KysbsfvujpoU8amFt3d1lWDA8uSJUuYOXMmDz74IFu3bmXMmDFceumlpKam1nl+eXk50dHRPPjgg5x77rn1XjckJISMjAy3h7+/f73ntwphCRgmM0GmckqOZmC3G56uSEREWqD0Y6XsyirEbHKMsNSoWR3UUrvbumpwYHn++eeZOnUqd9xxB71792bevHnEx8fz6quv1nl+586deeGFF7j11lsJDQ2t97omk4nY2Fi3R6vnY4XQOAA62g6TWdDKR5RERKRJrKjubjsoIZywQD/A0d12dZpjwm1LXs5co0GBpaKigi1btjBx4kS34xMnTmT9+vVnVUhRURGJiYnExcVxxRVXsHXr1rO6Xkthqt4EsbM5i4O6LSQiImegJrBMOLG7bWnL7m7rqkGBJScnB5vNRkxMjNvxmJgYMjMzz7iIXr16sXDhQj777DMWL16Mv78/o0aNYs+ePfW+pry8nIKCArdHi+Scx5JFqlYKiYhIA5VV2li3Lwdw779SszpoZMeRLba7raszmnR74n0wwzDO6t7Y8OHDueWWWzj33HMZM2YMH3zwAT169OCll16q9zVz5swhNDTU+YiPjz/j7+9R1YElyZRJSp4Ci4iINMzG/bmUVdqJDfGnd4d2zuOu81dagwYFlqioKCwWS63RlOzs7FqjLmdVlNnMeeedd9IRltmzZ5Ofn+98pKWlNdr3b1ZaKSQiImdh5a6aZnHRzsGD1tLd1lWDAoufnx+DBw8mOTnZ7XhycjIjR45stKIMw2Dbtm106NCh3nOsVishISFujxbJ5ZZQSo4Ci4iInD7DMPimev7KeNfbQYcct4NaendbVz4NfcGsWbOYMmUKQ4YMYcSIESxYsIDU1FSmTZsGOEY+0tPTeeedd5yv2bZtG+CYWHvkyBG2bduGn58fffr0AeCxxx5j+PDhdO/enYKCAl588UW2bdvGK6+80ghv0cuFd8bARIiplIK8rLO+vSYiIm3H/pxiUvNK8LWYGN3teDCpWR3U0rvbumpwYJk8eTK5ubk8/vjjZGRk0K9fP5YtW0ZiYiLgaBR3Yk+WgQMHOj/fsmULixYtIjExkYMHDwJw7Ngx7rrrLjIzMwkNDWXgwIGsXr2aoUOHnsVbayF8/SGkExQcIrriEHnFFUQGt/zJUSIi0vRqVgcNS4okyOr4k96autu6anBgAZg+fTrTp0+v87mFCxfWOmYYJ2+INnfuXObOnXsmpbQKpsguUHCIRFMWB3NLFFhEROS0OHdndlnOXNPdtkNQhxbf3daV9hLyBjV7CpkzSc3TPBYRETm1ovIqvj2QB8CEnrW7246NG9uqphgosHgDl00QD+ZoabOIiJza2j05VNoMOkcG0iU6GGh93W1dKbB4A5elzanqxSIiIqdhRR2rg1pbd1tXCizewHWERb1YRETkFAzDcM5fOb9X6+1u60qBxRuEJwEQZirmWE6Wh4sRERFvtz2jgOzCcgJ8LQxNinAeb23dbV0psHgDv0Ds7RxN8kJK0ygsq/RwQSIi4s1qbgeN6haFv68FaJ3dbV0psHgJc82uzaZMUrQJooiInMQKl3b8NVpjd1tXCizeIsJxW6izKUsTb0VEpF5HiyvYmnoUqHt35tbU3daVAou3qFkpZNbEWxERqd/qPUewG9Arth0dwwIAKK0qbZXdbV0psHgL50qhTFJ1S0hEROpR12aH32Z8S7mtvNV1t3WlwOItXHZt1giLiIjUxWY3WLXbMX/FdTmz6+qg1tTd1pUCi7eoDiyRpkLyco54uBgREfFG29KOcqykkhB/HwYlhAGtu7utKwUWb2ENxh7kSMvWohTKKm0eLkhERLzNip2Of9CO7RGNj8XxJ3x73nZnd9shsUM8WV6TUmDxIqbI6qXNZHLoqOaxiIiIu5r5K3WtDmqN3W1dKbB4EZPrPBZtgigiIi4y88vYnlGAyQTjetbuv9JaVwfVUGDxJjW9WMxZpKgXi4iIuFhZvXfQOXFhRAU7RlJcu9uOjRvryfKanAKLN3HZtTlFK4VERMSFc7ND19tBNd1to/sTGRDpkbqaiwKLN3HZtVnt+UVEpEZ5lY21e3KAE9rxV89fGR833hNlNSsFFm9SHViiTfkcyc3xcDEiIuItvjt4lOIKG1HBVvp1DAXcu9u29ttBoMDiXfxDsVUP6fkcO0CVze7hgkRExBsc724bjdnsaAzXFrrbulJg8TLm6qXNcUYmGfllHq5GRES8gXP+ShvrbutKgcXLmFzmsahFv4iIpOQWs/9IMT5mE6O7RwFtp7utKwUWb+PSi0UTb0VEZEX17aAhncMJ8fcF3Lvbnhd7nifLazYKLN6mZoTFrKXNIiICK3Y52vHX193Wz+LnkbqamwKLt4nUCIuIiDiUVFSxYX8uABNc56+krQRaf3dbVwos3qZ6hCXWdJTMnDwPFyMiIp60YV8uFVV2OoUF0L19MABZxVnsyNvRJrrbulJg8TYB4dis4Y7Pj+7HMAzP1iMiIh7j3OywV7RzJdDqdMdk27bQ3daVAosXMlXfFupgyyC7sNzD1YiIiCcYhsHK6vkrrsuZ21J3W1cKLF7IHKkW/SIibd3urCLSj5Vi9TEzootjObNrd9tx8W1n/goosHgnl00Q1YtFRKRt+nRbOgAjukYS4GcBYFPGJmd32+5h3T1ZXrNTYPFGEY5ut51NWaRqhEVEpM3ZfDCP11fvB+BXg+Kcx11XB7WF7rauFFi8Uc0IizmLlDwFFhGRtiSvuII/LNqKzW5wzYCOXHlOB6C6u+2httXd1pUCizeqDiydTLlkaGmziEibYbcb/OmDbWQWlNElOognru3vHEnZnredI6VHCPQJbDPdbV0psHijwAhsfiEA2HMPerYWERFpNgvW7GfFriNYfcy8ctMggqw+zufaYndbVwos3shkgogkACIrDnGspMLDBYmISFP77mAez365C4BHr+pL7w4hbs8756+0sdVBNRRYvJQl0jHxVi36RURav6PFFfxhsWPeytUDOnLDefFuz7t2tx3TaYyHqvQsBRZvVbMJopY2i4i0ana7wZ8+/IGM/DK6RLnPW6nRVrvbulJg8VYuIyxa2iwi0nq9sWY/3+zMxs/HzMs3DSLYZd5Kjbba3daVAou3qh5hSTJnclCBRUSkVdqSksczNfNWruxLn44htc5py91tXSmweKvqwNKRXA7nHvVwMSIi0tiOuvRbufLcjtw4NL7O82q623YM6tjmutu6UmDxVkHR2HyDMJsMKrW0WUSkVTEMg//78AcO55eRFBXEk9f2q7dzrevqoLbW3daVAou3Mpkg3DHKElKSRklFlYcLcqiy2fnn2gOMe3YF/1iz39PliIi0SP9Yc4CvnfNWBtLO37fO8+yG3dnddlxc270dBGcYWObPn09SUhL+/v4MHjyYNWvW1HtuRkYGN910Ez179sRsNjNz5sw6z1u6dCl9+vTBarXSp08fPv744zMprVWxRB3ftTnVC1r0b9qfy+UvruWvn28nJbeEv/13B59sTfd0WSIiLcqWlKM8/b+dAPzlij707Rha77k78na06e62rhocWJYsWcLMmTN58MEH2bp1K2PGjOHSSy8lNTW1zvPLy8uJjo7mwQcf5Nxzz63znA0bNjB58mSmTJnCDz/8wJQpU5g0aRKbNm1qaHmtS0TNSqFMDuZ4LrBkF5Qx8/2tTF6wkV1ZhYQF+nJh7xgA7vv3j2w+qO0DREROx7GSCv64eCtVdoMrzunAzcMSTnp+W+9u66rBgeX5559n6tSp3HHHHfTu3Zt58+YRHx/Pq6++Wuf5nTt35oUXXuDWW28lNLTuFDlv3jwuuugiZs+eTa9evZg9ezYXXHAB8+bNa2h5rUuE6whL8/diqbn9c/5zq/hk22FMJrhpWAIrf9ebBV3Wcmv3Sipsdu565ztS1CtGROSkauatpB8rpXNkIHN+VbvfyonaendbVw0KLBUVFWzZsoWJEye6HZ84cSLr168/4yI2bNhQ65oXX3zxSa9ZXl5OQUGB26PVcWse17wjLK63f4rKqzg3LpRPp4/kycRthL01CvPXj/BY3n2c36GCoyWV/HbhZvJLKpu1RhGRluSfaw/w1Y7j/Vbqm7dSQ91t3TUosOTk5GCz2YiJiXE7HhMTQ2Zm5hkXkZmZ2eBrzpkzh9DQUOcjPr7u5WAtWnVgiTMdIT0nv1m+ZXZBGfcu2eZ2+2fOr/rz8Q0dOeebW+Gzu6EsH8y+mIqzeN3yDN1CDPYfKWbav7ZQUWVvljpFRFqS71OP8tQXjnkrD1/Rh36d6p+3UuOr1K8AOCf6nDbb3dbVGU26PXEIyzCMs15q1dBrzp49m/z8fOcjLS3trL6/V2oXi83ij8VkUJ5zsEm/levtn4+3pjtv/6y4dzQ3Vn6M+bWRcGA1+ATARX+FuzdDUHt8c7bzceybtPMzsWF/Lg998hOGYTRprSIiLcmxEke/lSq7weXndOCWU8xbAdifv5+Xtr4EwMTEiac4u22o3f/3JKKiorBYLLVGPrKzs2uNkDREbGxsg69ptVqxWq1n/D1bBJMJIzwJcnYQUJRCRZUdP5/GX4m+aX8uf/n0F3ZlFQJwblwof72mH+dYUmDRJZDxg+PEpLFw5QvOkR9uXAwLL6dd6tcs6xXHuJ8u5oPvDtE5Kojp47s1ep0iIi2NY97Kj6QfKyUxMpCnTmPeSkllCfeuuJfiymKGxAzhpt43NVO13q1Bf/38/PwYPHgwycnJbseTk5MZOXLkGRcxYsSIWtdcvnz5WV2ztbBEOVYKJZDFoaONO4+l3ts/dw7inB1zYcEER1jxD4WrXoZbPzseVgDihsC1rwEQv/ttFg34BYBn/reLZT9lNGqtIiItkWPeShZ+FjOvnMa8FcMweHjdw+zP30/7gPY8O+5ZfMwNGltotRr8U5g1axZTpkxhyJAhjBgxggULFpCamsq0adMAx62a9PR03nnnHedrtm3bBkBRURFHjhxh27Zt+Pn50adPHwDuuecexo4dy9NPP83VV1/Np59+yldffcXatWsb4S22bKbqTRA7mzJJySuhS3TwWV+zymbn7Q0pzE3eTVF5FSYT3Dg0gf83sSfh2Zvg9ashr7opXJ9r4NJnoF09o119r4XcffDNXxm+8yn+2u9ZHv45lnuXbKNDqD8DE8LPul4RkZZoq9u8ld6nNW/lne3vsDxlOT5mH54b/xxRAVFNXWaL0eDAMnnyZHJzc3n88cfJyMigX79+LFu2jMTERMDRKO7EniwDBw50fr5lyxYWLVpEYmIiBw8eBGDkyJG8//77PPTQQzz88MN07dqVJUuWMGzYsLN4a62Ey0qhlJxi6Hl2l6v39k8kkPwn+L46aLbrAJc/B70uP/VFx/zJEVp+WMQtaY+yq8vz/Gt/IHe+8x0fTx9FfETg2RUtItLC5JdUcnfNvJX+HbhleOIpX7M5czNzt8wF4L7z7mNA+wFNXGXLYjJayQzJgoICQkNDyc/PJySk9m6XLdaB1fD2ley3x/LueR/xyJV9z+gy2QVlzPliJx9Xd6YNC/Tl/kt6MXlIPOad/4Fl/wdFWY6Th9wOFz7quBV0uqrK4d1rIWUd9tB4buZJNmRZ6BETzL9/P5KQUwyDioi0FoZhcNe7W0jenkVCRCCf/3H0KX8HZhVnMenzSeSV5XFFlyt4cvSTbWbfoNP9+629hLxd9QhLvOkIh3IKG/zyelf//Gk8N/byxfzBLfDBFEdYiewGv/0CrpjbsLAC4GOFyf+CiC6Y89N4O3Ae8cGwO6vI8a8Mm5Y7i0jb8Oa6gyRvPz5v5VRhpdJWyf+t+j/yyvLoEd6Dv4z4S5sJKw2hwOLt2nXEbvbD12SjtIFLmzftz+WKl9ybv30yfRRPXt2X8J2L4JVhsPNzMPvAmP+Daesg8SwmOgdGwE0fgH8ofhlb+E/C+wT4mlm9+wiPfPaLljuLSKu3Le0YT32xA4CHruhN/7hT/+Pv79/9nW1HttHOtx1zx88lwCegqctskTT12NuZzdjCOmPO241v/kFsdgOL+eTJO7uwjDnL6rn9k7cP3r4ZUqonNHccBFe9BLH9GqfeqO6OkZZ3ryVs/2d83j+eC7eO4r1NqSRFBXHHmC6nvoaISAvkmLfyPZU2g8v6xzLlNOatfL7/cxbtXATAnDFzSAg5dY+WtkojLC2AJcrR06STkUlmQVm959Xc/rng73Xc/hncAfO65+HVkY6w4hsIFz8Jd3zVeGGlRtJYuGIeAF23v8JbAx0rjp5YtoPk7VmN+71ERLyAYRj8v3//wKGjpSREBPLUdeec8rbOrrxdPLb+MQB+d87vtF/QKSiwtADmSMeoRJIps95NBr89kOe8/VPoevvn2v6EH/vZ0VPl68fBVg5dz4fpG2DEDDBbmqboQVNg1EwAxu16nNl9j2IY8MfFW/k5vXm2GRARaS4L1x9keQPmrRRUFHDvynsps5UxquMofn/u75up0pZLgaUlqJ54m2jKJOWETRCzCx3N3ya9voGdmS7N36aP4twYX/jyQfjHBZD1EwSEw7Wvwy0fQXjnpq/7gkeg95WYbBXcdfhhrkuqoLTSxtS3N5ORX9r0319EpBn8kHaMJ5c55q08ePmp563YDTsPrnmQtMI0OgZ15KkxT2Fpqn88tiKaw9ISOHuxZPFddWCpaf42L3k3hSc2fwvyg30r4D/3wLEUxzX6XQ+XPAXB0c1Xt9kM1y6A/MswHd7KM4FPsL/9Y2zNLmfqwu/4cNoIgqz6n6CItFz5pZXMqJ63cknfWG4dcep5K//46R+sPLQSP7Mfz094njD/sKYvtBXQCEtL4FzanE1qTsHJb/+YiuCT6fDuNY6wEhLnWLlz/T+bN6zU8AuEG9+HkE5YcvewOPRVYoLMbM8o4J73t2Kza+WQiLRMhmFw/79/5NDRUuIjAnj6+lPPW1mfvp6Xt74MwEPDH6Jv5Jn11mqLFFhagtA47GZfrKYqtu/aWfftn7hQ+HkpvDIUtr0HmGDoXTBjI/S42LP1t4uFm5aAbxD+aWv4b9dPsfqY+GpHNk/8d4dnaxMROUNvrz/I/37JxNdi4pWbBhEacPJ5K+lF6dy35j4MDK7rfh3Xdr+2mSptHRRYWgKzhaoQxzBjR3uG++qfoQmYCw/D4hvh37dD8RGI6gm3fwmXPQvWdh4uvlpsf7j+TTCZidq9mI8HbgXgzXUHeHfDQc/WJiLSQD8eOsYT1fNW/nxZb86JCzvp+eW2cmatnEV+eT59I/sye9jsZqiydVFgaSF8ox2bII6PKjx++yfAB759w9EAbvcXYPaFcQ/AtDWQ4IX7MPW8BCY+AUCfn55l/uDDADzy2S+s3JXtycpERE6b67yVi/vGcNvIzqd8zZxNc9ieu50waxhzx8/FarE2faGtjAJLC1Gza/NdfQ3OjQ+DI7vgrUsdewBVFELceY6gMmG2o02+txr+exgyFTC4dPdfuKdPMXYD7l60lZ2ZBZ6uTkTkpAzD4IGlP5KWV0pceADPXH/uKeetLN29lKV7lmI2mXlm7DN0CO7QTNW2LgosLUX1xFuO7IJVz8BroyFtI/gGwaXPOG4Bte/t2RpPh8nkqLfr+ZgqS5h55C9cmminqLyK29/aTHZh/Y3xREQ87Z0NKXzx8+nPW/k552ee2OQYWf7DwD8wouOI5iizVVJgaSkikhwf9ybDiifAVgHdLoIZm2DY75quAVxTsPjArxdCdC9MhRm8ZDxNn0gzh/PLuPPt7yitsHm6QhGRWn46lO9cKDD70t6O0e6TOFp2lFkrZ1Fpr2RC/ARu73d7M1TZeimwtBQRXY9/HhgJ1/0Tbv4QwuI9V9PZ8A91rBwKjMIn+yf+3f5NIgPM/HAon1kfbMOu5c4i4kUKyhzzVipsdib2ieG3ozqf9Hyb3cb9q+8noziDhHYJPDH6Ccwm/ck9G/rptRThnR3LlM+7A2Zshv7XO26vtGThneHGxWCxEnhgOZ/3/go/i5kvfs7kmS93ebo6ERHg+LyV1LwS4sIDePY05q28su0VNmRsIMAngLkT5tLOz0tWbLZgCiwthcnkWKZ8+XMQFOnpahpP/FC4Zj4AHbb/gyVDdgLw2qp9vP9tqicrExEB4N2NKSz7yTFv5eWbBhEaePJ5KytSV/DGT28A8OiIR+kR3qM5ymz1FFjE8/pfD+P/DMDAn/7Gc4PzAHjok59ZtzfHk5WJSBv3c3o+f/vcMW/lgUt7M+AU81ZSClL481rH77Nbet/CZV0ua+oS2wwFFvEO4+6DcyaDvYpf7f0zd/WupMpuMO1fW9ibXejp6kSkDXKdt3JRnxhuP8W8lZLKEmaumElRZRED2w9k1pBZzVNoG6HAIt7BZIKrXoL44ZjKC3jg6COcH2+isKyK3y7cTG5RuacrFJE2xDAMZi/9iZTcEjqFBfD3U8xbMQyDxzY8xt5je4kKiOK5cc/haz75rSNpGAUW8R4+VrjhPQjvjPnYQV73m0vXcF/S8kq5690tlFVqubOINI9/bUrlvz9l4GM28fJNA085b2XRzkUsO7AMi8nC38f9nehAD2w228opsIh3CYpy7C5tDcU3/Vs+jl9MiL+FLSlHue/fP2IYWu4sIk3r5/R8/vqf7QA8cGkvBiaEn/T8rdlb+fvmvwPwpyF/YnDM4CavsS1SYBHvE90TJr0NJgshuz/i83M24GM28dkPh5n71R5PVycirVhReZVz3sqFvWOYOjrppOfnlObwp5V/osqo4pLOl3BL71uaqdK2R4FFvFPXCXDF8wAk/DiPd4elAfDi13v46PtDnqxMRFqxp7/YeXzeyq/POem8lUp7Jf+36v84UnqEbmHdeGzkY6fszyJnToFFvNfg22DE3QCM+PFh/jq4BID7l/7Ipv25HixMRFqjjftzeXdjCgDPXH8OYYF+Jz1/3pZ5bMnaQpBvEHPHzyXQN7A5ymyzFFjEu130OPS8DGzl3HLgAab0Mqi0GfzuX1s4kFPs0dLKq2ykHyvlh7RjfL0jiyWbU1mz54jm2Yi0QKUVNu5f+iMANw5NYFS3qJOe/7+D/+Od7e8A8MSoJ+gc2rmpS2zzfDxdgMhJmS3wqzfgrUsxZf7IY0WPs7fT39iQXsntCzfz8fSRp/xXUEOUVdrIKSrnSGE5OUUV5BSVk1NY7vhYVMGR6q+PFJVTWFZV5zX6dAjhjxd0Z2KfGMxmDQ+LtAR/X76LlNwSOoT68+fLep303L1H9/KXdX8BYGq/qVyQeEFzlNjmmYxW8s/BgoICQkNDyc/PJyQkxNPlSGMrOAxvnA+FGZQnjueizLtJza9gWFIE704dhp9P/YOFpRXVIcQZPiqqA4nro4KcwnIKy+sOIfXxtZiICrYSFWwlPMiPLQfzKK7ebbpXbDvuPr8bl/brgEXBRcRrbUk5yvWvrccw4K3fnseEnu3rPbeooogb/3sjBwsOMqzDMF678DV8zPq3/9k43b/fCizSchzeBm9dCpUlHO1zK2N+uZyichuXn9OBEV0ij4ePwgq3gFITIE6Xn8VMVLAf0e2szjAS1c7v+OfBVqKrvw4N8HWbZHe0uIK31h3grXUHneGnW/tg/nB+N644p6OCi4iXKau0cfmLa9h3pJjrBsXx3KRz6z3XMAzuXXkvX6d+TUxgDB9c+QER/hHNWG3rpMAirdPO/8L7NwMGewc9xMUb+2Kzn/p/wlYfc3XwsBId7FcdOlwCSbAfUdVfh/j7nN5Mf8OAyhIoyYWSPCg9CqHxENWN/NJKFq47yD/X7qeg+tZRl6ggZkzoxtUDOuJj0fQxEW/wzP92Mn/lPqLbWUm+d+xJbzG/+fObzN0yF1+zL29f8jb9o/s3Y6WtlwKLtF7rX4LlDwEmNgx7mbkpXQkN9HWEkOrgEV0dTmrCSLD1FCHEboeyY9XBI8/9Y0muy7Gj7s/Z6tgyoNcVMO5+6HAOhWWVvLMhhTfW7OdYSSUAiZGBzBjfjWsHdcJXwUXEY346lM8189dhsxu8PmUwF/eNrffcTRmbuCv5LuyGnYeHP8yknpOasdLWTYFFWi/DgP/cA9+/Db5BMPVLiHX5l05VuUuoyD0hhBytO4yUHgPO8P8VzL4QGAH+oZCz5/h1el3h2NSxw7kUlVfxr40pvLF6P7nFFQDEhQcwfXw3rh8cd9I5OCLS+Cqq7Fz18lp2ZhZy5bkdeenGgfWem1mcyeTPJ5NXlsc13a7h8ZGPq99KI1JgkdbNVgn/ug4OrILASAjpdDyMVJ7Fcme/dhAYDgERjhDi9jGy+vNw9+f8gh2bNwJk74TVz8DPH+EMLj0vdwSXjgMoqahi0aZUXlu1n5zqDR07hvrz+/Fd+fWQePx9LWf3cxGR0zLvq93M+2oPEUF+JN87lshga53nVdgq+O3/fsuPOT/SO6I371z6Dv4+/s1cbeumwCKtX+lR+OdEyNld+zmTuZ7QUUcYCYx0fB4QDj6NtET6yC5Y/Sz89G+cwaXHpTD+fug4kLJKG4u/TeW1VfvIKnAEl5gQK9PGdeXGoQkKLiJNaEdGAVe+tJYqu8FLNw7kynM71nvuXzf8lQ92f0CIXwhLrlhCXLu4Zqy0bVBgkbah6IhjlMUa4j76YQ0FsxfcZjmy2xFcfv43GHbHsR6XOOa4dBpEWaWND79LY/7KfWTklwEQFWxl2rgu3DQsgUA/LZcUaUxVNjvXzl/PT+n5TOwTw+tTBtd7e+eTvZ/w8LqHMWHilQteYUzcmGautm1QYBHxJjl7qkdcPjweXLpf7Bhx6TSY8iobS7ek88qKvaQfKwUgMsiPO8d2YcrwRIKsCi4ijWH+yr08879dhAb4knzvWNqH1H17Z0fuDqZ8MYVyWznTB0zn9+f+vpkrbTsUWES8Uc5eWPN3+HGJS3CZCOMegLjBVNrsfLzVEVxSch17J4UH+nLHmC7cOiKRdv6+HixepGXbm13IZS+upaLKznO/PpfrBtd9eye/PJ/Jn08mvSidMZ3G8PIFL2M2ecGIbSulwCLizXL3weqa4FLd2K7bhY7gEn8eVTY7n247zMsr9jr3TArx9+H20Un8dlQSoQEKLiINYbMb/Pq19XyfeozxPaN567bz6rwVZDfs3P313axJX0NccBzvX/E+odZQD1TcdiiwiLQEuftgzXPww/vHg0vXC2D8AxA/FJvd4PMfD/PSN3vZm10EQDurD78d1ZnbRyc16j5KIq3ZP9ce4K+fbyfY6sPye8fSMSygzvPe+vktnt/yPFaLlfcue4+eET2budK2R4FFpCXJ2w+rn4MfFrsEl/MdIy4Jw7DbDb74OZMXv97DrqxCAIL8LNw6sjN3jE6qd0mmiMDBnGIueWE1ZZV2nry2PzcNS6jzvO2527l52c1U2at4dMSjXNfjumautG1SYBFpifIOVI+4LAZ79UaMXSY4RlwShmO3GyzfnsWLX+9he0YBAAG+FqaMSOTOMV2IbqfgIuLKbje48Y2NbDqQx8iukbx3x7A6bwWVVJYw+fPJHCw4yIUJF/L8+OfVHK6ZKLCItGRHDzqCy7ZFx4NL0jhHcEkciWEYfL0jmxe/2cOPh/IB8Pc1c9PQRH43rgsx9ax8EGlr3t2YwsOf/EyAr4Xl944lPiKwzvMe3/A4H+7+kPaB7Vl65VLC/MOat9A27HT/fp/RtOf58+eTlJSEv78/gwcPZs2aNSc9f9WqVQwePBh/f3+6dOnCa6+95vb8woULMZlMtR5lZWVnUp5IyxfeGa56Cf7wPQz6DZh9HP1m3roU3r4SU8p6LuwTw6czRvHWb89jQHwYZZV23lx3gDHPrOCRT392Lo8WaasOHS3hqWU7ALj/kp71hpWvU7/mw90fYsLEk6OfVFjxUg0OLEuWLGHmzJk8+OCDbN26lTFjxnDppZeSmppa5/kHDhzgsssuY8yYMWzdupU///nP/PGPf2Tp0qVu54WEhJCRkeH28PfXvxKljQtPhKtedASXwbc59i06sBoWXgYLr8CUso4JPdvz8fSRvDt1KEMSw6mosvP2hhTGPrOCGe99z5aUo55+FyLNzjAMZn/0E8UVNoYkhnPriM51npddks2j6x8F4La+tzGsw7DmK1IapMG3hIYNG8agQYN49dVXncd69+7NNddcw5w5c2qdf//99/PZZ5+xY8cO57Fp06bxww8/sGHDBsAxwjJz5kyOHTt2hm9Dt4SkjTiWCmvnwvfvgt2x+zOJox23ipLGYBgGG/bn8sqKvazbm+t82YD4MKaOTuKSfrHaIVrahA82p3Hf0h+x+pj54p4xdIkOrnWO3bDzu+TfsTFjI70jevPeZe/ha1HLgObWJLeEKioq2LJlCxMnTnQ7PnHiRNavX1/nazZs2FDr/IsvvpjvvvuOyspK57GioiISExOJi4vjiiuuYOvWrSetpby8nIKCAreHSKsXlgBXzIU/boUhUx0jLilr4e0r4K3LMB1cw8gukbx3x3D+N3MMk4Y4doLelnaMPyzeythnVvDaqn3kl1Se+nuJtFCZ+WX89b/bAZh1UY86wwrAu9vfZWPGRvwt/jw19imFFS/XoMCSk5ODzWYjJibG7XhMTAyZmZl1viYzM7PO86uqqsjJyQGgV69eLFy4kM8++4zFixfj7+/PqFGj2LNnT721zJkzh9DQUOcjPj6+IW9FpGULi4crnod7tsF5d4DFD1LWwdtXwluXwf5V9IppxzPXn8v6B85n5oXdiQr2IyO/jKe+2MnwOV/z8Cc/s/9IkaffiUijMgyDBz/+icKyKs6ND+OOMV3qPG9n3k5e+P4FAO4beh9dQus+T7zHGY0Nn7jUyzCMky7/qut81+PDhw/nlltu4dxzz2XMmDF88MEH9OjRg5deeqnea86ePZv8/HznIy0t7UzeikjLFhoHlz8Hf9wG593pCC6p6+Gdq+AfF8DPS4kKsDDzwh6svf98nr3+HHrFtqO00sa7G1M4/7lVTF24mXV7c2glCwaljfvsh8N8vTMbX4uJZ68/B4u59t+m0qpS7l99P5X2SibET+D67td7oFJpqAbtqBYVFYXFYqk1mpKdnV1rFKVGbGxsnef7+PgQGRlZ52vMZjPnnXfeSUdYrFYrVqt6TogAENoJLv87jJkFa+fBloWQvgX+fTuExMGwu/Af9Bt+PSSe6wfHsWFfLm+uO8DXO7Odj16x7bh9dBJXndsRf1+Lp9+RSIMdKSznkc9+AeCP53enR0y7Os977rvn2J+/n+iAaB4b+Zj6rbQQDRph8fPzY/DgwSQnJ7sdT05OZuTIkXW+ZsSIEbXOX758OUOGDMHXt+77hYZhsG3bNjp06NCQ8kQkpCNc9gzc+7OjS25gFBQcguS/wPN9YNl9mI4eYGS3KP7xm/P45k/juXVEIgG+FnZmFnLfv39k9NPfMDd5N0cKyz39bkQa5JHPfuZYSSV9OoQwbXzXOs9ZmbaSJbuWAPC30X8j3D+8GSuUs9HgVUJLlixhypQpvPbaa4wYMYIFCxbwxhtv8Msvv5CYmMjs2bNJT0/nnXfeARzLmvv168fvfvc77rzzTjZs2MC0adNYvHgx113naHv82GOPMXz4cLp3705BQQEvvvgi7777LuvWrWPo0KGnVZdWCYnUobIMfvoQNs6H7O3VB03Q8zIYMR0SR4HJRH5JJe9vTuXt9Qc5nO/of+RnMXP1gI7cPjqJ3h30/1Pi3Zb9lMH0977Hx2zikxmj6Nep9oaFR0qOcN1n13G0/Ci/6fMb/u+8//NApXKi0/373aBbQgCTJ08mNzeXxx9/nIyMDPr168eyZctITEwEICMjw60nS1JSEsuWLePee+/llVdeoWPHjrz44ovOsAJw7Ngx7rrrLjIzMwkNDWXgwIGsXr36tMOKiNTD1x8GTYGBt8D+lbDhFdibDLv+63jEngMj7ia077X8blxXbh+dxJe/ZPLPtQfYmnqMD7cc4sMthxjZNZKpo5OY0LM95jrmBIh40tHiCv7y6c8A/H581zrDit2w89C6hzhafpReEb3446A/NneZcpbUml+krTmyCza+6tghuqq6G25wLAy9E4bcDoERAHyfepR/rj3A/37OxGZ3/JpIigrit6M6c92gOIKsDf73jkiTuHfJNj7emk739sF8/sfRWH1qz8F6d/u7PLP5GawWKx9c8QFdwrQqyFtoLyERObmSPPjuTfj2DSiqnhjvEwADboTh0yGqOwDpx0p5Z/1BFn2bSmGZY1+jEH8fbhyWwG9GdKZjWICn3oEIX+/IYurb32E2wdLfj2RgQu05KbvydnHjf2+k0l7JQ8MeYnKvyR6oVOqjwCIip6eqAn75yHG7KPPH48e7T3QEly7jwWSiuLyKf285xFvrDnAwtwQAi9nEpf1imTo6qc4/FCJNKb+0kolzV5FVUM5dY7vw58t61zqnrKqMGz6/gX35+xgfN54Xz39Rq4K8jAKLiDSMYTiaz22YD7uWAdW/Gtr3dUzQ7Xc9+Ppjtxt8szObf649wIb9x9v/D0yobv/fNxYftf+XZnD/v39kyXdpJEUF8cU9Y+pcjv/kpidZvHMxUQFRLL1qKRH+ER6oVE5GgUVEzlzuPtj0Gmx9DyqLHceCoh1ddYdMheBoALYfLuDNdQf4bNthKmx2ADqFBfCbkYlMPi+B0AC1OpemsWbPEab881tMJvjgdyM4r3PtILL60GpmfD0DgNcufI1RnUY1d5lyGhRYROTslR6FLW/DtwugIN1xzGKFc34Nw2dATB8AsgvL+NfGVN7bmEJucQUAgX4Wfj04jttGJZEUFeSpdyCtUFF5FRfPXU36sVJuG9mZR6/qW+ucnNIcrvvsOvLK8ril9y3cP/R+D1Qqp0OBRUQaj60Stn/q6OeSvuX48S4TYMQM6HoBmM2UVdr4bNth3lx3gJ2Zhc7TzokLZWKfGC7qE0uPmGDNIZCz8pdPf+adDSnEhQfw5cyxtVasGYbB9K+nszZ9LT3Ce7Do8kVYLeqM7q0UWESk8RkGpH0LG1+BHf8Bw3EbiKieMPz3cO4N4BuAYRis35fLP9ceYMWubFx/yyRGBnJR7xgm9o1lcGJ4nXu9iNRn4/5cbliwEYD37hjGqG5Rtc55b8d7PPXtU1gtVt6//H26hXdr7jKlARRYRKRpHT0ImxbA9+9ARfVoSkCEo5fL0DuhXSzguF309Y5skrdnsXZvDhVVduclIoL8uKBXey7qE8OY7tEE+GkPI6lfaYWNS15YTUpuCTcOjWfOr86pdc7uo7u58fMbqbBX8Odhf+bGXjd6oFJpCAUWEWkeZQWw9V+w6VU4Vt3l2uwL/a93LIvucPyPSnF5Fat3H2H59iy+2ZlNfmml8zl/XzNjukczsU8MF/SOISLIr7nfiXi5v32+nX+sPUCHUH++vHcsIf7uk7rLbeXc8PkN7D22l7FxY3n5/Jd1+7EFUGARkeZlt8HOzx3LotM2Hj+eONoxSbfXFRB0fPi+0mZn84E8lm/PInl7FunHSp3PmU0wpHNE9byXGBIjNWm3rfs+9SjXvboew4C3bjuPCb3a1zrnqW+f4r0d7xHhH8FHV31EZECkByqVhlJgERHPSd/iCC6/fAyGzXHMZHZsttjnakd4CTm+G7thGGzPKCB5exbLf8lie0aB2+V6xrRjYl9HeOnfKVT/am5jyiptXPHSWvZmF/GrQZ14ftKAWuesObSG6V9PB2D+BfMZEzemmauUM6XAIiKel3/IsWfRjs8g4wf35+KHQe+roPeVEJ7o9lRaXglf7XCMvGw6kOfcywigQ6g/F/aOYWLfGIYlReLnoyZ1rd0z/9vJ/JX7iAq28tWssYQFut8uzC3N5Vef/Yq8sjxu7n0zDwx9wEOVyplQYBER73L0oGNl0fbP4NC37s91GAB9roLeV0OU+4qOYyUVrNiVzfJfsli1+wglFTbnc+38fZjQ0zFpd3zPaNr5q1Fda/PToXyumb8Om93gtVsGc0m/WLfnDcNgxtczWJO+hm5h3Xj/ive1hLmFUWAREe9VcBh2fO4YeUlZd3x5NED7Po6Rlz5XOT53uf1TVmlj/b4ckrdnkbw9m5yicudzvhYTI7pGOee9xIT4N+c7kiZQUWXnqpfXsjOzkMvP6cArNw2qdc7inYt5ctOT+Jn9WHzFYnqE9/BApXI2FFhEpGUoOgK7/usYeTmwCuxVx5+L6Fo98nIVdBzoFl7sdoOtacdYvj2T5F+y2J9T7HbZc+PDmNgnhol9YujWXs3qWqIXvtrD3K92ExHkR/K9Y4kMdh852Xt0Lzf89wbKbeU8MPQBbu59s4cqlbOhwCIiLU/pUdj1P8fIy96vwXZ8BIXQBMd8lz5XQdxQMLvPXdmbXeSYtLs9k62px9ye6xwZyMS+sVzUJ4ZBCWpW1xLszCzgypfWUmkzePHGgVx1bke358tt5dz035vYfXQ3ozqN4tULXlUobaEUWESkZSsvhN1fOsLLnmSoLDn+XHAs9L7CMfKSOAos7q3ZswvK+GpHNsnbM1m3N9e5MSNAZJCfc9LuqG5Rde7w21YUlFWyJ6uIjmH+xIb4e80f/CqbnWvnr+en9Hwu6hPDgimDa9X29LdP868d/yLCP4KlVy0lKqB2x1tpGRRYRKT1qCiBfV87bhvt/h+Uuyx7DoyEnpc5lksnjQMf9xUkRTXN6n7J5Jud2RSUHb/lFOhnYVyPaCb2jeH8njGEBrbuSbt2u2P5+KrdR1i1+wjfpxylqnoFVqCfhaSoILpEB9MlKogu0UF0jQ4mKSqo1l49Te3Vlft4+n87CfH3IXnWuFrzkdalr2PaV9MAeOWCVxgbN7ZZ65PGpcAiIq1TVTnsXwU7PoWdy6A07/hz1lDoeYlj5KXbBeAb4PbSSpudbw/ksfyXTJZvzyIjv8z5nMVsYniXCCb2cdw66hjm/tqWKq+4gjV7HAFl9e4ct4nKANHtrOQVV7gtHT9RbIg/XaIdIaZLVLAzzHQMC2j022t7s4u47MU1VFTZefb6c/j1kHj391OWx3WfXUdOaQ439LyBB4c/2KjfX5qfAouItH62KkhZ6xh52fk5FGUdf843CLpf5Jjz0v1isAa7vdQwDH5OL2D59kyW/5LFrqxCt+f7d6reYbpvDD1j2nnN7ZJTsdkNtqUdc46i/HjomNvmk4F+FkZ2jWJcz2jG94gmPiKQSpud1LwS9h8pZv+RIsfHHMfH3OKKer+Xn4+ZpMjjozGOUOP4eGLb/NOt/devref71GOM6xHNwt+e5/ZzNwyDP37zR1YeWknX0K68f8X7+PtoNVhLp8AiIm2L3ebYSXrHZ44AU3Do+HMWq2PEpe+1ji67foG1Xp6SW+zstLs5Jc/tj3xCRKBjxZGX7jCdXVDGyuqAsnZPjtseTQC9Ytsxrmc043pEMyQxokHN9o6VVLCvJsjkHA80KbklbnODThQVbK0OMsdHZbpEBxMfHoCPpe7v/+baAzz++XaCrT58ee9YOp0wyrVk5xL+tulv+Jp9WXz5YnpG9Dzt9yHeS4FFRNouw4DD3zuCy47PIG//8eesodD/Ohg4pdZS6Ro5ReV8syOb5dszWb3HfYfpyCA/Lujdnol9Yhnd3TOTdiuq7GxJOeocRdlxwlYGIf4+jOnhCCjjekQ3SU8am93g0FHHqMy+E8JMdmF5va/ztZhIiAh0jsR0rQ4zVh8Lv359PWWVdp64th83D3Pvfrz/2H4mfT6Jcls59513H1P6TGn09ySeocAiIgKO8JL1C2z/FH58//iO0gAx/WDgLXDOZAiMqPPlxeVVrNlzhOW/ZPH1CTtMB/g6Ju1e1CeGC3q3r9UyvjGl5ZU4A8r6vTkUu3T8NZngnLgwZ0A5Ny603lGM5lBYVsmBnGLnLaZ9OcXsyy7iYG4xZZX1j8oAjOgSyXt3DMPsMopVYavgpv/exK6juxjZcSSvXvgqZpO2ZGgtFFhERE5kt8PB1fD9u45tAmr6vFj8oNfljvDSZQKY6x41qbTZ2Xwwj+W/1N5h2mI2MbRzhHOTxrjw2redGqKs0sbG/bnOkLL/iHtjvKhgP8ZWB5Qx3aOJCGq6sNRY7HaDw/mlx+fKuISaw/llhAX68tmM0SREuv/s/r7577y9/W3CreEsvWop0YHRHnoHbZhhOPokWUNqtRE4WwosIiInU5IHPy+F79+BzB+PHw+Jg4E3w4CbILxzvS83DINfDhewfHsWy3/JZGem+6Tdvh1DmNgnlol9Y+gVe+pJu4ZhsD+nmFW7HAFl4/5cyl1uRVnMJgYnhDvnovTpEOI2CtHSlVRUYTaZat1iW394Pb9L/h0AL054kQkJEzxRXutmq4TCTCjMgIJ0KMiAwsPVHzMcW2kUZkJVKUzfCO17N+q3V2ARETldGT84Rl1++gDK8o8fTxoHg251TNT1Pfk8kNTcEsc2Aduz2HwwD9dVwvERAY7w0ieGwYnhzts1ReVVrN+b4xxFOXS01O2aHUP9nQFlZLeoM1p505IdLTvKdZ9dx5HSI0zuOZmHhj/k6ZJaFsNw/O/ZGToyTggj1R+LjwCnGQVu/RS6jG/UMhVYREQaqrLMsTz6+3cc+xrV8A+DcyY5bhl1OPeUl8krruDrHVks357F6t1H3EZKwgN9Gd+zPRn5pWxJOUql7fivYD+LmWFdIpxzUdryHkiGYXDPintYkbaCLqFdeP+K9wnwaR29cRqFrQqKMusOIK4BxbVD9MmYfaFdBwjpUP2x4wkfq4/7Nv5/AwUWEZGzcTQFtr0HW99zXyIde45j1KX/9RAQfsrLlFRUsWZPTvWk3SyOlbgvOU6KCnIGlGFdIgj0a/qusoZhsD9/P6sPrWZn3k46Bneka1hXuoV1Iyk0CavFeuqLNLEPd3/I4xsex8fsw+LLF9MropenS2palWWO7SjKC6ofhVBWAGXHXEZGXIJIUTanPSriHwrtOjpCR0jH45+7fgyMrLU/V3NRYBERaQx2G+xfCVvfhZ3/BVt1IzWL1bEZ46Ap0Hnsaf2yr7LZ+S7lKGv35BDdzsr4ntEkRgY1bf3VSqtK2Zy5mdWHVrPm0BoOFx+u8zyzyUx8u3i6hnZ1hpiuYV1JCk3Cz9I8E3v35+9n8n8mU2Yr4/+G/B+/6fubZvm+Z8RW6RI0qkOGa/Bwfn3iOQXux2z1N+irl9nHsa9WvaMi1R/r6DvkTRRYREQaW0ke/LjEMd8l+5fjx8MSYMAtjom6YfH1v76ZHSo8xJr0Naw+tJrNmZspd9n92s/sx3mx5zGg/QCySrLYd2wfe4/tpbCisM5rWUwW4tvFOwNMzcfOIZ3xtTTe3JpKWyU3L7uZHXk7GN5hOK9f9HrzLGGuLHNMOD2WCvmHHCti3EJGvvvXNcGjqvTU124Iv3ZgrX74hzhW5bSLdbkt4zIqEhTtsVGRxqTAIiLSVAwDDm91jLr89G+XzRhN0PV8x1yXXpeDT/PeWqm0VbI1e6tjFCV9Dfvz97s9HxsUy9hOYxkTN4ahsUMJ9HX/l7dhGBwpPcLeY3vZd2yfM8TsO7aPosqiOr+nxWQhISTBGWC6hnWlW2g3EkMT8TU3PMg8/93zvPXLW4RZw1h61VLaB7Zv8DVqqVmSm5/mCCPH0qo/T6v+/BAUZ5/d9/ANPB40rCHugaPWsZqvTzjmF1zvkvrWTIFFRKQ5VJQ4erpsfRcOrjl+PCDC0ZBu4C0Q26/Jvv2RkiOsTV/LmvQ1rD+8nuLK4/1aLCYLA9oPYEynMYyNG0u3sG5nNInXMAyyS7KPB5j840HG9fu58jH5kBiS6DYa0y2sG/Eh8fUGmY0ZG7lz+Z0AzJswjwsSLji9Am1Vjnkd+YdOCCLVYST/EFTUHbjc+AY5RshCOjlGL04VMFyDSCOOMrU1CiwiIs0tb79jku62RY4VGzU6DnRsBdD/escEyLNgs9v4Ofdn1hxy3OrZkbfD7fkI/whGdxrNmLgxjOgwglDr2X2/kzEMg6ySLGd4cR2ZKamqe3WKj9mHziGda91aCvELYdJ/JpFdms31Pa7nkRGPHH9RRbHLyEiqy+fVAaXgMBi2Or+fm6BoCI13hJLQmkfc8a8DwuvcqkGalgKLiIin2G2w7xvH8uhdX4C9emWQjz/0udoRXmL6gsnseJgt1Z9bXL4+/oczvzyf9YfXs+bQGtamr+Vo+VG3b9c3si9j48YyptMY+kb1bf629XY72KscocFehWGrJKPoMHvz97E//wB7Cw6yryCVfUVplNrKTnqpzr5hLAkbSmBBpst8krxT12D2hdBOx4NIWHUYcQaTTk2yJFfOngKLiIg3KM6BH9533DI6svO0XmIAu319WRMUyJqAALZZfbG7BJhgu8HIChtjKuyMrjCIoibomOsIPmb3x4nhyGRyBCyXwOH82vk48fgJz5/m8lo7kOFjYZ+vL3v9fJ0fD/j6Umo2Y7XbeScjiz4VlbVfbA09IYTEuY+UBMe0igmobZECSyO5b/V97Dm6h4R2CSSEJBDfLp74dvEkhCQQGxiLpQ1OkBKRM2AYkL7FMeryy8cuE3UdSkwmNgX4szrAnzWBAWT5uPdj6VZRwZiSMsaUljKgrJwWMWPCZHYsvXU+LO5fVz9vN1tIt1iw+gbSPqyz+8hITUg5y1tp4r1O9+9303coauH2HN3D3mN72Xtsb63nfMw+xAXHOQOMM8y0S6BTcKdGXeonIi2cyQRxQxyPK18Au43UghTHip7D69ic/T2V9uMjC/4WK0OjBzA25jxGtx9Mp4AoMOyO4GO3VX9e/dH5tVHHMdfzTvi65mH2cYy41BUqzD6OkYv6gke9r7Oc9nwQM+A9i8HFW2mE5RTSCtJIKUwhtSCVtMI00grTSC1M5VDhIbdfLicym8x0COrgDDAJIQnEtYsjoZ3jo1pMi7RehmFQVFnEsfJj5Jfnk1+ez7HyY86vc0pz+DbzW1IKUtxe1ym4k3NFz3mx5+Hvc/L9i0RaA90SamI2u43skmxSC1NJLawOMwVpzs9LT9FMqH1g+zrDTHy7eNr5tWvy+kXk9JTbyp2B48TgceLXNR8LyguoMqpOeW0fkw+DYgY5J8wmhSa12b2DpO1SYPEgwzDILcsltcARZlILHCMyNeGmvk6SNSL8I5wBpmZEJiHE8XmYNUy/0EQawDAMbIYNm2GjtLLUGTAKKgocn5edEDgq8t3Cx6n+8XEy/hZ/Qq2hhFnDCLOGEWINcX7eO7I3IzqMINgvuBHfrUjLo8DixfLL84+HmerbSzVf55WdfPmexWQhwCcAfx9/AnwC3D+3OL4O8A3A31LH8y6Puo4F+ATga/Ztc4HIbtix2W1UGVXY7I4/bFX2KscfuZMcr/na9Xmb3YZR83+G46PdsGNggIHzc7vh2L3X+bxx/DV2HF/X1OZ2vnH8es7XuDxfcy071bsDGzi/j9tHo+6va7geP/G1ta554rXquGaVvcrxczZsbj8/m2HDbtidz1cZVdjtdZ9X32vczqk+z3ktw+782ZwNi8lCqDWUEL/jgaMmiIRaQ91CievXuqUjcmqadOvFQq2h9I/uT//o/rWeK64sdsyTKXAJM9WjNFklWdgMG0WVRfW2yT5bZpPZEWhqAo+vSxByCTr+Pv6YMNX+Y+n6h/Rkf1wNnH+Y6/rjfuIfcNc/9rXOr/kXdE2IOEXAODGIOP8QS5sQ5BtUO3D4hRLmf0IQ8av+6B9KsG9w8/c2ERE3ZxRY5s+fz7PPPktGRgZ9+/Zl3rx5jBkzpt7zV61axaxZs/jll1/o2LEj9913H9OmTXM7Z+nSpTz88MPs27ePrl278sQTT3DttdeeSXktWpBvEL0ietW5lXpZVRkFFQWUVpVSVlVGaVUpJVUlzs9dj7s+ymxllFa6fF59XklVifPzmgnEdsNOcWVxve222xIfkw8WswWLyYLFbHH72sfs4zzu+rXZZMZkMmHG8dGEyfnRbDK7fW0y1fHcieefcI2TXavWMRwjZSeOmJ14vL6v3V5z4rn1vcb5wf14zc/PbDIf/5m6/Pxcj5lNZnzMjnNrvaau19b1GrO5zvOsFqtW74m0UA0OLEuWLGHmzJnMnz+fUaNG8frrr3PppZeyfft2EhISap1/4MABLrvsMu68807+9a9/sW7dOqZPn050dDTXXXcdABs2bGDy5Mn89a9/5dprr+Xjjz9m0qRJrF27lmHDhp39u2wl/H38m2yIudJeSVlVWd2BxzUQ2Y5/bhiG2x9oTJz2H+qaf63Wer6e1zjPdw0DLn+Yfcw+9YYIZ9ioI3jUF0Rq3peIiHiHBs9hGTZsGIMGDeLVV191HuvduzfXXHMNc+bMqXX+/fffz2effcaOHcf3u5g2bRo//PADGzZsAGDy5MkUFBTwxRdfOM+55JJLCA8PZ/HixadVV0uawyIiIiIOp/v3u0E3ZSsqKtiyZQsTJ050Oz5x4kTWr19f52s2bNhQ6/yLL76Y7777jsrKypOeU981AcrLyykoKHB7iIiISOvUoMCSk5ODzWYjJibG7XhMTAyZmZl1viYzM7PO86uqqsjJyTnpOfVdE2DOnDmEhoY6H/Hx6pMoIiLSWp3RtPcT7+0bhnHS+/11nX/i8YZec/bs2eTn5zsfaWlpp12/iIiItCwNmnQbFRWFxWKpNfKRnZ1da4SkRmxsbJ3n+/j4EBkZedJz6rsmgNVqxWq1NqR8ERERaaEaNMLi5+fH4MGDSU5OdjuenJzMyJEj63zNiBEjap2/fPlyhgwZgq+v70nPqe+aIiIi0rY0eFnzrFmzmDJlCkOGDGHEiBEsWLCA1NRUZ1+V2bNnk56ezjvvvAM4VgS9/PLLzJo1izvvvJMNGzbwz3/+0231zz333MPYsWN5+umnufrqq/n000/56quvWLt2bSO9TREREWnJGhxYJk+eTG5uLo8//jgZGRn069ePZcuWkZiYCEBGRgapqanO85OSkli2bBn33nsvr7zyCh07duTFF1909mABGDlyJO+//z4PPfQQDz/8MF27dmXJkiXqwSIiIiKA9hISERERD2qSPiwiIiIinqDAIiIiIl5PgUVERES8ngKLiIiIeD0FFhEREfF6DV7W7K1qFjtpE0QREZGWo+bv9qkWLbeawFJYWAigTRBFRERaoMLCQkJDQ+t9vtX0YbHb7Rw+fJh27dqddNPEhiooKCA+Pp60tDT1d3Ghn0tt+pnUpp9J3fRzqU0/k9rays/EMAwKCwvp2LEjZnP9M1VazQiL2WwmLi6uya4fEhLSqv8Hc6b0c6lNP5Pa9DOpm34utelnUltb+JmcbGSlhibdioiIiNdTYBERERGvp8ByClarlUceeQSr1erpUryKfi616WdSm34mddPPpTb9TGrTz8Rdq5l0KyIiIq2XRlhERETE6ymwiIiIiNdTYBERERGvp8AiIiIiXk+B5RTmz59PUlIS/v7+DB48mDVr1ni6JI+ZM2cO5513Hu3ataN9+/Zcc8017Nq1y9NleZU5c+ZgMpmYOXOmp0vxuPT0dG655RYiIyMJDAxkwIABbNmyxdNleUxVVRUPPfQQSUlJBAQE0KVLFx5//HHsdrunS2tWq1ev5sorr6Rjx46YTCY++eQTt+cNw+DRRx+lY8eOBAQEMH78eH755RfPFNtMTvYzqays5P7776d///4EBQXRsWNHbr31Vg4fPuy5gj1EgeUklixZwsyZM3nwwQfZunUrY8aM4dJLLyU1NdXTpXnEqlWrmDFjBhs3biQ5OZmqqiomTpxIcXGxp0vzCps3b2bBggWcc845ni7F444ePcqoUaPw9fXliy++YPv27Tz33HOEhYV5ujSPefrpp3nttdd4+eWX2bFjB8888wzPPvssL730kqdLa1bFxcWce+65vPzyy3U+/8wzz/D888/z8ssvs3nzZmJjY7nooouc+8W1Rif7mZSUlPD999/z8MMP8/333/PRRx+xe/durrrqKg9U6mGG1Gvo0KHGtGnT3I716tXLeOCBBzxUkXfJzs42AGPVqlWeLsXjCgsLje7duxvJycnGuHHjjHvuucfTJXnU/fffb4wePdrTZXiVyy+/3Lj99tvdjv3qV78ybrnlFg9V5HmA8fHHHzu/ttvtRmxsrPHUU085j5WVlRmhoaHGa6+95oEKm9+JP5O6fPvttwZgpKSkNE9RXkIjLPWoqKhgy5YtTJw40e34xIkTWb9+vYeq8i75+fkAREREeLgSz5sxYwaXX345F154oadL8QqfffYZQ4YM4de//jXt27dn4MCBvPHGG54uy6NGjx7N119/ze7duwH44YcfWLt2LZdddpmHK/MeBw4cIDMz0+33rtVqZdy4cfq96yI/Px+TydTmRixbzeaHjS0nJwebzUZMTIzb8ZiYGDIzMz1UlfcwDINZs2YxevRo+vXr5+lyPOr999/n+++/Z/PmzZ4uxWvs37+fV199lVmzZvHnP/+Zb7/9lj/+8Y9YrVZuvfVWT5fnEffffz/5+fn06tULi8WCzWbjiSee4MYbb/R0aV6j5ndrXb93U1JSPFGS1ykrK+OBBx7gpptuavUbIp5IgeUUTCaT29eGYdQ61hbdfffd/Pjjj6xdu9bTpXhUWloa99xzD8uXL8ff39/T5XgNu93OkCFDePLJJwEYOHAgv/zyC6+++mqbDSxLlizhX//6F4sWLaJv375s27aNmTNn0rFjR37zm994ujyvot+7dausrOSGG27Abrczf/58T5fT7BRY6hEVFYXFYqk1mpKdnV0r/bc1f/jDH/jss89YvXo1cXFxni7Ho7Zs2UJ2djaDBw92HrPZbKxevZqXX36Z8vJyLBaLByv0jA4dOtCnTx+3Y71792bp0qUeqsjz/t//+3888MAD3HDDDQD079+flJQU5syZo8BSLTY2FnCMtHTo0MF5XL93HWFl0qRJHDhwgG+++abNja6AVgnVy8/Pj8GDB5OcnOx2PDk5mZEjR3qoKs8yDIO7776bjz76iG+++YakpCRPl+RxF1xwAT/99BPbtm1zPoYMGcLNN9/Mtm3b2mRYARg1alStJe+7d+8mMTHRQxV5XklJCWaz+69ci8XS5pY1n0xSUhKxsbFuv3crKipYtWpVm/29C8fDyp49e/jqq6+IjIz0dEkeoRGWk5g1axZTpkxhyJAhjBgxggULFpCamsq0adM8XZpHzJgxg0WLFvHpp5/Srl075+hTaGgoAQEBHq7OM9q1a1drDk9QUBCRkZFtem7Pvffey8iRI3nyySeZNGkS3377LQsWLGDBggWeLs1jrrzySp544gkSEhLo27cvW7du5fnnn+f222/3dGnNqqioiL179zq/PnDgANu2bSMiIoKEhARmzpzJk08+Sffu3enevTtPPvkkgYGB3HTTTR6summd7GfSsWNHrr/+er7//ns+//xzbDab83dvREQEfn5+niq7+Xl2kZL3e+WVV4zExETDz8/PGDRoUJtewgvU+Xjrrbc8XZpX0bJmh//85z9Gv379DKvVavTq1ctYsGCBp0vyqIKCAuOee+4xEhISDH9/f6NLly7Ggw8+aJSXl3u6tGa1YsWKOn+P/OY3vzEMw7G0+ZFHHjFiY2MNq9VqjB071vjpp588W3QTO9nP5MCBA/X+7l2xYoWnS29WJsMwjOYMSCIiIiINpTksIiIi4vUUWERERMTrKbCIiIiI11NgEREREa+nwCIiIiJeT4FFREREvJ4Ci4iIiHg9BRYRERHxegosIiIi4vUUWERERMTrKbCIiIiI11NgEREREa/3/wFeGur1AV/LvQAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_66_3.png"
|
||
}
|
||
},
|
||
"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 = 40\n",
|
||
"n_boostraps = 100\n",
|
||
"maxdegree = 14\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",
|
||
"id": "8cf88b3a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"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",
|
||
"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",
|
||
"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",
|
||
"You may also find this recent [article](https://www.pnas.org/content/116/32/15849) of interest."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "86bfc49a",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\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"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABGQAAAHOCAYAAADey9/qAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAADyLUlEQVR4nOzdd3jT5dfH8XeS7l02lFL2ngIiQ5YiU0HEAchQQUQR9efkceHGgaI4cAKioAKKiixlioDKll32noWWtnTfzx8hgdICTVc6Pq/rykX6zXecNOUkPb3vc1uMMQYREREREREREck3VncHICIiIiIiIiJS3KggIyIiIiIiIiKSz1SQERERERERERHJZyrIiIiIiIiIiIjkMxVkRERERERERETymQoyIiIiIiIiIiL5TAUZEREREREREZF8poKMiIiIiIiIiEg+U0FGRERERERERCSfqSAjeWrSpElYLBbnzcfHh3LlytGhQwfeeOMNjh8/7u4Q88XBgwd59NFHadeuHSEhIVgsFiZNmuTusERE8oRyf+aee+45LBYL9evXd3coIiLZphxv58rn+/bt26f7njluXbp0yd+gpcBRQUbyxcSJE1m5ciW///47H330EY0bN+bNN9+kTp06/PHHH+4OL8/t3LmTb7/9Fi8vL7p16+bucERE8kVxz/0XW79+Pe+88w5ly5Z1dygiIrmiuOd4Vz/fV61alZUrV6a7jRs3Lu8DlQLNw90BSPFQv359mjVr5vz6tttu47HHHqNNmzb07t2byMjIfP+Qeu7cOXx9ffPlWm3btuXEiRMArF69mmnTpuXLdUVE3Km4536HlJQU7rnnHoYNG8aGDRs4efJkvl5fRCQvFPcc7+rne19fX6677rr8CE0KEY2QEbepVKkSY8eO5ezZs3z66afpHlu9ejW33HILJUqUwMfHhyZNmvDDDz9kOMfy5ctp2bIlPj4+hIWF8fzzz/PFF19gsVjYu3evc7/KlSvTo0cPfvzxR5o0aYKPjw8vvfQSAEePHmXYsGFUrFgRLy8vqlSpwksvvURKSkq6ayUlJfHqq69Su3ZtvL29KV26NPfcc48zEV+J1ar/aiIiULxyv8OYMWOIioritddec+E7JSJS+BSnHK/P95IbNEJG3Kpbt27YbDaWLVvm3LZ48WK6dOlCixYtmDBhAsHBwXz33XfceeedxMfHM3jwYAA2btxIp06dqFmzJpMnT8bPz48JEybwzTffZHqttWvXsnXrVp577jmqVKmCv78/R48e5dprr8VqtfLCCy9QrVo1Vq5cyauvvsrevXuZOHEiAGlpafTs2ZM///yTp556ilatWrFv3z5efPFF2rdvz+rVq/P9L64iIoVVccr9W7Zs4dVXX+XHH38kICAgd76BIiIFWHHK8a7YtWsXJUqUICYmhoiICO666y6ee+45/Q5R3BmRPDRx4kQDmH///fey+5QtW9bUqVPH+XXt2rVNkyZNTHJycrr9evToYcqXL29SU1ONMcbcfvvtxt/f35w4ccK5T2pqqqlbt64BzJ49e5zbIyIijM1mM9u3b093zmHDhpmAgACzb9++dNvfeecdA5jNmzcbY4yZNm2aAczMmTPT7ffvv/8awHz88cdZ+G6kP2bixIlZPkZEpDBR7r8QV4sWLUzfvn2d29q1a2fq1at3xeNERAoy5fiMrvb5/tlnnzUff/yxWbRokfntt9/MiBEjjIeHh2nbtq3zuUvxpHFW4nbGGOf9nTt3sm3bNvr37w/Y5907bt26dePIkSNs374dgKVLl9KxY0dKlSrlPN5qtXLHHXdkep2GDRtSs2bNdNtmz55Nhw4dqFChQrprde3a1XkNx34hISHcfPPN6fZr3Lgx5cqVY8mSJbn2/RARKQ6KQ+5/9913iYyMVNNGESl2ikOOd8Wrr77K8OHD6dChA926dWP8+PGMGTOGZcuW8fPPP+fadaTw0ZQlcau4uDhOnTpFgwYNADh27BgATzzxBE888USmxziaIZ46dSrTRmGXax5Wvnz5DNuOHTvGr7/+iqen5xWvdezYMc6cOYOXl9cV9xMRkasrDrl///79vPDCC4wZMwYvLy/OnDkD2H8RSUtL48yZM3h7e2uouogUOcUhx+eGu+++myeeeIJVq1Zx66235um1pOBSQUbc6rfffiM1NZX27dsDOKvho0aNonfv3pkeU6tWLQBKlizpTPAXO3r0aKbHWSyWDNtKlSpFw4YNL9tosUKFCs79SpYsybx58zLdLzAwMNPtIiKSUXHI/bt37+bcuXM88sgjPPLIIxkeDw0N5ZFHHtHoGREpcopDjs9Nag5cvKkgI26zf/9+nnjiCYKDgxk2bBhgT8Y1atRgw4YNvP7661c8vl27dsyZM4eTJ086E31aWhrTp0/Pcgw9evRgzpw5VKtWjdDQ0Cvu991335GamkqLFi2yfH4REUmvuOT+xo0bs3jx4gzbH330UaKjo5k4cSIVK1Z06ZwiIgVdccnxuWHy5MkAWgq7mFNBRvLFpk2bnPMyjx8/zp9//snEiROx2Wz89NNPlC5d2rnvp59+SteuXencuTODBw8mLCyMqKgotm7dytq1a50J+dlnn+XXX3/lhhtu4Nlnn8XX15cJEyYQFxcHZK3a/PLLL/P777/TqlUrRo4cSa1atUhISGDv3r3MmTOHCRMmULFiRe666y6+/fZbunXrxiOPPMK1116Lp6cnBw8eZPHixfTs2fOqQw1nzJgB2P9qCval/xwrbvTp08f1b6qISAFXnHN/SEiI86/Dl25PSUnJ9DERkcKkOOd4h6x8vv/zzz957bXXuPXWW6latSoJCQnMnTuXzz77jI4dO3LzzTe7+J2XIsXNTYWliHN0YXfcvLy8TJkyZUy7du3M66+/bo4fP57pcRs2bDB33HGHKVOmjPH09DTlypUzHTt2NBMmTEi3359//mlatGhhvL29Tbly5cyTTz5p3nzzTQOYM2fOOPeLiIgw3bt3z/RaJ06cMCNHjjRVqlQxnp6epkSJEqZp06bm2WefNbGxsc79kpOTzTvvvGMaNWpkfHx8TEBAgKldu7YZNmyYiYyMvOr34uLvw6U3EZGiRLn/8rTKkogUdsrxF2Tl831kZKTp1q2bCQsLM97e3sbHx8c0aNDAvPbaayYhIeGq15CizWLMRS2wRYqAm266ib1797Jjxw53hyIiIvlEuV9EpOhSjpeiSlOWpFD73//+R5MmTQgPDycqKopvv/2W33//nS+//NLdoYmISB5R7hcRKbqU46U4UUFGCrXU1FReeOEFjh49isVioW7dukyZMoW7777b3aGJiEgeUe4XESm6lOOlONGUJRERERERERGRfKZFz0VERERERERE8pkKMiIiIiIiIiIi+azYF2QmTZqExWLBYrGwZMmSDI8bY6hevToWi4X27dune+zUqVOMGjWKunXr4u/vT3BwMLVr12bAgAFs3Lgx02tkdsvsuvnlueeew2KxUL9+/Swfs3v3bnr37k1ISAgBAQF06tSJtWvXZtgvJiaGZ599lpo1a+Ln50dYWBi33347mzdvzs2n4PTdd9/RuHFjfHx8qFChAo8++iixsbHp9jl79ixPPfUUN910E6VLl8ZisTB69OjLnjM5OZnatWszZsyYXIszKioKT09Pfvrppxyfy9XX74svvqBXr15UrlwZX19fqlevzvDhwzly5EiGfStXrpzpz+sDDzyQ47gzk9uvX9u2bXn00UfzJFYp3JT3Xcsb06ZNo23btpQtWxZvb28qVKjAzTffzIoVK9Ltd+TIEZ577jlatmxJqVKlCAoKomnTpnz22WekpqbmxVPJUt5YtGgR9957L7Vr18bf35+wsDB69uzJmjVrMj1nQcv77du3v+LP0tGjR696jsL8vu3K66e8L8Utvx88eJBHH32Udu3aERISgsViYdKkSS6dY+bMmbRu3ZoSJUoQEhLCtddey5QpUzLsN2TIEOrXr09ISAi+vr7UrFmTJ598kpMnT+bSs8m65ORkXnrpJSpXroy3tze1a9dm/Pjxme6b1ecHsGvXLry9vVm5cmWuxfrLL7/g4eHBiRMnXD528ODBmf6M1a5d2+VznTt3jpo1a2KxWHjnnXcyPL5z504GDBhApUqV8PX1pVq1avzvf//j1KlTLl8rp44fP87gwYMpVaoUfn5+tGzZkoULF2bYLzExkbfffpv69evj7+9P2bJl6dq1a4bPJwsXLiQgIIBDhw7l11NwjRuX3C4QJk6caAATGBho7r777gyPL1682Pl4u3btnNvPnj1rqlevbsqVK2fGjh1r/vjjD/Prr7+asWPHmtatW5vJkydnuMbEiRPNypUrM9yio6Pz46lmsG7dOuPt7W3Kli1r6tWrl6Vjjh8/bipUqGDq1atnZs6caX777TfTpk0bExgYaLZt25Zu37Zt2xo/Pz/z1ltvmUWLFpmvv/7aVK9e3QQGBpq9e/fm6nP55ptvDGCGDBliFi1aZCZMmGCCg4NNp06d0u23Z88eExwcbNq2bWuGDBliAPPiiy9e9rzjxo0zZcqUMbGxsbkW61dffWX8/PxMfHx8js6TndevQoUKpn///ubbb781S5YsMZ9++qmpWLGiKV++vDl69Gi6fSMiIkzr1q0z/Lzu3r07R3FnJi9evyVLlhhPT88MP5ciyvuu5Y3x48ebZ555xsyYMcMsWbLETJs2zTRv3tzYbDazZMkS536//vqrCQ8PN88++6z57bffzIIFC8xjjz1mrFarueeee3L9uWQ1b/Tp08d06NDBfPzxx2bJkiVm+vTp5rrrrjMeHh5m4cKFGc5b0PL+5s2bM/z8LFy40Hh6eprrrrvuqscX9vdtV14/5X0pbvl98eLFplSpUubGG280ffv2dcaVVV9++aUBzG233WbmzJlj5s6da+666y4DmHfffTfdvnfddZd5//33zW+//WYWLlxo3nzzTRMUFGTq1q1rEhMTc/mZXdmQIUOMt7e3eeutt8zixYvNM888YywWi3nttdfS7efK8zPGmF69epnu3bvnaqwDBw40HTp0yNaxgwYNMr6+vhl+xtavX+/yuR5//HFToUIFA5i333473WPHjx83JUuWNFWqVDGTJk0yixYtMmPHjjUBAQGmcePGJjU1NVvxZ0dCQoKpX7++qVixovnmm2/MggULTM+ePY2Hh0e6zxzGGDNgwABjtVrNs88+axYuXGimT59umjZtajw8PMzff/+dbt8OHTqYgQMH5tvzcIUKMueT6pAhQ4yvr2+GJHr33Xebli1bmnr16qVL3F999ZUBzKJFizI978U/uI5r/Pvvv3nyHLIjOTnZNG7c2IwcOdK0a9cuyx/Mn3zySePp6Znug1l0dLQpVaqUueOOO5zbIiMjDWCee+65dMevWLHiskkwu1JSUkz58uXNTTfdlG77t99+awAzZ84c57a0tDSTlpZmjDHmxIkTV/yFPjk52YSFhZlnnnnmqjG0a9fODBo0KEvxduvWzfTp0ydL+15Odl+/Y8eOZdj277//GsC88sor6bZHRETk+ptSZvLq9TPGmPr165uhQ4fmSdxSeCnvu5Y3MnPmzBnj6elpBgwY4NwWFRVlkpKSMuz70EMPGcDs378/29e7lCt5I7O8d/bsWVO2bFlzww03pNtekPP+xSZNmmQA88UXX1x138L+vu3K62eM8n5xV9zy+8VxOT7PuVKQad26tYmIiEh3nrS0NFO7dm3TsGHDqx7/8ccfGyDT4nZ2vPjiiyYiIuKK+2zatMlYLBbz+uuvp9s+dOhQ4+vra06dOuXc5srz27JliwHMvHnzrhpnVr/PSUlJJiQkxHz44YdX3TczgwYNMv7+/tk69mJ///238fLyMtOnT8+0IPP5558bwPzxxx/ptr/++usGMGvXrs1xDMZk7X3zo48+MoBZsWKFc1tycrKpW7euufbaa53bEhISjM1my1B4PXz4sAHMyJEj022fMWOGsdlsufpZJLcU+ylLDn379gXsQ7MdoqOjmTlzJvfee2+G/R3Dt8qXL5/p+azWgv2tHTNmDFFRUbz22msuHffTTz/RsWNHIiIinNuCgoLo3bs3v/76KykpKQB4enoCEBwcnO74kJAQAHx8fNJtj4yMpF+/fpQpUwZvb2/q1KnDRx99lKWYVq1axZEjR7jnnnvSbb/99tsJCAhIN0TcMdQvK3755RcOHTrEgAEDsrR/VsTExPDHH39w22235eg82X39ypQpk2Fb06ZNsdlsHDhwINvxFMTXD2DAgAFMnTqVs2fPZvkYKT6U97MvMDAQHx8fPDw8nNtCQ0Oduf9i1157LWAfWn+x/MobmeW9gIAA6tatmyHvFeS8f7Evv/ySgIAA7rzzzqvuW9jft115/UB5X+yKS37PaVyenp4EBASkO4/FYiEoKCjD//nMlC5dGiDdewHkLD9czaxZszDGZMgf99xzD+fOnWPevHnOba48v08++YRy5crRqVOnXIkT7FNloqOjufXWW3PtnK5KSkri3nvv5aGHHqJZs2aZ7uNq/v/jjz+44YYbCAoKws/Pj9atW2c6pSg7fvrpJ2rVqkXLli2d2zw8PLj77rv5559/nNOOrFYrVqs1Q8xBQUFYrdYMMd98880EBATw+eef50qcualgZhc3CAoKok+fPnz11VfObdOmTcNqtWb6gcfxQzJw4EBmzZqVpfl1qamppKSkpLtlZV59WlpahuMyu2V1jv6WLVt49dVX+eSTTwgICMjSMWCfe7hr1y4aNmyY4bGGDRty7tw5du/eDUBERAQ9e/bkvffeY/HixcTGxrJt2zZGjhxJpUqVuOuuu9LF07x5czZt2sTYsWOZPXs23bt3Z+TIkbz00ktXjWvTpk3OGC7m6elJ7dq1nY+76rfffqNMmTLUrVs3W8dn5tdff8VisdC9e/dsnyO7r9/lLF26lNTUVOrVq5fhsWXLlhEYGIinpyd169Zl7NixGX7OCurrB/beC3FxcW7t1yEFl/K+a1JTU0lOTmbv3r0MHz4cYwwPPfTQVY9btGgRHh4e1KxZM1087swb0dHRrF27NkPeK6h5/2KRkZH8+eef3HXXXVd9LYvq+/blXj9Q3he74pTfc+Lhhx9m69atvPbaa5w4cYKTJ0/yzjvvsGbNGp544olMj0lJSSEuLo6//vqL559/njZt2tC6dWvn4znND1ezadMmSpcuTbly5dJtd+STi/OHK8/vt99+o23btrlafJs5cyYtW7akQoUK2T7HuXPnKFeuHDabjYoVKzJixAiioqKyfPzLL79MXFwcr7zyymX36dWrF5UqVeLxxx9n8+bNxMbGsmzZMsaMGcPNN99MnTp1nPt+88033HTTTQQFBTF58mR++OEHSpQoQefOnXOlKLNp06bLvmcBzp5mnp6ePPjgg0yePJlZs2YRExPD3r17GTp0KMHBwQwdOjTd8V5eXrRq1YrffvstxzHmOncP0XG3i4cdOuaVbtq0yRhjTPPmzc3gwYONMSbD0EZjjHn55ZeNl5eXAQxgqlSpYh544AGzYcOGTK+R2c1ms101xhdffPGyx198u9oQP2PsQxtbtGhh+vbt69yW1aHrhw4dMoB54403Mjw2derUDMPLkpKSzNChQ9PF2LBhQ7Nnz550x3bu3NlUrFgxw7DSESNGGB8fHxMVFXXFuF577TUDmCNHjmR47KabbjI1a9bM9LirTXmpU6eO6dKlS4btaWlpJjk5Od2tbdu2ZuDAgRm2X6pXr17m5ptvvuLzuZKcvH6ZiYmJMXXq1DHh4eHm7Nmz6R578MEHzVdffWWWLl1qZs2aZfr372+ADEMDC+rrZ4z9Z9BisZinn376ijFI8aK8n728UatWLed1y5cvb5YvX37VY+bPn2+sVqt57LHH0m13V95w6N+/v/Hw8DCrV69Ot70g5v1LPf300wYwK1euvOq+Re192+Fyr5/jOSjvF1/FLb9fLDtTlowxZtasWSY4ONh5XV9fX/PNN99kuu/KlSvTxditWzcTExOTbh9X8sOl+fP55583ERERGbY7pqsbY0ynTp1MrVq1Mo3Py8vL3H///S4/v2PHjhnAjBkzJsM5U1NTM8QDmC+//DLdtpSUlHTHpaSkmFKlSpmxY8dmGmtWvPvuu+bdd981CxYsMAsWLDDPPvus8fPzM7Vr187wuT0z69atM56ens5pWHv27Ml0ypIx9qk+LVu2TPf63n777SYhIcG5T1xcnClRokSG97TU1FTTqFGjdFOKsvu+6enpaYYNG5YhPsf02alTp6a7xgsvvGCsVqsz5kqVKpl169Zl+v149tlnjdVqzdUecbkh/fiyYq5du3ZUq1aNr776isGDB/Pvv/8yduzYy+7//PPPc//99zNnzhz+/vtvVqxYwYQJE/jiiy/4+uuvncMlHb7++ut0FUYgS9Mv7r//fnr06HHV/by9va+6z7vvvktkZCS//PLLVfe9nCvFfPFjw4cP56effuK9997jmmuu4ejRo7z99tt07NiRxYsXExERQUJCAgsXLmT48OH4+fk5h04DdOvWjQ8//JBVq1bRtWtXUlNTMcY4H3cMVbtaXK5McbnY4cOHad68eYbtS5cupUOHDhm2L1u2jK+//jrdtj179lC5cmUA4uLimD9/Pp988onz8bS0NNLS0tLFarPZLhtTbrx+DgkJCfTu3Zt9+/axaNGiDH9pvXRoac+ePQkNDeXDDz/kf//7H02aNCnQrx/Yq+chISEFt6u6uJ3yftbNnDmTuLg49u/fz4QJE+jatSu//PJLhpVKHNauXcsdd9zBddddxxtvvOHc7u688fzzz/Ptt98yfvx4mjZtmu6xgpj3L5aSksLkyZOpV68e1113XZaOcVwjK48VhvftK71+oLwvFxSH/J5T8+bN4+677+b222/njjvuwMPDg19++YXBgweTlJSUYVpQgwYN+Pfff4mPj2f9+vWMGTOGTp06sWjRIvz8/FzKD0Cm01wz2z5x4kQGDx7s/DqrOS2rz+/w4cNA5lMkX3755UxH9tx3333cd999zq8jIiLYu3ev8+ulS5dy8uRJevfu7dx2tZx4qcceeyzd1506daJJkyb06dOHzz//PMPjF0tJSeHee+/lzjvvpHPnzpfdD+D06dP07NmT+Ph4vv32W8LDw9m0aROvvPIKt9xyC7/99hseHh6sWLGCqKgoBg0alO61BejSpQtvvfUWcXFx+Pv7Z/t9E7L++r722mu88847jB49muuvv56YmBg+/PBDOnXqxIIFC2jSpEm6Y8uUKUNaWhpHjx6lWrVqV/ye5Cu3loMKgEsbc7366qumTJky5sEHH0z3F5rMKumZWbp0qfHz8zOlS5e+7DVclVllNrPbpZXZS+3bt8/4+vqa999/35w+fdp5a926talTp445ffr0FVeAiI+PNxaLxTz55JMZHvvwww8NYLZv326MMWbu3LkGMNOnT0+33+nTp01wcLDzLxQHDx686l8Ivv76a2OMvcnsxdsdIyMmTJhgALN58+YMcTVr1sy0bNky0+dztREWmVXZjbGPKvn333/T3a655hrTo0ePDNsv7jr//fffGw8Pj3R/GRg0aFC653Sl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xAQFBZkmTZqYDz/80CQlJTn327p1q+nTp4+JiIgwPj4+xsfHx9SuXds8+eST5tSpUxliym5+ePHFF7O0ulRSUpJ58cUXTaVKlYyXl5epWbOm+eCDDzLsl9XnZ4wxX375pbHZbBn6qGQms/e0i4WHh2erP8zFoqKizK233moqV65sfH19jZeXl6lRo4Z56qmnMvRmc8R0tfecK62ytHbtWnPrrbeaihUrGm9vb1O1alUzZMgQZ0+Yiy1dutR0797dlChRwnh6epqwsDDTvXv3DD3ILnW1902Ho0ePmoEDB5oSJUoYHx8fc91115nff/89w35nzpwxzz77rKlTp47x8/MzZcqUMe3btzdz5szJsO/OnTsNYGbOnHnV6+c3izEXtXoWkXRuvvlmUlJSmDt3brbPkZSURJkyZXjllVd4+OGHczE6uZKYmBgqVKjAe++9x9ChQ90djogUEsr7hZfyvohkV0JCApUqVeLxxx9PNxXKVf/88w8tWrRg48aNuTJFSXLH888/z9dff82uXbucU3ULChVkRK5g06ZNNGnShBUrVmS6FKoUXC+99BLff/89GzduLHCJV0QKLuX9wkt5X0Ry4pNPPmH06NHs3r0bf39/d4cjueTMmTNUrVqV8ePHO6dfFSR6txK5gvr16zNx4kSOHj3q7lDERUFBQUyaNEkfykXEJcr7hZfyvojkxP3338+ZM2fYvXu3RrcUIXv27GHUqFH069fP3aFkSiNkRERERERERETy2ZUXMBcRERERERERkVyngoyIiIiIiIiISD5zyyTbtLQ0Dh8+TGBgYMFbB1xEJI8YYzh79iwVKlTAai1e9XDlfREprpT7lftFpPjJau53S0Hm8OHDhIeHu+PSIiJud+DAASpWrOjuMPKV8r6IFHfK/SIixc/Vcr9bCjKBgYGAPbigoCB3hCAiku9iYmIIDw935sDiRHlfRIor5f6Muf/TpbsYv2gnt10Txks967srPBGRPJPV3O+WgoxjyGJQUJA+mItIsVMch20r74tIcafcfyH3+wUEYvX2w8s3QO8JIlKkXS33F6+JrCIiIiIiUiAYjLtDEBFxKxVkREREREQk3zj+YGxUjxGRYk4FGRERERERyTcW7BUZ1WNEpLhzSw8ZkcIoNTWV5ORkd4chBZinpyc2m83dYYhILlLul6tR7nedRshIQafcL1eTW7lf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EafIHuqbKyFjtCx5aKiviFRwinIiIiIiIuIU2UN989plSRUyIlLBKSEjIiIiIiJOkWeFTPZQXyVkRKRiU0JGREREREScwnLRChmdqohIxaYoJyIiIiIiTpHdsmQ/f1tqVkLGqgoZEanYlJARERERERGnuNhQX7UsiUhFp4SMiIiIiIg4hTnzbCRXy5JNLUsi4hoU5URERERExCnyrpDRLksi4hqUkBEREREREafIe6hvVsuSTlVEpGJTlBMREREREac4P9T3wgoZDw31FZEKTgkZERERERFxiv+2LDkcDlJtGuorIq5BCRkREREREXGK/7YsZSVjQC1LIlLxKcqJiIiIiIhTZCdkMvMwWe1KoAoZEan4lJARERERERGnyErI2DMrZLIG+lrMJtwsOlURkYpNUU5ERERERJzCbMo91Dd7y2urTlNEpOJTpBMREREREafIrpDJSsjYMhMyalcSEReghIyIiIiIiDhF1i5LNnvuliUlZETEFSghIyIiIiIiTmHOPBvJcORuWfLQDksi4gIU6URERERExCkuaFnKniGjChkRqfiUkBEREREREafIalnKcPy3ZUmnKSJS8SnSiYiIiIiIU5gzK2QcDnA4HKRqqK+IuBAlZERERERExCmyKmTA2Po6u2VJCRkRcQFKyIiIiIiIiFNkVciA0bakliURcSWKdCIiIiIi4hSWHAkZu11DfUXEtSghIyIiIiIiTpGrZSlHhYyHWpZExAUoISMiIiIiIk5hznE2kmF3kJI91FenKSJS8SnSiYiIiIiIU+SskLFrqK+IuBglZERERERExCks+Q311QwZEXEBSsiIiIiIiIhTmEwmsopk7HYHqelqWRIR16FIJyIiIiIiTmPNrJLJcOScIaMKGRGp+JSQERERERERpzFnlsisOxjDxsOxgCpkRMQ1WJ29ABERERERcV1Zc2QenrYRgCq+7nSqF+TMJYmIlAolZERERERExGly7rQ0qG0tXrq2CZV93J24IhGR0qGEjIiIiIiIOM2AFjXYfDSWFwY0oUfDqs5ejohIqVFCRkREREREnObdW1o6ewkiIk6haVkiIiIiIiIiIqVMCRkRERERERERkVKmhIyIiIiIiIiISClTQkZEREREREREpJQpISMiIiIiIiIiUsqUkBERERERERERKWVKyIiIiIiIiIiIlDIlZERERERERERESpkSMiIiIiIiIiIipUwJGRERERERERGRUqaEjIiIiIiIiIhIKVNCRkRERERERESklCkhIyIiIiIiIiJSypSQEREREREREREpZUrIiIiIiIiIiIiUMiVkRERERERERERKmRIyIiIiIiIiIiKlTAkZEREREREREZFSpoSMiIiIiIiIiEgpU0JGRERERERERKSUKSEjIiIiIiIiIlLKlJARERERERERESllSsiIiIiIiIiIiJQyJWREREREREREREqZ1Rlv6nA4AIiLi3PG24uIOEVWzMuKga5EcV9EXJViv2K/iLiewsZ+pyRk4uPjAQgNDXXG24uIOFV8fDwBAQHOXkapUtwXEVen2C8i4noKiv0mhxPS9Xa7nePHj+Pn54fJZCrttxcRcQqHw0F8fDw1a9bEbHatjlHFfRFxVYr9iv0i4noKG/udkpAREREREREREXFlrpWmFxEREREREREpA5SQEREREREREREpZUrIiIiIiIiIiIiUMiVkRERERERERERKmRIyIiIiIiIiIiKlTAkZEREREREREZFSpoSMVHinT5+mevXqvPXWW9m3rV69Gnd3d+bPn+/ElYmISElR7BcRcT2K/VLemBwOh8PZixApabNnz+bGG29kxYoVNG7cmDZt2nDttdfy8ccfO3tpIiJSQhT7RURcj2K/lCdKyIjLGD16NP/88w9XXHEFmzdvZu3atXh6ejp7WSIiUoIU+0VEXI9iv5QXSsiIy0hOTqZ58+YcOXKEdevW0bJlS2cvSURESphiv4iI61Hsl/JCM2TEZezfv5/jx49jt9s5dOiQs5cjIiKlQLFfRMT1KPZLeaEKGXEJaWlpdOjQgdatW9O4cWPGjh3L1q1bqVatmrOXJiIiJUSxX0TE9Sj2S3mihIy4hKeffppff/2VzZs34+vrS+/evfHz82PWrFnOXpqIiJQQxX4REdej2C/liVqWpMJbtGgRH3/8MZMnT8bf3x+z2czkyZNZtmwZ48aNc/byRESkBCj2i4i4HsV+KW9UISMiIiIiIiIiUspUISMiIiIiIiIiUsqUkBERERERERERKWVKyIiIiIiIiIiIlDIlZERERERERERESpkSMiIiIiIiIiIipUwJGRERERERERGRUqaEjIiIiIiIiIhIKVNCRkRERERERESklCkhIyIiIiIiIiJSypSQEREREREREREpZUrIiIiIiIiIiIiUMiVkRERERERERERK2f8Dc1zZGGrjM6kAAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 1400x500 with 3 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_68_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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": "code",
|
||
"execution_count": 7,
|
||
"id": "0c2a183a",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Degree of polynomial: 1\n",
|
||
"Mean squared error on training data: 439230.69504801\n",
|
||
"Mean squared error on test data: 481979.17861098\n",
|
||
"Degree of polynomial: 2\n",
|
||
"Mean squared error on training data: 115822.95008046\n",
|
||
"Mean squared error on test data: 123711.53703498\n",
|
||
"Degree of polynomial: 3\n",
|
||
"Mean squared error on training data: 9011.85263220\n",
|
||
"Mean squared error on test data: 10913.84780262\n",
|
||
"Degree of polynomial: 4\n",
|
||
"Mean squared error on training data: 303.47610036\n",
|
||
"Mean squared error on test data: 426.30787294\n",
|
||
"Degree of polynomial: 5\n",
|
||
"Mean squared error on training data: 3.80354994\n",
|
||
"Mean squared error on test data: 5.98822371\n",
|
||
"Degree of polynomial: 6\n",
|
||
"Mean squared error on training data: 3.66204648\n",
|
||
"Mean squared error on test data: 8.14812206\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Degree of polynomial: 7\n",
|
||
"Mean squared error on training data: 0.47075725\n",
|
||
"Mean squared error on test data: 2.00607783\n",
|
||
"Degree of polynomial: 8\n",
|
||
"Mean squared error on training data: 0.04912436\n",
|
||
"Mean squared error on test data: 0.21596432\n",
|
||
"Degree of polynomial: 9\n",
|
||
"Mean squared error on training data: 0.02522069\n",
|
||
"Mean squared error on test data: 0.08576932\n",
|
||
"Degree of polynomial: 10\n",
|
||
"Mean squared error on training data: 0.02511518\n",
|
||
"Mean squared error on test data: 1.20015436\n",
|
||
"Degree of polynomial: 11\n",
|
||
"Mean squared error on training data: 0.01640891\n",
|
||
"Mean squared error on test data: 1.35533773\n",
|
||
"Degree of polynomial: 12\n",
|
||
"Mean squared error on training data: 0.00813803\n",
|
||
"Mean squared error on test data: 0.17446471\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Degree of polynomial: 13\n",
|
||
"Mean squared error on training data: 0.00759119\n",
|
||
"Mean squared error on test data: 1.08131003\n",
|
||
"Degree of polynomial: 14\n",
|
||
"Mean squared error on training data: 0.00472199\n",
|
||
"Mean squared error on test data: 0.81333804\n",
|
||
"Degree of polynomial: 15\n",
|
||
"Mean squared error on training data: 0.00410478\n",
|
||
"Mean squared error on test data: 92.09172409\n",
|
||
"Degree of polynomial: 16\n",
|
||
"Mean squared error on training data: 0.00315593\n",
|
||
"Mean squared error on test data: 234.38533185\n",
|
||
"Degree of polynomial: 17\n",
|
||
"Mean squared error on training data: 0.00242999\n",
|
||
"Mean squared error on test data: 1271.35771826\n",
|
||
"Degree of polynomial: 18\n",
|
||
"Mean squared error on training data: 0.00228742\n",
|
||
"Mean squared error on test data: 108.27092910\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Degree of polynomial: 19\n",
|
||
"Mean squared error on training data: 0.00156376\n",
|
||
"Mean squared error on test data: 1371.99051150\n",
|
||
"Degree of polynomial: 20\n",
|
||
"Mean squared error on training data: 0.00137818\n",
|
||
"Mean squared error on test data: 1887.86252988\n",
|
||
"Degree of polynomial: 21\n",
|
||
"Mean squared error on training data: 0.00118508\n",
|
||
"Mean squared error on test data: 14859.69908626\n",
|
||
"Degree of polynomial: 22\n",
|
||
"Mean squared error on training data: 0.00092647\n",
|
||
"Mean squared error on test data: 876.51191552\n",
|
||
"Degree of polynomial: 23\n",
|
||
"Mean squared error on training data: 0.00085889\n",
|
||
"Mean squared error on test data: 5594.60815105\n",
|
||
"Degree of polynomial: 24\n",
|
||
"Mean squared error on training data: 0.00084705\n",
|
||
"Mean squared error on test data: 1277.61702282\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Degree of polynomial: 25\n",
|
||
"Mean squared error on training data: 0.00079129\n",
|
||
"Mean squared error on test data: 128664.31650694\n",
|
||
"Degree of polynomial: 26\n",
|
||
"Mean squared error on training data: 0.00076905\n",
|
||
"Mean squared error on test data: 19003.94822514\n",
|
||
"Degree of polynomial: 27\n",
|
||
"Mean squared error on training data: 0.00068946\n",
|
||
"Mean squared error on test data: 2379.66219404\n",
|
||
"Degree of polynomial: 28\n",
|
||
"Mean squared error on training data: 0.00062595\n",
|
||
"Mean squared error on test data: 4082.19983530\n",
|
||
"Degree of polynomial: 29\n",
|
||
"Mean squared error on training data: 0.00060705\n",
|
||
"Mean squared error on test data: 3250.17647619\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_19176/626635268.py:73: RuntimeWarning: divide by zero encountered in log10\n",
|
||
" plt.plot(polynomial, np.log10(trainingerror), label='Training Error')\n",
|
||
"/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_19176/626635268.py:74: RuntimeWarning: divide by zero encountered in log10\n",
|
||
" plt.plot(polynomial, np.log10(testerror), label='Test Error')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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i+g7IyLS8CjBKVI8e29OjptWEBePVfydqe4M0CIiUnc0D04Rm81GZGQk6enpgDlRna8vVCYVMwyDnJwc0tPTiYyMxGZz/9TkIiJiUoJznOKVs4uTHJGqiIyMrNKq6yIiUn+U4BzHYrHQtGlTYmNjKSgocHc44gHsdrtabkREGiAlOCdhs9n0S0tERMSDqchYREREvI4SHBEREfE6SnBERETE6/hUDU7xhGyZmZlujkRERESqqvj3dnUmVvWpBOfo0aMAJCQkuDkSERERqa6jR48SERFRpWMthg/NM+90Otm9ezdhYWFlJvHLzMwkISGBHTt2EB4e7sYIPZc+w9rR51d7+gxrR59f7ekzrJ2KPj/DMDh69CjNmjXDaq1adY1PteBYrVbi4+PLfT88PFxfylrSZ1g7+vxqT59h7ejzqz19hrVT3udX1ZabYioyFhEREa+jBEdERES8jhIcICAggCeeeIKAgAB3h+Kx9BnWjj6/2tNnWDv6/GpPn2HtuPrz86kiYxEREfENasERERERr6MER0RERLyOEhwRERHxOkpwRERExOsowQHefPNNkpOTCQwMpGfPnsyZM8fdIXmEJ598EovFUuYRFxfn7rAatN9//53zzz+fZs2aYbFY+PLLL8u8bxgGTz75JM2aNSMoKIjBgwezevVq9wTbAFX2+Y0dO/aE72Tfvn3dE2wDNHHiRHr37k1YWBixsbGMHDmS9evXlzlG38GKVeUz1PewYpMnT6ZLly4lE/r169ePH374oeR9V30HfT7BmTZtGhMmTOCRRx5h+fLlnHrqqZx99tmkpaW5OzSP0LFjR/bs2VPyWLVqlbtDatCys7Pp2rUrb7zxxknff+GFF3j55Zd54403WLx4MXFxcQwdOrRkHTVfV9nnBzB8+PAy38nvv/++HiNs2FJTUxk/fjwLFixg5syZFBYWctZZZ5GdnV1yjL6DFavKZwj6HlYkPj6e5557jiVLlrBkyRJOP/10RowYUZLEuOw7aPi4Pn36GDfffHOZfe3atTMefPBBN0XkOZ544gmja9eu7g7DYwHGF198UfLa6XQacXFxxnPPPVeyLzc314iIiDDeeustN0TYsP398zMMwxgzZowxYsQIt8TjidLT0w3ASE1NNQxD38Ga+PtnaBj6HtZEVFSU8c4777j0O+jTLTj5+fksXbqUs846q8z+s846i/nz57spKs+yceNGmjVrRnJyMpdffjlbtmxxd0gea+vWrezdu7fM9zEgIIDTTjtN38dqmD17NrGxsbRp04Zx48aRnp7u7pAarIyMDACio6MBfQdr4u+fYTF9D6vG4XDw6aefkp2dTb9+/Vz6HfTpBOfAgQM4HA6aNGlSZn+TJk3Yu3evm6LyHKeccgrvv/8+P/30E2+//TZ79+6lf//+HDx40N2heaTi75y+jzV39tln89FHH/Hbb7/x0ksvsXjxYk4//XTy8vLcHVqDYxgGd999NwMHDqRTp06AvoPVdbLPEPQ9rIpVq1YRGhpKQEAAN998M1988QUdOnRw6XfQp1YTL4/FYinz2jCME/bJic4+++yS7c6dO9OvXz9atWrFe++9x9133+3GyDybvo81d9lll5Vsd+rUiV69epGUlMR3333HqFGj3BhZw3PbbbexcuVK5s6de8J7+g5WTXmfob6HlWvbti0rVqzgyJEjTJ8+nTFjxpCamlryviu+gz7dghMTE4PNZjshK0xPTz8he5TKhYSE0LlzZzZu3OjuUDxS8Qg0fR9dp2nTpiQlJek7+Te33347X3/9NbNmzSI+Pr5kv76DVVfeZ3gy+h6eyN/fn5SUFHr16sXEiRPp2rUrr776qku/gz6d4Pj7+9OzZ09mzpxZZv/MmTPp37+/m6LyXHl5eaxdu5amTZu6OxSPlJycTFxcXJnvY35+Pqmpqfo+1tDBgwfZsWOHvpNFDMPgtttuY8aMGfz2228kJyeXeV/fwcpV9hmejL6HlTMMg7y8PNd+B11UAO2xPv30U8Nutxv//e9/jTVr1hgTJkwwQkJCjG3btrk7tAbvnnvuMWbPnm1s2bLFWLBggXHeeecZYWFh+uwqcPToUWP58uXG8uXLDcB4+eWXjeXLlxvbt283DMMwnnvuOSMiIsKYMWOGsWrVKuOKK64wmjZtamRmZro58oahos/v6NGjxj333GPMnz/f2Lp1qzFr1iyjX79+RvPmzfX5FbnllluMiIgIY/bs2caePXtKHjk5OSXH6DtYsco+Q30PK/fQQw8Zv//+u7F161Zj5cqVxsMPP2xYrVbj559/NgzDdd9Bn09wDMMw/v3vfxtJSUmGv7+/0aNHjzLD/aR8l112mdG0aVPDbrcbzZo1M0aNGmWsXr3a3WE1aLNmzTKAEx5jxowxDMMcpvvEE08YcXFxRkBAgDFo0CBj1apV7g26Aano88vJyTHOOusso3HjxobdbjcSExONMWPGGGlpae4Ou8E42WcHGFOmTCk5Rt/BilX2Gep7WLnrrruu5Hdu48aNjTPOOKMkuTEM130HLYZhGDVsURIRERFpkHy6BkdERES8kxIcERER8TpKcERERMTrKMERERERr6MER0RERLyOEhwRERHxOkpwRERExOsowRERERGvowRHRErMnj0bi8XCkSNH3B1KpaZOnUpkZGS1zmnRogWTJk2q1jljx45l5MiR1TpHRNxPCY6IFxk7diwWiwWLxYLdbqdly5bce++9ZGdnuzs0l7vsssvYsGGDu8MQkQbKz90BiIhrDR8+nClTplBQUMCcOXO44YYbyM7OZvLkye4OzaWCgoIICgpydxgu4XA4sFgsWK36m1PEVfSvScTLBAQEEBcXR0JCAldeeSVXXXUVX375JQB5eXnccccdxMbGEhgYyMCBA1m8ePFJr5OdnU14eDiff/55mf3ffPMNISEhHD16lG3btmGxWJgxYwZDhgwhODiYrl278scff5Q5Z/r06XTs2JGAgABatGjBSy+9VOb9Fi1a8Mwzz3DNNdcQGhpKUlISX331Ffv372fEiBGEhobSuXNnlixZUnLO37uoNm/ezIgRI2jSpAmhoaH07t2bX375pVqfncPh4O677yYyMpJGjRpx//338/fl+gzD4IUXXqBly5YEBQXRtWvXEz6jr7/+mtatWxMUFMSQIUN47733ynT9Fcf+7bff0qFDBwICAti+fTv5+fncf//9NG/enJCQEE455RRmz55d5trz589n0KBBBAUFkZCQwB133OGVLXQitaUER8TLBQUFUVBQAMD999/P9OnTee+991i2bBkpKSkMGzaMQ4cOnXBeSEgIl19+OVOmTCmzf8qUKVx88cWEhYWV7HvkkUe49957WbFiBW3atOGKK66gsLAQgKVLl3LppZdy+eWXs2rVKp588kkee+wxpk6dWua6r7zyCgMGDGD58uWce+65XH311VxzzTWMHj26JNZrrrnmhISjWFZWFueccw6//PILy5cvZ9iwYZx//vmkpaVV+bN66aWXePfdd/nvf//L3LlzOXToEF988UWZYx599FGmTJnC5MmTWb16NXfddRejR48mNTUVgG3btnHxxRczcuRIVqxYwU033cQjjzxywr1ycnKYOHEi77zzDqtXryY2NpZrr72WefPm8emnn7Jy5UouueQShg8fzsaNGwFYtWoVw4YNY9SoUaxcuZJp06Yxd+5cbrvttir/jCI+w0Wrn4tIAzBmzBhjxIgRJa8XLlxoNGrUyLj00kuNrKwsw263Gx999FHJ+/n5+UazZs2MF154wTAMw5g1a5YBGIcPHy4532azGbt27TIMwzD2799v2O12Y/bs2YZhGMbWrVsNwHjnnXdKrrl69WoDMNauXWsYhmFceeWVxtChQ8vEed999xkdOnQoeZ2UlGSMHj265PWePXsMwHjsscdK9v3xxx8GYOzZs8cwDMOYMmWKERERUeHn0aFDB+P1118vc59XXnml3OObNm1qPPfccyWvCwoKjPj4+JLPNCsrywgMDDTmz59f5rzrr7/euOKKKwzDMIwHHnjA6NSpU5n3H3nkkTKf65QpUwzAWLFiRckxmzZtMiwWS8lnXeyMM84wHnroIcMwDOPqq682brzxxjLvz5kzx7BarcaxY8cq+CREfI9acES8zLfffktoaCiBgYH069ePQYMG8frrr7N582YKCgoYMGBAybF2u50+ffqwdu3ak16rT58+dOzYkffffx+ADz74gMTERAYNGlTmuC5dupRsN23aFID09HQA1q5dW+aeAAMGDGDjxo04HI6TXqNJkyYAdO7c+YR9xdf9u+zsbO6//346dOhAZGQkoaGhrFu3rsotOBkZGezZs4d+/fqV7PPz86NXr14lr9esWUNubi5Dhw4lNDS05PH++++zefNmANavX0/v3r3LXLtPnz4n3M/f37/Mz7xs2TIMw6BNmzZlrp2amlpy7aVLlzJ16tQy7w8bNgyn08nWrVur9HOK+AoVGYt4mSFDhjB58mTsdjvNmjXDbrcDsGfPHgAsFkuZ4w3DOGHf8W644QbeeOMNHnzwQaZMmcK11157wvHF9zj++k6ns9zrGyfpZjrZNSq67t/dd999/PTTT7z44oukpKQQFBTExRdfTH5+frk/W3UV3/u7776jefPmZd4LCAgAqv7zBgUFlTnO6XRis9lYunQpNputzLGhoaElx9x0003ccccdJ1wvMTGxBj+RiPdSgiPiZUJCQkhJSTlhf0pKCv7+/sydO5crr7wSgIKCApYsWcKECRPKvd7o0aO5//77ee2111i9ejVjxoypVjwdOnRg7ty5ZfbNnz+fNm3anPCLvDbmzJnD2LFjufDCCwGzJmfbtm1VPj8iIoKmTZuyYMGCkhaqwsJCli5dSo8ePQBKCoLT0tI47bTTTnqddu3a8f3335fZd3xxdHm6d++Ow+EgPT2dU0899aTH9OjRg9WrV5/0v6+IlKUER8RHhISEcMstt3DfffcRHR1NYmIiL7zwAjk5OVx//fXlnhcVFcWoUaO47777OOuss4iPj6/Wfe+55x569+7N008/zWWXXcYff/zBG2+8wZtvvlnbH6mMlJQUZsyYwfnnn4/FYuGxxx4rt7WnPHfeeSfPPfccrVu3pn379rz88stlJj0MCwvj3nvv5a677sLpdDJw4EAyMzOZP38+oaGhjBkzhptuuomXX36ZBx54gOuvv54VK1aUFFRX1FLWpk0brrrqKq655hpeeuklunfvzoEDB/jtt9/o3Lkz55xzDg888AB9+/Zl/PjxjBs3jpCQENauXcvMmTN5/fXXa/KxiXgt1eCI+JDnnnuOiy66iKuvvpoePXqwadMmfvrpJ6Kioio87/rrryc/P5/rrruu2vfs0aMHn332GZ9++imdOnXi8ccf56mnnmLs2LE1/ClO7pVXXiEqKor+/ftz/vnnM2zYsJKWl6q65557uOaaaxg7diz9+vUjLCyspEWo2NNPP83jjz/OxIkTad++PcOGDeObb74hOTkZgOTkZD7//HNmzJhBly5dmDx5cskoquJurPJMmTKFa665hnvuuYe2bdtywQUXsHDhQhISEgCzTik1NZWNGzdy6qmn0r17dx577LGSuicRKWUxTtY5LCJynI8++og777yT3bt34+/v7+5wPM6zzz7LW2+9xY4dO9wdiojPUBeViJQrJyeHrVu3MnHiRG666SYlN1X05ptv0rt3bxo1asS8efP417/+pblqROqZuqhEpFwvvPAC3bp1o0mTJjz00EPuDsdjbNy4kREjRtChQweefvpp7rnnHp588kl3hyXiU9RFJSIiIl5HLTgiIiLidZTgiIiIiNdRgiMiIiJeRwmOiIiIeB0lOCIiIuJ1lOCIiIiI11GCIyIiIl5HCY6IiIh4nf8H/9VJUiHhxx0AAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_69_6.png"
|
||
}
|
||
},
|
||
"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",
|
||
"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=False).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",
|
||
"id": "2c6c9e89",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## 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",
|
||
"* 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",
|
||
"id": "71738b2a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "14db46b6",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "95e5c8e4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "7e60f51d",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"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",
|
||
"5. Summarize the model using the sample of model evaluation scores\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": 8,
|
||
"id": "2cef0eb7",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_75_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"id": "f501c9cf",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"More examples of the application of cross-validation follow here."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"id": "30e1e320",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_19176/3817475779.py:63: RuntimeWarning: divide by zero encountered in log10\n",
|
||
" plt.plot(polynomial, np.log10(estimated_mse_sklearn), label='Test Error')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_77_1.png"
|
||
}
|
||
},
|
||
"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",
|
||
"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(fit_intercept=False)\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",
|
||
"id": "383e5c2a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Note that we have kept the intercept in the first column of design matrix $\\boldsymbol{X}$. When we call the corresponding **Scikit-Learn** function we need thus to set the intercept to **False**. Libraries like **Scikit-Learn** normally scale the design matrix and do not fit intercept. See the discussions below."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1f9cd409",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## More on Rescaling data\n",
|
||
"\n",
|
||
"We end this chapter by adding some words on scaling and how to deal with the intercept for regression cases.\n",
|
||
"\n",
|
||
"When you are comparing your own code with for example **Scikit-Learn**'s\n",
|
||
"library, there are some technicalities to keep in mind. The examples\n",
|
||
"here demonstrate some of these aspects with potential pitfalls.\n",
|
||
"\n",
|
||
"The discussion here focuses on the role of the intercept, how we can\n",
|
||
"set up the design matrix, what scaling we should use and other topics\n",
|
||
"which tend confuse us.\n",
|
||
"\n",
|
||
"The intercept can be interpreted as the expected value of our\n",
|
||
"target/output variables when all other predictors are set to zero.\n",
|
||
"Thus, if we cannot assume that the expected outputs/targets are zero\n",
|
||
"when all predictors are zero (the columns in the design matrix), it\n",
|
||
"may be a bad idea to implement a model which penalizes the intercept.\n",
|
||
"Furthermore, in for example Ridge and Lasso regression, the default solutions\n",
|
||
"from the library **Scikit-Learn** (when not shrinking $\\beta_0$) for the unknown parameters\n",
|
||
"$\\boldsymbol{\\beta}$, are derived under the assumption that both $\\boldsymbol{y}$ and\n",
|
||
"$\\boldsymbol{X}$ are zero centered, that is we subtract the mean values.\n",
|
||
"\n",
|
||
"If our predictors represent different scales, then it is important to\n",
|
||
"standardize the design matrix $\\boldsymbol{X}$ by subtracting the mean of each\n",
|
||
"column from the corresponding column and dividing the column with its\n",
|
||
"standard deviation. Most machine learning libraries do this as a default. This means that if you compare your code with the results from a given library,\n",
|
||
"the results may differ. \n",
|
||
"\n",
|
||
"The\n",
|
||
"[Standardscaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html)\n",
|
||
"function in **Scikit-Learn** does this for us. For the data sets we\n",
|
||
"have been studying in our various examples, the data are in many cases\n",
|
||
"already scaled and there is no need to scale them. You as a user of different machine learning algorithms, should always perform a\n",
|
||
"survey of your data, with a critical assessment of them in case you need to scale the data.\n",
|
||
"\n",
|
||
"If you need to scale the data, not doing so will give an *unfair*\n",
|
||
"penalization of the parameters since their magnitude depends on the\n",
|
||
"scale of their corresponding predictor.\n",
|
||
"\n",
|
||
"Suppose as an example that you \n",
|
||
"you have an input variable given by the heights of different persons.\n",
|
||
"Human height might be measured in inches or meters or\n",
|
||
"kilometers. If measured in kilometers, a standard linear regression\n",
|
||
"model with this predictor would probably give a much bigger\n",
|
||
"coefficient term, than if measured in millimeters.\n",
|
||
"This can clearly lead to problems in evaluating the cost/loss functions.\n",
|
||
"\n",
|
||
"Keep in mind that when you transform your data set before training a model, the same transformation needs to be done\n",
|
||
"on your eventual new data set before making a prediction. If we translate this into a Python code, it would could be implemented as follows"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "eab81633",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'\\n#Model training, we compute the mean value of y and X\\ny_train_mean = np.mean(y_train)\\nX_train_mean = np.mean(X_train,axis=0)\\nX_train = X_train - X_train_mean\\ny_train = y_train - y_train_mean\\n\\n# The we fit our model with the training data\\ntrained_model = some_model.fit(X_train,y_train)\\n\\n\\n#Model prediction, we need also to transform our data set used for the prediction.\\nX_test = X_test - X_train_mean #Use mean from training data\\ny_pred = trained_model(X_test)\\ny_pred = y_pred + y_train_mean\\n'"
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"\"\"\"\n",
|
||
"#Model training, we compute the mean value of y and X\n",
|
||
"y_train_mean = np.mean(y_train)\n",
|
||
"X_train_mean = np.mean(X_train,axis=0)\n",
|
||
"X_train = X_train - X_train_mean\n",
|
||
"y_train = y_train - y_train_mean\n",
|
||
"\n",
|
||
"# The we fit our model with the training data\n",
|
||
"trained_model = some_model.fit(X_train,y_train)\n",
|
||
"\n",
|
||
"\n",
|
||
"#Model prediction, we need also to transform our data set used for the prediction.\n",
|
||
"X_test = X_test - X_train_mean #Use mean from training data\n",
|
||
"y_pred = trained_model(X_test)\n",
|
||
"y_pred = y_pred + y_train_mean\n",
|
||
"\"\"\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0ca51a54",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Let us try to understand what this may imply mathematically when we\n",
|
||
"subtract the mean values, also known as *zero centering*. For\n",
|
||
"simplicity, we will focus on ordinary regression, as done in the above example.\n",
|
||
"\n",
|
||
"The cost/loss function for regression is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fa3a4110",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"C(\\beta_0, \\beta_1, ... , \\beta_{p-1}) = \\frac{1}{n}\\sum_{i=0}^{n} \\left(y_i - \\beta_0 - \\sum_{j=1}^{p-1} X_{ij}\\beta_j\\right)^2,.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9f499302",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Recall also that we use the squared value. This expression can lead to an\n",
|
||
"increased penalty for higher differences between predicted and\n",
|
||
"output/target values.\n",
|
||
"\n",
|
||
"What we have done is to single out the $\\beta_0$ term in the\n",
|
||
"definition of the mean squared error (MSE). The design matrix $X$\n",
|
||
"does in this case not contain any intercept column. When we take the\n",
|
||
"derivative with respect to $\\beta_0$, we want the derivative to obey"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b1f7ba52",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial C}{\\partial \\beta_j} = 0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7ff75b7f",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"for all $j$. For $\\beta_0$ we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "eac37d3c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial C}{\\partial \\beta_0} = -\\frac{2}{n}\\sum_{i=0}^{n-1} \\left(y_i - \\beta_0 - \\sum_{j=1}^{p-1} X_{ij} \\beta_j\\right).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6e653464",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Multiplying away the constant $2/n$, we obtain"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8afa60a1",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{i=0}^{n-1} \\beta_0 = \\sum_{i=0}^{n-1}y_i - \\sum_{i=0}^{n-1} \\sum_{j=1}^{p-1} X_{ij} \\beta_j.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "055b7975",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Let us specialize first to the case where we have only two parameters $\\beta_0$ and $\\beta_1$.\n",
|
||
"Our result for $\\beta_0$ simplifies then to"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a2bf6e5d",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"n\\beta_0 = \\sum_{i=0}^{n-1}y_i - \\sum_{i=0}^{n-1} X_{i1} \\beta_1.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e15afbd5",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We obtain then"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d2f9a064",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\beta_1\\frac{1}{n}\\sum_{i=0}^{n-1} X_{i1}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8e8035d8",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"If we define"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0bbcef44",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\mu_{\\boldsymbol{x}_1}=\\frac{1}{n}\\sum_{i=0}^{n-1} X_{i1},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "919462c2",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"and the mean value of the outputs as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3a0899ec",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\mu_y=\\frac{1}{n}\\sum_{i=0}^{n-1}y_i,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9b255ec5",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7716aca1",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_0 = \\mu_y - \\beta_1\\mu_{\\boldsymbol{x}_1}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "24863f48",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"In the general case with more parameters than $\\beta_0$ and $\\beta_1$, we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6c10f940",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\frac{1}{n}\\sum_{i=0}^{n-1}\\sum_{j=1}^{p-1} X_{ij}\\beta_j.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7afefe95",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We can rewrite the latter equation as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a2e7bc1a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_0 = \\frac{1}{n}\\sum_{i=0}^{n-1}y_i - \\sum_{j=1}^{p-1} \\mu_{\\boldsymbol{x}_j}\\beta_j,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5ded7d78",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"where we have defined"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bcac7366",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\mu_{\\boldsymbol{x}_j}=\\frac{1}{n}\\sum_{i=0}^{n-1} X_{ij},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bafe8156",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"the mean value for all elements of the column vector $\\boldsymbol{x}_j$.\n",
|
||
"\n",
|
||
"Replacing $y_i$ with $y_i - y_i - \\overline{\\boldsymbol{y}}$ and centering also our design matrix results in a cost function (in vector-matrix disguise)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7c91d280",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"C(\\boldsymbol{\\beta}) = (\\boldsymbol{\\tilde{y}} - \\tilde{X}\\boldsymbol{\\beta})^T(\\boldsymbol{\\tilde{y}} - \\tilde{X}\\boldsymbol{\\beta}).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1b81d6de",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"If we minimize with respect to $\\boldsymbol{\\beta}$ we have then"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7d6d497e",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\boldsymbol{\\beta}} = (\\tilde{X}^T\\tilde{X})^{-1}\\tilde{X}^T\\boldsymbol{\\tilde{y}},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "772593b2",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"where $\\boldsymbol{\\tilde{y}} = \\boldsymbol{y} - \\overline{\\boldsymbol{y}}$\n",
|
||
"and $\\tilde{X}_{ij} = X_{ij} - \\frac{1}{n}\\sum_{k=0}^{n-1}X_{kj}$.\n",
|
||
"\n",
|
||
"For Ridge regression we need to add $\\lambda \\boldsymbol{\\beta}^T\\boldsymbol{\\beta}$ to the cost function and get then"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3edbdb56",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\hat{\\boldsymbol{\\beta}} = (\\tilde{X}^T\\tilde{X} + \\lambda I)^{-1}\\tilde{X}^T\\boldsymbol{\\tilde{y}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7de9723e",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"What does this mean? And why do we insist on all this? Let us look at some examples.\n",
|
||
"\n",
|
||
"This code shows a simple first-order fit to a data set using the above transformed data, where we consider the role of the intercept first, by either excluding it or including it (*code example thanks to Øyvind Sigmundson Schøyen*). Here our scaling of the data is done by subtracting the mean values only.\n",
|
||
"Note also that we do not split the data into training and test."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"id": "2e4a0363",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"True beta: [2, 0.5, 3.7]\n",
|
||
"Fitted beta: [2.08376632 0.19569961 3.97898392]\n",
|
||
"Sklearn fitted beta: [2.08376632 0.19569961 3.97898392]\n",
|
||
"MSE with intercept column\n",
|
||
"0.00411363461744314\n",
|
||
"MSE with intercept column from SKL\n",
|
||
"0.004113634617443147\n",
|
||
"Manual intercept: 2.083766322923899\n",
|
||
"Fitted beta (wiothout intercept): [0.19569961 3.97898392]\n",
|
||
"Sklearn intercept: 2.0837663229239043\n",
|
||
"Sklearn fitted beta (without intercept): [0.19569961 3.97898392]\n",
|
||
"MSE with Manual intercept\n",
|
||
"0.00411363461744314\n",
|
||
"MSE with Sklearn intercept\n",
|
||
"0.004113634617443131\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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7e1Zv349sbGxvPfee8TFxck8ixw8S54bNWrEL7/8Qs+ePUlLS0Or1dK5c2e+++47c4RcbFjiXFgoeiweevw264qiPPHW69ntn912YSyveX5o1apVjB8/nl9//RUvLy9ThVdk5DbPOp2OPn36MGHCBKpUqWKu8IqUvHyn9Xo9KpWKX375hZCQENq3b8+sWbNYunSp9Fo8RV7yHB4ezgcffMCXX37J8ePHCQ0NJTIyknfffdccoRYr5j4XFoo/fUqVKoVarc5S+cbExGSpxB7y8fHJdn9ra2s8PDxMFmth9ix5fujXX3/lrbfeYs2aNbRq1cqUYRZ6ec1zYmIix44d4+TJkwwfPhzIPPkpioK1tTXbt2+nZcuWZom9sHmW77Svry9lypQxuj109erVURSFGzduULlyZZPGXBg9S56nTJlC48aN+fDDDwGoVasWTk5ONGnShK+++kp6lfOJJc6FhaLHwtbWlhdeeIEdO3YYbd+xYweNGjXK9piGDRtm2X/79u3Uq1cPGxsbk8VamD1LniGzp2LAgAGsXLlSxkdzIa95dnV15cyZM5w6dcrwePfdd6latSqnTp2ifv365gq90HmW73Tjxo25desWSUlJhm0XL17EysqKsmXLmjTewupZ8pySkoKVlfEpSK1WA//7i1o8P4ucC002LTSfPbyU6eeff1bCw8OVkSNHKk5OTkpUVJSiKIry8ccfK3379jXs//ASm1GjRinh4eHKzz//LJeb5kJe87xy5UrF2tpa+eGHH5To6GjD48GDB5b6CIVCXvP8OLkqJPfymuvExESlbNmySvfu3ZWzZ88qe/bsUSpXrqy8/fbblvoIhUJe87xkyRLF2tpamTdvnhIREaHs379fqVevnhISEmKpj1AoJCYmKidPnlROnjypAMqsWbOUkydPGi7rLQjnwkJTWCiKovzwww9K+fLlFVtbW6Vu3brKnj17DK/1799fadasmdH+u3fvVurUqaPY2toq/v7+yvz5880cceGUlzw3a9ZMAbI8+vfvb/7AC5m8fp8fJYVF3uQ11+fOnVNatWqlODg4KGXLllVGjx6tpKSkmDnqwieveZ47d64SGBioODg4KL6+vsobb7yh3Lhxw8xRFy67du164u/cgnAulNumCyGEECLfFIo5FkIIIYQoHKSwEEIIIUS+kcJCCCGEEPlGCgshhBBC5BspLIQQQgiRb6SwEEIIIUS+kcJCCCGEEPlGCgshhBBC5BspLIQQQgiRb6SwEEIIIUS+kcJCCCGEEPlGCgshhBBC5Jv/B0LFhVYonimoAAAAAElFTkSuQmCC\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_112_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"\n",
|
||
"\n",
|
||
"np.random.seed(2021)\n",
|
||
"\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",
|
||
"\n",
|
||
"def fit_beta(X, y):\n",
|
||
" return np.linalg.pinv(X.T @ X) @ X.T @ y\n",
|
||
"\n",
|
||
"\n",
|
||
"true_beta = [2, 0.5, 3.7]\n",
|
||
"\n",
|
||
"x = np.linspace(0, 1, 11)\n",
|
||
"y = np.sum(\n",
|
||
" np.asarray([x ** p * b for p, b in enumerate(true_beta)]), axis=0\n",
|
||
") + 0.1 * np.random.normal(size=len(x))\n",
|
||
"\n",
|
||
"degree = 3\n",
|
||
"X = np.zeros((len(x), degree))\n",
|
||
"\n",
|
||
"# Include the intercept in the design matrix\n",
|
||
"for p in range(degree):\n",
|
||
" X[:, p] = x ** p\n",
|
||
"\n",
|
||
"beta = fit_beta(X, y)\n",
|
||
"\n",
|
||
"# Intercept is included in the design matrix\n",
|
||
"skl = LinearRegression(fit_intercept=False).fit(X, y)\n",
|
||
"\n",
|
||
"print(f\"True beta: {true_beta}\")\n",
|
||
"print(f\"Fitted beta: {beta}\")\n",
|
||
"print(f\"Sklearn fitted beta: {skl.coef_}\")\n",
|
||
"ypredictOwn = X @ beta\n",
|
||
"ypredictSKL = skl.predict(X)\n",
|
||
"print(f\"MSE with intercept column\")\n",
|
||
"print(MSE(y,ypredictOwn))\n",
|
||
"print(f\"MSE with intercept column from SKL\")\n",
|
||
"print(MSE(y,ypredictSKL))\n",
|
||
"\n",
|
||
"\n",
|
||
"plt.figure()\n",
|
||
"plt.scatter(x, y, label=\"Data\")\n",
|
||
"plt.plot(x, X @ beta, label=\"Fit\")\n",
|
||
"plt.plot(x, skl.predict(X), label=\"Sklearn (fit_intercept=False)\")\n",
|
||
"\n",
|
||
"\n",
|
||
"# Do not include the intercept in the design matrix\n",
|
||
"X = np.zeros((len(x), degree - 1))\n",
|
||
"\n",
|
||
"for p in range(degree - 1):\n",
|
||
" X[:, p] = x ** (p + 1)\n",
|
||
"\n",
|
||
"# Intercept is not included in the design matrix\n",
|
||
"skl = LinearRegression(fit_intercept=True).fit(X, y)\n",
|
||
"\n",
|
||
"# Use centered values for X and y when computing coefficients\n",
|
||
"y_offset = np.average(y, axis=0)\n",
|
||
"X_offset = np.average(X, axis=0)\n",
|
||
"\n",
|
||
"beta = fit_beta(X - X_offset, y - y_offset)\n",
|
||
"intercept = np.mean(y_offset - X_offset @ beta)\n",
|
||
"\n",
|
||
"print(f\"Manual intercept: {intercept}\")\n",
|
||
"print(f\"Fitted beta (wiothout intercept): {beta}\")\n",
|
||
"print(f\"Sklearn intercept: {skl.intercept_}\")\n",
|
||
"print(f\"Sklearn fitted beta (without intercept): {skl.coef_}\")\n",
|
||
"ypredictOwn = X @ beta\n",
|
||
"ypredictSKL = skl.predict(X)\n",
|
||
"print(f\"MSE with Manual intercept\")\n",
|
||
"print(MSE(y,ypredictOwn+intercept))\n",
|
||
"print(f\"MSE with Sklearn intercept\")\n",
|
||
"print(MSE(y,ypredictSKL))\n",
|
||
"\n",
|
||
"plt.plot(x, X @ beta + intercept, \"--\", label=\"Fit (manual intercept)\")\n",
|
||
"plt.plot(x, skl.predict(X), \"--\", label=\"Sklearn (fit_intercept=True)\")\n",
|
||
"plt.grid()\n",
|
||
"plt.legend()\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c6d3a071",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The intercept is the value of our output/target variable\n",
|
||
"when all our features are zero and our function crosses the $y$-axis (for a one-dimensional case). \n",
|
||
"\n",
|
||
"Printing the MSE, we see first that both methods give the same MSE, as\n",
|
||
"they should. However, when we move to for example Ridge regression,\n",
|
||
"the way we treat the intercept may give a larger or smaller MSE,\n",
|
||
"meaning that the MSE can be penalized by the value of the\n",
|
||
"intercept. Not including the intercept in the fit, means that the\n",
|
||
"regularization term does not include $\\beta_0$. For different values\n",
|
||
"of $\\lambda$, this may lead to different MSE values. \n",
|
||
"\n",
|
||
"To remind the reader, the regularization term, with the intercept in Ridge regression, is given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "db803b77",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\lambda \\vert\\vert \\boldsymbol{\\beta} \\vert\\vert_2^2 = \\lambda \\sum_{j=0}^{p-1}\\beta_j^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d7a9c9d8",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"but when we take out the intercept, this equation becomes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e08af763",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\lambda \\vert\\vert \\boldsymbol{\\beta} \\vert\\vert_2^2 = \\lambda \\sum_{j=1}^{p-1}\\beta_j^2.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "10fe24e4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"For Lasso regression we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6feb3bdd",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\lambda \\vert\\vert \\boldsymbol{\\beta} \\vert\\vert_1 = \\lambda \\sum_{j=1}^{p-1}\\vert\\beta_j\\vert.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "657a0777",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"It means that, when scaling the design matrix and the outputs/targets,\n",
|
||
"by subtracting the mean values, we have an optimization problem which\n",
|
||
"is not penalized by the intercept. The MSE value can then be smaller\n",
|
||
"since it focuses only on the remaining quantities. If we however bring\n",
|
||
"back the intercept, we will get a MSE which then contains the\n",
|
||
"intercept.\n",
|
||
"\n",
|
||
"Armed with this wisdom, we attempt first to simply set the intercept equal to **False** in our implementation of Ridge regression for our well-known vanilla data set."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"id": "9f21317d",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Beta values for own Ridge implementation\n",
|
||
"[ 1.03032441e+00 6.28336218e-02 -6.24175744e-01 5.21169159e-02\n",
|
||
" 2.80847477e-01 2.12552073e-01 8.13220608e-02 -1.69634577e-02\n",
|
||
" -6.50846111e-02 -7.38962192e-02 -5.94226022e-02 -3.50227564e-02\n",
|
||
" -9.80609616e-03 1.08299273e-02 2.41882037e-02 2.93492130e-02\n",
|
||
" 2.64742912e-02 1.63249532e-02 -5.01831050e-05 -2.15098090e-02]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[ 1.03032441e+00 6.28336218e-02 -6.24175744e-01 5.21169159e-02\n",
|
||
" 2.80847477e-01 2.12552073e-01 8.13220608e-02 -1.69634577e-02\n",
|
||
" -6.50846112e-02 -7.38962192e-02 -5.94226022e-02 -3.50227564e-02\n",
|
||
" -9.80609615e-03 1.08299273e-02 2.41882037e-02 2.93492130e-02\n",
|
||
" 2.64742912e-02 1.63249532e-02 -5.01831207e-05 -2.15098090e-02]\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"4.3632959111950474e-07\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"4.363295916323784e-07\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[ 1.03630548 -0.01963611 -0.37900111 -0.07062318 0.12182967 0.16343471\n",
|
||
" 0.13003291 0.07490892 0.02365049 -0.01449782 -0.03814292 -0.04909093\n",
|
||
" -0.05009826 -0.04389027 -0.03279636 -0.01866537 -0.00289724 0.01348565\n",
|
||
" 0.02976145 0.04543942]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[ 1.03630548 -0.01963611 -0.37900111 -0.07062318 0.12182967 0.16343471\n",
|
||
" 0.13003291 0.07490892 0.02365049 -0.01449782 -0.03814292 -0.04909093\n",
|
||
" -0.05009826 -0.04389027 -0.03279636 -0.01866537 -0.00289724 0.01348565\n",
|
||
" 0.02976145 0.04543942]\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"5.194042826649355e-06\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"5.1940428268204826e-06\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[ 1.04220758 -0.10931453 -0.17641709 -0.06020587 0.02208512 0.05789007\n",
|
||
" 0.06491736 0.05785343 0.04537385 0.03196357 0.01969145 0.00934499\n",
|
||
" 0.00107405 -0.00526348 -0.00992331 -0.01318643 -0.01531845 -0.01655318\n",
|
||
" -0.01708852 -0.01708781]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[ 1.04220758 -0.10931453 -0.17641709 -0.06020587 0.02208512 0.05789007\n",
|
||
" 0.06491736 0.05785343 0.04537385 0.03196357 0.01969145 0.00934499\n",
|
||
" 0.00107405 -0.00526348 -0.00992331 -0.01318643 -0.01531845 -0.01655318\n",
|
||
" -0.01708852 -0.01708781]\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"2.0940821989652176e-05\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"2.094082198961999e-05\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[ 1.01219292 -0.06043581 -0.10391807 -0.05651951 -0.01898855 0.00312361\n",
|
||
" 0.01463049 0.01975848 0.02123176 0.02068067 0.01905883 0.01691985\n",
|
||
" 0.01458337 0.01223198 0.00996754 0.00784393 0.00588657 0.00410387\n",
|
||
" 0.00249435 0.00105081]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[ 1.01219292 -0.06043581 -0.10391807 -0.05651951 -0.01898855 0.00312361\n",
|
||
" 0.01463049 0.01975848 0.02123176 0.02068067 0.01905883 0.01691985\n",
|
||
" 0.01458337 0.01223198 0.00996754 0.00784393 0.00588657 0.00410387\n",
|
||
" 0.00249435 0.00105081]\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"0.00031535148309577417\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"0.00031535148309580783\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[ 8.38916861e-01 1.31276579e-01 8.97497404e-03 -1.72271878e-02\n",
|
||
" -2.11744554e-02 -1.91492986e-02 -1.57201944e-02 -1.23002365e-02\n",
|
||
" -9.30466214e-03 -6.81048318e-03 -4.78184120e-03 -3.15130074e-03\n",
|
||
" -1.84923989e-03 -8.13661243e-04 7.46984697e-06 6.56636616e-04\n",
|
||
" 1.16805821e-03 1.56912044e-03 1.88168312e-03 2.12318726e-03]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[ 8.38916861e-01 1.31276579e-01 8.97497404e-03 -1.72271878e-02\n",
|
||
" -2.11744554e-02 -1.91492986e-02 -1.57201944e-02 -1.23002365e-02\n",
|
||
" -9.30466214e-03 -6.81048318e-03 -4.78184120e-03 -3.15130074e-03\n",
|
||
" -1.84923989e-03 -8.13661243e-04 7.46984697e-06 6.56636616e-04\n",
|
||
" 1.16805821e-03 1.56912044e-03 1.88168312e-03 2.12318726e-03]\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"0.01507238889517717\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"0.0150723888951771\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[0.37396662 0.14174745 0.0764924 0.04892055 0.03447512 0.02586427\n",
|
||
" 0.02024962 0.01633913 0.01347916 0.0113104 0.0096208 0.00827728\n",
|
||
" 0.00719176 0.00630331 0.00556826 0.0049544 0.00443743 0.0039987\n",
|
||
" 0.0036237 0.003301 ]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[0.37396662 0.14174745 0.0764924 0.04892055 0.03447512 0.02586427\n",
|
||
" 0.02024962 0.01633913 0.01347916 0.0113104 0.0096208 0.00827728\n",
|
||
" 0.00719176 0.00630331 0.00556826 0.0049544 0.00443743 0.0039987\n",
|
||
" 0.0036237 0.003301 ]\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"0.2640931530791004\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"0.26409315307910025\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAYAAABB4NqyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABThUlEQVR4nO3deVxU9eL/8deArCK4oKAJuGSuaYqoaG4Vy2hdMyvvrSxLLW/lkr82rq1+b9ert2umZdomeculrpZmDIqVOymaaLllpmEKmRu4scic3x/qXEcWAcEDzPv5eMxD58xnzrxnonh35vM5x2IYhoGIiIiIC3EzO4CIiIjItaYCJCIiIi5HBUhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOXUMDtAZWS32zl06BC1atXCYrGYHUdERERKwDAMTp48SaNGjXBzK/4YjwpQIQ4dOkRISIjZMURERKQMDhw4QOPGjYsdowJUiFq1agHnP0B/f3+T04iIiEhJZGVlERIS4vg9XhwVoEJc/NrL399fBUhERKSKKcn0FU2CFhEREZejAiQiIiIuRwVIREREXI7mAF2F/Px88vLyzI4hUmE8PDxwd3c3O4aISLlTASoDwzDIyMjgxIkTZkcRqXC1a9cmODhY58QSkWpFBagMLpafBg0a4Ovrq18MUi0ZhsGZM2c4fPgwAA0bNjQ5kYhI+VEBKqX8/HxH+alXr57ZcUQqlI+PDwCHDx+mQYMG+jpMRKoNTYIupYtzfnx9fU1OInJtXPxZ13w3EalOVIDKSF97iavQz7qIVEcqQCIiIuJyVIBERETE5agAiRRh//79WCwWUlNTixyzcuVKLBaLTokgIlLFqAC5kKFDh2KxWBg5cmSBxx5//HEsFgtDhw51bDt8+DCPPfYYoaGheHl5ERwcTExMDMnJyY4xTZo0wWKxFLj985//vBZvqcz69OnjyOrp6Unz5s2Ji4sjJyfHMSYkJIT09HTatWtnYtKiP+OLtz59+pR533369GHs2LHlllVE5ErO5WazPmEW53KzTc2hZfAuJiQkhPnz5/PGG284ljhnZ2czb948QkNDncYOGjSIvLw8PvroI5o1a8bvv//O119/zbFjx5zGTZgwgREjRjhtq1WrVsW+kXIwYsQIJkyYQG5uLikpKTz88MMATJw4EQB3d3eCg4PNjAhASkoK+fn5AKxfv55Bgwaxe/du/P39AfD09DQznohIqXy3/EN6bn6C678exU//ysbiZs6xGB0BKg+GAadPm3MzjFJF7dSpE6GhoSxatMixbdGiRYSEhNCxY0fHthMnTrB27VomTZpE3759CQsLo0uXLsTFxdG/f3+nfdaqVYvg4GCnW82aNYvMcPz4cR588EHq1KmDr68vVquVPXv2XPgoDerXr8/ChQsd42+66SYaNGjguJ+cnIyHhwenTp0Czq9Sev/99xk4cCC+vr60aNGCJUuWXPGz8PX1JTg4mNDQUAYNGkRUVBTLly93PF7YV2AJCQnccMMN+Pj40LdvX/bv319gv++99x4hISH4+voycOBApkyZQu3atZ3GfPnll4SHh+Pt7U2zZs149dVXOXfuXKE569ev7/hc69atC0CDBg0c23bt2kWvXr3w8fEhJCSE0aNHc/r0acfzZ8yYQYsWLfD29iYoKIi7774bOH9EcNWqVbz55puOo0mFvR8RkfJk2/gJAJ1paFr5ARWg8nHmDPj5mXM7c6bUcR9++GFmz57tuP/hhx/yyCOPOI3x8/PDz8+PL774wulrofIwdOhQNm3axJIlS0hOTsYwDPr160deXh4Wi4VevXqxcuVK4HxZ2rFjB3l5eezYsQM4P+8mPDwcPz8/xz5fffVV7r33XrZt20a/fv24//77CxypKs7WrVtZt24dHh4eRY45cOAAd911F/369SM1NZXhw4fz/PPPO41Zt24dI0eOZMyYMaSmphIVFcVrr73mNGbZsmU88MADjB49mh07djBr1izi4+MLjCuJH374gZiYGO666y62bdvGggULWLt2LU8++SQAmzZtYvTo0UyYMIHdu3eTmJhIr169AHjzzTeJjIxkxIgRpKenk56eTkhISKkziIiUhu3kFgCszWLMDWJIAZmZmQZgZGZmFnjs7Nmzxo4dO4yzZ8/+b+OpU4Zx/ljMtb+dOlXi9/XQQw8ZAwYMMP744w/Dy8vL2Ldvn7F//37D29vb+OOPP4wBAwYYDz30kGP8f//7X6NOnTqGt7e30b17dyMuLs7YunWr0z7DwsIMT09Po2bNmk63b7/9ttAMP/30kwEY69atc2w7cuSI4ePjY3z66aeGYRjGtGnTjHbt2hmGYRhffPGF0blzZ+Ouu+4y3n77bcMwDCM6Otp47rnnHM8HjBde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22+EhISwfv16IiMjKypipVHaz+rQoUP07duXrl27Eh8fj5uba/2/Tll+tuLj4xk7diwnTpyo4HSVX25uLr6+vnz22WcMHDjQsX3MmDGkpqayatUqE9NVbhaLhc8//5w777zT7CiV1qhRo/jiiy9YvXo1TZs2NS1HDdNeuZoKDAwkMDDwiuOmTZvG3//+d8f9Q4cOERMTw4IFC+jatWtFRqw0SvpZFeZib8/JySnPSJVWaT6rgwcP0rdvX8LDw5k9e7bLlR+4up8tAU9PT8LDw0lKSnIqQElJSQwYMMDEZFKVGYbBqFGj+Pzzz1m5cqWp5QdUgEwTGhrqdN/Pzw+A5s2b07hxYzMiVVobN25k48aN3HzzzdSpU4dffvmFl156iebNm7vE0Z/SOHToEH369CE0NJTXX3+dP/74w/FYcHCwickqr7S0NI4dO0ZaWhr5+fmOc3Fdf/31jn8vXdG4ceMYMmQInTt3JjIyknfffZe0tDTNJyvEqVOn+Pnnnx339+3bR2pqKnXr1i3w33pX9sQTTzB37lwWL15MrVq1HPPJAgIC8PHxufaBTFl7JgXs27dPy+CLsG3bNqNv375G3bp1DS8vL6NJkybGyJEjjd9++83saJXO7NmzDaDQmxTuoYceKvTz+vbbb82OZrq3337bCAsLMzw9PY1OnTqZtly5svv2228L/Rl66KGHzI5WqRT136bZs2ebkkdzgERERMTluN7kABEREXF5KkAiIiLiclSARERExOWoAImIiIjLUQESERERl6MCJCIiIi5HBUhERERcjgqQiIiIuBwVIBEpsT59+jB27FizYxTq6NGjNGjQgP379wOwcuVKLBZLhV/ctKyvEx8fT+3atUv1nIiICBYtWlSq54hI4VSARMQ06enp3HfffbRs2RI3N7ciy9XChQtp06YNXl5etGnThs8//7zAmIkTJ3LHHXfQpEmTig1tohdffJHnn38eu91udhSRKk8FSERMk5OTQ/369Rk/fjwdOnQodExycjKDBw9myJAhbN26lSFDhnDvvfeyYcMGx5izZ8/ywQcfMHz48GsV3RT9+/cnMzOTZcuWmR1FpMpTARKRMjl+/DgPPvggderUwdfXF6vVyp49e5zGvPfee4SEhODr68vAgQOZMmWK09c+TZo04c033+TBBx8kICCg0NeZOnUqUVFRxMXF0apVK+Li4rj11luZOnWqY4zNZqNGjRpERkYWmffo0aP85S9/oXHjxvj6+nLjjTcyb948pzF9+vRh1KhRjB07ljp16hAUFMS7777L6dOnefjhh6lVqxbNmzfHZrMV2P+6devo0KED3t7edO3alR9++MHp8fj4eEJDQx2fxdGjR50e37t3LwMGDCAoKAg/Pz8iIiJYsWKF0xh3d3f69etXILeIlJ4KkIiUydChQ9m0aRNLliwhOTkZwzDo168feXl5wPlCMHLkSMaMGUNqaipRUVG89tprpX6d5ORkoqOjnbbFxMSwfv16x/3Vq1fTuXPnYveTnZ1NeHg4S5cu5ccff+TRRx9lyJAhTkeSAD766CMCAwPZuHEjo0aN4q9//Sv33HMP3bt35/vvvycmJoYhQ4Zw5swZp+c988wzvP7666SkpNCgQQP+9Kc/OT6LDRs28Mgjj/D444+TmppK3759+fvf/+70/FOnTtGvXz9WrFjBli1biImJ4Y477iAtLc1pXJcuXVizZk3JPjwRKZop16AXkSqpd+/expgxY4yffvrJAIx169Y5Hjty5Ijh4+NjfPrpp4ZhGMbgwYON/v37Oz3//vvvNwICAord9+U8PDyMTz75xGnbJ598Ynh6ejruDxgwwHjkkUecxnz77bcGYBw/frzI99OvXz/j//2//+eU4eabb3bcP3funFGzZk1jyJAhjm3p6ekGYCQnJzu9zvz58x1jjh49avj4+BgLFiwwDMMw/vKXvxixsbFOrz148OAiP4uL2rRpY0yfPt1p2+LFiw03NzcjPz+/2OeKSPF0BEhESm3nzp3UqFGDrl27OrbVq1ePli1bsnPnTgB2795Nly5dnJ53+f2SslgsTvcNw3DadvbsWby9vYvdR35+Pq+99hrt27enXr16+Pn5sXz58gJHWNq3b+/4u7u7O/Xq1ePGG290bAsKCgLg8OHDTs+79Ou3unXrOn0WO3fuLPD13OX3T58+zbPPPkubNm2oXbs2fn5+7Nq1q0A+Hx8f7HY7OTk5xb5fESleDbMDiEjVYxhGkdsvFpPLS0pxzytOcHAwGRkZTtsOHz7sKCIAgYGBHD9+vNj9/Pvf/+aNN95g6tSp3HjjjdSsWZOxY8eSm5vrNM7Dw8PpvsVicdp28T2VZCXWpZ/FlTzzzDMsW7aM119/neuvvx4fHx/uvvvuAvmOHTuGr68vPj4+V9yniBRNR4BEpNTatGnDuXPnnObPHD16lJ9++onWrVsD0KpVKzZu3Oj0vE2bNpX6tSIjI0lKSnLatnz5crp37+6437FjR3bs2FHsftasWcOAAQN44IEH6NChA82aNSswaftqfPfdd46/Hz9+nJ9++olWrVoB5z+vSx+/fPzFfEOHDmXgwIHceOONBAcHO85pdKkff/yRTp06lVtuEVelAiQipdaiRQsGDBjAiBEjWLt2LVu3buWBBx7guuuuY8CAAQCMGjWKhIQEpkyZwp49e5g1axY2m63AUaHU1FRSU1M5deoUf/zxB6mpqU5lZsyYMSxfvpxJkyaxa9cuJk2axIoVK5zOGRQTE8P27duLPQp0/fXXk5SUxPr169m5cyePPfZYgSNLV2PChAl8/fXX/PjjjwwdOpTAwEDuvPNOAEaPHk1iYiKTJ0/mp59+4q233iIxMbFAvkWLFpGamsrWrVu57777Cj3KtGbNmgKTwkWk9FSARKRMZs+eTXh4OLfffjuRkZEYhkFCQoLj66IePXowc+ZMpkyZQocOHUhMTOSpp54qMFenY8eOdOzYkc2bNzN37lw6duxIv379HI93796d+fPnM3v2bNq3b098fDwLFixwmn9044030rlzZz799NMi87744ot06tSJmJgY+vTpQ3BwsKOglId//vOfjBkzhvDwcNLT01myZAmenp4AdOvWjffff5/p06dz0003sXz5cl544QWn57/xxhvUqVOH7t27c8cddxATE1PgSM/BgwdZv349Dz/8cLnlFnFVFqMsX8qLiJTBiBEj2LVrV4Us405ISODpp5/mxx9/xM2tev6/3TPPPENmZibvvvuu2VFEqjxNghaRCvP6668TFRVFzZo1sdlsfPTRR8yYMaNCXqtfv37s2bOHgwcPEhISUiGvYbYGDRrw9NNPmx1DpFrQESARqTD33nsvK1eu5OTJkzRr1oxRo0YxcuRIs2OJiKgAiYiIiOupnl+Ui4iIiBRDBUhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOWoAImIiIjLUQESERERl/P/AZaP27Xvhj1uAAAAAElFTkSuQmCC\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_120_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"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",
|
||
"from sklearn import linear_model\n",
|
||
"\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",
|
||
"\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",
|
||
"n = 100\n",
|
||
"x = np.random.rand(n)\n",
|
||
"y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)\n",
|
||
"\n",
|
||
"Maxpolydegree = 20\n",
|
||
"X = np.zeros((n,Maxpolydegree))\n",
|
||
"#We include explicitely the intercept column\n",
|
||
"for degree in range(Maxpolydegree):\n",
|
||
" X[:,degree] = x**degree\n",
|
||
"# We split the data in test and training data\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
|
||
"\n",
|
||
"p = Maxpolydegree\n",
|
||
"I = np.eye(p,p)\n",
|
||
"# Decide which values of lambda to use\n",
|
||
"nlambdas = 6\n",
|
||
"MSEOwnRidgePredict = np.zeros(nlambdas)\n",
|
||
"MSERidgePredict = np.zeros(nlambdas)\n",
|
||
"lambdas = np.logspace(-4, 2, nlambdas)\n",
|
||
"for i in range(nlambdas):\n",
|
||
" lmb = lambdas[i]\n",
|
||
" OwnRidgeBeta = np.linalg.pinv(X_train.T @ X_train+lmb*I) @ X_train.T @ y_train\n",
|
||
" # Note: we include the intercept column and no scaling\n",
|
||
" RegRidge = linear_model.Ridge(lmb,fit_intercept=False)\n",
|
||
" RegRidge.fit(X_train,y_train)\n",
|
||
" # and then make the prediction\n",
|
||
" ytildeOwnRidge = X_train @ OwnRidgeBeta\n",
|
||
" ypredictOwnRidge = X_test @ OwnRidgeBeta\n",
|
||
" ytildeRidge = RegRidge.predict(X_train)\n",
|
||
" ypredictRidge = RegRidge.predict(X_test)\n",
|
||
" MSEOwnRidgePredict[i] = MSE(y_test,ypredictOwnRidge)\n",
|
||
" MSERidgePredict[i] = MSE(y_test,ypredictRidge)\n",
|
||
" print(\"Beta values for own Ridge implementation\")\n",
|
||
" print(OwnRidgeBeta)\n",
|
||
" print(\"Beta values for Scikit-Learn Ridge implementation\")\n",
|
||
" print(RegRidge.coef_)\n",
|
||
" print(\"MSE values for own Ridge implementation\")\n",
|
||
" print(MSEOwnRidgePredict[i])\n",
|
||
" print(\"MSE values for Scikit-Learn Ridge implementation\")\n",
|
||
" print(MSERidgePredict[i])\n",
|
||
"\n",
|
||
"# Now plot the results\n",
|
||
"plt.figure()\n",
|
||
"plt.plot(np.log10(lambdas), MSEOwnRidgePredict, 'r', label = 'MSE own Ridge Test')\n",
|
||
"plt.plot(np.log10(lambdas), MSERidgePredict, 'g', label = 'MSE Ridge Test')\n",
|
||
"\n",
|
||
"plt.xlabel('log10(lambda)')\n",
|
||
"plt.ylabel('MSE')\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "20de82fd",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The results here agree when we force **Scikit-Learn**'s Ridge function to include the first column in our design matrix.\n",
|
||
"We see that the results agree very well. Here we have thus explicitely included the intercept column in the design matrix.\n",
|
||
"What happens if we do not include the intercept in our fit?\n",
|
||
"Let us see how we can change this code by zero centering."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"id": "4138ed50",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Beta values for own Ridge implementation\n",
|
||
"[ 3.43579948e-02 -5.43330971e-01 -3.10141413e-03 2.47116868e-01\n",
|
||
" 2.18613217e-01 1.02054837e-01 -4.25617658e-04 -5.90475506e-02\n",
|
||
" -7.68534263e-02 -6.68929213e-02 -4.24906604e-02 -1.40927184e-02\n",
|
||
" 1.11482289e-02 2.88529063e-02 3.67047975e-02 3.38135733e-02\n",
|
||
" 2.02198703e-02 -3.46383926e-03 -3.63025821e-02]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[ 3.43579948e-02 -5.43330971e-01 -3.10141413e-03 2.47116868e-01\n",
|
||
" 2.18613217e-01 1.02054837e-01 -4.25617654e-04 -5.90475506e-02\n",
|
||
" -7.68534263e-02 -6.68929213e-02 -4.24906604e-02 -1.40927184e-02\n",
|
||
" 1.11482289e-02 2.88529063e-02 3.67047975e-02 3.38135733e-02\n",
|
||
" 2.02198702e-02 -3.46383925e-03 -3.63025821e-02]\n",
|
||
"Intercept from own implementation:\n",
|
||
"1.0330308045187757\n",
|
||
"Intercept from Scikit-Learn Ridge implementation\n",
|
||
"1.0330308045183219\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"3.139255958997547e-06\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"3.1392559585048734e-06\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[-0.05807125 -0.29822833 -0.08551306 0.08156108 0.13679863 0.12333649\n",
|
||
" 0.08251519 0.03815288 0.00111756 -0.02498832 -0.04010697 -0.04566964\n",
|
||
" -0.04355837 -0.03562355 -0.02348765 -0.00848904 0.00831018 0.0260906\n",
|
||
" 0.04423486]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[-0.05807125 -0.29822833 -0.08551306 0.08156108 0.13679863 0.12333649\n",
|
||
" 0.08251519 0.03815288 0.00111756 -0.02498832 -0.04010697 -0.04566964\n",
|
||
" -0.04355837 -0.03562355 -0.02348765 -0.00848904 0.00831018 0.0260906\n",
|
||
" 0.04423486]\n",
|
||
"Intercept from own implementation:\n",
|
||
"1.0411487294305088\n",
|
||
"Intercept from Scikit-Learn Ridge implementation\n",
|
||
"1.041148729430523\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"1.9601304850035702e-05\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"1.960130485007504e-05\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[-0.1416398 -0.14021063 -0.05383795 0.01367553 0.04784395 0.05796251\n",
|
||
" 0.05447415 0.044613 0.03267527 0.02098261 0.01066519 0.00217499\n",
|
||
" -0.00440346 -0.00917248 -0.01231917 -0.01405935 -0.0146081 -0.01416528\n",
|
||
" -0.01290947]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[-0.1416398 -0.14021063 -0.05383795 0.01367553 0.04784395 0.05796251\n",
|
||
" 0.05447415 0.044613 0.03267527 0.02098261 0.01066519 0.00217499\n",
|
||
" -0.00440346 -0.00917248 -0.01231917 -0.01405935 -0.0146081 -0.01416528\n",
|
||
" -0.01290947]\n",
|
||
"Intercept from own implementation:\n",
|
||
"1.049556996627824\n",
|
||
"Intercept from Scikit-Learn Ridge implementation\n",
|
||
"1.0495569966278269\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"5.4959161509357395e-05\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"5.495916150936645e-05\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[-0.13535942 -0.08593216 -0.03568439 -0.0036367 0.01397146 0.02229529\n",
|
||
" 0.02503753 0.0245528 0.02228115 0.01908936 0.01549377 0.01179792\n",
|
||
" 0.00817631 0.00472512 0.00149311 -0.00149956 -0.00424967 -0.00676387\n",
|
||
" -0.00905423]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[-0.13535942 -0.08593216 -0.03568439 -0.0036367 0.01397146 0.02229529\n",
|
||
" 0.02503753 0.0245528 0.02228115 0.01908936 0.01549377 0.01179792\n",
|
||
" 0.00817631 0.00472512 0.00149311 -0.00149956 -0.00424967 -0.00676387\n",
|
||
" -0.00905423]\n",
|
||
"Intercept from own implementation:\n",
|
||
"1.039967668952797\n",
|
||
"Intercept from Scikit-Learn Ridge implementation\n",
|
||
"1.0399676689527975\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"7.571105947979344e-05\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"7.571105947979394e-05\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[-0.05100875 -0.04063602 -0.02723445 -0.01713366 -0.0100706 -0.00517114\n",
|
||
" -0.00174276 0.00068734 0.00243186 0.00369758 0.00462287 0.0053018\n",
|
||
" 0.00579953 0.006162 0.00642221 0.00660427 0.00672607 0.0068011\n",
|
||
" 0.00683964]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[-0.05100875 -0.04063602 -0.02723445 -0.01713366 -0.0100706 -0.00517114\n",
|
||
" -0.00174276 0.00068734 0.00243186 0.00369758 0.00462287 0.0053018\n",
|
||
" 0.00579953 0.006162 0.00642221 0.00660427 0.00672607 0.0068011\n",
|
||
" 0.00683964]\n",
|
||
"Intercept from own implementation:\n",
|
||
"0.999955585168597\n",
|
||
"Intercept from Scikit-Learn Ridge implementation\n",
|
||
"0.999955585168597\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"0.0007698473260556343\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"0.0007698473260556325\n",
|
||
"Beta values for own Ridge implementation\n",
|
||
"[-0.00834567 -0.00803064 -0.00673407 -0.00554552 -0.00458878 -0.0038335\n",
|
||
" -0.00323332 -0.00274989 -0.0023548 -0.00202756 -0.00175331 -0.00152117\n",
|
||
" -0.001323 -0.0011526 -0.00100519 -0.00087697 -0.00076495 -0.00066668\n",
|
||
" -0.00058016]\n",
|
||
"Beta values for Scikit-Learn Ridge implementation\n",
|
||
"[-0.00834567 -0.00803064 -0.00673407 -0.00554552 -0.00458878 -0.0038335\n",
|
||
" -0.00323332 -0.00274989 -0.0023548 -0.00202756 -0.00175331 -0.00152117\n",
|
||
" -0.001323 -0.0011526 -0.00100519 -0.00087697 -0.00076495 -0.00066668\n",
|
||
" -0.00058016]\n",
|
||
"Intercept from own implementation:\n",
|
||
"0.9637117593816477\n",
|
||
"Intercept from Scikit-Learn Ridge implementation\n",
|
||
"0.9637117593816477\n",
|
||
"MSE values for own Ridge implementation\n",
|
||
"0.0023813163025848865\n",
|
||
"MSE values for Scikit-Learn Ridge implementation\n",
|
||
"0.002381316302584886\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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lvh+evXqJd577z2jDM8++6zheX5+vrCyshLBwcGGZcnJyQKAiI2NNdrP5s2bDTW3b98WFhYWYsuWLUIIIV599VXRo0cPo30HBQWVeCzu8/LyEl9++aXRst27dwszMzNRUFBQ6rpEVDqOSBGRZBISEmBubg5fX1/Dsvr166N58+ZISEgAAFy6dAlPP/200XoPPi8rmUxm9FwIYbQsOzsbarW61G0UFBRg7ty5aNOmDerXrw9ra2scOHCgyIhPmzZtDD/L5XLUr18fTz75pGGZs7MzACA1NdVovf+eVqxXr57RsUhISChy2vHB55mZmfjggw/g5eUFe3t7WFtb4/fffy+Sz8LCAnq9HjqdrtT3S0SlM5c6ABHVXUKIEpffb3AebHZKW680Li4uSElJMVqWmppqaGgAwNHREXfv3i11O5988gk+/fRTfPbZZ3jyySdhZWWFsLAw5ObmGtUpFAqj5zKZzGjZ/fdUlm/O/fdYPMzEiRPx888/Y/HixXj88cdhYWGBl19+uUi+O3fuwNLSEhYWFg/dJhGVjCNSRCQZLy8v5OfnG11fdPv2bVy+fBktW7YEALRo0QK//fab0XqnTp0yeV9+fn6IjIw0WnbgwAH4+/sbnrdr1w4XL14sdTtHjhxB3759MXToULRt2xZNmjQpcnH8ozh+/Ljh57t37+Ly5cto0aIFgMLj9d/XH6y/n2/48OHo378/nnzySbi4uBjmxPqv8+fPw9vbu8JyE9VVbKSISDLNmjVD3759ERISgqNHjyI+Ph5Dhw7FY489hr59+wIAxowZg71792LJkiW4cuUKvvrqK+zbt6/IKFVcXBzi4uKQkZGBW7duIS4uzqgpGjduHA4cOICFCxfi999/x8KFC3Hw4EGjOacCAwNx4cKFUkelHn/8cURGRiImJgYJCQkYNWpUkZGuRzF79mz88ssvOH/+PIYPHw5HR0f069cPADB27Fjs378fixYtwuXLl7F06VLs37+/SL4dO3YgLi4O8fHxeO2114od9Tpy5EiRi++JyHRspIhIUmvWrIGPjw9efPFF+Pn5QQiBvXv3Gk6DPfPMM1i5ciWWLFmCtm3bYv/+/Rg/fnyRa5natWuHdu3a4fTp0/j+++/Rrl079OrVy/C6v78/Nm/ejDVr1qBNmzZYu3YttmzZYnR91pNPPon27dtj69atJeadNm0avL29ERgYiK5du8LFxcXQ6FSEBQsWYNy4cfDx8UFycjL27NkDpVIJAOjYsSO++eYbfPnll3jqqadw4MABfPjhh0brf/rpp3BwcIC/vz/69OmDwMDAIiNPf//9N2JiYvDGG29UWG6iukomynOxARGRhEJCQvD7779Xytf39+7di/fffx/nz5+HmVnt/LfmxIkTodFosGrVKqmjENV4vNiciKq9xYsXo3v37rCyssK+ffuwbt06LF++vFL21atXL1y5cgV///033NzcKmUfUnNycsL7778vdQyiWoEjUkRU7Q0ePBhRUVFIT09HkyZNMGbMGISGhkodi4iIjRQRERFRedXOCwCIiIiIqgAbKSIiIqJyYiNFREREVE5spIiIiIjKiY0UERERUTmxkSIiIiIqJzZSREREROXERoqIiIionNhIEREREZXT/wEstM74qGAwcwAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter3_122_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"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",
|
||
"from sklearn import linear_model\n",
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"\n",
|
||
"def MSE(y_data,y_model):\n",
|
||
" n = np.size(y_model)\n",
|
||
" return np.sum((y_data-y_model)**2)/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(315)\n",
|
||
"\n",
|
||
"n = 100\n",
|
||
"x = np.random.rand(n)\n",
|
||
"y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)\n",
|
||
"\n",
|
||
"Maxpolydegree = 20\n",
|
||
"X = np.zeros((n,Maxpolydegree-1))\n",
|
||
"\n",
|
||
"for degree in range(1,Maxpolydegree): #No intercept column\n",
|
||
" X[:,degree-1] = x**(degree)\n",
|
||
"\n",
|
||
"# We split the data in test and training data\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
|
||
"\n",
|
||
"#For our own implementation, we will need to deal with the intercept by centering the design matrix and the target variable\n",
|
||
"X_train_mean = np.mean(X_train,axis=0)\n",
|
||
"#Center by removing mean from each feature\n",
|
||
"X_train_scaled = X_train - X_train_mean \n",
|
||
"X_test_scaled = X_test - X_train_mean\n",
|
||
"#The model intercept (called y_scaler) is given by the mean of the target variable (IF X is centered)\n",
|
||
"#Remove the intercept from the training data.\n",
|
||
"y_scaler = np.mean(y_train) \n",
|
||
"y_train_scaled = y_train - y_scaler \n",
|
||
"\n",
|
||
"p = Maxpolydegree-1\n",
|
||
"I = np.eye(p,p)\n",
|
||
"# Decide which values of lambda to use\n",
|
||
"nlambdas = 6\n",
|
||
"MSEOwnRidgePredict = np.zeros(nlambdas)\n",
|
||
"MSERidgePredict = np.zeros(nlambdas)\n",
|
||
"\n",
|
||
"lambdas = np.logspace(-4, 2, nlambdas)\n",
|
||
"for i in range(nlambdas):\n",
|
||
" lmb = lambdas[i]\n",
|
||
" OwnRidgeBeta = np.linalg.pinv(X_train_scaled.T @ X_train_scaled+lmb*I) @ X_train_scaled.T @ (y_train_scaled)\n",
|
||
" intercept_ = y_scaler - X_train_mean@OwnRidgeBeta #The intercept can be shifted so the model can predict on uncentered data\n",
|
||
" #Add intercept to prediction\n",
|
||
" ypredictOwnRidge = X_test_scaled @ OwnRidgeBeta + y_scaler \n",
|
||
" RegRidge = linear_model.Ridge(lmb)\n",
|
||
" RegRidge.fit(X_train,y_train)\n",
|
||
" ypredictRidge = RegRidge.predict(X_test)\n",
|
||
" MSEOwnRidgePredict[i] = MSE(y_test,ypredictOwnRidge)\n",
|
||
" MSERidgePredict[i] = MSE(y_test,ypredictRidge)\n",
|
||
" print(\"Beta values for own Ridge implementation\")\n",
|
||
" print(OwnRidgeBeta) #Intercept is given by mean of target variable\n",
|
||
" print(\"Beta values for Scikit-Learn Ridge implementation\")\n",
|
||
" print(RegRidge.coef_)\n",
|
||
" print('Intercept from own implementation:')\n",
|
||
" print(intercept_)\n",
|
||
" print('Intercept from Scikit-Learn Ridge implementation')\n",
|
||
" print(RegRidge.intercept_)\n",
|
||
" print(\"MSE values for own Ridge implementation\")\n",
|
||
" print(MSEOwnRidgePredict[i])\n",
|
||
" print(\"MSE values for Scikit-Learn Ridge implementation\")\n",
|
||
" print(MSERidgePredict[i])\n",
|
||
"\n",
|
||
"\n",
|
||
"# Now plot the results\n",
|
||
"plt.figure()\n",
|
||
"plt.plot(np.log10(lambdas), MSEOwnRidgePredict, 'b--', label = 'MSE own Ridge Test')\n",
|
||
"plt.plot(np.log10(lambdas), MSERidgePredict, 'g--', label = 'MSE SL Ridge Test')\n",
|
||
"plt.xlabel('log10(lambda)')\n",
|
||
"plt.ylabel('MSE')\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7e9dfda5",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We see here, when compared to the code which includes explicitely the\n",
|
||
"intercept column, that our MSE value is actually smaller. This is\n",
|
||
"because the regularization term does not include the intercept value\n",
|
||
"$\\beta_0$ in the fitting. This applies to Lasso regularization as\n",
|
||
"well. It means that our optimization is now done only with the\n",
|
||
"centered matrix and/or vector that enter the fitting procedure. Note\n",
|
||
"also that the problem with the intercept occurs mainly in these type\n",
|
||
"of polynomial fitting problem.\n",
|
||
"\n",
|
||
"The next example is indeed an example where all these discussions about the role of intercept are not present."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a7eb252c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## More complicated Example: 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",
|
||
"id": "990ff280",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto1\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" H = -J \\sum_{k}^L s_k s_{k + 1},\n",
|
||
"\\label{_auto1} \\tag{1}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5ea46b31",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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": 14,
|
||
"id": "fa60aaab",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "b9e8214e",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"A more general form for the one-dimensional Ising model is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a578cd63",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto2\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" H = - \\sum_j^L \\sum_k^L s_j s_k J_{jk}.\n",
|
||
"\\label{_auto2} \\tag{2}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d90dcfee",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "c4eec69a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto3\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" \\boldsymbol{H} = \\boldsymbol{X} J,\n",
|
||
"\\label{_auto3} \\tag{3}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ae46a11b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "87ebb9b8",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto4\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" \\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta} + \\boldsymbol{\\epsilon},\n",
|
||
"\\label{_auto4} \\tag{4}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "856efd3f",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We split the data in training and test data as discussed in the previous example"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"id": "5ae2828f",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "0d6201d9",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"In the ordinary least squares method we choose the cost function"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "4af380a7",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto5\"></div>\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{_auto5} \\tag{5}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8e8eefa3",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "a1c0765c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\beta} = \\frac{\\boldsymbol{X}^T \\boldsymbol{y}}{\\boldsymbol{X}^T \\boldsymbol{X}},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c754e28b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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": 16,
|
||
"id": "ff056cf9",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"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": "markdown",
|
||
"id": "524f259e",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"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",
|
||
"id": "52be4553",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\beta} = \\boldsymbol{X}^{+}\\boldsymbol{y},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c37ff09a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"where the pseudoinverse of $\\boldsymbol{X}$ is given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ea49a105",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{X}^{+} = \\frac{\\boldsymbol{X}^T}{\\boldsymbol{X}^T\\boldsymbol{X}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bf31067a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "5ef2c839",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto6\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" \\boldsymbol{\\beta} = \\boldsymbol{V}\\boldsymbol{\\Sigma}^{+} \\boldsymbol{U}^T \\boldsymbol{y}.\n",
|
||
"\\label{_auto6} \\tag{6}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "96bbf134",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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": 17,
|
||
"id": "5e729b1e",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"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": 18,
|
||
"id": "80b923d1",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"beta = ols_svd(X_train_own,y_train)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b4cf2f1a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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": 19,
|
||
"id": "93be2c0d",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"J = beta[1:].reshape(L, L)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ae869089",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"A way of looking at the coefficients in $J$ is to plot the matrices as images."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"id": "8d6d8152",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"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",
|
||
"id": "8092ac84",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"Let us now \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",
|
||
"id": "d9251cde",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto7\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" H = -J \\sum_{k}^L s_k s_{k + 1},\n",
|
||
"\\label{_auto7} \\tag{7}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "abe454c9",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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": 21,
|
||
"id": "89f8fbd0",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "e06639d4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"A more general form for the one-dimensional Ising model is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "43ef0f40",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto8\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" H = - \\sum_j^L \\sum_k^L s_j s_k J_{jk}.\n",
|
||
"\\label{_auto8} \\tag{8}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "523dc03b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "0f389eef",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto9\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" H = X J,\n",
|
||
"\\label{_auto9} \\tag{9}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b6e00f24",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "5ea1084d",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto10\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
" \\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta} + \\boldsymbol{\\epsilon}.\n",
|
||
"\\label{_auto10} \\tag{10}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5551bb05",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We organize the data as we did above"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"id": "f5dd7795",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "f36c807b",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"We will do all fitting with **Scikit-Learn**,"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"id": "eb701dd4",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"clf = skl.LinearRegression().fit(X_train, y_train)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bd356ada",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"When extracting the $J$-matrix we make sure to remove the intercept"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"id": "ae737db8",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"J_sk = clf.coef_.reshape(L, L)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d152a32a",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"And then we plot the results"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"id": "8d713977",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"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",
|
||
"id": "ede30c18",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The results agree perfectly with our previous discussion where we used our own code.\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",
|
||
"id": "eac772e9",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto11\"></div>\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 \\boldsymbol{\\beta}^T\\boldsymbol{\\beta}.\n",
|
||
"\\label{_auto11} \\tag{11}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"id": "b66675f0",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"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",
|
||
"id": "71aa37b5",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"In the **Least Absolute Shrinkage and Selection Operator** (LASSO)-method we get a third cost function."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8b70ef66",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto12\"></div>\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{_auto12} \\tag{12}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "079981ff",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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": 27,
|
||
"id": "c8d4a180",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"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",
|
||
"id": "57839941",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"We see how the different models perform for a different set of values for $\\lambda$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"id": "0e3bbb4e",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"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",
|
||
"id": "14711abd",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"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": 29,
|
||
"id": "9ff29a72",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"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",
|
||
"id": "9c10be56",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "efce3b63",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"## Exercises and Projects\n",
|
||
"\n",
|
||
"The main aim of this project is to study in more detail various\n",
|
||
"regression methods, including the Ordinary Least Squares (OLS) method,\n",
|
||
"The total score is **100** points. Each subtask has its own final score.\n",
|
||
"\n",
|
||
"We will first study how to fit polynomials to a specific\n",
|
||
"two-dimensional function called [Franke's\n",
|
||
"function](http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf). This\n",
|
||
"is a function which has been widely used when testing various\n",
|
||
"interpolation and fitting algorithms. Furthermore, after having\n",
|
||
"established the model and the method, we will employ resamling\n",
|
||
"techniques such as cross-validation and/or bootstrap in order to perform a\n",
|
||
"proper assessment of our models. We will also study in detail the\n",
|
||
"so-called Bias-Variance trade off.\n",
|
||
"\n",
|
||
"The Franke function, which is a weighted sum of four exponentials reads as follows"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ef5a4df0",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"f(x,y) &= \\frac{3}{4}\\exp{\\left(-\\frac{(9x-2)^2}{4} - \\frac{(9y-2)^2}{4}\\right)}+\\frac{3}{4}\\exp{\\left(-\\frac{(9x+1)^2}{49}- \\frac{(9y+1)}{10}\\right)} \\\\\n",
|
||
"&+\\frac{1}{2}\\exp{\\left(-\\frac{(9x-7)^2}{4} - \\frac{(9y-3)^2}{4}\\right)} -\\frac{1}{5}\\exp{\\left(-(9x-4)^2 - (9y-7)^2\\right) }.\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b085eff4",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"The function will be defined for $x,y\\in [0,1]$. Our first step will\n",
|
||
"be to perform an OLS regression analysis of this function, trying out\n",
|
||
"a polynomial fit with an $x$ and $y$ dependence of the form $[x, y,\n",
|
||
"x^2, y^2, xy, \\dots]$. We will also include bootstrap first as\n",
|
||
"a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform\n",
|
||
"distribution to set up the arrays of values for $x$ and $y$, or as in\n",
|
||
"the example below just a set of fixed \n",
|
||
"values for $x$ and $y$ with a given step\n",
|
||
"size. We will fit a\n",
|
||
"function (for example a polynomial) of $x$ and $y$. Thereafter we\n",
|
||
"will repeat much of the same procedure using the Ridge and Lasso\n",
|
||
"regression methods, introducing thus a dependence on the bias\n",
|
||
"(penalty) $\\lambda$.\n",
|
||
"\n",
|
||
"Finally we are going to use (real) digital terrain data and try to\n",
|
||
"reproduce these data using the same methods. We will also try to go\n",
|
||
"beyond the second-order polynomials metioned above and explore \n",
|
||
"which polynomial fits the data best.\n",
|
||
"\n",
|
||
"The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"id": "5056dccb",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from mpl_toolkits.mplot3d import Axes3D\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from matplotlib import cm\n",
|
||
"from matplotlib.ticker import LinearLocator, FormatStrFormatter\n",
|
||
"import numpy as np\n",
|
||
"from random import random, seed\n",
|
||
"\n",
|
||
"fig = plt.figure()\n",
|
||
"ax = fig.gca(projection='3d')\n",
|
||
"\n",
|
||
"# Make data.\n",
|
||
"x = np.arange(0, 1, 0.05)\n",
|
||
"y = np.arange(0, 1, 0.05)\n",
|
||
"x, y = np.meshgrid(x,y)\n",
|
||
"\n",
|
||
"\n",
|
||
"def FrankeFunction(x,y):\n",
|
||
" term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n",
|
||
" term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n",
|
||
" term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n",
|
||
" term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n",
|
||
" return term1 + term2 + term3 + term4\n",
|
||
"\n",
|
||
"\n",
|
||
"z = FrankeFunction(x, y)\n",
|
||
"\n",
|
||
"# Plot the surface.\n",
|
||
"surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,\n",
|
||
" linewidth=0, antialiased=False)\n",
|
||
"\n",
|
||
"# Customize the z axis.\n",
|
||
"ax.set_zlim(-0.10, 1.40)\n",
|
||
"ax.zaxis.set_major_locator(LinearLocator(10))\n",
|
||
"ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n",
|
||
"\n",
|
||
"# Add a color bar which maps values to colors.\n",
|
||
"fig.colorbar(surf, shrink=0.5, aspect=5)\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f5e72aef",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Exercise: Ordinary Least Square (OLS) on the Franke function\n",
|
||
"\n",
|
||
"We will generate our own dataset for a function\n",
|
||
"$\\mathrm{FrankeFunction}(x,y)$ with $x,y \\in [0,1]$. The function\n",
|
||
"$f(x,y)$ is the Franke function. You should explore also the addition\n",
|
||
"of an added stochastic noise to this function using the normal\n",
|
||
"distribution $N(0,1)$.\n",
|
||
"\n",
|
||
"*Write your own code* (using either a matrix inversion or a singular\n",
|
||
"value decomposition from e.g., **numpy** ) or use your code from\n",
|
||
"homeworks 1 and 2 and perform a standard least square regression\n",
|
||
"analysis using polynomials in $x$ and $y$ up to fifth order. Find the\n",
|
||
"[confidence intervals](https://en.wikipedia.org/wiki/Confidence_interval) of the parameters (estimators) $\\beta$ by computing their\n",
|
||
"variances, evaluate the Mean Squared error (MSE)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0ba33237",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"MSE(\\hat{y},\\hat{\\tilde{y}}) = \\frac{1}{n}\n",
|
||
"\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1f9af2ef",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"and the $R^2$ score function. If $\\tilde{\\hat{y}}_i$ is the predicted\n",
|
||
"value of the $i-th$ sample and $y_i$ is the corresponding true value,\n",
|
||
"then the score $R^2$ is defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "77d5b0f2",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"R^2(\\hat{y}, \\tilde{\\hat{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6c1f9df9",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"where we have defined the mean value of $\\hat{y}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1d06102c",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8fb40b08",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Your code has to include a scaling of the data (for example by\n",
|
||
"subtracting the mean value), and\n",
|
||
"a split of the data in training and test data. For this exercise you can\n",
|
||
"either write your own code or use for example the function for\n",
|
||
"splitting training data provided by the library **Scikit-Learn** (make\n",
|
||
"sure you have installed it). This function is called\n",
|
||
"$train\\_test\\_split$. **You should present a critical discussion of why and how you have scaled or not scaled the 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 (eventually also an additional\n",
|
||
"validation set). 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.\n",
|
||
"\n",
|
||
"You can easily reuse the solutions to your exercises from week 35 and week 36."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1701de47",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Exercise: Bias-variance trade-off and resampling techniques\n",
|
||
"\n",
|
||
"Our aim here is to study the bias-variance trade-off by implementing the **bootstrap** resampling technique.\n",
|
||
"\n",
|
||
"With a code which does OLS and includes resampling techniques, \n",
|
||
"we will now discuss the bias-variance trade-off 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 and basically all Machine Learning algorithms. \n",
|
||
"\n",
|
||
"Before you perform an analysis of the bias-variance trade-off on your test data, make\n",
|
||
"first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and\n",
|
||
"Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to \n",
|
||
"indicate possible regions of low/high bias and variance. You will most likely not get an\n",
|
||
"equally smooth curve!\n",
|
||
"\n",
|
||
"With this result we move on to the bias-variance trade-off analysis.\n",
|
||
"\n",
|
||
"Consider a\n",
|
||
"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",
|
||
"id": "15110cdf",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "33046595",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Here $\\epsilon$ is normally distributed with mean zero and standard\n",
|
||
"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",
|
||
"The parameters $\\boldsymbol{\\beta}$ are in turn found by optimizing the means\n",
|
||
"squared error via the so-called cost function"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "84527747",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "da2f876d",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Here the expected value $\\mathbb{E}$ is the sample value. \n",
|
||
"\n",
|
||
"Show that you can rewrite this as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1845a7dc",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"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",
|
||
"id": "d2f1d7d7",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Explain what the terms mean, which one is the bias and which one is\n",
|
||
"the variance and discuss their interpretations.\n",
|
||
"\n",
|
||
"Perform then a bias-variance analysis of the Franke function by\n",
|
||
"studying the MSE value as function of the complexity of your model.\n",
|
||
"\n",
|
||
"Discuss the bias and variance trade-off as function\n",
|
||
"of your model complexity (the degree of the polynomial) and the number\n",
|
||
"of data points, and possibly also your training and test data using the **bootstrap** resampling method.\n",
|
||
"\n",
|
||
"Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e898c902",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Exercise: Cross-validation as resampling techniques, adding more complexity\n",
|
||
"\n",
|
||
"The aim here is to write your own code for another widely popular\n",
|
||
"resampling technique, the so-called cross-validation method. Again,\n",
|
||
"before you start with cross-validation approach, you should scale your\n",
|
||
"data.\n",
|
||
"\n",
|
||
"Implement the $k$-fold cross-validation algorithm (write your own\n",
|
||
"code) and evaluate again the MSE function resulting\n",
|
||
"from the test folds. You can compare your own code with that from\n",
|
||
"**Scikit-Learn** if needed. \n",
|
||
"\n",
|
||
"Compare the MSE you get from your cross-validation code with the one\n",
|
||
"you got from your **bootstrap** code. Comment your results. Try $5-10$\n",
|
||
"folds. You can also compare your own cross-validation code with the\n",
|
||
"one provided by **Scikit-Learn**."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d23dc734",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Exercise: Ridge Regression on the Franke function with resampling\n",
|
||
"\n",
|
||
"Write your own code for the Ridge method, either using matrix\n",
|
||
"inversion or the singular value decomposition as done in the previous\n",
|
||
"exercise. Perform the same bootstrap analysis as in the\n",
|
||
"Exercise 2 (for the same polynomials) and the cross-validation in exercise 3 but now for different values of $\\lambda$. Compare and\n",
|
||
"analyze your results with those obtained in exercises 1-3. Study the\n",
|
||
"dependence on $\\lambda$.\n",
|
||
"\n",
|
||
"Study also the bias-variance trade-off as function of various values of\n",
|
||
"the parameter $\\lambda$. For the bias-variance trade-off, use the **bootstrap** resampling method. Comment your results."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "39a35330",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Exercise: Lasso Regression on the Franke function with resampling\n",
|
||
"\n",
|
||
"This exercise is essentially a repeat of the previous two ones, but now\n",
|
||
"with Lasso regression. Write either your own code (difficult and optional) or, in this case,\n",
|
||
"you can also use the functionalities of **Scikit-Learn** (recommended). \n",
|
||
"Give a\n",
|
||
"critical discussion of the three methods and a judgement of which\n",
|
||
"model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the **bootstrap** resampling technique and an analysis of the mean squared error using cross-validation."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "44d9e821",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"### Exercise: Analysis of real data\n",
|
||
"\n",
|
||
"With our codes functioning and having been tested properly on a\n",
|
||
"simpler function we are now ready to look at real data. We will\n",
|
||
"essentially repeat in this exercise what was done in exercises 1-5. However, we\n",
|
||
"need first to download the data and prepare properly the inputs to our\n",
|
||
"codes. We are going to download digital terrain data from the website\n",
|
||
"<https://earthexplorer.usgs.gov/>,\n",
|
||
"\n",
|
||
"Or, if you prefer, we have placed selected datafiles at <https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles>\n",
|
||
"\n",
|
||
"In order to obtain data for a specific region, you need to register as\n",
|
||
"a user (free) at this website and then decide upon which area you want\n",
|
||
"to fetch the digital terrain data from. In order to be able to read\n",
|
||
"the data properly, you need to specify that the format should be **SRTM\n",
|
||
"Arc-Second Global** and download the data as a **GeoTIF** file. The\n",
|
||
"files are then stored in *tif* format which can be imported into a\n",
|
||
"Python program using"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"id": "0a4e6d7e",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"scipy.misc.imread"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "16a73292",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"Here is a simple part of a Python code which reads and plots the data\n",
|
||
"from such files"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"id": "168356a4",
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"\"\"\"\n",
|
||
"import numpy as np\n",
|
||
"from imageio import imread\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from mpl_toolkits.mplot3d import Axes3D\n",
|
||
"from matplotlib import cm\n",
|
||
"\n",
|
||
"# Load the terrain\n",
|
||
"terrain1 = imread('SRTM_data_Norway_1.tif')\n",
|
||
"# Show the terrain\n",
|
||
"plt.figure()\n",
|
||
"plt.title('Terrain over Norway 1')\n",
|
||
"plt.imshow(terrain1, cmap='gray')\n",
|
||
"plt.xlabel('X')\n",
|
||
"plt.ylabel('Y')\n",
|
||
"plt.show()\n",
|
||
"\"\"\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e9ec3e68",
|
||
"metadata": {
|
||
"editable": true
|
||
},
|
||
"source": [
|
||
"If you should have problems in downloading the digital terrain data,\n",
|
||
"we provide two examples under the data folder of project 1. One is\n",
|
||
"from a region close to Stavanger in Norway and the other Møsvatn\n",
|
||
"Austfjell, again in Norway.\n",
|
||
"Feel free to produce your own terrain data.\n",
|
||
"\n",
|
||
"Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example [kaggle.com](https://www.kaggle.com/datasets) for examples.\n",
|
||
"\n",
|
||
"Our final part deals with the parameterization of your digital terrain\n",
|
||
"data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial\n",
|
||
"approximation and cross-validation as resampling technique to evaluate which\n",
|
||
"model fits the data best.\n",
|
||
"\n",
|
||
"At the end, you should present a critical evaluation of your results\n",
|
||
"and discuss the applicability of these regression methods to the type\n",
|
||
"of data presented here (either the terrain data we propose or other data sets)."
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"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.9.10"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
} |