4936 lines
601 KiB
Plaintext
4936 lines
601 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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",
|
||
"\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.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## 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",
|
||
"\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",
|
||
"\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",
|
||
"### 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$.\n",
|
||
"\n",
|
||
"\n",
|
||
"### 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",
|
||
"\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",
|
||
"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.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## 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",
|
||
"\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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y = 2x+N(0,1),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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",
|
||
"\n",
|
||
"The Python code follows here."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_3_0.png"
|
||
},
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"This example serves several aims. It allows us to demonstrate several\n",
|
||
"aspects of data analysis and later machine learning algorithms. The\n",
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y = 10x+0.01 \\times N(0,1),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $x$ is defined as before. Does the fit look better? Indeed, by\n",
|
||
"reducing the role of the noise given by the normal distribution we see immediately that\n",
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\sigma_i^2$ is the variance (to be defined later) of the entry\n",
|
||
"$y_i$. We may not know the explicit value of $\\sigma_i^2$, it serves\n",
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_11_0.png"
|
||
},
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"Depending on the parameter in front of the normal distribution, we may\n",
|
||
"have a small or larger relative error. Try to play around with\n",
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"The intercept alpha: \n",
|
||
" [1.99977416]\n",
|
||
"Coefficient beta : \n",
|
||
" [[4.86546962]]\n",
|
||
"Mean squared error: 0.31\n",
|
||
"Variance score: 0.87\n",
|
||
"Mean squared log error: 0.01\n",
|
||
"Mean absolute error: 0.44\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_13_1.png"
|
||
},
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"The function **coef** gives us the parameter $\\beta$ of our fit while **intercept** yields \n",
|
||
"$\\alpha$. Depending on the constant in front of the normal distribution, we get values near or far from $alpha =2$ and $\\beta =5$. Try to play around with different parameters in front of the normal distribution. The function **meansquarederror** gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"The smaller the value, the better the fit. Ideally we would like to\n",
|
||
"have an MSE equal zero. The attentive reader has probably recognized\n",
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where we have defined the mean value of $\\boldsymbol{y}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Another quantity taht we will meet again in our discussions of regression analysis is \n",
|
||
" the mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the $l1$-norm loss. In our discussion above we presented the relative error.\n",
|
||
"The MAE is defined as follows"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\text{MAE}(\\boldsymbol{y}, \\boldsymbol{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n-1} \\left| y_i - \\tilde{y}_i \\right|.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We present the \n",
|
||
"squared logarithmic (quadratic) error"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\text{MSLE}(\\boldsymbol{y}, \\boldsymbol{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n - 1} (\\log_e (1 + y_i) - \\log_e (1 + \\tilde{y}_i) )^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\log_e (x)$ stands for the natural logarithm of $x$. This error\n",
|
||
"estimate is best to use when targets having exponential growth, such\n",
|
||
"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",
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"H_{\\delta}(\\boldsymbol{a})=\\left\\{\\begin{array}{cc}\\frac{1}{2} \\boldsymbol{a}^{2}& \\text{for }|\\boldsymbol{a}|\\leq \\delta\\\\ \\delta (|\\boldsymbol{a}|-\\frac{1}{2}\\delta ),&\\text{otherwise}.\\end{array}\\right.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_27_0.png"
|
||
},
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0.004999999999999994\n"
|
||
]
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\Delta M(N, Z) = M(N, Z) - uA,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $u$ is the Atomic Mass Unit"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The nucleon masses are"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"m_p = 1.00727646693(9)u,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"In the [2016 mass evaluation of by W.J.Huang, G.Audi, M.Wang, F.G.Kondev, S.Naimi and X.Xu](http://nuclearmasses.org/resources_folder/Wang_2017_Chinese_Phys_C_41_030003.pdf)\n",
|
||
"there are data on masses and decays of 3437 nuclei.\n",
|
||
"\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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $M_H$ is the mass of the hydrogen atom and $m_n$ is the mass of the neutron.\n",
|
||
"In terms of the mass excess the binding energy is given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"BE(N,Z) = a_1A-a_2A^{2/3}-a_3\\frac{Z^2}{A^{1/3}}-a_4\\frac{(N-Z)^2}{A},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $A$ stands for the number of nucleons and the $a_i$s are parameters which are determined by a fit \n",
|
||
"to the experimental data. \n",
|
||
"\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",
|
||
"\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. \n",
|
||
"\n",
|
||
"\n",
|
||
"### 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,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"Before we proceed, we define also a function for making our plots. You can obviously avoid this and simply set up various **matplotlib** commands every time you need them. You may however find it convenient to collect all such commands in one function and simply call this function."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"Our next step is to read the data on experimental binding energies and\n",
|
||
"reorganize them as functions of the mass number $A$, the number of\n",
|
||
"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",
|
||
"\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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"' \\nThis is taken from the data file of the mass 2016 evaluation. \\nAll 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'"
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"The data we are interested in are in columns 2, 3, 4 and 11, giving us\n",
|
||
"the number of neutrons, protons, mass numbers and binding energies,\n",
|
||
"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,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"We have now read in the data, grouped them according to the variables we are interested in. \n",
|
||
"We see how easy it is to reorganize the data using **pandas**. If we\n",
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" N Z A Element Ebinding\n",
|
||
"A \n",
|
||
"4 0 1 3 4 Li 1.153760\n",
|
||
"5 2 3 2 5 He 5.512132\n",
|
||
"6 7 3 3 6 Li 5.332331\n",
|
||
"7 12 4 3 7 Li 5.606439\n",
|
||
"8 17 4 4 8 Be 7.062435\n",
|
||
"... ... ... ... ... ...\n",
|
||
"264 3297 156 108 264 Hs 7.298375\n",
|
||
"265 3303 157 108 265 Hs 7.296247\n",
|
||
"266 3310 158 108 266 Hs 7.298273\n",
|
||
"269 3331 159 110 269 Ds 7.250154\n",
|
||
"270 3337 160 110 270 Ds 7.253775\n",
|
||
"\n",
|
||
"[264 rows x 5 columns]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"A = Masses['A']\n",
|
||
"Z = Masses['Z']\n",
|
||
"N = Masses['N']\n",
|
||
"Element = Masses['Element']\n",
|
||
"Energies = Masses['Ebinding']\n",
|
||
"print(Masses)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The next step, and we will define this mathematically later, is to set up the so-called **design matrix**. We will throughout call this matrix $\\boldsymbol{X}$.\n",
|
||
"It has dimensionality $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,
|
||
"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",
|
||
"metadata": {},
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"clf = skl.LinearRegression().fit(X, Energies)\n",
|
||
"fity = clf.predict(X)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Pretty simple! \n",
|
||
"Now we can print measures of how our fit is doing, the coefficients from the fits and plot the final fit together with our data."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Mean squared error: 0.02\n",
|
||
"Variance score: 0.95\n",
|
||
"Mean absolute error: 0.05\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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idDd3T2BLSpNV1xxBUuXLsVxHC699FLC4fA+tYtEIvT395PP5/F6J83b46gdrEY9PT3MmTNn5HGRSISenp6JambJOO+885g6dSpVVVX85Cc/4Vvf+hY33XST6vUeTzzxBKeeeipz587Ve+wwvLtelfYemzQ96/r6ehKJxMj38Xic+vr6CWxRaVq6dCkAHo+HFStWsHr16n1qF4/HqampUVC/x8FqVFdXt9/7rq6ubqKaWTLmzZtHVVUVAB/84Ad54YUXAFSvd3nhhRdYvXo1N9xwA6D32KG8t16V9h6bNGG9fPlydu3aRTabBWDNmjWcccYZE9uoEtPW1sb9998/8v3WrVuZMWMGp59+Oq+88gpQqNvpp58+UU0sWQer0Zlnnsmrr74KQD6fp62tjQ984AMT1cySccstt4x8vXXrVmbOnAmoXsOefvppnnvuOb72ta/R2dnJK6+8ovfY+zhQvSrtPTapNvL44x//yGOPPUYsFsPn82k2+Ht0dHTwzW9+k8WLFxOPx8nn8/zjP/4jAwMD/Ou//iutra1s376dr371qxU9G/zFF1/k4Ycf5tlnn+Wzn/0sn//850mn0wet0V133cXAwAD9/f185CMfmRwzT0fhQPX63ve+RyqVor6+ng0bNvDlL3+Z2bNnA6rX2rVrueyyyzjuuOMASCaTXHrppZx11ll6jx3Aweq1efPminqPTaqwFhERmYwmzTC4iIjIZKWwFhERKXEKaxERkRKnsBYRESlxCmsREZESp7AWEREpcQprERGREqewFilTL730EgsWLOChhx4as9e68847R+5bs2YNH/vYx47qdb/zne/wyU9+cp9/ixYt4h/+4R+OtskiFUVhLVKGXNflxhtv5IMf/CDr168/6td78803Wbp0KY8//vjIfevWrWPx4sUHfc5ZZ511yNf96le/yiOPPDLy78Mf/jBz5szh+uuvP+o2i1QShbVIGfrZz37GjBkz+NznPsdbb7111K+3bt06LrzwQlKpFNu3bwcKAX7sscce9WsP+853vsNTTz3F3XffPSk2VhApJm2tJFJmBgYG+Pd//3fuvfde8vk8b7/99gEf9+Uvf5mtW7ce8Gc/+9nPCAaDI9+vW7eOSy65hHPOOYcnnniCz3/+86xbt46LLrpoTNr83e9+l8cee4x77rmHxsbGMXlNkUqisBYpM7fffjsXXXQR06ZNwxhDNptl9+7dTJkyZb/HHY50Os2WLVtYtGgRfr+fm266ib/8y7+kra1tv2HwK6+8kt27dwOwZ88ePvnJTwKFLVcffPDBA77+9773PX75y19y77330tzcPNpfV0RQWIuUleFtTmtra/nlL38JQC6XY/369fuF9eH2rNevX8+0adMIh8MsWbKEjo4OnnvuOaZMmUI0Gt3neT/4wQ9Gvj7rrLN45JFH3re9q1at4oEHHuCee+7Zr30icvgU1iJl5KabbuIb3/gGF1988ch9X/va13jrrbc488wz93ns4fas331u2rIszjrrLG6//fb3nVx2OH74wx9y7733cu+99zJt2rSjei2RSqewFikTTz75JHv27OEv/uIv9rl/3rx5rFmz5ohf96233tonmM855xzuvffeo7psa/Pmzdxyyy00NTVxzTXX7POzq666io9+9KNH/NoilUj7WYuIiJQ4XbolIiJS4hTWIiIiJU5hLSIiUuIU1iIiIiVOYS0iIlLiFNYiIiIlTmEtIiJS4hTWIiIiJe7/B+CDXZoER0IZAAAAAElFTkSuQmCC\n",
|
||
"text/plain": [
|
||
"<Figure size 576x396 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_57_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 576x396 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_59_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" N Z A Element Ebinding Eapprox\n",
|
||
"A \n",
|
||
"4 0 1 3 4 Li 1.153760 1.153760\n",
|
||
"5 2 3 2 5 He 5.512132 5.512132\n",
|
||
"6 7 3 3 6 Li 5.332331 5.332331\n",
|
||
"7 12 4 3 7 Li 5.606439 5.606439\n",
|
||
"8 17 4 4 8 Be 7.062435 7.062435\n",
|
||
"... ... ... ... ... ... ...\n",
|
||
"264 3297 156 108 264 Hs 7.298375 7.298375\n",
|
||
"265 3303 157 108 265 Hs 7.296247 7.296247\n",
|
||
"266 3310 158 108 266 Hs 7.298273 7.298273\n",
|
||
"269 3331 159 110 269 Ds 7.250154 7.250154\n",
|
||
"270 3337 160 110 270 Ds 7.253775 7.253775\n",
|
||
"\n",
|
||
"[264 rows x 6 columns]\n",
|
||
"0.007012403613997257\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"\n",
|
||
"#Decision Tree Regression\n",
|
||
"from sklearn.tree import DecisionTreeRegressor\n",
|
||
"regr_1=DecisionTreeRegressor(max_depth=5)\n",
|
||
"regr_2=DecisionTreeRegressor(max_depth=7)\n",
|
||
"regr_3=DecisionTreeRegressor(max_depth=9)\n",
|
||
"regr_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",
|
||
"metadata": {},
|
||
"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",
|
||
"\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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n",
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAJjCAYAAADQ22+yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABt/0lEQVR4nO3dd3hT5fvH8XeSDsooILSUIQIqoCCggIqD4UDKKkVQFBFw4GKqyJChshFlumWLCihbKipLERThyw8URRBFNqUUKLTQNsn5/XGgUGlD056mTfm8risX5PQkz3Ofk5zcuZ/nnNgMwzAQEREREcvY87oDIiIiIgWNEiwRERERiynBEhEREbGYEiwRERERiynBEhEREbGYEiwRERERiwXkdQdErmTDhw/nl19+AWD37t2UL1+eQoUKATB37ty0/1/O008/Tb9+/bjuuusyXWfixIlcc801tGnTJsf9Pq9Hjx5s3LiRNWvWEBISYtnzioj4O5uugyWSP9xzzz1MnDiRm266Ka+7kiVHjhwhKiqK2rVr07hxYx555JG87pKISL6hIUKRfGry5Mk8+eSTtGrVipdffpm4uDief/55Hn74Ye655x46derEsWPHADM5+/XXX/n555/p0KEDffv2pU2bNrRs2ZLNmzcD0L9/f6ZOnQrATTfdxOTJk+nQoQP33HMPn376KQAul4tRo0Zx//3307ZtW1577TU6deqUYf/mzZtHgwYNiI6OZtasWVz8XW3r1q20b9+eli1bEh0dzYYNGzwur1atGvHx8WmPP3//559/pnXr1nTo0IFWrVqRkpLC8OHDad++Pc2bNycyMjItvsTERAYMGMADDzxA8+bNefvtt0lKSqJ+/fr8888/ac/dpUsXvvvuO0v2kYhIZpRgieRjBw4cYOHChYwbN46vvvqKOnXqMHfuXFauXEmhQoVYvHjxJY/Ztm0bTzzxBIsWLaJt27aMHz/+knVSUlIoWbIkn3/+OZMmTWLUqFEkJyczf/58tm/fzrJly/j888/Zt29fhv1yOp3MmzeP1q1bc88993Ds2DG+//57AFJTU3nhhRd44YUXWLZsGcOGDWPkyJGkpKRkuNztdnvcBrt27eKtt95i6dKlbN++ndjYWObOncvy5cuJjo7mo48+AmDSpEkkJyezfPlyFi1axP/+9z9+/fVX2rRpw/z58wHYu3cve/bsoUmTJl7tBxERb2kOlkg+VqdOHQICzLdp586d2bRpE9OnT2fPnj3s2rWL2rVrX/KYcuXKccMNNwBw4403snDhwgyf+9577wWgRo0apKSkkJSUxNq1a4mKiiI4OBiAhx9+mNmzZ1/y2JUrV+J2u7n77rsJCAigefPmzJo1i0aNGrFz507sdjuNGzcGoGbNmmnJUUbLL6ds2bKUL18egJtvvpnixYunJX8///wzRYoUAWD9+vUMGDAAh8OBw+Hgk08+ASA8PJzHHnuMPn36MHfuXNq1a4fD4bhsuyIiOaEESyQfK1y4cNr/33zzTbZt28aDDz7IbbfdhtPpJKMplBdPjLfZbBmuA6QlUTabDQDDMNKSufPs9oyL3J9++ilnz56ladOmgFkRO3r0KLt27cLhcKQ953k7d+7MdHmVKlXSLUtJSUl3/+JtsGbNGkaMGEHXrl259957qVKlCkuWLAEgICAg3fMfOnSIQoUKUblyZapVq8bKlStZtmwZ8+bNyzAmEREraYhQxE+sW7eOzp0706ZNG0qVKsX69etxuVyWttGoUSOWLFlCSkoKTqczw+rXP//8wy+//MKCBQtYtWoVq1atYt26ddSvX59Zs2ZRpUoVbDYbP/74IwDbt2+nc+fOmS53u91cddVV/PrrrwAsW7Ys0/79+OOPNGnShEcffZSaNWvy3XffpW2DBg0asHDhQtxuNykpKfTs2TPtDM1HH32UsWPHUqtWLcqUKWPpNhMRyYgSLBE/8cILLzB27FhatWrFc889xy233MLevXstbaNt27bUqlWLNm3a0KFDBwIDAy+5/MJnn33GfffdxzXXXHNJ/xYvXszp06eZPHkyU6ZMISoqiqFDhzJ58mSCgoIyXT5o0CDeeOMNoqOj2b17N2FhYRn2r0OHDmzcuJFWrVoRHR3N1Vdfzf79+3G73XTv3p3AwECioqJo06YNjRo1SquwNWnShKSkJDp06GDp9hIRyYwu0yAiadatW8exY8eIiooCzOt0BQcH07dv3zzuWc5s2bKFQYMGsWzZskuGKUVEcoMSLBFJc+TIEfr3709cXBxut5vq1avz2muvUaxYsbzuWrb169ePjRs3Mn78eOrUqZPX3RGRK4QSLBERERGLaQ6WiIiI+L2lS5fSvHlzmjZtypw5c/K6O7pMg4iIiPi3I0eOMH78eBYsWEBQUBAdOnTgtttu8/j7rLnN7xOsH/bk3cbLD1K5si+YWMiWmtddyFPHXEXzugt5JtW4sl/7JRxJed2FPOXgyp7d0qjSTp+25z5c1WdtnS68iYSEhEuWh4aGEhoamuFj1q9fz+23306JEiUAeOCBB/j666/p3r17bnbVI79PsERERKTgmDlzJlOmTLlkeffu3enRo0eGj4mNjU13eZfw8HC2bduWa33MCiVYIiIi4pEbz78ZaqXOnTsTHR19yfLMqlcAbrc73SVYDMPI80uyKMESERGRfMPTUGBmIiIi2LRpU9r9o0ePEh4ebnXXvKKzCEVERMQjl+H22S077rjjDjZs2EB8fDxnzpzhm2++oWHDhhZvBe+ogiUiIiJ+rUyZMvTp04fHH3+c1NRU2rVrR61atfK0T0qwRERExO+1atWKVq1a5XU30ijBEhEREY/cV/hlMbJDc7BERERELKYKloiIiHjky8s0FBSqYImIiIhYTBUsERER8chlaA6Wt1TBEhEREbGYKlgiIiLikc4i9J4qWCIiIiIWUwVLREREPHKpguU1VbBERERELKYKloiIiHikOVjeUwVLRERExGKqYImIiIhHug6W91TBEhEREbGYKlgiIiLikX6J0HuqYImIiIhYTAmWiIiIiMU0RCgiIiIe6UKj3lMFS0RERMRiqmCJiIiIRy4VsLymCpaIiIiIxVTBEhEREY90mQbvqYIlIiIiYjFVsERERMQjF7a87oLfUQVLRERExGKqYImIiIhHbp1F6DVVsEREREQspgqWiIiIeKQ5WN67YhMsw4Bp42xUqAQPtM+49rlhpY0V823YbBAUDI8876ZS1ey3eeoETH3TzrFYsNng8V5urquRO215YhgwcxyUrwT3t894nTWL4ftlgA3CykLHPhBaIvttnjoBM96E+HOxd+wF156L/eeV8O180mJ/6Hm4JpdiBzP+j990UKGyQWT7zE8+zup6WZFwAj4e6+BYrLmPO/d2cX0N83W3/jsbX3/hACCokEHH591Urpp79XjDMPj8LSdlK9lo3C7jQ8CSj5xs+8FF4WLmQTWsgo1OAwKz3ebpEwafvZXK8SNgs0P7ngFUutEsoG9e5WLNFy5sNggMhjbPBnB11dwrrhuGwfy3U4ioZKfhgxnHdPgfN0veT+FsooHdbiO6RxDlr89+n06fNJg/LpkTsQY2O0T3COKaG819vmWVk++/TD0Xv41WzwRSoaoj221dzpX8/jcMmHEu9qaZxP7TSvhmPnCuPx2eJ8fH/WkXxd7potitbkvylysywTq4Fz6dYufvHVChUsYfZIf3wRcf2xg8xU2JUrBtI7z7hp2xn2T/g3bOFBvX1zTo/YjB3t0wabCdEdPcHD9qfVuZObQXPp8Ce3aYB5mM/LsLvv0SBr0HIUXgyw9h6UzzoJhdn0+B62pC5COwbze8MxjemAbxR2HBxzBwChQvBb9thA/egJGfZL8tTw7uhdmTHfy9w0aFypknMVldL6s+meKg6k0GLR9xsXc3jB8UwOjpTuKPwryPHbz2jpMSpWDrRhtTXnfw1hxnjtvMyJG9bha862TvDoOylTL/EP/3dzeP9Q9MS4JyasG7TqrUsHPvsAAO7HYzdWgq/T8O4kScwbKPnfSZEkToVTb+2Ohi5vBUBs0KtqTd/4rd62bxuyns+9NNRKWMY0s5azBt0Fna9g6men0Hv29wMvfNZF78MCTb7S55J4VKNR00eTiQg7vdzHwtmZc+KsTJOIOYqSl0nxxC6FU2dvzi4pMRKfSfmf22PLmS3/+H9sKnU+AfD7Gbx30YNAVKlIJfN8J7b8CYHPTn0ylwfU1ofi72yYNh2DTOHfetbSs3qYLlvSsywVq9xMbdzQyuCs98nYBA6NzbTHjA/FZx8jg4U837X0y1sfNXG24XVLzO4JHnDEKKXHj8tHE2qtWCO5uaH84uF2zbaKNjdzNpqngthJeH3zbBNddl3lZA9osGGVq7BO5shsfYr7nePPg5AiA1BU4cg1JlzL85U2HhVNj1K7hdcPV18NBzpIt95jioWgsaNCUt9l83Qofu5v2rz8W+fRNUvA4e620eXAEqVoWEXIodYOUSOw0j3ZQK95w4ZLaeMxXmf2xnx692DDdUvNag4/OudPF//KaD6rXd3HXRvt/6s43HursAc9+XKW/w6yYbla4z6NrHlbbvK19v5Nq+B/hxmYvbHnBQMizz5N2ZYnBgt8HqL1wcO+QkrLyN1t0CKBluw5lq8NU0F3//6sbthvLX2mjzbACFilw4+H7+VirX1rJT/37HufgN/tjopu3zQQCUv9ZO6XI2/tzspvx1dtr3DiD0KvPxFaraOXUcnKkGAYHWH9A3LHNS/4EASoS7Ml1n1/9cXFXWTvX6Zv9vuN1ByQjzdeBMNfh6eir//OrC7YZy19pp9WwQhQpf6Ov8t5OpcpODuvcHpMW/4xcXrV8w4y93rZ1S5Wzs3Oyi/HV22vYKvhD/9XZOHzdyLf4r+f2/egncdZnYAwLh8d6kvR+vuag/AF9OhZ2/gnEu9g7/iX36OKhWC+64KPZtG+HRTGLPrK3ceO+L7/kswdq9ezcrVqzg8OHD2O12wsPDufvuu7npppt81YU0HbubH3zb/5f5Aax0hHkDs6w89wMbdW43X/hLP7HhcMDgKW5sNlgwzcaX02w81iPzSsfpk+B2Q7ESF5aVLG1wPM5G3buMTNuy2vmD3B//87yeIwD+bz18Mt7sR6vHzeUr5oLdAQOmmOXuRdPM2yM9Mn+u0yfBuCR2OB4HN98FpS6K/csPoFYuxQ7Q6VyCu31z9tb7aq4duwNee8eJzQZfTLMzf6qdx3tmnrCc3/cXD7GULA3Hj9qod5dB6QjzdWMY8NkHDm6+3ci1+Ns+bz7xzv9l3t+T8XBdbTvNHncQcY2NNV+6mP56Kn2mBLJqngu7A3pPDsRms7F8hpOvpjt5sHvmHU48t/+LlrjwfitR2saJOIOb7rRxVRkzkTEMg6UfOrnxNnuuJBcAUeeSvF1bMk+w4g4YFCtp48sJyRz626BQUYh8wnzc2vlO7A7oPqkQNpuNFTNS+Hp6Km3OJU8ZSToff/ELMRUvbeNknEHNO+2UPJe8GIbBVx+lcMNtjlyL/0p+/59Pcn73EPt/j/vzP4Da5/qz7BNwOMyKk80GC6fBgmnQMZux33JX5m3lR25DFSxv+STBmjNnDvPmzeOBBx5IS6iOHj3K4MGDad26NU888YQvupEtyWdh2jg7x49C7xHmh9LWn22cSYTfzyVoTuf5N5DBiJ52nKlwLBZ2/B98t9DGdTUMWjxiYPvv69MAu91zW3mpzh3mbd1ymDQQ3pgOv/4MZxJhx7mD1IXYYUxP89tXfCz8+X+waiFUqWEOC/w3diOD2GeNM4cMeozwRXTZs/VnG0mnbWz/n9l5lxOKlTATpGE9HKSm2og/Cn/8n4NvFsD1Ndy0fNSd8b6/aIQu+Qx8PM5B/FF4aWTmH/6+UCrCxlPDLhzlGz/o4LtPXcQfgT82ujmTCLu2mK9PZyoULWGuN7F3Cq5UOB5r8NdWNz8sclHpRhv3dgjgv6ML5v6/sDD5rMHct5ycOGrw9PC8/YRxu+DPTS6eGhVMxermEOGMoWfpNyOEHRtdnDlt8Ne5BM2VCkXOJY7v9D6Ly2lwItZg91Y3Py5O5ZobHDTJNP4L91POmvPCTh416Dosd4ZHvXUlv/+Tz5rVqONHode5/mz7GZISLyRorotiH3lR7OZxH66rYQ4LZiX2/7YlBYNPEqxZs2axaNEiQkLSzyvo2rUr0dHRuZ5gLZppY+tP5qu89u0GbTpnbU7NsViYPMRO2YoGL481CDp33HO7ocNzbm6qb94/e8YspQO8Osn84MloiNAw4HQCFA011z1xzEbJ0m6PbeXU0pmw7Sfz/7Vuh1adL/+Y2ANmqfq6mub9Ox6ATydD0mkz9vbPQc2LYneei73fJPPfjIYIDAMSE6DIudhPHjO/yYF5UHp3CERUhD5jsSx2gIUz7WzZYB7Nbm7gJrpzzhJXt8vGo8+5qHWruV8v3veDJ5sfuhkNEV6y7+PNCiaY+37ikADKXm3Q702XpfF/PcvJ7z+bMd94m51mj1/+LX/wHzeH/jaoe2/6OVoOh7n/o55xcMO54bPkM0ba/u81waziZDREiAFJp4y0SfMJ8QbFz+3/47EG015LpczVNp4bE0hgsHXflL+dncIfP5v75YbbHNzfKfNK03nFrrIRdrWNitXN/t/YIIAFE1OIP2Tgdhu0eiaIahnE/8KEQkDGQ4T/jf9UvEHx0ub/T8S6mfl6MuFX23l6dLCl8V/J7//FM2Hrudhr3w5RWYgdzPfjO+f689JF/XG74eHnyPC4P/Bc7BkNEf439hMXxZ5ZW1Iw+CTBCggIwOm8dNLu2bNnCQzM/W+rbTpnPak672wSvNnXzh33G7R+LP1ja9Y1WLXEzg113NgdMGuCjeBC0LlP5m04HFDrVvg+xkbzhw32/W1OpK5W23NbOdWqc9YOqhc7GQ/TRsOr70LR4rBxFZS7xkwObqxrzuOoXseswMyZAMGF4LE+mT+fwwE1b4V1MfDAw7D/b3PCadVzsb/dF26/H1o+lpNIMxbdOedJ1cVq1nOzcomdG282h8pmjHcQHAJd+2RedXI4oPZtBmuX22nRwW3u+39tVK9tcCYJxrwcwB33u2nTyfqqZbPHA2j2uHePsdlg0ftOKtWwUyrCxvqv3JStbKNEmI1qde38uNTN9XXModL5E50Eh0D7Xpm/jx0OGzfcauenGBf3PBTAwX/cHNlrcG0tO2eTDN7rl0K9+xw07Wj94ej+TkHc38m7x1Sr52D5xykc2OWm/PV2/vnVBTYoGWGj6i0ONixL5dpz8S+YlEJwIWjbK/NPRofDRrX6DjbGOGn8UCCH/nETu9dNlVoOkpMMPuyfzC33BnBfR+uPhVfy+z+qc9aTqvPOJsFbfaHB/dDqP/2pUdecx3VDHTP22RPM2B+/TOw33Qrfx0BkBrFn1lZ+pEnu3rMZhpHr12ddunQpEyZMoEGDBoSFhWGz2YiNjeWnn36iT58+tGjRItvP/cOe67L92GnjbJS/5sJlGvbshJnj7Qx9z83yz20snGlexuFiL41xExQM8z+y8edWG243XH2tweO90k9yz8jJ4+bzxx02P8Qe6uamRl08tnW+4pGZVLJ3OvfMceZB8/xp2v/uNOdbvPqeeX/tUvPmcJgTUDt0N+cLpCTDlx/Brq3mN7oK15pnF10u9oTj5vOfj/3BbubB+uvPYcnMS8/q6TWGy8YOUMiW6nXsYFaZyle6cPmFf3bamP62gzfed3pcLyUZ5n5oZ8c2u3mCw7UGXXq7srTvp7/tIO6wDWzQoZuLmvUMln1mZ8FM+yX7/pWxzizFf8xVNKshp/P5W6lEXHPhMg37drqZP9HJi++YFZ7Nq1ysmufCcEPx0vBQ70BKhttITTZY+rGT3dsMc5J7FRvteqaf5J6RU8cN5k1wEn/EHCpv9VQA1eraWTnXydezXJStlP7xz4wKpEio5+dMNbJ/KYP5bydT5poLl2nYv9PFgkkp9JxiVtn/+dXF8qmppCYbOAKh1TNBVKrhIDXZYPnHqfz9q7ltylaxE90z/ST3zOJfMDGZ40fMY03zp4OoeouDNXNT+WZ2KhH/if/JkYUuG38JR1J2wy8Q738H2fvomj4Oyl9z4TINe3bCrPEw5D2I+RwWZdCfF8eY1aUvPoI/z8V+9bXmJReyEvusc7Fjg/bdzGTNU1tZee83qrQzixFb4397K/qsrVsq7vVZW7nJJwkWwJEjR9iwYQOxsbG43W4iIiJo0KABZcqUydHz5iTBKgiym2AVFNlNsAqK7CZYBUFOEqyCICcJVkGQ3QSroPB1gvXL3ko+a6t+xT0+ays3+ewswjJlytCmTRtfNSciIiKSZ67I62CJiIhI1ukyDd7Tjz2LiIiIWEwVLBEREfFIZxF6TxUsEREREYupgiUiIiIeuQzVY7ylLSYiIiJiMVWwRERExCO36jFe0xYTERERsZgqWCIiIuKRziL0nipYIiIiIhZTBUtEREQ80lmE3tMWExEREbGYEiwRERERi2mIUERERDxya5K711TBEhEREbGYKlgiIiLikUv1GK9pi4mIiIhYTBUsERER8UiXafCetpiIiIiIxVTBEhEREY/0Y8/e0xYTERERsZgqWCIiIuKRy9B1sLylCpaIiIiIxVTBEhEREY90HSzvaYuJiIiIWEwVLBEREfHIretgeU1bTERERMRiqmCJiIiIR5qD5T1tMRERERGLKcESERERsZiGCEVERMQjXWjUe6pgiYiIiFhMFSwRERHxSD/27D2/T7DCHUl53YU85eLKLts6MPK6C3mqlP1sXnchz9iv7Jc+7iv7pX/FH/sk//P7BEtERERyl0sXGvWatpiIiIiIxZRgiYiIiEdubD67WWnz5s20a9eOqKgoOnfuzIEDBwBISEigW7duREZG0rFjR44ePQpASkoKffv2JTIykujoaHbv3p3ttpVgiYiISIHUt29fhg8fzuLFi2nVqhXDhw8HYMKECdSrV4+YmBjat2/PiBEjAJg9ezYhISHExMQwcOBABgwYkO22lWCJiIiIRy7D7rNbQkIC+/fvv+SWkJDgVZ9TUlLo1asX1atXB6BatWocOnQIgDVr1tCqVSsAWrZsyffff09qaipr1qyhdevWANSvX5/4+HgOHjyYrW2mSe4iIiKSb8ycOZMpU6Zcsrx79+706NEjy88TFBREVFQUAG63mylTpnDfffcBEBsbS1hYGAABAQEULVqU+Pj4dMsBwsLCOHz4MOXKlfM6DiVYIiIi4pEvf+y5c+fOREdHX7I8NDQ008fExMQwatSodMuqVKnCjBkzSElJoX///jidTp555pkMH28YBna7HcMwsNlslyzPDiVYIiIikm+EhoZ6TKYyEhkZSWRk5CXLExMTee655yhRogTvvfcegYGBAISHhxMXF0dERAROp5PExERKlChBmTJliI2NpWLFigDExcURHh6erTg0B0tEREQ8chs2n92s1LdvX6655homTJhAUFBQ2vJGjRqxaNEiAJYvX069evUIDAykUaNGLF68GIBNmzYRHBycreFBAJthGH59PeA/92Uv8ILiSr+a8ZV+Jfcrma7kntc9yFtX+rHvxqsP+LS9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T/z5vX85GiL0ns3wQQlpypQprF+/nv79+1OrlvmVf/PmzXTv3p2UlBQ2b96c7ed2H65qVTfTWfuTeapuaipcXR5GDzS/nQ8+d+YMmGfLffQpuF3mWP3wflCuDCScgtfeNg82YA4j9eia9TJzfpCV+M87cMica3b+9PTjJ2H4BPMkALsdGtwCfZ83q1n+Iivxf7bInOwa4ICwUjCkjzl0nJhknq7/7wEzye7WEVo3zctovHO52D/8BCZONau0F5v2tplgnjdluvla8OfLNOTkfeCvcrL/CwWb7/2tv5tfrpo1ht5P+9clWrzZ5wNGmV+szl+mwZfvfXvEztx54kzctGSoz9r6tfXrPmsrN/kkwQLYsGED4eHhXHvttWnLDh06xLRp03j11Vez/by5lWCJiIjkV75OsGosfs1nbW2P8l1buclno+MNGjS4ZFnZsmVzlFyJiIiI5Ed+NP1QRERE8kI+PB8t3/OjWUEiIiIi/kEVLBEREfGoIJ3d5yuqYImIiIhYTBUsERER8UgVLO+pgiUiIiJiMVWwRERExCOdROg9VbBERERELKYKloiIiHikOVjeUwVLRERExGKqYImIiIhnmoTlNVWwRERERCymBEtERETEYhoiFBEREY80yd17qmCJiIiIWEwVLBEREfHI0CR3r6mCJSIiImIxVbBERETEI83B8p4qWCIiIiIWUwVLREREPFMFy2uqYImIiIhYTBUsERER8UhnEXpPFSwRERERi6mCJSIiIp6pguU1VbBERERELKYKloiIiHik62B5TxUsEREREYupgiUiIiKeaQ6W11TBEhEREbGYEiwRERERi2mIUERERDzSJHfvqYIlIiIiYjFVsERERMQzTXL3mipYIiIiIhZTBUtEREQuQ3OwvKUKloiIiIjFVMESERERzzQHy2uqYImIiIhYTBUsERER8UwVLK+pgiUiIiJiMVWwRERExDNdyd1rqmCJiIiIWEwVLBEREfHI0Bwsr6mCJSIiImIxVbBERETEM1WwvKYKloiIiIjFlGCJiIiIWExDhCIiIuKZLtPgNVWwRERERCymBEtEREQ8shm+u1kpNjaWbt260aZNGzp06MD+/fsBSEhIoFu3bkRGRtKxY0eOHj0KQEpKCn379iUyMpLo6Gh2796d7baVYImIiEiB9Morr9CkSRMWLVpEVFQU48aNA2DChAnU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ERHxSHOwvKcKloiIiIjFVMESERERz1TB8poqWCIiIiIWU4IlIiIiYjENEYqIiIhnGiL0mipYIiIiIhZTBUtEREQ80mUavKcKloiIiIjFlGCJiIiIWEwJloiIiIjFNAdLREREPNMcLK+pgiUiIiJiMVWwRERExCOdReg9VbBERERELKYKloiIiHimCpbXVMESERERsZgqWCIiIuKZKlheUwVLRERExGKqYImIiIhHOovQe6pgiYiIiFhMCZaIiIiIxTREKCIiIp5piNBrqmCJiIiIWEwVLBEREfFIk9y9pwqWiIiIiMVUwRIRERHPVMHymipYIiIiIhZTBUtEREQ8UwXLa6pgiYiIiFhMFSwRERHxSGcRek8VLBERERGLqYIlIiIinqmC5TVVsEREREQspgqWiIiIeKYKltdUwRIRERGxmCpYIiIi4pHOIvSeKlgiIiIiFlOCJSIiIgXS/v376dixI1FRUXTq1IkDBw4AkJCQQLdu3YiMjKRjx44cPXoUgJSUFPr27UtkZCTR0dHs3r07220rwRIRERHPDB/eLDRx4kRatGjB4sWLadq0KePHjwdgwoQJ1KtXj5iYGNq3b8+IESMAmD17NiEhIcTExDBw4EAGDBiQ7baVYImIiEi+kZCQwP79+y+5JSQkeP1cbreb06dPA3DmzBkKFSoEwJo1a2jVqhUALVu25Pvvvyc1NZU1a9bQunVrAOrXr098fDwHDx7MVhya5C4iIiIe+XKS+8yZM5kyZcoly7t3706PHj28eq5evXrRoUMHZs+eTWpqKnPnzgUgNjaWsLAwAAICAihatCjx8fHplgOEhYVx+PBhypUr53UcSrBEREQk3+jcuTPR0dGXLA8NDc30MTExMYwaNSrdsipVqpCcnMwbb7zBfffdx4oVK+jevTtLliy55PGGYWC32zEMA5vNdsny7FCCJSIiIp75sIIVGhrqMZnKSGRkJJGRkemWxcfHExkZyX333QfAAw88wNChQzl+/Djh4eHExcURERGB0+kkMTGREiVKUKZMGWJjY6lYsSIAcXFxhIeHZysOzcESERGRAqdkyZIEBwezadMmADZv3kyRIkW46qqraNSoEYsWLQJg+fLl1KtXj8DAQBo1asTixYsB2LRpE8HBwdkaHgRVsERERORy/PBCozabjSlTpjBs2DDOnj1LkSJFmDx5MmDOzerf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Tz/2LCIiVxolWPmfz2fGtG/fnvbt/WS2s4iIiBSouVG+4keFWxERERH/4EfndomIiEhe0E/leE8VLBERERGLqYIlIiIinqmC5TVVsEREREQspgqWiIiIeKQ5WN5TBUtERETEYqpgiYiIiGeqYHlNFSwRERERi6mCJSIiIp6pguU1VbBERERELKYES0RERMRiGiIUERERj3SZBu+pgiUiIiJiMVWwRERExDNVsLymCpaIiIiIxVTBEhEREY9shkpY3lIFS0RERMRiqmCJiIiIZypgeU0VLBERERGLqYIlIiIiHuk6WN5TBUtERETEYqpgiYiIiGeqYHlNFSwRERERi6mCJSIiIh5pDpb3VMESERERsZgqWCIiIuKZKlheUwVLRERExGJKsEREREQspiFCERER8UiT3L2nCpaIiIiIxVTBEhEREc9UwfKaKlgiIiIiFlMFS0RERDzSHCzvqYIlIiIiYjFVsERERMQzQyUsb6mCJSIiImIxVbBERETEI83B8p4qWCIiIiIWUwVLREREPFMFy2uqYImIiIhYTBUsERER8cjmzuse+B9VsEREREQspgqWiIiIeKY5WF5TBUtERETEYkqwRERERCymIUIRERHxSBca9Z4qWCIiIiIWUwVLREREPNOPPXtNFSwRERERi6mCJSIiIh5pDpb3VMESERERsZgqWCIiIuKZKlheUwVLRERExGKqYImIiIhHmoPlPVWwRERERCymCpaIiIh4putgeU0VLBERERGLqYIlIiIiHmkOlvdUwRIRERGxmBIsERER8czw4S0XTJgwgcmTJ6fdT0hIoFu3bkRGRtKxY0eOHj0KQEpKCn379iUyMpLo6Gh2795thm8YjBkzhmbNmtG8eXM2b9582TaVYImIiEiBdOrUKQYOHMj06dPTLZ8wYQL16tUjJiaG9u3bM2LECABmz55NSEgIMTExDBw4kAEDBgCwYsUKdu/ezfLly3nnnXcYMGAATqfTY9tKsERERCTfSEhIYP/+/ZfcEhISvH6ulStXUqlSJbp27Zpu+Zo1a2jVqhUALVu25Pvvvyc1NZU1a9bQunVrAOrXr098fDwHDx5k7dq1NG/eHLvdTuXKlSlbtixbtmzx2LYmuYuIiIhHvpzkPnPmTKZMmXLJ8u7du9OjRw+vnqtNmzYA6YYHAWJjYwkLCwMgICCAokWLEh8fn245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dHPsYDyTu0/l8J5YggoF8cy4TtRqVAO7w87u/9vDhGc+IOnUGY/tlQgvzosfPUtE5XAw4IOXZ7L5220e27qcAwtqZCv28wlWvWUjAahRohzDbm6dlnA9Urk+j1a5lVS3i5MpZxixbTl/nTpKsD2AvjWbcmvpSthtdnacPMzQ/1tKotPzMahUcBHeuLk1FQqXNOf8/PYN64/u5unr76LnjfewKyF9rF3XzUyrdnnye5vXshV/dkWWfcFnbcUcesdnbeUmnyRYAPv27eO7777j33//xeVyUbp0aZo0aUKtWrVy9LxWJFjiv3yVYOVXeZFg5RfeJlgFTU4SrIIguwlWQaEEK//z2fjc1Vdffcl1KERERMQPFLA5WL5w5X79FREREckl+fBqNSIiIpKvqILlNVWwRERERCymCpaIiIh45lYFy1uqYImIiIhYTBUsERER8cgwcv/adgWNKlgiIiIiFlMFS0RERDzTHCyvqYIlIiIiYjFVsERERMQzXQfLa6pgiYiIiFhMCZaIiIiIxTREKCIiIp65dZkGb6mCJSIiImIxVbBERETEM01y95oqWCIiIiIWUwVLREREPDI0B8trqmCJiIiIWEwVLBEREfFMc7C8pgqWiIiIiMVUwRIRERHP9GPPXlMFS0RERMRiqmCJiIiIZ4bOIvSWKlgiIiIiFlMFS0RERDwyNAfLa6pgiYiIiFhMFSwRERHxTHOwvKYKloiIiIjFlGCJiIiIWExDhCIiIuKRJrl7TxUsEREREYupgiUiIiKeaZK711TBEhEREbGYzTAMDayKiIiIWEgVLBERERGLKcESERERsZgSLBERERGLKcESERERsZgSLBERERGLKcESERERsZgSLBERERGLKcESERERsZgSLBERERGLKcESERERsZgSLBERERGLKcESERERsZgSLBERERGLKcHKgaVLl9K8eXOaNm3KnDlz8ro7Pnf69GlatmzJ/v3787orPjdlyhRatGhBixYtGDt2bF53x+cmTpxI8+bNadGiBdOnT8/r7uSJMWPG0L9//7zuhs916tSJFi1aEBUVRVRUFFu3bs3rLvnUqlWraNu2LZGRkQwfPjyvuyP5WEBed8BfHTlyhPHjx7NgwQKCgoLo0KEDt912G9ddd11ed80ntm7dyqBBg9izZ09ed8Xn1q9fz7p161i4cCE2m42nnnqKb7/9lvvvvz+vu+YTGzdu5KeffmLJkiU4nU6aN29Oo0aNqFKlSl53zWc2bNjAwoULady4cV53xacMw2DPnj2sXr2agIAr7+Nj3759DB06lPnz51OqVCk6d+7M2rVradSoUV53TfIhVbCyaf369dx+++2UKFGCwoUL88ADD/D111/ndbd8Zt68eQwdOpTw8PC87orPhYWF0b9/f4KCgggMDOTaa6/l4MGDed0tn7n11luZNWsWAQEBHDt2DJfLReHChfO6Wz5z4sQJxo8fz7PPPpvXXfG5v//+G4AnnniC1q1b88knn+Rxj3zr22+/pXnz5kRERBAYGMj48eOpXbt2XndL8qkr7yuIRWJjYwkLC0u7Hx4ezrZt2/KwR741YsSIvO5Cnrn++uvT/r9nzx5iYmL47LPP8rBHvhcYGMikSZOYNm0azZo1o0yZMnndJZ8ZMmQIffr04dChQ3ndFZ9LSEigQYMGDB48mNTUVB5//HEqV67MnXfemddd84l///2XwMBAnn32WQ4dOkTjxo3p3bt3XndL8ilVsLLJ7XZjs9nS7huGke6+FHy7du3iiSee4JVXXqFSpUp53R2f69mzJxs2bODQoUPMmzcvr7vjE/Pnz6ds2bI0aNAgr7uSJ26++WbGjh1LsWLFuOqqq2jXrh1r167N6275jMvlYsOGDYwcOZK5c+eybds2Fi5cmNfdknxKCVY2RUREcPTo0bT7R48evSKHy65UmzdvpkuXLrz00ktER0fndXd8avfu3fzxxx8AhISE0LRpU/7888887pVvLF++nB9//JGoqCgmTZrEqlWrGDlyZF53y2c2bdrEhg0b0u4bhnFFzcUqXbo0DRo04KqrrqJQoULcd999V9TIhXhHCVY23XHHHWzYsIH4+HjOnDnDN998Q8OGDfO6W+IDhw4d4oUXXmDcuHG0aNEir7vjc/v372fQoEGkpKSQkpLCypUrqVu3bl53yyemT5/OsmXLWLx4MT179uSee+5h4MCBed0tnzl16hRjx44lOTmZ06dPs3Dhwivm5A6AJk2asG7dOhISEnC5XPzwww/UqFEjr7sl+dSV89XDYmXKlKFPnz48/vjjpKam0q5dO2rVqpXX3RIfmDp1KsnJyYwePTptWYcOHXjkkUfysFe+06hRI7Zt20abNm1wOBw0bdr0ikw0r0RNmjRh69attGnTBrfbzaOPPsrNN9+c193ymdq1a/PUU0/x6KOPkpqayp133smDDz6Y192SfMpmGIaR150QERERKUg0RCgiIiJiMSVYIiIiIhZTgiUiIiJiMSVYIiIiIhZTgiUiIiJiMSVYIiIiIhZTgiUiIiJiMSVYIuK1yMhIGjZsyK5du/K6KyIi+ZISLBHx2rJly6hUqRIrVqzI666IiORLSrBExGsOh4O6deteMT/yLCLiLf0WoYh47ezZsyxfvhz90paISMZUwRIRr40fP57w8HD27t1LYmJiXndHRCTfUYIlIl7ZsmULMTExTJ48mWLFimmiu4hIBpRgiUiWJScnM3DgQF5//XVKlChB9erV2bFjR153S0Qk31GCJSJZNnHiROrUqUOTJk0AqF69uia6i4hkQAmWiGTJtm3b+Prrrxk4cGDashtuuEEVLBGRDNgMnQYkIiIiYilVsEREREQspgRLRERExGJKsEREREQspgRLRERExGJKsEREREQspgRLRERExGJKsEREREQs9v8EaM1fUNakNQAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 720x720 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_61_12.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"* Gives an excellent introduction to central Machine Learning features with **understandable pedagogical** links to other methods like **Neural Networks**, **Support Vector Machines** etc\n",
|
||
"\n",
|
||
"* Analytical expression for the fitting parameters $\\boldsymbol{\\beta}$\n",
|
||
"\n",
|
||
"* Analytical expressions for statistical propertiers like mean values, variances, confidence intervals and more\n",
|
||
"\n",
|
||
"* Analytical relation with probabilistic interpretations \n",
|
||
"\n",
|
||
"* Easy to introduce basic concepts like bias-variance tradeoff, cross-validation, resampling and regularization techniques and many other ML topics\n",
|
||
"\n",
|
||
"* Easy to code! And links well with classification problems and logistic regression and neural networks\n",
|
||
"\n",
|
||
"* Allows for **easy** hands-on understanding of gradient descent methods\n",
|
||
"\n",
|
||
"* and many more features\n",
|
||
"\n",
|
||
"For more discussions of Ridge and Lasso regression, [Wessel van Wieringen's](https://arxiv.org/abs/1509.09169) article is highly recommended.\n",
|
||
"Similarly, [Mehta et al's article](https://arxiv.org/abs/1803.08823) is also recommended.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"Regression modeling deals with the description of the sampling distribution of a given random variable $y$ and how it varies as function of another variable or a set of such variables $\\boldsymbol{x} =[x_0, x_1,\\dots, x_{n-1}]^T$. \n",
|
||
"The first variable is called the **dependent**, the **outcome** or the **response** variable while the set of variables $\\boldsymbol{x}$ is called the independent variable, or the predictor variable or the explanatory variable. \n",
|
||
"\n",
|
||
"A regression model aims at finding a likelihood function $p(\\boldsymbol{y}\\vert \\boldsymbol{x})$, that is the conditional distribution for $\\boldsymbol{y}$ with a given $\\boldsymbol{x}$. The estimation of $p(\\boldsymbol{y}\\vert \\boldsymbol{x})$ is made using a data set with \n",
|
||
"* $n$ cases $i = 0, 1, 2, \\dots, n-1$ \n",
|
||
"\n",
|
||
"* Response (target, dependent or outcome) variable $y_i$ with $i = 0, 1, 2, \\dots, n-1$ \n",
|
||
"\n",
|
||
"* $p$ so-called explanatory (independent or predictor) variables $\\boldsymbol{x}_i=[x_{i0}, x_{i1}, \\dots, x_{ip-1}]$ with $i = 0, 1, 2, \\dots, n-1$ and explanatory variables running from $0$ to $p-1$. See below for more explicit examples. \n",
|
||
"\n",
|
||
" The goal of the regression analysis is to extract/exploit relationship between $\\boldsymbol{y}$ and $\\boldsymbol{x}$ in or to infer causal dependencies, approximations to the likelihood functions, functional relationships and to make predictions, making fits and many other things.\n",
|
||
"\n",
|
||
"\n",
|
||
"Consider an experiment in which $p$ characteristics of $n$ samples are\n",
|
||
"measured. The data from this experiment, for various explanatory variables $p$ are normally represented by a matrix \n",
|
||
"$\\mathbf{X}$.\n",
|
||
"\n",
|
||
"The matrix $\\mathbf{X}$ is called the *design\n",
|
||
"matrix*. Additional information of the samples is available in the\n",
|
||
"form of $\\boldsymbol{y}$ (also as above). The variable $\\boldsymbol{y}$ is\n",
|
||
"generally referred to as the *response variable*. The aim of\n",
|
||
"regression analysis is to explain $\\boldsymbol{y}$ in terms of\n",
|
||
"$\\boldsymbol{X}$ through a functional relationship like $y_i =\n",
|
||
"f(\\mathbf{X}_{i,\\ast})$. When no prior knowledge on the form of\n",
|
||
"$f(\\cdot)$ is available, it is common to assume a linear relationship\n",
|
||
"between $\\boldsymbol{X}$ and $\\boldsymbol{y}$. This assumption gives rise to\n",
|
||
"the *linear regression model* where $\\boldsymbol{\\beta} = [\\beta_0, \\ldots,\n",
|
||
"\\beta_{p-1}]^{T}$ are the *regression parameters*. \n",
|
||
"\n",
|
||
"Linear regression gives us a set of analytical equations for the parameters $\\beta_j$.\n",
|
||
"\n",
|
||
"\n",
|
||
"In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n",
|
||
"consider the model we discussed for describing nuclear binding energies. \n",
|
||
"\n",
|
||
"There we assumed that we could parametrize the data using a polynomial approximation based on the liquid drop model.\n",
|
||
"Assuming"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we have five predictors, that is the intercept, the $A$ dependent term, the $A^{2/3}$ term and the $A^{-1/3}$ and $A^{-1}$ terms.\n",
|
||
"This gives $p=0,1,2,3,4$. Furthermore we have $n$ entries for each predictor. It means that our design matrix is a \n",
|
||
"$p\\times n$ matrix $\\boldsymbol{X}$.\n",
|
||
"\n",
|
||
"Here the predictors are based on a model we have made. A popular data set which is widely encountered in ML applications is the\n",
|
||
"so-called [credit card default data from Taiwan](https://www.sciencedirect.com/science/article/pii/S0957417407006719?via%3Dihub). The data set contains data on $n=30000$ credit card holders with predictors like gender, marital status, age, profession, education, etc. In total there are $24$ such predictors or attributes leading to a design matrix of dimensionality $24 \\times 30000$. This is however a classification problem and we will come back to it when we discuss Logistic Regression. \n",
|
||
"\n",
|
||
"\n",
|
||
"Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n",
|
||
"\n",
|
||
"Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of $y$ which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree $n-1$ with $n$ points, that is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y=y(x) \\rightarrow y(x_i)=\\tilde{y}_i+\\epsilon_i=\\sum_{j=0}^{n-1} \\beta_j x_i^j+\\epsilon_i,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\epsilon_i$ is the error in our approximation. \n",
|
||
"\n",
|
||
"\n",
|
||
"For every set of values $y_i,x_i$ we have thus the corresponding set of equations"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"y_0&=\\beta_0+\\beta_1x_0^1+\\beta_2x_0^2+\\dots+\\beta_{n-1}x_0^{n-1}+\\epsilon_0\\\\\n",
|
||
"y_1&=\\beta_0+\\beta_1x_1^1+\\beta_2x_1^2+\\dots+\\beta_{n-1}x_1^{n-1}+\\epsilon_1\\\\\n",
|
||
"y_2&=\\beta_0+\\beta_1x_2^1+\\beta_2x_2^2+\\dots+\\beta_{n-1}x_2^{n-1}+\\epsilon_2\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{n-1}&=\\beta_0+\\beta_1x_{n-1}^1+\\beta_2x_{n-1}^2+\\dots+\\beta_{n-1}x_{n-1}^{n-1}+\\epsilon_{n-1}.\\\\\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Defining the vectors"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and the design matrix"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{X}=\n",
|
||
"\\begin{bmatrix} \n",
|
||
"1& x_{0}^1 &x_{0}^2& \\dots & \\dots &x_{0}^{n-1}\\\\\n",
|
||
"1& x_{1}^1 &x_{1}^2& \\dots & \\dots &x_{1}^{n-1}\\\\\n",
|
||
"1& x_{2}^1 &x_{2}^2& \\dots & \\dots &x_{2}^{n-1}\\\\ \n",
|
||
"\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n",
|
||
"1& x_{n-1}^1 &x_{n-1}^2& \\dots & \\dots &x_{n-1}^{n-1}\\\\\n",
|
||
"\\end{bmatrix}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we can rewrite our equations as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix).\n",
|
||
"\n",
|
||
"We are obviously not limited to the above polynomial expansions. We\n",
|
||
"could replace the various powers of $x$ with elements of Fourier\n",
|
||
"series or instead of $x_i^j$ we could have $\\cos{(j x_i)}$ or $\\sin{(j\n",
|
||
"x_i)}$, or time series or other orthogonal functions. For every set\n",
|
||
"of values $y_i,x_i$ we can then generalize the equations to"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n",
|
||
"y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n",
|
||
"y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_2\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_i\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_{n-1}x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**\n",
|
||
"\n",
|
||
"We redefine in turn the matrix $\\boldsymbol{X}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{X}=\n",
|
||
"\\begin{bmatrix} \n",
|
||
"x_{00}& x_{01} &x_{02}& \\dots & \\dots &x_{0,n-1}\\\\\n",
|
||
"x_{10}& x_{11} &x_{12}& \\dots & \\dots &x_{1,n-1}\\\\\n",
|
||
"x_{20}& x_{21} &x_{22}& \\dots & \\dots &x_{2,n-1}\\\\ \n",
|
||
"\\dots& \\dots &\\dots& \\dots & \\dots &\\dots\\\\\n",
|
||
"x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \\dots & \\dots &x_{n-1,n-1}\\\\\n",
|
||
"\\end{bmatrix}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and without loss of generality we rewrite again our equations as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values? \n",
|
||
"\n",
|
||
"We have defined the matrix $\\boldsymbol{X}$ via the equations"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
"y_0&=\\beta_0x_{00}+\\beta_1x_{01}+\\beta_2x_{02}+\\dots+\\beta_{n-1}x_{0n-1}+\\epsilon_0\\\\\n",
|
||
"y_1&=\\beta_0x_{10}+\\beta_1x_{11}+\\beta_2x_{12}+\\dots+\\beta_{n-1}x_{1n-1}+\\epsilon_1\\\\\n",
|
||
"y_2&=\\beta_0x_{20}+\\beta_1x_{21}+\\beta_2x_{22}+\\dots+\\beta_{n-1}x_{2n-1}+\\epsilon_1\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{i}&=\\beta_0x_{i0}+\\beta_1x_{i1}+\\beta_2x_{i2}+\\dots+\\beta_{n-1}x_{in-1}+\\epsilon_1\\\\\n",
|
||
"\\dots & \\dots \\\\\n",
|
||
"y_{n-1}&=\\beta_0x_{n-1,0}+\\beta_1x_{n-1,2}+\\beta_2x_{n-1,2}+\\dots+\\beta_{n-1}x_{n-1,n-1}+\\epsilon_{n-1}.\\\\\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"As we noted above, we stayed with a system with the design matrix \n",
|
||
" $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times n}$, that is we have $p=n$. For reasons to come later (algorithmic arguments) we will hereafter define \n",
|
||
"our matrix as $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$, with the predictors refering to the column numbers and the entries $n$ being the row elements.\n",
|
||
"\n",
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>1</th>\n",
|
||
" <th>A</th>\n",
|
||
" <th>A^(2/3)</th>\n",
|
||
" <th>A^(-1/3)</th>\n",
|
||
" <th>1/A</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>A</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" <td>2.519842</td>\n",
|
||
" <td>0.629961</td>\n",
|
||
" <td>0.250000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>2.924018</td>\n",
|
||
" <td>0.584804</td>\n",
|
||
" <td>0.200000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>6.0</td>\n",
|
||
" <td>3.301927</td>\n",
|
||
" <td>0.550321</td>\n",
|
||
" <td>0.166667</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>7.0</td>\n",
|
||
" <td>3.659306</td>\n",
|
||
" <td>0.522758</td>\n",
|
||
" <td>0.142857</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>4.000000</td>\n",
|
||
" <td>0.500000</td>\n",
|
||
" <td>0.125000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>264</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>264.0</td>\n",
|
||
" <td>41.153106</td>\n",
|
||
" <td>0.155883</td>\n",
|
||
" <td>0.003788</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>265</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>265.0</td>\n",
|
||
" <td>41.256962</td>\n",
|
||
" <td>0.155687</td>\n",
|
||
" <td>0.003774</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>266</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>266.0</td>\n",
|
||
" <td>41.360688</td>\n",
|
||
" <td>0.155491</td>\n",
|
||
" <td>0.003759</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>269</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>269.0</td>\n",
|
||
" <td>41.671089</td>\n",
|
||
" <td>0.154911</td>\n",
|
||
" <td>0.003717</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>270</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>270.0</td>\n",
|
||
" <td>41.774300</td>\n",
|
||
" <td>0.154720</td>\n",
|
||
" <td>0.003704</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>264 rows × 5 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" 1 A A^(2/3) A^(-1/3) 1/A\n",
|
||
"A \n",
|
||
"4 1.0 4.0 2.519842 0.629961 0.250000\n",
|
||
"5 1.0 5.0 2.924018 0.584804 0.200000\n",
|
||
"6 1.0 6.0 3.301927 0.550321 0.166667\n",
|
||
"7 1.0 7.0 3.659306 0.522758 0.142857\n",
|
||
"8 1.0 8.0 4.000000 0.500000 0.125000\n",
|
||
".. ... ... ... ... ...\n",
|
||
"264 1.0 264.0 41.153106 0.155883 0.003788\n",
|
||
"265 1.0 265.0 41.256962 0.155687 0.003774\n",
|
||
"266 1.0 266.0 41.360688 0.155491 0.003759\n",
|
||
"269 1.0 269.0 41.671089 0.154911 0.003717\n",
|
||
"270 1.0 270.0 41.774300 0.154720 0.003704\n",
|
||
"\n",
|
||
"[264 rows x 5 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Common imports\n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from IPython.display import display\n",
|
||
"import os\n",
|
||
"\n",
|
||
"# Where to save the figures and data files\n",
|
||
"PROJECT_ROOT_DIR = \"Results\"\n",
|
||
"FIGURE_ID = \"Results/FigureFiles\"\n",
|
||
"DATA_ID = \"DataFiles/\"\n",
|
||
"\n",
|
||
"if not os.path.exists(PROJECT_ROOT_DIR):\n",
|
||
" os.mkdir(PROJECT_ROOT_DIR)\n",
|
||
"\n",
|
||
"if not os.path.exists(FIGURE_ID):\n",
|
||
" os.makedirs(FIGURE_ID)\n",
|
||
"\n",
|
||
"if not os.path.exists(DATA_ID):\n",
|
||
" os.makedirs(DATA_ID)\n",
|
||
"\n",
|
||
"def image_path(fig_id):\n",
|
||
" return os.path.join(FIGURE_ID, fig_id)\n",
|
||
"\n",
|
||
"def data_path(dat_id):\n",
|
||
" return os.path.join(DATA_ID, dat_id)\n",
|
||
"\n",
|
||
"def save_fig(fig_id):\n",
|
||
" plt.savefig(image_path(fig_id) + \".png\", format='png')\n",
|
||
"\n",
|
||
"infile = open(data_path(\"MassEval2016.dat\"),'r')\n",
|
||
"\n",
|
||
"\n",
|
||
"# Read the experimental data with Pandas\n",
|
||
"Masses = pd.read_fwf(infile, usecols=(2,3,4,6,11),\n",
|
||
" names=('N', 'Z', 'A', 'Element', 'Ebinding'),\n",
|
||
" widths=(1,3,5,5,5,1,3,4,1,13,11,11,9,1,2,11,9,1,3,1,12,11,1),\n",
|
||
" header=39,\n",
|
||
" index_col=False)\n",
|
||
"\n",
|
||
"# Extrapolated values are indicated by '#' in place of the decimal place, so\n",
|
||
"# the Ebinding column won't be numeric. Coerce to float and drop these entries.\n",
|
||
"Masses['Ebinding'] = pd.to_numeric(Masses['Ebinding'], errors='coerce')\n",
|
||
"Masses = Masses.dropna()\n",
|
||
"# Convert from keV to MeV.\n",
|
||
"Masses['Ebinding'] /= 1000\n",
|
||
"\n",
|
||
"# Group the DataFrame by nucleon number, A.\n",
|
||
"Masses = Masses.groupby('A')\n",
|
||
"# Find the rows of the grouped DataFrame with the maximum binding energy.\n",
|
||
"Masses = Masses.apply(lambda t: t[t.Ebinding==t.Ebinding.max()])\n",
|
||
"A = Masses['A']\n",
|
||
"Z = Masses['Z']\n",
|
||
"N = Masses['N']\n",
|
||
"Element = Masses['Element']\n",
|
||
"Energies = Masses['Ebinding']\n",
|
||
"\n",
|
||
"# Now we set up the design matrix X\n",
|
||
"X = np.zeros((len(A),5))\n",
|
||
"X[:,0] = 1\n",
|
||
"X[:,1] = A\n",
|
||
"X[:,2] = A**(2.0/3.0)\n",
|
||
"X[:,3] = A**(-1.0/3.0)\n",
|
||
"X[:,4] = A**(-1.0)\n",
|
||
"# Then nice printout using pandas\n",
|
||
"DesignMatrix = pd.DataFrame(X)\n",
|
||
"DesignMatrix.index = A\n",
|
||
"DesignMatrix.columns = ['1', 'A', 'A^(2/3)', 'A^(-1/3)', '1/A']\n",
|
||
"display(DesignMatrix)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"throughout these lectures. \n",
|
||
"\n",
|
||
"With the above we use the design matrix to define the approximation $\\boldsymbol{\\tilde{y}}$ via the unknown quantity $\\boldsymbol{\\beta}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"C(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"This function is one possible way to define the so-called cost function.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"It is also common to define\n",
|
||
"the function $C$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out. \n",
|
||
"\n",
|
||
"The function"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"can be linked to the variance of the quantity $y_i$ if we interpret the latter as the mean value. \n",
|
||
"When linking (see the discussion below) with the maximum likelihood approach below, we will indeed interpret $y_i$ as a mean value"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y_{i}=\\langle y_i \\rangle = \\beta_0x_{i,0}+\\beta_1x_{i,1}+\\beta_2x_{i,2}+\\dots+\\beta_{n-1}x_{i,n-1}+\\epsilon_i,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\langle y_i \\rangle$ is the mean value. Keep in mind also that\n",
|
||
"till now we have treated $y_i$ as the exact value. Normally, the\n",
|
||
"response (dependent or outcome) variable $y_i$ the outcome of a\n",
|
||
"numerical experiment or another type of experiment and is thus only an\n",
|
||
"approximation to the true value. It is then always accompanied by an\n",
|
||
"error estimate, often limited to a statistical error estimate given by\n",
|
||
"the standard deviation discussed earlier. In the discussion here we\n",
|
||
"will treat $y_i$ as our exact value for the response variable.\n",
|
||
"\n",
|
||
"In order to find the parameters $\\beta_i$ we will then minimize the spread of $C(\\boldsymbol{\\beta})$, that is we are going to solve the problem"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n",
|
||
"{\\mathbb{R}}^{p}}}\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"In practical terms it means we will require"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)^2\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"which results in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_{ij}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"or in a matrix-vector form as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We can rewrite"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We note also that since our design matrix is defined as $\\boldsymbol{X}\\in\n",
|
||
"{\\mathbb{R}}^{n\\times p}$, the product $\\boldsymbol{X}^T\\boldsymbol{X} \\in\n",
|
||
"{\\mathbb{R}}^{p\\times p}$. In the above case we have that $p \\ll n$,\n",
|
||
"in our case $p=5$ meaning that we end up with inverting a small\n",
|
||
"$5\\times 5$ matrix. This is a rather common situation, in many cases we end up with low-dimensional\n",
|
||
"matrices to invert. The methods discussed here and for many other\n",
|
||
"supervised learning algorithms like classification with logistic\n",
|
||
"regression or support vector machines, exhibit dimensionalities which\n",
|
||
"allow for the usage of direct linear algebra methods such as **LU** decomposition or **Singular Value Decomposition** (SVD) for finding the inverse of the matrix\n",
|
||
"$\\boldsymbol{X}^T\\boldsymbol{X}$. \n",
|
||
"\n",
|
||
"**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": {},
|
||
"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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial\\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}}=(\\boldsymbol{A}^{-1})^T.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and with"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n",
|
||
"\n",
|
||
"\n",
|
||
"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": 16,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"Alternatively, you can use the least squares functionality in **Numpy** as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"And finally we plot our fit with and compare with data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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RETE5xTmIiOIbduccsopnHzyyXvtmD09PRx44IF89rOf3e7+r3/969x8880f+vjf+973OPzww7f7OuSQQzjwwAN5+umnP/TxRUaDUbECnMho8bOf/YzOzk56e3vJZDLE4/EPfczly5eTTCZ599132bJlS2k96+XLl3Puuefu8nV33nknAFdeeeVuj3/FFVdwxRVXlG6n02k+//nPU1dXxyc/+ckPXb/IaKCeucgI0dvby/e+9z1uuOEGAoEAK1eu3CvHffvttzn44IM55phjeP755wFwHId33nmHmTNn7pX3GJDL5bjsssuIxWLceeedhEKhvXp8kZFKPXOREeIHP/gB++23H6eeeio//OEPWbFiBYcddtgOz7v00ktLm0283xFHHMFdd9213X3Lli1jxowZTJkyhaeeeoqzzz6bVatW4TgO06ZN22v1FwoFrrjiCizLYvHixUQikb12bJGRTmEuMgKsW7eO++67j8WLFwOw//77s2LFip0+9/1h/UGWL1/OiSeeyNFHH81NN91EKpVi+fLlHHDAAXut52zbNl/+8pfp6Ojgpz/9KVVVVXvluCKjhcJcZAS49dZb+fjHP85RRx0FFMN82/3pB6tQKLBq1SpmzpxJbW0thxxyCC+++CLLly9nxowZOzx/215/Pp8H4Cc/+Qmw814/gOu6XHvttaxevZp7772X6urqD123yGijMBfxuVdffZVnn32WRCLBMcccAxTPPZvmzqfEXHzxxbsdZv/xj39cuv3OO+8QiUSYOHEiACeddBLPPfcc7e3tO52ctm1Y7+kEuJtuuomlS5dy//3309DQsNvnisjOKcxFfMzzPG655RbOPvvs7WaEb9iwgc985jNs2LCBcePGbfeabcP6gwz0wA3DAODEE0/kjjvuwDTNDwzpPfHNb36TF198kfvvv780S15EyqcwF/GxJ598ko6ODq6++urtzjM3NTVRVVXFihUrdgjzcixfvny7Gevjx49n/PjxrFixYqfD7OV45513uOeeewiFQpx66qnbPRaLxXjppZd2ObogItszPM/zhroIERERGTz92SsiIuJzCnMRERGfU5iLiIj4nMJcRETE5xTmIiIiPqcwFxER8TmFuYiIiM8pzEVERHzu/wcIkgT1XzdEzgAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 576x396 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_136_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"Masses['Eapprox'] = ytilde\n",
|
||
"# Generate a plot comparing the experimental with the fitted values values.\n",
|
||
"fig, ax = plt.subplots()\n",
|
||
"ax.set_xlabel(r'$A = N + Z$')\n",
|
||
"ax.set_ylabel(r'$E_\\mathrm{bind}\\,/\\mathrm{MeV}$')\n",
|
||
"ax.plot(Masses['A'], Masses['Ebinding'], alpha=0.7, lw=2,\n",
|
||
" label='Ame2016')\n",
|
||
"ax.plot(Masses['A'], Masses['Eapprox'], alpha=0.7, lw=2, c='m',\n",
|
||
" label='Fit')\n",
|
||
"ax.legend()\n",
|
||
"save_fig(\"Masses2016OLS\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"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,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"and we would be using it as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0.9549351910143222\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(R2(Energies,ytilde))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We can easily add our **MSE** score as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0.022022882954618364\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def MSE(y_data,y_model):\n",
|
||
" n = np.size(y_model)\n",
|
||
" return np.sum((y_data-y_model)**2)/n\n",
|
||
"\n",
|
||
"print(MSE(Energies,ytilde))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and finally the relative error as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"A \n",
|
||
"4 0 1.093247\n",
|
||
"5 2 0.275341\n",
|
||
"6 7 0.060080\n",
|
||
"7 12 0.019587\n",
|
||
"8 17 0.117986\n",
|
||
" ... \n",
|
||
"264 3297 0.000148\n",
|
||
"265 3303 0.001263\n",
|
||
"266 3310 0.002948\n",
|
||
"269 3331 0.000599\n",
|
||
"270 3337 0.002526\n",
|
||
"Name: Ebinding, Length: 264, dtype: float64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def RelativeError(y_data,y_model):\n",
|
||
" return abs((y_data-y_model)/y_data)\n",
|
||
"print(RelativeError(Energies, ytilde))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### The $\\chi^2$ function\n",
|
||
"\n",
|
||
"Normally, the response (dependent or outcome) variable $y_i$ is the\n",
|
||
"outcome of a numerical experiment or another type of experiment and is\n",
|
||
"thus only an approximation to the true value. It is then always\n",
|
||
"accompanied by an error estimate, often limited to a statistical error\n",
|
||
"estimate given by the standard deviation discussed earlier. In the\n",
|
||
"discussion here we will treat $y_i$ as our exact value for the\n",
|
||
"response variable.\n",
|
||
"\n",
|
||
"Introducing the standard deviation $\\sigma_i$ for each measurement\n",
|
||
"$y_i$, we define now the $\\chi^2$ function (omitting the $1/n$ term)\n",
|
||
"as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\chi^2(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\frac{\\left(y_i-\\tilde{y}_i\\right)^2}{\\sigma_i^2}=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\frac{1}{\\boldsymbol{\\Sigma^2}}\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements. \n",
|
||
"\n",
|
||
"\n",
|
||
"In order to find the parameters $\\beta_i$ we will then minimize the spread of $\\chi^2(\\boldsymbol{\\beta})$ by requiring"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)^2\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"which results in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}\\frac{x_{ij}}{\\sigma_i}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"or in a matrix-vector form as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$. \n",
|
||
"\n",
|
||
"We can rewrite"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"If we then introduce the matrix"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_j = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}\\frac{y_i}{\\sigma_i}\\frac{x_{ik}}{\\sigma_i} = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}b_ia_{ik}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sigma^2(\\beta_j) = \\sum_{i=0}^{n-1}\\sigma_i^2\\left( \\frac{\\partial \\beta_j}{\\partial y_i}\\right)^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"resulting in"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sigma^2(\\beta_j) = \\left(\\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}a_{ik}\\right)\\left(\\sum_{l=0}^{p-1}h_{jl}\\sum_{m=0}^{n-1}a_{ml}\\right) = h_{jj}!\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The first step here is to approximate the function $y$ with a first-order polynomial, that is we write"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_0} = -2\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_1} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_i\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"For a linear fit (a first-order polynomial) we don't need to invert a matrix!! \n",
|
||
"Defining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"we obtain"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"This approach (different linear and non-linear regression) suffers\n",
|
||
"often from both being underdetermined and overdetermined in the\n",
|
||
"unknown coefficients $\\beta_i$. A better approach is to use the\n",
|
||
"Singular Value Decomposition (SVD) method discussed below. Or using\n",
|
||
"Lasso and Ridge regression. See below.\n",
|
||
"\n",
|
||
"\n",
|
||
"### 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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Mean squared error: 12.36\n",
|
||
"Variance score: 1.00\n",
|
||
"Mean absolute error: 2.83\n",
|
||
"[ 0. 618.32047562 -861.13519106 1404.91549644] -11.057088709963182\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFnCAYAAADQYfGFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABIkklEQVR4nO3deXwV5d3//9dZspGEJeGEhBC2EBbDEiSs2iDKJhC0VFtFpFZbqVX81Va8cbmheLvVm+q32GI3rXW5pahAECEooCibQBQQTMKaAEnICtm3c2Z+f6CnRoXDkuQkOe/n4+FDzsw5M5/MZDLvM9c111hM0zQRERERn2L1dgEiIiLS/BQAREREfJACgIiIiA9SABAREfFBCgAiIiI+SAFARETEB9m9XUBzO326EsNonDsfw8NDKC6uaJRlycXT9vc+7QPv0vb3vpa8D6xWC506BZ9zvs8FAMMwGy0AfL088R5tf+/TPvAubX/va637QE0AIiIiPkgBQERExAcpAIiIiPggBQAREREfpAAgIiLigxQAREREfFCTBoA//vGPTJkyhalTp/LPf/4TgG3btpGcnMzEiRN5/vnn3e9NT09nxowZTJo0iUcffRSn0wlAbm4ut912G5MnT+aee+6hsrKyKUsWERHxCU0WAHbu3MmOHTtYvXo177zzDq+99hoZGRk88sgjLF26lLVr17J//342b94MwLx581iwYAHr16/HNE2WL18OwKJFi5g5cyapqakMHDiQpUuXNlXJIiIiPqPJAsCIESN49dVXsdvtFBcX43K5KCsro0ePHsTExGC320lOTiY1NZWcnBxqampISEgAYMaMGaSmplJfX8+uXbuYNGlSg+lt1R/+8HvuuGMms2bdzDXXjOKOO2Zyxx0zee+91bz00l956aW/NlstFRUVPPzwgwAUFRXy4IP3X9Jyrr460eN7bropmby83AuqRUREGkeTjgTo5+fHkiVLePnll5k8eTIFBQU4HA73/IiICPLz878z3eFwkJ+fz+nTpwkJCcFutzeYfjnCw0Mu6/Pf5nCENtqynnnmCQBOnjzJ7Nmzee+9d93zXnjhhUZf3/nU1pZy9OghHI5QHI5Q/vWvf17ysjzVbLNZCQsLPuf7vlnLxS5bmp72gXdp+3tfY+2DulondrsVq615uuc1+VDA999/P7/4xS/45S9/SVZWFhaL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VIYMGUJwcLB7+mOPPeZx4RUVFdxyyy385S9/oVu3bjz88MOkpaURFBQEwH333ceECRNIT0/n0UcfpbKyksTERBYtWoTdbic3N5d58+ZRXFxMr169WLx4cYMaREQuhWmapKXlsHvnCVxOA2uAjTFJvRkyIMLbpYk0G49NAEOHDmXKlClER0fTsWNH93+e7N27l1tvvZWsrCz3tP379/P666+TkpJCSkoKEyZMAGDevHksWLCA9evXY5omy5cvB2DRokXMnDmT1NRUBg4cyNKlSy/tpxQR+Up1dT2rVh7g023HcTkNQh3B3HJrgk7+4nM8XgG47777qKmpITs7m7i4OGpra93f4M9n+fLlLFy40N2HoLq6mtzcXB555BHy8/OZMGEC9913H3l5edTU1JCQkADAjBkzWLJkCTfffDO7du3iz3/+s3v6rFmzmDdv3mX8uCLiy7KzT7Pxg0NUV9WD1ULfIVFce1VPbNYLGhVdpE3xGAD27t3Lvffei91uZ9myZdxwww28+OKLXHnllef93JNPPtngdVFREaNGjWLhwoWEhoYyZ84c3n77beLi4nA4HO73ORwO8vPzOX36NCEhIdjt9gbTL9f5RkW6FA6H7g32Jm1/72sN+8BwGax/P5O0nScxDIPA9oHc8MOBDOjT2dulXbbWsP3buta6DzwGgN///ve88sorPPjgg0RGRvLss8/y5JNP8s4771zUimJiYtzf5gFuv/12Vq1aRWxsbIMOhl93OPy+joeN0RFRQwG3Hdr+3tca9kFZaQ1r12ZQXFgJQHhMB5In9yM4yK/F1+5Ja9j+bV1L3geehgL2eN2rpqaGPn36uF+PHTsWl8t10YVkZmayfv1692vTNLHb7URGRlJYWOieXlRUREREBGFhYZSXl7vXVVhYSESE2uhE5MKYpkn6l/n8+829Z0/+ditDr+rBT26MJzjIz9vliXidxwBgt9spLS11f/s+evToJa3INE2eeuopSktLqa+v59///jcTJkwgOjqagIAA0tLSAEhJSSEpKQk/Pz8SExPdTyJctWpVg8cSi4icS12tk3VrM/lw4xHq6pwEdAjkhzcNZMywbrqlWeQrHpsA7rnnHmbNmkVhYSG/+c1v2Lp1K48//vhFr6h///7cfffd3HrrrTidTiZOnMi0adMAWLx4MY899hgVFRXEx8cze/ZsABYuXMj8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1ejrSk9PZ8GCBZSVlfHyyy+7p7/66qusWLGCt956q9HXKeIrFABE5LLk5uZ+70NSLkRhYSH333//d6YvWbIEh8PBgAEDeOutt1i7di1//etfefzxxy+3XBH5igKAiHxHRUUFv//970lNTcVutzNnzhzuuOOO77xv9uzZ7Nq1i7S0NJ566ilWrFjBXXfdxcyZM0lJSeHEiRNMmTKF3/zmN8yfP5+0tDSGDBnCH//4Rzp06IDD4eDNN9/83hrq6urw9/cHIDQ0lKCgoKb8kUV8jgKAiHzHvffey1VXXcXWrVtJS0vjzjvv/N5v+a+++iq3334706dP5+abb3ZPf//99/nnP/+Jy+XixhtvJD09nSeffJI+ffrw85//nNdee4377rvvvDUcOHCAxYsXY7VaCQgI4Kmnnmr0n1PElykAiEgDH374IQB33303AKNHj6ZLly5kZWVd8DJmzZpF586dAUhMTCQsLIwrrrgCgAkTJrB9+3aPyxg6dChvvPHGRVYvIhdKdwGISAObNm3iuuuuc782DIPy8nLCw8MveBlfn/wBAgICGrwODAykqqqqcYoVkUumACAiDezdu5eOHTu6X+/YsYNOnTrRu3dv7xUlIo1OAUBE3Orr68nOzmb9+vXU1tZy6NAhFi1axIMPPujt0kSkkakPgIi4HTlyhOjoaOLi4hgzZgzh4eHcc889TJ482duliUgj01DAIuKWkpLChg0beOGFF753/qBBg/D39+f222/n17/+dfMW9w0/+9nP2LNnD4MHD+Zf//qX1+oQac10BUBE3DIyMs7b1v/FF180YzXn9s9//tPbJYi0euoDICJuBw8eVGc/ER+hJgAREREfpCsAIiIiPkgBQERExAcpAIiIiPggBQAREREfpAAgIiLigxQAREREfJACgIiIiA9SABAREfFBCgAiIiI+6P8H2xG05ttGzUUAAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 576x396 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_183_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Common imports\n",
|
||
"import os\n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"The above simple polynomial in density $\\rho$ gives an excellent fit\n",
|
||
"to the data. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## 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",
|
||
"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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[1.98036405 0.07345504 4.90054363]\n",
|
||
"Training R2\n",
|
||
"0.9955282554647219\n",
|
||
"Training MSE\n",
|
||
"0.009450756365829578\n",
|
||
"Test R2\n",
|
||
"0.9893149172528393\n",
|
||
"Test MSE\n",
|
||
"0.014209325470380275\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import os\n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"\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",
|
||
"metadata": {},
|
||
"source": [
|
||
"Alternatively, you could write your own test-train splitting function as shown here."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"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",
|
||
"metadata": {},
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Training R2\n",
|
||
"0.9999858320366368\n",
|
||
"Training MSE\n",
|
||
"6.690569639355314\n",
|
||
"Test R2\n",
|
||
"0.9999840939906267\n",
|
||
"Test MSE\n",
|
||
"5.457770268480242\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import os\n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"# Where to save the figures and data files\n",
|
||
"PROJECT_ROOT_DIR = \"Results\"\n",
|
||
"FIGURE_ID = \"Results/FigureFiles\"\n",
|
||
"DATA_ID = \"DataFiles/\"\n",
|
||
"\n",
|
||
"if not os.path.exists(PROJECT_ROOT_DIR):\n",
|
||
" os.mkdir(PROJECT_ROOT_DIR)\n",
|
||
"\n",
|
||
"if not os.path.exists(FIGURE_ID):\n",
|
||
" os.makedirs(FIGURE_ID)\n",
|
||
"\n",
|
||
"if not os.path.exists(DATA_ID):\n",
|
||
" os.makedirs(DATA_ID)\n",
|
||
"\n",
|
||
"def image_path(fig_id):\n",
|
||
" return os.path.join(FIGURE_ID, fig_id)\n",
|
||
"\n",
|
||
"def data_path(dat_id):\n",
|
||
" return os.path.join(DATA_ID, dat_id)\n",
|
||
"\n",
|
||
"def save_fig(fig_id):\n",
|
||
" plt.savefig(image_path(fig_id) + \".png\", format='png')\n",
|
||
"\n",
|
||
"def R2(y_data, y_model):\n",
|
||
" return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n",
|
||
"def MSE(y_data,y_model):\n",
|
||
" n = np.size(y_model)\n",
|
||
" return np.sum((y_data-y_model)**2)/n\n",
|
||
"\n",
|
||
"infile = open(data_path(\"EoS.csv\"),'r')\n",
|
||
"\n",
|
||
"# Read the EoS data as csv file and organized into two arrays with density and energies\n",
|
||
"EoS = pd.read_csv(infile, names=('Density', 'Energy'))\n",
|
||
"EoS['Energy'] = pd.to_numeric(EoS['Energy'], errors='coerce')\n",
|
||
"EoS = EoS.dropna()\n",
|
||
"Energies = EoS['Energy']\n",
|
||
"Density = EoS['Density']\n",
|
||
"# The design matrix now as function of various polytrops\n",
|
||
"X = np.zeros((len(Density),5))\n",
|
||
"X[:,0] = 1\n",
|
||
"X[:,1] = Density**(2.0/3.0)\n",
|
||
"X[:,2] = Density\n",
|
||
"X[:,3] = Density**(4.0/3.0)\n",
|
||
"X[:,4] = Density**(5.0/3.0)\n",
|
||
"# We split the data in test and training data\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, Energies, test_size=0.2)\n",
|
||
"# matrix inversion to find beta\n",
|
||
"beta = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(y_train)\n",
|
||
"# and then make the prediction\n",
|
||
"ytilde = X_train @ beta\n",
|
||
"print(\"Training R2\")\n",
|
||
"print(R2(y_train,ytilde))\n",
|
||
"print(\"Training MSE\")\n",
|
||
"print(MSE(y_train,ytilde))\n",
|
||
"ypredict = X_test @ beta\n",
|
||
"print(\"Test R2\")\n",
|
||
"print(R2(y_test,ypredict))\n",
|
||
"print(\"Test MSE\")\n",
|
||
"print(MSE(y_test,ypredict))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The Boston housing data example\n",
|
||
"\n",
|
||
"The Boston housing \n",
|
||
"data set was originally a part of UCI Machine Learning Repository\n",
|
||
"and has been removed now. The data set is now included in **Scikit-Learn**'s \n",
|
||
"library. There are 506 samples and 13 feature (predictor) variables\n",
|
||
"in this data set. The objective is to predict the value of prices of\n",
|
||
"the house using the features (predictors) listed here.\n",
|
||
"\n",
|
||
"The features/predictors are\n",
|
||
"1. CRIM: Per capita crime rate by town\n",
|
||
"\n",
|
||
"2. ZN: Proportion of residential land zoned for lots over 25000 square feet\n",
|
||
"\n",
|
||
"3. INDUS: Proportion of non-retail business acres per town\n",
|
||
"\n",
|
||
"4. CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n",
|
||
"\n",
|
||
"5. NOX: Nitric oxide concentration (parts per 10 million)\n",
|
||
"\n",
|
||
"6. RM: Average number of rooms per dwelling\n",
|
||
"\n",
|
||
"7. AGE: Proportion of owner-occupied units built prior to 1940\n",
|
||
"\n",
|
||
"8. DIS: Weighted distances to five Boston employment centers\n",
|
||
"\n",
|
||
"9. RAD: Index of accessibility to radial highways\n",
|
||
"\n",
|
||
"10. TAX: Full-value property tax rate per USD10000\n",
|
||
"\n",
|
||
"11. B: $1000(Bk - 0.63)^2$, where $Bk$ is the proportion of [people of African American descent] by town\n",
|
||
"\n",
|
||
"12. LSTAT: Percentage of lower status of the population\n",
|
||
"\n",
|
||
"13. MEDV: Median value of owner-occupied homes in USD 1000s\n",
|
||
"\n",
|
||
"## Housing data, the code\n",
|
||
"We start by importing the libraries"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"and load the Boston Housing DataSet from **Scikit-Learn**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function load_boston is deprecated; `load_boston` is deprecated in 1.0 and will be removed in 1.2.\n",
|
||
"\n",
|
||
" The Boston housing prices dataset has an ethical problem. You can refer to\n",
|
||
" the documentation of this function for further details.\n",
|
||
"\n",
|
||
" The scikit-learn maintainers therefore strongly discourage the use of this\n",
|
||
" dataset unless the purpose of the code is to study and educate about\n",
|
||
" ethical issues in data science and machine learning.\n",
|
||
"\n",
|
||
" In this case special case, you can fetch the dataset from the original\n",
|
||
" source::\n",
|
||
"\n",
|
||
" import pandas as pd\n",
|
||
" import numpy as np\n",
|
||
"\n",
|
||
"\n",
|
||
" data_url = \"http://lib.stat.cmu.edu/datasets/boston\"\n",
|
||
" raw_df = pd.read_csv(data_url, sep=\"\\s+\", skiprows=22, header=None)\n",
|
||
" data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])\n",
|
||
" target = raw_df.values[1::2, 2]\n",
|
||
"\n",
|
||
" Alternative datasets include the California housing dataset (i.e.\n",
|
||
" func:`~sklearn.datasets.fetch_california_housing`) and the Ames housing\n",
|
||
" dataset. You can load the datasets as follows:\n",
|
||
"\n",
|
||
" from sklearn.datasets import fetch_california_housing\n",
|
||
" housing = fetch_california_housing()\n",
|
||
"\n",
|
||
" for the California housing dataset and:\n",
|
||
"\n",
|
||
" from sklearn.datasets import fetch_openml\n",
|
||
" housing = fetch_openml(name=\"house_prices\", as_frame=True)\n",
|
||
"\n",
|
||
" for the Ames housing dataset.\n",
|
||
" \n",
|
||
" warnings.warn(msg, category=FutureWarning)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename', 'data_module'])"
|
||
]
|
||
},
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.datasets import load_boston\n",
|
||
"\n",
|
||
"boston_dataset = load_boston()\n",
|
||
"\n",
|
||
"# boston_dataset is a dictionary\n",
|
||
"# let's check what it contains\n",
|
||
"boston_dataset.keys()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Then we invoke Pandas"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"and preprocess the data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"CRIM 0\n",
|
||
"ZN 0\n",
|
||
"INDUS 0\n",
|
||
"CHAS 0\n",
|
||
"NOX 0\n",
|
||
"RM 0\n",
|
||
"AGE 0\n",
|
||
"DIS 0\n",
|
||
"RAD 0\n",
|
||
"TAX 0\n",
|
||
"PTRATIO 0\n",
|
||
"B 0\n",
|
||
"LSTAT 0\n",
|
||
"MEDV 0\n",
|
||
"dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# check for missing values in all the columns\n",
|
||
"boston.isnull().sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We can then visualize the data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/MortenImac/anaconda3/lib/python3.8/site-packages/seaborn/distributions.py:2619: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n",
|
||
" warnings.warn(msg, FutureWarning)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 842.4x595.44 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_199_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# set the size of the figure\n",
|
||
"sns.set(rc={'figure.figsize':(11.7,8.27)})\n",
|
||
"\n",
|
||
"# plot a histogram showing the distribution of the target values\n",
|
||
"sns.distplot(boston['MEDV'], bins=30)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"It is now useful to look at the correlation matrix"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<AxesSubplot:>"
|
||
]
|
||
},
|
||
"execution_count": 32,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 842.4x595.44 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_201_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# compute the pair wise correlation for all columns \n",
|
||
"correlation_matrix = boston.corr().round(2)\n",
|
||
"# use the heatmap function from seaborn to plot the correlation matrix\n",
|
||
"# annot = True to print the values inside the square\n",
|
||
"sns.heatmap(data=correlation_matrix, annot=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"From the above coorelation plot we can see that **MEDV** is strongly correlated to **LSTAT** and **RM**. We see also that **RAD** and **TAX** are stronly correlated, but we don't include this in our features together to avoid multi-colinearity"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 33,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJEAAAFRCAYAAADEnjyhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAACBtUlEQVR4nO39e3xV9Z0v/r/2JTdJUjANjRR0nChGMqDU6SUFDVBEogQttb+qPYBlvPRhR3toD616epuZTqWl89Oqw5yWiqI9ULWDIqlgoWiqMacXb9gEsWa8MRhNIzRckp3svdf3j3Rt1l57XT7rvtber+c/ys6+fNZae6/1/rzX5/P+xCRJkkBERERERERERGQgHnQDiIiIiIiIiIgo/JhEIiIiIiIiIiIiU0wiERERERERERGRKSaRiIiIiIiIiIjIFJNIRERERERERERkikkkIiIiIiIiIiIylQy6AURUGg4cOID29na88MILBX/bsGEDOjo6IEkSstkszj//fKxevRojIyNYvnw5AOD48eN49913cfrppwMAPvnJT+LrX/86xsbGMH/+fDQ1NeGnP/0pAOAnP/kJfvnLXwIA3nrrLUyaNAk1NTUAgLvuugunnnqqH5tMREREFHpnnXUWpk+fjng8jlgshuHhYVRXV+M73/kOZs6cia1bt+KWW27Bl770Jdx0002510mShIULF6KqqgodHR0BbgER+YlJJCIK1I4dO7B79248+OCDqKysRCqVwk033YS7774bX/nKV7Bt2zYAwG9/+1v8y7/8S+7fsl27dqGpqQl//OMf0dfXh8bGRlx33XW47rrrAADLly/H5z//eSxevNj3bSMiIiKKgk2bNuHkk0/O/fuee+7Bd7/7XTz44IMAgClTpuCxxx7LSyL94Q9/wMjICKqqqnxvLxEFh9PZiChQAwMDyGQyGBkZAQBUVFTgm9/8JhYuXCj0+i1btuBTn/oULr74YmzatMnLphIREREVvXQ6jXfeeQcf+MAHco9Nnz4dJ510Ep5//vncY4888giWLl0aRBOJKEBMIhFRoD796U+jtrYWc+fOxec+9zmsXbsW77zzDmbNmmX62tdeew0vvPACFi9ejMsuuwzbtm3DoUOHfGg1ERERUfFYuXIl2tvbMXfuXFx00UUAgNtuuy3vOXKsBQDDw8N47rnncP755/veViIKFpNIRBSompoabNy4ETt27MDll1+OwcFBXHfddVi3bp3pa7ds2YL58+dj0qRJmDVrFqZOnYqHHnrIh1YTERERFY9NmzZh+/bt+PGPf4yRkRF8/OMfR11dXd5z2tvbsWvXLoyOjmLXrl1YsGABEolEQC0moqAwiUREgdqwYQOef/55TJs2DZ/97Gexbt06bNiwAZs3bzZ83fHjx7Ft2zY899xzWLBgARYsWICBgQH87Gc/w9jYmE+tJyIiIioezc3NuOWWW3DzzTfjwIEDeX+rr6/HjBkz8Jvf/AaPPvooPv3pTwfUSiIKEpNIRBSokZER/Nu//RsOHz6ce+zVV1/FjBkzDF+3fft2TJw4EU8//TT27NmDPXv2YPfu3Th+/Dh27tzpcauJiIiIitOSJUswa9asgulswPiUtnvvvRdHjhzB9OnTA2gdEQWNq7MRkW+OHz+O2bNn5z22ZcsWxGIxXHHFFYjFYshms/i7v/s73HHHHYbvtWXLFnzhC1/IG0ZdW1uL5cuX47777kN7e7sXm0BERERU9L75zW9i6dKlePrpp/MeX7hwIb797W9j9erVAbWMiIIWkyRJCroRREREREREREQUbpzORkREREREREREpphEIiIiIiIiIiIiU0wiERERERERERGRKSaRiIiIiIiIiIjIFJNIRERERERERERkikkkIiIiIiIiIiIylQy6AU4NDh4NugmBqaur5vaX6PaX8rYD3P5S3v5S3nag9LY/Ho9h0qQJQTeDNBw6dAzZrBR0M3xVar8/v3H/eo/72Fvcv97i/vWevI/N4q/IJ5FKLYBR4/aX7vaX8rYD3P5S3v5S3naA20/hkM1KJfldLMVt9hP3r/e4j73F/est7l/viexjTmcjIiIiIiIiIiJTTCIREREREREREZEpJpGIiIiIiIiIiMgUk0hERERERERERGSKSSQiIiIiIiIiIjLFJBIREREREREREZlKevnmy5cvx/vvv49kcvxj/vmf/xnHjh3DbbfdhlQqhba2NqxevdrLJljW3dOPrZ19GBxKIR4DshJQV1uBZa2NaGluMHzd/Tv3ITV2Ykm8RBzIZE88Z0JlAlddeBZeO3AYnS8eRFYC4jGg9dwpWH5Rk+V2PPXc27ivoweDQymhNrpB2S4nnynyPm59FhERUSmJYvxFpUcd5129pBnNp04MulmREVScHIX4PKg2BtE3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RERERERERERkikkkIiIiIiIiIiIyxSQSERERERERERGZYhKJiIiIiIiIiIhMMYlERERERERERESmmEQiIiIiIiIiIiJTTCIREREREREREZGpZNANcCoejwXdhEBx+0t3+0t52wFufylvfylvO1Ba219K2xo1pXpsSnW7/cL96z3uY29x/3qL+9d78XjMdD/HJEmSfGoPERERERERERFFFKezERERERERERGRKSaRiIiIiIiIiIjIFJNIRERERERERERkikkkIiIiIiIiIiIyxSQSERERERERERGZYhKJiIiIiIiIiIhMMYlERERERERERESmmEQiIiIiIiIiIiJTTCIREREREREREZEpJpGIiIiIiIiIiMgUk0hERERERERERGSKSSQiIiIiIiIiIjIV2STS9u3bcfHFF2PRokX4v//3/wbdHF8tX74cl1xyCS699FJceumleOmll4Juki+OHj2KJUuW4MCBAwCAZ599Fu3t7Vi0aBFuv/32gFvnLfW233LLLVi0aFHuO7Br166AW+idu+++G5dccgkuueQS/OAHPwBQWsdea/tL6fj/6Ec/wsUXX4xLLrkE9957L4DSOf5a215Kx54obL7//e/j5ptvDroZRalUY1u/7NmzB8uWLUNbWxu++93vBt2covPwww/nvruXXnopzjvvPPzzP/9z0M0qKtu2bcvFw9///veDbk7R+clPfoKLLroI7e3t+I//+A/zF0gR1N/fL82fP186dOiQdOzYMam9vV3605/+FHSzfJHNZqW5c+dKY2NjQTfFVy+++KK0ZMkSqbm5WXr77bel4eFhqbW1VXrrrbeksbExadWqVdJTTz0VdDM9od52SZKkJUuWSO+++27ALfNeV1eX9LnPfU5KpVLS6OiotGLFCmn79u0lc+y1tv9Xv/pVyRz/3/72t9IVV1whjY2NScPDw9L8+fOlffv2lcTx19r2vr6+kjn2RGHz7LPPSh//+Melr3/960E3peiUamzrl7feekuaO3eu9M4770ijo6PSlVdeWZTXzbB49dVXpQsvvFAaHBwMuilF4/jx49JHP/pRaXBwUBobG5Muv/xyqaurK+hmFY2uri5pyZIl0pEjR6R0Oi1df/310hNPPGH4mkiORHr22WfxiU98AhMnTsRJJ52Eiy66CDt37gy6Wb74r//6LwDAqlWrsHTpUvzsZz8LuEX+eOihh/Dtb38bkydPBgDs3bsXp512GqZNm4ZkMon29vai/Q6ot314eBgHDx7Erbfeivb2dtx5553IZrMBt9Ib9fX1uPnmm1FeXo6ysjI0NjbijTfeKJljr7X9Bw8eLJnj/7GPfQz3338/kskkBgcHkclkMDQ0VBLHX2vbKysrS+bYE4XJ4cOHcfvtt+OLX/xi0E0pSqUa2/pl165duPjii9HQ0ICysjLcfvvtOOecc4JuVtH6zne+g9WrV+Pkk08OuilFI5PJIJvNYnh4GOl0Gul0GhUVFUE3q2j09vZi7ty5qK6uRiKRwPnnn4/du3cbviaSSaT33nsP9fX1uX9PnjwZ7777boAt8s/Q0BBaWlrw7//+77jvvvvw85//HF1dXUE3y3P/+q//ir//+7/P/buUvgPqbf/zn/+MT3ziE/je976Hhx56CH/4wx/wi1/8IsAWeufMM8/EueeeCwB44403sGPHDsRisZI59lrbf/7555fM8QeAsrIy3HnnnbjkkkvQ0tJSUr999ban0+mSOvZEYfGtb30Lq1evRm1tbdBNKUqlGtv65c0330Qmk8EXv/hFXHrppdi8eTM+8IEPBN2sovTss89iZGQEbW1tQTelqFRXV+PLX/4y2tra0Nraig9/+MP4yEc+EnSzikZzczOeeeYZHD58GKlUCnv27MGf//xnw9dEMomUzWYRi8Vy/5YkKe/fxWz27Nn4wQ9+gJqaGpx88sm4/PLL0dnZGXSzfFfK34Fp06bh3//93zF58mRUVVVh+fLlRf8d+NOf/oRVq1bha1/7GqZNm1Zyx165/X/7t39bcsf/pptuQnd3N9555x288cYbJXX8ldve3d1dcseeKGgPP/wwTjnlFLS0tATdlKLF2NZbmUwG3d3d+N73vocHH3wQe/fuxSOPPBJ0s4rSz3/+c3zhC18IuhlF55VXXsF//ud/4sknn8TTTz+NeDyOe+65J+hmFY2WlhYsW7YMy5cvxzXXXIPzzjsPZWVlhq+JZBKpoaEBAwMDuX8PDAzkpvoUuz/84Q/o7u7O/VuSJCSTyQBbFIxS/g7s378fTzzxRO7fxf4deO6553D11Vfjq1/9Kj796U+X3LFXb38pHf++vj7s27cPAFBVVYVFixbht7/9bUkcf61tf/zxx0vm2BOFxeOPP46uri5ceumluPPOO7Fnzx5873vfC7pZRYWxrbc++MEPoqWlBSeffDIqKyuxcOFC7N27N+hmFZ3R0VH8/ve/x4IFC4JuStF55pln0NLSgrq6OpSXl2PZsmX43e9+F3SzisbRo0exaNEibN++HQ888ADKy8sxbdo0w9dEMon0yU9+Et3d3Xj//fcxPDyMX/3qV7jggguCbpYvjhw5gh/84AdIpVI4evQoHnnkEVx44YVBN8t355xzDl5//fXcEN2Ojo6S+Q5IkoTvfe97+Mtf/oKxsTE8+OCDRfsdeOedd/ClL30JP/zhD3HJJZcAKK1jr7X9pXT8Dxw4gG984xsYHR3F6Ogofv3rX+OKK64oieOvte0f/ehHS+bYE4XFvffei46ODmzbtg033XQTFixYgFtvvTXoZhUVxrbemj9/Pp555hkMDQ0hk8ng6aefRnNzc9DNKjr79+/H3/zN3+Ckk04KuilFp6mpCc8++yyOHz8OSZKwZ88ezJw5M+hmFY0DBw7ghhtuQDqdxpEjR/CLX/zCdEpmJNP8H/rQh7B69WqsWLECY2NjuPzyyzFr1qygm+WL+fPn46WXXsJll12GbDaLq666CrNnzw66Wb6rqKjA2rVrceONNyKVSqG1tRWLFy8Oulm+aGpqwnXXXYcrr7wS6XQaixYtwpIlS4JulifuuecepFIprF27NvfYFVdcUTLHXm/7S+X4t7a2Yu/evbjsssuQSCSwaNEiXHLJJTj55JOL/vhrbfs//uM/YtKkSSVx7ImodDC29dY555yDa665BldddRXGxsYwZ84cfOYznwm6WUXn7bffRkNDQ9DNKEpz585Fb28vli1bhrKyMsycORPXXXdd0M0qGk1NTVi0aBGWLl2KTCaDq6++Guedd57ha2KSJEk+tY+IiIiIiIiIiCIqktPZiIiIiIiIiIjIX0wiERERERERERGRKSaRiIiIiIiIiIjIFJNIRERERERERERkikkkIiIiIiIiIiIylQy6AURUGg4cOID29na88MILBX/bsGEDOjo6IEkSstkszj//fKxevRojIyNYvnw5AOD48eN49913cfrppwMAPvnJT+LrX/86xsbGMH/+fDQ1NeGnP/0pAOAnP/kJfvnLXwIA3nrrLUyaNAk1NTUAgLvuugunnnqqH5tMREREFHpnnXUWpk+fjng8jlgshuHhYVRXV+M73/kOZs6cia1bt+KWW27Bl770Jdx0002510mShIULF6KqqgodHR0BbgER+YlJJCIK1I4dO7B79248+OCDqKysRCqVwk033YS7774bX/nKV7Bt2zYAwG9/+1v8y7/8S+7fsl27dqGpqQl//OMf0dfXh8bGRlx33XW47rrrAADLly/H5z//eSxevNj3bSMiIiKKgk2bNuHkk0/O/fuee+7Bd7/7XTz44IMAgClTpuCxxx7LSyL94Q9/wMjICKqqqnxvLxEFh9PZiChQAwMDyGQyGBkZAQBUVFTgm9/8JhYuXCj0+i1btuBTn/oULr74YmzatMnLphIREREVvXQ6jXfeeQcf+MAHco9Nnz4dJ510Ep5//vncY4888giWLl0aRBOJKEBMIhFRoD796U+jtrYWc+fOxec+9zmsXbsW77zzDmbNmmX62tdeew0vvPACFi9ejMsuuwzbtm3DoUOHfGg1ERERUfFYuXIl2tvbMXfuXFx00UUAgNtuuy3vOXKsBQDDw8N47rnncP755/veViIKFpNIRBSompoabNy4ETt27MDll1+OwcFBXHfddVi3bp3pa7ds2YL58+dj0qRJmDVrFqZOnYqHHnrIh1YTERERFY9NmzZh+/bt+PGPf4yRkRF8/OMfR11dXd5z2tvbsWvXLoyOjmLXrl1YsGABEolEQC0moqAwiUREgdqwYQOef/55TJs2DZ/97Gexbt06bNiwAZs3bzZ83fHjx7Ft2zY899xzWLBgARYsWICBgQH87Gc/w9jYmE+tJyIiIioezc3NuOWWW3DzzTfjwIEDeX+rr6/HjBkz8Jvf/AaPPvooPv3pTwfUSiIKEpNIRBSokZER/Nu//RsOHz6ce+zVV1/FjBkzDF+3fft2TJw4EU8//TT27NmDPXv2YPfu3Th+/Dh27tzpcauJiIiIitOSJUswa9asgulswPiUtnvvvRdHjhzB9OnTA2gdEQWNq7MRkW+OHz+O2bNn5z22ZcsWxGIxXHHFFYjFYshms/i7v/s73HHHHYbvtWXLFnzhC1/IG0ZdW1uL5cuX47777kN7e7sXm0BERERU9L75zW9i6dKlePrpp/MeX7hwIb797W9j9erVAbWMiIIWkyRJCroRREREREREREQUbpzORkREREREREREpphEIiIiIiIiIiIiU0wiERERERERERGRKSaRiIiIiIiIiIjIFJNIRERERERERERkikkkIiIiIiIiIiIyxSQSERERERERERGZYhKJiIiIiIiIiIhM/X92d0kye5UikgAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 1440x360 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_203_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.figure(figsize=(20, 5))\n",
|
||
"\n",
|
||
"features = ['LSTAT', 'RM']\n",
|
||
"target = boston['MEDV']\n",
|
||
"\n",
|
||
"for i, col in enumerate(features):\n",
|
||
" plt.subplot(1, len(features) , i+1)\n",
|
||
" x = boston[col]\n",
|
||
" y = target\n",
|
||
" plt.scatter(x, y, marker='o')\n",
|
||
" plt.title(col)\n",
|
||
" plt.xlabel(col)\n",
|
||
" plt.ylabel('MEDV')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Now we start training our model"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 34,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"We split the data into training and test sets"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 35,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"(404, 2)\n",
|
||
"(102, 2)\n",
|
||
"(404,)\n",
|
||
"(102,)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"\n",
|
||
"# splits the training and test data set in 80% : 20%\n",
|
||
"# assign random_state to any value.This ensures consistency.\n",
|
||
"X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=5)\n",
|
||
"print(X_train.shape)\n",
|
||
"print(X_test.shape)\n",
|
||
"print(Y_train.shape)\n",
|
||
"print(Y_test.shape)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Then we use the linear regression functionality from **Scikit-Learn**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 36,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"The model performance for training set\n",
|
||
"--------------------------------------\n",
|
||
"RMSE is 5.6371293350711955\n",
|
||
"R2 score is 0.6300745149331701\n",
|
||
"\n",
|
||
"\n",
|
||
"The model performance for testing set\n",
|
||
"--------------------------------------\n",
|
||
"RMSE is 5.137400784702911\n",
|
||
"R2 score is 0.6628996975186953\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"from sklearn.metrics import mean_squared_error, r2_score\n",
|
||
"\n",
|
||
"lin_model = LinearRegression()\n",
|
||
"lin_model.fit(X_train, Y_train)\n",
|
||
"\n",
|
||
"# model evaluation for training set\n",
|
||
"\n",
|
||
"y_train_predict = lin_model.predict(X_train)\n",
|
||
"rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))\n",
|
||
"r2 = r2_score(Y_train, y_train_predict)\n",
|
||
"\n",
|
||
"print(\"The model performance for training set\")\n",
|
||
"print(\"--------------------------------------\")\n",
|
||
"print('RMSE is {}'.format(rmse))\n",
|
||
"print('R2 score is {}'.format(r2))\n",
|
||
"print(\"\\n\")\n",
|
||
"\n",
|
||
"# model evaluation for testing set\n",
|
||
"\n",
|
||
"y_test_predict = lin_model.predict(X_test)\n",
|
||
"# root mean square error of the model\n",
|
||
"rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))\n",
|
||
"\n",
|
||
"# r-squared score of the model\n",
|
||
"r2 = r2_score(Y_test, y_test_predict)\n",
|
||
"\n",
|
||
"print(\"The model performance for testing set\")\n",
|
||
"print(\"--------------------------------------\")\n",
|
||
"print('RMSE is {}'.format(rmse))\n",
|
||
"print('R2 score is {}'.format(r2))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 37,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 842.4x595.44 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_210_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# plotting the y_test vs y_pred\n",
|
||
"# ideally should have been a straight line\n",
|
||
"plt.scatter(Y_test, y_test_predict)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Reducing the number of degrees of freedom, overarching view\n",
|
||
"\n",
|
||
"Many Machine Learning problems involve thousands or even millions of\n",
|
||
"features for each training instance. Not only does this make training\n",
|
||
"extremely slow, it can also make it much harder to find a good\n",
|
||
"solution, as we will see. This problem is often referred to as the\n",
|
||
"curse of dimensionality. Fortunately, in real-world problems, it is\n",
|
||
"often possible to reduce the number of features considerably, turning\n",
|
||
"an intractable problem into a tractable one.\n",
|
||
"\n",
|
||
"Later we will discuss some of the most popular dimensionality reduction\n",
|
||
"techniques: the principal component analysis (PCA), Kernel PCA, and\n",
|
||
"Locally Linear Embedding (LLE). \n",
|
||
"\n",
|
||
"\n",
|
||
"Principal component analysis and its various variants deal with the\n",
|
||
"problem of fitting a low-dimensional [affine\n",
|
||
"subspace](https://en.wikipedia.org/wiki/Affine_space) to a set of of\n",
|
||
"data points in a high-dimensional space. With its family of methods it\n",
|
||
"is one of the most used tools in data modeling, compression and\n",
|
||
"visualization.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"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",
|
||
"\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",
|
||
"\n",
|
||
"The **Normalizer** scales each data\n",
|
||
"point such that the feature vector has a euclidean length of one. In other words, it\n",
|
||
"projects a data point on the circle (or sphere in the case of higher dimensions) with a\n",
|
||
"radius of 1. This means every data point is scaled by a different number (by the\n",
|
||
"inverse of it’s length).\n",
|
||
"This normalization is often used when only the direction (or angle) of the data matters,\n",
|
||
"not the length of the feature vector.\n",
|
||
"\n",
|
||
"The **RobustScaler** works similarly to the StandardScaler in that it\n",
|
||
"ensures statistical properties for each feature that guarantee that\n",
|
||
"they are on the same scale. However, the RobustScaler uses the median\n",
|
||
"and quartiles, instead of mean and variance. This makes the\n",
|
||
"RobustScaler ignore data points that are very different from the rest\n",
|
||
"(like measurement errors). These odd data points are also called\n",
|
||
"outliers, and might often lead to trouble for other scaling\n",
|
||
"techniques.\n",
|
||
"\n",
|
||
"\n",
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"x_j^{(i)} \\rightarrow \\frac{x_j^{(i)} - \\overline{x}_j}{\\sigma(x_j)},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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",
|
||
"\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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>0</th>\n",
|
||
" <th>1</th>\n",
|
||
" <th>2</th>\n",
|
||
" <th>3</th>\n",
|
||
" <th>4</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>-1.749765</td>\n",
|
||
" <td>0.342680</td>\n",
|
||
" <td>1.153036</td>\n",
|
||
" <td>-0.252436</td>\n",
|
||
" <td>0.981321</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0.514219</td>\n",
|
||
" <td>0.221180</td>\n",
|
||
" <td>-1.070043</td>\n",
|
||
" <td>-0.189496</td>\n",
|
||
" <td>0.255001</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>-0.458027</td>\n",
|
||
" <td>0.435163</td>\n",
|
||
" <td>-0.583595</td>\n",
|
||
" <td>0.816847</td>\n",
|
||
" <td>0.672721</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>-0.104411</td>\n",
|
||
" <td>-0.531280</td>\n",
|
||
" <td>1.029733</td>\n",
|
||
" <td>-0.438136</td>\n",
|
||
" <td>-1.118318</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1.618982</td>\n",
|
||
" <td>1.541605</td>\n",
|
||
" <td>-0.251879</td>\n",
|
||
" <td>-0.842436</td>\n",
|
||
" <td>0.184519</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>0.937082</td>\n",
|
||
" <td>0.731000</td>\n",
|
||
" <td>1.361556</td>\n",
|
||
" <td>-0.326238</td>\n",
|
||
" <td>0.055676</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>0.222400</td>\n",
|
||
" <td>-1.443217</td>\n",
|
||
" <td>-0.756352</td>\n",
|
||
" <td>0.816454</td>\n",
|
||
" <td>0.750445</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>-0.455947</td>\n",
|
||
" <td>1.189622</td>\n",
|
||
" <td>-1.690617</td>\n",
|
||
" <td>-1.356399</td>\n",
|
||
" <td>-1.232435</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>-0.544439</td>\n",
|
||
" <td>-0.668172</td>\n",
|
||
" <td>0.007315</td>\n",
|
||
" <td>-0.612939</td>\n",
|
||
" <td>1.299748</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>9</th>\n",
|
||
" <td>-1.733096</td>\n",
|
||
" <td>-0.983310</td>\n",
|
||
" <td>0.357508</td>\n",
|
||
" <td>-1.613579</td>\n",
|
||
" <td>1.470714</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" 0 1 2 3 4\n",
|
||
"0 -1.749765 0.342680 1.153036 -0.252436 0.981321\n",
|
||
"1 0.514219 0.221180 -1.070043 -0.189496 0.255001\n",
|
||
"2 -0.458027 0.435163 -0.583595 0.816847 0.672721\n",
|
||
"3 -0.104411 -0.531280 1.029733 -0.438136 -1.118318\n",
|
||
"4 1.618982 1.541605 -0.251879 -0.842436 0.184519\n",
|
||
"5 0.937082 0.731000 1.361556 -0.326238 0.055676\n",
|
||
"6 0.222400 -1.443217 -0.756352 0.816454 0.750445\n",
|
||
"7 -0.455947 1.189622 -1.690617 -1.356399 -1.232435\n",
|
||
"8 -0.544439 -0.668172 0.007315 -0.612939 1.299748\n",
|
||
"9 -1.733096 -0.983310 0.357508 -1.613579 1.470714"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0 -0.175300\n",
|
||
"1 0.083527\n",
|
||
"2 -0.044334\n",
|
||
"3 -0.399836\n",
|
||
"4 0.331939\n",
|
||
"dtype: float64\n",
|
||
"0 1.069584\n",
|
||
"1 0.965548\n",
|
||
"2 1.018232\n",
|
||
"3 0.793167\n",
|
||
"4 0.918992\n",
|
||
"dtype: float64\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>0</th>\n",
|
||
" <th>1</th>\n",
|
||
" <th>2</th>\n",
|
||
" <th>3</th>\n",
|
||
" <th>4</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>-1.574465</td>\n",
|
||
" <td>0.259153</td>\n",
|
||
" <td>1.197370</td>\n",
|
||
" <td>0.147400</td>\n",
|
||
" <td>0.649382</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0.689519</td>\n",
|
||
" <td>0.137652</td>\n",
|
||
" <td>-1.025709</td>\n",
|
||
" <td>0.210340</td>\n",
|
||
" <td>-0.076938</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>-0.282727</td>\n",
|
||
" <td>0.351636</td>\n",
|
||
" <td>-0.539261</td>\n",
|
||
" <td>1.216683</td>\n",
|
||
" <td>0.340782</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>0.070889</td>\n",
|
||
" <td>-0.614808</td>\n",
|
||
" <td>1.074067</td>\n",
|
||
" <td>-0.038300</td>\n",
|
||
" <td>-1.450257</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1.794282</td>\n",
|
||
" <td>1.458078</td>\n",
|
||
" <td>-0.207545</td>\n",
|
||
" <td>-0.442600</td>\n",
|
||
" <td>-0.147420</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>1.112383</td>\n",
|
||
" <td>0.647473</td>\n",
|
||
" <td>1.405890</td>\n",
|
||
" <td>0.073598</td>\n",
|
||
" <td>-0.276263</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>0.397700</td>\n",
|
||
" <td>-1.526744</td>\n",
|
||
" <td>-0.712018</td>\n",
|
||
" <td>1.216290</td>\n",
|
||
" <td>0.418506</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>-0.280647</td>\n",
|
||
" <td>1.106095</td>\n",
|
||
" <td>-1.646283</td>\n",
|
||
" <td>-0.956563</td>\n",
|
||
" <td>-1.564374</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>-0.369139</td>\n",
|
||
" <td>-0.751699</td>\n",
|
||
" <td>0.051649</td>\n",
|
||
" <td>-0.213103</td>\n",
|
||
" <td>0.967809</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>9</th>\n",
|
||
" <td>-1.557795</td>\n",
|
||
" <td>-1.066837</td>\n",
|
||
" <td>0.401842</td>\n",
|
||
" <td>-1.213743</td>\n",
|
||
" <td>1.138775</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" 0 1 2 3 4\n",
|
||
"0 -1.574465 0.259153 1.197370 0.147400 0.649382\n",
|
||
"1 0.689519 0.137652 -1.025709 0.210340 -0.076938\n",
|
||
"2 -0.282727 0.351636 -0.539261 1.216683 0.340782\n",
|
||
"3 0.070889 -0.614808 1.074067 -0.038300 -1.450257\n",
|
||
"4 1.794282 1.458078 -0.207545 -0.442600 -0.147420\n",
|
||
"5 1.112383 0.647473 1.405890 0.073598 -0.276263\n",
|
||
"6 0.397700 -1.526744 -0.712018 1.216290 0.418506\n",
|
||
"7 -0.280647 1.106095 -1.646283 -0.956563 -1.564374\n",
|
||
"8 -0.369139 -0.751699 0.051649 -0.213103 0.967809\n",
|
||
"9 -1.557795 -1.066837 0.401842 -1.213743 1.138775"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>0</th>\n",
|
||
" <th>1</th>\n",
|
||
" <th>2</th>\n",
|
||
" <th>3</th>\n",
|
||
" <th>4</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>9</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" 0 1 2 3 4\n",
|
||
"0 0.0 0.0 0.0 0.0 0.0\n",
|
||
"1 0.0 0.0 0.0 0.0 0.0\n",
|
||
"2 0.0 0.0 0.0 0.0 0.0\n",
|
||
"3 0.0 0.0 0.0 0.0 0.0\n",
|
||
"4 0.0 0.0 0.0 0.0 0.0\n",
|
||
"5 0.0 0.0 0.0 0.0 0.0\n",
|
||
"6 0.0 0.0 0.0 0.0 0.0\n",
|
||
"7 0.0 0.0 0.0 0.0 0.0\n",
|
||
"8 0.0 0.0 0.0 0.0 0.0\n",
|
||
"9 0.0 0.0 0.0 0.0 0.0"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"transformation"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"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",
|
||
"\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,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr0AAAHmCAYAAAB+hTZxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABX+ElEQVR4nO3deZxcVZ3///e9t6q6u3pJV3VXVWcP6YawJAFikBAw7NlIEwioCBIZhAFhVPIVkBE1IYigI4RxwRFx4DcSRlBJIEwMwUFRTESWIRtrQvalu9Od9L7Ucn9/VHelO+l9qS2v5+PhdN97z7116kwe8M7h3M8xbNu2BQAAAKQxM9EdAAAAAIYaoRcAAABpj9ALAACAtEfoBQAAQNoj9AIAACDtEXoBAACQ9hyJ7kBfHDpUr0gkfhXWCgpyVFlZF7fPO94x3vHDWMcPYx1fjHf8MNbxw1j3nmka8niyO72WUqE3ErHjGnrbPhPxw3jHD2MdP4x1fDHe8cNYxw9jPXAsbwAAAEDaI/QCAAAg7RF6AQAAkPYIvQAAAEh7hF4AAACkPUIvAAAA0h6hFwAAAGmP0AsAAIC016vNKVatWqWf//znCoVC+tKXvqTrrruuw/VXXnlFP/7xjxWJRDRp0iQtXbpULpdLK1as0MMPP6yCggJJ0gUXXKBFixYN/rcAAABAzMMP/0CbNm1QKBTUnj27NW7ceEnSZz97jS677PJePaOurk4PPLBEDz74o2OunXfeVJWUnNTh3DnnnKtbbrl94J0fIj2G3rKyMi1btkzPP/+8XC6XrrnmGp199tkqKSmRJDU0NGjp0qVasWKFCgsLtWjRIq1YsUKf//zntXnzZt1zzz2aN2/ekH8RAAAARH3jG9+UJO3fv09f/eoteuqpZ/r8jNraGn388YddXu/PMxOpx9C7bt06TZs2Tfn5+ZKkWbNmac2aNfqXf/kXSZLb7darr74qp9OpxsZGVVZWKi8vT5K0adMm7dixQ7/4xS80YcIEfec739GwYcOG7tsAAAAkgb9t2q/XN+4flGc5XZaCLeHY8XmTh+vcScP79aw9e3brRz96UDU11crIyNSiRXfppJNO1tq1a/TMM/8l0zQ1YsQIfec79+vRR/9NBw9W6F//9c5OZ3u7cvXVpTr11In6+OMP9Z3vLNX3vrdYw4blKyMjQ4888lP9+McP66233pRhSLNmzdUXv3iD3nnnLf385z9WOBzR+PHF+va37+vX9+tOj6G3vLxcPp8vduz3+7Vx48YObZxOp1577TXdfffd8vv9Ou+88yRJPp9PN954o6ZMmaJHHnlES5cu1cMPP9zvzhYU5PT73v7y+XLj/pnHM8Y7fhjr+GGs44vxjh/Gumt5eYfkdFmD9rz2z8rLy+z12Dc3Z8uyzFj7r351qb773e/q1FNP1datW3X77bfr5Zdf1n/+53/oueeeU0FBgX7wgx+otrZCS5cu0cKFC/XEE7/o9Nk33fTFDsd33nmnPvOZz8iyTF166UX6+c9/qj179mjXrp363//9T40aNUrLly/X4cOVWr36JbW0tOj666/XmWdOUn6+W3v27Naf/vQn5eYOzZ+rHkNvJBKRYRixY9u2Oxy3Of/88/XGG2/okUce0ZIlS/Twww/rZz/7Wez6TTfdpEsvvXRAna2srFMkYg/oGX3h8+WqoqI2bp93vGO844exjh/GOr4Y7/hhrLs3aaxHk8Z6BuVZnY11b8e+qqpe4XBEFRW1amho0KZNm3TXXd+MXa+rq9fWrbs1bdp5+tznPq8ZMy7QjBkXqbBwlPbv3xe7tzNPPPH0MecqKmoVDkc0enSJKipqVVVVL4/Hq4yMYaqoqNVf/vK6Zs2aq6qqBknShRfO1KuvvqZzz52hUaPGqKlJamrq/58r0zS6nCTtsXpDUVGRKioq2n2ZCvn9/tjx4cOH9frrr8eOS0tL9eGHH6q2tlZPPfVU7Lxt27KswfsbDwAAAHovEonI5crQU089E/vf448/pby8Ybrjjjv1ve/9ULm5ebr//u/o5ZdXD+izMjIyOv392MlLW+Fw+Jh2Q6HH0Dt9+nStX79eVVVVamxs1Nq1azVjxozYddu2ddddd2nfvn2SpDVr1mjKlClyu9164okntGHDBknS008/PeCZXgAAAPRPTk6ORo0aHQu0b775d91++z8rHA7rmmuuVH5+vq6//p80e/Zl+uijD2VZViyQDpZPfWqq/vCH/1E4HFZTU5PWrl2jM8+cOqif0ZUelzcEAgEtWrRICxcuVDAY1NVXX63Jkyfr5ptv1te+9jVNmjRJ999/v2655RYZhqGSkhLdd999sixLjz76qJYsWaKmpiaNGzdOP/zhD+PxnQAAANCJxYu/p3/7t+/rmWf+Sw6HU0uXfl8Oh0Nf/vItuuOO25WRkSGPx6N7712i3Nw8BQJF+upXb9FPfnLsut4bbri2w/GoUaP0ve91n/Xmz79Ku3fv0g03fEGhUEgzZ87R+edfqHfeeWtQv2dnDNu247dIdoDivaa3sDBHBw/Wxe3zjnesD4sfxjp+GOv4Yrzjh7GOH8a69wa0pvd49dHuw7p+yRrVNQYT3RUAAAAMEKG3C8FQRNV1LdpTzkwvAABAqiP0diHgyZIklR9uTHBPAAAAMFCE3i548zLlsEyVtdaRAwAAQOoi9HbBNA0VFbhVdoiZXgAAgFRH6O3GiMIclR9iphcAACDVEXq7MbwwW+WHGhVJnapuAAAA6ESPm1Mcz0b4stUSiuhwbbO8eZmJ7g4AAECvPPzwD7Rp0waFQkHt2bNb48aNlyR99rPX6LLLLu/VM2644Vo99dQzvWr7zjtv6ZvfXKSRI0d3OP9P/3Szzj//wr51fogQersxojBbklR+qJHQCwAAUsY3vvFNSdL+/fv01a/e0uvw2l5f75kw4RT99KeP9/lz4oXQ243hhdEdPcoONejksZ4E9wYAAKSK4Ed/U/DDvwzKs/Y5HQoGQ7Fj54QZcp50br+fd/XVpTr11In6+OMP9dhjT+i55/5bb7/9pmpqalRYWKilSx+U11ug886bqtdff0u/+tUvdPBghXbv3qWysgOaN2++vvSlL/f68/bv36dvfOOrGjYsXxkZGZo5c47+8IeXVF19WOeeO0Of/ew1euih+1VWdkCWZemf//l2TZs2Xb/61S+0ZctmlZcf0FVXfV5XXnl1v7+zROjtVmF+lhyWoXIqOAAAgDQybdp0LV36oPbs2a1du3boP/7jP2Wapu6//7t6+eU/6Atf+GKH9lu3fqzHHntCdXW1+tznrtCCBZ9Tbm5uhzYffvi+brjh2g7n/v3fH5Mk7dq1U7/97U80fPgIrV69ShUV5Xr66d/K4XDoO9+5R1OmTNU113xRe/fu0W233aQnn1wuSWppadbTT/92UL4zobcblmnIl59F2TIAANAnzpPOHdBsbHs+X64qKmoH5VltTj11oiRp1KjR+pd/WaRVq1Zq166d2rJlk0aOHHVM+ylTpsrpdMrj8SovL0/19XXHhN6uljc0NDTI4/Fq+PARsXMnnXSyHI5oDH3nnTf1zW9+W5I0cuQonXrqRL333uYO/RwMVG/oQcDjVhllywAAQBrJyMiQJH3wwftatOhfZNsRXXjhxZox4wLZnVStcrlcsd8Nw+i0TW8+r7PjSOToZ9kKh8Od3jcQhN4e+D1ZqqBsGQAASEPvvvu2zjzzU7riiqs1evQYrVv3uiKRSFz78KlPTdVLL62UJO3du0ebNm3QaadNHvTPYXlDDwKeLMqWAQCAtHTxxTP1rW/dpYULPy8pukRh//59/XpWZ2t6L754pi65ZGa3991xx1364Q8f0OrVq2QYhr75zW+rsLCwX33ojmH3dX46gSor6zqZAh86Pl+u/vzmTj38m3d11xfO1ClUcBhSQ7FmCZ1jrOOHsY4vxjt+GOv4Yax7zzQNFRTkdH4tzn1JOQFPliSxHTEAAEAKI/T2wJubKYdlUMEBAAAghRF6e2C2li2jVi8AAEDqIvT2AmXLAAAAUhuhtxf8nuhML2XLAAAAUhOhtxcCXreCrWXLAAAAkHoIvb3gb63gwMtsAAAAqYnQ2wuBWOhlXS8AAEAqIvT2gjcvUw7LpIIDAABAiiL09oJpGPLlZ6qsipleAACAVETo7aWAx63yw8z0AgAApCJCby8FvJQtAwAASFWE3l7yeyhbBgAAkKoIvb0UoGwZAABAyiL09pKfsmUAAAApi9DbS5QtAwAASF2E3l4yDUN+TxZlywAAAFIQobcP/PlZzPQCAACkIEJvHwS8WSo/TNkyAACAVEPo7YMAZcsAAABSEqG3D2IVHFjXCwAAkFIIvX0Q8LglSWVsRwwAAJBSCL194MnLiJYtqyL0AgAApBJCbx/EypaxQQUAAEBKIfT2UcBD2TIAAIBUQ+jtI7+HsmUAAACphtDbR5QtAwAASD2E3j4KULYMAAAg5RB6+8jfVraMdb0AAAApg9DbR7GyZYReAACAlEHo7SPKlgEAAKQeQm8/ULYMAAAgtRB6+yHgcVO2DAAAIIUQevvB78lSMBTRoRrKlgEAAKQCQm8/tJUtK2ddLwAAQEog9PZDwEvZMgAAgFTSq9C7atUqzZ07VzNnztTy5cuPuf7KK6+otLRUl112me655x61tLRIkvbt26frrrtOs2fP1le+8hXV19cPbu8TJD83Q04HZcsAAABSRY+ht6ysTMuWLdMzzzyjlStX6tlnn9XWrVtj1xsaGrR06VI9+eST+p//+R81NzdrxYoVkqT77rtP1157rdasWaOJEyfqscceG7pvEkemYcifT9kyAACAVNFj6F23bp2mTZum/Px8ud1uzZo1S2vWrIldd7vdevXVV1VYWKjGxkZVVlYqLy9PwWBQb775pmbNmiVJWrBgQYf7Ul20Vi8zvQAAAKnA0VOD8vJy+Xy+2LHf79fGjRs7tHE6nXrttdd09913y+/367zzztOhQ4eUk5MjhyP6ET6fT2VlZQPqbEFBzoDu7w+fL7fT8+NG5mvz9ioVFOTINI049yp9dTXeGHyMdfww1vHFeMcPYx0/jPXA9Rh6I5GIDONIqLNtu8Nxm/PPP19vvPGGHnnkES1ZskR33333Me06u68vKivrFInErzauz5erioraTq/lZloKhiL66JODKhiWGbc+pbPuxhuDi7GOH8Y6vhjv+GGs44ex7j3TNLqcJO1xeUNRUZEqKipixxUVFfL7/bHjw4cP6/XXX48dl5aW6sMPP5TX61Vtba3C4XCn96W6QH60bBnregEAAJJfj6F3+vTpWr9+vaqqqtTY2Ki1a9dqxowZseu2beuuu+7Svn37JElr1qzRlClT5HQ6NXXqVK1evVqStHLlyg73pbq2smVUcAAAAEh+PYbeQCCgRYsWaeHChbriiis0b948TZ48WTfffLM2bdokj8ej+++/X7fccosuv/xybd++XXfddZckafHixXruuec0d+5cvfXWW7rjjjuG+vvETVvZMmZ6AQAAkp9h23b8FskOUDKt6ZWk7zzxhvyeLH31qslx61M6Y81S/DDW8cNYxxfjHT+Mdfww1r03oDW96BplywAAAFIDoXcAAh63yg81KpI6k+UAAADHJULvAPi9WQqFIzpU05zorgAAAKAbhN4BCHiiFRx4mQ0AACC5EXoHIOBpq9XLul4AAIBkRugdgLayZeXM9AIAACQ1Qu8AmIYhf36WyqqY6QUAAEhmhN4B8nuyVH6Y0AsAAJDMCL0DFPBStgwAACDZEXoHyO+Jli2rqmlKdFcAAADQBULvALWVLSunggMAAEDSIvQOEGXLAAAAkh+hd4DaypaVVVG2DAAAIFkRegfINIxoBQdmegEAAJIWoXcQ+POz2IoYAAAgiRF6B0HA61bF4UZFIpQtAwAASEaE3kEQ8GQpFLZVVUvZMgAAgGRE6B0E/tayZVRwAAAASE6E3kHQVraMl9kAAACSE6F3EOTnZshF2TIAAICkRegdBKZhyEfZMgAAgKRF6B0kAY+bsmUAAABJitA7SPyeLMqWAQAAJClC7yChbBkAAEDyIvQOkgBlywAAAJIWoXeQ+NvKllHBAQAAIOkQegdJrGwZM70AAABJh9A7SEzDkJ+yZQAAAEmJ0DuI/JQtAwAASEqE3kEUoGwZAABAUiL0DiJ/W9myGsqWAQAAJBNC7yCKlS07zLpeAACAZELoHUQBbzT0UrYMAAAguRB6B9GwHBdlywAAAJIQoXcQUbYMAAAgORF6B1mAsmUAAABJh9A7yPyULQMAAEg6hN5BFvC6KVsGAACQZAi9g8yfnyVJvMwGAACQRAi9gyxWtox1vQAAAEmD0DvI8ilbBgAAkHQIvYPMaC1bVsYGFQAAAEmD0DsEAh63ytmKGAAAIGkQeoeA30vZMgAAgGRC6B0CAQ9lywAAAJIJoXcIBDyULQMAAEgmhN4h4PdEy5axHTEAAEByIPQOgfwcl1xOU+XM9AIAACQFQu8QMAxD/nw3ZcsAAACSBKF3iAQ8WZQtAwAASBKE3iFC2TIAAIDk0avQu2rVKs2dO1czZ87U8uXLj7n+xz/+UfPnz9fll1+u2267TdXV1ZKkFStW6LzzztP8+fM1f/58LVu2bHB7n8TaypZVUrYMAAAg4Rw9NSgrK9OyZcv0/PPPy+Vy6ZprrtHZZ5+tkpISSVJdXZ2WLFmi3//+9woEAvr3f/93/eQnP9G3v/1tbd68Wffcc4/mzZs35F8k2bSVLSs/1ChfflaCewMAAHB863Gmd926dZo2bZry8/Pldrs1a9YsrVmzJnY9GAxq8eLFCgQCkqQJEyZo//79kqRNmzZpxYoVKi0t1Z133hmbAT4eULYMAAAgefQ401teXi6fzxc79vv92rhxY+zY4/Ho0ksvlSQ1NTXp8ccf1/XXXy9J8vl8uvHGGzVlyhQ98sgjWrp0qR5++OF+d7agIKff9/aXz5fbr/sKC3OU4bJU0xTq9zOOR4xV/DDW8cNYxxfjHT+Mdfww1gPXY+iNRCIyDCN2bNt2h+M2tbW1uv3223XyySfryiuvlCT97Gc/i12/6aabYuG4vyor6+L6YpjPl6uKitr+3z8sSzv3Vg/oGceTgY43eo+xjh/GOr4Y7/hhrOOHse490zS6nCTtcXlDUVGRKioqYscVFRXy+/0d2pSXl+vaa6/VhAkT9MADD0iKhuCnnnoq1sa2bVmW1Z/+p6yAN4utiAEAAJJAj6F3+vTpWr9+vaqqqtTY2Ki1a9dqxowZsevhcFi33nqr5syZo3vvvTc2C+x2u/XEE09ow4YNkqSnn356wDO9qcbvoWwZAABAMuhxeUMgENCiRYu0cOFCBYNBXX311Zo8ebJuvvlmfe1rX9OBAwf03nvvKRwO6+WXX5YkTZw4UQ888IAeffRRLVmyRE1NTRo3bpx++MMfDvkXSiYBj1vhSLRsGRUcAAAAEqfH0CtJpaWlKi0t7XDul7/8pSRp0qRJ+uCDDzq9b+rUqVqxYsUAu5i62sqWlR1qIPQCAAAkEDuyDaG2smXlrOsFAABIKELvEMrPccnlNFVWRegFAABIJELvEDIMQ/58NxtUAAAAJBihd4gFvFksbwAAAEgwQm8X7JZG1X/05oCfE/C4VXG4UeFIZBB6BQAAgP4g9HYhfOBDlf32IYUP7hzQc/yeLIUjtqpqmgepZwAAAOgrQm8XTM9ISVK4bOuAntO+bBkAAAASg9DbBSOnUFZ2/oBDb1vZMio4AAAAJA6htwuGYShj1ASFy7cN6Dn5OS5lOC1eZgMAAEggQm83MkeeJLumXJHGmn4/wzAM+T1ZLG8AAABIIEJvNzJHTZA08HW90dDLTC8AAECiEHq74SoaLxmWIgN+mc2tg5QtAwAASBhCbzdMZ4bMwjEDXtcbaC1bVknZMgAAgIQg9PbACpQoXL5ddiTU72f4W8uWlbOuFwAAICEIvT2w/MVSuEWRyj39fkbAS9kyAACARCL09sAqOlHSwF5mG5YdLVtGBQcAAIDEIPT2wMj2ynDnK1ze/9DbVraMWr0AAACJQejtgWEY0XW9ZQN/mY2yZQAAAIlB6O0FK1Asu7ZCkYbqfj/DT9kyAACAhCH09oLlL5GkAS1xoGwZAABA4hB6e8EsHCuZliIDWOLQVsGhvIqX2QAAAOKN0NsLhsMls3DsgCo4tNXqZV0vAABA/BF6e8nylyhcsV12uH+bVFC2DAAAIHEIvb1kBUqkcFCRyl39up+yZQAAAIlD6O0lK1AsSQqXD2BdL2XLAAAAEoLQ20tmToGMbM+A1vUGvJQtAwAASARCbx9Y/uKBvcyWT9kyAACARCD09oEVOFF2XaUiDYf7dT9lywAAABKD0NsHsXW9/ZztDVC2DAAAICEIvX0Q3aTC0e/Qm5ftUoaLsmUAAADxRujtA8NyyvSN6/fObIZhKJBP2TIAAIB4I/T2keUvVvhg/zep8HuyVMaaXgAAgLgi9PZRdJOKUL83qQh43TpY3UTZMgAAgDgi9PaRFSiR1P+X2fye1rJl1U2D2S0AAAB0g9DbR2a2R0a2dwAVHFrLlrGuFwAAIG4Ivf1gBUooWwYAAJBCCL39YAWKZddXKVJ/qM/3xsqW8TIbAABA3BB6+2Eg63pjZcsOM9MLAAAQL4TefjALxkpW/zep8HvdzPQCAADEEaG3HwzLIavwBIXL+7dJRcCTRdkyAACAOCL09pMZKFakYofscLDP91K2DAAAIL4Ivf1kBUqkSEiRgzv7fG9b2TIqOAAAAMQHobefjrzM1vclDm1ly6jVCwAAEB+E3n4y3fkycgoULu/7y2yULQMAAIgvQu8ARDep6PtMr2EYCniyWN4AAAAQJ4TeAbACJdFNKuoq+3yv3+NW+SFmegEAAOKB0DsAlr9YUv/X9VK2DAAAID4IvQNgFoyRLGe/NqmgbBkAAED8EHoHwLAcsnwn9OtlNsqWAQAAxA+hd4BMf7EiB3fKDrX06b6AtzX0UsEBAABgyBF6B8gqKpEi4T5vUpHndirDZVGrFwAAIA56FXpXrVqluXPnaubMmVq+fPkx1//4xz9q/vz5uvzyy3XbbbepurpakrRv3z5dd911mj17tr7yla+ovr5+cHufBCx/6yYVfVziQNkyAACA+Okx9JaVlWnZsmV65plntHLlSj377LPauvVIwKurq9OSJUv0+OOP68UXX9SECRP0k5/8RJJ033336dprr9WaNWs0ceJEPfbYY0P3TRLEdA+TkevrZwUHt8ooWwYAADDkegy969at07Rp05Sfny+3261Zs2ZpzZo1sevBYFCLFy9WIBCQJE2YMEH79+9XMBjUm2++qVmzZkmSFixY0OG+dGIFihUu2yrbtvt0n9+TpcrqJoXClC0DAAAYSo6eGpSXl8vn88WO/X6/Nm7cGDv2eDy69NJLJUlNTU16/PHHdf311+vQoUPKycmRwxH9CJ/Pp7KysgF1tqAgZ0D394fPl9tjm+rxp6ly69/lzWiWY5ivx/ZtSsZ4FV6/U7bDkq8w/t8tGfVmvDE4GOv4Yazji/GOH8Y6fhjrgesx9EYiERmGETu2bbvDcZva2lrdfvvtOvnkk3XllVeqrKzsmHad3dcXlZV1ikT6Nps6ED5frioqantsF84eLUkqf3+DnMVn9/r5WY7oeHyw7aCcfZwlTke9HW8MHGMdP4x1fDHe8cNYxw9j3XumaXQ5Sdrj8oaioiJVVFTEjisqKuT3+zu0KS8v17XXXqsJEybogQcekCR5vV7V1tYqHA53eV+6MAtGSZarz5tUULYMAAAgPnoMvdOnT9f69etVVVWlxsZGrV27VjNmzIhdD4fDuvXWWzVnzhzde++9sdlcp9OpqVOnavXq1ZKklStXdrgvnRimQ5b/hD6H3jy3U5kuiwoOAAAAQ6zH5Q2BQECLFi3SwoULFQwGdfXVV2vy5Mm6+eab9bWvfU0HDhzQe++9p3A4rJdfflmSNHHiRD3wwANavHix7rnnHv385z/X8OHD9cgjjwz5F0oUy1+slo0vyw61yHC4enWPYRjye7Ko1QsAADDEegy9klRaWqrS0tIO5375y19KkiZNmqQPPvig0/tGjhypX//61wPsYmowAyWSvVrhgzvkKDqp1/cFPG7tLGOdDgAAwFBiR7ZBYgWim1RE+rjEwe/J0sHDlC0DAAAYSoTeQWJm5fVrk4qAx62IbauypmmIegYAAABC7yCyAiV93qQi4M2SJJVVsa4XAABgqBB6B5EVKJHdWC277mCv7/F7omXLytmOGAAAYMgQegdR27revixxoGwZAADA0CP0DiLTO0pyZPSpXq9hGAp43CpjphcAAGDIEHoHkWFasnwnKFzet5fZqNULAAAwtAi9g8wKlChycJfsUEuv7wl4KVsGAAAwlAi9g8wKFEt2WOGK7b2+x59P2TIAAIChROgdZKa/WJL6tK6XsmUAAABDi9A7yMysPBl5gT7tzBZoLVvGy2wAAABDg9A7BKxAscLl23q9SUVua9kyXmYDAAAYGoTeIRDdpKJGdm1Fr9pTtgwAAGBoEXqHgNXPdb3lrOkFAAAYEoTeIWB6R0nOzD7tzOb3ZOlgNWXLAAAAhgKhdwgc2aSiby+zRWxbldWULQMAABhshN4hYgVKFKncLTvY3Kv2fk9r2TJeZgMAABh0hN4hEt2kItLrTSooWwYAADB0CL1DxPKXSFKvlzjkup3KyrB4mQ0AAGAIEHqHiJGZI2NYkSK9fJnNMAz5890qO8xMLwAAwGAj9A4hK1CscNnWXm9SQdkyAACAoUHoHUKWv0R2U63smvJetfd73JQtAwAAGAKE3iFkBVrX9fZyk4qAJ4uyZQAAAEOA0DuETM/I6CYV5b1b10sFBwAAgKFB6B1ChmnK8o/v9UwvtXoBAACGBqF3iFmBEkWqdssO9rxkgbJlAAAAQ4PQO8Qsf4lk273apMIwDPk9bpY3AAAADDJC7xCzAsWS+vYyWznLGwAAAAYVoXeIGRnZMvOH92FdL2XLAAAABhuhNw5Mf4ki5Z/0apOKtrJlBylbBgAAMGgIvXFgBYpbN6ko67FtW9myctb1AgAADBpCbxwc2aSi53q9fm9r2TIqOAAAAAwaQm8cmJ4RkjOrV+t6c7Nay5bxMhsAAMCgIfTGgWH0fpMKypYBAAAMPkJvnFiBEkUO7ZHd0vMMbsCTRegFAAAYRITeOLECxb3epIKyZQAAAIOL0Bsnlr/3m1QEPFmybVG2DAAAYJAQeuPEyMiW6RnRu9DrpWwZAADAYCL0xpHlL1G4fFuPm1T4PZQtAwAAGEyE3jgyA8VSc73s6gPdtouWLXPwMhsAAMAgIfTG0ZFNKrpf4hAtW5ZFrV4AAIBBQuiNIzN/uORy92pnNsqWAQAADB5CbxzFNqko700FB8qWAQAADBZCb5xZgRJFqvb2uEmFn7JlAAAAg4bQG2fRdb22wuWfdNuurWxZWRVLHAAAAAaK0Btnln+8JKPHl9kCrWXLeJkNAABg4Ai9cWa43NFNKnpY15tD2TIAAIBBQ+hNACtQrHDZNtl21y+pGYbRWsGBmV4AAICBIvQmgOUvkVoaFDnc/SYV0Vq9zPQCAAAMFKE3Acyi6CYVkR7X9VK2DAAAYDAQehPAHFYkZWT3uK434I2WLas4zBIHAACAgSD0JkB0k4riHndm83uiZcuo4AAAADAwvQq9q1at0ty5czVz5kwtX768y3Z33323nn/++djxihUrdN5552n+/PmaP3++li1bNvAepwkrUKzIoX2yW7pes9tWtoyX2QAAAAbG0VODsrIyLVu2TM8//7xcLpeuueYanX322SopKenQZvHixVq/fr2mTZsWO79582bdc889mjdv3tD0PoVZ/iObVDhGTey0TU6WU+4MBy+zAQAADFCPM73r1q3TtGnTlJ+fL7fbrVmzZmnNmjUd2qxatUoXX3yx5syZ0+H8pk2btGLFCpWWlurOO+9UdXX14PY+hfVmkwrDMOSnbBkAAMCA9TjTW15eLp/PFzv2+/3auHFjhzY33XSTJOntt9/ucN7n8+nGG2/UlClT9Mgjj2jp0qV6+OGH+93ZgoKcft/bXz5f7hA9OVct/tGyDu3o9jPGDM/ThzsPDWE/ksvx8j2TAWMdP4x1fDHe8cNYxw9jPXA9ht5IJCLDMGLHtm13OO7Oz372s9jvN910ky699NJ+dPGIyso6RSL2gJ7RFz5frioqaofs+bZ3vBo/eUPl5dUyjM4n3YdlOVV+qEH7D1TLYaX3e4dDPd44grGOH8Y6vhjv+GGs44ex7j3TNLqcJO0xRRUVFamioiJ2XFFRIb/f3+OH1tbW6qmnnood27Yty7J60d3jhxUolloaFTm0v8s2lC0DAAAYuB5D7/Tp07V+/XpVVVWpsbFRa9eu1YwZM3p8sNvt1hNPPKENGzZIkp5++ukBz/SmGysQfRmwu3q9AcqWAQAADFiPoTcQCGjRokVauHChrrjiCs2bN0+TJ0/WzTffrE2bNnV5n2VZevTRR7VkyRLNmTNHW7Zs0V133TWonU91RusmFd3tzOanbBkAAMCA9bimV5JKS0tVWlra4dwvf/nLY9o99NBDHY6nTp2qFStWDKB76c0wjB43qWgrW1ZG2TIAAIB+S+83o1KAFShR5PA+2c31nV5vK1vG8gYAAID+I/Qm2JF1vV3P9ga8bpVVMdMLAADQX4TeBLP84yXD6HaJQ8CTpcqaJoXCkTj2DAAAIH0QehPMcGbK9I7qdmc2v4eyZQAAAANB6E0Clr9E4fJPZNudz+S2lS2jggMAAED/EHqTgBUokYKNihza1+n1gJdavQAAAANB6E0CVqBYkrpc4pCd6aBsGQAAwAAQepOAkReQkZnb5ctshmEo4M1SORUcAAAA+oXQmwQMw5DpH69I2cddtvF73KzpBQAA6CdCb5KwAiWKVB+Q3VTX6XXKlgEAAPQfoTdJ9LRJRcDjpmwZAABAPxF6k4TlO6F1k4rOX2bze7IkUbYMAACgPwi9SSK6ScWYrmd628qW8TIbAABAnxF6k4gVKI5uUhE5dt1uTpZT2ZkOlbG8AQAAoM8IvUkkuklFkyKH9nZ63e+hbBkAAEB/EHqTSOxlti7W9QYoWwYAANAvhN4kYuT6optUlHf9MltlTZOCIcqWAQAA9AWhN4kYhiErUNLlzmxtZcsOVjPbCwAA0BeE3iRjBopld7FJhd/bWrasitALAADQF4TeJGP52zapOHaJQ8DTWrbsEC+zAQAA9AWhN8lEN6kwFT5wbOiNlS3jZTYAAIA+IfQmGcOZIbNgdJebVPg9bmZ6AQAA+ojQm4Qsf0nrJhXhY64FPFnM9AIAAPQRoTcJWUUlUqhZkao9x1yjbBkAAEDfEXqT0JGX2Y5d4kDZMgAAgL4j9CYhI7dQRlZepzuzUbYMAACg7wi9Sai7TSooWwYAANB3hN4kZfpLZNeUKdJY0+E8ZcsAAAD6jtCbpKxAsSQp0sm6Xr/HrTJmegEAAHqN0JukoptUWJ0vcfBmqZyZXgAAgF4j9CYpw+GSWTim85fZ8ilbBgAA0BeE3iRm+YsVrjh2k4qAN1q2rOIws70AAAC9QehNYlagRAq1KFK1u8N5vydatowlDgAAAL1D6E1ibS+zHb3Eoa1sGS+zAQAA9A6hN4kZOYUysoYd8zJbW9kyZnoBAAB6h9CbxI5sUtHJy2yULQMAAOg1Qm+SswIlsmsrjtmkIuDNYitiAACAXiL0JjkzUCKp83W9VZQtAwAA6BVCb5KzCsdKpqXIUaHX78mSLcqWAQAA9AahN8kZDpfMgrEKH7UdMRUcAAAAeo/QmwKsQLHC5dtlR0Kxc9TqBQAA6D1CbwqwAiVSuEWRyj2xc21ly8oIvQAAAD0i9KYAq6uX2bxulbO8AQAAoEeE3hRgZHtluPOPCb1+D2XLAAAAeoPQmwJim1SUd1W2LJygngEAAKQGQm+KsALFsmsPKtJwOHYuECtb1pSwfgEAAKQCQm+KsPxt63qPlC7zU7YMAACgVwi9KcIsHCuZjg7regPeaNky1vUCAAB0j9CbIgyHS2bhWEXabVKRnRktW1bOrmwAAADdIvSmECtQonDFdtnhI5tUBLxulVWxvAEAAKA7hN4UYgWKpXBQkcpdsXMBTxa7sgEAAPSgV6F31apVmjt3rmbOnKnly5d32e7uu+/W888/Hzvet2+frrvuOs2ePVtf+cpXVF9fP/AeH8diL7OVd3yZjbJlAAAA3esx9JaVlWnZsmV65plntHLlSj377LPaunXrMW1uvfVWvfzyyx3O33fffbr22mu1Zs0aTZw4UY899tjg9v44Y+Z4ZWR7O77M1lq2rJyyZQAAAF3qMfSuW7dO06ZNU35+vtxut2bNmqU1a9Z0aLNq1SpdfPHFmjNnTuxcMBjUm2++qVmzZkmSFixYcMx96DsrUHxUBYdo2TK2IwYAAOiao6cG5eXl8vl8sWO/36+NGzd2aHPTTTdJkt5+++3YuUOHDiknJ0cOR/QjfD6fysrKBtTZgoKcAd3fHz5fbtw/szuHx5+mqk/elCczKEeuV1nZGZKk+pZI0vW1P9LhO6QKxjp+GOv4Yrzjh7GOH8Z64HoMvZFIRIZhxI5t2+5w3JXO2vXmvu5UVtYpErEH9Iy+8PlyVVFRG7fP641w9ihJUvl778o5/ixJUk6WU5/sOZx0fe2rZBzvdMVYxw9jHV+Md/ww1vHDWPeeaRpdTpL2uLyhqKhIFRUVseOKigr5/f4eP9Tr9aq2tlbhcLhP96F7sU0qOrzMlkXZMgAAgG70GHqnT5+u9evXq6qqSo2NjVq7dq1mzJjR44OdTqemTp2q1atXS5JWrlzZq/vQPcNyyvSNO+ZlNtb0AgAAdK3H0BsIBLRo0SItXLhQV1xxhebNm6fJkyfr5ptv1qZNm7q9d/HixXruuec0d+5cvfXWW7rjjjsGq9/HNctfrMjBHbFNKgIet6pqmilbBgAA0IUe1/RKUmlpqUpLSzuc++Uvf3lMu4ceeqjD8ciRI/XrX/96AN1DZ6xAiYKbXlakcqcsf7H87cqWjSzMTnT3AAAAkg47sqUgK9C6SUXrEodY2TLW9QIAAHSK0JuCzGyPjJwChcuiL7P5PVmSpDK2IwYAAOgUoTdFWf4jm1RkZzqVk+XkZTYAAIAuEHpTlBUokV1fpUj9IUnRCg6pOtMbsW3tO1ivcBxrMAMAgONLr15kQ/Jpv67XHH+W/J4sfbT7cGI71QcNTSFt2VGljVsPatMnlappCOrST4/RFy4qSXTXAABAGiL0piizYIxkORUu2yrn+LMU8Lj19y1lCobCcjqsRHfvGHbrbO7GTyq1cWultu6tVjhiKzvToYnjC2Qahl75xy6NKnDrM6ePSHR3AQBAmiH0pijDcsgqHBfbmc3vTb6yZc3BsD7YeUgbt1Vq47ZKVdY0SZJG+3M0++wxmlxcoPEj8mSZpiIRW40tYT39ykcaE8jV2CL2GAcAAIOH0JvCzECxgpv/KDscVMBzpGxZIkNvxeHGWMj9YNchBUMRZTgtnTrOo8umj9Xk8QXy5mUec59pGrrzi5/SV3/0Jz22cpMW33CW3JnOBHwDAACQjgi9KcwKlCi4cY0iB3fK7xkrKf5ly0LhiD7eU61N2yq1YdtB7a+MVpDwe7J0/hkjdHpxoU4anS+no+d3JoflZOgrV0zUD5a/oydeel//ctUkmYYx1F8BAAAcBwi9Kaz9y2zZgZK4lS2rrmuOrs3dVqn3dlSpsTksh2Vowuh8nX/GSJ1eXBDbMKOvSkYO0+cuKtF///FjrXljl+ZOGzvIvQcAAMcjQm8KM935rZtUtO7MNkRlyyK2re37a7Rxa6U2flKpnQdqJUme3AyddXJApxcX6JRxHmW6BueP0yWfGqVte6v1+9e26YTheTplrGdQngsAAI5fhN4UZwVOVPjAh5Ikv8etj3YfGpTn1jcFtWV7lTZsrdTm7ZWqbQjKMKTikcO0YMZ4TS4u0Gh/jowhWH5gGIZumHOydpfX6RcvbNbif/q0PLkZg/45AADg+EHoTXFWoFihbX9XpK5SAU+W/r7lQL/Kltm2rb0VbSXFDmrr3hpF7GhJsUnFBZo8vkATxxcoJys+L5dluhy67cpJ+t7/95Z+/sJm3f2FM+Ww2EsFAAD0D6E3xR1Z17tNfu+YaNmyQ40a6cvp8d7mlrDe33lIG7cd1MZPKlVV0yxJGuPP0dxzxmhycaHGD8+TaSbmZbKRhdm6Yc7J+sWLW/S7P2/TNRefmJB+AACA1EfoTXFmwWjJcilctlWBE06W1H3oLT/U0K6k2GGFwhFluCydNs6ry88t0KTxBUm1lODsUwPauqdaa9/crZKRwzT1ZH+iuwQAAFIQoTfFGaZDlm+cwuVbFZiSJalj2bJQOKKPdh+OBd0DVdHqDgGvWxdNGalJxQU6aVTvSoolyucvLtH2AzX6z9Xva5Q/R0X9rAwBAACOX4TeNGAFStSy6WXlOGzlZDn1yf4a/WXDPm3cVqktO6rU3NJaUmyMRxdOGanJxQWxzSxSgcMyddsVE7XkyTf1sxWb9O3rpyrDlXxbLQMAgORF6E0DZqBY2hBW5OBOBbxZeuuDcr31Qbk8uRk659SAJhUX6NSx3pQOit68TN1y+Wl65Nl39V8vf6Cb5p06JJUjAABAeiL0pgHL3/oyW/lWXTVjmrbvr9HE8QUa5ctOq2B42glezf/MCVr51+0qGZWvC88cmeguAQCAFEHoTQOme5iMXJ/CB7bq5MlzdHIab+Ywb/o4bdtbo//+40caV5SrE4bnJbpLAAAgBSTv20voEytQrHD5Ntm2neiuDCnTMHRz6akalp2hx1ZsUl1jMNFdAgAAKYDQmyYsf4nshsOy6yoT3ZUhl5Pl1G1XTlR1fYseX7VFkTQP+gAAYOAIvWnCKmrbpGJrgnsSHycMz9O1l5ykzZ9U6aW/7Uh0dwAAQJIj9KYJ0ztacrgULt+W6K7EzflnjNA5pxXphde3a/P29J/hBgAA/UfoTROGacnynXDczPRKkmEYWjh7gkb6svX4i++psrop0V0CAABJitCbRqxAiSIHd8kOtSS6K3GT4bR025WTFApH9PMXNisUjiS6SwAAIAkRetOI5S+R7LDCB3ckuitxVeR168uXnaJP9tXo2f89fma6AQBA7xF604gZKJYkRY6jJQ5tPjXBr1mfHq3/fWeP/r7lQKK7AwAAkgyhN42YWXky8vwK7nhHdktDorsTd1edX6wTRw3TU2s+0N6KukR3BwAAJBFCb5pxTbxUkbJtqn/uWwpu+0fab1bRnsMydev8icp0OfSzFZvV2BxKdJcAAECSIPSmGdfES+W+4jsy3MPU9L+PqfEPDytSU57obsWNJzdDt15+msoONeipP3xwXIV+AADQNUJvGrL84+W+YrEypl+ncNlW1f/2W2p+5wXZ4eNjy96Tx3p09fnFevODcv3xrT2J7g4AAEgChN40ZZimXBMvVfbnHpRj7BS1vLVCDb/7jkL73k901+Ji9tljdOaJhXruT1u1dU91orsDAAASjNCb5sxsj7IuuU1Zc/6f7EhYjS/9QI1/elyRxppEd21IGYahL192igryMvXzFzarpv74qV0MAACOReg9TjhGT1b2Zx+Q68xShba9ofpn71HL+3+WbafvZg7uTKduu3Ki6hqD+sWLWxSJsL4XAIDjFaH3OGI4XMo46yq5r7pfVsEYNf/1KTW88IDClbsS3bUhMyaQqy/OPEnv7zykla9/kujuAACABCH0HocszwhlzfumMi+4WXZNuRqeX6Kmv/9GdrAp0V0bEp+ZPEIzTh+ul9bt1LtbDya6OwAAIAEIvccpwzDkPOlcZX/uQTknfEbBjWuitX13vJ2WZb6uu/QkjQnk6IlV76nicGOiuwMAAOKM0HucMzJzlDnjn+S+/F4ZGW41rf2JGl/+d0Vq02tG1OmwdNuVkyRJj63YrGAonOAeAQCAeCL0QpJkFZ0o94Ilyjj78wrvey9a2/fd1bIj6bOrmT8/SzeVnqqdZbVa/srHie4OAACII0IvYgzTIdfpc6K1fUdNVMs/nlPD75codOCjRHdt0JxRUqjLzhmrv2zYp9c37k90dwAAQJwQenEMM6dAWTO/pqyZX5fd0qDGF7+vptf+U3ZTXaK7Niiu+MwJOmWsR79e+6F2ldUmujsAACAOCL3okmPcmcr+3PflnDxHwY9eV/2z9yj44V9T/kU3yzR1y+WnKTvTocdWbFZD0/GxPTMAAMczQi+6ZTgzlTnt83JfdZ+M/CI1vfYrNb70kMKH9ia6awOSl+3SV66YqMqaJv3qf95P+SAPAAC6R+hFr1je0XJf/i1lzPgnhav2qOF331XzP34nO9Sc6K7124mj8vXZC0v0fx8f1Jp/pO8GHQAAQHIkugNIHYZhynXy+XKMPVPNbzyrlndfUnDb35V57vVyjDk90d3rl0unjtLWvdX6/Z8/0fjheZowxpPoLgEAgCHATC/6zMzKU9YFNytr3jdlWE41rlmmxld+qkhdVaK71meGYeif5pwsvydLP39hiw7Xpe7MNQAA6BqhF/3mGHGK3FfdL9dZVym0a4Pqf/sttWx6WXYktTZ+yMpw6PYrJ6qpJaT/WLlZoXAk0V0CAACDjNCLATEshzLOLFX2Zx+QVXSSmtf/txpW3Kdw+SeJ7lqfjPTl6EuzT9ZHe6r1/Gup1XcAANAzQi8GhZnnV9bsRcq85HbZjTVqWHm/ml7/L9nN9YnuWq+dc1qRLpwyUmv+sUtvf1iR6O4AAIBBROjFoDEMQ87xZyn7cw/KOfESBd//k+qf+1cFt/49ZUqCXXPRiTpheJ7+c/V7KqtqSHR3AADAICH0YtAZrixlTr9O7isXy8gpUNOr/6HG1T9SpPpAorvWI6fD1G1XTJRlmvrZik1qDqbW+mQAANC5XoXeVatWae7cuZo5c6aWL19+zPX3339fCxYs0KxZs3TvvfcqFApJklasWKHzzjtP8+fP1/z587Vs2bLB7T2SmlU4Tu7531HGudcrXP6J6n/7bTW/tUJ2qCXRXetWwbBM/XPpqdpbUa9fv/xhysxSAwCArvVYp7esrEzLli3T888/L5fLpWuuuUZnn322SkpKYm3uuusufe9739MZZ5yhb33rW3ruued07bXXavPmzbrnnns0b968If0SSF6Gacp12sVynPApNa//jVreeaG1tu9COUadlujudWni+AJdft4JeuH17SoZNUwXnDEy0V0CAAAD0ONM77p16zRt2jTl5+fL7XZr1qxZWrNmTez63r171dTUpDPOOEOStGDBgtj1TZs2acWKFSotLdWdd96p6urqofkWSHqmO19ZF9+qrLl3SrbUuPrf1PjqfyjScDjRXetS6bnjNPEEr5555SNt31+T6O4AAIAB6HGmt7y8XD6fL3bs9/u1cePGLq/7fD6VlZXFfr/xxhs1ZcoUPfLII1q6dKkefvjhfne2oCCn3/f2l8+XG/fPTGu+cxSZ9CkdXrdCh9c9r8jujfJeeJ1yz7w0ejnJxvueGz6tRY++pl+8uEWP/r8LlOt2JbpLgybZxjqdMdbxxXjHD2MdP4z1wPUYeiORiAzDiB3btt3huLvrP/vZz2Lnb7rpJl166aUD6mxlZZ0ikfitr/T5clVRURu3zzuunDJX2cOnqOlv/6WDa36pqrf/qKI5N6k2M/mWEdxSepoefPptPfTUP/S1qyfLbPfnPVXxZzt+GOv4Yrzjh7GOH8a690zT6HKStMflDUVFRaqoOFKztKKiQn6/v8vrBw8elN/vV21trZ566qnYedu2ZVlWf/qPNGXmFylr7l3KvOgW2XWV2vdf96ph9Y8ULtua6K51MH5Enq695ERt3Fap/1m/M9HdAQAA/dBj6J0+fbrWr1+vqqoqNTY2au3atZoxY0bs+siRI5WRkaG3335bkvTCCy9oxowZcrvdeuKJJ7RhwwZJ0tNPPz3gmV6kH8Mw5Cw5R9nX/Ju8Fy9U5OBONbzwPTX84ZGk2tXtgjNHatppAa38yyfasqMq0d0BAAB91GPoDQQCWrRokRYuXKgrrrhC8+bN0+TJk3XzzTdr06ZNkqQf/ehHevDBBzV79mw1NDRo4cKFsixLjz76qJYsWaI5c+Zoy5Ytuuuuu4b8CyE1Gc4M5U+br+wv/Jtcn/6swuXb1LByqRrWLFP44I5Ed0+GYehLs07WiMJs/eKFLaqqaUp0lwAAQB8YdgoVIWVNb3prP952S6NatvxRLRvXSM31cow9U65PXSGrcGxC+7i/sl73/39vaWRhtr553RQ5rNTc34U/2/HDWMcX4x0/jHX8MNa9N6A1vUAiGK4sZZxZqpwv/JtcU69UaP8Hanh+sRrX/kThqt0J69fwgmzdOPcUbdtXo+deTa61xwAAoGs9Vm8AEslwuZUxZb5cp12ilk1r1bJprUI73pZj/FlyTblCljf+1R6mnuzXzLNGa+2bu1U8cpg+fYq/QwUTAACQfAi9SAlGRrYypl4p18RL1bLpZbVsfkWhT96So/jTcn1qvqz8EXHtz9UXFOuT/TX6xYtb9PiLW+RwmHJaZutPQw7LlNNhyhE7d+Q4+tOItu+ynXGkfSdtOvscp8OUZRoEcAAAOkHoRUoxMnOUcdZVck2apZaNa1rD7z/kKJ6mjCnzZeYXxaUfDsvUVxdM0usb96uxJaxQOKJQKKJQOKJgKKJgOKJQ2Faw7Vw4oobmUKxdMPbzSJvBYEhytAvBbcG4Y1g2VTw6X2ed5NNof/w3fAEAIBF4ka0bLByPr/6Md6SxRsGNa9Sy5Y9SOChHyXRlTLlc5rDAEPVyaNi2rXDEPhKY2wXoUNhWMPb7kdAc7KFNVwG8JRTWrrI6BUMRjR+Rp/NPH6FPnxJQhos62kOBf47EF+MdP4x1/DDWvdfdi2zM9CKlmVl5yjj7c3JOnq2WDasV3PK/Cm1dL8eJ5ypjSqnMPH/PD0kChmHI0TormxWHz8twZ2jVa1v12rt79eQfPtBvXv1Y004t0vlnjNCYAFtdAgDSD6EXacHMylPmtGvkmjxbLe+uVvD9VxX6eJ2cE86V68xSmbm+RHcxqeRluzTzrNG6dOoofbynWq+9u09/3bhff/q/vTpheK7OP2OkPn2KX5ku/hEBAEgPLG/oBv85Ib4Gc7wj9YfU8u7/KPj+nyXZck74TDT85hQMyvNTXWdjXdcY1PotB/Tau/u072C9Ml2Wpp1WpPNPH6GxRcz+9hf/HIkvxjt+GOv4Yax7j+UNOO6Y2R5lnvtFuU6fq5Z3X1Lwg9cU/PB1OU+eIdcZ82TmeBPdxaSTk+XUpVNH65JPjdK2vTV67d29+tum/frz/+3V2KJcXXBGdO1vVgb/2AAApB5mervB36ziayjHO1JXqZb/W6XgB3+VTEPOky+Q64zLZGZ7huTzkl1vx7q+Kai/bynTn9/dq70V9cpwWZp2akDnnzFC44ry4tDT1Mc/R+KL8Y4fxjp+GOveY6YXxz0zp0CZn7lBrjMui4bf915V8IPX5DzlQrnOmCvTnZ/oLial7EynLv7UKF00ZaS27YvO/q7fHF0CMTaQq/PPGKGzT2X2FwCQ/Jjp7QZ/s4qveI53pKZcze+sUujjv0mmQ87TLpLr9Lkys46P2cuBjHVDU1Drt5TptXf3ak9FvTKcls4+1a/zzxipcUW5bI5xFP45El+Md/ww1vHDWPceM73AUcw8v7Iu+LIiZ85T8zsvKrjpZQXfe1Wu0y6R8/Q5MjN5casr7nazv5/sr9Fr7+7T398r01827NcYf07r7G+R3Jn84wUAkDyY6e0Gf7OKr0SOd+TwfjW/86JCW/8uOTPkOu0SuSbPlpGZnjuWDfZYNzSF9MZ7B/Tnd/dpd3mdXE5Tnz4luvZ3/PC843r2l3+OxBfjHT+Mdfww1r3HTC/QAzN/uLIuukXhM0vV8s4Lann3f9Sy5Y9yTbw0Gn4zshPdxaTmznTowimjdMGZI7XjQK1ee3ev3nivXK9v3K9Rvujs7zmnBeTOdCa6qwCA4xQzvd3gb1bxlUzjHa7aq5Z3Vir0yZuSM0uuSTPlmjQzbcJvPMa6sTmkN96LVn7YVVYnl8PUWadE1/4Wjzh+Zn+T6c/18YDxjh/GOn4Y695jphfoI8s7UlmX3K5w5W61vL0yOvu7+RW5Js+Sa+JMGa54bBac2rIyHLrgzJGts79H1v7+bdMBjfRl6/zTR+iciUXKZvYXABAHzPR2g79ZxVcyj3f44E61vL1SoZ3/J2VkyzV5tlynXZKy4TdRY93YHNI/3i/Ta+/u044DtXI6TH365NbZ35HpOfubzH+u0xHjHT+Mdfww1r3X3Uwvobcb/CGLr1QY73DFDjW/vULhXRtkZOTIecoF0SUPhhT9P0br763HsRBnHGnT/px05Lj1p9G+jWGo3QM7P2908rnHnDdanxv93TM8oBrDK8OZMZDhGJCdB2r12oZ9+vuWA2pqCWtkYbZmnDFC09Ns9jcV/lynE8Y7fhjr+GGse4/Q20/8IYuvVBrvcPknan57pcK7Nya6KwNgyMjzyyoYLdM7WmbBKFneMTJyC2QYZtx60dQS0j/eL9dr7+7V9v3R2d+pE/w6/4wROnHUsJSf/U2lP9fpgPGOH8Y6fhjr3mNNLzDILP94uef8P9mhZikSaT1rS+3/Dtn6u93+vG1H27W73vl5u/WwkzZ221PbtenQtv35zs/lOpp1aPtHilTtVrhqt0Lb3z5yvzNTpneUrIIx0Z/e0TK9o4ZsKUemy6EZp4/QjNNHaOeBWv1lwz6t33JA67cc0PACt84/Y6SmTyxSTlb6zP4CAOKP0AsMgOHoeXlAMs5TZvty1eA9JXZsB5sUObRX4crdilTtVqRyt4Jb10stjbE2Rq6v3azwaFne0TLyfIM6Kzy2KFfXF03Q5y4sia793bBPv/nfj/W7P2/T1Ak+nTLOozH+XI0ozJbTEb/ZaABA6iP0ApDhzJTlL5blL46ds21bdn2VIpW7WsPwHkUqd0Vf5mubQXZkHJkNLhgls2CMLO8oGS73gPqT4bL0mdNH6DOnj9CusrbZ3zL9/b0ySZJlGhpekK0xgRyN8edodCBXo/05zAYDALpE6AXQKcMwZOQUyMwpkGPsmbHzdqhZkUP7FK7c1RqEdyu4/U3pgz8fuTenILY8IjorPEZGnl+G2ffZ2TGBXH1x5gRde8lJKj/cqF1ltdpdXqddZXXasqNK6zYfiLUtyMvQaH+uxgRyYj8Lh2Wm/LpgAMDAEXoB9InhyJDlO0GW74TYueis8KHoGuG2JRJVuxXatUGyW9c8Wy6Z3pFHlkh4R8sqGN3rDT9M01CR160ir1ufPiUQO19d36Ld5bXaXVanXeV12lVWqw3bDsYmo7MyLI32RWeDx/hzNCbA8ggAOB4RegEMWHRW2CszxyvHmNNj5+1QiyKH9ylSuVvhtuUR29+R/cFfjtyb7Y2tETbbAvGwgAzT6tVnD8t2adgJBZp4QkHsXHMwrH0H67WrrFa7yuu0u6xOr2/cr+ZgWFLb8gh3bDa4bYkEyyMAIH0RegEMGcPhklU4TlbhOLXFSdu2ZTdWt64V3hObFW7ZvVmyo6FUllOmZ2TrbHDbWuHRMjI7L0NztAynpROG5+mE4XmxcxHbVsWhxths8O7yOr2/s0rrtxxZHuHNy9AYf3R98JhANAgXDsuUyfIIAEh5hF4AcWUYhgx3vkx3vhyjJ8fO2+GgIof3t84KRytIhHdvUOijvx65OSNbZl5AZp5fZp4vOiOc55eZ55eR1X1NX9MwFPC6FfC6ddbJ/tj5mvqW6Brhdkskjl4eMcqXEw3DgWgYHlmYLaejdzPRAIDkQOgFkBQMyymrYIysgjFqv8gg0lAdmw2OVJcrUlOucPk2hT55o2OtY0dGNAjnBWTk+VqDcTQgGzneLpdL5GW7dNoJXp12gjd2riUY1t6D9a0vzEWXSLy+eb+a34nORJuGoeGF7uiyiNiLcznKdbuGYmgAAIOA0AsgqZnuYTLdw6RREzuct8Mh2XUHFakpj4XhSE15dLZ49wYpHDrS2LBk5BW2BuEj/zPyAjJzC2U4OoZVV1fLIw43ts4G12pXWZ0+2HVY67eUxdp4cjNi64PHtC6R6GpnIABAfBF6AaQkw3LIGFYkc1iRNLrjNduORKtJtAZhuy0QV5creGCrFGxs/yQZ2Z4jQXjYUcG4teawaRgKeNwKeNya2n55REN0eURbGN5dVqdNn1Qp0joLneGyVJCXqcJhmUd+DstU4bAsFQzLVJ7bSUk1AIgDQi+AtGMYZqzGsEac0uGabduym+tkV5cdmR1u/V9o17uyG2s6Piszt3W5ROCoWWK/jKw85bldOm2cV6eN63x5RFV9i/YcqNXB6kZt21ut+qZQh+e7HKYK2oJw3pFAXDgsGpDzsl2EYgAYBIReAMcVwzBkZOZKmbmyAiXHXLdbGtsF4QrZNdFwHD7wkUJb/y6p3TpiZ2Z0HXGuv8NLdY48v8YFvDpheJ58vlxVVNTGbmlsDqmyukkHq5t0sLpRB6ubVFkTPd6xv1Z1jcEO/XFYZmsQ7jhb3DZTPCzHRXUJAOgFQi8AtGO4smQVjpVVOPaYa3Y4KLv2oCI1ZYrUVCjSNlt8aK9Cu96VIuEjjU2HzNxChQqHK+TMi9YxzvbKme3R8GyvRo71yHAVHvMZTS3tQ3FT9PeaJlVWN+qdslrVNhwdig15844OxVmxoJyfkyHTJBQDAKEXAHrJsJwy8ofLzB9+zDU7EpFdX9VxHXF1mcJ1VQpVb5XdVHvsA51ZMnM80Q06so/8DGR7VeT1yBztlVzuDssbmlvCrSE4GoRj4bimSe9urVRNfUuHj7BMQ968jA5BuP1scX6uS1Y/tocGgFRD6AWAQWCYpozcQpm5hdLIU2Pn25Y32KEW2Q2HFak/FA3HddGfdv0hReqrFKraI7uhWh2WT0iSwxUNwzne6At32V75WoOxMcYjIycgIyMnFoybg2FVtYbig+2WUVTWNGnTJ5Wqrjs2FHtyMzq+YJeXKU9uhnLdTuVkOZXrdrFtM4CUR+gFgDgwHK7Ymt+u2JGQ7IZq2XVVR8Jxu5+Rve8r1HBYsiMdb7QcHWaLvdkeFWR7NcHjkTnKKyN7lIysPBmGqWAorMqa5tZQ3NhhCcV7Ow7pcO2Bo2O3JCnTZSnXHQ3A0SAc/b19MI6dy3Iq02XxAh6ApELoBYAkYZgOGTkFUk6ButrvzY6EZTfWtM4WH5kptusPya4/pHDZxwrVH+q4vliSTCu6E15OgYZle5Sf7dGJ2V4Zoz0yT/HKyB4hI2uYQhGpqrZJ1XUtqm1oUW1jULUNQdU2tKiu9efhumbtLq9TbUNQoXCk0346LDMagtsF5O7CcnaWkxfyAAwpQi8ApBDDtGRke6Rsjyx/cadtbDsiu7G2XSBuDcetITlcsUP2jnekcPDoh8tw5ysn26O8XJ/M/GgdZHPUcJnDxspwZhz1ObaaWsKqbQzGAnFtQ1C1jW0BORgLzuWHq1XXGFRj81FhvO2jDSknq/NZ4xy3s8Nx23WHxZILAL1H6AWANGMYpgz3MMk9TJZvXKdtbNuWmutjobhtjXHbcopw+VaFtr2h9muMjWyvzPzh0SCcXyQzf7gy8ocrc5hH/vysXvUtGIqorrFjQK5tDch17WaW9x2sV23DYdU3BjtdbiFJWRmWcrOOzBrnuJ3KdmeoqanlmLZ2Fw/p6tndXbS7u6s/n6No6DcNQ4ZhyDSNdsfRn6ZhyDDbtWl/3Ww7d9R95pG2Ha6bRz23rY3Z/rnt7uvQH0OmKRkyVBeM6NChhmj/W/+P0fpljNbvFD00Or8eO2fExqCtfdtx+/Zt9x9zXUbs3iPnjXbtO7Y59npq/xeGiG0rHI4oFLYVav0ZDkcUikSPw7HzredCrW0ikY7tw7ZCkaOO2+5v17azZ3bWPhy2dfUFxTp30rEv/iYKoRcAjkOGYUiZObIyc6SCMZ22sUMt0bJs1fsVOXwgusVz9QEFP/6bFGw60tByycwPyBwWrWwRnSGO/jScmR2e6XSY8uRmyJObod6IRGzVN7WbNW4IHhWao78fqm3WrvI6GYahSKTzJRf9CTdd3dL9kzq/2tWzbDsapG07+n1t21bEVuvP1t8jHc91FeLRf+1DePuA3BaYO4T0doH56IDfdl9fA/vRYbz9Xx5M01RLMBQLpMF2wTQyRH8YHJYhyzLlMA05LPPIcds5R/Sn0zKV5XK0u27IYUZ/jvIl1zbshF4AQKcMh0tWwWhZBR33ebZtW3ZjdTQEtwvD4YrtCm1/s8O0qpHtaZ0Z7jhDbOQUyDB6Xp5gmkbrcgaXpOwe2x+9GUi6su3ofHM0JKs1CNuKRKIBuuP59mH6yPkjYbr9ua7D95Hz0ba5uZmqqWmM/b/bbu1XtH+tM+J26yx3u2B/9PW2e9t/ryP32a3P7f662rdp97kd+9OufVfXu+hjd9/Btttd67Lvdrs+HN3HWK+77FdmhkPhULhj6LRMWVY0dFpWWzBt/b01dDraXzPbhdbWgOqMtTkSVi3LkNX6XwnSDaEXANAnhmFEX4pz5x+7zXOoJbpxx+F9ilQfiIbi6v0Kbl0vtTQeaWg5ZQ4LHAnEsVA8XIard0sljmdtM4ymlbhgcrz8BSMZMNaDg9ALABg0hsMlyztSlndkh/PR2eGa1iC8P/YzXLlboR3vdCjDZmQNO2aZRHR2uFAGG2kA6CdCLwBgyEVnh4fJdA+Thk/ocM0Oh6I72VXvP7JkovqAgp+8KTXXH2loOWTmHTU73FphwsjoeekDgOMboRcAkFCG5ZDlGSHLM6LDedu2ZTfVHpkdPnxAdvUBhQ/tVWjnu5J9pPyZkZUnMy+g/W63WlpCcf4Gg+Do8gM6+jh20HrKOOpaF+27fJbR7nQX7Y3214zYS11t1yoyXWpqCnZ8RpfPbO/otu3PdbZco4tr3bTtdD1qZ2PV1XN6bNv++x3zSx/adqxc0dXYHM7JUEv73RQ7G7uODzpKZ33oz71dvdl57HlDhqwxp0f/opskCL0AgKRkGEY0zGblSUUndbhmR0KyayoUOXxA4cP7ZVfvj84WtzTJDnVeCzhptb0JJR1506nDtdZzsdN2h5fAjr7W6bPavfB1TPsOb/+3e0ursz60O24wDUUi9rHXj/luxx53Wvats+fYx/zSyXPtbtp2ca0vbZNAc6I70E+uqQuUMeXyRHcjhtALAEg5humQ0brEwaEzY+d54Sd+jrextnsVyrsJzseUFusqkB8btgsLsnWwsq7L692dt7vtQ2fn+/b87u41sr2d35MghF4AAIAeGN0uVxhaZma2DFfn9ad7kn6Fx/qP12ABAACQ9gi9AAAASHu9Cr2rVq3S3LlzNXPmTC1fvvyY6++//74WLFigWbNm6d5771UoFH1zdt++fbruuus0e/ZsfeUrX1F9ff0x9wIAAABDrcfQW1ZWpmXLlumZZ57RypUr9eyzz2rr1q0d2tx111367ne/q5dfflm2beu5556TJN1333269tprtWbNGk2cOFGPPfbY0HwLAAAAoBs9ht5169Zp2rRpys/Pl9vt1qxZs7RmzZrY9b1796qpqUlnnHGGJGnBggVas2aNgsGg3nzzTc2aNavDeQAAACDeeqzeUF5eLp/PFzv2+/3auHFjl9d9Pp/Kysp06NAh5eTkyOFwdDg/EAUFOQO6vz98vty4f+bxjPGOH8Y6fhjr+GK844exjh/GeuB6DL2RSKTDzia2bXc47ur60e2kLnZI6YPKyrpoIew4Od5qECYa4x0/jHX8MNbxxXjHD2MdP4x175mm0eUkaY/LG4qKilRRURE7rqiokN/v7/L6wYMH5ff75fV6VVtbq3A43Ol9AAAAQLz0GHqnT5+u9evXq6qqSo2NjVq7dq1mzJgRuz5y5EhlZGTo7bffliS98MILmjFjhpxOp6ZOnarVq1dLklauXNnhPgAAACBeegy9gUBAixYt0sKFC3XFFVdo3rx5mjx5sm6++WZt2rRJkvSjH/1IDz74oGbPnq2GhgYtXLhQkrR48WI999xzmjt3rt566y3dcccdQ/plAAAAgM4Ytt3VZsrJhzW96Y3xjh/GOn4Y6/hivOOHsY4fxrr3BrSmFwAAAEh1hF4AAACkPUIvAAAA0h6hFwAAAGmP0AsAAIC0R+gFAABA2utxG+JkYpoD28Y4VT7zeMZ4xw9jHT+MdXwx3vHDWMcPY9073Y1TStXpBQAAAPqD5Q0AAABIe4ReAAAApD1CLwAAANIeoRcAAABpj9ALAACAtEfoBQAAQNoj9AIAACDtEXoBAACQ9gi9AAAASHuEXgAAAKQ9Qi8AAADSHqEXAAAAaY/QCwAAgLRH6O3CqlWrNHfuXM2cOVPLly9PdHfS2k9/+lNddtlluuyyy/TDH/4w0d05LvzgBz/QPffck+hupL1XX31VCxYs0Jw5c/S9730v0d1Jay+88ELsnyM/+MEPEt2dtFRXV6d58+Zpz549kqR169aptLRUM2fO1LJlyxLcu/Ry9Fg/++yzmjdvnkpLS/Wv//qvamlpSXAPUxOhtxNlZWVatmyZnnnmGa1cuVLPPvustm7dmuhupaV169bp9ddf14oVK7Ry5Upt2bJFr7zySqK7ldbWr1+vFStWJLobaW/37t1avHixHnvsMb344ot677339NprryW6W2mpsbFRDzzwgH7961/rhRde0FtvvaV169YlultpZcOGDfrCF76gHTt2SJKampr0rW99S4899phWr16tzZs38+d7kBw91tu3b9evfvUr/eY3v9GLL76oSCSiZ555JrGdTFGE3k6sW7dO06ZNU35+vtxut2bNmqU1a9Ykultpyefz6Z577pHL5ZLT6VRxcbH27duX6G6lrcOHD2vZsmW69dZbE92VtPfKK69o7ty5KioqktPp1LJly3T66acnultpKRwOKxKJqLGxUaFQSKFQSBkZGYnuVlp57rnntHjxYvn9fknSxo0bNXbsWI0ePVoOh0OlpaX8e3KQHD3WLpdLixcvVk5OjgzD0EknncS/J/vJkegOJKPy8nL5fL7Ysd/v18aNGxPYo/R14oknxn7fsWOH/vCHP+i///u/E9ij9Pbd735XixYt0v79+xPdlbS3c+dOOZ1O3Xrrrdq/f78uuOAC3XHHHYnuVlrKycnR17/+dc2ZM0dZWVk666yzNGXKlER3K6088MADHY47+/dkWVlZvLuVlo4e65EjR2rkyJGSpKqqKi1fvlwPPvhgIrqW8pjp7UQkEpFhGLFj27Y7HGPwffzxx7rxxht19913a9y4cYnuTlr67W9/q+HDh+ucc85JdFeOC+FwWOvXr9f3v/99Pfvss9q4cSPLSobIBx98oN///vf605/+pL/+9a8yTVO/+tWvEt2ttMa/J+OvrKxMX/rSl3TVVVfp7LPPTnR3UhKhtxNFRUWqqKiIHVdUVMT+MwMG39tvv60bbrhB3/jGN3TllVcmujtpa/Xq1frb3/6m+fPn68c//rFeffVVff/73090t9JWYWGhzjnnHHm9XmVmZuqSSy7hvxgNkddff13nnHOOCgoK5HK5tGDBAv3jH/9IdLfSGv+ejK9t27bpmmuu0ZVXXqnbb7890d1JWYTeTkyfPl3r169XVVWVGhsbtXbtWs2YMSPR3UpL+/fv1+23364f/ehHuuyyyxLdnbT25JNP6qWXXtILL7ygr33ta7rooov0rW99K9HdSlsXXnihXn/9ddXU1CgcDuuvf/2rTjvttER3Ky2dfPLJWrdunRoaGmTbtl599VVNmjQp0d1Ka6effrq2b9+unTt3KhwO66WXXuLfk0Okrq5OX/7yl/X1r39dN954Y6K7k9JY09uJQCCgRYsWaeHChQoGg7r66qs1efLkRHcrLf3qV79Sc3OzHnroodi5a665Rl/4whcS2Ctg4E4//XTddNNNuvbaaxUMBnXuuefqqquuSnS30tJ5552n9957TwsWLJDT6dSkSZP0z//8z4nuVlrLyMjQQw89pK9+9atqbm7W+eefr9mzZye6W2npd7/7nQ4ePKgnn3xSTz75pCTpoosu0te//vUE9yz1GLZt24nuBAAAADCUWN4AAACAtEfoBQAAQNoj9AIAACDtEXoBAACQ9gi9AAAASHuEXgAAAKQ9Qi8AAADS3v8PqMjeHzPwY54AAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 842.4x595.44 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_218_0.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import numpy as np\n",
|
||
"from sklearn.linear_model import LinearRegression, Ridge, Lasso\n",
|
||
"from sklearn.preprocessing import PolynomialFeatures\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"from sklearn.pipeline import make_pipeline\n",
|
||
"\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",
|
||
"metadata": {},
|
||
"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",
|
||
"* 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.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"### 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,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"1. Write your own code (following the examples under the [regression notes](https://compphysics.github.io/MachineLearning/doc/LectureNotes/_build/html/chapter1.html)) for computing the parametrization of the data set fitting a second-order polynomial. \n",
|
||
"\n",
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"and the $R^2$ score function.\n",
|
||
"If $\\tilde{\\boldsymbol{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where we have defined the mean value of $\\boldsymbol{y}$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"You can use the functionality included in scikit-learn. If you feel for it, you can use your own program and define functions which compute the above two functions. \n",
|
||
"Discuss the meaning of these results. Try also to vary the coefficient in front of the added stochastic noise term and discuss the quality of the fits.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"### 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",
|
||
"\n",
|
||
"The **Normalizer** scales each data\n",
|
||
"point such that the feature vector has a euclidean length of one. In other words, it\n",
|
||
"projects a data point on the circle (or sphere in the case of higher dimensions) with a\n",
|
||
"radius of 1. This means every data point is scaled by a different number (by the\n",
|
||
"inverse of it’s length).\n",
|
||
"This normalization is often used when only the direction (or angle) of the data matters,\n",
|
||
"not the length of the feature vector.\n",
|
||
"\n",
|
||
"The **RobustScaler** works similarly to the StandardScaler in that it\n",
|
||
"ensures statistical properties for each feature that guarantee that\n",
|
||
"they are on the same scale. However, the RobustScaler uses the median\n",
|
||
"and quartiles, instead of mean and variance. This makes the\n",
|
||
"RobustScaler ignore data points that are very different from the rest\n",
|
||
"(like measurement errors). These odd data points are also called\n",
|
||
"outliers, and might often lead to trouble for other scaling\n",
|
||
"techniques.\n",
|
||
"\n",
|
||
"\n",
|
||
"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,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"Then we can use the standard scaler to scale our data as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 42,
|
||
"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",
|
||
"metadata": {},
|
||
"source": [
|
||
"In this exercise we want you to to compute the MSE for the training\n",
|
||
"data and the test data as function of the complexity of a polynomial,\n",
|
||
"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",
|
||
"\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,
|
||
"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",
|
||
"metadata": {},
|
||
"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",
|
||
"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": {
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.8.12"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
} |