From 1d1e5a247553436f0780c7df6658446836f8dfb9 Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Wed, 24 Aug 2022 22:09:34 +0200 Subject: [PATCH] update lecture notes --- doc/BookChapters/chapter1.dlog | 7 + doc/BookChapters/chapter1.do.txt | 8 +- doc/BookChapters/chapter1.ipynb | 4320 ----------------- .../_build/.doctrees/chapter1.doctree | Bin 469945 -> 465006 bytes .../_build/.doctrees/environment.pickle | Bin 170375 -> 170362 bytes .../_build/.doctrees/statistics.doctree | Bin 237656 -> 238075 bytes .../_build/html/_images/chapter1_17_0.png | Bin 0 -> 6537 bytes .../_build/html/_images/chapter1_19_1.png | Bin 0 -> 9423 bytes .../_build/html/_images/chapter1_33_0.png | Bin 0 -> 13191 bytes .../_build/html/_images/chapter1_9_0.png | Bin 0 -> 9481 bytes .../_build/html/_images/statistics_181_0.png | Bin 5097 -> 5094 bytes .../_build/html/_images/statistics_188_1.png | Bin 9758 -> 9836 bytes .../_build/html/_sources/chapter1.ipynb | 1414 ++++-- .../_build/html/_sources/statistics.ipynb | 380 +- doc/LectureNotes/_build/html/chapter1.html | 92 +- doc/LectureNotes/_build/html/searchindex.js | 2 +- doc/LectureNotes/_build/html/statistics.html | 72 +- .../_build/jupyter_execute/chapter1.ipynb | 1424 ++++-- .../_build/jupyter_execute/chapter1.py | 264 +- .../_build/jupyter_execute/chapter1_17_0.png | Bin 0 -> 6537 bytes .../_build/jupyter_execute/chapter1_19_1.png | Bin 0 -> 9423 bytes .../_build/jupyter_execute/chapter1_33_0.png | Bin 0 -> 13191 bytes .../_build/jupyter_execute/chapter1_9_0.png | Bin 0 -> 9481 bytes .../_build/jupyter_execute/statistics.ipynb | 456 +- .../jupyter_execute/statistics_181_0.png | Bin 5097 -> 5094 bytes .../jupyter_execute/statistics_188_1.png | Bin 9758 -> 9836 bytes doc/LectureNotes/chapter1.ipynb | 1414 ++++-- doc/LectureNotes/gaussian.pdf | Bin 229869 -> 229869 bytes 28 files changed, 3589 insertions(+), 6264 deletions(-) delete mode 100644 doc/BookChapters/chapter1.ipynb create mode 100644 doc/LectureNotes/_build/html/_images/chapter1_17_0.png create mode 100644 doc/LectureNotes/_build/html/_images/chapter1_19_1.png create mode 100644 doc/LectureNotes/_build/html/_images/chapter1_33_0.png create mode 100644 doc/LectureNotes/_build/html/_images/chapter1_9_0.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/chapter1_17_0.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/chapter1_19_1.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/chapter1_33_0.png create mode 100644 doc/LectureNotes/_build/jupyter_execute/chapter1_9_0.png diff --git a/doc/BookChapters/chapter1.dlog b/doc/BookChapters/chapter1.dlog index 20c0c21c2..7a39c150c 100644 --- a/doc/BookChapters/chapter1.dlog +++ b/doc/BookChapters/chapter1.dlog @@ -50,3 +50,10 @@ Translating doconce text in chapter1.do.txt to ipynb *** warning: latex envir \begin{bmatrix} does not work well in Markdown. Stick to \[ ... \], equation, equation*, align, or align* environments in math environments. output in chapter1.ipynb +Translating doconce text in chapter1.do.txt to ipynb +*** replacing \bm{...} by \boldsymbol{...} (\bm is not supported by MathJax) + +*** warning: latex envir \begin{bmatrix} does not work well in Markdown. Stick to \[ ... \], equation, equation*, align, or align* environments in math environments. + +*** warning: latex envir \begin{bmatrix} does not work well in Markdown. Stick to \[ ... \], equation, equation*, align, or align* environments in math environments. +output in chapter1.ipynb diff --git a/doc/BookChapters/chapter1.do.txt b/doc/BookChapters/chapter1.do.txt index fd8d5748f..1a13c52b6 100644 --- a/doc/BookChapters/chapter1.do.txt +++ b/doc/BookChapters/chapter1.do.txt @@ -660,7 +660,7 @@ import os # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1102,7 +1102,7 @@ import os # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1609,7 +1609,7 @@ from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1773,7 +1773,7 @@ from sklearn.model_selection import train_test_split # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) diff --git a/doc/BookChapters/chapter1.ipynb b/doc/BookChapters/chapter1.ipynb deleted file mode 100644 index 9da67625f..000000000 --- a/doc/BookChapters/chapter1.ipynb +++ /dev/null @@ -1,4320 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0da18600", - "metadata": { - "editable": true - }, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "id": "46f505d3", - "metadata": { - "editable": true - }, - "source": [ - "# Linear Regression" - ] - }, - { - "cell_type": "markdown", - "id": "bba93bfc", - "metadata": { - "editable": true - }, - "source": [ - "## Introduction\n", - "\n", - "Our emphasis throughout this series of lectures is on understanding\n", - "the mathematical aspects of different algorithms used in the fields of\n", - "data analysis and machine learning.\n", - "\n", - "However, where possible we will emphasize the importance of using\n", - "available software. We start thus with a hands-on and top-down\n", - "approach to machine learning. The aim is thus to start with relevant\n", - "data or data we have produced and use these to introduce statistical\n", - "data analysis concepts and machine learning algorithms before we delve\n", - "into the algorithms themselves. The examples we will use in the\n", - "beginning, start with simple polynomials with random noise added. We\n", - "will use the Python software package\n", - "[Scikit-Learn](http://scikit-learn.org/stable/) and introduce various\n", - "machine learning algorithms to make fits of the data and\n", - "predictions. We move thereafter to more interesting cases such as data\n", - "from say experiments (below we will look at experimental nuclear\n", - "binding energies as an example). These are examples where we can\n", - "easily set up the data and then use machine learning algorithms\n", - "included in for example **Scikit-Learn**.\n", - "\n", - "These examples will serve us the purpose of getting\n", - "started. Furthermore, they allow us to catch more than two birds with\n", - "a stone. They will allow us to bring in some programming specific\n", - "topics and tools as well as showing the power of various Python\n", - "libraries for machine learning and statistical data analysis.\n", - "\n", - "Here, we will mainly focus on two specific Python packages for Machine\n", - "Learning, Scikit-Learn and Tensorflow (see below for links etc).\n", - "Moreover, the examples we introduce will serve as inputs to many of\n", - "our discussions later, as well as allowing you to set up models and\n", - "produce your own data and get started with programming." - ] - }, - { - "cell_type": "markdown", - "id": "c6fa0403", - "metadata": { - "editable": true - }, - "source": [ - "## What is Machine Learning?\n", - "\n", - "Statistics, data science and machine learning form important fields of\n", - "research in modern science. They describe how to learn and make\n", - "predictions from data, as well as allowing us to extract important\n", - "correlations about physical process and the underlying laws of motion\n", - "in large data sets. The latter, big data sets, appear frequently in\n", - "essentially all disciplines, from the traditional Science, Technology,\n", - "Mathematics and Engineering fields to Life Science, Law, education\n", - "research, the Humanities and the Social Sciences. \n", - "\n", - "It has become more\n", - "and more common to see research projects on big data in for example\n", - "the Social Sciences where extracting patterns from complicated survey\n", - "data is one of many research directions. Having a solid grasp of data\n", - "analysis and machine learning is thus becoming central to scientific\n", - "computing in many fields, and competences and skills within the fields\n", - "of machine learning and scientific computing are nowadays strongly\n", - "requested by many potential employers. The latter cannot be\n", - "overstated, familiarity with machine learning has almost become a\n", - "prerequisite for many of the most exciting employment opportunities,\n", - "whether they are in bioinformatics, life science, physics or finance,\n", - "in the private or the public sector. This author has had several\n", - "students or met students who have been hired recently based on their\n", - "skills and competences in scientific computing and data science, often\n", - "with marginal knowledge of machine learning.\n", - "\n", - "Machine learning is a subfield of computer science, and is closely\n", - "related to computational statistics. It evolved from the study of\n", - "pattern recognition in artificial intelligence (AI) research, and has\n", - "made contributions to AI tasks like computer vision, natural language\n", - "processing and speech recognition. Many of the methods we will study are also \n", - "strongly rooted in basic mathematics and physics research. \n", - "\n", - "Ideally, machine learning represents the science of giving computers\n", - "the ability to learn without being explicitly programmed. The idea is\n", - "that there exist generic algorithms which can be used to find patterns\n", - "in a broad class of data sets without having to write code\n", - "specifically for each problem. The algorithm will build its own logic\n", - "based on the data. You should however always keep in mind that\n", - "machines and algorithms are to a large extent developed by humans. The\n", - "insights and knowledge we have about a specific system, play a central\n", - "role when we develop a specific machine learning algorithm. \n", - "\n", - "Machine learning is an extremely rich field, in spite of its young\n", - "age. The increases we have seen during the last three decades in\n", - "computational capabilities have been followed by developments of\n", - "methods and techniques for analyzing and handling large date sets,\n", - "relying heavily on statistics, computer science and mathematics. The\n", - "field is rather new and developing rapidly. Popular software packages\n", - "written in Python for machine learning like\n", - "[Scikit-learn](http://scikit-learn.org/stable/),\n", - "[Tensorflow](https://www.tensorflow.org/),\n", - "[PyTorch](http://pytorch.org/) and [Keras](https://keras.io/), all\n", - "freely available at their respective GitHub sites, encompass\n", - "communities of developers in the thousands or more. And the number of\n", - "code developers and contributors keeps increasing. Not all the\n", - "algorithms and methods can be given a rigorous mathematical\n", - "justification, opening up thereby large rooms for experimenting and\n", - "trial and error and thereby exciting new developments. However, a\n", - "solid command of linear algebra, multivariate theory, probability\n", - "theory, statistical data analysis, understanding errors and Monte\n", - "Carlo methods are central elements in a proper understanding of many\n", - "of algorithms and methods we will discuss.\n", - "\n", - "The approaches to machine learning are many, but are often split into\n", - "two main categories. In *supervised learning* we know the answer to a\n", - "problem, and let the computer deduce the logic behind it. On the other\n", - "hand, *unsupervised learning* is a method for finding patterns and\n", - "relationship in data sets without any prior knowledge of the system.\n", - "Some authours also operate with a third category, namely\n", - "*reinforcement learning*. This is a paradigm of learning inspired by\n", - "behavioral psychology, where learning is achieved by trial-and-error,\n", - "solely from rewards and punishment.\n", - "\n", - "Another way to categorize machine learning tasks is to consider the\n", - "desired output of a system. Some of the most common tasks are:\n", - "\n", - " * Classification: Outputs are divided into two or more classes. The goal is to produce a model that assigns inputs into one of these classes. An example is to identify digits based on pictures of hand-written ones. Classification is typically supervised learning.\n", - "\n", - " * Regression: Finding a functional relationship between an input data set and a reference data set. The goal is to construct a function that maps input data to continuous output values.\n", - "\n", - " * Clustering: Data are divided into groups with certain common traits, without knowing the different groups beforehand. It is thus a form of unsupervised learning.\n", - "\n", - "The methods we cover have three main topics in common, irrespective of\n", - "whether we deal with supervised or unsupervised learning.\n", - "* The first ingredient is normally our data set (which can be subdivided into training, validation and test data). Many find the most difficult part of using Machine Learning to be the set up of your data in a meaningful way. \n", - "\n", - "* The second item is a model which is normally a function of some parameters. The model reflects our knowledge of the system (or lack thereof). As an example, if we know that our data show a behavior similar to what would be predicted by a polynomial, fitting our data to a polynomial of some degree would then determin our model. \n", - "\n", - "* The last ingredient is a so-called **cost/loss** function (or error or risk function) which allows us to present an estimate on how good our model is in reproducing the data it is supposed to train. \n", - "\n", - "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**." - ] - }, - { - "cell_type": "markdown", - "id": "87e67bf0", - "metadata": { - "editable": true - }, - "source": [ - "### A Frequentist approach to data analysis\n", - "\n", - "When you hear phrases like **predictions and estimations** and\n", - "**correlations and causations**, what do you think of? May be you think\n", - "of the difference between classifying new data points and generating\n", - "new data points.\n", - "Or perhaps you consider that correlations represent some kind of symmetric statements like\n", - "if $A$ is correlated with $B$, then $B$ is correlated with\n", - "$A$. Causation on the other hand is directional, that is if $A$ causes $B$, $B$ does not\n", - "necessarily cause $A$.\n", - "\n", - "These concepts are in some sense the difference between machine\n", - "learning and statistics. In machine learning and prediction based\n", - "tasks, we are often interested in developing algorithms that are\n", - "capable of learning patterns from given data in an automated fashion,\n", - "and then using these learned patterns to make predictions or\n", - "assessments of newly given data. In many cases, our primary concern\n", - "is the quality of the predictions or assessments, and we are less\n", - "concerned about the underlying patterns that were learned in order\n", - "to make these predictions.\n", - "\n", - "In machine learning we normally use [a so-called frequentist approach](https://en.wikipedia.org/wiki/Frequentist_inference),\n", - "where the aim is to make predictions and find correlations. We focus\n", - "less on for example extracting a probability distribution function (PDF). The PDF can be\n", - "used in turn to make estimations and find causations such as given $A$\n", - "what is the likelihood of finding $B$." - ] - }, - { - "cell_type": "markdown", - "id": "116ff5d7", - "metadata": { - "editable": true - }, - "source": [ - "### What is a good model?\n", - "\n", - "In science and engineering we often end up in situations where we want to infer (or learn) a\n", - "quantitative model $M$ for a given set of sample points $\\boldsymbol{X} \\in [x_1, x_2,\\dots x_N]$.\n", - "\n", - "As we will see repeatedely in these lectures, we could try to fit these data points to a model given by a\n", - "straight line, or if we wish to be more sophisticated to a more complex\n", - "function.\n", - "\n", - "The reason for inferring such a model is that it\n", - "serves many useful purposes. On the one hand, the model can reveal information\n", - "encoded in the data or underlying mechanisms from which the data were generated. For instance, we could discover important\n", - "corelations that relate interesting physics interpretations.\n", - "\n", - "In addition, it can simplify the representation of the given data set and help\n", - "us in making predictions about future data samples.\n", - "\n", - "A first important consideration to keep in mind is that inferring the *correct* model\n", - "for a given data set is an elusive, if not impossible, task. The fundamental difficulty\n", - "is that if we are not specific about what we mean by a *correct* model, there\n", - "could easily be many different models that fit the given data set *equally well*.\n", - "\n", - "The central question is this: what leads us to say that a model is correct or\n", - "optimal for a given data set? To make the model inference problem well posed, i.e.,\n", - "to guarantee that there is a unique optimal model for the given data, we need to\n", - "impose additional assumptions or restrictions on the class of models considered. To\n", - "this end, we should not be looking for just any model that can describe the data.\n", - "Instead, we should look for a **model** $M$ that is the best among a restricted class\n", - "of models. In addition, to make the model inference problem computationally\n", - "tractable, we need to specify how restricted the class of models needs to be. A\n", - "common strategy is to start \n", - "with the simplest possible class of models that is just necessary to describe the data\n", - "or solve the problem at hand. More precisely, the model class should be rich enough\n", - "to contain at least one model that can fit the data to a desired accuracy and yet be\n", - "restricted enough that it is relatively simple to find the best model for the given data.\n", - "\n", - "Thus, the most popular strategy is to start from the\n", - "simplest class of models and increase the complexity of the models only when the\n", - "simpler models become inadequate. For instance, if we work with a regression problem to fit a set of sample points, one\n", - "may first try the simplest class of models, namely linear models, followed obviously by more complex models.\n", - "\n", - "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures." - ] - }, - { - "cell_type": "markdown", - "id": "e813d7e7", - "metadata": { - "editable": true - }, - "source": [ - "## Simple linear regression model using **scikit-learn**\n", - "\n", - "We start with perhaps our simplest possible example, using\n", - "**Scikit-Learn** to perform linear regression analysis on a data set\n", - "produced by us.\n", - "\n", - "What follows is a simple Python code where we have defined a function\n", - "$y$ in terms of the variable $x$. Both are defined as vectors with $100$ entries. \n", - "The numbers in the vector $\\boldsymbol{x}$ are given\n", - "by random numbers generated with a uniform distribution with entries\n", - "$x_i \\in [0,1]$ (more about probability distribution functions\n", - "later). These values are then used to define a function $y(x)$\n", - "(tabulated again as a vector) with a linear dependence on $x$ plus a\n", - "random noise added via the normal distribution.\n", - "\n", - "The Numpy functions are imported used the **import numpy as np**\n", - "statement and the random number generator for the uniform distribution\n", - "is called using the function **np.random.rand()**, where we specificy\n", - "that we want $100$ random variables. Using Numpy we define\n", - "automatically an array with the specified number of elements, $100$ in\n", - "our case. With the Numpy function **randn()** we can compute random\n", - "numbers with the normal distribution (mean value $\\mu$ equal to zero and\n", - "variance $\\sigma^2$ set to one) and produce the values of $y$ assuming a linear\n", - "dependence as function of $x$" - ] - }, - { - "cell_type": "markdown", - "id": "3bdb20d3", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "y = 2x+N(0,1),\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "ff28cbbb", - "metadata": { - "editable": true - }, - "source": [ - "where $N(0,1)$ represents random numbers generated by the normal\n", - "distribution. From **Scikit-Learn** we import then the\n", - "**LinearRegression** functionality and make a prediction $\\tilde{y} =\n", - "\\alpha + \\beta x$ using the function **fit(x,y)**. We call the set of\n", - "data $(\\boldsymbol{x},\\boldsymbol{y})$ for our training data. The Python package\n", - "**scikit-learn** has also a functionality which extracts the above\n", - "fitting parameters $\\alpha$ and $\\beta$ (see below). Later we will\n", - "distinguish between training data and test data.\n", - "\n", - "For plotting we use the Python package\n", - "[matplotlib](https://matplotlib.org/) which produces publication\n", - "quality figures. Feel free to explore the extensive\n", - "[gallery](https://matplotlib.org/gallery/index.html) of examples. In\n", - "this example we plot our original values of $x$ and $y$ as well as the\n", - "prediction **ypredict** ($\\tilde{y}$), which attempts at fitting our\n", - "data with a straight line. Note also that **Scikit-Learn** requires a\n", - "matrix as input for the input values $x$ and $y$. In the above code we\n", - "have solved this by declaring $x$ and $y$ as arrays of dimension\n", - "$n\\times 1$.\n", - "\n", - "In the code here we have also made a new array for $x\\in [0,1]$. Our\n", - "prediction is computed for these values, meaning that they were not\n", - "included in the data set used to *train* (or fit) the model.\n", - "This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set.\n", - "Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!\n", - "\n", - "The Python code follows here." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "849e2d5e", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "\n", - "# Importing various packages\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.linear_model import LinearRegression\n", - "\n", - "x = np.random.rand(100,1)\n", - "y = 2*x+np.random.randn(100,1)\n", - "linreg = LinearRegression()\n", - "linreg.fit(x,y)\n", - "# This is our new x-array to which we test our model\n", - "xnew = np.array([[0],[1]])\n", - "ypredict = linreg.predict(xnew)\n", - "\n", - "plt.plot(xnew, ypredict, \"r-\")\n", - "plt.plot(x, y ,'ro')\n", - "plt.axis([0,1.0,0, 5.0])\n", - "plt.xlabel(r'$x$')\n", - "plt.ylabel(r'$y$')\n", - "plt.title(r'Simple Linear Regression')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "734feee8", - "metadata": { - "editable": true - }, - "source": [ - "This example serves several aims. It allows us to demonstrate several\n", - "aspects of data analysis and later machine learning algorithms. The\n", - "immediate visualization shows that our linear fit is not\n", - "impressive. It goes through the data points, but there are many\n", - "outliers which are not reproduced by our linear regression. We could\n", - "now play around with this small program and change for example the\n", - "factor in front of $x$ and the normal distribution. Try to change the\n", - "function $y$ to" - ] - }, - { - "cell_type": "markdown", - "id": "c5bcc732", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "y = 10x+0.01 \\times N(0,1),\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "cb80335e", - "metadata": { - "editable": true - }, - "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", - "our linear prediction seemingly reproduces better the training\n", - "set. However, this testing 'by the eye' is obviouly not satisfactory in the\n", - "long run. Here we have only defined the training data and our model, and \n", - "have not discussed a more rigorous approach to the **cost** function.\n", - "\n", - "We need more rigorous criteria in defining whether we have succeeded or\n", - "not in modeling our training data. You will be surprised to see that\n", - "many scientists seldomly venture beyond this 'by the eye' approach. A\n", - "standard approach for the *cost* function is the so-called $\\chi^2$\n", - "function (a variant of the mean-squared error (MSE))" - ] - }, - { - "cell_type": "markdown", - "id": "03d140b0", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\chi^2 = \\frac{1}{n}\n", - "\\sum_{i=0}^{n-1}\\frac{(y_i-\\tilde{y}_i)^2}{\\sigma_i^2},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "6dbeb67e", - "metadata": { - "editable": true - }, - "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", - "however the aim of scaling the equations and make the cost function\n", - "dimensionless. \n", - "\n", - "Minimizing the cost function is a central aspect of\n", - "our discussions to come. Finding its minima as function of the model\n", - "parameters ($\\alpha$ and $\\beta$ in our case) will be a recurring\n", - "theme in these series of lectures. Essentially all machine learning\n", - "algorithms we will discuss center around the minimization of the\n", - "chosen cost function. This depends in turn on our specific\n", - "model for describing the data, a typical situation in supervised\n", - "learning. Automatizing the search for the minima of the cost function is a\n", - "central ingredient in all algorithms. Typical methods which are\n", - "employed are various variants of **gradient** methods. These will be\n", - "discussed in more detail later. Again, you'll be surprised to hear that\n", - "many practitioners minimize the above function ''by the eye', popularly dubbed as \n", - "'chi by the eye'. That is, change a parameter and see (visually and numerically) that \n", - "the $\\chi^2$ function becomes smaller. \n", - "\n", - "There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define \n", - "the relative error (why would we prefer the MSE instead of the relative error?) as" - ] - }, - { - "cell_type": "markdown", - "id": "0198ef79", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "633dd2af", - "metadata": { - "editable": true - }, - "source": [ - "The squared cost function results in an arithmetic mean-unbiased\n", - "estimator, and the absolute-value cost function results in a\n", - "median-unbiased estimator (in the one-dimensional case, and a\n", - "geometric median-unbiased estimator for the multi-dimensional\n", - "case). The squared cost function has the disadvantage that it has the tendency\n", - "to be dominated by outliers.\n", - "\n", - "We can modify easily the above Python code and plot the relative error instead" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "bf583ac3", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.linear_model import LinearRegression\n", - "# Number of data points\n", - "n = 100\n", - "x = np.random.rand(100,1)\n", - "y = 5*x+0.01*np.random.randn(100,1)\n", - "linreg = LinearRegression()\n", - "linreg.fit(x,y)\n", - "ypredict = linreg.predict(x)\n", - "\n", - "plt.plot(x, np.abs(ypredict-y)/abs(y), \"ro\")\n", - "plt.axis([0,1.0,0.0, 0.5])\n", - "plt.xlabel(r'$x$')\n", - "plt.ylabel(r'$\\epsilon_{\\mathrm{relative}}$')\n", - "plt.title(r'Relative error')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "6b069c91", - "metadata": { - "editable": true - }, - "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", - "different training data sets and study (graphically) the value of the\n", - "relative error.\n", - "\n", - "As mentioned above, **Scikit-Learn** has an impressive functionality.\n", - "We can for example extract the values of $\\alpha$ and $\\beta$ and\n", - "their error estimates, or the variance and standard deviation and many\n", - "other properties from the statistical data analysis. \n", - "\n", - "Here we show an\n", - "example of the functionality of **Scikit-Learn**." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9d29be99", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import numpy as np \n", - "import matplotlib.pyplot as plt \n", - "from sklearn.linear_model import LinearRegression \n", - "from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error\n", - "\n", - "x = np.random.rand(100,1)\n", - "y = 2.0+ 5*x+0.5*np.random.randn(100,1)\n", - "linreg = LinearRegression()\n", - "linreg.fit(x,y)\n", - "ypredict = linreg.predict(x)\n", - "print('The intercept alpha: \\n', linreg.intercept_)\n", - "print('Coefficient beta : \\n', linreg.coef_)\n", - "# The mean squared error \n", - "print(\"Mean squared error: %.2f\" % mean_squared_error(y, ypredict))\n", - "# Explained variance score: 1 is perfect prediction \n", - "print('Variance score: %.2f' % r2_score(y, ypredict))\n", - "# Mean squared log error \n", - "print('Mean squared log error: %.2f' % mean_squared_log_error(y, ypredict) )\n", - "# Mean absolute error \n", - "print('Mean absolute error: %.2f' % mean_absolute_error(y, ypredict))\n", - "plt.plot(x, ypredict, \"r-\")\n", - "plt.plot(x, y ,'ro')\n", - "plt.axis([0.0,1.0,1.5, 7.0])\n", - "plt.xlabel(r'$x$')\n", - "plt.ylabel(r'$y$')\n", - "plt.title(r'Linear Regression fit ')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "dd9af8a3", - "metadata": { - "editable": true - }, - "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" - ] - }, - { - "cell_type": "markdown", - "id": "221214a2", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", - "\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "85c5a23a", - "metadata": { - "editable": true - }, - "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", - "this function as being similar to the $\\chi^2$ function defined above.\n", - "\n", - "The **r2score** function computes $R^2$, the coefficient of\n", - "determination. It provides a measure of how well future samples are\n", - "likely to be predicted by the model. Best possible score is 1.0 and it\n", - "can be negative (because the model can be arbitrarily worse). A\n", - "constant model that always predicts the expected value of $\\boldsymbol{y}$,\n", - "disregarding the input features, would get a $R^2$ score of $0.0$.\n", - "\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" - ] - }, - { - "cell_type": "markdown", - "id": "13bb3c27", - "metadata": { - "editable": true - }, - "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", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "14b239cf", - "metadata": { - "editable": true - }, - "source": [ - "where we have defined the mean value of $\\boldsymbol{y}$ as" - ] - }, - { - "cell_type": "markdown", - "id": "6ec9dd22", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "0535fc5e", - "metadata": { - "editable": true - }, - "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", - "The MAE is defined as follows" - ] - }, - { - "cell_type": "markdown", - "id": "bdd2ca32", - "metadata": { - "editable": true - }, - "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", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "c09fe672", - "metadata": { - "editable": true - }, - "source": [ - "We present the \n", - "squared logarithmic (quadratic) error" - ] - }, - { - "cell_type": "markdown", - "id": "fca276bc", - "metadata": { - "editable": true - }, - "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", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "c4815a94", - "metadata": { - "editable": true - }, - "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", - "as population counts, average sales of a commodity over a span of\n", - "years etc. \n", - "\n", - "Finally, another cost function is the Huber cost function used in robust regression.\n", - "\n", - "The rationale behind this possible cost function is its reduced\n", - "sensitivity to outliers in the data set. In our discussions on\n", - "dimensionality reduction and normalization of data we will meet other\n", - "ways of dealing with outliers.\n", - "\n", - "The Huber cost function is defined as" - ] - }, - { - "cell_type": "markdown", - "id": "7571aad6", - "metadata": { - "editable": true - }, - "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", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "dec20489", - "metadata": { - "editable": true - }, - "source": [ - "Here $\\boldsymbol{a}=\\boldsymbol{y} - \\boldsymbol{\\tilde{y}}$.\n", - "\n", - "We will discuss in more\n", - "detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n", - "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "d47b8bb2", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import random\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.preprocessing import PolynomialFeatures\n", - "from sklearn.pipeline import make_pipeline\n", - "from sklearn.linear_model import LinearRegression\n", - "\n", - "x=np.linspace(0.02,0.98,200)\n", - "noise = np.asarray(random.sample((range(200)),200))\n", - "y=x**3*noise\n", - "yn=x**3*100\n", - "poly3 = PolynomialFeatures(degree=3)\n", - "X = poly3.fit_transform(x[:,np.newaxis])\n", - "clf3 = LinearRegression()\n", - "clf3.fit(X,y)\n", - "\n", - "Xplot=poly3.fit_transform(x[:,np.newaxis])\n", - "poly3_plot=plt.plot(x, clf3.predict(Xplot), label='Cubic Fit')\n", - "plt.plot(x,yn, color='red', label=\"True Cubic\")\n", - "plt.scatter(x, y, label='Data', color='orange', s=15)\n", - "plt.legend()\n", - "plt.show()\n", - "\n", - "def error(a):\n", - " for i in y:\n", - " err=(y-yn)/yn\n", - " return abs(np.sum(err))/len(err)\n", - "\n", - "print (error(y))" - ] - }, - { - "cell_type": "markdown", - "id": "6540ba53", - "metadata": { - "editable": true - }, - "source": [ - "Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding\n", - "energies. A basic quantity which can be measured for the ground\n", - "states of nuclei is the atomic mass $M(N, Z)$ of the neutral atom with\n", - "atomic mass number $A$ and charge $Z$. The number of neutrons is $N$. There are indeed several sophisticated experiments worldwide which allow us to measure this quantity to high precision (parts per million even). \n", - "\n", - "Atomic masses are usually tabulated in terms of the mass excess defined by" - ] - }, - { - "cell_type": "markdown", - "id": "197a8385", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\Delta M(N, Z) = M(N, Z) - uA,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "92f8ee33", - "metadata": { - "editable": true - }, - "source": [ - "where $u$ is the Atomic Mass Unit" - ] - }, - { - "cell_type": "markdown", - "id": "2028de5a", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "fb4249db", - "metadata": { - "editable": true - }, - "source": [ - "The nucleon masses are" - ] - }, - { - "cell_type": "markdown", - "id": "7f85c04c", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "m_p = 1.00727646693(9)u,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "f1b4a593", - "metadata": { - "editable": true - }, - "source": [ - "and" - ] - }, - { - "cell_type": "markdown", - "id": "5a1a2210", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "9364b95e", - "metadata": { - "editable": true - }, - "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", - "\n", - "The nuclear binding energy is defined as the energy required to break\n", - "up a given nucleus into its constituent parts of $N$ neutrons and $Z$\n", - "protons. In terms of the atomic masses $M(N, Z)$ the binding energy is\n", - "defined by" - ] - }, - { - "cell_type": "markdown", - "id": "fb9273ea", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "0cce43b5", - "metadata": { - "editable": true - }, - "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" - ] - }, - { - "cell_type": "markdown", - "id": "ead7f32f", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "e22d63ca", - "metadata": { - "editable": true - }, - "source": [ - "where $\\Delta_H c^2 = 7.2890$ MeV and $\\Delta_n c^2 = 8.0713$ MeV.\n", - "\n", - "A popular and physically intuitive model which can be used to parametrize \n", - "the experimental binding energies as function of $A$, is the so-called \n", - "**liquid drop model**. The ansatz is based on the following expression" - ] - }, - { - "cell_type": "markdown", - "id": "5afa5ac0", - "metadata": { - "editable": true - }, - "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", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "2e34f131", - "metadata": { - "editable": true - }, - "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", - "\n", - "To arrive at the above expression we have assumed that we can make the following assumptions:\n", - "\n", - " * There is a volume term $a_1A$ proportional with the number of nucleons (the energy is also an extensive quantity). When an assembly of nucleons of the same size is packed together into the smallest volume, each interior nucleon has a certain number of other nucleons in contact with it. This contribution is proportional to the volume.\n", - "\n", - " * There is a surface energy term $a_2A^{2/3}$. The assumption here is that a nucleon at the surface of a nucleus interacts with fewer other nucleons than one in the interior of the nucleus and hence its binding energy is less. This surface energy term takes that into account and is therefore negative and is proportional to the surface area.\n", - "\n", - " * There is a Coulomb energy term $a_3\\frac{Z^2}{A^{1/3}}$. The electric repulsion between each pair of protons in a nucleus yields less binding. \n", - "\n", - " * There is an asymmetry term $a_4\\frac{(N-Z)^2}{A}$. This term is associated with the Pauli exclusion principle and reflects the fact that the proton-neutron interaction is more attractive on the average than the neutron-neutron and proton-proton interactions.\n", - "\n", - "We could also add a so-called pairing term, which is a correction term that\n", - "arises from the tendency of proton pairs and neutron pairs to\n", - "occur. An even number of particles is more stable than an odd number." - ] - }, - { - "cell_type": "markdown", - "id": "952f1a4e", - "metadata": { - "editable": true - }, - "source": [ - "### Organizing our data\n", - "\n", - "Let us start with reading and organizing our data. \n", - "We start with the compilation of masses and binding energies from 2016.\n", - "After having downloaded this file to our own computer, we are now ready to read the file and start structuring our data.\n", - "\n", - "We start with preparing folders for storing our calculations and the data file over masses and binding energies. We import also various modules that we will find useful in order to present various Machine Learning methods. Here we focus mainly on the functionality of **scikit-learn**." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "5a2348e9", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# Common imports\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import sklearn.linear_model as skl\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error\n", - "import os\n", - "\n", - "# Where to save the figures and data files\n", - "PROJECT_ROOT_DIR = \"Results\"\n", - "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", - "\n", - "if not os.path.exists(PROJECT_ROOT_DIR):\n", - " os.mkdir(PROJECT_ROOT_DIR)\n", - "\n", - "if not os.path.exists(FIGURE_ID):\n", - " os.makedirs(FIGURE_ID)\n", - "\n", - "if not os.path.exists(DATA_ID):\n", - " os.makedirs(DATA_ID)\n", - "\n", - "def image_path(fig_id):\n", - " return os.path.join(FIGURE_ID, fig_id)\n", - "\n", - "def data_path(dat_id):\n", - " return os.path.join(DATA_ID, dat_id)\n", - "\n", - "def save_fig(fig_id):\n", - " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", - "\n", - "infile = open(data_path(\"MassEval2016.dat\"),'r')" - ] - }, - { - "cell_type": "markdown", - "id": "8a4bbb48", - "metadata": { - "editable": true - }, - "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": 6, - "id": "0460fb72", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "from pylab import plt, mpl\n", - "plt.style.use('seaborn')\n", - "mpl.rcParams['font.family'] = 'serif'\n", - "\n", - "def MakePlot(x,y, styles, labels, axlabels):\n", - " plt.figure(figsize=(10,6))\n", - " for i in range(len(x)):\n", - " plt.plot(x[i], y[i], styles[i], label = labels[i])\n", - " plt.xlabel(axlabels[0])\n", - " plt.ylabel(axlabels[1])\n", - " plt.legend(loc=0)" - ] - }, - { - "cell_type": "markdown", - "id": "ca0ecd37", - "metadata": { - "editable": true - }, - "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", - "protons $Z$ and neutrons $N$ using **pandas**. Before we do this it is\n", - "always useful (unless you have a binary file or other types of compressed\n", - "data) to actually open the file and simply take a look at it!\n", - "\n", - "In particular, the program that outputs the final nuclear masses is written in Fortran with a specific format. It means that we need to figure out the format and which columns contain the data we are interested in. Pandas comes with a function that reads formatted output. After having admired the file, we are now ready to start massaging it with **pandas**. The file begins with some basic format information." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "36bf7516", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "\"\"\" \n", - "This is taken from the data file of the mass 2016 evaluation. \n", - "All files are 3436 lines long with 124 character per line. \n", - " Headers are 39 lines long. \n", - " col 1 : Fortran character control: 1 = page feed 0 = line feed \n", - " format : a1,i3,i5,i5,i5,1x,a3,a4,1x,f13.5,f11.5,f11.3,f9.3,1x,a2,f11.3,f9.3,1x,i3,1x,f12.5,f11.5 \n", - " These formats are reflected in the pandas widths variable below, see the statement \n", - " widths=(1,3,5,5,5,1,3,4,1,13,11,11,9,1,2,11,9,1,3,1,12,11,1), \n", - " Pandas has also a variable header, with length 39 in this case. \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "3c66ec96", - "metadata": { - "editable": true - }, - "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", - "respectively. We add also for the sake of completeness the element name. The data are in fixed-width formatted lines and we will\n", - "covert them into the **pandas** DataFrame structure." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "bedfdf26", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# Read the experimental data with Pandas\n", - "Masses = pd.read_fwf(infile, usecols=(2,3,4,6,11),\n", - " names=('N', 'Z', 'A', 'Element', 'Ebinding'),\n", - " widths=(1,3,5,5,5,1,3,4,1,13,11,11,9,1,2,11,9,1,3,1,12,11,1),\n", - " header=39,\n", - " index_col=False)\n", - "\n", - "# Extrapolated values are indicated by '#' in place of the decimal place, so\n", - "# the Ebinding column won't be numeric. Coerce to float and drop these entries.\n", - "Masses['Ebinding'] = pd.to_numeric(Masses['Ebinding'], errors='coerce')\n", - "Masses = Masses.dropna()\n", - "# Convert from keV to MeV.\n", - "Masses['Ebinding'] /= 1000\n", - "\n", - "# Group the DataFrame by nucleon number, A.\n", - "Masses = Masses.groupby('A')\n", - "# Find the rows of the grouped DataFrame with the maximum binding energy.\n", - "Masses = Masses.apply(lambda t: t[t.Ebinding==t.Ebinding.max()])" - ] - }, - { - "cell_type": "markdown", - "id": "c16f7a9c", - "metadata": { - "editable": true - }, - "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", - "were to do these operations in C/C++ or Fortran, we would have had to\n", - "write various functions/subroutines which perform the above\n", - "reorganizations for us. Having reorganized the data, we can now start\n", - "to make some simple fits using both the functionalities in **numpy** and\n", - "**Scikit-Learn** afterwards. \n", - "\n", - "Now we define five variables which contain\n", - "the number of nucleons $A$, the number of protons $Z$ and the number of neutrons $N$, the element name and finally the energies themselves." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "e4a0316f", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "A = Masses['A']\n", - "Z = Masses['Z']\n", - "N = Masses['N']\n", - "Element = Masses['Element']\n", - "Energies = Masses['Ebinding']\n", - "print(Masses)" - ] - }, - { - "cell_type": "markdown", - "id": "7a9d5603", - "metadata": { - "editable": true - }, - "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 $n\\times p$, 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." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "ed75b8f0", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# Now we set up the design matrix X\n", - "X = np.zeros((len(A),5))\n", - "X[:,0] = 1\n", - "X[:,1] = A\n", - "X[:,2] = A**(2.0/3.0)\n", - "X[:,3] = A**(-1.0/3.0)\n", - "X[:,4] = A**(-1.0)" - ] - }, - { - "cell_type": "markdown", - "id": "c159d19a", - "metadata": { - "editable": true - }, - "source": [ - "Note well that we have made life simple here. We perform a fit in\n", - "terms of the number of nucleons only. A more sophisticated fit can be\n", - "done by including an explicit dependence on the number of protons and\n", - "neutrons in the asymmetry and Coulomb terms. We leave this as an exercise to you the reader.\n", - "\n", - "With **Scikit-Learn** we are now ready to use linear regression and fit our data." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "4ca16e57", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "clf = skl.LinearRegression().fit(X, Energies)\n", - "fity = clf.predict(X)" - ] - }, - { - "cell_type": "markdown", - "id": "1e33c7a4", - "metadata": { - "editable": true - }, - "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." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "38cf3567", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# The mean squared error \n", - "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, fity))\n", - "# Explained variance score: 1 is perfect prediction \n", - "print('Variance score: %.2f' % r2_score(Energies, fity))\n", - "# Mean absolute error \n", - "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, fity))\n", - "\n", - "Masses['Eapprox'] = fity\n", - "# Generate a plot comparing the experimental with the fitted values values.\n", - "fig, ax = plt.subplots()\n", - "ax.set_xlabel(r'$A = N + Z$')\n", - "ax.set_ylabel(r'$E_\\mathrm{bind}\\,/\\mathrm{MeV}$')\n", - "ax.plot(Masses['A'], Masses['Ebinding'], alpha=0.7, lw=2,\n", - " label='Ame2016')\n", - "ax.plot(Masses['A'], Masses['Eapprox'], alpha=0.7, lw=2, c='m',\n", - " label='Fit')\n", - "ax.legend()\n", - "save_fig(\"Masses2016\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "ed1f440c", - "metadata": { - "editable": true - }, - "source": [ - "As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**!" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "b3192533", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "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_1.fit(X, Energies)\n", - "regr_2.fit(X, Energies)\n", - "regr_3.fit(X, Energies)\n", - "\n", - "\n", - "y_1 = regr_1.predict(X)\n", - "y_2 = regr_2.predict(X)\n", - "y_3=regr_3.predict(X)\n", - "Masses['Eapprox'] = y_3\n", - "# Plot the results\n", - "plt.figure()\n", - "plt.plot(A, Energies, color=\"blue\", label=\"Data\", linewidth=2)\n", - "plt.plot(A, y_1, color=\"red\", label=\"max_depth=5\", linewidth=2)\n", - "plt.plot(A, y_2, color=\"green\", label=\"max_depth=7\", linewidth=2)\n", - "plt.plot(A, y_3, color=\"m\", label=\"max_depth=9\", linewidth=2)\n", - "\n", - "plt.xlabel(\"$A$\")\n", - "plt.ylabel(\"$E$[MeV]\")\n", - "plt.title(\"Decision Tree Regression\")\n", - "plt.legend()\n", - "save_fig(\"Masses2016Trees\")\n", - "plt.show()\n", - "print(Masses)\n", - "print(np.mean( (Energies-y_1)**2))" - ] - }, - { - "cell_type": "markdown", - "id": "2c25359e", - "metadata": { - "editable": true - }, - "source": [ - "With a deeper and deeper tree level, we can almost reproduce every\n", - "single data point by increasing the max depth of the tree.\n", - "We can actually decide to make a decision tree which fits every single point.\n", - "As we will\n", - "see later, this has the benefit that we can really train a model which\n", - "traverses every single data point. However, the price we pay is that\n", - "we will easily overfit. That is, if we apply our model to unseen data,\n", - "we will most likely fail miserably in our attempt at making\n", - "predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.\n", - "\n", - "The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) \n", - "functionality." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "388a648e", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "from sklearn.neural_network import MLPRegressor\n", - "from sklearn.metrics import accuracy_score\n", - "import seaborn as sns\n", - "\n", - "X_train = X\n", - "Y_train = Energies\n", - "n_hidden_neurons = 100\n", - "epochs = 100\n", - "# store models for later use\n", - "eta_vals = np.logspace(-5, 1, 7)\n", - "lmbd_vals = np.logspace(-5, 1, 7)\n", - "# store the models for later use\n", - "DNN_scikit = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)\n", - "train_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))\n", - "sns.set()\n", - "for i, eta in enumerate(eta_vals):\n", - " for j, lmbd in enumerate(lmbd_vals):\n", - " dnn = MLPRegressor(hidden_layer_sizes=(n_hidden_neurons), activation='logistic',\n", - " alpha=lmbd, learning_rate_init=eta, max_iter=epochs)\n", - " dnn.fit(X_train, Y_train)\n", - " DNN_scikit[i][j] = dnn\n", - " train_accuracy[i][j] = dnn.score(X_train, Y_train)\n", - "\n", - "fig, ax = plt.subplots(figsize = (10, 10))\n", - "sns.heatmap(train_accuracy, annot=True, ax=ax, cmap=\"viridis\")\n", - "ax.set_title(\"Training Accuracy\")\n", - "ax.set_ylabel(\"$\\eta$\")\n", - "ax.set_xlabel(\"$\\lambda$\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "a534ad4e", - "metadata": { - "editable": true - }, - "source": [ - "## Linear Regression, basic elements\n", - "\n", - "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureAug27.mp4?vrtx=view-as-webpage).\n", - "\n", - "Fitting a continuous function with linear parameterization in terms of the parameters $\\boldsymbol{\\beta}$.\n", - "* Method of choice for fitting a continuous function!\n", - "\n", - "* Gives an excellent introduction to central Machine Learning features with **understandable pedagogical** links to other methods like **Neural Networks**, **Support Vector Machines** etc\n", - "\n", - "* Analytical expression for the fitting parameters $\\boldsymbol{\\beta}$\n", - "\n", - "* Analytical expressions for statistical propertiers like mean values, variances, confidence intervals and more\n", - "\n", - "* Analytical relation with probabilistic interpretations \n", - "\n", - "* Easy to introduce basic concepts like bias-variance tradeoff, cross-validation, resampling and regularization techniques and many other ML topics\n", - "\n", - "* Easy to code! And links well with classification problems and logistic regression and neural networks\n", - "\n", - "* Allows for **easy** hands-on understanding of gradient descent methods\n", - "\n", - "* and many more features\n", - "\n", - "For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n", - "Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n", - "\n", - "Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\\boldsymbol{x} =[x_0, x_1,\\dots, x_{n-1}]^T$. \n", - "The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n", - "\n", - "A regression model aims at finding a likelihood function $p(\\boldsymbol{y}\\vert \\boldsymbol{x})$, that is the conditional distribution for $\\boldsymbol{y}$ with a given $\\boldsymbol{x}$. The estimation of $p(\\boldsymbol{y}\\vert \\boldsymbol{x})$ is made using a data set with \n", - "* $n$ cases $i = 0, 1, 2, \\dots, n-1$ \n", - "\n", - "* Response (target, dependent or outcome) variable $y_i$ with $i = 0, 1, 2, \\dots, n-1$ \n", - "\n", - "* $p$ so-called explanatory (independent or predictor) variables $\\boldsymbol{x}_i=[x_{i0}, x_{i1}, \\dots, x_{ip-1}]$ with $i = 0, 1, 2, \\dots, n-1$ and explanatory variables running from $0$ to $p-1$. See below for more explicit examples. \n", - "\n", - " The goal of the regression analysis is to extract/exploit relationship between $\\boldsymbol{y}$ and $\\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things.\n", - "\n", - "Consider an experiment in which $p$ characteristics of $n$ samples are\n", - "measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix \n", - "$\\mathbf{X}$.\n", - "\n", - "The matrix $\\mathbf{X}$ is called the *design\n", - "matrix*. Additional information of the samples is available in the\n", - "form of $\\boldsymbol{y}$ (also as above). The variable $\\boldsymbol{y}$ is\n", - "generally referred to as the *response variable*. The aim of\n", - "regression analysis is to explain $\\boldsymbol{y}$ in terms of\n", - "$\\boldsymbol{X}$ through a functional relationship like $y_i =\n", - "f(\\mathbf{X}_{i,\\ast})$. When no prior knowledge on the form of\n", - "$f(\\cdot)$ is available, it is common to assume a linear relationship\n", - "between $\\boldsymbol{X}$ and $\\boldsymbol{y}$. This assumption gives rise to\n", - "the *linear regression model* where $\\boldsymbol{\\beta} = [\\beta_0, \\ldots,\n", - "\\beta_{p-1}]^{T}$ are the *regression parameters*. \n", - "\n", - "Linear regression gives us a set of analytical equations for the parameters $\\beta_j$.\n", - "\n", - "In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n", - "consider the model we discussed for describing nuclear binding energies. \n", - "\n", - "There we assumed that we could parametrize the data using a polynomial approximation based on the liquid drop model.\n", - "Assuming" - ] - }, - { - "cell_type": "markdown", - "id": "e88a6ca8", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "25b363fc", - "metadata": { - "editable": true - }, - "source": [ - "we have five predictors, that is the intercept, the $A$ dependent term, the $A^{2/3}$ term and the $A^{-1/3}$ and $A^{-1}$ terms.\n", - "This gives $p=0,1,2,3,4$. Furthermore we have $n$ entries for each predictor. It means that our design matrix is a \n", - "$p\\times n$ matrix $\\boldsymbol{X}$.\n", - "\n", - "Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the\n", - "so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \\times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression. \n", - "\n", - "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", - "\n", - "Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is" - ] - }, - { - "cell_type": "markdown", - "id": "ee870654", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "y=y(x) \\rightarrow y(x_i)=\\tilde{y}_i+\\epsilon_i=\\sum_{j=0}^{n-1} \\beta_j x_i^j+\\epsilon_i,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "531162a4", - "metadata": { - "editable": true - }, - "source": [ - "where $\\epsilon_i$ is the error in our approximation. \n", - "\n", - "For every set of values $y_i,x_i$ we have thus the corresponding set of equations" - ] - }, - { - "cell_type": "markdown", - "id": "dab2ce7b", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\begin{align*}\n", - "y_0&=\\beta_0+\\beta_1x_0^1+\\beta_2x_0^2+\\dots+\\beta_{n-1}x_0^{n-1}+\\epsilon_0\\\\\n", - "y_1&=\\beta_0+\\beta_1x_1^1+\\beta_2x_1^2+\\dots+\\beta_{n-1}x_1^{n-1}+\\epsilon_1\\\\\n", - "y_2&=\\beta_0+\\beta_1x_2^1+\\beta_2x_2^2+\\dots+\\beta_{n-1}x_2^{n-1}+\\epsilon_2\\\\\n", - "\\dots & \\dots \\\\\n", - "y_{n-1}&=\\beta_0+\\beta_1x_{n-1}^1+\\beta_2x_{n-1}^2+\\dots+\\beta_{n-1}x_{n-1}^{n-1}+\\epsilon_{n-1}.\\\\\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "fc16de28", - "metadata": { - "editable": true - }, - "source": [ - "Defining the vectors" - ] - }, - { - "cell_type": "markdown", - "id": "ea697f8f", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "a1662e73", - "metadata": { - "editable": true - }, - "source": [ - "and" - ] - }, - { - "cell_type": "markdown", - "id": "98882e41", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "9a3e0d78", - "metadata": { - "editable": true - }, - "source": [ - "and" - ] - }, - { - "cell_type": "markdown", - "id": "57c6837d", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "84a3c548", - "metadata": { - "editable": true - }, - "source": [ - "and the design matrix" - ] - }, - { - "cell_type": "markdown", - "id": "aa74b87a", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{X}=\n", - "\\begin{bmatrix} \n", - "1& x_{0}^1 &x_{0}^2& \\dots & \\dots &x_{0}^{n-1}\\\\\n", - "1& x_{1}^1 &x_{1}^2& \\dots & \\dots &x_{1}^{n-1}\\\\\n", - "1& x_{2}^1 &x_{2}^2& \\dots & \\dots &x_{2}^{n-1}\\\\ \n", - "\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n", - "1& x_{n-1}^1 &x_{n-1}^2& \\dots & \\dots &x_{n-1}^{n-1}\\\\\n", - "\\end{bmatrix}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "d847a903", - "metadata": { - "editable": true - }, - "source": [ - "we can rewrite our equations as" - ] - }, - { - "cell_type": "markdown", - "id": "4f3e6d28", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "e3b50da6", - "metadata": { - "editable": true - }, - "source": [ - "The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix).\n", - "\n", - "We are obviously not limited to the above polynomial expansions. We\n", - "could replace the various powers of $x$ with elements of Fourier\n", - "series or instead of $x_i^j$ we could have $\\cos{(j x_i)}$ or $\\sin{(j\n", - "x_i)}$, or time series or other orthogonal functions. For every set\n", - "of values $y_i,x_i$ we can then generalize the equations to" - ] - }, - { - "cell_type": "markdown", - "id": "81d56dbd", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\begin{align*}\n", - "y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n", - "y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n", - "y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_2\\\\\n", - "\\dots & \\dots \\\\\n", - "y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_i\\\\\n", - "\\dots & \\dots \\\\\n", - "y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_{n-1}x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "857628f9", - "metadata": { - "editable": true - }, - "source": [ - "**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**\n", - "\n", - "We redefine in turn the matrix $\\boldsymbol{X}$ as" - ] - }, - { - "cell_type": "markdown", - "id": "2d1a3940", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{X}=\n", - "\\begin{bmatrix} \n", - "x_{00}& x_{01} &x_{02}& \\dots & \\dots &x_{0,n-1}\\\\\n", - "x_{10}& x_{11} &x_{12}& \\dots & \\dots &x_{1,n-1}\\\\\n", - "x_{20}& x_{21} &x_{22}& \\dots & \\dots &x_{2,n-1}\\\\ \n", - "\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n", - "x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \\dots & \\dots &x_{n-1,n-1}\\\\\n", - "\\end{bmatrix}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "c42c31b4", - "metadata": { - "editable": true - }, - "source": [ - "and without loss of generality we rewrite again our equations as" - ] - }, - { - "cell_type": "markdown", - "id": "83b72ca8", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "d346abd2", - "metadata": { - "editable": true - }, - "source": [ - "The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values? \n", - "\n", - "We have defined the matrix $\\boldsymbol{X}$ via the equations" - ] - }, - { - "cell_type": "markdown", - "id": "5c9028d2", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\begin{align*}\n", - "y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n", - "y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n", - "y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_1\\\\\n", - "\\dots & \\dots \\\\\n", - "y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_1\\\\\n", - "\\dots & \\dots \\\\\n", - "y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_{n-1}x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "3333d187", - "metadata": { - "editable": true - }, - "source": [ - "As we noted above, we stayed with a system with the design matrix \n", - " $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times n}$, that is we have $p=n$. For reasons to come later (algorithmic arguments) we will hereafter define \n", - "our matrix as $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$, with the predictors refering to the column numbers and the entries $n$ being the row elements.\n", - "\n", - "In our [introductory notes](https://compphysics.github.io/MachineLearning/doc/pub/How2ReadData/html/How2ReadData.html) we looked at the so-called [liquid drop model](https://en.wikipedia.org/wiki/Semi-empirical_mass_formula). Let us remind ourselves about what we did by looking at the code.\n", - "\n", - "We restate the parts of the code we are most interested in." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "353875c9", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# Common imports\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "from IPython.display import display\n", - "import os\n", - "\n", - "# Where to save the figures and data files\n", - "PROJECT_ROOT_DIR = \"Results\"\n", - "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", - "\n", - "if not os.path.exists(PROJECT_ROOT_DIR):\n", - " os.mkdir(PROJECT_ROOT_DIR)\n", - "\n", - "if not os.path.exists(FIGURE_ID):\n", - " os.makedirs(FIGURE_ID)\n", - "\n", - "if not os.path.exists(DATA_ID):\n", - " os.makedirs(DATA_ID)\n", - "\n", - "def image_path(fig_id):\n", - " return os.path.join(FIGURE_ID, fig_id)\n", - "\n", - "def data_path(dat_id):\n", - " return os.path.join(DATA_ID, dat_id)\n", - "\n", - "def save_fig(fig_id):\n", - " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", - "\n", - "infile = open(data_path(\"MassEval2016.dat\"),'r')\n", - "\n", - "\n", - "# Read the experimental data with Pandas\n", - "Masses = pd.read_fwf(infile, usecols=(2,3,4,6,11),\n", - " names=('N', 'Z', 'A', 'Element', 'Ebinding'),\n", - " widths=(1,3,5,5,5,1,3,4,1,13,11,11,9,1,2,11,9,1,3,1,12,11,1),\n", - " header=39,\n", - " index_col=False)\n", - "\n", - "# Extrapolated values are indicated by '#' in place of the decimal place, so\n", - "# the Ebinding column won't be numeric. Coerce to float and drop these entries.\n", - "Masses['Ebinding'] = pd.to_numeric(Masses['Ebinding'], errors='coerce')\n", - "Masses = Masses.dropna()\n", - "# Convert from keV to MeV.\n", - "Masses['Ebinding'] /= 1000\n", - "\n", - "# Group the DataFrame by nucleon number, A.\n", - "Masses = Masses.groupby('A')\n", - "# Find the rows of the grouped DataFrame with the maximum binding energy.\n", - "Masses = Masses.apply(lambda t: t[t.Ebinding==t.Ebinding.max()])\n", - "A = Masses['A']\n", - "Z = Masses['Z']\n", - "N = Masses['N']\n", - "Element = Masses['Element']\n", - "Energies = Masses['Ebinding']\n", - "\n", - "# Now we set up the design matrix X\n", - "X = np.zeros((len(A),5))\n", - "X[:,0] = 1\n", - "X[:,1] = A\n", - "X[:,2] = A**(2.0/3.0)\n", - "X[:,3] = A**(-1.0/3.0)\n", - "X[:,4] = A**(-1.0)\n", - "# Then nice printout using pandas\n", - "DesignMatrix = pd.DataFrame(X)\n", - "DesignMatrix.index = A\n", - "DesignMatrix.columns = ['1', 'A', 'A^(2/3)', 'A^(-1/3)', '1/A']\n", - "display(DesignMatrix)" - ] - }, - { - "cell_type": "markdown", - "id": "9b2ec4b2", - "metadata": { - "editable": true - }, - "source": [ - "With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as" - ] - }, - { - "cell_type": "markdown", - "id": "31d92a8f", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "34243326", - "metadata": { - "editable": true - }, - "source": [ - "throughout these lectures. \n", - "\n", - "With the above we use the design matrix to define the approximation $\\boldsymbol{\\tilde{y}}$ via the unknown quantity $\\boldsymbol{\\beta}$ as" - ] - }, - { - "cell_type": "markdown", - "id": "efb063d1", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "89c551a4", - "metadata": { - "editable": true - }, - "source": [ - "and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely" - ] - }, - { - "cell_type": "markdown", - "id": "7edbaa2d", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "ad91f91f", - "metadata": { - "editable": true - }, - "source": [ - "or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as" - ] - }, - { - "cell_type": "markdown", - "id": "d8e77f3b", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "d1e41018", - "metadata": { - "editable": true - }, - "source": [ - "This function is one possible way to define the so-called cost function.\n", - "\n", - "It is also common to define\n", - "the function $C$ as" - ] - }, - { - "cell_type": "markdown", - "id": "998294a3", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "12ad4cff", - "metadata": { - "editable": true - }, - "source": [ - "since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out. \n", - "\n", - "The function" - ] - }, - { - "cell_type": "markdown", - "id": "27b8d13f", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "fba91a26", - "metadata": { - "editable": true - }, - "source": [ - "can be linked to the variance of the quantity $y_i$ if we interpret the latter as the mean value. \n", - "When linking (see the discussion below) with the maximum likelihood approach below, we will indeed interpret $y_i$ as a mean value" - ] - }, - { - "cell_type": "markdown", - "id": "a0aa0c5c", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "y_{i}=\\langle y_i \\rangle = \\beta_0x_{i,0}+\\beta_1x_{i,1}+\\beta_2x_{i,2}+\\dots+\\beta_{n-1}x_{i,n-1}+\\epsilon_i,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "4697643d", - "metadata": { - "editable": true - }, - "source": [ - "where $\\langle y_i \\rangle$ is the mean value. Keep in mind also that\n", - "till now we have treated $y_i$ as the exact value. Normally, the\n", - "response (dependent or outcome) variable $y_i$ the outcome of a\n", - "numerical experiment or another type of experiment and is thus only an\n", - "approximation to the true value. It is then always accompanied by an\n", - "error estimate, often limited to a statistical error estimate given by\n", - "the standard deviation discussed earlier. In the discussion here we\n", - "will treat $y_i$ as our exact value for the response variable.\n", - "\n", - "In order to find the parameters $\\beta_i$ we will then minimize the spread of $C(\\boldsymbol{\\beta})$, that is we are going to solve the problem" - ] - }, - { - "cell_type": "markdown", - "id": "39f478a0", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", - "{\\mathbb{R}}^{p}}}\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "f0241afe", - "metadata": { - "editable": true - }, - "source": [ - "In practical terms it means we will require" - ] - }, - { - "cell_type": "markdown", - "id": "fce38de2", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)^2\\right]=0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "6c08544f", - "metadata": { - "editable": true - }, - "source": [ - "which results in" - ] - }, - { - "cell_type": "markdown", - "id": "04cb11f5", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_{ij}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)\\right]=0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "80f58831", - "metadata": { - "editable": true - }, - "source": [ - "or in a matrix-vector form as" - ] - }, - { - "cell_type": "markdown", - "id": "d5d00d83", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "6c41e17b", - "metadata": { - "editable": true - }, - "source": [ - "We can rewrite" - ] - }, - { - "cell_type": "markdown", - "id": "2a84da97", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "bb72ee7e", - "metadata": { - "editable": true - }, - "source": [ - "as" - ] - }, - { - "cell_type": "markdown", - "id": "8de2c11f", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "0097a863", - "metadata": { - "editable": true - }, - "source": [ - "and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution" - ] - }, - { - "cell_type": "markdown", - "id": "a12d4833", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "c2959173", - "metadata": { - "editable": true - }, - "source": [ - "We note also that since our design matrix is defined as $\\boldsymbol{X}\\in\n", - "{\\mathbb{R}}^{n\\times p}$, the product $\\boldsymbol{X}^T\\boldsymbol{X} \\in\n", - "{\\mathbb{R}}^{p\\times p}$. In the above case we have that $p \\ll n$,\n", - "in our case $p=5$ meaning that we end up with inverting a small\n", - "$5\\times 5$ matrix. This is a rather common situation, in many cases we end up with low-dimensional\n", - "matrices to invert. The methods discussed here and for many other\n", - "supervised learning algorithms like classification with logistic\n", - "regression or support vector machines, exhibit dimensionalities which\n", - "allow for the usage of direct linear algebra methods such as **LU** decomposition or **Singular Value Decomposition** (SVD) for finding the inverse of the matrix\n", - "$\\boldsymbol{X}^T\\boldsymbol{X}$. \n", - "\n", - "**Small question**: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$? What kind of problems can we expect? \n", - "\n", - "The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and \n", - "matrices as upper case boldfaced letters." - ] - }, - { - "cell_type": "markdown", - "id": "2052d76c", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial\\boldsymbol{b}^T\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=\\boldsymbol{b},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "b52ba39b", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial\\boldsymbol{a}^T\\boldsymbol{A}\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=(\\boldsymbol{A}+\\boldsymbol{A}^T)\\boldsymbol{a},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "0cc70939", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial tr(\\boldsymbol{B}\\boldsymbol{A})}{\\partial\\boldsymbol{A}}=\\boldsymbol{B}^T,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "793face0", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial\\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}}=(\\boldsymbol{A}^{-1})^T.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "5f51c6e0", - "metadata": { - "editable": true - }, - "source": [ - "We can then compute the second derivative of the cost function, which in our case is the second derivative\n", - "of the means squared error. This leads to" - ] - }, - { - "cell_type": "markdown", - "id": "6675f933", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial^2 C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}^T\\partial \\boldsymbol{\\beta}} =\\frac{2}{n}\\boldsymbol{X}^T\\boldsymbol{X}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "ebd22a84", - "metadata": { - "editable": true - }, - "source": [ - "This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).\n", - "\n", - "The Hessian matrix plays an important role and is defined for the mean squared error as" - ] - }, - { - "cell_type": "markdown", - "id": "d1ba4497", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "066d533a", - "metadata": { - "editable": true - }, - "source": [ - "The Hessian matrix for ordinary least squares is also proportional to\n", - "the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find\n", - "the eigenvalues of the covariance matrix and the Hessian matrix in\n", - "terms of the singular values.\n", - "\n", - "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" - ] - }, - { - "cell_type": "markdown", - "id": "11166d2a", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "f45efc00", - "metadata": { - "editable": true - }, - "source": [ - "and with" - ] - }, - { - "cell_type": "markdown", - "id": "d2421edc", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "37c4dc8b", - "metadata": { - "editable": true - }, - "source": [ - "we have" - ] - }, - { - "cell_type": "markdown", - "id": "1827aadc", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "6f377416", - "metadata": { - "editable": true - }, - "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", - "Let us now return to our nuclear binding energies and simply code the above equations. \n", - "\n", - "It is rather straightforward to implement the matrix inversion and obtain the parameters $\\boldsymbol{\\beta}$. After having defined the matrix $\\boldsymbol{X}$ we simply need to \n", - "write" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "56ad6a65", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# matrix inversion to find beta\n", - "beta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Energies)\n", - "# and then make the prediction\n", - "ytilde = X @ beta" - ] - }, - { - "cell_type": "markdown", - "id": "f14523f7", - "metadata": { - "editable": true - }, - "source": [ - "Alternatively, you can use the least squares functionality in **Numpy** as" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "b1e2a455", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "fit = np.linalg.lstsq(X, Energies, rcond =None)[0]\n", - "ytildenp = np.dot(fit,X.T)" - ] - }, - { - "cell_type": "markdown", - "id": "dd834990", - "metadata": { - "editable": true - }, - "source": [ - "And finally we plot our fit with and compare with data" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "d051a9f9", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "Masses['Eapprox'] = ytilde\n", - "# Generate a plot comparing the experimental with the fitted values values.\n", - "fig, ax = plt.subplots()\n", - "ax.set_xlabel(r'$A = N + Z$')\n", - "ax.set_ylabel(r'$E_\\mathrm{bind}\\,/\\mathrm{MeV}$')\n", - "ax.plot(Masses['A'], Masses['Ebinding'], alpha=0.7, lw=2,\n", - " label='Ame2016')\n", - "ax.plot(Masses['A'], Masses['Eapprox'], alpha=0.7, lw=2, c='m',\n", - " label='Fit')\n", - "ax.legend()\n", - "save_fig(\"Masses2016OLS\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "7528b95b", - "metadata": { - "editable": true - }, - "source": [ - "We can easily test our fit by computing the $R2$ score that we discussed in connection with the functionality of **Scikit-Learn** in the introductory slides.\n", - "Since we are not using **Scikit-Learn** here we can define our own $R2$ function as" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "f285746f", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "def R2(y_data, y_model):\n", - " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)" - ] - }, - { - "cell_type": "markdown", - "id": "d6cbf368", - "metadata": { - "editable": true - }, - "source": [ - "and we would be using it as" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "5d65a4fb", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "print(R2(Energies,ytilde))" - ] - }, - { - "cell_type": "markdown", - "id": "5008ed82", - "metadata": { - "editable": true - }, - "source": [ - "We can easily add our **MSE** score as" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "2fe3c9b1", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "def MSE(y_data,y_model):\n", - " n = np.size(y_model)\n", - " return np.sum((y_data-y_model)**2)/n\n", - "\n", - "print(MSE(Energies,ytilde))" - ] - }, - { - "cell_type": "markdown", - "id": "9641b76a", - "metadata": { - "editable": true - }, - "source": [ - "and finally the relative error as" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "ec2c053f", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "def RelativeError(y_data,y_model):\n", - " return abs((y_data-y_model)/y_data)\n", - "print(RelativeError(Energies, ytilde))" - ] - }, - { - "cell_type": "markdown", - "id": "23107725", - "metadata": { - "editable": true - }, - "source": [ - "### The $\\chi^2$ function\n", - "\n", - "Normally, the response (dependent or outcome) variable $y_i$ is the\n", - "outcome of a numerical experiment or another type of experiment and is\n", - "thus only an approximation to the true value. It is then always\n", - "accompanied by an error estimate, often limited to a statistical error\n", - "estimate given by the standard deviation discussed earlier. In the\n", - "discussion here we will treat $y_i$ as our exact value for the\n", - "response variable.\n", - "\n", - "Introducing the standard deviation $\\sigma_i$ for each measurement\n", - "$y_i$, we define now the $\\chi^2$ function (omitting the $1/n$ term)\n", - "as" - ] - }, - { - "cell_type": "markdown", - "id": "e5e8f59d", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\chi^2(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\frac{\\left(y_i-\\tilde{y}_i\\right)^2}{\\sigma_i^2}=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\frac{1}{\\boldsymbol{\\Sigma^2}}\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "2c42caf5", - "metadata": { - "editable": true - }, - "source": [ - "where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements. \n", - "\n", - "In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\boldsymbol{\\beta})$ by requiring" - ] - }, - { - "cell_type": "markdown", - "id": "47763df9", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)^2\\right]=0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "a0063426", - "metadata": { - "editable": true - }, - "source": [ - "which results in" - ] - }, - { - "cell_type": "markdown", - "id": "ae99ac64", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}\\frac{x_{ij}}{\\sigma_i}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)\\right]=0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "dd87eb2b", - "metadata": { - "editable": true - }, - "source": [ - "or in a matrix-vector form as" - ] - }, - { - "cell_type": "markdown", - "id": "79471ec8", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "3c481fab", - "metadata": { - "editable": true - }, - "source": [ - "where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$. \n", - "\n", - "We can rewrite" - ] - }, - { - "cell_type": "markdown", - "id": "efe01f34", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "76c0d9db", - "metadata": { - "editable": true - }, - "source": [ - "as" - ] - }, - { - "cell_type": "markdown", - "id": "eec993ea", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "69c23f76", - "metadata": { - "editable": true - }, - "source": [ - "and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution" - ] - }, - { - "cell_type": "markdown", - "id": "9aece507", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "b164740e", - "metadata": { - "editable": true - }, - "source": [ - "If we then introduce the matrix" - ] - }, - { - "cell_type": "markdown", - "id": "6b9d3eac", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "72db4dda", - "metadata": { - "editable": true - }, - "source": [ - "we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)" - ] - }, - { - "cell_type": "markdown", - "id": "458e868e", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\beta_j = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}\\frac{y_i}{\\sigma_i}\\frac{x_{ik}}{\\sigma_i} = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}b_ia_{ik}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "14120da0", - "metadata": { - "editable": true - }, - "source": [ - "We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)" - ] - }, - { - "cell_type": "markdown", - "id": "de315ce1", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\sigma^2(\\beta_j) = \\sum_{i=0}^{n-1}\\sigma_i^2\\left( \\frac{\\partial \\beta_j}{\\partial y_i}\\right)^2,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "c4627c98", - "metadata": { - "editable": true - }, - "source": [ - "resulting in" - ] - }, - { - "cell_type": "markdown", - "id": "0a017823", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\sigma^2(\\beta_j) = \\left(\\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}a_{ik}\\right)\\left(\\sum_{l=0}^{p-1}h_{jl}\\sum_{m=0}^{n-1}a_{ml}\\right) = h_{jj}!\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "b27ceac7", - "metadata": { - "editable": true - }, - "source": [ - "The first step here is to approximate the function $y$ with a first-order polynomial, that is we write" - ] - }, - { - "cell_type": "markdown", - "id": "abdb9cfb", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "6065ef18", - "metadata": { - "editable": true - }, - "source": [ - "By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by" - ] - }, - { - "cell_type": "markdown", - "id": "01b6fe26", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_0} = -2\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "414ff7bd", - "metadata": { - "editable": true - }, - "source": [ - "and" - ] - }, - { - "cell_type": "markdown", - "id": "6ed7bb4c", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_1} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_i\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "993edfbb", - "metadata": { - "editable": true - }, - "source": [ - "For a linear fit (a first-order polynomial) we don't need to invert a matrix!! \n", - "Defining" - ] - }, - { - "cell_type": "markdown", - "id": "b5ce44a7", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "88bec43f", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "2a9e5919", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "8b7c5212", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "96392911", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "66f56c20", - "metadata": { - "editable": true - }, - "source": [ - "we obtain" - ] - }, - { - "cell_type": "markdown", - "id": "d073d88a", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "e10c263c", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "73e6d72b", - "metadata": { - "editable": true - }, - "source": [ - "This approach (different linear and non-linear regression) suffers\n", - "often from both being underdetermined and overdetermined in the\n", - "unknown coefficients $\\beta_i$. A better approach is to use the\n", - "Singular Value Decomposition (SVD) method discussed below. Or using\n", - "Lasso and Ridge regression. See below." - ] - }, - { - "cell_type": "markdown", - "id": "f6b5761a", - "metadata": { - "editable": true - }, - "source": [ - "### Fitting an Equation of State for Dense Nuclear Matter\n", - "\n", - "Before we continue, let us introduce yet another example. We are going to fit the\n", - "nuclear equation of state using results from many-body calculations.\n", - "The equation of state we have made available here, as function of\n", - "density, has been derived using modern nucleon-nucleon potentials with\n", - "[the addition of three-body\n", - "forces](https://www.sciencedirect.com/science/article/pii/S0370157399001106). This\n", - "time the file is presented as a standard **csv** file.\n", - "\n", - "The beginning of the Python code here is similar to what you have seen\n", - "before, with the same initializations and declarations. We use also\n", - "**pandas** again, rather extensively in order to organize our data.\n", - "\n", - "The difference now is that we use **Scikit-Learn's** regression tools\n", - "instead of our own matrix inversion implementation." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "540f29fd", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# Common imports\n", - "import os\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import matplotlib.pyplot as plt\n", - "import sklearn.linear_model as skl\n", - "from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error\n", - "\n", - "# Where to save the figures and data files\n", - "PROJECT_ROOT_DIR = \"Results\"\n", - "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", - "\n", - "if not os.path.exists(PROJECT_ROOT_DIR):\n", - " os.mkdir(PROJECT_ROOT_DIR)\n", - "\n", - "if not os.path.exists(FIGURE_ID):\n", - " os.makedirs(FIGURE_ID)\n", - "\n", - "if not os.path.exists(DATA_ID):\n", - " os.makedirs(DATA_ID)\n", - "\n", - "def image_path(fig_id):\n", - " return os.path.join(FIGURE_ID, fig_id)\n", - "\n", - "def data_path(dat_id):\n", - " return os.path.join(DATA_ID, dat_id)\n", - "\n", - "def save_fig(fig_id):\n", - " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", - "\n", - "infile = open(data_path(\"EoS.csv\"),'r')\n", - "\n", - "# Read the EoS data as csv file and organize the data into two arrays with density and energies\n", - "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", - "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", - "EoS = EoS.dropna()\n", - "Energies = EoS['Energy']\n", - "Density = EoS['Density']\n", - "# The design matrix now as function of various polytrops\n", - "X = np.zeros((len(Density),4))\n", - "X[:,3] = Density**(4.0/3.0)\n", - "X[:,2] = Density\n", - "X[:,1] = Density**(2.0/3.0)\n", - "X[:,0] = 1\n", - "\n", - "# We use now Scikit-Learn's linear regressor and ridge regressor\n", - "# OLS part\n", - "clf = skl.LinearRegression().fit(X, Energies)\n", - "ytilde = clf.predict(X)\n", - "EoS['Eols'] = ytilde\n", - "# The mean squared error \n", - "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, ytilde))\n", - "# Explained variance score: 1 is perfect prediction \n", - "print('Variance score: %.2f' % r2_score(Energies, ytilde))\n", - "# Mean absolute error \n", - "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, ytilde))\n", - "print(clf.coef_, clf.intercept_)\n", - "\n", - "\n", - "fig, ax = plt.subplots()\n", - "ax.set_xlabel(r'$\\rho[\\mathrm{fm}^{-3}]$')\n", - "ax.set_ylabel(r'Energy per particle')\n", - "ax.plot(EoS['Density'], EoS['Energy'], alpha=0.7, lw=2,\n", - " label='Theoretical data')\n", - "ax.plot(EoS['Density'], EoS['Eols'], alpha=0.7, lw=2, c='m',\n", - " label='OLS')\n", - "ax.legend()\n", - "save_fig(\"EoSfitting\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "dced161c", - "metadata": { - "editable": true - }, - "source": [ - "The above simple polynomial in density $\\rho$ gives an excellent fit\n", - "to the data." - ] - }, - { - "cell_type": "markdown", - "id": "a8de86a4", - "metadata": { - "editable": true - }, - "source": [ - "## Splitting our Data in Training and Test data\n", - "\n", - "It is normal in essentially all Machine Learning studies to split the\n", - "data in a training set and a test set (sometimes also an additional\n", - "validation set). **Scikit-Learn** has an own function for this. There\n", - "is no explicit recipe for how much data should be included as training\n", - "data and say test data. An accepted rule of thumb is to use\n", - "approximately $2/3$ to $4/5$ of the data as training data. We will\n", - "postpone a discussion of this splitting to the end of these notes and\n", - "our discussion of the so-called **bias-variance** tradeoff. Here we\n", - "limit ourselves to repeat the above equation of state fitting example\n", - "but now splitting the data into a training set and a test set.\n", - "\n", - "Let us study some examples. The first code here takes a simple\n", - "one-dimensional second-order polynomial and we fit it to a\n", - "second-order polynomial. Depending on the strength of the added noise,\n", - "the various measures like the $R2$ score or the mean-squared error,\n", - "the fit becomes better or worse." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "9fc00294", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import os\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "\n", - "def R2(y_data, y_model):\n", - " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n", - "def MSE(y_data,y_model):\n", - " n = np.size(y_model)\n", - " return np.sum((y_data-y_model)**2)/n\n", - "\n", - "x = np.random.rand(100)\n", - "y = 2.0+5*x*x+0.1*np.random.randn(100)\n", - "\n", - "\n", - "# The design matrix now as function of a given polynomial\n", - "X = np.zeros((len(x),3))\n", - "X[:,0] = 1.0\n", - "X[:,1] = x\n", - "X[:,2] = x**2\n", - "# We split the data in test and training data\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", - "# matrix inversion to find beta\n", - "beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train\n", - "print(beta)\n", - "# and then make the prediction\n", - "ytilde = X_train @ beta\n", - "print(\"Training R2\")\n", - "print(R2(y_train,ytilde))\n", - "print(\"Training MSE\")\n", - "print(MSE(y_train,ytilde))\n", - "ypredict = X_test @ beta\n", - "print(\"Test R2\")\n", - "print(R2(y_test,ypredict))\n", - "print(\"Test MSE\")\n", - "print(MSE(y_test,ypredict))" - ] - }, - { - "cell_type": "markdown", - "id": "230a73ae", - "metadata": { - "editable": true - }, - "source": [ - "Alternatively, you could write your own test-train splitting function as shown here." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "44159f62", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# equivalently in numpy\n", - "def train_test_split_numpy(inputs, labels, train_size, test_size):\n", - " n_inputs = len(inputs)\n", - " inputs_shuffled = inputs.copy()\n", - " labels_shuffled = labels.copy()\n", - "\n", - " np.random.shuffle(inputs_shuffled)\n", - " np.random.shuffle(labels_shuffled)\n", - "\n", - " train_end = int(n_inputs*train_size)\n", - " X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]\n", - " Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]\n", - "\n", - " return X_train, X_test, Y_train, Y_test" - ] - }, - { - "cell_type": "markdown", - "id": "f97b8ec0", - "metadata": { - "editable": true - }, - "source": [ - "But since **scikit-learn** has its own function for doing this and since\n", - "it interfaces easily with **tensorflow** and other libraries, we\n", - "normally recommend using the latter functionality.\n", - "\n", - "As another example, we apply the training and testing split to \n", - "to the above equation of state fitting example\n", - "but now splitting the data into a training set and a test set." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "b0a51b9e", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import os\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import train_test_split\n", - "# Where to save the figures and data files\n", - "PROJECT_ROOT_DIR = \"Results\"\n", - "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", - "\n", - "if not os.path.exists(PROJECT_ROOT_DIR):\n", - " os.mkdir(PROJECT_ROOT_DIR)\n", - "\n", - "if not os.path.exists(FIGURE_ID):\n", - " os.makedirs(FIGURE_ID)\n", - "\n", - "if not os.path.exists(DATA_ID):\n", - " os.makedirs(DATA_ID)\n", - "\n", - "def image_path(fig_id):\n", - " return os.path.join(FIGURE_ID, fig_id)\n", - "\n", - "def data_path(dat_id):\n", - " return os.path.join(DATA_ID, dat_id)\n", - "\n", - "def save_fig(fig_id):\n", - " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", - "\n", - "def R2(y_data, y_model):\n", - " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n", - "def MSE(y_data,y_model):\n", - " n = np.size(y_model)\n", - " return np.sum((y_data-y_model)**2)/n\n", - "\n", - "infile = open(data_path(\"EoS.csv\"),'r')\n", - "\n", - "# Read the EoS data as csv file and organized into two arrays with density and energies\n", - "EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n", - "EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n", - "EoS = EoS.dropna()\n", - "Energies = EoS['Energy']\n", - "Density = EoS['Density']\n", - "# The design matrix now as function of various polytrops\n", - "X = np.zeros((len(Density),5))\n", - "X[:,0] = 1\n", - "X[:,1] = Density**(2.0/3.0)\n", - "X[:,2] = Density\n", - "X[:,3] = Density**(4.0/3.0)\n", - "X[:,4] = Density**(5.0/3.0)\n", - "# We split the data in test and training data\n", - "X_train, X_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)\n", - "# matrix inversion to find beta\n", - "beta = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(y_train)\n", - "# and then make the prediction\n", - "ytilde = X_train @ beta\n", - "print(\"Training R2\")\n", - "print(R2(y_train,ytilde))\n", - "print(\"Training MSE\")\n", - "print(MSE(y_train,ytilde))\n", - "ypredict = X_test @ beta\n", - "print(\"Test R2\")\n", - "print(R2(y_test,ypredict))\n", - "print(\"Test MSE\")\n", - "print(MSE(y_test,ypredict))" - ] - }, - { - "cell_type": "markdown", - "id": "1770afec", - "metadata": { - "editable": true - }, - "source": [ - "## The Boston housing data example\n", - "\n", - "The Boston housing \n", - "data set was originally a part of UCI Machine Learning Repository\n", - "and has been removed now. The data set is now included in **Scikit-Learn**'s \n", - "library. There are 506 samples and 13 feature (predictor) variables\n", - "in this data set. The objective is to predict the value of prices of\n", - "the house using the features (predictors) listed here.\n", - "\n", - "The features/predictors are\n", - "1. CRIM: Per capita crime rate by town\n", - "\n", - "2. ZN: Proportion of residential land zoned for lots over 25000 square feet\n", - "\n", - "3. INDUS: Proportion of non-retail business acres per town\n", - "\n", - "4. CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", - "\n", - "5. NOX: Nitric oxide concentration (parts per 10 million)\n", - "\n", - "6. RM: Average number of rooms per dwelling\n", - "\n", - "7. AGE: Proportion of owner-occupied units built prior to 1940\n", - "\n", - "8. DIS: Weighted distances to five Boston employment centers\n", - "\n", - "9. RAD: Index of accessibility to radial highways\n", - "\n", - "10. TAX: Full-value property tax rate per USD10000\n", - "\n", - "11. B: $1000(Bk - 0.63)^2$, where $Bk$ is the proportion of [people of African American descent] by town\n", - "\n", - "12. LSTAT: Percentage of lower status of the population\n", - "\n", - "13. MEDV: Median value of owner-occupied homes in USD 1000s" - ] - }, - { - "cell_type": "markdown", - "id": "5aff6cc0", - "metadata": { - "editable": true - }, - "source": [ - "## Housing data, the code\n", - "We start by importing the libraries" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "d38176fb", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt \n", - "\n", - "import pandas as pd \n", - "import seaborn as sns" - ] - }, - { - "cell_type": "markdown", - "id": "5261036b", - "metadata": { - "editable": true - }, - "source": [ - "and load the Boston Housing DataSet from **Scikit-Learn**" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "8620e357", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "from sklearn.datasets import load_boston\n", - "\n", - "boston_dataset = load_boston()\n", - "\n", - "# boston_dataset is a dictionary\n", - "# let's check what it contains\n", - "boston_dataset.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "3efe2d46", - "metadata": { - "editable": true - }, - "source": [ - "Then we invoke Pandas" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "df229a55", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)\n", - "boston.head()\n", - "boston['MEDV'] = boston_dataset.target" - ] - }, - { - "cell_type": "markdown", - "id": "88f2726b", - "metadata": { - "editable": true - }, - "source": [ - "and preprocess the data" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "2cce6e9d", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# check for missing values in all the columns\n", - "boston.isnull().sum()" - ] - }, - { - "cell_type": "markdown", - "id": "d57071f7", - "metadata": { - "editable": true - }, - "source": [ - "We can then visualize the data" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "27a64892", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# set the size of the figure\n", - "sns.set(rc={'figure.figsize':(11.7,8.27)})\n", - "\n", - "# plot a histogram showing the distribution of the target values\n", - "sns.distplot(boston['MEDV'], bins=30)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "371598fb", - "metadata": { - "editable": true - }, - "source": [ - "It is now useful to look at the correlation matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "487c9079", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# compute the pair wise correlation for all columns \n", - "correlation_matrix = boston.corr().round(2)\n", - "# use the heatmap function from seaborn to plot the correlation matrix\n", - "# annot = True to print the values inside the square\n", - "sns.heatmap(data=correlation_matrix, annot=True)" - ] - }, - { - "cell_type": "markdown", - "id": "c5046b22", - "metadata": { - "editable": true - }, - "source": [ - "From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "15eb6709", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "plt.figure(figsize=(20, 5))\n", - "\n", - "features = ['LSTAT', 'RM']\n", - "target = boston['MEDV']\n", - "\n", - "for i, col in enumerate(features):\n", - " plt.subplot(1, len(features) , i+1)\n", - " x = boston[col]\n", - " y = target\n", - " plt.scatter(x, y, marker='o')\n", - " plt.title(col)\n", - " plt.xlabel(col)\n", - " plt.ylabel('MEDV')" - ] - }, - { - "cell_type": "markdown", - "id": "2887ab0e", - "metadata": { - "editable": true - }, - "source": [ - "Now we start training our model" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "c4d0a58c", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns = ['LSTAT','RM'])\n", - "Y = boston['MEDV']" - ] - }, - { - "cell_type": "markdown", - "id": "e46427c4", - "metadata": { - "editable": true - }, - "source": [ - "We split the data into training and test sets" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "9624c327", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "\n", - "# splits the training and test data set in 80% : 20%\n", - "# assign random_state to any value.This ensures consistency.\n", - "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=5)\n", - "print(X_train.shape)\n", - "print(X_test.shape)\n", - "print(Y_train.shape)\n", - "print(Y_test.shape)" - ] - }, - { - "cell_type": "markdown", - "id": "ae726472", - "metadata": { - "editable": true - }, - "source": [ - "Then we use the linear regression functionality from **Scikit-Learn**" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "94a499cc", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "from sklearn.linear_model import LinearRegression\n", - "from sklearn.metrics import mean_squared_error, r2_score\n", - "\n", - "lin_model = LinearRegression()\n", - "lin_model.fit(X_train, Y_train)\n", - "\n", - "# model evaluation for training set\n", - "\n", - "y_train_predict = lin_model.predict(X_train)\n", - "rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))\n", - "r2 = r2_score(Y_train, y_train_predict)\n", - "\n", - "print(\"The model performance for training set\")\n", - "print(\"--------------------------------------\")\n", - "print('RMSE is {}'.format(rmse))\n", - "print('R2 score is {}'.format(r2))\n", - "print(\"\\n\")\n", - "\n", - "# model evaluation for testing set\n", - "\n", - "y_test_predict = lin_model.predict(X_test)\n", - "# root mean square error of the model\n", - "rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))\n", - "\n", - "# r-squared score of the model\n", - "r2 = r2_score(Y_test, y_test_predict)\n", - "\n", - "print(\"The model performance for testing set\")\n", - "print(\"--------------------------------------\")\n", - "print('RMSE is {}'.format(rmse))\n", - "print('R2 score is {}'.format(r2))" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "8e2f7cf0", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# plotting the y_test vs y_pred\n", - "# ideally should have been a straight line\n", - "plt.scatter(Y_test, y_test_predict)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "17e6e280", - "metadata": { - "editable": true - }, - "source": [ - "## Reducing the number of degrees of freedom, overarching view\n", - "\n", - "Many Machine Learning problems involve thousands or even millions of\n", - "features for each training instance. Not only does this make training\n", - "extremely slow, it can also make it much harder to find a good\n", - "solution, as we will see. This problem is often referred to as the\n", - "curse of dimensionality. Fortunately, in real-world problems, it is\n", - "often possible to reduce the number of features considerably, turning\n", - "an intractable problem into a tractable one.\n", - "\n", - "Later we will discuss some of the most popular dimensionality reduction\n", - "techniques: the principal component analysis (PCA), Kernel PCA, and\n", - "Locally Linear Embedding (LLE). \n", - "\n", - "Principal component analysis and its various variants deal with the\n", - "problem of fitting a low-dimensional [affine\n", - "subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of\n", - "data points in a high-dimensional space. With its family of methods it\n", - "is one of the most used tools in data modeling, compression and\n", - "visualization.\n", - "\n", - "Before we proceed however, we will discuss how to preprocess our\n", - "data. Till now and in connection with our previous examples we have\n", - "not met so many cases where we are too sensitive to the scaling of our\n", - "data. Normally the data may need a rescaling and/or may be sensitive\n", - "to extreme values. Scaling the data renders our inputs much more\n", - "suitable for the algorithms we want to employ.\n", - "\n", - "For data sets gathered for real world applications, it is rather normal that\n", - "different features have very different units and\n", - "numerical scales. For example, a data set detailing health habits may include\n", - "features such as **age** in the range $0-80$, and **caloric intake** of order $2000$.\n", - "Many machine learning methods sensitive to the scales of the features and may perform poorly if they\n", - "are very different scales. Therefore, it is typical to scale\n", - "the features in a way to avoid such outlier values.\n", - "\n", - "**Scikit-Learn** has several functions which allow us to rescale the\n", - "data, normally resulting in much better results in terms of various\n", - "accuracy scores. The **StandardScaler** function in **Scikit-Learn**\n", - "ensures that for each feature/predictor we study the mean value is\n", - "zero and the variance is one (every column in the design/feature\n", - "matrix). This scaling has the drawback that it does not ensure that\n", - "we have a particular maximum or minimum in our data set. Another\n", - "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", - "ensures that all features are exactly between $0$ and $1$. The\n", - "\n", - "The **Normalizer** scales each data\n", - "point such that the feature vector has a euclidean length of one. In other words, it\n", - "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", - "radius of 1. This means every data point is scaled by a different number (by the\n", - "inverse of it’s length).\n", - "This normalization is often used when only the direction (or angle) of the data matters,\n", - "not the length of the feature vector.\n", - "\n", - "The **RobustScaler** works similarly to the StandardScaler in that it\n", - "ensures statistical properties for each feature that guarantee that\n", - "they are on the same scale. However, the RobustScaler uses the median\n", - "and quartiles, instead of mean and variance. This makes the\n", - "RobustScaler ignore data points that are very different from the rest\n", - "(like measurement errors). These odd data points are also called\n", - "outliers, and might often lead to trouble for other scaling\n", - "techniques.\n", - "\n", - "Many features are often scaled using standardization to improve\n", - "performance. In **Scikit-Learn** this is given by the **StandardScaler**\n", - "function as discussed above. It is easy however to write your own.\n", - "Mathematically, this involves subtracting the mean and divide by the\n", - "standard deviation over the data set, for each feature:" - ] - }, - { - "cell_type": "markdown", - "id": "fbdb7902", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "x_j^{(i)} \\rightarrow \\frac{x_j^{(i)} - \\overline{x}_j}{\\sigma(x_j)},\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "27bfecb1", - "metadata": { - "editable": true - }, - "source": [ - "where $\\overline{x}_j$ and $\\sigma(x_j)$ are the mean and standard\n", - "deviation, respectively, of the feature $x_j$. This ensures that each\n", - "feature has zero mean and unit standard deviation. For data sets\n", - "where we do not have the standard deviation or don't wish to calculate\n", - "it, it is then common to simply set it to one.\n", - "\n", - "Let us consider the following vanilla example where we use both\n", - "**Scikit-Learn** and write our own function as well. We produce a\n", - "simple test design matrix with random numbers. Each column could then\n", - "represent a specific feature whose mean value is subracted." - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "00f32aef", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import sklearn.linear_model as skl\n", - "from sklearn.metrics import mean_squared_error\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import MinMaxScaler, StandardScaler, Normalizer\n", - "import numpy as np\n", - "import pandas as pd\n", - "from IPython.display import display\n", - "np.random.seed(100)\n", - "# setting up a 10 x 5 matrix\n", - "rows = 10\n", - "cols = 5\n", - "X = np.random.randn(rows,cols)\n", - "XPandas = pd.DataFrame(X)\n", - "display(XPandas)\n", - "print(XPandas.mean())\n", - "print(XPandas.std())\n", - "XPandas = (XPandas -XPandas.mean())\n", - "display(XPandas)\n", - "# This option does not include the standard deviation\n", - "scaler = StandardScaler(with_std=False)\n", - "scaler.fit(X)\n", - "Xscaled = scaler.transform(X)\n", - "display(XPandas-Xscaled)" - ] - }, - { - "cell_type": "markdown", - "id": "dcd1b0a1", - "metadata": { - "editable": true - }, - "source": [ - "Small exercise: perform the standard scaling by including the standard deviation and compare with what Scikit-Learn gives.\n", - "\n", - "Another commonly used scaling method is min-max scaling. This is very\n", - "useful for when we want the features to lie in a certain interval. To\n", - "scale the feature $x_j$ to the interval $[a, b]$, we can apply the\n", - "transformation" - ] - }, - { - "cell_type": "markdown", - "id": "784d2d63", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "x_j^{(i)} \\rightarrow (b-a)\\frac{x_j^{(i)} - \\min(x_j)}{\\max(x_j) - \\min(x_j)} - a\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "0ed3861c", - "metadata": { - "editable": true - }, - "source": [ - "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively." - ] - }, - { - "cell_type": "markdown", - "id": "9898dc9e", - "metadata": { - "editable": true - }, - "source": [ - "## Testing the Means Squared Error as function of Complexity\n", - "\n", - "Before we proceed with a more detailed analysis of the so-called\n", - "Bias-Variance tradeoff, we present here an example of the relation\n", - "between model complexity and the mean squared error for the triaining\n", - "data and the test data.\n", - "\n", - "The results here tell us clearly that for the data not included in the\n", - "training, there is an optimal model as function of the complexity of\n", - "ourmodel (here in terms of the polynomial degree of the model).\n", - "\n", - "The results here will vary as function of model complexity and the amount od data used for training. \n", - "\n", - "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "2c42e978", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", - "from sklearn.preprocessing import PolynomialFeatures\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.pipeline import make_pipeline\n", - "\n", - "\n", - "np.random.seed(2018)\n", - "n = 100\n", - "maxdegree = 14\n", - "# Make data set.\n", - "x = np.linspace(-3, 3, n).reshape(-1, 1)\n", - "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n", - "TestError = np.zeros(maxdegree)\n", - "TrainError = np.zeros(maxdegree)\n", - "polydegree = np.zeros(maxdegree)\n", - "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n", - "\n", - "\n", - "for degree in range(maxdegree):\n", - " model = make_pipeline(PolynomialFeatures(degree=degree), LinearRegression(fit_intercept=False))\n", - " clf = model.fit(x_train,y_train)\n", - " y_fit = clf.predict(x_train)\n", - " y_pred = clf.predict(x_test) \n", - " polydegree[degree] = degree\n", - " TestError[degree] = np.mean( np.mean((y_test - y_pred)**2) )\n", - " TrainError[degree] = np.mean( np.mean((y_train - y_fit)**2) )\n", - "\n", - "plt.plot(polydegree, TestError, label='Test Error')\n", - "plt.plot(polydegree, TrainError, label='Train Error')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "1c436a1f", - "metadata": { - "editable": true - }, - "source": [ - "## Exercises" - ] - }, - { - "cell_type": "markdown", - "id": "cd791377", - "metadata": { - "editable": true - }, - "source": [ - "### Exercise: Setting up various Python environments\n", - "\n", - "The first exercise here is of a mere technical art. We want you to have \n", - "* git as a version control software and to establish a user account on a provider like GitHub. Other providers like GitLab etc are equally fine. You can also use the University of Oslo [GitHub facilities](https://www.uio.no/tjenester/it/maskin/filer/versjonskontroll/github.html). \n", - "\n", - "* Install various Python packages\n", - "\n", - "We will make extensive use of Python as programming language and its\n", - "myriad of available libraries. You will find\n", - "IPython/Jupyter notebooks invaluable in your work. You can run **R**\n", - "codes in the Jupyter/IPython notebooks, with the immediate benefit of\n", - "visualizing your data. You can also use compiled languages like C++,\n", - "Rust, Fortran etc if you prefer. The focus in these lectures will be\n", - "on Python.\n", - "\n", - "If you have Python installed (we recommend Python3) and you feel\n", - "pretty familiar with installing different packages, we recommend that\n", - "you install the following Python packages via **pip** as \n", - "\n", - "1. pip install numpy scipy matplotlib ipython scikit-learn sympy pandas pillow \n", - "\n", - "For **Tensorflow**, we recommend following the instructions in the text of \n", - "[Aurelien Geron, Hands‑On Machine Learning with Scikit‑Learn and TensorFlow, O'Reilly](http://shop.oreilly.com/product/0636920052289.do)\n", - "\n", - "We will come back to **tensorflow** later. \n", - "\n", - "For Python3, replace **pip** with **pip3**.\n", - "\n", - "For OSX users we recommend, after having installed Xcode, to\n", - "install **brew**. Brew allows for a seamless installation of additional\n", - "software via for example \n", - "\n", - "1. brew install python3\n", - "\n", - "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution,\n", - "you can use **pip** as well and simply install Python as \n", - "\n", - "1. sudo apt-get install python3 (or python for Python2.7)\n", - "\n", - "If you don't want to perform these operations separately and venture\n", - "into the hassle of exploring how to set up dependencies and paths, we\n", - "recommend two widely used distrubutions which set up all relevant\n", - "dependencies for Python, namely \n", - "\n", - "* [Anaconda](https://docs.anaconda.com/), \n", - "\n", - "which is an open source\n", - "distribution of the Python and R programming languages for large-scale\n", - "data processing, predictive analytics, and scientific computing, that\n", - "aims to simplify package management and deployment. Package versions\n", - "are managed by the package management system **conda**. \n", - "\n", - "* [Enthought canopy](https://www.enthought.com/product/canopy/) \n", - "\n", - "is a Python\n", - "distribution for scientific and analytic computing distribution and\n", - "analysis environment, available for free and under a commercial\n", - "license.\n", - "\n", - "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment." - ] - }, - { - "cell_type": "markdown", - "id": "8b7fa338", - "metadata": { - "editable": true - }, - "source": [ - "### Exercise: making your own data and exploring scikit-learn\n", - "\n", - "We will generate our own dataset for a function $y(x)$ where $x \\in [0,1]$ and defined by random numbers computed with the uniform distribution. The function $y$ is a quadratic polynomial in $x$ with added stochastic noise according to the normal distribution $\\cal {N}(0,1)$.\n", - "The following simple Python instructions define our $x$ and $y$ values (with 100 data points)." - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "97f48774", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "x = np.random.rand(100,1)\n", - "y = 2.0+5*x*x+0.1*np.random.randn(100,1)" - ] - }, - { - "cell_type": "markdown", - "id": "dbb4f5bd", - "metadata": { - "editable": true - }, - "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", - "2. Use thereafter **scikit-learn** (see again the examples in the regression slides) and compare with your own code. \n", - "\n", - "3. Using scikit-learn, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as" - ] - }, - { - "cell_type": "markdown", - "id": "5ff18ab8", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", - "\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "dc726278", - "metadata": { - "editable": true - }, - "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" - ] - }, - { - "cell_type": "markdown", - "id": "57cfd0a3", - "metadata": { - "editable": true - }, - "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", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "261fcb06", - "metadata": { - "editable": true - }, - "source": [ - "where we have defined the mean value of $\\boldsymbol{y}$ as" - ] - }, - { - "cell_type": "markdown", - "id": "e6459396", - "metadata": { - "editable": true - }, - "source": [ - "$$\n", - "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "id": "a5f2c612", - "metadata": { - "editable": true - }, - "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." - ] - }, - { - "cell_type": "markdown", - "id": "17f65e28", - "metadata": { - "editable": true - }, - "source": [ - "### Exercise: Normalizing our data\n", - "\n", - "A much used approach before starting to train the data is to preprocess our\n", - "data. Normally the data may need a rescaling and/or may be sensitive\n", - "to extreme values. Scaling the data renders our inputs much more\n", - "suitable for the algorithms we want to employ.\n", - "\n", - "**Scikit-Learn** has several functions which allow us to rescale the\n", - "data, normally resulting in much better results in terms of various\n", - "accuracy scores. The **StandardScaler** function in **Scikit-Learn**\n", - "ensures that for each feature/predictor we study the mean value is\n", - "zero and the variance is one (every column in the design/feature\n", - "matrix). This scaling has the drawback that it does not ensure that\n", - "we have a particular maximum or minimum in our data set. Another\n", - "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", - "ensures that all features are exactly between $0$ and $1$. The\n", - "\n", - "The **Normalizer** scales each data\n", - "point such that the feature vector has a euclidean length of one. In other words, it\n", - "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", - "radius of 1. This means every data point is scaled by a different number (by the\n", - "inverse of it’s length).\n", - "This normalization is often used when only the direction (or angle) of the data matters,\n", - "not the length of the feature vector.\n", - "\n", - "The **RobustScaler** works similarly to the StandardScaler in that it\n", - "ensures statistical properties for each feature that guarantee that\n", - "they are on the same scale. However, the RobustScaler uses the median\n", - "and quartiles, instead of mean and variance. This makes the\n", - "RobustScaler ignore data points that are very different from the rest\n", - "(like measurement errors). These odd data points are also called\n", - "outliers, and might often lead to trouble for other scaling\n", - "techniques.\n", - "\n", - "It also common to split the data in a **training** set and a **testing** set. A typical split is to use $80\\%$ of the data for training and the rest\n", - "for testing. This can be done as follows with our design matrix $\\boldsymbol{X}$ and data $\\boldsymbol{y}$ (remember to import **scikit-learn**)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "f6c610d2", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# split in training and test data\n", - "# X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2)" - ] - }, - { - "cell_type": "markdown", - "id": "6b55a45d", - "metadata": { - "editable": true - }, - "source": [ - "Then we can use the standard scaler to scale our data as" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "0a60e58b", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "scaler = StandardScaler()\n", - "scaler.fit(X_train)\n", - "X_train_scaled = scaler.transform(X_train)\n", - "X_test_scaled = scaler.transform(X_test)" - ] - }, - { - "cell_type": "markdown", - "id": "d1061df4", - "metadata": { - "editable": true - }, - "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", - "that is the degree of a given polynomial. We want you also to compute the $R2$ score as function of the complexity of the model for both training data and test data. You should also run the calculation with and without scaling. \n", - "\n", - "One of \n", - "the aims is to reproduce Figure 2.11 of [Hastie et al](https://github.com/CompPhysics/MLErasmus/blob/master/doc/Textbooks/elementsstat.pdf).\n", - "\n", - "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "d708e09a", - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "np.random.seed()\n", - "n = 100\n", - "maxdegree = 14\n", - "# Make data set.\n", - "x = np.linspace(-3, 3, n).reshape(-1, 1)\n", - "y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)" - ] - }, - { - "cell_type": "markdown", - "id": "c31441b4", - "metadata": { - "editable": true - }, - "source": [ - "where $y$ is the function we want to fit with a given polynomial.\n", - "\n", - "Write a first code which sets up a design matrix $X$ defined by a\n", - "fifth-order polynomial. Scale your data and split it in training and\n", - "test data.\n", - "\n", - "Perform an ordinary least squares and compute the means squared error\n", - "and the $R2$ factor for the training data and the test data, with and\n", - "without scaling.\n", - "\n", - "Add now a model which allows you to make polynomials up to degree\n", - "$15$. Perform a standard OLS fitting of the training data and compute\n", - "the MSE and $R2$ for the training and test data and plot both test and\n", - "training data MSE and $R2$ as functions of the polynomial\n", - "degree. Compare what you see with Figure 2.11 of Hastie et al. Comment\n", - "your results. For which polynomial degree do you find an optimal MSE\n", - "(smallest value)?" - ] - } - ], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/doc/LectureNotes/_build/.doctrees/chapter1.doctree b/doc/LectureNotes/_build/.doctrees/chapter1.doctree index af14f2942d09bc7b4caec1d84a85bfe586fd57a3..f3c5d6c3bd5a2556ab571ea4b87f23c44bf680a0 100644 GIT binary patch literal 465006 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

)yx{^eJt!|iaXq{%JSRW+%IaW^iu+K(IVjco6 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 z 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 Zlw}a^S`N}7GdQ%gnv>g=@YP<-{(qR|YIFbq literal 469945 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౪NT)6nJ{E$Vnv9$;`1~x2= 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 diff --git a/doc/LectureNotes/_build/.doctrees/environment.pickle b/doc/LectureNotes/_build/.doctrees/environment.pickle index adb406d0a338ea1d49a1ece7502b0be8696d6a5c..566a967c8d4d5b4d03899db73fc78982146134f1 100644 GIT binary patch literal 170362 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 ZWyjmtInVPa1D0ZE=Q-yk9&oza{|kA0OyU3l literal 170375 zcmd?S378~DaWAf8?{oG(bd|Ox?X0vltGy(x4#ey!Y4&1gb)ajg>8_dX-k$DOA3Hk| z!eARLnZ^Rs7=yuJ49|WxU~ItndOq;Yd)Q!e+Sq>PZ~x)>!p7hWAMY0#Rh3zl)iag3 z)BF5c`abQ)}Jzr|ns#AWo)$I%% zY?ms9Bg&&UcXzy|`)qfxbEQ|WcTaYf6>9lb!}klNMz{08t_Pcbqq%FUSoW(;zq;$J z@8v;ta@Ps*(?9NejVk?(w{{)(^R0HnKUr(}&0S;T^rc-x0l8+kv#8m~3#tdKse(wp zR-GtKb~`JB=7oPRI>ZH0dzRMD`;A7a;5S9{mQ=jzWZRqc(Z*HvnMsmIbFA5#srba2 zkX5&{tk{~WjJ1mX6rQf(r(@%_+PU!AT3KPNR&SMRRVKf>2}$IOW8+?9tmR*TsMn2( zCr+zaYC1$>XlSV0Syl1cRjSu+wZeDTRv|I*ky5qgHzvG1KE60#@tVz29xWX&RSSNj z*d8BiH!9uE`eLh9Z{E3U*VGJ`4AmMC$f|O?K7-ezdY5%O3(=Bszx#Y=X}(tR`2FIx zc4tN1YZb>@wK1U6>=w6mRyF*3tyyZ-8Z-Qn2g8r#Yg6@laR!_;hbBucP#-GQGQ&^O z+C}VN7@}VxQ{_YB4G*G#^ryTg7>CFvYqiOWKju}v%1jGi94i%wyA=>w!P#57K?Kb5Zt}Xdr3DWH&KJw8$^Gg zSex?4>QIicQWav!cc1HQXgB>am01B8M7f>{&^=oG0t1QXYv_5Y*=+mG0Nw8M?aoG_ zFU?xJk@qX5>bbFIdt#z=fxfz^+MXg+ey+2*?p6ItbIdCgNZDFVw6;E$Z#Ic+vt6$@ z{AP1(n!8%F`vjUWHPdXNZ%uh6D4-YWZK*}teDiR3vEMN5V=jt`+IE=y4p~ItNqtG|- zyYy_aJvH7ODvX02wi{i)b2UH*6%XC9mLCggPeH=4HxSGU!Nr7kz628>v_w1@_nJO+ z69{-UbeFq%U?j-QEi2B{Yv>k`2#72Lsy?Y9tOTJ&7*4e-E%b!^81NbQ8}zm3IvYvg zV}8{ehkg=g)u!nC)WqfJT(#=hgby+>A%$9{;x(qw!_bQf^U}l&5No!_o1oh!n*q7C zyym$|so6qH2Lx>}J=TPbroakOMXxATS`hI9Qf>5Qq2Z{$(ZAs51(`9gQmIXk!OYbf zLRVx7>9IdmM-vAi`dYhHZ?|CWU`GJ;f@ZNcjlL+Ww@On!Ds@M$?W_!X&{!TO-X}S3 z37>F%e=M|Dz;OZ82Rv?(qynTACFrcEc(93(-ejo?2`#A?Cd892_cEo+j`8#7h&Kg& zGFRQsLF;j27wOQ@3=B}av#{y6+G30j_pRC_j8M?8qd|bWLHKO30IUjiT@i|g z>~oVl>$GRrN$V2S$tl7EqaLF5*X&YTT*4}c*1yeR{3@K1sE#ECcuFh8&(NB7<;r*JSr=dR`QS(4oAX<5pKe$ zb(WuMz*6{y!=-!+t=e%0_GrOS1Jdg!c$SM@y4K;?cqunOg|;Ed3OZmgQ>& z-yN^i@{r52<1nDG&s5S@Oa>eom~jtAb5lxx8}jNUd}S1sPM}WYFfL?ohz5y;=!K11 zxA@;WOAgoaZQ(nMdc_Z%gl)$2#b;~zvv8C7^+A5PA9h!00vYo{8~nev`DSYjwwqABLwczVxxq zK(pnwsPXX1#ONB*T!8_{t4t~n{m#KN{`rzW?bIfm(dad28qS<^#&3F4a26oLvwpr< zEjdS~X`BUKIQq=OJO6LO-ZEXS;4wC@bx{ zU3u(x+{1ppB)&u{(cI}A!DMNQRQ7}q=c>RGMPC-$I_Ed

AE31MsTIKL$ujf#2DD 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 WoR}B*a{-^WapIh>B=0T_Ec_q1O+3E< diff --git a/doc/LectureNotes/_build/.doctrees/statistics.doctree b/doc/LectureNotes/_build/.doctrees/statistics.doctree index 498f6731f706c59463e7d79bb6c9d0274bb47570..129516ac0d1703d8058ee0c2235901346a0e54a9 100644 GIT binary patch delta 21788 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 QyAhb&-~ase$FD#C1%)<2761SM delta 21364 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 W6X%xM-?-Z%2=JWc+0rvkxBmmhcdE(& literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/html/_images/chapter1_19_1.png b/doc/LectureNotes/_build/html/_images/chapter1_19_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1b03052ecbb750c4fb390134906ac70316a4ced2 GIT binary patch literal 9423 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 literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/html/_images/chapter1_33_0.png b/doc/LectureNotes/_build/html/_images/chapter1_33_0.png new file mode 100644 index 0000000000000000000000000000000000000000..20dc302772322d39d59599ee94acb9420f411c33 GIT binary patch literal 13191 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

F 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 diff --git a/doc/LectureNotes/_build/html/_images/statistics_188_1.png b/doc/LectureNotes/_build/html/_images/statistics_188_1.png index b13e4947fbc92ef72452f125285cf81f4f43e2b3..9f8140fbe2d65f178e3f619bedc39306c5d2feb6 100644 GIT binary patch literal 9836 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 literal 9758 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 ISG5TJKWV-}IRF3v diff --git a/doc/LectureNotes/_build/html/_sources/chapter1.ipynb b/doc/LectureNotes/_build/html/_sources/chapter1.ipynb index d2273f8f7..9d5a99f5f 100644 --- a/doc/LectureNotes/_build/html/_sources/chapter1.ipynb +++ b/doc/LectureNotes/_build/html/_sources/chapter1.ipynb @@ -2,17 +2,34 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "id": "abf0787a", + "metadata": { + "editable": true + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "8675dd19", + "metadata": { + "editable": true + }, + "source": [ + "# Linear Regression" + ] + }, + { + "cell_type": "markdown", + "id": "90d6f1f0", + "metadata": { + "editable": true + }, "source": [ - "# Linear Regression\n", - "\n", - "\n", "## Introduction\n", "\n", - "\n", - "\n", - "\n", - "\n", "Our emphasis throughout this series of lectures is on understanding\n", "the mathematical aspects of different algorithms used in the fields of\n", "data analysis and machine learning.\n", @@ -43,10 +60,16 @@ "Learning, Scikit-Learn and Tensorflow (see below for links etc).\n", "Moreover, the examples we introduce will serve as inputs to many of\n", "our discussions later, as well as allowing you to set up models and\n", - "produce your own data and get started with programming.\n", - "\n", - "\n", - "\n", + "produce your own data and get started with programming." + ] + }, + { + "cell_type": "markdown", + "id": "7b60b0a7", + "metadata": { + "editable": true + }, + "source": [ "## What is Machine Learning?\n", "\n", "Statistics, data science and machine learning form important fields of\n", @@ -112,8 +135,6 @@ "Carlo methods are central elements in a proper understanding of many\n", "of algorithms and methods we will discuss.\n", "\n", - "\n", - "\n", "The approaches to machine learning are many, but are often split into\n", "two main categories. In *supervised learning* we know the answer to a\n", "problem, and let the computer deduce the logic behind it. On the other\n", @@ -141,11 +162,16 @@ "\n", "* The last ingredient is a so-called **cost/loss** function (or error or risk function) which allows us to present an estimate on how good our model is in reproducing the data it is supposed to train. \n", "\n", - "\n", - "\n", - "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**.\n", - "\n", - "\n", + "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**." + ] + }, + { + "cell_type": "markdown", + "id": "eef76920", + "metadata": { + "editable": true + }, + "source": [ "### A Frequentist approach to data analysis\n", "\n", "When you hear phrases like **predictions and estimations** and\n", @@ -171,9 +197,16 @@ "where the aim is to make predictions and find correlations. We focus\n", "less on for example extracting a probability distribution function (PDF). The PDF can be\n", "used in turn to make estimations and find causations such as given $A$\n", - "what is the likelihood of finding $B$.\n", - "\n", - "\n", + "what is the likelihood of finding $B$." + ] + }, + { + "cell_type": "markdown", + "id": "74b45ee0", + "metadata": { + "editable": true + }, + "source": [ "### What is a good model?\n", "\n", "In science and engineering we often end up in situations where we want to infer (or learn) a\n", @@ -196,9 +229,6 @@ "is that if we are not specific about what we mean by a *correct* model, there\n", "could easily be many different models that fit the given data set *equally well*.\n", "\n", - "\n", - "\n", - "\n", "The central question is this: what leads us to say that a model is correct or\n", "optimal for a given data set? To make the model inference problem well posed, i.e.,\n", "to guarantee that there is a unique optimal model for the given data, we need to\n", @@ -218,18 +248,16 @@ "simpler models become inadequate. For instance, if we work with a regression problem to fit a set of sample points, one\n", "may first try the simplest class of models, namely linear models, followed obviously by more complex models.\n", "\n", - "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures.\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures." + ] + }, + { + "cell_type": "markdown", + "id": "51c84b1e", + "metadata": { + "editable": true + }, + "source": [ "## Simple linear regression model using **scikit-learn**\n", "\n", "We start with perhaps our simplest possible example, using\n", @@ -245,7 +273,6 @@ "(tabulated again as a vector) with a linear dependence on $x$ plus a\n", "random noise added via the normal distribution.\n", "\n", - "\n", "The Numpy functions are imported used the **import numpy as np**\n", "statement and the random number generator for the uniform distribution\n", "is called using the function **np.random.rand()**, where we specificy\n", @@ -259,7 +286,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4779803a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = 2x+N(0,1),\n", @@ -268,7 +298,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b2f47871", + "metadata": { + "editable": true + }, "source": [ "where $N(0,1)$ represents random numbers generated by the normal\n", "distribution. From **Scikit-Learn** we import then the\n", @@ -296,13 +329,13 @@ "This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set.\n", "Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!\n", "\n", - "\n", "The Python code follows here." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, + "id": "1cdef5c4", "metadata": { "collapsed": false, "editable": true @@ -335,7 +368,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d07dd09e", + "metadata": { + "editable": true + }, "source": [ "This example serves several aims. It allows us to demonstrate several\n", "aspects of data analysis and later machine learning algorithms. The\n", @@ -349,7 +385,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6f6e8bb4", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = 10x+0.01 \\times N(0,1),\n", @@ -358,7 +397,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b2b85fd5", + "metadata": { + "editable": true + }, "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", @@ -376,7 +418,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "329ad4bb", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\chi^2 = \\frac{1}{n}\n", @@ -386,7 +431,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f3e5c4ad", + "metadata": { + "editable": true + }, "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", @@ -414,7 +462,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b0ffe38f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n", @@ -423,7 +474,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bfdd9400", + "metadata": { + "editable": true + }, "source": [ "The squared cost function results in an arithmetic mean-unbiased\n", "estimator, and the absolute-value cost function results in a\n", @@ -437,7 +491,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, + "id": "f3a56404", "metadata": { "collapsed": false, "editable": true @@ -465,7 +520,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b77ca4ff", + "metadata": { + "editable": true + }, "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", @@ -483,7 +541,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, + "id": "7c53db00", "metadata": { "collapsed": false, "editable": true @@ -521,7 +580,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "289acdad", + "metadata": { + "editable": true + }, "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" @@ -529,7 +591,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ed56c208", + "metadata": { + "editable": true + }, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -539,7 +604,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a2774f06", + "metadata": { + "editable": true + }, "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", @@ -557,7 +625,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1360472a", + "metadata": { + "editable": true + }, "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", @@ -566,14 +637,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "777f7aad", + "metadata": { + "editable": true + }, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "b0182619", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -582,7 +659,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "925427a2", + "metadata": { + "editable": true + }, "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", @@ -591,7 +671,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4e1404d3", + "metadata": { + "editable": true + }, "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", @@ -600,7 +683,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "07fcae5f", + "metadata": { + "editable": true + }, "source": [ "We present the \n", "squared logarithmic (quadratic) error" @@ -608,7 +694,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ad8627ec", + "metadata": { + "editable": true + }, "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", @@ -617,14 +706,16 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "02d8662a", + "metadata": { + "editable": true + }, "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", "as population counts, average sales of a commodity over a span of\n", "years etc. \n", "\n", - "\n", "Finally, another cost function is the Huber cost function used in robust regression.\n", "\n", "The rationale behind this possible cost function is its reduced\n", @@ -637,7 +728,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d6c17489", + "metadata": { + "editable": true + }, "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", @@ -646,13 +740,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7c75b052", + "metadata": { + "editable": true + }, "source": [ "Here $\\boldsymbol{a}=\\boldsymbol{y} - \\boldsymbol{\\tilde{y}}$.\n", "\n", - "\n", - "\n", - "\n", "We will discuss in more\n", "detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n", "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn." @@ -660,7 +754,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, + "id": "6c136271", "metadata": { "collapsed": false, "editable": true @@ -701,7 +796,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bd2f6e5a", + "metadata": { + "editable": true + }, "source": [ "Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding\n", "energies. A basic quantity which can be measured for the ground\n", @@ -713,7 +811,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1bc85e33", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\Delta M(N, Z) = M(N, Z) - uA,\n", @@ -722,14 +823,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "70c5d807", + "metadata": { + "editable": true + }, "source": [ "where $u$ is the Atomic Mass Unit" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "8ad3a692", + "metadata": { + "editable": true + }, "source": [ "$$\n", "u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n", @@ -738,14 +845,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c885dbac", + "metadata": { + "editable": true + }, "source": [ "The nucleon masses are" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "753ce14d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "m_p = 1.00727646693(9)u,\n", @@ -754,14 +867,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0aada199", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "8f72f12c", + "metadata": { + "editable": true + }, "source": [ "$$\n", "m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n", @@ -770,7 +889,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ffd008d4", + "metadata": { + "editable": true + }, "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", @@ -783,7 +905,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7cab8713", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n", @@ -792,7 +917,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f5ab1ec7", + "metadata": { + "editable": true + }, "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" @@ -800,7 +928,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "76247038", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n", @@ -809,11 +940,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ead3a52e", + "metadata": { + "editable": true + }, "source": [ "where $\\Delta_H c^2 = 7.2890$ MeV and $\\Delta_n c^2 = 8.0713$ MeV.\n", "\n", - "\n", "A popular and physically intuitive model which can be used to parametrize \n", "the experimental binding energies as function of $A$, is the so-called \n", "**liquid drop model**. The ansatz is based on the following expression" @@ -821,7 +954,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "00776fb1", + "metadata": { + "editable": true + }, "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", @@ -830,14 +966,14 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "be5156b5", + "metadata": { + "editable": true + }, "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", "\n", - "\n", - "\n", - "\n", "To arrive at the above expression we have assumed that we can make the following assumptions:\n", "\n", " * There is a volume term $a_1A$ proportional with the number of nucleons (the energy is also an extensive quantity). When an assembly of nucleons of the same size is packed together into the smallest volume, each interior nucleon has a certain number of other nucleons in contact with it. This contribution is proportional to the volume.\n", @@ -850,22 +986,29 @@ "\n", "We could also add a so-called pairing term, which is a correction term that\n", "arises from the tendency of proton pairs and neutron pairs to\n", - "occur. An even number of particles is more stable than an odd number. \n", - "\n", - "\n", + "occur. An even number of particles is more stable than an odd number." + ] + }, + { + "cell_type": "markdown", + "id": "fdcb3ae8", + "metadata": { + "editable": true + }, + "source": [ "### Organizing our data\n", "\n", "Let us start with reading and organizing our data. \n", "We start with the compilation of masses and binding energies from 2016.\n", "After having downloaded this file to our own computer, we are now ready to read the file and start structuring our data.\n", "\n", - "\n", "We start with preparing folders for storing our calculations and the data file over masses and binding energies. We import also various modules that we will find useful in order to present various Machine Learning methods. Here we focus mainly on the functionality of **scikit-learn**." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, + "id": "44191ff4", "metadata": { "collapsed": false, "editable": true @@ -884,7 +1027,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -909,14 +1052,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e704ea13", + "metadata": { + "editable": true + }, "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": null, + "execution_count": 6, + "id": "083ef002", "metadata": { "collapsed": false, "editable": true @@ -938,7 +1085,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b052d9d1", + "metadata": { + "editable": true + }, "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", @@ -946,13 +1096,13 @@ "always useful (unless you have a binary file or other types of compressed\n", "data) to actually open the file and simply take a look at it!\n", "\n", - "\n", "In particular, the program that outputs the final nuclear masses is written in Fortran with a specific format. It means that we need to figure out the format and which columns contain the data we are interested in. Pandas comes with a function that reads formatted output. After having admired the file, we are now ready to start massaging it with **pandas**. The file begins with some basic format information." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, + "id": "0f34c048", "metadata": { "collapsed": false, "editable": true @@ -973,7 +1123,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "807d6c8f", + "metadata": { + "editable": true + }, "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", @@ -983,7 +1136,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, + "id": "f8861251", "metadata": { "collapsed": false, "editable": true @@ -1012,7 +1166,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a8743cbd", + "metadata": { + "editable": true + }, "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", @@ -1028,7 +1185,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, + "id": "61461479", "metadata": { "collapsed": false, "editable": true @@ -1045,7 +1203,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bf880ec9", + "metadata": { + "editable": true + }, "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 $n\\times p$, 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." @@ -1053,7 +1214,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, + "id": "9ec9ba03", "metadata": { "collapsed": false, "editable": true @@ -1071,7 +1233,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7c67387f", + "metadata": { + "editable": true + }, "source": [ "Note well that we have made life simple here. We perform a fit in\n", "terms of the number of nucleons only. A more sophisticated fit can be\n", @@ -1083,7 +1248,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, + "id": "2a5aa5e9", "metadata": { "collapsed": false, "editable": true @@ -1096,7 +1262,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2ea94fce", + "metadata": { + "editable": true + }, "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." @@ -1104,7 +1273,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, + "id": "4c136044", "metadata": { "collapsed": false, "editable": true @@ -1134,14 +1304,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5dfc3135", + "metadata": { + "editable": true + }, "source": [ "As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**!" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, + "id": "abbc4dbd", "metadata": { "collapsed": false, "editable": true @@ -1182,7 +1356,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "db107026", + "metadata": { + "editable": true + }, "source": [ "With a deeper and deeper tree level, we can almost reproduce every\n", "single data point by increasing the max depth of the tree.\n", @@ -1194,14 +1371,14 @@ "we will most likely fail miserably in our attempt at making\n", "predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.\n", "\n", - "\n", "The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) \n", "functionality." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, + "id": "86dcf5be", "metadata": { "collapsed": false, "editable": true @@ -1241,14 +1418,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "16a42333", + "metadata": { + "editable": true + }, "source": [ "## Linear Regression, basic elements\n", "\n", - "\n", "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureAug27.mp4?vrtx=view-as-webpage).\n", "\n", - "\n", "Fitting a continuous function with linear parameterization in terms of the parameters $\\boldsymbol{\\beta}$.\n", "* Method of choice for fitting a continuous function!\n", "\n", @@ -1271,8 +1449,6 @@ "For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n", "Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n", "\n", - "\n", - "\n", "Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\\boldsymbol{x} =[x_0, x_1,\\dots, x_{n-1}]^T$. \n", "The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n", "\n", @@ -1285,7 +1461,6 @@ "\n", " The goal of the regression analysis is to extract/exploit relationship between $\\boldsymbol{y}$ and $\\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things.\n", "\n", - "\n", "Consider an experiment in which $p$ characteristics of $n$ samples are\n", "measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix \n", "$\\mathbf{X}$.\n", @@ -1304,7 +1479,6 @@ "\n", "Linear regression gives us a set of analytical equations for the parameters $\\beta_j$.\n", "\n", - "\n", "In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n", "consider the model we discussed for describing nuclear binding energies. \n", "\n", @@ -1314,7 +1488,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ed7f6b48", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n", @@ -1323,7 +1500,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c621708d", + "metadata": { + "editable": true + }, "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", @@ -1332,7 +1512,6 @@ "Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the\n", "so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \\times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression. \n", "\n", - "\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", "\n", "Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is" @@ -1340,7 +1519,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9e26b3b1", + "metadata": { + "editable": true + }, "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", @@ -1349,17 +1531,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7ecf2445", + "metadata": { + "editable": true + }, "source": [ "where $\\epsilon_i$ is the error in our approximation. \n", "\n", - "\n", "For every set of values $y_i,x_i$ we have thus the corresponding set of equations" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4e3f8091", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1374,14 +1561,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e0de360e", + "metadata": { + "editable": true + }, "source": [ "Defining the vectors" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "0d25d3da", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n", @@ -1390,14 +1583,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "57956772", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "5cb1e06d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n", @@ -1406,14 +1605,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b52c9a04", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d521fbe", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n", @@ -1422,14 +1627,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "49a4e3f2", + "metadata": { + "editable": true + }, "source": [ "and the design matrix" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "562f4b4f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -1445,14 +1656,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d979cd1c", + "metadata": { + "editable": true + }, "source": [ "we can rewrite our equations as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "93f2605f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -1461,7 +1678,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "20c52a36", + "metadata": { + "editable": true + }, "source": [ "The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix).\n", "\n", @@ -1474,7 +1694,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6c5b9800", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1491,7 +1714,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "97c9a717", + "metadata": { + "editable": true + }, "source": [ "**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**\n", "\n", @@ -1500,7 +1726,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "58f60d8c", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -1516,14 +1745,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "eb681436", + "metadata": { + "editable": true + }, "source": [ "and without loss of generality we rewrite again our equations as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "0d2fd026", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -1532,7 +1767,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "82ee72a3", + "metadata": { + "editable": true + }, "source": [ "The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values? \n", "\n", @@ -1541,7 +1779,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bb867a75", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1558,7 +1799,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "177a56b6", + "metadata": { + "editable": true + }, "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", @@ -1571,7 +1815,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, + "id": "639eab41", "metadata": { "collapsed": false, "editable": true @@ -1588,7 +1833,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -1651,14 +1896,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e2f934a2", + "metadata": { + "editable": true + }, "source": [ "With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "270fcf49", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1667,7 +1918,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c6217145", + "metadata": { + "editable": true + }, "source": [ "throughout these lectures. \n", "\n", @@ -1676,7 +1930,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "40ea3dc2", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1685,14 +1942,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6eb268f2", + "metadata": { + "editable": true + }, "source": [ "and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "30d15d84", + "metadata": { + "editable": true + }, "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", @@ -1701,14 +1964,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0092f5fc", + "metadata": { + "editable": true + }, "source": [ "or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "f0e3eaab", + "metadata": { + "editable": true + }, "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", @@ -1717,19 +1986,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ba3587ca", + "metadata": { + "editable": true + }, "source": [ "This function is one possible way to define the so-called cost function.\n", "\n", - "\n", - "\n", "It is also common to define\n", "the function $C$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "f18299b6", + "metadata": { + "editable": true + }, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n", @@ -1738,7 +2011,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "67284093", + "metadata": { + "editable": true + }, "source": [ "since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out. \n", "\n", @@ -1747,7 +2023,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5f555cfc", + "metadata": { + "editable": true + }, "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", @@ -1756,7 +2035,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8ac974cb", + "metadata": { + "editable": true + }, "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" @@ -1764,7 +2046,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f1559872", + "metadata": { + "editable": true + }, "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", @@ -1773,7 +2058,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8e63a36c", + "metadata": { + "editable": true + }, "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", @@ -1789,7 +2077,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9954810b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", @@ -1799,14 +2090,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "910c87ca", + "metadata": { + "editable": true + }, "source": [ "In practical terms it means we will require" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "693ad55a", + "metadata": { + "editable": true + }, "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", @@ -1815,14 +2112,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "781244b4", + "metadata": { + "editable": true + }, "source": [ "which results in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ae61b535", + "metadata": { + "editable": true + }, "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", @@ -1831,14 +2134,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2d8201cc", + "metadata": { + "editable": true + }, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "e323d90a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n", @@ -1847,14 +2156,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "14394cc1", + "metadata": { + "editable": true + }, "source": [ "We can rewrite" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "090b82c7", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n", @@ -1863,14 +2178,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "311ca5e8", + "metadata": { + "editable": true + }, "source": [ "as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "b4b47e6f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1879,14 +2200,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8a49c9ff", + "metadata": { + "editable": true + }, "source": [ "and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "744a34c9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", @@ -1895,7 +2222,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d2f65ed3", + "metadata": { + "editable": true + }, "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", @@ -1910,86 +2240,52 @@ "\n", "**Small question**: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$? What kind of problems can we expect? \n", "\n", - "\n", "The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and \n", "matrices as upper case boldfaced letters." ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ca450475", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "3\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial\\boldsymbol{b}^T\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=\\boldsymbol{b},\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ff7b8b4f", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "4\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial\\boldsymbol{a}^T\\boldsymbol{A}\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=(\\boldsymbol{A}+\\boldsymbol{A}^T)\\boldsymbol{a},\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "13df1ee1", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "5\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial tr(\\boldsymbol{B}\\boldsymbol{A})}{\\partial\\boldsymbol{A}}=\\boldsymbol{B}^T,\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "36a0b11e", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial\\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}}=(\\boldsymbol{A}^{-1})^T.\n", @@ -1998,7 +2294,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "73c64903", + "metadata": { + "editable": true + }, "source": [ "We can then compute the second derivative of the cost function, which in our case is the second derivative\n", "of the means squared error. This leads to" @@ -2006,7 +2305,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4602f620", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial^2 C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}^T\\partial \\boldsymbol{\\beta}} =\\frac{2}{n}\\boldsymbol{X}^T\\boldsymbol{X}.\n", @@ -2015,7 +2317,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "51e19903", + "metadata": { + "editable": true + }, "source": [ "This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).\n", "\n", @@ -2024,7 +2329,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e6b248c3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n", @@ -2033,20 +2341,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "91b60702", + "metadata": { + "editable": true + }, "source": [ "The Hessian matrix for ordinary least squares is also proportional to\n", "the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find\n", "the eigenvalues of the covariance matrix and the Hessian matrix in\n", "terms of the singular values.\n", "\n", - "\n", "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "26a256b3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -2055,14 +2368,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "af338ef6", + "metadata": { + "editable": true + }, "source": [ "and with" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "fecef307", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -2071,14 +2390,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d895336c", + "metadata": { + "editable": true + }, "source": [ "we have" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "a1de6a4a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -2087,21 +2412,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "15669251", + "metadata": { + "editable": true + }, "source": [ "meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n", "\n", - "\n", "Let us now return to our nuclear binding energies and simply code the above equations. \n", "\n", - "\n", "It is rather straightforward to implement the matrix inversion and obtain the parameters $\\boldsymbol{\\beta}$. After having defined the matrix $\\boldsymbol{X}$ we simply need to \n", "write" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, + "id": "ab885c31", "metadata": { "collapsed": false, "editable": true @@ -2116,14 +2443,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ded01eba", + "metadata": { + "editable": true + }, "source": [ "Alternatively, you can use the least squares functionality in **Numpy** as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, + "id": "14561b3b", "metadata": { "collapsed": false, "editable": true @@ -2136,14 +2467,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d6abfb9b", + "metadata": { + "editable": true + }, "source": [ "And finally we plot our fit with and compare with data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, + "id": "b9e5c460", "metadata": { "collapsed": false, "editable": true @@ -2166,7 +2501,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "698df560", + "metadata": { + "editable": true + }, "source": [ "We can easily test our fit by computing the $R2$ score that we discussed in connection with the functionality of **Scikit-Learn** in the introductory slides.\n", "Since we are not using **Scikit-Learn** here we can define our own $R2$ function as" @@ -2174,7 +2512,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, + "id": "9dbe859a", "metadata": { "collapsed": false, "editable": true @@ -2187,14 +2526,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "74c9d52f", + "metadata": { + "editable": true + }, "source": [ "and we would be using it as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, + "id": "e8c140e8", "metadata": { "collapsed": false, "editable": true @@ -2206,14 +2549,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c131f9a3", + "metadata": { + "editable": true + }, "source": [ "We can easily add our **MSE** score as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, + "id": "00c1307d", "metadata": { "collapsed": false, "editable": true @@ -2229,14 +2576,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "afcf6b4d", + "metadata": { + "editable": true + }, "source": [ "and finally the relative error as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, + "id": "30ce0766", "metadata": { "collapsed": false, "editable": true @@ -2250,7 +2601,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "208f6b70", + "metadata": { + "editable": true + }, "source": [ "### The $\\chi^2$ function\n", "\n", @@ -2269,7 +2623,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "76ab8d32", + "metadata": { + "editable": true + }, "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", @@ -2278,17 +2635,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d9ad3f4d", + "metadata": { + "editable": true + }, "source": [ "where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements. \n", "\n", - "\n", "In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\boldsymbol{\\beta})$ by requiring" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "5f8ad792", + "metadata": { + "editable": true + }, "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", @@ -2297,14 +2659,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c9685750", + "metadata": { + "editable": true + }, "source": [ "which results in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "96b044c3", + "metadata": { + "editable": true + }, "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", @@ -2313,14 +2681,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "683761fd", + "metadata": { + "editable": true + }, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "e93b0c33", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n", @@ -2329,7 +2703,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a15143d4", + "metadata": { + "editable": true + }, "source": [ "where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$. \n", "\n", @@ -2338,7 +2715,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ec94fb14", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n", @@ -2347,14 +2727,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6e7a8085", + "metadata": { + "editable": true + }, "source": [ "as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "a093d2a1", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n", @@ -2363,14 +2749,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "32189c08", + "metadata": { + "editable": true + }, "source": [ "and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "042085f9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n", @@ -2379,14 +2771,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2a711c1a", + "metadata": { + "editable": true + }, "source": [ "If we then introduce the matrix" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4c082c12", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n", @@ -2395,14 +2793,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "3ef9c8f8", + "metadata": { + "editable": true + }, "source": [ "we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d779743", + "metadata": { + "editable": true + }, "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", @@ -2411,14 +2815,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b9f180ff", + "metadata": { + "editable": true + }, "source": [ "We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4bd7ff7a", + "metadata": { + "editable": true + }, "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", @@ -2427,14 +2837,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5a9a0e2a", + "metadata": { + "editable": true + }, "source": [ "resulting in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "43526b6e", + "metadata": { + "editable": true + }, "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", @@ -2443,14 +2859,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "45c0e8b1", + "metadata": { + "editable": true + }, "source": [ "The first step here is to approximate the function $y$ with a first-order polynomial, that is we write" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "396a1bce", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n", @@ -2459,14 +2881,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c10268e7", + "metadata": { + "editable": true + }, "source": [ "By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "10c2e68c", + "metadata": { + "editable": true + }, "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", @@ -2475,14 +2903,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4fe24ad6", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "2383a935", + "metadata": { + "editable": true + }, "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", @@ -2491,7 +2925,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1e3c0203", + "metadata": { + "editable": true + }, "source": [ "For a linear fit (a first-order polynomial) we don't need to invert a matrix!! \n", "Defining" @@ -2499,7 +2936,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1c9dbe17", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n", @@ -2508,7 +2948,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "35dc4610", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n", @@ -2517,7 +2960,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "66b6c18d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n", @@ -2526,7 +2972,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "def0d04b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n", @@ -2535,7 +2984,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d6af2ed", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n", @@ -2544,14 +2996,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "02db20b1", + "metadata": { + "editable": true + }, "source": [ "we obtain" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "323f21f3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n", @@ -2560,7 +3018,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "03a686e4", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n", @@ -2569,15 +3030,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1239edc3", + "metadata": { + "editable": true + }, "source": [ "This approach (different linear and non-linear regression) suffers\n", "often from both being underdetermined and overdetermined in the\n", "unknown coefficients $\\beta_i$. A better approach is to use the\n", "Singular Value Decomposition (SVD) method discussed below. Or using\n", - "Lasso and Ridge regression. See below.\n", - "\n", - "\n", + "Lasso and Ridge regression. See below." + ] + }, + { + "cell_type": "markdown", + "id": "de3dc052", + "metadata": { + "editable": true + }, + "source": [ "### Fitting an Equation of State for Dense Nuclear Matter\n", "\n", "Before we continue, let us introduce yet another example. We are going to fit the\n", @@ -2598,7 +3069,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, + "id": "755ebe55", "metadata": { "collapsed": false, "editable": true @@ -2617,7 +3089,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -2680,16 +3152,24 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "fb8d2943", + "metadata": { + "editable": true + }, "source": [ "The above simple polynomial in density $\\rho$ gives an excellent fit\n", - "to the data. \n", - "\n", - "\n", - "\n", + "to the data." + ] + }, + { + "cell_type": "markdown", + "id": "84aa3cb0", + "metadata": { + "editable": true + }, + "source": [ "## Splitting our Data in Training and Test data\n", "\n", - "\n", "It is normal in essentially all Machine Learning studies to split the\n", "data in a training set and a test set (sometimes also an additional\n", "validation set). **Scikit-Learn** has an own function for this. There\n", @@ -2710,7 +3190,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, + "id": "31887c07", "metadata": { "collapsed": false, "editable": true @@ -2759,14 +3240,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0b2ef393", + "metadata": { + "editable": true + }, "source": [ "Alternatively, you could write your own test-train splitting function as shown here." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, + "id": "5c347db2", "metadata": { "collapsed": false, "editable": true @@ -2791,13 +3276,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1c394fbb", + "metadata": { + "editable": true + }, "source": [ "But since **scikit-learn** has its own function for doing this and since\n", "it interfaces easily with **tensorflow** and other libraries, we\n", "normally recommend using the latter functionality.\n", "\n", - "\n", "As another example, we apply the training and testing split to \n", "to the above equation of state fitting example\n", "but now splitting the data into a training set and a test set." @@ -2805,7 +3292,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, + "id": "ae5eb741", "metadata": { "collapsed": false, "editable": true @@ -2820,7 +3308,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -2880,7 +3368,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "dbe0c366", + "metadata": { + "editable": true + }, "source": [ "## The Boston housing data example\n", "\n", @@ -2916,15 +3407,24 @@ "\n", "12. LSTAT: Percentage of lower status of the population\n", "\n", - "13. MEDV: Median value of owner-occupied homes in USD 1000s\n", - "\n", + "13. MEDV: Median value of owner-occupied homes in USD 1000s" + ] + }, + { + "cell_type": "markdown", + "id": "2a9cc829", + "metadata": { + "editable": true + }, + "source": [ "## Housing data, the code\n", "We start by importing the libraries" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, + "id": "a8843592", "metadata": { "collapsed": false, "editable": true @@ -2940,14 +3440,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9abbc574", + "metadata": { + "editable": true + }, "source": [ "and load the Boston Housing DataSet from **Scikit-Learn**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, + "id": "50b5d160", "metadata": { "collapsed": false, "editable": true @@ -2965,14 +3469,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "00dfdd50", + "metadata": { + "editable": true + }, "source": [ "Then we invoke Pandas" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, + "id": "ba5c8bb2", "metadata": { "collapsed": false, "editable": true @@ -2986,14 +3494,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ee060a44", + "metadata": { + "editable": true + }, "source": [ "and preprocess the data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, + "id": "7cd7e1ee", "metadata": { "collapsed": false, "editable": true @@ -3006,14 +3518,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "11cf13f4", + "metadata": { + "editable": true + }, "source": [ "We can then visualize the data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, + "id": "c75837e3", "metadata": { "collapsed": false, "editable": true @@ -3030,14 +3546,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e5f7bd90", + "metadata": { + "editable": true + }, "source": [ "It is now useful to look at the correlation matrix" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, + "id": "1a5ec28f", "metadata": { "collapsed": false, "editable": true @@ -3053,14 +3573,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "82358b49", + "metadata": { + "editable": true + }, "source": [ "From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, + "id": "870190cd", "metadata": { "collapsed": false, "editable": true @@ -3084,14 +3608,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c7628b09", + "metadata": { + "editable": true + }, "source": [ "Now we start training our model" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, + "id": "3b1fe034", "metadata": { "collapsed": false, "editable": true @@ -3104,14 +3632,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9f864351", + "metadata": { + "editable": true + }, "source": [ "We split the data into training and test sets" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, + "id": "9dd326a0", "metadata": { "collapsed": false, "editable": true @@ -3131,14 +3663,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8bc24ccc", + "metadata": { + "editable": true + }, "source": [ "Then we use the linear regression functionality from **Scikit-Learn**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, + "id": "f04e7787", "metadata": { "collapsed": false, "editable": true @@ -3180,7 +3716,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, + "id": "e64f0d66", "metadata": { "collapsed": false, "editable": true @@ -3195,7 +3732,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d376f62d", + "metadata": { + "editable": true + }, "source": [ "## Reducing the number of degrees of freedom, overarching view\n", "\n", @@ -3211,7 +3751,6 @@ "techniques: the principal component analysis (PCA), Kernel PCA, and\n", "Locally Linear Embedding (LLE). \n", "\n", - "\n", "Principal component analysis and its various variants deal with the\n", "problem of fitting a low-dimensional [affine\n", "subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of\n", @@ -3219,8 +3758,6 @@ "is one of the most used tools in data modeling, compression and\n", "visualization.\n", "\n", - "\n", - "\n", "Before we proceed however, we will discuss how to preprocess our\n", "data. Till now and in connection with our previous examples we have\n", "not met so many cases where we are too sensitive to the scaling of our\n", @@ -3236,7 +3773,6 @@ "are very different scales. Therefore, it is typical to scale\n", "the features in a way to avoid such outlier values.\n", "\n", - "\n", "**Scikit-Learn** has several functions which allow us to rescale the\n", "data, normally resulting in much better results in terms of various\n", "accuracy scores. The **StandardScaler** function in **Scikit-Learn**\n", @@ -3247,7 +3783,6 @@ "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", - "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", @@ -3265,7 +3800,6 @@ "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", - "\n", "Many features are often scaled using standardization to improve\n", "performance. In **Scikit-Learn** this is given by the **StandardScaler**\n", "function as discussed above. It is easy however to write your own.\n", @@ -3275,7 +3809,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "353f7dc0", + "metadata": { + "editable": true + }, "source": [ "$$\n", "x_j^{(i)} \\rightarrow \\frac{x_j^{(i)} - \\overline{x}_j}{\\sigma(x_j)},\n", @@ -3284,7 +3821,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5e1aa076", + "metadata": { + "editable": true + }, "source": [ "where $\\overline{x}_j$ and $\\sigma(x_j)$ are the mean and standard\n", "deviation, respectively, of the feature $x_j$. This ensures that each\n", @@ -3292,8 +3832,6 @@ "where we do not have the standard deviation or don't wish to calculate\n", "it, it is then common to simply set it to one.\n", "\n", - "\n", - "\n", "Let us consider the following vanilla example where we use both\n", "**Scikit-Learn** and write our own function as well. We produce a\n", "simple test design matrix with random numbers. Each column could then\n", @@ -3302,7 +3840,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, + "id": "b9b91c02", "metadata": { "collapsed": false, "editable": true @@ -3336,12 +3875,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "90353e0c", + "metadata": { + "editable": true + }, "source": [ "Small exercise: perform the standard scaling by including the standard deviation and compare with what Scikit-Learn gives.\n", "\n", - "\n", - "\n", "Another commonly used scaling method is min-max scaling. This is very\n", "useful for when we want the features to lie in a certain interval. To\n", "scale the feature $x_j$ to the interval $[a, b]$, we can apply the\n", @@ -3350,7 +3890,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "eb29b406", + "metadata": { + "editable": true + }, "source": [ "$$\n", "x_j^{(i)} \\rightarrow (b-a)\\frac{x_j^{(i)} - \\min(x_j)}{\\max(x_j) - \\min(x_j)} - a\n", @@ -3359,16 +3902,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "36c1a91c", + "metadata": { + "editable": true + }, + "source": [ + "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively." + ] + }, + { + "cell_type": "markdown", + "id": "4fd47015", + "metadata": { + "editable": true + }, "source": [ - "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively.\n", - "\n", - "\n", - "\n", - "\n", "## Testing the Means Squared Error as function of Complexity\n", "\n", - "\n", "Before we proceed with a more detailed analysis of the so-called\n", "Bias-Variance tradeoff, we present here an example of the relation\n", "between model complexity and the mean squared error for the triaining\n", @@ -3380,13 +3930,13 @@ "\n", "The results here will vary as function of model complexity and the amount od data used for training. \n", "\n", - "\n", "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, + "id": "8c7dcd78", "metadata": { "collapsed": false, "editable": true @@ -3430,10 +3980,21 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "22ef09fb", + "metadata": { + "editable": true + }, + "source": [ + "## Exercises" + ] + }, + { + "cell_type": "markdown", + "id": "c81539de", + "metadata": { + "editable": true + }, "source": [ - "## Exercises\n", - "\n", "### Exercise: Setting up various Python environments\n", "\n", "The first exercise here is of a mere technical art. We want you to have \n", @@ -3493,11 +4054,16 @@ "analysis environment, available for free and under a commercial\n", "license.\n", "\n", - "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment.\n", - "\n", - "\n", - "\n", - "\n", + "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment." + ] + }, + { + "cell_type": "markdown", + "id": "b7cbad15", + "metadata": { + "editable": true + }, + "source": [ "### Exercise: making your own data and exploring scikit-learn\n", "\n", "We will generate our own dataset for a function $y(x)$ where $x \\in [0,1]$ and defined by random numbers computed with the uniform distribution. The function $y$ is a quadratic polynomial in $x$ with added stochastic noise according to the normal distribution $\\cal {N}(0,1)$.\n", @@ -3506,7 +4072,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, + "id": "aec3d518", "metadata": { "collapsed": false, "editable": true @@ -3519,7 +4086,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0e5cd05f", + "metadata": { + "editable": true + }, "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", @@ -3530,7 +4100,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "83bc7720", + "metadata": { + "editable": true + }, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -3540,7 +4113,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "28e6d655", + "metadata": { + "editable": true + }, "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" @@ -3548,7 +4124,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ab874e06", + "metadata": { + "editable": true + }, "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", @@ -3557,14 +4136,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d936331f", + "metadata": { + "editable": true + }, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4d0520ed", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -3573,14 +4158,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a4c22443", + "metadata": { + "editable": true + }, "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", - "\n", - "\n", - "\n", - "\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." + ] + }, + { + "cell_type": "markdown", + "id": "5da59397", + "metadata": { + "editable": true + }, + "source": [ "### Exercise: Normalizing our data\n", "\n", "A much used approach before starting to train the data is to preprocess our\n", @@ -3598,7 +4191,6 @@ "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", - "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", @@ -3616,14 +4208,14 @@ "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", - "\n", "It also common to split the data in a **training** set and a **testing** set. A typical split is to use $80\\%$ of the data for training and the rest\n", "for testing. This can be done as follows with our design matrix $\\boldsymbol{X}$ and data $\\boldsymbol{y}$ (remember to import **scikit-learn**)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, + "id": "74e0714b", "metadata": { "collapsed": false, "editable": true @@ -3636,14 +4228,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "af983a9c", + "metadata": { + "editable": true + }, "source": [ "Then we can use the standard scaler to scale our data as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, + "id": "5ad3d9f9", "metadata": { "collapsed": false, "editable": true @@ -3658,7 +4254,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "699eebfa", + "metadata": { + "editable": true + }, "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", @@ -3667,14 +4266,13 @@ "One of \n", "the aims is to reproduce Figure 2.11 of [Hastie et al](https://github.com/CompPhysics/MLErasmus/blob/master/doc/Textbooks/elementsstat.pdf).\n", "\n", - "\n", - "\n", "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, + "id": "eb9eb5fe", "metadata": { "collapsed": false, "editable": true @@ -3691,23 +4289,21 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a7dfb469", + "metadata": { + "editable": true + }, "source": [ "where $y$ is the function we want to fit with a given polynomial.\n", "\n", - "\n", "Write a first code which sets up a design matrix $X$ defined by a\n", "fifth-order polynomial. Scale your data and split it in training and\n", "test data.\n", "\n", - "\n", - "\n", "Perform an ordinary least squares and compute the means squared error\n", "and the $R2$ factor for the training data and the test data, with and\n", "without scaling.\n", "\n", - "\n", - "\n", "Add now a model which allows you to make polynomials up to degree\n", "$15$. Perform a standard OLS fitting of the training data and compute\n", "the MSE and $R2$ for the training and test data and plot both test and\n", @@ -3720,5 +4316,5 @@ ], "metadata": {}, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/doc/LectureNotes/_build/html/_sources/statistics.ipynb b/doc/LectureNotes/_build/html/_sources/statistics.ipynb index 4ea8e3730..abcd4c7f8 100644 --- a/doc/LectureNotes/_build/html/_sources/statistics.ipynb +++ b/doc/LectureNotes/_build/html/_sources/statistics.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "1de4abfb", + "id": "70706709", "metadata": { "editable": true }, @@ -13,7 +13,7 @@ }, { "cell_type": "markdown", - "id": "9268be0a", + "id": "85b1eb1e", "metadata": { "editable": true }, @@ -23,7 +23,7 @@ }, { "cell_type": "markdown", - "id": "b24d433f", + "id": "f338b4e0", "metadata": { "editable": true }, @@ -35,7 +35,7 @@ }, { "cell_type": "markdown", - "id": "9fa7c59b", + "id": "596202aa", "metadata": { "editable": true }, @@ -47,7 +47,7 @@ }, { "cell_type": "markdown", - "id": "d1c9912c", + "id": "d81eea8e", "metadata": { "editable": true }, @@ -58,7 +58,7 @@ }, { "cell_type": "markdown", - "id": "6626ea89", + "id": "432953c1", "metadata": { "editable": true }, @@ -70,7 +70,7 @@ }, { "cell_type": "markdown", - "id": "65c54c5b", + "id": "1abe1fd4", "metadata": { "editable": true }, @@ -88,7 +88,7 @@ }, { "cell_type": "markdown", - "id": "84e29b68", + "id": "9320be8c", "metadata": { "editable": true }, @@ -100,7 +100,7 @@ }, { "cell_type": "markdown", - "id": "8ae71934", + "id": "7ac13e6b", "metadata": { "editable": true }, @@ -110,7 +110,7 @@ }, { "cell_type": "markdown", - "id": "c3901951", + "id": "4ad0a660", "metadata": { "editable": true }, @@ -122,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "9c659ce0", + "id": "402e3e2c", "metadata": { "editable": true }, @@ -132,7 +132,7 @@ }, { "cell_type": "markdown", - "id": "eb18a204", + "id": "3969e72a", "metadata": { "editable": true }, @@ -153,7 +153,7 @@ }, { "cell_type": "markdown", - "id": "2589c0ee", + "id": "cbaeacff", "metadata": { "editable": true }, @@ -165,7 +165,7 @@ }, { "cell_type": "markdown", - "id": "ef71f105", + "id": "058b8fd1", "metadata": { "editable": true }, @@ -181,7 +181,7 @@ }, { "cell_type": "markdown", - "id": "9c5efaee", + "id": "8afee525", "metadata": { "editable": true }, @@ -193,7 +193,7 @@ }, { "cell_type": "markdown", - "id": "cbf1d43c", + "id": "004446a9", "metadata": { "editable": true }, @@ -209,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "be829d81", + "id": "f090295d", "metadata": { "editable": true }, @@ -222,7 +222,7 @@ }, { "cell_type": "markdown", - "id": "1f193798", + "id": "a14393c7", "metadata": { "editable": true }, @@ -232,7 +232,7 @@ }, { "cell_type": "markdown", - "id": "3d29d961", + "id": "b8a627c3", "metadata": { "editable": true }, @@ -244,7 +244,7 @@ }, { "cell_type": "markdown", - "id": "fc5b2c18", + "id": "73831b21", "metadata": { "editable": true }, @@ -257,7 +257,7 @@ }, { "cell_type": "markdown", - "id": "2a465c1b", + "id": "c42aff41", "metadata": { "editable": true }, @@ -269,7 +269,7 @@ }, { "cell_type": "markdown", - "id": "d69e520a", + "id": "221a3766", "metadata": { "editable": true }, @@ -283,7 +283,7 @@ }, { "cell_type": "markdown", - "id": "2208b590", + "id": "d7bf2e2c", "metadata": { "editable": true }, @@ -298,7 +298,7 @@ }, { "cell_type": "markdown", - "id": "f3d91dca", + "id": "b52f3a4a", "metadata": { "editable": true }, @@ -309,7 +309,7 @@ }, { "cell_type": "markdown", - "id": "0f431dd2", + "id": "bb00c079", "metadata": { "editable": true }, @@ -327,7 +327,7 @@ }, { "cell_type": "markdown", - "id": "155c6cf7", + "id": "024255b1", "metadata": { "editable": true }, @@ -337,7 +337,7 @@ }, { "cell_type": "markdown", - "id": "42993dcc", + "id": "2c417fdd", "metadata": { "editable": true }, @@ -351,7 +351,7 @@ }, { "cell_type": "markdown", - "id": "749d5c23", + "id": "8edaa55e", "metadata": { "editable": true }, @@ -363,7 +363,7 @@ }, { "cell_type": "markdown", - "id": "6e2110dc", + "id": "23da1cfa", "metadata": { "editable": true }, @@ -375,7 +375,7 @@ }, { "cell_type": "markdown", - "id": "d00fdbe1", + "id": "66d5445e", "metadata": { "editable": true }, @@ -385,7 +385,7 @@ }, { "cell_type": "markdown", - "id": "23c37b45", + "id": "fc8027ff", "metadata": { "editable": true }, @@ -397,7 +397,7 @@ }, { "cell_type": "markdown", - "id": "07558d2c", + "id": "351fa52b", "metadata": { "editable": true }, @@ -408,7 +408,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "b99f544d", + "id": "1eac297f", "metadata": { "collapsed": false, "editable": true @@ -458,7 +458,7 @@ }, { "cell_type": "markdown", - "id": "617597ef", + "id": "689c8867", "metadata": { "editable": true }, @@ -468,7 +468,7 @@ }, { "cell_type": "markdown", - "id": "18be0515", + "id": "c13c84f0", "metadata": { "editable": true }, @@ -480,7 +480,7 @@ }, { "cell_type": "markdown", - "id": "cafcff78", + "id": "44d6f4d6", "metadata": { "editable": true }, @@ -494,7 +494,7 @@ }, { "cell_type": "markdown", - "id": "f5c68a26", + "id": "b721f71c", "metadata": { "editable": true }, @@ -512,7 +512,7 @@ }, { "cell_type": "markdown", - "id": "291e3ff7", + "id": "5bf7a516", "metadata": { "editable": true }, @@ -526,7 +526,7 @@ }, { "cell_type": "markdown", - "id": "294080d7", + "id": "fa031db8", "metadata": { "editable": true }, @@ -538,7 +538,7 @@ }, { "cell_type": "markdown", - "id": "9d493962", + "id": "3c0c268c", "metadata": { "editable": true }, @@ -550,7 +550,7 @@ }, { "cell_type": "markdown", - "id": "6ca38798", + "id": "96f430cf", "metadata": { "editable": true }, @@ -562,7 +562,7 @@ }, { "cell_type": "markdown", - "id": "9a779b37", + "id": "cd05ac98", "metadata": { "editable": true }, @@ -572,7 +572,7 @@ }, { "cell_type": "markdown", - "id": "9fc21016", + "id": "bcfe0cef", "metadata": { "editable": true }, @@ -584,7 +584,7 @@ }, { "cell_type": "markdown", - "id": "a146b327", + "id": "d78ce192", "metadata": { "editable": true }, @@ -598,7 +598,7 @@ }, { "cell_type": "markdown", - "id": "0b282f14", + "id": "bab3a068", "metadata": { "editable": true }, @@ -610,7 +610,7 @@ }, { "cell_type": "markdown", - "id": "512e6e16", + "id": "d8e5ddc2", "metadata": { "editable": true }, @@ -623,7 +623,7 @@ }, { "cell_type": "markdown", - "id": "e244a343", + "id": "336072c9", "metadata": { "editable": true }, @@ -641,7 +641,7 @@ }, { "cell_type": "markdown", - "id": "c0d8e272", + "id": "59df87e7", "metadata": { "editable": true }, @@ -654,7 +654,7 @@ }, { "cell_type": "markdown", - "id": "12fb667e", + "id": "9fabf8a8", "metadata": { "editable": true }, @@ -685,7 +685,7 @@ }, { "cell_type": "markdown", - "id": "7d318e93", + "id": "cddc38d1", "metadata": { "editable": true }, @@ -697,7 +697,7 @@ }, { "cell_type": "markdown", - "id": "6ef87b82", + "id": "62d0c741", "metadata": { "editable": true }, @@ -707,7 +707,7 @@ }, { "cell_type": "markdown", - "id": "d11f1bdb", + "id": "5ac68815", "metadata": { "editable": true }, @@ -719,7 +719,7 @@ }, { "cell_type": "markdown", - "id": "2a8abb3d", + "id": "c0ecfbcb", "metadata": { "editable": true }, @@ -734,7 +734,7 @@ }, { "cell_type": "markdown", - "id": "6c14f838", + "id": "fe23b255", "metadata": { "editable": true }, @@ -746,7 +746,7 @@ }, { "cell_type": "markdown", - "id": "62149f95", + "id": "09ebf8ca", "metadata": { "editable": true }, @@ -758,7 +758,7 @@ }, { "cell_type": "markdown", - "id": "f8f51c0a", + "id": "401e693f", "metadata": { "editable": true }, @@ -770,7 +770,7 @@ }, { "cell_type": "markdown", - "id": "9a038bf3", + "id": "6c7d8d10", "metadata": { "editable": true }, @@ -780,7 +780,7 @@ }, { "cell_type": "markdown", - "id": "bdaf914a", + "id": "1bfafdfd", "metadata": { "editable": true }, @@ -792,7 +792,7 @@ }, { "cell_type": "markdown", - "id": "74226a02", + "id": "5596ac72", "metadata": { "editable": true }, @@ -802,7 +802,7 @@ }, { "cell_type": "markdown", - "id": "32215b82", + "id": "f59c48fc", "metadata": { "editable": true }, @@ -814,7 +814,7 @@ }, { "cell_type": "markdown", - "id": "688f69a2", + "id": "d7e68ca7", "metadata": { "editable": true }, @@ -824,7 +824,7 @@ }, { "cell_type": "markdown", - "id": "082e6778", + "id": "a6f6eebb", "metadata": { "editable": true }, @@ -836,7 +836,7 @@ }, { "cell_type": "markdown", - "id": "ba9c8bd4", + "id": "58f2e885", "metadata": { "editable": true }, @@ -849,7 +849,7 @@ }, { "cell_type": "markdown", - "id": "f9540188", + "id": "ec46859a", "metadata": { "editable": true }, @@ -861,7 +861,7 @@ }, { "cell_type": "markdown", - "id": "0507fa0a", + "id": "b65e2164", "metadata": { "editable": true }, @@ -871,7 +871,7 @@ }, { "cell_type": "markdown", - "id": "74ee9f1a", + "id": "f7874346", "metadata": { "editable": true }, @@ -883,7 +883,7 @@ }, { "cell_type": "markdown", - "id": "0cf42992", + "id": "63d8f111", "metadata": { "editable": true }, @@ -893,7 +893,7 @@ }, { "cell_type": "markdown", - "id": "e3554ca3", + "id": "ed985f65", "metadata": { "editable": true }, @@ -905,7 +905,7 @@ }, { "cell_type": "markdown", - "id": "728ba052", + "id": "4e2f6eb1", "metadata": { "editable": true }, @@ -915,7 +915,7 @@ }, { "cell_type": "markdown", - "id": "60276744", + "id": "1a073de2", "metadata": { "editable": true }, @@ -928,7 +928,7 @@ }, { "cell_type": "markdown", - "id": "c5b45c52", + "id": "cef07ac6", "metadata": { "editable": true }, @@ -940,7 +940,7 @@ }, { "cell_type": "markdown", - "id": "a005fdfe", + "id": "7fb0d04c", "metadata": { "editable": true }, @@ -958,7 +958,7 @@ }, { "cell_type": "markdown", - "id": "12c13ae4", + "id": "4404131d", "metadata": { "editable": true }, @@ -970,7 +970,7 @@ }, { "cell_type": "markdown", - "id": "68e56af7", + "id": "40d36fc7", "metadata": { "editable": true }, @@ -982,7 +982,7 @@ }, { "cell_type": "markdown", - "id": "99071464", + "id": "3c6be327", "metadata": { "editable": true }, @@ -994,7 +994,7 @@ }, { "cell_type": "markdown", - "id": "08b3b2e3", + "id": "33d98314", "metadata": { "editable": true }, @@ -1006,7 +1006,7 @@ }, { "cell_type": "markdown", - "id": "57d2b4a7", + "id": "182fc903", "metadata": { "editable": true }, @@ -1028,7 +1028,7 @@ }, { "cell_type": "markdown", - "id": "4ce5e39f", + "id": "ad6f2431", "metadata": { "editable": true }, @@ -1040,7 +1040,7 @@ }, { "cell_type": "markdown", - "id": "4b87bcf7", + "id": "0a7d17bf", "metadata": { "editable": true }, @@ -1050,7 +1050,7 @@ }, { "cell_type": "markdown", - "id": "29e93603", + "id": "1a31e460", "metadata": { "editable": true }, @@ -1062,7 +1062,7 @@ }, { "cell_type": "markdown", - "id": "524d4e2f", + "id": "f605d561", "metadata": { "editable": true }, @@ -1073,7 +1073,7 @@ }, { "cell_type": "markdown", - "id": "d129841d", + "id": "62d83d95", "metadata": { "editable": true }, @@ -1086,7 +1086,7 @@ }, { "cell_type": "markdown", - "id": "f68c25df", + "id": "800314ec", "metadata": { "editable": true }, @@ -1096,7 +1096,7 @@ }, { "cell_type": "markdown", - "id": "f19452aa", + "id": "418db0a7", "metadata": { "editable": true }, @@ -1109,7 +1109,7 @@ }, { "cell_type": "markdown", - "id": "c75f2dc5", + "id": "de9eb757", "metadata": { "editable": true }, @@ -1119,7 +1119,7 @@ }, { "cell_type": "markdown", - "id": "c7b760bf", + "id": "1bc554b4", "metadata": { "editable": true }, @@ -1131,7 +1131,7 @@ }, { "cell_type": "markdown", - "id": "6fc3e294", + "id": "9f92c026", "metadata": { "editable": true }, @@ -1144,7 +1144,7 @@ }, { "cell_type": "markdown", - "id": "c67cc7c9", + "id": "a79037de", "metadata": { "editable": true }, @@ -1156,7 +1156,7 @@ }, { "cell_type": "markdown", - "id": "3988d52a", + "id": "59153bee", "metadata": { "editable": true }, @@ -1166,7 +1166,7 @@ }, { "cell_type": "markdown", - "id": "9b3e4562", + "id": "57b60d32", "metadata": { "editable": true }, @@ -1179,7 +1179,7 @@ }, { "cell_type": "markdown", - "id": "88138c21", + "id": "9ee3d242", "metadata": { "editable": true }, @@ -1195,7 +1195,7 @@ }, { "cell_type": "markdown", - "id": "36ecffde", + "id": "47897048", "metadata": { "editable": true }, @@ -1207,7 +1207,7 @@ }, { "cell_type": "markdown", - "id": "be4e015c", + "id": "9ad853ba", "metadata": { "editable": true }, @@ -1224,7 +1224,7 @@ }, { "cell_type": "markdown", - "id": "93522854", + "id": "e44ea56e", "metadata": { "editable": true }, @@ -1242,7 +1242,7 @@ }, { "cell_type": "markdown", - "id": "e667c0aa", + "id": "c2c32ffc", "metadata": { "editable": true }, @@ -1260,7 +1260,7 @@ }, { "cell_type": "markdown", - "id": "44f76dd9", + "id": "87496c64", "metadata": { "editable": true }, @@ -1270,7 +1270,7 @@ }, { "cell_type": "markdown", - "id": "1041b2af", + "id": "841b5856", "metadata": { "editable": true }, @@ -1283,7 +1283,7 @@ }, { "cell_type": "markdown", - "id": "e42984a2", + "id": "50ede176", "metadata": { "editable": true }, @@ -1293,7 +1293,7 @@ }, { "cell_type": "markdown", - "id": "a46f958e", + "id": "64687e2f", "metadata": { "editable": true }, @@ -1305,7 +1305,7 @@ }, { "cell_type": "markdown", - "id": "37763243", + "id": "ab77c972", "metadata": { "editable": true }, @@ -1319,7 +1319,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "aedc8b8c", + "id": "1ffa428b", "metadata": { "collapsed": false, "editable": true @@ -1354,7 +1354,7 @@ }, { "cell_type": "markdown", - "id": "4ad05ea1", + "id": "7a9a1bee", "metadata": { "editable": true }, @@ -1364,7 +1364,7 @@ }, { "cell_type": "markdown", - "id": "3f643cb0", + "id": "825a940b", "metadata": { "editable": true }, @@ -1384,7 +1384,7 @@ }, { "cell_type": "markdown", - "id": "bedb81e0", + "id": "dbb414d5", "metadata": { "editable": true }, @@ -1394,7 +1394,7 @@ }, { "cell_type": "markdown", - "id": "8a8f5bdd", + "id": "a617dca7", "metadata": { "editable": true }, @@ -1406,7 +1406,7 @@ }, { "cell_type": "markdown", - "id": "cc3e8c15", + "id": "7d3f260d", "metadata": { "editable": true }, @@ -1416,7 +1416,7 @@ }, { "cell_type": "markdown", - "id": "cf107fa4", + "id": "996e13c9", "metadata": { "editable": true }, @@ -1428,7 +1428,7 @@ }, { "cell_type": "markdown", - "id": "c3d6eefd", + "id": "5a9b492d", "metadata": { "editable": true }, @@ -1446,7 +1446,7 @@ }, { "cell_type": "markdown", - "id": "11084473", + "id": "43f5dd21", "metadata": { "editable": true }, @@ -1458,7 +1458,7 @@ }, { "cell_type": "markdown", - "id": "ec3bb41f", + "id": "9ede60b9", "metadata": { "editable": true }, @@ -1482,7 +1482,7 @@ }, { "cell_type": "markdown", - "id": "9654f276", + "id": "e65f6a16", "metadata": { "editable": true }, @@ -1494,7 +1494,7 @@ }, { "cell_type": "markdown", - "id": "9c339ccc", + "id": "4625dd90", "metadata": { "editable": true }, @@ -1504,7 +1504,7 @@ }, { "cell_type": "markdown", - "id": "9d523f50", + "id": "9fe0ba5b", "metadata": { "editable": true }, @@ -1516,7 +1516,7 @@ }, { "cell_type": "markdown", - "id": "2793f264", + "id": "02018277", "metadata": { "editable": true }, @@ -1530,7 +1530,7 @@ }, { "cell_type": "markdown", - "id": "b0432b14", + "id": "b70c018b", "metadata": { "editable": true }, @@ -1548,7 +1548,7 @@ }, { "cell_type": "markdown", - "id": "c1981b2d", + "id": "b5e3445e", "metadata": { "editable": true }, @@ -1559,7 +1559,7 @@ }, { "cell_type": "markdown", - "id": "679d42bc", + "id": "f21c34e2", "metadata": { "editable": true }, @@ -1571,7 +1571,7 @@ }, { "cell_type": "markdown", - "id": "2bb94e0d", + "id": "b6e821b1", "metadata": { "editable": true }, @@ -1581,7 +1581,7 @@ }, { "cell_type": "markdown", - "id": "0611f240", + "id": "1b841b98", "metadata": { "editable": true }, @@ -1599,7 +1599,7 @@ }, { "cell_type": "markdown", - "id": "624f9965", + "id": "3eaf58b1", "metadata": { "editable": true }, @@ -1609,7 +1609,7 @@ }, { "cell_type": "markdown", - "id": "c0d8ff9e", + "id": "8111dbd1", "metadata": { "editable": true }, @@ -1627,7 +1627,7 @@ }, { "cell_type": "markdown", - "id": "d058f856", + "id": "769561de", "metadata": { "editable": true }, @@ -1641,7 +1641,7 @@ }, { "cell_type": "markdown", - "id": "76e956db", + "id": "707a2251", "metadata": { "editable": true }, @@ -1660,7 +1660,7 @@ }, { "cell_type": "markdown", - "id": "bd4e286e", + "id": "40849ecf", "metadata": { "editable": true }, @@ -1673,7 +1673,7 @@ }, { "cell_type": "markdown", - "id": "877355c7", + "id": "b3afcf6c", "metadata": { "editable": true }, @@ -1685,7 +1685,7 @@ }, { "cell_type": "markdown", - "id": "abc25d1f", + "id": "e6a97eec", "metadata": { "editable": true }, @@ -1697,7 +1697,7 @@ }, { "cell_type": "markdown", - "id": "29a4c67d", + "id": "f47332cb", "metadata": { "editable": true }, @@ -1707,7 +1707,7 @@ }, { "cell_type": "markdown", - "id": "46b6a9e4", + "id": "b397eb5b", "metadata": { "editable": true }, @@ -1719,7 +1719,7 @@ }, { "cell_type": "markdown", - "id": "350ee280", + "id": "2336c2fc", "metadata": { "editable": true }, @@ -1729,7 +1729,7 @@ }, { "cell_type": "markdown", - "id": "321d0a3d", + "id": "1e5e68d4", "metadata": { "editable": true }, @@ -1741,7 +1741,7 @@ }, { "cell_type": "markdown", - "id": "a6cec686", + "id": "d230496b", "metadata": { "editable": true }, @@ -1769,7 +1769,7 @@ }, { "cell_type": "markdown", - "id": "64525de2", + "id": "3a344727", "metadata": { "editable": true }, @@ -1781,7 +1781,7 @@ }, { "cell_type": "markdown", - "id": "a8e20afa", + "id": "1146f588", "metadata": { "editable": true }, @@ -1792,7 +1792,7 @@ }, { "cell_type": "markdown", - "id": "51ec2352", + "id": "c7e8ee38", "metadata": { "editable": true }, @@ -1805,7 +1805,7 @@ }, { "cell_type": "markdown", - "id": "b445a98b", + "id": "0da99fb8", "metadata": { "editable": true }, @@ -1818,7 +1818,7 @@ }, { "cell_type": "markdown", - "id": "fd16dccb", + "id": "59f94571", "metadata": { "editable": true }, @@ -1836,7 +1836,7 @@ }, { "cell_type": "markdown", - "id": "03919ae2", + "id": "5711d982", "metadata": { "editable": true }, @@ -1850,7 +1850,7 @@ }, { "cell_type": "markdown", - "id": "f4edb79b", + "id": "f43f4e99", "metadata": { "editable": true }, @@ -1869,7 +1869,7 @@ }, { "cell_type": "markdown", - "id": "209c3c0a", + "id": "f3e40026", "metadata": { "editable": true }, @@ -1882,7 +1882,7 @@ }, { "cell_type": "markdown", - "id": "d0c7027f", + "id": "5e80ce67", "metadata": { "editable": true }, @@ -1900,7 +1900,7 @@ }, { "cell_type": "markdown", - "id": "8183355a", + "id": "77e3a4ed", "metadata": { "editable": true }, @@ -1918,7 +1918,7 @@ }, { "cell_type": "markdown", - "id": "04f300ab", + "id": "5bc1a688", "metadata": { "editable": true }, @@ -1930,7 +1930,7 @@ }, { "cell_type": "markdown", - "id": "d9bdb1eb", + "id": "a17a0e31", "metadata": { "editable": true }, @@ -1948,7 +1948,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "93013c0b", + "id": "3c348b11", "metadata": { "collapsed": false, "editable": true @@ -1996,7 +1996,7 @@ }, { "cell_type": "markdown", - "id": "65e8cd76", + "id": "ecaeea61", "metadata": { "editable": true }, @@ -2034,7 +2034,7 @@ }, { "cell_type": "markdown", - "id": "4daecdd3", + "id": "8e731bf2", "metadata": { "editable": true }, @@ -2046,7 +2046,7 @@ }, { "cell_type": "markdown", - "id": "fd1c5e47", + "id": "d0341530", "metadata": { "editable": true }, @@ -2056,7 +2056,7 @@ }, { "cell_type": "markdown", - "id": "d8c06853", + "id": "4d3b7ea7", "metadata": { "editable": true }, @@ -2068,7 +2068,7 @@ }, { "cell_type": "markdown", - "id": "0d971106", + "id": "4b36e97b", "metadata": { "editable": true }, @@ -2090,7 +2090,7 @@ }, { "cell_type": "markdown", - "id": "d12a26d7", + "id": "e35bec75", "metadata": { "editable": true }, @@ -2102,7 +2102,7 @@ }, { "cell_type": "markdown", - "id": "2ee32cc9", + "id": "e1793cdf", "metadata": { "editable": true }, @@ -2115,7 +2115,7 @@ }, { "cell_type": "markdown", - "id": "441be869", + "id": "d6fba025", "metadata": { "editable": true }, @@ -2127,7 +2127,7 @@ }, { "cell_type": "markdown", - "id": "c0803129", + "id": "6ffd5658", "metadata": { "editable": true }, @@ -2147,7 +2147,7 @@ }, { "cell_type": "markdown", - "id": "43aef6df", + "id": "c5da7f78", "metadata": { "editable": true }, @@ -2159,7 +2159,7 @@ }, { "cell_type": "markdown", - "id": "1c7bddf4", + "id": "2c25b836", "metadata": { "editable": true }, @@ -2174,7 +2174,7 @@ }, { "cell_type": "markdown", - "id": "fed2dc23", + "id": "e4a135e8", "metadata": { "editable": true }, @@ -2192,7 +2192,7 @@ }, { "cell_type": "markdown", - "id": "dc9d8537", + "id": "b37cd0b7", "metadata": { "editable": true }, @@ -2202,7 +2202,7 @@ }, { "cell_type": "markdown", - "id": "aa9465e9", + "id": "da41fe10", "metadata": { "editable": true }, @@ -2220,7 +2220,7 @@ }, { "cell_type": "markdown", - "id": "def99a7e", + "id": "9a489418", "metadata": { "editable": true }, @@ -2233,7 +2233,7 @@ }, { "cell_type": "markdown", - "id": "61c8f9ef", + "id": "4294433a", "metadata": { "editable": true }, @@ -2245,7 +2245,7 @@ }, { "cell_type": "markdown", - "id": "c59c90b8", + "id": "9bfc4598", "metadata": { "editable": true }, @@ -2266,7 +2266,7 @@ }, { "cell_type": "markdown", - "id": "06587f00", + "id": "a4a8c15a", "metadata": { "editable": true }, @@ -2278,7 +2278,7 @@ }, { "cell_type": "markdown", - "id": "c3255e8e", + "id": "5ac68b4d", "metadata": { "editable": true }, @@ -2291,7 +2291,7 @@ }, { "cell_type": "markdown", - "id": "8e3ec364", + "id": "d47724cd", "metadata": { "editable": true }, @@ -2303,7 +2303,7 @@ }, { "cell_type": "markdown", - "id": "4b7c18d5", + "id": "f3ca32a6", "metadata": { "editable": true }, @@ -2313,7 +2313,7 @@ }, { "cell_type": "markdown", - "id": "4e58c88d", + "id": "26cb7a8c", "metadata": { "editable": true }, @@ -2325,7 +2325,7 @@ }, { "cell_type": "markdown", - "id": "1fecdb9a", + "id": "8c88d4ec", "metadata": { "editable": true }, @@ -2335,7 +2335,7 @@ }, { "cell_type": "markdown", - "id": "aa126ce7", + "id": "7e2a9bfc", "metadata": { "editable": true }, @@ -2347,7 +2347,7 @@ }, { "cell_type": "markdown", - "id": "20cab2fa", + "id": "6f25911e", "metadata": { "editable": true }, @@ -2360,7 +2360,7 @@ }, { "cell_type": "markdown", - "id": "904a6320", + "id": "e3363165", "metadata": { "editable": true }, @@ -2378,7 +2378,7 @@ }, { "cell_type": "markdown", - "id": "36c6f816", + "id": "caa9b226", "metadata": { "editable": true }, @@ -2392,7 +2392,7 @@ }, { "cell_type": "markdown", - "id": "319af13b", + "id": "807586a1", "metadata": { "editable": true }, @@ -2410,7 +2410,7 @@ }, { "cell_type": "markdown", - "id": "0c426357", + "id": "22f852c7", "metadata": { "editable": true }, @@ -2420,7 +2420,7 @@ }, { "cell_type": "markdown", - "id": "52547452", + "id": "0bb72673", "metadata": { "editable": true }, @@ -2438,7 +2438,7 @@ }, { "cell_type": "markdown", - "id": "86bf958f", + "id": "5e06548e", "metadata": { "editable": true }, @@ -2448,7 +2448,7 @@ }, { "cell_type": "markdown", - "id": "d2015392", + "id": "1227c261", "metadata": { "editable": true }, @@ -2466,7 +2466,7 @@ }, { "cell_type": "markdown", - "id": "83495015", + "id": "c1b82a5c", "metadata": { "editable": true }, @@ -2503,7 +2503,7 @@ }, { "cell_type": "markdown", - "id": "268aac30", + "id": "dacf04eb", "metadata": { "editable": true }, @@ -2515,7 +2515,7 @@ }, { "cell_type": "markdown", - "id": "25bd4ea3", + "id": "44216fdd", "metadata": { "editable": true }, @@ -2525,7 +2525,7 @@ }, { "cell_type": "markdown", - "id": "29e8d709", + "id": "bb4297ee", "metadata": { "editable": true }, @@ -2537,7 +2537,7 @@ }, { "cell_type": "markdown", - "id": "90a07c88", + "id": "bed1a0da", "metadata": { "editable": true }, @@ -2571,7 +2571,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "3c296708", + "id": "dd0f1669", "metadata": { "collapsed": false, "editable": true @@ -2604,7 +2604,7 @@ }, { "cell_type": "markdown", - "id": "7a028dda", + "id": "3b439592", "metadata": { "editable": true }, @@ -2618,7 +2618,7 @@ }, { "cell_type": "markdown", - "id": "bc325e1a", + "id": "65c84eb8", "metadata": { "editable": true }, @@ -2631,7 +2631,7 @@ }, { "cell_type": "markdown", - "id": "a7738ea8", + "id": "5bdabd24", "metadata": { "editable": true }, @@ -2642,7 +2642,7 @@ }, { "cell_type": "markdown", - "id": "b647158e", + "id": "9965ab90", "metadata": { "editable": true }, @@ -2654,7 +2654,7 @@ }, { "cell_type": "markdown", - "id": "273afa83", + "id": "23e0c2ff", "metadata": { "editable": true }, @@ -2667,7 +2667,7 @@ }, { "cell_type": "markdown", - "id": "70391792", + "id": "f740a54c", "metadata": { "editable": true }, @@ -2680,7 +2680,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "2b08e1a4", + "id": "4acc6d55", "metadata": { "collapsed": false, "editable": true @@ -2720,7 +2720,7 @@ }, { "cell_type": "markdown", - "id": "5848dd32", + "id": "2b9b8e55", "metadata": { "editable": true }, diff --git a/doc/LectureNotes/_build/html/chapter1.html b/doc/LectureNotes/_build/html/chapter1.html index 8e959a813..aeb4e4859 100644 --- a/doc/LectureNotes/_build/html/chapter1.html +++ b/doc/LectureNotes/_build/html/chapter1.html @@ -548,7 +548,8 @@ const thebe_selector_output = ".output, .cell_output"

-
+

3. Linear Regression¶

3.1. Introduction¶

@@ -805,7 +806,7 @@ Thereafter we wish to apply it to data which were not included in the training.
-_images/chapter1_3_0.png +_images/chapter1_9_0.png

This example serves several aims. It allows us to demonstrate several @@ -890,7 +891,7 @@ to be dominated by outliers.

-_images/chapter1_11_0.png +_images/chapter1_17_0.png

Depending on the parameter in front of the normal distribution, we may @@ -937,16 +938,16 @@ example of the functionality of Scikit-Learn.

The intercept alpha: 
- [2.09170751]
+ [1.92272314]
 Coefficient beta : 
- [[4.91479093]]
+ [[5.13117061]]
 Mean squared error: 0.21
-Variance score: 0.90
+Variance score: 0.92
 Mean squared log error: 0.01
-Mean absolute error: 0.35
+Mean absolute error: 0.36
 
-_images/chapter1_13_1.png +_images/chapter1_19_1.png

The function coef gives us the parameter \(\beta\) of our fit while intercept yields @@ -1042,8 +1043,8 @@ a linear \(x\)-dependence we s

-_images/chapter1_27_0.png -
0.004999999999999984
+_images/chapter1_33_0.png
+
0.004999999999999996
 
@@ -1128,7 +1129,7 @@ After having downloaded this file to our own computer, we are now ready to read # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1585,7 +1586,7 @@ our matrix as \(\boldsymbol{X}\in {\m # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1745,57 +1746,18 @@ allow for the usage of direct linear algebra methods such as LU

Small question: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix \(\boldsymbol{X}^T\boldsymbol{X}\)? What kind of problems can we expect?

The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and matrices as upper case boldfaced letters.

-

4 -3

-

< -< -< -! -! -M -A -T -H -_ -B -L -O -C -K

-

4 -4

-

< -< -< -! -! -M -A -T -H -_ -B -L -O -C -K

-

4 -5

-

< -< -< -! -! -M -A -T -H -_ -B -L -O -C -K

+
+\[ +\frac{\partial\boldsymbol{b}^T\boldsymbol{a}}{\partial\boldsymbol{a}}=\boldsymbol{b}, +\]
+
+\[ +\frac{\partial\boldsymbol{a}^T\boldsymbol{A}\boldsymbol{a}}{\partial\boldsymbol{a}}=(\boldsymbol{A}+\boldsymbol{A}^T)\boldsymbol{a}, +\]
+
+\[ +\frac{\partial tr(\boldsymbol{B}\boldsymbol{A})}{\partial\boldsymbol{A}}=\boldsymbol{B}^T, +\]
\[ \frac{\partial\log{\vert\boldsymbol{A}\vert}}{\partial \boldsymbol{A}}=(\boldsymbol{A}^{-1})^T. @@ -2061,7 +2023,7 @@ instead of our own matrix inversion implementation.

# Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -2226,7 +2188,7 @@ but now splitting the data into a training set and a test set.

# Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) diff --git a/doc/LectureNotes/_build/html/searchindex.js b/doc/LectureNotes/_build/html/searchindex.js index f0005bdfd..a86e44eed 100644 --- a/doc/LectureNotes/_build/html/searchindex.js +++ b/doc/LectureNotes/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["chapter1","chapter10","chapter11","chapter12","chapter13","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","chapteroptimization","clustering","intro","linalg","schedule","statistics","teachers","textbooks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter10.ipynb","chapter11.ipynb","chapter12.ipynb","chapter13.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","chapteroptimization.ipynb","clustering.ipynb","intro.md","linalg.ipynb","schedule.md","statistics.ipynb","teachers.md","textbooks.md"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19],"00":[0,1,3,5,6,11],"000":[1,3],"0000":[],"00000":[],"000000":[5,11],"00000000e":5,"0000e":3,"0001":[1,3],"000148":[],"00019998":5,"00024087":5,"00028369228101198006":[],"00029012":5,"0003043256065368937":9,"00031535148309580783":6,"0003153514830958081":[],"0003153514830958126":[],"0003153514830958235":6,"00034944":5,"000417932":2,"00042089":5,"000464088":2,"00050694":5,"00058016":6,"000599":[],"00060705":[],"00060708":6,"00061058":5,"00062582":6,"00062595":[],"00066668":6,"00068734":6,"00068941":6,"00069103":[],"00073541":5,"00076495":6,"00076919":6,"00076925":[],"0007698473260556325":6,"0007698473260556334":[],"0007698473260556339":[],"0007698473260556344":6,"00079123":[],"00079130":6,"00079968":5,"00084705":[],"00084711":6,"00085883":6,"00085884":[],"00087697":6,"00088573":5,"00092645":6,"00092646":[],"00096314":5,"001":[1,2,8,13],"00100519":6,"0010479245355337968":[],"0010479245887943952":6,"00105081":6,"00106677":5,"00107405":6,"00111756":6,"0011526":6,"00115999":5,"0011828302640124":18,"00118504":6,"00118527":[],"001263":[],"00128479":5,"001323":6,"00137823":6,"00137835":[],"00139705":5,"00149311":6,"00149956":6,"00152117":6,"00154733":5,"00156379":[],"00156382":6,"00168251":5,"00174276":6,"00175331":6,"00186347":5,"001988":[],"00198806":[],"00200":8,"00202624":5,"00202756":6,"00217499":6,"00224413":5,"00228741":6,"0023548":6,"002381316302584885":[],"002381316302584886":6,"0023813163025848865":6,"00242999":6,"00243186":6,"0024401":5,"00249435":6,"002526":[],"00266858":2,"00270244":5,"00274989":6,"00275135":[],"00289724":6,"00293838":5,"002948":[],"0030828":[],"003083":[],"00310113":2,"00312361":6,"00315593":6,"003215318065760509":[],"0032153180657605125":6,"00323332":6,"0032542":5,"003301":6,"003395515459204093":6,"0033955154592040944":[],"00353823":5,"0036237":6,"0036367":6,"00369758":6,"003704":[],"003717":[],"003759":[],"003774":[],"003788":[],"0038335":6,"00390021":18,"003909404072811217":6,"003909404072811231":[],"00391839":5,"0039987":6,"004":5,"004091940707753948":6,"0040919407077539514":[],"00410387":6,"00410478":6,"004113634617443116":6,"0041136346174431284":[],"004113634617443131":6,"004113634617443135":[],"00411363461744314":6,"004113634617443141":[],"004155986345861364":6,"004155986345861374":[],"00415763":[],"00424909":2,"00424967":6,"00426027":5,"00433417":11,"00440346":6,"00443743":6,"00445655":11,"004579219539673834":6,"004579219539673836":[],"00458878":6,"004610275230656187":6,"004610275230656294":[],"00462287":6,"00471782":5,"00472199":6,"00472512":6,"0049544":6,"004999999999999984":0,"004999999999999994":[],"00512927":5,"00517114":6,"00526348":6,"0053018":6,"00554552":6,"00556826":6,"0056799":5,"00577441":[],"00579953":6,"00588657":6,"00607783":6,"006162":6,"00617499":5,"00630331":6,"00642221":6,"00660427":6,"00672607":6,"00673393":13,"00673407":6,"00676387":6,"0068011":6,"00683748":5,"00683964":6,"007012403613997257":[],"007024126888936694":[],"0070241268889382116":6,"00719176":6,"00727646693":0,"007315":[],"0074331":5,"00751823":[],"00759119":6,"00784393":6,"00803064":6,"0080866254785146":[],"00813803":6,"00817631":6,"00823002":5,"00827728":6,"00831018":6,"00834567":6,"00848904":6,"0086649156":0,"008675369724975977":5,"008675369724976501":[],"00894639":5,"00905423":6,"009163470508352211":[],"009163470508352218":5,"009164545680330616":6,"00917248":6,"00934499":6,"009450756365829578":[],"0096208":6,"00990475":5,"00992331":6,"00996754":6,"00it":6,"01":[0,1,2,5,6,9,11,13,20],"010018312644139205":6,"010018312644139347":[],"0100706":6,"010331721306655144":6,"01033172130665515":[],"010516485576646513":6,"010516485576652856":[],"01066519":6,"01076611":5,"0110":18,"0110407067093945":[],"01104071":[],"011076219011339788":[],"01107621901137465":6,"011225":2,"0113104":6,"01179792":6,"01191824":5,"012073649439965807":[],"012073649472576395":6,"01219292":6,"01223198":6,"01231917":6,"012633802944855959":18,"01290947":6,"01295356":5,"013121573975499602":[],"013121573975499604":[],"01312157406137079":6,"013121574061370796":6,"01318643":6,"01347916":6,"01348565":6,"01367553":6,"01397146":6,"01405935":6,"01416528":6,"014209325470380275":[],"01433809":5,"014436800088896274":6,"014436800088969727":[],"01449782":6,"01458337":6,"0146081":6,"01463049":6,"015072388895177088":[],"0150723888951771":6,"015072388895177109":[],"015072388895177239":6,"01509543":13,"01530715721129232":[],"01531845":6,"01538461538462":[],"01549377":6,"01558197":5,"016285782696017055":6,"016285782696075054":[],"01633913":6,"01640891":6,"01655318":6,"016587414993037307":[],"016587414993045405":6,"01691985":6,"01708781":6,"01708852":6,"01713366":6,"01724499":5,"01735584819559184":[],"017355848195591845":[],"017355848195593354":6,"01756972":[],"01817152":18,"018232":[],"01831036e":6,"01831130e":[],"01831200e":[],"01831207e":6,"01866537":6,"01873344":11,"01873869":5,"01898855":6,"01905883":6,"01908936":6,"019587":[],"01963611":6,"01969145":6,"019754165271682844":6,"01975416527179247":[],"01975848":6,"02":[0,4,6,7,12],"02024962":6,"02054837e":6,"02068067":6,"02073509":5,"02098261":6,"02123176":6,"021250026482402":11,"02159270458799264":[],"021592704587992645":[],"021592704588021164":6,"021592704588021167":6,"02198702e":6,"022022882954618364":[],"02208512":6,"02228115":6,"02229529":6,"02252765":5,"022556":11,"02255619":11,"02299949826036602":[],"0229994982603662":6,"02348765":6,"02365049":6,"0245528":6,"02492265":5,"02493054":[],"02498832":6,"02503753":6,"02511518":6,"02522069":6,"025709":11,"02586427":6,"0260906":6,"02625193":8,"02625928":13,"026408391362671896":[],"026605727637176654":[],"02660572763718461":6,"026605727637184613":6,"02707227":5,"02723445":6,"027609773491022314":[],"027609773491022387":6,"027609773491022407":6,"02786488":11,"027865":11,"02857":4,"02917662":11,"029177":11,"02926396":[],"029613363972682966":[],"029733":[],"02976145":6,"02994311":5,"02f":6,"03":[1,6],"03032441e":6,"03056589":[],"030566":[],"03076923076924":[],"03077640549":4,"03099776":5,"031":5,"03187339273559067":[],"03196357":6,"03251863":5,"03256632e":1,"03267527":6,"03278964":[],"032790":[],"03279636":6,"0330308045180234":[],"0330308045183163":[],"0330308045183219":6,"0330308045190182":6,"033657685071527485":[],"033657685071527624":6,"03382304823545749":11,"03447512":6,"03562355":6,"03568439":6,"0358909447132981":[],"0359565":5,"03630548":6,"03707133":11,"037559":11,"03755944":11,"03761519":[],"03781367141738885":[],"03781367141738886":[],"037813671417388985":6,"03781367141738899":6,"03794112":16,"03814292":6,"03815288":6,"038300":11,"03850557":11,"038506":11,"039039":5,"03981057":16,"0399676689527968":6,"0399676689527975":6,"04":[1,6,11],"04010697":6,"04063602":6,"041":[],"041148729430502":6,"041148729430523":6,"0411487294305246":[],"0411487294305746":[],"04179719":18,"041797190646905":18,"04220758":6,"04284519":[],"043":[],"04315108":5,"0433816":[],"04346721":5,"04355837":6,"04362":[],"04368707":16,"0437499":2,"04389027":6,"043927769551648":[],"04423486":6,"044334":[],"0444119":18,"044613":6,"04483457":[],"04537385":6,"04543942":6,"04566964":6,"0458":9,"04615384615386":[],"04621521":[],"04648335":5,"0466":[],"04683565":5,"04775904":16,"04784395":6,"04818727730430296":[],"048187277304303056":6,"048653428302840175":16,"04892055":6,"04909093":6,"04912436":6,"0495569966278238":6,"0495569966278269":6,"0495569966278315":[],"04it":[],"05":[1,3,4,6,13],"05009826":6,"05087958":[],"05100875":6,"051649":11,"0517473":5,"05227921801205691":[],"05227921801205692":[],"052279218012057004":6,"05255759":18,"05263":[],"05290417684691035":[],"05302":[],"05364854":8,"05383795":6,"05434571":16,"05447415":6,"054585":[],"054785":[],"054963":[],"05505310046362":[],"05505310046363":2,"055137":[],"055320":[],"05533":[],"055676":[],"05614483":5,"05623":[],"05648":[],"05651951":6,"056528":11,"05667":[],"057088709963182":[],"057163681553428394":6,"05716368155351588":[],"0572":[],"05756733":[],"05785343":6,"05789007":6,"057899":11,"05796251":6,"05807125":6,"05883":[],"05884":[],"059013":5,"059294":11,"059378":11,"059601":5,"059783":[],"05999":[],"06":[6,13],"060080":[],"060183":[],"06020587":6,"06021285":[],"060213":[],"060228":11,"060309":5,"06043581":6,"060507":[],"060655":[],"060781":[],"060841":[],"061025":[],"061048":[],"061149":5,"061321":[],"061390":[],"061509":[],"061604":[],"06160438":[],"061701":[],"061745":[],"061898":[],"061917":[],"061923":11,"06200174":5,"06208238634231944":6,"06208238634231953":[],"062136":5,"062142":[],"062292565":4,"062294":[],"062391":[],"062409":11,"062411":11,"062435":[],"062451":[],"062534":[],"062676":11,"062706":11,"062834":[],"062884":[],"063052":5,"063078":[],"063250":[],"063343":[],"063364":5,"063513":[],"063631":5,"063657":[],"063752":11,"063851":5,"063872":[],"063874":5,"06388888888888888":[],"064052":[],"064108":[],"064110":5,"064184":[],"064274":5,"064384":[],"06444":[],"064469":[],"06453579006728315":[],"06453579006728322":6,"064538":11,"064604":11,"064648":[],"064658":5,"064681":[],"064838":5,"06491736":6,"064918":[],"064931":11,"064964":[],"06497046":[],"065020":5,"065106":[],"065249":11,"065314":11,"065348":5,"06547790180152352":6,"06547790180152353":6,"06547790180152357":[],"06547790180152363":[],"065514":[],"065557":[],"065575":[],"065641":11,"065730":11,"065826":5,"065892":[],"065974":5,"06602663":18,"066110":[],"066194":[],"066309":[],"06637":[],"066449":5,"066558":5,"066609":[],"066670":11,"0666807":2,"066729":11,"066753":[],"066789":5,"066837":11,"066954":[],"067079":[],"067213":5,"067236":[],"067240":5,"06724062":5,"067282":11,"067392":11,"067402":11,"067432":11,"067544":[],"067597":5,"067599":5,"067612":5,"067620":5,"067622":5,"067675":[],"067714":[],"067723":5,"067769":5,"067956":11,"068059":11,"068093":11,"068094":[],"068103":[],"068120":[],"068318":5,"068363":5,"068376":5,"06844519414009438":[],"06844519414009442":6,"06844519414009444":6,"068461":11,"068538":11,"06858699":[],"068608":5,"068642":5,"068659":[],"068735":5,"068806":5,"068809":[],"068831":[],"068937":[],"068965":5,"068991":5,"068992":5,"069085":11,"069091":[],"069181":5,"069275":11,"069408":5,"069409":5,"069441":5,"069455":[],"069584":[],"069672":[],"069685":11,"069754":[],"069796":5,"069847":5,"069877":11,"069884":11,"069888":5,"069912":[],"06it":6,"07":6,"070028":[],"070043":[],"070071":[],"070074":5,"070150":5,"07016":[],"070163":11,"07017":[],"070343":11,"070379":[],"07039":[],"070419":11,"070429":11,"070491":5,"070492":11,"070576":[],"070612":[],"07062318":6,"070630":5,"070635":[],"070889":11,"070911":[],"070950":11,"070972":11,"07099747918547346":[],"071022":11,"071086":[],"071112":5,"071136":5,"07115":[],"07129539":18,"0712953943627344":18,"0713":0,"071387":[],"07145103":11,"071467":5,"0714956":16,"071529":5,"07160048164232467":6,"07160048164248561":[],"071614":5,"071632":5,"071698":[],"071705":[],"071767":5,"071921":5,"071935":[],"07201957":[],"072216":11,"072242":[],"072348":[],"072442":11,"072492":[],"072530":[],"072617":[],"072620":[],"072750":[],"07285":3,"0728785":[],"072928":[],"073016":[],"073062":11,"073136":11,"073225":[],"073230":11,"073280":11,"073362":[],"073368":[],"073423":[],"073436":11,"073449":5,"07345504":[],"073531":[],"073575":11,"073583":[5,11],"073598":11,"073629":11,"073695":[],"073699":5,"073719":5,"073761":11,"073810":11,"073816":5,"073827":11,"073907":[],"073949":5,"074034":5,"074067":11,"074111":11,"07413172":[],"074149":11,"07421084":5,"074237":5,"074336":[],"074375":5,"074488":[],"074530":11,"07456491":5,"074573":11,"074666":[],"074693":5,"07490892":6,"074945":[],"075195":5,"075241":5,"075573":[],"075594":5,"075760":5,"075820":[],"075959":5,"076130":11,"076204":[],"076216":11,"076338":5,"0764924":6,"07656896":[],"076589":5,"076604":11,"076628":5,"07678":[],"076780":11,"076804":11,"076895":11,"076905":11,"076938":11,"076955":5,"077003":5,"077013":11,"077015":11,"077022":[],"077083":11,"077211":11,"077349":11,"07735703":16,"077402":5,"077425":5,"077452":11,"077467":[],"07777777777777778":1,"077793":5,"078040":5,"0782":6,"07820":[],"078253":[],"078254":11,"078269":11,"078299":11,"078314":11,"078436":11,"078548":[],"07864":[],"078667":[],"07871":[],"07878641":16,"078911":[],"078992":[],"07903849":16,"079157":5,"079281":5,"079347":[],"079383":5,"079389":5,"079405":5,"079406":[],"07944154":16,"07968918676726029":[],"0796891867672603":6,"079729":[],"079839":[],"079847":[],"079893":[],"07989327":[],"07999999999998":[],"08":[13,18],"080106":[],"080137":[],"080256":[],"080297":5,"080312":[],"080319":5,"080334":[],"080347":[],"080370":[],"080406":[],"080410":[],"08041015":[],"08043851":5,"080517":[],"080582":11,"080593":11,"080647":11,"080706":11,"080738":11,"080801":[],"080847":5,"08085812":[],"080916":[],"080984":11,"081046":11,"081072":11,"081140":[],"081144":11,"081233":5,"081253":5,"08131003":6,"081388":11,"081431":[],"081483":[],"081533":5,"081540":[],"08156108":6,"081773":[],"082174":[],"082183":[],"082295":11,"0823185":18,"082451":[],"082503":11,"08251519":6,"082536":11,"082896":11,"082900":[],"08299273e":6,"083015":5,"083053":[],"08318298e":1,"083220":[],"083227":[],"083276":11,"08328216846752691":11,"08333333333333333":1,"08336233266":4,"083404":[],"083441":[],"083506":[],"083527":[],"083600":[],"083692":[],"08376632":6,"083766322923899":6,"0837663229239016":[],"0837663229239025":[],"0837663229239043":6,"083799":[],"083829":[],"083977":[],"084000":[],"084101":[],"084184":[],"084224":[],"084226":[],"08426840630693411":[],"08426840630693412":6,"08426840630693413":6,"08428156":16,"084282":[],"084364":[],"084400":[],"084408":[],"084414":5,"084444":[],"084484":11,"084536":[],"084549":[],"08455":[],"084570":[],"084604":[],"084629":[],"08464758160254343":5,"084670":[],"084683":[],"084702":5,"08474":[],"084777":[],"084862":[5,11],"084904":5,"084909":5,"084965":[],"085018":5,"085044":[],"085163":11,"085167":[],"085184":[],"085185":[],"085361":[],"085416":[],"08551306":6,"085764":[],"08576932":6,"085879":11,"08593216":6,"086074":11,"086076":5,"08611111111111111":1,"086112":11,"086303":[],"08630331":[],"086567":[],"08673755293381497":[],"086807":5,"086872":5,"086890":11,"08690":[],"086956":11,"087501":[],"08758":[],"08759":[],"087834":[],"08816688":[],"088176":[],"0881981":5,"088212":5,"088526":11,"088611":[],"088631":[],"08871404":5,"088809":[],"088816":[],"088825":[],"088853":[],"08888888888888889":1,"088926":[],"08902":[],"089059":[],"08917679":5,"089177":5,"089212":[],"089329":[],"089425":[],"089501":11,"089614":[],"0896981":6,"08996":[],"09":1,"090028":[],"090229":[],"09085624":16,"090929":[],"091051":11,"091060":[],"09117221":[],"091224":[],"091236":[],"091340":[],"091349":[],"091363":[],"091414":[],"091416":[],"091426":[],"09149881":[],"091630":[],"09166666666666666":1,"091696":11,"0917":9,"09170751":0,"09172408":6,"091891":[],"092066":16,"09216046":[],"0923":[],"09251":[],"09297039":[],"093247":[],"0934597075922044":[],"0938":[],"094082198961999e":6,"0940821989624095e":[],"094082198966615e":6,"0940821989673748e":[],"09444444444444444":1,"094472507965532":11,"095510":[],"095702":[],"095871":[],"09609807":5,"096173":[],"096472":11,"096623":[],"09672929714683368":[],"097360":[],"09744":[],"09744272":6,"09780":[],"09791":[],"09849763":11,"098498":11,"09856879":16,"09861229":16,"098802859381565":16,"099":[],"09903804":8,"0991919894927399":6,"099191989493334":[],"09951287404314545":1,"0n":0,"0s":[3,4],"0x11da42d90":13,"0x11e031e50":13,"0x7fad10f9a280":[],"0x7fad20f69be0":[],"0x7fd098df3280":[],"0x7fd0a9063be0":[],"1":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20],"10":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],"100":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18,19],"1000":[0,1,2,4,5,8,11,13,14,15,18],"10000":[2,5,6,10,11,18],"100000":8,"10001":10,"1001":18,"1002":18,"1003":18,"10030":[],"10044225464078282":[],"1005":18,"10077114273548984":6,"1009":18,"1011":18,"1013":18,"1013904243":18,"10141413e":6,"1015":18,"102":3,"1022233262115424":[],"10222333":[],"1023":18,"10230":[],"1023111":16,"1024":3,"1026":18,"1027":18,"1028":[],"103":1,"1030":18,"10302062":16,"10340":[],"1037":18,"10378326e":1,"1038":18,"10391807":6,"10398646080125035":[],"10398646080125036":6,"10398646080125037":6,"1040":18,"10405456":11,"10430":[],"104411":[],"10455924":[],"1047":18,"10505137":16,"10520":[],"10555555555555556":1,"1056":[],"10589577":5,"106":[],"106095":11,"10620135":16,"108":6,"109":[],"10913":6,"10931453":6,"10960":[],"10th":9,"10x":0,"11":[0,2,3,4,5,6,7,8,9,10,11,12,13,16,18,20],"110":[],"1100":18,"1101":18,"11022302e":5,"11046771":16,"111":[1,7,12],"11100":[],"1122558214":[],"112383":11,"1124":[],"1125":3,"11297834":[],"1136":3,"11362930e":[],"11388888888888889":1,"1139":3,"11390":[],"114":3,"11402309":16,"114437":[],"11462415":5,"11482289e":6,"11499517":[],"11507992e":1,"11547777218875695":6,"11547777218875696":6,"11547777218940905":[],"11547777218940906":[],"115822":6,"11590":[],"11604844":18,"116048442683864":18,"11660":[],"11666666666666667":1,"117":8,"11744554e":6,"11780":[],"11790868":[],"117986":[],"118":2,"1182":[],"1183":[],"118318":[],"1184":4,"11840":[],"1185":[],"1186":[],"11890":[],"119":2,"1199":[],"119936":2,"119999999999976":[],"11it":6,"12":[0,1,2,3,4,5,6,8,9,11,12,13,16,18,20],"120":[2,3],"1203":[],"1203284":8,"1206":8,"12069773":16,"121":[2,8,9,10],"12182967":6,"12196674":[],"122":[2,8,9,10],"12222222222222222":1,"122439":[],"1224392":[],"12288563":5,"122886":5,"123":[],"12318726e":6,"12333649":6,"12345260617257443":9,"123459876":[],"123711":6,"12380":[],"124":0,"12400":[],"125":[],"1250":[],"125000":[],"12552073e":6,"126":[],"1261":[],"12618549":5,"1265":[],"127":4,"1270":[],"127043":[],"1271":6,"1277":6,"127773":[],"12777777777777777":1,"12788968":18,"12790":[],"128":[3,4,13],"128664":6,"12898627064868978":18,"12937662":18,"12945452":[],"1297":[],"1298":9,"12adb44b1c20":7,"12m":3,"13":[0,2,4,5,6,9,11,12,13,16,18],"130":[],"13003291":6,"13055555555555556":1,"131":[],"1314":[],"132":[],"13220608e":6,"13229545716505003":16,"132360":[],"1323603":[],"1326":[],"13280":[],"133":7,"13333333333333333":[],"135":[],"13519106":[],"13535942":6,"136":[],"1360":[],"1361":[],"1362":[],"1363":[],"1364":[],"13646574":5,"13661243e":6,"13679863":6,"1371":6,"13740":[],"137400784702911":[],"137652":11,"1378":[],"1382":[3,4],"1383":[3,4],"1384":[3,4],"1385":[3,4],"1386":[3,4],"13865173":5,"13876586436927824":5,"138775":11,"1388888888888889":1,"13890":[],"1392559581788775e":[],"1392559584983597e":[],"1392559585048734e":6,"13925595925919e":6,"14":[0,2,4,5,6,8,9,10,11,12,13,16,18,20],"140":[],"14021063":6,"1404":[],"14042769":[],"140428":[],"141":2,"14100":[],"1416398":6,"14174745":6,"1418":[],"142":2,"14250":[],"142857":[],"143":[2,7],"1435666":[],"14360598":[],"1437":1,"144":2,"14400":[],"1440501043841336":1,"14440":[],"1446729567":4,"14484695":16,"145":2,"146":[],"147":[],"14710":[],"14722222222222223":1,"147400":11,"14741468":[],"147420":11,"14783702":[],"1479":[],"148":[3,4],"14812206":6,"14818":[],"1484256":[],"148564":6,"14859":6,"148768":[],"149":[3,4],"149213":6,"14932651":[],"14988578":[],"149886":[],"14g":6,"14it":6,"15":[0,2,4,6,7,8,9,12,13,16,18],"150":[3,4,8],"15005476":5,"15098090e":6,"151":[3,4],"15130074e":6,"151986":[],"152":[3,4],"15200":[],"15258907":[],"1527777777777778":1,"153036":[],"153106":[],"1533795":[],"153760":[],"15384615384616":[],"154":[],"15454301":[],"154720":[],"15483121":[],"154911":[],"155":[],"155491":[],"155687":[],"155883":[],"156":[],"1562":[],"15629539":[],"15680777":16,"157":[],"15717291":16,"1575":[],"158":[],"1583767":16,"1586300629904382":[],"1587":[],"15891336":16,"159":[],"1590":[],"15990":[],"15g":6,"15it":[],"16":[1,2,3,4,5,6,8,9,10,13,18],"160":[],"1603":3,"1604":[],"1605":[],"160539":[],"1606":[],"1607":[],"16111111111111112":1,"1612":[],"16211139":5,"16220":[],"16231451":4,"1625":[],"1628":[],"163":[],"1630775253":[],"16342407":5,"16343471":6,"16384":3,"16500":[],"166":[],"16660817":[],"166667":[],"167":[],"16740002":16,"168":[],"16805821e":6,"16807":[],"16827044":[],"16832385":[],"16b8e3cda33a":1,"17":[1,2,4,5,6,8,13,18],"17084902":[],"1709":[],"17174962e":1,"17222222222222222":1,"1726":[],"17300":[],"1731":[],"17339342":[],"17446471":6,"1752":[],"175300":[],"17641709":6,"176880142835407":[],"17777777777777778":1,"17801022":5,"17861098":6,"17917768":5,"17930649":16,"17949575":5,"17953942":11,"1797":[1,3],"18":[2,4,6,7,8,9,10,13,18],"180":[],"18029127":5,"1807":4,"1809":[],"181":[],"1810":4,"1812":[],"18156717":16,"1821":[],"18276924":[],"18327677":[],"18333333333333332":1,"18393678":[],"184":[],"184519":[],"184895":[],"185":[],"1851":[3,4],"1852":[3,4],"18526":[],"185278747229417":[],"1853":[3,4],"1854":[3,4],"1855":[3,4],"186":[],"1860":[],"1861":[],"18611111111111112":1,"18613217e":6,"18660":[],"18673098":11,"18682538":[],"1887":6,"18912963":16,"189496":[],"189622":[],"18it":[],"19":[2,4,6,13,18],"19003":6,"191262820314401":[],"19166666666666668":1,"19207979":5,"19213479":[],"19220":[],"193":[],"19354258":[],"19379506":18,"19394283":[],"194":[],"1940":0,"19404282648955e":6,"194042826653172e":[],"194042826815498e":[],"1940428268204826e":6,"1943":12,"1944":[],"19444444444444445":[],"19466812":18,"1950915150":[],"1954":[],"1956":[],"19569961":6,"1961":[],"1962":[],"1963":[],"1964":[],"1965":[],"1970":16,"1973":9,"197370":11,"19740":[],"1979":6,"19800":[],"1989":[],"199":[],"19937":[],"19994371":6,"1_1":12,"1_2":12,"1_3":12,"1cm":[0,8,10,18],"1d":[1,2,3],"1e":[1,2,3,4,14],"1e10":14,"1e4":6,"1f":1,"1k":16,"1n":0,"1s":3,"1x":0,"2":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],"20":[0,1,2,4,6,7,8,13,18],"200":[0,2,3,4,8,9,10],"2000":0,"200000":[],"20015436":6,"2004":13,"2006":20,"2010":1,"2011":1,"2014":4,"2015":1,"2016":0,"20174121":16,"2018":[0,6],"2018906331":[],"2019":[],"2021":[6,14],"2022":17,"2027":[],"20277777777777778":1,"203":6,"20320502":[],"20375361":18,"203753611274545":18,"20500":[],"20509391":18,"206":[],"2060":[],"20661216":[],"2069":[],"207545":11,"20756638":[],"20833333333333334":1,"20867052175006306":6,"20867052175109335":[],"20980":[],"21":[0,1,2,4,5,6,7,9,12,13,16],"210340":11,"21058097":5,"21130":[],"2116753732":4,"21169159e":6,"21265216":[],"213":6,"213103":11,"213743":11,"21472683":16,"2147483647":[],"21519063":16,"21596432":6,"216290":11,"216683":11,"21786964":16,"2188":[],"21919813":[],"21944444444444444":[],"2195":3,"21985165":13,"21997099":16,"22":[0,1,2,4,5,6,12,13,16],"22044605e":5,"22094791":[],"221":8,"221180":[],"2216":[],"2218":[],"221805":2,"222400":[],"2225":3,"225":4,"2259440937":[],"226124657522696":[],"22612466":[],"22690428":5,"2284246870217459":6,"22842468702288576":[],"22842468702288582":[],"22847924":5,"2299":3,"22it":6,"23":[1,2,4,6,7,12,13,16],"23002365e":6,"231":[],"23103285":[],"2315033":[],"23167717":5,"2321528":5,"232153":5,"232435":[],"23297056":[],"23333333333333334":1,"233528":5,"234":6,"23522201":[],"2357089093":[],"2360682191515046":[],"2361111111111111":[],"2364":[],"237038":5,"23703839":5,"2379":6,"2397":[],"24":[0,1,2,4,6,13,16],"24140":[],"2416":[],"24175744e":6,"2419":[],"24276315":16,"2430":[],"24390":[],"24444444444444444":1,"244858":[],"24485843":[],"24512498":16,"246":2,"2470":[],"24770094":6,"24829908":5,"24906604e":6,"24924624":18,"2495":[],"25":[2,3,4,5,6,7,8,9,11,13],"250":[2,4,7,9],"2500":[],"25000":0,"250000":[],"250154":[],"2517560119":[],"251879":[],"252436":[],"25259666":16,"2526":3,"252866":[],"25286618":[],"253775":[],"255":3,"255001":[],"256":[2,4],"25617654e":6,"25617657e":[],"25617658e":6,"256962":[],"257":[],"2572":[],"2572495066":[],"2572e3a4b38d":1,"2575":[],"25792767":16,"25845e8df859":6,"259153":11,"2597":[],"25976336":[],"26":[2,4,6,13],"26079358":18,"26153846153846":[],"26186844":16,"2619":[],"26290036":[],"26294938":[],"2629493813057833":[],"26301436":5,"26306244":[],"264":4,"26409315307910025":6,"2640931530791003":[],"2640931530791005":[],"26409315307910053":6,"265":[],"2650":[],"265109911":4,"2654":[],"266":[],"26610075":[],"26666667":13,"26710969":5,"26780278":5,"268":[],"268227":[],"26822717":[],"269":[],"27":[0,1,2,4,6,13],"270":[],"2703":3,"27092897":6,"2750":[],"275341":[],"276263":11,"27692307692308":[],"27700":[],"2772":3,"2775623201":[],"27760":[],"278036":5,"27803645":5,"27n_":18,"28":[1,3,4,6],"28001319":[],"28047021":16,"280647":11,"28067036":16,"28097861":5,"280979":5,"2812":[],"282727":11,"283":[],"2830637392":4,"28336218e":6,"2836":[],"28390":[],"28475098":8,"28590743":[],"2861":18,"28634473":11,"286345":11,"2871":[],"2873":9,"2882":18,"2886":18,"2886847885377843":[],"28868479":[],"28875373":16,"2890":0,"2892":18,"28967287":16,"29":[4,6,7],"29149329":[],"2915":18,"29167186":5,"29229741":13,"2923076923077":[],"29512284":11,"295123":11,"2954":[3,4],"2955":[3,4],"2956":[3,4],"2957":[3,4],"2958":[3,4],"29588901":13,"29592539":[],"296247":[],"297":[],"2971492148":[],"2972":[],"29822833":6,"298273":[],"298375":[],"299267190588216":11,"299748":[],"2_":12,"2_1":12,"2_2":12,"2_3":12,"2_i":12,"2_m":[6,18],"2_t":13,"2_x":18,"2b":18,"2cm":8,"2d":[1,3,11,12,15],"2e":6,"2f":[0,7,9,10,11,12],"2ff97f4bf03b":[],"2g":2,"2g_i":2,"2k":3,"2m":6,"2n":[0,2,3],"2nd":9,"2p":18,"2pt":4,"2s":4,"2x":[0,3,8,13],"2x_ix_jy_iy_j":8,"2x_j":8,"2y_i":10,"2y_j":8,"3":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19],"30":[0,1,4,6,7,10,13],"30000":0,"30010":[],"30119421":8,"3017":[],"3018":[],"3019":[],"301927":[],"3020":[],"3021":[],"30258509":16,"302m":4,"303":6,"3037":[],"3038":[],"30384239":16,"3039":[],"303m":4,"3040":[],"3041":[],"30466214e":6,"304m":4,"30535506":[],"30552077":16,"30559547":[],"305m":4,"3063":[],"306m":4,"3072":3,"30787294":6,"307m":4,"308m":4,"309":0,"30940":[],"30b53504a633":0,"31":[4,6,12,16,18],"310":0,"311":0,"311m":4,"312":0,"3123314713548606":6,"31276579e":6,"312m":4,"313":0,"31318084":5,"314":[],"31457796":5,"315":6,"3155":[5,6],"316":[],"31605061":16,"317":[],"31718909":11,"317367":11,"317m":4,"31866499":13,"31896852":8,"319m":4,"32":[3,4,6,12,13,16,18],"3200":1,"32047562":[],"3208":2,"320m":4,"32149601703519115":6,"3214960170351912":6,"3215":[],"32179365":[],"32309075":18,"32320052":16,"324":2,"32458459":[],"324m":4,"3250":[1,6],"32512":[],"326238":[],"326m":4,"32721178":11,"327212":11,"32816737":18,"32903042":[],"3297":[],"32992274":[],"329923":[],"33":[3,4,12,14,16],"3303":[],"33066907e":5,"3310":[],"33166055e":5,"331939":[],"331m":4,"332331":[],"333":7,"3331":[],"33327369":[],"333274":[],"33333333":13,"3337":[],"33611111111111114":[],"33711888":[],"3384":[],"33900713":[],"33m":4,"34":[4,7,16],"3403":[],"340782":11,"34114547":5,"341m":4,"342680":[],"34305928":[],"3436":0,"3437":0,"3456":[],"34568872":16,"34569596":5,"3457":[],"3458":[],"34585355":16,"3459":[],"3460":[],"346810":[],"3469819128513336":[],"34740615":[],"3498":[],"34it":6,"35":[0,2,4,6,7],"3514":[],"35140":[],"35147135":16,"351636":11,"35182854":5,"35203688":16,"3522":[],"3525":[],"3528556":[],"352856":[],"3529":[],"3530606977":[],"3538":[],"3543":[],"3544313922":[],"3546":[],"35470445e":5,"3548":[],"355":[],"3551":[],"35533773":6,"35533774":[],"3556":[],"3558":[],"3560":[],"356399":[],"3567":[],"3572":[],"3575":[],"357508":[],"3576":[],"3577":[],"35771842":6,"3581341341":4,"3585":[],"3587":[],"35892474":16,"359":5,"3593":[],"3594821":13,"3595":[],"3598":[],"359999999999985":[],"36":[2,4,5,6,7,18],"360":1,"3604":[],"3605":[],"3606":[],"360688":[],"3609":[],"36102113":[],"36117602":[],"3613":[],"3615":[],"361556":[],"3617":[],"3621311":5,"3624":[],"3627":[],"3628":[],"363295916323784e":6,"363295916414895e":[],"3632959170548605e":[],"363295924430451e":6,"363834":11,"36383443":11,"3643":[],"364418e97433":1,"3645":[],"3646":[],"3647":[],"3655":[],"3655222":5,"3659":[],"3668":[],"36689784":[],"366898":[],"3669":[],"367":2,"3672":[],"3673":[],"3674":[],"3679":[],"3684":[],"3687":[],"3688":[],"368m":4,"369139":11,"36it":[],"37":[2,4,6,7],"3704":[],"370782966":4,"3711":[],"3713":[],"3718":[],"3721":[],"3722":[],"3725":[],"3729":[],"37307168":16,"3739":[],"37396662":6,"37415316":16,"374291":5,"37429133":5,"3748":[],"3749":[],"3753":[],"3759":[],"3760":[],"3765":[],"376559":[],"37655936":[],"37692363":18,"37703055":[],"3772":[],"3773":[],"37732":[],"3776":[],"3777801602":[],"3779":[],"37835429e":[],"3784":[],"37900111":6,"3791":[],"3794":[],"379647":11,"37964744":11,"37992857":[],"38":[2,4,7,18],"380":[],"3802":[],"3803":[],"3804":[],"3805":[],"380739":5,"38073947":5,"3811":[],"38135733e":6,"3815":4,"381627865854956":[],"38162787":[],"3817475779":[],"3818":[],"3819":[],"3820":[],"38246359":[],"3827":[],"382951":11,"38295101":11,"3830":4,"3833":[],"38336316":16,"3834":4,"3837":4,"3838":4,"3839":4,"3842":[],"3850":[],"3851":4,"38533184":6,"3854":[],"3858":4,"386":[],"3861":4,"3862":4,"38629436":16,"3864":4,"3867":[],"3869":4,"387":[],"3871":4,"3872":4,"387482":5,"38748219":5,"3876":[],"388":[],"3881":4,"3882":[],"3885":[],"38868469":16,"3888":4,"3889":4,"389":[],"38901478":[],"3891":4,"38916861e":6,"38962192e":6,"3898":[],"39":[0,2,4,13,19],"390":[],"3906":4,"39095416":[],"3914":4,"3915":4,"3916":4,"391602":[],"3917":4,"3922":4,"3925515884752442":[],"3928":4,"3931":[],"39311435":16,"3943":4,"3944":4,"39456996":16,"3950":4,"3955":4,"39560937":16,"39579407":5,"3958":[],"3960":4,"3962":4,"3970":4,"39706038":5,"3975":4,"397700":11,"39789527":16,"3979":4,"3980313467":[],"3983":4,"3994":4,"3996":4,"399836":[],"3d":[2,3,4,6,13],"3f":[1,3,9],"3n":16,"3x":[2,8],"3x_i":2,"3y":8,"4":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],"40":[1,4,6,19],"400":4,"4000":20,"4005":4,"4011":4,"40116777":[],"401168":[],"4012":4,"4017":4,"401842":11,"40214433":16,"4022":[],"4027":4,"4030":4,"40340043":[],"4034668048":[],"4038":4,"4039":4,"404":[],"4045":4,"4048":4,"4055":4,"405890":11,"4059":4,"40599799":[],"4068":4,"4069":4,"4075":4,"4077":[],"408":2,"4082":[4,6],"4084":4,"4087":[],"4088":4,"4089":4,"409":2,"40927184e":6,"40a38ad763f1":6,"41":[2,4,16],"410":2,"4100":4,"4107":[],"411":2,"4115":4,"4117":4,"412":2,"4128":4,"4131":4,"41357064":18,"4143":4,"41433969":5,"4144":4,"4146":4,"41511965e":1,"4155":2,"4162706317":[],"4167":4,"4176":4,"4177":4,"418506":11,"4186":4,"41876267":5,"418763":5,"41882036e":6,"41882037e":6,"4192423635":[],"4198":4,"41990268":[],"41it":6,"42":[1,2,4,8,9,10,16],"420":[],"42078103":[],"421":2,"4212":4,"422":2,"4224":4,"423":2,"42394972":16,"424":2,"42441033":5,"42449643":[],"42450":[],"425":2,"4255":[],"4258989918":[],"426":[6,7],"42631342":[],"427017":11,"4275":4,"43":[1,2,4,7,16],"43054282":5,"43135183":16,"43330971e":6,"434932":11,"43493232":11,"435163":[],"43552433":16,"43579948e":6,"436462435":4,"43761347":[],"43766686":11,"4379":4,"438060758":[],"438136":[],"439230":6,"44":[1,2,4,16],"44089210e":5,"4410":[],"4411":[],"442600":11,"443217":[],"444":[],"44970586e":1,"45":[2,4,19],"450":[],"450257":11,"4504":[],"45290829":16,"4543859":18,"4557763":11,"455947":[],"456":[],"456418966187335":[],"457":[2,4],"457770268480242":[],"458027":[],"458078":11,"45960079":5,"46":[2,4,19],"4601":[],"461":[],"461175":16,"462":7,"46383925e":6,"464424":[],"4644244":[],"46508305":16,"46567887":16,"466":[],"46602982":[],"46696223":18,"469":[],"46932688":[],"4694":[],"46984697e":6,"469868":[],"46986815":[],"47":[4,19],"4703":4,"47042744":5,"470714":[],"47075725":6,"47116868e":6,"47125748":5,"47132891":5,"47387858":[],"47400238":[],"47432993":[],"4744":[],"47478057":[],"47485224":18,"475311":[],"47531107":[],"47610036":6,"47815203":11,"47920156":[],"47942814":5,"479465113":4,"48":4,"48089797":[],"48133064":[],"481979":6,"48212873":16,"48257387":19,"483257001":[],"4837":[],"48420165":[],"48476997":11,"48574149":16,"486873":[],"48687342":[],"489":[],"48994188":5,"49":[4,5,6,11,13],"490":[],"491":[],"49152":3,"492":[],"493":[],"4940954":0,"4959161509356135e":6,"495916150936645e":6,"495916150936654e":[],"495916150938325e":[],"49636583":[],"497":[3,4],"498":[3,4],"499":[3,4],"4990":18,"4992":18,"4997":18,"4c4c7f":[9,10],"4d":3,"4f":6,"4y":8,"4y_i":10,"5":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],"50":[1,2,3,4,6,7,8,10,13],"500":[1,3,4,6,9,10,13],"500000":[],"50000455":5,"50000553":5,"50000718":5,"50000855":5,"50000969":5,"50001063":5,"50001142":5,"50001207":5,"50001261":5,"50001306":5,"50001343":5,"50001374":5,"500014":5,"50001414":5,"50001422":5,"50001439":5,"50001454":5,"50001466":5,"50001476":5,"50001485":5,"50001492":5,"50001498":5,"50001502":5,"50001506":5,"5000151":5,"50001512":5,"50001515":5,"50001517":5,"50001518":5,"50001519":5,"50001521":5,"50001522":5,"50001523":5,"50001524":5,"50001525":5,"501":[3,4],"50105159":18,"5018":18,"50227564e":6,"50321091":5,"504167":[],"50416731":[],"506":0,"50727059":16,"50769230769231":[],"507d50":[9,10],"50846111e":6,"50846112e":6,"50it":6,"50j":13,"50x10":1,"51":[4,10],"510":1,"51004249":16,"512132":[],"51214899":6,"51265232":16,"51289697":11,"512897":11,"5138":[],"51389553":16,"514219":[],"51561271":16,"517350858882083":18,"5177783846":4,"518030":11,"51803019":11,"519842":[],"52":[3,4,13],"5222222222222223":1,"522758":[],"52307692307693":[],"5260627":[],"526744":11,"52723079":[],"52773051":18,"52799362":11,"528115":11,"52811546":11,"52874252":5,"529":[],"52911941":[],"52945798e":[],"53":[3,4,9],"5303329":11,"5305555555555556":1,"5312":[],"531280":[],"53189647":[],"53312754":16,"53423784":16,"53603432":18,"53611562":[],"53697476":[],"53703498":6,"5378811":11,"53794784":11,"537948":11,"53846153846155":[],"539261":11,"54":[3,4,6,18],"540":[],"54016188":11,"540162":11,"54039921":5,"54041041e":5,"541605":[],"54163136":13,"544439":[],"546166676":[],"54780216":[],"54it":[],"55":[1,3,4],"5501":[3,4,14],"550321":[],"5539":[],"55505907":16,"5555555555555556":1,"55578041":[],"5566":[],"557795":11,"55854694":11,"5594":6,"56":[1,3,4],"56033697":5,"561":[],"5611":[],"5615":[],"56198284":5,"5625":[],"56302854":16,"5639":[],"564":[],"564374":11,"565":[],"56536":0,"566":[],"56636616e":6,"567":[],"568":[],"569":1,"56912044e":6,"56939714":5,"56992937":[],"57":[0,4,8,19],"570":[],"5700":[],"571":5,"571105947979336e":6,"571105947979394e":6,"571105947979395e":[],"571105947979439e":[],"57154252":[],"57174058":[],"57201944e":6,"57266138":[],"57361898":18,"574465":11,"57673618":16,"57it":[],"58":[4,10,19],"583595":[],"58395707":18,"58428804":5,"584804":[],"5888888888888889":1,"589":[],"58986647":[],"59":[2,4],"590":[],"591":[],"591317992":4,"591594":5,"59159438":5,"592":[],"593":[],"5944444444444444":1,"59591979":[],"595920":[],"59592669":[],"59766":5,"597660":5,"59833875":13,"598392":[],"59839245":[],"59955801":13,"5cm":18,"5dd54edf2138":6,"5f":8,"5x":8,"5y":8,"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,17,18],"60":[1,2,3,4,6],"60000":4,"6019067271":4,"60236938":16,"60293962":5,"60420593":5,"60538875":16,"60619654":6,"6063219":18,"606439":[],"60673226":11,"60685864":6,"60791699":[],"6079169911277265":[],"60943791":16,"61":[2,4,7],"61033524":18,"6111111111111112":1,"612939":[],"613579":[],"61399851":11,"613999":11,"61463451":16,"614808":11,"618":[],"61808351":[],"618982":[],"6199381169260247":[],"62":[2,3,4],"62168613":[],"62364974":[],"62373464":11,"625":7,"626635268":[],"62767384":18,"62894215":5,"629961":[],"63":[0,1,2,3,4,6,7],"6300745149331701":[],"630224":[],"63025821e":6,"63249532e":6,"63270833":[],"63395187":18,"63498144":5,"63675140":[],"6371293350711955":[],"63860687":16,"63901111":[],"63it":[],"64":[1,3,4,7,13,16],"64012627":5,"64293754":18,"64425009":[],"645":[],"64615384615385":[],"646283":11,"647":6,"64742912e":6,"647473":11,"649339":5,"64933923":5,"649382":11,"64x50":1,"65":[1,2,3,4,7,8,9],"65136857":[],"6530742540053943":18,"6562":[],"65626043":5,"65628853":16,"65885453":5,"659306":[],"66":[2,3,4],"66054752":[],"66087937":[],"66204648":6,"66226149":6,"66247212":[],"6628996975186953":[],"66292841":[],"66310422":18,"6638":[],"66410989":[],"66560":[],"66619972":11,"666200":11,"667":[],"668172":[],"668186":[],"66818635":[],"66it":6,"67":[2,4],"67047975e":6,"671089":[],"672721":[],"67314874e":5,"67588315":[],"67591616":18,"67697934":11,"67838309":[],"67882608":[],"68":[2,4],"68192193":5,"68246089":16,"68279358":16,"6834195":18,"68534263e":6,"68542204":5,"68545647e":[],"6869":[],"6887363571":4,"68929213e":6,"68944595":18,"689519":11,"69":[2,4,7,18],"690":[],"690569639355314":[],"69061276":11,"690617":[],"69069n_":18,"692":1,"69295955":[],"69484813e":5,"69493539":16,"69504801":6,"69634577e":6,"69695259":5,"69985355":[],"6999536":11,"69it":[],"6e75736fdab1":6,"6f7a6bd7d79f":6,"6m":[3,4],"6n_":18,"7":[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18,20],"70":[1,2,4,6,7],"70127680":6,"70179437":[],"70205195":16,"70354373":18,"703716d317a7":8,"70434005":18,"7050":[],"70598996":[],"70653767":4,"70710678":5,"70769586":[],"70831425":18,"70832814":5,"70980493":16,"71":[1,2,4],"71131626":16,"7119":[],"712018":11,"7134":[],"71350226":18,"7151":[],"71721168":18,"718697":5,"71869727":5,"72":[2,4],"72174172":11,"722047011333792":5,"72271878e":6,"72347283":18,"7236674":5,"72373129":[],"724":3,"72522848":[],"72859758":5,"7293182":[],"72981762":8,"73":[4,6],"731000":[],"73174557":[],"733096":[],"73484667":[],"735738558766299":[],"73573856":[],"73752910":[],"73it":6,"74":[4,6,13],"740":[],"74081822":8,"74368436":16,"743u":[],"7448615806559786":[],"7469898175164704":18,"74840212":5,"749765":[],"75":[4,5,6,8,11],"7501749450963715":[],"750445":[],"750u":[],"75106135":16,"75118364":[],"751699":11,"75170092":5,"753846153846155":[],"75517445":18,"756352":[],"75838233":[],"75it":[],"76":[2,4,19],"76060096":[],"76066069":16,"763u":[],"7643536":13,"765":7,"76529528":18,"76674796":16,"76802186":18,"76923076923077":[],"76936315":5,"7694444444444445":1,"77":[2,4,13,19],"77034458":[],"770345":[],"77152076":5,"7718":9,"773329728649545":18,"77332973":18,"774300":[],"775":[],"77627886":13,"77636e":13,"77662945":18,"7767978193240488":11,"77714169":8,"7782028952":4,"77865169":[],"78":[2,4],"78011544":[],"78156479e":5,"78184120e":6,"7846153846154":[],"78941903":5,"79":[2,4],"79009329":16,"79093776":18,"79111643":5,"791123":18,"793167":[],"79394867":[],"7939646":[],"794282":11,"79449156":18,"79602861":[],"79754246":[],"797e":6,"7c394b1e8b71":9,"7d7d58":[9,10],"7f2b3a6174c2":13,"7m":4,"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18],"80":[0,1,2,4,5,6,8],"800":[4,7],"80315282":5,"803153":5,"80354994":6,"80469739":5,"8055555555555556":1,"80561191":[],"80609615e":6,"80609616e":6,"8064":[],"80734875":[],"807349":[],"80738685":16,"80747253":16,"80842254":11,"808423":11,"80847477e":6,"81":[1,2,4],"81048318e":6,"8108619":[],"81160425":5,"81187794":16,"81333804":6,"81333805":[],"814":[7,11],"815563":[],"81633628":11,"816454":[],"81671821":18,"816847":[],"8175":[],"82":[2,4],"8219235992494145":[],"8219236":[],"82198978":5,"82650876":[],"826509":[],"8265786":5,"82747653":[],"827477":[],"82773778":[],"83":4,"8305555555555556":1,"83512277":5,"836874":5,"83687444":5,"83698677":16,"83999999999999":[],"84":4,"84062065":[],"84228957e":[],"84232163":16,"842436":[],"84292394":[],"842u":[],"84355903e":1,"84443254e":1,"84569271":13,"84780262":6,"84854738":[],"84923989e":6,"84924834":11,"84994524":5,"85":[1,4],"8503720991789538":5,"85091337":[],"85263220":6,"8527777777777777":[],"85278920e":5,"853241":[],"85324115":[],"853u":[],"85601992":5,"85758696":16,"858":[],"8583333333333333":1,"85953586":6,"85959007":[],"86":2,"8608479":[],"860848":[],"861":[],"86117291":5,"86134827":5,"86145244":11,"8638888888888889":1,"86478158":[],"86546962":[],"86623151":13,"86630":[],"8666666666666667":1,"86810":[],"869":0,"86905621":18,"86925797":5,"869258":5,"87":2,"870":0,"8702784034":4,"871":0,"872":0,"8722222222222222":1,"873":0,"87327414":18,"87381451":5,"875":1,"8759":13,"876":6,"87625493":[],"87647541":18,"8768":[],"878297":[],"87836018":18,"87940752":16,"87it":6,"88":[2,13],"88017651":11,"880177":11,"88031314":18,"88046261":5,"8805555555555555":1,"88118231":[],"88168312e":6,"881788":18,"883":[],"88336879":5,"884":[],"88477619":[],"885":[],"88512489":[],"88529063e":6,"8855417382991412":[],"88554174":[],"886":[],"88679947":[],"887":[],"8879":6,"88871662":16,"8888888888888888":1,"8894":6,"89":2,"8916666666666667":[],"89274639":16,"89288636":11,"893489":5,"89348922":5,"89410423":5,"8944444444444445":1,"89550839":16,"89565264":[],"8962476":[],"896248":[],"89873772":16,"89876748":18,"8991514":16,"89944994":5,"899450":5,"8f":6,"8g":6,"8n":16,"8x8":1,"9":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,16,18],"90":[0,1,2,6],"900449":[],"90054363":[],"90075537":5,"9011":6,"90220243":5,"90266948":5,"90268858":[],"9027777777777778":1,"903824":[],"90382431":[],"9040":9,"90475506e":6,"90540529":11,"9055555555555556":1,"9083333333333333":[],"90884627":16,"90895045":16,"90940378":16,"91":19,"910":[],"9111111111111111":1,"91128596":5,"912u":[],"913":[3,4],"91379157":[],"913791573406831":[],"91383439":16,"91396388":18,"914":[3,4],"91416375":[],"91479093":0,"91492986e":6,"915":[3,4],"91549644":[],"916":[3,4],"9166666666666666":[],"917":[3,4],"91760278":5,"918":[],"91812702":5,"918992":[],"919":[],"92":[6,19],"922u":[],"92343595":[],"924018":[],"92477093":[],"924e":6,"925":1,"92507116e":1,"9252772":11,"92578916":5,"92603747":16,"92626212":16,"92754397":[],"927544":[],"9277777777777778":1,"92819235":[],"92857143":7,"93":[],"9305555555555556":1,"930583":11,"931":0,"93155188":5,"93158979":5,"93248252":5,"932483":5,"932u":[],"933":5,"93414191":[],"93492130e":6,"93579127":16,"935u":[],"9361111111111111":[],"937":18,"937082":[],"93799826":5,"938":18,"9387":[],"939":[0,18],"94":[7,18],"9400":[],"941866404575299":[],"94226022e":6,"94284104":5,"94320205":5,"9444444444444444":1,"945":[3,4],"94548496":[],"94591015":16,"946":[3,4],"94639099":11,"94659383":[],"947":[3,4],"9472222222222222":1,"94735055":[],"947903":[],"94790323":[],"948":[3,4],"9482527":5,"949":[3,4],"95":[1,7,11],"95008046":6,"95079764":6,"95231424":5,"9527777777777777":1,"95284275":5,"953065564":[],"95351665":5,"954":18,"9549351910143222":[],"954u":[],"9555555555555556":1,"95569422":18,"955820c21e8b":4,"956563":11,"95684892":5,"95703":13,"95714723":[],"957147232685324":[],"95it":[],"96":[6,7,11],"960":18,"9601304850018328e":6,"960130485007504e":6,"960130485007934e":[],"9601304850213484e":[],"96024953":5,"96032148":16,"96084663":5,"961":18,"962":18,"9637117593816477":6,"9640435":5,"96489434":[],"9649652536":4,"96527903":16,"965548":[],"96606158":16,"96653373":[],"96688672":5,"9674916":5,"967809":11,"96863851":[],"96987657":[],"96992454":[],"97":7,"97005689":5,"97065296":[],"97108e":13,"9722222222222222":1,"97230501":[],"97243128":5,"97300836":5,"97497404e":6,"975":1,"97507735":5,"975510299261579":9,"9760832":[],"97705827":5,"977418":5,"97758848":5,"9777777777777777":1,"977880":[],"97788031":[],"9780387310732":20,"9780387848570":20,"9781492032632":20,"97898392":6,"97926491":5,"98":[0,1,7],"980":[],"98017611":13,"98036405":[],"9805555555555555":1,"98091621":5,"981321":[],"98139097":5,"98266587":16,"98275501":5,"983310":[],"98346748":[],"98399675":[],"98413059":5,"98454786":5,"985":18,"98566191":5,"986":18,"9861111111111112":1,"98680716":5,"98716878":5,"98756882":13,"98794823":16,"9879924":[],"98808176":5,"98822371":6,"9888888888888889":1,"989":18,"9890348":5,"9893149172528393":[],"9893447":5,"9898254753574576":18,"98982548":18,"9898ff":[9,10],"99":[6,7,11,13],"990":[],"99009525":5,"9902552771282336":[],"99049330":6,"99088801":5,"991":18,"99115119":5,"99176998":5,"992":18,"99242921":5,"99265097":5,"993":18,"99316252":5,"99353454":[],"993535":[],"99371056":5,"99389612":5,"993972":[],"99397245":[],"9943201":5,"99435648":18,"9947756":5,"99492986":5,"99519225":13,"99528218":5,"99539415":5,"9955282554647219":[],"99566069":5,"99578809":5,"996":5,"99608161":5,"9963961":5,"99650061":5,"9967458":5,"99700706":5,"99709215":5,"99724883":[],"99729756":5,"99751458":5,"99758326":5,"99775587":5,"99775949":[],"99793613":5,"99799099":5,"99813653":5,"99828624":5,"99829953":[],"9983295":5,"99845267":5,"998577":5,"99861053":5,"99871521":5,"99881845":5,"99884384":5,"99893323":5,"999":[9,18],"99901896":5,"99903755":5,"99911427":5,"99918546":5,"99919837":5,"99926459":5,"9993237":5,"99933188":5,"99938942":5,"9994385":5,"99944272":5,"99949306":5,"99953381":5,"99953475":5,"99957911":5,"99961294":5,"99965056":5,"99967865":5,"99970988":5,"9997332":5,"99975913":5,"99977416":[],"99977849":5,"99980002":5,"9998161":5,"99984732":5,"99987324":5,"99989476":5,"99991263":5,"99992746":5,"99993978":5,"99995":5,"9999555851685968":6,"999955585168597":6,"9999840939906267":[],"9999858320366368":[],"9x":6,"9y":6,"\u00f8yvind":[6,19],"abstract":1,"boolean":4,"break":[0,4,6,11,14],"byte":16,"case":[0,1,2,3,4,5,6,7,11,12,13,14,15,16,17],"catch":0,"char":[],"class":[0,1,3,4,6,7,8,9,11,12,13,18],"const":[],"default":[0,1,2,4,6,7,13,16],"do":[0,2,3,4,5,6,8,9,10,11,12,13,14,16],"ekstr\u00f8m":4,"eng\u00f8i":19,"export":9,"f\u00f8470":19,"final":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,17,18,19],"float":[0,3,4,5,9,11,13,14,16],"function":[2,3,4,5,9,14,15,16],"import":[0,1,2,3,4,6,7,8,9,10,11,12,13,14,18],"int":[0,1,2,3,4,5,6,11,13,14,16,18],"long":[0,1,3,4,12,13],"m\u00f8svatn":6,"new":[0,1,2,3,5,6,7,8,9,10,11,13,14,16],"null":[],"public":[0,15],"return":[0,1,2,3,4,5,6,7,8,9,11,13,14,16,18],"s\u00f8rli":[],"s\u00f8rlie":19,"sch\u00f8yen":[6,19],"short":[4,5],"steinsv\u00e5g":[],"super":[3,5],"switch":0,"throw":[3,6,18],"true":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,16,18],"try":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,18],"var":[5,6,10,11,18],"while":[0,1,3,4,5,6,7,8,9,11,12,13,18],A:[2,3,5,6,7,10,11,12,13,15,16,17,18,19,20],AND:2,And:[0,3,4,5,6,9,15,18],As:[0,1,2,3,4,5,6,8,10,12,13,16,18],At:[0,4,6,13],BE:0,Be:[2,15],Being:13,But:[0,1,2,3,5,6,9,10,18],By:[0,3,5,6,12,13,16],For:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],IF:6,IN:20,If:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18],In:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,20],Is:11,Ising:[5,12],It:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],Its:[1,2,4,11],NO:[7,11],No:[3,4,5,6,7,8,9],Not:[0,1,5,6,17],OR:18,Of:18,On:[0,3,17,18,20],One:[0,1,3,4,5,6,7,8,11,12,13,18],Or:[0,1,6],Such:[6,12,18],That:[0,5,7,10,11,12,14,18],The:[4,10,13,14,16,17,18,19,20],Then:[0,1,5,6,8,9,10,11,12,13,14,16],There:[0,3,4,5,6,8,9,11,12,14,16,17,18,19],These:[0,3,4,5,8,9,10,11,12,13,14,16,18],To:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],With:[0,5,6,8,9,10,11,12,14,16,18],_0:[5,8,10,11,13],_1:[2,5,6,8,10,11,12,13,14,16],_2:[2,5,8,11,12,13,16],_3:16,_4:16,_9:13,_:[0,1,2,4,5,6,7,8,9,10,11,12,13,16],_________________________________________________________________:4,__call__:[3,4],__class__:10,__doc__:6,__future__:[8,9],__getitem__:[],__init__:[1,3,4,14],__main__:2,__mosek:5,__name__:[2,10],__traceback__:[3,4],_asarrai:[],_auto10:[6,12],_auto12:6,_auto1:[2,3,4,5,6,7,12,13,16,18],_auto2:[2,3,4,5,6,12,13,16,18],_auto3:[3,4,5,6,12,13,16],_auto4:[4,6,12,13,16],_auto5:[4,6,12,13,16],_auto6:[4,6,12,16],_auto7:[4,6,12,16],_auto8:[6,12],_auto9:[6,12],_ax:[],_base:8,_build:[15,20],_build_call_output:[3,4],_c:1,_call:[3,4],_call_flat:[3,4],_check_1d:[],_check_optimize_result:[7,11],_compon:11,_coordinate_desc:6,_copy_docstring_and_deprec:[],_decor:0,_depth:9,_fraction:9,_get_lin:[],_getitem_multilevel:[],_handl:[3,4],_i:[0,1,2,5,6,8,11,12,13],_inference_funct:[3,4],_interpolatefunctionerror:[3,4],_is_primit:[],_j:[0,1,2,3,5,6,8,13],_jit_compil:[3,4],_k:13,_l:12,_lambda:6,_leaf:9,_logist:[7,11],_m:10,_make_vjp:[2,13],_maybe_define_funct:[3,4],_multilayer_perceptron:1,_n:[2,5,8,11,13],_node:[2,9,13],_notokstatusexcept:[3,4],_np:[],_num_output:[3,4],_p:[5,8],_plot_arg:[],_process_traceback_fram:[3,4],_r:[3,4],_ratio:11,_sampl:9,_select_forward_and_backward_funct:[3,4],_split:[6,9],_src:[3,4,14],_stateful_fn:[3,4],_stateless_fn:[3,4],_t:13,_test:6,_trace:[2,13],_valu:[2,13],_varianc:11,_weight:9,a0:3,a0faa0:[9,10],a1:0,a2:0,a3:0,a4:0,a_0:0,a_1a:0,a_2a:0,a_3:0,a_3a:0,a_4:0,a_4a:0,a_:[0,1,16],a_h:1,a_i:[0,1,2,12],a_j:[1,12],a_k:[1,12],a_ndim:2,aaron:20,ab:[0,2,5,13,14],ab_channel:15,abandon:1,abbrevi:17,abid:18,abil:[0,10],abl:[1,4,5,6,7,10,12,13],abort:[],about:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,20],abov:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,16,18],abovement:6,abscissa:13,absolut:[0,2,5,6,13],acceler:13,accept:[0,3,6,9],access:[0,3,4,11,18],accid:[4,6],accmod:5,accompani:0,accomplish:[8,9,13],accord:[0,1,2,5,6,9,12,13,14,18],accordingli:11,account:[0,3,5,13,18],accumul:[12,18],accur:[0,3,4,6,10,13],accuraci:[0,1,3,4,5,6,7,9,10,11,12],accuracy_scor:[0,1,10],accuracy_score_numpi:1,achiev:[0,1,5,6,8,12,16],aco:18,acquaint:15,acquir:[1,15],acr:0,across:[1,3,6,9,15],act:[1,3,16],action:18,activ:[0,2,3,4,9,17],actual:[0,1,4,5,6,8,11,16,18],ad:[0,1,3,4,5,8,13,16],ada_clf:10,adaboostclassifi:10,adadelta:13,adagrad:13,adam:[1,3,4],adapt:[4,6,13,20],add:[0,1,2,3,4,5,6,8,10,11,12,18],add_lin:[],add_outgrad:2,add_subplot:[1,7,12,14],addendum:5,addit:[0,2,3,5,6,7,8,9,10,12,13,15,16,18,19,20],addition:[12,13],address:[1,9,11,13,20],adjac:[3,12],adjoint:5,adjust:[0,5,12,13],admir:0,advanc:[4,6,12,20],advantag:[1,3,5,6,10,13,16],affect:3,affin:[0,3,8,11],afford:3,aforement:14,african:0,after:[0,1,2,4,5,6,9,11,12,13,15,16,18],afterward:0,ag:[0,7,17],ag_0:2,again:[0,1,4,5,6,7,8,10,11,12,13,18],against:[1,4,7,10],agegroup:7,agegroupmean:7,aggreg:[9,10],agorithm:10,agre:[5,6,18],ahead:9,ai:[0,20],aid:11,aim:[0,1,4,6,7,11,14,15,16],ainv:5,airplan:3,aka:5,al:[0,2,4,17,20],alarm:5,algebra:[0,3,5,13,15,17],algo:[],algorithm:[0,1,2,4,5,6,7,8,13,14,15,16,17,18,20],align:[0,2,5,6,7,8,13,18],all:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20],allevi:[1,13],alloc:[3,16],allow:[0,1,2,3,5,6,8,10,13,15,16],almost:[0,1,6,8,11,13,18],alon:[2,9],along:[2,3,4,5,6,9,10,11,15,16],alpha:[0,1,2,3,4,5,6,7,8,9,10,13,14,18],alpha_0:3,alpha_1:3,alpha_2:3,alpha_:10,alpha_i:[3,13],alpha_k:13,alpha_m:10,alpha_n:3,alpha_opt:13,alreadi:[2,3,4,5,6,10,12,15,16,18],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],alter:1,altern:[0,1,4,5,6,7,8,9,11,13,16],although:[1,5,6,8,10,13],alwai:[0,3,5,6,12,13,18],am:4,ame2016:0,american:0,among:[0,3,5,9,10,12,16],amongst:5,amount:[0,1,3,4,6,8,10,14,15],an:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,18,19,20],an_:18,anaconda3:[],anaconda:[0,1,15],analog:13,analys:6,analysi:[1,3,4,7,14,16,17,20],analyt:[0,2,3,5,6,7,12,13,15],analyz:[0,1,3,4,5,6,18],andrew:1,angl:[0,3,9],anharmon:3,ani:[0,1,2,3,4,5,6,7,8,9,10,12,14,18],anim:[4,12],ann:12,annot:[0,1,3,7,8],anoth:[0,1,3,4,5,6,7,8,10,11,12,13,16,18],anp:2,ans_vspac:2,ansatz:0,answer:[0,1,3,5,6,16],antialias:[2,6],anticip:4,anymor:[1,8],anyon:[4,8],anyth:[1,18],anytim:19,apach:1,apart:[11,13],api:[1,15],appar:2,appear:[0,1,3,13,16,18],append:[1,3,4,8,9,13],appendcon:5,appendvar:5,appli:[0,1,2,3,4,6,7,8,9,10,11,12,13,18,20],applic:[0,1,3,4,5,6,7,9,12,13,16,17,18,20],apply_gradi:4,approach:[1,2,4,5,6,9,10,11,12,13,15,18,20],appropri:[2,6,9,12,13,15,18],approx:[0,2,3,6,10,11,13,18],approxim:[0,1,2,3,4,5,6,7,10,11,13,18],apt:[0,15],aq:18,ar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],arang:[1,3,4,6,7,9,10,12],arbitrari:[1,4,6,8,12,13,18],arbitrarili:[0,1,11],arc:6,architectur:[3,4,12,20],area:[0,3,6,20],arg:[0,2,3,4,13],argc:[],argmax:[1,11],argmin:[4,10,14],argnum:[2,13],argnum_0:2,argnum_1:2,argsort:11,argu:[1,13],argument:[0,2,3,5,6,11,12,13],argv:[],argval:2,aris:[0,6,12,13,18],arithmet:[0,13,16],arm:[3,4,6,14],arma:[],armadillo:16,around:[0,1,4,5,6,11,18],arr:2,arrai:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,18],arrang:3,arraybox:13,arriv:[0,6,9,11,16,18],arrow:12,arrowprop:8,art3d:13,art:[0,1,15],articl:[0,3,4,6,10],artifici:[0,2,7,12,20],artificialneuron:12,arug:13,arxiv:[3,4],as_fram:[],asarrai:[0,2,6,9],asc:5,ascii:[],ashrafi:19,ask:[5,6,11,12],aspect:[0,6,15],assembl:[0,3],assert:4,assess:[0,6],assici:4,assign:[0,7,8,9,12,13,14,17,20],associ:[0,6,9,12,14,18],assum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],assumpt:[0,3,5,6,9,11,18],ast:[0,5,6],astyp:[4,9,10],asymmetri:0,asymptot:[4,6],async_wait:[3,4],atoi:[],atom:0,attempt:[0,4,6,7,8,10],attend:17,attent:[0,16],attr:[3,4],attract:[0,10],attribut:[0,9],attributeerror:[],audi:0,audio:[3,4],aurelien:[0,17,20],austfjel:6,author:[0,1,10,18],authour:0,auto:[6,9,10,18],autocor:18,autocorrelation_tim:18,autocorrelform:18,autocovari:18,autoencod:[4,15],autoencond:15,autograd:15,autom:[0,15],automac:16,automat:[0,1,2,3,4,11,15,16,17],automobil:3,autonom:[4,20],avail:[0,1,4,6,10,11,15,16,17,20],averag:[0,1,3,6,9,10,13,14,18,19],avg:[],avoid:[0,4,5,6,9,11,13,16],avx2:[],avx:[],awai:[2,3,6],awar:[2,10],award:19,ax:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,16],axes3d:[2,6,13],axes_grid1:6,axessubplot:[],axhlin:8,axi:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,16,18],axiom:5,axlabel:0,axvlin:[4,8],axvspan:4,b1:8,b2:8,b3:8,b:[0,1,2,3,4,5,6,8,9,10,12,13,14,18,19],b_1:[2,12,13],b_2:13,b_5:13,b_:[1,16],b_group:9,b_i:[0,1,2,12],b_ia_:0,b_index:9,b_is_vec:2,b_j:[1,12],b_k:[1,12,13],b_m:12,b_meta:2,b_score:9,b_valu:9,bachelor:17,back:[0,3,4,5,6,8,9,10,16,17,18],backbon:16,backend:[1,4],background:[17,20],backpropag:1,backtrack:9,backup:16,backward:[1,2,4,12,16],backward_pass:2,bad:6,badli:18,bag:[9,15,17],bag_clf:10,baggingboot:10,baggingclassifi:10,baggingtre:10,balanc:6,band:16,bandwidth:16,bar:[0,6,11],barber:20,bare:[4,10],base:[0,1,3,4,5,7,8,9,10,14,15,18,19,20],basi:[5,7,8,10,11,12,13,16],basic:[6,8,12,13,14,15,17,18],batch:[3,4,11,12,13],batch_shap:4,batch_siz:[1,3,4],batchnorm:4,bay:7,bayesian:[5,15,20],bc298b802fe2:6,becaus:[0,1,2,3,4,5,6,8,9,12,13,14],becom:[0,1,2,5,6,7,9,12,13,18],been:[0,1,2,3,4,5,6,11,12,13,15,16],befor:[0,1,2,3,4,5,6,7,8,12,13,14,16,18],beforehand:[0,18],begin:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,16,18],behav:[1,6,13],behavior:[0,1,13],behaviour:12,behind:[0,1,6,8,13],behnoosh:19,being:[0,1,2,3,4,5,7,8,10,11,12,13,18],believ:[9,16],belong:[5,7,8,9,13,14],below:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],benchmark:10,bendik:[],benefici:[1,13],benefit:[0,1,4,11,13,15],bengio:[1,17,20],benign:[1,7],bennosh:19,besid:[4,5],bessel:5,best:[0,1,2,3,4,5,6,7,8,9,10,12,13,19],beta:[0,1,3,5,6,7,10,11,13],beta_0:[0,1,3,5,6,7,13],beta_0x_:0,beta_1:[0,1,3,5,6,7,10,13],beta_1x_0:0,beta_1x_1:[0,7],beta_1x_2:0,beta_1x_:0,beta_1x_i:[7,13],beta_2:[0,3,13],beta_2x_0:0,beta_2x_1:0,beta_2x_2:[0,7],beta_2x_:0,beta_3:3,beta_:[0,3,6,7,13],beta_i:[0,3,5],beta_j:[0,5,6,13],beta_k:13,beta_linreg:13,beta_m:10,beta_mg_m:10,beta_n:3,beta_p:7,beta_px_p:7,betavalu:5,better:[0,1,2,3,4,6,9,10,11,12,13],between:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,18],beyond:[0,1,5,6,8,13],bf:[13,14,16,18],bgd:13,bia:[0,1,2,3,5,8,9,10,12,13,17],bias:[1,2,3,5,6,9,12],big:[0,1,2,5,6,14],bigger:[1,6],bigr:12,bike:9,bilek:19,billion:[3,12,15],bin:[0,7,18],binari:[0,3,5,7,9,10,12,17],binarycrossentropi:4,bind:0,binomi:[15,18],binsboot:6,bioinformat:0,biolog:[1,12,20],bios1100:15,bird:[0,3],bishop:[17,20],bit:[1,4,16,18],bitwis:18,bivari:2,bk:[0,13],bla:[5,16],black:[8,9,14],block:[6,10,15,16,18],blockingavg:[],blockingstd:[],blockingvar:[],blocksiz:[],blocksizemax:[],blocksizemin:[],blogpost:4,blue:[0,3],bmatrix:[0,1,3,5,7,8,11,13,16],bmi:1,bodi:[0,1,4,12],bold:1,boldfac:[0,5],boldsymbol:[0,1,2,3,5,6,7,8,10,11,13,14],boltzmann:[12,15],book:20,boost:[1,9,15,17],boostrap:10,bootavg:[],bootstd:[],bootstrap:[1,13,15,17],bootvar:[],bootvec:[],boston_dataset:0,bot:8,both:[0,1,4,5,6,8,9,10,13,14,15,16,18,19],bottl:7,bound:[0,5,8,12],boundari:[2,4,8,11,12],boundkei:5,box:[2,4,9],boxed_arg:2,boyd:[8,13],bracket:[4,18],brain:[1,7,12],branch:9,breast:[5,7,11],breviti:13,brew:[0,15],brg:8,briefli:0,bring:[0,5,6,10],broad:[0,3,4],brownle:4,brute:[3,5,11],bs:[8,9,10],buffer_s:4,bui:4,build:[0,4,5,6,10,13,16,18],built:[0,1,3,4,6],bunch:11,busi:0,bx:5,bzl:5,c1:[8,11],c2:[8,11],c95af3df0cdd:3,c:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20],c_0:18,c_1:12,c_2:12,c_3:12,c_4:12,c_:[0,8,9,10,13,18],c_i:[12,13],c_k:18,ca:1,cabc613b8702:13,cach:10,cal:[0,8,10,12,13],calcul:[0,1,2,4,5,6,8,9,10,11,12,13,14,16,18],california:[],call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],callabl:[3,4],callback:[3,4],calor:0,cambridg:[13,20],can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],cancel:[0,13],cancellation_manag:[3,4],cancer:[5,10],cancerpd:7,candid:[8,9,10],cannot:[0,1,4,5,6,7,8,9,17,18],canopi:[0,15],cap:5,capabl:[0,1,8,13,15],capac:2,capita:0,captur:[4,11,12],captured_input:[3,4],car:[3,4],card:[0,7],cardin:1,care:11,carefulli:13,carlo:[0,6,15,18,20],carri:[2,6,7],cart:10,carvalho:19,casella:20,cast:1,cat:[3,4],categor:[0,1,3,9,11],categori:[0,1,3,7,10,12,14,17],categorical_crossentropi:[1,3],caus:[0,5,6,18],causal:0,causat:0,cax:1,cb:6,cbar:1,cbook:[],cc:[0,1,5,13],ccc:[5,12],cd_fast:6,cdf:18,cdot:[0,2,6,12,13,14,16,18],celebr:13,cell:4,center:[0,1,6,7,8,9,11,14,18],centr:20,central:[0,3,5,6,8,16],centroid:[14,18],centroid_differ:14,centuri:3,certain:[0,3,6,7,9,18],cg:13,cha:0,chain:[1,13,15,18],chanc:[1,5,13,18],chang:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18],channel:3,chapter:[0,6,10,11,16,17,20],charact:[0,3,5],character:[8,9,10,12,18],characterist:[0,1,3,10,13],charg:0,charl:0,chase:4,chd:7,chddata:7,cheap:5,cheaper:[1,13],check:[0,1,3,4,5,6,11,13,16],checkmark:3,checkpoint:4,checkpoint_dir:4,checkpoint_prefix:4,chemic:[],chen:10,chiaramont:2,choic:[0,1,2,3,4,6,9,12,13,14,16],choleski:[5,16],choos:[2,3,6,9,10,11,13,14],chosen:[0,1,2,6,8,9,10,13,18],chosen_datapoint:1,christian:20,christoph:[17,20],cifar10:3,cifar:3,cin:[],circ:[1,12],circl:[0,8,12],circuit:3,circumfer:9,circumv:[1,5,13],ckpt:4,clariti:18,class_nam:[3,9],class_val:9,class_valu:9,class_weight:[3,4],classic:[7,9,13],classif:[0,3,5,6,7,8,11,12,15,17,20],classifi:[0,1,4,7,9,10,11],classificaton:1,classifii:10,clean:1,clear:[1,5,10,12,13],clearli:[0,3,5,6,7,8,18],clever:[1,10],clf3:0,clf:[0,6,8,9,10],clf_lasso:6,clf_ridg:6,clip:[3,18],close:[0,1,2,4,6,8,9,11,12,13,14,18,20],closer:[3,5,13],closest:[8,11,13,14],closur:15,cloud:15,cluster:[0,1,4,6,11,15,17],cluster_label:14,cm:[1,2,3,6,8,13],cmap:[0,1,2,3,4,6,8,9,10],cmap_arg:6,cmath:[],cmb:17,cmd:9,cmu:[],cn_:18,cnn:[12,17],cnn_kera:3,cntk:15,co:[0,2,3,6,9,13],code:[3,4,6,7,8,13,15,16,17,18,20],coef0:8,coef:0,coef_:[0,5,6,8,9,13],coeff:5,coeffici:[0,3,5,6,7,8,9,13,16],coerc:[0,6],coin:[10,18],coin_toss:10,col:[0,11],colab:15,cold:9,colinear:0,collaps:8,collect:[0,2,6,10,11,15,18,20],collinear:5,color:[0,3,4,6,8,9,10,18],color_channel:3,color_cod:6,colorbar:[1,6],colsample_bytre:10,colsaobject:10,colspec:0,column:[0,1,2,5,6,7,8,9,11,12,16],columntransform:9,com:[3,4,6,14,15,20],combin:[1,2,5,6,7,10,18],come:[0,1,3,4,5,12,13,14,17],command:[0,1],comment:[0,4,5,6],commerci:[0,15],commod:0,common:[0,1,3,5,6,7,9,11,13,14,18],commonli:[0,1,4,6,7,9,13,14],commun:[0,12],commut:3,commutatitav:3,compact:[0,1,3,5,6,7,9,11,12,13,14],compar:[0,3,4,5,6,11,13,16],comparison:[2,4,13],compat:7,compet:0,competit:10,compil:[0,1,3,4,15,16],complet:[0,2,3,4,9,12],completenn:12,complex:[1,5,8,9,11,12,13],complic:[0,1,9,13],compon:[0,1,3,4,5,6,7,9,14,15,17],components_:11,compos:[9,12,14],compphys:[6,15,17,20],compress:0,compris:6,compromis:5,compulsori:15,comput:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,20],computation:[0,3,6,9,13,18],con:5,concaten:[2,4,6,14],concav:[1,13],concentr:[0,10],concept:[0,2,15],conceptu:[12,13],concern:[0,1,4,7],conclud:[0,5,13],conclus:1,cond:2,conda:[0,1,15],condit:[0,2,4,5,6,8,9,11,13,18],conduct:15,condwav:2,coneqp:5,confid:[0,5,6,7,8],configur:3,confirm:[5,12],confus:[5,6,10,16],confusion_matrix:9,congruenti:18,conjug:[4,8],conjugaci:13,conjunct:3,connect:[0,1,3,4,9,11,12,13,16],consequ:[5,6,8,10,12,13],conserv:[5,14],consid:[0,1,2,3,5,6,7,8,9,10,12,13,16,18],consider:[0,1,5,13],consist:[0,1,2,3,4,6,12,13,18],constant:[0,2,4,5,6,8,12,13,18],constitu:0,constitut:[2,6],constrain:[1,3,5,7,11],constraint:[5,6,8,13],construct:[0,1,2,3,5,6,7,8,9,10,11,16,18,20],contact:0,contain:[0,2,3,4,5,6,7,8,9,11,12,13,16,18,20],contemporari:20,content:[1,15,16],context:[3,4,6,10,13],contigu:16,continu:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,18],contour:[9,10,13],contourf:[8,9,10],contrast:[1,4,9,10,12],contribut:[0,3,5,13,18],contributor:0,control:[0,1,3,9,13,15],conv2d:[3,4],conv2dtranspos:4,conv:[3,4],conveni:[0,5,6,12,13,16],convent:12,converg:[1,2,4,5,6,7,8,11,13,14],convergencewarn:[1,6,7,8,11],convert:[0,1,4,5,9,11,13,16],converttomatrix:4,convex:[4,5,7],convinc:13,convolut:[1,4,15,17],cool:[4,9],coolwarm:6,coordin:[5,12,14],coorel:0,copi:[0,1,14],core:[2,3,4,10,13],corel:0,coronari:7,corr:[0,5,7,11],correalt:[11,15],correct:[0,1,2,3,4,5,13,16,18],correctli:[1,2,6,10],correl:[0,1,3,5,6,7,10,12,13,15,18],correlation_matrix:[0,5,7,11],correspond:[0,3,5,6,8,9,11,12,15,16,18],cortex:12,cosin:[3,6],cost:[0,2,3,5,6,7,8,9,12,13],cost_deep_grad:2,cost_funct:2,cost_function_deep:2,cost_function_deep_grad:2,cost_function_grad:2,cost_grad:2,cost_sum:2,costol:13,could:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],coulomb:0,count:[0,9,17,18,19],countor:13,coupl:[4,5,6],cours:[0,1,3,5,11,17],courvil:[17,20],cout:[],cov:[5,6,11,16,18],cov_xi:[5,11],cov_xx:[5,11],cov_yi:[5,11],covari:[0,7,15,16],covariance_matrix:[5,11,14],cover:[0,5,15,17,20],covert:0,covxi:18,covxx:18,covxz:18,covyi:18,covyz:18,covzz:18,cpu:1,cpu_feature_guard:[],craft:3,creat:[1,2,3,4,5,6,9,10,11,12,13,15],create_biases_and_weight:1,create_convolutional_neural_network_kera:3,create_neural_network_kera:1,create_x:[5,11],credit:[0,7],crim:0,crime:0,criteria:[0,4,9,10,14,18],criterion:[9,10,13],critic:6,cross:[0,1,3,7,9,10,13,15,17,18],cross_entropi:4,cross_val_scor:6,cross_valid:[7,10],crossvalid:6,crucial:[1,18],cs231:3,cs:17,csr_matrix:16,cstdlib:[],csv:[0,4,6,7,9],ctnk:1,ctx:[3,4],cubic:0,cumbersom:5,cumsum:[10,11],cumul:[10,18],cumulative_heads_ratio:10,cup:5,current:[1,2,3,4,6,13,14],curs:0,curv:[6,7,10,12],curvatur:13,custom:[5,6,14],custom_cmap2:[9,10],custom_cmap:[9,10],cutpoint:9,cv:[6,7,10],cvxbook:13,cvxopt:[5,8],cyber:20,cycl:[1,12],d1:5,d2:5,d2_g_t:2,d3:5,d670a873ab0c:5,d985fb40c43d:6,d:[1,2,3,4,5,6,7,8,9,10,11,13,14,16,18,19],d_f:13,d_g_t:2,d_net_out:2,da:3,dagger:[5,16],dai:[1,9,15],dalen:[],damp:3,darget:9,darkr:18,dat:0,dat_id:[0,6,7,9],data1:14,data2:14,data3:14,data4:14,data:[2,4,5,8,10,12,13,14,16,20],data_handl:[3,4],data_id:[0,6,7,9],data_indic:1,data_modul:[],data_path:[0,6,7,9],data_url:[],databas:1,datafil:[0,6,7,9],datafram:[0,4,5,7,9,11],datapoint:[1,5,6,7,11,13],dataset:[0,4,6,7,8,9,10,11,13,14],datatyp:4,date:0,daughter:10,david:20,dbh:1,dbo:1,dcomposit:16,ddot:2,dead:1,deadlin:17,deal:[0,1,3,5,6,8,11,13,14,16,18],debt:7,debug:[5,6],decad:[0,3],decai:[0,13,18],decemb:17,decent:10,decid:[0,2,3,5,6,9],decim:0,decis:[0,1,8,11,15,17,20],decision_funct:8,decision_tre:9,decisiontreeclassifi:[9,10],decisiontreeregressor:[0,9,10],declar:[0,4,16],decompos:[5,6,16],decomposit:[0,6,12,17],decompost:5,deconvolut:3,decorrel:[10,13],decreas:[1,2,4,5,6,10,11,13],deduc:0,deep:[3,7,12,13,15,17,20],deep_neural_network:2,deep_param:2,deep_tree_clf1:9,deep_tree_clf2:9,deep_tree_clf:[9,10],deepen:[5,15],deeper:[0,3,4],deeplearningbook:20,deer:3,def:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,18],def_covari:18,def_funct:[3,4],default_tim:4,defect:5,defici:5,defin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],definit:[1,2,5,6,8,10,11,12,13,16,18],defint:18,defun:[3,4],defvjp:2,degre:[3,5,6,8,9,10,11,18],del:1,delet:6,delimit:4,deliv:17,delta:[0,2,3,6,8,12,13,14],delta_0:3,delta_1:3,delta_2:3,delta_3:3,delta_4:3,delta_5:3,delta_:[1,16],delta_h:[0,1],delta_j:[3,12],delta_k:12,delta_l:[1,3],delta_n:[0,3],delug:15,delv:0,demand:13,demonstr:[0,3,5,6,7,11,12,15],den:4,denomin:[1,5],denot:[1,2,6,7,13,18],dens:[1,3,4],dense_1:4,densiti:[0,2,6,18],depart:19,depend:[0,1,2,4,5,6,7,8,11,12,13,15,16,18],depict:18,deploy:[0,15],deprec:[2,3,6,13],depth:[0,3,9,10,16],deriv:[0,1,2,6,7,8,10,11,13,15],derivati:13,descend:[5,9,11],descent:[0,1,3,7,8,12,17],descr:[],describ:[0,2,4,5,6,8,10,11,12,13,16],descript:[0,8,9],design:[0,1,3,4,5,6,7,10,11,12,13],designmatrix:0,desir:[0,2,4,5,13,14],despit:[1,12],destroi:16,det:[5,16],detail:[0,6,11,13,14,16],detect:[3,8,12],determin:[0,2,3,4,5,6,8,9,10,11,12,13,16,18],determinist:[7,13,18],dev:1,develop:[0,3,5,8,10,11,12,15,16,17],deviat:[0,1,2,4,5,6,18],device_nam:[3,4],devis:12,df:[4,8,11,13],di:[0,5],diag:[5,8],diagnost:[1,10],diagon:[0,5,7,13,16,18],diagonaliz:5,diagram:10,diagsvd:6,dice:[6,18],dict:[6,8],dict_kei:[],dictionari:0,did:[0,1,5,6,7,10,11,14],die:1,diff1:2,diff2:2,diff:2,diff_ag:2,diffeent:8,differ:[0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,18,20],differenti:[3,15,16,17],differential_oper:[2,13],difficult:[0,1,6,10,13,18],difficulti:[0,1,13],diffonedim:2,digit:[0,1,3,4,6,17,19],dilemma:13,dilut:1,dim:[4,11,14,16],dimens:[0,1,2,3,4,5,8,11,14,16],dimension:[0,4,5,6,9,11,13,14,15,16],dimensionless:[0,3],diment:16,dimnsion:4,diod:3,direct:[0,1,2,4,11,12,13,14],directli:[1,4,5,6,18],directori:[],disabl:[3,4],disadvantag:0,disappear:[3,6],disc_loss:4,disc_tap:4,discard:[6,11],disciplin:[0,3,12],disclaim:18,discourag:13,discov:0,discover:5,discret:[1,3,5,7,13],discrimin:[4,7,10,11],discriminator_loss:4,discriminator_loss_list:4,discriminator_model:4,discriminator_optim:4,discuss:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],diseas:7,disguis:6,disord:[1,7],displai:[0,1,3,4,5,6,7,8,9,10,11,12,14,18],displaystyl:[0,5],displot:[],disregard:0,dissimilar:[11,14],dist:14,distanc:[0,8,9,11,14,18],distance_list:9,distinct:[3,7,8,9,10,14],distinctli:8,distinguish:[0,4,7,8,18],distplot:0,distribut:[0,1,4,6,7,10,11,13,14,15,16],distrubut:[0,15],div:5,dive:[0,8,16],diverg:[1,13],divid:[0,1,3,5,6,8,9,11,12,18],divis:[6,8,9,13,16,18],dna:7,dnn1:4,dnn2_gru2:4,dnn:[0,1,2,4,12],dnn_kera:1,dnn_model:1,dnn_numpi:1,dnn_scikit:[0,1],doc:[6,15,17,20],document:[4,7,11,13],doe:[0,1,2,3,4,5,6,8,10,11,12,13,16,18],doesn:[3,9,12],dog:[1,3,4],domain:[5,8,13],domin:0,don:[0,1,3,5,6,8,11,13,15],done:[0,2,3,4,5,6,9,10,11,13,16],dot:[0,2,3,5,6,7,8,9,10,11,12,13,16,18],doubl:[3,4,16],doubli:1,down:[0,3,6,9,11,12,13],download:[0,1,3,5,6,16,20],downsampl:3,dozen:1,dq:6,drag:13,dramat:11,drastic:4,draw:[4,6,10,13],drawback:[0,1,3,13],drawn:[1,4,6,7,11,18],drive:[3,4],driven:3,drop:[0,1,5,6,11,13,18],dropna:[0,6],dropout:4,ds:5,dt:[2,3,13,18],dtype:[0,1,2,3,4,14,16],dualiti:6,dub:0,due:[1,2,5,6,8,10,12,13],dummi:0,dure:[0,1,3,4,8,9,11,15],dwell:0,dwh:1,dwo:1,dx:[2,3,8,18],dx_1:18,dx_1p:6,dx_2p:6,dx_mp:6,dx_n:18,dxp:6,dy:[1,8,18],dynam:4,dysth:19,dz:8,e:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19],e_:[0,2],each:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],eager:[3,4],eapprox:0,earli:[1,3,4,13],earlier:[0,5,7,8,9,11,12,13],earthexplor:6,eas:[6,9,14],easi:[0,5,6,7,8,9,10,11,12,13,15,16],easier:[5,6,8,9,13,18],easiest:13,easili:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16],eastern:19,ebind:0,eblock:9,economi:5,ecosystem:15,ect:17,edg:3,edgecolor:6,edu:13,educ:0,eface79dac2c:10,eff:18,effect:[1,4,10,13,18],effic:1,effici:[0,3,10,13,15,16,18],efron:6,egrad:13,eig:[5,11,13,16,18],eigen:18,eigenpair:[5,11],eigenvalu:[0,5,8,11,13,16],eigenvector:[5,11,13],eight:16,eigval:[16,18],eigvalu:[11,13],eigvec:[16,18],eigvector:[11,13],eispack:16,either:[1,5,6,7,8,9,10,11,13,18],ekstrom:[],elabor:18,elarn:3,electr:[0,3,12],electur:20,eleg:11,element:[1,2,3,4,5,6,7,8,11,12,13,15,16,17,20],elementari:[10,13,16],elementwis:[3,13],elementwise_grad:[2,13],elif:[2,3,4,14],elim:16,elimin:[3,5,8],els:[1,2,3,4,7,9,12,13,16],elu:1,elus:0,email:[17,19],embed:[0,11],embodi:6,emit:18,emner:[17,20],emphas:[0,10,15],emphasi:[0,15,20],empir:[1,11,18],emploi:[0,1,5,6,11,13,18],employ:0,empti:[6,10],emul:12,en:[15,20],enabl:11,enbodi:6,encod:[0,3,5,9,11,14],encompass:[0,18],encount:[0,1,5,6,7,13,18],end:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],end_box:[2,13],end_nod:[2,13],end_valu:[2,13],endl:[],endpoint:[3,6],energi:[0,4,6],enet_coordinate_desc:6,enforc:12,eng:20,engin:[0,1,3,4,15],english:20,enorm:3,enough:[0,6,13],ensembl:[1,9,17],ensur:[0,1,2,3,5,6,11,13,18],ensure_initi:[3,4],enter:[5,6],enthought:[0,15],entir:[1,3,7,9,15,18],entiti:[9,12,16],entri:[0,5,8,11,12,16],entropi:[1,3,7,10,13],enumer:[0,1,2,3,4,6,8],env:[0,1,2,3,4,5,6,7,8,11,13,14,18],environ:[2,15,20],eo:[0,6],eol:0,eosfit:0,epoch:[0,1,3,4,12,13],epsilon:[0,5,6,7,13],epsilon_0:0,epsilon_1:0,epsilon_2:0,epsilon_:0,epsilon_i:0,eq:[3,13,14,16,18],eqnarrai:[3,5,6],equal:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18],equat:[1,3,4,5,6,7,8,9,10,11,13,14,16,17,18],equilibrium:[2,12],equiv:[3,13,16,18],equival:[0,1,5,8,11,13,15,16],erf:18,err:[0,10],err_:6,err_sqr:2,errat:13,errno:[],erron:2,error:[1,2,4,5,6,7,9,11,12,13,15,16,18],error_estimate_corr_tim:18,error_handl:[3,4],error_hidden:1,error_output:1,escap:13,especi:[1,3,9,12,13],essenti:[0,5,6,9,10,12,14,17,18],establish:[0,6,10,11],estim:[0,1,5,6,7,10,11,13,15,18],estimated_mse_fold:6,estimated_mse_kfold:6,estimated_mse_sklearn:6,et:[0,2,4,17,20],eta0:[8,13],eta:[0,1,3,8,12,13],eta_:13,eta_t:13,eta_v:[0,1,3],etc:[0,1,3,5,7,8,9,11,12,13,14,15,16,18],ethic:15,etsim:6,euclidean:[0,14],evalu:[0,2,3,4,5,6,9,13,18],evalut:13,even:[0,1,3,4,5,6,8,9,10,11,12,13,14,15,16,18],evenli:4,event:[3,4,5,7,10,14,18],eventu:[5,6,11,12,13,19],everi:[0,1,2,3,4,5,6,9,10,11,12,13,14,15,18],everyth:[4,12],everywher:[4,13],evolv:0,exact:[0,2,5,11,12,13,16,18],exactli:[0,3,4,6,12,15],examin:6,exampl:[5,11,12,13,15,16,17,18,20],exce:[1,12,13],excel:[0,1,4,5,10,20],except:[3,4,5,6,8,9,16],excess:0,excit:0,exclud:[1,6,12],exclus:[0,1,3,6,18],execut:[2,3,4,5,13],executing_eagerli:[3,4],exemplifi:13,exercis:[5,15,17],exhaust:6,exhibit:[0,5,6,8],exist:[0,1,2,3,5,6,7,8,9,13,16,20],exit:[5,16],exp:[0,1,2,5,6,7,8,10,11,12,13,18],exp_term:1,expand:[5,7,11,13],expans:[0,3,5,8,10,12,13],expect:[0,1,5,6,7,11,12,13,15],expectation_value_of_h_wrt_p:18,expens:[6,10,13],experi:[0,1,6,8,13,15],experiment:[0,3,4,6,9,14,18],experimental_get_tracing_count:[3,4],expert:[1,9],explain:[0,6,9,10,11,13],explained_variance_ratio_:11,explanatori:0,explicit:[0,3,6,13,16],explicitli:[0,4],explod:1,exploit:[0,3,12,13],explor:[1,4,6,8,13,15],expon:1,exponenti:[0,1,5,6,10,13,18],export_graphviz:9,export_text:9,exporttext:9,expos:15,express:[0,2,3,5,6,7,10,12,13,16,18],exptmean:18,exptvari:18,extend:[2,5,7,11,13,15],extens:[0,12,15],extent:[0,1,6,20],extern:[3,6,9],extra:[1,3,5],extract:[0,3,5,6,7,8,11,13,16],extrapol:0,extrem:[0,1,4,5,6,7,8,9,13,16],extremum:13,extrins:11,ey:[0,5,6,13,14,16],f11:0,f12:0,f13:0,f1:13,f1_grad:13,f1d:13,f2:13,f2_grad_x1:13,f2_grad_x1_analyt:13,f2_grad_x2:13,f2_grad_x2_analyt:13,f3:13,f3_grad:13,f3_grad_analyt:13,f4:13,f4_grad:13,f4_grad_analyt:13,f5:13,f5_grad:13,f6:13,f6_for:13,f6_for_grad:13,f6_grad_analyt:13,f6_while:13,f6_while_grad:13,f6d7a289d493:[],f7:13,f7_grad:13,f7_grad_analyt:13,f8:13,f8_grad:13,f9:[0,13],f9_altern:13,f9_alternative_grad:13,f9_grad:13,f:[0,1,2,3,4,5,6,7,8,10,12,13,14,16,18,19],f_0:[3,10],f_1:[10,13],f_2:[12,13],f_3:12,f_:10,f_d:18,f_grad:13,f_grad_analyt:13,f_i:[6,12],f_m:[3,10],f_n:3,f_raw:2,f_vec:2,f_wrap:2,face:13,facecolor:[6,8,18],facil:[0,15],facilit:12,fact:[0,1,3,5,9,11,12,13],factor:[0,1,3,5,6,9,10,11,13,16,18],factori:13,fade:6,fafab0:[9,10],fail:[0,6,7,8,11,13,19],failur:7,fairli:[1,2,18],fake:4,fake_loss:4,fake_output:4,fall:[8,9,17],fals:[0,1,2,3,4,5,6,7,9,10,13,14,16],famili:[0,7,8,18],familiar:[0,3,5,6,8,15,16,18],famou:[6,12],far:[0,3,4,5,6,8,11,12,13,14],fashion:[0,9,10],fast:[1,3,6,10,12,13,15,18],faster:[1,11,13],fastest:[13,16],favor:7,favorit:18,fc:3,fdf8a5d7c717:2,fdfcc778e1f8:4,fe5b9d300cc0:6,featur:[0,1,3,5,6,7,8,10,11,12,13,15,18],feature_nam:[0,1,7,9],feautur:9,fed:1,feed:[0,2,3,11,15,17],feed_forward:1,feed_forward_out:1,feed_forward_train:1,feedback:4,feeddorward:4,feedforward:[1,4,12],feel:[0,5,6,11,13,15,19],feet:0,fetch:6,fetch_california_h:[],fetch_openml:[],few:[1,3,4,5,9,18],fewer:[0,9,11],ffnn:[1,12],field:[0,3,6,12,15],fifth:[0,6],fig:[0,1,2,3,4,6,7,12,13,14],fig_id:[0,6,7,9],figaxi:18,figsiz:[0,1,2,3,4,6,7,8,9,10],figur:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15],figure_id:[0,6,7,9],figurefil:[0,6,7,9],file:[0,1,2,4,5,6,7,9],file_prefix:4,filenam:[],filenotfounderror:[],fileout:[],filepath_or_buff:0,fill:[5,9],filter:[3,4],filtered_flat_arg:[3,4],filtered_tb:[3,4],financ:0,find:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,18],find_top_boxed_arg:2,fine:[0,14],finish:2,finit:[3,5,6,12,13,18],first:[0,1,2,3,5,6,7,8,9,10,11,13,14,16,17,18,20],firsteigvector:11,fit:[1,3,4,5,6,7,8,9,11,12,13,18],fit_beta:6,fit_intercept:[0,5,6],fit_mod:9,fit_transform:[0,6,8,9,11],fiti:0,five:[0,9],fix:[0,3,4,6,10,11,12,13],fixedformatt:6,fixedloc:6,fkkt:5,flag:4,flat:[12,13],flatten:[1,3,4,5,16],flexibl:[1,6,8,10,12],float32:[4,9],float64:[4,16],flop:[5,16],flow:[1,4,12],fluctuat:5,fly:11,flyvbjerg:[],fm:0,fma:[],fmax:3,fmesh:13,fn:[3,4],focu:[0,3,4,5,6,15,20],focus:[1,6,7,16],fold:[6,9],folder:[0,4,6],follow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],font:[0,7,18],fontdict:18,fontsiz:[1,6,8,9,10,18],fontweight:1,footprint:3,foral:8,forc:[0,5,6,10,11],forcast:4,forecast:[4,12],forelesningsvideo:17,forest:[0,1,9,15,17],forget:11,form:[0,3,4,5,6,7,8,9,11,12,13,15,16,18],formal:[3,4,14,18],format:[0,1,2,3,4,6,7,8,9,10,11,15,18,20],format_data:4,formatstrformatt:[6,13],formul:[4,6,11,14],formula:[3,13,18],forth:[4,12],fortran2003:15,fortran90:18,fortran:[0,15,16],fortun:[0,11],forward:[0,3,6,15,16,17],forward_backward:[3,4],found:[1,2,4,5,6,12,13],foundat:15,four:[4,5,6,8,12,16,17],fourier:0,fourierdef1:3,fourierdef2:3,fourierseriessign:3,fourth:12,fr:5,frac:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18],fractal:[],fraction:9,frame:7,framework:[1,8,10,18],frank:[5,11],frankefunct:[5,6,11],free:[0,6,11,13,15,16,18,19,20],freecodecamp:15,freedom:5,freeli:0,frequenc:[3,6,7,18],frequent:[0,8,9,13],frequentist:15,fresh:10,frida:19,fridai:17,friedman:[6,17,20],friendli:4,frog:3,from:[0,1,2,3,4,6,7,8,9,11,13,14,15,16,17,18,19,20],from_cod:9,from_logit:[3,4],from_tensor_slic:4,fromnumer:2,front:[0,4,5],fstream:[],fulfil:[2,5,12],full:[0,1,3,5,7,9,10,13,18],full_matric:5,fulli:[3,6,12,17,18],fun:[2,13,15],fun_nam:[],func:[0,2],functionali:11,fundament:[0,6,15],funtion:2,further:[2,9],furthermor:[0,3,5,6,7,11,12,13,15],futur:[0,4,8,9],futurewarn:[],fx:5,fy:[17,19],g0:2,g42mrgv128v34gnnhxwk9nrc0000gp:[],g:[0,1,2,3,4,5,6,8,9,10,11,13,18],g_0:2,g_1:[2,10],g_2:[2,10],g_:[2,9,10],g_analyt:2,g_dnn_ag:2,g_euler:2,g_i:2,g_m:[3,10],g_n:3,g_re:2,g_t:2,g_t_d2t:2,g_t_d2x:2,g_t_dt:2,g_t_hessian:2,g_t_hessian_func:2,g_t_jacobian:2,g_t_jacobian_func:2,g_trial:2,g_trial_deep:2,g_vec:2,gain:[1,5,9,10,13],galleri:0,game:4,gamma1:8,gamma2:8,gamma:[0,2,8,9,10,11,13],gamma_0:10,gamma_1:10,gamma_1x:10,gamma_:0,gamma_i:[0,8,18],gamma_j:13,gamma_k:13,gamma_m:10,gamma_x:0,gap:[6,8],gate:[4,12],gather:[0,1,12],gaug:12,gaussbacksub:16,gaussian:[4,5,6,8,14,18],gaussian_point:14,gaussian_rbf:8,gave:13,gbc:17,gca:[2,6,8,13],gd:1,gd_clf:10,gdclassiffiercgain:10,gdclassiffierconfus:10,gdclassiffierroc:10,gdm:13,gdregress:10,ge:[1,5,7,18],gemv:5,gen:[],gen_loss:4,gen_tap:4,gender:0,genener:4,gener:[0,1,2,3,5,6,8,10,11,12,13,14,16,18,20],generallay:12,generate_and_save_imag:4,generate_imag:4,generate_latent_point:4,generate_simple_clustering_dataset:14,generated_imag:4,generator_loss:4,generator_loss_list:4,generator_model:4,generator_optim:4,genexpr:[],genom:15,geodes:11,geometr:[0,13],geometri:5,georg:20,geotif:6,geq:[2,5,8,9,13],geron:[0,17,20],get:[0,1,2,3,4,5,6,7,9,10,11,13,15,16,18],get_dummi:9,get_loc:[],get_next_color:[],get_paramet:2,get_split:9,get_yaxi:8,get_yticklabel:6,getsolutionslic:5,getval:[],gg:[],gibb:15,gif:4,gini:10,gini_index:9,git:[0,15],github:[0,3,4,6,14,15,17,20],gitlab:[0,15],give:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,17,18,20],given:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],global:[6,7,13],glorot:1,gmail:[],go:[0,1,3,5,6,8,9,11,12,13],goal:[0,7,9],goe:[0,1,2,5,6,13,14,16],golden:13,gone:5,gong:1,good:[1,3,4,5,6,9,10,11,13,15,17,18,20],goodfellow:[4,17,20],googl:[1,3,4,14,15],got:[1,6],gov:6,gp:20,gpu:1,grad:[2,13],grad_analyt:13,grade:17,gradient:[0,3,4,7,8,9,12,15,17],gradient_desc:3,gradientboostingclassifi:10,gradientboostingregressor:10,gradients_of_discrimin:4,gradients_of_gener:4,gradienttap:4,gradual:[1,14],grai:[4,6],graph:[1,9,11,12,13],graph_from_dot_data:9,graph_funct:[3,4],graphic:[0,1,9],grasp:0,gray_r:[1,3],grayscal:3,great:[5,13],greater:[1,7,18],greatli:13,greedi:9,green:[0,3,9,18],grei:4,grid:[1,3,6,7,8,12,18],grossli:13,ground:0,group:[0,6,7,9,14,15,17],groupbi:0,grow:[1,3,9,10],growth:0,gru:4,guarante:[0,3,4,13,18],guess:[1,4,10,13,14],guestrin:10,guid:1,guilherm:19,h1:2,h21:17,h:[0,1,5,6,8,13,18,20],h_1:[2,13],h_2:[2,13],h_:[0,13],h_m:10,ha:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],habit:0,had:[0,1,6,7,13],hadamard:[1,12],half:[1,8,9],halv:10,hand:[0,1,2,3,5,11,12,13,15,16,17,18,20],handi:3,handl:[0,1,2,5,9,11,15],handle_unknown:9,handsid:12,handwrit:12,handwritten:[1,5],happen:[1,2,3,4,5,6,10,13,18],hard:[1,7,8,10,13],hardcopi:15,harder:[0,1],harmon:3,hasn:1,hassl:[0,15],hast:15,hasti:[0,6,17,20],hat:[1,5,6,7,9,10,11,12,13,16],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],haven:1,he:7,head:[0,4,10,18],header:0,heads_proba:10,health:0,hear:[0,13],heart:[0,7],heatmap:[0,1,3,7],heavili:0,heavisid:1,height:[1,3,6],held:13,help:[0,1,4,12,13],helper:[4,14],henc:[0,5,6,8,9,10,12,13],her:7,here:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],hereaft:[0,8,12],hermitian:16,hessenberg:16,hessian:[0,2,5,13],heterogen:[9,10],hi:7,hidden:[1,3,4,12],hidden_bia:1,hidden_bias_gradi:1,hidden_layer_s:[0,1],hidden_neuron:4,hidden_weight:1,hidden_weights_gradi:1,hierarch:5,high:[0,1,2,3,4,5,6,9,10,11,13,14,15,16],higher:[0,1,3,5,6,8,13],highest:[1,2],highli:[0,3,4,10,15,16,20],highwai:0,hing:8,hint:13,hip:15,hire:0,hist:[4,6,7,18],histogram:[0,6,7,18],histor:[7,11],histori:[3,4,12],histplot:[],hit:[],hitherto:5,hjorth:19,hobbi:18,hoc:5,hoff:20,hold:[1,3,6,13,14],holder:0,home:0,homework:[6,13],homogen:[1,3,9,10,13],honchar:2,hopefulli:[0,11,18],horizont:11,hors:[3,7],hot:[1,9],hour:[1,15,17,18,19],house_pric:[],how:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],howev:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],hs:[],hspace:[0,4,8,10,18],hstack:1,htf:17,html:[7,11,15,17,20],http:[3,4,6,7,11,13,14,15,16,17,20],huang:0,huber:0,huge:[1,3,4,15],human:[0,1,3,6,9,12],humid:9,hundr:1,hungri:1,hybrid:17,hydrogen:0,hyperbol:[1,4,12],hyperparam:8,hyperparamet:[3,4,5,6,9,13],hyperplan:11,i0:0,i1:[0,6,8,12],i2:[0,8,12],i3:[0,12],i5:0,i:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19],i_1:[5,6],i_2:[5,6],i_:13,ian:20,ic:1,id:[7,13],ida:19,idea:[0,1,2,3,4,6,9,10,12,13,16],ideal:[0,2,6,8,13,18],idem:6,ident:[5,6,12,13,16],identical:5,identifi:[0,1,7,9,11,12,13,14],idum:[],ieor:18,ifi:20,ifs:15,ignor:[0,1,3,9],ii:[16,18],iii:16,ij:[0,1,3,6,8,12,14,16,18],ik:[0,16],illustr:[5,7,10,12,13,14,15],im:6,imag:[1,3,4,6,9,11,12,14,20],image_at_epoch_:4,image_batch:4,image_height:3,image_path:[0,6,7,9],image_width:3,imageio:6,images_from_seed_imag:4,imagin:1,immedi:[0,3,4,6,15],implement:[0,2,3,4,5,6,8,9,10,11,12,13,14,18],impli:[3,5,6,7,13,16],implicit:3,implicitli:[11,18],importantli:3,impos:[0,6,11,12],imposs:[0,5],impress:[0,12],improv:[0,4,5,9,10,11,13],impur:9,imread:6,imshow:[1,3,4,6],in3050:20,in4080:20,in4300:20,in5400:[3,20],in_out_neuron:4,inaccur:13,inacio:19,inact:12,inadequ:0,inch:6,includ:[0,1,2,3,4,5,6,7,11,12,15,18,19,20],include_bia:[6,9],incom:12,incorrect:1,incoveni:8,increas:[0,1,3,4,5,6,7,8,9,11,12,13,18],increasingli:18,ind:6,inde:[0,2,4,5,6],indefinit:4,indent:[],indentationerror:[],independ:[0,5,6,7,8,12,13,18],index:[0,1,3,4,10,14,15,16,18,20],index_col:0,index_of:[],indic:[0,1,3,4,5,6,9,10,11,13],indispens:6,individu:[1,6,7,10,12,18],indu:0,indx1:2,indx2:2,indx3:2,indx:16,ineffici:[3,13],inequ:8,inequaltii:13,inertia:13,inf1000:15,inf1100:15,inf1100l:15,inf1110:15,inf3000:20,inf4490:20,inf5860:20,infeas:9,infer:[0,1,4,6,20],infer_nrow:0,inferenc:1,infil:[0,6,7,9],infin:[5,6,7,11],infinit:3,infinitesim:18,influenc:[6,10],influenti:1,inform:[0,1,3,4,6,9,11,12,13,14,16,20],infti:[3,6,13,18],ingeni:13,ingrad:2,ingredi:[0,9],inher:6,inherit:16,initi:[0,1,2,6,10,13,14,16,18],initial_epoch:[3,4],initialis:[],initialize_root:[],inject:14,inlin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],inner:13,innov:20,inp:4,inplac:13,input:[0,1,3,4,5,6,7,8,9,10,12,13,14,18],input_dim:1,input_shap:[3,4],inputs:1,inputs_shuffl:[0,1],insert:[3,5,6,8,10,18],insid:[0,4,7],insight:[0,1,5,15,20],insist:[6,13],inspir:[0,1,12,20],instabl:2,instal:[0,1,5,6,9],instanc:[0,1,2,4,6,9,11,13],instanti:10,instead:[0,1,2,3,4,5,6,8,9,11,13,14,16,18],institut:1,instruct:[0,1],int32:10,int64:[],int_0:18,int_:[3,6,18],int_a:18,intak:0,integ:[1,2,13,14,16,18],integer_vector:1,integr:[3,6,18],intellig:[0,14,20],intend:10,intens:1,intention:14,interact:[0,6,9,12,15],intercept:[0,6,8,11,13],intercept_:[0,6,8,9,13],interchang:[5,12,16],interconnect:1,interest:[0,1,2,3,4,5,6,7,8,9,12,15,17,18],interfac:[0,1,16],interior:[0,9],intermedi:16,intern:[1,10,12],interpol:[1,3,4,6,12],interpr:5,interpret:[0,1,6,9,10,12,13,16,18],interv:[0,3,5,6,7,13,18],intial:13,intract:[0,4],intrins:[3,11,16,18],intro:[15,20],introduc:[0,1,5,6,8,10,12,13,16,18],introduct:[1,2,4,13,17,20],introductori:[0,4,16,20],intuit:[0,5,6,8,12,13],inv:[0,5,13],invalid:1,invalu:[0,13,15],invari:1,invd:5,inver:8,invers:[0,3,6,13],invers_period:[],inverse_transform:8,invert:[0,5,7,10],invok:[0,8],involv:[0,2,6,7,11,12],io:[0,15,17,20],iomanip:[],iostream:[],ip:[0,8,18],ipca:11,ipykernel_42331:[],ipykernel_42376:[],ipykernel_42449:[],ipykernel_42456:[],ipykernel_42530:[],ipykernel_42541:[],ipykernel_42553:[],ipykernel_42573:[],ipykernel_42580:[],ipykernel_42586:[],ipykernel_47411:[],ipykernel_47448:[],ipykernel_47647:[],ipykernel_47724:[],ipykernel_47735:[],ipynb:15,ipython:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15],iq:6,iri:[8,9],irreduc:6,irrelev:5,irrespect:0,is_integ:[],isbox:[2,13],iscomplexobj:[],isinst:[2,13],isn:5,isnul:0,isomap:11,issu:[1,3,4,9,14,16],it_arrai:13,item:[0,13],items:16,iter:[1,2,3,4,6,7,8,11,13,14,18],itr:5,its:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],itself:[5,6,12,18],ix:[],j1:16,j:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18,20],j_:6,j_lasso_sk:6,j_ridge_sk:6,j_sk:6,jackknavg:[],jackknif:[6,15],jackknstd:[],jackknvar:[],jackknvec:[],jacobian:[2,13],jacobian_shap:2,jargon:[],jason:4,jax:[3,4,14],jensen:19,jerom:20,ji:[12,16],jj:[0,5,6],jk:[0,1,6,12,16],jl:0,jm:16,joao:19,joaogca:19,job:[2,8,10],join:[0,4,6,7,9],joint:[4,5],journal:[],judg:13,judgement:6,julia:[15,16],jump:18,junk:4,jupyt:[0,15,20],just:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18],justif:0,justifi:[3,10],jy:[],k0:7,k1:7,k:[0,1,3,5,6,7,8,9,10,11,12,13,14,15,16,18],kaggl:6,kappa_d:18,karim:[],karlsen:[],karush:8,keep:[0,1,4,5,6,11,13,14,16],keepdim:[1,6,10,16],kei:[0,1,3,6,12,20],kept:[4,6,14],kera:[0,4,15],kernel:[0,1,3,15],kernel_regular:[1,3],kernel_s:4,kernelpca:11,kev:0,kevin:20,keyboardinterrupt:[2,3,4],keyerror:[],keyword:[6,13,16],kfold:6,kg:1,ki:16,kick:[1,13],kiener:2,kilomet:6,kind:[0,2,3,4,8,12,13,14],kj:[6,12,16],kjm:15,kkt:[5,8],kktsolver:5,kl:18,km:12,kmean:14,kmeanspoint:14,kn_k:14,know:[0,1,2,5,6,8,13,15],knowledg:[0,15],known:[1,3,4,5,6,7,8,9,12,16,18,20],kondev:0,kp:18,kpca:11,kroneck:14,kuhn:8,kwarg:[0,2,3,4,13],kwd:[0,3,4],kwown:0,l0:7,l1:[0,1,3,5,7],l1_l2:[1,3],l1regl:5,l1regls_mosek2:5,l1regls_mosek:5,l2:[1,3],l:[0,1,2,3,5,6,7,8,10,11,12,13,16,18],l_1:7,l_2:[7,13],l_:16,l_j:12,la:13,la_i:12,la_k:12,lab:[15,17],label:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,18],label_prob:13,labelencod:[7,10],labels:[6,8,9],labels_shuffl:[0,1],laboratori:17,lack:0,lagari:2,lagrang:[8,11],lambda:[0,1,2,3,5,6,7,8,10,12,13,18],lambda_0:11,lambda_1:[5,8,11],lambda_2:[8,11],lambda_:11,lambda_i:[8,11],lambda_iy_i:8,lambda_jy_iy_j:8,lambda_k:8,lambda_n:[5,8],lamda:1,lamdbda:5,land:[0,8],landmark:8,landscap:13,langl:[0,6,11,18],languag:[0,1,4,8,15,16,20],lapack:[5,16],laplac:5,laptop:15,larg:[0,1,2,4,5,6,8,9,10,11,13,15,16,18,20],larger:[0,3,5,6,8,10,11,13,18],largest:[4,8,11],lasso:[0,7,15,17],lasso_sk:6,last:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,17,18],latent:4,latent_dim:4,latent_point:4,latent_space_value_rang:4,later:[0,1,4,6,7,8,12,13,14,15],latest:4,latest_checkpoint:4,latter:[0,3,5,6,7,8,11,13,16,17,18],lattic:12,law:0,layer:[0,4,13],lbfg:[7,9,10,11],lcc:[5,6],lda:11,ldot:[0,6,11],le:[5,7,10,13,18],lead:[0,1,3,5,6,7,8,9,10,11,12,13,16,18],leaf:9,leaki:1,leakyrelu:4,lear:13,learn:[3,4,5,6,7,8,9,10,12,16,17,20],learnabl:3,learner:10,learning_r:[3,8,10],learning_rate_init:[0,1],learning_schedul:13,least:[0,2,7,8,10,11,15,16,17,18],leat:13,leav:[0,1,3,5,6,9,11],lectur:[0,1,5,10,11,12,13,15,16,17,20],lecturenot:[15,20],lecturenovember11:[],lecturenovember12:[],lecturenovember19:[],lecturenovember25:[],lecturenovember26:[],lecturenovember4:[],lecturenovember5:[],lectureoctober14:17,lectureoctober15:17,lectureoctober1:[],lectureoctober21:[],lectureoctober22:[],lectureoctober28:[],lectureoctober29:[],lectureoctober7:[],lectureoctober8:[],lectureseptember10:[],lectureseptember16firstpart:[],lectureseptember16secondpart:[],lectureseptember17:[],lectureseptember23:[],lectureseptember24:[],lectureseptember2:[],lectureseptember30:[],lectureseptember3:[],lectureseptember9:[],lecturethursdayaugust26:[],lecturethursdayaugust27:[],left:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18],leftarrow:[8,12],legend:[0,2,3,4,5,6,7,8,9,10,13],len:[0,1,2,3,4,5,6,8,9,10,11,12,16],len_index:0,length:[0,1,2,3,4,8,9,13,15],length_of_sequ:4,leq:[0,5,7,8,13,14,18],less:[0,1,3,4,5,6,8,9,13,18],lessen:1,let:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],letter:[0,16,18],level:[0,1,5,6,9,15,16,17],li:[8,11],lib:[0,1,2,3,4,6,7,8,11,13,14],liblinear:[8,10],librari:[0,1,2,3,4,5,6,9,10,11,16,18,20],licens:[0,1,15],lie:[0,6,11,18],life:[0,1,8,12],lifetim:13,like:[0,1,2,3,4,5,6,7,9,10,11,12,13,15,16,18],likelihood:[0,1,5,9,13],lim_:18,limit:[0,5,6,7,8,11,12,16],lin_clf:8,lin_model:0,lin_reg:9,linalg:[0,2,5,6,8,11,13,16,18],line1:8,line2:8,line2d:13,line3:8,line:[0,1,3,6,8,11,13],linear:[1,3,5,6,7,9,10,11,12,15,17,18],linear_model:[0,5,6,7,8,9,10,11,13],linear_regress:6,linearli:5,linearloc:[6,13],linearregress:[0,6,7,9],linearsvc:8,liner:[1,3],linerar:10,linewidth:[0,2,4,6,8,9,10],link:[0,4,9,12,15],linlag:5,linpack:16,linreg:0,linspac:[0,2,3,4,6,8,9,10,13,16,18],linu:4,linuek:[],linux:[0,1,15],liquid:0,list:[0,1,2,3,4,5,9,15],listcomp:2,listedcolormap:[9,10],literatur:[1,7,14,20],littl:[1,3,9,12],live:8,ll:[0,18],lle:0,lloyd:[4,14],lmb:[2,5,6],lmbd:[0,1,3],lmbd_val:[0,1,3],lmbda:13,ln:[1,13],lo:5,load:[0,1,4,6,7,9,10],load_boston:0,load_breast_canc:[1,7,9,10,11],load_data:[3,4],load_digit:[1,3],load_iri:[8,9],loc:[0,3,6,7,8,9,10],local:[0,1,3,7,12,13],locat:[2,3,8],lock:[3,4],log10:[5,6],log:[0,1,2,4,5,6,7,9,10,11,13,16],log_:0,log_clf:10,logarithm:[0,5,7,16],logic:[0,1,9],logist:[0,1,2,8,9,10,11,12,15,17],logistic_predict:13,logisticregress:[7,9,10,11],logit:7,logreg:[7,9,10,11],logspac:[0,1,3,5,6],longer:[2,3,8,10,14,16,18],loocv:6,look:[0,1,2,3,4,5,6,7,8,9,10,11,13,16,18],loop:[1,4,6,10,12,14,15,16],lose:1,loss:[0,1,3,4,5,6,7,8,10,11,13,16],loss_fil:4,lossfil:4,lost:4,lot:[0,1,4,6],low:[0,6,9,10,11],lower:[0,1,3,6,9,10,16],lowercas:16,lowest:[9,13,18],lr:[1,3,4,10],lstat:0,lstm:4,lstm_2layer:4,lstsq:0,lt:6,lu:[0,5],lubksb:16,luckili:2,ludcmp:16,lux:16,lvert:1,lw:0,m:[0,1,2,3,5,6,8,9,10,11,12,13,16,17,18,19,20],m_1:14,m_:[9,12],m_h:0,m_k:14,m_l:12,m_n:0,m_p:0,m_t:13,ma:11,mac:[3,4,14],machin:[1,3,4,5,6,7,9,10,11,12,14,16,17,20],machinelearn:[6,15,17,20],mackai:20,made:[0,1,3,4,5,6,7,9,11,12],mae:0,magic:4,magnitud:[1,6,7,13],mai:[0,1,2,3,5,6,7,8,9,11,12,13,15,16,18],mail:17,main:[0,1,3,4,5,6,7,9,16,20],mainli:[0,5,6,7,9],maintain:6,major:[1,6,9,10,13,16],make:[1,2,3,4,5,6,7,8,11,12,13,15,16,18,20],make_axes_locat:6,make_moon:[8,9,10],make_pipelin:[0,6,10],make_vjp:[2,13],makedir:[0,6,7,9],makeplot:0,malcondit:16,malign:[1,7,9],mammographi:5,manag:[0,2,3,15],mani:[0,1,3,4,5,6,7,8,9,11,13,14,15,16,18,20],manifold:11,manner:3,manual:6,map:[0,1,2,6,7,8,11,12,14,18],margin:[0,5,8],mari:19,marit:0,marker:[0,7,16],markov:15,marsaglia:18,mask:[],mass:[0,1,5,13],massag:0,masses2016:0,masses2016ol:0,masses2016tre:0,masseval2016:0,master:[6,17],mat1100:15,mat1110:15,mat1120:15,mat3155:[],mat4155:[],mat:15,match:[0,1,4,5,13,14],materi:[4,5,7,13,16],math:[3,7,12,13,16,18,20],mathbb:[0,4,5,6,7,8,11,12,13,14,16,18],mathbf:[0,5,6,7,8,13,16],mathcal:[1,5,6,7,13],matheemat:3,mathemat:[0,6,11,12,13,15,16,17,18,20],mathrm:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,18],matmul:[1,2,5],matmul_adjoint_1:2,matmul_vjp_0:2,matmul_vjp_1:2,matnat:[17,19,20],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],matplotlibdeprecationwarn:[6,13],matric:[0,1,3,4,6,7,8,11,13,15],matrix:[0,2,3,4,6,7,8,10,13,18],matshow:1,matter:[2,3,13],max:[0,1,2,3,4,9,10,12,13],max_depth:[0,9,10],max_diff1:2,max_diff2:2,max_diff:2,max_it:[0,1,7,8,11,13],max_iter:14,max_leaf_nod:10,max_queue_s:[3,4],max_sampl:10,maxdegre:[0,6,10],maxdepth:10,maxim:[1,4,5,7,8,11],maximum:[0,1,2,3,5,7,8,9,10,13,14],maxpolydegre:[5,6],maxpooling2d:3,mbox:[5,6],mc:[],mcculloch:12,mcint:[],mcintsqr2:[],md:11,mdoel:4,mean:[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,18],mean_absolute_error:0,mean_divisor:14,mean_i:18,mean_matrix:14,mean_squared_error:[0,4,6,7,10],mean_squared_log_error:0,mean_vector:14,mean_x:18,meaning:[0,4,7],meansquarederror:0,meant:[2,3,7,10,13],meantempvec:[],meanvec:[],measur:[0,1,2,5,6,9,11,12,14,18],mechan:[0,4,18],median:0,medicin:12,medium:[4,8,13],medv:0,meet:[0,19],mehta:0,memori:[3,4,11,12,13,16],mention:[0,12,13,18],mere:0,mersienn:[],meshgrid:[2,5,6,8,9,10,11],messag:[5,13],messi:2,met:[0,3,8],metadata:2,meteorolog:9,meter:6,method:[0,1,2,3,4,5,7,8,11,12,14,15,16,17,18,20],metion:6,metric:[0,1,3,6,7,9,10,14],metropoli:15,mev:[0,18],mgd:13,mglearn:15,mgrid:13,mhjensen:[1,2,3,4,6,7,8,11,14],mi:10,microsoft:20,mid:1,midel:4,midpoint:9,might:[0,1,2,4,6,9,13],mild:9,miller:[],millimet:6,million:0,mimic:12,min:[0,2,5,8,9],min_:[0,2,5,14],min_samples_leaf:9,mind:[0,6,13],mindboard:4,mine:15,mini:[1,11,12,13],minibatch:[1,11,13],minibathc:13,miniforge3:[0,1,2,3,4,6,7,8,11,13,14],minim:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],minima:[0,1,7,13],minimum:[0,1,2,6,8,9,11,13],minmaxscal:0,minor:[6,13,18],minst:1,minu:7,mirror:9,misc:6,misclassif:[8,9,10],misclassifi:[8,10],miser:0,mismatch:1,miss:[0,10],mistak:4,mit:20,mix:[1,2],mixtur:13,mk:[9,16],mkdir:[0,6,7,9],ml:[0,1,10,13,16],mlab:18,mle:[5,7],mline:[],mlir:[],mlir_graph_optimization_pass:[],mlp:1,mlpclassifi:1,mlpregressor:0,mm:16,mn:[12,18,20],mnist:[1,11],mod:18,mode:17,model:[2,3,5,7,8,9,10,11,13,14,15,18,20],model_select:[0,1,3,5,6,7,9,10,11],moder:10,modern:[0,6,7,15],modif:[2,12,13],modifi:[0,1,3,5,7,8,10,12,13],modul:[0,2,3,4,5,6,7,8,9,10,11,13,16],modular:18,modulenotfounderror:[5,7,8,9],modulo:18,moe:[5,11],moment:[5,6,13,18],monitor:13,monoton:[5,12,18],mont:[0,6,15,18,20],montecarlocycl:[],moor:[5,6],more:[0,1,2,4,5,7,8,9,10,11,12,13,14,15,17,18],moreov:[0,3],morten:19,mortenimac:[],mosek:5,most:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18],mostli:[1,11],motion:[0,13],motiv:[1,4],move:[0,4,5,6,7,9,12,13,14,18],mp4:17,mpl:[0,7],mpl_toolkit:[2,6,13],mplot3d:[2,6,13],mplregressor:1,mse:[0,4,5,6,9,10],mse_simpletre:10,mselassopredict:5,mselassotrain:5,mseownridgepredict:6,msepredict:5,mseridgepredict:[5,6],msetrain:5,msg:[],msle:0,mt19937_64:[],mt:[7,12],mu0:18,mu1:18,mu2:18,mu:[0,6,11,13,18],mu_:[6,18],mu_i:6,mu_n:11,mu_x:18,much:[0,1,2,3,4,5,6,8,9,10,11,12,13,16,18],mul:5,multi:[0,1,3,7,15],multiclass:[1,7],multidimension:[11,12],multilay:1,multinomi:7,multipl:[2,4,5,6,7,12,13,18],multipli:[3,5,6,11,13,16,18],multiplum:8,multivari:[0,2,10,11,15,18],multivariate_norm:[11,14],murphi:[11,20],must:[0,1,2,5,6,8,10,12,13,14,18],mutat:7,mutual:[1,3,6,13],mx_:18,myenv:[0,1,2,3,4,6,7,8,11,13,14],myriad:[0,15],mz1:18,mz2:18,n1:16,n2:16,n:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,18],n_0:[12,18],n_:[1,2,3,8,12,18],n_b:[],n_boostrap:[6,10],n_bootstrap:6,n_categori:[1,3],n_cluster:14,n_compon:11,n_epoch:13,n_estim:10,n_examples_to_gener:4,n_featur:1,n_filter:3,n_hidden:2,n_hidden_neuron:[0,1],n_i:18,n_input:[0,1,3],n_instanc:9,n_iter_i:[7,11],n_job:10,n_k:14,n_l:[12,18],n_layer:1,n_m:9,n_neuron:1,n_neurons_connect:3,n_neurons_layer1:1,n_neurons_layer2:1,n_point:14,n_sampl:[6,8,9,10,14],n_split:6,n_step:4,n_t:2,n_x:2,nabla:[1,13],nabla_:[2,13],nabla_w:13,nag:13,naimi:0,naiv:7,naive_kmean:14,nall:0,name:[0,1,3,4,5,6,7,8,9,10,12,13,14,15,16,18,19],nameerror:[6,10],namespac:[],narrow:13,nary_f:[2,13],nary_op_arg:[2,13],nary_op_kwarg:[2,13],nary_oper:[2,13],nation:[1,5],nativ:15,natur:[0,1,4,8,9,12,13,18,20],navier:12,nb:18,nb_:16,nboot:[],nd:14,ndarrai:[2,6],ndim:2,ne:[9,10,16,18],nearest:[1,3,6,11],nearli:13,neccesari:6,necess:2,necessari:[0,1,3,4,8,14],necessarili:[0,4,11,18],necesserali:5,neck:7,need:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,16,18],neg:[0,1,3,5,6,7,10,13,16,18],neg_mean_squared_error:6,neglect:18,neglig:18,neighbor:[3,6,11],neither:[4,13],neq:[13,14,18],nervou:12,nest:[2,9,12],nesterov:13,net:[2,4,12],netlib:16,network:[0,9,13,15,17,20],neural:[0,7,13,15,17,20],neural_network:[0,1,2],neuralnetwork:1,neuron:[1,2,3,4,12],neutral:0,neutron:0,never:[1,3,4,6,9,18],new_box:[2,13],new_root:[2,13],new_trac:[2,13],new_tracing_count:[3,4],newaxi:[0,3,6,9],newli:0,newton:[1,7,8,13,18],next:[0,1,2,3,4,5,6,8,9,13,14],next_guess:13,next_input:4,ng:1,ngini:[],ni:14,nian:[],nice:[0,1,5,11],nichola:[],nicholaskarlsen1102:[],niter:13,nitric:0,nlambda:[5,6],nlevel:[],nm:18,nm_n:0,nmse:6,nn:[2,5,6,12,16],nn_model:1,nnmin:2,node:[1,2,3,9,10,12],node_constructor:2,nois:[0,4,5,6,8,9,10,13],noise_dimens:4,noisi:[1,6],non:[0,1,3,4,5,6,7,9,10,11,12,13,14,16,18],none:[0,1,2,3,4,5,9,10,13,18],nonlinear:[3,6,8,9,11,12],nonneg:[6,9,13],nonparametr:6,nonsens:18,nonsingular:16,nonumb:[3,7,8,13,16],nor:[1,4,13],norm:[0,1,5,6,8,11,13],normal:[3,4,5,6,7,8,9,10,11,12,13,15,16,18],normali:16,normalize_kwarg:[],norwai:6,notat:[0,2,5,6,13,14,18],note:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,20],notebook:[0,1,3,9,15],noth:[1,2,5,8,12,14,18],notic:[4,5,12,13,16,18],notimplementederror:[],notion:3,notrace_primit:[],novel:[3,6,10],novemb:1,now:[0,2,4,5,6,7,8,10,11,12,13,14,16,18],nowadai:[0,1,3,9,15],nox:0,np:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18],npr:2,nsampl:6,nspin:[],nt:2,nthi:0,ntrained_model:6,nu:18,nuclear:5,nuclei:[0,18],nucleon:0,nucleu:0,num:4,num_coordin:2,num_hidden_neuron:2,num_it:2,num_neuron:2,num_neurons_hidden:2,num_output:[3,4],num_point:2,num_tre:10,num_valu:2,number:[1,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19],numberid:7,numberparamet:3,numer:[0,5,6,9,10,11,12,13,15,16,20],numpi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18],numpy_vjp:2,numpy_wrapp:2,nunmpi:5,nvalu:[],nx:2,nx_test:6,nx_train:6,nx_train_mean:6,ny:18,ny_pr:6,ny_train:6,ny_train_mean:6,o:[0,6,7,8,9,11,16,20],obei:[6,11,13],object:[0,1,2,4,5,6,8,10,13,16],objsens:5,obliqu:5,observ:[1,3,5,6,7,8,9,10,11,12,13,14,18],obtain:[0,1,5,6,7,8,9,10,12,13,14,16,18],obviou:[5,6,11,18],obviouli:0,obvious:[0,4,5,6,16],oc:5,occupi:0,occur:[0,6,8,9,16,18],od:0,odd:[0,3,7],odenum:2,odesi:2,oen:0,off:[1,3,4,5,9,13,18],offer:[6,11,15,16,17],offic:19,offici:17,ofil:[],ofstream:[],often:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],ofter:16,ol:0,old:[1,5,10,13],ols_sk:6,ols_svd:6,olsbeta:5,omega:[2,3,6],omega_0:3,omit:[0,5],on_train_batch_begin:[3,4],onc:[1,6,9,11,13],one:[0,1,3,4,5,6,7,8,9,10,11,13,14,15,16,18],oneapi:[],onednn:[],onehot:1,onehot_vector:1,onehotencod:9,ones:[0,2,5,6,8,9,10,11,13,16,17],ones_lik:4,onl:3,onli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],onlin:[11,17],onto:[5,11],op_nam:[3,4],open:[0,1,4,6,7,9,15,17],oper:[0,1,3,5,6,10,11,12,13,15,18],operation:18,oplu:18,opmiz:13,opportun:0,oppos:[6,13],opposit:[1,5,8],opt:[1,5],optim:[0,2,3,4,5,6,7,9,10,11,14,17],optimis:[1,3],optimizer_v2:3,option:[0,1,3,5,6,7,8,11,16],optionalxlacontext:[3,4],optmiz:[1,8,13],orang:0,order:[0,1,2,3,5,6,7,8,9,10,11,12,13,16,18],ordinari:[0,2,3,7,11,13,15,17],oreilli:20,org:[3,4,7,11,15,16,20],organ:[6,7,10,16],orient:[1,5,18],origin:[0,3,5,6,8,11,12,13,16],orthogn:5,orthogon:[0,5,6,8,11,13,16],orthonorm:5,os:[0,1,4,5,6,7,8,9],oscar:1,oscil:[3,13],oslo:[0,15,17,19],osx:[0,15],other:[0,1,2,3,5,6,7,8,10,13,14,15,17,18,20],otherwis:[0,1,4,7,13,16],ouput:[5,7,12],our:[1,2,3,6,7,8,9,10,12,14,15,16,17,18],ourmodel:0,ourselv:[0,5,6,8,11,13],out:[0,1,2,4,5,6,7,8,9,10,11,12,13,15,16,18],out_fil:9,outcom:[0,7,9,10,12,18],outdoor:9,outer:[6,12],outfil:4,outfilenam:[],outgrad:2,outlier:[0,8],outlin:[6,10,11],outlook:9,outperform:10,output:[0,1,3,4,5,6,7,8,9,10,12,13,16,18],output_bia:1,output_bias_gradi:1,output_shap:4,output_weight:1,output_weights_gradi:1,outputlayer1:12,outputlayer2:12,outsid:4,over1:13,over:[0,1,3,4,5,6,9,10,12,13,16],overal:[1,10],overcast:9,overcom:[12,13],overdetermin:0,overfit:[0,1,3,6,9,10,13],overflow:[1,5],overhead:12,overlap:[3,7,8,9],overlin:[0,5,6,9,10,11,14,16],overst:0,overtrain:4,overview:[3,20],own:[4,5,6,8,12,13,15,16],owner:0,ownridgebeta:6,oxid:0,oyvinssc:19,p0:2,p1:2,p:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18],p_:[2,4,8,9],p_hidden:2,p_i:[5,18],p_j:18,p_n:18,p_output:2,p_x:18,pack:0,packag:[0,1,2,3,4,5,6,7,8,11,13,14,15,18],pad:[3,4],page:[0,15],pai:[0,1,9,13],pair:[0,2,3,9,15,18],panda:[0,4,5,6,7,9,11,15],paper:1,paradigm:0,parallel:[10,16],param:[2,4],paramat:2,paramet:[0,1,2,3,4,5,6,7,8,9,10,12,13,18],parameter:[0,6,10],parametr:[0,6],paramt:[3,5],parent:2,parent_argnum:[],park:[],parser:0,part:[0,1,3,5,6,10,16,17,18,20],partial:[0,1,5,6,7,8,10,11,12,13,18],particip:[15,17],particl:[0,4,13,18],particular:[0,1,2,3,5,6,9,10,11,12,13,18,20],particularli:[5,6,8,11,13,18],partit:[1,4,9],partli:6,pass:[2,3,12,14],past:[10,18],patch:[6,18],path:[0,4,6,7,9,15],patient:7,patter:4,pattern:[0,3,4,12,17,20],pauli:0,pc:[11,15],pca:[0,7,15,17],pcolor:6,pcolormesh:6,pd:[0,4,5,6,7,9,11],pde:2,pdf:[0,3,4,5,6,9,20],pedagog:0,penal:6,penalti:[6,13],penros:[5,6],pentagon:13,peopl:[0,1,9,13,15],per:[0,1,6,17],percentag:[0,10,11],perceptron:[0,1,7],perfect:[0,1],perfectli:[4,6],perform:[0,2,3,4,5,6,8,10,11,12,13,14,15,16,18],performac:4,perhap:[0,5,13],perimet:1,period:[1,4,18],permut:11,persist:13,person:[5,6,7,17,19],perspect:20,pertin:12,petal:[8,9],peter:20,petersen:[],phantom:18,phase:[6,12],phenomena:18,phi:8,phi_k:8,philip:[],philosophi:13,phone:19,photo:4,phrase:0,physic:[0,1,4,7,12,13,18,19,20],pi:[2,3,5,6,7,9,12,13,18],pick:[1,9,10,11,13,14],pickl:1,pictur:0,pie:15,piec:[11,14],pillow:[0,15],pinv:[5,6,13],pip3:[0,1],pip:[0,1,15],pipelin:[0,6,8,10],pit:4,pitfal:6,pitt:12,pixel:[1,3,4],pixel_height:[1,3],pixel_width:[1,3],place:[0,4,6,8,13,16],plai:[0,3,4,5,6,8,11,15],plain:[8,10,12,13,14],plan:[6,9,19,20],plane:[8,9],plateau:5,platform:15,plausibl:12,pleas:[3,4,6,7,11,13,14],plenti:1,plethora:[3,12],plot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],plot_confusion_matrix:[7,10],plot_count:6,plot_cumulative_gain:[7,10],plot_data:1,plot_dataset:8,plot_decision_boundari:[9,10],plot_import:10,plot_max:4,plot_min:4,plot_model:4,plot_numb:4,plot_predict:8,plot_regression_predict:9,plot_result:4,plot_roc:[7,10],plot_surfac:[2,6,13],plot_train:9,plot_tre:[9,10],plt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],plu:[0,3,5,7],pm:8,pmatrix:2,pn:3,png:[0,4,6,7,9],point:[0,1,2,3,5,6,7,8,9,10,11,13,14,16,18,19],point_1:4,point_2:4,poisson:[15,18],poli:[6,8],poly100_kernel_svm_clf:8,poly3:0,poly3_plot:0,poly3dcollect:13,poly_featur:[8,9],poly_features10:9,poly_fit10:9,poly_fit:9,poly_kernel_svm_clf:8,polydegre:[0,5,6,10],polygon:13,polym:12,polynomi:[0,5,6,7,8,9,10,11],polynomial_featur:6,polynomial_svm_clf:8,polynomialfeatur:[0,6,8,9],polytrop:[0,6],pool:3,pool_siz:3,poor:[1,13],poorli:0,pop:2,popul:[0,5],popular:[0,1,3,6,7,8,9,11,12,15,16,18],popularli:0,portabl:10,portion:[11,13],pose:[0,4,5,6,11,18],posit:[0,1,2,3,5,7,8,10,11,13,14,16,18],possibl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18,19],posterior:5,postpon:0,postul:5,potenti:[0,3,5,6,12,13],potr:5,potrf:5,pott:12,power:[0,1,5,6,8,9,12,13],pp:[5,6],practic:[0,5,6,7,8,17,18],practition:[0,1,3],preced:[1,11,12,18],preceed:4,preceq:8,precis:[0,2,5,11,13,16,18],pred:[6,13],predicit:0,predict:[0,1,5,6,7,8,9,10,15,20],predict_prob:1,predict_proba:[7,10],predictor:[0,5,6,7,9,10,11],prefer:[0,1,6,8,9,11,15],prepar:[0,6,16],preprocess:[0,4,6,7,8,9,10,11],prerequisit:0,presenc:13,present:[0,5,6,9,12,13,16,17,18],preserv:[3,11,16],press:[13,20],pretrain:[1,4],pretti:[0,4,8,9,15],prev_centroid:14,prevent:[13,18],previou:[0,1,2,3,4,5,6,8,10,11,12,13,16,18],previous:[2,3,9,10,18],price:[0,4,9,13],primal:8,primari:[0,7],prime:18,primit:2,princip:[0,5,7,15,17],principl:[0,6,7,8,14],print:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18],print_funct:[8,9],printout:0,prior:[0,5,6],privat:0,prob:[1,18],probabilist:[0,20],probabl:[0,1,3,4,6,7,10,13,15,17],problem:[0,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18],proce:[0,5,6,8,9,10,11,13,16],procedur:[2,4,5,6,8,10,11,13],proceed:16,process:[0,2,4,6,9,10,12,13,15,16,18,20],prod:20,prod_:[1,5,7],produc:[0,3,4,5,6,9,10,11,12,13,15,16,18],product:[0,1,3,5,6,7,8,12,13,15,16],profess:0,program:[0,1,4,5,6,8,12,14,15,16,17,18],programm:16,progress:[1,4,14],prohibit:6,project1:6,project:[0,1,2,3,5,11,13,15,17,19],project_root_dir:[0,6,7,9],promin:12,promis:8,prone:9,pronounc:[13,15],proof:[0,11,12,13],propag:[2,3,13,17],proper:[0,2,6],properli:[1,6,8,10,13],properti:[0,1,3,12,13,16],proport:[0,1,5,9,11,13,18],propos:[1,4,6,10],propto:[5,13],protect:[3,4],proton:0,prove:[3,13],provid:[0,1,3,4,5,6,8,9,10,12,13,15,16,18,20],proxi:[1,13],prune:9,pseudo:[16,18],pseudoinv:5,pseudoinvers:[5,6],pseudorandom:[6,18],psycholog:0,pt:13,ptratio:[],punish:[0,1],pure:[3,9,18],purest:9,puriti:9,purpos:[0,3,10,12,14],put:1,putarow:5,putboundslic:5,putclist:5,putobjsens:5,putqobj:5,py:[0,1,2,3,4,5,6,7,8,11,13,14],pydata:15,pydot:9,pylab:[0,7],pylint:[3,4],pypi:15,pyplot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],pythagora:5,python2:0,python3:[0,1,2,3,4,6,7,8,11,13,14,15],python:[1,2,3,4,5,6,8,11,12,13,14,17,18],pytorch:[0,15],pywrap_tf:[3,4],q:[5,6,8,11,18],qp:8,qquad:[2,11,13,16],qr:[5,6,16],quad:[1,13,16],quadrat:[0,5,8,9,13],qualit:[4,9,18],qualiti:[0,9,15],quantifi:1,quantil:10,quantit:[0,6,9],quantiti:[0,2,5,6,7,9,10,11,12,14,16,18],quantum:[4,12],quartil:0,quench:5,queri:9,question:[0,5,6,9,11,12,13],qugan:4,quick:[4,18],quick_execut:[3,4],quickli:[1,3,9,11,13],quit:[1,5,6,9,10,12],quot:4,r2:[0,5,6],r2_score:0,r2score:0,r:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],r_1:9,r_2:9,r_j:9,r_m:9,rad:0,radial:[0,8,12],radioact:18,radiu:[0,1],rag:2,rain:9,rais:[0,2,13],ramp:1,ran0:18,ran1:18,ran2:18,ran3:18,rand:[0,4,5,6,9,10,13,16],rand_max:[],randint:[6,9,13],randn:[0,1,2,5,6,9,11,13],random:[0,1,2,3,4,5,6,8,9,13,14,15,16,17],random_devic:[],random_forest_model:10,random_index:13,random_indic:[1,3],random_st:[0,7,8,9,10,11],randomforestclassifi:10,randomli:[1,6,9,13,14],randomnumbergener:[],rang:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,16,18],rangl:[0,6,11,18],rangle_x:18,rank:5,rankdir:4,raphson:[1,8,13],rapidli:0,rare:[1,13],rate:[0,1,2,3,4,8,9,10,12,13],rather:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],ratio:[4,7,9,10,11],rational:0,ravel:[5,6,7,8,9,10,11,13,16],raw:3,raw_df:[],rbf:[8,11,12],rbf_kernel_svm_clf:8,rbf_pca:11,rc:[0,18],rcond:0,rcparam:[0,1,3,7,8,9,10,18],rd:[],re:[2,4,13],reach:[1,4,5,6,7,9,10,11,12,13,14],read:[0,2,3,4,5,6,7,8,11,12,16,17,18,20],read_csv:[0,6,7,9],read_fwf:0,reader:[0,6,16,18],readi:[0,1,5,6,8,10,11,12,16],readili:1,real:[0,1,2,4,7,10,11,12,13,16],real_loss:4,real_output:4,realist:8,realiti:18,realiz:[1,12],realli:[0,1],rearrang:13,reason:[0,1,3,4,10,13,20],reassign:1,rebuild:[],recal:[5,6,9,10,11,12,16,18],recalcul:[],recast:3,receiv:[1,3,10,12,18],recent:[0,2,3,4,5,6,7,8,9,10,13],recept:[3,12],receptive_field:3,recip:[0,6,7,16],reciproc:5,recogn:[0,4,5,10],recognit:[0,1,3,12,17,20],recommend:[0,2,3,4,5,6,8,13,15,16,17,20],reconsid:9,reconstruct:11,record:[10,17],recreat:[],rectangl:[9,13],rectangular:5,rectifi:[1,3,12],recur:[0,15],recurr:[0,1,15,17],recurs:[9,15,16],recycl:[],red:[0,3,4,6,8,9],redefin:[0,10],reduc:[1,3,5,6,9,10,11,13],reduct:[0,10,11,15,18],refer:[0,1,2,3,5,6,7,11,12,13,14,16,20],referenc:2,refin:12,refit:6,reflect:[0,1,4,5,18],refresh:[15,17],reg:[10,11],regard:[1,9,13],regardless:12,region:[3,4,6,9,12],regist:[6,18],reglasso:5,regr_1:[0,9],regr_2:[0,9],regr_3:[0,9],regress:[1,8,11,12,15,16,17],regressor:[0,7,10],regridg:[5,6],regular:[0,3,4,5,6,7,9,13],regularis:6,reilli:[0,20],reinforc:[0,8,15],reiter:1,rel:[0,4,6,7,9,12,13,18],relat:[0,1,3,4,5,11,13,14,16,18],relationship:[0,4,9],relativeerror:0,releas:[1,3,4,6,13,15],relev:[0,1,5,7,11,15,17,18],reli:[0,6,8],reliabl:[7,18],relu:[3,4],remain:[1,2,4,6,12,16,18],remaind:18,reman:2,remark:1,rememb:[0,8,13,16],remind:[0,5,11,13,16,18],remov:[0,4,5,6],render:0,reorder:[5,7],reorgan:0,repeat:[0,1,3,4,5,6,9,10,11,13,14,16,18],repeated:0,repeatedli:[6,10,13],repet:3,repetit:[6,17],rephras:13,replac:[0,1,3,4,5,6,10,12,13,14],replica:6,repositori:[0,4],repres:[0,1,2,3,4,5,6,7,8,9,10,12,13,18],represent:[0,1,3,6,18],representd:3,reproduc:[0,5,6,9,12,15,18],repuls:0,request:[0,13],requir:[0,1,3,4,5,6,8,9,11,12,13,16],res1:2,res2:2,res3:2,res_analyt:2,res_analytical1:2,res_analytical2:2,res_analytical3:2,resaml:6,resampl:[0,7,10,15,17],rescal:[0,11,12],rescu:5,reseach:6,research:[0,4,15,20],resembl:[6,18],reserv:[1,5,6,18],reset:[],reshap:[0,1,2,3,4,6,8,9,10,16],residenti:0,residu:[0,5,13],resiz:5,respect:[0,1,2,3,5,6,7,8,10,11,12,13,14,18],respond:12,respons:[0,7,9,12],rest:[0,5],restat:[0,12],restor:4,restored_discrimin:4,restored_gener:4,restrict:[0,3,9,12],result:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],result_typ:[],retail:0,retain:[5,6],return_data:14,return_kwarg:[],return_sequ:4,return_x_i:9,reus:[1,3,6],reveal:[0,12],revers:[1,16],review:[15,16,17],revisit:14,reward:[0,4],rewrit:[0,3,5,6,7,8,10,11,12,13,16,18],rewritten:[2,6,8,10,18],rewrot:13,rf:10,rgb:3,rgoj5yh7evk:15,rh:[5,6],rho:[0,10],rho_1:10,rho_2:10,rho_m:10,rich:0,ride:9,rideclass:9,ridedata:9,ridg:[0,7,11,13,15,17],ridge_sk:6,ridgebeta:5,right:[0,1,2,3,5,6,7,8,9,10,12,13,14,16,18],right_sid:2,rightarrow:[0,1,5,6,8,11,12,13,18],rigor:0,ring:6,rise:0,risk:[0,13],rival:4,river:0,rm:[0,18],rmse:0,rmsporp:13,rmsprop:[1,3,4,13],rnd_clf:10,rng:18,rnn1:4,rnn2:4,rnn:[4,12,17],rnn_2layer:4,rnn_input:4,rnn_output:4,rnn_train:4,rntrick1:18,rntrick2:18,rntrick3:18,rntrick4:18,ro:[0,13],robert:20,robust:0,robustscal:0,roc:10,role:[0,2,5,6,8,15],roll:6,room:[0,19],root:[0,5,9,13,18],rotat:[1,8,9,10],rotation_matrix:9,roughli:[1,3],round:[0,7,9,13],routin:[13,16],row:[0,1,2,5,6,7,9,11,16],rr:5,rrr:5,rthe:5,rug:13,rule:[0,1,5,6,13],run:[0,1,2,3,4,5,6,8,9,11,13,15],runtim:[1,6,14],runtimewarn:[1,6],rust:[0,15,16],rustad:19,rvert:1,rvert_2:1,s:[0,1,2,3,4,5,6,7,9,11,12,13,15,16,17,18,19],s_1:6,s_:[3,6],s_i:[6,7],s_j:6,s_k:6,saddl:13,safe:[],sai:[0,1,2,3,4,5,6,7,8,9,10,11,12,16,18],said:[6,9,13],sake:[0,5,7,11],sale:0,same:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18],samm:10,sampl:[0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,18],sample_vari:14,sample_weight:[3,4],sampleexptvari:18,sastri:11,satisfactori:0,satisfi:[1,2,3,6,8,13,16,18],satur:[1,6],save:[0,4,6,7,9],save_fig:[0,6,7,9,10],savefig:[0,4,6,7,9,18],savetxt:4,saw:5,scalabl:10,scalar:[2,5,6,10,13],scale:[0,1,3,5,6,7,8,9,10,11,12,13,15,16,19],scale_mean:4,scale_std:4,scalei:[],scaler:[0,7,8,9,10,11],scalex:[],scan:[5,7],scari:5,scatter:[0,1,6,7,8,9,14],scenario:[6,13],schedul:13,scheme:[1,13],schrage:18,scienc:[0,1,10,12,13,15,17,18,20],scientif:[0,15],scientist:0,scikit:[3,5,6,7,8,9,10,13,15,16,17,20],scikitplot:[7,10],scipi:[0,3,5,6,13,15,16],scl:6,score:[0,1,3,6,7,9,10,11,19],scores_kfold:6,scratch:1,sdg:13,seaborn:[0,1,3,6,7],seamless:[0,15],search:[0,1,3,5,9,13],sec:6,second:[0,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18],secondeigvector:11,secondli:12,section:[4,11,16,17,18],sector:0,see:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18],seed:[0,1,2,3,4,5,6,8,9,11,13,14,18],seed_imag:4,seek:[1,2,8],seem:[1,3,4],seemingli:0,seen:[0,1,3,5,10,12,18],segment:13,seismic:6,seldomli:0,select:[1,5,6,8,9,10,11,17,18,20],self:[1,3,4,5,20],sell:4,semest:[7,17],semi:[8,13],semilogx:6,send:[5,12,13,19],senior:17,sens:[0,4,6,8],sensibl:3,sensit:[0,5,6,9,13],sent:2,sentenc:[4,12],sep:[],separ:[0,1,2,4,6,8,9,12,14,15,18],sequenc:[2,3,4,7,9,10,12,13,15,16,18],sequenti:[1,3,4,10,12,18],seri:[0,1,2,3,4,5,6,10,11,12,13,16,17],serif:[0,7,18],serv:[0,1,2,3,5,7,13,20],session:[1,17],set:[1,4,5,6,7,8,10,11,13,14,15,16,18],set_major_formatt:6,set_major_loc:6,set_stream:5,set_tick:[1,8],set_ticklabel:1,set_titl:[0,1,2,3,7,12,14],set_xlabel:[0,1,2,3,7,12],set_xlim:[7,12],set_xticklabel:1,set_ylabel:[0,1,2,3,7],set_ylim:[7,12],set_ytick:7,set_yticklabel:[1,6],set_zlim:6,seth:4,setiosflag:[],setminu:6,setosa:[8,9],setosa_or_versicolor:8,setp:6,setprecis:[],setse:5,setup:[1,4,5,6,8,15],setw:[],sever:[0,3,5,6,7,8,9,11,12,13,15,16,17,18],sgd:[1,3],sgd_clf:8,sgdclassifi:8,sgdreg:13,sgdregressor:13,sgn:5,sh:[],shallow:13,shape:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16],share:[1,3],she:7,shift:[1,6,12,18],ship:3,shortcom:13,shorten:4,shorter:18,shortli:16,should:[0,2,3,5,6,8,9,11,12,13,16,18],should_sync:[3,4],show:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],show_shap:4,shown:[0,4,5,7,8,11,12,13,16],showpoint:[],shrink:[3,5,6,8,11],shrinkag:[5,6],shrunk:11,shuffl:[0,1,3,4,6,13],side:[0,2,5,8,12,13,16],sigh:15,sigma0:18,sigma1:18,sigma2:18,sigma:[0,1,5,6,7,10,11,12,13,16,18],sigma_0:5,sigma_1:5,sigma_2:5,sigma_:[5,16],sigma_fn:[7,12],sigma_i:[0,5],sigma_j:5,sigma_m:[6,18],sigma_n:[11,18],sigma_t:13,sigma_x:18,sigmoid:[1,2,4,7,8,10,12,13],sigmundson:[6,19],sign:[1,2,7,8,10,18],signal:[1,3,10,12],signatur:[3,4],signifi:4,signific:1,significantli:[1,13,18],sigurd:19,sim:[4,5,6,13,18],similar:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16],similarli:[0,1,3,5,8,10,18],simpl:[1,2,3,5,6,7,8,10,11,12,14,15,16,18],simple_rnn:4,simplepredict:10,simpler:[0,1,5,6,13,15],simplernn:4,simplest:[0,1,3,4,9,10,12,14],simpletre:10,simpli:[0,1,2,4,5,6,8,9,10,11,12,15,16,18],simplic:[2,5,6,7,8,9,10,11,12,14],simplicti:5,simplifi:[0,6,9,15],simplist:[3,6,18],simul:6,simultan:6,sin:[0,1,2,3,4,9,12,13,16],sinc:[0,1,2,3,5,6,7,8,9,10,11,13,16,18,20],sine:[3,12],singl:[0,1,2,3,5,6,7,8,9,12,13,16,18],singular:[0,6,13,16,17],sinusoid:3,site:[0,1,2,3,4,6,7,8,11,13,14,17],situat:[0,4,5,7,13,18],six:[3,18],size:[0,1,2,3,4,5,6,8,9,10,11,13,16,18],sketch:10,ski:9,skill:0,skip:[3,4,11],skiprow:[],skl:[0,6],sklearn:[0,1,3,5,6,7,8,9,10,11,13,14],skplt:[7,10],sl:6,slack:8,slice:[2,16],slide:[0,3,18],slight:[6,13],slightli:[1,2,3,5,6,7,10,18],slope:[8,11,12],slow:[0,2,8,13],slower:[5,16],slowest:16,slowli:12,slp:1,small:[0,1,2,3,5,6,8,9,10,11,12,13,15,16,18],smaller:[0,1,2,5,6,8,9,11,13,18],smallest:[0,4,14],smallest_row_index:14,smooth:[0,3,6,13],sn:[0,1,3,6,7],sne:11,so:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],soar:6,social:0,soft:[1,7,10,12],soften:8,softmax:[3,7],softwar:[0,8,15,16,17],sol:8,sole:[0,6],solid:[0,7],solitem:5,soltyp:5,solut:[0,1,2,3,5,6,8,10,11,13,16,18],solutionsummari:5,soluton:2,solv:[0,1,3,5,6,8,10,11,12,13,16,17],solve_expdec:2,solve_ode_deep_neural_network:2,solve_ode_neural_network:2,solve_pde_deep_neural_network:2,solveod:2,solveode_popul:2,solver:[2,5,7,8,9,10,11,16],some:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,17,18],some_model:6,somehow:4,someth:[0,1,3,4,7,9,11,18],sometim:[0,1,11,12,13,14],soon:16,sophist:0,sopt:13,sort:[5,6,9,11,18],sound:[3,5],sourc:[0,1,3,6,15,16,18],space:[0,1,4,5,8,9,11,12,13,14,18],span:[0,3,5,9,11,16],spare:1,spars:[3,5,6,16],sparse_mtx:16,sparsecategoricalcrossentropi:3,sparsiti:10,spatial:[1,2,3,12],spdiag:5,speak:18,special:[6,7,10,12,13,16,18],specif:[0,1,2,3,4,5,6,7,8,9,11,12,15,16,18],specifi:[0,3,5,6,7,9,11,13,14,18],specifici:[0,10],spectacular:3,spectral:1,speech:[0,1,3,4,12],speed:[1,2,4,13],spend:18,sphere:0,spin:6,spite:0,spline:8,split:[1,3,4,5,6,8,9,10,11,14,18],splite:0,splitter:[1,10],spmatrix:5,spontan:18,spot:3,spread:[0,11,18],springer:20,spuriou:13,sqquar:5,sqrsignal:3,sqrt:[0,3,4,5,6,8,10,11,13,18],squar:[1,2,3,4,7,8,9,11,13,14,15,16,17,18],squarederror:10,squaredeuclidean:14,squash:12,squeez:2,srand:[],srtm:6,srtm_data_norway_1:6,sse4:[],stabil:5,stabl:[0,4,5,6,7,9,11,15],stack:[2,3,4],stacklevel:0,stage:[5,13],stai:[0,2,4,5,11],stand:[0,5,9,12],standard:[0,1,4,5,6,7,8,10,12,16,18],standard_basi:2,standardscal:[0,6,7,8,9,10,11],stanford:13,start:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,16,17,18],start_box:[2,13],start_nod:[2,13],start_tim:14,startpoint:[],stat:6,state:[1,2,4,5,6,7,8,10,11,12,13,15,18],statement:[0,7,16],statist:[0,1,3,4,7,9,10,11,12,13,14,16,17,20],statu:[0,7,11],stavang:6,std:[0,4,6],stdev:[],stdout:5,steep:13,step:[0,1,2,3,4,6,7,9,10,11,12,13,14,16],step_fn:[7,12],step_length:13,steps_list:9,steps_per_epoch:[3,4],stereo:3,stian:19,still:[2,3,5,6,11,13,18],stimuli:12,stk2100:20,stk3155:17,stk4021:20,stk4051:20,stk4155:17,stk5000:20,stk:20,stochast:[0,1,5,6,8,11,12,17],stock:4,stoke:12,stone:[0,7],stop:[1,4,7,9,11,13,14],storag:5,store:[0,1,2,3,6,11,13,18],storehaug:19,str:[1,3,4],straight:[0,6,8,13],straightforward:[0,2,3,5,6,8,9,10,13,16],strategi:[0,1,9],stratifi:6,streamtyp:5,strength:[0,5,14],stretch:11,strict:[8,13],strictli:[8,13],stride:[4,16],strike:6,string:1,stroke:7,strong:[3,6,9,10,12,16,18],strongli:[0,8,15,16],stronli:0,structur:[0,1,2,3,6,9,10,12,15],stuck:[1,13],student:[0,17,19,20],studi:[0,3,4,5,6,7,8,11,12,13,15,20],studier:[17,20],style:[0,7,9,16],sub:[9,12],subarg:[2,13],subdivid:[0,16],subfield:0,subject:[5,6,8,18],subplot:[0,1,3,4,6,7,8,9,10,13,14],subplots_adjust:[8,18],subprogram:16,subract:0,subroutin:0,subscript:1,subsequ:[1,4,5,6,12,16,18],subset:[1,6,9,12,13,15],subspac:[0,8,11],substanti:[9,10],substep:11,substitut:[3,6,12,16],subsubset:9,subtask:6,subtl:1,subtract:[0,4,5,6,11,13,16,18],subtre:9,subval:[2,13],succeed:[0,4],success:[3,7,9,13,18],successfulli:[4,9],sucess:[],sudo:[0,15],suffer:[0,1,2,5,10],suffici:[1,6,8,11,13],suggest:[1,13,20],suit:[8,12],suitabl:[0,18],sum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],sum_:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18],sum_i:[2,5,6,8,13],sum_j:6,sum_k:[6,8,12,16],sum_m:3,sum_n:3,sum_nx_:3,summar:[5,6,9],summari:[1,3,4,10,17],summat:3,sunni:9,superfici:3,superscript:[1,12],supervis:[0,5,6,7,9,12,15],supplement:7,support:[0,1,9,10,11,13,15,17],suppos:[0,5,6,7,8,10,11,12,13,16],suppress:[5,13],sure:[1,4,6],surf:6,surfac:[0,6],surpass:6,surpris:0,surround:[3,15],survei:[0,5,6],svc:[8,9,10],svd:[0,6,11,17],svdinv:5,svm:[8,9,10,11],svm_clf:[8,10],swap:2,swapax:2,swath:5,sy:[5,13],symbol:[1,5,11,13,15,18],symmeteri:1,symmetr:[0,5,8,11,12,13,16],symmetri:6,sympi:[0,15],synonim:18,syntax:[1,13],syntaxerror:1,syrk:5,system:[0,1,3,4,5,6,7,9,10,12,13,15,16,20],systemat:[4,6],t0:[3,6,13],t1:[2,13],t2:2,t3:2,t:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19],t_0:[2,9,13],t_1:13,t_:2,t_b:10,t_i:[1,2,12],t_j:[5,12],t_k:9,tabl:[9,18,19],tabul:0,tackl:4,tag:[2,3,4,5,6,7,12,13,14,16,18],taht:0,tail:18,tailor:[2,8,11],taiwan:0,take:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18],taken:[0,1,3,6,10,13,16],tan:3,tangent:[1,4,12,13],tanh:[1,4,7,8,12,13],tape:[3,4],target:[0,1,3,4,5,6,7,8,9,10,11,12,13],target_nam:9,task:[0,1,3,5,6,9,11,12,14],tau:[3,5,18],tax:0,taylor:[2,13],taylornr:13,tc:8,team:1,teaser:0,technic:[0,5,6,13],techniqu:[0,1,8,10,13,15,17,18,20],technolog:[0,1],tek5040:20,tell:[0,4,6,10,11,13,18],temp1:1,temp2:1,temp:1,temperatur:[0,9],temporarili:1,ten:3,tend:[3,5,6,8,9,10,12,13,14],tendenc:0,tension:6,tensor:[3,4],tensorflow:[0,2,4,8,14,15,16,17,20],term1:[5,6,11],term2:[5,6,11],term3:[5,6,11],term4:[5,6,11],term:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18],termin:[0,4,5,9,10,13],terrain1:6,terrain:6,test:[3,4,5,6,7,8,9,10,13,14,16,18],test_acc:3,test_accuraci:[1,3],test_error:6,test_imag:[3,4],test_ind:6,test_input:4,test_label:[3,4],test_loss:3,test_pr:1,test_predict:1,test_rnn:4,test_scor:[7,10],test_siz:[0,1,3,5,6,10],test_split:9,testerror:[0,6],testi:4,testpredict:4,testx:4,text:[0,1,2,4,5,8,9,11,13,16,17,18,20],textual:9,textur:1,tf:[1,3,4,13,14],tfe_py_execut:[3,4],th:[0,1,2,5,6,7,9,12,13,14,16,18],than:[0,1,2,3,4,5,6,7,9,10,11,12,13,15,18],thank:[4,6],theano:[1,15],thei:[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18],them:[0,1,3,4,6,8,9,10,11,12,13,16],theme:0,themselv:[0,18],thenc:6,theorem:[2,6,7],theoret:[0,4,10],theori:[0,1,3,8,9,12,13,15,17,20],thereaft:[0,5,6,11,12,16],therebi:[0,5,7,11],therefor:[0,1,2,3,4,6,7,8,11,13,18],therein:11,thereof:[0,6,13],theta:[1,4,13,18],theta_:[1,13],theta_i:1,theta_k:[],theta_linreg:13,theta_t:13,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],thing:[0,1,2,4,5,7,9,18],think:[0,1,3,4,6,9,12,13,14,18],third:[0,3,6,13],thirti:7,those:[3,5,6,8,9,10,11,16,17],though:[1,2,3,4,13,16,18],thought:[6,14,18],thousand:[0,1],thread:[3,4],three:[0,1,3,5,6,8,9,12,16,17,18,19],threshold:[1,3,9,10,11,12,13],through:[0,1,2,3,4,5,6,8,11,12,13,14,15,16,18],throughout:[0,4,5,14,15,16,18],thu:[0,1,2,5,6,7,8,10,11,12,13,19],thumb:[0,6],thursdai:17,tibshirani:[6,17,20],tick_param:6,ticker:[6,13,18],tif:6,tight_layout:[1,7],tightli:11,tild:[0,5,6,11,18],till:[0,4,7,8,9,10,12,16],time:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18],timefunct:[],timeit:4,timer:4,tini:1,tip:3,titl:[0,1,2,3,4,6,7,8,9,10,13,18],tmp:13,tmp_log:[3,4],tn:[2,3],to_categor:[1,3,4],to_categorical_numpi:1,to_numer:[0,6],to_str:[],todai:3,togeth:[0,3,6,8,11],toi:[13,14],told:13,toler:[2,6,14],tolist:4,tomographi:12,too:[0,2,4,5,6,9,11,13,18,20],took:8,tool:[0,1,3,6,13,15],toolbox:8,top:[0,3,5,6,9,10,15],top_node_typ:2,top_trac:2,topic:[0,5,6,7,8,15,17,20],topolog:[1,3,12],toposort:2,torkjellsdatt:19,toss:[10,18],total:[0,1,2,3,4,6,7,8,10,11,12,13,14,16,18,19],total_loss:4,totalclustervari:14,totalscatt:14,totalvari:[],toward:[1,2,7,12,13],town:0,tp:4,tpng:9,tqdm:6,trace:[2,13],trace_stack:[2,13],traceback:[0,2,3,4,5,6,7,8,9,10,13],traceback_util:[3,4],tracer:[2,13],track:[3,13,14,16],tract:0,tractabl:0,trade:[5,9],tradeoff:[0,5,17],tradit:[0,1,4,6],train:[2,3,5,6,8,9,10,11,12,13],train_accuraci:[0,1,3],train_dataset:4,train_end:[0,1],train_error:6,train_funct:[3,4],train_imag:[3,4],train_ind:6,train_label:[3,4],train_pr:1,train_siz:[0,1,3],train_step:4,train_test_split:[0,1,3,5,6,7,9,10,11],train_test_split_numpi:[0,1],trainabl:4,trainable_vari:4,trained_model:6,trainerror:0,traini:4,training_checkpoint:4,training_dataset:4,training_gradi:13,training_gradient_fun:13,training_loss:13,trainingerror:6,trainpredict:4,trainscor:4,trainx:4,trait:0,trajectori:4,tran:5,transfer:9,transform:[0,5,6,7,8,9,10,11,12,13,15,16],transit:[6,12],translat:[1,4,6,10],transpos:[1,5,11,16],travers:[0,5],treat:[0,1,3,6,12,13,18],tree:[0,1,6,15,17],tree_clf:[9,10],tree_clf_:9,tree_clf_sr:9,tree_reg1:9,tree_reg2:9,tree_reg:9,trend:18,trevor:20,tri:[2,3,4,9,13],triain:0,trial:[0,2,4,6,13,18],triangl:13,triangular:16,trick:[3,4,8,11,13,18],trickier:18,tridiagon:16,trillion:15,trivial:[0,1,5,11,18],troubl:[0,8,12],truck:3,true_beta:6,true_divid:1,true_fun:6,tucker:8,tumor:[7,9],tumour:7,tunabl:1,tune:[4,9,13,16],tup:[],tupl:[2,13],turn:[0,1,5,6,7,8,9,10,11,12,13,16,18],tutori:[1,4],tv:2,tveito:2,tweak:[1,4,10,18],twice:13,twist:11,twister:[],two:[0,1,2,4,5,6,7,9,10,11,12,13,16,17,18,20],tx:13,tx_1:13,txt:4,ty:13,type:[0,1,3,6,8,10,13,16,18],typeerror:[2,13],typic:[0,1,2,3,4,5,7,9,10,12,13,18],u:[0,2,5,6,10,11,12,16],u_:16,u_i:12,u_m:10,ua:0,ubuntu:[0,15],uci:0,uio:[17,19,20],un:14,unari:16,unary_f:[2,13],unary_oper:[2,13],unary_to_nari:2,unbalanc:[6,9],unbias:[0,5,6],uncent:6,uncertainti:[0,5],uncertitud:18,unchang:[1,3],uncorrel:[10,18],undefin:5,under:[0,1,5,6,10,13,15],underdetermin:0,underfit:[1,6],underflowproblem:5,undergo:5,undergradu:17,underli:[0,1,9,13,18],underset:[4,14],understand:[0,1,3,5,6,10,13,14,15],understood:[8,13],undesir:8,undetermin:[5,8],undo:4,unexpect:6,unexpected:18,unfair:6,unfortun:[1,8,9,10],unicode_liter:[8,9],uniform:[0,1,5,6,11,13,18],uniform_real_distribut:[],uniformli:[13,18],unifrompdf:18,unimport:13,union:[5,6],uniqu:[0,2,6,13,14,16],unique_cluster_label:14,unit:[0,1,3,4,5,10,12,18],unitari:[5,6,16],unitarili:16,uniti:18,univari:18,univers:[0,1,2,13,15,17,19],unix:1,unknow:[0,16],unknown:[0,1,3,4,5,6,8,10,16],unknowwn:12,unlabel:1,unless:[0,3,6,11,13],unlik:[1,3,8,13],unnecessarili:9,unord:3,unravel:1,unrol:[3,11],unseen:[0,7,9],unstabl:1,unsupervis:[0,1,4,12,15,17],unsymmetr:16,until:[1,2,4,9,12,13,14],untouch:0,unusu:12,up:[1,3,4,5,6,8,10,11,13,14,15,16,17,18],updat:[1,2,10,12,13,14],upload:[15,20],upon:[1,6,11,16],upper:[0,8,9,16],uppercas:16,upsampl:4,upscal:4,us:[4,5,6,8,9,10,11,12,14,16,17,18,20],usag:[0,8,15],usd10000:0,usd:0,use_bia:4,use_multiprocess:[3,4],usecol:0,useless:1,user:[0,1,2,3,4,6,7,8,11,14,15,16],userwarn:[3,4,6,14],usetex:18,usg:6,usr:18,usual:[0,3,4,7,12,13,14],ut:5,util:[0,1,3,4,6,7,10,14],ux:16,v0:18,v1:18,v2:18,v:[2,4,5,6,11,13,15],v_0:11,va:1,val:13,val_accuraci:3,val_loss:4,vale:2,valid:[0,1,4,7,9,10,13,15,17,18],validation_batch_s:[3,4],validation_data:[3,4],validation_freq:[3,4],validation_split:[3,4],validation_step:[3,4],valu:[0,1,2,3,4,6,7,8,9,10,12,13,14,15,16,17],valuat:9,valueerror:[0,2],valy:4,van:0,vandenbergh:[8,13],vandermond:0,vanilla:[0,6,11,14],vanish:[1,4,13,18],var_x:18,varabl:8,varepsilon:[5,6],varepsilon_:[5,6],varepsilon_i:[5,6],vari:[0,1,3,5,6,10],variabl:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16],varianc:[0,1,5,7,9,10,11,13,14,15,16,17,18],variance_i:[5,11],variance_x:[5,11],variant:[0,1,6,8,12,13],variat:[3,4,11],varieti:[0,3,12,15],variou:[1,3,5,6,7,8,9,11,12,13,15,16,18],vartempvec:[],varvec:[],varydimens:4,vastli:3,vaue:1,vault:0,vdot:[2,13],vec:6,vector:[0,1,2,3,4,5,6,7,9,10,11,13,14,15,17],vector_mean:14,ventur:[0,8,15],verbos:[1,3,4],veri:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,20],verifi:[3,11,16],versatil:8,versicolor:[8,9],version:[0,3,4,10,13,14,15,16,18],versu:1,vert:[0,1,5,6,7,8,9,11,13],vert_1:[5,6],vert_2:[5,6,11],via:[0,5,6,7,8,9,10,11,12,15,16,17,18],vidal:11,video:[0,1,12,15,17],view:[1,3,5,6,12,13,17,18,20],violat:8,virginica:9,viridi:[0,1,2,3],virtual:1,viscos:13,viscou:13,visibledeprecationwarn:2,vision:[0,3],visual:[0,3,11,12,15],visualis:1,viz:[6,8,18],vjp:[2,13],vjp_0:[],vjp_0_fun:[],vjp_1:[],vjp_1_fun:[],vjp_argnum:[],vjpfun:2,vjpmaker:[],vjpnode:[2,13],vmax:[1,6],vmc:[],vmin:[1,6],voic:3,volum:[0,3],vote:10,voting_clf:10,votingclassifi:10,votingsimpl:10,vrtx:17,vs:[0,4,6],vspace:[2,13],vstack:[5,11,16,18],vt:5,w1:8,w2:[8,11],w3:8,w:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,18],w_1:[8,16],w_1x_1:8,w_1x_:8,w_2:[8,16],w_2x_2:8,w_2x_:8,w_3:16,w_4:16,w_:[1,12],w_hidden:2,w_i:[1,2,10],w_ix_i:12,w_j:16,w_m:16,w_output:2,w_px_:8,w_px_p:8,wa:[0,1,3,4,5,6,7,10,11,12,13,14,16],wai:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,18],walk:9,walker:18,wang:0,want:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,18],warn:[1,3,4,8,14],warrant:6,wast:3,watch:[3,4,15],wave:3,wavelet:8,we:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],weak:[9,10,14],weather:[1,12],web:[15,17],webpag:17,websit:[6,16,17],wedg:[8,18],wednesdai:17,wee:11,week:[5,6,7],weekli:[15,20],weight:[0,1,2,3,6,7,9,10,12,13,18],weigth:2,welcom:[8,15],well:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,20],went:8,were:[0,1,3,4,5,6,7,8,10,11,12,14,18],wessel:0,westbi:19,westby:19,what:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],whatev:3,when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],whenev:[13,18],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19],wherea:[6,18],wherein:[1,12],whether:[0,3,5,7,9,18],which:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],whichev:[1,3],white:9,who:[0,17],whole:[1,3,4,5,9,11,13],whose:[0,6,10,18],whow:[5,11],why:[0,1,3,6,13],wide:[0,1,3,6,7,12,15,16],widehat:6,width:[0,3,8,9],wieringen:0,win:10,wind:9,wing:19,winther:2,wiothout:6,wiscons:7,wisconsin:10,wisdom:6,wise:[0,1,5,12,13],wish:[0,2,5,7,8,11,13,14,16],with_std:0,wither:6,within:[0,2,3,4,7,9,12,13,14,18,20],withinclust:14,without:[0,1,5,6,8,9,11,12,13],won:0,wonder:8,word:[0,1,3,4,5,6,14,18],work:[0,1,4,6,7,8,9,13,15,17,18],worker:[3,4],workshop:17,world:[0,8],worldwid:0,wors:[0,1,3,4,6],worst:[],worth:9,would:[0,1,3,5,6,7,8,9,10,11,12,13,16,18],wrap:[2,6,16,17],wrap_util:[2,13],wrapper:0,write:[0,1,2,3,5,6,7,8,12,13,16],written:[0,2,3,5,11,12,13,15,16,18],wrong:[1,8],wrongli:10,wrote:[5,11],wrt:[2,10,13],wth:10,www:[15,16,17,20],wx_1:8,x0:8,x1:[4,8,9,10,13],x1_exampl:8,x1d:8,x2:[8,9,10,13],x2d:[8,11],x2d_train:11,x2dsl:11,x3:8,x:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],x_0:[0,5,11,16],x_1:[0,2,5,6,7,8,9,10,11,13,16,18],x_2:[0,2,5,6,7,8,9,10,11,13,16,18],x_3:[8,16,18],x_4:16,x_:[0,2,3,5,6,8,10,11,13,14,16,18],x_center:11,x_data:1,x_data_ful:1,x_hidden:2,x_i:[0,1,2,5,6,7,8,9,10,11,12,13,14,16,18],x_input:2,x_ix_:0,x_iy_i:8,x_j:[0,2,8,9,12,18],x_jy_j:8,x_k:[12,14,16,18],x_l:18,x_m:[6,12,16,18],x_n:[0,2,3,6,8,11,12,13,16,18],x_new:[9,10],x_offset:6,x_output:2,x_p:[3,7,9],x_poli:9,x_poly10:9,x_pred:4,x_prev:2,x_reduc:11,x_scale:8,x_test:[0,1,3,5,6,7,9,10,11],x_test_own:6,x_test_scal:[0,6,7,9,10,11],x_tot:4,x_train:[0,1,3,4,5,6,7,9,10,11],x_train_mean:6,x_train_own:6,x_train_scal:[0,6,7,9,10,11],x_val:1,xarrai:15,xavier:1,xbnew:13,xcode:[0,15],xdclassiffierconfus:10,xdclassiffierroc:10,xg_clf:10,xgb:10,xgbclassifi:10,xgboost:9,xgboot:10,xgbregressor:10,xgparam:10,xgtree:10,xi:[8,13],xi_1:8,xi_:8,xi_i:8,xk:8,xlabel:[0,1,2,3,4,5,6,7,8,9,10,13,18],xlim:[6,10],xm:9,xmesh:13,xnew:[0,13],xp:18,xpanda:0,xpd:[5,11],xplot:0,xs:9,xscale:0,xsr:9,xt_x:13,xtest:6,xtick:[3,6,8,9],xtrain:6,xu:0,xx:[0,5,16],xy:[0,6,8,16],xytext:8,xz:16,y1:4,y2:4,y3:4,y:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,16,18],y_0:[0,5,11,16],y_1:[0,5,8,9,11,13,16],y_1y_1:8,y_1y_1k:8,y_1y_2:8,y_1y_2k:8,y_1y_n:8,y_1y_nk:8,y_2:[0,5,8,9,11,16],y_2y_1:8,y_2y_1k:8,y_2y_2:8,y_2y_2k:8,y_3:[0,9,16],y_4:16,y_:[0,1,5,6,10,11,16],y_data:[0,1,5,6],y_data_ful:1,y_decis:8,y_fit:0,y_i:[0,1,5,6,7,8,9,10,11,12,13,16],y_if_:10,y_ix_:0,y_ix_i:[7,8,13],y_iy_jk:8,y_j:[6,8,12],y_k:12,y_m:16,y_model:[0,4,5,6],y_n:[8,13],y_ny_1:8,y_ny_1k:8,y_ny_2:8,y_ny_2k:8,y_ny_n:8,y_ny_nk:8,y_offset:6,y_plot:9,y_pred1:9,y_pred2:9,y_pred:[0,1,4,6,7,8,9,10],y_pred_rf:10,y_pred_tre:10,y_proba:[7,10],y_scaler:6,y_test:[0,1,3,4,5,6,7,9,10,11],y_test_onehot:1,y_test_predict:0,y_tot:4,y_train:[0,1,3,4,5,6,7,9,10,11],y_train_mean:6,y_train_onehot:1,y_train_predict:0,y_train_scal:6,y_val:1,ye:[3,6,7],year:[0,15],yet:[0,1,6,8,11,13],yi:13,yield:[0,2,5,6,8,10,12,13,14,16,18],yk:8,ylabel:[0,1,2,3,4,5,6,7,8,9,10,13,18],ylim:[3,6],ym:9,ymesh:13,yn:0,yo:[8,9,10],yoshua:[1,20],you:[0,1,2,3,4,5,6,8,9,10,11,13,15,16,18,20],young:0,your:[1,2,4,5,6,8,11,13,15,16],yourself:[11,13],youtub:15,ypred:6,ypredict2:13,ypredict:[0,13],ypredictlasso:5,ypredictol:5,ypredictown:6,ypredictownridg:6,ypredictridg:[5,6],ypredictskl:6,ys:9,ytest:6,ytick:[3,6,8,9],ytild:[0,6],ytildelasso:5,ytildenp:0,ytildeol:5,ytildeownridg:6,ytilderidg:[5,6],ytrain:6,yx:16,yy:16,yz:16,z:[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18],z_0:16,z_1:16,z_2:16,z_:[1,2,12,16],z_c:1,z_h:1,z_hidden:2,z_i:[1,12],z_j:[1,12],z_k:12,z_m:1,z_mod:9,z_o:1,z_output:2,zaman:18,zaxi:6,zero:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],zeros_lik:4,zfill:4,zip:[2,4,6,13],zl:5,zm_h:0,zn:0,zone:0,zx:16,zy:16,zz:16},titles:["3. Linear Regression","14. Building a Feed Forward Neural Network","15. Solving Differential Equations with Deep Learning","16. Convolutional Neural Networks","17. Recurrent neural networks: Overarching view","4. Ridge and Lasso Regression","5. Resampling Methods","6. Logistic Regression","8. Support Vector Machines, overarching aims","9. Decision trees, overarching aims","10. Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods","11. Basic ideas of the Principal Component Analysis (PCA)","13. Neural networks","7. Optimization, the central part of any Machine Learning algortithm","12. Clustering and Unsupervised Learning","Applied Data Analysis and Machine Learning","2. Linear Algebra, Handling of Arrays and more Python Features","Teaching schedule with links to material","1. Elements of Probability Theory and Statistical Data Analysis","Teachers and Grading","Textbooks"],titleterms:{"1":[],"10":17,"11":17,"12":17,"13":[],"14":17,"15":[],"16":17,"17":17,"18":17,"19":17,"2":[0,17],"20":[],"2021":[],"2022":19,"21":17,"22":17,"23":17,"24":17,"25":17,"26":17,"27":[],"28":17,"29":17,"3":17,"30":17,"31":17,"34":17,"35":17,"36":17,"37":17,"38":17,"39":17,"4":17,"40":17,"41":17,"4155":[],"42":17,"43":17,"44":17,"45":17,"46":17,"47":17,"5":17,"6":[],"7":17,"8":[],"9":17,"case":[8,10,18],"do":1,"final":12,"function":[0,1,6,7,8,10,11,12,13,18],"import":[5,16],"new":4,A:[0,1,4,8,9],And:13,Ising:6,The:[0,1,2,3,5,6,7,8,9,11,12,15],With:4,activ:[1,12],actual:[],ad:6,adaboost:10,adam:13,adapt:10,adjust:1,adversari:4,again:[3,9],aim:[8,9],algebra:16,algorithm:[9,10,11,12],algortithm:13,all:8,an:[0,4,10],analys:5,analysi:[0,5,6,11,15,18],ani:13,anoth:9,appli:15,approach:[0,8,14],approxim:12,architectur:1,arrai:16,assist:19,august:17,autocorrel:18,autograd:[2,13],automat:13,back:[1,11,12],background:15,bag:10,base:13,basic:[0,5,7,9,10,11,16],batch:1,bay:5,befor:11,better:8,bia:6,binari:1,binomi:[],bird:10,block:[],boost:10,bootstrap:[6,10],boston:0,breast:1,bring:12,build:[1,3,9],calcul:[],cancer:[1,7,9,11],cart:9,central:[13,15,18],chain:12,chang:10,chi:0,choos:1,cifar01:3,classic:11,classif:[1,9,10],classifi:8,clip:1,cluster:14,cnn:3,code:[0,1,2,5,9,11,12,14],collect:[1,3],compar:[2,10],complex:[0,6],complic:6,compon:11,comput:9,con:9,concept:18,conjug:13,continu:[],convex:[8,13],convolut:[3,12],correl:11,cost:[1,10],cours:[15,20],covari:[5,11,18],cross:6,cumul:[],data:[0,1,3,6,7,9,11,15,18],dataset:[1,3],decai:2,decis:[9,10],decomposit:[5,11,16],deep:[1,2],defin:1,definit:[],degre:0,demonstr:[],dens:0,deriv:[5,12],descent:[2,10,13],detail:3,develop:1,deviat:[],diagon:11,dice:[],differ:8,differenti:[2,13],diffus:2,dimension:[2,3,8],disadvantag:9,discret:18,disguis:[],distribut:[5,18],domain:18,down:1,dropout:1,element:[0,18],elimin:16,ensembl:10,entropi:9,environ:0,equat:[0,2,12],error:[0,10],euler:2,evalu:1,event:[],exampl:[0,1,2,3,4,6,7,8,9,10],exercis:[0,6],expect:18,experi:18,explor:0,exponenti:2,extrapol:4,extrem:10,ey:10,fall:19,famili:1,famou:16,featur:[9,16],feed:[1,12],fine:1,first:[4,12],fit:[0,10],forc:3,forest:10,forward:[1,2,12],fourier:3,frank:6,freedom:0,frequentist:0,from:[5,10,12],full:2,further:[3,5],fy:[],gan:4,gaussian:16,gd:13,gener:[4,9],geometr:11,gini:9,good:0,grade:19,gradient:[1,2,10,13],growth:2,ha:15,handl:16,hidden:2,hous:0,how:[],hyperparamet:1,hyperplan:8,i:1,id3:9,idea:11,implement:1,implic:5,improv:1,includ:13,increment:11,index:9,inform:19,input:2,instal:15,instructor:19,interpret:[5,11],introduc:11,introduct:[0,6,15,16],invers:[5,16],iter:10,its:[],jackknif:[],jungl:10,kera:[1,3],kernel:[8,11],lagrangian:8,lasso:[5,6],later:5,layer:[1,2,3,12],learn:[0,1,2,11,13,14,15],least:[5,6],level:10,librari:15,likelihood:7,limit:[1,13,18],linear:[0,8,13,16],link:[5,11,17,20],logist:[7,13],lu:16,machin:[0,8,13,15],main:18,make:[0,9,10],mani:[10,12],materi:17,math:5,mathemat:[3,5,8],matric:[5,16],matrix:[1,5,11,12,16],matter:0,mean:0,meet:[5,10,18],mercer:8,mersenn:[],method:[6,9,10,13],mlp:12,mnist:[3,4],model:[0,1,4,6,12],moment:[],momentum:13,moon:[8,9],more:[3,6,16],multilay:12,multipl:[1,3],multipli:8,name:[],network:[1,2,3,4,7,12],neural:[1,2,3,4,12],non:8,normal:[0,1],norwai:[],notat:12,novemb:17,now:[1,9],nuclear:0,nueral:7,number:[0,2,18],numer:[2,18],numpi:16,object:3,observ:[],obtain:11,octob:17,od:2,off:6,ol:[5,6,13],one:[2,12],oper:16,optim:[1,8,13,15],ordinari:[5,6],organ:0,oslo:20,other:[4,9,11,12,16],our:[0,4,5,11,13],outcom:15,output:2,overarch:[0,4,8,9],overview:10,own:[0,10,11],packag:16,part:[13,15],partial:2,pass:1,pca:11,pdf:18,perceptron:12,perform:[1,9],period:3,perspect:1,point:4,poisson:2,polynomi:3,popul:2,practic:13,pre:[1,3],predict:4,prerequisit:[3,15],princip:11,principl:3,pro:9,probabl:[5,18],problem:[1,2,13],procedur:9,process:[1,3],program:[2,13],project:6,prop:13,propag:[1,12],properti:[5,18],pseudo:[],python:[0,9,15,16],quick:8,ran0:[],random:[10,11,18],read:9,real:6,recip:[],recurr:[4,12],reduc:0,reduct:3,reformul:2,regress:[0,5,6,7,9,10,13],regular:1,relev:20,relu:1,remark:3,remind:[6,8],requir:[2,15],resampl:6,rescal:6,resourc:2,revisit:13,ridg:[5,6],rm:13,rng:[],rule:12,s:[8,10],sampl:11,schedul:17,schemat:9,scheme:2,scikit:[0,1,11],select:[],semest:19,septemb:17,set:[0,2,3,9,12],sgd:13,should:1,simpl:[0,4,9,13],singl:10,singular:[5,11],situat:[],soft:8,softmax:1,solv:2,solver:13,some:[13,16],specifi:2,split:0,squar:[0,5,6,10],standard:13,state:0,statist:[5,6,15,18],steepest:[10,13],stk3155:[],stochast:[13,18],superposit:3,supervis:1,support:8,svd:5,systemat:3,teach:[17,19],teacher:19,techniqu:[6,11],technolog:15,tensorflow:[1,3],test:[0,1],textbook:20,theorem:[5,8,11,12,18],theori:18,three:[],tip:13,togeth:12,top:1,toss:[],toward:11,trade:6,tradeoff:6,train:[0,1,4],transform:3,tree:[9,10],tune:1,two:[3,8,15],type:[2,4,12],uncorrel:[],uniform:[],univers:[12,20],unsupervis:14,up:[0,2,9,12],us:[0,1,2,3,7,13,15],valid:6,valu:[5,11,18],variabl:18,varianc:6,variou:0,vector:[8,12,16],view:[0,4,10],visual:[1,9],vs:3,wai:9,wave:2,week:17,weekli:17,what:0,which:1,why:[],wisconsin:7,write:[4,11],xgboost:10,your:[0,10]}}) \ No newline at end of file +Search.setIndex({docnames:["chapter1","chapter10","chapter11","chapter12","chapter13","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","chapteroptimization","clustering","intro","linalg","schedule","statistics","teachers","textbooks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter10.ipynb","chapter11.ipynb","chapter12.ipynb","chapter13.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","chapteroptimization.ipynb","clustering.ipynb","intro.md","linalg.ipynb","schedule.md","statistics.ipynb","teachers.md","textbooks.md"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19],"00":[0,1,3,5,6,11,18],"000":[1,3],"0000":[],"00000":[],"000000":[5,11],"00000000e":5,"0000e":3,"0001":[1,3],"000148":[],"00019998":5,"00024087":5,"00028369228101198006":[],"00029012":5,"0003043256065368937":9,"00031535148309580783":6,"0003153514830958081":[],"0003153514830958126":[],"0003153514830958235":6,"00034944":5,"000417932":2,"00042089":5,"000464088":2,"00050694":5,"00058016":6,"000599":[],"00060705":[],"00060708":6,"00061058":5,"00062582":6,"00062595":[],"00066668":6,"00068734":6,"00068941":6,"00069103":[],"00073541":5,"00076495":6,"00076919":6,"00076925":[],"0007698473260556325":6,"0007698473260556334":[],"0007698473260556339":[],"0007698473260556344":6,"00079123":[],"00079130":6,"00079968":5,"00084705":[],"00084711":6,"00085883":6,"00085884":[],"00087697":6,"00088573":5,"00092645":6,"00092646":[],"00096314":5,"001":[1,2,8,13],"00100519":6,"0010479245355337968":[],"0010479245887943952":6,"00105081":6,"00106677":5,"00107405":6,"00111756":6,"0011526":6,"00115999":5,"0011828302640124":[],"00118504":6,"00118527":[],"001263":[],"00128479":5,"001323":6,"00137823":6,"00137835":[],"00139705":5,"00149311":6,"00149956":6,"00152117":6,"00154733":5,"00156379":[],"00156382":6,"00168251":5,"00174276":6,"00175331":6,"00186347":5,"001988":[],"00198806":[],"00200":8,"00202624":5,"00202756":6,"00217499":6,"00224413":5,"00228741":6,"0023548":6,"002381316302584885":[],"002381316302584886":6,"0023813163025848865":6,"00242999":6,"00243186":6,"0024401":5,"00249435":6,"002526":[],"00266858":2,"00270244":5,"00274989":6,"00275135":[],"00289724":6,"00293838":5,"002948":[],"0030828":[],"003083":[],"00310113":2,"00312361":6,"00315593":6,"003215318065760509":[],"0032153180657605125":6,"00323332":6,"0032542":5,"003301":6,"003395515459204093":6,"0033955154592040944":[],"00353823":5,"0036237":6,"0036367":6,"00369758":6,"003704":[],"003717":[],"003759":[],"003774":[],"003788":[],"0038335":6,"00390021":[],"003909404072811217":6,"003909404072811231":[],"00391839":5,"0039987":6,"004":5,"004091940707753948":6,"0040919407077539514":[],"00410387":6,"00410478":6,"004113634617443116":6,"0041136346174431284":[],"004113634617443131":6,"004113634617443135":[],"00411363461744314":6,"004113634617443141":[],"004155986345861364":6,"004155986345861374":[],"00415763":[],"00424909":2,"00424967":6,"00426027":5,"00433417":11,"00440346":6,"00443743":6,"00445655":11,"004579219539673834":6,"004579219539673836":[],"00458878":6,"004610275230656187":6,"004610275230656294":[],"00462287":6,"00471782":5,"00472199":6,"00472512":6,"0049544":6,"004999999999999984":[],"004999999999999994":[],"004999999999999996":0,"00512927":5,"00517114":6,"00526348":6,"0053018":6,"00554552":6,"00556826":6,"0056799":5,"00577441":[],"00579953":6,"00588657":6,"00607783":6,"006162":6,"00617499":5,"00630331":6,"00642221":6,"00660427":6,"00672607":6,"00673393":13,"00673407":6,"00676387":6,"0068011":6,"00683748":5,"00683964":6,"007012403613997257":[],"007024126888936694":[],"0070241268889382116":6,"00719176":6,"00727646693":0,"007315":[],"0074331":5,"00751823":[],"00759119":6,"00784393":6,"00803064":6,"0080866254785146":[],"00813803":6,"00817631":6,"00823002":5,"00827728":6,"00831018":6,"00834567":6,"00848904":6,"0086649156":0,"008675369724975977":5,"008675369724976501":[],"00894639":5,"00905423":6,"009163470508352211":[],"009163470508352218":5,"009164545680330616":6,"00917248":6,"00934499":6,"009450756365829578":[],"0096208":6,"00990475":5,"00992331":6,"00996754":6,"00it":6,"01":[0,1,2,5,6,9,11,13,18,20],"010018312644139205":6,"010018312644139347":[],"0100706":6,"010331721306655144":6,"01033172130665515":[],"010516485576646513":6,"010516485576652856":[],"01066519":6,"01076611":5,"0110":18,"0110407067093945":[],"01104071":[],"011076219011339788":[],"01107621901137465":6,"011225":2,"0113104":6,"01179792":6,"01191824":5,"01199624e":18,"012073649439965807":[],"012073649472576395":6,"01212754811385597":18,"01219292":6,"01223198":6,"01231917":6,"012633802944855959":[],"01290947":6,"01295356":5,"013121573975499602":[],"013121573975499604":[],"01312157406137079":6,"013121574061370796":6,"01318643":6,"01347916":6,"01348565":6,"01367553":6,"01397146":6,"01405935":6,"01416528":6,"014209325470380275":[],"01433809":5,"014436800088896274":6,"014436800088969727":[],"01449782":6,"01458337":6,"0146081":6,"01463049":6,"015072388895177088":[],"0150723888951771":6,"015072388895177109":[],"015072388895177239":6,"01509543":13,"01530715721129232":[],"01531845":6,"01538461538462":[],"01549377":6,"01558197":5,"016285782696017055":6,"016285782696075054":[],"01633913":6,"01640891":6,"01655318":6,"016587414993037307":[],"016587414993045405":6,"01691985":6,"01708781":6,"01708852":6,"01713366":6,"01724499":5,"01735584819559184":[],"017355848195591845":[],"017355848195593354":6,"01756972":[],"01799917e":18,"01817152":[],"018232":[],"01831036e":6,"01831130e":[],"01831200e":[],"01831207e":6,"01866537":6,"01869785e":18,"01873344":11,"01873869":5,"01898855":6,"01905883":6,"01908936":6,"019587":[],"01963611":6,"01969145":6,"019754165271682844":6,"01975416527179247":[],"01975848":6,"02":[0,4,6,7,12,18],"02024962":6,"02054837e":6,"02068067":6,"02073509":5,"0209518407597062":18,"02098261":6,"02123176":6,"021250026482402":11,"02159270458799264":[],"021592704587992645":[],"021592704588021164":6,"021592704588021167":6,"02198702e":6,"022022882954618364":[],"02208512":6,"02228115":6,"02229529":6,"02252765":5,"022556":11,"02255619":11,"02299949826036602":[],"0229994982603662":6,"02348765":6,"02365049":6,"0245528":6,"02492265":5,"02493054":[],"02498832":6,"02503753":6,"02511518":6,"02522069":6,"025709":11,"02586427":6,"0260906":6,"02625193":8,"02625928":13,"026408391362671896":[],"02642055e":18,"026605727637176654":[],"02660572763718461":6,"026605727637184613":6,"02707227":5,"02723445":6,"027609773491022314":[],"027609773491022387":6,"027609773491022407":6,"02786488":11,"027865":11,"02857":4,"02917662":11,"029177":11,"02926396":[],"029613363972682966":[],"029733":[],"02976145":6,"02994311":5,"02f":6,"03":[1,6],"03032441e":6,"03056589":[],"030566":[],"03071040e":18,"03076923076924":[],"03077640549":4,"03099776":5,"031":5,"03187339273559067":[],"03196357":6,"03251863":5,"03256632e":1,"03267527":6,"03278964":[],"032790":[],"03279636":6,"0330308045180234":[],"0330308045183163":[],"0330308045183219":6,"0330308045190182":6,"033657685071527485":[],"033657685071527624":6,"03382304823545749":11,"03447512":6,"03562355":6,"03568439":6,"0358909447132981":[],"0359565":5,"03630548":6,"03707133":11,"037559":11,"03755944":11,"03761519":[],"03781367141738885":[],"03781367141738886":[],"037813671417388985":6,"03781367141738899":6,"03794112":16,"03814292":6,"03815288":6,"038300":11,"03850557":11,"038506":11,"039039":5,"03981057":16,"0399676689527968":6,"0399676689527975":6,"04":[1,6,11,18],"04010697":6,"04063602":6,"041":[],"041148729430502":6,"041148729430523":6,"0411487294305246":[],"0411487294305746":[],"04179719":[],"041797190646905":[],"04220758":6,"04284519":[],"043":[],"04315108":5,"0433816":[],"04346721":5,"04355837":6,"04362":[],"04368707":16,"0437499":2,"04389027":6,"043927769551648":[],"04423486":6,"044334":[],"0444119":[],"044613":6,"04483457":[],"04537385":6,"04543942":6,"04566964":6,"0458":9,"04615384615386":[],"04621521":[],"04648335":5,"0466":[],"04683565":5,"04775904":16,"04784395":6,"04818727730430296":[],"048187277304303056":6,"048653428302840175":16,"04892055":6,"04909093":6,"04912436":6,"04930820e":18,"0495569966278238":6,"0495569966278269":6,"0495569966278315":[],"04it":[],"05":[1,3,4,6,13],"05009826":6,"05087958":[],"05100875":6,"051649":11,"0517473":5,"05227921801205691":[],"05227921801205692":[],"052279218012057004":6,"05255759":[],"05263":[],"05290417684691035":[],"05302":[],"05364854":8,"05383795":6,"05434571":16,"05447415":6,"054585":[],"054785":[],"054963":[],"05505310046362":[],"05505310046363":2,"055137":[],"055320":[],"05533":[],"055676":[],"05614483":5,"05623":[],"05648":[],"05651951":6,"056528":11,"05667":[],"057088709963182":[],"057163681553428394":6,"05716368155351588":[],"0572":[],"05756733":[],"05785343":6,"05789007":6,"057899":11,"05796251":6,"05807125":6,"05883":[],"05884":[],"059013":5,"059294":11,"059378":11,"059601":5,"059783":[],"05999":[],"06":[6,13],"060080":[],"060183":[],"06020587":6,"06021285":[],"060213":[],"060228":11,"060309":5,"06043581":6,"060507":[],"060655":[],"060781":[],"060841":[],"061025":[],"061048":[],"061149":5,"061321":[],"061390":[],"061509":[],"061604":[],"06160438":[],"061701":[],"061745":[],"061898":[],"061917":[],"061923":11,"06200174":5,"06208238634231944":6,"06208238634231953":[],"062136":5,"062142":[],"062292565":4,"062294":[],"062391":[],"062409":11,"062411":11,"062435":[],"062451":[],"062534":[],"062676":11,"062706":11,"062834":[],"062884":[],"063052":5,"063078":[],"063250":[],"063343":[],"063364":5,"063513":[],"063631":5,"063657":[],"063752":11,"063851":5,"063872":[],"063874":5,"06388888888888888":[],"064052":[],"064108":[],"064110":5,"064184":[],"064274":5,"064384":[],"06444":[],"064469":[],"06453579006728315":[],"06453579006728322":6,"064538":11,"064604":11,"064648":[],"064658":5,"064681":[],"064838":5,"06491736":6,"064918":[],"064931":11,"064964":[],"06497046":[],"065020":5,"065106":[],"065249":11,"065314":11,"065348":5,"06547790180152352":6,"06547790180152353":6,"06547790180152357":[],"06547790180152363":[],"065514":[],"065557":[],"065575":[],"065641":11,"065730":11,"065826":5,"065892":[],"065974":5,"06602663":[],"066110":[],"066194":[],"066309":[],"06637":[],"066449":5,"066558":5,"066609":[],"066670":11,"0666807":2,"066729":11,"066753":[],"066789":5,"066837":11,"066954":[],"067079":[],"067213":5,"067236":[],"067240":5,"06724062":5,"067282":11,"067392":11,"067402":11,"067432":11,"067544":[],"067597":5,"067599":5,"067612":5,"067620":5,"067622":5,"067675":[],"067714":[],"067723":5,"067769":5,"067956":11,"068059":11,"068093":11,"068094":[],"068103":[],"068120":[],"068318":5,"068363":5,"068376":5,"06844519414009438":[],"06844519414009442":6,"06844519414009444":6,"068461":11,"068538":11,"06858699":[],"068608":5,"068642":5,"068659":[],"068735":5,"068806":5,"068809":[],"068831":[],"068937":[],"068965":5,"068991":5,"068992":5,"069085":11,"069091":[],"069181":5,"069275":11,"069408":5,"069409":5,"069441":5,"069455":[],"069584":[],"069672":[],"069685":11,"069754":[],"069796":5,"069847":5,"069877":11,"069884":11,"069888":5,"069912":[],"06it":6,"07":6,"070028":[],"070043":[],"070071":[],"070074":5,"070150":5,"07016":[],"070163":11,"07017":[],"070343":11,"070379":[],"07039":[],"070419":11,"070429":11,"070491":5,"070492":11,"070576":[],"070612":[],"07062318":6,"070630":5,"070635":[],"070889":11,"070911":[],"070950":11,"070972":11,"07099747918547346":[],"071022":11,"071086":[],"071112":5,"071136":5,"07115":[],"07129539":[],"0712953943627344":[],"0713":0,"071387":[],"07145103":11,"071467":5,"0714956":16,"071529":5,"07160048164232467":6,"07160048164248561":[],"071614":5,"071632":5,"071698":[],"071705":[],"071767":5,"071921":5,"071935":[],"07201957":[],"072216":11,"072242":[],"072348":[],"072442":11,"072492":[],"072530":[],"072617":[],"072620":[],"072750":[],"07285":3,"0728785":[],"07291729":18,"072928":[],"073016":[],"073062":11,"073136":11,"073225":[],"073230":11,"073280":11,"073362":[],"073368":[],"073423":[],"073436":11,"073449":5,"07345504":[],"073531":[],"073575":11,"073583":[5,11],"073598":11,"073629":11,"073695":[],"073699":5,"073719":5,"073761":11,"073810":11,"073816":5,"073827":11,"073907":[],"073949":5,"074034":5,"074067":11,"074111":11,"07413172":[],"074149":11,"07421084":5,"074237":5,"074336":[],"074375":5,"074488":[],"074530":11,"07456491":5,"074573":11,"074666":[],"074693":5,"07490892":6,"074945":[],"075195":5,"075241":5,"075573":[],"075594":5,"075760":5,"075820":[],"075959":5,"076130":11,"076204":[],"076216":11,"076338":5,"0764924":6,"07656896":[],"076589":5,"076604":11,"076628":5,"07678":[],"076780":11,"076804":11,"076895":11,"076905":11,"076938":11,"076955":5,"077003":5,"077013":11,"077015":11,"077022":[],"077083":11,"077211":11,"077349":11,"07735703":16,"077402":5,"077425":5,"077452":11,"077467":[],"07777777777777778":1,"077793":5,"078040":5,"0782":6,"07820":[],"078253":[],"078254":11,"078269":11,"078299":11,"078314":11,"078436":11,"078548":[],"07864":[],"078667":[],"07871":[],"07878641":16,"078911":[],"078992":[],"07903849":16,"079157":5,"079281":5,"079347":[],"079383":5,"079389":5,"079405":5,"079406":[],"07944154":16,"07968918676726029":[],"0796891867672603":6,"079729":[],"079839":[],"079847":[],"079893":[],"07989327":[],"07999999999998":[],"08":[13,18],"080106":[],"080137":[],"080256":[],"080297":5,"080312":[],"080319":5,"080334":[],"080347":[],"080370":[],"080406":[],"080410":[],"08041015":[],"08043851":5,"080517":[],"080582":11,"080593":11,"080647":11,"080706":11,"080738":11,"080801":[],"080847":5,"08085812":[],"080916":[],"080984":11,"081046":11,"081072":11,"081140":[],"081144":11,"081233":5,"081253":5,"08131003":6,"081388":11,"081431":[],"081483":[],"081533":5,"081540":[],"08156108":6,"081773":[],"082174":[],"082183":[],"082295":11,"0823185":[],"082451":[],"082503":11,"08251519":6,"082536":11,"082896":11,"082900":[],"08299273e":6,"083015":5,"083053":[],"08318298e":1,"083220":[],"083227":[],"083276":11,"08328216846752691":11,"08333333333333333":1,"08336233266":4,"083404":[],"083441":[],"083506":[],"083527":[],"083600":[],"083692":[],"08376632":6,"083766322923899":6,"0837663229239016":[],"0837663229239025":[],"0837663229239043":6,"083799":[],"083829":[],"083977":[],"084000":[],"084101":[],"084184":[],"084224":[],"084226":[],"08426840630693411":[],"08426840630693412":6,"08426840630693413":6,"08428156":16,"084282":[],"084364":[],"084400":[],"084408":[],"084414":5,"084444":[],"084484":11,"084536":[],"084549":[],"08455":[],"084570":[],"084604":[],"084629":[],"08464758160254343":5,"084670":[],"084683":[],"084702":5,"08474":[],"084777":[],"084862":[5,11],"084904":5,"084909":5,"084965":[],"085018":5,"085044":[],"085163":11,"085167":[],"085184":[],"085185":[],"085361":[],"085416":[],"08551306":6,"085764":[],"08576932":6,"085879":11,"08593216":6,"086074":11,"086076":5,"08611111111111111":1,"086112":11,"086303":[],"08630331":[],"086567":[],"08673755293381497":[],"086807":5,"086872":5,"086890":11,"08690":[],"086956":11,"087501":[],"08758":[],"08759":[],"087834":[],"08816688":[],"088176":[],"0881981":5,"088212":5,"088526":11,"088611":[],"088631":[],"08871404":5,"088809":[],"088816":[],"088825":[],"088853":[],"08888888888888889":1,"088926":[],"08902":[],"089059":[],"08917679":5,"089177":5,"089212":[],"089329":[],"089425":[],"089501":11,"089614":[],"0896981":6,"08996":[],"09":1,"090028":[],"090229":[],"09085624":16,"090929":[],"091051":11,"091060":[],"09117221":[],"091224":[],"091236":[],"091340":[],"091349":[],"091363":[],"091414":[],"091416":[],"091426":[],"09149881":[],"091630":[],"09166666666666666":1,"091696":11,"0917":9,"09170751":[],"09172408":6,"091891":[],"092066":16,"09216046":[],"0923":[],"09251":[],"09297039":[],"093247":[],"0934597075922044":[],"0938":[],"094082198961999e":6,"0940821989624095e":[],"094082198966615e":6,"0940821989673748e":[],"09440475":18,"094404754965417":18,"09444444444444444":1,"094472507965532":11,"095510":[],"095702":[],"095871":[],"09609807":5,"096173":[],"096472":11,"096623":[],"09672929714683368":[],"097360":[],"09744":[],"09744272":6,"09780":[],"09791":[],"09849763":11,"098498":11,"09856879":16,"09861229":16,"098802859381565":16,"099":[],"09903804":8,"0991919894927399":6,"099191989493334":[],"09951287404314545":1,"0n":0,"0s":[3,4],"0x11da42d90":13,"0x11e031e50":13,"0x7fad10f9a280":[],"0x7fad20f69be0":[],"0x7fd098df3280":[],"0x7fd0a9063be0":[],"1":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20],"10":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],"100":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18,19],"1000":[0,1,2,4,5,8,11,13,14,15,18],"10000":[2,5,6,10,11,18],"100000":8,"10001":10,"1001":18,"1002":18,"1003":18,"10030":[],"10044225464078282":[],"1005":18,"10077114273548984":6,"1009":18,"1011":18,"1013":18,"1013904243":18,"10141413e":6,"1015":18,"102":3,"1022233262115424":[],"10222333":[],"1023":18,"10230":[],"1023111":16,"1024":3,"1026":18,"1027":18,"1028":[],"103":1,"1030":18,"10302062":16,"10340":[],"1037":18,"10378326e":1,"1038":18,"10391807":6,"10398646080125035":[],"10398646080125036":6,"10398646080125037":6,"1040":18,"10405456":11,"10430":[],"104411":[],"10455924":[],"1047":18,"10505137":16,"10520":[],"10555555555555556":1,"1056":[],"10589577":5,"106":[],"106095":11,"10620135":16,"108":6,"109":[],"10913":6,"10931453":6,"10960":[],"1096767776832326":18,"10967678":18,"10th":9,"10x":0,"11":[0,2,3,4,5,6,7,8,9,10,11,12,13,16,18,20],"110":[],"1100":18,"1101":18,"11022302e":5,"11046771":16,"111":[1,7,12],"11100":[],"1122558214":[],"112383":11,"1124":[],"1125":3,"11297834":[],"1136":3,"11362930e":[],"11388888888888889":1,"1139":3,"11390":[],"114":3,"11402309":16,"114437":[],"11462415":5,"11482289e":6,"11499517":[],"11507992e":1,"11547777218875695":6,"11547777218875696":6,"11547777218940905":[],"11547777218940906":[],"115822":6,"11590":[],"11598862":18,"11598862273198":18,"11604844":[],"116048442683864":[],"11660":[],"11666666666666667":1,"11674401539815678":18,"117":8,"11744554e":6,"11780":[],"11790868":[],"117986":[],"118":2,"1182":[],"1183":[],"118318":[],"1184":4,"11840":[],"1185":[],"1186":[],"11890":[],"119":2,"1199":[],"119936":2,"119999999999976":[],"11it":6,"12":[0,1,2,3,4,5,6,8,9,11,12,13,16,18,20],"120":[2,3],"1203":[],"1203284":8,"1206":8,"12069773":16,"121":[2,8,9,10],"12182967":6,"12196674":[],"122":[2,8,9,10],"12222222222222222":1,"122439":[],"1224392":[],"12288563":5,"122886":5,"123":[],"12318726e":6,"12333649":6,"12345260617257443":9,"123459876":[],"123711":6,"12380":[],"124":0,"12400":[],"125":[],"1250":[],"125000":[],"12552073e":6,"126":[],"1261":[],"12618549":5,"1265":[],"127":4,"1270":[],"127043":[],"1271":6,"1277":6,"127773":[],"12777777777777777":1,"12788968":[],"12790":[],"128":[3,4,13],"128664":6,"12898627064868978":[],"12937662":[],"12945452":[],"1297":[],"1298":9,"12adb44b1c20":7,"12m":3,"13":[0,2,4,5,6,9,11,12,13,16,18],"130":[],"13003291":6,"13055555555555556":1,"131":[],"13117061":0,"1314":[],"132":[],"13220608e":6,"13229545716505003":16,"132360":[],"1323603":[],"1326":[],"13280":[],"133":7,"13333333333333333":[],"135":[],"13519106":[],"13535942":6,"136":[],"1360":[],"13609760e":18,"1361":[],"1362":[],"1363":[],"1364":[],"13646574":5,"13661243e":6,"13679863":6,"1371":6,"13740":[],"137400784702911":[],"137652":11,"1378":[],"1382":[3,4],"1383":[3,4],"1384":[3,4],"1385":[3,4],"1386":[3,4],"13865173":5,"13876586436927824":5,"138775":11,"1388888888888889":1,"13890":[],"1392559581788775e":[],"1392559584983597e":[],"1392559585048734e":6,"13925595925919e":6,"14":[0,2,4,5,6,8,9,10,11,12,13,16,18,20],"140":[],"14021063":6,"1404":[],"14042769":[],"140428":[],"141":2,"14100":[],"1416398":6,"14174745":6,"1418":[],"142":2,"14250":[],"142857":[],"143":[2,7],"1435666":[],"14360598":[],"1437":1,"144":2,"14400":[],"1440501043841336":1,"14440":[],"1446729567":4,"14484695":16,"145":2,"146":[],"147":[],"14710":[],"14722222222222223":1,"147400":11,"14741468":[],"147420":11,"14783702":[],"1479":[],"148":[3,4],"14812206":6,"14818":[],"1484256":[],"148564":6,"14859":6,"148768":[],"149":[3,4],"149213":6,"14932651":[],"14988578":[],"149886":[],"14g":6,"14it":6,"15":[0,2,4,6,7,8,9,12,13,16,18],"150":[3,4,8],"15005476":5,"15098090e":6,"151":[3,4],"15130074e":6,"151986":[],"152":[3,4],"15200":[],"15258907":[],"1527777777777778":1,"153036":[],"153106":[],"1533795":[],"153760":[],"15384615384616":[],"154":[],"15454301":[],"154720":[],"15483121":[],"154911":[],"155":[],"155491":[],"155687":[],"155883":[],"156":[],"1562":[],"15629539":[],"15680777":16,"157":[],"15717291":16,"1575":[],"158":[],"1583767":16,"15843769515580663":18,"1586300629904382":[],"1587":[],"15891336":16,"159":[],"1590":[],"15990":[],"15g":6,"15it":[],"16":[1,2,3,4,5,6,8,9,10,13,18],"160":[],"1603":3,"1604":[],"1605":[],"160539":[],"1606":[],"1607":[],"16111111111111112":1,"1612":[],"16211139":5,"16220":[],"16231451":4,"1625":[],"1628":[],"163":[],"1630775253":[],"16342407":5,"16343471":6,"16384":3,"16500":[],"166":[],"16660817":[],"166667":[],"167":[],"16740002":16,"168":[],"16805821e":6,"16807":[],"16827044":[],"16832385":[],"16b8e3cda33a":1,"17":[1,2,4,5,6,8,13,18],"17084902":[],"1709":[],"17174962e":1,"17222222222222222":1,"1726":[],"17300":[],"1731":[],"17339342":[],"17446471":6,"1752":[],"175300":[],"17641709":6,"176880142835407":[],"17777777777777778":1,"17801022":5,"17861098":6,"17917768":5,"17930649":16,"17949575":5,"17953942":11,"1797":[1,3],"18":[2,4,6,7,8,9,10,13,18],"180":[],"18029127":5,"1807":4,"1809":[],"181":[],"1810":4,"1812":[],"18156717":16,"1821":[],"18276924":[],"18327677":[],"18333333333333332":1,"18393678":[],"184":[],"184519":[],"184895":[],"185":[],"1851":[3,4],"1852":[3,4],"18526":[],"185278747229417":[],"1853":[3,4],"1854":[3,4],"1855":[3,4],"186":[],"1860":[],"1861":[],"18611111111111112":1,"18613217e":6,"18660":[],"18673098":11,"18682538":[],"1887":6,"18912963":16,"189496":[],"189622":[],"18it":[],"19":[2,4,6,13,18],"19003":6,"191262820314401":[],"19166666666666668":1,"19207979":5,"19213479":[],"19220":[],"193":[],"19354258":[],"19379506":[],"19394283":[],"194":[],"1940":0,"19404282648955e":6,"194042826653172e":[],"194042826815498e":[],"1940428268204826e":6,"1943":12,"1944":[],"19444444444444445":[],"19466812":[],"1950915150":[],"1954":[],"1956":[],"19569961":6,"1961":[],"1962":[],"1963":[],"1964":[],"1965":[],"1970":16,"1973":9,"197370":11,"19740":[],"1979":6,"19800":[],"19853775e":18,"1989":[],"199":[],"19937":[],"19994371":6,"1_1":12,"1_2":12,"1_3":12,"1cm":[0,8,10,18],"1d":[1,2,3],"1e":[1,2,3,4,14],"1e10":14,"1e4":6,"1f":1,"1k":16,"1n":0,"1s":3,"1x":0,"2":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],"20":[0,1,2,4,6,7,8,13,18],"200":[0,2,3,4,8,9,10],"2000":0,"200000":[],"20015436":6,"2004":13,"2006":20,"2010":1,"2011":1,"2014":4,"2015":1,"2016":0,"20174121":16,"2018":[0,6],"2018906331":[],"2019":[],"2021":[6,14],"2022":17,"2027":[],"20277777777777778":1,"203":6,"20320502":[],"20375361":[],"203753611274545":[],"20500":[],"20509391":[],"206":[],"2060":[],"20661216":[],"2069":[],"207545":11,"20756638":[],"20833333333333334":1,"20867052175006306":6,"20867052175109335":[],"20980":[],"21":[0,1,2,4,5,6,7,9,12,13,16,18],"210340":11,"21058097":5,"21130":[],"2116753732":4,"21169159e":6,"21265216":[],"213":6,"213103":11,"213743":11,"21472683":16,"2147483647":[],"21519063":16,"21596432":6,"216290":11,"216683":11,"21786964":16,"2188":[],"21919813":[],"21944444444444444":[],"2195":3,"21985165":13,"21997099":16,"22":[0,1,2,4,5,6,12,13,16],"22044605e":5,"220506557673408":18,"22094791":[],"221":8,"221180":[],"2216":[],"2218":[],"221805":2,"222400":[],"2225":3,"225":4,"2259440937":[],"226124657522696":[],"22612466":[],"22690428":5,"2284246870217459":6,"22842468702288576":[],"22842468702288582":[],"22847924":5,"22929905e":18,"2299":3,"22it":6,"23":[1,2,4,6,7,12,13,16],"23002365e":6,"23014274e":18,"231":[],"23103285":[],"2315033":[],"23167717":5,"2321528":5,"232153":5,"232435":[],"23297056":[],"23333333333333334":1,"233528":5,"234":6,"23522201":[],"2357089093":[],"2360682191515046":[],"2361111111111111":[],"2364":[],"237038":5,"23703839":5,"2379":6,"2397":[],"24":[0,1,2,4,6,13,16],"24140":[],"2416":[],"24175744e":6,"2419":[],"24276315":16,"2430":[],"24390":[],"24444444444444444":1,"244858":[],"24485843":[],"24512498":16,"246":2,"2470":[],"24770094":6,"24829908":5,"24906604e":6,"24924624":[],"2495":[],"25":[2,3,4,5,6,7,8,9,11,13],"250":[2,4,7,9],"2500":[],"25000":0,"250000":[],"250154":[],"2517560119":[],"251879":[],"252436":[],"25259666":16,"2526":3,"252866":[],"25286618":[],"253775":[],"255":3,"255001":[],"256":[2,4],"25617654e":6,"25617657e":[],"25617658e":6,"256962":[],"257":[],"2572":[],"2572495066":[],"2572e3a4b38d":1,"2575":[],"25792767":16,"25845e8df859":6,"259153":11,"2597":[],"25976336":[],"26":[2,4,6,13],"26079358":[],"26153846153846":[],"26186844":16,"2619":[],"26290036":[],"26294938":[],"2629493813057833":[],"26301436":5,"26306244":[],"264":4,"26409315307910025":6,"2640931530791003":[],"2640931530791005":[],"26409315307910053":6,"265":[],"2650":[],"265109911":4,"26531223e":18,"2654":[],"266":[],"26610075":[],"26666667":13,"26710969":5,"26780278":5,"268":[],"268227":[],"26822717":[],"269":[],"27":[0,1,2,4,6,13],"270":[],"2703":3,"27092897":6,"2750":[],"275341":[],"27562809e":18,"27621662e":18,"276263":11,"27692307692308":[],"27700":[],"2772":3,"2775623201":[],"27760":[],"278036":5,"27803645":5,"27n_":18,"28":[1,3,4,6],"28001319":[],"28047021":16,"280647":11,"28067036":16,"28097861":5,"280979":5,"2812":[],"282727":11,"283":[],"2830637392":4,"28336218e":6,"2836":[],"28390":[],"28475098":8,"28590743":[],"2861":18,"28634473":11,"286345":11,"2871":[],"2873":9,"2882":18,"2886":18,"2886847885377843":[],"28868479":[],"28875373":16,"2890":0,"2892":18,"28967287":16,"29":[4,6,7],"29149329":[],"2915":18,"29167186":5,"29229741":13,"2923076923077":[],"29512284":11,"295123":11,"2954":[3,4],"2955":[3,4],"2956":[3,4],"2957":[3,4],"2958":[3,4],"29588901":13,"29592539":[],"296247":[],"297":[],"2971492148":[],"2972":[],"29822833":6,"298273":[],"298375":[],"299267190588216":11,"299748":[],"2_":12,"2_1":12,"2_2":12,"2_3":12,"2_i":12,"2_m":[6,18],"2_t":13,"2_x":18,"2b":18,"2cm":8,"2d":[1,3,11,12,15],"2e":6,"2f":[0,7,9,10,11,12],"2ff97f4bf03b":[],"2g":2,"2g_i":2,"2k":3,"2m":6,"2n":[0,2,3],"2nd":9,"2p":18,"2pt":4,"2s":4,"2x":[0,3,8,13],"2x_ix_jy_iy_j":8,"2x_j":8,"2y_i":10,"2y_j":8,"3":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19],"30":[0,1,4,6,7,10,13],"30000":0,"30010":[],"30119421":8,"3017":[],"3018":[],"3019":[],"301927":[],"3020":[],"3021":[],"30258509":16,"302m":4,"303":6,"3037":[],"3038":[],"30384239":16,"3039":[],"303m":4,"3040":[],"3041":[],"30466214e":6,"304m":4,"30535506":[],"30552077":16,"30559547":[],"305m":4,"3063":[],"306m":4,"3072":3,"30761405e":18,"30787294":6,"307m":4,"308m":4,"309":0,"30940":[],"30b53504a633":0,"31":[4,6,12,16,18],"310":0,"311":0,"311m":4,"312":0,"3120271598582915":18,"3123314713548606":6,"31276579e":6,"312m":4,"313":0,"31318084":5,"314":[],"31457796":5,"315":6,"3155":[5,6],"316":[],"31605061":16,"31614188e":18,"317":[],"31718909":11,"317367":11,"317m":4,"31866499":13,"31896852":8,"319m":4,"32":[3,4,6,12,13,16,18],"3200":1,"32039227e":18,"32047562":[],"3208":2,"320m":4,"32149601703519115":6,"3214960170351912":6,"3215":[],"32179365":[],"32309075":[],"32320052":16,"324":2,"32458459":[],"324m":4,"3250":[1,6],"32512":[],"326238":[],"326m":4,"32721178":11,"327212":11,"32750531e":18,"32816737":[],"32903042":[],"3297":[],"32992274":[],"329923":[],"33":[3,4,12,14,16],"3303":[],"33066907e":5,"3310":[],"33166055e":5,"331939":[],"331m":4,"332331":[],"333":7,"3331":[],"33327369":[],"333274":[],"33333333":13,"3337":[],"33611111111111114":[],"33711888":[],"3384":[],"33900713":[],"33m":4,"34":[4,7,16],"3403":[],"34040204e":18,"340782":11,"34114547":5,"341m":4,"342680":[],"34305928":[],"3436":0,"3437":0,"3456":[],"34568872":16,"34569596":5,"3457":[],"3458":[],"34585355":16,"3459":[],"3460":[],"346810":[],"3469819128513336":[],"34740615":[],"3498":[],"34it":6,"35":[2,4,6,7],"3514":[],"35140":[],"35147135":16,"351636":11,"35182854":5,"35203688":16,"3522":[],"3525":[],"3528556":[],"352856":[],"3529":[],"3530606977":[],"3538":[],"35396404e":18,"35401056e":18,"3543":[],"3544313922":[],"3546":[],"35470445e":5,"3548":[],"355":[],"3551":[],"35533773":6,"35533774":[],"3556":[],"35562617e":18,"3558":[],"3560":[],"356399":[],"3567":[],"3572":[],"35724288e":18,"3575":[],"357508":[],"3576":[],"3577":[],"35771842":6,"3581341341":4,"3585":[],"3587":[],"35892474":16,"359":5,"3593":[],"3594821":13,"3595":[],"3598":[],"359999999999985":[],"36":[0,2,4,5,6,7,18],"360":1,"3604":[],"3605":[],"3606":[],"360688":[],"3609":[],"36102113":[],"36117602":[],"3613":[],"3615":[],"361556":[],"3617":[],"3621311":5,"3624":[],"3627":[],"3628":[],"363295916323784e":6,"363295916414895e":[],"3632959170548605e":[],"363295924430451e":6,"363834":11,"36383443":11,"3643":[],"364418e97433":1,"3645":[],"3646":[],"3647":[],"3655":[],"3655222":5,"3659":[],"3668":[],"36689784":[],"366898":[],"3669":[],"367":2,"3672":[],"3673":[],"3674":[],"3679":[],"3684":[],"3687":[],"3688":[],"368m":4,"369139":11,"36it":[],"37":[2,4,6,7],"3704":[],"370782966":4,"3711":[],"3713":[],"3718":[],"3721":[],"3722":[],"3725":[],"3729":[],"37307168":16,"3739":[],"37396662":6,"37415316":16,"374291":5,"37429133":5,"3748":[],"3749":[],"3753":[],"3759":[],"3760":[],"3765":[],"376559":[],"37655936":[],"37692363":[],"37703055":[],"3772":[],"3773":[],"37732":[],"3776":[],"3777801602":[],"3779":[],"37835429e":[],"3784":[],"37900111":6,"3791":[],"3794":[],"379647":11,"37964744":11,"37992857":[],"38":[2,4,7,18],"380":[],"3802":[],"3803":[],"3804":[],"3805":[],"380739":5,"38073947":5,"3811":[],"38135733e":6,"3815":4,"381627865854956":[],"38162787":[],"3817475779":[],"3818":[],"3819":[],"3820":[],"38246359":[],"3827":[],"382951":11,"38295101":11,"3830":4,"3833":[],"38336316":16,"3834":4,"3837":4,"3838":4,"3839":4,"3842":[],"3850":[],"3851":4,"38533184":6,"3854":[],"3858":4,"386":[],"3861":4,"3862":4,"38629436":16,"3864":4,"3867":[],"3869":4,"387":[],"3871":4,"3872":4,"387482":5,"38748219":5,"3876":[],"388":[],"3881":4,"3882":[],"3885":[],"38868469":16,"3888":4,"3889":4,"389":[],"38901478":[],"3891":4,"38916861e":6,"38962192e":6,"3898":[],"39":[0,2,4,13,19],"390":[],"3906":4,"39095416":[],"3914":4,"3915":4,"3916":4,"391602":[],"3917":4,"3922":4,"3925515884752442":[],"3928":4,"3931":[],"39311435":16,"3943":4,"3944":4,"39456996":16,"3950":4,"3955":4,"39560937":16,"39579407":5,"3958":[],"3960":4,"3962":4,"3970":4,"39706038":5,"39724390e":18,"3975":4,"397700":11,"39789527":16,"3979":4,"39794864e":18,"3980313467":[],"3983":4,"3994":4,"3996":4,"399836":[],"3d":[2,3,4,6,13],"3f":[1,3,9],"3n":16,"3x":[2,8],"3x_i":2,"3y":8,"4":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],"40":[1,4,6,19],"400":4,"4000":20,"4005":4,"4011":4,"40116777":[],"401168":[],"4012":4,"4017":4,"401842":11,"40214433":16,"4022":[],"40236901e":18,"4027":4,"4030":4,"40340043":[],"4034668048":[],"4038":4,"4039":4,"404":[],"4045":4,"4048":4,"4055":4,"405890":11,"4059":4,"40599799":[],"4068":4,"4069":4,"4075":4,"4077":[],"408":2,"4082":[4,6],"4084":4,"4087":[],"4088":4,"4089":4,"409":2,"40927184e":6,"40a38ad763f1":6,"41":[2,4,16],"410":2,"4100":4,"4107":[],"411":2,"4115":4,"4117":4,"412":2,"4128":4,"4131":4,"41357064":[],"4143":4,"41433969":5,"4144":4,"4146":4,"41511965e":1,"4155":2,"4162706317":[],"4167":4,"4176":4,"4177":4,"418506":11,"4186":4,"41876267":5,"418763":5,"41882036e":6,"41882037e":6,"4192423635":[],"41958102e":18,"4198":4,"41990268":[],"41it":6,"42":[1,2,4,8,9,10,16],"420":[],"42037468e":18,"42078103":[],"421":2,"4212":4,"422":2,"4224":4,"423":2,"42340403e":18,"42394972":16,"424":2,"42441033":5,"42449643":[],"42450":[],"425":2,"4255":[],"4258989918":[],"426":[6,7],"42615374e":18,"42631342":[],"427017":11,"4275":4,"43":[1,2,4,7,16],"43054282":5,"43135183":16,"43294696e":18,"43330971e":6,"434932":11,"43493232":11,"435163":[],"43552433":16,"43579948e":6,"436462435":4,"43761347":[],"43766686":11,"4379":4,"438060758":[],"438136":[],"439230":6,"44":[1,2,4,16],"44089210e":5,"4410":[],"4411":[],"442600":11,"443217":[],"444":[],"44688507e":18,"44970586e":1,"45":[2,4,19],"450":[],"450257":11,"4504":[],"45290829":16,"45393214e":18,"4543859":[],"4557763":11,"455947":[],"456":[],"456418966187335":[],"457":[2,4],"457770268480242":[],"458027":[],"458078":11,"45960079":5,"46":[2,4,19],"4601":[],"461":[],"461175":16,"462":7,"46383925e":6,"464424":[],"4644244":[],"46508305":16,"46567887":16,"466":[],"46602982":[],"46696223":[],"469":[],"46932688":[],"4694":[],"46984697e":6,"469868":[],"46986815":[],"47":[4,19],"4703":4,"47042744":5,"470714":[],"47075725":6,"47116868e":6,"47125748":5,"47132891":5,"47387858":[],"47400238":[],"47432993":[],"4744":[],"47478057":[],"47485224":[],"475311":[],"47531107":[],"47610036":6,"47815203":11,"47920156":[],"47942814":5,"479465113":4,"48":4,"48089797":[],"48133064":[],"481979":6,"48212873":16,"48257387":19,"48316523e":18,"483257001":[],"4837":[],"48420165":[],"48476997":11,"48574149":16,"486873":[],"48687342":[],"489":[],"48994188":5,"49":[4,5,6,11,13],"490":[],"491":[],"49152":3,"492":[],"493":[],"49385454e":18,"4940954":0,"4959161509356135e":6,"495916150936645e":6,"495916150936654e":[],"495916150938325e":[],"49614357":18,"49636583":[],"497":[3,4],"498":[3,4],"499":[3,4],"4990":18,"4992":18,"4997":18,"49992743e":18,"4c4c7f":[9,10],"4d":3,"4f":6,"4y":8,"4y_i":10,"5":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],"50":[1,2,3,4,6,7,8,10,13],"500":[1,3,4,6,9,10,13],"500000":[],"50000455":5,"50000553":5,"50000718":5,"50000855":5,"50000969":5,"50001063":5,"50001142":5,"50001207":5,"50001261":5,"50001306":5,"50001343":5,"50001374":5,"500014":5,"50001414":5,"50001422":5,"50001439":5,"50001454":5,"50001466":5,"50001476":5,"50001485":5,"50001492":5,"50001498":5,"50001502":5,"50001506":5,"5000151":5,"50001512":5,"50001515":5,"50001517":5,"50001518":5,"50001519":5,"50001521":5,"50001522":5,"50001523":5,"50001524":5,"50001525":5,"501":[3,4],"50105159":[],"5018":18,"50227564e":6,"5031474174499113":18,"50314742":18,"50321091":5,"504167":[],"50416731":[],"506":0,"50680321e":18,"50727059":16,"50769230769231":[],"507d50":[9,10],"50846111e":6,"50846112e":6,"50it":6,"50j":13,"50x10":1,"51":[4,10],"510":1,"51004249":16,"51126895e":18,"512132":[],"51214899":6,"51265232":16,"51289697":11,"512897":11,"5138":[],"51389553":16,"514219":[],"51561271":16,"517350858882083":[],"5177783846":4,"518030":11,"51803019":11,"519842":[],"52":[3,4,13],"5222222222222223":1,"522758":[],"52307692307693":[],"5260627":[],"526744":11,"52723079":[],"52773051":[],"52799362":11,"528115":11,"52811546":11,"52874252":5,"529":[],"52911941":[],"52945798e":[],"53":[3,4,9],"5303329":11,"5305555555555556":1,"5312":[],"531280":[],"53189647":[],"53312754":16,"53423784":16,"53603432":[],"53611562":[],"53697476":[],"53703498":6,"5378811":11,"53794784":11,"537948":11,"53846153846155":[],"539261":11,"54":[3,4,6,18],"540":[],"54016188":11,"540162":11,"54039921":5,"54041041e":5,"541605":[],"54163136":13,"544439":[],"546166676":[],"54780216":[],"54it":[],"55":[1,3,4],"5501":[3,4,14],"550321":[],"5539":[],"55505907":16,"5555555555555556":1,"55578041":[],"5566":[],"557795":11,"55854694":11,"5594":6,"56":[1,3,4],"56033697":5,"561":[],"5611":[],"5615":[],"56198284":5,"5625":[],"56302854":16,"5639":[],"564":[],"564374":11,"565":[],"56536":0,"566":[],"56636616e":6,"567":[],"568":[],"569":1,"56912044e":6,"56939714":5,"56992937":[],"57":[0,4,8,19],"570":[],"5700":[],"571":5,"571105947979336e":6,"571105947979394e":6,"571105947979395e":[],"571105947979439e":[],"57154252":[],"57174058":[],"57201944e":6,"57266138":[],"57361898":[],"574465":11,"57673618":16,"57842073e":18,"57it":[],"58":[4,10,19],"583595":[],"58395707":[],"58428804":5,"584804":[],"5888888888888889":1,"589":[],"58986647":[],"59":[2,4],"590":[],"591":[],"591317992":4,"591594":5,"59159438":5,"592":[],"593":[],"5944444444444444":1,"59591979":[],"595920":[],"59592669":[],"59766":5,"597660":5,"59833875":13,"598392":[],"59839245":[],"59955801":13,"5cm":18,"5dd54edf2138":6,"5f":8,"5x":8,"5y":8,"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,17,18],"60":[1,2,3,4,6],"60000":4,"6019067271":4,"60236938":16,"60293962":5,"60420593":5,"60538875":16,"60619654":6,"6063219":[],"606439":[],"60673226":11,"60685864":6,"60791699":[],"6079169911277265":[],"60943791":16,"61":[2,4,7],"61033524":[],"6111111111111112":1,"612939":[],"613579":[],"61399851":11,"613999":11,"61463451":16,"614808":11,"61576236e":18,"618":[],"61808351":[],"618982":[],"6199381169260247":[],"62":[2,3,4],"62168613":[],"62364974":[],"62373464":11,"625":7,"626635268":[],"62767384":[],"62894215":5,"629961":[],"63":[0,1,2,3,4,6,7],"6300745149331701":[],"630224":[],"63025821e":6,"63207808":18,"63249532e":6,"63270833":[],"63395187":[],"63498144":5,"63675140":[],"6371293350711955":[],"63860687":16,"63901111":[],"63it":[],"64":[1,3,4,7,13,16],"64012627":5,"64113381e":18,"64141716e":18,"64293754":[],"64425009":[],"645":[],"64615384615385":[],"646283":11,"647":6,"64742912e":6,"647473":11,"649339":5,"64933923":5,"649382":11,"64x50":1,"65":[1,2,3,4,7,8,9],"65136857":[],"6530742540053943":[],"6562":[],"65626043":5,"65628853":16,"65885453":5,"659306":[],"66":[2,3,4],"66054752":[],"66087937":[],"66204648":6,"66226149":6,"66247212":[],"6628996975186953":[],"66292841":[],"66310422":[],"6638":[],"66410989":[],"66560":[],"66619972":11,"666200":11,"667":[],"668172":[],"668186":[],"66818635":[],"66it":6,"67":[2,4],"67047975e":6,"671089":[],"672721":[],"67314874e":5,"67588315":[],"67591616":[],"67697934":11,"67838309":[],"67882608":[],"68":[2,4],"68176047e":18,"68192193":5,"68246089":16,"68279358":16,"6834195":[],"68534263e":6,"68542204":5,"68545647e":[],"6869":[],"6887363571":4,"68929213e":6,"68944595":[],"689519":11,"69":[2,4,7,18],"690":[],"690569639355314":[],"69061276":11,"690617":[],"69069n_":18,"692":1,"69295955":[],"69484813e":5,"69493539":16,"69504801":6,"69634577e":6,"69695259":5,"69985355":[],"6999536":11,"69it":[],"6e75736fdab1":6,"6f7a6bd7d79f":6,"6m":[3,4],"6n_":18,"7":[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18,20],"70":[1,2,4,6,7],"70127680":6,"70179437":[],"70205195":16,"70354373":[],"703716d317a7":8,"70434005":[],"7050":[],"70598996":[],"70653767":4,"70710678":5,"70769586":[],"70831425":[],"70832814":5,"70980493":16,"71":[1,2,4],"71131626":16,"7119":[],"712018":11,"7134":[],"71350226":[],"7151":[],"71721168":[],"718697":5,"71869727":5,"72":[2,4],"72174172":11,"722047011333792":5,"72271878e":6,"72347283":[],"7236674":5,"72373129":[],"724":3,"72522848":[],"72859758":5,"7293182":[],"72981762":8,"73":[4,6],"731000":[],"73174557":[],"73287103e":18,"733096":[],"73406033e":18,"73484667":[],"735738558766299":[],"73573856":[],"73752910":[],"73it":6,"74":[4,6,13],"740":[],"74081822":8,"74368436":16,"743u":[],"7448615806559786":[],"7469898175164704":[],"74840212":5,"749765":[],"75":[4,5,6,8,11],"7501749450963715":[],"750445":[],"750u":[],"75106135":16,"75118364":[],"751699":11,"75170092":5,"753846153846155":[],"75517445":[],"756352":[],"75838233":[],"75it":[],"76":[2,4,19],"76060096":[],"76066069":16,"763u":[],"7643536":13,"765":7,"76529528":[],"76674796":16,"76731400e":18,"76802186":[],"76923076923077":[],"76936315":5,"7694444444444445":1,"77":[2,4,13,19],"77034458":[],"770345":[],"77152076":5,"7718":9,"773329728649545":[],"77332973":[],"77333117e":18,"774300":[],"775":[],"77627886":13,"77632220e":18,"77636e":13,"77662945":[],"7767978193240488":11,"77714169":8,"77754132e":18,"7782028952":4,"77865169":[],"78":[2,4],"78011544":[],"78156479e":5,"78184120e":6,"7846153846154":[],"78941903":5,"78988962e":18,"79":[2,4],"79009329":16,"79093776":[],"79111643":5,"791123":[],"79145214e":18,"793167":[],"79394867":[],"7939646":[],"794282":11,"79449156":[],"79602861":[],"79754246":[],"797e":6,"79856831e":18,"7c394b1e8b71":9,"7d7d58":[9,10],"7f2b3a6174c2":13,"7m":4,"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18],"80":[0,1,2,4,5,6,8],"800":[4,7],"80315282":5,"803153":5,"80354994":6,"80469739":5,"8055555555555556":1,"80561191":[],"80609615e":6,"80609616e":6,"8064":[],"80734875":[],"807349":[],"80738685":16,"80747253":16,"80842254":11,"808423":11,"80847477e":6,"81":[1,2,4],"81048318e":6,"8108619":[],"81160425":5,"81187794":16,"81333804":6,"81333805":[],"81388724e":18,"814":[7,11],"815563":[],"81633628":11,"816454":[],"81671821":[],"816847":[],"8175":[],"82":[2,4],"8219235992494145":[],"8219236":[],"82198978":5,"82650876":[],"826509":[],"8265786":5,"82747653":[],"827477":[],"82773778":[],"829648415811072":18,"82964842":18,"83":4,"8305555555555556":1,"83512277":5,"836874":5,"83687444":5,"83698677":16,"83999999999999":[],"84":4,"84062065":[],"84228957e":[],"84232163":16,"842436":[],"84292394":[],"842u":[],"84355903e":1,"84443254e":1,"84569271":13,"84780262":6,"84854738":[],"84923989e":6,"84924834":11,"84994524":5,"85":[1,4],"8503720991789538":5,"85091337":[],"85263220":6,"8527777777777777":[],"85278920e":5,"853241":[],"85324115":[],"853u":[],"85601992":5,"85758696":16,"858":[],"8583333333333333":1,"85953586":6,"85959007":[],"86":2,"8608479":[],"860848":[],"861":[],"86117291":5,"86134827":5,"86145244":11,"8638888888888889":1,"86478158":[],"86546962":[],"86623151":13,"86630":[],"8666666666666667":1,"86810":[],"869":0,"86905621":[],"86925797":5,"869258":5,"87":2,"870":0,"8702784034":4,"871":0,"872":0,"8722222222222222":1,"873":0,"87327414":[],"87381451":5,"875":1,"8759":13,"876":6,"87625493":[],"87647541":[],"8768":[],"878297":[],"87836018":[],"87940752":16,"87it":6,"88":[2,13],"88017651":11,"880177":11,"88031314":[],"88046261":5,"8805555555555555":1,"88118231":[],"88168312e":6,"881788":[],"883":[],"88336879":5,"884":[],"88477619":[],"885":[],"88512489":[],"88529063e":6,"8855417382991412":[],"88554174":[],"886":[],"88679947":[],"887":[],"8879":6,"88871662":16,"8888888888888888":1,"8894":6,"89":2,"8916666666666667":[],"89274639":16,"89288636":11,"893489":5,"89348922":5,"89410423":5,"8944444444444445":1,"89550839":16,"89565264":[],"8962476":[],"896248":[],"89873772":16,"89876748":[],"8991514":16,"89944994":5,"899450":5,"8f":6,"8g":6,"8n":16,"8x8":1,"9":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,16,18],"90":[1,2,6],"900449":[],"90054363":[],"90075537":5,"9011":6,"90220243":5,"90266948":5,"90268858":[],"9027777777777778":1,"903824":[],"90382431":[],"9040":9,"90475506e":6,"90540529":11,"9055555555555556":1,"9083333333333333":[],"90884627":16,"90895045":16,"90940378":16,"90999452e":18,"91":19,"910":[],"9111111111111111":1,"91128596":5,"912u":[],"913":[3,4],"91379157":[],"913791573406831":[],"91383439":16,"91396388":[],"914":[3,4],"91416375":[],"91479093":[],"91492986e":6,"915":[3,4],"91549644":[],"916":[3,4],"9166666666666666":[],"917":[3,4],"91760278":5,"918":[],"91812702":5,"918992":[],"919":[],"92":[0,6,19],"92272314":0,"922u":[],"92343595":[],"924018":[],"92477093":[],"924e":6,"925":1,"92507116e":1,"9252772":11,"92578916":5,"92603747":16,"92626212":16,"92754397":[],"927544":[],"9277777777777778":1,"92819235":[],"92857143":7,"93":[],"9305555555555556":1,"930583":11,"931":0,"93155188":5,"93158979":5,"93248252":5,"932483":5,"932u":[],"933":5,"93414191":[],"93492130e":6,"93579127":16,"935u":[],"9361111111111111":[],"937":18,"937082":[],"93799826":5,"938":18,"9387":[],"939":[0,18],"94":[7,18],"9400":[],"941866404575299":[],"94226022e":6,"94284104":5,"94320205":5,"9444444444444444":1,"945":[3,4],"94548496":[],"94591015":16,"946":[3,4],"94639099":11,"94659383":[],"947":[3,4],"9472222222222222":1,"94735055":[],"947903":[],"94790323":[],"948":[3,4],"9482527":5,"949":[3,4],"95":[1,7,11],"95008046":6,"95079764":6,"95231424":5,"9527777777777777":1,"95284275":5,"953065564":[],"95351665":5,"954":18,"9549351910143222":[],"954u":[],"9555555555555556":1,"95569422":[],"955820c21e8b":4,"956563":11,"95684892":5,"95703":13,"95714723":[],"957147232685324":[],"95it":[],"96":[6,7,11],"960":18,"9601304850018328e":6,"960130485007504e":6,"960130485007934e":[],"9601304850213484e":[],"96024953":5,"96032148":16,"96084663":5,"961":18,"962":18,"9637117593816477":6,"9640435":5,"96489434":[],"9649652536":4,"96527903":16,"96551427e":18,"965548":[],"96606158":16,"96653373":[],"96686324e":18,"96688672":5,"9674916":5,"967809":11,"96863851":[],"96987657":[],"96992454":[],"97":7,"97005689":5,"97065296":[],"97108e":13,"9722222222222222":1,"97230501":[],"97243128":5,"97300836":5,"97497404e":6,"975":1,"97507735":5,"97547354":18,"97547354476579":18,"975510299261579":9,"9760832":[],"97705827":5,"977418":5,"97758848":5,"9777777777777777":1,"977880":[],"97788031":[],"9780387310732":20,"9780387848570":20,"9781492032632":20,"97898392":6,"97926491":5,"98":[0,1,7],"980":[],"98017611":13,"98036405":[],"9805555555555555":1,"98091621":5,"981321":[],"98139097":5,"98266587":16,"98275501":5,"983310":[],"98346748":[],"98399675":[],"98413059":5,"98454786":5,"985":18,"98566191":5,"986":18,"9861111111111112":1,"98680716":5,"98716878":5,"98756882":13,"98794823":16,"9879924":[],"98808176":5,"98822371":6,"9888888888888889":1,"989":18,"9890348":5,"9893149172528393":[],"9893447":5,"9898254753574576":[],"98982548":[],"9898ff":[9,10],"99":[6,7,11,13],"990":[],"99009525":5,"9902552771282336":[],"99049330":6,"99088801":5,"991":18,"99115119":5,"99176998":5,"992":18,"99242921":5,"99265097":5,"993":18,"99316252":5,"99353454":[],"993535":[],"99371056":5,"99389612":5,"993972":[],"99397245":[],"9943201":5,"99435648":[],"9947756":5,"99492986":5,"99519225":13,"99528218":5,"99539415":5,"9955282554647219":[],"99566069":5,"99578809":5,"996":5,"99608161":5,"9963961":5,"99650061":5,"9967458":5,"99700706":5,"99709215":5,"99724883":[],"99729756":5,"99751458":5,"99758326":5,"99775587":5,"99775949":[],"99793613":5,"99799099":5,"99813653":5,"99828624":5,"99829953":[],"9983295":5,"99845267":5,"998577":5,"99861053":5,"99871521":5,"99881845":5,"99884384":5,"99893323":5,"999":[9,18],"99901896":5,"99903755":5,"99911427":5,"99918546":5,"99919837":5,"99926459":5,"9993237":5,"99933188":5,"99938942":5,"9994385":5,"99944272":5,"99949306":5,"99953381":5,"99953475":5,"99957911":5,"99961294":5,"99965056":5,"99967865":5,"99970988":5,"9997332":5,"99975913":5,"99977416":[],"99977849":5,"99980002":5,"9998161":5,"99984732":5,"99987324":5,"99989476":5,"99991263":5,"99992746":5,"99993978":5,"99995":5,"9999555851685968":6,"999955585168597":6,"9999840939906267":[],"9999858320366368":[],"9x":6,"9y":6,"\u00f8yvind":[6,19],"abstract":1,"boolean":4,"break":[0,4,6,11,14],"byte":16,"case":[0,1,2,3,4,5,6,7,11,12,13,14,15,16,17],"catch":0,"char":[],"class":[0,1,3,4,6,7,8,9,11,12,13,18],"const":[],"default":[0,1,2,4,6,7,13,16],"do":[0,2,3,4,5,6,8,9,10,11,12,13,14,16],"ekstr\u00f8m":4,"eng\u00f8i":19,"export":9,"f\u00f8470":19,"final":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,17,18,19],"float":[0,3,4,5,9,11,13,14,16],"function":[2,3,4,5,9,14,15,16],"import":[0,1,2,3,4,6,7,8,9,10,11,12,13,14,18],"int":[0,1,2,3,4,5,6,11,13,14,16,18],"long":[0,1,3,4,12,13],"m\u00f8svatn":6,"new":[0,1,2,3,5,6,7,8,9,10,11,13,14,16],"null":[],"public":[0,15],"return":[0,1,2,3,4,5,6,7,8,9,11,13,14,16,18],"s\u00f8rli":[],"s\u00f8rlie":19,"sch\u00f8yen":[6,19],"short":[4,5],"steinsv\u00e5g":[],"super":[3,5],"switch":0,"throw":[3,6,18],"true":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,16,18],"try":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,18],"var":[5,6,10,11,18],"while":[0,1,3,4,5,6,7,8,9,11,12,13,18],A:[2,3,5,6,7,10,11,12,13,15,16,17,18,19,20],AND:2,And:[0,3,4,5,6,9,15,18],As:[0,1,2,3,4,5,6,8,10,12,13,16,18],At:[0,4,6,13],BE:0,Be:[2,15],Being:13,But:[0,1,2,3,5,6,9,10,18],By:[0,3,5,6,12,13,16],For:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],IF:6,IN:20,If:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18],In:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,20],Is:11,Ising:[5,12],It:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],Its:[1,2,4,11],NO:[7,11],No:[3,4,5,6,7,8,9],Not:[0,1,5,6,17],OR:18,Of:18,On:[0,3,17,18,20],One:[0,1,3,4,5,6,7,8,11,12,13,18],Or:[0,1,6],Such:[6,12,18],That:[0,5,7,10,11,12,14,18],The:[4,10,13,14,16,17,18,19,20],Then:[0,1,5,6,8,9,10,11,12,13,14,16],There:[0,3,4,5,6,8,9,11,12,14,16,17,18,19],These:[0,3,4,5,8,9,10,11,12,13,14,16,18],To:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],With:[0,5,6,8,9,10,11,12,14,16,18],_0:[5,8,10,11,13],_1:[2,5,6,8,10,11,12,13,14,16],_2:[2,5,8,11,12,13,16],_3:16,_4:16,_9:13,_:[0,1,2,4,5,6,7,8,9,10,11,12,13,16],_________________________________________________________________:4,__call__:[3,4],__class__:10,__doc__:6,__future__:[8,9],__getitem__:[],__init__:[1,3,4,14],__main__:2,__mosek:5,__name__:[2,10],__traceback__:[3,4],_asarrai:[],_auto10:[6,12],_auto12:6,_auto1:[2,3,4,5,6,7,12,13,16,18],_auto2:[2,3,4,5,6,12,13,16,18],_auto3:[3,4,5,6,12,13,16],_auto4:[4,6,12,13,16],_auto5:[4,6,12,13,16],_auto6:[4,6,12,16],_auto7:[4,6,12,16],_auto8:[6,12],_auto9:[6,12],_ax:[],_base:8,_build:[15,20],_build_call_output:[3,4],_c:1,_call:[3,4],_call_flat:[3,4],_check_1d:[],_check_optimize_result:[7,11],_compon:11,_coordinate_desc:6,_copy_docstring_and_deprec:[],_decor:0,_depth:9,_fraction:9,_get_lin:[],_getitem_multilevel:[],_handl:[3,4],_i:[0,1,2,5,6,8,11,12,13],_inference_funct:[3,4],_interpolatefunctionerror:[3,4],_is_primit:[],_j:[0,1,2,3,5,6,8,13],_jit_compil:[3,4],_k:13,_l:12,_lambda:6,_leaf:9,_logist:[7,11],_m:10,_make_vjp:[2,13],_maybe_define_funct:[3,4],_multilayer_perceptron:1,_n:[2,5,8,11,13],_node:[2,9,13],_notokstatusexcept:[3,4],_np:[],_num_output:[3,4],_p:[5,8],_plot_arg:[],_process_traceback_fram:[3,4],_r:[3,4],_ratio:11,_sampl:9,_select_forward_and_backward_funct:[3,4],_split:[6,9],_src:[3,4,14],_stateful_fn:[3,4],_stateless_fn:[3,4],_t:13,_test:6,_trace:[2,13],_valu:[2,13],_varianc:11,_weight:9,a0:3,a0faa0:[9,10],a1:0,a2:0,a3:0,a4:0,a_0:0,a_1a:0,a_2a:0,a_3:0,a_3a:0,a_4:0,a_4a:0,a_:[0,1,16],a_h:1,a_i:[0,1,2,12],a_j:[1,12],a_k:[1,12],a_ndim:2,aaron:20,ab:[0,2,5,13,14],ab_channel:15,abandon:1,abbrevi:17,abid:18,abil:[0,10],abl:[1,4,5,6,7,10,12,13],abort:[],about:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,20],abov:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,16,18],abovement:6,abscissa:13,absolut:[0,2,5,6,13],acceler:13,accept:[0,3,6,9],access:[0,3,4,11,18],accid:[4,6],accmod:5,accompani:0,accomplish:[8,9,13],accord:[0,1,2,5,6,9,12,13,14,18],accordingli:11,account:[0,3,5,13,18],accumul:[12,18],accur:[0,3,4,6,10,13],accuraci:[0,1,3,4,5,6,7,9,10,11,12],accuracy_scor:[0,1,10],accuracy_score_numpi:1,achiev:[0,1,5,6,8,12,16],aco:18,acquaint:15,acquir:[1,15],acr:0,across:[1,3,6,9,15],act:[1,3,16],action:18,activ:[0,2,3,4,9,17],actual:[0,1,4,5,6,8,11,16,18],ad:[0,1,3,4,5,8,13,16],ada_clf:10,adaboostclassifi:10,adadelta:13,adagrad:13,adam:[1,3,4],adapt:[4,6,13,20],add:[0,1,2,3,4,5,6,8,10,11,12,18],add_lin:[],add_outgrad:2,add_subplot:[1,7,12,14],addendum:5,addit:[0,2,3,5,6,7,8,9,10,12,13,15,16,18,19,20],addition:[12,13],address:[1,9,11,13,20],adjac:[3,12],adjoint:5,adjust:[0,5,12,13],admir:0,advanc:[4,6,12,20],advantag:[1,3,5,6,10,13,16],affect:3,affin:[0,3,8,11],afford:3,aforement:14,african:0,after:[0,1,2,4,5,6,9,11,12,13,15,16,18],afterward:0,ag:[0,7,17],ag_0:2,again:[0,1,4,5,6,7,8,10,11,12,13,18],against:[1,4,7,10],agegroup:7,agegroupmean:7,aggreg:[9,10],agorithm:10,agre:[5,6,18],ahead:9,ai:[0,20],aid:11,aim:[0,1,4,6,7,11,14,15,16],ainv:5,airplan:3,aka:5,al:[0,2,4,17,20],alarm:5,algebra:[0,3,5,13,15,17],algo:[],algorithm:[0,1,2,4,5,6,7,8,13,14,15,16,17,18,20],align:[0,2,5,6,7,8,13,18],all:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20],allevi:[1,13],alloc:[3,16],allow:[0,1,2,3,5,6,8,10,13,15,16],almost:[0,1,6,8,11,13,18],alon:[2,9],along:[2,3,4,5,6,9,10,11,15,16],alpha:[0,1,2,3,4,5,6,7,8,9,10,13,14,18],alpha_0:3,alpha_1:3,alpha_2:3,alpha_:10,alpha_i:[3,13],alpha_k:13,alpha_m:10,alpha_n:3,alpha_opt:13,alreadi:[2,3,4,5,6,10,12,15,16,18],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],alter:1,altern:[0,1,4,5,6,7,8,9,11,13,16],although:[1,5,6,8,10,13],alwai:[0,3,5,6,12,13,18],am:4,ame2016:0,american:0,among:[0,3,5,9,10,12,16],amongst:5,amount:[0,1,3,4,6,8,10,14,15],an:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,18,19,20],an_:18,anaconda3:[],anaconda:[0,1,15],analog:13,analys:6,analysi:[1,3,4,7,14,16,17,20],analyt:[0,2,3,5,6,7,12,13,15],analyz:[0,1,3,4,5,6,18],andrew:1,angl:[0,3,9],anharmon:3,ani:[0,1,2,3,4,5,6,7,8,9,10,12,14,18],anim:[4,12],ann:12,annot:[0,1,3,7,8],anoth:[0,1,3,4,5,6,7,8,10,11,12,13,16,18],anp:2,ans_vspac:2,ansatz:0,answer:[0,1,3,5,6,16],antialias:[2,6],anticip:4,anymor:[1,8],anyon:[4,8],anyth:[1,18],anytim:19,apach:1,apart:[11,13],api:[1,15],appar:2,appear:[0,1,3,13,16,18],append:[1,3,4,8,9,13],appendcon:5,appendvar:5,appli:[0,1,2,3,4,6,7,8,9,10,11,12,13,18,20],applic:[0,1,3,4,5,6,7,9,12,13,16,17,18,20],apply_gradi:4,approach:[1,2,4,5,6,9,10,11,12,13,15,18,20],appropri:[2,6,9,12,13,15,18],approx:[0,2,3,6,10,11,13,18],approxim:[0,1,2,3,4,5,6,7,10,11,13,18],apt:[0,15],aq:18,ar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],arang:[1,3,4,6,7,9,10,12],arbitrari:[1,4,6,8,12,13,18],arbitrarili:[0,1,11],arc:6,architectur:[3,4,12,20],area:[0,3,6,20],arg:[0,2,3,4,13],argc:[],argmax:[1,11],argmin:[4,10,14],argnum:[2,13],argnum_0:2,argnum_1:2,argsort:11,argu:[1,13],argument:[0,2,3,5,6,11,12,13],argv:[],argval:2,aris:[0,6,12,13,18],arithmet:[0,13,16],arm:[3,4,6,14],arma:[],armadillo:16,around:[0,1,4,5,6,11,18],arr:2,arrai:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,18],arrang:3,arraybox:13,arriv:[0,6,9,11,16,18],arrow:12,arrowprop:8,art3d:13,art:[0,1,15],articl:[0,3,4,6,10],artifici:[0,2,7,12,20],artificialneuron:12,arug:13,arxiv:[3,4],as_fram:[],asarrai:[0,2,6,9],asc:5,ascii:[],ashrafi:19,ask:[5,6,11,12],aspect:[0,6,15],assembl:[0,3],assert:4,assess:[0,6],assici:4,assign:[0,7,8,9,12,13,14,17,20],associ:[0,6,9,12,14,18],assum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],assumpt:[0,3,5,6,9,11,18],ast:[0,5,6],astyp:[4,9,10],asymmetri:0,asymptot:[4,6],async_wait:[3,4],atoi:[],atom:0,attempt:[0,4,6,7,8,10],attend:17,attent:[0,16],attr:[3,4],attract:[0,10],attribut:[0,9],attributeerror:[],audi:0,audio:[3,4],aurelien:[0,17,20],austfjel:6,author:[0,1,10,18],authour:0,auto:[6,9,10,18],autocor:18,autocorrelation_tim:18,autocorrelform:18,autocovari:18,autoencod:[4,15],autoencond:15,autograd:15,autom:[0,15],automac:16,automat:[0,1,2,3,4,11,15,16,17],automobil:3,autonom:[4,20],avail:[0,1,4,6,10,11,15,16,17,20],averag:[0,1,3,6,9,10,13,14,18,19],avg:[],avoid:[0,4,5,6,9,11,13,16],avx2:[],avx:[],awai:[2,3,6],awar:[2,10],award:19,ax:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,16],axes3d:[2,6,13],axes_grid1:6,axessubplot:[],axhlin:8,axi:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,16,18],axiom:5,axlabel:0,axvlin:[4,8],axvspan:4,b1:8,b2:8,b3:8,b:[0,1,2,3,4,5,6,8,9,10,12,13,14,18,19],b_1:[2,12,13],b_2:13,b_5:13,b_:[1,16],b_group:9,b_i:[0,1,2,12],b_ia_:0,b_index:9,b_is_vec:2,b_j:[1,12],b_k:[1,12,13],b_m:12,b_meta:2,b_score:9,b_valu:9,bachelor:17,back:[0,3,4,5,6,8,9,10,16,17,18],backbon:16,backend:[1,4],background:[17,20],backpropag:1,backtrack:9,backup:16,backward:[1,2,4,12,16],backward_pass:2,bad:6,badli:18,bag:[9,15,17],bag_clf:10,baggingboot:10,baggingclassifi:10,baggingtre:10,balanc:6,band:16,bandwidth:16,bar:[0,6,11],barber:20,bare:[4,10],base:[0,1,3,4,5,7,8,9,10,14,15,18,19,20],basi:[5,7,8,10,11,12,13,16],basic:[6,8,12,13,14,15,17,18],batch:[3,4,11,12,13],batch_shap:4,batch_siz:[1,3,4],batchnorm:4,bay:7,bayesian:[5,15,20],bc298b802fe2:6,becaus:[0,1,2,3,4,5,6,8,9,12,13,14],becom:[0,1,2,5,6,7,9,12,13,18],been:[0,1,2,3,4,5,6,11,12,13,15,16],befor:[0,1,2,3,4,5,6,7,8,12,13,14,16,18],beforehand:[0,18],begin:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,16,18],behav:[1,6,13],behavior:[0,1,13],behaviour:12,behind:[0,1,6,8,13],behnoosh:19,being:[0,1,2,3,4,5,7,8,10,11,12,13,18],believ:[9,16],belong:[5,7,8,9,13,14],below:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],benchmark:10,bendik:[],benefici:[1,13],benefit:[0,1,4,11,13,15],bengio:[1,17,20],benign:[1,7],bennosh:19,besid:[4,5],bessel:5,best:[0,1,2,3,4,5,6,7,8,9,10,12,13,19],beta:[0,1,3,5,6,7,10,11,13],beta_0:[0,1,3,5,6,7,13],beta_0x_:0,beta_1:[0,1,3,5,6,7,10,13],beta_1x_0:0,beta_1x_1:[0,7],beta_1x_2:0,beta_1x_:0,beta_1x_i:[7,13],beta_2:[0,3,13],beta_2x_0:0,beta_2x_1:0,beta_2x_2:[0,7],beta_2x_:0,beta_3:3,beta_:[0,3,6,7,13],beta_i:[0,3,5],beta_j:[0,5,6,13],beta_k:13,beta_linreg:13,beta_m:10,beta_mg_m:10,beta_n:3,beta_p:7,beta_px_p:7,betavalu:5,better:[0,1,2,3,4,6,9,10,11,12,13],between:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,18],beyond:[0,1,5,6,8,13],bf:[13,14,16,18],bgd:13,bia:[0,1,2,3,5,8,9,10,12,13,17],bias:[1,2,3,5,6,9,12],big:[0,1,2,5,6,14],bigger:[1,6],bigr:12,bike:9,bilek:19,billion:[3,12,15],bin:[0,7,18],binari:[0,3,5,7,9,10,12,17],binarycrossentropi:4,bind:0,binomi:[15,18],binsboot:6,bioinformat:0,biolog:[1,12,20],bios1100:15,bird:[0,3],bishop:[17,20],bit:[1,4,16,18],bitwis:18,bivari:2,bk:[0,13],bla:[5,16],black:[8,9,14],block:[6,10,15,16,18],blockingavg:[],blockingstd:[],blockingvar:[],blocksiz:[],blocksizemax:[],blocksizemin:[],blogpost:4,blue:[0,3],bmatrix:[0,1,3,5,7,8,11,13,16],bmi:1,bodi:[0,1,4,12],bold:1,boldfac:[0,5],boldsymbol:[0,1,2,3,5,6,7,8,10,11,13,14],boltzmann:[12,15],book:20,boost:[1,9,15,17],boostrap:10,bootavg:[],bootstd:[],bootstrap:[1,13,15,17],bootvar:[],bootvec:[],boston_dataset:0,bot:8,both:[0,1,4,5,6,8,9,10,13,14,15,16,18,19],bottl:7,bound:[0,5,8,12],boundari:[2,4,8,11,12],boundkei:5,box:[2,4,9],boxed_arg:2,boyd:[8,13],bracket:[4,18],brain:[1,7,12],branch:9,breast:[5,7,11],breviti:13,brew:[0,15],brg:8,briefli:0,bring:[0,5,6,10],broad:[0,3,4],brownle:4,brute:[3,5,11],bs:[8,9,10],buffer_s:4,bui:4,build:[0,4,5,6,10,13,16,18],built:[0,1,3,4,6],bunch:11,busi:0,bx:5,bzl:5,c1:[8,11],c2:[8,11],c95af3df0cdd:3,c:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20],c_0:18,c_1:12,c_2:12,c_3:12,c_4:12,c_:[0,8,9,10,13,18],c_i:[12,13],c_k:18,ca:1,cabc613b8702:13,cach:10,cal:[0,8,10,12,13],calcul:[0,1,2,4,5,6,8,9,10,11,12,13,14,16,18],california:[],call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],callabl:[3,4],callback:[3,4],calor:0,cambridg:[13,20],can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],cancel:[0,13],cancellation_manag:[3,4],cancer:[5,10],cancerpd:7,candid:[8,9,10],cannot:[0,1,4,5,6,7,8,9,17,18],canopi:[0,15],cap:5,capabl:[0,1,8,13,15],capac:2,capita:0,captur:[4,11,12],captured_input:[3,4],car:[3,4],card:[0,7],cardin:1,care:11,carefulli:13,carlo:[0,6,15,18,20],carri:[2,6,7],cart:10,carvalho:19,casella:20,cast:1,cat:[3,4],categor:[0,1,3,9,11],categori:[0,1,3,7,10,12,14,17],categorical_crossentropi:[1,3],caus:[0,5,6,18],causal:0,causat:0,cax:1,cb:6,cbar:1,cbook:[],cc:[0,1,5,13],ccc:[5,12],cd_fast:6,cdf:18,cdot:[0,2,6,12,13,14,16,18],celebr:13,cell:4,center:[0,1,6,7,8,9,11,14,18],centr:20,central:[0,3,5,6,8,16],centroid:[14,18],centroid_differ:14,centuri:3,certain:[0,3,6,7,9,18],cg:13,cha:0,chain:[1,13,15,18],chanc:[1,5,13,18],chang:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18],channel:3,chapter:[0,6,10,11,16,17,20],charact:[0,3,5],character:[8,9,10,12,18],characterist:[0,1,3,10,13],charg:0,charl:0,chase:4,chd:7,chddata:7,cheap:5,cheaper:[1,13],check:[0,1,3,4,5,6,11,13,16],checkmark:3,checkpoint:4,checkpoint_dir:4,checkpoint_prefix:4,chemic:[],chen:10,chiaramont:2,choic:[0,1,2,3,4,6,9,12,13,14,16],choleski:[5,16],choos:[2,3,6,9,10,11,13,14],chosen:[0,1,2,6,8,9,10,13,18],chosen_datapoint:1,christian:20,christoph:[17,20],cifar10:3,cifar:3,cin:[],circ:[1,12],circl:[0,8,12],circuit:3,circumfer:9,circumv:[1,5,13],ckpt:4,clariti:18,class_nam:[3,9],class_val:9,class_valu:9,class_weight:[3,4],classic:[7,9,13],classif:[0,3,5,6,7,8,11,12,15,17,20],classifi:[0,1,4,7,9,10,11],classificaton:1,classifii:10,clean:1,clear:[1,5,10,12,13],clearli:[0,3,5,6,7,8,18],clever:[1,10],clf3:0,clf:[0,6,8,9,10],clf_lasso:6,clf_ridg:6,clip:[3,18],close:[0,1,2,4,6,8,9,11,12,13,14,18,20],closer:[3,5,13],closest:[8,11,13,14],closur:15,cloud:15,cluster:[0,1,4,6,11,15,17],cluster_label:14,cm:[1,2,3,6,8,13],cmap:[0,1,2,3,4,6,8,9,10],cmap_arg:6,cmath:[],cmb:17,cmd:9,cmu:[],cn_:18,cnn:[12,17],cnn_kera:3,cntk:15,co:[0,2,3,6,9,13],code:[3,4,6,7,8,13,15,16,17,18,20],coef0:8,coef:0,coef_:[0,5,6,8,9,13],coeff:5,coeffici:[0,3,5,6,7,8,9,13,16],coerc:[0,6],coin:[10,18],coin_toss:10,col:[0,11],colab:15,cold:9,colinear:0,collaps:8,collect:[0,2,6,10,11,15,18,20],collinear:5,color:[0,3,4,6,8,9,10,18],color_channel:3,color_cod:6,colorbar:[1,6],colsample_bytre:10,colsaobject:10,colspec:0,column:[0,1,2,5,6,7,8,9,11,12,16],columntransform:9,com:[3,4,6,14,15,20],combin:[1,2,5,6,7,10,18],come:[0,1,3,4,5,12,13,14,17],command:[0,1],comment:[0,4,5,6],commerci:[0,15],commod:0,common:[0,1,3,5,6,7,9,11,13,14,18],commonli:[0,1,4,6,7,9,13,14],commun:[0,12],commut:3,commutatitav:3,compact:[0,1,3,5,6,7,9,11,12,13,14],compar:[0,3,4,5,6,11,13,16],comparison:[2,4,13],compat:7,compet:0,competit:10,compil:[0,1,3,4,15,16],complet:[0,2,3,4,9,12],completenn:12,complex:[1,5,8,9,11,12,13],complic:[0,1,9,13],compon:[0,1,3,4,5,6,7,9,14,15,17],components_:11,compos:[9,12,14],compphys:[6,15,17,20],compress:0,compris:6,compromis:5,compulsori:15,comput:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,20],computation:[0,3,6,9,13,18],con:5,concaten:[2,4,6,14],concav:[1,13],concentr:[0,10],concept:[0,2,15],conceptu:[12,13],concern:[0,1,4,7],conclud:[0,5,13],conclus:1,cond:2,conda:[0,1,15],condit:[0,2,4,5,6,8,9,11,13,18],conduct:15,condwav:2,coneqp:5,confid:[0,5,6,7,8],configur:3,confirm:[5,12],confus:[5,6,10,16],confusion_matrix:9,congruenti:18,conjug:[4,8],conjugaci:13,conjunct:3,connect:[0,1,3,4,9,11,12,13,16],consequ:[5,6,8,10,12,13],conserv:[5,14],consid:[0,1,2,3,5,6,7,8,9,10,12,13,16,18],consider:[0,1,5,13],consist:[0,1,2,3,4,6,12,13,18],constant:[0,2,4,5,6,8,12,13,18],constitu:0,constitut:[2,6],constrain:[1,3,5,7,11],constraint:[5,6,8,13],construct:[0,1,2,3,5,6,7,8,9,10,11,16,18,20],contact:0,contain:[0,2,3,4,5,6,7,8,9,11,12,13,16,18,20],contemporari:20,content:[1,15,16],context:[3,4,6,10,13],contigu:16,continu:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,18],contour:[9,10,13],contourf:[8,9,10],contrast:[1,4,9,10,12],contribut:[0,3,5,13,18],contributor:0,control:[0,1,3,9,13,15],conv2d:[3,4],conv2dtranspos:4,conv:[3,4],conveni:[0,5,6,12,13,16],convent:12,converg:[1,2,4,5,6,7,8,11,13,14],convergencewarn:[1,6,7,8,11],convert:[0,1,4,5,9,11,13,16],converttomatrix:4,convex:[4,5,7],convinc:13,convolut:[1,4,15,17],cool:[4,9],coolwarm:6,coordin:[5,12,14],coorel:0,copi:[0,1,14],core:[2,3,4,10,13],corel:0,coronari:7,corr:[0,5,7,11],correalt:[11,15],correct:[0,1,2,3,4,5,13,16,18],correctli:[1,2,6,10],correl:[0,1,3,5,6,7,10,12,13,15,18],correlation_matrix:[0,5,7,11],correspond:[0,3,5,6,8,9,11,12,15,16,18],cortex:12,cosin:[3,6],cost:[0,2,3,5,6,7,8,9,12,13],cost_deep_grad:2,cost_funct:2,cost_function_deep:2,cost_function_deep_grad:2,cost_function_grad:2,cost_grad:2,cost_sum:2,costol:13,could:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],coulomb:0,count:[0,9,17,18,19],countor:13,coupl:[4,5,6],cours:[0,1,3,5,11,17],courvil:[17,20],cout:[],cov:[5,6,11,16,18],cov_xi:[5,11],cov_xx:[5,11],cov_yi:[5,11],covari:[0,7,15,16],covariance_matrix:[5,11,14],cover:[0,5,15,17,20],covert:0,covxi:18,covxx:18,covxz:18,covyi:18,covyz:18,covzz:18,cpu:1,cpu_feature_guard:[],craft:3,creat:[1,2,3,4,5,6,9,10,11,12,13,15],create_biases_and_weight:1,create_convolutional_neural_network_kera:3,create_neural_network_kera:1,create_x:[5,11],credit:[0,7],crim:0,crime:0,criteria:[0,4,9,10,14,18],criterion:[9,10,13],critic:6,cross:[0,1,3,7,9,10,13,15,17,18],cross_entropi:4,cross_val_scor:6,cross_valid:[7,10],crossvalid:6,crucial:[1,18],cs231:3,cs:17,csr_matrix:16,cstdlib:[],csv:[0,4,6,7,9],ctnk:1,ctx:[3,4],cubic:0,cumbersom:5,cumsum:[10,11],cumul:[10,18],cumulative_heads_ratio:10,cup:5,current:[1,2,3,4,6,13,14],curs:0,curv:[6,7,10,12],curvatur:13,custom:[5,6,14],custom_cmap2:[9,10],custom_cmap:[9,10],cutpoint:9,cv:[6,7,10],cvxbook:13,cvxopt:[5,8],cyber:20,cycl:[1,12],d1:5,d2:5,d2_g_t:2,d3:5,d670a873ab0c:5,d985fb40c43d:6,d:[1,2,3,4,5,6,7,8,9,10,11,13,14,16,18,19],d_f:13,d_g_t:2,d_net_out:2,da:3,dagger:[5,16],dai:[1,9,15],dalen:[],damp:3,darget:9,darkr:18,dat:0,dat_id:[0,6,7,9],data1:14,data2:14,data3:14,data4:14,data:[2,4,5,8,10,12,13,14,16,20],data_handl:[3,4],data_id:[0,6,7,9],data_indic:1,data_modul:[],data_path:[0,6,7,9],data_url:[],databas:1,datafil:[0,6,7,9],datafram:[0,4,5,7,9,11],datapoint:[1,5,6,7,11,13],dataset:[0,4,6,7,8,9,10,11,13,14],datatyp:4,date:0,daughter:10,david:20,dbh:1,dbo:1,dcomposit:16,ddot:2,dead:1,deadlin:17,deal:[0,1,3,5,6,8,11,13,14,16,18],debt:7,debug:[5,6],decad:[0,3],decai:[0,13,18],decemb:17,decent:10,decid:[0,2,3,5,6,9],decim:0,decis:[0,1,8,11,15,17,20],decision_funct:8,decision_tre:9,decisiontreeclassifi:[9,10],decisiontreeregressor:[0,9,10],declar:[0,4,16],decompos:[5,6,16],decomposit:[0,6,12,17],decompost:5,deconvolut:3,decorrel:[10,13],decreas:[1,2,4,5,6,10,11,13],deduc:0,deep:[3,7,12,13,15,17,20],deep_neural_network:2,deep_param:2,deep_tree_clf1:9,deep_tree_clf2:9,deep_tree_clf:[9,10],deepen:[5,15],deeper:[0,3,4],deeplearningbook:20,deer:3,def:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,18],def_covari:18,def_funct:[3,4],default_tim:4,defect:5,defici:5,defin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],definit:[1,2,5,6,8,10,11,12,13,16,18],defint:18,defun:[3,4],defvjp:2,degre:[3,5,6,8,9,10,11,18],del:1,delet:6,delimit:4,deliv:17,delta:[0,2,3,6,8,12,13,14],delta_0:3,delta_1:3,delta_2:3,delta_3:3,delta_4:3,delta_5:3,delta_:[1,16],delta_h:[0,1],delta_j:[3,12],delta_k:12,delta_l:[1,3],delta_n:[0,3],delug:15,delv:0,demand:13,demonstr:[0,3,5,6,7,11,12,15],den:4,denomin:[1,5],denot:[1,2,6,7,13,18],dens:[1,3,4],dense_1:4,densiti:[0,2,6,18],depart:19,depend:[0,1,2,4,5,6,7,8,11,12,13,15,16,18],depict:18,deploy:[0,15],deprec:[2,3,6,13],depth:[0,3,9,10,16],deriv:[0,1,2,6,7,8,10,11,13,15],derivati:13,descend:[5,9,11],descent:[0,1,3,7,8,12,17],descr:[],describ:[0,2,4,5,6,8,10,11,12,13,16],descript:[0,8,9],design:[0,1,3,4,5,6,7,10,11,12,13],designmatrix:0,desir:[0,2,4,5,13,14],despit:[1,12],destroi:16,det:[5,16],detail:[0,6,11,13,14,16],detect:[3,8,12],determin:[0,2,3,4,5,6,8,9,10,11,12,13,16,18],determinist:[7,13,18],dev:1,develop:[0,3,5,8,10,11,12,15,16,17],deviat:[0,1,2,4,5,6,18],device_nam:[3,4],devis:12,df:[4,8,11,13],di:[0,5],diag:[5,8],diagnost:[1,10],diagon:[0,5,7,13,16,18],diagonaliz:5,diagram:10,diagsvd:6,dice:[6,18],dict:[6,8],dict_kei:[],dictionari:0,did:[0,1,5,6,7,10,11,14],die:1,diff1:2,diff2:2,diff:2,diff_ag:2,diffeent:8,differ:[0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,18,20],differenti:[3,15,16,17],differential_oper:[2,13],difficult:[0,1,6,10,13,18],difficulti:[0,1,13],diffonedim:2,digit:[0,1,3,4,6,17,19],dilemma:13,dilut:1,dim:[4,11,14,16],dimens:[0,1,2,3,4,5,8,11,14,16],dimension:[0,4,5,6,9,11,13,14,15,16],dimensionless:[0,3],diment:16,dimnsion:4,diod:3,direct:[0,1,2,4,11,12,13,14],directli:[1,4,5,6,18],directori:[],disabl:[3,4],disadvantag:0,disappear:[3,6],disc_loss:4,disc_tap:4,discard:[6,11],disciplin:[0,3,12],disclaim:18,discourag:13,discov:0,discover:5,discret:[1,3,5,7,13],discrimin:[4,7,10,11],discriminator_loss:4,discriminator_loss_list:4,discriminator_model:4,discriminator_optim:4,discuss:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],diseas:7,disguis:6,disord:[1,7],displai:[0,1,3,4,5,6,7,8,9,10,11,12,14,18],displaystyl:[0,5],displot:[],disregard:0,dissimilar:[11,14],dist:14,distanc:[0,8,9,11,14,18],distance_list:9,distinct:[3,7,8,9,10,14],distinctli:8,distinguish:[0,4,7,8,18],distplot:0,distribut:[0,1,4,6,7,10,11,13,14,15,16],distrubut:[0,15],div:5,dive:[0,8,16],diverg:[1,13],divid:[0,1,3,5,6,8,9,11,12,18],divis:[6,8,9,13,16,18],dna:7,dnn1:4,dnn2_gru2:4,dnn:[0,1,2,4,12],dnn_kera:1,dnn_model:1,dnn_numpi:1,dnn_scikit:[0,1],doc:[6,15,17,20],document:[4,7,11,13],doe:[0,1,2,3,4,5,6,8,10,11,12,13,16,18],doesn:[3,9,12],dog:[1,3,4],domain:[5,8,13],domin:0,don:[0,1,3,5,6,8,11,13,15],done:[0,2,3,4,5,6,9,10,11,13,16],dot:[0,2,3,5,6,7,8,9,10,11,12,13,16,18],doubl:[3,4,16],doubli:1,down:[0,3,6,9,11,12,13],download:[0,1,3,5,6,16,20],downsampl:3,dozen:1,dq:6,drag:13,dramat:11,drastic:4,draw:[4,6,10,13],drawback:[0,1,3,13],drawn:[1,4,6,7,11,18],drive:[3,4],driven:3,drop:[0,1,5,6,11,13,18],dropna:[0,6],dropout:4,ds:5,dt:[2,3,13,18],dtype:[0,1,2,3,4,14,16],dualiti:6,dub:0,due:[1,2,5,6,8,10,12,13],dummi:0,dure:[0,1,3,4,8,9,11,15],dwell:0,dwh:1,dwo:1,dx:[2,3,8,18],dx_1:18,dx_1p:6,dx_2p:6,dx_mp:6,dx_n:18,dxp:6,dy:[1,8,18],dynam:4,dysth:19,dz:8,e:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19],e_:[0,2],each:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],eager:[3,4],eapprox:0,earli:[1,3,4,13],earlier:[0,5,7,8,9,11,12,13],earthexplor:6,eas:[6,9,14],easi:[0,5,6,7,8,9,10,11,12,13,15,16],easier:[5,6,8,9,13,18],easiest:13,easili:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16],eastern:19,ebind:0,eblock:9,economi:5,ecosystem:15,ect:17,edg:3,edgecolor:6,edu:13,educ:0,eface79dac2c:10,eff:18,effect:[1,4,10,13,18],effic:1,effici:[0,3,10,13,15,16,18],efron:6,egrad:13,eig:[5,11,13,16,18],eigen:18,eigenpair:[5,11],eigenvalu:[0,5,8,11,13,16],eigenvector:[5,11,13],eight:16,eigval:[16,18],eigvalu:[11,13],eigvec:[16,18],eigvector:[11,13],eispack:16,either:[1,5,6,7,8,9,10,11,13,18],ekstrom:[],elabor:18,elarn:3,electr:[0,3,12],electur:20,eleg:11,element:[1,2,3,4,5,6,7,8,11,12,13,15,16,17,20],elementari:[10,13,16],elementwis:[3,13],elementwise_grad:[2,13],elif:[2,3,4,14],elim:16,elimin:[3,5,8],els:[1,2,3,4,7,9,12,13,16],elu:1,elus:0,email:[17,19],embed:[0,11],embodi:6,emit:18,emner:[17,20],emphas:[0,10,15],emphasi:[0,15,20],empir:[1,11,18],emploi:[0,1,5,6,11,13,18],employ:0,empti:[6,10],emul:12,en:[15,20],enabl:11,enbodi:6,encod:[0,3,5,9,11,14],encompass:[0,18],encount:[0,1,5,6,7,13,18],end:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],end_box:[2,13],end_nod:[2,13],end_valu:[2,13],endl:[],endpoint:[3,6],energi:[0,4,6],enet_coordinate_desc:6,enforc:12,eng:20,engin:[0,1,3,4,15],english:20,enorm:3,enough:[0,6,13],ensembl:[1,9,17],ensur:[0,1,2,3,5,6,11,13,18],ensure_initi:[3,4],enter:[5,6],enthought:[0,15],entir:[1,3,7,9,15,18],entiti:[9,12,16],entri:[0,5,8,11,12,16],entropi:[1,3,7,10,13],enumer:[0,1,2,3,4,6,8],env:[0,1,2,3,4,5,6,7,8,11,13,14,18],environ:[2,15,20],eo:[0,6],eol:0,eosfit:0,epoch:[0,1,3,4,12,13],epsilon:[0,5,6,7,13],epsilon_0:0,epsilon_1:0,epsilon_2:0,epsilon_:0,epsilon_i:0,eq:[3,13,14,16,18],eqnarrai:[3,5,6],equal:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18],equat:[1,3,4,5,6,7,8,9,10,11,13,14,16,17,18],equilibrium:[2,12],equiv:[3,13,16,18],equival:[0,1,5,8,11,13,15,16],erf:18,err:[0,10],err_:6,err_sqr:2,errat:13,errno:[],erron:2,error:[1,2,4,5,6,7,9,11,12,13,15,16,18],error_estimate_corr_tim:18,error_handl:[3,4],error_hidden:1,error_output:1,escap:13,especi:[1,3,9,12,13],essenti:[0,5,6,9,10,12,14,17,18],establish:[0,6,10,11],estim:[0,1,5,6,7,10,11,13,15,18],estimated_mse_fold:6,estimated_mse_kfold:6,estimated_mse_sklearn:6,et:[0,2,4,17,20],eta0:[8,13],eta:[0,1,3,8,12,13],eta_:13,eta_t:13,eta_v:[0,1,3],etc:[0,1,3,5,7,8,9,11,12,13,14,15,16,18],ethic:15,etsim:6,euclidean:[0,14],evalu:[0,2,3,4,5,6,9,13,18],evalut:13,even:[0,1,3,4,5,6,8,9,10,11,12,13,14,15,16,18],evenli:4,event:[3,4,5,7,10,14,18],eventu:[5,6,11,12,13,19],everi:[0,1,2,3,4,5,6,9,10,11,12,13,14,15,18],everyth:[4,12],everywher:[4,13],evolv:0,exact:[0,2,5,11,12,13,16,18],exactli:[0,3,4,6,12,15],examin:6,exampl:[5,11,12,13,15,16,17,18,20],exce:[1,12,13],excel:[0,1,4,5,10,20],except:[3,4,5,6,8,9,16],excess:0,excit:0,exclud:[1,6,12],exclus:[0,1,3,6,18],execut:[2,3,4,5,13],executing_eagerli:[3,4],exemplifi:13,exercis:[5,15,17],exhaust:6,exhibit:[0,5,6,8],exist:[0,1,2,3,5,6,7,8,9,13,16,20],exit:[5,16],exp:[0,1,2,5,6,7,8,10,11,12,13,18],exp_term:1,expand:[5,7,11,13],expans:[0,3,5,8,10,12,13],expect:[0,1,5,6,7,11,12,13,15],expectation_value_of_h_wrt_p:18,expens:[6,10,13],experi:[0,1,6,8,13,15],experiment:[0,3,4,6,9,14,18],experimental_get_tracing_count:[3,4],expert:[1,9],explain:[0,6,9,10,11,13],explained_variance_ratio_:11,explanatori:0,explicit:[0,3,6,13,16],explicitli:[0,4],explod:1,exploit:[0,3,12,13],explor:[1,4,6,8,13,15],expon:1,exponenti:[0,1,5,6,10,13,18],export_graphviz:9,export_text:9,exporttext:9,expos:15,express:[0,2,3,5,6,7,10,12,13,16,18],exptmean:18,exptvari:18,extend:[2,5,7,11,13,15],extens:[0,12,15],extent:[0,1,6,20],extern:[3,6,9],extra:[1,3,5],extract:[0,3,5,6,7,8,11,13,16],extrapol:0,extrem:[0,1,4,5,6,7,8,9,13,16],extremum:13,extrins:11,ey:[0,5,6,13,14,16],f11:0,f12:0,f13:0,f1:13,f1_grad:13,f1d:13,f2:13,f2_grad_x1:13,f2_grad_x1_analyt:13,f2_grad_x2:13,f2_grad_x2_analyt:13,f3:13,f3_grad:13,f3_grad_analyt:13,f4:13,f4_grad:13,f4_grad_analyt:13,f5:13,f5_grad:13,f6:13,f6_for:13,f6_for_grad:13,f6_grad_analyt:13,f6_while:13,f6_while_grad:13,f6d7a289d493:[],f7:13,f7_grad:13,f7_grad_analyt:13,f8:13,f8_grad:13,f9:[0,13],f9_altern:13,f9_alternative_grad:13,f9_grad:13,f:[0,1,2,3,4,5,6,7,8,10,12,13,14,16,18,19],f_0:[3,10],f_1:[10,13],f_2:[12,13],f_3:12,f_:10,f_d:18,f_grad:13,f_grad_analyt:13,f_i:[6,12],f_m:[3,10],f_n:3,f_raw:2,f_vec:2,f_wrap:2,face:13,facecolor:[6,8,18],facil:[0,15],facilit:12,fact:[0,1,3,5,9,11,12,13],factor:[0,1,3,5,6,9,10,11,13,16,18],factori:13,fade:6,fafab0:[9,10],fail:[0,6,7,8,11,13,19],failur:7,fairli:[1,2,18],fake:4,fake_loss:4,fake_output:4,fall:[8,9,17],fals:[0,1,2,3,4,5,6,7,9,10,13,14,16],famili:[0,7,8,18],familiar:[0,3,5,6,8,15,16,18],famou:[6,12],far:[0,3,4,5,6,8,11,12,13,14],fashion:[0,9,10],fast:[1,3,6,10,12,13,15,18],faster:[1,11,13],fastest:[13,16],favor:7,favorit:18,fc:3,fdf8a5d7c717:2,fdfcc778e1f8:4,fe5b9d300cc0:6,featur:[0,1,3,5,6,7,8,10,11,12,13,15,18],feature_nam:[0,1,7,9],feautur:9,fed:1,feed:[0,2,3,11,15,17],feed_forward:1,feed_forward_out:1,feed_forward_train:1,feedback:4,feeddorward:4,feedforward:[1,4,12],feel:[0,5,6,11,13,15,19],feet:0,fetch:6,fetch_california_h:[],fetch_openml:[],few:[1,3,4,5,9,18],fewer:[0,9,11],ffnn:[1,12],field:[0,3,6,12,15],fifth:[0,6],fig:[0,1,2,3,4,6,7,12,13,14],fig_id:[0,6,7,9],figaxi:18,figsiz:[0,1,2,3,4,6,7,8,9,10],figur:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15],figure_id:[0,6,7,9],figurefil:[0,6,7,9],file:[0,1,2,4,5,6,7,9],file_prefix:4,filenam:[],filenotfounderror:[],fileout:[],filepath_or_buff:0,fill:[5,9],filter:[3,4],filtered_flat_arg:[3,4],filtered_tb:[3,4],financ:0,find:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,18],find_top_boxed_arg:2,fine:[0,14],finish:2,finit:[3,5,6,12,13,18],first:[0,1,2,3,5,6,7,8,9,10,11,13,14,16,17,18,20],firsteigvector:11,fit:[1,3,4,5,6,7,8,9,11,12,13,18],fit_beta:6,fit_intercept:[0,5,6],fit_mod:9,fit_transform:[0,6,8,9,11],fiti:0,five:[0,9],fix:[0,3,4,6,10,11,12,13],fixedformatt:6,fixedloc:6,fkkt:5,flag:4,flat:[12,13],flatten:[1,3,4,5,16],flexibl:[1,6,8,10,12],float32:[4,9],float64:[4,16],flop:[5,16],flow:[1,4,12],fluctuat:5,fly:11,flyvbjerg:[],fm:0,fma:[],fmax:3,fmesh:13,fn:[3,4],focu:[0,3,4,5,6,15,20],focus:[1,6,7,16],fold:[6,9],folder:[0,4,6],follow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],font:[0,7,18],fontdict:18,fontsiz:[1,6,8,9,10,18],fontweight:1,footprint:3,foral:8,forc:[0,5,6,10,11],forcast:4,forecast:[4,12],forelesningsvideo:17,forest:[0,1,9,15,17],forget:11,form:[0,3,4,5,6,7,8,9,11,12,13,15,16,18],formal:[3,4,14,18],format:[0,1,2,3,4,6,7,8,9,10,11,15,18,20],format_data:4,formatstrformatt:[6,13],formul:[4,6,11,14],formula:[3,13,18],forth:[4,12],fortran2003:15,fortran90:18,fortran:[0,15,16],fortun:[0,11],forward:[0,3,6,15,16,17],forward_backward:[3,4],found:[1,2,4,5,6,12,13],foundat:15,four:[4,5,6,8,12,16,17],fourier:0,fourierdef1:3,fourierdef2:3,fourierseriessign:3,fourth:12,fr:5,frac:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18],fractal:[],fraction:9,frame:7,framework:[1,8,10,18],frank:[5,11],frankefunct:[5,6,11],free:[0,6,11,13,15,16,18,19,20],freecodecamp:15,freedom:5,freeli:0,frequenc:[3,6,7,18],frequent:[0,8,9,13],frequentist:15,fresh:10,frida:19,fridai:17,friedman:[6,17,20],friendli:4,frog:3,from:[0,1,2,3,4,6,7,8,9,11,13,14,15,16,17,18,19,20],from_cod:9,from_logit:[3,4],from_tensor_slic:4,fromnumer:2,front:[0,4,5],fstream:[],fulfil:[2,5,12],full:[0,1,3,5,7,9,10,13,18],full_matric:5,fulli:[3,6,12,17,18],fun:[2,13,15],fun_nam:[],func:[0,2],functionali:11,fundament:[0,6,15],funtion:2,further:[2,9],furthermor:[0,3,5,6,7,11,12,13,15],futur:[0,4,8,9],futurewarn:[],fx:5,fy:[17,19],g0:2,g42mrgv128v34gnnhxwk9nrc0000gp:[],g:[0,1,2,3,4,5,6,8,9,10,11,13,18],g_0:2,g_1:[2,10],g_2:[2,10],g_:[2,9,10],g_analyt:2,g_dnn_ag:2,g_euler:2,g_i:2,g_m:[3,10],g_n:3,g_re:2,g_t:2,g_t_d2t:2,g_t_d2x:2,g_t_dt:2,g_t_hessian:2,g_t_hessian_func:2,g_t_jacobian:2,g_t_jacobian_func:2,g_trial:2,g_trial_deep:2,g_vec:2,gain:[1,5,9,10,13],galleri:0,game:4,gamma1:8,gamma2:8,gamma:[0,2,8,9,10,11,13],gamma_0:10,gamma_1:10,gamma_1x:10,gamma_:0,gamma_i:[0,8,18],gamma_j:13,gamma_k:13,gamma_m:10,gamma_x:0,gap:[6,8],gate:[4,12],gather:[0,1,12],gaug:12,gaussbacksub:16,gaussian:[4,5,6,8,14,18],gaussian_point:14,gaussian_rbf:8,gave:13,gbc:17,gca:[2,6,8,13],gd:1,gd_clf:10,gdclassiffiercgain:10,gdclassiffierconfus:10,gdclassiffierroc:10,gdm:13,gdregress:10,ge:[1,5,7,18],gemv:5,gen:[],gen_loss:4,gen_tap:4,gender:0,genener:4,gener:[0,1,2,3,5,6,8,10,11,12,13,14,16,18,20],generallay:12,generate_and_save_imag:4,generate_imag:4,generate_latent_point:4,generate_simple_clustering_dataset:14,generated_imag:4,generator_loss:4,generator_loss_list:4,generator_model:4,generator_optim:4,genexpr:[],genom:15,geodes:11,geometr:[0,13],geometri:5,georg:20,geotif:6,geq:[2,5,8,9,13],geron:[0,17,20],get:[0,1,2,3,4,5,6,7,9,10,11,13,15,16,18],get_dummi:9,get_loc:[],get_next_color:[],get_paramet:2,get_split:9,get_yaxi:8,get_yticklabel:6,getsolutionslic:5,getval:[],gg:[],gibb:15,gif:4,gini:10,gini_index:9,git:[0,15],github:[0,3,4,6,14,15,17,20],gitlab:[0,15],give:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,17,18,20],given:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],global:[6,7,13],glorot:1,gmail:[],go:[0,1,3,5,6,8,9,11,12,13],goal:[0,7,9],goe:[0,1,2,5,6,13,14,16],golden:13,gone:5,gong:1,good:[1,3,4,5,6,9,10,11,13,15,17,18,20],goodfellow:[4,17,20],googl:[1,3,4,14,15],got:[1,6],gov:6,gp:20,gpu:1,grad:[2,13],grad_analyt:13,grade:17,gradient:[0,3,4,7,8,9,12,15,17],gradient_desc:3,gradientboostingclassifi:10,gradientboostingregressor:10,gradients_of_discrimin:4,gradients_of_gener:4,gradienttap:4,gradual:[1,14],grai:[4,6],graph:[1,9,11,12,13],graph_from_dot_data:9,graph_funct:[3,4],graphic:[0,1,9],grasp:0,gray_r:[1,3],grayscal:3,great:[5,13],greater:[1,7,18],greatli:13,greedi:9,green:[0,3,9,18],grei:4,grid:[1,3,6,7,8,12,18],grossli:13,ground:0,group:[0,6,7,9,14,15,17],groupbi:0,grow:[1,3,9,10],growth:0,gru:4,guarante:[0,3,4,13,18],guess:[1,4,10,13,14],guestrin:10,guid:1,guilherm:19,h1:2,h21:17,h:[0,1,5,6,8,13,18,20],h_1:[2,13],h_2:[2,13],h_:[0,13],h_m:10,ha:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],habit:0,had:[0,1,6,7,13],hadamard:[1,12],half:[1,8,9],halv:10,hand:[0,1,2,3,5,11,12,13,15,16,17,18,20],handi:3,handl:[0,1,2,5,9,11,15],handle_unknown:9,handsid:12,handwrit:12,handwritten:[1,5],happen:[1,2,3,4,5,6,10,13,18],hard:[1,7,8,10,13],hardcopi:15,harder:[0,1],harmon:3,hasn:1,hassl:[0,15],hast:15,hasti:[0,6,17,20],hat:[1,5,6,7,9,10,11,12,13,16],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],haven:1,he:7,head:[0,4,10,18],header:0,heads_proba:10,health:0,hear:[0,13],heart:[0,7],heatmap:[0,1,3,7],heavili:0,heavisid:1,height:[1,3,6],held:13,help:[0,1,4,12,13],helper:[4,14],henc:[0,5,6,8,9,10,12,13],her:7,here:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],hereaft:[0,8,12],hermitian:16,hessenberg:16,hessian:[0,2,5,13],heterogen:[9,10],hi:7,hidden:[1,3,4,12],hidden_bia:1,hidden_bias_gradi:1,hidden_layer_s:[0,1],hidden_neuron:4,hidden_weight:1,hidden_weights_gradi:1,hierarch:5,high:[0,1,2,3,4,5,6,9,10,11,13,14,15,16],higher:[0,1,3,5,6,8,13],highest:[1,2],highli:[0,3,4,10,15,16,20],highwai:0,hing:8,hint:13,hip:15,hire:0,hist:[4,6,7,18],histogram:[0,6,7,18],histor:[7,11],histori:[3,4,12],histplot:[],hit:[],hitherto:5,hjorth:19,hobbi:18,hoc:5,hoff:20,hold:[1,3,6,13,14],holder:0,home:0,homework:[6,13],homogen:[1,3,9,10,13],honchar:2,hopefulli:[0,11,18],horizont:11,hors:[3,7],hot:[1,9],hour:[1,15,17,18,19],house_pric:[],how:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],howev:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],hs:[],hspace:[0,4,8,10,18],hstack:1,htf:17,html:[7,11,15,17,20],http:[3,4,6,7,11,13,14,15,16,17,20],huang:0,huber:0,huge:[1,3,4,15],human:[0,1,3,6,9,12],humid:9,hundr:1,hungri:1,hybrid:17,hydrogen:0,hyperbol:[1,4,12],hyperparam:8,hyperparamet:[3,4,5,6,9,13],hyperplan:11,i0:0,i1:[0,6,8,12],i2:[0,8,12],i3:[0,12],i5:0,i:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19],i_1:[5,6],i_2:[5,6],i_:13,ian:20,ic:1,id:[7,13],ida:19,idea:[0,1,2,3,4,6,9,10,12,13,16],ideal:[0,2,6,8,13,18],idem:6,ident:[5,6,12,13,16],identical:5,identifi:[0,1,7,9,11,12,13,14],idum:[],ieor:18,ifi:20,ifs:15,ignor:[0,1,3,9],ii:[16,18],iii:16,ij:[0,1,3,6,8,12,14,16,18],ik:[0,16],illustr:[5,7,10,12,13,14,15],im:6,imag:[1,3,4,6,9,11,12,14,20],image_at_epoch_:4,image_batch:4,image_height:3,image_path:[0,6,7,9],image_width:3,imageio:6,images_from_seed_imag:4,imagin:1,immedi:[0,3,4,6,15],implement:[0,2,3,4,5,6,8,9,10,11,12,13,14,18],impli:[3,5,6,7,13,16],implicit:3,implicitli:[11,18],importantli:3,impos:[0,6,11,12],imposs:[0,5],impress:[0,12],improv:[0,4,5,9,10,11,13],impur:9,imread:6,imshow:[1,3,4,6],in3050:20,in4080:20,in4300:20,in5400:[3,20],in_out_neuron:4,inaccur:13,inacio:19,inact:12,inadequ:0,inch:6,includ:[0,1,2,3,4,5,6,7,11,12,15,18,19,20],include_bia:[6,9],incom:12,incorrect:1,incoveni:8,increas:[0,1,3,4,5,6,7,8,9,11,12,13,18],increasingli:18,ind:6,inde:[0,2,4,5,6],indefinit:4,indent:[],indentationerror:[],independ:[0,5,6,7,8,12,13,18],index:[0,1,3,4,10,14,15,16,18,20],index_col:0,index_of:[],indic:[0,1,3,4,5,6,9,10,11,13],indispens:6,individu:[1,6,7,10,12,18],indu:0,indx1:2,indx2:2,indx3:2,indx:16,ineffici:[3,13],inequ:8,inequaltii:13,inertia:13,inf1000:15,inf1100:15,inf1100l:15,inf1110:15,inf3000:20,inf4490:20,inf5860:20,infeas:9,infer:[0,1,4,6,20],infer_nrow:0,inferenc:1,infil:[0,6,7,9],infin:[5,6,7,11],infinit:3,infinitesim:18,influenc:[6,10],influenti:1,inform:[0,1,3,4,6,9,11,12,13,14,16,20],infti:[3,6,13,18],ingeni:13,ingrad:2,ingredi:[0,9],inher:6,inherit:16,initi:[0,1,2,6,10,13,14,16,18],initial_epoch:[3,4],initialis:[],initialize_root:[],inject:14,inlin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],inner:13,innov:20,inp:4,inplac:13,input:[0,1,3,4,5,6,7,8,9,10,12,13,14,18],input_dim:1,input_shap:[3,4],inputs:1,inputs_shuffl:[0,1],insert:[3,5,6,8,10,18],insid:[0,4,7],insight:[0,1,5,15,20],insist:[6,13],inspir:[0,1,12,20],instabl:2,instal:[0,1,5,6,9],instanc:[0,1,2,4,6,9,11,13],instanti:10,instead:[0,1,2,3,4,5,6,8,9,11,13,14,16,18],institut:1,instruct:[0,1],int32:10,int64:[],int_0:18,int_:[3,6,18],int_a:18,intak:0,integ:[1,2,13,14,16,18],integer_vector:1,integr:[3,6,18],intellig:[0,14,20],intend:10,intens:1,intention:14,interact:[0,6,9,12,15],intercept:[0,6,8,11,13],intercept_:[0,6,8,9,13],interchang:[5,12,16],interconnect:1,interest:[0,1,2,3,4,5,6,7,8,9,12,15,17,18],interfac:[0,1,16],interior:[0,9],intermedi:16,intern:[1,10,12],interpol:[1,3,4,6,12],interpr:5,interpret:[0,1,6,9,10,12,13,16,18],interv:[0,3,5,6,7,13,18],intial:13,intract:[0,4],intrins:[3,11,16,18],intro:[15,20],introduc:[0,1,5,6,8,10,12,13,16,18],introduct:[1,2,4,13,17,20],introductori:[0,4,16,20],intuit:[0,5,6,8,12,13],inv:[0,5,13],invalid:1,invalu:[0,13,15],invari:1,invd:5,inver:8,invers:[0,3,6,13],invers_period:[],inverse_transform:8,invert:[0,5,7,10],invok:[0,8],involv:[0,2,6,7,11,12],io:[0,15,17,20],iomanip:[],iostream:[],ip:[0,8,18],ipca:11,ipykernel_42331:[],ipykernel_42376:[],ipykernel_42449:[],ipykernel_42456:[],ipykernel_42530:[],ipykernel_42541:[],ipykernel_42553:[],ipykernel_42573:[],ipykernel_42580:[],ipykernel_42586:[],ipykernel_47411:[],ipykernel_47448:[],ipykernel_47647:[],ipykernel_47724:[],ipykernel_47735:[],ipynb:15,ipython:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15],iq:6,iri:[8,9],irreduc:6,irrelev:5,irrespect:0,is_integ:[],isbox:[2,13],iscomplexobj:[],isinst:[2,13],isn:5,isnul:0,isomap:11,issu:[1,3,4,9,14,16],it_arrai:13,item:[0,13],items:16,iter:[1,2,3,4,6,7,8,11,13,14,18],itr:5,its:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20],itself:[5,6,12,18],ix:[],j1:16,j:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18,20],j_:6,j_lasso_sk:6,j_ridge_sk:6,j_sk:6,jackknavg:[],jackknif:[6,15],jackknstd:[],jackknvar:[],jackknvec:[],jacobian:[2,13],jacobian_shap:2,jargon:[],jason:4,jax:[3,4,14],jensen:19,jerom:20,ji:[12,16],jj:[0,5,6],jk:[0,1,6,12,16],jl:0,jm:16,joao:19,joaogca:19,job:[2,8,10],join:[0,4,6,7,9],joint:[4,5],journal:[],judg:13,judgement:6,julia:[15,16],jump:18,junk:4,jupyt:[0,15,20],just:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18],justif:0,justifi:[3,10],jy:[],k0:7,k1:7,k:[0,1,3,5,6,7,8,9,10,11,12,13,14,15,16,18],kaggl:6,kappa_d:18,karim:[],karlsen:[],karush:8,keep:[0,1,4,5,6,11,13,14,16],keepdim:[1,6,10,16],kei:[0,1,3,6,12,20],kept:[4,6,14],kera:[0,4,15],kernel:[0,1,3,15],kernel_regular:[1,3],kernel_s:4,kernelpca:11,kev:0,kevin:20,keyboardinterrupt:[2,3,4],keyerror:[],keyword:[6,13,16],kfold:6,kg:1,ki:16,kick:[1,13],kiener:2,kilomet:6,kind:[0,2,3,4,8,12,13,14],kj:[6,12,16],kjm:15,kkt:[5,8],kktsolver:5,kl:18,km:12,kmean:14,kmeanspoint:14,kn_k:14,know:[0,1,2,5,6,8,13,15],knowledg:[0,15],known:[1,3,4,5,6,7,8,9,12,16,18,20],kondev:0,kp:18,kpca:11,kroneck:14,kuhn:8,kwarg:[0,2,3,4,13],kwd:[0,3,4],kwown:0,l0:7,l1:[0,1,3,5,7],l1_l2:[1,3],l1regl:5,l1regls_mosek2:5,l1regls_mosek:5,l2:[1,3],l:[0,1,2,3,5,6,7,8,10,11,12,13,16,18],l_1:7,l_2:[7,13],l_:16,l_j:12,la:13,la_i:12,la_k:12,lab:[15,17],label:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,18],label_prob:13,labelencod:[7,10],labels:[6,8,9],labels_shuffl:[0,1],laboratori:17,lack:0,lagari:2,lagrang:[8,11],lambda:[0,1,2,3,5,6,7,8,10,12,13,18],lambda_0:11,lambda_1:[5,8,11],lambda_2:[8,11],lambda_:11,lambda_i:[8,11],lambda_iy_i:8,lambda_jy_iy_j:8,lambda_k:8,lambda_n:[5,8],lamda:1,lamdbda:5,land:[0,8],landmark:8,landscap:13,langl:[0,6,11,18],languag:[0,1,4,8,15,16,20],lapack:[5,16],laplac:5,laptop:15,larg:[0,1,2,4,5,6,8,9,10,11,13,15,16,18,20],larger:[0,3,5,6,8,10,11,13,18],largest:[4,8,11],lasso:[0,7,15,17],lasso_sk:6,last:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,17,18],latent:4,latent_dim:4,latent_point:4,latent_space_value_rang:4,later:[0,1,4,6,7,8,12,13,14,15],latest:4,latest_checkpoint:4,latter:[0,3,5,6,7,8,11,13,16,17,18],lattic:12,law:0,layer:[0,4,13],lbfg:[7,9,10,11],lcc:[5,6],lda:11,ldot:[0,6,11],le:[5,7,10,13,18],lead:[0,1,3,5,6,7,8,9,10,11,12,13,16,18],leaf:9,leaki:1,leakyrelu:4,lear:13,learn:[3,4,5,6,7,8,9,10,12,16,17,20],learnabl:3,learner:10,learning_r:[3,8,10],learning_rate_init:[0,1],learning_schedul:13,least:[0,2,7,8,10,11,15,16,17,18],leat:13,leav:[0,1,3,5,6,9,11],lectur:[0,1,5,10,11,12,13,15,16,17,20],lecturenot:[15,20],lecturenovember11:[],lecturenovember12:[],lecturenovember19:[],lecturenovember25:[],lecturenovember26:[],lecturenovember4:[],lecturenovember5:[],lectureoctober14:17,lectureoctober15:17,lectureoctober1:[],lectureoctober21:[],lectureoctober22:[],lectureoctober28:[],lectureoctober29:[],lectureoctober7:[],lectureoctober8:[],lectureseptember10:[],lectureseptember16firstpart:[],lectureseptember16secondpart:[],lectureseptember17:[],lectureseptember23:[],lectureseptember24:[],lectureseptember2:[],lectureseptember30:[],lectureseptember3:[],lectureseptember9:[],lecturethursdayaugust26:[],lecturethursdayaugust27:[],left:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18],leftarrow:[8,12],legend:[0,2,3,4,5,6,7,8,9,10,13],len:[0,1,2,3,4,5,6,8,9,10,11,12,16],len_index:0,length:[0,1,2,3,4,8,9,13,15],length_of_sequ:4,leq:[0,5,7,8,13,14,18],less:[0,1,3,4,5,6,8,9,13,18],lessen:1,let:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],letter:[0,16,18],level:[0,1,5,6,9,15,16,17],li:[8,11],lib:[0,1,2,3,4,6,7,8,11,13,14],liblinear:[8,10],librari:[0,1,2,3,4,5,6,9,10,11,16,18,20],licens:[0,1,15],lie:[0,6,11,18],life:[0,1,8,12],lifetim:13,like:[0,1,2,3,4,5,6,7,9,10,11,12,13,15,16,18],likelihood:[0,1,5,9,13],lim_:18,limit:[0,5,6,7,8,11,12,16],lin_clf:8,lin_model:0,lin_reg:9,linalg:[0,2,5,6,8,11,13,16,18],line1:8,line2:8,line2d:13,line3:8,line:[0,1,3,6,8,11,13],linear:[1,3,5,6,7,9,10,11,12,15,17,18],linear_model:[0,5,6,7,8,9,10,11,13],linear_regress:6,linearli:5,linearloc:[6,13],linearregress:[0,6,7,9],linearsvc:8,liner:[1,3],linerar:10,linewidth:[0,2,4,6,8,9,10],link:[0,4,9,12,15],linlag:5,linpack:16,linreg:0,linspac:[0,2,3,4,6,8,9,10,13,16,18],linu:4,linuek:[],linux:[0,1,15],liquid:0,list:[0,1,2,3,4,5,9,15],listcomp:2,listedcolormap:[9,10],literatur:[1,7,14,20],littl:[1,3,9,12],live:8,ll:[0,18],lle:0,lloyd:[4,14],lmb:[2,5,6],lmbd:[0,1,3],lmbd_val:[0,1,3],lmbda:13,ln:[1,13],lo:5,load:[0,1,4,6,7,9,10],load_boston:0,load_breast_canc:[1,7,9,10,11],load_data:[3,4],load_digit:[1,3],load_iri:[8,9],loc:[0,3,6,7,8,9,10],local:[0,1,3,7,12,13],locat:[2,3,8],lock:[3,4],log10:[5,6],log:[0,1,2,4,5,6,7,9,10,11,13,16],log_:0,log_clf:10,logarithm:[0,5,7,16],logic:[0,1,9],logist:[0,1,2,8,9,10,11,12,15,17],logistic_predict:13,logisticregress:[7,9,10,11],logit:7,logreg:[7,9,10,11],logspac:[0,1,3,5,6],longer:[2,3,8,10,14,16,18],loocv:6,look:[0,1,2,3,4,5,6,7,8,9,10,11,13,16,18],loop:[1,4,6,10,12,14,15,16],lose:1,loss:[0,1,3,4,5,6,7,8,10,11,13,16],loss_fil:4,lossfil:4,lost:4,lot:[0,1,4,6],low:[0,6,9,10,11],lower:[0,1,3,6,9,10,16],lowercas:16,lowest:[9,13,18],lr:[1,3,4,10],lstat:0,lstm:4,lstm_2layer:4,lstsq:0,lt:6,lu:[0,5],lubksb:16,luckili:2,ludcmp:16,lux:16,lvert:1,lw:0,m:[0,1,2,3,5,6,8,9,10,11,12,13,16,17,18,19,20],m_1:14,m_:[9,12],m_h:0,m_k:14,m_l:12,m_n:0,m_p:0,m_t:13,ma:11,mac:[3,4,14],machin:[1,3,4,5,6,7,9,10,11,12,14,16,17,20],machinelearn:[6,15,17,20],mackai:20,made:[0,1,3,4,5,6,7,9,11,12],mae:0,magic:4,magnitud:[1,6,7,13],mai:[0,1,2,3,5,6,7,8,9,11,12,13,15,16,18],mail:17,main:[0,1,3,4,5,6,7,9,16,20],mainli:[0,5,6,7,9],maintain:6,major:[1,6,9,10,13,16],make:[1,2,3,4,5,6,7,8,11,12,13,15,16,18,20],make_axes_locat:6,make_moon:[8,9,10],make_pipelin:[0,6,10],make_vjp:[2,13],makedir:[0,6,7,9],makeplot:0,malcondit:16,malign:[1,7,9],mammographi:5,manag:[0,2,3,15],mani:[0,1,3,4,5,6,7,8,9,11,13,14,15,16,18,20],manifold:11,manner:3,manual:6,map:[0,1,2,6,7,8,11,12,14,18],margin:[0,5,8],mari:19,marit:0,marker:[0,7,16],markov:15,marsaglia:18,mask:[],mass:[0,1,5,13],massag:0,masses2016:0,masses2016ol:0,masses2016tre:0,masseval2016:0,master:[6,17],mat1100:15,mat1110:15,mat1120:15,mat3155:[],mat4155:[],mat:15,match:[0,1,4,5,13,14],materi:[4,5,7,13,16],math:[3,7,12,13,16,18,20],mathbb:[0,4,5,6,7,8,11,12,13,14,16,18],mathbf:[0,5,6,7,8,13,16],mathcal:[1,5,6,7,13],matheemat:3,mathemat:[0,6,11,12,13,15,16,17,18,20],mathrm:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,18],matmul:[1,2,5],matmul_adjoint_1:2,matmul_vjp_0:2,matmul_vjp_1:2,matnat:[17,19,20],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],matplotlibdeprecationwarn:[6,13],matric:[0,1,3,4,6,7,8,11,13,15],matrix:[0,2,3,4,6,7,8,10,13,18],matshow:1,matter:[2,3,13],max:[0,1,2,3,4,9,10,12,13],max_depth:[0,9,10],max_diff1:2,max_diff2:2,max_diff:2,max_it:[0,1,7,8,11,13],max_iter:14,max_leaf_nod:10,max_queue_s:[3,4],max_sampl:10,maxdegre:[0,6,10],maxdepth:10,maxim:[1,4,5,7,8,11],maximum:[0,1,2,3,5,7,8,9,10,13,14],maxpolydegre:[5,6],maxpooling2d:3,mbox:[5,6],mc:[],mcculloch:12,mcint:[],mcintsqr2:[],md:11,mdoel:4,mean:[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,18],mean_absolute_error:0,mean_divisor:14,mean_i:18,mean_matrix:14,mean_squared_error:[0,4,6,7,10],mean_squared_log_error:0,mean_vector:14,mean_x:18,meaning:[0,4,7],meansquarederror:0,meant:[2,3,7,10,13],meantempvec:[],meanvec:[],measur:[0,1,2,5,6,9,11,12,14,18],mechan:[0,4,18],median:0,medicin:12,medium:[4,8,13],medv:0,meet:[0,19],mehta:0,memori:[3,4,11,12,13,16],mention:[0,12,13,18],mere:0,mersienn:[],meshgrid:[2,5,6,8,9,10,11],messag:[5,13],messi:2,met:[0,3,8],metadata:2,meteorolog:9,meter:6,method:[0,1,2,3,4,5,7,8,11,12,14,15,16,17,18,20],metion:6,metric:[0,1,3,6,7,9,10,14],metropoli:15,mev:[0,18],mgd:13,mglearn:15,mgrid:13,mhjensen:[1,2,3,4,6,7,8,11,14],mi:10,microsoft:20,mid:1,midel:4,midpoint:9,might:[0,1,2,4,6,9,13],mild:9,miller:[],millimet:6,million:0,mimic:12,min:[0,2,5,8,9],min_:[0,2,5,14],min_samples_leaf:9,mind:[0,6,13],mindboard:4,mine:15,mini:[1,11,12,13],minibatch:[1,11,13],minibathc:13,miniforge3:[0,1,2,3,4,6,7,8,11,13,14],minim:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],minima:[0,1,7,13],minimum:[0,1,2,6,8,9,11,13],minmaxscal:0,minor:[6,13,18],minst:1,minu:7,mirror:9,misc:6,misclassif:[8,9,10],misclassifi:[8,10],miser:0,mismatch:1,miss:[0,10],mistak:4,mit:20,mix:[1,2],mixtur:13,mk:[9,16],mkdir:[0,6,7,9],ml:[0,1,10,13,16],mlab:18,mle:[5,7],mline:[],mlir:[],mlir_graph_optimization_pass:[],mlp:1,mlpclassifi:1,mlpregressor:0,mm:16,mn:[12,18,20],mnist:[1,11],mod:18,mode:17,model:[2,3,5,7,8,9,10,11,13,14,15,18,20],model_select:[0,1,3,5,6,7,9,10,11],moder:10,modern:[0,6,7,15],modif:[2,12,13],modifi:[0,1,3,5,7,8,10,12,13],modul:[0,2,3,4,5,6,7,8,9,10,11,13,16],modular:18,modulenotfounderror:[5,7,8,9],modulo:18,moe:[5,11],moment:[5,6,13,18],monitor:13,monoton:[5,12,18],mont:[0,6,15,18,20],montecarlocycl:[],moor:[5,6],more:[0,1,2,4,5,7,8,9,10,11,12,13,14,15,17,18],moreov:[0,3],morten:19,mortenimac:[],mosek:5,most:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18],mostli:[1,11],motion:[0,13],motiv:[1,4],move:[0,4,5,6,7,9,12,13,14,18],mp4:17,mpl:[0,7],mpl_toolkit:[2,6,13],mplot3d:[2,6,13],mplregressor:1,mse:[0,4,5,6,9,10],mse_simpletre:10,mselassopredict:5,mselassotrain:5,mseownridgepredict:6,msepredict:5,mseridgepredict:[5,6],msetrain:5,msg:[],msle:0,mt19937_64:[],mt:[7,12],mu0:18,mu1:18,mu2:18,mu:[0,6,11,13,18],mu_:[6,18],mu_i:6,mu_n:11,mu_x:18,much:[0,1,2,3,4,5,6,8,9,10,11,12,13,16,18],mul:5,multi:[0,1,3,7,15],multiclass:[1,7],multidimension:[11,12],multilay:1,multinomi:7,multipl:[2,4,5,6,7,12,13,18],multipli:[3,5,6,11,13,16,18],multiplum:8,multivari:[0,2,10,11,15,18],multivariate_norm:[11,14],murphi:[11,20],must:[0,1,2,5,6,8,10,12,13,14,18],mutat:7,mutual:[1,3,6,13],mx_:18,myenv:[0,1,2,3,4,6,7,8,11,13,14],myriad:[0,15],mz1:18,mz2:18,n1:16,n2:16,n:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,18],n_0:[12,18],n_:[1,2,3,8,12,18],n_b:[],n_boostrap:[6,10],n_bootstrap:6,n_categori:[1,3],n_cluster:14,n_compon:11,n_epoch:13,n_estim:10,n_examples_to_gener:4,n_featur:1,n_filter:3,n_hidden:2,n_hidden_neuron:[0,1],n_i:18,n_input:[0,1,3],n_instanc:9,n_iter_i:[7,11],n_job:10,n_k:14,n_l:[12,18],n_layer:1,n_m:9,n_neuron:1,n_neurons_connect:3,n_neurons_layer1:1,n_neurons_layer2:1,n_point:14,n_sampl:[6,8,9,10,14],n_split:6,n_step:4,n_t:2,n_x:2,nabla:[1,13],nabla_:[2,13],nabla_w:13,nag:13,naimi:0,naiv:7,naive_kmean:14,nall:0,name:[0,1,3,4,5,6,7,8,9,10,12,13,14,15,16,18,19],nameerror:[6,10],namespac:[],narrow:13,nary_f:[2,13],nary_op_arg:[2,13],nary_op_kwarg:[2,13],nary_oper:[2,13],nation:[1,5],nativ:15,natur:[0,1,4,8,9,12,13,18,20],navier:12,nb:18,nb_:16,nboot:[],nd:14,ndarrai:[2,6],ndim:2,ne:[9,10,16,18],nearest:[1,3,6,11],nearli:13,neccesari:6,necess:2,necessari:[0,1,3,4,8,14],necessarili:[0,4,11,18],necesserali:5,neck:7,need:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,16,18],neg:[0,1,3,5,6,7,10,13,16,18],neg_mean_squared_error:6,neglect:18,neglig:18,neighbor:[3,6,11],neither:[4,13],neq:[13,14,18],nervou:12,nest:[2,9,12],nesterov:13,net:[2,4,12],netlib:16,network:[0,9,13,15,17,20],neural:[0,7,13,15,17,20],neural_network:[0,1,2],neuralnetwork:1,neuron:[1,2,3,4,12],neutral:0,neutron:0,never:[1,3,4,6,9,18],new_box:[2,13],new_root:[2,13],new_trac:[2,13],new_tracing_count:[3,4],newaxi:[0,3,6,9],newli:0,newton:[1,7,8,13,18],next:[0,1,2,3,4,5,6,8,9,13,14],next_guess:13,next_input:4,ng:1,ngini:[],ni:14,nian:[],nice:[0,1,5,11],nichola:[],nicholaskarlsen1102:[],niter:13,nitric:0,nlambda:[5,6],nlevel:[],nm:18,nm_n:0,nmse:6,nn:[2,5,6,12,16],nn_model:1,nnmin:2,node:[1,2,3,9,10,12],node_constructor:2,nois:[0,4,5,6,8,9,10,13],noise_dimens:4,noisi:[1,6],non:[0,1,3,4,5,6,7,9,10,11,12,13,14,16,18],none:[0,1,2,3,4,5,9,10,13,18],nonlinear:[3,6,8,9,11,12],nonneg:[6,9,13],nonparametr:6,nonsens:18,nonsingular:16,nonumb:[3,7,8,13,16],nor:[1,4,13],norm:[0,1,5,6,8,11,13],normal:[3,4,5,6,7,8,9,10,11,12,13,15,16,18],normali:16,normalize_kwarg:[],norwai:6,notat:[0,2,5,6,13,14,18],note:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,20],notebook:[0,1,3,9,15],noth:[1,2,5,8,12,14,18],notic:[4,5,12,13,16,18],notimplementederror:[],notion:3,notrace_primit:[],novel:[3,6,10],novemb:1,now:[0,2,4,5,6,7,8,10,11,12,13,14,16,18],nowadai:[0,1,3,9,15],nox:0,np:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18],npr:2,nsampl:6,nspin:[],nt:2,nthi:0,ntrained_model:6,nu:18,nuclear:5,nuclei:[0,18],nucleon:0,nucleu:0,num:4,num_coordin:2,num_hidden_neuron:2,num_it:2,num_neuron:2,num_neurons_hidden:2,num_output:[3,4],num_point:2,num_tre:10,num_valu:2,number:[1,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19],numberid:7,numberparamet:3,numer:[0,5,6,9,10,11,12,13,15,16,20],numpi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18],numpy_vjp:2,numpy_wrapp:2,nunmpi:5,nvalu:[],nx:2,nx_test:6,nx_train:6,nx_train_mean:6,ny:18,ny_pr:6,ny_train:6,ny_train_mean:6,o:[0,6,7,8,9,11,16,20],obei:[6,11,13],object:[0,1,2,4,5,6,8,10,13,16],objsens:5,obliqu:5,observ:[1,3,5,6,7,8,9,10,11,12,13,14,18],obtain:[0,1,5,6,7,8,9,10,12,13,14,16,18],obviou:[5,6,11,18],obviouli:0,obvious:[0,4,5,6,16],oc:5,occupi:0,occur:[0,6,8,9,16,18],od:0,odd:[0,3,7],odenum:2,odesi:2,oen:0,off:[1,3,4,5,9,13,18],offer:[6,11,15,16,17],offic:19,offici:17,ofil:[],ofstream:[],often:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],ofter:16,ol:0,old:[1,5,10,13],ols_sk:6,ols_svd:6,olsbeta:5,omega:[2,3,6],omega_0:3,omit:[0,5],on_train_batch_begin:[3,4],onc:[1,6,9,11,13],one:[0,1,3,4,5,6,7,8,9,10,11,13,14,15,16,18],oneapi:[],onednn:[],onehot:1,onehot_vector:1,onehotencod:9,ones:[0,2,5,6,8,9,10,11,13,16,17],ones_lik:4,onl:3,onli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],onlin:[11,17],onto:[5,11],op_nam:[3,4],open:[0,1,4,6,7,9,15,17],oper:[0,1,3,5,6,10,11,12,13,15,18],operation:18,oplu:18,opmiz:13,opportun:0,oppos:[6,13],opposit:[1,5,8],opt:[1,5],optim:[0,2,3,4,5,6,7,9,10,11,14,17],optimis:[1,3],optimizer_v2:3,option:[0,1,3,5,6,7,8,11,16],optionalxlacontext:[3,4],optmiz:[1,8,13],orang:0,order:[0,1,2,3,5,6,7,8,9,10,11,12,13,16,18],ordinari:[0,2,3,7,11,13,15,17],oreilli:20,org:[3,4,7,11,15,16,20],organ:[6,7,10,16],orient:[1,5,18],origin:[0,3,5,6,8,11,12,13,16],orthogn:5,orthogon:[0,5,6,8,11,13,16],orthonorm:5,os:[0,1,4,5,6,7,8,9],oscar:1,oscil:[3,13],oslo:[0,15,17,19],osx:[0,15],other:[0,1,2,3,5,6,7,8,10,13,14,15,17,18,20],otherwis:[0,1,4,7,13,16],ouput:[5,7,12],our:[1,2,3,6,7,8,9,10,12,14,15,16,17,18],ourmodel:0,ourselv:[0,5,6,8,11,13],out:[0,1,2,4,5,6,7,8,9,10,11,12,13,15,16,18],out_fil:9,outcom:[0,7,9,10,12,18],outdoor:9,outer:[6,12],outfil:4,outfilenam:[],outgrad:2,outlier:[0,8],outlin:[6,10,11],outlook:9,outperform:10,output:[0,1,3,4,5,6,7,8,9,10,12,13,16,18],output_bia:1,output_bias_gradi:1,output_shap:4,output_weight:1,output_weights_gradi:1,outputlayer1:12,outputlayer2:12,outsid:4,over1:13,over:[0,1,3,4,5,6,9,10,12,13,16],overal:[1,10],overcast:9,overcom:[12,13],overdetermin:0,overfit:[0,1,3,6,9,10,13],overflow:[1,5],overhead:12,overlap:[3,7,8,9],overlin:[0,5,6,9,10,11,14,16],overst:0,overtrain:4,overview:[3,20],own:[4,5,6,8,12,13,15,16],owner:0,ownridgebeta:6,oxid:0,oyvinssc:19,p0:2,p1:2,p:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18],p_:[2,4,8,9],p_hidden:2,p_i:[5,18],p_j:18,p_n:18,p_output:2,p_x:18,pack:0,packag:[0,1,2,3,4,5,6,7,8,11,13,14,15,18],pad:[3,4],page:[0,15],pai:[0,1,9,13],pair:[0,2,3,9,15,18],panda:[0,4,5,6,7,9,11,15],paper:1,paradigm:0,parallel:[10,16],param:[2,4],paramat:2,paramet:[0,1,2,3,4,5,6,7,8,9,10,12,13,18],parameter:[0,6,10],parametr:[0,6],paramt:[3,5],parent:2,parent_argnum:[],park:[],parser:0,part:[0,1,3,5,6,10,16,17,18,20],partial:[0,1,5,6,7,8,10,11,12,13,18],particip:[15,17],particl:[0,4,13,18],particular:[0,1,2,3,5,6,9,10,11,12,13,18,20],particularli:[5,6,8,11,13,18],partit:[1,4,9],partli:6,pass:[2,3,12,14],past:[10,18],patch:[6,18],path:[0,4,6,7,9,15],patient:7,patter:4,pattern:[0,3,4,12,17,20],pauli:0,pc:[11,15],pca:[0,7,15,17],pcolor:6,pcolormesh:6,pd:[0,4,5,6,7,9,11],pde:2,pdf:[0,3,4,5,6,9,20],pedagog:0,penal:6,penalti:[6,13],penros:[5,6],pentagon:13,peopl:[0,1,9,13,15],per:[0,1,6,17],percentag:[0,10,11],perceptron:[0,1,7],perfect:[0,1],perfectli:[4,6],perform:[0,2,3,4,5,6,8,10,11,12,13,14,15,16,18],performac:4,perhap:[0,5,13],perimet:1,period:[1,4,18],permut:11,persist:13,person:[5,6,7,17,19],perspect:20,pertin:12,petal:[8,9],peter:20,petersen:[],phantom:18,phase:[6,12],phenomena:18,phi:8,phi_k:8,philip:[],philosophi:13,phone:19,photo:4,phrase:0,physic:[0,1,4,7,12,13,18,19,20],pi:[2,3,5,6,7,9,12,13,18],pick:[1,9,10,11,13,14],pickl:1,pictur:0,pie:15,piec:[11,14],pillow:[0,15],pinv:[5,6,13],pip3:[0,1],pip:[0,1,15],pipelin:[0,6,8,10],pit:4,pitfal:6,pitt:12,pixel:[1,3,4],pixel_height:[1,3],pixel_width:[1,3],place:[0,4,6,8,13,16],plai:[0,3,4,5,6,8,11,15],plain:[8,10,12,13,14],plan:[6,9,19,20],plane:[8,9],plateau:5,platform:15,plausibl:12,pleas:[3,4,6,7,11,13,14],plenti:1,plethora:[3,12],plot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],plot_confusion_matrix:[7,10],plot_count:6,plot_cumulative_gain:[7,10],plot_data:1,plot_dataset:8,plot_decision_boundari:[9,10],plot_import:10,plot_max:4,plot_min:4,plot_model:4,plot_numb:4,plot_predict:8,plot_regression_predict:9,plot_result:4,plot_roc:[7,10],plot_surfac:[2,6,13],plot_train:9,plot_tre:[9,10],plt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],plu:[0,3,5,7],pm:8,pmatrix:2,pn:3,png:[0,4,6,7,9],point:[0,1,2,3,5,6,7,8,9,10,11,13,14,16,18,19],point_1:4,point_2:4,poisson:[15,18],poli:[6,8],poly100_kernel_svm_clf:8,poly3:0,poly3_plot:0,poly3dcollect:13,poly_featur:[8,9],poly_features10:9,poly_fit10:9,poly_fit:9,poly_kernel_svm_clf:8,polydegre:[0,5,6,10],polygon:13,polym:12,polynomi:[0,5,6,7,8,9,10,11],polynomial_featur:6,polynomial_svm_clf:8,polynomialfeatur:[0,6,8,9],polytrop:[0,6],pool:3,pool_siz:3,poor:[1,13],poorli:0,pop:2,popul:[0,5],popular:[0,1,3,6,7,8,9,11,12,15,16,18],popularli:0,portabl:10,portion:[11,13],pose:[0,4,5,6,11,18],posit:[0,1,2,3,5,7,8,10,11,13,14,16,18],possibl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18,19],posterior:5,postpon:0,postul:5,potenti:[0,3,5,6,12,13],potr:5,potrf:5,pott:12,power:[0,1,5,6,8,9,12,13],pp:[5,6],practic:[0,5,6,7,8,17,18],practition:[0,1,3],preced:[1,11,12,18],preceed:4,preceq:8,precis:[0,2,5,11,13,16,18],pred:[6,13],predicit:0,predict:[0,1,5,6,7,8,9,10,15,20],predict_prob:1,predict_proba:[7,10],predictor:[0,5,6,7,9,10,11],prefer:[0,1,6,8,9,11,15],prepar:[0,6,16],preprocess:[0,4,6,7,8,9,10,11],prerequisit:0,presenc:13,present:[0,5,6,9,12,13,16,17,18],preserv:[3,11,16],press:[13,20],pretrain:[1,4],pretti:[0,4,8,9,15],prev_centroid:14,prevent:[13,18],previou:[0,1,2,3,4,5,6,8,10,11,12,13,16,18],previous:[2,3,9,10,18],price:[0,4,9,13],primal:8,primari:[0,7],prime:18,primit:2,princip:[0,5,7,15,17],principl:[0,6,7,8,14],print:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18],print_funct:[8,9],printout:0,prior:[0,5,6],privat:0,prob:[1,18],probabilist:[0,20],probabl:[0,1,3,4,6,7,10,13,15,17],problem:[0,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18],proce:[0,5,6,8,9,10,11,13,16],procedur:[2,4,5,6,8,10,11,13],proceed:16,process:[0,2,4,6,9,10,12,13,15,16,18,20],prod:20,prod_:[1,5,7],produc:[0,3,4,5,6,9,10,11,12,13,15,16,18],product:[0,1,3,5,6,7,8,12,13,15,16],profess:0,program:[0,1,4,5,6,8,12,14,15,16,17,18],programm:16,progress:[1,4,14],prohibit:6,project1:6,project:[0,1,2,3,5,11,13,15,17,19],project_root_dir:[0,6,7,9],promin:12,promis:8,prone:9,pronounc:[13,15],proof:[0,11,12,13],propag:[2,3,13,17],proper:[0,2,6],properli:[1,6,8,10,13],properti:[0,1,3,12,13,16],proport:[0,1,5,9,11,13,18],propos:[1,4,6,10],propto:[5,13],protect:[3,4],proton:0,prove:[3,13],provid:[0,1,3,4,5,6,8,9,10,12,13,15,16,18,20],proxi:[1,13],prune:9,pseudo:[16,18],pseudoinv:5,pseudoinvers:[5,6],pseudorandom:[6,18],psycholog:0,pt:13,ptratio:[],punish:[0,1],pure:[3,9,18],purest:9,puriti:9,purpos:[0,3,10,12,14],put:1,putarow:5,putboundslic:5,putclist:5,putobjsens:5,putqobj:5,py:[0,1,2,3,4,5,6,7,8,11,13,14],pydata:15,pydot:9,pylab:[0,7],pylint:[3,4],pypi:15,pyplot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],pythagora:5,python2:0,python3:[0,1,2,3,4,6,7,8,11,13,14,15],python:[1,2,3,4,5,6,8,11,12,13,14,17,18],pytorch:[0,15],pywrap_tf:[3,4],q:[5,6,8,11,18],qp:8,qquad:[2,11,13,16],qr:[5,6,16],quad:[1,13,16],quadrat:[0,5,8,9,13],qualit:[4,9,18],qualiti:[0,9,15],quantifi:1,quantil:10,quantit:[0,6,9],quantiti:[0,2,5,6,7,9,10,11,12,14,16,18],quantum:[4,12],quartil:0,quench:5,queri:9,question:[0,5,6,9,11,12,13],qugan:4,quick:[4,18],quick_execut:[3,4],quickli:[1,3,9,11,13],quit:[1,5,6,9,10,12],quot:4,r2:[0,5,6],r2_score:0,r2score:0,r:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],r_1:9,r_2:9,r_j:9,r_m:9,rad:0,radial:[0,8,12],radioact:18,radiu:[0,1],rag:2,rain:9,rais:[0,2,13],ramp:1,ran0:18,ran1:18,ran2:18,ran3:18,rand:[0,4,5,6,9,10,13,16],rand_max:[],randint:[6,9,13],randn:[0,1,2,5,6,9,11,13],random:[0,1,2,3,4,5,6,8,9,13,14,15,16,17],random_devic:[],random_forest_model:10,random_index:13,random_indic:[1,3],random_st:[0,7,8,9,10,11],randomforestclassifi:10,randomli:[1,6,9,13,14],randomnumbergener:[],rang:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,16,18],rangl:[0,6,11,18],rangle_x:18,rank:5,rankdir:4,raphson:[1,8,13],rapidli:0,rare:[1,13],rate:[0,1,2,3,4,8,9,10,12,13],rather:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,18],ratio:[4,7,9,10,11],rational:0,ravel:[5,6,7,8,9,10,11,13,16],raw:3,raw_df:[],rbf:[8,11,12],rbf_kernel_svm_clf:8,rbf_pca:11,rc:[0,18],rcond:0,rcparam:[0,1,3,7,8,9,10,18],rd:[],re:[2,4,13],reach:[1,4,5,6,7,9,10,11,12,13,14],read:[0,2,3,4,5,6,7,8,11,12,16,17,18,20],read_csv:[0,6,7,9],read_fwf:0,reader:[0,6,16,18],readi:[0,1,5,6,8,10,11,12,16],readili:1,real:[0,1,2,4,7,10,11,12,13,16],real_loss:4,real_output:4,realist:8,realiti:18,realiz:[1,12],realli:[0,1],rearrang:13,reason:[0,1,3,4,10,13,20],reassign:1,rebuild:[],recal:[5,6,9,10,11,12,16,18],recalcul:[],recast:3,receiv:[1,3,10,12,18],recent:[0,2,3,4,5,6,7,8,9,10,13],recept:[3,12],receptive_field:3,recip:[0,6,7,16],reciproc:5,recogn:[0,4,5,10],recognit:[0,1,3,12,17,20],recommend:[0,2,3,4,5,6,8,13,15,16,17,20],reconsid:9,reconstruct:11,record:[10,17],recreat:[],rectangl:[9,13],rectangular:5,rectifi:[1,3,12],recur:[0,15],recurr:[0,1,15,17],recurs:[9,15,16],recycl:[],red:[0,3,4,6,8,9],redefin:[0,10],reduc:[1,3,5,6,9,10,11,13],reduct:[0,10,11,15,18],refer:[0,1,2,3,5,6,7,11,12,13,14,16,20],referenc:2,refin:12,refit:6,reflect:[0,1,4,5,18],refresh:[15,17],reg:[10,11],regard:[1,9,13],regardless:12,region:[3,4,6,9,12],regist:[6,18],reglasso:5,regr_1:[0,9],regr_2:[0,9],regr_3:[0,9],regress:[1,8,11,12,15,16,17],regressor:[0,7,10],regridg:[5,6],regular:[0,3,4,5,6,7,9,13],regularis:6,reilli:[0,20],reinforc:[0,8,15],reiter:1,rel:[0,4,6,7,9,12,13,18],relat:[0,1,3,4,5,11,13,14,16,18],relationship:[0,4,9],relativeerror:0,releas:[1,3,4,6,13,15],relev:[0,1,5,7,11,15,17,18],reli:[0,6,8],reliabl:[7,18],relu:[3,4],remain:[1,2,4,6,12,16,18],remaind:18,reman:2,remark:1,rememb:[0,8,13,16],remind:[0,5,11,13,16,18],remov:[0,4,5,6],render:0,reorder:[5,7],reorgan:0,repeat:[0,1,3,4,5,6,9,10,11,13,14,16,18],repeated:0,repeatedli:[6,10,13],repet:3,repetit:[6,17],rephras:13,replac:[0,1,3,4,5,6,10,12,13,14],replica:6,repositori:[0,4],repres:[0,1,2,3,4,5,6,7,8,9,10,12,13,18],represent:[0,1,3,6,18],representd:3,reproduc:[0,5,6,9,12,15,18],repuls:0,request:[0,13],requir:[0,1,3,4,5,6,8,9,11,12,13,16],res1:2,res2:2,res3:2,res_analyt:2,res_analytical1:2,res_analytical2:2,res_analytical3:2,resaml:6,resampl:[0,7,10,15,17],rescal:[0,11,12],rescu:5,reseach:6,research:[0,4,15,20],resembl:[6,18],reserv:[1,5,6,18],reset:[],reshap:[0,1,2,3,4,6,8,9,10,16],residenti:0,residu:[0,5,13],resiz:5,respect:[0,1,2,3,5,6,7,8,10,11,12,13,14,18],respond:12,respons:[0,7,9,12],rest:[0,5],restat:[0,12],restor:4,restored_discrimin:4,restored_gener:4,restrict:[0,3,9,12],result:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],result_typ:[],retail:0,retain:[5,6],return_data:14,return_kwarg:[],return_sequ:4,return_x_i:9,reus:[1,3,6],reveal:[0,12],revers:[1,16],review:[15,16,17],revisit:14,reward:[0,4],rewrit:[0,3,5,6,7,8,10,11,12,13,16,18],rewritten:[2,6,8,10,18],rewrot:13,rf:10,rgb:3,rgoj5yh7evk:15,rh:[5,6],rho:[0,10],rho_1:10,rho_2:10,rho_m:10,rich:0,ride:9,rideclass:9,ridedata:9,ridg:[0,7,11,13,15,17],ridge_sk:6,ridgebeta:5,right:[0,1,2,3,5,6,7,8,9,10,12,13,14,16,18],right_sid:2,rightarrow:[0,1,5,6,8,11,12,13,18],rigor:0,ring:6,rise:0,risk:[0,13],rival:4,river:0,rm:[0,18],rmse:0,rmsporp:13,rmsprop:[1,3,4,13],rnd_clf:10,rng:18,rnn1:4,rnn2:4,rnn:[4,12,17],rnn_2layer:4,rnn_input:4,rnn_output:4,rnn_train:4,rntrick1:18,rntrick2:18,rntrick3:18,rntrick4:18,ro:[0,13],robert:20,robust:0,robustscal:0,roc:10,role:[0,2,5,6,8,15],roll:6,room:[0,19],root:[0,5,9,13,18],rotat:[1,8,9,10],rotation_matrix:9,roughli:[1,3],round:[0,7,9,13],routin:[13,16],row:[0,1,2,5,6,7,9,11,16],rr:5,rrr:5,rthe:5,rug:13,rule:[0,1,5,6,13],run:[0,1,2,3,4,5,6,8,9,11,13,15],runtim:[1,6,14],runtimewarn:[1,6],rust:[0,15,16],rustad:19,rvert:1,rvert_2:1,s:[0,1,2,3,4,5,6,7,9,11,12,13,15,16,17,18,19],s_1:6,s_:[3,6],s_i:[6,7],s_j:6,s_k:6,saddl:13,safe:[],sai:[0,1,2,3,4,5,6,7,8,9,10,11,12,16,18],said:[6,9,13],sake:[0,5,7,11],sale:0,same:[0,1,2,3,4,5,6,8,9,11,12,13,14,16,18],samm:10,sampl:[0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,18],sample_vari:14,sample_weight:[3,4],sampleexptvari:18,sastri:11,satisfactori:0,satisfi:[1,2,3,6,8,13,16,18],satur:[1,6],save:[0,4,6,7,9],save_fig:[0,6,7,9,10],savefig:[0,4,6,7,9,18],savetxt:4,saw:5,scalabl:10,scalar:[2,5,6,10,13],scale:[0,1,3,5,6,7,8,9,10,11,12,13,15,16,19],scale_mean:4,scale_std:4,scalei:[],scaler:[0,7,8,9,10,11],scalex:[],scan:[5,7],scari:5,scatter:[0,1,6,7,8,9,14],scenario:[6,13],schedul:13,scheme:[1,13],schrage:18,scienc:[0,1,10,12,13,15,17,18,20],scientif:[0,15],scientist:0,scikit:[3,5,6,7,8,9,10,13,15,16,17,20],scikitplot:[7,10],scipi:[0,3,5,6,13,15,16],scl:6,score:[0,1,3,6,7,9,10,11,19],scores_kfold:6,scratch:1,sdg:13,seaborn:[0,1,3,6,7],seamless:[0,15],search:[0,1,3,5,9,13],sec:6,second:[0,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18],secondeigvector:11,secondli:12,section:[4,11,16,17,18],sector:0,see:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18],seed:[0,1,2,3,4,5,6,8,9,11,13,14,18],seed_imag:4,seek:[1,2,8],seem:[1,3,4],seemingli:0,seen:[0,1,3,5,10,12,18],segment:13,seismic:6,seldomli:0,select:[1,5,6,8,9,10,11,17,18,20],self:[1,3,4,5,20],sell:4,semest:[7,17],semi:[8,13],semilogx:6,send:[5,12,13,19],senior:17,sens:[0,4,6,8],sensibl:3,sensit:[0,5,6,9,13],sent:2,sentenc:[4,12],sep:[],separ:[0,1,2,4,6,8,9,12,14,15,18],sequenc:[2,3,4,7,9,10,12,13,15,16,18],sequenti:[1,3,4,10,12,18],seri:[0,1,2,3,4,5,6,10,11,12,13,16,17],serif:[0,7,18],serv:[0,1,2,3,5,7,13,20],session:[1,17],set:[1,4,5,6,7,8,10,11,13,14,15,16,18],set_major_formatt:6,set_major_loc:6,set_stream:5,set_tick:[1,8],set_ticklabel:1,set_titl:[0,1,2,3,7,12,14],set_xlabel:[0,1,2,3,7,12],set_xlim:[7,12],set_xticklabel:1,set_ylabel:[0,1,2,3,7],set_ylim:[7,12],set_ytick:7,set_yticklabel:[1,6],set_zlim:6,seth:4,setiosflag:[],setminu:6,setosa:[8,9],setosa_or_versicolor:8,setp:6,setprecis:[],setse:5,setup:[1,4,5,6,8,15],setw:[],sever:[0,3,5,6,7,8,9,11,12,13,15,16,17,18],sgd:[1,3],sgd_clf:8,sgdclassifi:8,sgdreg:13,sgdregressor:13,sgn:5,sh:[],shallow:13,shape:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16],share:[1,3],she:7,shift:[1,6,12,18],ship:3,shortcom:13,shorten:4,shorter:18,shortli:16,should:[0,2,3,5,6,8,9,11,12,13,16,18],should_sync:[3,4],show:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],show_shap:4,shown:[0,4,5,7,8,11,12,13,16],showpoint:[],shrink:[3,5,6,8,11],shrinkag:[5,6],shrunk:11,shuffl:[0,1,3,4,6,13],side:[0,2,5,8,12,13,16],sigh:15,sigma0:18,sigma1:18,sigma2:18,sigma:[0,1,5,6,7,10,11,12,13,16,18],sigma_0:5,sigma_1:5,sigma_2:5,sigma_:[5,16],sigma_fn:[7,12],sigma_i:[0,5],sigma_j:5,sigma_m:[6,18],sigma_n:[11,18],sigma_t:13,sigma_x:18,sigmoid:[1,2,4,7,8,10,12,13],sigmundson:[6,19],sign:[1,2,7,8,10,18],signal:[1,3,10,12],signatur:[3,4],signifi:4,signific:1,significantli:[1,13,18],sigurd:19,sim:[4,5,6,13,18],similar:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16],similarli:[0,1,3,5,8,10,18],simpl:[1,2,3,5,6,7,8,10,11,12,14,15,16,18],simple_rnn:4,simplepredict:10,simpler:[0,1,5,6,13,15],simplernn:4,simplest:[0,1,3,4,9,10,12,14],simpletre:10,simpli:[0,1,2,4,5,6,8,9,10,11,12,15,16,18],simplic:[2,5,6,7,8,9,10,11,12,14],simplicti:5,simplifi:[0,6,9,15],simplist:[3,6,18],simul:6,simultan:6,sin:[0,1,2,3,4,9,12,13,16],sinc:[0,1,2,3,5,6,7,8,9,10,11,13,16,18,20],sine:[3,12],singl:[0,1,2,3,5,6,7,8,9,12,13,16,18],singular:[0,6,13,16,17],sinusoid:3,site:[0,1,2,3,4,6,7,8,11,13,14,17],situat:[0,4,5,7,13,18],six:[3,18],size:[0,1,2,3,4,5,6,8,9,10,11,13,16,18],sketch:10,ski:9,skill:0,skip:[3,4,11],skiprow:[],skl:[0,6],sklearn:[0,1,3,5,6,7,8,9,10,11,13,14],skplt:[7,10],sl:6,slack:8,slice:[2,16],slide:[0,3,18],slight:[6,13],slightli:[1,2,3,5,6,7,10,18],slope:[8,11,12],slow:[0,2,8,13],slower:[5,16],slowest:16,slowli:12,slp:1,small:[0,1,2,3,5,6,8,9,10,11,12,13,15,16,18],smaller:[0,1,2,5,6,8,9,11,13,18],smallest:[0,4,14],smallest_row_index:14,smooth:[0,3,6,13],sn:[0,1,3,6,7],sne:11,so:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18],soar:6,social:0,soft:[1,7,10,12],soften:8,softmax:[3,7],softwar:[0,8,15,16,17],sol:8,sole:[0,6],solid:[0,7],solitem:5,soltyp:5,solut:[0,1,2,3,5,6,8,10,11,13,16,18],solutionsummari:5,soluton:2,solv:[0,1,3,5,6,8,10,11,12,13,16,17],solve_expdec:2,solve_ode_deep_neural_network:2,solve_ode_neural_network:2,solve_pde_deep_neural_network:2,solveod:2,solveode_popul:2,solver:[2,5,7,8,9,10,11,16],some:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,17,18],some_model:6,somehow:4,someth:[0,1,3,4,7,9,11,18],sometim:[0,1,11,12,13,14],soon:16,sophist:0,sopt:13,sort:[5,6,9,11,18],sound:[3,5],sourc:[0,1,3,6,15,16,18],space:[0,1,4,5,8,9,11,12,13,14,18],span:[0,3,5,9,11,16],spare:1,spars:[3,5,6,16],sparse_mtx:16,sparsecategoricalcrossentropi:3,sparsiti:10,spatial:[1,2,3,12],spdiag:5,speak:18,special:[6,7,10,12,13,16,18],specif:[0,1,2,3,4,5,6,7,8,9,11,12,15,16,18],specifi:[0,3,5,6,7,9,11,13,14,18],specifici:[0,10],spectacular:3,spectral:1,speech:[0,1,3,4,12],speed:[1,2,4,13],spend:18,sphere:0,spin:6,spite:0,spline:8,split:[1,3,4,5,6,8,9,10,11,14,18],splite:0,splitter:[1,10],spmatrix:5,spontan:18,spot:3,spread:[0,11,18],springer:20,spuriou:13,sqquar:5,sqrsignal:3,sqrt:[0,3,4,5,6,8,10,11,13,18],squar:[1,2,3,4,7,8,9,11,13,14,15,16,17,18],squarederror:10,squaredeuclidean:14,squash:12,squeez:2,srand:[],srtm:6,srtm_data_norway_1:6,sse4:[],stabil:5,stabl:[0,4,5,6,7,9,11,15],stack:[2,3,4],stacklevel:0,stage:[5,13],stai:[0,2,4,5,11],stand:[0,5,9,12],standard:[0,1,4,5,6,7,8,10,12,16,18],standard_basi:2,standardscal:[0,6,7,8,9,10,11],stanford:13,start:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,16,17,18],start_box:[2,13],start_nod:[2,13],start_tim:14,startpoint:[],stat:6,state:[1,2,4,5,6,7,8,10,11,12,13,15,18],statement:[0,7,16],statist:[0,1,3,4,7,9,10,11,12,13,14,16,17,20],statu:[0,7,11],stavang:6,std:[0,4,6],stdev:[],stdout:5,steep:13,step:[0,1,2,3,4,6,7,9,10,11,12,13,14,16],step_fn:[7,12],step_length:13,steps_list:9,steps_per_epoch:[3,4],stereo:3,stian:19,still:[2,3,5,6,11,13,18],stimuli:12,stk2100:20,stk3155:17,stk4021:20,stk4051:20,stk4155:17,stk5000:20,stk:20,stochast:[0,1,5,6,8,11,12,17],stock:4,stoke:12,stone:[0,7],stop:[1,4,7,9,11,13,14],storag:5,store:[0,1,2,3,6,11,13,18],storehaug:19,str:[1,3,4],straight:[0,6,8,13],straightforward:[0,2,3,5,6,8,9,10,13,16],strategi:[0,1,9],stratifi:6,streamtyp:5,strength:[0,5,14],stretch:11,strict:[8,13],strictli:[8,13],stride:[4,16],strike:6,string:1,stroke:7,strong:[3,6,9,10,12,16,18],strongli:[0,8,15,16],stronli:0,structur:[0,1,2,3,6,9,10,12,15],stuck:[1,13],student:[0,17,19,20],studi:[0,3,4,5,6,7,8,11,12,13,15,20],studier:[17,20],style:[0,7,9,16],sub:[9,12],subarg:[2,13],subdivid:[0,16],subfield:0,subject:[5,6,8,18],subplot:[0,1,3,4,6,7,8,9,10,13,14],subplots_adjust:[8,18],subprogram:16,subract:0,subroutin:0,subscript:1,subsequ:[1,4,5,6,12,16,18],subset:[1,6,9,12,13,15],subspac:[0,8,11],substanti:[9,10],substep:11,substitut:[3,6,12,16],subsubset:9,subtask:6,subtl:1,subtract:[0,4,5,6,11,13,16,18],subtre:9,subval:[2,13],succeed:[0,4],success:[3,7,9,13,18],successfulli:[4,9],sucess:[],sudo:[0,15],suffer:[0,1,2,5,10],suffici:[1,6,8,11,13],suggest:[1,13,20],suit:[8,12],suitabl:[0,18],sum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],sum_:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18],sum_i:[2,5,6,8,13],sum_j:6,sum_k:[6,8,12,16],sum_m:3,sum_n:3,sum_nx_:3,summar:[5,6,9],summari:[1,3,4,10,17],summat:3,sunni:9,superfici:3,superscript:[1,12],supervis:[0,5,6,7,9,12,15],supplement:7,support:[0,1,9,10,11,13,15,17],suppos:[0,5,6,7,8,10,11,12,13,16],suppress:[5,13],sure:[1,4,6],surf:6,surfac:[0,6],surpass:6,surpris:0,surround:[3,15],survei:[0,5,6],svc:[8,9,10],svd:[0,6,11,17],svdinv:5,svm:[8,9,10,11],svm_clf:[8,10],swap:2,swapax:2,swath:5,sy:[5,13],symbol:[1,5,11,13,15,18],symmeteri:1,symmetr:[0,5,8,11,12,13,16],symmetri:6,sympi:[0,15],synonim:18,syntax:[1,13],syntaxerror:1,syrk:5,system:[0,1,3,4,5,6,7,9,10,12,13,15,16,20],systemat:[4,6],t0:[3,6,13],t1:[2,13],t2:2,t3:2,t:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19],t_0:[2,9,13],t_1:13,t_:2,t_b:10,t_i:[1,2,12],t_j:[5,12],t_k:9,tabl:[9,18,19],tabul:0,tackl:4,tag:[2,3,4,5,6,7,12,13,14,16,18],taht:0,tail:18,tailor:[2,8,11],taiwan:0,take:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18],taken:[0,1,3,6,10,13,16],tan:3,tangent:[1,4,12,13],tanh:[1,4,7,8,12,13],tape:[3,4],target:[0,1,3,4,5,6,7,8,9,10,11,12,13],target_nam:9,task:[0,1,3,5,6,9,11,12,14],tau:[3,5,18],tax:0,taylor:[2,13],taylornr:13,tc:8,team:1,teaser:0,technic:[0,5,6,13],techniqu:[0,1,8,10,13,15,17,18,20],technolog:[0,1],tek5040:20,tell:[0,4,6,10,11,13,18],temp1:1,temp2:1,temp:1,temperatur:[0,9],temporarili:1,ten:3,tend:[3,5,6,8,9,10,12,13,14],tendenc:0,tension:6,tensor:[3,4],tensorflow:[0,2,4,8,14,15,16,17,20],term1:[5,6,11],term2:[5,6,11],term3:[5,6,11],term4:[5,6,11],term:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18],termin:[0,4,5,9,10,13],terrain1:6,terrain:6,test:[3,4,5,6,7,8,9,10,13,14,16,18],test_acc:3,test_accuraci:[1,3],test_error:6,test_imag:[3,4],test_ind:6,test_input:4,test_label:[3,4],test_loss:3,test_pr:1,test_predict:1,test_rnn:4,test_scor:[7,10],test_siz:[0,1,3,5,6,10],test_split:9,testerror:[0,6],testi:4,testpredict:4,testx:4,text:[0,1,2,4,5,8,9,11,13,16,17,18,20],textual:9,textur:1,tf:[1,3,4,13,14],tfe_py_execut:[3,4],th:[0,1,2,5,6,7,9,12,13,14,16,18],than:[0,1,2,3,4,5,6,7,9,10,11,12,13,15,18],thank:[4,6],theano:[1,15],thei:[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18],them:[0,1,3,4,6,8,9,10,11,12,13,16],theme:0,themselv:[0,18],thenc:6,theorem:[2,6,7],theoret:[0,4,10],theori:[0,1,3,8,9,12,13,15,17,20],thereaft:[0,5,6,11,12,16],therebi:[0,5,7,11],therefor:[0,1,2,3,4,6,7,8,11,13,18],therein:11,thereof:[0,6,13],theta:[1,4,13,18],theta_:[1,13],theta_i:1,theta_k:[],theta_linreg:13,theta_t:13,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],thing:[0,1,2,4,5,7,9,18],think:[0,1,3,4,6,9,12,13,14,18],third:[0,3,6,13],thirti:7,those:[3,5,6,8,9,10,11,16,17],though:[1,2,3,4,13,16,18],thought:[6,14,18],thousand:[0,1],thread:[3,4],three:[0,1,3,5,6,8,9,12,16,17,18,19],threshold:[1,3,9,10,11,12,13],through:[0,1,2,3,4,5,6,8,11,12,13,14,15,16,18],throughout:[0,4,5,14,15,16,18],thu:[0,1,2,5,6,7,8,10,11,12,13,19],thumb:[0,6],thursdai:17,tibshirani:[6,17,20],tick_param:6,ticker:[6,13,18],tif:6,tight_layout:[1,7],tightli:11,tild:[0,5,6,11,18],till:[0,4,7,8,9,10,12,16],time:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18],timefunct:[],timeit:4,timer:4,tini:1,tip:3,titl:[0,1,2,3,4,6,7,8,9,10,13,18],tmp:13,tmp_log:[3,4],tn:[2,3],to_categor:[1,3,4],to_categorical_numpi:1,to_numer:[0,6],to_str:[],todai:3,togeth:[0,3,6,8,11],toi:[13,14],told:13,toler:[2,6,14],tolist:4,tomographi:12,too:[0,2,4,5,6,9,11,13,18,20],took:8,tool:[0,1,3,6,13,15],toolbox:8,top:[0,3,5,6,9,10,15],top_node_typ:2,top_trac:2,topic:[0,5,6,7,8,15,17,20],topolog:[1,3,12],toposort:2,torkjellsdatt:19,toss:[10,18],total:[0,1,2,3,4,6,7,8,10,11,12,13,14,16,18,19],total_loss:4,totalclustervari:14,totalscatt:14,totalvari:[],toward:[1,2,7,12,13],town:0,tp:4,tpng:9,tqdm:6,tr:0,trace:[2,13],trace_stack:[2,13],traceback:[0,2,3,4,5,6,7,8,9,10,13],traceback_util:[3,4],tracer:[2,13],track:[3,13,14,16],tract:0,tractabl:0,trade:[5,9],tradeoff:[0,5,17],tradit:[0,1,4,6],train:[2,3,5,6,8,9,10,11,12,13],train_accuraci:[0,1,3],train_dataset:4,train_end:[0,1],train_error:6,train_funct:[3,4],train_imag:[3,4],train_ind:6,train_label:[3,4],train_pr:1,train_siz:[0,1,3],train_step:4,train_test_split:[0,1,3,5,6,7,9,10,11],train_test_split_numpi:[0,1],trainabl:4,trainable_vari:4,trained_model:6,trainerror:0,traini:4,training_checkpoint:4,training_dataset:4,training_gradi:13,training_gradient_fun:13,training_loss:13,trainingerror:6,trainpredict:4,trainscor:4,trainx:4,trait:0,trajectori:4,tran:5,transfer:9,transform:[0,5,6,7,8,9,10,11,12,13,15,16],transit:[6,12],translat:[1,4,6,10],transpos:[1,5,11,16],travers:[0,5],treat:[0,1,3,6,12,13,18],tree:[0,1,6,15,17],tree_clf:[9,10],tree_clf_:9,tree_clf_sr:9,tree_reg1:9,tree_reg2:9,tree_reg:9,trend:18,trevor:20,tri:[2,3,4,9,13],triain:0,trial:[0,2,4,6,13,18],triangl:13,triangular:16,trick:[3,4,8,11,13,18],trickier:18,tridiagon:16,trillion:15,trivial:[0,1,5,11,18],troubl:[0,8,12],truck:3,true_beta:6,true_divid:1,true_fun:6,tucker:8,tumor:[7,9],tumour:7,tunabl:1,tune:[4,9,13,16],tup:[],tupl:[2,13],turn:[0,1,5,6,7,8,9,10,11,12,13,16,18],tutori:[1,4],tv:2,tveito:2,tweak:[1,4,10,18],twice:13,twist:11,twister:[],two:[0,1,2,4,5,6,7,9,10,11,12,13,16,17,18,20],tx:13,tx_1:13,txt:4,ty:13,type:[0,1,3,6,8,10,13,16,18],typeerror:[2,13],typic:[0,1,2,3,4,5,7,9,10,12,13,18],u:[0,2,5,6,10,11,12,16],u_:16,u_i:12,u_m:10,ua:0,ubuntu:[0,15],uci:0,uio:[17,19,20],un:14,unari:16,unary_f:[2,13],unary_oper:[2,13],unary_to_nari:2,unbalanc:[6,9],unbias:[0,5,6],uncent:6,uncertainti:[0,5],uncertitud:18,unchang:[1,3],uncorrel:[10,18],undefin:5,under:[0,1,5,6,10,13,15],underdetermin:0,underfit:[1,6],underflowproblem:5,undergo:5,undergradu:17,underli:[0,1,9,13,18],underset:[4,14],understand:[0,1,3,5,6,10,13,14,15],understood:[8,13],undesir:8,undetermin:[5,8],undo:4,unexpect:6,unexpected:18,unfair:6,unfortun:[1,8,9,10],unicode_liter:[8,9],uniform:[0,1,5,6,11,13,18],uniform_real_distribut:[],uniformli:[13,18],unifrompdf:18,unimport:13,union:[5,6],uniqu:[0,2,6,13,14,16],unique_cluster_label:14,unit:[0,1,3,4,5,10,12,18],unitari:[5,6,16],unitarili:16,uniti:18,univari:18,univers:[0,1,2,13,15,17,19],unix:1,unknow:[0,16],unknown:[0,1,3,4,5,6,8,10,16],unknowwn:12,unlabel:1,unless:[0,3,6,11,13],unlik:[1,3,8,13],unnecessarili:9,unord:3,unravel:1,unrol:[3,11],unseen:[0,7,9],unstabl:1,unsupervis:[0,1,4,12,15,17],unsymmetr:16,until:[1,2,4,9,12,13,14],untouch:0,unusu:12,up:[1,3,4,5,6,8,10,11,13,14,15,16,17,18],updat:[1,2,10,12,13,14],upload:[15,20],upon:[1,6,11,16],upper:[0,8,9,16],uppercas:16,upsampl:4,upscal:4,us:[4,5,6,8,9,10,11,12,14,16,17,18,20],usag:[0,8,15],usd10000:0,usd:0,use_bia:4,use_multiprocess:[3,4],usecol:0,useless:1,user:[0,1,2,3,4,6,7,8,11,14,15,16],userwarn:[3,4,6,14],usetex:18,usg:6,usr:18,usual:[0,3,4,7,12,13,14],ut:5,util:[0,1,3,4,6,7,10,14],ux:16,v0:18,v1:18,v2:18,v:[2,4,5,6,11,13,15],v_0:11,va:1,val:13,val_accuraci:3,val_loss:4,vale:2,valid:[0,1,4,7,9,10,13,15,17,18],validation_batch_s:[3,4],validation_data:[3,4],validation_freq:[3,4],validation_split:[3,4],validation_step:[3,4],valu:[0,1,2,3,4,6,7,8,9,10,12,13,14,15,16,17],valuat:9,valueerror:[0,2],valy:4,van:0,vandenbergh:[8,13],vandermond:0,vanilla:[0,6,11,14],vanish:[1,4,13,18],var_x:18,varabl:8,varepsilon:[5,6],varepsilon_:[5,6],varepsilon_i:[5,6],vari:[0,1,3,5,6,10],variabl:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16],varianc:[0,1,5,7,9,10,11,13,14,15,16,17,18],variance_i:[5,11],variance_x:[5,11],variant:[0,1,6,8,12,13],variat:[3,4,11],varieti:[0,3,12,15],variou:[1,3,5,6,7,8,9,11,12,13,15,16,18],vartempvec:[],varvec:[],varydimens:4,vastli:3,vaue:1,vault:0,vdot:[2,13],vec:6,vector:[0,1,2,3,4,5,6,7,9,10,11,13,14,15,17],vector_mean:14,ventur:[0,8,15],verbos:[1,3,4],veri:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,20],verifi:[3,11,16],versatil:8,versicolor:[8,9],version:[0,3,4,10,13,14,15,16,18],versu:1,vert:[0,1,5,6,7,8,9,11,13],vert_1:[5,6],vert_2:[5,6,11],via:[0,5,6,7,8,9,10,11,12,15,16,17,18],vidal:11,video:[0,1,12,15,17],view:[1,3,5,6,12,13,17,18,20],violat:8,virginica:9,viridi:[0,1,2,3],virtual:1,viscos:13,viscou:13,visibledeprecationwarn:2,vision:[0,3],visual:[0,3,11,12,15],visualis:1,viz:[6,8,18],vjp:[2,13],vjp_0:[],vjp_0_fun:[],vjp_1:[],vjp_1_fun:[],vjp_argnum:[],vjpfun:2,vjpmaker:[],vjpnode:[2,13],vmax:[1,6],vmc:[],vmin:[1,6],voic:3,volum:[0,3],vote:10,voting_clf:10,votingclassifi:10,votingsimpl:10,vrtx:17,vs:[0,4,6],vspace:[2,13],vstack:[5,11,16,18],vt:5,w1:8,w2:[8,11],w3:8,w:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,18],w_1:[8,16],w_1x_1:8,w_1x_:8,w_2:[8,16],w_2x_2:8,w_2x_:8,w_3:16,w_4:16,w_:[1,12],w_hidden:2,w_i:[1,2,10],w_ix_i:12,w_j:16,w_m:16,w_output:2,w_px_:8,w_px_p:8,wa:[0,1,3,4,5,6,7,10,11,12,13,14,16],wai:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,18],walk:9,walker:18,wang:0,want:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,18],warn:[1,3,4,8,14],warrant:6,wast:3,watch:[3,4,15],wave:3,wavelet:8,we:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20],weak:[9,10,14],weather:[1,12],web:[15,17],webpag:17,websit:[6,16,17],wedg:[8,18],wednesdai:17,wee:11,week:[5,6,7],weekli:[15,20],weight:[0,1,2,3,6,7,9,10,12,13,18],weigth:2,welcom:[8,15],well:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,20],went:8,were:[0,1,3,4,5,6,7,8,10,11,12,14,18],wessel:0,westbi:19,westby:19,what:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],whatev:3,when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],whenev:[13,18],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19],wherea:[6,18],wherein:[1,12],whether:[0,3,5,7,9,18],which:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],whichev:[1,3],white:9,who:[0,17],whole:[1,3,4,5,9,11,13],whose:[0,6,10,18],whow:[5,11],why:[0,1,3,6,13],wide:[0,1,3,6,7,12,15,16],widehat:6,width:[0,3,8,9],wieringen:0,win:10,wind:9,wing:19,winther:2,wiothout:6,wiscons:7,wisconsin:10,wisdom:6,wise:[0,1,5,12,13],wish:[0,2,5,7,8,11,13,14,16],with_std:0,wither:6,within:[0,2,3,4,7,9,12,13,14,18,20],withinclust:14,without:[0,1,5,6,8,9,11,12,13],won:0,wonder:8,word:[0,1,3,4,5,6,14,18],work:[0,1,4,6,7,8,9,13,15,17,18],worker:[3,4],workshop:17,world:[0,8],worldwid:0,wors:[0,1,3,4,6],worst:[],worth:9,would:[0,1,3,5,6,7,8,9,10,11,12,13,16,18],wrap:[2,6,16,17],wrap_util:[2,13],wrapper:0,write:[0,1,2,3,5,6,7,8,12,13,16],written:[0,2,3,5,11,12,13,15,16,18],wrong:[1,8],wrongli:10,wrote:[5,11],wrt:[2,10,13],wth:10,www:[15,16,17,20],wx_1:8,x0:8,x1:[4,8,9,10,13],x1_exampl:8,x1d:8,x2:[8,9,10,13],x2d:[8,11],x2d_train:11,x2dsl:11,x3:8,x:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],x_0:[0,5,11,16],x_1:[0,2,5,6,7,8,9,10,11,13,16,18],x_2:[0,2,5,6,7,8,9,10,11,13,16,18],x_3:[8,16,18],x_4:16,x_:[0,2,3,5,6,8,10,11,13,14,16,18],x_center:11,x_data:1,x_data_ful:1,x_hidden:2,x_i:[0,1,2,5,6,7,8,9,10,11,12,13,14,16,18],x_input:2,x_ix_:0,x_iy_i:8,x_j:[0,2,8,9,12,18],x_jy_j:8,x_k:[12,14,16,18],x_l:18,x_m:[6,12,16,18],x_n:[0,2,3,6,8,11,12,13,16,18],x_new:[9,10],x_offset:6,x_output:2,x_p:[3,7,9],x_poli:9,x_poly10:9,x_pred:4,x_prev:2,x_reduc:11,x_scale:8,x_test:[0,1,3,5,6,7,9,10,11],x_test_own:6,x_test_scal:[0,6,7,9,10,11],x_tot:4,x_train:[0,1,3,4,5,6,7,9,10,11],x_train_mean:6,x_train_own:6,x_train_scal:[0,6,7,9,10,11],x_val:1,xarrai:15,xavier:1,xbnew:13,xcode:[0,15],xdclassiffierconfus:10,xdclassiffierroc:10,xg_clf:10,xgb:10,xgbclassifi:10,xgboost:9,xgboot:10,xgbregressor:10,xgparam:10,xgtree:10,xi:[8,13],xi_1:8,xi_:8,xi_i:8,xk:8,xlabel:[0,1,2,3,4,5,6,7,8,9,10,13,18],xlim:[6,10],xm:9,xmesh:13,xnew:[0,13],xp:18,xpanda:0,xpd:[5,11],xplot:0,xs:9,xscale:0,xsr:9,xt_x:13,xtest:6,xtick:[3,6,8,9],xtrain:6,xu:0,xx:[0,5,16],xy:[0,6,8,16],xytext:8,xz:16,y1:4,y2:4,y3:4,y:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,16,18],y_0:[0,5,11,16],y_1:[0,5,8,9,11,13,16],y_1y_1:8,y_1y_1k:8,y_1y_2:8,y_1y_2k:8,y_1y_n:8,y_1y_nk:8,y_2:[0,5,8,9,11,16],y_2y_1:8,y_2y_1k:8,y_2y_2:8,y_2y_2k:8,y_3:[0,9,16],y_4:16,y_:[0,1,5,6,10,11,16],y_data:[0,1,5,6],y_data_ful:1,y_decis:8,y_fit:0,y_i:[0,1,5,6,7,8,9,10,11,12,13,16],y_if_:10,y_ix_:0,y_ix_i:[7,8,13],y_iy_jk:8,y_j:[6,8,12],y_k:12,y_m:16,y_model:[0,4,5,6],y_n:[8,13],y_ny_1:8,y_ny_1k:8,y_ny_2:8,y_ny_2k:8,y_ny_n:8,y_ny_nk:8,y_offset:6,y_plot:9,y_pred1:9,y_pred2:9,y_pred:[0,1,4,6,7,8,9,10],y_pred_rf:10,y_pred_tre:10,y_proba:[7,10],y_scaler:6,y_test:[0,1,3,4,5,6,7,9,10,11],y_test_onehot:1,y_test_predict:0,y_tot:4,y_train:[0,1,3,4,5,6,7,9,10,11],y_train_mean:6,y_train_onehot:1,y_train_predict:0,y_train_scal:6,y_val:1,ye:[3,6,7],year:[0,15],yet:[0,1,6,8,11,13],yi:13,yield:[0,2,5,6,8,10,12,13,14,16,18],yk:8,ylabel:[0,1,2,3,4,5,6,7,8,9,10,13,18],ylim:[3,6],ym:9,ymesh:13,yn:0,yo:[8,9,10],yoshua:[1,20],you:[0,1,2,3,4,5,6,8,9,10,11,13,15,16,18,20],young:0,your:[1,2,4,5,6,8,11,13,15,16],yourself:[11,13],youtub:15,ypred:6,ypredict2:13,ypredict:[0,13],ypredictlasso:5,ypredictol:5,ypredictown:6,ypredictownridg:6,ypredictridg:[5,6],ypredictskl:6,ys:9,ytest:6,ytick:[3,6,8,9],ytild:[0,6],ytildelasso:5,ytildenp:0,ytildeol:5,ytildeownridg:6,ytilderidg:[5,6],ytrain:6,yx:16,yy:16,yz:16,z:[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18],z_0:16,z_1:16,z_2:16,z_:[1,2,12,16],z_c:1,z_h:1,z_hidden:2,z_i:[1,12],z_j:[1,12],z_k:12,z_m:1,z_mod:9,z_o:1,z_output:2,zaman:18,zaxi:6,zero:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18],zeros_lik:4,zfill:4,zip:[2,4,6,13],zl:5,zm_h:0,zn:0,zone:0,zx:16,zy:16,zz:16},titles:["3. Linear Regression","14. Building a Feed Forward Neural Network","15. Solving Differential Equations with Deep Learning","16. Convolutional Neural Networks","17. Recurrent neural networks: Overarching view","4. Ridge and Lasso Regression","5. Resampling Methods","6. Logistic Regression","8. Support Vector Machines, overarching aims","9. Decision trees, overarching aims","10. Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods","11. Basic ideas of the Principal Component Analysis (PCA)","13. Neural networks","7. Optimization, the central part of any Machine Learning algortithm","12. Clustering and Unsupervised Learning","Applied Data Analysis and Machine Learning","2. Linear Algebra, Handling of Arrays and more Python Features","Teaching schedule with links to material","1. Elements of Probability Theory and Statistical Data Analysis","Teachers and Grading","Textbooks"],titleterms:{"1":[],"10":17,"11":17,"12":17,"13":[],"14":17,"15":[],"16":17,"17":17,"18":17,"19":17,"2":[0,17],"20":[],"2021":[],"2022":19,"21":17,"22":17,"23":17,"24":17,"25":17,"26":17,"27":[],"28":17,"29":17,"3":17,"30":17,"31":17,"34":17,"35":17,"36":17,"37":17,"38":17,"39":17,"4":17,"40":17,"41":17,"4155":[],"42":17,"43":17,"44":17,"45":17,"46":17,"47":17,"5":17,"6":[],"7":17,"8":[],"9":17,"case":[8,10,18],"do":1,"final":12,"function":[0,1,6,7,8,10,11,12,13,18],"import":[5,16],"new":4,A:[0,1,4,8,9],And:13,Ising:6,The:[0,1,2,3,5,6,7,8,9,11,12,15],With:4,activ:[1,12],actual:[],ad:6,adaboost:10,adam:13,adapt:10,adjust:1,adversari:4,again:[3,9],aim:[8,9],algebra:16,algorithm:[9,10,11,12],algortithm:13,all:8,an:[0,4,10],analys:5,analysi:[0,5,6,11,15,18],ani:13,anoth:9,appli:15,approach:[0,8,14],approxim:12,architectur:1,arrai:16,assist:19,august:17,autocorrel:18,autograd:[2,13],automat:13,back:[1,11,12],background:15,bag:10,base:13,basic:[0,5,7,9,10,11,16],batch:1,bay:5,befor:11,better:8,bia:6,binari:1,binomi:[],bird:10,block:[],boost:10,bootstrap:[6,10],boston:0,breast:1,bring:12,build:[1,3,9],calcul:[],cancer:[1,7,9,11],cart:9,central:[13,15,18],chain:12,chang:10,chi:0,choos:1,cifar01:3,classic:11,classif:[1,9,10],classifi:8,clip:1,cluster:14,cnn:3,code:[0,1,2,5,9,11,12,14],collect:[1,3],compar:[2,10],complex:[0,6],complic:6,compon:11,comput:9,con:9,concept:18,conjug:13,continu:[],convex:[8,13],convolut:[3,12],correl:11,cost:[1,10],cours:[15,20],covari:[5,11,18],cross:6,cumul:[],data:[0,1,3,6,7,9,11,15,18],dataset:[1,3],decai:2,decis:[9,10],decomposit:[5,11,16],deep:[1,2],defin:1,definit:[],degre:0,demonstr:[],dens:0,deriv:[5,12],descent:[2,10,13],detail:3,develop:1,deviat:[],diagon:11,dice:[],differ:8,differenti:[2,13],diffus:2,dimension:[2,3,8],disadvantag:9,discret:18,disguis:[],distribut:[5,18],domain:18,down:1,dropout:1,element:[0,18],elimin:16,ensembl:10,entropi:9,environ:0,equat:[0,2,12],error:[0,10],euler:2,evalu:1,event:[],exampl:[0,1,2,3,4,6,7,8,9,10],exercis:[0,6],expect:18,experi:18,explor:0,exponenti:2,extrapol:4,extrem:10,ey:10,fall:19,famili:1,famou:16,featur:[9,16],feed:[1,12],fine:1,first:[4,12],fit:[0,10],forc:3,forest:10,forward:[1,2,12],fourier:3,frank:6,freedom:0,frequentist:0,from:[5,10,12],full:2,further:[3,5],fy:[],gan:4,gaussian:16,gd:13,gener:[4,9],geometr:11,gini:9,good:0,grade:19,gradient:[1,2,10,13],growth:2,ha:15,handl:16,hidden:2,hous:0,how:[],hyperparamet:1,hyperplan:8,i:1,id3:9,idea:11,implement:1,implic:5,improv:1,includ:13,increment:11,index:9,inform:19,input:2,instal:15,instructor:19,interpret:[5,11],introduc:11,introduct:[0,6,15,16],invers:[5,16],iter:10,its:[],jackknif:[],jungl:10,kera:[1,3],kernel:[8,11],lagrangian:8,lasso:[5,6],later:5,layer:[1,2,3,12],learn:[0,1,2,11,13,14,15],least:[5,6],level:10,librari:15,likelihood:7,limit:[1,13,18],linear:[0,8,13,16],link:[5,11,17,20],logist:[7,13],lu:16,machin:[0,8,13,15],main:18,make:[0,9,10],mani:[10,12],materi:17,math:5,mathemat:[3,5,8],matric:[5,16],matrix:[1,5,11,12,16],matter:0,mean:0,meet:[5,10,18],mercer:8,mersenn:[],method:[6,9,10,13],mlp:12,mnist:[3,4],model:[0,1,4,6,12],moment:[],momentum:13,moon:[8,9],more:[3,6,16],multilay:12,multipl:[1,3],multipli:8,name:[],network:[1,2,3,4,7,12],neural:[1,2,3,4,12],non:8,normal:[0,1],norwai:[],notat:12,novemb:17,now:[1,9],nuclear:0,nueral:7,number:[0,2,18],numer:[2,18],numpi:16,object:3,observ:[],obtain:11,octob:17,od:2,off:6,ol:[5,6,13],one:[2,12],oper:16,optim:[1,8,13,15],ordinari:[5,6],organ:0,oslo:20,other:[4,9,11,12,16],our:[0,4,5,11,13],outcom:15,output:2,overarch:[0,4,8,9],overview:10,own:[0,10,11],packag:16,part:[13,15],partial:2,pass:1,pca:11,pdf:18,perceptron:12,perform:[1,9],period:3,perspect:1,point:4,poisson:2,polynomi:3,popul:2,practic:13,pre:[1,3],predict:4,prerequisit:[3,15],princip:11,principl:3,pro:9,probabl:[5,18],problem:[1,2,13],procedur:9,process:[1,3],program:[2,13],project:6,prop:13,propag:[1,12],properti:[5,18],pseudo:[],python:[0,9,15,16],quick:8,ran0:[],random:[10,11,18],read:9,real:6,recip:[],recurr:[4,12],reduc:0,reduct:3,reformul:2,regress:[0,5,6,7,9,10,13],regular:1,relev:20,relu:1,remark:3,remind:[6,8],requir:[2,15],resampl:6,rescal:6,resourc:2,revisit:13,ridg:[5,6],rm:13,rng:[],rule:12,s:[8,10],sampl:11,schedul:17,schemat:9,scheme:2,scikit:[0,1,11],select:[],semest:19,septemb:17,set:[0,2,3,9,12],sgd:13,should:1,simpl:[0,4,9,13],singl:10,singular:[5,11],situat:[],soft:8,softmax:1,solv:2,solver:13,some:[13,16],specifi:2,split:0,squar:[0,5,6,10],standard:13,state:0,statist:[5,6,15,18],steepest:[10,13],stk3155:[],stochast:[13,18],superposit:3,supervis:1,support:8,svd:5,systemat:3,teach:[17,19],teacher:19,techniqu:[6,11],technolog:15,tensorflow:[1,3],test:[0,1],textbook:20,theorem:[5,8,11,12,18],theori:18,three:[],tip:13,togeth:12,top:1,toss:[],toward:11,trade:6,tradeoff:6,train:[0,1,4],transform:3,tree:[9,10],tune:1,two:[3,8,15],type:[2,4,12],uncorrel:[],uniform:[],univers:[12,20],unsupervis:14,up:[0,2,9,12],us:[0,1,2,3,7,13,15],valid:6,valu:[5,11,18],variabl:18,varianc:6,variou:0,vector:[8,12,16],view:[0,4,10],visual:[1,9],vs:3,wai:9,wave:2,week:17,weekli:17,what:0,which:1,why:[],wisconsin:7,write:[4,11],xgboost:10,your:[0,10]}}) \ No newline at end of file diff --git a/doc/LectureNotes/_build/html/statistics.html b/doc/LectureNotes/_build/html/statistics.html index e4ddce8bd..9930a67d9 100644 --- a/doc/LectureNotes/_build/html/statistics.html +++ b/doc/LectureNotes/_build/html/statistics.html @@ -913,27 +913,37 @@ uncorrelated.

-
0.6530742540053943
-[[14.12788968 14.881788   12.12937662 11.19379506 13.19466812  6.37692363
-   8.24924624  8.20509391 14.99435648 14.6834195 ]
- [14.881788   15.67591616 12.77662945 11.791123   13.89876748  6.71721168
-   8.68944595  8.64293754 15.79449156 15.46696223]
- [12.12937662 12.77662945 10.41357064  9.61033524 11.32816737  5.47485224
-   7.0823185   7.0444119  12.87327414 12.6063219 ]
- [11.19379506 11.791123    9.61033524  8.86905621 10.4543859   5.05255759
-   6.53603432  6.50105159 11.88031314 11.63395187]
- [13.19466812 13.89876748 11.32816737 10.4543859  12.32309075  5.95569422
-   7.70434005  7.66310422 14.00390021 13.71350226]
- [ 6.37692363  6.71721168  5.47485224  5.05255759  5.95569422  2.87836018
-   3.72347283  3.70354373  6.76802186  6.62767384]
- [ 8.24924624  8.68944595  7.0823185   6.53603432  7.70434005  3.72347283
-   4.81671821  4.79093776  8.75517445  8.57361898]
- [ 8.20509391  8.64293754  7.0444119   6.50105159  7.66310422  3.70354373
-   4.79093776  4.76529528  8.70831425  8.52773051]
- [14.99435648 15.79449156 12.87327414 11.88031314 14.00390021  6.76802186
-   8.75517445  8.70831425 15.91396388 15.58395707]
- [14.6834195  15.46696223 12.6063219  11.63395187 13.71350226  6.62767384
-   8.57361898  8.52773051 15.58395707 15.26079358]]
+
2.3120271598582915
+[[1.64113381e+01 8.49992743e-02 5.43294696e+00 1.48316523e+01
+  1.02642055e+01 1.44688507e+01 1.96551427e+01 7.03071040e+00
+  7.32039227e+00 1.96686324e+01]
+ [8.49992743e-02 4.40236901e-04 2.81388724e-02 7.68176047e-02
+  5.31614188e-02 7.49385454e-02 1.01799917e-01 3.64141716e-02
+  3.79145214e-02 1.01869785e-01]
+ [5.43294696e+00 2.81388724e-02 1.79856831e+00 4.90999452e+00
+  3.39794864e+00 4.78988962e+00 6.50680321e+00 2.32750531e+00
+  2.42340403e+00 6.51126895e+00]
+ [1.48316523e+01 7.68176047e-02 4.90999452e+00 1.34040204e+01
+  9.27621662e+00 1.30761405e+01 1.77632220e+01 6.35396404e+00
+  6.61576236e+00 1.77754132e+01]
+ [1.02642055e+01 5.31614188e-02 3.39794864e+00 9.27621662e+00
+  6.41958102e+00 9.04930820e+00 1.22929905e+01 4.39724390e+00
+  4.57842073e+00 1.23014274e+01]
+ [1.44688507e+01 7.49385454e-02 4.78988962e+00 1.30761405e+01
+  9.04930820e+00 1.27562809e+01 1.73287103e+01 6.19853775e+00
+  6.45393214e+00 1.73406033e+01]
+ [1.96551427e+01 1.01799917e-01 6.50680321e+00 1.77632220e+01
+  1.22929905e+01 1.73287103e+01 2.35401056e+01 8.42037468e+00
+  8.76731400e+00 2.35562617e+01]
+ [7.03071040e+00 3.64141716e-02 2.32750531e+00 6.35396404e+00
+  4.39724390e+00 6.19853775e+00 8.42037468e+00 3.01199624e+00
+  3.13609760e+00 8.42615374e+00]
+ [7.32039227e+00 3.79145214e-02 2.42340403e+00 6.61576236e+00
+  4.57842073e+00 6.45393214e+00 8.76731400e+00 3.13609760e+00
+  3.26531223e+00 8.77333117e+00]
+ [1.96686324e+01 1.01869785e-01 6.51126895e+00 1.77754132e+01
+  1.23014274e+01 1.73406033e+01 2.35562617e+01 8.42615374e+00
+  8.77333117e+00 2.35724288e+01]]
 
@@ -1201,15 +1211,15 @@ more practically oriented methods like the blocking technique.

-
0.12898627064868978
-4.517350858882083
-0.7469898175164704
-1.0712953943627344 9.116048442683864 13.773329728649545
-2.9898254753574576 3.041797190646905 8.203753611274545
-[[ 1.07129539  2.98982548  3.04179719]
- [ 2.98982548  9.11604844  8.20375361]
- [ 3.04179719  8.20375361 13.77332973]]
-[20.87647541  0.06602663  3.01817152]
+
0.11674401539815678
+4.220506557673408
+0.15843769515580663
+1.1096767776832326 11.97547354476579 11.11598862273198
+3.5031474174499113 2.829648415811072 9.094404754965417
+[[ 1.10967678  3.50314742  2.82964842]
+ [ 3.50314742 11.97547354  9.09440475]
+ [ 2.82964842  9.09440475 11.11598862]]
+[21.63207808  0.07291729  2.49614357]
 
@@ -1539,7 +1549,7 @@ assumption for approximating \(\sigma
-
-0.012633802944855959 1.0011828302640124
+
-0.01212754811385597 1.0209518407597062
 
_images/statistics_188_1.png diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb b/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb index 938211918..055537324 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb +++ b/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb @@ -2,17 +2,34 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "id": "abf0787a", + "metadata": { + "editable": true + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "8675dd19", + "metadata": { + "editable": true + }, + "source": [ + "# Linear Regression" + ] + }, + { + "cell_type": "markdown", + "id": "90d6f1f0", + "metadata": { + "editable": true + }, "source": [ - "# Linear Regression\n", - "\n", - "\n", "## Introduction\n", "\n", - "\n", - "\n", - "\n", - "\n", "Our emphasis throughout this series of lectures is on understanding\n", "the mathematical aspects of different algorithms used in the fields of\n", "data analysis and machine learning.\n", @@ -43,10 +60,16 @@ "Learning, Scikit-Learn and Tensorflow (see below for links etc).\n", "Moreover, the examples we introduce will serve as inputs to many of\n", "our discussions later, as well as allowing you to set up models and\n", - "produce your own data and get started with programming.\n", - "\n", - "\n", - "\n", + "produce your own data and get started with programming." + ] + }, + { + "cell_type": "markdown", + "id": "7b60b0a7", + "metadata": { + "editable": true + }, + "source": [ "## What is Machine Learning?\n", "\n", "Statistics, data science and machine learning form important fields of\n", @@ -112,8 +135,6 @@ "Carlo methods are central elements in a proper understanding of many\n", "of algorithms and methods we will discuss.\n", "\n", - "\n", - "\n", "The approaches to machine learning are many, but are often split into\n", "two main categories. In *supervised learning* we know the answer to a\n", "problem, and let the computer deduce the logic behind it. On the other\n", @@ -141,11 +162,16 @@ "\n", "* The last ingredient is a so-called **cost/loss** function (or error or risk function) which allows us to present an estimate on how good our model is in reproducing the data it is supposed to train. \n", "\n", - "\n", - "\n", - "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**.\n", - "\n", - "\n", + "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**." + ] + }, + { + "cell_type": "markdown", + "id": "eef76920", + "metadata": { + "editable": true + }, + "source": [ "### A Frequentist approach to data analysis\n", "\n", "When you hear phrases like **predictions and estimations** and\n", @@ -171,9 +197,16 @@ "where the aim is to make predictions and find correlations. We focus\n", "less on for example extracting a probability distribution function (PDF). The PDF can be\n", "used in turn to make estimations and find causations such as given $A$\n", - "what is the likelihood of finding $B$.\n", - "\n", - "\n", + "what is the likelihood of finding $B$." + ] + }, + { + "cell_type": "markdown", + "id": "74b45ee0", + "metadata": { + "editable": true + }, + "source": [ "### What is a good model?\n", "\n", "In science and engineering we often end up in situations where we want to infer (or learn) a\n", @@ -196,9 +229,6 @@ "is that if we are not specific about what we mean by a *correct* model, there\n", "could easily be many different models that fit the given data set *equally well*.\n", "\n", - "\n", - "\n", - "\n", "The central question is this: what leads us to say that a model is correct or\n", "optimal for a given data set? To make the model inference problem well posed, i.e.,\n", "to guarantee that there is a unique optimal model for the given data, we need to\n", @@ -218,18 +248,16 @@ "simpler models become inadequate. For instance, if we work with a regression problem to fit a set of sample points, one\n", "may first try the simplest class of models, namely linear models, followed obviously by more complex models.\n", "\n", - "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures.\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures." + ] + }, + { + "cell_type": "markdown", + "id": "51c84b1e", + "metadata": { + "editable": true + }, + "source": [ "## Simple linear regression model using **scikit-learn**\n", "\n", "We start with perhaps our simplest possible example, using\n", @@ -245,7 +273,6 @@ "(tabulated again as a vector) with a linear dependence on $x$ plus a\n", "random noise added via the normal distribution.\n", "\n", - "\n", "The Numpy functions are imported used the **import numpy as np**\n", "statement and the random number generator for the uniform distribution\n", "is called using the function **np.random.rand()**, where we specificy\n", @@ -259,7 +286,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4779803a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = 2x+N(0,1),\n", @@ -268,7 +298,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b2f47871", + "metadata": { + "editable": true + }, "source": [ "where $N(0,1)$ represents random numbers generated by the normal\n", "distribution. From **Scikit-Learn** we import then the\n", @@ -296,13 +329,13 @@ "This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set.\n", "Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!\n", "\n", - "\n", "The Python code follows here." ] }, { "cell_type": "code", "execution_count": 1, + "id": "1cdef5c4", "metadata": { "collapsed": false, "editable": true @@ -310,14 +343,14 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnHUlEQVR4nO3debxVZb0/8M+XGQQFAYnxgFoOgaiAOGODOZT5q5tdDOmn1UUwh26aY1e9Gpb31y0zS8PqmsLFrtrkUGZdFScIUASVJEMOICiTDAIinPP5/fGs3d7nuPc+6+y95vV5v177BWdP69nPXvv7XeuZlpGEiIjkV4e4CyAiIvFSIhARyTklAhGRnFMiEBHJOSUCEZGcUyIQEck5JQKpyswmmdkfQ3rvu8zsWwG/Z2jlzRsze8fM9o+7HBI+JQKBmR1vZs+a2RYz22Rmz5jZOAAgOYvkJ+IuY2tmRjM7sPX9SSqvl+je8wLqJjN7zMwOjrtcfpHsSXJ53OWQ8CkR5JyZ7Q3gIQA/BLAvgMEA/h3ArjjLlTZm1qnCQ/9Bsidcvb4B4GcRblvEFyUC+RAAkJxNsonkTpJ/JLkYAMzsXDN7uvBk70j8AjP7m5ltM7MbzewAM3vOzLaa2f+YWRfvuSeZ2Wozu9rMNpjZCjObVKkgZvYpM1tkZpu9M5TD2vthKpR3qlfet83sR2ZmJY9/ycyWeo89amYNJY/9wMxWeZ9roZmdUPLY9WZ2v5nNNLOtAM6tVi6SOwH8D4DDS95jkJk9YGbrzex1M7u45LHuZvYLr1xLzexyM1td8vgKM7vCzBYD2G5mnczsaK/eNpvZi2Z2Uqt6We59Z68XvgczO9DMnvTOBjeY2S9b1d2B3v/3MbO7vbI2mtk3zaxDaZ2b2Xe98r5uZqf5+b4kGZQIZBmAJi/onGZmfXy85lQAYwAcDeByADMATAIwFMBIAGeXPPcDAPrBHRH/XwAzzOyg1m9oZkcC+DmA8wH0BfATAL8zs661frASnwIwDsBoAJ8HcIq3zf8D4GoAnwXQH8BTAGaXvG4+XODeF8B/A7jPzLqVPH4mgPsB9AYwq1oBzGwvuHp5zfu7A4AHAbwIVzcfA/A1MzvFe8l1AIYD2B/AyQDOKfO2ZwP4pLf9AQAeBvAtr7yXAXjAzPp7274VwGkkewE4FsAi7z1uBPBHAH0ADIE7MyznhwD28cozAcAXAZxX8vh4AK/Cfdf/AeBnpQlXkk2JIOdIbgVwPAACuBPAejP7nZkNqPKym0luJfkygJcA/JHkcpJbAPwewBGtnv9vJHeRfBIuWH2+zHv+C4CfkJznnZn8Aq556uj6PiEA4DskN5NcCeBxFI/KzwfwbZJLSe4BcBOAwwtnBSRnktxIcg/J/wTQFUBpEnuO5G9INntH/OVcZmabAWyDq+fJ3v3jAPQneQPJ97y2+DsBTPQe/zyAm0i+TXI1XCBv7VaSq7xtnwPgEZKPeOV5DMACAKd7z20GMNLMupNc6313ALAbQAOAQSTfJfl0642YWUcA/wzgKpLbSK4A8J8lnwUAGkneSbIJwC8ADIRLTpICSgQCLxCeS3II3BH9IAC3VHnJWyX/31nm754lf79NcnvJ343e+7fWAOBSr1ljsxc8h1Z4bnu9WfL/HSXlawDwg5LtbQJgcEfoMLNLvWaZLd7j+8Ad8Ras8rHt75LsDXd0vxPFRNIAYFCrz3s1isFzUKv3L7et0vsaAJzV6v2OBzDQq/9/BjAVwFoze9iKndaXe5/5L2b2spl9qcx2+gHoAvfdFTTCqyfPP+qY5A7vv6X7gSSYEoG0QPKvAO6CSwhB6OM1TRQMA7CmzPNWAZhOsnfJrQfJ2WWeG5RVAM5vtc3uJJ/1+gOugDsy7+MF8y1wQbPA99K93tnIJXCJp7u37ddbbbsXycIR/Fq4ppqCoeXettVnuafV++1F8jve9h8leTLckfpf4c4+QPJNkv9CchDcGdKP7f2jsTageOZQMAyu81syQIkg58zsYO/Id4j391C4tue5AW7m382sixdcPwXgvjLPuRPAVDMbb85eZvZJM+tV5X27mFm3klvHdpbrDgBXmdmHgX90iJ7lPdYLwB4A6wF0MrNrAezdzvdvwWuuWQNgCoC/ANjqdfh2N7OOZjbSvGG7cB3LV5lZHzMbDODCNt5+JoAzzOwU7726meusH2JmA8zs015C3gXgHQBN3mc+q/DdA3gbLrk0tSp3k1ee6WbWy2s6+7q3TckAJQLZBtfRN8/MtsMlgJcAXBrQ+78JF2DWwHWoTvXOOloguQCun+A27/mvoY2ROABehmtuKdzOq/70923z1wBuBnCvuZE/LwEojHZ5FK6/YxlcM8i78NcU1Jb/B9cc0wnAGXD9Fa/DHXX/FK75CQBuALDae+xPcJ3SFYf0klwF13l9NVzyWgXgG3C/8Q5w3+cauOavCQAu8F46Du67fwfA7wBcQvL1Mpu4CMB2AMsBPA3Xef7zdn52SSjThWkkLN7wxZle34PUwcymAZhIckLcZZHs0RmBSAKZ2UAzO87MOnjDbS8F8Ou4yyXZFMmMRDNbAdcE0QRgD8mxUWxXJMW6wM2lGAFgM4B7Afw4zgJJdkXSNOQlgrEkN4S+MRERaRc1DYmI5FxUZwSvozg07SckZ5R5zhS4YXXYa6+9xhx8cGoWaRQRid3ChQs3kOxfy2ujSgSDSK4xs/0APAbgIpJzKj1/7NixXLBgQejlEhHJCjNbWGv/ayRNQyTXeP+ugxv5cFQU2xURkbaFngi8GaK9Cv8H8Am4iTsiIpIAUQwfHQDg196KtJ0A/DfJP0SwXRER8SH0ROAtrzs67O2IiEhtNHxURCTnlAhERHJOiUBEJOeUCEREck6JQEQk55QIRERyTolARCTnlAhERHJOiUBEJOeUCEREck6JQEQk55QIRERyTolARCTnlAhERHJOiUBEJOeUCEREck6JQEQk55QIRERyTolARCTnlAhERHJOiUBEJOeUCEREck6JQEQk55QIRERyTolARCTnlAhERHJOiUBEJOeUCEREck6JQEQk55QIRERyTolARCTnlAhERHJOiUBEJOeUCEREck6JQEQk5yJLBGbW0cxeMLOHotqmiIi0LcozgksALI1weyIi4kMkicDMhgD4JICfRrE9ERHxL6ozglsAXA6gudITzGyKmS0wswXr16+PqFgiIhJ6IjCzTwFYR3JhteeRnEFyLMmx/fv3D7tYIiLiieKM4DgAnzazFQDuBfBRM5sZwXZFRMSH0BMByatIDiE5HMBEAP9L8pywtysiIv5oHoGISM51inJjJJ8A8ESU2xQRkep0RiAiknNKBCIiOadEICKSc0oEIiI5p0QgIpJzSgQiIjmnRCAiknNKBCIiOadEICKSc0oEIiI5p0QgIpJzSgQiIjmnRCAiknNKBCIiOadEICKSc0oEIiI5p0QgIpJzSgQiIjmnRCAiknNKBCIiaTVrFjB8ONChAw4DRtX6NkoEItJ+JQEIw4e7vyVas2YBU6YAjY0Aic5Al1rfqlOQ5RKRHCgEoB073N+Nje5vAJg0Kb5y5c011xS/gzrpjEBE2qdcANqxw90v0Vm5MrC3UiIQkfapFIACDEziw7Bhgb2VEoGItE+lABRgYBIfpk8HevQI5K2UCETilMZO13IBqEcPd79EZ9IkYMYMoKEBMMNu4L1a30qJQCQurUZ9/KPTNenJoFUAQkOD+1sdxdGbNAlYsQJobsZiYEmtb2MkAyxVMMaOHcsFCxbEXQyRcA0f7oJ/aw0N7sct0g5mtpDk2FpeqzMCkbio01USQolAJC7qdJWEUCIQiYs6XSUhlAhE4qJOV0kILTEhEqdJkxT4JXY6IxCR6KRx3kQlGfosoZ8RmFk3AHMAdPW2dz/J68LerogkTJYWq8vSZ0EE8wjMzADsRfIdM+sM4GkAl5CcW+k1mkcgkkFZmjeRwM9SzzyC0M8I6DLNO96fnb1b8maxiUi4sjRvIkufBRH1EZhZRzNbBGAdgMdIzivznClmtsDMFqxfvz6KYolIlLI0byJLnwURJQKSTSQPBzAEwFFmNrLMc2aQHEtybP/+/aMolohEKUvzJrL0WRDxqCGSmwE8AeDUKLcrIgmQpXkThc/St2/xvu7d4ytPnaIYNdQfwG6Sm82sO4CPA7g57O2KSAJlbd7Ezp3F/2/cmNqRQ1GcEQwE8LiZLQYwH66P4KEItisiEp4MXbIz9ERAcjHJI0geRnIkyRvC3qaISEVBTQQLc+RQxJPVtMSEiORHkBPBhg0rP5eg3pFDMUxW0xITIpIfQTbnhDVyKIYmJyUCEcmPIJtzwhoFFcNktewnggwtDCUidQp6IljJNYOxYkUwTTcxTFbLdiJI68XBRSQcaZgIFkMZs50IMjS8S0QCkIZJbTGUMfTVR2sR2OqjHTq4M4HWzNypnIhIRtSz+mi2zwgytjCUiKRIivons50I0tAeKCLZk7L+yWwngjS0B0p+pOgIUeqUsv7JbPcRiCRF69migDs71YFJNsXQP6k+ApGkS9kRotQpZf2TSgQiUUjqpQ3VXBWOlPVPKhGIRCGJR4gp69BMlZT1T6qPQCQKSewjGD68/OqZDQ1uuQRJlVD7CMzsT2Y2upY3FxFPEo8Qk9pcJZHzcz2CywF838waAVxNcm3IZRLJpqRdpjGs9fQlddo8IyD5PMmPAngIwB/M7Drv2sMikmYp69CU8PjqLDYzA/AqgNsBXATgb2Y2OcyCiUjIkthcJbFos7PYzJ4GsD+AlwHMBTAPwF8BXAKgK8kpQRdKncUiIu0T9oSyqQAGkzyZ5L+RfIjkayQvAnBCLRsVEfFF8xwi0WZnMcmXqjz8yQDLIiJSFMNF3POqrgllJJcHVRARiUhajrK1LEdkNLNYJE/KzSaePBm44IK4S/Z+mucQGSUCSb+0HOEmQbmjbBK4447k1Vs9y3Jon2gXJQJJt6yvlxN0QKt0NE0mr8ml1nkOWd8nwkAycbcxY8ZQxJeGBtL93FveGhriLln9Zs4ke/Ro+bl69HD316pSfQGkWWBFD8zMma7MZu5fP589y/tEFQAWsMaYq0XnJN1iuABIZMJYFG7WLNcnUK7OsrLYXJb3iSp0YRrJryQu7xyUMDpLJ00Cpk51QbFUlpaWCHqfyEF/gxKBpFuW18sJK8n9+MfAPfdkd2mJIPeJvPQ31NqmFOZNfQTSLrW0I6dBGH0EeRHUPpGi/gbU0UegMwJJv0mTXNt2c7P7t3Bkm/ZTei0KV7tK+0R7JW0uQ0j7tJ/rEYikT1aWJ0jaNQzyJknXbAhxn9YZgWSTlieQICSpDyrEfVqJQLIpaaf0kk5Jap4LcZ8OPRGY2VAze9zMlprZy2Z2SdjbFMn0sFKJVlD9DfUKcZ+O4oxgD4BLSR4C4GgAXzWzQyPYruRZkk7pRYJQbZ+uc2Jw6ImA5FqSz3v/3wZgKYDBYW9Xci5Jp/RS5GfUS9pHe4Wl9T49cCDw2c8CDzwA7LdfXW8d6RITZjYcwBwAI0lubfXYFABTAGDYsGFjGsv11ItIerUe9QK4I9rSBO3nOXm0Zw+waBHw5JPu9tRTwObN7rERI4AJE2B33VXzEhORJQIz6wngSQDTSf6q2nO11pBIBvlZOymM9ZXSaPduYOHCYuB/+mlg2zb32Ac/CEyYULwNHQqgvrWGIplHYGadATwAYFZbSUBEMsrPqJe8jvbatQuYP78Y+J99Fti+3T12yCHubGjCBODEE4FBgwLffOiJwMwMwM8ALCX5vbC3JyIhmzXLjV1fudKNWJk+3V+zjZ/JWUmawBWmd98F5s4tBv7nnnP3AcCoUcB55xUDf53t/35EcUZwHIDJAJaY2SLvvqtJPhLBtkUkSPXMbj39dHcltNLm6NYjuaZPL99HkPbRXjt2uGBfCPzz5rmzADNg9Gjg/POBk04CTjgB6Ns3+vLVukhRmLdULjqX1YXPRErVughbuQX0zMhp08o/N+2/pa1byd//nrzySvLYY8nOnd1n7tiRHDeOvOwy8sEHyU2bAtskdGGamGmkg+RFrRd9yXon8ObNrkO3cMT//PNAUxPQqRMwblyxY/e444BevUIpgi5ME7eo1rXR+OrqVD/hq3V2a9Y6gTdtAn7zG+Bf/xU48kjXnHPGGcCttwLdugFXXQU89phLEM8+C3z728Cpp4aWBOpW66lEmLfUNQ2ZlT9dDvIasFqbvjrVTzRqrecg1/WPo+lo3Try/vvJiy4iDzus+Jvv1o086STyuuvIxx8nd+wIvywVoI6modiDfrlb6hJBFBevSNEFMmKh+olOLYE4qEQdVcJfu5a8917Xh3HooS239fGPkzfeSM6ZQ777brDbrUM9iUB9BEGIoo8gpxfk9k31k3y1DjstFVZfw6pVwJw5xTb+Zcvc/b16AccfXxzKOXYs0Llz7dsJUeInlGVeYWeudyevJi/jq2ul+km+IC6yE1Rfw4oVwBNPFAP/66+7+3v3dkM4p0xxwf/ww12Hb8Zl/xNGJewrSWV1fHVQVD/5UEvCJ4G//70Y9J98spg49t3XHelffLEbxz9qFNCxYyhFTzIlgrSI4qwjzVQ/+eAn4ZPAq6+2DPxr1rjH9tvPBf5vfMMd8X/4w65ZMe9q7VwI85a6zuKky8IEHfEv69936893zz3kkiXkbbeRZ51FDhhQ7NwdOJCcOJG8/XbylVfI5ua4Sx8a1NFZrDOCNGpPp1tWLuIu/uTh+5440R3JF472v/Y1YONG99jQocDJJxcncB14oBswIFVp1FDatHeEUtZndEpLWfy+fazFjwkTXBv/8OHxlTNm9YwaUiJIm/b+0DWsMl+y8H3XsBa/aImJYCV9mYL2Dp/TRdzDlbT9JY3f965dLthPnw584hNAnz7AMccAV15ZvFj87Nmuw3fZMuDOO4FzzlESCFKtnQth3mLrLE7DMgXtnUEbxWfKeudkJUncX5JYptZ27HDLMVx/PfmRj7hlGgplHTWKvPBC8r77yLfeirukqQItMRGQNCxTUMsPPcxAnYbAE5ak7i9JS8zvvEM+9hj5zW+SJ5xAdunCf6zFdcQR5Ne+Rv761+SGDfGWM+XqSQTqIyiVlvbVIKbqByWLnZN+pWV/idq2bcAzzxTb+OfPdx2+HTu6lToL7fvHH+9m8kogtMREUNKyTEHYs5jbI2vLC7dHWvaXsLW1Fv9ll7m/770XWLAAWLfOLd2gJOBPBAd+6iwuNX26G4pZKgvLFITZoZnGzsmgZHV/acvGjS3X4t933+pr8Y8cCfzoR25hN7I4t6F0P0xap3tSFIaLNzZWrrsg1NqmFOYt1pnFSWtfrVfYbfh57iMgs7e/lPPWW67z9sILXWdu4Xvu1s119l5/ffW1+NvqS8n7PlRNO/qhoD4CqSiKNvwk9VlI/daubblOz9Kl7v699gKOPbbYxj9uHNC1a9vv11ZfSp77mdrSjn4oTSiTytShKW1Ztapl4P/b39z9pWvxT5gAjBlT21r8bQV67aOVtSNJqrNYKlOHppQiXQApDfyt1+I///xg1+Jva8VQ7aOVRbW8eq1tSmHeErX6aNrbgNX+mm/NzeSyZeSdd5LnnEMOHVrcD/r2JT/zGfKWW8gXXiD37AmvHNV+R23to2n/DdbL5+eHJpSFJCtBNO8/pDxpbnbLLd9+u1t+eeDA4r67335umebbbnPLNjc1xV3aokr7aFZ+gxGoJxGoj6AadWJJ0jU3Ay+/XGzmmTPHjdMHgEGDWi7QdtBB6VuSWb9B39RHEJZKk6IaG90OqlEyErWmJmDx4paBf9Mm99iwYcAppxQD/wEHVA/8aRjtlecJixFKRyKIa4et1IllVrw/ixf+kOTYswd44YWWa/Fv2eIe239/4Mwzi4G/PWvxp+UCNupIjkTym4baeyGWIJXbtln5oW46VZUg7N7tlmEoBP5nnimuxf+hD7Vs6hkypPbtpKXJJc7ff8pkex5B3Dts67ORcmUBNOZZarNrF/CXvxQD/7PPFoPeoYcWg/6JJwIDBwa33TSN3U9DE1YCZDsRJG2HjTsxSbrt3AnMnVsM/HPnAu++6/bnUaNaBv7+/cMrh/bjzMn2FcrqXdQs6MWs8rrQmNRm+3a3ANs3v+kma/XuDXz0o8CNNwJbtwLTprkF3DZsAF580S3c9k//FG4SALQfS0u1jjsN89ZiHkE944jDGoOscflSyZYt5COPkFdcQR59NNmpk9vvOnYkjzqK/MY3yIceIjdvjruk2o8zBpmfR1BrG6FOfyVsmze7kTyla/E3N7s1ecaNKzb1HHusW7tHJCTZ7iOoR9L6F6QorR2AGze6sfuFwP/ii24f69oVGD++GPiPOeb9TS8iIUr0hDIz+zmATwFYR3Jk2NtrQWOQkyktY9gB4K23Wgb+l15y93fv7oL99de7wD9+vLsoi0gKRdFZfBeAUyPYzvuF1SGmqynV55prWo4LB9zf11wTT3lKrVkDzJ4NTJ0KHHII8IEPAJ//PHDXXW7JhunT3WUZN28G/vxn4NprXSLIWxLI028gD5+11s6F9twADAfwkt/nB7roXNAdYloEq35mLeuvcDOLviyNjeTdd5Nf/jJ54IHFsuy9N3n66eTNN5Nz55LvvRd92ZIqT7+BFH1WJL2z2MyGA3iIVZqGzGwKgCkAMGzYsDGNlSZuxU0d0PWLqw5Jt/Z+6Vr8he316eOGdxba+A8/HOjYMbyytCXJfSh5+g2k6LMmvrPYTyIolZjVR8tRB3T9olo2gHRX2yoN/KtXu8f69XOTtgqBf9Qo990mQdKXVcjTbyBFnzXbE8qSpt4JbuKC2YwZ7qjKzP0bRJAjgVdeAW6/HZg40bXpH3SQC6p/+pMbwvmjH7kO33XrgAceAC6+GBg9upgEktAenOQ+FCBfv4G8fNZa25Tac0OcfQRBS1GbYeY1NZEvvkhOnkx2797yOxk8mPzCF8if/IT861/dBVvakpTvNkl9KOWUqyczctq0uEsWvKTsEz4gyVcoAzAbwFoAuwGsBvDltl6T6ERAakZmlErretgw8lvfIr/3PfLMM8l99y0fMLt1q+07aWgo/34NDcF+prSUo5pp096fsMoFyCz8VlLyGRKdCGq5JT4RSDTuvtsF9XJB8YADyC99yV13N6igmZQj8TQchfpJVnF9jpQE7qApEUg27NpFPvMMedNN5CmnVA7MgwcXX1Nr8C4XLJJ0JJ6kYFauLG3V+8yZbn2lqOszDUk0JEoEWVJrAEhS4PBr507yySfJG24gP/axlu38H/5w+SDSOsjXErwrBYtp08ILImn8fsjKdVXtTKzca6I6w0pSMo+YEkFW1Ho0k5ajoO3byT//mbz2WnLCBLJr12JgGD2avPhi8oEHyHXr3PPDan6o9r5hBOy0fD/lVKqrvn0rf6ZKr4kiKMfVvJeARK9EkBW1Hs0k9Sho2zby0UfJq68mjzuO7NzZlatDB3LMGPLrXyd/+1ty06byr/cbQNv7I4w6WCT1+6mmrYBuVrneK9VvFAkwjrpOSKJXIsiKWgNUUjo5t2whH36YvPxycvz4lmvxjx/v7n/44fatxR/GkVbUwSIp349fbTXttFVXleq3Y8doOoqjDsoJSfRKBFmRtjOCTZvcEf3Xv+6O8Dt0cNvt3NmdAVx9tTsj2LYt3HK0V9TBwu/3k4DmBZJtN+20VVdxHyFHXY8JSfRKBFmR9D6C9etdG/7FF7s2/cIPoGtX1+Z/7bWuD2D79mC3GwY/wSKogOLn+4k7eJaq1rTjtx6SktSioDMCJYLAJWnU0Jtvkr/8JXnBBS1H8XTv7kb53HCDG/Wzc2f920qaoANzW99PQoJJ4soSJ7+/qYQkcSUCCcbq1eSsWeSUKeRBBxV36p493bj+m25y4/x37Yq7pOHLcz9CQgJbrNpbBwk4A6onEWT7UpVSXWNjy5U5//53d//ee7dckvnII4FOoV/MLlmiXnUyacsdJ3kZ7Cgk7fvwIdGXqpSEIIHly1sG/sKO3qePW5L5q191gX/06HjX4k+CqC9zOn16+aWn672aXq0mTcpX4G9t5cr23Z9ySgRZRQLLlrUM/G+84R7r398F/ksvdYF/5MjkrMWfFFEH5kLQzfNReJLk7HrnSgRZQbq1+AtBf84c4M033WMf+ECxmWfCBHctXrPy75P3JoGCOAJz3o/CkyRpZ2hhq7VzIcxbZJ3FCejgqVlTE7loEfmDH5Cf/SzZr1+xU2vIEHLSJHLGDPLVV/2txU8mq5Mwzd+NZEPK9kGos7gGSb8cYGtNTcCiRcUj/qeeAt5+2z02fHjLI/4RIyof8VeTlA6ytH03IgmQ+GsWt1ckiSApQa+S3buB558vBv6nnwa2bnWPHXhgy8AfVLtlUq7PWs93o6YtySmNGqpF0kYFvPceMH9+MfA/8wywfbt77OCDgbPPdkH/xBOBwYPDKUNSOshq/W5an0k0Nrq/ASUDkSrymwjiDnrvvgvMm1cM/M89B+zc6R4bORI499xi4B8wIJoyJaWDrNbvptpF35UIRCrKbyKIOujt2OGCfSHwz5sH7Nrlml1Gj3ZlmTDBTeTq1y+cMrQlKUMYa/1uknaWJ5IS+U0EYQe9d95xzTuFwD9/vmv379DBzdS98EIX+I8/3k3oSookDGGs9buJ+yxPJKXy21kctC1bXIduIfAvXOhG+nTqBIwdW+zYPe44t4SDBE+jjSTH1Fkch02b3BDOQuBftMiNrOncGRg/HrjyShf4jzkG6Nkz7tLmQ1KatkRSRmcEfq1f72brFgL/kiVuqGXXri7YF474jz4a6N497tKKSM7ojCAMb77Zcp2eV15x9/foARx7LHDDDS7wH3WUSwYitdLcB4mZEkHB6tUtA/+yZe7+nj1dh+7kyS7wjxkDdOkSb1klOzT3QRIgv01DK1a0DPzLl7v799mn5Vr8RxyRv7X4paUwj9iTPsNdUqOepqF8rD1MAq+9BvzsZ8AXv+h+ZCNGuElbv/0tcNhhwPe/75Z02LgRePBB4LLLgHHjgksCs2a5H32HDu7fWbOCed+sSGr9FI7YGxvdflQ4Yg+qfJr7IElQ62p1Yd7qXn20uZlcupS84w7y7LPJwYOLq2n2709+7nPkD39ILl7sVvEMm99VPVO22mFgkrTqaWthX7JS1weWgCD31yxuaiKXLCFvu4086yxywIDiD2rgQHLiRPL228lXXmm5JHNUgdfPjz3JwTBsUQXDWr7vsK8lnOfvXQKVv0TQ1ES+8AJ5yy3kZz7Tci3+oUPJc84h77yTXLas8lr81X6AQScIP8Ekz0eGUVy4vdaAG8X3kvQzwaSXT0jmIRHs3k3On09+97vkGWeQvXsXf5AjRpDnnkv+13+Ry5f7vwhLpR94377BH6H5CSZRBMOkiiLY1rqNvB+x5/3zR62OpJu9RHDkkeRzz5Hf+Q552mlkr17FnfCDHyS/8hXynnvIlSt9V9L7VAq8lW71BCU/P6Y8nxFEEWzqSbR5PiLO834ZtTp/B9lLBB06FCvikEPIqVPJ2bPJN95oT7VWV2kHr3Sr98i8rWCS9yOvsINtWwEtz8G+mjyfqUatzqSbvUTQvz95333kW2/5r8T2qhR4+/at68uou0x5D0Zh1UFbfUJ5TsLV6IwgOnUm3ewlgjgvXu8nKChghyPsgFzpe4sy2KVt31GSjE7WzwgAnArgVQCvAbiyredHlggqqfZj1Q8jPHEdfUbV/JHWfSdtySutstxHAKAjgL8D2B9AFwAvAji02mtiTwTVVAtW+sHUJ6726KgSkJpZpC0xjRqKYomJowC8RnI5yfcA3AvgzAi2G45KU/8LSw+EtRRB1OJY8qHSlcTCvsLY9OluVdlSYVy2VMtJSFsmTXJrTDU3u38jWngw9EXnzOxzAE4l+RXv78kAxpO8sNXzpgDwll3ESAAvhVqwGh0GjOrszmx82Q28txhYUscm+wHYUMfra9ngvsOABitZi4pA80qgcQOwKabtdkCI9dAP2HcQMLgz0GU38N4a4I2gP2ulfaeGfSTyfSLBVBdFB5HsVcsLo1hW08rc977sQ3IGgBkAYGYLWOMqelmjunBUD0WqiyLVRZGZ1bxkcxRNQ6sBDC35ewiANRFsV0REfIgiEcwH8EEzG2FmXQBMBPC7CLYrIiI+hN40RHKPmV0I4FG4EUQ/J/lyGy+bEXa5UkR14ageilQXRaqLoprrIpFXKBMRkejk4wplIiJSkRKBiEjOxZYIzOxUM3vVzF4zsyvLPG5mdqv3+GIzOzKOckbBR11M8upgsZk9a2aj4yhnFNqqi5LnjTOzJm+eSib5qQszO8nMFpnZy2b2ZNRljIqP38g+Zvagmb3o1cV5cZQzbGb2czNbZ2Zl51nVHDdrnZJczw0+lp0AcDqA38PNQzgawLw4ypqQujgWQB/v/6fluS5Knve/AB4B8Lm4yx3jftEbwCsAhnl/7xd3uWOsi6sB3Oz9vz/cZMAucZc9hLo4EcCRAF6q8HhNcTOuMwI/y06cCeBuOnMB9DazgVEXNAJt1gXJZ0m+7f05F24uRhb5XY7kIgAPAFgXZeEi5qcuvgDgVyRXAgDJrNaHn7oggF5mZgB6wiWCPdEWM3wk56D6jPea4mZciWAwgFUlf6/27mvvc7KgvZ/zy3AZP4varAszGwzgMwDuiLBccfCzX3wIQB8ze8LMFprZFyMrXbT81MVtAA6Bm6y6BMAlJJujKV6i1BQ3o1hiohw/y074WpoiA3x/TjP7CFwiOD7UEsXHT13cAuAKkk3u4C+z/NRFJwBjAHwMQHcAz5nZXJLLwi5cxPzUxSkAFgH4KIADADxmZk+R3Bpy2ZKmprgZVyLws+xEXpam8PU5zewwAD8FcBrJjRGVLWp+6mIsgHu9JNAPwOlmtofkbyIpYXT8/kY2kNwOYLuZzQEwGkDWEoGfujgPwHfoGspfM7PXARwM4C/RFDExaoqbcTUN+Vl24ncAvuj1gh8NYAvJtVEXNAJt1oWZDQPwKwCTM3i0V6rNuiA5guRwksMB3A/gggwmAcDfb+S3AE4ws05m1gPAeABLIy5nFPzUxUq4MyOY2QAABwFYHmkpk6GmuBnLGQErLDthZlO9x++AGxFyOtxVzXbAZfzM8VkX1wLoC+DH3pHwHmZwxUWfdZELfuqC5FIz+wOAxQCaAfyUZCKXb6+Hz/3iRgB3mdkSuOaRK0hmbnlqM5sN4CQA/cxsNYDrAHQG6oubWmJCRCTnNLNYRCTnlAhERHJOiUBEJOeUCEREck6JQEQk55QIRERyTolARCTnlAhEfDCzx83sZO//3zKzW+Muk0hQ4lprSCRtrgNwg5ntB+AIAJ+OuTwigdHMYhGfvCuA9QRwEsltcZdHJChqGhLxwcxGARgIYJeSgGSNEoFIG7wrPM2Cu/rTdjM7JeYiiQRKiUCkCm95518BuJTkUrhVLq+PtVAiAVMfgYhIzumMQEQk55QIRERyTolARCTnlAhERHJOiUBEJOeUCEREck6JQEQk5/4/6x2uvNHTjYEAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_3_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_9_0.png" }, "needs_background": "light" }, @@ -351,7 +384,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d07dd09e", + "metadata": { + "editable": true + }, "source": [ "This example serves several aims. It allows us to demonstrate several\n", "aspects of data analysis and later machine learning algorithms. The\n", @@ -365,7 +401,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6f6e8bb4", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = 10x+0.01 \\times N(0,1),\n", @@ -374,7 +413,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b2b85fd5", + "metadata": { + "editable": true + }, "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", @@ -392,7 +434,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "329ad4bb", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\chi^2 = \\frac{1}{n}\n", @@ -402,7 +447,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f3e5c4ad", + "metadata": { + "editable": true + }, "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", @@ -430,7 +478,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b0ffe38f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n", @@ -439,7 +490,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bfdd9400", + "metadata": { + "editable": true + }, "source": [ "The squared cost function results in an arithmetic mean-unbiased\n", "estimator, and the absolute-value cost function results in a\n", @@ -454,6 +508,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "f3a56404", "metadata": { "collapsed": false, "editable": true @@ -461,14 +516,14 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_11_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_17_0.png" }, "needs_background": "light" }, @@ -497,7 +552,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b77ca4ff", + "metadata": { + "editable": true + }, "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", @@ -516,6 +574,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "7c53db00", "metadata": { "collapsed": false, "editable": true @@ -526,25 +585,25 @@ "output_type": "stream", "text": [ "The intercept alpha: \n", - " [2.09170751]\n", + " [1.92272314]\n", "Coefficient beta : \n", - " [[4.91479093]]\n", + " [[5.13117061]]\n", "Mean squared error: 0.21\n", - "Variance score: 0.90\n", + "Variance score: 0.92\n", "Mean squared log error: 0.01\n", - "Mean absolute error: 0.35\n" + "Mean absolute error: 0.36\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAkGElEQVR4nO3de5RdVZ0n8O+3ikqgQhQJEelA3YDaoNiAJAKCD1SchsDosGRcYiUGe4YMjdrYjd26CChjk1GnRwTtFTEgGq1SlIeoDGOjI4gCIgEDJgRGhIR3ExIgQCBQVb/545xr3cc+955773nsc8/3s1atVJ176p59D8X+nb1/+0Ezg4iIlNdA3gUQEZF8KRCIiJScAoGISMkpEIiIlJwCgYhIySkQiIiUnAKBJIbk20nem3c5+gHJ9SSPTuF99yR5I8lnSX6Z5FkkL0n6OlIs1DwC6RTJjQD+q5n9Iu+yRCF5LoDlAHYAmABwN4AzzeyWPMuVN5LnAHgzgA9Yw//8JOcDeADAkJlN5FA8yYlaBFJ4JHeKeOkHZrYrgD0AXA/g8hSuTZJF+v+oAuDuxiAg5VakP2DxHMmjST5c8/NGkp8ieRfJZ0j+gOTONa+fQHItyadJ3kzyoJrXPkPyT2EXxt0kT6x57RSSN5H8CsmtAM5tVa7w6XYcwDySc8P3eCXJb5J8jOQjJM8jORi+Nhh2mzxJ8gGSHydp1YBD8gaSK0jeBGA7gP1IHkDy5yS3kryX5Adryrso/AzPhtf6VHh8D5LXhJ9/K8lfV4NKeO+OCb+fSfICko+GXxeQnFl7z0meSfKJ8PN8NOK/z7cBLAXwTySfI3kMyXNJjoWn3Bj++3T4+ltb3VfpH1FPUiJJ+SCAYwG8COAmAKcAuIjkoQAuBfAfAawBsBjAT0jub2Y7APwJwNsBPA7gPwMYI/k6M3ssfN/DAVwG4NUAhloVgOQMAB8BsAXAU+Hh1QD+HcDrAMwCcA2AhwB8A8CpAI4DcAiA5+FuSSwJz7k3/P11AD4bHjsIwHUk15vZegDfBPBBM/s1yVcB2Dd8jzMBPAxgbvjzEQBcT+rLw9cOCV//MYCzAZwTvv4aAK8EMA/AewFcQfJqM3uq9k3M7BSSAPCwmZ0d3pu31ZzyDgRdQ7upa6hc1CKQtH3VzB41s60AfoqgMgOCyvYbZnarmU2a2WoE/flHAICZXR7+3pSZ/QDAHwEcVvO+j5rZ18xswsxeiLj2B0k+DeCF8HonmdkEyT0RVNifNLPnzewJAF8B8KHq7wG40MweDivTLzre+9tmtj6sMI8FsNHMvhWW5w4AVwI4KTz3ZQBvJPkKM3sqfL16fC8AFTN72cx+HdFlMwrg82b2hJltBvDfEQQi1LzP58P3uBbAcwD2j7gnIk0UCCRtj9d8vx3AruH3FQBnht0iT4cV9j4A/gIASH6kptvoaQBvQtDXX/VQjGv/0Mx2A7Angif2BTXXHgLwWM37fwNB6wJhGWrf33Wt2mMVAIc3fJZRBE/qAPABAIsAbCL5q5oul38BcB+C1sP9JD8T8Tn+AsCmmp83hceqtjQ8wdfeZ5G21DUkeXkIwAozW9H4AskKgIsBvAfALWY2SXItANacFjvZaWZPkvxvAG4j+b3w2jsA7BHRBfIYgL1rft7H9bYNn+VXZvbeiOvfBuD9JIcAfBzADwHsY2bPIugeOpPkgQCuJ3mbmf3fhrd4FEGwWR/+PBIeS5oSyCWlFoF0a4jkzjVfnT5UXAzgNJKHhyNvZpE8nuRsBH3uBmAzAITJzzf1UlgzuwfAvwH4pzDPcB2AL5N8BckBkq8l+c7w9B8COIPkPJK7Afh0m7e/BsBfklxCcij8egvJN5CcQXKU5CvN7GUA2wBMhp/rBJKvY9BxXz0+6Xj/7wM4m+RcknsgyEWMOc7r1WYAUwD2S+G9xWMKBNKtaxH0vVe/zu3kl81sDYJ++39FkMC9D0EiGWZ2N4AvA7gFQUL3rxAkmnv1LwCWkXw1guTxDATzC54CcAWC/nogCFLXAbgLwO8RfNYJuCtphE/2/wFBjuFRBN1hXwIwMzxlCYCNJLcBOA1BYhwAXg/gFwj69G8BsNLMbnBc4jwECfW7APwBwB3hsUSZ2XYAKwDcFHZxHZH0NcRPmlAm0gbJ4wBcZGaVvMsikga1CEQakNwlHPu/E8l5AD4H4Ed5l0skLakHApL7h6M/ql/bSH4y7euK9IAIhmg+haBraAOCfnmRvpRp1xCDmZuPADjczDa1O19ERNKXddfQewD8SUFARMQfWc8j+BCCoXBNSC4DsAwAZs2ateCAAw7IslwiIunbuhXYtAmYmpo+NjAAVCrA7rt3/n5TUwAJkLj99tufNLO57X+pWWZdQ+F6L48CONDM/r3VuQsXLrQ1a9ZkUi4RkczMnx8EgkaVCrBxY/z3ufNO4JBDgu9PPRVYtQokbzezhd0UK8sWwXEA7mgXBERE+taDD3Z2vNHLLwMzZtQf+8d/7K1MyDZHcDIiuoVEREphZKT98fHxoOUwMBD8Oz4eHCfrg8A++wBmwOtf33OxMgkEJIcRLI97VRbXExHx0ooVwPBw/bHh4eA4EFT6y5YF3Udmwb+nnBIEgVovvhi/FRFDJoHAzLab2RwzeyaL64mIeGl0FFi1KsgJkMG/q1YFxwFg+XJg+/b635moWRfxqquCADFzJpKkmcUiImlxdfOMjgaJ4amp4N9qEABaP+WbASeeGP16DxQIRCRfUX3iRefq5lm2rLvPV0l3mSsFAhHJT5KVpW9c3TzbtwfHG513XtBV5BrOX5tDSImXq49qHoFISSQ1rt5HAwPuip2cnlD2+OPAXnvVv3788cC6dUE30chIEARqu48iFGUegYhIvV7H1ftifDx40q+tvEdG3EGuOlS0cSQQ4A4cGVDXkIjkJ864et9FdW8tWuQeKrppU3MQ2LEjtyAAKBCISJ7ajasvgqhcwLXX1g8VnTWr+byLLw4CQONs4YwpRyAi+XJ1q8ToE/dGu1zAjh3Azjs3v55w3ascgYgU1+hosSr+Rq1yAR7lAVpR15CISC9c3VtAc3C46SYvgwCgQCAi0pvRUWDpUmBwMPocM+DII7MrU4fUNSQi0ovxcWD1amBysvk1T1sAjdQiEBG/+LLkRNxyLF7cPBoISH1ZiCSpRSAi/qiOya9WrNUx+UC2CeU45XAlgmsVaFKcho+KiD98WXIiqhyDg8GQ0Dj1ZsZl7mX4qLqGRMQfviw5EXW9ycnmIDA21tukOA+6whQIRCRdnVR0viw5Efd6lUr7zWZa8WT1VXUNiUh6GvvageBpOaqi7PT8tLjK4VK7kmg3EuwKU9eQiPipkzX5gd6eroHkullOPrl9EAA6a6m4yuZLV5iZefe1YMECE5E+QJoFnR71X2Ty1xobMxserr/O8HBwvBOu8rZ677Exs0ol+EyVivt6Ub8/Z477epVKxx8fwBrrss5Vi0BE0pNln3+nrY9GZPOQ0LPPDqrmqJYKEK+PP6psgB+rr3YbQdL8UotApMBqn5DnzDEbGur9KT2OblsfV17p/r04KpV4T/Suc6pli9OiiAE9tAg0oUxEktOYZN2yJVhrf84cYOvWdJeZbrcjmEuvq4PG6eMfH4/ej3hkxIvVV9U1JCLJcXWBvPQSsOuuweiajRvTq/Q62eTG1Q20bVvnawPF6fpavjx6vwJPNuBRIBCR5OQ5CsbVj790aVARV0fquAIAEFTUs2d3fs04wcfVSqle05N9GBQIRCQ5eU8IGx0NWh1TU0FlvHp1fSK3UbW3vpfrtRvuGrU8datlqzOmQCAiyfFpD2JXN1VVrwGgVm3wcXV9uZanbnU8BwoEIpKcXieEJSmqS6bdqqFJi1qOuvF4jmsOKRCISLLaPSE3SroCPPXU1pV91usWxWkl5bzmkAKBiOQn6QqQBC65JPr1PLqp4rSSep0M1yMtOici+Ulq0TVXC2BqCvje94LK9MEH053D0KuBgeghpjEXtfN+0TmSu5G8guQ9JDeQfGsW1xURz/U63NQ1HPTAA4NKley8myovOY+2yqpr6EIAPzOzAwAcDGBDRtcVER9V8wJRPRLtKsDf/S56PsC6dT0XL3M5j7ZKfYkJkq8A8A4ApwCAmb0E4KW0rysinmq31n+7CrDXZSF8VG2p5NSNlUWLYD8AmwF8i+TvSV5CclbjSSSXkVxDcs3mzZszKJaI5KLV+P5Ww01d3UB//GN3QcCD7SGb5NiNlXqymORCAL8FcJSZ3UryQgDbzOycqN9Rslikj3WaGB0aAiYmmo93W3f5sgtawnxPFj8M4GEzuzX8+QoAh2ZwXRFJWhJP0nEToxMTQXBoDAK9zgrOeaimj1IPBGb2OICHSO4fHnoPgLvTvq6IJOz004ElS3of8x8nMUoGLYFaSS0L4cv2kB7JatTQJwCMk7wLwCEA/kdG1xWRJIyPAxdd1FwRd/Mk3WqClSsPELWMc7fyXhjPQ5kEAjNba2YLzewgM/tPZvZUFtcVkYS0qoyrT9KddBs1JkYfeSR6NNB55/VW9kY+LYznCe1QJiLtteo2GRlpTsBWu42A9gnYrIeD5jxU00daa0hE2ovqNqnustVNAjZqk5jh4fSHcxZlxnFGFAhEpD1XdwoJnHZaUIl2koCNCgBVJR/BkwcFAhFpz5Xg/e53gZUrg9fjJGA3bYq/F0CJR/DkQYFAROJp1Z3SLgFLBgnkWmbRm7aUeARPHhQIROLwcUkCn0QNCV28uLkVcPnl08ngMo3g8flvyMy8+1qwYIGJeGNszGx4uDqdKfgaHg6Oi9vee9ffr+qXy9iYWaViRgb/9uN9zeBvCMAa67LO1cY0Iu0ktXlKWfTj6qC9yuBvqJe1hjSPQKQdLUkQjwJANM//hpQjEGmnqEsSZNUn7RoOusceCgK1PP8bUiAQaceHhGanlXrSm8K7fOxj0a0A7SlSz4e/oVa6TS6k+aVksXgnz4RmN4nGSsWdrK1UkimT672VQG8t5b8hKFks0se6STTG3fxlfLyzNXfaTQhTAj03vm9MIyK96CbRGKdPupPuo3bLQsQpk3hLgUDEd90kGuP0ScdZKG77dncA0IzgvqJAIOK7bhKNrTZ/qWrX0iCBWbPqX6tmBHxPfkpHFAhEfBenUo/6vVZLLUc9vZs1twKWLavPOXRbJvGSksUiZdW4mUwUD+sIaaZksYhMizvnoPap3qXaDSR9T4FApJ+4RgItWTK9DHRjUFi8uHlo6osvKgCUjAKBSNHVtgCWLm3u6qlW6rXDQ6OGg5oBM2emXmTxixadEymyxn7+ycnW52/fHrQCGqkFUGoKBCJF5poL0AkFAIG6hkSKrduZvNdcoyAgf6ZAIFJku+/uPj44GP07Y2PA8cenUx4pJAUCkaIaHwe2bWs+PmOGO1dQqQRBQJO+pIECgYhv4s4DWL4cePnl5uMvvVT/c3U+gGt2sQgUCET80smKoO3yA/PmKQ/Qiax2dPOQRg2J+CRqRdClS4Pva5/oR0bc+xQACgCdahyGWw3AQClaUWoRiB9K/DRWJ+opf3KyuWXgCgLDw0EeQDoTZ0nuPpZJICC5keQfSK4lqdXkpF4W++sWRav1/KsVk2tWsFYA7U03m//0kSxbBO8ys0O6XR1P+ljJn8bquNb5r+VqBZhFLzVdJHm2CrvZ/KePqGtI8lfyp7E61RVBW80DqOqn1UHzbhWWfKOdrAKBAbiO5O0kl7lOILmM5BqSazZv3pxRscQLJX8aazI6CqxeHd0y6KcAUJV3q7DkG+1kFQiOMrNDARwH4GMk39F4gpmtMrOFZrZw7ty5GRVLvBDnaaxsyeTFi5srxve9r/8CQJUPrcJ2O7r1sUwCgZk9Gv77BIAfATgsi+tKQbR7Gsu72yBL73xn9PLQP/5x9uXJilqFuUp9q0qSswAMmNmz4fc/B/B5M/tZ1O9oq0qpM3++O0laqQRPbv0iKgCUgWvbzOHhUnXP9Mr3rSr3BPAbkncC+B2A/90qCIg08aHbIE2u4aATE+UJAkDp++jzlvrMYjO7H8DBaV9H+ljUDNqidxu4WgBAuQJArdFRVfw50fBR8V/WQ/vSTkzfdFN0N1BZg4DkSoFA/Jdlt0G7xHSvQYIE3va2+mO9BICyjaaSVKSeLO6GksWSm1aJ6RUruk9ouloA118PHH1092VVglVq9JIsViAQAYJKdfny6NU8yehcRavRS2nmAcoymkpi6SUQaBlqEdeTdaORkc5GL01NuZeJSPLBq99HU0lmlCMQcS1vUKuamI4apTQwUN83TzYHgTQSwZqEJQlRIBBp9QRdm5iOWhm0uleAaz7AW96S3kigki+UJslR15BI3L7/agJ26dLmzeFdLYq082/V8ixfHgSzkZEgCChRLB1Si0Ckkyfr0dGg/7+VLOcDdLNQmoacSgMFApFO5ylE9cHvvbf/E8LKtICfxKZAIAJEP1k3Pj2T0XsFf/GL2ZW3W3mv+y9eUo5AJErjsNKoOQYAsMsu2ZSpVxpyKg5qEYhEaTWsdGysPq+wZUsxulg05FQcFAiknOIkTFvNMi5qF0uSQ06VdO4bCgRSPu0SpvPmRS8NAXQ+y9gnSS3gp6RzX9FaQ1I+rdboaZUHAKYXdYtal6gs6/xonSPv+L5DmYhfop7aGyu2qakgF+B6ei77rN6itojESYFAyidOYnRsDNh3X2DJkuDn7363flhp2bdWVNK5rygQSPmsWAHMnOl+zSwIAnH6v7uZ1Zu2rBK4ZW8R9RkFAimfxYuBHTvqj42NTc8KLuqIoCwTuGVvEfUZJYulPFwjgdauBQ4+uP7YwIB7qQiy/TpDeVICt9SULJb+k2QXh2t5aCCo7BuDAFDc/m8lcKVLCgTin6S6OF5+OToAtGoJF7X/u6gBTHLXNhCQ/AVJx2OTSEqS6KMngRkz6o/FXR662/7vvGfaFjWASe7a5ghIHgrgfwHYBOAsM3ss7UIpR1ByvfTRu1oAJ5wA/PSnyZQtimvf4+rksywTqOPj2qimpHrJEcROFpP8AIDPArgKwP80sxe6uWAcCgQl103S88wzgfPPbz6e1WAIJWolZ6kni0kSwL0Avg7gEwD+SHJJNxcUaavTLg6yOQhkuUsYoEStFFqcHMFvADwC4CsA5gE4BcDRAA4juSrNwklB9dpXHreP3jUa6Nln89klTIlaKbA4OYI3AVhvjhNJbjCzNyRdKHUNFVgWfeVRK4PmOSfGlxyBlFaqXUNmts4VBELHd3NR6WNpzsp94IHuhoNmQTNtpcB6mkdgZvcnVRBJUZbDGtPqKyeB/farP+ZDAKjl49pDIjFkNqGM5CDJ35O8JqtrCrLfQCTpvnJXHmB83K8AIFJwWc4sPgPAhgyvJ0D2C6glNalpzpzobqAPf7j78olIk0wCAcm9EeQTLsnielIj62GNSfSVk8DWrfXH2nUDRXV/5T3bV6QAMll9lOQVAL4AYDaAT5nZCY5zlgFYBgAjIyMLNrXbMlDiKdJEp6gWQDtRI3aWLgVWr9ZIHikFr1cfJXkCgCfM7PZW55nZKjNbaGYL586dm3axymPRouYK1rf1Z1x5gJkzo4NA41P+GWe4u79WrSrmvgIiGcuia+goAO8juRHAZQDeTXIsg+vK+HjwRFxboZLBk7IPT8Q/+lF0K+DFF92/40p+b9niPndy0n1cs31F6mS6MQ3JoxHRNVRLE8oS4nO3ULfdQFGfyWVw0B0MfPj8IgnzumtIcuTj+jeubqD77os/HDRu2YeHg5aDlmUWaSvTQGBmN7RrDUiCfFr/ptUuYa99bfz3iSr7nDnNI5VWrtRsX5EY1CLoZz5sVPLCC8kuCxH1mS680D2rV7N9RdpSIOhnea9/QzZX2r0uC5H3ZxLpQ5kmi+NSsrjgolYHrVS0Y5ZISpQs7mdFmhn7D/8QHQSA9Nc5EpGu7JR3AaSFxhmz1YoU8O+p2hUAKpXmoZ7VCV2+lV+kxNQi8FnWC8Z1wzUaqNp3HzXeXxO6RLyiQOCzvOcBnH46sNNOQcW+007Bz1VRw0GB6Rm/Ua9r+0YRrygQ+CzPeQCnnw58/evTM3MnJ4OfTz45uhuokZn/6xyJiAKB1/KcB7Bqlfv4ZZfV/1wdDhrVSjHTUE8RzykQ+CzPMfNRC7ZVXXdd/XyAqFZKdV0fTegS8ZZGDfludDSfyjNqwTbAPSFsxQr3ngDqBhLxnloEZdVqfoJZdBD42791H9eMX5HCUougjFrNT1i82P07g4PBOStXNr/X8uVBjmBkRDOHRQpILYKiSHKGcdT8hMYgcMop08ngiQl3EGjcJCbPmcNFmoUt4hEFgiJIusKNMw/BDDjmmNYVq08T3nwLSiIFokXniiDJncbGx4OtKtslgqM2hK/t9x8YcCeOyWCUUJZ83o1NJANadK7fJTXDuFq5u4LALrsAYzVbScd52vdp45u8Z2GLFJgCQREkVeEuXtxcuQNBIvjii+uTvHEqVh82vqnyKSiJFIwCQRH0WuFu3956eeipqeaRPnEqVp+GjPoUlEQKRoGgCHqpcElg1qzW57gq/bgVqy9bQfoUlEQKRsnifuVqAZxxRtAF1CoBXEtzBEQKQ8nisnKNm//Sl6I3i7/ggs6emn152heRVKlFUFSu4Z0uHv73FZHkqUVQRq7hnbUmJ5MNApq1K9K3tNZQUbUaH590K6BIeyeLSMfUIiii6jIKLpVK8k/vPi0lISKJU4ugaFrNBxgeBhYtSv7pXbN2RfqaWgRF4dos/vzz60cALV0ajAJK+ulds3ZF+poCge++8IXo4aB///fTwztXrABWr45eTK6Xp3fN2hXpa+UMBEUYAWMWBICzzmo+PjbWXP52o4h6eXrXrF2Rvpb6PAKSOwO4EcBMBDmJK8zsc61+J9V5BHGWV85bVAsAiC5/qyDg2+cTkcT5Po9gB4B3m9nBAA4BcCzJIzK4rpvPI2BceYCrr64fIRRV/sHB6PfcZRdgyRJ/Wz8ikqvURw1Z0OR4LvxxKPzKb7qrjyNg7rgDWLCg+birtRZVzsnJ5pbB0FAQCLZsCX7W+H8RccgkR0BykORaAE8A+LmZ3eo4ZxnJNSTXbN68Ob3C+DYChmwOAtV9gmtV8xqt5g809uO/4hXASy/Vn+dL60dEvJFJIDCzSTM7BMDeAA4j+SbHOavMbKGZLZw7d256hfFlBIyrG+iFF9wVfe1+vC7V8jcuErd1q/t8jf8XkRqZjhoys6cB3ADg2CyvWyePETC1o5Rmz24OAMPDwUignXd2/36rEUGDg9NP+Y39/761fkTES6kHApJzSe4Wfr8LgGMA3JP2dVvKcnnl2qd5M+C555rP2b49OCcqkdvqCb46b6Da/1/7Hr60fkTEa1m0CPYCcD3JuwDchiBHcE0G1/VDu/H9Va367uM+wTe+h8b/i0gM2o8gTUNDwMRE/PPJoJXSKO7eA63eQ0T6mu/zCMrn5puDCrmTIABEP/m7nuznzOnsPUREIigQJI0Ejjqq/lhjP/3QEDBjRvM5rfruG/MaF17od/9/EZbxEBEACgTJcQ0HnZoKEsSNT/Pf+hZw6aWd9d03VqyAv/3/jQlyVyJbRLyhHEGvli4FvvOd+mPXXAMcf3xy1yjC+ki15s93z3moVILWjIgkrpccgQJBt558EnBNfEvjfhatYh0YcN8HJbJFUqNkcdbI5iDgWhYiKT6uj9SKJrKJFIoCQSdceYBnnkkvAFQVrWLVRDaRQlEgiOPaa5sDwG67BccOOij9JGjRKlZNZBMpFG1e38rUlHud/+Fh4Omng++zWNq5+r7LlwfdQSMj04vM+Wp01O/yicifKVkcJWqXsKIlbkWkFMqZLE5rwtKJJzYHgXvumc4DFC1xKyLSRjECQWOlf/rpyU9YeuCBIABcffX0sXe9K3j//fefPla0xK2ISBv+BwLXLNWLLup+32FXS4IE9tuv/jwz4Je/bP79oiVuRUTa8D8QuJZxjsprtOuecQWVxYvrz5mYaD0cVCNiRKTP+J8sjpql6tIuYRuV6AWAyy8HTjqpk2KKiHijv5PFUX3vru0e23XPRLUYSAUBESkt/wPBokXuSv+00zrrniGjWxZK9IpIifk9oWx8HFi9ur4CJ4MVP1eujPceZ5/duqWgRK+IlJzfgSAqUXztte1/d+NGYN996499//vBZu9FmqErIpIyvwNBt5O3GruSXvMa4LHHpn9WxS8i8md+5wjiTt6qzg1wrQ5qVh8EikZbPopIyvwOBHEmb42PA3/zN83DQs8/P/3lodOmLR9FJAP+zyMYH4/u03/uOWD2bPeb9MMicFrgTkRi6u95BKOjQaU3NRX8Ww0Cu+8eHQQAvxaB67Z7RwvciUgG/A8Ejb72tSAP8NRTrc/zZW5AL907WuBORDJQnECwcWMQAP7u76aPrVsHjI35vQicawhs3AXytMCdiGSgGIFg/fr6OQHnnBM8XR94oP+LwPXSveP7ZxORvuB/shgAbrkFOPLI4HsPy9uSEr4ikoH+ThYDwFvfGgSAogUBQN07IuK9YgSCIlP3joh4rjyBIM8ZulFDYEVEPJB6ICC5D8nrSW4guZ7kGWlfs4lm6IqIRMqiRTAB4EwzewOAIwB8jOQbM7jutF6GcIqI9LnUA4GZPWZmd4TfPwtgA4B5aV+3jmboiohEyjRHQHI+gDcDuNXx2jKSa0iu2bx5c7IX1gxdEZFImQUCkrsCuBLAJ81sW+PrZrbKzBaa2cK5c+cme3EN4RQRiZRJICA5hCAIjJvZVVlcs46GcIqIREp9hzKSBPBNABvM7Py0rxdpdFQVv4iIQxYtgqMALAHwbpJrw69FGVxXRERiSL1FYGa/AcC2J4qISC7KM7NYREScFAhEREpOgUBEpOQUCERESk6BQESk5BQIRERKToFARKTkFAhEREpOgUBEpOQUCERESk6BQESk5BQIRERKToFARKTkFAhEREqOZpZ3GZqQfBbAvXmXwxN7AHgy70J4QPdhmu7FNN2Lafub2exufjH1/Qi6dK+ZLcy7ED4guUb3Qvehlu7FNN2LaSTXdPu76hoSESk5BQIRkZLzNRCsyrsAHtG9COg+TNO9mKZ7Ma3re+FlslhERLLja4tAREQyokAgIlJyuQUCkseSvJfkfSQ/43idJL8avn4XyUPzKGcWYtyL0fAe3EXyZpIH51HOLLS7FzXnvYXkJMmTsixfluLcC5JHk1xLcj3JX2VdxqzE+H/klSR/SvLO8F58NI9ypo3kpSSfILku4vXu6k0zy/wLwCCAPwHYD8AMAHcCeGPDOYsA/B8ABHAEgFvzKKsn9+JIAK8Kvz+uzPei5rxfArgWwEl5lzvHv4vdANwNYCT8+dV5lzvHe3EWgC+F388FsBXAjLzLnsK9eAeAQwGsi3i9q3ozrxbBYQDuM7P7zewlAJcBeH/DOe8H8B0L/BbAbiT3yrqgGWh7L8zsZjN7KvzxtwD2zriMWYnzdwEAnwBwJYAnsixcxuLciw8DuMrMHgQAM+vX+xHnXhiA2SQJYFcEgWAi22Kmz8xuRPDZonRVb+YVCOYBeKjm54fDY52e0w86/Zz/BUHE70dt7wXJeQBOBHBRhuXKQ5y/i78E8CqSN5C8neRHMitdtuLci38F8AYAjwL4A4AzzGwqm+J5pat6M68lJug41jiONc45/SD25yT5LgSB4G2plig/ce7FBQA+bWaTwcNf34pzL3YCsADAewDsAuAWkr81s/+XduEyFude/DWAtQDeDeC1AH5O8tdmti3lsvmmq3ozr0DwMIB9an7eG0Ek7/ScfhDrc5I8CMAlAI4zsy0ZlS1rce7FQgCXhUFgDwCLSE6Y2dWZlDA7cf8fedLMngfwPMkbARwMoN8CQZx78VEAX7Sgo/w+kg8AOADA77Ipoje6qjfz6hq6DcDrSe5LcgaADwH4ScM5PwHwkTALfgSAZ8zssawLmoG294LkCICrACzpw6e9Wm3vhZnta2bzzWw+gCsAnN6HQQCI9//IjwG8neROJIcBHA5gQ8blzEKce/EggpYRSO4JYH8A92daSj90VW/m0iIwswmSHwfwbwhGBFxqZutJnha+fhGCESGLANwHYDuCiN93Yt6LzwKYA2Bl+CQ8YX244mLMe1EKce6FmW0g+TMAdwGYAnCJmTmHFRZZzL+LfwbwbZJ/QNA98mkz67vlqUl+H8DRAPYg+TCAzwEYAnqrN7XEhIhIyWlmsYhIySkQiIiUnAKBiEjJKRCIiJScAoGISMkpEIiIlJwCgYhIySkQiMRA8nqS7w2/P4/kV/Muk0hS8lprSKRoPgfg8yRfDeDNAN6Xc3lEEqOZxSIxhTuA7QrgaDN7Nu/yiCRFXUMiMZD8KwB7AdihICD9RoFApI1wh6dxBLs/PU/yr3MukkiiFAhEWgiXd74KwJlmtgHBKpfn5lookYQpRyAiUnJqEYiIlJwCgYhIySkQiIiUnAKBiEjJKRCIiJScAoGISMkpEIiIlNz/B3+jQtX246aDAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_13_1.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_19_1.png" }, "needs_background": "light" }, @@ -583,7 +642,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "289acdad", + "metadata": { + "editable": true + }, "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" @@ -591,7 +653,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ed56c208", + "metadata": { + "editable": true + }, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -601,7 +666,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a2774f06", + "metadata": { + "editable": true + }, "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", @@ -619,7 +687,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1360472a", + "metadata": { + "editable": true + }, "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", @@ -628,14 +699,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "777f7aad", + "metadata": { + "editable": true + }, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "b0182619", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -644,7 +721,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "925427a2", + "metadata": { + "editable": true + }, "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", @@ -653,7 +733,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4e1404d3", + "metadata": { + "editable": true + }, "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", @@ -662,7 +745,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "07fcae5f", + "metadata": { + "editable": true + }, "source": [ "We present the \n", "squared logarithmic (quadratic) error" @@ -670,7 +756,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ad8627ec", + "metadata": { + "editable": true + }, "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", @@ -679,14 +768,16 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "02d8662a", + "metadata": { + "editable": true + }, "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", "as population counts, average sales of a commodity over a span of\n", "years etc. \n", "\n", - "\n", "Finally, another cost function is the Huber cost function used in robust regression.\n", "\n", "The rationale behind this possible cost function is its reduced\n", @@ -699,7 +790,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d6c17489", + "metadata": { + "editable": true + }, "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", @@ -708,13 +802,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7c75b052", + "metadata": { + "editable": true + }, "source": [ "Here $\\boldsymbol{a}=\\boldsymbol{y} - \\boldsymbol{\\tilde{y}}$.\n", "\n", - "\n", - "\n", - "\n", "We will discuss in more\n", "detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n", "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn." @@ -723,6 +817,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "6c136271", "metadata": { "collapsed": false, "editable": true @@ -730,14 +825,14 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_27_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_33_0.png" }, "needs_background": "light" }, @@ -747,7 +842,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.004999999999999984\n" + "0.004999999999999996\n" ] } ], @@ -786,7 +881,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bd2f6e5a", + "metadata": { + "editable": true + }, "source": [ "Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding\n", "energies. A basic quantity which can be measured for the ground\n", @@ -798,7 +896,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1bc85e33", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\Delta M(N, Z) = M(N, Z) - uA,\n", @@ -807,14 +908,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "70c5d807", + "metadata": { + "editable": true + }, "source": [ "where $u$ is the Atomic Mass Unit" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "8ad3a692", + "metadata": { + "editable": true + }, "source": [ "$$\n", "u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n", @@ -823,14 +930,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c885dbac", + "metadata": { + "editable": true + }, "source": [ "The nucleon masses are" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "753ce14d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "m_p = 1.00727646693(9)u,\n", @@ -839,14 +952,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0aada199", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "8f72f12c", + "metadata": { + "editable": true + }, "source": [ "$$\n", "m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n", @@ -855,7 +974,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ffd008d4", + "metadata": { + "editable": true + }, "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", @@ -868,7 +990,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7cab8713", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n", @@ -877,7 +1002,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f5ab1ec7", + "metadata": { + "editable": true + }, "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" @@ -885,7 +1013,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "76247038", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n", @@ -894,11 +1025,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ead3a52e", + "metadata": { + "editable": true + }, "source": [ "where $\\Delta_H c^2 = 7.2890$ MeV and $\\Delta_n c^2 = 8.0713$ MeV.\n", "\n", - "\n", "A popular and physically intuitive model which can be used to parametrize \n", "the experimental binding energies as function of $A$, is the so-called \n", "**liquid drop model**. The ansatz is based on the following expression" @@ -906,7 +1039,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "00776fb1", + "metadata": { + "editable": true + }, "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", @@ -915,14 +1051,14 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "be5156b5", + "metadata": { + "editable": true + }, "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", "\n", - "\n", - "\n", - "\n", "To arrive at the above expression we have assumed that we can make the following assumptions:\n", "\n", " * There is a volume term $a_1A$ proportional with the number of nucleons (the energy is also an extensive quantity). When an assembly of nucleons of the same size is packed together into the smallest volume, each interior nucleon has a certain number of other nucleons in contact with it. This contribution is proportional to the volume.\n", @@ -935,22 +1071,29 @@ "\n", "We could also add a so-called pairing term, which is a correction term that\n", "arises from the tendency of proton pairs and neutron pairs to\n", - "occur. An even number of particles is more stable than an odd number. \n", - "\n", - "\n", + "occur. An even number of particles is more stable than an odd number." + ] + }, + { + "cell_type": "markdown", + "id": "fdcb3ae8", + "metadata": { + "editable": true + }, + "source": [ "### Organizing our data\n", "\n", "Let us start with reading and organizing our data. \n", "We start with the compilation of masses and binding energies from 2016.\n", "After having downloaded this file to our own computer, we are now ready to read the file and start structuring our data.\n", "\n", - "\n", "We start with preparing folders for storing our calculations and the data file over masses and binding energies. We import also various modules that we will find useful in order to present various Machine Learning methods. Here we focus mainly on the functionality of **scikit-learn**." ] }, { "cell_type": "code", "execution_count": 5, + "id": "44191ff4", "metadata": { "collapsed": false, "editable": true @@ -969,7 +1112,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -994,7 +1137,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e704ea13", + "metadata": { + "editable": true + }, "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." ] @@ -1002,6 +1148,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "083ef002", "metadata": { "collapsed": false, "editable": true @@ -1023,7 +1170,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b052d9d1", + "metadata": { + "editable": true + }, "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", @@ -1031,13 +1181,13 @@ "always useful (unless you have a binary file or other types of compressed\n", "data) to actually open the file and simply take a look at it!\n", "\n", - "\n", "In particular, the program that outputs the final nuclear masses is written in Fortran with a specific format. It means that we need to figure out the format and which columns contain the data we are interested in. Pandas comes with a function that reads formatted output. After having admired the file, we are now ready to start massaging it with **pandas**. The file begins with some basic format information." ] }, { "cell_type": "code", "execution_count": 7, + "id": "0f34c048", "metadata": { "collapsed": false, "editable": true @@ -1069,7 +1219,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "807d6c8f", + "metadata": { + "editable": true + }, "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", @@ -1080,6 +1233,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "f8861251", "metadata": { "collapsed": false, "editable": true @@ -1122,7 +1276,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a8743cbd", + "metadata": { + "editable": true + }, "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", @@ -1138,7 +1295,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, + "id": "61461479", "metadata": { "collapsed": false, "editable": true @@ -1155,7 +1313,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bf880ec9", + "metadata": { + "editable": true + }, "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 $n\\times p$, 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." @@ -1163,7 +1324,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, + "id": "9ec9ba03", "metadata": { "collapsed": false, "editable": true @@ -1181,7 +1343,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7c67387f", + "metadata": { + "editable": true + }, "source": [ "Note well that we have made life simple here. We perform a fit in\n", "terms of the number of nucleons only. A more sophisticated fit can be\n", @@ -1193,7 +1358,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, + "id": "2a5aa5e9", "metadata": { "collapsed": false, "editable": true @@ -1206,7 +1372,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2ea94fce", + "metadata": { + "editable": true + }, "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." @@ -1214,7 +1383,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, + "id": "4c136044", "metadata": { "collapsed": false, "editable": true @@ -1244,14 +1414,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5dfc3135", + "metadata": { + "editable": true + }, "source": [ "As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**!" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, + "id": "abbc4dbd", "metadata": { "collapsed": false, "editable": true @@ -1292,7 +1466,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "db107026", + "metadata": { + "editable": true + }, "source": [ "With a deeper and deeper tree level, we can almost reproduce every\n", "single data point by increasing the max depth of the tree.\n", @@ -1304,14 +1481,14 @@ "we will most likely fail miserably in our attempt at making\n", "predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.\n", "\n", - "\n", "The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) \n", "functionality." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, + "id": "86dcf5be", "metadata": { "collapsed": false, "editable": true @@ -1351,14 +1528,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "16a42333", + "metadata": { + "editable": true + }, "source": [ "## Linear Regression, basic elements\n", "\n", - "\n", "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureAug27.mp4?vrtx=view-as-webpage).\n", "\n", - "\n", "Fitting a continuous function with linear parameterization in terms of the parameters $\\boldsymbol{\\beta}$.\n", "* Method of choice for fitting a continuous function!\n", "\n", @@ -1381,8 +1559,6 @@ "For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n", "Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n", "\n", - "\n", - "\n", "Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\\boldsymbol{x} =[x_0, x_1,\\dots, x_{n-1}]^T$. \n", "The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n", "\n", @@ -1395,7 +1571,6 @@ "\n", " The goal of the regression analysis is to extract/exploit relationship between $\\boldsymbol{y}$ and $\\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things.\n", "\n", - "\n", "Consider an experiment in which $p$ characteristics of $n$ samples are\n", "measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix \n", "$\\mathbf{X}$.\n", @@ -1414,7 +1589,6 @@ "\n", "Linear regression gives us a set of analytical equations for the parameters $\\beta_j$.\n", "\n", - "\n", "In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n", "consider the model we discussed for describing nuclear binding energies. \n", "\n", @@ -1424,7 +1598,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ed7f6b48", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n", @@ -1433,7 +1610,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c621708d", + "metadata": { + "editable": true + }, "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", @@ -1442,7 +1622,6 @@ "Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the\n", "so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \\times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression. \n", "\n", - "\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", "\n", "Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is" @@ -1450,7 +1629,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9e26b3b1", + "metadata": { + "editable": true + }, "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", @@ -1459,17 +1641,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7ecf2445", + "metadata": { + "editable": true + }, "source": [ "where $\\epsilon_i$ is the error in our approximation. \n", "\n", - "\n", "For every set of values $y_i,x_i$ we have thus the corresponding set of equations" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4e3f8091", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1484,14 +1671,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e0de360e", + "metadata": { + "editable": true + }, "source": [ "Defining the vectors" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "0d25d3da", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n", @@ -1500,14 +1693,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "57956772", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "5cb1e06d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n", @@ -1516,14 +1715,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b52c9a04", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d521fbe", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n", @@ -1532,14 +1737,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "49a4e3f2", + "metadata": { + "editable": true + }, "source": [ "and the design matrix" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "562f4b4f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -1555,14 +1766,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d979cd1c", + "metadata": { + "editable": true + }, "source": [ "we can rewrite our equations as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "93f2605f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -1571,7 +1788,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "20c52a36", + "metadata": { + "editable": true + }, "source": [ "The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix).\n", "\n", @@ -1584,7 +1804,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6c5b9800", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1601,7 +1824,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "97c9a717", + "metadata": { + "editable": true + }, "source": [ "**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**\n", "\n", @@ -1610,7 +1836,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "58f60d8c", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -1626,14 +1855,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "eb681436", + "metadata": { + "editable": true + }, "source": [ "and without loss of generality we rewrite again our equations as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "0d2fd026", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -1642,7 +1877,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "82ee72a3", + "metadata": { + "editable": true + }, "source": [ "The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values? \n", "\n", @@ -1651,7 +1889,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bb867a75", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1668,7 +1909,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "177a56b6", + "metadata": { + "editable": true + }, "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", @@ -1681,7 +1925,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, + "id": "639eab41", "metadata": { "collapsed": false, "editable": true @@ -1698,7 +1943,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -1761,14 +2006,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e2f934a2", + "metadata": { + "editable": true + }, "source": [ "With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "270fcf49", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1777,7 +2028,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c6217145", + "metadata": { + "editable": true + }, "source": [ "throughout these lectures. \n", "\n", @@ -1786,7 +2040,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "40ea3dc2", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1795,14 +2052,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6eb268f2", + "metadata": { + "editable": true + }, "source": [ "and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "30d15d84", + "metadata": { + "editable": true + }, "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", @@ -1811,14 +2074,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0092f5fc", + "metadata": { + "editable": true + }, "source": [ "or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "f0e3eaab", + "metadata": { + "editable": true + }, "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", @@ -1827,19 +2096,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ba3587ca", + "metadata": { + "editable": true + }, "source": [ "This function is one possible way to define the so-called cost function.\n", "\n", - "\n", - "\n", "It is also common to define\n", "the function $C$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "f18299b6", + "metadata": { + "editable": true + }, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n", @@ -1848,7 +2121,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "67284093", + "metadata": { + "editable": true + }, "source": [ "since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out. \n", "\n", @@ -1857,7 +2133,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5f555cfc", + "metadata": { + "editable": true + }, "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", @@ -1866,7 +2145,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8ac974cb", + "metadata": { + "editable": true + }, "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" @@ -1874,7 +2156,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f1559872", + "metadata": { + "editable": true + }, "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", @@ -1883,7 +2168,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8e63a36c", + "metadata": { + "editable": true + }, "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", @@ -1899,7 +2187,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9954810b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", @@ -1909,14 +2200,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "910c87ca", + "metadata": { + "editable": true + }, "source": [ "In practical terms it means we will require" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "693ad55a", + "metadata": { + "editable": true + }, "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", @@ -1925,14 +2222,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "781244b4", + "metadata": { + "editable": true + }, "source": [ "which results in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ae61b535", + "metadata": { + "editable": true + }, "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", @@ -1941,14 +2244,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2d8201cc", + "metadata": { + "editable": true + }, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "e323d90a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n", @@ -1957,14 +2266,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "14394cc1", + "metadata": { + "editable": true + }, "source": [ "We can rewrite" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "090b82c7", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n", @@ -1973,14 +2288,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "311ca5e8", + "metadata": { + "editable": true + }, "source": [ "as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "b4b47e6f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1989,14 +2310,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8a49c9ff", + "metadata": { + "editable": true + }, "source": [ "and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "744a34c9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", @@ -2005,7 +2332,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d2f65ed3", + "metadata": { + "editable": true + }, "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", @@ -2020,86 +2350,52 @@ "\n", "**Small question**: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$? What kind of problems can we expect? \n", "\n", - "\n", "The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and \n", "matrices as upper case boldfaced letters." ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ca450475", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "3\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial\\boldsymbol{b}^T\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=\\boldsymbol{b},\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ff7b8b4f", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "4\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial\\boldsymbol{a}^T\\boldsymbol{A}\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=(\\boldsymbol{A}+\\boldsymbol{A}^T)\\boldsymbol{a},\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "13df1ee1", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "5\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial tr(\\boldsymbol{B}\\boldsymbol{A})}{\\partial\\boldsymbol{A}}=\\boldsymbol{B}^T,\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "36a0b11e", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial\\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}}=(\\boldsymbol{A}^{-1})^T.\n", @@ -2108,7 +2404,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "73c64903", + "metadata": { + "editable": true + }, "source": [ "We can then compute the second derivative of the cost function, which in our case is the second derivative\n", "of the means squared error. This leads to" @@ -2116,7 +2415,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4602f620", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial^2 C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}^T\\partial \\boldsymbol{\\beta}} =\\frac{2}{n}\\boldsymbol{X}^T\\boldsymbol{X}.\n", @@ -2125,7 +2427,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "51e19903", + "metadata": { + "editable": true + }, "source": [ "This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).\n", "\n", @@ -2134,7 +2439,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e6b248c3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n", @@ -2143,20 +2451,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "91b60702", + "metadata": { + "editable": true + }, "source": [ "The Hessian matrix for ordinary least squares is also proportional to\n", "the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find\n", "the eigenvalues of the covariance matrix and the Hessian matrix in\n", "terms of the singular values.\n", "\n", - "\n", "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "26a256b3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -2165,14 +2478,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "af338ef6", + "metadata": { + "editable": true + }, "source": [ "and with" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "fecef307", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -2181,14 +2500,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d895336c", + "metadata": { + "editable": true + }, "source": [ "we have" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "a1de6a4a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -2197,21 +2522,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "15669251", + "metadata": { + "editable": true + }, "source": [ "meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n", "\n", - "\n", "Let us now return to our nuclear binding energies and simply code the above equations. \n", "\n", - "\n", "It is rather straightforward to implement the matrix inversion and obtain the parameters $\\boldsymbol{\\beta}$. After having defined the matrix $\\boldsymbol{X}$ we simply need to \n", "write" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, + "id": "ab885c31", "metadata": { "collapsed": false, "editable": true @@ -2226,14 +2553,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ded01eba", + "metadata": { + "editable": true + }, "source": [ "Alternatively, you can use the least squares functionality in **Numpy** as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, + "id": "14561b3b", "metadata": { "collapsed": false, "editable": true @@ -2246,14 +2577,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d6abfb9b", + "metadata": { + "editable": true + }, "source": [ "And finally we plot our fit with and compare with data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, + "id": "b9e5c460", "metadata": { "collapsed": false, "editable": true @@ -2276,7 +2611,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "698df560", + "metadata": { + "editable": true + }, "source": [ "We can easily test our fit by computing the $R2$ score that we discussed in connection with the functionality of **Scikit-Learn** in the introductory slides.\n", "Since we are not using **Scikit-Learn** here we can define our own $R2$ function as" @@ -2284,7 +2622,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, + "id": "9dbe859a", "metadata": { "collapsed": false, "editable": true @@ -2297,14 +2636,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "74c9d52f", + "metadata": { + "editable": true + }, "source": [ "and we would be using it as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, + "id": "e8c140e8", "metadata": { "collapsed": false, "editable": true @@ -2316,14 +2659,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c131f9a3", + "metadata": { + "editable": true + }, "source": [ "We can easily add our **MSE** score as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, + "id": "00c1307d", "metadata": { "collapsed": false, "editable": true @@ -2339,14 +2686,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "afcf6b4d", + "metadata": { + "editable": true + }, "source": [ "and finally the relative error as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, + "id": "30ce0766", "metadata": { "collapsed": false, "editable": true @@ -2360,7 +2711,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "208f6b70", + "metadata": { + "editable": true + }, "source": [ "### The $\\chi^2$ function\n", "\n", @@ -2379,7 +2733,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "76ab8d32", + "metadata": { + "editable": true + }, "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", @@ -2388,17 +2745,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d9ad3f4d", + "metadata": { + "editable": true + }, "source": [ "where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements. \n", "\n", - "\n", "In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\boldsymbol{\\beta})$ by requiring" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "5f8ad792", + "metadata": { + "editable": true + }, "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", @@ -2407,14 +2769,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c9685750", + "metadata": { + "editable": true + }, "source": [ "which results in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "96b044c3", + "metadata": { + "editable": true + }, "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", @@ -2423,14 +2791,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "683761fd", + "metadata": { + "editable": true + }, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "e93b0c33", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n", @@ -2439,7 +2813,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a15143d4", + "metadata": { + "editable": true + }, "source": [ "where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$. \n", "\n", @@ -2448,7 +2825,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ec94fb14", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n", @@ -2457,14 +2837,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6e7a8085", + "metadata": { + "editable": true + }, "source": [ "as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "a093d2a1", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n", @@ -2473,14 +2859,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "32189c08", + "metadata": { + "editable": true + }, "source": [ "and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "042085f9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n", @@ -2489,14 +2881,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2a711c1a", + "metadata": { + "editable": true + }, "source": [ "If we then introduce the matrix" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4c082c12", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n", @@ -2505,14 +2903,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "3ef9c8f8", + "metadata": { + "editable": true + }, "source": [ "we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d779743", + "metadata": { + "editable": true + }, "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", @@ -2521,14 +2925,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b9f180ff", + "metadata": { + "editable": true + }, "source": [ "We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4bd7ff7a", + "metadata": { + "editable": true + }, "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", @@ -2537,14 +2947,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5a9a0e2a", + "metadata": { + "editable": true + }, "source": [ "resulting in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "43526b6e", + "metadata": { + "editable": true + }, "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", @@ -2553,14 +2969,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "45c0e8b1", + "metadata": { + "editable": true + }, "source": [ "The first step here is to approximate the function $y$ with a first-order polynomial, that is we write" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "396a1bce", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n", @@ -2569,14 +2991,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c10268e7", + "metadata": { + "editable": true + }, "source": [ "By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "10c2e68c", + "metadata": { + "editable": true + }, "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", @@ -2585,14 +3013,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4fe24ad6", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "2383a935", + "metadata": { + "editable": true + }, "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", @@ -2601,7 +3035,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1e3c0203", + "metadata": { + "editable": true + }, "source": [ "For a linear fit (a first-order polynomial) we don't need to invert a matrix!! \n", "Defining" @@ -2609,7 +3046,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1c9dbe17", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n", @@ -2618,7 +3058,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "35dc4610", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n", @@ -2627,7 +3070,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "66b6c18d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n", @@ -2636,7 +3082,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "def0d04b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n", @@ -2645,7 +3094,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d6af2ed", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n", @@ -2654,14 +3106,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "02db20b1", + "metadata": { + "editable": true + }, "source": [ "we obtain" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "323f21f3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n", @@ -2670,7 +3128,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "03a686e4", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n", @@ -2679,15 +3140,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1239edc3", + "metadata": { + "editable": true + }, "source": [ "This approach (different linear and non-linear regression) suffers\n", "often from both being underdetermined and overdetermined in the\n", "unknown coefficients $\\beta_i$. A better approach is to use the\n", "Singular Value Decomposition (SVD) method discussed below. Or using\n", - "Lasso and Ridge regression. See below.\n", - "\n", - "\n", + "Lasso and Ridge regression. See below." + ] + }, + { + "cell_type": "markdown", + "id": "de3dc052", + "metadata": { + "editable": true + }, + "source": [ "### Fitting an Equation of State for Dense Nuclear Matter\n", "\n", "Before we continue, let us introduce yet another example. We are going to fit the\n", @@ -2708,7 +3179,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, + "id": "755ebe55", "metadata": { "collapsed": false, "editable": true @@ -2727,7 +3199,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -2790,16 +3262,24 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "fb8d2943", + "metadata": { + "editable": true + }, "source": [ "The above simple polynomial in density $\\rho$ gives an excellent fit\n", - "to the data. \n", - "\n", - "\n", - "\n", + "to the data." + ] + }, + { + "cell_type": "markdown", + "id": "84aa3cb0", + "metadata": { + "editable": true + }, + "source": [ "## Splitting our Data in Training and Test data\n", "\n", - "\n", "It is normal in essentially all Machine Learning studies to split the\n", "data in a training set and a test set (sometimes also an additional\n", "validation set). **Scikit-Learn** has an own function for this. There\n", @@ -2820,7 +3300,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, + "id": "31887c07", "metadata": { "collapsed": false, "editable": true @@ -2869,14 +3350,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0b2ef393", + "metadata": { + "editable": true + }, "source": [ "Alternatively, you could write your own test-train splitting function as shown here." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, + "id": "5c347db2", "metadata": { "collapsed": false, "editable": true @@ -2901,13 +3386,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1c394fbb", + "metadata": { + "editable": true + }, "source": [ "But since **scikit-learn** has its own function for doing this and since\n", "it interfaces easily with **tensorflow** and other libraries, we\n", "normally recommend using the latter functionality.\n", "\n", - "\n", "As another example, we apply the training and testing split to \n", "to the above equation of state fitting example\n", "but now splitting the data into a training set and a test set." @@ -2915,7 +3402,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, + "id": "ae5eb741", "metadata": { "collapsed": false, "editable": true @@ -2930,7 +3418,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -2990,7 +3478,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "dbe0c366", + "metadata": { + "editable": true + }, "source": [ "## The Boston housing data example\n", "\n", @@ -3026,15 +3517,24 @@ "\n", "12. LSTAT: Percentage of lower status of the population\n", "\n", - "13. MEDV: Median value of owner-occupied homes in USD 1000s\n", - "\n", + "13. MEDV: Median value of owner-occupied homes in USD 1000s" + ] + }, + { + "cell_type": "markdown", + "id": "2a9cc829", + "metadata": { + "editable": true + }, + "source": [ "## Housing data, the code\n", "We start by importing the libraries" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, + "id": "a8843592", "metadata": { "collapsed": false, "editable": true @@ -3050,14 +3550,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9abbc574", + "metadata": { + "editable": true + }, "source": [ "and load the Boston Housing DataSet from **Scikit-Learn**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, + "id": "50b5d160", "metadata": { "collapsed": false, "editable": true @@ -3075,14 +3579,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "00dfdd50", + "metadata": { + "editable": true + }, "source": [ "Then we invoke Pandas" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, + "id": "ba5c8bb2", "metadata": { "collapsed": false, "editable": true @@ -3096,14 +3604,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ee060a44", + "metadata": { + "editable": true + }, "source": [ "and preprocess the data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, + "id": "7cd7e1ee", "metadata": { "collapsed": false, "editable": true @@ -3116,14 +3628,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "11cf13f4", + "metadata": { + "editable": true + }, "source": [ "We can then visualize the data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, + "id": "c75837e3", "metadata": { "collapsed": false, "editable": true @@ -3140,14 +3656,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e5f7bd90", + "metadata": { + "editable": true + }, "source": [ "It is now useful to look at the correlation matrix" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, + "id": "1a5ec28f", "metadata": { "collapsed": false, "editable": true @@ -3163,14 +3683,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "82358b49", + "metadata": { + "editable": true + }, "source": [ "From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, + "id": "870190cd", "metadata": { "collapsed": false, "editable": true @@ -3194,14 +3718,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c7628b09", + "metadata": { + "editable": true + }, "source": [ "Now we start training our model" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, + "id": "3b1fe034", "metadata": { "collapsed": false, "editable": true @@ -3214,14 +3742,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9f864351", + "metadata": { + "editable": true + }, "source": [ "We split the data into training and test sets" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, + "id": "9dd326a0", "metadata": { "collapsed": false, "editable": true @@ -3241,14 +3773,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8bc24ccc", + "metadata": { + "editable": true + }, "source": [ "Then we use the linear regression functionality from **Scikit-Learn**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, + "id": "f04e7787", "metadata": { "collapsed": false, "editable": true @@ -3290,7 +3826,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, + "id": "e64f0d66", "metadata": { "collapsed": false, "editable": true @@ -3305,7 +3842,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d376f62d", + "metadata": { + "editable": true + }, "source": [ "## Reducing the number of degrees of freedom, overarching view\n", "\n", @@ -3321,7 +3861,6 @@ "techniques: the principal component analysis (PCA), Kernel PCA, and\n", "Locally Linear Embedding (LLE). \n", "\n", - "\n", "Principal component analysis and its various variants deal with the\n", "problem of fitting a low-dimensional [affine\n", "subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of\n", @@ -3329,8 +3868,6 @@ "is one of the most used tools in data modeling, compression and\n", "visualization.\n", "\n", - "\n", - "\n", "Before we proceed however, we will discuss how to preprocess our\n", "data. Till now and in connection with our previous examples we have\n", "not met so many cases where we are too sensitive to the scaling of our\n", @@ -3346,7 +3883,6 @@ "are very different scales. Therefore, it is typical to scale\n", "the features in a way to avoid such outlier values.\n", "\n", - "\n", "**Scikit-Learn** has several functions which allow us to rescale the\n", "data, normally resulting in much better results in terms of various\n", "accuracy scores. The **StandardScaler** function in **Scikit-Learn**\n", @@ -3357,7 +3893,6 @@ "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", - "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", @@ -3375,7 +3910,6 @@ "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", - "\n", "Many features are often scaled using standardization to improve\n", "performance. In **Scikit-Learn** this is given by the **StandardScaler**\n", "function as discussed above. It is easy however to write your own.\n", @@ -3385,7 +3919,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "353f7dc0", + "metadata": { + "editable": true + }, "source": [ "$$\n", "x_j^{(i)} \\rightarrow \\frac{x_j^{(i)} - \\overline{x}_j}{\\sigma(x_j)},\n", @@ -3394,7 +3931,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5e1aa076", + "metadata": { + "editable": true + }, "source": [ "where $\\overline{x}_j$ and $\\sigma(x_j)$ are the mean and standard\n", "deviation, respectively, of the feature $x_j$. This ensures that each\n", @@ -3402,8 +3942,6 @@ "where we do not have the standard deviation or don't wish to calculate\n", "it, it is then common to simply set it to one.\n", "\n", - "\n", - "\n", "Let us consider the following vanilla example where we use both\n", "**Scikit-Learn** and write our own function as well. We produce a\n", "simple test design matrix with random numbers. Each column could then\n", @@ -3412,7 +3950,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, + "id": "b9b91c02", "metadata": { "collapsed": false, "editable": true @@ -3446,12 +3985,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "90353e0c", + "metadata": { + "editable": true + }, "source": [ "Small exercise: perform the standard scaling by including the standard deviation and compare with what Scikit-Learn gives.\n", "\n", - "\n", - "\n", "Another commonly used scaling method is min-max scaling. This is very\n", "useful for when we want the features to lie in a certain interval. To\n", "scale the feature $x_j$ to the interval $[a, b]$, we can apply the\n", @@ -3460,7 +4000,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "eb29b406", + "metadata": { + "editable": true + }, "source": [ "$$\n", "x_j^{(i)} \\rightarrow (b-a)\\frac{x_j^{(i)} - \\min(x_j)}{\\max(x_j) - \\min(x_j)} - a\n", @@ -3469,16 +4012,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "36c1a91c", + "metadata": { + "editable": true + }, + "source": [ + "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively." + ] + }, + { + "cell_type": "markdown", + "id": "4fd47015", + "metadata": { + "editable": true + }, "source": [ - "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively.\n", - "\n", - "\n", - "\n", - "\n", "## Testing the Means Squared Error as function of Complexity\n", "\n", - "\n", "Before we proceed with a more detailed analysis of the so-called\n", "Bias-Variance tradeoff, we present here an example of the relation\n", "between model complexity and the mean squared error for the triaining\n", @@ -3490,13 +4040,13 @@ "\n", "The results here will vary as function of model complexity and the amount od data used for training. \n", "\n", - "\n", "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, + "id": "8c7dcd78", "metadata": { "collapsed": false, "editable": true @@ -3540,10 +4090,21 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "22ef09fb", + "metadata": { + "editable": true + }, + "source": [ + "## Exercises" + ] + }, + { + "cell_type": "markdown", + "id": "c81539de", + "metadata": { + "editable": true + }, "source": [ - "## Exercises\n", - "\n", "### Exercise: Setting up various Python environments\n", "\n", "The first exercise here is of a mere technical art. We want you to have \n", @@ -3603,11 +4164,16 @@ "analysis environment, available for free and under a commercial\n", "license.\n", "\n", - "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment.\n", - "\n", - "\n", - "\n", - "\n", + "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment." + ] + }, + { + "cell_type": "markdown", + "id": "b7cbad15", + "metadata": { + "editable": true + }, + "source": [ "### Exercise: making your own data and exploring scikit-learn\n", "\n", "We will generate our own dataset for a function $y(x)$ where $x \\in [0,1]$ and defined by random numbers computed with the uniform distribution. The function $y$ is a quadratic polynomial in $x$ with added stochastic noise according to the normal distribution $\\cal {N}(0,1)$.\n", @@ -3616,7 +4182,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, + "id": "aec3d518", "metadata": { "collapsed": false, "editable": true @@ -3629,7 +4196,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0e5cd05f", + "metadata": { + "editable": true + }, "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", @@ -3640,7 +4210,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "83bc7720", + "metadata": { + "editable": true + }, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -3650,7 +4223,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "28e6d655", + "metadata": { + "editable": true + }, "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" @@ -3658,7 +4234,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ab874e06", + "metadata": { + "editable": true + }, "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", @@ -3667,14 +4246,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d936331f", + "metadata": { + "editable": true + }, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4d0520ed", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -3683,14 +4268,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a4c22443", + "metadata": { + "editable": true + }, "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", - "\n", - "\n", - "\n", - "\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." + ] + }, + { + "cell_type": "markdown", + "id": "5da59397", + "metadata": { + "editable": true + }, + "source": [ "### Exercise: Normalizing our data\n", "\n", "A much used approach before starting to train the data is to preprocess our\n", @@ -3708,7 +4301,6 @@ "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", - "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", @@ -3726,14 +4318,14 @@ "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", - "\n", "It also common to split the data in a **training** set and a **testing** set. A typical split is to use $80\\%$ of the data for training and the rest\n", "for testing. This can be done as follows with our design matrix $\\boldsymbol{X}$ and data $\\boldsymbol{y}$ (remember to import **scikit-learn**)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, + "id": "74e0714b", "metadata": { "collapsed": false, "editable": true @@ -3746,14 +4338,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "af983a9c", + "metadata": { + "editable": true + }, "source": [ "Then we can use the standard scaler to scale our data as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, + "id": "5ad3d9f9", "metadata": { "collapsed": false, "editable": true @@ -3768,7 +4364,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "699eebfa", + "metadata": { + "editable": true + }, "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", @@ -3777,14 +4376,13 @@ "One of \n", "the aims is to reproduce Figure 2.11 of [Hastie et al](https://github.com/CompPhysics/MLErasmus/blob/master/doc/Textbooks/elementsstat.pdf).\n", "\n", - "\n", - "\n", "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, + "id": "eb9eb5fe", "metadata": { "collapsed": false, "editable": true @@ -3801,23 +4399,21 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a7dfb469", + "metadata": { + "editable": true + }, "source": [ "where $y$ is the function we want to fit with a given polynomial.\n", "\n", - "\n", "Write a first code which sets up a design matrix $X$ defined by a\n", "fifth-order polynomial. Scale your data and split it in training and\n", "test data.\n", "\n", - "\n", - "\n", "Perform an ordinary least squares and compute the means squared error\n", "and the $R2$ factor for the training data and the test data, with and\n", "without scaling.\n", "\n", - "\n", - "\n", "Add now a model which allows you to make polynomials up to degree\n", "$15$. Perform a standard OLS fitting of the training data and compute\n", "the MSE and $R2$ for the training and test data and plot both test and\n", @@ -3843,5 +4439,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } \ No newline at end of file diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1.py b/doc/LectureNotes/_build/jupyter_execute/chapter1.py index 33bc58f85..a586d20cf 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter1.py +++ b/doc/LectureNotes/_build/jupyter_execute/chapter1.py @@ -1,15 +1,13 @@ #!/usr/bin/env python # coding: utf-8 +# + # # Linear Regression -# -# + # ## Introduction # -# -# -# -# # Our emphasis throughout this series of lectures is on understanding # the mathematical aspects of different algorithms used in the fields of # data analysis and machine learning. @@ -41,9 +39,7 @@ # Moreover, the examples we introduce will serve as inputs to many of # our discussions later, as well as allowing you to set up models and # produce your own data and get started with programming. -# -# -# + # ## What is Machine Learning? # # Statistics, data science and machine learning form important fields of @@ -109,8 +105,6 @@ # Carlo methods are central elements in a proper understanding of many # of algorithms and methods we will discuss. # -# -# # The approaches to machine learning are many, but are often split into # two main categories. In *supervised learning* we know the answer to a # problem, and let the computer deduce the logic behind it. On the other @@ -138,11 +132,8 @@ # # * The last ingredient is a so-called **cost/loss** function (or error or risk function) which allows us to present an estimate on how good our model is in reproducing the data it is supposed to train. # -# -# # At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**. -# -# + # ### A Frequentist approach to data analysis # # When you hear phrases like **predictions and estimations** and @@ -169,8 +160,7 @@ # less on for example extracting a probability distribution function (PDF). The PDF can be # used in turn to make estimations and find causations such as given $A$ # what is the likelihood of finding $B$. -# -# + # ### What is a good model? # # In science and engineering we often end up in situations where we want to infer (or learn) a @@ -193,9 +183,6 @@ # is that if we are not specific about what we mean by a *correct* model, there # could easily be many different models that fit the given data set *equally well*. # -# -# -# # The central question is this: what leads us to say that a model is correct or # optimal for a given data set? To make the model inference problem well posed, i.e., # to guarantee that there is a unique optimal model for the given data, we need to @@ -216,17 +203,7 @@ # may first try the simplest class of models, namely linear models, followed obviously by more complex models. # # How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures. -# -# -# -# -# -# -# -# -# -# -# + # ## Simple linear regression model using **scikit-learn** # # We start with perhaps our simplest possible example, using @@ -242,7 +219,6 @@ # (tabulated again as a vector) with a linear dependence on $x$ plus a # random noise added via the normal distribution. # -# # The Numpy functions are imported used the **import numpy as np** # statement and the random number generator for the uniform distribution # is called using the function **np.random.rand()**, where we specificy @@ -283,7 +259,6 @@ # This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set. # Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault! # -# # The Python code follows here. # In[1]: @@ -498,7 +473,6 @@ plt.show() # as population counts, average sales of a commodity over a span of # years etc. # -# # Finally, another cost function is the Huber cost function used in robust regression. # # The rationale behind this possible cost function is its reduced @@ -514,9 +488,6 @@ plt.show() # Here $\boldsymbol{a}=\boldsymbol{y} - \boldsymbol{\tilde{y}}$. # -# -# -# # We will discuss in more # detail these and other functions in the various lectures. We conclude this part with another example. Instead of # a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. @@ -606,7 +577,6 @@ print (error(y)) # where $\Delta_H c^2 = 7.2890$ MeV and $\Delta_n c^2 = 8.0713$ MeV. # -# # A popular and physically intuitive model which can be used to parametrize # the experimental binding energies as function of $A$, is the so-called # **liquid drop model**. The ansatz is based on the following expression @@ -618,9 +588,6 @@ print (error(y)) # where $A$ stands for the number of nucleons and the $a_i$s are parameters which are determined by a fit # to the experimental data. # -# -# -# # To arrive at the above expression we have assumed that we can make the following assumptions: # # * There is a volume term $a_1A$ proportional with the number of nucleons (the energy is also an extensive quantity). When an assembly of nucleons of the same size is packed together into the smallest volume, each interior nucleon has a certain number of other nucleons in contact with it. This contribution is proportional to the volume. @@ -633,16 +600,14 @@ print (error(y)) # # We could also add a so-called pairing term, which is a correction term that # arises from the tendency of proton pairs and neutron pairs to -# occur. An even number of particles is more stable than an odd number. -# -# +# occur. An even number of particles is more stable than an odd number. + # ### Organizing our data # # Let us start with reading and organizing our data. # We start with the compilation of masses and binding energies from 2016. # After having downloaded this file to our own computer, we are now ready to read the file and start structuring our data. # -# # We start with preparing folders for storing our calculations and the data file over masses and binding energies. We import also various modules that we will find useful in order to present various Machine Learning methods. Here we focus mainly on the functionality of **scikit-learn**. # In[5]: @@ -660,7 +625,7 @@ import os # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -707,7 +672,6 @@ def MakePlot(x,y, styles, labels, axlabels): # always useful (unless you have a binary file or other types of compressed # data) to actually open the file and simply take a look at it! # -# # In particular, the program that outputs the final nuclear masses is written in Fortran with a specific format. It means that we need to figure out the format and which columns contain the data we are interested in. Pandas comes with a function that reads formatted output. After having admired the file, we are now ready to start massaging it with **pandas**. The file begins with some basic format information. # In[7]: @@ -764,7 +728,7 @@ Masses = Masses.apply(lambda t: t[t.Ebinding==t.Ebinding.max()]) # Now we define five variables which contain # the number of nucleons $A$, the number of protons $Z$ and the number of neutrons $N$, the element name and finally the energies themselves. -# In[ ]: +# In[9]: A = Masses['A'] @@ -778,7 +742,7 @@ print(Masses) # 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}$. # It has dimensionality $n\times p$, 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. -# In[ ]: +# In[10]: # Now we set up the design matrix X @@ -797,7 +761,7 @@ X[:,4] = A**(-1.0) # # With **Scikit-Learn** we are now ready to use linear regression and fit our data. -# In[ ]: +# In[11]: clf = skl.LinearRegression().fit(X, Energies) @@ -807,7 +771,7 @@ fity = clf.predict(X) # Pretty simple! # 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. -# In[ ]: +# In[12]: # The mean squared error @@ -833,7 +797,7 @@ plt.show() # As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**! -# In[ ]: +# In[13]: @@ -878,11 +842,10 @@ print(np.mean( (Energies-y_1)**2)) # we will most likely fail miserably in our attempt at making # predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced. # -# # The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) # functionality. -# In[ ]: +# In[14]: from sklearn.neural_network import MLPRegressor @@ -918,10 +881,8 @@ plt.show() # ## Linear Regression, basic elements # -# # [Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureAug27.mp4?vrtx=view-as-webpage). # -# # Fitting a continuous function with linear parameterization in terms of the parameters $\boldsymbol{\beta}$. # * Method of choice for fitting a continuous function! # @@ -944,8 +905,6 @@ plt.show() # For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended. # Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended. # -# -# # Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\boldsymbol{x} =[x_0, x_1,\dots, x_{n-1}]^T$. # The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. # @@ -958,7 +917,6 @@ plt.show() # # The goal of the regression analysis is to extract/exploit relationship between $\boldsymbol{y}$ and $\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things. # -# # Consider an experiment in which $p$ characteristics of $n$ samples are # measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix # $\mathbf{X}$. @@ -977,7 +935,6 @@ plt.show() # # Linear regression gives us a set of analytical equations for the parameters $\beta_j$. # -# # In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\boldsymbol{y}$, # consider the model we discussed for describing nuclear binding energies. # @@ -995,7 +952,6 @@ plt.show() # Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the # so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression. # -# # 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. # # Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is @@ -1006,7 +962,6 @@ plt.show() # where $\epsilon_i$ is the error in our approximation. # -# # For every set of values $y_i,x_i$ we have thus the corresponding set of equations # $$ @@ -1121,7 +1076,7 @@ plt.show() # # We restate the parts of the code we are most interested in. -# In[ ]: +# In[15]: # Common imports @@ -1134,7 +1089,7 @@ import os # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1223,8 +1178,6 @@ display(DesignMatrix) # This function is one possible way to define the so-called cost function. # -# -# # It is also common to define # the function $C$ as @@ -1312,66 +1265,20 @@ display(DesignMatrix) # # **Small question**: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix $\boldsymbol{X}^T\boldsymbol{X}$? What kind of problems can we expect? # -# # The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and # matrices as upper case boldfaced letters. -# 4 -# 3 -# -# < -# < -# < -# ! -# ! -# M -# A -# T -# H -# _ -# B -# L -# O -# C -# K +# $$ +# \frac{\partial\boldsymbol{b}^T\boldsymbol{a}}{\partial\boldsymbol{a}}=\boldsymbol{b}, +# $$ -# 4 -# 4 -# -# < -# < -# < -# ! -# ! -# M -# A -# T -# H -# _ -# B -# L -# O -# C -# K +# $$ +# \frac{\partial\boldsymbol{a}^T\boldsymbol{A}\boldsymbol{a}}{\partial\boldsymbol{a}}=(\boldsymbol{A}+\boldsymbol{A}^T)\boldsymbol{a}, +# $$ -# 4 -# 5 -# -# < -# < -# < -# ! -# ! -# M -# A -# T -# H -# _ -# B -# L -# O -# C -# K +# $$ +# \frac{\partial tr(\boldsymbol{B}\boldsymbol{A})}{\partial\boldsymbol{A}}=\boldsymbol{B}^T, +# $$ # $$ # \frac{\partial\log{\vert\boldsymbol{A}\vert}}{\partial \boldsymbol{A}}=(\boldsymbol{A}^{-1})^T. @@ -1397,7 +1304,6 @@ display(DesignMatrix) # the eigenvalues of the covariance matrix and the Hessian matrix in # terms of the singular values. # -# # The residuals $\boldsymbol{\epsilon}$ are in turn given by # $$ @@ -1418,14 +1324,12 @@ display(DesignMatrix) # meaning that the solution for $\boldsymbol{\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach. # -# # Let us now return to our nuclear binding energies and simply code the above equations. # -# # It is rather straightforward to implement the matrix inversion and obtain the parameters $\boldsymbol{\beta}$. After having defined the matrix $\boldsymbol{X}$ we simply need to # write -# In[ ]: +# In[16]: # matrix inversion to find beta @@ -1436,7 +1340,7 @@ ytilde = X @ beta # Alternatively, you can use the least squares functionality in **Numpy** as -# In[ ]: +# In[17]: fit = np.linalg.lstsq(X, Energies, rcond =None)[0] @@ -1445,7 +1349,7 @@ ytildenp = np.dot(fit,X.T) # And finally we plot our fit with and compare with data -# In[ ]: +# In[18]: Masses['Eapprox'] = ytilde @@ -1465,7 +1369,7 @@ plt.show() # We can easily test our fit by computing the $R2$ score that we discussed in connection with the functionality of **Scikit-Learn** in the introductory slides. # Since we are not using **Scikit-Learn** here we can define our own $R2$ function as -# In[ ]: +# In[19]: def R2(y_data, y_model): @@ -1474,7 +1378,7 @@ def R2(y_data, y_model): # and we would be using it as -# In[ ]: +# In[20]: print(R2(Energies,ytilde)) @@ -1482,7 +1386,7 @@ print(R2(Energies,ytilde)) # We can easily add our **MSE** score as -# In[ ]: +# In[21]: def MSE(y_data,y_model): @@ -1494,7 +1398,7 @@ print(MSE(Energies,ytilde)) # and finally the relative error as -# In[ ]: +# In[22]: def RelativeError(y_data,y_model): @@ -1522,7 +1426,6 @@ print(RelativeError(Energies, ytilde)) # where the matrix $\boldsymbol{\Sigma}$ is a diagonal matrix with $\sigma_i$ as matrix elements. # -# # In order to find the parameters $\beta_i$ we will then minimize the spread of $\chi^2(\boldsymbol{\beta})$ by requiring # $$ @@ -1641,8 +1544,7 @@ print(RelativeError(Energies, ytilde)) # unknown coefficients $\beta_i$. A better approach is to use the # Singular Value Decomposition (SVD) method discussed below. Or using # Lasso and Ridge regression. See below. -# -# + # ### Fitting an Equation of State for Dense Nuclear Matter # # Before we continue, let us introduce yet another example. We are going to fit the @@ -1660,7 +1562,7 @@ print(RelativeError(Energies, ytilde)) # The difference now is that we use **Scikit-Learn's** regression tools # instead of our own matrix inversion implementation. -# In[ ]: +# In[23]: # Common imports @@ -1675,7 +1577,7 @@ from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1737,13 +1639,10 @@ plt.show() # The above simple polynomial in density $\rho$ gives an excellent fit -# to the data. -# -# -# +# to the data. + # ## Splitting our Data in Training and Test data # -# # It is normal in essentially all Machine Learning studies to split the # data in a training set and a test set (sometimes also an additional # validation set). **Scikit-Learn** has an own function for this. There @@ -1761,7 +1660,7 @@ plt.show() # the various measures like the $R2$ score or the mean-squared error, # the fit becomes better or worse. -# In[ ]: +# In[24]: import os @@ -1806,7 +1705,7 @@ print(MSE(y_test,ypredict)) # Alternatively, you could write your own test-train splitting function as shown here. -# In[ ]: +# In[25]: # equivalently in numpy @@ -1829,12 +1728,11 @@ def train_test_split_numpy(inputs, labels, train_size, test_size): # it interfaces easily with **tensorflow** and other libraries, we # normally recommend using the latter functionality. # -# # As another example, we apply the training and testing split to # to the above equation of state fitting example # but now splitting the data into a training set and a test set. -# In[ ]: +# In[26]: import os @@ -1845,7 +1743,7 @@ from sklearn.model_selection import train_test_split # Where to save the figures and data files PROJECT_ROOT_DIR = "Results" FIGURE_ID = "Results/FigureFiles" -DATA_ID = "DataFiles/" +DATA_ID = "datafiles/" if not os.path.exists(PROJECT_ROOT_DIR): os.mkdir(PROJECT_ROOT_DIR) @@ -1938,11 +1836,11 @@ print(MSE(y_test,ypredict)) # 12. LSTAT: Percentage of lower status of the population # # 13. MEDV: Median value of owner-occupied homes in USD 1000s -# + # ## Housing data, the code # We start by importing the libraries -# In[ ]: +# In[27]: import numpy as np @@ -1954,7 +1852,7 @@ import seaborn as sns # and load the Boston Housing DataSet from **Scikit-Learn** -# In[ ]: +# In[28]: from sklearn.datasets import load_boston @@ -1968,7 +1866,7 @@ boston_dataset.keys() # Then we invoke Pandas -# In[ ]: +# In[29]: boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names) @@ -1978,7 +1876,7 @@ boston['MEDV'] = boston_dataset.target # and preprocess the data -# In[ ]: +# In[30]: # check for missing values in all the columns @@ -1987,7 +1885,7 @@ boston.isnull().sum() # We can then visualize the data -# In[ ]: +# In[31]: # set the size of the figure @@ -2000,7 +1898,7 @@ plt.show() # It is now useful to look at the correlation matrix -# In[ ]: +# In[32]: # compute the pair wise correlation for all columns @@ -2012,7 +1910,7 @@ sns.heatmap(data=correlation_matrix, annot=True) # From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity -# In[ ]: +# In[33]: plt.figure(figsize=(20, 5)) @@ -2032,7 +1930,7 @@ for i, col in enumerate(features): # Now we start training our model -# In[ ]: +# In[34]: X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns = ['LSTAT','RM']) @@ -2041,7 +1939,7 @@ Y = boston['MEDV'] # We split the data into training and test sets -# In[ ]: +# In[35]: from sklearn.model_selection import train_test_split @@ -2057,7 +1955,7 @@ print(Y_test.shape) # Then we use the linear regression functionality from **Scikit-Learn** -# In[ ]: +# In[36]: from sklearn.linear_model import LinearRegression @@ -2093,7 +1991,7 @@ print('RMSE is {}'.format(rmse)) print('R2 score is {}'.format(r2)) -# In[ ]: +# In[37]: # plotting the y_test vs y_pred @@ -2116,7 +2014,6 @@ plt.show() # techniques: the principal component analysis (PCA), Kernel PCA, and # Locally Linear Embedding (LLE). # -# # Principal component analysis and its various variants deal with the # problem of fitting a low-dimensional [affine # subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of @@ -2124,8 +2021,6 @@ plt.show() # is one of the most used tools in data modeling, compression and # visualization. # -# -# # Before we proceed however, we will discuss how to preprocess our # data. Till now and in connection with our previous examples we have # not met so many cases where we are too sensitive to the scaling of our @@ -2141,7 +2036,6 @@ plt.show() # are very different scales. Therefore, it is typical to scale # the features in a way to avoid such outlier values. # -# # **Scikit-Learn** has several functions which allow us to rescale the # data, normally resulting in much better results in terms of various # accuracy scores. The **StandardScaler** function in **Scikit-Learn** @@ -2152,7 +2046,6 @@ plt.show() # function included in **Scikit-Learn** is the **MinMaxScaler** which # ensures that all features are exactly between $0$ and $1$. The # -# # The **Normalizer** scales each data # point such that the feature vector has a euclidean length of one. In other words, it # projects a data point on the circle (or sphere in the case of higher dimensions) with a @@ -2170,7 +2063,6 @@ plt.show() # outliers, and might often lead to trouble for other scaling # techniques. # -# # Many features are often scaled using standardization to improve # performance. In **Scikit-Learn** this is given by the **StandardScaler** # function as discussed above. It is easy however to write your own. @@ -2187,14 +2079,12 @@ plt.show() # where we do not have the standard deviation or don't wish to calculate # it, it is then common to simply set it to one. # -# -# # Let us consider the following vanilla example where we use both # **Scikit-Learn** and write our own function as well. We produce a # simple test design matrix with random numbers. Each column could then # represent a specific feature whose mean value is subracted. -# In[ ]: +# In[38]: import sklearn.linear_model as skl @@ -2224,8 +2114,6 @@ display(XPandas-Xscaled) # Small exercise: perform the standard scaling by including the standard deviation and compare with what Scikit-Learn gives. # -# -# # Another commonly used scaling method is min-max scaling. This is very # useful for when we want the features to lie in a certain interval. To # scale the feature $x_j$ to the interval $[a, b]$, we can apply the @@ -2236,13 +2124,9 @@ display(XPandas-Xscaled) # $$ # where $\min(x_j)$ and $\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively. -# -# -# -# + # ## Testing the Means Squared Error as function of Complexity # -# # Before we proceed with a more detailed analysis of the so-called # Bias-Variance tradeoff, we present here an example of the relation # between model complexity and the mean squared error for the triaining @@ -2254,10 +2138,9 @@ display(XPandas-Xscaled) # # The results here will vary as function of model complexity and the amount od data used for training. # -# # Our data is defined by $x\in [-3,3]$ with a total of for example $100$ data points. -# In[ ]: +# In[39]: import matplotlib.pyplot as plt @@ -2296,7 +2179,7 @@ plt.show() # ## Exercises -# + # ### Exercise: Setting up various Python environments # # The first exercise here is of a mere technical art. We want you to have @@ -2357,16 +2240,13 @@ plt.show() # license. # # We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment. -# -# -# -# + # ### Exercise: making your own data and exploring scikit-learn # # We will generate our own dataset for a function $y(x)$ where $x \in [0,1]$ and defined by random numbers computed with the uniform distribution. The function $y$ is a quadratic polynomial in $x$ with added stochastic noise according to the normal distribution $\cal {N}(0,1)$. # The following simple Python instructions define our $x$ and $y$ values (with 100 data points). -# In[ ]: +# In[40]: x = np.random.rand(100,1) @@ -2399,10 +2279,7 @@ y = 2.0+5*x*x+0.1*np.random.randn(100,1) # 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. # 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. -# -# -# -# + # ### Exercise: Normalizing our data # # A much used approach before starting to train the data is to preprocess our @@ -2420,7 +2297,6 @@ y = 2.0+5*x*x+0.1*np.random.randn(100,1) # function included in **Scikit-Learn** is the **MinMaxScaler** which # ensures that all features are exactly between $0$ and $1$. The # -# # The **Normalizer** scales each data # point such that the feature vector has a euclidean length of one. In other words, it # projects a data point on the circle (or sphere in the case of higher dimensions) with a @@ -2438,11 +2314,10 @@ y = 2.0+5*x*x+0.1*np.random.randn(100,1) # outliers, and might often lead to trouble for other scaling # techniques. # -# # It also common to split the data in a **training** set and a **testing** set. A typical split is to use $80\%$ of the data for training and the rest # for testing. This can be done as follows with our design matrix $\boldsymbol{X}$ and data $\boldsymbol{y}$ (remember to import **scikit-learn**) -# In[ ]: +# In[41]: # split in training and test data @@ -2451,7 +2326,7 @@ y = 2.0+5*x*x+0.1*np.random.randn(100,1) # Then we can use the standard scaler to scale our data as -# In[ ]: +# In[42]: scaler = StandardScaler() @@ -2467,11 +2342,9 @@ X_test_scaled = scaler.transform(X_test) # One of # the aims is to reproduce Figure 2.11 of [Hastie et al](https://github.com/CompPhysics/MLErasmus/blob/master/doc/Textbooks/elementsstat.pdf). # -# -# # Our data is defined by $x\in [-3,3]$ with a total of for example $100$ data points. -# In[ ]: +# In[43]: np.random.seed() @@ -2484,19 +2357,14 @@ y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape) # where $y$ is the function we want to fit with a given polynomial. # -# # 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. # -# -# # 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. # -# -# # 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 diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_17_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_17_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d26235a3f85e95f4f245cd004225399fdd4873a3 GIT binary patch literal 6537 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 W6X%xM-?-Z%2=JWc+0rvkxBmmhcdE(& literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_19_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_19_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1b03052ecbb750c4fb390134906ac70316a4ced2 GIT binary patch literal 9423 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 literal 0 HcmV?d00001 diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_33_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_33_0.png new file mode 100644 index 0000000000000000000000000000000000000000..20dc302772322d39d59599ee94acb9420f411c33 GIT binary patch literal 13191 zcmaKT1yoeu*EWp;1EK;$2sj8xGa#K3BB_*gcMsAHA|WYAw^Gt2-2wyBokPdaDGbeb z`TgJT|Nh_gz3W?xxpUX$+;jIiXYc2E&c1uTyjPL|;ZfkBp`n3f-%6>Vp`p70=jRV_ zfFqf5o(%9M;4H1_tm}K@Q3{BC<8D{I?Y-?pq>uUDV$;!c=o1KRp%1UeL>&J zDOb(7LaGs6jwx5-U0|b%96c>)Uydo>|5Y7Jt{TSZQfZvZ!yeK-9JIBywWRCoYfC;! zrred@%hMecrOC(UlJGA}8JU?w4K6!B<_U7+!dM`c*##~s3CeN>SUK%_Ou3K0;<)9; z$%#W_oKSgrdBJ*(uF6_kE9(#FTtfcxI4sHpr({Sk-vEeW*W=(-2t=Kgkl?Jf0U zc0d*k2g}LJ&s5uxVPj*D*hi@_D;V>#scLD-y1LfjoIQF%Tv=6h$^prJtlN*{CXVTq zw23TK`>ehjL}IcO#5!ftwNOsOmG{rUKBMy6Zi(9UH$1)l)i74@_mb|v%Lr^fye%P zbG22be;(f{yJ1S0C=AFR=wE6wAK1H@QIU&!gpxiBX?r= zKPIO&vo1#z)94Ex$Y-&!vD?_|zkf@-iKZTCJZS0b{PJWcVJMk9gfY{*a{n~*_Ag^F zh!S3I)G^)Q!h&|PF|ZndOO0l@Gg*@62q!0?7EXFD8C-5R$D27D7ZZcthNySaYWCy_ z3JPM?ET^4TRhJ8z`GR1ea zP9!7IFm$U|S!Xlq&oJeHsEhe78G`fcptzV-^kVHvhUYeueZv;R?P;0cgpQaAoM2-x zy>IQ$w}Rs0&Mjx&Ss7_*Y~aCYPoF+LJnrL|DoGXd6D1Np6wkh4&NWukX5@ELmm(tH z6-JG;>6`TPQTO3Vt#L0sfQ3NKt84kfdTb4O#r5^|zYc`5jpZp8c{N>Zr0$fku&|h* z_U9Ecgvnug@7E%0e?_RsT`*5CiGtiGS5K*Fhrp`L5Xk@yDN}!Fo^tIR_yl|i7FSkQ zu5#P5FAaIdj)_BHI8$k+KQ&`p;xCdr{GO<{mJ)2Lrz+vt;$TQ6G!)fut8%# zSk)|o$wkb7$QJXO#wP+jKhsxGU0q%H_I%Z)Z?aUc&+DLBCYoC092j6hVd2W*a!1q6 z+1%;E)%D5Hlt>g9`eUI1m@puG;4EcL7~<;cBR3`-JuJUjHh+{(Y$F}Ul^dL0NB`1k?{qHF^@%2$?; zcvBA|Q)=Bo)N}e+*Tm(Rgs7Ub+VRjI zKOkd==Fd|39P$iWeSOm-j?;Zx;ZMMaPkaxmBJV1a;&|Ep0)@XXG_r)OzW$Du^Wp?0of z=F`==@7>j6mBkP>uRY?eoE)APYJa^MwSaGFAT2HZl*A)_zc9`^=ofN71nAtckFA!| z9>H(lxL4z8=8cX+NY!(;H-~QCV*+CS}$XCW8yeC2cbx1fk%ODp(%b0k~W_hLQGedP-Q z#j8*GHIBUC=Y^3j);-hW6FF`?viLK{1H2}Poe_WR<{=fnR`ANgT#z3ma?FI5; zDUb*l$I7ft*?O`?#&TsJd(oUZ5dLfH>oM{1>u!`a4vT|;Q+C(b&4Kysb@c|$wcQqd z`0VCt*26hk(3Y0k1AS>EnMf8_=<2$^GO6YnR%@ruZ|v1Bn%`WWrgW+FQ zIT>7_nr~d8xjEm+C*pOsR#etfSnIpq8}H&4jbXXi;?omV5*J2vM2x`PGzyVV<+a<+ z;8VYx0(bN$bJriVT%{m}j=E`v2GfO@SXk(|xvNGzhg8}J;-8+K&4R})lT`{`M$)_< z9iNk32vy$4|;;O-wgfBO0N519^Sh(s><4T+$> zrl!i@-QJM%!)V2>W`=qO2C#K&M^pJ7A@^vIF635!&tb{H9e&goU zuo@-A?|w*&iA!jDxYXWsGALwpi4~_(QP>sR8k0ruNB2(5Aa}*UiQcaoc~9Q|j*9z*8dKFV0n3e3Q9Q{--oAiEC9dN~ zK!f%(*U=!OG<8_uCEp=B$msQY+P!Kh?OL*r(88uVbo3)b8zMI;jDRkp>jW6R{>4!U zxEU}R1Yk~o02fXGADe81Or-vcIb$DGzh}yA!e>B=%1DX2<=a_@Cpu%dpr*|ey|m~c zTsl&dUwRq<>Y_~{7PYdnx~E60F@_Jtn(fEyeHR@xx5K+$_bSEsbyoY0au(V92fOIE zyZZYjSzo4#aw4G7GeH#&a?H~<_ z*YXV$tQDR86O|#v>2oc3lFc*F0q}d?AkeNvCoeSa}02$B_eHHd0af{S zNv%z=4>@M#B<&%N(QDId(5QG*-n?E=a0?&bk``s#wR`hm9D}J$DR$aHE`ecF?MQ>@+S>!gqo)$ zcD;L5b<^C|-2RH0*60>ZUQVuVBgH0(+kz1C8(@*G$r4J^@F2hIRT`Jtk-q-^oZ{l* zeIG?Tz-Vs3Xc;y;#A>wvd7V}W$L~Y*4{B=fH8tM?*bT6YJV$e!j(t70zfDvYRjuY6+W|+ zk&+^3WmSOl;}JLfy|#9tDp$PqOS$`7%$@du1vQx})$6pLPj*iL8rIs+--}`6@Uki+ zW0>JYDj;lSWn}@uBGpJPS1|c|YHM7XnQ^HMxDGIya?4=wmv4U+`!^8rD$ESk9L~9R zv_ICdu5<78^EK3(X)OXxCvOKTaeoa!o48|{G~NCjk$-eG#r;j_Rxn^V|5I@P^A8n> zriaQsFG|Z{vAnARBcx3$LU*6UL{j(NzJM5f=|Mt{D?@)daSV~g;1M&q-mwzs^Z^}$ zM}96+w~u1C{6%D94O*4kVsj3IxgShpTo0Pe^8z~a3YjweN)?EIR*KU(I?aZx|AGO_ z@?A0bxbMv&an`9xyvh+h1$G-mvw`;MI&LXi2FhKJ7LtiB<1Z8eEoyF-l`_YyLO(t} zmKX;14#$CIr*o1_pK|d(Q2-ix4qfOl!fWJScsV_W;g?HERW>zGflrd4c|Bm&xYSfi z1@1VNUOz__G}ia%C}3m^oWx)U1nM_8Tn$})AGsrKN;!_G~~UkmMFUt-s-GEwm-fnXfQ zc$xQum!cuYxKwRC@FYxqx8gVzW?LYp;7L~cq+%nTH5?cmICC!n)NCJNQTzWb$^Wxf zYAc~{BG170s~yk(LpfXI&HZZ9M_Gu{v{)DM-wIl1@>;X zp}7=$)favyVhMNAhI7B}5r6s7`gJR?=Th^2V39&cbrtpT)&TGTX3@`1DJEH0_WSbB zdoTP3>REDEB>Bgv0`?p0n>^!A?q-3A=n8@531G~-5eyYM{3l7cJc=QK97kSNG

F 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" ] @@ -2680,7 +2690,7 @@ }, { "cell_type": "markdown", - "id": "7a028dda", + "id": "3b439592", "metadata": { "editable": true }, @@ -2694,7 +2704,7 @@ }, { "cell_type": "markdown", - "id": "bc325e1a", + "id": "65c84eb8", "metadata": { "editable": true }, @@ -2707,7 +2717,7 @@ }, { "cell_type": "markdown", - "id": "a7738ea8", + "id": "5bdabd24", "metadata": { "editable": true }, @@ -2718,7 +2728,7 @@ }, { "cell_type": "markdown", - "id": "b647158e", + "id": "9965ab90", "metadata": { "editable": true }, @@ -2730,7 +2740,7 @@ }, { "cell_type": "markdown", - "id": "273afa83", + "id": "23e0c2ff", "metadata": { "editable": true }, @@ -2743,7 +2753,7 @@ }, { "cell_type": "markdown", - "id": "70391792", + "id": "f740a54c", "metadata": { "editable": true }, @@ -2756,7 +2766,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "2b08e1a4", + "id": "4acc6d55", "metadata": { "collapsed": false, "editable": true @@ -2766,12 +2776,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "-0.012633802944855959 1.0011828302640124\n" + "-0.01212754811385597 1.0209518407597062\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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m4GHHkrez+eflyd9a9bo3UBHR/FFdq+9lhzg991XKyS0tWXfXkTvNC++GFiypLg09GQPPgi0tFQ7FVQoEanpYYT+9ERE9BUQufBCfb36avnCypXh8mxWrxY5+2xdb+LE6H7XrQvXs/PssMce4bJHHxWZNk3kX/5Fl02d6h/n97+PpmfOHB3fddfoevE0d3WJ7Lyzzps7N5w/Y4afJne4916RN97I/t6tdetEbr89+n4zueOO6HHi6QZEbrwx+b24895+O5z3wAOahz/9qcjChfml2fXmmyKzZomsWiUyZkx4jB12CNd58EGRm27S8fnzRUaMSH4fNo0jRvjHcdd/8MFwfp8+ImecEU7/+c/RdR9+WOSuu/J/P59/nv+6G6N8fpfdNXu2yDnn6O/H+sc/9LPvpQC0STfOvVU/+ecavggOa9aEX7KLLtLXX/0qzImlS/P7Era0hOudcYbI8uXhdGenm7PRYa+9/GWHHaavkyaFyzo7/W1FRNradPyf/klkwwaRjo7ovqz/+q/othdeKPLiiyJPP509OAAiQ4f673fKFJHf/CY67/77df0rrsieVyJ6kssVHK66Sk/UdnraNF1n0aJwnhu43G333z93GlzLloXbnnaayD//czi9++7+MURETjrJz6s1a3RZV1fm7427/nXX6bzFi/31H3ss+fOwx3DNmycyblw43dGh6xYSTFzvvaeDiH6vfvhDvRCJO+AAke23z7yfZ57RdCxaVFw6srH5sX695vczz4jccIPIk0+W7hhDh+oxFi/2j9tLdTc4bBzFSkD0tj+pBk2uYos1a4CVK4EXXgjnbdigxSPWypX6Oneuv709llvrZvPN9fX228OHsosWJR/fVmGdN0+LKtJp4N13/fUeeyw6ff31wAEH5PdA96OP9BmA9cgjwJFHAuefr9NvvQU8+2z4Hp5+Orp9R0d4/BUrdDqub18tynJdcglw2GHRNAPRvM30+eR6FnHTTcAvfhFOuw3ynn8+/MwAYMstk/eRVORoP698a1Ftsom+1teH89avB8aNy7zNW2/58/bdVx/S2zTZ79ro0fkXjd5zjz4LamwEvvpVHQBtm3PrrcCee/q19p5/Hnj77cz7tOvPmJF5ncmT9bmK6z//U79T+Vi5Epg4ETj4YK0UcMQRfhoHDQKeeCK//bls3iVVjpg6tfD90UZw5zBsWHjlaa8ELr44HP/JT0T++7+12CLblULSld1pp4l8+cvhtL16y3Rl3twcnU6lwvHTTxd54YXwqtwd/vY3vZqOz3/hhWia33wz87EffjjzsvgwY0b0ihgQuflmf72RI6N5tNlmOv+EE0QaG3XcLR7LdzjsMN3fsceG82bPFrntNn/dhoZoGj74QK+A45/bp5/q9F/+Es4bMUKLktz388ADIr/7XTivq0vk+OP94771lu7PvXN0xfPvf/7H/24k5ak7PPZYuL/p0/XK2S5bvlznP/FEOM+96s1m2239Y4noe3Lntbbq78L9Xh1yiBbBxjU16fJf/ELkk0/8vHDfu4jILbfovvK5OrfrzJsn8h//4adbROT115PnZ/POOyIffaTjW28dfs/ix3XvKPNx+OEi3/xmfuu+/rqu+/HHhR2jAtDji5WGD9dk2mIZQMQGDHdwv1xx7gnAHU45ReRb34rOi58USjXY5xPu4JZV33+/yKmnZt7+1lsLO9455+Re5/jjwzzasCF5nQkTCn+vBx6o+zzjjHDejBlh8IkP99wjst12Io88Es5bu9Z+w3V47bXoNKA/4iFDsqdlxQqRY47x57/yiu5vyZLk741bTAZokIwf/4ILsh/7xBN1m9ZWnb7hhnDZ4sUaPPfcM5x37LHJZeTr1oXFkCIigwf7xxLRPHLnfe1ryek66yz9ns+dq4HCFinZYd999YQHaHEUoOX3dvmLL/r7fPJJkb/+1U+7m2ebbx4+73PTvX69yKBB0fnTpomce67Iyy8n79Put18/HbfB4emn/ePa43z6aXiREXfNNSLnny9y/fXRbRYvTn4299Zb+vmeeaau6xZxW3Pm6Gdli/0qrOcHh69/XZP5/PPZf4ivvBKOjxoVzaVM5fXf/rY/z32wXe7hD3+ITsevqtzhRz8q/fH//d/1JJHtrmTcuOL2vWaNyHe+E04/91zubb7//XD8lltEPvssnG5rs9/4wob33kv+nB9/XPf3/vvhvKOO0tf58/WK1F3/ttv847vBL9OwalWYh2edFc4fPz55/fjd3LJlYVC1z8Q239zf7u23w0oPdth++8zpevxxfY3fDWcasn033UFE150yReTVV0X++Mfo8u9+Nzr9+eci/ftn36e9c2lpETnvPB13L+IefzwsATjwQH3+GL/I++ADkbo6HX/nHZGxY/U50rvvhnkRH1as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\n", "text/plain": [ "

" ] @@ -2819,7 +2829,7 @@ }, { "cell_type": "markdown", - "id": "5848dd32", + "id": "2b9b8e55", "metadata": { "editable": true }, diff --git a/doc/LectureNotes/_build/jupyter_execute/statistics_181_0.png b/doc/LectureNotes/_build/jupyter_execute/statistics_181_0.png index ec260ba1d7a73b3c8e2635ea60b394535a7b2c39..67f950c3aa70c273a4e84ac1bddf034e4d9775df 100644 GIT binary patch literal 5094 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 diff --git a/doc/LectureNotes/_build/jupyter_execute/statistics_188_1.png b/doc/LectureNotes/_build/jupyter_execute/statistics_188_1.png index b13e4947fbc92ef72452f125285cf81f4f43e2b3..9f8140fbe2d65f178e3f619bedc39306c5d2feb6 100644 GIT binary patch literal 9836 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 literal 9758 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 ISG5TJKWV-}IRF3v diff --git a/doc/LectureNotes/chapter1.ipynb b/doc/LectureNotes/chapter1.ipynb index d2273f8f7..9d5a99f5f 100644 --- a/doc/LectureNotes/chapter1.ipynb +++ b/doc/LectureNotes/chapter1.ipynb @@ -2,17 +2,34 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "id": "abf0787a", + "metadata": { + "editable": true + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "8675dd19", + "metadata": { + "editable": true + }, + "source": [ + "# Linear Regression" + ] + }, + { + "cell_type": "markdown", + "id": "90d6f1f0", + "metadata": { + "editable": true + }, "source": [ - "# Linear Regression\n", - "\n", - "\n", "## Introduction\n", "\n", - "\n", - "\n", - "\n", - "\n", "Our emphasis throughout this series of lectures is on understanding\n", "the mathematical aspects of different algorithms used in the fields of\n", "data analysis and machine learning.\n", @@ -43,10 +60,16 @@ "Learning, Scikit-Learn and Tensorflow (see below for links etc).\n", "Moreover, the examples we introduce will serve as inputs to many of\n", "our discussions later, as well as allowing you to set up models and\n", - "produce your own data and get started with programming.\n", - "\n", - "\n", - "\n", + "produce your own data and get started with programming." + ] + }, + { + "cell_type": "markdown", + "id": "7b60b0a7", + "metadata": { + "editable": true + }, + "source": [ "## What is Machine Learning?\n", "\n", "Statistics, data science and machine learning form important fields of\n", @@ -112,8 +135,6 @@ "Carlo methods are central elements in a proper understanding of many\n", "of algorithms and methods we will discuss.\n", "\n", - "\n", - "\n", "The approaches to machine learning are many, but are often split into\n", "two main categories. In *supervised learning* we know the answer to a\n", "problem, and let the computer deduce the logic behind it. On the other\n", @@ -141,11 +162,16 @@ "\n", "* The last ingredient is a so-called **cost/loss** function (or error or risk function) which allows us to present an estimate on how good our model is in reproducing the data it is supposed to train. \n", "\n", - "\n", - "\n", - "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**.\n", - "\n", - "\n", + "At the heart of basically all Machine Learning algorithms we will encounter so-called minimization or optimization algorithms. A large family of such methods are so-called **gradient methods**." + ] + }, + { + "cell_type": "markdown", + "id": "eef76920", + "metadata": { + "editable": true + }, + "source": [ "### A Frequentist approach to data analysis\n", "\n", "When you hear phrases like **predictions and estimations** and\n", @@ -171,9 +197,16 @@ "where the aim is to make predictions and find correlations. We focus\n", "less on for example extracting a probability distribution function (PDF). The PDF can be\n", "used in turn to make estimations and find causations such as given $A$\n", - "what is the likelihood of finding $B$.\n", - "\n", - "\n", + "what is the likelihood of finding $B$." + ] + }, + { + "cell_type": "markdown", + "id": "74b45ee0", + "metadata": { + "editable": true + }, + "source": [ "### What is a good model?\n", "\n", "In science and engineering we often end up in situations where we want to infer (or learn) a\n", @@ -196,9 +229,6 @@ "is that if we are not specific about what we mean by a *correct* model, there\n", "could easily be many different models that fit the given data set *equally well*.\n", "\n", - "\n", - "\n", - "\n", "The central question is this: what leads us to say that a model is correct or\n", "optimal for a given data set? To make the model inference problem well posed, i.e.,\n", "to guarantee that there is a unique optimal model for the given data, we need to\n", @@ -218,18 +248,16 @@ "simpler models become inadequate. For instance, if we work with a regression problem to fit a set of sample points, one\n", "may first try the simplest class of models, namely linear models, followed obviously by more complex models.\n", "\n", - "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures.\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "How to evaluate which model fits best the data is something we will come back to over and over again in these sets of lectures." + ] + }, + { + "cell_type": "markdown", + "id": "51c84b1e", + "metadata": { + "editable": true + }, + "source": [ "## Simple linear regression model using **scikit-learn**\n", "\n", "We start with perhaps our simplest possible example, using\n", @@ -245,7 +273,6 @@ "(tabulated again as a vector) with a linear dependence on $x$ plus a\n", "random noise added via the normal distribution.\n", "\n", - "\n", "The Numpy functions are imported used the **import numpy as np**\n", "statement and the random number generator for the uniform distribution\n", "is called using the function **np.random.rand()**, where we specificy\n", @@ -259,7 +286,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4779803a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = 2x+N(0,1),\n", @@ -268,7 +298,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b2f47871", + "metadata": { + "editable": true + }, "source": [ "where $N(0,1)$ represents random numbers generated by the normal\n", "distribution. From **Scikit-Learn** we import then the\n", @@ -296,13 +329,13 @@ "This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set.\n", "Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!\n", "\n", - "\n", "The Python code follows here." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, + "id": "1cdef5c4", "metadata": { "collapsed": false, "editable": true @@ -335,7 +368,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d07dd09e", + "metadata": { + "editable": true + }, "source": [ "This example serves several aims. It allows us to demonstrate several\n", "aspects of data analysis and later machine learning algorithms. The\n", @@ -349,7 +385,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6f6e8bb4", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = 10x+0.01 \\times N(0,1),\n", @@ -358,7 +397,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b2b85fd5", + "metadata": { + "editable": true + }, "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", @@ -376,7 +418,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "329ad4bb", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\chi^2 = \\frac{1}{n}\n", @@ -386,7 +431,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f3e5c4ad", + "metadata": { + "editable": true + }, "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", @@ -414,7 +462,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b0ffe38f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n", @@ -423,7 +474,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bfdd9400", + "metadata": { + "editable": true + }, "source": [ "The squared cost function results in an arithmetic mean-unbiased\n", "estimator, and the absolute-value cost function results in a\n", @@ -437,7 +491,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, + "id": "f3a56404", "metadata": { "collapsed": false, "editable": true @@ -465,7 +520,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b77ca4ff", + "metadata": { + "editable": true + }, "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", @@ -483,7 +541,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, + "id": "7c53db00", "metadata": { "collapsed": false, "editable": true @@ -521,7 +580,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "289acdad", + "metadata": { + "editable": true + }, "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" @@ -529,7 +591,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ed56c208", + "metadata": { + "editable": true + }, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -539,7 +604,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a2774f06", + "metadata": { + "editable": true + }, "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", @@ -557,7 +625,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1360472a", + "metadata": { + "editable": true + }, "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", @@ -566,14 +637,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "777f7aad", + "metadata": { + "editable": true + }, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "b0182619", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -582,7 +659,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "925427a2", + "metadata": { + "editable": true + }, "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", @@ -591,7 +671,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4e1404d3", + "metadata": { + "editable": true + }, "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", @@ -600,7 +683,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "07fcae5f", + "metadata": { + "editable": true + }, "source": [ "We present the \n", "squared logarithmic (quadratic) error" @@ -608,7 +694,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ad8627ec", + "metadata": { + "editable": true + }, "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", @@ -617,14 +706,16 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "02d8662a", + "metadata": { + "editable": true + }, "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", "as population counts, average sales of a commodity over a span of\n", "years etc. \n", "\n", - "\n", "Finally, another cost function is the Huber cost function used in robust regression.\n", "\n", "The rationale behind this possible cost function is its reduced\n", @@ -637,7 +728,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d6c17489", + "metadata": { + "editable": true + }, "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", @@ -646,13 +740,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7c75b052", + "metadata": { + "editable": true + }, "source": [ "Here $\\boldsymbol{a}=\\boldsymbol{y} - \\boldsymbol{\\tilde{y}}$.\n", "\n", - "\n", - "\n", - "\n", "We will discuss in more\n", "detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n", "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn." @@ -660,7 +754,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, + "id": "6c136271", "metadata": { "collapsed": false, "editable": true @@ -701,7 +796,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bd2f6e5a", + "metadata": { + "editable": true + }, "source": [ "Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding\n", "energies. A basic quantity which can be measured for the ground\n", @@ -713,7 +811,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1bc85e33", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\Delta M(N, Z) = M(N, Z) - uA,\n", @@ -722,14 +823,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "70c5d807", + "metadata": { + "editable": true + }, "source": [ "where $u$ is the Atomic Mass Unit" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "8ad3a692", + "metadata": { + "editable": true + }, "source": [ "$$\n", "u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n", @@ -738,14 +845,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c885dbac", + "metadata": { + "editable": true + }, "source": [ "The nucleon masses are" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "753ce14d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "m_p = 1.00727646693(9)u,\n", @@ -754,14 +867,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0aada199", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "8f72f12c", + "metadata": { + "editable": true + }, "source": [ "$$\n", "m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n", @@ -770,7 +889,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ffd008d4", + "metadata": { + "editable": true + }, "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", @@ -783,7 +905,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7cab8713", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n", @@ -792,7 +917,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f5ab1ec7", + "metadata": { + "editable": true + }, "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" @@ -800,7 +928,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "76247038", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n", @@ -809,11 +940,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ead3a52e", + "metadata": { + "editable": true + }, "source": [ "where $\\Delta_H c^2 = 7.2890$ MeV and $\\Delta_n c^2 = 8.0713$ MeV.\n", "\n", - "\n", "A popular and physically intuitive model which can be used to parametrize \n", "the experimental binding energies as function of $A$, is the so-called \n", "**liquid drop model**. The ansatz is based on the following expression" @@ -821,7 +954,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "00776fb1", + "metadata": { + "editable": true + }, "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", @@ -830,14 +966,14 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "be5156b5", + "metadata": { + "editable": true + }, "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", "\n", - "\n", - "\n", - "\n", "To arrive at the above expression we have assumed that we can make the following assumptions:\n", "\n", " * There is a volume term $a_1A$ proportional with the number of nucleons (the energy is also an extensive quantity). When an assembly of nucleons of the same size is packed together into the smallest volume, each interior nucleon has a certain number of other nucleons in contact with it. This contribution is proportional to the volume.\n", @@ -850,22 +986,29 @@ "\n", "We could also add a so-called pairing term, which is a correction term that\n", "arises from the tendency of proton pairs and neutron pairs to\n", - "occur. An even number of particles is more stable than an odd number. \n", - "\n", - "\n", + "occur. An even number of particles is more stable than an odd number." + ] + }, + { + "cell_type": "markdown", + "id": "fdcb3ae8", + "metadata": { + "editable": true + }, + "source": [ "### Organizing our data\n", "\n", "Let us start with reading and organizing our data. \n", "We start with the compilation of masses and binding energies from 2016.\n", "After having downloaded this file to our own computer, we are now ready to read the file and start structuring our data.\n", "\n", - "\n", "We start with preparing folders for storing our calculations and the data file over masses and binding energies. We import also various modules that we will find useful in order to present various Machine Learning methods. Here we focus mainly on the functionality of **scikit-learn**." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, + "id": "44191ff4", "metadata": { "collapsed": false, "editable": true @@ -884,7 +1027,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -909,14 +1052,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e704ea13", + "metadata": { + "editable": true + }, "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": null, + "execution_count": 6, + "id": "083ef002", "metadata": { "collapsed": false, "editable": true @@ -938,7 +1085,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b052d9d1", + "metadata": { + "editable": true + }, "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", @@ -946,13 +1096,13 @@ "always useful (unless you have a binary file or other types of compressed\n", "data) to actually open the file and simply take a look at it!\n", "\n", - "\n", "In particular, the program that outputs the final nuclear masses is written in Fortran with a specific format. It means that we need to figure out the format and which columns contain the data we are interested in. Pandas comes with a function that reads formatted output. After having admired the file, we are now ready to start massaging it with **pandas**. The file begins with some basic format information." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, + "id": "0f34c048", "metadata": { "collapsed": false, "editable": true @@ -973,7 +1123,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "807d6c8f", + "metadata": { + "editable": true + }, "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", @@ -983,7 +1136,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, + "id": "f8861251", "metadata": { "collapsed": false, "editable": true @@ -1012,7 +1166,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a8743cbd", + "metadata": { + "editable": true + }, "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", @@ -1028,7 +1185,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, + "id": "61461479", "metadata": { "collapsed": false, "editable": true @@ -1045,7 +1203,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bf880ec9", + "metadata": { + "editable": true + }, "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 $n\\times p$, 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." @@ -1053,7 +1214,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, + "id": "9ec9ba03", "metadata": { "collapsed": false, "editable": true @@ -1071,7 +1233,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7c67387f", + "metadata": { + "editable": true + }, "source": [ "Note well that we have made life simple here. We perform a fit in\n", "terms of the number of nucleons only. A more sophisticated fit can be\n", @@ -1083,7 +1248,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, + "id": "2a5aa5e9", "metadata": { "collapsed": false, "editable": true @@ -1096,7 +1262,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2ea94fce", + "metadata": { + "editable": true + }, "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." @@ -1104,7 +1273,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, + "id": "4c136044", "metadata": { "collapsed": false, "editable": true @@ -1134,14 +1304,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5dfc3135", + "metadata": { + "editable": true + }, "source": [ "As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**!" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, + "id": "abbc4dbd", "metadata": { "collapsed": false, "editable": true @@ -1182,7 +1356,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "db107026", + "metadata": { + "editable": true + }, "source": [ "With a deeper and deeper tree level, we can almost reproduce every\n", "single data point by increasing the max depth of the tree.\n", @@ -1194,14 +1371,14 @@ "we will most likely fail miserably in our attempt at making\n", "predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.\n", "\n", - "\n", "The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) \n", "functionality." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, + "id": "86dcf5be", "metadata": { "collapsed": false, "editable": true @@ -1241,14 +1418,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "16a42333", + "metadata": { + "editable": true + }, "source": [ "## Linear Regression, basic elements\n", "\n", - "\n", "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureAug27.mp4?vrtx=view-as-webpage).\n", "\n", - "\n", "Fitting a continuous function with linear parameterization in terms of the parameters $\\boldsymbol{\\beta}$.\n", "* Method of choice for fitting a continuous function!\n", "\n", @@ -1271,8 +1449,6 @@ "For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n", "Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n", "\n", - "\n", - "\n", "Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\\boldsymbol{x} =[x_0, x_1,\\dots, x_{n-1}]^T$. \n", "The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n", "\n", @@ -1285,7 +1461,6 @@ "\n", " The goal of the regression analysis is to extract/exploit relationship between $\\boldsymbol{y}$ and $\\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things.\n", "\n", - "\n", "Consider an experiment in which $p$ characteristics of $n$ samples are\n", "measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix \n", "$\\mathbf{X}$.\n", @@ -1304,7 +1479,6 @@ "\n", "Linear regression gives us a set of analytical equations for the parameters $\\beta_j$.\n", "\n", - "\n", "In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n", "consider the model we discussed for describing nuclear binding energies. \n", "\n", @@ -1314,7 +1488,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ed7f6b48", + "metadata": { + "editable": true + }, "source": [ "$$\n", "BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n", @@ -1323,7 +1500,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c621708d", + "metadata": { + "editable": true + }, "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", @@ -1332,7 +1512,6 @@ "Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the\n", "so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \\times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression. \n", "\n", - "\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", "\n", "Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is" @@ -1340,7 +1519,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9e26b3b1", + "metadata": { + "editable": true + }, "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", @@ -1349,17 +1531,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7ecf2445", + "metadata": { + "editable": true + }, "source": [ "where $\\epsilon_i$ is the error in our approximation. \n", "\n", - "\n", "For every set of values $y_i,x_i$ we have thus the corresponding set of equations" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4e3f8091", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1374,14 +1561,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e0de360e", + "metadata": { + "editable": true + }, "source": [ "Defining the vectors" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "0d25d3da", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n", @@ -1390,14 +1583,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "57956772", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "5cb1e06d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n", @@ -1406,14 +1605,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b52c9a04", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d521fbe", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n", @@ -1422,14 +1627,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "49a4e3f2", + "metadata": { + "editable": true + }, "source": [ "and the design matrix" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "562f4b4f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -1445,14 +1656,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d979cd1c", + "metadata": { + "editable": true + }, "source": [ "we can rewrite our equations as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "93f2605f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -1461,7 +1678,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "20c52a36", + "metadata": { + "editable": true + }, "source": [ "The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix).\n", "\n", @@ -1474,7 +1694,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6c5b9800", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1491,7 +1714,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "97c9a717", + "metadata": { + "editable": true + }, "source": [ "**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**\n", "\n", @@ -1500,7 +1726,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "58f60d8c", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}=\n", @@ -1516,14 +1745,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "eb681436", + "metadata": { + "editable": true + }, "source": [ "and without loss of generality we rewrite again our equations as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "0d2fd026", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n", @@ -1532,7 +1767,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "82ee72a3", + "metadata": { + "editable": true + }, "source": [ "The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values? \n", "\n", @@ -1541,7 +1779,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "bb867a75", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\begin{align*}\n", @@ -1558,7 +1799,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "177a56b6", + "metadata": { + "editable": true + }, "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", @@ -1571,7 +1815,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, + "id": "639eab41", "metadata": { "collapsed": false, "editable": true @@ -1588,7 +1833,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -1651,14 +1896,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e2f934a2", + "metadata": { + "editable": true + }, "source": [ "With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "270fcf49", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1667,7 +1918,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c6217145", + "metadata": { + "editable": true + }, "source": [ "throughout these lectures. \n", "\n", @@ -1676,7 +1930,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "40ea3dc2", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1685,14 +1942,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6eb268f2", + "metadata": { + "editable": true + }, "source": [ "and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "30d15d84", + "metadata": { + "editable": true + }, "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", @@ -1701,14 +1964,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0092f5fc", + "metadata": { + "editable": true + }, "source": [ "or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "f0e3eaab", + "metadata": { + "editable": true + }, "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", @@ -1717,19 +1986,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ba3587ca", + "metadata": { + "editable": true + }, "source": [ "This function is one possible way to define the so-called cost function.\n", "\n", - "\n", - "\n", "It is also common to define\n", "the function $C$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "f18299b6", + "metadata": { + "editable": true + }, "source": [ "$$\n", "C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n", @@ -1738,7 +2011,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "67284093", + "metadata": { + "editable": true + }, "source": [ "since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out. \n", "\n", @@ -1747,7 +2023,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5f555cfc", + "metadata": { + "editable": true + }, "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", @@ -1756,7 +2035,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8ac974cb", + "metadata": { + "editable": true + }, "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" @@ -1764,7 +2046,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "f1559872", + "metadata": { + "editable": true + }, "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", @@ -1773,7 +2058,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8e63a36c", + "metadata": { + "editable": true + }, "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", @@ -1789,7 +2077,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9954810b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n", @@ -1799,14 +2090,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "910c87ca", + "metadata": { + "editable": true + }, "source": [ "In practical terms it means we will require" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "693ad55a", + "metadata": { + "editable": true + }, "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", @@ -1815,14 +2112,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "781244b4", + "metadata": { + "editable": true + }, "source": [ "which results in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ae61b535", + "metadata": { + "editable": true + }, "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", @@ -1831,14 +2134,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2d8201cc", + "metadata": { + "editable": true + }, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "e323d90a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n", @@ -1847,14 +2156,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "14394cc1", + "metadata": { + "editable": true + }, "source": [ "We can rewrite" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "090b82c7", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n", @@ -1863,14 +2178,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "311ca5e8", + "metadata": { + "editable": true + }, "source": [ "as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "b4b47e6f", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -1879,14 +2200,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8a49c9ff", + "metadata": { + "editable": true + }, "source": [ "and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "744a34c9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", @@ -1895,7 +2222,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d2f65ed3", + "metadata": { + "editable": true + }, "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", @@ -1910,86 +2240,52 @@ "\n", "**Small question**: Do you think the example we have at hand here (the nuclear binding energies) can lead to problems in inverting the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$? What kind of problems can we expect? \n", "\n", - "\n", "The following matrix and vector relation will be useful here and for the rest of the course. Vectors are always written as boldfaced lower case letters and \n", "matrices as upper case boldfaced letters." ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ca450475", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "3\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial\\boldsymbol{b}^T\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=\\boldsymbol{b},\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "ff7b8b4f", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "4\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial\\boldsymbol{a}^T\\boldsymbol{A}\\boldsymbol{a}}{\\partial\\boldsymbol{a}}=(\\boldsymbol{A}+\\boldsymbol{A}^T)\\boldsymbol{a},\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "13df1ee1", + "metadata": { + "editable": true + }, "source": [ - "4\n", - "5\n", - " \n", - "<\n", - "<\n", - "<\n", - "!\n", - "!\n", - "M\n", - "A\n", - "T\n", - "H\n", - "_\n", - "B\n", - "L\n", - "O\n", - "C\n", - "K" + "$$\n", + "\\frac{\\partial tr(\\boldsymbol{B}\\boldsymbol{A})}{\\partial\\boldsymbol{A}}=\\boldsymbol{B}^T,\n", + "$$" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "36a0b11e", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial\\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}}=(\\boldsymbol{A}^{-1})^T.\n", @@ -1998,7 +2294,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "73c64903", + "metadata": { + "editable": true + }, "source": [ "We can then compute the second derivative of the cost function, which in our case is the second derivative\n", "of the means squared error. This leads to" @@ -2006,7 +2305,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4602f620", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial^2 C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}^T\\partial \\boldsymbol{\\beta}} =\\frac{2}{n}\\boldsymbol{X}^T\\boldsymbol{X}.\n", @@ -2015,7 +2317,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "51e19903", + "metadata": { + "editable": true + }, "source": [ "This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).\n", "\n", @@ -2024,7 +2329,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e6b248c3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n", @@ -2033,20 +2341,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "91b60702", + "metadata": { + "editable": true + }, "source": [ "The Hessian matrix for ordinary least squares is also proportional to\n", "the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find\n", "the eigenvalues of the covariance matrix and the Hessian matrix in\n", "terms of the singular values.\n", "\n", - "\n", "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "26a256b3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n", @@ -2055,14 +2368,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "af338ef6", + "metadata": { + "editable": true + }, "source": [ "and with" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "fecef307", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -2071,14 +2390,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d895336c", + "metadata": { + "editable": true + }, "source": [ "we have" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "a1de6a4a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n", @@ -2087,21 +2412,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "15669251", + "metadata": { + "editable": true + }, "source": [ "meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n", "\n", - "\n", "Let us now return to our nuclear binding energies and simply code the above equations. \n", "\n", - "\n", "It is rather straightforward to implement the matrix inversion and obtain the parameters $\\boldsymbol{\\beta}$. After having defined the matrix $\\boldsymbol{X}$ we simply need to \n", "write" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, + "id": "ab885c31", "metadata": { "collapsed": false, "editable": true @@ -2116,14 +2443,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ded01eba", + "metadata": { + "editable": true + }, "source": [ "Alternatively, you can use the least squares functionality in **Numpy** as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, + "id": "14561b3b", "metadata": { "collapsed": false, "editable": true @@ -2136,14 +2467,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d6abfb9b", + "metadata": { + "editable": true + }, "source": [ "And finally we plot our fit with and compare with data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, + "id": "b9e5c460", "metadata": { "collapsed": false, "editable": true @@ -2166,7 +2501,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "698df560", + "metadata": { + "editable": true + }, "source": [ "We can easily test our fit by computing the $R2$ score that we discussed in connection with the functionality of **Scikit-Learn** in the introductory slides.\n", "Since we are not using **Scikit-Learn** here we can define our own $R2$ function as" @@ -2174,7 +2512,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, + "id": "9dbe859a", "metadata": { "collapsed": false, "editable": true @@ -2187,14 +2526,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "74c9d52f", + "metadata": { + "editable": true + }, "source": [ "and we would be using it as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, + "id": "e8c140e8", "metadata": { "collapsed": false, "editable": true @@ -2206,14 +2549,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c131f9a3", + "metadata": { + "editable": true + }, "source": [ "We can easily add our **MSE** score as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, + "id": "00c1307d", "metadata": { "collapsed": false, "editable": true @@ -2229,14 +2576,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "afcf6b4d", + "metadata": { + "editable": true + }, "source": [ "and finally the relative error as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, + "id": "30ce0766", "metadata": { "collapsed": false, "editable": true @@ -2250,7 +2601,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "208f6b70", + "metadata": { + "editable": true + }, "source": [ "### The $\\chi^2$ function\n", "\n", @@ -2269,7 +2623,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "76ab8d32", + "metadata": { + "editable": true + }, "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", @@ -2278,17 +2635,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d9ad3f4d", + "metadata": { + "editable": true + }, "source": [ "where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements. \n", "\n", - "\n", "In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\boldsymbol{\\beta})$ by requiring" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "5f8ad792", + "metadata": { + "editable": true + }, "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", @@ -2297,14 +2659,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c9685750", + "metadata": { + "editable": true + }, "source": [ "which results in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "96b044c3", + "metadata": { + "editable": true + }, "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", @@ -2313,14 +2681,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "683761fd", + "metadata": { + "editable": true + }, "source": [ "or in a matrix-vector form as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "e93b0c33", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n", @@ -2329,7 +2703,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a15143d4", + "metadata": { + "editable": true + }, "source": [ "where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$. \n", "\n", @@ -2338,7 +2715,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ec94fb14", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n", @@ -2347,14 +2727,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "6e7a8085", + "metadata": { + "editable": true + }, "source": [ "as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "a093d2a1", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n", @@ -2363,14 +2749,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "32189c08", + "metadata": { + "editable": true + }, "source": [ "and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "042085f9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n", @@ -2379,14 +2771,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "2a711c1a", + "metadata": { + "editable": true + }, "source": [ "If we then introduce the matrix" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4c082c12", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n", @@ -2395,14 +2793,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "3ef9c8f8", + "metadata": { + "editable": true + }, "source": [ "we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d779743", + "metadata": { + "editable": true + }, "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", @@ -2411,14 +2815,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "b9f180ff", + "metadata": { + "editable": true + }, "source": [ "We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4bd7ff7a", + "metadata": { + "editable": true + }, "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", @@ -2427,14 +2837,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5a9a0e2a", + "metadata": { + "editable": true + }, "source": [ "resulting in" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "43526b6e", + "metadata": { + "editable": true + }, "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", @@ -2443,14 +2859,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "45c0e8b1", + "metadata": { + "editable": true + }, "source": [ "The first step here is to approximate the function $y$ with a first-order polynomial, that is we write" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "396a1bce", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n", @@ -2459,14 +2881,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c10268e7", + "metadata": { + "editable": true + }, "source": [ "By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "10c2e68c", + "metadata": { + "editable": true + }, "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", @@ -2475,14 +2903,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "4fe24ad6", + "metadata": { + "editable": true + }, "source": [ "and" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "2383a935", + "metadata": { + "editable": true + }, "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", @@ -2491,7 +2925,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1e3c0203", + "metadata": { + "editable": true + }, "source": [ "For a linear fit (a first-order polynomial) we don't need to invert a matrix!! \n", "Defining" @@ -2499,7 +2936,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1c9dbe17", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n", @@ -2508,7 +2948,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "35dc4610", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n", @@ -2517,7 +2960,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "66b6c18d", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n", @@ -2526,7 +2972,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "def0d04b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n", @@ -2535,7 +2984,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "7d6af2ed", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n", @@ -2544,14 +2996,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "02db20b1", + "metadata": { + "editable": true + }, "source": [ "we obtain" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "323f21f3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n", @@ -2560,7 +3018,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "03a686e4", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n", @@ -2569,15 +3030,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1239edc3", + "metadata": { + "editable": true + }, "source": [ "This approach (different linear and non-linear regression) suffers\n", "often from both being underdetermined and overdetermined in the\n", "unknown coefficients $\\beta_i$. A better approach is to use the\n", "Singular Value Decomposition (SVD) method discussed below. Or using\n", - "Lasso and Ridge regression. See below.\n", - "\n", - "\n", + "Lasso and Ridge regression. See below." + ] + }, + { + "cell_type": "markdown", + "id": "de3dc052", + "metadata": { + "editable": true + }, + "source": [ "### Fitting an Equation of State for Dense Nuclear Matter\n", "\n", "Before we continue, let us introduce yet another example. We are going to fit the\n", @@ -2598,7 +3069,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, + "id": "755ebe55", "metadata": { "collapsed": false, "editable": true @@ -2617,7 +3089,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -2680,16 +3152,24 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "fb8d2943", + "metadata": { + "editable": true + }, "source": [ "The above simple polynomial in density $\\rho$ gives an excellent fit\n", - "to the data. \n", - "\n", - "\n", - "\n", + "to the data." + ] + }, + { + "cell_type": "markdown", + "id": "84aa3cb0", + "metadata": { + "editable": true + }, + "source": [ "## Splitting our Data in Training and Test data\n", "\n", - "\n", "It is normal in essentially all Machine Learning studies to split the\n", "data in a training set and a test set (sometimes also an additional\n", "validation set). **Scikit-Learn** has an own function for this. There\n", @@ -2710,7 +3190,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, + "id": "31887c07", "metadata": { "collapsed": false, "editable": true @@ -2759,14 +3240,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0b2ef393", + "metadata": { + "editable": true + }, "source": [ "Alternatively, you could write your own test-train splitting function as shown here." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, + "id": "5c347db2", "metadata": { "collapsed": false, "editable": true @@ -2791,13 +3276,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "1c394fbb", + "metadata": { + "editable": true + }, "source": [ "But since **scikit-learn** has its own function for doing this and since\n", "it interfaces easily with **tensorflow** and other libraries, we\n", "normally recommend using the latter functionality.\n", "\n", - "\n", "As another example, we apply the training and testing split to \n", "to the above equation of state fitting example\n", "but now splitting the data into a training set and a test set." @@ -2805,7 +3292,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, + "id": "ae5eb741", "metadata": { "collapsed": false, "editable": true @@ -2820,7 +3308,7 @@ "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", - "DATA_ID = \"DataFiles/\"\n", + "DATA_ID = \"datafiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", @@ -2880,7 +3368,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "dbe0c366", + "metadata": { + "editable": true + }, "source": [ "## The Boston housing data example\n", "\n", @@ -2916,15 +3407,24 @@ "\n", "12. LSTAT: Percentage of lower status of the population\n", "\n", - "13. MEDV: Median value of owner-occupied homes in USD 1000s\n", - "\n", + "13. MEDV: Median value of owner-occupied homes in USD 1000s" + ] + }, + { + "cell_type": "markdown", + "id": "2a9cc829", + "metadata": { + "editable": true + }, + "source": [ "## Housing data, the code\n", "We start by importing the libraries" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, + "id": "a8843592", "metadata": { "collapsed": false, "editable": true @@ -2940,14 +3440,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9abbc574", + "metadata": { + "editable": true + }, "source": [ "and load the Boston Housing DataSet from **Scikit-Learn**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, + "id": "50b5d160", "metadata": { "collapsed": false, "editable": true @@ -2965,14 +3469,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "00dfdd50", + "metadata": { + "editable": true + }, "source": [ "Then we invoke Pandas" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, + "id": "ba5c8bb2", "metadata": { "collapsed": false, "editable": true @@ -2986,14 +3494,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ee060a44", + "metadata": { + "editable": true + }, "source": [ "and preprocess the data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, + "id": "7cd7e1ee", "metadata": { "collapsed": false, "editable": true @@ -3006,14 +3518,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "11cf13f4", + "metadata": { + "editable": true + }, "source": [ "We can then visualize the data" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, + "id": "c75837e3", "metadata": { "collapsed": false, "editable": true @@ -3030,14 +3546,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "e5f7bd90", + "metadata": { + "editable": true + }, "source": [ "It is now useful to look at the correlation matrix" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, + "id": "1a5ec28f", "metadata": { "collapsed": false, "editable": true @@ -3053,14 +3573,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "82358b49", + "metadata": { + "editable": true + }, "source": [ "From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, + "id": "870190cd", "metadata": { "collapsed": false, "editable": true @@ -3084,14 +3608,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "c7628b09", + "metadata": { + "editable": true + }, "source": [ "Now we start training our model" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, + "id": "3b1fe034", "metadata": { "collapsed": false, "editable": true @@ -3104,14 +3632,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "9f864351", + "metadata": { + "editable": true + }, "source": [ "We split the data into training and test sets" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, + "id": "9dd326a0", "metadata": { "collapsed": false, "editable": true @@ -3131,14 +3663,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "8bc24ccc", + "metadata": { + "editable": true + }, "source": [ "Then we use the linear regression functionality from **Scikit-Learn**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, + "id": "f04e7787", "metadata": { "collapsed": false, "editable": true @@ -3180,7 +3716,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, + "id": "e64f0d66", "metadata": { "collapsed": false, "editable": true @@ -3195,7 +3732,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d376f62d", + "metadata": { + "editable": true + }, "source": [ "## Reducing the number of degrees of freedom, overarching view\n", "\n", @@ -3211,7 +3751,6 @@ "techniques: the principal component analysis (PCA), Kernel PCA, and\n", "Locally Linear Embedding (LLE). \n", "\n", - "\n", "Principal component analysis and its various variants deal with the\n", "problem of fitting a low-dimensional [affine\n", "subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of\n", @@ -3219,8 +3758,6 @@ "is one of the most used tools in data modeling, compression and\n", "visualization.\n", "\n", - "\n", - "\n", "Before we proceed however, we will discuss how to preprocess our\n", "data. Till now and in connection with our previous examples we have\n", "not met so many cases where we are too sensitive to the scaling of our\n", @@ -3236,7 +3773,6 @@ "are very different scales. Therefore, it is typical to scale\n", "the features in a way to avoid such outlier values.\n", "\n", - "\n", "**Scikit-Learn** has several functions which allow us to rescale the\n", "data, normally resulting in much better results in terms of various\n", "accuracy scores. The **StandardScaler** function in **Scikit-Learn**\n", @@ -3247,7 +3783,6 @@ "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", - "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", @@ -3265,7 +3800,6 @@ "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", - "\n", "Many features are often scaled using standardization to improve\n", "performance. In **Scikit-Learn** this is given by the **StandardScaler**\n", "function as discussed above. It is easy however to write your own.\n", @@ -3275,7 +3809,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "353f7dc0", + "metadata": { + "editable": true + }, "source": [ "$$\n", "x_j^{(i)} \\rightarrow \\frac{x_j^{(i)} - \\overline{x}_j}{\\sigma(x_j)},\n", @@ -3284,7 +3821,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "5e1aa076", + "metadata": { + "editable": true + }, "source": [ "where $\\overline{x}_j$ and $\\sigma(x_j)$ are the mean and standard\n", "deviation, respectively, of the feature $x_j$. This ensures that each\n", @@ -3292,8 +3832,6 @@ "where we do not have the standard deviation or don't wish to calculate\n", "it, it is then common to simply set it to one.\n", "\n", - "\n", - "\n", "Let us consider the following vanilla example where we use both\n", "**Scikit-Learn** and write our own function as well. We produce a\n", "simple test design matrix with random numbers. Each column could then\n", @@ -3302,7 +3840,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, + "id": "b9b91c02", "metadata": { "collapsed": false, "editable": true @@ -3336,12 +3875,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "90353e0c", + "metadata": { + "editable": true + }, "source": [ "Small exercise: perform the standard scaling by including the standard deviation and compare with what Scikit-Learn gives.\n", "\n", - "\n", - "\n", "Another commonly used scaling method is min-max scaling. This is very\n", "useful for when we want the features to lie in a certain interval. To\n", "scale the feature $x_j$ to the interval $[a, b]$, we can apply the\n", @@ -3350,7 +3890,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "eb29b406", + "metadata": { + "editable": true + }, "source": [ "$$\n", "x_j^{(i)} \\rightarrow (b-a)\\frac{x_j^{(i)} - \\min(x_j)}{\\max(x_j) - \\min(x_j)} - a\n", @@ -3359,16 +3902,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "36c1a91c", + "metadata": { + "editable": true + }, + "source": [ + "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively." + ] + }, + { + "cell_type": "markdown", + "id": "4fd47015", + "metadata": { + "editable": true + }, "source": [ - "where $\\min(x_j)$ and $\\max(x_j)$ return the minimum and maximum value of $x_j$ over the data set, respectively.\n", - "\n", - "\n", - "\n", - "\n", "## Testing the Means Squared Error as function of Complexity\n", "\n", - "\n", "Before we proceed with a more detailed analysis of the so-called\n", "Bias-Variance tradeoff, we present here an example of the relation\n", "between model complexity and the mean squared error for the triaining\n", @@ -3380,13 +3930,13 @@ "\n", "The results here will vary as function of model complexity and the amount od data used for training. \n", "\n", - "\n", "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, + "id": "8c7dcd78", "metadata": { "collapsed": false, "editable": true @@ -3430,10 +3980,21 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "22ef09fb", + "metadata": { + "editable": true + }, + "source": [ + "## Exercises" + ] + }, + { + "cell_type": "markdown", + "id": "c81539de", + "metadata": { + "editable": true + }, "source": [ - "## Exercises\n", - "\n", "### Exercise: Setting up various Python environments\n", "\n", "The first exercise here is of a mere technical art. We want you to have \n", @@ -3493,11 +4054,16 @@ "analysis environment, available for free and under a commercial\n", "license.\n", "\n", - "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment.\n", - "\n", - "\n", - "\n", - "\n", + "We recommend using **Anaconda** if you are not too familiar with setting paths in a terminal environment." + ] + }, + { + "cell_type": "markdown", + "id": "b7cbad15", + "metadata": { + "editable": true + }, + "source": [ "### Exercise: making your own data and exploring scikit-learn\n", "\n", "We will generate our own dataset for a function $y(x)$ where $x \\in [0,1]$ and defined by random numbers computed with the uniform distribution. The function $y$ is a quadratic polynomial in $x$ with added stochastic noise according to the normal distribution $\\cal {N}(0,1)$.\n", @@ -3506,7 +4072,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, + "id": "aec3d518", "metadata": { "collapsed": false, "editable": true @@ -3519,7 +4086,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "0e5cd05f", + "metadata": { + "editable": true + }, "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", @@ -3530,7 +4100,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "83bc7720", + "metadata": { + "editable": true + }, "source": [ "$$\n", "MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n", @@ -3540,7 +4113,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "28e6d655", + "metadata": { + "editable": true + }, "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" @@ -3548,7 +4124,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "ab874e06", + "metadata": { + "editable": true + }, "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", @@ -3557,14 +4136,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "d936331f", + "metadata": { + "editable": true + }, "source": [ "where we have defined the mean value of $\\boldsymbol{y}$ as" ] }, { "cell_type": "markdown", - "metadata": {}, + "id": "4d0520ed", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", @@ -3573,14 +4158,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a4c22443", + "metadata": { + "editable": true + }, "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", - "\n", - "\n", - "\n", - "\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." + ] + }, + { + "cell_type": "markdown", + "id": "5da59397", + "metadata": { + "editable": true + }, + "source": [ "### Exercise: Normalizing our data\n", "\n", "A much used approach before starting to train the data is to preprocess our\n", @@ -3598,7 +4191,6 @@ "function included in **Scikit-Learn** is the **MinMaxScaler** which\n", "ensures that all features are exactly between $0$ and $1$. The\n", "\n", - "\n", "The **Normalizer** scales each data\n", "point such that the feature vector has a euclidean length of one. In other words, it\n", "projects a data point on the circle (or sphere in the case of higher dimensions) with a\n", @@ -3616,14 +4208,14 @@ "outliers, and might often lead to trouble for other scaling\n", "techniques.\n", "\n", - "\n", "It also common to split the data in a **training** set and a **testing** set. A typical split is to use $80\\%$ of the data for training and the rest\n", "for testing. This can be done as follows with our design matrix $\\boldsymbol{X}$ and data $\\boldsymbol{y}$ (remember to import **scikit-learn**)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, + "id": "74e0714b", "metadata": { "collapsed": false, "editable": true @@ -3636,14 +4228,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "af983a9c", + "metadata": { + "editable": true + }, "source": [ "Then we can use the standard scaler to scale our data as" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, + "id": "5ad3d9f9", "metadata": { "collapsed": false, "editable": true @@ -3658,7 +4254,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "699eebfa", + "metadata": { + "editable": true + }, "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", @@ -3667,14 +4266,13 @@ "One of \n", "the aims is to reproduce Figure 2.11 of [Hastie et al](https://github.com/CompPhysics/MLErasmus/blob/master/doc/Textbooks/elementsstat.pdf).\n", "\n", - "\n", - "\n", "Our data is defined by $x\\in [-3,3]$ with a total of for example $100$ data points." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, + "id": "eb9eb5fe", "metadata": { "collapsed": false, "editable": true @@ -3691,23 +4289,21 @@ }, { "cell_type": "markdown", - "metadata": {}, + "id": "a7dfb469", + "metadata": { + "editable": true + }, "source": [ "where $y$ is the function we want to fit with a given polynomial.\n", "\n", - "\n", "Write a first code which sets up a design matrix $X$ defined by a\n", "fifth-order polynomial. Scale your data and split it in training and\n", "test data.\n", "\n", - "\n", - "\n", "Perform an ordinary least squares and compute the means squared error\n", "and the $R2$ factor for the training data and the test data, with and\n", "without scaling.\n", "\n", - "\n", - "\n", "Add now a model which allows you to make polynomials up to degree\n", "$15$. Perform a standard OLS fitting of the training data and compute\n", "the MSE and $R2$ for the training and test data and plot both test and\n", @@ -3720,5 +4316,5 @@ ], "metadata": {}, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/doc/LectureNotes/gaussian.pdf b/doc/LectureNotes/gaussian.pdf index 868ff6e2e91c16f131305fd34cf874b480839e71..6bc7022ec2e5d4f63c8196e3b09da33d6ba541c9 100644 GIT binary patch delta 29 kcmaFc%=fmLuc3vpg=q`(?OJvdBO?P#Bg5^FYMHrN0If+1DgXcg delta 29 kcmaFc%=fmLuc3vpg=q`(?OJwYBST|j6Z7qlYMHrN0IgFBEdT%j