From c60e966adac999ce71a96218f4ae7c65c6347bbf Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Fri, 16 Sep 2022 10:57:04 +0200 Subject: [PATCH] Update week37.ipynb --- doc/pub/week37/ipynb/week37.ipynb | 754 ++++++++++++------------------ 1 file changed, 311 insertions(+), 443 deletions(-) diff --git a/doc/pub/week37/ipynb/week37.ipynb b/doc/pub/week37/ipynb/week37.ipynb index 29c0793ab..1368c0d0a 100644 --- a/doc/pub/week37/ipynb/week37.ipynb +++ b/doc/pub/week37/ipynb/week37.ipynb @@ -3,9 +3,7 @@ { "cell_type": "markdown", "id": "83e91ce3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", @@ -15,9 +13,7 @@ { "cell_type": "markdown", "id": "88f778c9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "# Week 37: Summary of Ridge and Lasso Regression and Resampling Methods\n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", @@ -30,9 +26,7 @@ { "cell_type": "markdown", "id": "8cad2f0c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Plans for week 37\n", "\n", @@ -55,9 +49,7 @@ { "cell_type": "markdown", "id": "197e7446", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Thursday September 15, Summary of Ridge and Lasso Regression and start Resampling methods" ] @@ -65,9 +57,7 @@ { "cell_type": "markdown", "id": "04951cec", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Deriving OLS from a probability distribution\n", "\n", @@ -88,9 +78,7 @@ { "cell_type": "markdown", "id": "ce4380d8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "y_i\\sim \\mathcal{N}(\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta}, \\sigma^2)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", @@ -100,9 +88,7 @@ { "cell_type": "markdown", "id": "206592ba", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Independent and Identically Distrubuted (iid)\n", "\n", @@ -113,9 +99,7 @@ { "cell_type": "markdown", "id": "4a0d88d0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(y_i, \\boldsymbol{X}\\vert\\boldsymbol{\\beta})=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]},\n", @@ -125,9 +109,7 @@ { "cell_type": "markdown", "id": "e6c7ba75", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which reads as finding the likelihood of an event $y_i$ with the input variables $\\boldsymbol{X}$ given the parameters (to be determined) $\\boldsymbol{\\beta}$.\n", "\n", @@ -137,9 +119,7 @@ { "cell_type": "markdown", "id": "665e0170", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{y},\\boldsymbol{X}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}=\\prod_{i=0}^{n-1}p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta}).\n", @@ -149,9 +129,7 @@ { "cell_type": "markdown", "id": "73636714", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We will write this in a more compact form reserving $\\boldsymbol{D}$ for the domain of events, including the ouputs (targets) and the inputs. That is\n", "in case we have a simple one-dimensional input and output case" @@ -160,9 +138,7 @@ { "cell_type": "markdown", "id": "ad90bb50", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\\dots, (x_{n-1},y_{n-1})].\n", @@ -172,9 +148,7 @@ { "cell_type": "markdown", "id": "24493b42", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In the more general case the various inputs should be replaced by the possible features represented by the input data set $\\boldsymbol{X}$. \n", "We can now rewrite the above probability as" @@ -183,9 +157,7 @@ { "cell_type": "markdown", "id": "fd50e415", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", @@ -195,9 +167,7 @@ { "cell_type": "markdown", "id": "3d8e865e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "It is a conditional probability (see below) and reads as the likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters $\\boldsymbol{\\beta}$." ] @@ -205,9 +175,7 @@ { "cell_type": "markdown", "id": "17f93455", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Maximum Likelihood Estimation (MLE)\n", "\n", @@ -236,9 +204,7 @@ { "cell_type": "markdown", "id": "9d6b2b2a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## A new Cost Function\n", "\n", @@ -248,9 +214,7 @@ { "cell_type": "markdown", "id": "03ca6196", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=-\\log{\\prod_{i=0}^{n-1}p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta})}=-\\sum_{i=0}^{n-1}\\log{p(y_i,\\boldsymbol{X}\\vert\\boldsymbol{\\beta})},\n", @@ -260,9 +224,7 @@ { "cell_type": "markdown", "id": "a9f157c0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which becomes" ] @@ -270,9 +232,7 @@ { "cell_type": "markdown", "id": "7a0b2baa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{n}{2}\\log{2\\pi\\sigma^2}+\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}.\n", @@ -282,9 +242,7 @@ { "cell_type": "markdown", "id": "0500cb7f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Taking the derivative of the *new* cost function with respect to the parameters $\\beta$ we recognize our familiar OLS equation, namely" ] @@ -292,9 +250,7 @@ { "cell_type": "markdown", "id": "98951cc5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right) =0,\n", @@ -304,9 +260,7 @@ { "cell_type": "markdown", "id": "a168a53a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which leads to the well-known OLS equation for the optimal paramters $\\beta$" ] @@ -314,9 +268,7 @@ { "cell_type": "markdown", "id": "40c3e355", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\hat{\\boldsymbol{\\beta}}^{\\mathrm{OLS}}=\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}!\n", @@ -326,9 +278,7 @@ { "cell_type": "markdown", "id": "690e5ebd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Bayes' Theorem\n", "\n", @@ -338,9 +288,7 @@ { "cell_type": "markdown", "id": "d5e4d063", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(X\\vert Y)= \\frac{p(X,Y)}{p(Y)},\n", @@ -350,9 +298,7 @@ { "cell_type": "markdown", "id": "f3c99110", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which we can rewrite as" ] @@ -360,9 +306,7 @@ { "cell_type": "markdown", "id": "8b94286b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(X\\vert Y)= \\frac{p(X,Y)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)}=\\frac{p(Y\\vert X)p(X)}{\\sum_{i=0}^{n-1}p(Y\\vert X=x_i)p(x_i)},\n", @@ -372,9 +316,7 @@ { "cell_type": "markdown", "id": "274f358c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which is Bayes' theorem. It allows us to evaluate the uncertainty in in $X$ after we have observed $Y$. We can easily interchange $X$ with $Y$." ] @@ -382,9 +324,7 @@ { "cell_type": "markdown", "id": "75c6245e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Interpretations of Bayes' Theorem\n", "\n", @@ -399,9 +339,7 @@ { "cell_type": "markdown", "id": "c813eb77", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Test Function for what happens with OLS, Ridge and Lasso\n", "\n", @@ -418,10 +356,7 @@ "cell_type": "code", "execution_count": 1, "id": "6bef25fe", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -494,9 +429,7 @@ { "cell_type": "markdown", "id": "0ff10c31", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "How can we understand this?" ] @@ -504,9 +437,7 @@ { "cell_type": "markdown", "id": "c072a6dd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Rerunning the above code\n", "\n", @@ -534,10 +465,7 @@ "cell_type": "code", "execution_count": 2, "id": "71231be2", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -583,9 +511,7 @@ { "cell_type": "markdown", "id": "b9475a90", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Invoking Bayes' theorem\n", "\n", @@ -597,9 +523,7 @@ { "cell_type": "markdown", "id": "1b3063f0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{D}=[(x_0,y_0), (x_1,y_1),\\dots, (x_{n-1},y_{n-1})],\n", @@ -609,9 +533,7 @@ { "cell_type": "markdown", "id": "e48ff5b1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "is given by" ] @@ -619,9 +541,7 @@ { "cell_type": "markdown", "id": "d731fabe", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}.\n", @@ -631,9 +551,7 @@ { "cell_type": "markdown", "id": "4cfd7f0e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In Bayes' theorem this function plays the role of the so-called likelihood. We could now ask the question what is the posterior probability of a parameter set $\\boldsymbol{\\beta}$ given a domain of events $\\boldsymbol{D}$? That is, how can we define the posterior probability" ] @@ -641,9 +559,7 @@ { "cell_type": "markdown", "id": "8f7e06da", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D}).\n", @@ -653,9 +569,7 @@ { "cell_type": "markdown", "id": "951c18fa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Bayes' theorem comes to our rescue here since (omitting the normalization constant)" ] @@ -663,9 +577,7 @@ { "cell_type": "markdown", "id": "f830a42e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D})\\propto p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})p(\\boldsymbol{\\beta}).\n", @@ -675,9 +587,7 @@ { "cell_type": "markdown", "id": "dc3bb676", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We have a model for $p(\\boldsymbol{D}\\vert\\boldsymbol{\\beta})$ but need one for the **prior** $p(\\boldsymbol{\\beta}$!" ] @@ -685,9 +595,7 @@ { "cell_type": "markdown", "id": "36b4dc39", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Ridge and Bayes\n", "\n", @@ -701,9 +609,7 @@ { "cell_type": "markdown", "id": "e58db2db", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{\\beta})=\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\beta_j^2}{2\\tau^2}\\right)}.\n", @@ -713,9 +619,7 @@ { "cell_type": "markdown", "id": "f9d2d731", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Our posterior probability becomes then (omitting the normalization factor which is just a constant)" ] @@ -723,9 +627,7 @@ { "cell_type": "markdown", "id": "4285c782", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{\\beta\\vert\\boldsymbol{D})}=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\beta_j^2}{2\\tau^2}\\right)}.\n", @@ -735,9 +637,7 @@ { "cell_type": "markdown", "id": "860c78f8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We can now optimize this quantity with respect to $\\boldsymbol{\\beta}$. As we\n", "did for OLS, this is most conveniently done by taking the negative\n", @@ -748,9 +648,7 @@ { "cell_type": "markdown", "id": "5f736b0d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\frac{1}{2\\tau^2}\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", @@ -760,9 +658,7 @@ { "cell_type": "markdown", "id": "a8336ec5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and replacing $1/2\\tau^2$ with $\\lambda$ we have" ] @@ -770,9 +666,7 @@ { "cell_type": "markdown", "id": "d29a5d9d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\lambda\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_2^2,\n", @@ -782,9 +676,7 @@ { "cell_type": "markdown", "id": "b33925a8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which is our Ridge cost function! Nice, isn't it?" ] @@ -792,9 +684,7 @@ { "cell_type": "markdown", "id": "7af8aa06", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Lasso and Bayes\n", "\n", @@ -804,9 +694,7 @@ { "cell_type": "markdown", "id": "3b620f9e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{\\beta})=\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\vert\\beta_j\\vert}{\\tau}\\right)}.\n", @@ -816,9 +704,7 @@ { "cell_type": "markdown", "id": "8dda9b19", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Our posterior probability becomes then (omitting the normalization factor which is just a constant)" ] @@ -826,9 +712,7 @@ { "cell_type": "markdown", "id": "9094fb73", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(\\boldsymbol{\\beta}\\vert\\boldsymbol{D})=\\prod_{i=0}^{n-1}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp{\\left[-\\frac{(y_i-\\boldsymbol{X}_{i,*}\\boldsymbol{\\beta})^2}{2\\sigma^2}\\right]}\\prod_{j=0}^{p-1}\\exp{\\left(-\\frac{\\vert\\beta_j\\vert}{\\tau}\\right)}.\n", @@ -838,9 +722,7 @@ { "cell_type": "markdown", "id": "3566a77d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Taking the negative\n", "logarithm of the posterior probability and leaving out the\n", @@ -850,9 +732,7 @@ { "cell_type": "markdown", "id": "afd5b520", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta}=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\frac{1}{\\tau}\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_1,\n", @@ -862,9 +742,7 @@ { "cell_type": "markdown", "id": "fedb062e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and replacing $1/\\tau$ with $\\lambda$ we have" ] @@ -872,9 +750,7 @@ { "cell_type": "markdown", "id": "1c402711", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta}=\\frac{\\vert\\vert (\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta})\\vert\\vert_2^2}{2\\sigma^2}+\\lambda\\vert\\vert\\boldsymbol{\\beta}\\vert\\vert_1,\n", @@ -884,9 +760,7 @@ { "cell_type": "markdown", "id": "ca3ffbe8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which is our Lasso cost function!" ] @@ -894,9 +768,7 @@ { "cell_type": "markdown", "id": "ef5649aa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Why resampling methods\n", "\n", @@ -913,9 +785,7 @@ { "cell_type": "markdown", "id": "733c5a10", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods\n", "Resampling methods are an indispensable tool in modern\n", @@ -941,9 +811,7 @@ { "cell_type": "markdown", "id": "8ab3bfdd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling approaches can be computationally expensive\n", "\n", @@ -967,9 +835,7 @@ { "cell_type": "markdown", "id": "a9ec244e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Why resampling methods ?\n", "**Statistical analysis.**\n", @@ -984,9 +850,7 @@ { "cell_type": "markdown", "id": "c48eb948", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Statistical analysis\n", "\n", @@ -1004,9 +868,7 @@ { "cell_type": "markdown", "id": "00971958", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods\n", "\n", @@ -1033,9 +895,7 @@ { "cell_type": "markdown", "id": "65d9f81b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: Jackknife and Bootstrap\n", "\n", @@ -1058,9 +918,7 @@ { "cell_type": "markdown", "id": "cadd98e1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: Jackknife\n", "\n", @@ -1072,9 +930,7 @@ { "cell_type": "markdown", "id": "e652a034", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{x}_i = (x_1,x_2,\\cdots,x_{i-1},x_{i+1},\\cdots,x_n),\n", @@ -1084,9 +940,7 @@ { "cell_type": "markdown", "id": "286616bf", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which equals the vector $\\boldsymbol{x}$ with the exception that observation\n", "number $i$ is left out. Using this notation, define\n", @@ -1097,9 +951,7 @@ { "cell_type": "markdown", "id": "62d35d9a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Jackknife code example" ] @@ -1108,10 +960,7 @@ "cell_type": "code", "execution_count": 3, "id": "b452c740", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from numpy import *\n", @@ -1147,9 +996,7 @@ { "cell_type": "markdown", "id": "4423761d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: Bootstrap\n", "Bootstrapping is a [non-parametric approach](https://en.wikipedia.org/wiki/Nonparametric_statistics) to statistical inference\n", @@ -1172,9 +1019,7 @@ { "cell_type": "markdown", "id": "9e042d22", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The Central Limit Theorem\n", "\n", @@ -1192,9 +1037,7 @@ { "cell_type": "markdown", "id": "17dabd08", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z=\\frac{x_1+x_2+\\dots+x_m}{m},\n", @@ -1204,9 +1047,7 @@ { "cell_type": "markdown", "id": "29decc08", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "the question we pose is which is the PDF of the new variable $z$." ] @@ -1214,9 +1055,7 @@ { "cell_type": "markdown", "id": "74dded9c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Finding the Limit\n", "\n", @@ -1229,9 +1068,7 @@ { "cell_type": "markdown", "id": "ae938950", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\tilde{p}(z)=\\int dx_1p(x_1)\\int dx_2p(x_2)\\dots\\int dx_mp(x_m)\n", @@ -1242,9 +1079,7 @@ { "cell_type": "markdown", "id": "fe91bf5a", - "metadata": { - "editable": true - }, + "metadata": {}, "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", @@ -1255,9 +1090,7 @@ { "cell_type": "markdown", "id": "3e0ba223", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Rewriting the $\\delta$-function\n", "\n", @@ -1267,9 +1100,7 @@ { "cell_type": "markdown", "id": "5f44dec4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta(z-\\frac{x_1+x_2+\\dots+x_m}{m})=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n", @@ -1280,9 +1111,7 @@ { "cell_type": "markdown", "id": "04f24465", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and inserting $e^{i\\mu q-i\\mu q}$ where $\\mu$ is the mean value\n", "we arrive at" @@ -1291,9 +1120,7 @@ { "cell_type": "markdown", "id": "c4d46b5b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\tilde{p}(z)=\\frac{1}{2\\pi}\\int_{-\\infty}^{\\infty}\n", @@ -1305,9 +1132,7 @@ { "cell_type": "markdown", "id": "75f7562f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with the integral over $x$ resulting in" ] @@ -1315,9 +1140,7 @@ { "cell_type": "markdown", "id": "1b4315d0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}=\n", @@ -1329,9 +1152,7 @@ { "cell_type": "markdown", "id": "904ccefa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Identifying Terms\n", "\n", @@ -1342,9 +1163,7 @@ { "cell_type": "markdown", "id": "947e35c0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\int_{-\\infty}^{\\infty}dxp(x)e^{\\left(iq(\\mu-x)/m\\right)}=\n", @@ -1355,9 +1174,7 @@ { "cell_type": "markdown", "id": "e8c626e4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "resulting in" ] @@ -1365,9 +1182,7 @@ { "cell_type": "markdown", "id": "c51cb4dd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\left[\\int_{-\\infty}^{\\infty}dxp(x)\\exp{\\left(iq(\\mu-x)/m\\right)}\\right]^m\\approx\n", @@ -1378,9 +1193,7 @@ { "cell_type": "markdown", "id": "d5b1a803", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and in the limit $m\\rightarrow \\infty$ we obtain" ] @@ -1388,9 +1201,7 @@ { "cell_type": "markdown", "id": "1a142b5a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\tilde{p}(z)=\\frac{1}{\\sqrt{2\\pi}(\\sigma/\\sqrt{m})}\n", @@ -1401,9 +1212,7 @@ { "cell_type": "markdown", "id": "0dc30002", - "metadata": { - "editable": true - }, + "metadata": {}, "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", @@ -1413,9 +1222,7 @@ { "cell_type": "markdown", "id": "26f23bd8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Wrapping it up\n", "\n", @@ -1432,9 +1239,7 @@ { "cell_type": "markdown", "id": "99e316c5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma_m=\n", @@ -1445,9 +1250,7 @@ { "cell_type": "markdown", "id": "35830d99", - "metadata": { - "editable": true - }, + "metadata": {}, "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", @@ -1457,9 +1260,7 @@ { "cell_type": "markdown", "id": "989bfe6a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma_m\\approx \n", @@ -1470,9 +1271,7 @@ { "cell_type": "markdown", "id": "9cb57daf", - "metadata": { - "editable": true - }, + "metadata": {}, "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", @@ -1490,9 +1289,7 @@ { "cell_type": "markdown", "id": "311a55d9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Confidence Intervals\n", "\n", @@ -1513,9 +1310,7 @@ { "cell_type": "markdown", "id": "209dfe12", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Standard Approach based on the Normal Distribution\n", "\n", @@ -1528,9 +1323,7 @@ { "cell_type": "markdown", "id": "9ddf4ef4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\left(\\mu_{\\beta}\\pm \\frac{z\\sigma_{\\beta}}{\\sqrt{n}}\\right),\n", @@ -1540,9 +1333,7 @@ { "cell_type": "markdown", "id": "4b2b7bfc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $z$ defines the level of certainty (or confidence). For a normal\n", "distribution typical parameters are $z=2.576$ which corresponds to a\n", @@ -1560,9 +1351,7 @@ { "cell_type": "markdown", "id": "8999dff6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: Bootstrap background\n", "\n", @@ -1580,9 +1369,7 @@ { "cell_type": "markdown", "id": "982d5fbc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: More Bootstrap background\n", "\n", @@ -1604,9 +1391,7 @@ { "cell_type": "markdown", "id": "2ae38e48", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: Bootstrap approach\n", "\n", @@ -1625,9 +1410,7 @@ { "cell_type": "markdown", "id": "bd20d60a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Resampling methods: Bootstrap steps\n", "\n", @@ -1655,9 +1438,7 @@ { "cell_type": "markdown", "id": "0c72fdb0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Code example for the Bootstrap method\n", "\n", @@ -1679,10 +1460,7 @@ "cell_type": "code", "execution_count": 4, "id": "49104a67", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1716,9 +1494,7 @@ { "cell_type": "markdown", "id": "27642741", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We see that our new variance and from that the standard deviation, agrees with the central limit theorem." ] @@ -1726,9 +1502,7 @@ { "cell_type": "markdown", "id": "e91dfb35", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Plotting the Histogram" ] @@ -1737,10 +1511,7 @@ "cell_type": "code", "execution_count": 5, "id": "3f088b19", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# the histogram of the bootstrapped data (normalized data if density = True)\n", @@ -1757,9 +1528,7 @@ { "cell_type": "markdown", "id": "1d36aae1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The bias-variance tradeoff\n", "\n", @@ -1775,9 +1544,7 @@ { "cell_type": "markdown", "id": "b1ed3d14", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}\n", @@ -1787,9 +1554,7 @@ { "cell_type": "markdown", "id": "d05df5cd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\epsilon$ is normally distributed with mean zero and standard deviation $\\sigma^2$.\n", "\n", @@ -1804,9 +1569,7 @@ { "cell_type": "markdown", "id": "757ce9bd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", @@ -1816,9 +1579,7 @@ { "cell_type": "markdown", "id": "0e176bde", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We can rewrite this as" ] @@ -1826,9 +1587,7 @@ { "cell_type": "markdown", "id": "6227b309", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", @@ -1838,9 +1597,7 @@ { "cell_type": "markdown", "id": "ad1dab0e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The three terms represent the square of the bias of the learning\n", "method, which can be thought of as the error caused by the simplifying\n", @@ -1855,9 +1612,7 @@ { "cell_type": "markdown", "id": "37753004", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}})^2\\right],\n", @@ -1867,9 +1622,7 @@ { "cell_type": "markdown", "id": "59e6e439", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and adding and subtracting $\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]$ we get" ] @@ -1877,9 +1630,7 @@ { "cell_type": "markdown", "id": "5bd100b3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{f}+\\boldsymbol{\\epsilon}-\\boldsymbol{\\tilde{y}}+\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right]-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right],\n", @@ -1889,9 +1640,7 @@ { "cell_type": "markdown", "id": "c3a847fc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which, using the abovementioned expectation values can be rewritten as" ] @@ -1899,9 +1648,7 @@ { "cell_type": "markdown", "id": "a52ccb28", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\mathbb{E}\\left[(\\boldsymbol{y}-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2\\right]+\\mathrm{Var}\\left[\\boldsymbol{\\tilde{y}}\\right]+\\sigma^2,\n", @@ -1911,9 +1658,7 @@ { "cell_type": "markdown", "id": "9d662c2b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "that is the rewriting in terms of the so-called bias, the variance of the model $\\boldsymbol{\\tilde{y}}$ and the variance of $\\boldsymbol{\\epsilon}$." ] @@ -1921,9 +1666,7 @@ { "cell_type": "markdown", "id": "fa90fc6f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## A way to Read the Bias-Variance Tradeoff\n", "\n", @@ -1937,9 +1680,7 @@ { "cell_type": "markdown", "id": "7338e614", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Example code for Bias-Variance tradeoff" ] @@ -1948,10 +1689,7 @@ "cell_type": "code", "execution_count": 6, "id": "af3464ee", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -2013,9 +1751,7 @@ { "cell_type": "markdown", "id": "aa9520b0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Understanding what happens" ] @@ -2024,10 +1760,7 @@ "cell_type": "code", "execution_count": 7, "id": "73f2eca3", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -2081,9 +1814,7 @@ { "cell_type": "markdown", "id": "e8b3e361", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Summing up\n", "\n", @@ -2119,9 +1850,7 @@ { "cell_type": "markdown", "id": "122aad6f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Another Example from Scikit-Learn's Repository" ] @@ -2130,10 +1859,7 @@ "cell_type": "code", "execution_count": 8, "id": "f8996c67", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "\"\"\"\n", @@ -2212,9 +1938,7 @@ { "cell_type": "markdown", "id": "b877b018", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Various steps in cross-validation\n", "\n", @@ -2237,9 +1961,7 @@ { "cell_type": "markdown", "id": "4ba845d0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Cross-validation in brief\n", "\n", @@ -2265,9 +1987,7 @@ { "cell_type": "markdown", "id": "dbfb73ea", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Code Example for Cross-validation and $k$-fold Cross-validation\n", "\n", @@ -2278,10 +1998,7 @@ "cell_type": "code", "execution_count": 9, "id": "67a992a9", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -2378,22 +2095,133 @@ { "cell_type": "markdown", "id": "388aeee5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## More examples on bootstrap and cross-validation and errors" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "e39bfca9", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degree of polynomial: 1\n", + "Mean squared error on training data: 447189.75264629\n", + "Mean squared error on test data: 450754.83184480\n", + "Degree of polynomial: 2\n", + "Mean squared error on training data: 115417.39949496\n", + "Mean squared error on test data: 125990.15468321\n", + "Degree of polynomial: 3\n", + "Mean squared error on training data: 8983.07001834\n", + "Mean squared error on test data: 11013.95691906\n", + "Degree of polynomial: 4\n", + "Mean squared error on training data: 306.33788852\n", + "Mean squared error on test data: 408.96161228\n", + "Degree of polynomial: 5\n", + "Mean squared error on training data: 3.86012617\n", + "Mean squared error on test data: 5.74483107\n", + "Degree of polynomial: 6\n", + "Mean squared error on training data: 3.58298460\n", + "Mean squared error on test data: 11.32194102\n", + "Degree of polynomial: 7\n", + "Mean squared error on training data: 0.47739083\n", + "Mean squared error on test data: 2.16915860\n", + "Degree of polynomial: 8\n", + "Mean squared error on training data: 0.04938006\n", + "Mean squared error on test data: 0.15826209\n", + "Degree of polynomial: 9\n", + "Mean squared error on training data: 0.02588343\n", + "Mean squared error on test data: 0.06542264\n", + "Degree of polynomial: 10\n", + "Mean squared error on training data: 0.02458444\n", + "Mean squared error on test data: 0.27700702\n", + "Degree of polynomial: 11\n", + "Mean squared error on training data: 0.01588504\n", + "Mean squared error on test data: 12.49660817\n", + "Degree of polynomial: 12\n", + "Mean squared error on training data: 0.00809754\n", + "Mean squared error on test data: 1.62136673\n", + "Degree of polynomial: 13\n", + "Mean squared error on training data: 0.00778874\n", + "Mean squared error on test data: 1.06706559\n", + "Degree of polynomial: 14\n", + "Mean squared error on training data: 0.00469418\n", + "Mean squared error on test data: 0.63565789\n", + "Degree of polynomial: 15\n", + "Mean squared error on training data: 0.00416419\n", + "Mean squared error on test data: 0.59749210\n", + "Degree of polynomial: 16\n", + "Mean squared error on training data: 0.00329307\n", + "Mean squared error on test data: 50.03133059\n", + "Degree of polynomial: 17\n", + "Mean squared error on training data: 0.00243097\n", + "Mean squared error on test data: 176.61809428\n", + "Degree of polynomial: 18\n", + "Mean squared error on training data: 0.00223246\n", + "Mean squared error on test data: 3451.18074998\n", + "Degree of polynomial: 19\n", + "Mean squared error on training data: 0.00154876\n", + "Mean squared error on test data: 226.03684348\n", + "Degree of polynomial: 20\n", + "Mean squared error on training data: 0.00142708\n", + "Mean squared error on test data: 58780.25841773\n", + "Degree of polynomial: 21\n", + "Mean squared error on training data: 0.00118511\n", + "Mean squared error on test data: 136.16211209\n", + "Degree of polynomial: 22\n", + "Mean squared error on training data: 0.00092317\n", + "Mean squared error on test data: 19280.37206612\n", + "Degree of polynomial: 23\n", + "Mean squared error on training data: 0.00087006\n", + "Mean squared error on test data: 886.71854932\n", + "Degree of polynomial: 24\n", + "Mean squared error on training data: 0.00081388\n", + "Mean squared error on test data: 125.20547193\n", + "Degree of polynomial: 25\n", + "Mean squared error on training data: 0.00080626\n", + "Mean squared error on test data: 540.86563574\n", + "Degree of polynomial: 26\n", + "Mean squared error on training data: 0.00078498\n", + "Mean squared error on test data: 2405.22624019\n", + "Degree of polynomial: 27\n", + "Mean squared error on training data: 0.00071539\n", + "Mean squared error on test data: 6348.01049243\n", + "Degree of polynomial: 28\n", + "Mean squared error on training data: 0.00062673\n", + "Mean squared error on test data: 937.03452940\n", + "Degree of polynomial: 29\n", + "Mean squared error on training data: 0.00061896\n", + "Mean squared error on test data: 2486.48777608\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_34236/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_34236/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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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Common imports\n", "import os\n", @@ -2478,9 +2306,7 @@ { "cell_type": "markdown", "id": "10dd42f3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Note that we kept the intercept column in the fitting here. This means that we need to set the **intercept** in the call to the **Scikit-Learn** function as **False**. Alternatively, we could have set up the design matrix $X$ without the first column of ones." ] @@ -2488,9 +2314,7 @@ { "cell_type": "markdown", "id": "094bf65d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The same example but now with cross-validation\n", "\n", @@ -2499,13 +2323,31 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "id": "ea273fff", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_34236/3517936899.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": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Common imports\n", "import os\n", @@ -2556,7 +2398,7 @@ "X[:,0] = 1.0\n", "estimated_mse_sklearn = np.zeros(Maxpolydegree)\n", "polynomial = np.zeros(Maxpolydegree)\n", - "k =5\n", + "k =30\n", "kfold = KFold(n_splits = k)\n", "\n", "for polydegree in range(1, Maxpolydegree):\n", @@ -2575,9 +2417,35 @@ "plt.legend()\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "752e7e79", + "metadata": {}, + "outputs": [], + "source": [] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.14" + } + }, "nbformat": 4, "nbformat_minor": 5 }