From e73b166cec58cc1873cb14b3ffb50558c7af773d Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Tue, 7 Jun 2022 15:52:52 -0400 Subject: [PATCH] update --- .../ipynb/Results/FigureFiles/Masses2016.png | Bin 16565 -> 17747 bytes .../Results/FigureFiles/Masses2016Trees.png | Bin 21472 -> 22155 bytes doc/pub/week34/ipynb/week34.ipynb | 1692 +++++++---------- 3 files changed, 666 insertions(+), 1026 deletions(-) diff --git a/doc/pub/week34/ipynb/Results/FigureFiles/Masses2016.png b/doc/pub/week34/ipynb/Results/FigureFiles/Masses2016.png index b8976c975be470aba5146a39aa9335f0d7f94c32..bbaa79e2f97b66c844a5981266a5084b30e0c37a 100644 GIT binary patch literal 17747 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

i5*>s0 z-NtyMW8pj~)zts2^HA)bq z(`ll?hqtJR6Z6o)*H;DdA%~R=gVCPl^@MI#HGkZ=M%(@gTXqX3T1}9WQUFCDq?E-n zCDEJ?|AU<(o7EeVgv#*I>S}Hb_ZZc}j>scMCyc}=FGX*=F2cB}{CBvJ0J*bypy5)HFvyJ({=+poPvMti@Jwm6)A7N{WO z#&6(9N!=Y%-e+hr^W05T+UXP&6)jWVEm9uT2ll4&{`5S=@jr~RAR;5nEwUqx6F$3# zA+60=eV@9fU+BL7IS-7FzVrD7RyeWC2RW3t446WWl;swg%@UZx%^AXaH^-s@VYRj1 zcSp~gS|ai1&HjEYcxTj=m!yyJv2acFW-;B>b!Y7l17)Y1UZ2o0v$f53_1V;R^=_qu zvcbHVfx+|4+nx2CtxA&*X3^}*yh~bRquictbKh%f*1{X-%b3V8x=Oke0_@)1q>$4?=+_UwPtPtq{lo2aTu)-L zJjg#dg^iM)FH8`y#8{2lZ?_*ySP!wgyQAaA@%N;p8M#bDH2MZU$PbkZhUo;-GxWW- zc&kN0UxyMZ7&XyKtv%nunpmioY#Qy$-h2#SPerGRjNIBF8ruPVj;@#^=j@zjOtSSg z&oVjT$=HgDD6PVemUibKg_m;zI3t>mq;K68Vv`!J?TaI7QOvSY-;-g_71K;pOiL{C z(wf!<`Wc@(4$_XBE-HCw#dXS*OO+J|Ix&BU;ET0$`dcrX*68SLx~ud=S0yJ$X;N+W zVwo^=PQc%1aL0qf<-TDUW6vd|{e7t@714b^!_H$ycOSgkNW5C1EB7@cy4ZIX^xj_ogXNs9gTz@(&FQR?liIoXb1mqcY{+^=apIRhz`d`hH9>p+W0T4N z?P50J>jEB{AjOt(H+)?(w`nPJR}J)*;Z1H|k4oCI>qh|GoQ-XSrv)D+ z^X6pyIW72h|Ed$e`{!rwyije`S0<;uNxSJj1EOk%0A;2tE%%9xb8}?8+rHQwV}&Tj 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 NSt&)yVsXQu{|k@BAddh5 diff --git a/doc/pub/week34/ipynb/Results/FigureFiles/Masses2016Trees.png b/doc/pub/week34/ipynb/Results/FigureFiles/Masses2016Trees.png index 1c5a1b4b1729e492542208b27151496b51bd7fe3..d1b2cb97202d660092fbea57796b9f624fdfbaf7 100644 GIT binary patch literal 22155 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 AzyJUM literal 21472 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 diff --git a/doc/pub/week34/ipynb/week34.ipynb b/doc/pub/week34/ipynb/week34.ipynb index a4065e2da..c064ab80c 100644 --- a/doc/pub/week34/ipynb/week34.ipynb +++ b/doc/pub/week34/ipynb/week34.ipynb @@ -3,9 +3,7 @@ { "cell_type": "markdown", "id": "778fa583", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", @@ -15,9 +13,7 @@ { "cell_type": "markdown", "id": "a6b35c1f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "# Week 34: Introduction to the course, Logistics and Practicalities\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": "fc8efbd6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Overview of first week\n", "\n", @@ -50,9 +44,7 @@ { "cell_type": "markdown", "id": "4e83c342", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Reading Recommendations\n", "\n", @@ -71,9 +63,7 @@ { "cell_type": "markdown", "id": "fcee1694", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Thursday August 26\n", "\n", @@ -93,9 +83,7 @@ { "cell_type": "markdown", "id": "e9c0ae5d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Lectures and ComputerLab\n", "\n", @@ -115,9 +103,7 @@ { "cell_type": "markdown", "id": "e862726a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Announcement\n", "\n", @@ -127,9 +113,7 @@ { "cell_type": "markdown", "id": "b7e9a904", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Communication channels\n", "\n", @@ -143,9 +127,7 @@ { "cell_type": "markdown", "id": "cb950912", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Course Format\n", "\n", @@ -167,9 +149,7 @@ { "cell_type": "markdown", "id": "4f4f5449", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Teachers\n", "\n", @@ -202,9 +182,7 @@ { "cell_type": "markdown", "id": "0de9f263", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Deadlines for projects (tentative)\n", "\n", @@ -220,9 +198,7 @@ { "cell_type": "markdown", "id": "39cb9d48", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Recommended textbooks\n", "\n", @@ -244,9 +220,7 @@ { "cell_type": "markdown", "id": "45351170", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Prerequisites\n", "\n", @@ -264,9 +238,7 @@ { "cell_type": "markdown", "id": "071161a1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Learning outcomes\n", "\n", @@ -308,9 +280,7 @@ { "cell_type": "markdown", "id": "638641fd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Topics covered in this course: Statistical analysis and optimization of data\n", "\n", @@ -343,9 +313,7 @@ { "cell_type": "markdown", "id": "4d686486", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Topics covered in this course: Machine Learning\n", "\n", @@ -370,9 +338,7 @@ { "cell_type": "markdown", "id": "448b469d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Extremely useful tools, strongly recommended\n", "\n", @@ -386,9 +352,7 @@ { "cell_type": "markdown", "id": "6fa4bed1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Other courses on Data science and Machine Learning at UiO\n", "\n", @@ -420,9 +384,7 @@ { "cell_type": "markdown", "id": "f2061698", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Introduction\n", "\n", @@ -463,9 +425,7 @@ { "cell_type": "markdown", "id": "80ee1e31", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## What is Machine Learning?\n", "\n", @@ -536,9 +496,7 @@ { "cell_type": "markdown", "id": "aaddb93e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Types of Machine Learning\n", "\n", @@ -565,9 +523,7 @@ { "cell_type": "markdown", "id": "2260de85", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Essential elements of ML\n", "\n", @@ -583,9 +539,7 @@ { "cell_type": "markdown", "id": "f559e833", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## An optimization/minimization problem\n", "\n", @@ -595,9 +549,7 @@ { "cell_type": "markdown", "id": "97d9dee8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## A Frequentist approach to data analysis\n", "\n", @@ -630,9 +582,7 @@ { "cell_type": "markdown", "id": "d3c059e8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## What is a good model?\n", "\n", @@ -660,9 +610,7 @@ { "cell_type": "markdown", "id": "0bdeab16", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## What is a good model? Can we define it?\n", "\n", @@ -691,9 +639,7 @@ { "cell_type": "markdown", "id": "1c060598", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Software and needed installations\n", "\n", @@ -730,9 +676,7 @@ { "cell_type": "markdown", "id": "6cc9ab21", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Python installers\n", "\n", @@ -763,9 +707,7 @@ { "cell_type": "markdown", "id": "b4220192", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Useful Python libraries\n", "Here we list several useful Python libraries we strongly recommend (if you use anaconda many of these are already there)\n", @@ -796,9 +738,7 @@ { "cell_type": "markdown", "id": "601d504c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Installing R, C++, cython or Julia\n", "\n", @@ -820,9 +760,7 @@ { "cell_type": "markdown", "id": "a4beb747", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Installing R, C++, cython, Numba etc\n", "\n", @@ -847,9 +785,7 @@ { "cell_type": "markdown", "id": "87030410", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ " pycod jupyter nbconvert filename.ipynb --to latex \n" ] @@ -857,9 +793,7 @@ { "cell_type": "markdown", "id": "973375a2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "And to add more versatility, the Python package [SymPy](http://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) and is entirely written in Python. \n", "\n", @@ -871,9 +805,7 @@ { "cell_type": "markdown", "id": "bbd99efa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Numpy examples and Important Matrix and vector handling packages\n", "\n", @@ -892,9 +824,7 @@ { "cell_type": "markdown", "id": "3b716073", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Basic Matrix Features\n", "\n", @@ -904,9 +834,7 @@ { "cell_type": "markdown", "id": "02ae660b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathbf{A} =\n", @@ -927,9 +855,7 @@ { "cell_type": "markdown", "id": "7950a446", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The inverse of a matrix is defined by" ] @@ -937,9 +863,7 @@ { "cell_type": "markdown", "id": "1bd26546", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathbf{A}^{-1} \\cdot \\mathbf{A} = I\n", @@ -949,9 +873,7 @@ { "cell_type": "markdown", "id": "c9631af0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", "\n", @@ -970,9 +892,7 @@ { "cell_type": "markdown", "id": "a47420ee", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Some famous Matrices\n", "\n", @@ -998,9 +918,7 @@ { "cell_type": "markdown", "id": "8532f540", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### More Basic Matrix Features\n", "\n", @@ -1024,9 +942,7 @@ { "cell_type": "markdown", "id": "da3820d0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Numpy and arrays\n", "[Numpy](http://www.numpy.org/) provides an easy way to handle arrays in Python. The standard way to import this library is as" @@ -1036,10 +952,7 @@ "cell_type": "code", "execution_count": 1, "id": "ad5adceb", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np" @@ -1048,9 +961,7 @@ { "cell_type": "markdown", "id": "21009d4c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Here follows a simple example where we set up an array of ten elements, all determined by random numbers drawn according to the normal distribution," ] @@ -1059,10 +970,7 @@ "cell_type": "code", "execution_count": 2, "id": "e9bed71f", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "n = 10\n", @@ -1073,9 +981,7 @@ { "cell_type": "markdown", "id": "bab6442f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We defined a vector $x$ with $n=10$ elements with its values given by the Normal distribution $N(0,1)$.\n", "Another alternative is to declare a vector as follows" @@ -1085,10 +991,7 @@ "cell_type": "code", "execution_count": 3, "id": "7c3f07ec", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1099,9 +1002,7 @@ { "cell_type": "markdown", "id": "ac57ccb6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Here we have defined a vector with three elements, with $x_0=1$, $x_1=2$ and $x_2=3$. Note that both Python and C++\n", "start numbering array elements from $0$ and on. This means that a vector with $n$ elements has a sequence of entities $x_0, x_1, x_2, \\dots, x_{n-1}$. We could also let (recommended) Numpy to compute the logarithms of a specific array as" @@ -1111,10 +1012,7 @@ "cell_type": "code", "execution_count": 4, "id": "e7d9ec2c", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1125,9 +1023,7 @@ { "cell_type": "markdown", "id": "4b1d6bf3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In the last example we used Numpy's unary function $np.log$. This function is\n", "highly tuned to compute array elements since the code is vectorized\n", @@ -1142,10 +1038,7 @@ "cell_type": "code", "execution_count": 5, "id": "ba614722", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1159,9 +1052,7 @@ { "cell_type": "markdown", "id": "a99b1ae2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We note that our code is much longer already and we need to import the **log** function from the **math** module. \n", "The attentive reader will also notice that the output is $[1, 1, 2]$. Python interprets automagically our numbers as integers (like the **automatic** keyword in C++). To change this we could define our array elements to be double precision numbers as" @@ -1171,10 +1062,7 @@ "cell_type": "code", "execution_count": 6, "id": "d5a40757", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1185,9 +1073,7 @@ { "cell_type": "markdown", "id": "47283227", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "or simply write them as double precision numbers (Python uses 64 bits as default for floating point type variables), that is" ] @@ -1196,10 +1082,7 @@ "cell_type": "code", "execution_count": 7, "id": "24b0e226", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1210,9 +1093,7 @@ { "cell_type": "markdown", "id": "3d7ad6b1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "To check the number of bytes (remember that one byte contains eight bits for double precision variables), you can use simple use the **itemsize** functionality (the array $x$ is actually an object which inherits the functionalities defined in Numpy) as" ] @@ -1221,10 +1102,7 @@ "cell_type": "code", "execution_count": 8, "id": "f9098aae", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1235,9 +1113,7 @@ { "cell_type": "markdown", "id": "e15e53bf", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Matrices in Python\n", "\n", @@ -1250,10 +1126,7 @@ "cell_type": "code", "execution_count": 9, "id": "00f6183b", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1264,9 +1137,7 @@ { "cell_type": "markdown", "id": "82ec4aa8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "If we use the **shape** function we would get $(3, 3)$ as output, that is verifying that our matrix is a $3\\times 3$ matrix. We can slice the matrix and print for example the first column (Python organized matrix elements in a row-major order, see below) as" ] @@ -1275,10 +1146,7 @@ "cell_type": "code", "execution_count": 10, "id": "e834fcb8", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1290,9 +1158,7 @@ { "cell_type": "markdown", "id": "e62abe8f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We can continue this was by printing out other columns or rows. The example here prints out the second column" ] @@ -1301,10 +1167,7 @@ "cell_type": "code", "execution_count": 11, "id": "a814bb4f", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1316,9 +1179,7 @@ { "cell_type": "markdown", "id": "34d83f49", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Numpy contains many other functionalities that allow us to slice, subdivide etc etc arrays. We strongly recommend that you look up the [Numpy website for more details](http://www.numpy.org/). Useful functions when defining a matrix are the **np.zeros** function which declares a matrix of a given dimension and sets all elements to zero" ] @@ -1327,10 +1188,7 @@ "cell_type": "code", "execution_count": 12, "id": "810c3551", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1343,9 +1201,7 @@ { "cell_type": "markdown", "id": "db1ce1ff", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "or initializing all elements to" ] @@ -1354,10 +1210,7 @@ "cell_type": "code", "execution_count": 13, "id": "9eab3bff", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1370,9 +1223,7 @@ { "cell_type": "markdown", "id": "195459bc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "or as unitarily distributed random numbers (see the material on random number generators in the statistics part)" ] @@ -1381,10 +1232,7 @@ "cell_type": "code", "execution_count": 14, "id": "49c4d968", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1397,9 +1245,7 @@ { "cell_type": "markdown", "id": "6909a2fe", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "As we will see throughout these lectures, there are several extremely useful functionalities in Numpy.\n", "As an example, consider the discussion of the covariance matrix. Suppose we have defined three vectors\n", @@ -1409,9 +1255,7 @@ { "cell_type": "markdown", "id": "e584a2c3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\Sigma} = \\begin{bmatrix} \\sigma_{xx} & \\sigma_{xy} & \\sigma_{xz} \\\\\n", @@ -1424,9 +1268,7 @@ { "cell_type": "markdown", "id": "39795c8c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where for example" ] @@ -1434,9 +1276,7 @@ { "cell_type": "markdown", "id": "13836c15", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma_{xy} =\\frac{1}{n} \\sum_{i=0}^{n-1}(x_i- \\overline{x})(y_i- \\overline{y}).\n", @@ -1446,9 +1286,7 @@ { "cell_type": "markdown", "id": "abff2d2f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The Numpy function **np.cov** calculates the covariance elements using the factor $1/(n-1)$ instead of $1/n$ since it assumes we do not have the exact mean values. \n", "The following simple function uses the **np.vstack** function which takes each vector of dimension $1\\times n$ and produces a $3\\times n$ matrix $\\boldsymbol{W}$" @@ -1457,9 +1295,7 @@ { "cell_type": "markdown", "id": "f7f6fe7c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{W} = \\begin{bmatrix} x_0 & x_1 & x_2 & \\dots & x_{n-2} & x_{n-1} \\\\\n", @@ -1472,9 +1308,7 @@ { "cell_type": "markdown", "id": "adcf974e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which in turn is converted into into the $3\\times 3$ covariance matrix\n", "$\\boldsymbol{\\Sigma}$ via the Numpy function **np.cov()**. We note that we can also calculate\n", @@ -1487,10 +1321,7 @@ "cell_type": "code", "execution_count": 15, "id": "a5cf2feb", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -1514,10 +1345,7 @@ "cell_type": "code", "execution_count": 16, "id": "f10c8b39", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -1538,9 +1366,7 @@ { "cell_type": "markdown", "id": "646fca17", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Meet the Pandas\n", "\n", @@ -1564,10 +1390,7 @@ "cell_type": "code", "execution_count": 17, "id": "95d49d4c", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -1584,9 +1407,7 @@ { "cell_type": "markdown", "id": "38790248", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In the above we have imported **pandas** with the shorthand **pd**, the latter has become the standard way we import **pandas**. We make then a list of various variables\n", "and reorganize the aboves lists into a **DataFrame** and then print out a neat table with specific column labels as *Name*, *place of birth* and *date of birth*.\n", @@ -1598,10 +1419,7 @@ "cell_type": "code", "execution_count": 18, "id": "e630cc31", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "data_pandas = pd.DataFrame(data,index=['Frodo','Bilbo','Aragorn','Sam'])\n", @@ -1611,9 +1429,7 @@ { "cell_type": "markdown", "id": "d0d27d68", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Thereafter we display the content of the row which begins with the index **Aragorn**" ] @@ -1622,10 +1438,7 @@ "cell_type": "code", "execution_count": 19, "id": "2591ed5d", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "display(data_pandas.loc['Aragorn'])" @@ -1634,9 +1447,7 @@ { "cell_type": "markdown", "id": "85bf5f70", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We can easily append data to this, for example" ] @@ -1645,10 +1456,7 @@ "cell_type": "code", "execution_count": 20, "id": "9bbe0db8", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "new_hobbit = {'First Name': [\"Peregrin\"],\n", @@ -1663,9 +1471,7 @@ { "cell_type": "markdown", "id": "d9ebb24b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Here are other examples where we use the **DataFrame** functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix \n", "of dimensionality $10\\times 5$ and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations." @@ -1675,10 +1481,7 @@ "cell_type": "code", "execution_count": 21, "id": "f5f4acfb", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1699,9 +1502,7 @@ { "cell_type": "markdown", "id": "0b4ef9f6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Thereafter we can select specific columns only and plot final results" ] @@ -1710,10 +1511,7 @@ "cell_type": "code", "execution_count": 22, "id": "f70279c1", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth']\n", @@ -1739,9 +1537,7 @@ { "cell_type": "markdown", "id": "963e3f64", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We can produce a $4\\times 4$ matrix" ] @@ -1750,10 +1546,7 @@ "cell_type": "code", "execution_count": 23, "id": "8f579fb1", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "b = np.arange(16).reshape((4,4))\n", @@ -1765,9 +1558,7 @@ { "cell_type": "markdown", "id": "970a7544", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and many other operations. \n", "\n", @@ -1782,9 +1573,7 @@ { "cell_type": "markdown", "id": "691ca1d1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Friday August 27\n", "\n", @@ -1796,9 +1585,7 @@ { "cell_type": "markdown", "id": "d378c442", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Simple linear regression model using **scikit-learn**\n", "\n", @@ -1827,9 +1614,7 @@ { "cell_type": "markdown", "id": "e5ab3567", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "y = 2x+N(0,1),\n", @@ -1839,9 +1624,7 @@ { "cell_type": "markdown", "id": "48638276", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $N(0,1)$ represents random numbers generated by the normal\n", "distribution. From **Scikit-Learn** we import then the\n", @@ -1867,10 +1650,7 @@ "cell_type": "code", "execution_count": 24, "id": "5d268e23", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -1897,9 +1677,7 @@ { "cell_type": "markdown", "id": "a0bc9fe7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "This example serves several aims. It allows us to demonstrate several\n", "aspects of data analysis and later machine learning algorithms. The\n", @@ -1914,9 +1692,7 @@ { "cell_type": "markdown", "id": "2fa1f5fd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "y = 10x+0.01 \\times N(0,1),\n", @@ -1926,9 +1702,7 @@ { "cell_type": "markdown", "id": "69c2a007", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $x$ is defined as before. Does the fit look better? Indeed, by\n", "reducing the role of the noise given by the normal distribution we see immediately that\n", @@ -1947,9 +1721,7 @@ { "cell_type": "markdown", "id": "c946d217", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\chi^2 = \\frac{1}{n}\n", @@ -1960,9 +1732,7 @@ { "cell_type": "markdown", "id": "88362352", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\sigma_i^2$ is the variance (to be defined later) of the entry\n", "$y_i$. We may not know the explicit value of $\\sigma_i^2$, it serves\n", @@ -1991,9 +1761,7 @@ { "cell_type": "markdown", "id": "cf70f181", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n", @@ -2003,9 +1771,7 @@ { "cell_type": "markdown", "id": "45b3e51a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The squared cost function results in an arithmetic mean-unbiased\n", "estimator, and the absolute-value cost function results in a\n", @@ -2021,10 +1787,7 @@ "cell_type": "code", "execution_count": 25, "id": "acbb097e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -2048,9 +1811,7 @@ { "cell_type": "markdown", "id": "906ec623", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Depending on the parameter in front of the normal distribution, we may\n", "have a small or larger relative error. Try to play around with\n", @@ -2070,10 +1831,7 @@ "cell_type": "code", "execution_count": 26, "id": "ae576654", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", @@ -2108,9 +1866,7 @@ { "cell_type": "markdown", "id": "4fa873c4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The function **coef** gives us the parameter $\\beta$ of our fit while **intercept** yields \n", "$\\alpha$. Depending on the constant in front of the normal distribution, we get values near or far from $\\alpha =2$ and $\\beta =5$. Try to play around with different parameters in front of the normal distribution. The function **meansquarederror** gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as" @@ -2119,9 +1875,7 @@ { "cell_type": "markdown", "id": "28e7c10c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -2132,9 +1886,7 @@ { "cell_type": "markdown", "id": "f7dc1729", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The smaller the value, the better the fit. Ideally we would like to\n", "have an MSE equal zero. The attentive reader has probably recognized\n", @@ -2153,9 +1905,7 @@ { "cell_type": "markdown", "id": "8a05b954", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{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", @@ -2165,9 +1915,7 @@ { "cell_type": "markdown", "id": "e580bea2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] @@ -2175,9 +1923,7 @@ { "cell_type": "markdown", "id": "0c51facd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -2187,9 +1933,7 @@ { "cell_type": "markdown", "id": "62a0f4f7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Another quantity taht we will meet again in our discussions of regression analysis is \n", " the mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the $l1$-norm loss. In our discussion above we presented the relative error.\n", @@ -2199,9 +1943,7 @@ { "cell_type": "markdown", "id": "f785e614", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\text{MAE}(\\boldsymbol{y}, \\boldsymbol{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n-1} \\left| y_i - \\tilde{y}_i \\right|.\n", @@ -2211,9 +1953,7 @@ { "cell_type": "markdown", "id": "bf583443", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We present the \n", "squared logarithmic (quadratic) error" @@ -2222,9 +1962,7 @@ { "cell_type": "markdown", "id": "724378dc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\text{MSLE}(\\boldsymbol{y}, \\boldsymbol{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n - 1} (\\log_e (1 + y_i) - \\log_e (1 + \\tilde{y}_i) )^2,\n", @@ -2234,9 +1972,7 @@ { "cell_type": "markdown", "id": "0f2058ae", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\log_e (x)$ stands for the natural logarithm of $x$. This error\n", "estimate is best to use when targets having exponential growth, such\n", @@ -2256,9 +1992,7 @@ { "cell_type": "markdown", "id": "e7caa601", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "H_{\\delta}(\\boldsymbol{a})=\\left\\{\\begin{array}{cc}\\frac{1}{2} \\boldsymbol{a}^{2}& \\text{for }|\\boldsymbol{a}|\\leq \\delta\\\\ \\delta (|\\boldsymbol{a}|-\\frac{1}{2}\\delta ),&\\text{otherwise}.\\end{array}\\right.\n", @@ -2268,9 +2002,7 @@ { "cell_type": "markdown", "id": "0fe54ee3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Here $\\boldsymbol{a}=\\boldsymbol{y} - \\boldsymbol{\\tilde{y}}$.\n", "\n", @@ -2284,10 +2016,7 @@ "cell_type": "code", "execution_count": 27, "id": "07b7f404", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -2325,9 +2054,7 @@ { "cell_type": "markdown", "id": "2a3e7169", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### To our real data: nuclear binding energies. Brief reminder on masses and binding energies\n", "\n", @@ -2342,9 +2069,7 @@ { "cell_type": "markdown", "id": "ffb61b21", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\Delta M(N, Z) = M(N, Z) - uA,\n", @@ -2354,9 +2079,7 @@ { "cell_type": "markdown", "id": "dae62975", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $u$ is the Atomic Mass Unit" ] @@ -2364,9 +2087,7 @@ { "cell_type": "markdown", "id": "47c55cae", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n", @@ -2376,9 +2097,7 @@ { "cell_type": "markdown", "id": "ba0c4ef5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The nucleon masses are" ] @@ -2386,9 +2105,7 @@ { "cell_type": "markdown", "id": "d44a78b4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "m_p = 1.00727646693(9)u,\n", @@ -2398,9 +2115,7 @@ { "cell_type": "markdown", "id": "e478b442", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -2408,9 +2123,7 @@ { "cell_type": "markdown", "id": "bc08de2b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n", @@ -2420,9 +2133,7 @@ { "cell_type": "markdown", "id": "e5e9dae9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In the [2016 mass evaluation of by W.J.Huang, G.Audi, M.Wang, F.G.Kondev, S.Naimi and X.Xu](http://nuclearmasses.org/resources_folder/Wang_2017_Chinese_Phys_C_41_030003.pdf)\n", "there are data on masses and decays of 3437 nuclei.\n", @@ -2436,9 +2147,7 @@ { "cell_type": "markdown", "id": "55a50874", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n", @@ -2448,9 +2157,7 @@ { "cell_type": "markdown", "id": "0722bdc3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $M_H$ is the mass of the hydrogen atom and $m_n$ is the mass of the neutron.\n", "In terms of the mass excess the binding energy is given by" @@ -2459,9 +2166,7 @@ { "cell_type": "markdown", "id": "1ad2c13d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n", @@ -2471,9 +2176,7 @@ { "cell_type": "markdown", "id": "b55ccbf6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\Delta_H c^2 = 7.2890$ MeV and $\\Delta_n c^2 = 8.0713$ MeV.\n", "\n", @@ -2485,9 +2188,7 @@ { "cell_type": "markdown", "id": "e9bc1ac6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "BE(N,Z) = a_1A-a_2A^{2/3}-a_3\\frac{Z^2}{A^{1/3}}-a_4\\frac{(N-Z)^2}{A},\n", @@ -2497,9 +2198,7 @@ { "cell_type": "markdown", "id": "47174561", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $A$ stands for the number of nucleons and the $a_i$s are parameters which are determined by a fit \n", "to the experimental data. \n", @@ -2522,9 +2221,7 @@ { "cell_type": "markdown", "id": "3a54d55d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Organizing our data\n", "\n", @@ -2537,12 +2234,9 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 1, "id": "6a858ae6", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# Common imports\n", @@ -2583,21 +2277,16 @@ { "cell_type": "markdown", "id": "37694bf4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Before we proceed, we define also a function for making our plots. You can obviously avoid this and simply set up various **matplotlib** commands every time you need them. You may however find it convenient to collect all such commands in one function and simply call this function." ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 2, "id": "0d909cb1", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from pylab import plt, mpl\n", @@ -2616,9 +2305,7 @@ { "cell_type": "markdown", "id": "476a0da3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Our next step is to read the data on experimental binding energies and\n", "reorganize them as functions of the mass number $A$, the number of\n", @@ -2633,10 +2320,7 @@ "cell_type": "code", "execution_count": 30, "id": "808a944d", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "\"\"\" \n", @@ -2654,9 +2338,7 @@ { "cell_type": "markdown", "id": "f13998e8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The data we are interested in are in columns 2, 3, 4 and 11, giving us\n", "the number of neutrons, protons, mass numbers and binding energies,\n", @@ -2666,12 +2348,9 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 3, "id": "87734ea5", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# Read the experimental data with Pandas\n", @@ -2697,9 +2376,7 @@ { "cell_type": "markdown", "id": "c5cd7bf2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We have now read in the data, grouped them according to the variables we are interested in. \n", "We see how easy it is to reorganize the data using **pandas**. If we\n", @@ -2715,13 +2392,32 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 4, "id": "135551a3", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " N Z A Element Ebinding\n", + "A \n", + "4 0 1 3 4 Li 1.153760\n", + "5 2 3 2 5 He 5.512132\n", + "6 7 3 3 6 Li 5.332331\n", + "7 12 4 3 7 Li 5.606439\n", + "8 17 4 4 8 Be 7.062435\n", + "... ... ... ... ... ...\n", + "264 3297 156 108 264 Hs 7.298375\n", + "265 3303 157 108 265 Hs 7.296247\n", + "266 3310 158 108 266 Hs 7.298273\n", + "269 3331 159 110 269 Ds 7.250154\n", + "270 3337 160 110 270 Ds 7.253775\n", + "\n", + "[264 rows x 5 columns]\n" + ] + } + ], "source": [ "A = Masses['A']\n", "Z = Masses['Z']\n", @@ -2734,9 +2430,7 @@ { "cell_type": "markdown", "id": "9f4a6509", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The next step, and we will define this mathematically later, is to set up the so-called **design matrix**. We will throughout call this matrix $\\boldsymbol{X}$.\n", "It has dimensionality $p\\times n$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit." @@ -2744,12 +2438,9 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 5, "id": "02c2d4c3", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# Now we set up the design matrix X\n", @@ -2764,21 +2455,16 @@ { "cell_type": "markdown", "id": "10be1594", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "With **scikitlearn** we are now ready to use linear regression and fit our data." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 6, "id": "65a53863", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "clf = skl.LinearRegression().fit(X, Energies)\n", @@ -2788,9 +2474,7 @@ { "cell_type": "markdown", "id": "86f51dcf", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Pretty simple! \n", "Now we can print measures of how our fit is doing, the coefficients from the fits and plot the final fit together with our data." @@ -2798,13 +2482,32 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 7, "id": "b13eba7f", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean squared error: 0.02\n", + "Variance score: 0.95\n", + "Mean absolute error: 0.05\n", + "[ 0.00000000e+00 -2.96611194e-02 2.01719003e-01 1.08078025e+01\n", + " -4.03097597e+01] 5.294399745619598\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAewAAAFZCAYAAABaLRymAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABBu0lEQVR4nO3deZhdVYHv/e8++8xDzZXKUAkhIQOQxAABZE4DUURExNZHpfFFWxQa0Beay9Ott73Pba809BUbiaKmwcZG+m0UmRpbmZRJICCECGSeKmPN46kz773eP05VhUCmSqpO1a7z+zxPnjPW3uusVNWv1rDXsowxBhERERnXfGNdABERETk0BbaIiIgHKLBFREQ8QIEtIiLiAQpsERERD1Bgi4iIeIB/rAtwMG1tfUf0ddXVUbq6UiNcmolL9TU8qq/hU50Nj+preCZSfdXXJw742oRsYfv99lgXwVNUX8Oj+ho+1dnwqL6Gp1zqa0IGtoiIyERT0i7x++67j5aWFiKRCLlcjr/927/FsqxSFkFERMSTShbYa9as4ZFHHuGxxx4D4IYbbuCZZ55h2bJlpSqCiIiIZ5WsS7ypqYkpU6YMPW5sbOSVV14p1elFREQ8rWQt7IULF/L973+fbDZLMBjknXfe2SfA96e6OnrEkwkONtNOPkj1NTyqr+FTnQ2P6mt4yqG+rFLu1vXKK6/w6quvUl1dzY4dO4jH49x4440HfP+RXtZVX5844q8tR6qv4VF9DZ/qbHhUX8Mzkepr3FzWVVVVxY033shVV11Fb28vl156aSlPLyIi4lklnSX+f/7P/2HJkiUEAgHOP/98Zs+eXcrTi4jIBNHfn+Syyz7G8uUrqK8/7aiP98orL/GHPzzLzJmz2Lx5I0uXns855ywFYOPG9Tz88K+YMmUqXV1dXHfdN/D7i/H57LNP8dOf/ohvfONmzjrrnKHjbd++jaeffpJQKMRbb73Jl7/8VU44YcFRlbGkgf3AAw+U8nQiIjJBPfXU7zj77PN4/PGHOeecow/slpYW/vqvv0ZDw2Q6Ozv4/Ocv57e//QOWZfGP//gP3Hnn3dTW1rF8+b/wu989wSWXXMbu3buorq5h0qSGfY7lOA7Ll/8Lt9/+L/h8Pi666BJs++gXdxnXS5OKiMj49NhLW9m2p3dEjzlzSgWfPPvYw3rvzp3b+frXb+Kv/uoz9Pf38847f+Z737uNRYs+hOu6bNy4gS984UrefPNPrFu3lhtv/B/Mn38C/f1JfvCDO5g+fQatra2cffa5nH76GVx22aeHju26hnA4gs/nY9eunWSzWWpr6wBYtOhDPPnkb7nkksuYOnUaU6dO42c/W7FP2dauXYMxhoceepBsNkNFRSWXXvqpo64frXQmh7Sno58NO7pxXJem5j7e3tJBwXFxjaHguABsb+lj5ZoWsjlnjEsrIhPdu+++w6JFJ1FdXcPpp5/JE088wYIFizjnnPNIJCq4+ea/54ILlvHCC3/gxhtv4Qtf+CK//e0TANx//300Nk7nyiu/xPXXf4N//ufvUigU9jn+f/zHz7nxxv8BQFdXJ9FobOi1aDRGV1fnQcvX0rKHd955m4sv/gRXXvklVq9eNXT+o6EWdplLZwv0p/Mk03meen0HmWyB6Q1xtjX3kc05VCdC7GxNAhDw+8gXigH92poWCq4hm3NoqInQ3FFceP/drZ3EowF6+3PMn1HN1LoYlgUzGuJYWPSmclTGglrhTsTjDrclPBp+//unCIcjbNq0gUAgwIMPPsj5518MwLRpjQDE4wmmTi3eTyQSpFLF31GbN2+koqKS+++/D4DZs4+jr6+X6uoaAP7jP+5n1qzjWLr0AgCqq2tIpfqHzp1K9Q+990Ci0RjHHDOTeDwOFFvlq1a9wcUXf+KoPrcCuwwNXsnX2pXmkRe3gOXDdZyhMG7rTg+9tz+dx2/7iEcDdPdliYT8RMJ+OnsyQ+9p7kjh81lUxUN09mboS+UAeGN9K2+sL74nEQtijCGZynNcYyVL5k8il3eZVBXBcQ3tPWmm1EYJ+G2yOYdgwDdioW6MobkzhWVZNFRH9MeCiIclk0ni8QRf+tLVQ899/vOfYt26tYf19ccdN5eamlo+85nPAfDkk/9NRUUlAPfddw/Tp8/gggs+wptv/onZs49j6tRphEIhOjraqa2t489/Xs2ZZ5510HOceOICenp6cBwH27Zpbm5m+vQZR/iJ91Jgl5lUJs8v/7CJXL7YpZ3NOYRCxZZz46Q4C2fV0tyZYmptjMp4kLbuNI31cRLRAF19WRLRALbtY1dbkqjtJ2TbNO3qpb4qTHVFiE27evHZFrFogHe3dZLJOfSkcnT3ZjA+sHw+Nu3sYdPOHoCh8DTGEI8GqE6E2dHSx7T6OHOnV9LRm2VSVQSAddu7qKsMc+yUCna0JklEg9QkQmxv7SMWDhCLBHh3ayehgM2sqRXs7ugnk3XoTmZp6Sz+dV1XGaGuKkxdZYTjj6kiGg6MzX+EiAxbLpfje9/7JwKBvT+3TU3bqKys5O67fwDAli2bWLBgEX/84wv09fWxfXsTTz7532zevJE1a97hyiuv4u677+K+++6hUChQW1uHbdv86lf/yUMPPcjMmcfyyCMP0d7exr/8y4+orKzi29/+DitW3M3kyVNwXZeLLroEKP7e+vnP76WlpZnf//4p/H4/p59+BhUVlVx77Q3cddcdVFVV093dxZe+9JWj/vwlXThluLRwysgpOC75gstvX21i9/Y+/Gnwp+CYWJSl8xvZtambhC8AGRc34+KmXUza4GZcTNrF5FyMA6ZgwDEYdxgnN4Z01sGywB/y0ZbMkMNgBSzSjoOxwQ77yLoOrg1u0MIJgBukeBsAJ1i8dQPveS0EhVDxFt/BW82RUPFv03R237Eqn8+iKhHilLn1NNbHiUcC+A5xLH1/DZ/qbHhUX8MzkerrYAunqIU9Abn9DukdWVatbCaa8hFP+9j8507sbpfqfqg3FpNqIriuIRKy6HilFStXIDnM81i2hWUD/vcEnAsYA6Z4gwGMRdS2hkJ+Sjw69HbjFv9etFzoS+dxXUMsHKAvlaPguAT8NplcAddAIhIgnSuQL7hEQn5yeRfHcQmH/OT8hqzfpaohTD4IvRSoqA0RrQnii9tMqYvhq7BpL+RIBVy29PaxrSOJ6xo6ezI8/foOAEJBmxNm1uC3Lfy2j+OPqSYRDR7pf4WIyIhRYHtUOlsgFPDhdjhkN2XIN+XI7cyS3JLG6nbp7M1QSOXpBXqBCDA4dDtpWozEpBC+Chu70qZyWoyUVcAX9eGL+LDCPnwR6z33fVgh31A4W7YFNsMeCzbGYPIG8gZTMJjcwG2++K8hZzA5FzdtaBho6ZvB27QptvqHHru4KRe338HtdxnqJ+ou3tRjQytAbuDp4ri8D4gDi4DF4RhWwqbHKtBayJD0u6TsPNvfbKEQsShE4c14M74qm0g8wElz6qiIBunJOMSDFrZPF1mISOkosMc51zVDXbTGGHJbs6z7fSvbXu1gcl+ABjtEMp0n4PeRzTt09mYxfshUQWGqD6vWpjtYYNaCGpacORl/nR9faN8L+EvVnWRZFlbQghFusBpjcPvd4r+kU/w3eL/fxUk6uEkXt8/B6XFwex2cXgc3YyBTIA7ECQOQzTn0Z/L4LIt8wSGZLgAOTjjHzlg/+Ri4FTZuwsJXZZOLwZzja5h2XAXELeqqNKlNREaHAnsc27Szh2f+uJ2T3AQNzX6aX+7CShrS2QKVQJoc22J5eusgXQfpWotMrY9cpYWx4IJTGpl/TDV9qTzVidBYf5xRY1kWdtzGjtvQcHiTyIZCvrcY4sUgL+D0vifUux3yHXkK3QXS6QK9fTnoA1osMtkCUBwP72YP3ezB+IAKH6bSRyZqqD4mRsW0MLk4TJ9XSc30KL7Y0a92JCLlSYE9DrkZl57Xetl4fxPztjqk3U6arOKYcD4Ofcda1J9cwRqSZCoMiXiIguOSyTpcuKSRGQ0J+jN5GqqLY8UTOayP1HtDPjD14O81xhQDvNPB6S4QcwJse7cDt8ch05ajdVsSq9dgpVwK3S5Wt0sUyK7tpY3iSlA9tOK3LZwgBCcFCdQFSEdcqmZEmTQrTqHConZGjFBdAOsQk95EpDwpsMeBXW1JVq5t4eR4NYlVBZIv9dLWmiaSdvAHfPRMNvTOgElnVjFzcTUV0SANNVGm7u6huSPFknmTsG2LXN4lGi7+l8YjulxppFiWhV3px670AyFq6xO4S/b2688fuHWzDi1N/TidBUynw/b1PbhdBexul77dWdxegy8N2aYs2aYsAB2k6KAdgM0W+EM2mZjBPylAeEqQVMxQ0Rhh2vxK8lUWtZMiQzPeRaS86Cd/jOXyDi/+son4K1ma9vQQDftJZx2S9YbuU30s+8oc0gGX/kyB+TOq9hkfnT21ktlTK4ce+21NghpLvpDNlLkVQ4+nX1w/dD+dLZDOFjD9LtvXdZNvLxDuh5YtSQrteUJ9UOh0cNMOvgy4HVlSa4uh3kuSXtoA2BCxiEwN4lT5CE8NMXlOgmBDkMT0EOFJIbXOZUJbs+Yd7r77LgqFAqeeejpQvDbbtg0rV77OihX3Yds2L7zwHHPmzGXKlEN0n3mMAnuMFByHXX/spvX/a2Xy+iw+n0XBb2ia7dC+wKJ2ToJzF0ymvj526IPJuBcJ+Yst4wqonRLd73u6k1n6erJEkhYtm5OkdmeI9Fp0NaXItxRDPZ92yG4uBnnyjTSbBqbFWxaEI37yCfDVB6g7Lo6/wU+kMVS8X6+udvG+E05YwEknnUI6neav//prAGSzWTZufJurr75hqEHz4ovPEY/HFdhy9PJ7cqz+v1tJvlVcn7YQhuOunELq5ADVlstfNCSorQyPcSml1KriIarixfkGdfM+uHiCMYaOHf00b+rD12Xo2JIkuTNLoMfFdDiY/gKkgJYCu9/Zu7zsJtsC28LU+IjPiGDqbPwNARpPqCA2PUKgzq9L1GTYWv/vbtKrUyN6zMiHokz6H4cfsoVCgZ/85If8xV+cw2c+cynLl/+Urq5ONm7cADzBu+8WVzabKBTYJeTmXHof66LniS7Su1I4IXDOi1D/8VpmLpw01sWTcc6yLOpmxKmbEf/Aaz39OZpb+gn1GVo3JOnY3E+wx1BozuFrdwn0G2h26W3ee/le10A3OwEITglCnR8m2VTPjBJsDBGcGmTajMQhV34TKbU33/wTP/jBHRhjsCyLCy64gBUr7gGKrfA5c+bysY9dwsknLxnjko4sBXaJ5HbmaF/eTH5XjlQmT9tcyHwkyuc/OU/X7cpRq4wFqZxVnAg380N7dxIyxtDTn4OcoW1zktYNfQS6DNldWZI7MgS7DXYKcttzsL24yEwLe0N9U9zCnhzAmuxn+oIqGo6vIDAlgF3r1/dtmRtOS3iknXzyEq6//v/FGMOOHdvHrBylpsAeZcYY+v/QS+f97Zici1Nrs/XMADvsHGcfX6NfejKqLMsa6mavqgkz59S6D7ynpz3DrrW9mLY8ud05+ralsTtcTGuBQtLF3ZSDTTm2vZRil7+ZUMAmXhWk4pgIwcYQgakBAlOD+KcGCUwOYPn1PS2lYVkWM2Yc84HnfQNDPLt27aS6uoZodP/zRrxGgT2KTMHQ+W9tJJ8vXovbPNvw2vxeXNvCsizmzage4xKKQGVdmMpzPjhnwnVdOppS9DdlaNvQx+41vdjtDuEul+SePM17+rF9FrFIgGjYT8D2EQj68NcHCEwL4h8I8kBjECcxMX5hythat24Nq1evIp/P8/vfP8P5518IwHPPPUdLSzOPPvprrr32Bk499XT+678exbIsbrnlW2Nc6pGj3bpGiZt1aV/eTPqtFL6gRcX/U8sDnTvIF1wq4yHmNFZy1sIpY1rGQeOhvrykXOvLcV06e7M0Nfexfl0nmZ1Zgp0u4S4IdUOo21CZsYmHA/j9PsJBe6gHKRTy41RaBBuDBKYFCUwvBnlgShAroBb5+5Xr99iRmkj1pd26SsxJOrT93z1kN2fIBw0dnw3RPiVPvtVlSl2Mz/7FcWNdRJFhs30+6qsi1FdFWDJ/UnHWek+Gd7Z10t6dYWd3mkK6QKgnR6gLEkmL+myAUAfUZgz+DBRacvDm3oC2fOBvCBTDuzFEYFqQ4PQg/gZ1rYu8nwJ7hDlJh9Zbd5HbnsNf6+eNc3Ps6OuE1cXXFxxbc/ADiHiEZRU3O1m6eBoA2bzD2m1dtHanaetOs7M7zU7yAAT9LlZrgUgXTC2EqE8H8Lc7BLshuNuQ352D1/v3Htu2imPjg63xaUEC00P46/26nlzKlgJ7BLkZl7bv7SG3PUdgcoCKmxvY+dKGodcDAZs5jZUHOYKId4UCNovn7J3U1t6TprsvR09/ji0tfewu9JGtgW5yDG57ahUM4W6IdEJdNkBtyk+g3SXcB5Eml9yOHLy69xy+oFVsjR8TIjg9SGBG8Vabqkg5UGCPEGMMHT9tIbspg7/Wz6S/n8aWVBJjDJNro9RXRZhaGyPg1y8WKQ91lRHqKiMAXHT2LNra+sjmHDbt7qGjJ0MmW6C5K01PMEu6ztDJ3h3QfHlDqCtLZdJHbcpPZZ+Nv80l2A2RtIO9ObN3g3fAX+sfCu/AjBDBYwa61dUalwlEgT1Cen7dSer1fnwRH5NumYq/1s+2zcXZ4cdNq+KUefWHOILIxBcK2pw484PDQvmCy+72fjp6M2RzDjtak7SEUjS7hmbyMNC1bmcM4Q6IdkJ10qau30+40xDYVSDclie96j3j44GBSW4zQgRnFG8D04PFbVhFPEiBPQLSb6fofawLy4K6GyYTmBbEGMO2luKsxWOnHHjWn4hAwO/jmMkJjplc/Fk5A3CNoT+dp7U7TVdvlrzj0tKZoqUyTXujQ5tx2UAOXEOoB8IdEO+Cyj6b2j6bUA8E+vMEt2T2We/AX+MnMCNIcEZo6NY/Wa1xGf8U2EfJ6S7QcXcLxkDVp2uILIqSLzg899Zu0pkCiWhQ+1GLHAGfZZGIBklEg/C+RbUc16WlM82ejn56+3O0dKVpq03T4xp24QJusTXeWWyNV/X5qOj2Ee+1COzM4W/OEF5lD3Wr+4LWQFd6iOCxxdtAoy45k/FFgX0UjDF03teG0+cQPiFCxSeLC6E8/aedbNzRjW37OHvRFK1mJjLCbJ+PqXUxptbt3c3OGEPBcWnuTLOzLUlvf4627jRtPRnaMIBTbI33QrgdEr0WdUk/8S6LaK9FYG0B/4b0UEvbsi0C0wIEZw4E+MwQwRkhfBFtlCJjo6SBfc8997Br1y6qq6tpamriu9/9LuGwd3elSq3sJ/WnfnxhH/YXqti8u5dJNRE27ezB57P43PnHUVcVGetiipQFy7II+G2mT4ozfdLeDVLyBYdkukB7T5rmjhT9mQKtXSl29mXZOTDJzU4bIu0Q7YC6pJ+KLotQtyHcnye4NYPts8CysCzwTwoUZ6kfGxoKc7tC4+Iy+koW2G1tbaxYsYJXX30Vn8/Htddey1NPPcWll15aqiKMKDfl0vXvxd2Oqj5fy39v2U1zR4r6qgjGGI5rrFJYi4wDAb9NdcKmOhFiTmPV0PO9/Tk6ejO0dKbY3dFPclKe9v4cra4DFGeqhzsKRNoNiU6Lml6bWI+F3ZslvD1NaOXeldz81X4CxwSLAT4Y4nXaIEVGVskCOxKJEAgESCaTVFRUkEqlmDNnTqlOP2LautNkcg6J32dxeh1Cs8NElyZoe2z70OugBVJExruKWJCKWJBjp1QMPZcvuDR3pkimcnT2ZdnZlqQ7maMjW2AbLpZjCHdBpD1HpB0SXRZVPT7CfTb2zhSh122Cfh9YFnbcR/DYcLElfmyI4Kwwdo2tEJcjVtK1xB999FH+67/+i/r6eowxfPvb3yYWix3w/YWCg3+cXbd814OrSO/O8tE/RLGNxew7ZpNusPjRQ6uH3lMVD3HDZxfrB1NkguhP59nR2kdvMkdnb4Ytu3vo7MngGgPGEOyGcJsh0mYIt7lE2yDm2oSCNrbPIhS0CQX8BKv9xOfFiBwXKf6bEyFQExjrjyceUbLAXrt2LbfccguPPPIIfr+f2267DZ/Pxy233HLArxlvm3+kswVWPP4u03/vcnxbmPoLaqi7toFNO3v4zSvbmFofo6E6yrFTKvYZQxvvJtLC+aWg+hq+iVhnxhj6Unl2DbTCe/pz7GpPkkzlwRgCSYi2QbTNEGk1RNvBzoDftoYWUAoGfIRqAvhnBonNiVI5P0pkdoTJc6onXH2Npon0/TUuNv9oaWmhqqoKv98/UKh69uzZU6rTj4juZJZgt6FmgyFX4VJ5ebHbu6M3A8DkmijnLBq7Td1FpHQsyxroVt93+MsYQzbvsKutn+5kjkyuwJ6OFC19GdwOh+Ael2i7UwzyNrC352B7P7zQNXQMu8aPmebHneYneGyImhPjRGqCxMJ+qitC2D7NVC9HJQvsc845h+eff57bbruNRCLBxo0b+eY3v1mq04+Izr4sk980YKD7eB+BhmJXVudAYNdWeHfGu4iMDMuyCAf9zJ72wX0DjDF09WXpTeVwXENrR4qe7WnMjjxOUw5rZ4FIq8HX7eB2FuBtyJGkmQ7ycUjVW6QnWTiNNkwPEK4MEAn5qasMs+DYWqJhXak7kZXsf9e2bf7X//pfpTrdqOjekaJ6gwELmhbuHUloV2CLyGGwLIuaijA1A78rZk+thIX7vqfgOLjtsO3VNpymLOktGQrbcpisIbrDJb/VhZUukCdbBalJFhsa4M+Tm5l0fIJZMyqZ01hFKDi+5v/I0dOfY8OQeyGJZaB7tkWXP08mVyDg99Hdlx34QdSKZiJydPy2Tf2CBMGGvYFrXENhT57c1iyZzRlSG1Nkt2Yp5FycVkP/9jypTAFjd7O9tpsNU3YQOS5M7YIK5p5cQ1VCjYmJQIF9mNyci39lBgfoPtkGDG3dGVzX4LqGynhQO3GJyKiwfFZxT/BpQWJnJ6gFTMGQ254ltyVLbnOG/g1p+ramSPbkSbc6sDpF6tcp3gg1Y6b5Cc+NMP2UKqadUoW/SjPTvUiBfZiSr/Th9rukJ1lMObmSnu3dPP7HrRQKLgC1lVokRURKx/JbhGaFCc0Kw4WV1AJuv0Nua5a+df10vpukZ20/6bYcZkuBwpY+tv6uj+2+nfjr/FQcH6P6xARVx0cJz47gC2si23inwD5MXc92Ywz0nxzg+EkJ1m3vplBwiYYDHDM5wanzJ411EUWkzPliNuEFUcILotT/ZXG9i1x7nrbVvex+q4fud5P4dzs4rXnaWrtpe74by4Jo2E/4mDCxuRHqFlYQnhMubn6iHczGFQX2YSi05kmtSeH6IXByhPnHVJEvuFQnQkxviOPTAikiMg5ZlkWoPkjjhXU0XliHMYbeZI4db3ez+80e8lsy+HYWMB0F+tcl6ViXZNcT7YSCNoGoTWxulKoFMeLzo4TmRLATGvYbSwrs/TDG8N+vNgFw8YePof+lPnJ5l55ZFrX1EWyfj8Vz6sa4lCIiw2NZFpWJEJVnNrDgzAYA+lI5Nm3tpntdP73r+jFNeaItBYKdBXpezbL71S58PotIyCY0OUhobpi6RRUkjo8RmB7EstVgKRUF9n44rmHTzh4Akuk8yZf6yOQcOudaLKiNjnHpRERGTiIa5KQTJ8GJxcddfdnitqRN/XS83Ut+S5bwbhenrUD/1gJsTbHnyU4Cfh922EdwVoj4/BjReRHqF1cQqtaEttGiwN6PbN4Zut/8Ti+BlhzJgENymsW0ugOvfS4i4nXViRDViRBzp1fB2dOGlmBt2tVL14Z+UhvSZDdmiOxxCfa6ZP5coPfP/QBstsBX78c6JkBsXpSaRQkSs6NUVYbwaTz8qCmw9yOXd4fud7/cQ2XepXsGVFWGiYb116OIlI/BJVgXzq2DucWhwILj0p3M0rk7RdtbvWQ2ZqApXxwPby1Aa4Ge19P00IHxQ6bBwj42hD07SOUJcabMjFOdCBMJafey4VBg70fuPS3s3Ko0mZxFz7EW09W6FhHBb/uoq4xQVxlh7vG1Q8+nUnna1/XRtzZF75p+CltyWO0FrF0GdmXgpQxJenk3Af2TLQoz/MTmR4jMDFNbFaahOkplPEgooCDfHwX2fgx2iQd7DO6uPOmEn+Q01B0uInIQ0WiAGSfXwMl7N0Rx+hx61iTpejtJZkOazKYMuX6H8GYXd2Mens3jBnppaoA1Uyz6GyysmQEmT41TWxGmOhGiKhGiWotTKbD3Z7BLvHKbwXENzZMKGNunwBYRGSY7YVNzeiU1pxc3QzGuIb8jR2ZDmp53+kmu6afQlqeiwyXX7FBwXFyypGuz7JhssW6yRf8UyMctKuMhJtdEqYoHqakIM7UuRjxSPsOUCuz9yBaKLezEzuIGHz0zYNbUCirjWitcRORoWD6L4DEhgseEqFhWBUChq0B2fYbsxjTZDRn6N6XJZgvkt7nkNrkUCi6piEOyIU3H5DTbJ1ukawGfRTjkp7EhQUXYP9Qan1wTxW9PvJXbFNj7kcs7WI4hNrBdd/D4KB89bcbYFkpEZILyV/vxfzhO7MNxANyMS25Lthjg6zNkN2WKy672uGTbHQpvuWQsl85ql776HJ0zethS7eCGiuPePp9FVbw4271xUpxJVRGqEyEiIW9HnrdLP0pyeZdoC1QFg/iPCXDaxbMIBsp77EREpFR8YR/hEyKETyju0WCMIb8zR3ZjhuyGDLmNGfIteabkDc5Og9lpkUznyNRYdNe7tFQW6JucpjOeZvOunqHj1lSEmVYfY1pdjGn1cc91pyuw9yOXd0jsNPhti8aza3Qpl4jIGLIsi+D0EMHpIRLnF8fCne5CMcA3ZvDtcAisSWJyhsm7YN4OQ361Sy4CPZMMXfUuzZUFOk2azt4Mb2/uAOD4mTUsW9LomRnpCuz9yOYd4rsMPssifKJWNhMRGW/sKj/RU+NET41TX5+gZVfPQDf6YCs8TTDpEt8N03bDiSZAzm/on2zRUeuwPZZjndNBwLbY2d5PIhLgglMaSUSDY/3RDkiBvR+5lEO0FXyVFuH52vhdRGS88wV9hOdHCM/f241e2J0ns35gHHx9Gqu9QGgX1OzyMy1taO5L0z+pleBki84pFv/fnvWcvKiBDx1XOy4vIVNg78+OPJYL9vQgvtj4+08TEZGDsyyLwLQggWnBoW70QkeB7Po02XVpAuszZNc6+PbkaOwLklvjkMrmaavdyX9P38O006upXBjHSti4xtBYHycaHtvIVGDvh7U9D0Bgti7jEhGZKPy1fvxnJoidmQCgIemQWZcmtzFDZl2annX9dPVkya5ySK5qJ0k72Uron2Lx2jSLmkUJ5p5Uy7FTK7B9pb9sTIG9H/bO4nXYIQW2iMiEZcdtYkvixJYULydryLpkN6bZ9Xo3bat68TXliWahaiuk1xXg2R62xnpY32gTnBsmPd1iydJpTC3RoloK7PcxxhDcVQzsyHxNOBMRKRe+kI/IghjHLYhx3JemYQqG3PYs2XUZ+t5N0vFWH8n2LIH1DqzvJwA097Uz9UsK7DHhdDr4koZ8CKLT1MIWESlXlt8iNCtMaFaYiourmGoM+V05Wt/spX9NP/4Ow5ST6kpWHgX2+2Q2pnFdQ6oBgkFNOBMRkSLLsgg2hmhsrIdL60t+/om32OpRSm9IA5CdYuPzyMX0IiIy8Smw3yezPQuAM1mtaxERGT8U2O+TayoGtqvAFhGRcaRkY9g7d+7kqquuYsqUKQAkk0nmzZvHbbfdVqoifIDrGn713CbqqyKcf3IjTq+D01PADYCvToEtIiLjR8kCOxaL8Y//+I+ceeaZACxfvpwzzjijVKffr2Q6T3NHiq6+LOef3Eh+RxbHhUwNhIKajyciIuNHybrEq6urh8I6l8vxzjvvsGTJklKdfr8c1xTLk3dxjSG3I4cxhnSNpe00RURkXBmTZuQTTzzBxRdffMj3VVdH8R/hAuz19YlDvsfx+QgObGieqIiQ7+rFZ/soTLapqYoe1jEminL6rCNB9TV8qrPhUX0NTznU15gE9u9+9zt+9KMfHfJ9XV2pIzp+fX2Ctra+Q76vrTNFLlsAYOfuHrJresnlCvRVuOSz+cM6xkRwuPUlRaqv4VOdDY/qa3gmUn0d7A+Pkgf2ypUrWbx4MYFAoNSn/oCC4w7dT2fyFHbmcF1DpgZ1iYuIyLhS8su6HnzwQT73uc+V+rT75Q6MYQNkW3OYvCEftXDCFpGQJp2JiMj4UfJU+v73v1/qUx5Qwdkb2OldOWJAtrhtKrGIAltERMaPsl44xXH3donnm4t7YKfixRCPh8e+y15ERGRQWQf2e1vYheYcAMlYMcSjYbWwRURk/CjrwH7vGLbTVgBj6Iu6WJalwBYRkXGlrAP7vbPETWsBxzVkKyEcsrF9ZV01IiIyzpR1Kg2udIYx0OlQcAzZCo1fi4jI+FPWgT3Ywg4kwc0bnJiFG1R3uIiIjD9lHdiDLexQb3E826m2AIhF1MIWEZHxpaybks7ALPFQt8FxIVtZDGx1iYuIyHhT1i3swsB12KGeYgs7lSgGuBZNERGR8aasA3uwhR1IFh93B4sbgcTUwhYRkXGmvAN7YAw70F+87bCKq51pDFtERMabMg/sYpd4cKCFnQ4VH8c0S1xERMaZsg7sgmPANQT6i4/z8eKtLusSEZHxpqwD23Fc/GmwgEIEjG0xuTaqVc5ERGTcKetkclxDMAmhgE0+DjWVYT5x5rFjXSwREZEPKOu+X2egO7wqEaL2xDAfuXCGWtciIjIulXU6FRyXQNLg81nUzogprEVEZNwq64Qa7BK3ALu2rDsbRERknCvvwHaKXeI+y8JfrcAWEZHxq8wDu9gljgV2jQJbRETGr/IO7IFJZxaWusRFRGRcK+vALhScYmBbYFfbY10cERGRAyrrwLaSBssFf8LGFyzrqhARkXGubFPKGINvYNMPu0qtaxERGd/KNrAd1xSXJbXArtD4tYiIjG9lG9gFx8WfAcuy8CXUwhYRkfGtbAO72MI2Ay1sBbaIiIxv5RvYjhnaqcuuVGCLiMj4VtLB2y1btvCb3/yGUCjE66+/zg033MCiRYtKWYQhe8ew1SUuIiLjX8kC23EcbrvtNn7yk5/g8/m47LLL8PvHbrLX3jFssBXYIiIyzpUsMd9++22MMdx///1kMhmqqqr47Gc/W6rTf8DeMWwfPo1hi4jIOFeywN69ezdvvfUW3//+90kkEtx8880EAgEuv/zyA35NdXUUv//IwrS+PnHQ11MFQyjnw2/7qD+2gnB9+IjOM1Ecqr5kX6qv4VOdDY/qa3jKob5KFtixWIxZs2aRSBQr9ZRTTuG11147aGB3daWO6Fz19Qna2voO+p629iRWv4uLj+5CBrstf0TnmggOp75kL9XX8KnOhkf1NTwTqb4O9odHyWaJf+hDH6K7uxvHcYBii3vmzJmlOv0HFHIudhYsH/hiZTtZXkREPKJkLeyqqipuvvlmbr31Vqqrq+ns7OS6664r1ek/oNBbAMBELSzLGrNyiIiIHI6STtNetmwZy5YtK+UpD8jpKbb0TVytaxERGf/KNq3cZLGFjQJbREQ8oGzTyul1AbAU2CIi4gFlm1buQJe4WtgiIuIFZZtWJlkMbCuuRVNERGT8K9vAdvuKXeK+RNlWgYiIeEj5plX/QGCrhS0iIh5wyMD+05/+VIpylJybHghsLZoiIiIecMjrsP/u7/4O27a5/PLLueyyy2hoaChFuUZfxgDgi6qFLSIi498hm5fPPPMM//t//2+2bNnCxRdfzFe/+lWefPJJCoVCKco3elLFFratFraIiHjAYaXVhz/8YW6//XZeeOEFli1bxn333ce5557LP/3TP412+UZNob84SzxeHRzjkoiIiBzasJqXsViMv/zLv+RrX/saU6ZM4cEHHxytco0qY8xQYFeX+baaIiLiDYe9lviWLVv49a9/zeOPP86kSZO4/PLL+cQnPjGaZRtxm3f38OdNHZx3whTcvAE/JCpDY10sERGRQzpkYD/44IM8/PDDbN++nUsuuYR//dd/Zf78+aUo24h74o/bAHh8d5qZgB23tVOXiIh4wiED+5lnnuFLX/oSF1xwAdlslqamplKUa1RlevMABOMl3axMRETkiB1yDPtf//Vfueiii3j55Zf5+Mc/zg033ADA22+/zTXXXDPqBRxJFbHiBDM7V3wcrFBgi4iINxz2pLO77rqLhx56iIqKCgAWLlzI9u3bR61go6EqXhyvtrPFx+GKwBiWRkRE5PANa5Z4fX39Po+DQW9dEmUGbgcDO1qlwBYREW847MCOxWK0t7cPTdJauXIliURi1Ao2GowpRradK95GdQ22iIh4xGEP4t58881cffXV7Ny5kyuvvJJt27bx4x//eDTLNuIG8ho7CwG/D39My5KKiIg3HHZgL1q0iH//93/nzTffBOCkk04aGs/2CjPQKT6jKkZ9lauNP0RExDOGNU06kUhw3nnnjVZZRt1gC3tKLIodzGjjDxER8YxDBvYDDzxw0NevuOKKESvMaBscw2Zwa82IWtgiIuINhwzs73znO5x44onMnTu3FOUZVYN5TXpga011iYuIiEccMrBvvfVWHnnkETZu3MinPvUpLrnkEiorK0tRthG3N7CLLWwrqsAWERFvOGRgX3755Vx++eXs2LGDRx99lM997nPMnTuXa6+91nNrig92iZvBFra6xEVExCMOO7GmT5/OVVddxRe/+EVee+013n777dEs16h4fwvbp8u6RETEIw7ZwjbG8OKLL/Lwww+zceNGPvaxj/HLX/6S6dOnl6J8I8plsIXtAj61sEVExDMOGdjnnnvu0P7X1113HZZlkc1m2bRpEwDHHXfcYZ/ss5/9LKFQcT1vn8/Hz3/+8yMs9hEygGsga7CCYEW0taaIiHjDIQM7EAjQ1dXFvffey89+9rO9l0YBlmXx7LPPHvbJzjnnnKHdvsaCMWZopy4r6tNe2CIi4hmHDOzf//73I3ayDRs2sGLFCrLZLAsXLmTp0qUjduzD4ZqBjT8sS93hIiLiKYcM7H/+539m2bJlnHTSSUd9squvvppFixbhOA5XXHEFsViMU0899YDvr66O4vcf2cSw+voPbkwSCvkxlk0waBOrCe/3PeVKdTE8qq/hU50Nj+preMqhvg4Z2PPnz+ff/u3fuOWWWzjttNO44IILOOuss4bGoodj0aJFANi2zZIlS1i5cuVBA7urKzXsc0DxP66tre8Dz6fTeZyUQz7nkHEK+31POTpQfcn+qb6GT3U2PKqv4ZlI9XWwPzwO2S986aWXctddd/Gb3/yGj3zkIzz33HN8/OMf57rrruPhhx+ms7PzsAqxefNmfvWrXw09bmpqKvlMc4PBlwcssMIavxYREe847M0/gsEg5513Hueddx7GGFavXs0zzzzDz372M5544olDfn08Huf555+ntbWVZDLJ5MmT+cQnPnFUhR8uY8AugAX4QhrDFhER7xjWbl2DLMti8eLFLF68mJtvvvmwvqahoYEf/vCHR3K6EWOMwVco3reCamGLiIh3lFUz0xjw5Q1gYamF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ySefzHPPPTe2hRqHNmzYwIoVK1i+fPlQ/Tz//POcdNJJQLHenn/++TEs4di76KKLiMVi+zz33HPPDdXRvHnzWLduHclkkhdffJETTzwRy7IAOOmkk3jhhRdKXuaxtL/6AnjggQe49957+eEPf0h3dzeA6gtYtGgRF1544dBj13WJRCIH/Dn8wx/+wOLFiwHw+/3MmjVrn5blRHeg+gL48Y9/zL333suKFStIp9PAxK6vCdMl3tHRsc8vjXg8TkdHxxiWaHy6+uqrWbRoEY7jcMUVVxCLxfapu3g8Tk9PD4VCAb9/wnx7HLUDfX91dnbu8/xgfZa7U089laVLl1JTU8Pzzz/PN77xDX7+85+rvt7n6aef5uyzz2b27NkH/Dns7Oxk1qxZQ18Tj8fp7OwcqyKPqffW10UXXcS0adOIRqM88MADfOc73+HWW2+d0PU1YVrYtbW19Pf3Dz1OJpPU1taOYYnGp0WLFgFg2zZLlixh5cqV+9RdMpmksrJSYf0+B/r+qqmp2ef5/v5+fd8B06dPp6amBoAPf/jDvP766ziOo/p6j1dffZWVK1fyzW9+E+CAP4fvr7NkMjlUt+Xk/fU1Z84cotEoUPwee/XVVwEmdH1NmMBevHgxu3fvJpfLAfDmm2+ydOnSsS3UOLN582Z+9atfDT1uampi+vTpnHfeeaxatQoo1tt55503VkUct5YuXTpUR+vXr2f+/PnE43HOOecc3n33XczAkvyrVq3i3HPPHcuijgt33HEHhUIBgG3btjFt2jRs21Z9DXjuued46aWX+Na3vkVbWxurVq064M/h0qVLeeuttwDI5/Ns2bKFU089dayKPib2V1+333770OtNTU3MmDEDmNj1NaE2//jjH//Ik08+SXV1NYFAQLPE36elpYXvfOc7HH/88SSTSQqFAn//939Pb28v3/ve95g6dSo7duzgb//2b8t6lvhrr73Go48+yosvvsjnP/95vvzlLwNw++23U19fz/bt2/na1762zyzxd955B9u2mTlzZtnNet5ffT344INs3LiRxsZGNmzYwBe/+MWhccVyr6933nmHK6+8kgULFgCQSqW44oorOP/88w/4c3jPPffQ29tLT08P55577sSZ9XwYDlRfW7duJZ1OU1tby4YNG/j6178+9DM5UetrQgW2iIjIRDVhusRFREQmMgW2iIiIByiwRUREPECBLSIi4gEKbBEREQ9QYIuIiHiAAltERMQDFNgiHvX6668zb948HnnkkaM+1p/+9CfmzZvHj370o6HnVq1axcc+9rGjOu73v/99PvnJT+7zb/78+fzd3/3d0RZZpOwosEU8yHVdvvvd7/LhD3+YtWvXHvXx3n33XRYtWsTTTz+9z3MnnHDCAb/m/PPPP+Rxb7rpJh577LGhf2eccQazZ8/mlltuOeoyi5QbBbaIB/3yl79kxowZfOELX2DdunVHfbw1a9Zw6aWXkk6n2bFjB1AM7BNPPPGojz3ojjvu4LnnnuO+++6bMJsxiJSStmQS8Zje3l5+8pOf8MADD5DP51m/fv1+3/f1r3+dpqam/b724IMPEg6Hhx6vWbOGz3zmMyxbtoynn36aL3/5y6xZs4ZPfvKTI1LmH/zgBzz55JPcf//91NfXj8gxRcqNAlvEY5YvX85ll13GtGnTcF2XXC7Hnj17mDJlyj7vu+uuuw7reNlslq1bt3L88ccTDAa59dZb+au/+is2b978gS7xa665hj179gDQ2to6FOi2bfPwww/v9/g/+tGPePzxx/nFL35BQ0PDcD+uiAxQYIt4yObNm/nlL39JVVUVjz/+OFDcQnDt2rUfCOzDbWGvW7eOxsZGYrEYCxcupKWlhZdeeonJkydTUVGxz9f95Cc/Gbp//vnn89hjjx20vCtWrOChhx7i/vvv/0D5RGR4FNgiHnLrrbfy7W9/m09/+tNDz33rW99i3bp1H5gEdrgt7PeOVVuWxfnnn89dd9110Alnh+NnP/sZv/jFL/jFL35BY2PjUR1LRBTYIp7x7LPP0trayqc+9al9np8zZw5vvvnmER93zZo1+4TzsmXL+MUvfnFUl3Rt3bqV22+/nUmTJnHDDTfs89p1113HRz7ykSM+tki50n7YIiIiHqDLukRERDxAgS0iIuIBCmwREREPUGCLiIh4gAJbRETEAxTYIiIiHqDAFhER8QAFtoiIiAf8/4DBbA/qVQNEAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# The mean squared error \n", "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, fity))\n", @@ -2831,9 +2534,7 @@ { "cell_type": "markdown", "id": "279b2fb0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Seeing the wood for the trees\n", "\n", @@ -2842,20 +2543,50 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 10, "id": "84d1e91b", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAesAAAFpCAYAAAC8iwByAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABNp0lEQVR4nO3dd3wUdf7H8deWbHpPSELvSAcpFlSCIoKFYjsbltPz1FPvLGe90/NnA089T/BUTj37WQ4B2ynqgSgKWJFI7wkB0sumbJ3fH0sWIglJINndZN/Px4MH2dkpn/mmvPc7850Zk2EYBiIiIhKyzMEuQERERA5NYS0iIhLiFNYiIiIhTmEtIiIS4hTWIiIiIU5hLSIiEuKswS5ApC0tX76cRx55hPXr1zNmzBgMw6C2tpbJkydz+eWXExERcUTr//bbb/nHP/7BCy+8cMj53nvvPVasWMGDDz54RNv7pcmTJ5Oeng7A1q1bMQyDPn36AFBYWMhHH33Uqtv7pYULF/LMM8+Ql5fHyJEjcbvdFBUVMX78eO666y7M5vbRHzjrrLOYO3cuPXr0CHYpIg0y6Tpr6ehWrlzJpZdeys8//4zVaqW0tJRbb70Vi8XCM888c0SBYhgGdrud+Pj4Q87n8Xiora0lNjb2sLfVkJkzZ/LKK68AcMcdd+B2u3n00UcPeq8tvfPOOzzxxBMsW7YMgNzcXE4//XTuu+8+zj777DbffmuoqKggISEh2GWINKp9fOwVaUXJycnMmjWLlStX8u677x7RukwmU5NBDWCxWFo9qAFuvvnmw3qvLXXr1o1+/fqRk5MTlO0fDgW1hDodBpewlJ6ezgknnMBHH33E9OnTAd8h3ddffx2bzUZGRgb33XcfcXFxgO9w+pw5c4iIiMDr9XLJJZdwzDHHcM0117B69Wo2bNgAwJtvvsn8+fOJjo4mKiqK2267DbfbzW233UZlZSX/+9//ACgqKuK+++6jpKQEl8vFhRdeyIwZM8jPz+cPf/gDq1evZtasWSxatIjdu3fz8MMPc/TRRx+0HyNHjmx0H0eOHMmbb77Js88+y/Dhw4mNjWXNmjUkJCTwyiuv8MUXXzB37lwiIiKIi4vjvvvuIyMjA4CcnBwefvhhTCYTFouFe+65x394vTk8Hg+ZmZn+14da35o1a7j33nux2WwMGDCAjRs3Ulpayh//+Ee++OIL3n//fS655BI2b95MTk4O55xzDjfccAPPPfccixcvxmq1MnDgQG6//XZsNhtbtmzhvvvuA8DtdnPuuedy9tlnU1RUxB133IHD4cDtdjNhwgSuvvpqZs2axX/+8x/uuusu/5GAup+FiIgIkpOT+ctf/kJaWhpz587l3//+N6eddhqVlZWsW7eOwYMHM3v27Ga3jchhMUQ6uBUrVhj9+/c3XC5XvekPPvigMWXKFMMwDOPbb781xo4daxQXFxuGYRizZs0y7rrrLsMwDGPnzp3GyJEjjW3bthmGYRirV682LrnkEsMwDCM3N9fo37+/YRiGYbfbjbFjxxoOh8MwDMN48cUXjfnz5/trmDBhgn/bl112mfHkk08ahmEYxcXFxrhx44xvvvmm3jo/+OADwzAMY968ecavf/3rJvfz9ttvN2655ZaDpj/55JPG8ccfbxQXFxsej8d45JFHjJ07dxojRowwtmzZYhiGYbz66qvGZZddZhiGYVRUVBjHHHOM8dVXXxmGYRhLliwxJk2aZHg8nga3O3/+fOPEE0/0v167dq1xww03GJWVlU2uz+FwGCeddJLx3nvv+ZcdOHCgv90MwzAuueQS44orrjDcbrexZcsW46233jIWLVpkTJ482aiurja8Xq9x4403Gk899ZRhGIZx4403+tuuoKDAuPLKKw3DMIzZs2cbzz77rGEYhlFVVWVccMEF9bZRt81vvvnGOPbYY/0/C0899ZRx6aWX1mvnadOmGQ6Hw6itrTXGjh1rfP/99018d0SOjA6DS9jyer3+rxcsWMDJJ59MSkoK4Btw9N5772EYBu+//z5DhgyhZ8+eAAwbNow//OEPB63PYrEAvl5ZTU0NF198MWeeeeZB8+3du5evv/6ac845B4CUlBSys7OZP39+vflOOukkAAYMGEBeXt4R7euIESNISUnBbDbzxz/+0b9PvXv3BuDMM8/k66+/pqCggCVLlhATE8Nxxx0HQHZ2NkVFRaxevbrR9ZeUlDBz5kymTp3q3++6oxKHWt+PP/5IcXExU6ZMAWDgwIEN9uDHjx+PxWKhd+/enHfeeSxYsIAzzjiD6OhoTCYTZ555JosWLQIgMTGRjz76iLy8PNLT05kzZw4ASUlJfPHFF2zatImYmJhGBwUuXLiQ7Oxs/8/COeecw4oVK8jPz/fPc8wxx2Cz2YiMjKRHjx5H/P0RaYoOg0vY2rVrF927dwdgz549bNmyhZkzZwK+w6dpaWmUlpayZ88e/x/uOqNGjTpofVFRUbz66qs8++yzPPHEE2RnZ3PrrbcetOyePXsA6k1PSUk56BxvXdhFRkbicrmOaF9/eV79l/sL0KVLF4qLi9mzZw/l5eX13ktJSaGsrKzR9aekpPDKK6/g9Xq59dZb+b//+z+ys7Ox2WyHXF91dTUJCQn+DzrgC9Xm1P/ee++xcuVKABwOh3+g4F133cULL7zAZZddRqdOnbjxxhs57rjjuPLKK4mOjuamm27CYrFwzTXX+D8k/HLdAwYM8L9OTk72T+/cuTOw/3sDrfP9EWmKwlrCUkFBAcuXL/ef28zKyqJbt27ce++9/nlKSkpISUkhKyuLbdu21Vs+JyeHIUOG1JvmcrlITU3l0UcfpbKykjvuuIPZs2cfdD6z7lxuSUmJ/49/SUmJ/3xxIGRlZTFkyBDmzZvnn1ZeXk5cXBybN28mMzOz3khyu92OzWZrcr1ms5nbb7+dU045hQ8//JDp06eTlZXV6Pp+/PFHKioqcLvdWK2+P0eH+lBwYP3HH388V111lX9aSUkJ4BvZfd1113HttdeyaNEirr32Wr766ivsdjszZ85k5syZfPXVV/z2t79l8ODB/g9sB667bl0ApaWlAPXOwYsEmg6DS9gpKyvjzjvvZOzYsUybNg2AGTNm8Pnnn1NeXg74rlm+9tprATjjjDPIyclhx44dAHz33Xc8/fTTB6137969/PnPfwZ8PcGBAwfi8XgOmi8jI4Nx48bxzjvvAL4wWLp0qf+weCCcccYZrF69ml27dgFQXFzMzJkz8Xq9TJgwgdLSUn766ScAqqurufTSS7Hb7c1ad0ZGBtOnT+fll18GOOT6RowYQWpqKh9++CEA69atY/v27U1uY8aMGXz00Uc4HA4AVqxY4f+gdeedd1JUVITJZGLMmDG43W5MJhOPP/4469atA3ynMiIiIjAauHJ1xowZLFu2zB/YCxYs4Nhjj/V/sBIJBl1nLR1aQzdFqampYfLkyVxxxRX1boqyaNEiXnvtNaKiooiIiOBPf/oTvXr1AuDLL7/0j5yOiori/vvvx2az+UeDjx07lmeffZYHHniAbdu2YTabiYyM5IEHHqCyspLbbruNrVu3MmHCBJ588kmKi4u57777KC4urjcavKysjKuvvprVq1dz8skn8+c//5lrr72WrVu3MmXKFB555JEG9/ORRx5h0aJFGIbB9OnTue222wDfzVj+9re/4XA4GDduXL3lD9wnk8nEzTffzIgRIwDfkYPZs2djGAaGYXDVVVcxYcKEg7b7y5uizJkzh6SkJHbs2MGUKVMYPnw4s2bNorKystH1/fTTT/zlL38hMjKSoUOH8vPPP3PuuecyY8YMHnnkEd566y3S0tL41a9+xRVXXOHf9gsvvMB///tfoqOjiYuL4/777yc1NZUFCxbw5ptvYrPZsNvtXHXVVZx++uksXbqUf/7zn1gsFux2O9OnT+fSSy/1jwZPS0vjjjvuIDs72/+z8MvR4P/617947rnniIyM5M4772TDhg28+OKLpKWlce+99/rPy4u0NoW1iARVWVlZvfPUZ5xxBrfddhvjx48PXlEiIUaHwUUkqP74xz/6Dznn5ORQWFjI8OHDg1yVSGjRADMRCapx48Zx1VVXERMTg9Pp5O9//3uDI8JFwpkOg4uIiIQ4HQYXEREJcQprERGREBey56wLCysPa7nk5BhKS6tbuZqOTW3WMmqvllF7tZzarGU6Unulpzf8FL8O17O2Wi1NzyT1qM1aRu3VMmqvllObtUw4tFeHC2sREZGOJqCHwV988UX27t1LdHQ0TqeTW265BZPJFMgSRERE2p2AhfXatWtZsGCB/zF2N9xwA59++imnnnpqoEoQERFplwJ2GHzHjh1kZWX5X3ft2pWvv/46UJsXERFptwLWsx46dCiPP/44DocDm81GTk5OvfD+peTkmMMeNNDYaDppnNqsZdReLaP2ajm1Wct09PYK6B3Mvv76a1asWEFycjK5ubnExcVx0003NTjv4V66lZ4ef9jLhiu1WcuovVpG7dVyarOW6UjtFRKXbiUlJXHTTTdx+eWXU1FRwdSpUwO5eRERkXYpoKPBH3jgAUaPHk1ERAQnn3wyffr0CeTmRURE2qWAhvVrr70WyM2JiIh0CLopioiISIhTWMsheb3w4YdWvvrKgsMBb7xh5YMPrBgGOJ3gcvnmef11Ky+8EIHHE+yKRUQ6npB9kIe0PY/dw7YH9rC7yktBgZvvv7MQGQUJCQa78sxYrQYWK5SV+e4y970F3B7YA7wQB9XVYDJDbKxBeblvnldnG3jcYBjQp49BdIxBpA3S0gzcbvBkRNLr7kzM0fqcKCLSXArrMGQYgNdg5dTtJOaU4cD3gzAWoAIogF4NLXhgr9m+738vUH7A9NIDvl69/8sDZ/nio2oS/twNt9fEwIFedu82UVJrZcxpFkwmqKyEhITD3buDOZ2wfLmFHj289O4dsCsVRURajcK6g9pbvZcHvr6XSucvrj3cmMSE5yfSxZ5Ilj2RClstzwz/EpfZQ1q6QVSkgdNpIjHR8B/qTkwCE+BwQlQkeA2oroKoKPB4wG6HpCTf6svKIDLSN7201IRh+HrgbreJCK+Fq9YcR9pO4Dfl2IAd+8qKA17vuoO1nfJxOH29+8hI32H2mBhwOKC62kRcnIHVCrW1vu2bTFBTs7+WykoTUVG+ZaurfR9MampNuF2+7cTEQESEQVQ0xMcZmMywdfg2CnoWNLttIyOtOBxuAI7OGMWNR998uN8mEZFmUVh3UC/mPMebG173v452RBPjiOGxlx+jR1F3AGoiavjLBXfzQ+8fWm/D3Q79ds7Ybtz8/s2kVqbWm96pohMj83owMq9H69XSTMcuHMucKXP48qgvKY0r9X0yaaYPt73HmX2m0TtRlyGKSNsJ6B3MWkJ3MDsyF8y5kGMXDqd2ZCdSd/di7CfxWPelUF68m9w7SqhM8NJvtIfExGjKy2uCUqfd7usVe0tM7H4qjlSviaQk2LrVjGFAVJRBYaGZiAiDrCyDvDwTXq+J1FSD4mJfzz01zaCkxLdv3bt5KSkxUVsL6Z0MIm0GtkhITzNwuXy9/epqE7t2mSktNZHlMnNqRaS/nj1RHraNqsFca8LTxU3KNVVEJtf/Falrr+fWPMNX+V/yePYcLhl0WSCbrV3R72TLqc1apiO1V2N3MFPPOkis331D5HuL9p1AbhnDgKpyG3FJznrTvV7YvSUJW2YZFy8+m94FvWHNAe/jwWNyMv6Uz0nNq/ZNXAsxMTaqq+uvKygO7JymNzLPgCPcRuK+/wf52svphDVLe1K7szdWTwyZtTYyl8f55vkOvO/G+drNVknagO1YoqtJSneT3q2U0hgzXyXAiv/O4bdvbjzCwoLHedoUXMefEOwyROQQ1LMOkuTs47GuzWlyPi9mzHgPeG1hHXdRyMl0ZgF9mYsZLx4iWMfdFDEeAzcmrJTG7iWtKhYvkRzFw3RiCdCio7xhxcBMEcdRznCsVFDKGMoZ1uC8NgrxWCr5os8elg1ZwNvvlGKlimj2BLjqI+fp0pWSH9a22frby+9kKFGbtUxHaq/GetYK6yBJ7dsNc0U5VXf8CSMyqsF5vny+J5a8DOKO34LX5KH4h0ysrkhiXLH+eZy48GBgwYwNK9598e60OPn04ue4KXEUzhozqV0a7znHxUVitztafR87gqoyC85aM+uXplGzLRWL2USEIxqbEdHg/NWWakyG77I0a68CIqJ9A9GOOqWAuKTQuwg9dtb9mBwOirbuwohrm6cWtZffyVCiNmuZjtReOgweSmpqeKVXOS+ONOHsvbTBWVLXdOPmvHEA2Ff0xeI1k7CvT1xhq+Hf2Z9w3rKTSamN8y+zN66Mf13zKjvdGyn3FPP4ZXOxdp+IFTjUGem49HhqOsgPemszA1HAiAOmJcTH8cm/SkiM9rLwlecY+lMWeKNJr0gm1h2zf8Yt3f1f/rCuG5WRvg9Ea/vl4TUbRNXY2Hb8Vmp7lWGuicA9sAQjovHPzpGWSK4f+Qe6J7TeILyoN17FumE9lm1bcQ8d3mrrFZHWpbAOAlPBXm4/FfbGGZD/JdNWTePYjcfy7KRn2d5pO3E1cTzx1uUA7EzdSfdi3x/9V058hbVd17Ku6zrKY8uZP3YuSVVJ/vWWxJXgsfh6b0mRSYzNOjbQuxYWIqNMHHOuDYBuvRK4YukVAES4Ihi0axDlMeV0Ku/EpNWTcFqdpFekM3rraKKrfb3xTquP8q/r+PX7T9RX2arYk7QHj8VDfnI+ZbFluCwufuj1A/nJ+cTXxnNv6Z/51/SXW21fPL36+MJ66xaFtUgIU1gHwd5da9kbB4kuC7PS36ffh5FYMDF86zFs7GzQPd9EstdEgc0g8u00vn3aRWQ/g7POO4ezOKdZ2+id2Ie4iLimZ5Qj8qujLiIhMpFKZ8Uh5/t680YMlwlPoRUWx2NEesFroteqBCI8ZrwYdK6JpU+BL7z77+7vX/a8Fef5vy55s4Q3H84hwhmPbXQc/S+Iw2yBHsfaiIhq+WgET2/f9ixbt7R4WREJHIV1EKzOX0VsbSzT1o4hckknLFRQaIok3etgeJ7vD+6u1AT6Ptud3kMi4akgFyyNspqtnNVnWtMzDjzg698e/LZhwJolblxFbmIsXtZ96sSo9BDrccOKMmwON+7oArpUppCyzQE4YFcRrkW+5VdavezKcBNVbaa0hxvTaQ68Logf4SL+KO/BG9zH1r2GSVEQpbAWCWkK6yBYXZLD7FdnMzhvMFBBhcnKgC8G8uk8JymGk6EnmDl1Whwms8ZthwuTCYadbKXuV3LgOQec+yYDgI3FEVw/6yo6l3TGhIkT1p1At+Ju2Nw20ivTSd7lOzRPqRV+3D9ocXfSbsxeMzvSd/BDrx+IdkaTl5rHV/2/wmV1kX4trFq1noaHzIlIKFBYB8H2zbVMyRuMy+xkR3IGqb9JJ6u/hZmPRgPRwS5PQlT/1P6cP/Milub+D4AlfA74euXxP2cRtzsRV4yDvqsG0GVPOm6rh957M8kqywIgoyKDsVvGHrTe4rhiFqT9hOeY73EnG1jG+B7QEt3XS+dTvJjM0D95AImRSQHbVxGpT2EdYIZh0Hmt79rd0swCpv14XJArkvbkqmHXcNWwaw5+48yG568u87LrBxcmM2z6TzXVa6oxx1mwrq+ke0UlBgap9lRS7RMAA7YB39ctbSYvJZ+CxAI+SfuY4288h+zTBrfNjonIISmsA6gwv4ov/reGE9ZmA9Bzki24BUmHF5Nkpt8E3+1U+46PBJL3vZMJgNdrsPrU0/k4LoHC9ExSirrRLb8zhsmgz+6udC3x/Tt6G3gureaDhC/Z3bOK6ulFxBxTxYDMAZzYdXxwdk4kjCisA8Tt8fDVqZ8yoLArkEpxwk6GntOZxof+iLQ9s9nE+G4pTPrwPQyrFcz7nzPuNSxUWvpSZY7l3z3HM2LLRHqWR9NzdTSsTgNgV/IuFsf/jim7cogx5RFpLm9wO2l160xKpnzBB3j69W9wPhFpmMI6QF6du4QxhV2ptdZSHltIYsy/IOPvwS5LBMfpZ2Jb/F9Mbne96RYgiTUkeeDyXSt4atzf8br60WXPiXTdM56o2lS6lHaB0l/zE+AxeVjdcwnru67CbM3jrpXr6V7pu8lL3VBJS8FeIhe9Q/WtdwR0H0XaO4V1G1vyfxVU7XBi37oVGMWqUaX8+cffYCp3UJjeKdjlieA4/0IcM871PdnkEK77xWu302Du4//B+CKPbsVd6Z/fn6M3T+TozRMBWJ5YwMLuMbiTwXVmOZ1SltNjztMc//XyNtoTkY5L9wZvQ/ZiLxsHf0Okd/9nIvPznTjpysF44+Ip3roriNXtF0pt1h6overLq8ylqKaQop9g9xwTEfkGmUWlpB9wd706tdZa8jJXYBp8Aba0GHqeFkPvk2xYo3yH5MVHP2Mt05HaS/cGD4LPn91BzwOCen16Jecf5ftGeDupVy0dQ9f4bnSN7wYT8f0DyuwVPDH3eWr3VNFpWwZjfziKxNpootxR9M3Lhjzf08k8r8EmwGF1kNMthy0ZW6iNctN19DH89vrzsMUowEVAYd1qzNu2Yl2/rt40+4cVQH9W9fueHuUDGDXVie3D9wDwZmQGoUqRwEiKS+Avd9wE1O/15PzmWt4ucmJxZ5Bamcrg3MGk2FOIdEcyatsoRm0b5VvBUlj/6LeURDnJy6ikLLMKT6SH6oEVcFwJUelmzhlwXqs+1EQklCmsW4PDQfKkbMzlZf5JBtA19jUAMs3P8auCdfDc/kW8GRmBrVEkBIw6LZvs636Du3Nn3MOGQ/dVAFTbo9md24Pa6gR+jvFCVR96FPUgvTaK9B1RsCPdt4JlwLPgNrv5LuMLityLyLBUk5RaQHrWHqzWll9f4cw+hdpf/6YV91Kk9SmsW4F5Vx7m8jKMmFicJ/muOd1dlEjSt50piynj+H6dcfTqtX+BCBs1190YpGpFgsd14niw2YjIzyciP98/PRpI3ff1aOCzXvD5ICtRtZkkVAwk0tEJqzuOpLJhxFT3xOqJof9u3w3Xy4CyPbD9Z6i2VbOt02ZW9/yOPcn5DC7dwv1fbsdK40NzbIs/wnHWdIz09LbabZEjprBuBZZ830Ax99BhVLz8Bg+/8Xf6PtyVQcDqnpsZ98ICDv1MJpHw4M3IpPSTZVi2bzvkfKP3/WtYBUWlRTzw1WK8BRYyyzIZlDeIHkU9iHHGMDhvGIPzhvnn/sTqoCrCSUWineruJRgptVj7VBA7sILIjz/g2GWbSPnkI2ovmtlauynS6hTWrcCclwuAp0sXvtn2PWP/3JfM8kwK4wuxXxKSg+1FgsYzcBCegYOOaB0JwCMXzcDu9N0yFcDjNijP9bL2NQf2FQ48xXtJLy8isyKDaHckaTXxsCfLv469CXvZnJnGp0M3c9qrX9Kly/l0HRlBVIK5ka2KBE9Aw/q5555j165dJCcns2PHDh588EGioqKaXjDEWfJ3Ucpw8kuG887fP+KS8tPITSgj4rVkbh4zMdjliXRYcbYDLnOxQdIA6PF/dRN68HX+cuYu+yem/CiSN2TQaUcn4iti6Z/XhYyKDDIqMhi3cRwAjvNyWGdxsq7zZgqSiyhPcdI/+3iOnzSQrF4J2Cy6PbAET8DCurCwkHnz5rFixQrMZjPXXnstixcvZurUqYEqoc04N+9lNY/g/tzCCWm+Xnbl+B6cd0zfIFcmEt6O6zyO4y4Yd9B0j9tgw8cO8r+upezTOXid3UmtTCOzPJPhuYMgd9+MS8H+lx18E1NKQcoGPLYirBElnOLcQdeoQsym/UfOvOnpVDz7AkZK6kHbEzlSAQvr6OhoIiIisNvtJCQkUF1dTb9+/QK1+Vbz8sPL6Nw/jYnn7D+Mt3dtLWDDakDPwp44zG5Ouadn0GoUkUOzWE0MOiOKQWdEEdUnC9dfbqDGCp7YBGq9g3CSwpqk/ridw0ivyCSpOpmk6mP9y+8Etps8VMQWkNtpDUWJO/FW7+WU+x5l4N8e0g1epNUF9A5mCxcu5L333iM9PR3DMLjnnnuIjY1tcF6324PVaglUac3y+YcbcZ+ZS35SITNLLvBP/6T7ZUTkXuF/vb5PPNdsHhWMEkWkpQwDNm+G6uoG3/Z6DVZ8vZcvl2zCU2zGXVDFgNwedKpo/MZGVRG1rOu2g70ZhThiPQw84TjOOGs8yd2txKeF1t81aR8CFtbr1q3jtttuY8GCBVitVmbNmoXZbOa2225rcP5QvN3o83/+jGOfTQIgcllX+h7lu1b686F/Im3vDL4ctI40VzZjnuhE9zHt5/xWR7pVXyCovVqmo7WXYRj8VPgjRRVllKywYl9ixbQb0vJySCvrR3xtw7eLrJOXkkthQgEeixtzTClHRUKEzU1Mp3Ji0iuwmcwMsqVSW+Oqv12LhdoLZ+IZPKQtd69d6kg/Y0G/3ejevXtJSkrCarXuKyid3bt3B2rzraJqcxmQBMDXH66n71EZmCrKcXu6AmAfB799sGvQ6hORtmcymRjeaSR0AvoCl/imRyyppujaqeSnm8CTiuEYCZ5UdkenY/cOIcWeRnxNPF1LutG1pNtB63UB5YDT4uTHpFxspl1gclETvZOq2G0YliqGfPk1/d//GEtcdAD3WEJBwML6xBNP5PPPP2fWrFnEx8ezadMm7rrrrkBtvlXY9uz/pFv0ve/exuZdu4ip7glAr2MU1CLhyjXhFNL/9m8yduUe9F6tUUQpO3HXmihYH4+zzEaBs4ZtJbVEVscS44ihS0kXkquTsXlsdCnuA/Q5aD1eYE3fnyiPrqI8ppLyGDsVsXYqB1i47J5pZGUk11/AqqtzO4qAfSctFgv33ntvoDbXJtKK9x/ajs51AlD5fR4J1enUWms5PntgsEoTkRDgnHJGo+/Vxeih7pPm9RqU7nXw0YdfsGP9dsy1ZhI2J5FYGENsrYOU6ihS7emkVSWSVpW4f8G1sOO/OaxKX0EP1zJO3rMCCx4cZ06j4oVXWmXfJLj0sauZPB4vXcpS/K+7FsaD2836ZduJJJW81J2MSjj4EhERkeYym02kZkXxhzvObvAcrOnOG9n+0Rt43Yl4vUkY3iSqTBnsNU6nS/EA4nMnAZP4b1Q5eelrMDZ+w4nvLiNj6kmB3xlpVQrrZiqYNYeE2hOoiajB5rbRvbgztf27YkSeB4yiJLEw2CWKSAdnPPwkPR5+8qDpHo+XZe9vYPUba+i72kavom4clXsCcAK7r3bx1d3vsLVXKeOuncixU/SksvZIYd1Mu/63kmhOoDBpO1HOaDqV9yTH8R+i7b6BHhVZuq5SRILDYjEzYdpAJkwbiN1Rxf8+Xk3ZeyXEf5NH3/xR9N/bg/57e8CKIpYkrGVb5nq6phXTJ7OaXsle4k0RAHgGD6X24kuDvDfSEIV1c3i9lFWaiQbyUkzYjBQ6lUO0K5odaTtY1e87xt99ZrCrFBEhLjKWqVOPh6kQd80V5P3vL5SYj+K7hIl0330inSo6+a4R3wi1wIroMspSPyfavI5OH37CkKMGY4zSfSJCjcK6Gcw7tlNtdAagJiuS0+86gW8fLaXH2bGcNn0Ek03TMZt0838RCS1VDz1K5rsnkOVyMhgodn3Hzk02Vq1zEbMnncyyTJKrk0nMmwZMA2DpeXvZlvlfyrvZcRxbzqSzxjGirwbPBpvCugHbNxWRM+0rtg53ceO/z8G69mdMDt9lFDH9kugyIoIurzZ+9yIRkVBgpKRSe/mV/tcxwFH7/oFv9Pn7r//ApoU/kZpvo+/udNLsGaRtBjZ3giXAw9UsiVnKhl4FlPQuxdzbwmW/PoesrOSDNyhtRmHdgA/+toLsoi70+sz32rP6J7KKxwNw3Lm6e5CIdAxms4mplxwNlxwNQM0Fp7OouAivdwAJZUeRWDaYuOoMOlXH0+nnePjZt9zeuevZGr0Le2w+panrsCfkEWkpY+aeUlJc9Y8yGrExVM59FvfQ4YHevQ5FYd0Aa2yE/+vN6wqoWLmdaNdk8pN2c+pIncsRkY4p4be3cMOvZgDrgUUArEk3sapTb2LLR2NzdKPa6Efnor4k2XuRZO9F1737L1ldFVmJO2ozzsg92OPXUROzBaupkDOfeJCI598Kzk51EArrBrir9t+p7KsF60kuiqI3sCOrOHhFiYi0MdeEUyhauxWTff813p2B6QfO43XxxprF7F3vwLopkcT1qcSXR5NUbSajMhUcIwFIL5jiX+abzSXsHrqYimQT9v5VMNpO3GCDs0ZPIS06LTA7184prBvgqXT6v7Z+9iVGte+51M6hKY0tIiLSIRhpaRhpjQeoBbi4d/+68Wh+Lo+L5xa+QWFOGVHb4knfmEJKaSyZdjOJ1SkkVgN7gfUp8K5vme+Sv6YgyUtNkpOq3hUkjbQxfVw2KemRhy7SZPLVaAqfS2YV1g2ILC0FfDcOiCuJI73Ed5565PRBh1hKRCR8RVgiuPacmXBO/emmzxaz6MGLyY/qSmx1Z9JKh5JY2YvY6i50Le1M19J9M/4AzId8CliTsJ3dqWspS9hJv4pcztiWSwz5mPH411s77Wwq//lioHYv6BTWDbDW7P+B6LZnDDaPjaK4Ek6YMDKIVYmItD/GhIlc8tJIIr5dBWwDlkMUuCPNfJDeme22LKJrMkgsG4DF0ZVkeydSK3qSWtHTv45vAY/JzZ7k7eSlb6Qsbhedt2xm0rIfSTlpRHB2LMAU1g2wOPYfWrF5fA/vWH18JeMtupZaRKRFzGYqXv53g2+dsO9fHY/Xw7Ity9mxuBL3dxEYuQ5sFbvoUtqJjLIMupT0pUtJX//8u8/18FPs/9jZaTc7u+4hvcswjh0/jsFnRWO1daxD5ArrBkS4LPVefzlwE7976fwgVSMiEh4sZgsT+p0E/fZPq3JV8XNRDqVlHvZ+YlDzg4mI7cXEFRXQrbA/6VWJpG9LZNS2fVePv7GOH35fza6UPAqTdtE/opK+CTUkZZQSG+kl3uu72sewRVJz3fV4+vRroJLQo7BugM3p+2bmjPyAgm7Dufyx6VjUqxYRCbjYiFjGZh0DWcABN1KLmnkuG1Z/isvIxOvsz57IfmxKyKR7wVF0LutMvz396benPwBlQJHZzYbOG3DEruaEgtV08uSQVVJMxb9eDcZutZjCugGRLt+h7y6Zbn713LQm5hYRkUBz/P1Z+n/2CXg8JMRHUVFZy0TDwKCM8j2V5G+zsGRHLqbiKLJKsuhW3I3BeYOBwVRzEZvNbt7IfYpf19Rgio4O9u40SWHdgChXFABxCU1cPiAiIkFhpKTiOO8C34v0eBwHPP87Bui771+d8nwPX76yg/XL/0ePHYkM3N2b0Tm/4x9nz2Pwz2PJ6xvFtLeGEZ9W/zRoqFBYNyDa6fuUlZAS+p+2RESkaYmdLZxxe2/OoDcAH419gW7bh5P9nW+IW3qOl6+OX8yOqRYuf/AUbJGhFdoK6wbEOGMASOuUEORKRESkLUyaczTrzltFjbcX3474iB5bxtG9uAddX4al771HdbeV2KKqwWshCi8nZ5QRH1F/HUZKKlV33YORkNjm9Sqsf6Gm2kWUKxovXlIyk3AHuyAREWl15rHDGZd5BdbtW5iyCmrN/2JR99Mwl11Cl9JuUNqt3vyrIu3sylxCX+dHnLR7rT88HWdMxXXi+DavV2H9C7tzywCoiazGnBAX3GJERKRtmExUvPMuEd+s9E+aAthrKnht0WbMO+OwuWx4LB7iq+LoU9CL/jvOAs7ijeRdlMaVg8nK0fED6R+AchXWv1CYbycOqLHZMWLb/tCGiIgEh7drNxxd6/egI4DLLzp43k/fWceG539m6M/JdC3tQtfSLgB8/+Vm+o/o1Oa1Kqx/oWSPL6ydEdUYsZ2DXY6IiISAiWcPZOLZA3HWeHnvmZ+orCwjc3gCv5p6XEC2r7D+hYrCKiACl7UKIyY22OWIiEgIsUWbOeemEQHfrm7L9QvVpTUAuK1VGLEKaxERCT6F9S/UltUCYJgV1iIiEhoU1r/grnD4vjDrMLiIiISGgJ2zzsvL4/LLLycrKwsAu93OgAEDmDVrVqBKOMiqV5dR9ZcK8kdu5uK3/+CbaHf6/jfXQEREo8uKiIgESsDCOjY2lv/7v//j+OOPB2DOnDkcd1xgRtE1Zs9rH9Kn4jwqN2/1TzPbXb7/zbXBKktERKSegB0GT05O9ge10+kkJyeH0aNHB2rzDXLj6zlb3PH+adZaj2+a2RmUmkRERH4pKJduvf/++5x++umHnCc5OQar9fBupJ6eHt/0TIDb7HtQR6Qzwb+MzWkCIMLqafZ6OoJw2tfWoPZqGbVXy6nNWqajt1dQwvqjjz7iqaeeOuQ8paXVh7Xu9PR4Cg94VNqhOL2+nnW0I4HC3aVgtWKr9R1siLC4m72e9q4lbSZqr5ZSe7Wc2qxlOlJ7NfahI+CjwVeuXMmIESOICIHBW4bH14uOrY3H2LMHgCin7/NLpM0IWl0iIiIHCnhYv/nmm1xwwQWB3mzDfKenifBGULJ2OwBxtb7HY6ZEm4JUlIiISH0BD+vHH3+clJSUQG+2QSb3/kDeuy4XgOSqJACyEkPrweMiIhK+wvqmKCbv/rAu21HAnrwKYp0xOC1OMlNjgliZiIjIfuEd1p79YV1VUMamNb7z1uWxxZji9CxrEREJDWEd1mbv/kPdteU15G8qAaA6qlj3BRcRkZAR3mHt2R/WnmoPZTvLAXDZinVfcBERCRnhHdYH9KwNhwnH3irfC4t61iIiEjrCPKwPuCeMy4apxHdf8AgU1iIiEjrCOqwtB4S1yR1NVIXvRiix3mKMWA0wExGR0BDeYe3ZH9ZmbzxpFb6HdyS61bMWEZHQEZR7g4cKi3f/LU+trgRiXL7edLqjCG9GZrDKEhERqSesw9rq2R/WFlcyCdXJAJhv+xOeQYODVZaIiEg94R3WB/SsU6pSiNl397JOl50bxKpERETqC/Nz1vvDOsbpu71oSWwFFktYN4uIiISYsE6lCI/toGmlMVVBqERERKRxYR3WB56zrrO7uysIlYiIiDQurMPa5vb1rNdlbQfgi8Gb+PUbM4JYkYiIyMHCdoCZo8qB1WvFi5f+845h3ff5XHPtBcEuS0RE5CBhG9b2Qt9DO5xWJ6OO6cqwY7oGuSIREZGGhe1h8KoSOwBui85Ri4hIaAvbsLYX+8LaZXUGuRIREZFDC9uwrq7rWZvVsxYRkdAWtmHtqKwGdBhcRERCX/iGdUUNAB6FtYiIhLiwDWtnlQPQYXAREQl9YRvWrn1h7bG4g1yJiIjIoYVtWLtrfKPAPepZi4hIiAvjsPaFtNfsCXIlIiIihxa2Ye1x+g5/e8w6DC4iIqEtbMPa6/CFtNeinrWIiIS2gN4bfOvWrXzwwQdERkbyzTffcMMNNzBs2LBAluBnuLy+/3UYXEREQlzAwtrj8TBr1iyeeeYZzGYz06dPx2oN3nNEvE5fSHvN3qDVICIi0hwBS8s1a9ZgGAavvPIKtbW1JCUlcf755wdq8wdzGwAYFiN4NYiIiDRDwMI6Pz+fH3/8kccff5z4+HhuvfVWIiIiOPvssxucPzk5BqvVcljbSk+Pb3Ies8cEgCmiefN3dGqDllF7tYzaq+XUZi3T0dsrYGEdGxtL7969iY/3NeioUaNYtWpVo2FdWlp9WNtJT4+nsLCyyfm8Ll+P2ms2mjV/R9bcNhMftVfLqL1aTm3WMh2pvRr70BGw0eDDhw+nrKwMj8d3rjg/P5+ePXsGavMHMe3rWQd2iJ2IiEjLBSyqkpKSuPXWW3nooYdITk6mpKSE3/3ud4Ha/EFM3n1hbTEFrQYREZHmCGi/8tRTT+XUU08N5CYbZfKfs1ZYi4hIaAvbm6KYvb7Ba+aIwxvEJiIiEijhG9aefWEdqbAWEZHQFr5hXdeztmmEmYiIhLYwDmtfSFujI4JciYiIyKGFbVhb9oW1RWEtIiIhLnzD2uML64iYyCBXIiIicmjhG9ZeX4/aFhcV5EpEREQOLWzD2urZF9axCmsREQltYRzWNkA9axERCX1hGdY1FTUk29MA6HfSwCBXIyIicmhhGdarF6wkwhtBYfweUnt2CnY5IiIihxRWdwR55dRHsdojsA6NYhCjKU3YHeySREREmhRWYX306gkArHd8B0B1XEUwyxEREWmWJsN64cKFTa4kOTmZ8ePHt0Y9AXFU3igAjLQgFyIiItIMTYb1M888w8iRIw85T1lZWbsK6zqJ/XW+WkREQl+TYX3MMcdw3333HXKehx56qNUKCqS+k0YEuwQREZEmNTkafPv27TidzkPO8/vf/77VCmpLTsv+/bBH2uk/XpdtiYhI6GuyZ+1yubjnnnuIi4tjxowZDB48+KB5YmNj26S41mYyTP6vixLzsFj1LGsREQl9TYb1Qw89RM+ePSkqKmLBggX885//ZPTo0UydOpWEhIRA1NhqzMb+AwkV8YVBrERERKT5mgzrnj17ApCWlsZvfvMbAL777juuueYasrKyeOyxx9q0wNZkMXw96e9HL2HEdROCXI2IiEjztOg66/Lyct59913efvttduzYQZcuXdqqrlbncrj8X8/88NYgViIiItIyTYb1008/zYgRI3j77bf57LPP6NOnD7/61a+YOnUq8fHxgaixVbgdbgA8Jk+QKxEREWmZJsN6zpw5xMfHc+aZZ/LGG28wcGD7HEHtrHEA4DV5g1yJiIhIyzQZ1hMmTOBvf/sbNpstEPW0Ga/T17P2mhXWIiLSvjR5nfWsWbPafVADOGt956wN9axFRKSdaTKs685LFxcXc/vtt/P73/+e6upq7rnnHsrLy9u8wNbiqetZK6xFRKSdafbzrB955BFGjx6NzWYjJiaGCy64gL/+9a9tWVurcu8bDe41GUGuREREpGWafelWRkYG5513Hjk5OQAMGjSoxaPBzz//fCIjIwEwm8289NJLLVr+SLj39awNjQYXEZF2ptlhXVZWBoDJ5LtlZ3V1Nbm5uS3a2IknnsgNN9zQomVai9vhC2n1rEVEpL1pdlgfd9xxnHnmmTidTq6++mpycnL405/+1KKNbdy4kXnz5uFwOBg6dCjZ2dktrfewedy+sNYAMxERaW9MhmE0u6u5ZcsWVqxYAfjCu3fv3i3a2E8//cSwYcPweDxcfPHF3HLLLYwZM6bBed1uD9ZWfNDGtwtWYT+7mpLYIs62n9tq6xUREWlrTfasX3vtNS6++GIA+vTpQ58+ffzvvf3225x33nnN3tiwYcMAsFgsjB49mpUrVzYa1qWl1c1e74HS0+MpLKw8aHpZcRVWTBgmb4Pvh7PG2kwapvZqGbVXy6nNWqYjtVd6esNjwZoM65deeonvv/++wfd+/vnnZof1li1b+P777/3z79ixg4kTJzZr2dbgcbqwYsPQOWsREWlnmgzr5ORkfvrpJ84880wslvqHpXfu3NnsDcXFxfH5559TUFCA3W4nMzOTs846q+UVHyav23euWtdZi4hIe9NkWL/55pssX76cd999l7FjxzJ9+nR/aA8ZMqTZG8rIyGDu3LmHX+kRcjtdQJQGmImISLvTrJuijBs3jtmzZ9O5c2fuvvtu3n77bdxud0BHcx8pr0ejwUVEpH1q9h3MwDcC/JZbbmHhwoVceeWVbVVTm/A468Ja56xFRKR9aXZYFxQU8MADDzBp0iQyMzO555572rKuVqdz1iIi0l41ec567969zJs3j3feeYdTTz2V+fPn+6+v3r59Oz179mzrGluF/6YoqGctIiLtS5NhPXHiRLKysrjzzjvp2bMnxcXFFBcXYxgGr7zyCnPmzAlEnUfM69p3b3A9z1pERNqZJsN65MiRzJgxA4Bdu3bVe89ut7dNVW3A2HcY3EBhLSIi7UuTYX3ttddy3HHHNfher169Wr2gtqJ7g4uISHvV5ACzxoIaYMSIEa1ZS5syPHUDzHTOWkRE2pcmw3r58uVNrqTu4R6hzFN3GFxhLSIi7UyTYf3JJ580uZIlS5a0SjFtqa5nrcPgIiLS3jR5zvqNN97gzTffBMAwDEwmk/+9utfDhw9vuwpbiXffOWt06ZaIiLQzzbp0q+6e3g6Hg8jIyDYvqi3sP2etnrWIiLQvTR4GP/ByrQsvvLDeey+++GKrF9RW6sIanbMWEZF2psmwNoz94eb11u+VLlq0qPUraiOGV+esRUSkfWoyrA88R33g11A/yEOd1+OrVbcbFRGR9qbJc9Y7duzgrrvuYujQodTU1OByuYiIiAAODu9Qtn80uMJaRETalybDet68eaxdu5bVq1cTERHBqFGj6Ny5M/3792fv3r2BqLFVKKxFRKS9ajKsR48ezejRo/2vnU4n69ev5+effyYxMbFNi2tV3n2HwXXOWkRE2pkmw/qXbDYbw4YNY9iwYW1RT5vxetWjFhGR9qnJAWYdhkaDi4hIOxU2YW3sGw2u66xFRKS9CZ+w9urSLRERaZ/CL6zbz9VmIiIiQBiFdd1ocB0GFxGR9iZ8wnpfRus6axERaW/CJqz3HwZXWIuISPsSNmHtPwyuAWYiItLOhFFY+/5Tz1pERNqbgIZ1bW0tZ511FrNnzw7kZn3qnhCm0eAiItLOBDSsn3jiCQYNGhTITfoZCmsREWmnAhbWCxcu5Oijj6Zr166B2mR9dXcZ1WFwERFpZ1r8II/DsXnzZrZu3crNN9/Mhg0bmrVMcnIMVqvlsLaXnh5/0DRz3bO3zQ2/H+7UJi2j9moZtVfLqc1apqO3V0DC+pNPPsFmszFv3jy+++47XC4XL774Ipdffnmjy5SWVh/WttLT4yksrDxoute9/3ajDb0fzhprM2mY2qtl1F4tpzZrmY7UXo196AhIWF977bX+rx0OB9XV1YcM6jalc9YiItLOBHSA2ccff8w333zDjz/+yPvvvx/ITR9w6VZgNysiInKkAtKzrnPaaadx2mmnBXKT+/kHmAVn8yIiIocrfG6KUkdhLSIi7UzYhLX/ii2FtYiItDNhE9ZG3WHwsNljERHpKMImukx1I8vUsxYRkXYmbMLaT2EtIiLtTPiEtbH/DmYiIiLtSdhE1/4BZupai4hI+xI2YU3dQ7fCZ49FRKSDCJvo2j/ATD1rERFpX8ImrOt61mG0xyIi0kGET3Tt61mbzOpZi4hI+xI2Ya3D4CIi0l6FT1ijnrWIiLRPYRPWus5aRETaq7CJLpP/nHXY7LKIiHQQYZNc/nPWFh0GFxGR9iVswrrupuAmDTATEZF2JmzC2n8YXD1rERFpZ8IvrHXOWkRE2pmwSS71rEVEpL0Km7D2n7NWz1pERNqZsEkuk+HbVfWsRUSkvQmjsK47DB42uywiIh1E2CSXzlmLiEh7FT5hvW9XzRZLkCsRERFpmfAJ6309a7MOg4uISDsTNsnlD2tr2OyyiIh0ENZAbcjr9XLNNdcwbNgwXC4Xubm5PPTQQ0RFRQVk+3WjwdGlWyIi0s4ENLlGjBjB9ddfz0033URNTQ2LFy8O2LbrnmdtseqctYiItC8BC2uz2cx1110HgNvtZu/evfTq1StQm99/nbUOg4uISDsTsMPgdb744gtefPFFsrOzGTp0aMC2W3fOWj1rERFpb0yGYRjB2PBtt93G8OHDufjiixt83+32YG3FYH0l7Xm6Ffeh/N5Cpv3lvFZbr4iISFsLWM968+bN5OXlkZ2dDUDXrl3Jy8trdP7S0urD2k56ejyFhZUHTTfvOwzucHkbfD+cNdZm0jC1V8uovVpObdYyHam90tPjG5wesLC22Wz85z//Ye3atbjdbrZs2cKf/vSnQG3ef85al26JiEh7E7Cw7t69O3Pnzg3U5g5SF9ZWW8BP04uIiByRsOlm+i/ditAAMxERaV/CJqzrzlmj242KiEg7EzbJVXfpljUyIsiViIiItEwYhbXv8LeusxYRkfYmjMK6rmetAWYiItK+hE1Ym/2XbqlnLSIi7UvYhLX/dqORtiBXIiIi0jJhE9bmfeesrRFhs8siItJBhE1y6Zy1iIi0V2ET1nXnrC02nbMWEZH2JWzC2n+7UZ2zFhGRdiZswtrs3RfWEToMLiIi7Uv4hHVdzzpadzATEZH2JWy6mf6wjlBYi4i0pbVrc/jHP57E7XYzZswxOBwOAGbOvIL4+Iaf1wzw1luvc/75FwWqzHYlbHrWdaPBbTE6Zy0i0pYGDRrCyJGjGDJkGFde+Vuuu+5GRo4cxe9/fw1ut7vR5d56698BrLJ9CYuetcftwVJ3nbUu3RKRMHLRRdF8+mnr/t2bONHN66/XtGiZ444bx7/+9U9WrvyahQv/w/DhI9m5cwennjqZMWOO4bPPPsFur+T555+lR4+eHH/8idx7750HzReuwiK5vB6v73+8epCHiEiQZGZmkZ+/i/PPv4gxY46hoqKcm2++gTFjjuGUU07l6aef5MorfwtAbW1tg/OFq7AIa2e1EwDDZAS5EhGRwGppD7gt7dmzm8mTz+CHH77j55/XYLFYKSsrbXBewzCaNV+4CItz1m6nCwCP2RPkSkREwtOqVStwOp3k5eVSVFTI5ZdfxQUXXFxvHrPZjGEYbNq0kffeW9jofOEoLHrW7hr1rEVEAmX9+rWsXv0DLpeLF198DofDgdvt5sknn6a0tJSlSz/jqaf+TkJCAna7naVLPyM7+xSOP/4E5s59AoCpU2c0Ol84MhmGEZIJVlhYeVjLpafHH7Ts3k27KRqXT01EDaN3ndAa5XUoDbWZNE7t1TJqr5ZTm7VMR2qv9PSGL20Lj8PgjrqetTfIlYiIiLRcWIS1x+k7V+1VWIuISDsUFmHtqvUNMFPPWkRE2qOwCGuPa9911maFtYiItD9hEdZ1l24ZhORYOhERkUMKi7D2unTOWkRE2q+wCGu3Q+esRUSk/QpYWO/cuZObb76Z5557jgceeIC5c+cGatO4nb6nvKhnLSLS8WzcuJEbb7yGDz9877DX8dZbr/u/Xrz4v0yePOGw1rN7dz4XXXQO119/NddffzVz5vztsGs6UMDuYFZWVsbpp5/OxIkTATj99NPJzs5myJAhbb5tr9t3GFx3MBORcJNw0blEfrq4VdfpmDiJitf/06rrPBL9+/dn+PCRR7SOt976t/9Z2pMmTWHevH8c9rouueRyTj/9rCOq55cCFtbDhg2r99rr9RIdHR2QbXv39ax1GFxEpO198MG7PPvsU1xwwcVs2bKJsrJyTj/9LFat+pq8vFweeeRvLF78Edu2bSElJZU9e3Zz6613sm3bFh57bDbR0dHcffdfuO22m5g6dTrTp5/b4HZeeeVFtm/fyrBhg9m+fRtZWZ0B2Lp1C6+99hJ9+vRlx47tXHrpr7FYrPz973/F5XIxZMgwcnN30LNnH2bOvJxFi97xP55z8OChHHvs8QC88carbNiwnqoqOw8//BgWi4WFC+ezbNnSg2oZPHiI/4lhy5cvo6ysFLvdzqmnTqZXr95H3qhGECxevNi4//77DzmPy+Vuve39/UNjCUuMfye93GrrFBGRxl1yySXGV199ZRiGYVx77bXGW2+9ZRiGYdx///3GRx99ZHz22WeGx+PxT1uyZIlhGIZRVFRknHbaacbLL79svPvuu42uf8OGDcaUKVP8r2+55RZj/vz5hmEYxvnnn2989913hmEYxooVK4zrrrvOMAzDmD9/vnHLLbf4l5kyZYqxYcMGwzAMY8KECfXWP2HCBGPbtm2GYRjG1VdfbaxZs6ZZ+11VVWVs3LjRMAzDKCwsNCZMmGCUl5c3a9lDCfiDPFasWMHKlSu56667DjlfaWn1Ya2/oXvEVpRWkUo0XpO3w9w/tjV1pPvqBoLaq2XUXi3XEdrM6XQTG5tCYWElNls0CQlpFBZWYrVGsWdPMZ06ZXDffQ+SmJjE2rUb6Nat9759tjFz5pU8/fSTvPXWokbb4fvvc8jM7ExhYSXp6fGkpmZQWVlLYWEl69evZ/Hi/7F06XKcTgcWSwSFhZVUVtaSmprhX2dGRme+/z6H5OQsPJ76+eDxeImJ8dUfHR3Hrl2FZGRUsmDBf1i69H8H1TN48BCuvvo6AJKSMvetK5LExGRWrPiekSNHNavdGrs3eEDDeunSpXz77bfcfffdFBQUkJ+fz8iRR3aeoTkMT905ax0GFxEJBX/60+28+OK/yczMpLq6yj/d6XSydu0azjprOnPn/o2bbrqtweV79uxFXl6u/3V+/i46d+4CQN++/Rk//mT69u2H0+lk2bIl9ears2tXLr169QLAZPKNt960aSP9+vXfN8100HZnzDiXGTMaPiwP8N//vk///kfRp09f3G43hYUF/sPzRyJgYZ2Tk8NNN93EkCFDuPTSS6murubiiy8OSFh7XBpgJiISKN98s4K9e/fw4YfvccIJ49myZRMff/whaWnprF79A1u3bmbixEk8/vhshg0bTk7OT+zcuZ0ePXrx6qv/YsSIozn66NH87ndXY7FYuOGGmw8Kzj59+jJp0hTuvfcuBg0aQEVFOcuXL2PUqDHcccefeeONV+nSpRvFxUVMmDDRv5zL5eKVV/7F5s2bmDRpCr179wVgwICjeOaZuURHR5ObuxO73c777y+iX78B/vqHDRuB1Xro2OzUKYOXXnqefv36k5eXy1VXXUNmZtYRt2lYPCLz078uIuuvXdmZtpkpa3/VGuV1KB3hkFsgqb1aRu3Vcmqzlmlue3344Xvs3p3vHwgWisL6EZl1dzDT7UZFRMLT3r17WL58mb9n394EfIBZMHg9vnPVOmctItL+LFnyKTU1NfWmZWefQkxMTLPXkZGRyYMP/rW1SwuY8Ahr3RRFRKTdOvCcc7gKj8PgHl9Iq2ctIiLtUViEtaGetYiItGNhEdY6Zy0iIu1ZWIS1v2et0eAiIh1OKD1168MP3+PXv77E/9St886bdkR11QmPsPbqnLWISEfVWk/dqjNp0hTi4uIOaz3du/fgoYceZe7cecydO4++ffuRnX3KEdUGYTIa3Nh3GBydsxaRMHPR++fy6c7WfUTmxO6TeP3Mxh+RGc5P3RoyZP8TJjdt2kDXrt1adIlZY8IirL3+nrXCWkSkrZ1xxlT/PbIvuuhS7rzzFmpqqrjzznt44olH+eablaSnd2LatLMxm8088cRfWbVqBccffwIPP/wov/vdb1i69DMuuOASJk2a3OA2tm7dzMcff8Crr75Neno8q1f/wf/e7NkPcP31f2Do0OF8//23zJ37BA8//CgnnpjNt9+u4vLLrwLgkkvOY9y4E5g27WxeeeVfB93ZbNy4k7jggku47bY/sGnTRo46aiDTp5/D9OnnNKsd5s9/y7+tIxUWYW249w0w0zlrEQkzh+oBt7UuXboCEBcXT+fOvq/j4+Oprq6mU6cM/vGPJ0lMTGLbtm30738UAMnJKVx++W/8T91qzLZt2/zrB/wP8QDYsmUTq1at4Mcff8DpdBATE93gfJ07d2Xbtm3++4P/Uteu3QBITEzyP2ykOU/dAigpKcbpdLbKfcEhXMLaq9HgIiKhpKM+davOggX/Ydq05vXAmyM8wtqjw+AiIoESzk/dAt8Hjg0b1rXqA0PC4qlbb1z+D4Z+eAw/d1/J+d9e18iS4UtP+GkZtVfLqL1aTm3WMnrqVkeh0eAiImFNT91qBwyNBhcRabf01K0wC2s0GlxEpN3RU7fC5DC4v2dtVliLiEj7ExZhjVchLSIi7Vd4hPW+rNZ11iIi0h6FRVgb/kdkBrkQERGRwxAWYe0fV6bR4CIiHU4oPSLT6XTy178+xEsvPc/jj8/m008/PuyaDhQWYe0fYKbR4CIiHU4oPSJz4cL/EBFh47LLruTGG2/h6afnUFRUdES1QZhcuuXvUIfFRxMRkf12XLQJ+6cVrbrOuIkJ9Hi9X6Pvh/MjMnNzc/33KLdarSQnp7BmzY9HfPlZWIS1odHgIiIBE86PyBw2bDiff+57cEhlZSW5uTuoqqpqdP7mCouwjszyHc7wJiu0RSS8HKoH3NbC8RGZEyeeRlVVFS+//AIxMTEMHDiYjIzMQzdUM4RFWJ//3DWsef87Lpr8h2CXIiIidNxHZFZWVnDssePIzMzE7Xbzv/99ysiRo5psj6aERVgDDD3zyBtLRESaFs6PyCwsLGTOnMcZMeJoqqurueWWO5r1WM2mBOwRmYWFhTzxxBOsX7+e+fPnN2P+1ntEphya2qxl1F4to/ZqObVZy+gRma3ou+++45RTTiFEH58tIiIdmB6R2UyTJ09m5cqVgdqciIh0EHpEZgifs05OjsFqtRzWso0dRpDGqc1aRu3VMmqvllOb7Xf++TOanKejt1fIhnVpafVhLadzPS2nNmsZtVfLqL1aTm3WMh2pvYJ+zlpEREQOT8DCetWqVSxatIjCwkL+8Y9/UFtbG6hNi4iItGsBOww+duxYxo4dG6jNiYiIdBg6DC4iIhLiFNYiIiIhTmEtIiIS4gJ2u1ERERE5POpZi4iIhDiFtYiISIhTWIuIiIQ4hbWIiEiIU1iLiIiEOIW1iIhIiAvZp24djq+++orFixeTmpqKyWTi+uuvD3ZJIef8888nMjISALPZzEsvvURZWRmPPfYY3bp1Y/v27dx8882kpaUFudLgKSws5IknnmD9+vXMnz8fAIfDwezZs8nIyGD79u1cffXV9OrVC4BFixaxbt06zGYz3bt354ILLghm+QHXUHu98847vPHGG/6ftXPOOYfp06cDaq+dO3fyxBNPMGjQIPbs2UNSUhLXX3/9IX8Pn3vuOex2OxUVFYwbN45TTjklyHsROI2115w5c1i1apV/vmuuuYZx48YBHbS9jA6iurramDhxouFwOAzDMIzrr7/e+Oqrr4JcVeh58sknD5r25z//2fjggw8MwzCMzz77zLj11lsDXVZI+e9//2t89tlnxowZM/zTnn32WWPevHmGYRjG+vXrjQsvvNAwDMPYvXu3MXXqVMPr9RqGYRhnn322sW3btoDXHEwNtdf8+fON3Nzcg+ZVexnG6tWrjU8++cT/esqUKcaaNWsa/T388ccfjauuusowDMNwuVzGqaeealRUVAS+8CBprL0a+ltmGB23vTrMYfAff/yRzp07Y7PZADj66KNZunRpcIsKQRs3bmTevHnMmTPH3z6ff/45I0eOBHzt9vnnnwexwuCbPHkysbGx9aYtXbrU30YDBgxg/fr12O12vvjiCwYPHozJZAJg5MiRLFu2LOA1B1ND7QXw2muv8fzzzzN37lzKysoA1F7AsGHDmDhxov+11+slOjq60d/DJUuWMGLECACsViu9e/eu16Ps6BprL4Cnn36a559/nnnz5lFTUwN03PbqMIfBi4uL6/3BiIuLo7i4OIgVhabf/OY3DBs2DI/Hw8UXX0xsbGy9touLi6O8vBy3243V2mF+PI5YYz9fJSUl9abXtWe4GzNmDNnZ2aSkpPD555/z+9//npdeeknt9QuffPIJJ5xwAn369Gn097CkpITevXv7l4mLi6OkpCRYJQfVge01efJkunTpQkxMDK+99hr3338/Dz30UIdtrw7Ts05NTaWqqsr/2m63k5qaGsSKQtOwYcMAsFgsjB49mpUrV9ZrO7vdTmJiooL6Fxr7+UpJSak3vaqqSj93QLdu3UhJSQHg2GOP5ZtvvsHj8ai9DrBixQpWrlzJXXfdBdDo7+Ev28xut/vbNpz8sr369etHTEwM4PsZW7FiBUCHba8OE9YjRowgPz8fp9MJwPfff092dnZwiwoxW7Zs4e233/a/3rFjB926dWP8+PH88MMPgK/dxo8fH6wSQ1Z2dra/jTZs2MBRRx1FXFwcJ554Ij///DPGvlvs//DDD5x00knBLDUkPPbYY7jdbgC2b99Oly5dsFgsaq99li5dypdffsndd99NYWEhP/zwQ6O/h9nZ2fz4448AuFwutm7dypgxY4JVelA01F6zZ8/2v79jxw66d+8OdNz26lAP8li+fDkff/wxycnJREREaDT4L+zdu5f777+fgQMHYrfbcbvd3HnnnVRUVPDoo4/SuXNncnNzueWWW8J6NPiqVatYuHAhX3zxBRdeeCG//vWvAZg9ezbp6ens3LmT3/72t/VGg+fk5GCxWOjZs2fYjW5uqL3efPNNNm3aRNeuXdm4cSOXXnqp/zxiuLdXTk4OM2fOZMiQIQBUV1dz8cUXc/LJJzf6e/jcc89RUVFBeXk5J510UscY3dxMjbXXtm3bqKmpITU1lY0bN3LjjTf6fyc7Ynt1qLAWERHpiDrMYXAREZGOSmEtIiIS4hTWIiIiIU5hLSIiEuIU1iIiIiFOYS0iIhLiFNYiIiIhTmEtIvV88803DBgwgAULFgS7FBHZR2EtIn5er5cHH3yQY489lnXr1gW7HBHZR2EtIn5vvfUW3bt356KLLmL9+vXBLkdE9tGjlUQEgIqKCp555hlee+01XC4XGzZsCHZJIrKPwlpEAJgzZw7Tp0+nS5cueL1enE4nu3fvJisrK9iliYQ9hbWIsGXLFt566y2SkpJ49913Ad/jBdetW6ewFgkBeuqWiHDllVdy+umnc8455/in3X333XTp0oXrrrsuiJWJCGiAmUjY++yzzygoKGDGjBn1pvfr10+DzERChHrWIiIiIU49axERkRCnsBYREQlxCmsREZEQp7AWEREJcQprERGREKewFhERCXEKaxERkRCnsBYREQlx/w/okdXtwk9lBAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " N Z A Element Ebinding Eapprox\n", + "A \n", + "4 0 1 3 4 Li 1.153760 1.153760\n", + "5 2 3 2 5 He 5.512132 5.512132\n", + "6 7 3 3 6 Li 5.332331 5.332331\n", + "7 12 4 3 7 Li 5.606439 5.606439\n", + "8 17 4 4 8 Be 7.062435 7.062435\n", + "... ... ... ... ... ... ...\n", + "264 3297 156 108 264 Hs 7.298375 7.298375\n", + "265 3303 157 108 265 Hs 7.296247 7.296247\n", + "266 3310 158 108 266 Hs 7.298273 7.298273\n", + "269 3331 159 110 269 Ds 7.250154 7.250154\n", + "270 3337 160 110 270 Ds 7.253775 7.253775\n", + "\n", + "[264 rows x 6 columns]\n", + "0.007012403613997257\n" + ] + } + ], "source": [ "\n", "#Decision Tree Regression\n", "from sklearn.tree import DecisionTreeRegressor\n", "regr_1=DecisionTreeRegressor(max_depth=5)\n", "regr_2=DecisionTreeRegressor(max_depth=7)\n", - "regr_3=DecisionTreeRegressor(max_depth=9)\n", + "regr_3=DecisionTreeRegressor(max_depth=11)\n", "regr_1.fit(X, Energies)\n", "regr_2.fit(X, Energies)\n", "regr_3.fit(X, Energies)\n", @@ -2885,9 +2616,7 @@ { "cell_type": "markdown", "id": "8bead0b5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### And what about using neural networks?\n", "\n", @@ -2897,13 +2626,93 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 11, "id": "96646081", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "image/png": "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eW9dWclroyOqV69+1bRixYplKrkSERERyY5y0PBTERER8YVseD1atqcbjYqIiIiYTBUsERERcetGurrPW1TBEhERETGZKlgiIiLilipYnlMFS0RERMRkqmCJiIiIW7qI0HOqYImIiIiYTBUsERERcUtjsDynCpaIiIiIyVTBEhEREfc0CMtjqmCJiIiImEwJloiIiIjJ1EUoIiIibmmQu+dUwRIRERExmSpYIiIi4pZLg9w9pgRLREREbjinTp2iU6dOyY9jY2M5c+YMP/30E9u3b6dbt24ULVoUgLvuuosRI0YQExND7969OXToEAULFmT8+PGEhIRkaP1KsERERMStnDgGq1ChQkRGRgLgdDrp0KEDvXr1AmDPnj106tSJLl26pHrN+PHjqVatGtOnT2fJkiUMGzaM8ePHZ2j9SrBEREQk24iJiSEmJuaq6Xnz5iVv3rwZWuYXX3xBUFAQTZo0AYwE69SpUyxfvpyiRYsyaNAgihUrxrp165g3bx4AjRs3ZsiQISQmJuLn5+fxOpVgiYiIiHterGDNnj2byZMnXzW9W7dudO/e3ePlORwOpk6dytSpU5OnBQcH06hRIx599FE+++wzevXqxfz584mKikruErTb7eTJk4fTp09TpEgRj9erBEtERESyjQ4dOtCiRYurprurXi1fvpwRI0akmhYWFsasWbP4/vvvKVu2LOXKlUt+bsiQIcn/b9u2LWPGjCE2NjbNZVutGbvhghIsERERccubVxFmpCswPDyc8PDwNJ9bs2YNDRs2TH7sdDqZNm0anTt3xmazJU+32+2EhoZy8uRJihYtSlJSEufOnSN//vwZikP3wRIREZEb1v/+9z+qVauW/NhqtbJ69WpWrlwJwJIlS6hUqRJBQUHUqlWLJUuWALBs2TKqVauWofFXABaXK2ff3cJ5/A5fN0FERMSrrEX3enV9YZ8O99q6Djzdz9TlVapUiW3bthEQEJA8bd++fQwcOJDY2FgKFixIREQExYoV4+zZs/Tt25dDhw4RHBzM6NGjKVmyZIbWqwRLREQkh1GClf1pDJaIiIi4lRPvg+VrGoMlIiIiYjJVsERERMS9HD2YyDdUwRIRERExmRIsEREREZOpi1BERETc0iB3z6mCJSIiImIyVbBERETEPQ1y95gqWCIiIiImUwVLRERErkNjsDylCpaIiIiIyVTB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ICAggObNm9OmTRvWr19P165dWbZsGVFRUYSEhCS/JiQkhOPHjyvBEhERkUzwYgWrQ4cOtGjR4qrp7qpXy5cvZ8SIEammhYWFMWvWrGu+xuVyERERwa5du5gzZw5AqgSuVq1ajBkzhgMHDqT5eqvV/XWCSrBEREQk28hIV2B4eDjh4eHpnj8pKYk+ffpw4sQJ5syZQ3BwMGCMtWrcuDEFChQAjCTMbrcTGhpKdHQ0t9xyCwDR0dGEhoa6XYdu0yAiIiI3lZEjR3Lu3DlmzpyZnFwBbN++nc8//xyAbdu24XQ6CQsLo1atWkRGRgKwY8cOAgIC3HYPgipYIiIich05/TYNVzp9+jTz5s2jZMmStG7dOnl6ZGQk/fv3p2/fvkRGRhIQEMCYMWOwWq20a9eOt99+m0aNGuHv709ERMR112NxuVw5+m1zHr/D100QERHxKmvRvV5dX9XO47y2rp3Te3ltXVlJFSwRERFxL0eXYnxDY7BERERETKYKloiIiLhlydmjiXxCFSwRERERk6mCJSIiIu6pgOUxVbBERERETKYKloiIiLh1I90Hy1tUwRIRERExmSpYIiIi4p4qWB5TBUtERETEZKpgiYiIiFsag+U5VbBERERETKYKloiIiLinCpbHVMESERERMZkSLBERERGTqYtQRERE3NIgd8+pgiUiIiJiMlWwRERExD1VsDymBEtEciQnTl83waf+STrv6yb4VGl7bl83wafU/ZT9KcESERERtzQGy3NKgkVERERMpgqWiIiIuOdSCctTqmCJiIiImEwVLBEREXFLY7A8pwqWiIiIiMlUwRIRERH3VMHymCpYIiIiIiZTBUtERETcstzc9/XNEFWwREREREymCpaIiIi4pzFYHlMFS0RERMRkSrBERERETKYuQhEREXFLNxr1nCpYIiIiIiZTBUtERETc0489e0wVLBERERGTqYIlIiIibmkMludUwRIRERExmSpYIiIi4p4qWB5TBUtERETEZKpgiYiIiFsag+U5VbBERERETKYKloiIiLin+2B5TBUsEREREZOpgiUiIiJuaQyW51TBEhERETGZKlgiIiLinipYHlMFS0RERMRkSrBERERETKYuQhEREXFLg9w9pwqWiIiIiMlUwRIRERH3nCpheUoVLBERERGTqYJ1hXVbYNx0SEiEcmEwtA/kye35fMeioM3L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RXKncduOK505bWH8mEBOHLdiscALL8VRtZqDz+b588msAMqUTb3NRoy6QN58GfsKKm2/TmNMsuc3eONdKys+Td32/27/+UssfLbEgs1mVDQH9HJmaYJtL/pn1i08DXUeH3n9mUzy3co+XltXVvJKgnXZgQMHiImJoXLlyuzcuZPY2Fhq166dqWWamWCJSM7hrQQruzIzwcqJvJVgZVdeT7Ae82KCterGSLC8OgYrLCxlkEfVqlW9uWoRERERr9Gd3EVERMQti64i9JgSLBEREbmhTZgwAavVSvfu3QHYvn073bp1o2jRogDcddddjBgxgpiYGHr37s2hQ4coWLAg48ePJyQkhISEBPr378/PP/9MYGAgo0eP5tZb3V+pdaPcoUNEREQkldjYWPr168fMmTNTTd+zZw+dOnUiMjKSyMhIRowYAcD48eOpVq0ay5cvp3Xr1gwbNgyAuXPnEhQUxPLly+nXrx99+/a97rqVYImIiIh7Tu/9xcTEcPjw4av+YmL+8xMK6bB27VrKlClDx44dU03fs2cPmzZtonnz5rz00kscO2bc9XndunU0aWLcNblx48Zs2LCBxMRE1q1bR9OmxqX/9913H2fOnOHo0aNu160ES0RERLKN2bNnU69evav+Zs+e7fGymjdvTufOnbHZbKmmBwcH0759e5YsWUKtWrXo1asXAFFRUYSEhABgt9vJkycPp0+fTjUdICQkhOPHj7tdt8ZgiYiIiFveHOTeoUMHWrRocdX0vHmv/Qvay5cvT+7muywsLIxZs2alOf+QIUOS/9+2bVvGjBlDbGxsmvNe64bo17tRuhIsERERyTby5s3rNplKS3h4OOHh4ema1+l0Mm3atKsqW3a7ndDQUE6ePEnRokVJSkri3Llz5M+fn9DQUKKjo7nlllsAiI6OJjQ01O161EUoIiIi7rm8+JfFrFYrq1evZuVK4/e7lixZQqVKlQgKCqJWrVosWbIEgGXLllGtWjX8/PyoVasWkZGRAOzYsYOAgACKF3f/cySqYImIiMhNZeTIkQwcOJApU6ZQsGBBIiIiAHj11Vfp27cvjRo1Ijg4mNGjRwPQrl073n77bRo1aoS/v3/y/O549adysoJ+Kkfk5qSfytFP5dzMvP1TOfVqD/fautau6+e1dWUldRGKiIiImExdhCIiIuKWJUf3dfmGKlgiIiIiJlMFS0RERNzL2cO1fUIVLBERERGTqYIlIiIibllu7ot2M0QVLBERERGTqYIlIiIi7mkMlsdUwRIRERExmSpYIiIi4p4KWB5TBUtERETEZEqwREREREymLkIRERFxy6JB7h5TBUtERETEZKpgiYiIiHuqYHlMFSwRERERk6mCJSIiIu7pp3I8pgqWiIiIiMlUwRIRERG3dBWh51TBEhERETGZKlgiIiLinipYHlMFS0RERMRkqmCJiIiIe6pgeUwJluRoF13xvm6CT7Us+5Cvm+AzzoQEXzfBp/Z9XM3XTfCpxyr86usm+NT0or5ugVyPEiwRERFxT/fB8pjGYImIiIiYTBUsERERcUv3wfKcKlgiIiIiJlOCJSIiImIydRGKiIiIe+oi9JgqWCIiIiImUwVLRERE3FMFy2OqYImIiIiYTBUsERERcU8VLI+pgiUiIiJiMlWwRERExD39VI7HVMESERERMZkqWCIiIuKWfirHc6pgiYiIiJhMFSwRERFxTxUsj6mCJSIiImIyVbBERETEPacqWJ5SBUtERETEZKpgiYiIiHsag+UxVbBERERETKYES0RERMRk6iIUERER99RF6DFVsERERERMpgqWiIiIuKcKlsdUwRIRERExmSpYIiIi4p5uNOoxVbBERERETKYKloiIiLjncvq6BTmOKlgiIiIiJlMFS0RERNzTVYQeUwVLRERExGSqYImIiIh7uorQY6pgiYiIiJhMFawrrNsC46ZDQiKUC4OhfSBPbs/mq9EUioSkzNupDTSpn/L431ho9SL0fgker52l4WTYmu+h73DYsdzz116Mg4ER8Ns+44Tn9S7w6MPGc598AdM+gcIFjce5g+CTyea1O6vN/9LG51/ZsAAlS7gY2DuRggUg9hwMifDj4D8WnC5o8riD5552+Lq5br3+YRf+/uUQn49flubzNZpWo93AJ3A5XZw7e55xL3/IsQNRGV5fvsLBvDHjZUJLF8bldDKh6wx+3boPgKYv1adx50dxuVwcOxDFuFc+4t/omAyvKz3emNmVv375h8/HLE3z+WbdGtCsazgJFxP457fDTOo2g9gz5zK8vnyF8/Lm7G4UuSUEp9PJ+C7T+HXLXmNdXRvQ+KXHjPj3n2Bc5w84mwXxP176dnpWeggXLv6Nj6PPlhX8E3v2qvmah91FlwoP4MLFxaQkBm9bw55TxzO8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GSVYGVSjRg22bNnC6dOnuXjxIqtWreKRRx7xdbPEC44dO0bXrl0ZPXo0jRo18nVzvO7w4cMMGDCAhIQEEhISWLt2LVWrVvV1s7zi448/5uuvvyYyMpIePXpQt25d+vXr5+tmeU1sbCwRERHEx8dz7tw5Fi9efNNc3AFQp04dNm7cSExMDA6Hg++//54KFSr4ulmSTd08px4mK1KkCL169aJ9+/YkJibSqlUrKlas6OtmiRfMmDGD+Ph43nvvveRpbdq0oW3btj5slffUqlWLXbt20bx5c2w2G4899thNmWjejOrUqZO87Z1OJ08//TRVqlTxdbO8plKlSrzwwgs8/fTTJCYmUrNmTZ544glfN0uyKYsrrcFEIiIiIpJh6iIUERERMZkSLBERERGTKcESERERMZkSLBERERGTKcESERERMZkSLBERERGTKcESERERMZkSLBHxWHh4OI888gj79u3zdVNERLIlJVgi4rGvv/6aMmXKsHLlSl83RUQkW1KCJSIes9lsVK1a9ab5kWcREU/ptwhFxGNxcXF888036Je2RETSpgqWiHhs3LhxFClShEOHDnH+/HlfN0dEJNtRgiUiHvnpp59YsWIFkyZNIjg4mL179/q6SSIi2Y4SLBFJt/j4eN566y3eeecd8ufPT/ny5TUOS0QkDUqwRCTdJkyYQJUqVahduzYA5cuX5/fff/dto0REsiElWCKSLrt372bFihX069cvedqdd96pCpaISBosLl0GJCIiImIqVbBERERETKYES0RERMRkSrBERERETKYES0RERMRkSrBERERETKYES0RERMRkSrBERERETPZ/3MnCuUSi7dkAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from sklearn.neural_network import MLPRegressor\n", "from sklearn.metrics import accuracy_score\n", @@ -2939,9 +2748,7 @@ { "cell_type": "markdown", "id": "93ebbcd3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## A first summary\n", "\n", @@ -2959,9 +2766,7 @@ { "cell_type": "markdown", "id": "129b1e89", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Why Linear Regression (aka Ordinary Least Squares and family)\n", "\n", @@ -2991,9 +2796,7 @@ { "cell_type": "markdown", "id": "465172ea", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Regression analysis, overarching aims\n", "\n", @@ -3013,9 +2816,7 @@ { "cell_type": "markdown", "id": "b7cf94d8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Regression analysis, overarching aims II\n", "\n", @@ -3041,9 +2842,7 @@ { "cell_type": "markdown", "id": "3b98d102", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Examples\n", "In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n", @@ -3056,9 +2855,7 @@ { "cell_type": "markdown", "id": "a3814cbf", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n", @@ -3068,9 +2865,7 @@ { "cell_type": "markdown", "id": "34db7d71", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we have five predictors, that is the intercept, the $A$ dependent term, the $A^{2/3}$ term and the $A^{-1/3}$ and $A^{-1}$ terms.\n", "This gives $p=0,1,2,3,4$. Furthermore we have $n$ entries for each predictor. It means that our design matrix is a \n", @@ -3083,9 +2878,7 @@ { "cell_type": "markdown", "id": "0f3d34aa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## General linear models\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", @@ -3096,9 +2889,7 @@ { "cell_type": "markdown", "id": "3ae8a917", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i)=\\tilde{y}_i+\\epsilon_i=\\sum_{j=0}^{n-1} \\beta_j x_i^j+\\epsilon_i,\n", @@ -3108,9 +2899,7 @@ { "cell_type": "markdown", "id": "85b75da7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\epsilon_i$ is the error in our approximation." ] @@ -3118,9 +2907,7 @@ { "cell_type": "markdown", "id": "b1ad5988", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Rewriting the fitting procedure as a linear algebra problem\n", "For every set of values $y_i,x_i$ we have thus the corresponding set of equations" @@ -3129,9 +2916,7 @@ { "cell_type": "markdown", "id": "d31fc0eb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", @@ -3147,9 +2932,7 @@ { "cell_type": "markdown", "id": "f0c96fe6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Rewriting the fitting procedure as a linear algebra problem, more details\n", "Defining the vectors" @@ -3158,9 +2941,7 @@ { "cell_type": "markdown", "id": "e05fb474", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n", @@ -3170,9 +2951,7 @@ { "cell_type": "markdown", "id": "832b4a52", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -3180,9 +2959,7 @@ { "cell_type": "markdown", "id": "2a04c6b0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n", @@ -3192,9 +2969,7 @@ { "cell_type": "markdown", "id": "95feb9c7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -3202,9 +2977,7 @@ { "cell_type": "markdown", "id": "9388dae6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n", @@ -3214,9 +2987,7 @@ { "cell_type": "markdown", "id": "4b407da6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and the design matrix" ] @@ -3224,9 +2995,7 @@ { "cell_type": "markdown", "id": "d6f77716", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -3243,9 +3012,7 @@ { "cell_type": "markdown", "id": "7ac4ebe7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we can rewrite our equations as" ] @@ -3253,9 +3020,7 @@ { "cell_type": "markdown", "id": "666e3761", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -3265,9 +3030,7 @@ { "cell_type": "markdown", "id": "7281f3db", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix)." ] @@ -3275,9 +3038,7 @@ { "cell_type": "markdown", "id": "b6402b93", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Generalizing the fitting procedure as a linear algebra problem\n", "\n", @@ -3291,9 +3052,7 @@ { "cell_type": "markdown", "id": "be28ea6a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", @@ -3311,9 +3070,7 @@ { "cell_type": "markdown", "id": "d6ff0add", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**" ] @@ -3321,9 +3078,7 @@ { "cell_type": "markdown", "id": "10f87413", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Generalizing the fitting procedure as a linear algebra problem\n", "We redefine in turn the matrix $\\boldsymbol{X}$ as" @@ -3332,9 +3087,7 @@ { "cell_type": "markdown", "id": "2fc2d589", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -3351,9 +3104,7 @@ { "cell_type": "markdown", "id": "49448051", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and without loss of generality we rewrite again our equations as" ] @@ -3361,9 +3112,7 @@ { "cell_type": "markdown", "id": "c96a1d13", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -3373,9 +3122,7 @@ { "cell_type": "markdown", "id": "34f05f37", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values?" ] @@ -3383,9 +3130,7 @@ { "cell_type": "markdown", "id": "e6ff72db", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Optimizing our parameters\n", "We have defined the matrix $\\boldsymbol{X}$ via the equations" @@ -3394,9 +3139,7 @@ { "cell_type": "markdown", "id": "39aef328", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\begin{align*}\n", @@ -3414,9 +3157,7 @@ { "cell_type": "markdown", "id": "0a4e3a65", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "As we noted above, we stayed with a system with the design matrix \n", " $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times n}$, that is we have $p=n$. For reasons to come later (algorithmic arguments) we will hereafter define \n", @@ -3426,9 +3167,7 @@ { "cell_type": "markdown", "id": "523fbdc7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Our model for the nuclear binding energies\n", "\n", @@ -3439,13 +3178,162 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 12, "id": "65375fc3", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
1AA^(2/3)A^(-1/3)1/A
A
41.04.02.5198420.6299610.250000
51.05.02.9240180.5848040.200000
61.06.03.3019270.5503210.166667
71.07.03.6593060.5227580.142857
81.08.04.0000000.5000000.125000
..................
2641.0264.041.1531060.1558830.003788
2651.0265.041.2569620.1556870.003774
2661.0266.041.3606880.1554910.003759
2691.0269.041.6710890.1549110.003717
2701.0270.041.7743000.1547200.003704
\n", + "

264 rows × 5 columns

\n", + "" + ], + "text/plain": [ + " 1 A A^(2/3) A^(-1/3) 1/A\n", + "A \n", + "4 1.0 4.0 2.519842 0.629961 0.250000\n", + "5 1.0 5.0 2.924018 0.584804 0.200000\n", + "6 1.0 6.0 3.301927 0.550321 0.166667\n", + "7 1.0 7.0 3.659306 0.522758 0.142857\n", + "8 1.0 8.0 4.000000 0.500000 0.125000\n", + ".. ... ... ... ... ...\n", + "264 1.0 264.0 41.153106 0.155883 0.003788\n", + "265 1.0 265.0 41.256962 0.155687 0.003774\n", + "266 1.0 266.0 41.360688 0.155491 0.003759\n", + "269 1.0 269.0 41.671089 0.154911 0.003717\n", + "270 1.0 270.0 41.774300 0.154720 0.003704\n", + "\n", + "[264 rows x 5 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Common imports\n", "import numpy as np\n", @@ -3521,9 +3409,7 @@ { "cell_type": "markdown", "id": "a6b35fe6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as" ] @@ -3531,9 +3417,7 @@ { "cell_type": "markdown", "id": "b4a0e652", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -3543,9 +3427,7 @@ { "cell_type": "markdown", "id": "040adc2c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "throughout these lectures." ] @@ -3553,9 +3435,7 @@ { "cell_type": "markdown", "id": "8cb88980", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Optimizing our parameters, more details\n", "With the above we use the design matrix to define the approximation $\\boldsymbol{\\tilde{y}}$ via the unknown quantity $\\boldsymbol{\\beta}$ as" @@ -3564,9 +3444,7 @@ { "cell_type": "markdown", "id": "fc947e4c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -3576,9 +3454,7 @@ { "cell_type": "markdown", "id": "c54ed44f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely" ] @@ -3586,9 +3462,7 @@ { "cell_type": "markdown", "id": "9700bc2a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n", @@ -3598,9 +3472,7 @@ { "cell_type": "markdown", "id": "6486ad4b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as" ] @@ -3608,9 +3480,7 @@ { "cell_type": "markdown", "id": "b17f3473", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n", @@ -3620,9 +3490,7 @@ { "cell_type": "markdown", "id": "511ef4cd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "This function is one possible way to define the so-called cost function.\n", "\n", @@ -3633,9 +3501,7 @@ { "cell_type": "markdown", "id": "15a9cc37", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n", @@ -3645,9 +3511,7 @@ { "cell_type": "markdown", "id": "367d1bd9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out." ] @@ -3655,9 +3519,7 @@ { "cell_type": "markdown", "id": "300db0a3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Interpretations and optimizing our parameters\n", "\n", @@ -3667,9 +3529,7 @@ { "cell_type": "markdown", "id": "78ad2d59", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\},\n", @@ -3679,9 +3539,7 @@ { "cell_type": "markdown", "id": "adb62030", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "can be linked to the variance of the quantity $y_i$ if we interpret the latter as the mean value. \n", "When linking (see the discussion below) with the maximum likelihood approach below, we will indeed interpret $y_i$ as a mean value" @@ -3690,9 +3548,7 @@ { "cell_type": "markdown", "id": "4cb086a5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "y_{i}=\\langle y_i \\rangle = \\beta_0x_{i,0}+\\beta_1x_{i,1}+\\beta_2x_{i,2}+\\dots+\\beta_{n-1}x_{i,n-1}+\\epsilon_i,\n", @@ -3702,9 +3558,7 @@ { "cell_type": "markdown", "id": "f5164d25", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\langle y_i \\rangle$ is the mean value. Keep in mind also that\n", "till now we have treated $y_i$ as the exact value. Normally, the\n", @@ -3721,9 +3575,7 @@ { "cell_type": "markdown", "id": "171787e6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", @@ -3734,9 +3586,7 @@ { "cell_type": "markdown", "id": "bc2e0510", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In practical terms it means we will require" ] @@ -3744,9 +3594,7 @@ { "cell_type": "markdown", "id": "e5649cfc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)^2\\right]=0,\n", @@ -3756,9 +3604,7 @@ { "cell_type": "markdown", "id": "134777d3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which results in" ] @@ -3766,9 +3612,7 @@ { "cell_type": "markdown", "id": "18b005f8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_{ij}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)\\right]=0,\n", @@ -3778,9 +3622,7 @@ { "cell_type": "markdown", "id": "b34ed0d9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "or in a matrix-vector form as" ] @@ -3788,9 +3630,7 @@ { "cell_type": "markdown", "id": "7cc13452", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n", @@ -3800,9 +3640,7 @@ { "cell_type": "markdown", "id": "31f0b7c2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Interpretations and optimizing our parameters\n", "We can rewrite" @@ -3811,9 +3649,7 @@ { "cell_type": "markdown", "id": "feb09e6a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n", @@ -3823,9 +3659,7 @@ { "cell_type": "markdown", "id": "4c1fbe44", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "as" ] @@ -3833,9 +3667,7 @@ { "cell_type": "markdown", "id": "12a694e5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -3845,9 +3677,7 @@ { "cell_type": "markdown", "id": "ba26ca19", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution" ] @@ -3855,9 +3685,7 @@ { "cell_type": "markdown", "id": "39958365", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", @@ -3867,9 +3695,7 @@ { "cell_type": "markdown", "id": "bcc1b272", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We note also that since our design matrix is defined as $\\boldsymbol{X}\\in\n", "{\\mathbb{R}}^{n\\times p}$, the product $\\boldsymbol{X}^T\\boldsymbol{X} \\in\n", @@ -3888,9 +3714,7 @@ { "cell_type": "markdown", "id": "5dc4f920", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Some useful matrix and vector expressions\n", "\n", @@ -3901,9 +3725,7 @@ { "cell_type": "markdown", "id": "f341bf32", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial (\\boldsymbol{b}^T\\boldsymbol{a})}{\\partial \\boldsymbol{a}} = \\boldsymbol{b},\n", @@ -3913,9 +3735,7 @@ { "cell_type": "markdown", "id": "e5aa6d33", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial (\\boldsymbol{a}^T\\boldsymbol{A}\\boldsymbol{a})}{\\partial \\boldsymbol{a}} = (\\boldsymbol{A}+\\boldsymbol{A}^T)\\boldsymbol{a},\n", @@ -3925,9 +3745,7 @@ { "cell_type": "markdown", "id": "e0163aef", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial tr(\\boldsymbol{B}\\boldsymbol{A})}{\\partial \\boldsymbol{A}} = \\boldsymbol{B}^T,\n", @@ -3937,9 +3755,7 @@ { "cell_type": "markdown", "id": "f3d8529d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}} = (\\boldsymbol{A}^{-1})^T.\n", @@ -3949,9 +3765,7 @@ { "cell_type": "markdown", "id": "926fae33", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Interpretations and optimizing our parameters\n", "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" @@ -3960,9 +3774,7 @@ { "cell_type": "markdown", "id": "459363f3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -3972,9 +3784,7 @@ { "cell_type": "markdown", "id": "c1ae7c6c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and with" ] @@ -3982,9 +3792,7 @@ { "cell_type": "markdown", "id": "52de9181", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -3994,9 +3802,7 @@ { "cell_type": "markdown", "id": "b4619337", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we have" ] @@ -4004,9 +3810,7 @@ { "cell_type": "markdown", "id": "e384b941", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -4016,9 +3820,7 @@ { "cell_type": "markdown", "id": "4123b6f6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n", "\n", @@ -4028,9 +3830,7 @@ { "cell_type": "markdown", "id": "8f1c0df4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Own code for Ordinary Least Squares\n", "\n", @@ -4042,10 +3842,7 @@ "cell_type": "code", "execution_count": 39, "id": "f06d4256", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# matrix inversion to find beta\n", @@ -4057,9 +3854,7 @@ { "cell_type": "markdown", "id": "cdf3d845", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Alternatively, you can use the least squares functionality in **Numpy** as" ] @@ -4068,10 +3863,7 @@ "cell_type": "code", "execution_count": 40, "id": "bff161d1", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "fit = np.linalg.lstsq(X, Energies, rcond =None)[0]\n", @@ -4081,9 +3873,7 @@ { "cell_type": "markdown", "id": "1ba8de37", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "And finally we plot our fit with and compare with data" ] @@ -4092,10 +3882,7 @@ "cell_type": "code", "execution_count": 41, "id": "ff3cb363", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "Masses['Eapprox'] = ytilde\n", @@ -4115,9 +3902,7 @@ { "cell_type": "markdown", "id": "367e150e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Adding error analysis and training set up\n", "\n", @@ -4129,10 +3914,7 @@ "cell_type": "code", "execution_count": 42, "id": "e75d549e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "def R2(y_data, y_model):\n", @@ -4142,9 +3924,7 @@ { "cell_type": "markdown", "id": "5937c2eb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and we would be using it as" ] @@ -4153,10 +3933,7 @@ "cell_type": "code", "execution_count": 43, "id": "6e4a7267", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "print(R2(Energies,ytilde))" @@ -4165,9 +3942,7 @@ { "cell_type": "markdown", "id": "af9b5785", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We can easily add our **MSE** score as" ] @@ -4176,10 +3951,7 @@ "cell_type": "code", "execution_count": 44, "id": "1eda8437", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "def MSE(y_data,y_model):\n", @@ -4192,9 +3964,7 @@ { "cell_type": "markdown", "id": "b5d3d853", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and finally the relative error as" ] @@ -4203,10 +3973,7 @@ "cell_type": "code", "execution_count": 45, "id": "5166df6e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "def RelativeError(y_data,y_model):\n", @@ -4217,9 +3984,7 @@ { "cell_type": "markdown", "id": "236c30eb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", @@ -4239,9 +4004,7 @@ { "cell_type": "markdown", "id": "50a6a65f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\chi^2(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\frac{\\left(y_i-\\tilde{y}_i\\right)^2}{\\sigma_i^2}=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\frac{1}{\\boldsymbol{\\Sigma^2}}\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n", @@ -4251,9 +4014,7 @@ { "cell_type": "markdown", "id": "1f7a0ed2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements." ] @@ -4261,9 +4022,7 @@ { "cell_type": "markdown", "id": "254e32f6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", @@ -4273,9 +4032,7 @@ { "cell_type": "markdown", "id": "309cb707", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)^2\\right]=0,\n", @@ -4285,9 +4042,7 @@ { "cell_type": "markdown", "id": "ed0d9230", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which results in" ] @@ -4295,9 +4050,7 @@ { "cell_type": "markdown", "id": "6e729fff", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}\\frac{x_{ij}}{\\sigma_i}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)\\right]=0,\n", @@ -4307,9 +4060,7 @@ { "cell_type": "markdown", "id": "4b8c3db8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "or in a matrix-vector form as" ] @@ -4317,9 +4068,7 @@ { "cell_type": "markdown", "id": "0f38e855", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n", @@ -4329,9 +4078,7 @@ { "cell_type": "markdown", "id": "e9810355", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$." ] @@ -4339,9 +4086,7 @@ { "cell_type": "markdown", "id": "d64064a7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", @@ -4351,9 +4096,7 @@ { "cell_type": "markdown", "id": "ca671f7b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n", @@ -4363,9 +4106,7 @@ { "cell_type": "markdown", "id": "857dac9b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "as" ] @@ -4373,9 +4114,7 @@ { "cell_type": "markdown", "id": "6f16b544", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n", @@ -4385,9 +4124,7 @@ { "cell_type": "markdown", "id": "7152f392", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution" ] @@ -4395,9 +4132,7 @@ { "cell_type": "markdown", "id": "0d6ac746", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n", @@ -4407,9 +4142,7 @@ { "cell_type": "markdown", "id": "62cc38ae", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", @@ -4419,9 +4152,7 @@ { "cell_type": "markdown", "id": "eeb7f574", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n", @@ -4431,9 +4162,7 @@ { "cell_type": "markdown", "id": "9963ae15", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)" ] @@ -4441,9 +4170,7 @@ { "cell_type": "markdown", "id": "4e816631", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\beta_j = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}\\frac{y_i}{\\sigma_i}\\frac{x_{ik}}{\\sigma_i} = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}b_ia_{ik}\n", @@ -4453,9 +4180,7 @@ { "cell_type": "markdown", "id": "75595bb9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)" ] @@ -4463,9 +4188,7 @@ { "cell_type": "markdown", "id": "278292fc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma^2(\\beta_j) = \\sum_{i=0}^{n-1}\\sigma_i^2\\left( \\frac{\\partial \\beta_j}{\\partial y_i}\\right)^2,\n", @@ -4475,9 +4198,7 @@ { "cell_type": "markdown", "id": "82c2439c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "resulting in" ] @@ -4485,9 +4206,7 @@ { "cell_type": "markdown", "id": "59ff6249", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma^2(\\beta_j) = \\left(\\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}a_{ik}\\right)\\left(\\sum_{l=0}^{p-1}h_{jl}\\sum_{m=0}^{n-1}a_{ml}\\right) = h_{jj}!\n", @@ -4497,9 +4216,7 @@ { "cell_type": "markdown", "id": "eb2dc41e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "The first step here is to approximate the function $y$ with a first-order polynomial, that is we write" @@ -4508,9 +4225,7 @@ { "cell_type": "markdown", "id": "723aa239", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n", @@ -4520,9 +4235,7 @@ { "cell_type": "markdown", "id": "b513b90f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by" ] @@ -4530,9 +4243,7 @@ { "cell_type": "markdown", "id": "62903cbc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_0} = -2\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0,\n", @@ -4542,9 +4253,7 @@ { "cell_type": "markdown", "id": "207584d4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -4552,9 +4261,7 @@ { "cell_type": "markdown", "id": "6c910491", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_1} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_i\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0.\n", @@ -4564,9 +4271,7 @@ { "cell_type": "markdown", "id": "1bc61f61", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The $\\chi^2$ function\n", "\n", @@ -4577,9 +4282,7 @@ { "cell_type": "markdown", "id": "d573377f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n", @@ -4589,9 +4292,7 @@ { "cell_type": "markdown", "id": "3cbeb35c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n", @@ -4601,9 +4302,7 @@ { "cell_type": "markdown", "id": "c91cb43e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n", @@ -4613,9 +4312,7 @@ { "cell_type": "markdown", "id": "e20a004b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n", @@ -4625,9 +4322,7 @@ { "cell_type": "markdown", "id": "a116dd64", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n", @@ -4637,9 +4332,7 @@ { "cell_type": "markdown", "id": "f1fa634c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we obtain" ] @@ -4647,9 +4340,7 @@ { "cell_type": "markdown", "id": "d83177be", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n", @@ -4659,9 +4350,7 @@ { "cell_type": "markdown", "id": "ff3efe3f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n", @@ -4671,9 +4360,7 @@ { "cell_type": "markdown", "id": "b94950d4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "This approach (different linear and non-linear regression) suffers\n", "often from both being underdetermined and overdetermined in the\n", @@ -4684,9 +4371,7 @@ { "cell_type": "markdown", "id": "8889337c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Fitting an Equation of State for Dense Nuclear Matter\n", "\n", @@ -4711,9 +4396,7 @@ { "cell_type": "markdown", "id": "79eeb561", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The code" ] @@ -4722,10 +4405,7 @@ "cell_type": "code", "execution_count": 46, "id": "194a1d1a", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# Common imports\n", @@ -4818,9 +4498,7 @@ { "cell_type": "markdown", "id": "a8dcc692", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The above simple polynomial in density $\\rho$ gives an excellent fit\n", "to the data. \n", @@ -4833,9 +4511,7 @@ { "cell_type": "markdown", "id": "12a0253c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Splitting our Data in Training and Test data\n", "\n", @@ -4855,10 +4531,7 @@ "cell_type": "code", "execution_count": 47, "id": "5ff33c4e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import os\n", @@ -4930,9 +4603,7 @@ { "cell_type": "markdown", "id": "4befc696", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Exercises for week 35\n", "Here are three possible exercises for week 35 and the lab sessions of Wednesday September 1." @@ -4941,9 +4612,7 @@ { "cell_type": "markdown", "id": "f833fa2b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Exercise 1: Setting up various Python environments\n", "\n", @@ -5010,9 +4679,7 @@ { "cell_type": "markdown", "id": "21b7c11f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Exercise 2: making your own data and exploring scikit-learn\n", "\n", @@ -5024,10 +4691,7 @@ "cell_type": "code", "execution_count": 48, "id": "9213ce7d", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "x = np.random.rand(100,1)\n", @@ -5037,9 +4701,7 @@ { "cell_type": "markdown", "id": "0166974f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "1. Write your own code (following the examples under the [regression notes](https://compphysics.github.io/MachineLearning/doc/LectureNotes/_build/html/chapter1.html)) for computing the parametrization of the data set fitting a second-order polynomial. \n", "\n", @@ -5051,9 +4713,7 @@ { "cell_type": "markdown", "id": "982d42cb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -5064,9 +4724,7 @@ { "cell_type": "markdown", "id": "9d32cf1a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and the $R^2$ score function.\n", "If $\\tilde{\\boldsymbol{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as" @@ -5075,9 +4733,7 @@ { "cell_type": "markdown", "id": "f07e5904", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{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", @@ -5087,9 +4743,7 @@ { "cell_type": "markdown", "id": "3c91a4d7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] @@ -5097,9 +4751,7 @@ { "cell_type": "markdown", "id": "22dce6cd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -5109,9 +4761,7 @@ { "cell_type": "markdown", "id": "63dbfea2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "You can use the functionality included in scikit-learn. If you feel for it, you can use your own program and define functions which compute the above two functions. \n", "Discuss the meaning of these results. Try also to vary the coefficient in front of the added stochastic noise term and discuss the quality of the fits.\n", @@ -5125,10 +4775,7 @@ "cell_type": "code", "execution_count": 49, "id": "c007a8f7", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import os\n", @@ -5176,9 +4823,7 @@ { "cell_type": "markdown", "id": "093a802e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "" ] @@ -5186,9 +4831,7 @@ { "cell_type": "markdown", "id": "a4fd1970", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Exercise 3: Normalizing our data\n", "\n", @@ -5232,10 +4875,7 @@ "cell_type": "code", "execution_count": 50, "id": "27b4f807", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# split in training and test data\n", @@ -5245,9 +4885,7 @@ { "cell_type": "markdown", "id": "78154d99", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Then we can use the standard scaler to scale our data as" ] @@ -5256,10 +4894,7 @@ "cell_type": "code", "execution_count": 51, "id": "709a18d0", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "scaler = StandardScaler()\n", @@ -5271,9 +4906,7 @@ { "cell_type": "markdown", "id": "2362e332", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In this exercise we want you to to compute the MSE for the training\n", "data and the test data as function of the complexity of a polynomial,\n", @@ -5289,10 +4922,7 @@ "cell_type": "code", "execution_count": 52, "id": "47021865", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "np.random.seed()\n", @@ -5306,9 +4936,7 @@ { "cell_type": "markdown", "id": "eb6cf432", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $y$ is the function we want to fit with a given polynomial." ] @@ -5316,9 +4944,7 @@ { "cell_type": "markdown", "id": "b61a59b9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "**a)**\n", "Write a first code which sets up a design matrix $X$ defined by a fifth-order polynomial. Scale your data and split it in training and test data." @@ -5327,9 +4953,7 @@ { "cell_type": "markdown", "id": "c334b79a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "**b)**\n", "Perform an ordinary least squares and compute the means squared error and the $R2$ factor for the training data and the test data, with and without scaling." @@ -5338,16 +4962,32 @@ { "cell_type": "markdown", "id": "5164c62c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "**c)**\n", "Add now a model which allows you to make polynomials up to degree $15$. Perform a standard OLS fitting of the training data and compute the MSE and $R2$ for the training and test data and plot both test and training data MSE and $R2$ as functions of the polynomial degree. Compare what you see with Figure 2.11 of Hastie et al. Comment your results. For which polynomial degree do you find an optimal MSE (smallest value)?" ] } ], - "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.12" + } + }, "nbformat": 4, "nbformat_minor": 5 }