diff --git a/doc/pub/week34/html/._week34-bs001.html b/doc/pub/week34/html/._week34-bs001.html
index e3eba6dc2..983e098b2 100644
--- a/doc/pub/week34/html/._week34-bs001.html
+++ b/doc/pub/week34/html/._week34-bs001.html
@@ -363,7 +363,10 @@ MathJax.Hub.Config({
- Friday August 26: Linear regression
+ Friday August 26: Linear regression
+
Computer lab: Wednesdays, 8am-6pm and Thursdays 8am-12pm and additional self study 4pm-6pm. First time: Wednesday August 24.
diff --git a/doc/pub/week34/html/week34-reveal.html b/doc/pub/week34/html/week34-reveal.html
index 99ef952cb..137166d82 100644
--- a/doc/pub/week34/html/week34-reveal.html
+++ b/doc/pub/week34/html/week34-reveal.html
@@ -214,6 +214,11 @@ MathJax.Hub.Config({
Friday August 26: Linear regression
+
+
Computer lab: Wednesdays, 8am-6pm and Thursdays 8am-12pm and additional self study 4pm-6pm. First time: Wednesday August 24.
diff --git a/doc/pub/week34/html/week34-solarized.html b/doc/pub/week34/html/week34-solarized.html
index 02b109637..7d9df3ed5 100644
--- a/doc/pub/week34/html/week34-solarized.html
+++ b/doc/pub/week34/html/week34-solarized.html
@@ -314,7 +314,10 @@ MathJax.Hub.Config({
- Friday August 26: Linear regression
+ Friday August 26: Linear regression
+
Computer lab: Wednesdays, 8am-6pm and Thursdays 8am-12pm and additional self study 4pm-6pm. First time: Wednesday August 24.
diff --git a/doc/pub/week34/html/week34.html b/doc/pub/week34/html/week34.html
index 4f4fdcdd9..7771b5a4b 100644
--- a/doc/pub/week34/html/week34.html
+++ b/doc/pub/week34/html/week34.html
@@ -391,7 +391,10 @@ MathJax.Hub.Config({
- Friday August 26: Linear regression
+ Friday August 26: Linear regression
+
Computer lab: Wednesdays, 8am-6pm and Thursdays 8am-12pm and additional self study 4pm-6pm. First time: Wednesday August 24.
diff --git a/doc/pub/week34/ipynb/ipynb-week34-src.tar.gz b/doc/pub/week34/ipynb/ipynb-week34-src.tar.gz
index 62df3bd05..17e063443 100644
Binary files a/doc/pub/week34/ipynb/ipynb-week34-src.tar.gz and b/doc/pub/week34/ipynb/ipynb-week34-src.tar.gz differ
diff --git a/doc/pub/week34/ipynb/week34.ipynb b/doc/pub/week34/ipynb/week34.ipynb
index a67ffa2ee..2a6a6eabe 100644
--- a/doc/pub/week34/ipynb/week34.ipynb
+++ b/doc/pub/week34/ipynb/week34.ipynb
@@ -2,8 +2,10 @@
"cells": [
{
"cell_type": "markdown",
- "id": "23821382",
- "metadata": {},
+ "id": "d9cbfa6a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
@@ -12,8 +14,10 @@
},
{
"cell_type": "markdown",
- "id": "c469d11a",
- "metadata": {},
+ "id": "865d3a9a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"# Week 34: Introduction to the course, Logistics and Practicalities\n",
"**Morten Hjorth-Jensen**, Department of Physics and Center for Computing in Science Education, University of Oslo, Norway and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University, USA\n",
@@ -23,8 +27,10 @@
},
{
"cell_type": "markdown",
- "id": "aec7aa11",
- "metadata": {},
+ "id": "dfeeec30",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Overview of first week\n",
"\n",
@@ -36,15 +42,19 @@
"\n",
" * [Video of lecture](https://youtu.be/KL0m3-yhd5w)\n",
"\n",
- " * Friday August 26: Linear regression \n",
+ " * Friday August 26: Linear regression\n",
+ "\n",
+ " * [Video of lecture](https://www.youtube.com/watch?v=ne_xCL2ctM0)\n",
"\n",
" * Computer lab: Wednesdays, 8am-6pm and Thursdays 8am-12pm and additional self study 4pm-6pm. First time: Wednesday August 24."
]
},
{
"cell_type": "markdown",
- "id": "a5cf1430",
- "metadata": {},
+ "id": "9d064fe3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Reading Recommendations\n",
"\n",
@@ -62,8 +72,10 @@
},
{
"cell_type": "markdown",
- "id": "48e8c897",
- "metadata": {},
+ "id": "50bf001c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Thursday August 25\n",
"\n",
@@ -76,8 +88,10 @@
},
{
"cell_type": "markdown",
- "id": "15954f7e",
- "metadata": {},
+ "id": "e5c34a73",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Lectures and ComputerLab\n",
"\n",
@@ -96,8 +110,10 @@
},
{
"cell_type": "markdown",
- "id": "c4dc19b7",
- "metadata": {},
+ "id": "48d4a4e7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Communication channels\n",
"\n",
@@ -108,8 +124,10 @@
},
{
"cell_type": "markdown",
- "id": "b0ebeb01",
- "metadata": {},
+ "id": "3f8debef",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Course Format\n",
"\n",
@@ -130,8 +148,10 @@
},
{
"cell_type": "markdown",
- "id": "6472d61c",
- "metadata": {},
+ "id": "ef988c00",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Teachers\n",
"\n",
@@ -161,8 +181,10 @@
},
{
"cell_type": "markdown",
- "id": "3f3971e2",
- "metadata": {},
+ "id": "a65485cd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Deadlines for projects (tentative)\n",
"\n",
@@ -177,8 +199,10 @@
},
{
"cell_type": "markdown",
- "id": "61795a44",
- "metadata": {},
+ "id": "a39c5071",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Recommended textbooks\n",
"\n",
@@ -199,8 +223,10 @@
},
{
"cell_type": "markdown",
- "id": "4069e392",
- "metadata": {},
+ "id": "0d246167",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Prerequisites\n",
"\n",
@@ -217,8 +243,10 @@
},
{
"cell_type": "markdown",
- "id": "790fc0cb",
- "metadata": {},
+ "id": "20d6c1ba",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Learning outcomes\n",
"\n",
@@ -259,8 +287,10 @@
},
{
"cell_type": "markdown",
- "id": "6d0591e9",
- "metadata": {},
+ "id": "21a789c1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Topics covered in this course: Statistical analysis and optimization of data\n",
"\n",
@@ -292,8 +322,10 @@
},
{
"cell_type": "markdown",
- "id": "927ac19c",
- "metadata": {},
+ "id": "4579992e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Topics covered in this course: Machine Learning\n",
"\n",
@@ -317,8 +349,10 @@
},
{
"cell_type": "markdown",
- "id": "b2e304c2",
- "metadata": {},
+ "id": "2410fc76",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Extremely useful tools, strongly recommended\n",
"\n",
@@ -331,8 +365,10 @@
},
{
"cell_type": "markdown",
- "id": "b3778a4a",
- "metadata": {},
+ "id": "90b58039",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Other courses on Data science and Machine Learning at UiO\n",
"\n",
@@ -363,8 +399,10 @@
},
{
"cell_type": "markdown",
- "id": "9afcb9bd",
- "metadata": {},
+ "id": "9e668f10",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Introduction\n",
"\n",
@@ -404,8 +442,10 @@
},
{
"cell_type": "markdown",
- "id": "171edcce",
- "metadata": {},
+ "id": "168dd1e0",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## What is Machine Learning?\n",
"\n",
@@ -475,8 +515,10 @@
},
{
"cell_type": "markdown",
- "id": "09e377d7",
- "metadata": {},
+ "id": "fca4b5c2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Types of Machine Learning\n",
"\n",
@@ -502,8 +544,10 @@
},
{
"cell_type": "markdown",
- "id": "fa11b82a",
- "metadata": {},
+ "id": "31cceb2e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Essential elements of ML\n",
"\n",
@@ -518,8 +562,10 @@
},
{
"cell_type": "markdown",
- "id": "2b5e75d3",
- "metadata": {},
+ "id": "211578d0",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## An optimization/minimization problem\n",
"\n",
@@ -528,8 +574,10 @@
},
{
"cell_type": "markdown",
- "id": "68c077de",
- "metadata": {},
+ "id": "4cc1958d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## A Frequentist approach to data analysis\n",
"\n",
@@ -561,8 +609,10 @@
},
{
"cell_type": "markdown",
- "id": "8eff8ace",
- "metadata": {},
+ "id": "18717b89",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## What is a good model?\n",
"\n",
@@ -589,8 +639,10 @@
},
{
"cell_type": "markdown",
- "id": "50d341fd",
- "metadata": {},
+ "id": "7ad0f4f3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## What is a good model? Can we define it?\n",
"\n",
@@ -618,8 +670,10 @@
},
{
"cell_type": "markdown",
- "id": "267b6500",
- "metadata": {},
+ "id": "f7b5ea61",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Software and needed installations\n",
"\n",
@@ -655,8 +709,10 @@
},
{
"cell_type": "markdown",
- "id": "0693b025",
- "metadata": {},
+ "id": "b2223314",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Python installers\n",
"\n",
@@ -686,8 +742,10 @@
},
{
"cell_type": "markdown",
- "id": "11750c35",
- "metadata": {},
+ "id": "327436b1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Useful Python libraries\n",
"Here we list several useful Python libraries we strongly recommend (if you use anaconda many of these are already there)\n",
@@ -717,8 +775,10 @@
},
{
"cell_type": "markdown",
- "id": "437ff79d",
- "metadata": {},
+ "id": "67e712a0",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Installing R, C++, cython or Julia\n",
"\n",
@@ -739,8 +799,10 @@
},
{
"cell_type": "markdown",
- "id": "22cf44f9",
- "metadata": {},
+ "id": "035dbd1c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Installing R, C++, cython, Numba etc\n",
"\n",
@@ -764,16 +826,20 @@
},
{
"cell_type": "markdown",
- "id": "092aa1f4",
- "metadata": {},
+ "id": "e6dbe44b",
+ "metadata": {
+ "editable": true
+ },
"source": [
" pycod jupyter nbconvert filename.ipynb --to latex \n"
]
},
{
"cell_type": "markdown",
- "id": "5fb4d966",
- "metadata": {},
+ "id": "fdd5bce4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"And to add more versatility, the Python package [SymPy](http://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) and is entirely written in Python. \n",
"\n",
@@ -784,8 +850,10 @@
},
{
"cell_type": "markdown",
- "id": "81967a6d",
- "metadata": {},
+ "id": "e2f95320",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Numpy examples and Important Matrix and vector handling packages\n",
"\n",
@@ -803,8 +871,10 @@
},
{
"cell_type": "markdown",
- "id": "f899fe44",
- "metadata": {},
+ "id": "2432e22e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Basic Matrix Features\n",
"\n",
@@ -813,8 +883,10 @@
},
{
"cell_type": "markdown",
- "id": "e7153ce7",
- "metadata": {},
+ "id": "d0c5ee79",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{A} =\n",
@@ -834,16 +906,20 @@
},
{
"cell_type": "markdown",
- "id": "039c9d2b",
- "metadata": {},
+ "id": "eb0becd4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The inverse of a matrix is defined by"
]
},
{
"cell_type": "markdown",
- "id": "f5513bd7",
- "metadata": {},
+ "id": "94f65e0c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{A}^{-1} \\cdot \\mathbf{A} = I\n",
@@ -852,8 +928,10 @@
},
{
"cell_type": "markdown",
- "id": "15e6ca3c",
- "metadata": {},
+ "id": "7bda9633",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -871,8 +949,10 @@
},
{
"cell_type": "markdown",
- "id": "e980e643",
- "metadata": {},
+ "id": "17aba36b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Some famous Matrices\n",
"\n",
@@ -897,8 +977,10 @@
},
{
"cell_type": "markdown",
- "id": "b76014b3",
- "metadata": {},
+ "id": "3473472d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### More Basic Matrix Features\n",
"\n",
@@ -921,8 +1003,10 @@
},
{
"cell_type": "markdown",
- "id": "48a15a71",
- "metadata": {},
+ "id": "7c53dc8f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Numpy and arrays\n",
"[Numpy](http://www.numpy.org/) provides an easy way to handle arrays in Python. The standard way to import this library is as"
@@ -931,8 +1015,11 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "d355379c",
- "metadata": {},
+ "id": "efc58746",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np"
@@ -940,8 +1027,10 @@
},
{
"cell_type": "markdown",
- "id": "875b0c57",
- "metadata": {},
+ "id": "c4b61837",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here follows a simple example where we set up an array of ten elements, all determined by random numbers drawn according to the normal distribution,"
]
@@ -949,8 +1038,11 @@
{
"cell_type": "code",
"execution_count": 2,
- "id": "b8435832",
- "metadata": {},
+ "id": "8c5d5085",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"n = 10\n",
@@ -960,8 +1052,10 @@
},
{
"cell_type": "markdown",
- "id": "aff17b91",
- "metadata": {},
+ "id": "bbee0f2c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We defined a vector $x$ with $n=10$ elements with its values given by the Normal distribution $N(0,1)$.\n",
"Another alternative is to declare a vector as follows"
@@ -970,8 +1064,11 @@
{
"cell_type": "code",
"execution_count": 3,
- "id": "1628226b",
- "metadata": {},
+ "id": "de7aff47",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -981,8 +1078,10 @@
},
{
"cell_type": "markdown",
- "id": "d2504d4f",
- "metadata": {},
+ "id": "938b786b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here we have defined a vector with three elements, with $x_0=1$, $x_1=2$ and $x_2=3$. Note that both Python and C++\n",
"start numbering array elements from $0$ and on. This means that a vector with $n$ elements has a sequence of entities $x_0, x_1, x_2, \\dots, x_{n-1}$. We could also let (recommended) Numpy to compute the logarithms of a specific array as"
@@ -991,8 +1090,11 @@
{
"cell_type": "code",
"execution_count": 4,
- "id": "3b227ba8",
- "metadata": {},
+ "id": "d29b7360",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1002,8 +1104,10 @@
},
{
"cell_type": "markdown",
- "id": "8e993172",
- "metadata": {},
+ "id": "c1927ab8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"In the last example we used Numpy's unary function $np.log$. This function is\n",
"highly tuned to compute array elements since the code is vectorized\n",
@@ -1017,8 +1121,11 @@
{
"cell_type": "code",
"execution_count": 5,
- "id": "49e5616c",
- "metadata": {},
+ "id": "a2a2a97f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1031,8 +1138,10 @@
},
{
"cell_type": "markdown",
- "id": "8b7a130d",
- "metadata": {},
+ "id": "f73d7ab1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We note that our code is much longer already and we need to import the **log** function from the **math** module. \n",
"The attentive reader will also notice that the output is $[1, 1, 2]$. Python interprets automagically our numbers as integers (like the **automatic** keyword in C++). To change this we could define our array elements to be double precision numbers as"
@@ -1041,8 +1150,11 @@
{
"cell_type": "code",
"execution_count": 6,
- "id": "d59a3734",
- "metadata": {},
+ "id": "9fde0ac1",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1052,8 +1164,10 @@
},
{
"cell_type": "markdown",
- "id": "7ccc9342",
- "metadata": {},
+ "id": "aec73a81",
+ "metadata": {
+ "editable": true
+ },
"source": [
"or simply write them as double precision numbers (Python uses 64 bits as default for floating point type variables), that is"
]
@@ -1061,8 +1175,11 @@
{
"cell_type": "code",
"execution_count": 7,
- "id": "1f0ef993",
- "metadata": {},
+ "id": "a8837e56",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1072,8 +1189,10 @@
},
{
"cell_type": "markdown",
- "id": "26ce093e",
- "metadata": {},
+ "id": "e36ad709",
+ "metadata": {
+ "editable": true
+ },
"source": [
"To check the number of bytes (remember that one byte contains eight bits for double precision variables), you can use simple use the **itemsize** functionality (the array $x$ is actually an object which inherits the functionalities defined in Numpy) as"
]
@@ -1081,8 +1200,11 @@
{
"cell_type": "code",
"execution_count": 8,
- "id": "208f43ac",
- "metadata": {},
+ "id": "164ad990",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1092,8 +1214,10 @@
},
{
"cell_type": "markdown",
- "id": "93ec757f",
- "metadata": {},
+ "id": "04208aa9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Matrices in Python\n",
"\n",
@@ -1105,8 +1229,11 @@
{
"cell_type": "code",
"execution_count": 9,
- "id": "b8996f96",
- "metadata": {},
+ "id": "fde60b9d",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1116,8 +1243,10 @@
},
{
"cell_type": "markdown",
- "id": "e0932c59",
- "metadata": {},
+ "id": "4c5d1c05",
+ "metadata": {
+ "editable": true
+ },
"source": [
"If we use the **shape** function we would get $(3, 3)$ as output, that is verifying that our matrix is a $3\\times 3$ matrix. We can slice the matrix and print for example the first column (Python organized matrix elements in a row-major order, see below) as"
]
@@ -1125,8 +1254,11 @@
{
"cell_type": "code",
"execution_count": 10,
- "id": "c6f27f9c",
- "metadata": {},
+ "id": "d17ce8b3",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1137,8 +1269,10 @@
},
{
"cell_type": "markdown",
- "id": "73723a49",
- "metadata": {},
+ "id": "954a4c11",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We can continue this was by printing out other columns or rows. The example here prints out the second column"
]
@@ -1146,8 +1280,11 @@
{
"cell_type": "code",
"execution_count": 11,
- "id": "37d2fd90",
- "metadata": {},
+ "id": "885eb576",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1158,8 +1295,10 @@
},
{
"cell_type": "markdown",
- "id": "05cc834e",
- "metadata": {},
+ "id": "f5fb4f10",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Numpy contains many other functionalities that allow us to slice, subdivide etc etc arrays. We strongly recommend that you look up the [Numpy website for more details](http://www.numpy.org/). Useful functions when defining a matrix are the **np.zeros** function which declares a matrix of a given dimension and sets all elements to zero"
]
@@ -1167,8 +1306,11 @@
{
"cell_type": "code",
"execution_count": 12,
- "id": "e15a4fff",
- "metadata": {},
+ "id": "8d18a490",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1180,8 +1322,10 @@
},
{
"cell_type": "markdown",
- "id": "0b1ebc4d",
- "metadata": {},
+ "id": "4fd2ba07",
+ "metadata": {
+ "editable": true
+ },
"source": [
"or initializing all elements to"
]
@@ -1189,8 +1333,11 @@
{
"cell_type": "code",
"execution_count": 13,
- "id": "f83b67d9",
- "metadata": {},
+ "id": "0b3c8b18",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1202,8 +1349,10 @@
},
{
"cell_type": "markdown",
- "id": "c28a9cd9",
- "metadata": {},
+ "id": "2eeca10d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"or as unitarily distributed random numbers (see the material on random number generators in the statistics part)"
]
@@ -1211,8 +1360,11 @@
{
"cell_type": "code",
"execution_count": 14,
- "id": "9aa190b7",
- "metadata": {},
+ "id": "767878e7",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1224,8 +1376,10 @@
},
{
"cell_type": "markdown",
- "id": "3e3ab3a4",
- "metadata": {},
+ "id": "3175e298",
+ "metadata": {
+ "editable": true
+ },
"source": [
"As we will see throughout these lectures, there are several extremely useful functionalities in Numpy.\n",
"As an example, consider the discussion of the covariance matrix. Suppose we have defined three vectors\n",
@@ -1234,8 +1388,10 @@
},
{
"cell_type": "markdown",
- "id": "23bddd16",
- "metadata": {},
+ "id": "6849c5c1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\Sigma} = \\begin{bmatrix} \\sigma_{xx} & \\sigma_{xy} & \\sigma_{xz} \\\\\n",
@@ -1247,16 +1403,20 @@
},
{
"cell_type": "markdown",
- "id": "d256ad80",
- "metadata": {},
+ "id": "8ee6d204",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where for example"
]
},
{
"cell_type": "markdown",
- "id": "fa974adf",
- "metadata": {},
+ "id": "860e8963",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\sigma_{xy} =\\frac{1}{n} \\sum_{i=0}^{n-1}(x_i- \\overline{x})(y_i- \\overline{y}).\n",
@@ -1265,8 +1425,10 @@
},
{
"cell_type": "markdown",
- "id": "943d22f1",
- "metadata": {},
+ "id": "b22355b7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The Numpy function **np.cov** calculates the covariance elements using the factor $1/(n-1)$ instead of $1/n$ since it assumes we do not have the exact mean values. \n",
"The following simple function uses the **np.vstack** function which takes each vector of dimension $1\\times n$ and produces a $3\\times n$ matrix $\\boldsymbol{W}$"
@@ -1274,8 +1436,10 @@
},
{
"cell_type": "markdown",
- "id": "88370719",
- "metadata": {},
+ "id": "c15bf196",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{W} = \\begin{bmatrix} x_0 & x_1 & x_2 & \\dots & x_{n-2} & x_{n-1} \\\\\n",
@@ -1287,8 +1451,10 @@
},
{
"cell_type": "markdown",
- "id": "4cd9bb68",
- "metadata": {},
+ "id": "5dbe0eb8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which in turn is converted into into the $3\\times 3$ covariance matrix\n",
"$\\boldsymbol{\\Sigma}$ via the Numpy function **np.cov()**. We note that we can also calculate\n",
@@ -1300,8 +1466,11 @@
{
"cell_type": "code",
"execution_count": 15,
- "id": "89cfecda",
- "metadata": {},
+ "id": "8d9dad34",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# Importing various packages\n",
@@ -1324,8 +1493,11 @@
{
"cell_type": "code",
"execution_count": 16,
- "id": "1dc7eb64",
- "metadata": {},
+ "id": "1a738699",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"%matplotlib inline\n",
@@ -1345,8 +1517,10 @@
},
{
"cell_type": "markdown",
- "id": "4c0484d8",
- "metadata": {},
+ "id": "72b1dc52",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Meet the Pandas\n",
"\n",
@@ -1369,8 +1543,11 @@
{
"cell_type": "code",
"execution_count": 17,
- "id": "bc5fb71a",
- "metadata": {},
+ "id": "a68224b0",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import pandas as pd\n",
@@ -1386,8 +1563,10 @@
},
{
"cell_type": "markdown",
- "id": "b7a91093",
- "metadata": {},
+ "id": "25c07190",
+ "metadata": {
+ "editable": true
+ },
"source": [
"In the above we have imported **pandas** with the shorthand **pd**, the latter has become the standard way we import **pandas**. We make then a list of various variables\n",
"and reorganize the aboves lists into a **DataFrame** and then print out a neat table with specific column labels as *Name*, *place of birth* and *date of birth*.\n",
@@ -1398,8 +1577,11 @@
{
"cell_type": "code",
"execution_count": 18,
- "id": "1f0d35dd",
- "metadata": {},
+ "id": "ae9da215",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"data_pandas = pd.DataFrame(data,index=['Frodo','Bilbo','Aragorn','Sam'])\n",
@@ -1408,8 +1590,10 @@
},
{
"cell_type": "markdown",
- "id": "e377afba",
- "metadata": {},
+ "id": "d669a93f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Thereafter we display the content of the row which begins with the index **Aragorn**"
]
@@ -1417,8 +1601,11 @@
{
"cell_type": "code",
"execution_count": 19,
- "id": "01d60f31",
- "metadata": {},
+ "id": "65067f63",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"display(data_pandas.loc['Aragorn'])"
@@ -1426,8 +1613,10 @@
},
{
"cell_type": "markdown",
- "id": "91710aa0",
- "metadata": {},
+ "id": "46fec574",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We can easily append data to this, for example"
]
@@ -1435,8 +1624,11 @@
{
"cell_type": "code",
"execution_count": 20,
- "id": "8fbef305",
- "metadata": {},
+ "id": "7e8ca81f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"new_hobbit = {'First Name': [\"Peregrin\"],\n",
@@ -1450,8 +1642,10 @@
},
{
"cell_type": "markdown",
- "id": "a43653e3",
- "metadata": {},
+ "id": "fc87b940",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here are other examples where we use the **DataFrame** functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix \n",
"of dimensionality $10\\times 5$ and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations."
@@ -1460,8 +1654,11 @@
{
"cell_type": "code",
"execution_count": 21,
- "id": "23b64767",
- "metadata": {},
+ "id": "68f9eb6c",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1481,8 +1678,10 @@
},
{
"cell_type": "markdown",
- "id": "04086382",
- "metadata": {},
+ "id": "8d1c3ea9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Thereafter we can select specific columns only and plot final results"
]
@@ -1490,8 +1689,11 @@
{
"cell_type": "code",
"execution_count": 22,
- "id": "200065c9",
- "metadata": {},
+ "id": "4398e5ef",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth']\n",
@@ -1516,8 +1718,10 @@
},
{
"cell_type": "markdown",
- "id": "87c4af21",
- "metadata": {},
+ "id": "27632773",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We can produce a $4\\times 4$ matrix"
]
@@ -1525,8 +1729,11 @@
{
"cell_type": "code",
"execution_count": 23,
- "id": "0f0e2ea4",
- "metadata": {},
+ "id": "b63aacb0",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"b = np.arange(16).reshape((4,4))\n",
@@ -1537,8 +1744,10 @@
},
{
"cell_type": "markdown",
- "id": "7c8e41f2",
- "metadata": {},
+ "id": "9b0a4630",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and many other operations. \n",
"\n",
@@ -1552,8 +1761,10 @@
},
{
"cell_type": "markdown",
- "id": "ff56b741",
- "metadata": {},
+ "id": "8af50030",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Friday August 27\n",
"\n",
@@ -1564,8 +1775,10 @@
},
{
"cell_type": "markdown",
- "id": "95f8b206",
- "metadata": {},
+ "id": "5f487905",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Simple linear regression model using **scikit-learn**\n",
"\n",
@@ -1593,8 +1806,10 @@
},
{
"cell_type": "markdown",
- "id": "15f8e533",
- "metadata": {},
+ "id": "fb9fa628",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"y = 2x+N(0,1),\n",
@@ -1603,8 +1818,10 @@
},
{
"cell_type": "markdown",
- "id": "6def5844",
- "metadata": {},
+ "id": "fceda949",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $N(0,1)$ represents random numbers generated by the normal\n",
"distribution. From **Scikit-Learn** we import then the\n",
@@ -1629,8 +1846,11 @@
{
"cell_type": "code",
"execution_count": 24,
- "id": "3e056e1e",
- "metadata": {},
+ "id": "3d5c8dbb",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# Importing various packages\n",
@@ -1656,8 +1876,10 @@
},
{
"cell_type": "markdown",
- "id": "79d3bd41",
- "metadata": {},
+ "id": "e86fd526",
+ "metadata": {
+ "editable": true
+ },
"source": [
"This example serves several aims. It allows us to demonstrate several\n",
"aspects of data analysis and later machine learning algorithms. The\n",
@@ -1671,8 +1893,10 @@
},
{
"cell_type": "markdown",
- "id": "efe6d89d",
- "metadata": {},
+ "id": "4e79d7ec",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"y = 10x+0.01 \\times N(0,1),\n",
@@ -1681,8 +1905,10 @@
},
{
"cell_type": "markdown",
- "id": "d66300c2",
- "metadata": {},
+ "id": "fadb5acd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $x$ is defined as before. Does the fit look better? Indeed, by\n",
"reducing the role of the noise given by the normal distribution we see immediately that\n",
@@ -1700,8 +1926,10 @@
},
{
"cell_type": "markdown",
- "id": "a73d3b9e",
- "metadata": {},
+ "id": "79fc29f2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\chi^2 = \\frac{1}{n}\n",
@@ -1711,8 +1939,10 @@
},
{
"cell_type": "markdown",
- "id": "2cf633a8",
- "metadata": {},
+ "id": "4a7d1bed",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\sigma_i^2$ is the variance (to be defined later) of the entry\n",
"$y_i$. We may not know the explicit value of $\\sigma_i^2$, it serves\n",
@@ -1740,8 +1970,10 @@
},
{
"cell_type": "markdown",
- "id": "97c9029a",
- "metadata": {},
+ "id": "7c0baa1a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\epsilon_{\\mathrm{relative}}= \\frac{\\vert \\boldsymbol{y} -\\boldsymbol{\\tilde{y}}\\vert}{\\vert \\boldsymbol{y}\\vert}.\n",
@@ -1750,8 +1982,10 @@
},
{
"cell_type": "markdown",
- "id": "84956e1c",
- "metadata": {},
+ "id": "db76656b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The squared cost function results in an arithmetic mean-unbiased\n",
"estimator, and the absolute-value cost function results in a\n",
@@ -1766,8 +2000,11 @@
{
"cell_type": "code",
"execution_count": 25,
- "id": "204b76db",
- "metadata": {},
+ "id": "d52683dc",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np\n",
@@ -1790,8 +2027,10 @@
},
{
"cell_type": "markdown",
- "id": "bb1efc74",
- "metadata": {},
+ "id": "a9e73991",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Depending on the parameter in front of the normal distribution, we may\n",
"have a small or larger relative error. Try to play around with\n",
@@ -1810,8 +2049,11 @@
{
"cell_type": "code",
"execution_count": 26,
- "id": "90a40d1f",
- "metadata": {},
+ "id": "be779369",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np \n",
@@ -1845,8 +2087,10 @@
},
{
"cell_type": "markdown",
- "id": "1918b0a3",
- "metadata": {},
+ "id": "10113aff",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The function **coef** gives us the parameter $\\beta$ of our fit while **intercept** yields \n",
"$\\alpha$. Depending on the constant in front of the normal distribution, we get values near or far from $\\alpha =2$ and $\\beta =5$. Try to play around with different parameters in front of the normal distribution. The function **meansquarederror** gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as"
@@ -1854,8 +2098,10 @@
},
{
"cell_type": "markdown",
- "id": "078f7289",
- "metadata": {},
+ "id": "2f76f721",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n",
@@ -1865,8 +2111,10 @@
},
{
"cell_type": "markdown",
- "id": "23899ec9",
- "metadata": {},
+ "id": "e103b773",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The smaller the value, the better the fit. Ideally we would like to\n",
"have an MSE equal zero. The attentive reader has probably recognized\n",
@@ -1884,8 +2132,10 @@
},
{
"cell_type": "markdown",
- "id": "881285ea",
- "metadata": {},
+ "id": "3b74cdd1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n",
@@ -1894,16 +2144,20 @@
},
{
"cell_type": "markdown",
- "id": "ea902970",
- "metadata": {},
+ "id": "b5f06c54",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have defined the mean value of $\\boldsymbol{y}$ as"
]
},
{
"cell_type": "markdown",
- "id": "e60da213",
- "metadata": {},
+ "id": "b72af80d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n",
@@ -1912,8 +2166,10 @@
},
{
"cell_type": "markdown",
- "id": "3f6be08b",
- "metadata": {},
+ "id": "b60ef3d8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Another quantity taht we will meet again in our discussions of regression analysis is \n",
" the mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the $l1$-norm loss. In our discussion above we presented the relative error.\n",
@@ -1922,8 +2178,10 @@
},
{
"cell_type": "markdown",
- "id": "440c7b62",
- "metadata": {},
+ "id": "fa0a6d87",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\text{MAE}(\\boldsymbol{y}, \\boldsymbol{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n-1} \\left| y_i - \\tilde{y}_i \\right|.\n",
@@ -1932,8 +2190,10 @@
},
{
"cell_type": "markdown",
- "id": "b05a3f98",
- "metadata": {},
+ "id": "2bfcd372",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We present the \n",
"squared logarithmic (quadratic) error"
@@ -1941,8 +2201,10 @@
},
{
"cell_type": "markdown",
- "id": "4cd33173",
- "metadata": {},
+ "id": "9776ac5a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\text{MSLE}(\\boldsymbol{y}, \\boldsymbol{\\tilde{y}}) = \\frac{1}{n} \\sum_{i=0}^{n - 1} (\\log_e (1 + y_i) - \\log_e (1 + \\tilde{y}_i) )^2,\n",
@@ -1951,8 +2213,10 @@
},
{
"cell_type": "markdown",
- "id": "77f5461f",
- "metadata": {},
+ "id": "0230e208",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\log_e (x)$ stands for the natural logarithm of $x$. This error\n",
"estimate is best to use when targets having exponential growth, such\n",
@@ -1971,8 +2235,10 @@
},
{
"cell_type": "markdown",
- "id": "96e7b86e",
- "metadata": {},
+ "id": "47b1dd17",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"H_{\\delta}(\\boldsymbol{a})=\\left\\{\\begin{array}{cc}\\frac{1}{2} \\boldsymbol{a}^{2}& \\text{for }|\\boldsymbol{a}|\\leq \\delta\\\\ \\delta (|\\boldsymbol{a}|-\\frac{1}{2}\\delta ),&\\text{otherwise}.\\end{array}\\right.\n",
@@ -1981,8 +2247,10 @@
},
{
"cell_type": "markdown",
- "id": "a91d5d7b",
- "metadata": {},
+ "id": "39224cd7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here $\\boldsymbol{a}=\\boldsymbol{y} - \\boldsymbol{\\tilde{y}}$.\n",
"\n",
@@ -1995,8 +2263,11 @@
{
"cell_type": "code",
"execution_count": 27,
- "id": "cc7c950e",
- "metadata": {},
+ "id": "39adece0",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
@@ -2033,8 +2304,10 @@
},
{
"cell_type": "markdown",
- "id": "dc81b198",
- "metadata": {},
+ "id": "5872aea6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### To our real data: nuclear binding energies. Brief reminder on masses and binding energies\n",
"\n",
@@ -2048,8 +2321,10 @@
},
{
"cell_type": "markdown",
- "id": "c647a2bb",
- "metadata": {},
+ "id": "b7c6dae2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\Delta M(N, Z) = M(N, Z) - uA,\n",
@@ -2058,16 +2333,20 @@
},
{
"cell_type": "markdown",
- "id": "6bf735eb",
- "metadata": {},
+ "id": "c62f966f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $u$ is the Atomic Mass Unit"
]
},
{
"cell_type": "markdown",
- "id": "21bc983d",
- "metadata": {},
+ "id": "47368466",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"u = M(^{12}\\mathrm{C})/12 = 931.4940954(57) \\hspace{0.1cm} \\mathrm{MeV}/c^2.\n",
@@ -2076,16 +2355,20 @@
},
{
"cell_type": "markdown",
- "id": "29f11904",
- "metadata": {},
+ "id": "13a094a5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The nucleon masses are"
]
},
{
"cell_type": "markdown",
- "id": "7066ba82",
- "metadata": {},
+ "id": "3312c3c6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"m_p = 1.00727646693(9)u,\n",
@@ -2094,16 +2377,20 @@
},
{
"cell_type": "markdown",
- "id": "b6551094",
- "metadata": {},
+ "id": "c6952f2f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and"
]
},
{
"cell_type": "markdown",
- "id": "d7e2c32e",
- "metadata": {},
+ "id": "5267bb9e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"m_n = 939.56536(8)\\hspace{0.1cm} \\mathrm{MeV}/c^2 = 1.0086649156(6)u.\n",
@@ -2112,8 +2399,10 @@
},
{
"cell_type": "markdown",
- "id": "a2b7b470",
- "metadata": {},
+ "id": "73a6e16b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"In the [2016 mass evaluation of by W.J.Huang, G.Audi, M.Wang, F.G.Kondev, S.Naimi and X.Xu](http://nuclearmasses.org/resources_folder/Wang_2017_Chinese_Phys_C_41_030003.pdf)\n",
"there are data on masses and decays of 3437 nuclei.\n",
@@ -2126,8 +2415,10 @@
},
{
"cell_type": "markdown",
- "id": "682b0bd1",
- "metadata": {},
+ "id": "42edd599",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 ,\n",
@@ -2136,8 +2427,10 @@
},
{
"cell_type": "markdown",
- "id": "f8b5e709",
- "metadata": {},
+ "id": "27ee40e3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $M_H$ is the mass of the hydrogen atom and $m_n$ is the mass of the neutron.\n",
"In terms of the mass excess the binding energy is given by"
@@ -2145,8 +2438,10 @@
},
{
"cell_type": "markdown",
- "id": "3da0afe2",
- "metadata": {},
+ "id": "d5f3afc6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"BE(N, Z) = Z\\Delta_H c^2 + N\\Delta_n c^2 -\\Delta(N, Z)c^2 ,\n",
@@ -2155,8 +2450,10 @@
},
{
"cell_type": "markdown",
- "id": "b241cf42",
- "metadata": {},
+ "id": "fd13dd49",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\Delta_H c^2 = 7.2890$ MeV and $\\Delta_n c^2 = 8.0713$ MeV.\n",
"\n",
@@ -2167,8 +2464,10 @@
},
{
"cell_type": "markdown",
- "id": "0f78c0ba",
- "metadata": {},
+ "id": "4d36ccc4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"BE(N,Z) = a_1A-a_2A^{2/3}-a_3\\frac{Z^2}{A^{1/3}}-a_4\\frac{(N-Z)^2}{A},\n",
@@ -2177,8 +2476,10 @@
},
{
"cell_type": "markdown",
- "id": "f63cba5f",
- "metadata": {},
+ "id": "1b05d2e4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $A$ stands for the number of nucleons and the $a_i$s are parameters which are determined by a fit \n",
"to the experimental data. \n",
@@ -2200,8 +2501,10 @@
},
{
"cell_type": "markdown",
- "id": "2284d6ec",
- "metadata": {},
+ "id": "b5190fab",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Organizing our data\n",
"\n",
@@ -2214,9 +2517,12 @@
},
{
"cell_type": "code",
- "execution_count": 10,
- "id": "bd7aa620",
- "metadata": {},
+ "execution_count": 28,
+ "id": "59df45d2",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# Common imports\n",
@@ -2256,17 +2562,22 @@
},
{
"cell_type": "markdown",
- "id": "df2c8ccf",
- "metadata": {},
+ "id": "7dc133ae",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Before we proceed, we define also a function for making our plots. You can obviously avoid this and simply set up various **matplotlib** commands every time you need them. You may however find it convenient to collect all such commands in one function and simply call this function."
]
},
{
"cell_type": "code",
- "execution_count": 11,
- "id": "cb52c00e",
- "metadata": {},
+ "execution_count": 29,
+ "id": "c8652d1b",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"from pylab import plt, mpl\n",
@@ -2284,8 +2595,10 @@
},
{
"cell_type": "markdown",
- "id": "38545028",
- "metadata": {},
+ "id": "1d731f52",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Our next step is to read the data on experimental binding energies and\n",
"reorganize them as functions of the mass number $A$, the number of\n",
@@ -2298,21 +2611,13 @@
},
{
"cell_type": "code",
- "execution_count": 12,
- "id": "079dae1b",
- "metadata": {},
- "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": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "execution_count": 30,
+ "id": "0a49a838",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"\"\"\" \n",
"This is taken from the data file of the mass 2016 evaluation. \n",
@@ -2328,8 +2633,10 @@
},
{
"cell_type": "markdown",
- "id": "eb12107a",
- "metadata": {},
+ "id": "b1b378d9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The data we are interested in are in columns 2, 3, 4 and 11, giving us\n",
"the number of neutrons, protons, mass numbers and binding energies,\n",
@@ -2339,9 +2646,12 @@
},
{
"cell_type": "code",
- "execution_count": 13,
- "id": "206b12f1",
- "metadata": {},
+ "execution_count": 31,
+ "id": "80502a7c",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# Read the experimental data with Pandas\n",
@@ -2366,8 +2676,10 @@
},
{
"cell_type": "markdown",
- "id": "c79ac328",
- "metadata": {},
+ "id": "21e01a99",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We have now read in the data, grouped them according to the variables we are interested in. \n",
"We see how easy it is to reorganize the data using **pandas**. If we\n",
@@ -2383,32 +2695,13 @@
},
{
"cell_type": "code",
- "execution_count": 14,
- "id": "5e6b60e8",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " N Z A Element Ebinding\n",
- "A \n",
- "4 0 1 3 4 Li 1.153760\n",
- "5 2 3 2 5 He 5.512132\n",
- "6 7 3 3 6 Li 5.332331\n",
- "7 12 4 3 7 Li 5.606439\n",
- "8 17 4 4 8 Be 7.062435\n",
- "... ... ... ... ... ...\n",
- "264 3297 156 108 264 Hs 7.298375\n",
- "265 3303 157 108 265 Hs 7.296247\n",
- "266 3310 158 108 266 Hs 7.298273\n",
- "269 3331 159 110 269 Ds 7.250154\n",
- "270 3337 160 110 270 Ds 7.253775\n",
- "\n",
- "[264 rows x 5 columns]\n"
- ]
- }
- ],
+ "execution_count": 32,
+ "id": "a256c99c",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"A = Masses['A']\n",
"Z = Masses['Z']\n",
@@ -2420,8 +2713,10 @@
},
{
"cell_type": "markdown",
- "id": "d35730c6",
- "metadata": {},
+ "id": "278edca6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The next step, and we will define this mathematically later, is to set up the so-called **design matrix**. We will throughout call this matrix $\\boldsymbol{X}$.\n",
"It has dimensionality $p\\times n$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit."
@@ -2429,9 +2724,12 @@
},
{
"cell_type": "code",
- "execution_count": 15,
- "id": "2975893e",
- "metadata": {},
+ "execution_count": 33,
+ "id": "3179ee55",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# Now we set up the design matrix X\n",
@@ -2445,17 +2743,22 @@
},
{
"cell_type": "markdown",
- "id": "3160f4c5",
- "metadata": {},
+ "id": "0bb2787f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"With **scikitlearn** we are now ready to use linear regression and fit our data."
]
},
{
"cell_type": "code",
- "execution_count": 16,
- "id": "dc828ff8",
- "metadata": {},
+ "execution_count": 34,
+ "id": "e3ecdb5a",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"clf = skl.LinearRegression().fit(X, Energies)\n",
@@ -2464,8 +2767,10 @@
},
{
"cell_type": "markdown",
- "id": "3744b3e4",
- "metadata": {},
+ "id": "8c5edc75",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Pretty simple! \n",
"Now we can print measures of how our fit is doing, the coefficients from the fits and plot the final fit together with our data."
@@ -2473,32 +2778,13 @@
},
{
"cell_type": "code",
- "execution_count": 17,
- "id": "ac4670de",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Mean squared error: 0.02\n",
- "Variance score: 0.95\n",
- "Mean absolute error: 0.05\n",
- "[ 0.00000000e+00 -2.96611194e-02 2.01719003e-01 1.08078025e+01\n",
- " -4.03097597e+01] 5.294399745619598\n"
- ]
- },
- {
- "data": {
- "image/png": "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qqr47Gc/W6rTf8DeMWwfPo1hi4jIOFeywN69ezdvvfUW3//+90kkEtx8880EAgEuv/zyA35NdXUUv//IwrS+PnHQ11MFQyjnw2/7qD+2gnB9+IjOM1Ecqr5kX6qv4VOdDY/qa3jKob5KFtixWIxZs2aRSBQr9ZRTTuG11147aGB3daWO6Fz19Qna2voO+p629iRWv4uLj+5CBrstf0TnmggOp75kL9XX8KnOhkf1NTwTqb4O9odHyWaJf+hDH6K7uxvHcYBii3vmzJmlOv0HFHIudhYsH/hiZTtZXkREPKJkLeyqqipuvvlmbr31Vqqrq+ns7OS6664r1ek/oNBbAMBELSzLGrNyiIiIHI6STtNetmwZy5YtK+UpD8jpKbb0TVytaxERGf/KNq3cZLGFjQJbREQ8oGzTyul1AbAU2CIi4gFlm1buQJe4WtgiIuIFZZtWJlkMbCuuRVNERGT8K9vAdvuKXeK+RNlWgYiIeEj5plX/QGCrhS0iIh5wyMD+05/+VIpylJybHghsLZoiIiIecMjrsP/u7/4O27a5/PLLueyyy2hoaChFuUZfxgDgi6qFLSIi498hm5fPPPMM//t//2+2bNnCxRdfzFe/+lWefPJJCoVCKco3elLFFratFraIiHjAYaXVhz/8YW6//XZeeOEFli1bxn333ce5557LP/3TP412+UZNob84SzxeHRzjkoiIiBzasJqXsViMv/zLv+RrX/saU6ZM4cEHHxytco0qY8xQYFeX+baaIiLiDYe9lviWLVv49a9/zeOPP86kSZO4/PLL+cQnPjGaZRtxm3f38OdNHZx3whTcvAE/JCpDY10sERGRQzpkYD/44IM8/PDDbN++nUsuuYR//dd/Zf78+aUo24h74o/bAHh8d5qZgB23tVOXiIh4wiED+5lnnuFLX/oSF1xwAdlslqamplKUa1RlevMABOMl3axMRETkiB1yDPtf//Vfueiii3j55Zf5+Mc/zg033ADA22+/zTXXXDPqBRxJFbHiBDM7V3wcrFBgi4iINxz2pLO77rqLhx56iIqKCgAWLlzI9u3bR61go6EqXhyvtrPFx+GKwBiWRkRE5PANa5Z4fX39Po+DQW9dEmUGbgcDO1qlwBYREW847MCOxWK0t7cPTdJauXIliURi1Ao2GowpRradK95GdQ22iIh4xGEP4t58881cffXV7Ny5kyuvvJJt27bx4x//eDTLNuIG8ho7CwG/D39My5KKiIg3HHZgL1q0iH//93/nzTffBOCkk04aGs/2CjPQKT6jKkZ9lauNP0RExDOGNU06kUhw3nnnjVZZRt1gC3tKLIodzGjjDxER8YxDBvYDDzxw0NevuOKKESvMaBscw2Zwa82IWtgiIuINhwzs73znO5x44onMnTu3FOUZVYN5TXpga011iYuIiEccMrBvvfVWHnnkETZu3MinPvUpLrnkEiorK0tRthG3N7CLLWwrqsAWERFvOGRgX3755Vx++eXs2LGDRx99lM997nPMnTuXa6+91nNrig92iZvBFra6xEVExCMOO7GmT5/OVVddxRe/+EVee+013n777dEs16h4fwvbp8u6RETEIw7ZwjbG8OKLL/Lwww+zceNGPvaxj/HLX/6S6dOnl6J8I8plsIXtAj61sEVExDMOGdjnnnvu0P7X1113HZZlkc1m2bRpEwDHHXfcYZ/ss5/9LKFQcT1vn8/Hz3/+8yMs9hEygGsga7CCYEW0taaIiHjDIQM7EAjQ1dXFvffey89+9rO9l0YBlmXx7LPPHvbJzjnnnKHdvsaCMWZopy4r6tNe2CIi4hmHDOzf//73I3ayDRs2sGLFCrLZLAsXLmTp0qUjduzD4ZqBjT8sS93hIiLiKYcM7H/+539m2bJlnHTSSUd9squvvppFixbhOA5XXHEFsViMU0899YDvr66O4vcf2cSw+voPbkwSCvkxlk0waBOrCe/3PeVKdTE8qq/hU50Nj+preMqhvg4Z2PPnz+ff/u3fuOWWWzjttNO44IILOOuss4bGoodj0aJFANi2zZIlS1i5cuVBA7urKzXsc0DxP66tre8Dz6fTeZyUQz7nkHEK+31POTpQfcn+qb6GT3U2PKqv4ZlI9XWwPzwO2S986aWXctddd/Gb3/yGj3zkIzz33HN8/OMf57rrruPhhx+ms7PzsAqxefNmfvWrXw09bmpqKvlMc4PBlwcssMIavxYREe847M0/gsEg5513Hueddx7GGFavXs0zzzzDz372M5544olDfn08Huf555+ntbWVZDLJ5MmT+cQnPnFUhR8uY8AugAX4QhrDFhER7xjWbl2DLMti8eLFLF68mJtvvvmwvqahoYEf/vCHR3K6EWOMwVco3reCamGLiIh3lFUz0xjw5Q1gYamF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ySefzHPPPTe2hRqHNmzYwIoVK1i+fPlQ/Tz//POcdNJJQLHenn/++TEs4di76KKLiMVi+zz33HPPDdXRvHnzWLduHclkkhdffJETTzwRy7IAOOmkk3jhhRdKXuaxtL/6AnjggQe49957+eEPf0h3dzeA6gtYtGgRF1544dBj13WJRCIH/Dn8wx/+wOLFiwHw+/3MmjVrn5blRHeg+gL48Y9/zL333suKFStIp9PAxK6vCdMl3tHRsc8vjXg8TkdHxxiWaHy6+uqrWbRoEY7jcMUVVxCLxfapu3g8Tk9PD4VCAb9/wnx7HLUDfX91dnbu8/xgfZa7U089laVLl1JTU8Pzzz/PN77xDX7+85+rvt7n6aef5uyzz2b27NkH/Dns7Oxk1qxZQ18Tj8fp7OwcqyKPqffW10UXXcS0adOIRqM88MADfOc73+HWW2+d0PU1YVrYtbW19Pf3Dz1OJpPU1taOYYnGp0WLFgFg2zZLlixh5cqV+9RdMpmksrJSYf0+B/r+qqmp2ef5/v5+fd8B06dPp6amBoAPf/jDvP766ziOo/p6j1dffZWVK1fyzW9+E+CAP4fvr7NkMjlUt+Xk/fU1Z84cotEoUPwee/XVVwEmdH1NmMBevHgxu3fvJpfLAfDmm2+ydOnSsS3UOLN582Z+9atfDT1uampi+vTpnHfeeaxatQoo1tt55503VkUct5YuXTpUR+vXr2f+/PnE43HOOecc3n33XczAkvyrVq3i3HPPHcuijgt33HEHhUIBgG3btjFt2jRs21Z9DXjuued46aWX+Na3vkVbWxurVq064M/h0qVLeeuttwDI5/Ns2bKFU089dayKPib2V1+333770OtNTU3MmDEDmNj1NaE2//jjH//Ik08+SXV1NYFAQLPE36elpYXvfOc7HH/88SSTSQqFAn//939Pb28v3/ve95g6dSo7duzgb//2b8t6lvhrr73Go48+yosvvsjnP/95vvzlLwNw++23U19fz/bt2/na1762zyzxd955B9u2mTlzZtnNet5ffT344INs3LiRxsZGNmzYwBe/+MWhccVyr6933nmHK6+8kgULFgCQSqW44oorOP/88w/4c3jPPffQ29tLT08P55577sSZ9XwYDlRfW7duJZ1OU1tby4YNG/j6178+9DM5UetrQgW2iIjIRDVhusRFREQmMgW2iIiIByiwRUREPECBLSIi4gEKbBEREQ9QYIuIiHiAAltERMQDFNgiHvX6668zb948HnnkkaM+1p/+9CfmzZvHj370o6HnVq1axcc+9rGjOu73v/99PvnJT+7zb/78+fzd3/3d0RZZpOwosEU8yHVdvvvd7/LhD3+YtWvXHvXx3n33XRYtWsTTTz+9z3MnnHDCAb/m/PPPP+Rxb7rpJh577LGhf2eccQazZ8/mlltuOeoyi5QbBbaIB/3yl79kxowZfOELX2DdunVHfbw1a9Zw6aWXkk6n2bFjB1AM7BNPPPGojz3ojjvu4LnnnuO+++6bMJsxiJSStmQS8Zje3l5+8pOf8MADD5DP51m/fv1+3/f1r3+dpqam/b724IMPEg6Hhx6vWbOGz3zmMyxbtoynn36aL3/5y6xZs4ZPfvKTI1LmH/zgBzz55JPcf//91NfXj8gxRcqNAlvEY5YvX85ll13GtGnTcF2XXC7Hnj17mDJlyj7vu+uuuw7reNlslq1bt3L88ccTDAa59dZb+au/+is2b978gS7xa665hj179gDQ2to6FOi2bfPwww/v9/g/+tGPePzxx/nFL35BQ0PDcD+uiAxQYIt4yObNm/nlL39JVVUVjz/+OFDcQnDt2rUfCOzDbWGvW7eOxsZGYrEYCxcupKWlhZdeeonJkydTUVGxz9f95Cc/Gbp//vnn89hjjx20vCtWrOChhx7i/vvv/0D5RGR4FNgiHnLrrbfy7W9/m09/+tNDz33rW99i3bp1H5gEdrgt7PeOVVuWxfnnn89dd9110Alnh+NnP/sZv/jFL/jFL35BY2PjUR1LRBTYIp7x7LPP0trayqc+9al9np8zZw5vvvnmER93zZo1+4TzsmXL+MUvfnFUl3Rt3bqV22+/nUmTJnHDDTfs89p1113HRz7ykSM+tki50n7YIiIiHqDLukRERDxAgS0iIuIBCmwREREPUGCLiIh4gAJbRETEAxTYIiIiHqDAFhER8QAFtoiIiAf8/4DBbA/qVQNEAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": 35,
+ "id": "4ecedb1d",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# The mean squared error \n",
"print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, fity))\n",
@@ -2524,8 +2810,10 @@
},
{
"cell_type": "markdown",
- "id": "7da29fb8",
- "metadata": {},
+ "id": "f91070e6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Seeing the wood for the trees\n",
"\n",
@@ -2534,50 +2822,20 @@
},
{
"cell_type": "code",
- "execution_count": 20,
- "id": "2c8f264b",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAesAAAFpCAYAAAC8iwByAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABHBklEQVR4nO3dd3wUZeIG8GdmdjcdkpBIr6GXEKT3oIA0ESyIIpaz4okegqigcpwNUDkOsHEW/CGegEgRPNRDmkBCj4ROCCnUkEJ6tsz7+2OyG0ISkoVk6/P9fPgk2czOvHnZ5Nm3jiSEECAiIiKXJTu7AERERHRjDGsiIiIXx7AmIiJycQxrIiIiF8ewJiIicnEMayIiIhenc3YBiGrSzp07MW/ePBw/fhzdu3eHEAKFhYUYNmwYHn/8cej1+ls6/759+/DJJ5/gq6++uuFxP/30E2JiYvDuu+/e0vWuN2zYMISHhwMAzpw5AyEEIiIiAABpaWnYtGlTtV7vemvXrsVnn32G1NRUdOnSBWazGVeuXMHAgQMxY8YMyLJ7tAfuvvtuLF68GE2bNnV2UYjKJXGdNXm62NhYPProozhy5Ah0Oh0yMzMxbdo0KIqCzz777JYCRQiB3NxcBAUF3fA4i8WCwsJCBAQE3PS1yjNx4kQsW7YMAPDaa6/BbDbjww8/LPO9mvTjjz9iwYIF2L59OwAgJSUFI0aMwOzZs3HvvffW+PWrQ3Z2NmrVquXsYhBVyD3e9hJVo5CQEMyZMwexsbFYv379LZ1LkqRKgxoAFEWp9qAGgJdffvmmvleTGjdujFatWiE+Pt4p178ZDGpydewGJ68UHh6Ofv36YdOmTRgzZgwArUv3u+++g8FgQN26dTF79mwEBgYC0LrTFy1aBL1eD1VV8cgjj6Bnz5547rnnEBcXhxMnTgAAVqxYgdWrV8PPzw++vr6YPn06zGYzpk+fjpycHPz+++8AgCtXrmD27NnIyMiAyWTCQw89hLFjx+L8+fP429/+hri4OMyZMwfr1q3DhQsX8P777+P2228v83N06dKlwp+xS5cuWLFiBT7//HN07twZAQEBOHz4MGrVqoVly5Zhx44dWLx4MfR6PQIDAzF79mzUrVsXABAfH4/3338fkiRBURS89dZbtu71qrBYLKhXr57t6xud7/Dhw5g1axYMBgPatGmDkydPIjMzE6+88gp27NiBDRs24JFHHsHp06cRHx+P++67D5MnT8YXX3yBX3/9FTqdDu3atcOrr74Kg8GAhIQEzJ49GwBgNptx//33495778WVK1fw2muvoaioCGazGYMGDcIzzzyDOXPm4IcffsCMGTNsPQHW14Jer0dISAj+/ve/IywsDIsXL8Z//vMf3HXXXcjJycGxY8fQoUMHzJ07t8p1Q3RTBJGHi4mJEa1btxYmk6nU4++++64YPny4EEKIffv2iR49eoj09HQhhBBz5swRM2bMEEIIkZycLLp06SISExOFEELExcWJRx55RAghREpKimjdurUQQojc3FzRo0cPUVRUJIQQYunSpWL16tW2MgwaNMh27ccee0wsXLhQCCFEenq66Nu3r9i7d2+pc27cuFEIIcSSJUvEX/7yl0p/zldffVVMnTq1zOMLFy4Uffr0Eenp6cJisYh58+aJ5ORkERUVJRISEoQQQnz77bfiscceE0IIkZ2dLXr27Cl27dolhBBiy5YtYujQocJisZR73dWrV4v+/fvbvj569KiYPHmyyMnJqfR8RUVFYsCAAeKnn36yPbddu3a2ehNCiEceeUQ88cQTwmw2i4SEBLFy5Uqxbt06MWzYMJGfny9UVRUvvvii+Pjjj4UQQrz44ou2urt8+bJ48sknhRBCzJ07V3z++edCCCHy8vLE+PHjS13Des29e/eKXr162V4LH3/8sXj00UdL1fM999wjioqKRGFhoejRo4c4cOBAJf87RLeG3eDktVRVtX2+Zs0a3HHHHQgNDQWgTTj66aefIITAhg0b0LFjRzRr1gwAEBkZib/97W9lzqcoCgCtVVZQUIAJEyZg1KhRZY67dOkSdu/ejfvuuw8AEBoaiujoaKxevbrUcQMGDAAAtGnTBqmpqbf0s0ZFRSE0NBSyLOOVV16x/UwtWrQAAIwaNQq7d+/G5cuXsWXLFvj7+6N3794AgOjoaFy5cgVxcXEVnj8jIwMTJ07E6NGjbT+3tVfiRuc7dOgQ0tPTMXz4cABAu3btym3BDxw4EIqioEWLFnjggQewZs0ajBw5En5+fpAkCaNGjcK6desAALVr18amTZuQmpqK8PBwLFq0CAAQHByMHTt24NSpU/D3969wUuDatWsRHR1tey3cd999iImJwfnz523H9OzZEwaDAT4+PmjatOkt//8QVYbd4OS1zp07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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " N Z A Element Ebinding Eapprox\n",
- "A \n",
- "4 0 1 3 4 Li 1.153760 1.153760\n",
- "5 2 3 2 5 He 5.512132 5.422231\n",
- "6 7 3 3 6 Li 5.332331 5.422231\n",
- "7 12 4 3 7 Li 5.606439 5.606439\n",
- "8 17 4 4 8 Be 7.062435 7.382774\n",
- "... ... ... ... ... ... ...\n",
- "264 3297 156 108 264 Hs 7.298375 7.512041\n",
- "265 3303 157 108 265 Hs 7.296247 7.512041\n",
- "266 3310 158 108 266 Hs 7.298273 7.512041\n",
- "269 3331 159 110 269 Ds 7.250154 7.512041\n",
- "270 3337 160 110 270 Ds 7.253775 7.512041\n",
- "\n",
- "[264 rows x 6 columns]\n",
- "0.007012403613997257\n"
- ]
- }
- ],
+ "execution_count": 36,
+ "id": "00c9d6a0",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"\n",
"#Decision Tree Regression\n",
"from sklearn.tree import DecisionTreeRegressor\n",
"regr_1=DecisionTreeRegressor(max_depth=5)\n",
"regr_2=DecisionTreeRegressor(max_depth=7)\n",
- "regr_3=DecisionTreeRegressor(max_depth=3)\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",
@@ -2590,8 +2848,8 @@
"# 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_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",
@@ -2606,8 +2864,10 @@
},
{
"cell_type": "markdown",
- "id": "5899eaad",
- "metadata": {},
+ "id": "235abfdb",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### And what about using neural networks?\n",
"\n",
@@ -2618,8 +2878,11 @@
{
"cell_type": "code",
"execution_count": 37,
- "id": "0639aaf3",
- "metadata": {},
+ "id": "a8bd2055",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"from sklearn.neural_network import MLPRegressor\n",
@@ -2655,8 +2918,10 @@
},
{
"cell_type": "markdown",
- "id": "bed3130b",
- "metadata": {},
+ "id": "5f72020b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## A first summary\n",
"\n",
@@ -2673,8 +2938,10 @@
},
{
"cell_type": "markdown",
- "id": "d89a7826",
- "metadata": {},
+ "id": "6348b8ec",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Why Linear Regression (aka Ordinary Least Squares and family)\n",
"\n",
@@ -2703,8 +2970,10 @@
},
{
"cell_type": "markdown",
- "id": "481c6cb2",
- "metadata": {},
+ "id": "e17d80d6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Regression analysis, overarching aims\n",
"\n",
@@ -2723,8 +2992,10 @@
},
{
"cell_type": "markdown",
- "id": "f1c09a01",
- "metadata": {},
+ "id": "3d1f271a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Regression analysis, overarching aims II\n",
"\n",
@@ -2749,8 +3020,10 @@
},
{
"cell_type": "markdown",
- "id": "866b4aa9",
- "metadata": {},
+ "id": "fbfc6a20",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Examples\n",
"In order to understand the relation among the predictors $p$, the set of data $n$ and the target (outcome, output etc) $\\boldsymbol{y}$,\n",
@@ -2762,8 +3035,10 @@
},
{
"cell_type": "markdown",
- "id": "a3ae9da5",
- "metadata": {},
+ "id": "90d46cb3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"BE(A) = a_0+a_1A+a_2A^{2/3}+a_3A^{-1/3}+a_4A^{-1},\n",
@@ -2772,8 +3047,10 @@
},
{
"cell_type": "markdown",
- "id": "672c981f",
- "metadata": {},
+ "id": "cb69e19b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"we have five predictors, that is the intercept, the $A$ dependent term, the $A^{2/3}$ term and the $A^{-1/3}$ and $A^{-1}$ terms.\n",
"This gives $p=0,1,2,3,4$. Furthermore we have $n$ entries for each predictor. It means that our design matrix is a \n",
@@ -2785,8 +3062,10 @@
},
{
"cell_type": "markdown",
- "id": "6081f608",
- "metadata": {},
+ "id": "16c3470c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## General linear models\n",
"Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\boldsymbol{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\boldsymbol{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n",
@@ -2796,8 +3075,10 @@
},
{
"cell_type": "markdown",
- "id": "142a005f",
- "metadata": {},
+ "id": "7649ec95",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"y=y(x) \\rightarrow y(x_i)=\\tilde{y}_i+\\epsilon_i=\\sum_{j=0}^{n-1} \\beta_j x_i^j+\\epsilon_i,\n",
@@ -2806,16 +3087,20 @@
},
{
"cell_type": "markdown",
- "id": "49446a2f",
- "metadata": {},
+ "id": "f5ed6417",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\epsilon_i$ is the error in our approximation."
]
},
{
"cell_type": "markdown",
- "id": "72044f3f",
- "metadata": {},
+ "id": "aaf67ddd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Rewriting the fitting procedure as a linear algebra problem\n",
"For every set of values $y_i,x_i$ we have thus the corresponding set of equations"
@@ -2823,8 +3108,10 @@
},
{
"cell_type": "markdown",
- "id": "5978a866",
- "metadata": {},
+ "id": "f643cb97",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\begin{align*}\n",
@@ -2839,8 +3126,10 @@
},
{
"cell_type": "markdown",
- "id": "b13072e8",
- "metadata": {},
+ "id": "6d761dd7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Rewriting the fitting procedure as a linear algebra problem, more details\n",
"Defining the vectors"
@@ -2848,8 +3137,10 @@
},
{
"cell_type": "markdown",
- "id": "6056f36e",
- "metadata": {},
+ "id": "6a133530",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{y} = [y_0,y_1, y_2,\\dots, y_{n-1}]^T,\n",
@@ -2858,16 +3149,20 @@
},
{
"cell_type": "markdown",
- "id": "34f71f52",
- "metadata": {},
+ "id": "e56ea64c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and"
]
},
{
"cell_type": "markdown",
- "id": "2edeb755",
- "metadata": {},
+ "id": "7fef0140",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\beta} = [\\beta_0,\\beta_1, \\beta_2,\\dots, \\beta_{n-1}]^T,\n",
@@ -2876,16 +3171,20 @@
},
{
"cell_type": "markdown",
- "id": "e004a257",
- "metadata": {},
+ "id": "7aa38a92",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and"
]
},
{
"cell_type": "markdown",
- "id": "636097f2",
- "metadata": {},
+ "id": "b33f7a32",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\epsilon} = [\\epsilon_0,\\epsilon_1, \\epsilon_2,\\dots, \\epsilon_{n-1}]^T,\n",
@@ -2894,16 +3193,20 @@
},
{
"cell_type": "markdown",
- "id": "8577dbb6",
- "metadata": {},
+ "id": "b503f481",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and the design matrix"
]
},
{
"cell_type": "markdown",
- "id": "e76f9a38",
- "metadata": {},
+ "id": "e80416c1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{X}=\n",
@@ -2919,16 +3222,20 @@
},
{
"cell_type": "markdown",
- "id": "aa89a70c",
- "metadata": {},
+ "id": "60236647",
+ "metadata": {
+ "editable": true
+ },
"source": [
"we can rewrite our equations as"
]
},
{
"cell_type": "markdown",
- "id": "c6ca5c9b",
- "metadata": {},
+ "id": "01f66bb5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n",
@@ -2937,16 +3244,20 @@
},
{
"cell_type": "markdown",
- "id": "b657c2e4",
- "metadata": {},
+ "id": "c9ba9a94",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The above design matrix is called a [Vandermonde matrix](https://en.wikipedia.org/wiki/Vandermonde_matrix)."
]
},
{
"cell_type": "markdown",
- "id": "965e8d48",
- "metadata": {},
+ "id": "1d741baa",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Generalizing the fitting procedure as a linear algebra problem\n",
"\n",
@@ -2959,8 +3270,10 @@
},
{
"cell_type": "markdown",
- "id": "ef647144",
- "metadata": {},
+ "id": "20389a06",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\begin{align*}\n",
@@ -2977,16 +3290,20 @@
},
{
"cell_type": "markdown",
- "id": "e562da77",
- "metadata": {},
+ "id": "5e4cfce7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"**Note that we have $p=n$ here. The matrix is symmetric. This is generally not the case!**"
]
},
{
"cell_type": "markdown",
- "id": "e8ba4531",
- "metadata": {},
+ "id": "fbcc79bf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Generalizing the fitting procedure as a linear algebra problem\n",
"We redefine in turn the matrix $\\boldsymbol{X}$ as"
@@ -2994,8 +3311,10 @@
},
{
"cell_type": "markdown",
- "id": "528b1a26",
- "metadata": {},
+ "id": "e5ffed83",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{X}=\n",
@@ -3011,16 +3330,20 @@
},
{
"cell_type": "markdown",
- "id": "fd83859b",
- "metadata": {},
+ "id": "a47bae79",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and without loss of generality we rewrite again our equations as"
]
},
{
"cell_type": "markdown",
- "id": "a31fc391",
- "metadata": {},
+ "id": "37c3002d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{y} = \\boldsymbol{X}\\boldsymbol{\\beta}+\\boldsymbol{\\epsilon}.\n",
@@ -3029,16 +3352,20 @@
},
{
"cell_type": "markdown",
- "id": "637b3c41",
- "metadata": {},
+ "id": "03cae64f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The left-hand side of this equation is kwown. Our error vector $\\boldsymbol{\\epsilon}$ and the parameter vector $\\boldsymbol{\\beta}$ are our unknow quantities. How can we obtain the optimal set of $\\beta_i$ values?"
]
},
{
"cell_type": "markdown",
- "id": "a449ee2e",
- "metadata": {},
+ "id": "ede0df9c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Optimizing our parameters\n",
"We have defined the matrix $\\boldsymbol{X}$ via the equations"
@@ -3046,8 +3373,10 @@
},
{
"cell_type": "markdown",
- "id": "2f5357e7",
- "metadata": {},
+ "id": "b8d9cb9a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\begin{align*}\n",
@@ -3064,8 +3393,10 @@
},
{
"cell_type": "markdown",
- "id": "8618a946",
- "metadata": {},
+ "id": "dd2f9baa",
+ "metadata": {
+ "editable": true
+ },
"source": [
"As we noted above, we stayed with a system with the design matrix \n",
" $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times n}$, that is we have $p=n$. For reasons to come later (algorithmic arguments) we will hereafter define \n",
@@ -3074,8 +3405,10 @@
},
{
"cell_type": "markdown",
- "id": "e17e4fbf",
- "metadata": {},
+ "id": "3f6c6a00",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Our model for the nuclear binding energies\n",
"\n",
@@ -3086,162 +3419,13 @@
},
{
"cell_type": "code",
- "execution_count": 1,
- "id": "585d5f0d",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 1 | \n",
- " A | \n",
- " A^(2/3) | \n",
- " A^(-1/3) | \n",
- " 1/A | \n",
- "
\n",
- " \n",
- " | A | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 4 | \n",
- " 1.0 | \n",
- " 4.0 | \n",
- " 2.519842 | \n",
- " 0.629961 | \n",
- " 0.250000 | \n",
- "
\n",
- " \n",
- " | 5 | \n",
- " 1.0 | \n",
- " 5.0 | \n",
- " 2.924018 | \n",
- " 0.584804 | \n",
- " 0.200000 | \n",
- "
\n",
- " \n",
- " | 6 | \n",
- " 1.0 | \n",
- " 6.0 | \n",
- " 3.301927 | \n",
- " 0.550321 | \n",
- " 0.166667 | \n",
- "
\n",
- " \n",
- " | 7 | \n",
- " 1.0 | \n",
- " 7.0 | \n",
- " 3.659306 | \n",
- " 0.522758 | \n",
- " 0.142857 | \n",
- "
\n",
- " \n",
- " | 8 | \n",
- " 1.0 | \n",
- " 8.0 | \n",
- " 4.000000 | \n",
- " 0.500000 | \n",
- " 0.125000 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 264 | \n",
- " 1.0 | \n",
- " 264.0 | \n",
- " 41.153106 | \n",
- " 0.155883 | \n",
- " 0.003788 | \n",
- "
\n",
- " \n",
- " | 265 | \n",
- " 1.0 | \n",
- " 265.0 | \n",
- " 41.256962 | \n",
- " 0.155687 | \n",
- " 0.003774 | \n",
- "
\n",
- " \n",
- " | 266 | \n",
- " 1.0 | \n",
- " 266.0 | \n",
- " 41.360688 | \n",
- " 0.155491 | \n",
- " 0.003759 | \n",
- "
\n",
- " \n",
- " | 269 | \n",
- " 1.0 | \n",
- " 269.0 | \n",
- " 41.671089 | \n",
- " 0.154911 | \n",
- " 0.003717 | \n",
- "
\n",
- " \n",
- " | 270 | \n",
- " 1.0 | \n",
- " 270.0 | \n",
- " 41.774300 | \n",
- " 0.154720 | \n",
- " 0.003704 | \n",
- "
\n",
- " \n",
- "
\n",
- "
264 rows × 5 columns
\n",
- "
"
- ],
- "text/plain": [
- " 1 A A^(2/3) A^(-1/3) 1/A\n",
- "A \n",
- "4 1.0 4.0 2.519842 0.629961 0.250000\n",
- "5 1.0 5.0 2.924018 0.584804 0.200000\n",
- "6 1.0 6.0 3.301927 0.550321 0.166667\n",
- "7 1.0 7.0 3.659306 0.522758 0.142857\n",
- "8 1.0 8.0 4.000000 0.500000 0.125000\n",
- ".. ... ... ... ... ...\n",
- "264 1.0 264.0 41.153106 0.155883 0.003788\n",
- "265 1.0 265.0 41.256962 0.155687 0.003774\n",
- "266 1.0 266.0 41.360688 0.155491 0.003759\n",
- "269 1.0 269.0 41.671089 0.154911 0.003717\n",
- "270 1.0 270.0 41.774300 0.154720 0.003704\n",
- "\n",
- "[264 rows x 5 columns]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": 38,
+ "id": "f1ac4171",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Common imports\n",
"import numpy as np\n",
@@ -3316,16 +3500,20 @@
},
{
"cell_type": "markdown",
- "id": "c4e97b66",
- "metadata": {},
+ "id": "60577d3e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"With $\\boldsymbol{\\beta}\\in {\\mathbb{R}}^{p\\times 1}$, it means that we will hereafter write our equations for the approximation as"
]
},
{
"cell_type": "markdown",
- "id": "851561be",
- "metadata": {},
+ "id": "0aa9156c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n",
@@ -3334,16 +3522,20 @@
},
{
"cell_type": "markdown",
- "id": "7bbe502f",
- "metadata": {},
+ "id": "49197bc4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"throughout these lectures."
]
},
{
"cell_type": "markdown",
- "id": "320412db",
- "metadata": {},
+ "id": "42cd6efc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Optimizing our parameters, more details\n",
"With the above we use the design matrix to define the approximation $\\boldsymbol{\\tilde{y}}$ via the unknown quantity $\\boldsymbol{\\beta}$ as"
@@ -3351,8 +3543,10 @@
},
{
"cell_type": "markdown",
- "id": "267dc222",
- "metadata": {},
+ "id": "877634ad",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\tilde{y}}= \\boldsymbol{X}\\boldsymbol{\\beta},\n",
@@ -3361,16 +3555,20 @@
},
{
"cell_type": "markdown",
- "id": "96837d16",
- "metadata": {},
+ "id": "3b999e7d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and in order to find the optimal parameters $\\beta_i$ instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values $y_i$ (which represent hopefully the exact values) and the parameterized values $\\tilde{y}_i$, namely"
]
},
{
"cell_type": "markdown",
- "id": "d14d60ef",
- "metadata": {},
+ "id": "34402e69",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"C(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n",
@@ -3379,16 +3577,20 @@
},
{
"cell_type": "markdown",
- "id": "0cddd579",
- "metadata": {},
+ "id": "06dfc7a8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"or using the matrix $\\boldsymbol{X}$ and in a more compact matrix-vector notation as"
]
},
{
"cell_type": "markdown",
- "id": "93cd22d5",
- "metadata": {},
+ "id": "7e247266",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\}.\n",
@@ -3397,8 +3599,10 @@
},
{
"cell_type": "markdown",
- "id": "86057c7e",
- "metadata": {},
+ "id": "7082dae5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"This function is one possible way to define the so-called cost function.\n",
"\n",
@@ -3408,8 +3612,10 @@
},
{
"cell_type": "markdown",
- "id": "71f40902",
- "metadata": {},
+ "id": "ff89368c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"C(\\boldsymbol{\\beta})=\\frac{1}{2n}\\sum_{i=0}^{n-1}\\left(y_i-\\tilde{y}_i\\right)^2,\n",
@@ -3418,16 +3624,20 @@
},
{
"cell_type": "markdown",
- "id": "6c65d7ce",
- "metadata": {},
+ "id": "3c0ec927",
+ "metadata": {
+ "editable": true
+ },
"source": [
"since when taking the first derivative with respect to the unknown parameters $\\beta$, the factor of $2$ cancels out."
]
},
{
"cell_type": "markdown",
- "id": "9ac4402d",
- "metadata": {},
+ "id": "9f62933f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Interpretations and optimizing our parameters\n",
"\n",
@@ -3436,8 +3646,10 @@
},
{
"cell_type": "markdown",
- "id": "64dc60d0",
- "metadata": {},
+ "id": "f74ccd6f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"C(\\boldsymbol{\\beta})=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)^T\\left(\\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)\\right\\},\n",
@@ -3446,8 +3658,10 @@
},
{
"cell_type": "markdown",
- "id": "03d22178",
- "metadata": {},
+ "id": "0f5ffc88",
+ "metadata": {
+ "editable": true
+ },
"source": [
"can be linked to the variance of the quantity $y_i$ if we interpret the latter as the mean value. \n",
"When linking (see the discussion below) with the maximum likelihood approach below, we will indeed interpret $y_i$ as a mean value"
@@ -3455,8 +3669,10 @@
},
{
"cell_type": "markdown",
- "id": "e4aa5262",
- "metadata": {},
+ "id": "8f1dd0a4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"y_{i}=\\langle y_i \\rangle = \\beta_0x_{i,0}+\\beta_1x_{i,1}+\\beta_2x_{i,2}+\\dots+\\beta_{n-1}x_{i,n-1}+\\epsilon_i,\n",
@@ -3465,8 +3681,10 @@
},
{
"cell_type": "markdown",
- "id": "a19372cf",
- "metadata": {},
+ "id": "89a387db",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\langle y_i \\rangle$ is the mean value. Keep in mind also that\n",
"till now we have treated $y_i$ as the exact value. Normally, the\n",
@@ -3482,8 +3700,10 @@
},
{
"cell_type": "markdown",
- "id": "e5b3f29c",
- "metadata": {},
+ "id": "8868b567",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"{\\displaystyle \\min_{\\boldsymbol{\\beta}\\in\n",
@@ -3493,16 +3713,20 @@
},
{
"cell_type": "markdown",
- "id": "34073125",
- "metadata": {},
+ "id": "f89b62ab",
+ "metadata": {
+ "editable": true
+ },
"source": [
"In practical terms it means we will require"
]
},
{
"cell_type": "markdown",
- "id": "26df781a",
- "metadata": {},
+ "id": "17737586",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)^2\\right]=0,\n",
@@ -3511,16 +3735,20 @@
},
{
"cell_type": "markdown",
- "id": "3b0b5526",
- "metadata": {},
+ "id": "bed399fa",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which results in"
]
},
{
"cell_type": "markdown",
- "id": "cf86a5d1",
- "metadata": {},
+ "id": "35e3e6d3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_{ij}\\left(y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}\\right)\\right]=0,\n",
@@ -3529,16 +3757,20 @@
},
{
"cell_type": "markdown",
- "id": "4a6856ec",
- "metadata": {},
+ "id": "ffea2c17",
+ "metadata": {
+ "editable": true
+ },
"source": [
"or in a matrix-vector form as"
]
},
{
"cell_type": "markdown",
- "id": "dd2f08f5",
- "metadata": {},
+ "id": "ee274d3e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right).\n",
@@ -3547,8 +3779,10 @@
},
{
"cell_type": "markdown",
- "id": "2a4d9c03",
- "metadata": {},
+ "id": "dced3d1a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Interpretations and optimizing our parameters\n",
"We can rewrite"
@@ -3556,8 +3790,10 @@
},
{
"cell_type": "markdown",
- "id": "5bff7479",
- "metadata": {},
+ "id": "381045f9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right),\n",
@@ -3566,16 +3802,20 @@
},
{
"cell_type": "markdown",
- "id": "fbbc7423",
- "metadata": {},
+ "id": "13e9fb9e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"as"
]
},
{
"cell_type": "markdown",
- "id": "23f8ea39",
- "metadata": {},
+ "id": "1f49a31d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{X}^T\\boldsymbol{y} = \\boldsymbol{X}^T\\boldsymbol{X}\\boldsymbol{\\beta},\n",
@@ -3584,16 +3824,20 @@
},
{
"cell_type": "markdown",
- "id": "f4651640",
- "metadata": {},
+ "id": "ec25fe70",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and if the matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ is invertible we have the solution"
]
},
{
"cell_type": "markdown",
- "id": "d378840b",
- "metadata": {},
+ "id": "340b7ffe",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\beta} =\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n",
@@ -3602,8 +3846,10 @@
},
{
"cell_type": "markdown",
- "id": "2fd84dbc",
- "metadata": {},
+ "id": "bcd77545",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We note also that since our design matrix is defined as $\\boldsymbol{X}\\in\n",
"{\\mathbb{R}}^{n\\times p}$, the product $\\boldsymbol{X}^T\\boldsymbol{X} \\in\n",
@@ -3621,8 +3867,10 @@
},
{
"cell_type": "markdown",
- "id": "8b80441c",
- "metadata": {},
+ "id": "1a56377d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Some useful matrix and vector expressions\n",
"\n",
@@ -3632,8 +3880,10 @@
},
{
"cell_type": "markdown",
- "id": "c982c326",
- "metadata": {},
+ "id": "1d2d71cc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial (\\boldsymbol{b}^T\\boldsymbol{a})}{\\partial \\boldsymbol{a}} = \\boldsymbol{b},\n",
@@ -3642,8 +3892,10 @@
},
{
"cell_type": "markdown",
- "id": "e9cea18f",
- "metadata": {},
+ "id": "089d9474",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial (\\boldsymbol{a}^T\\boldsymbol{A}\\boldsymbol{a})}{\\partial \\boldsymbol{a}} = (\\boldsymbol{A}+\\boldsymbol{A}^T)\\boldsymbol{a},\n",
@@ -3652,8 +3904,10 @@
},
{
"cell_type": "markdown",
- "id": "65c68c56",
- "metadata": {},
+ "id": "83673452",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial tr(\\boldsymbol{B}\\boldsymbol{A})}{\\partial \\boldsymbol{A}} = \\boldsymbol{B}^T,\n",
@@ -3662,8 +3916,10 @@
},
{
"cell_type": "markdown",
- "id": "9551f6f2",
- "metadata": {},
+ "id": "efbf5f12",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\log{\\vert\\boldsymbol{A}\\vert}}{\\partial \\boldsymbol{A}} = (\\boldsymbol{A}^{-1})^T.\n",
@@ -3672,8 +3928,10 @@
},
{
"cell_type": "markdown",
- "id": "99d05458",
- "metadata": {},
+ "id": "22584489",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Interpretations and optimizing our parameters\n",
"The residuals $\\boldsymbol{\\epsilon}$ are in turn given by"
@@ -3681,8 +3939,10 @@
},
{
"cell_type": "markdown",
- "id": "1be9ba42",
- "metadata": {},
+ "id": "2b9a204c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\epsilon} = \\boldsymbol{y}-\\boldsymbol{\\tilde{y}} = \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta},\n",
@@ -3691,16 +3951,20 @@
},
{
"cell_type": "markdown",
- "id": "8e7bd501",
- "metadata": {},
+ "id": "33b7ff71",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and with"
]
},
{
"cell_type": "markdown",
- "id": "84f6349f",
- "metadata": {},
+ "id": "e60dc747",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n",
@@ -3709,16 +3973,20 @@
},
{
"cell_type": "markdown",
- "id": "2d1ae204",
- "metadata": {},
+ "id": "b4a3a6cf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"we have"
]
},
{
"cell_type": "markdown",
- "id": "c345bc62",
- "metadata": {},
+ "id": "e9088846",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{X}^T\\boldsymbol{\\epsilon}=\\boldsymbol{X}^T\\left( \\boldsymbol{y}-\\boldsymbol{X}\\boldsymbol{\\beta}\\right)= 0,\n",
@@ -3727,8 +3995,10 @@
},
{
"cell_type": "markdown",
- "id": "029df1ed",
- "metadata": {},
+ "id": "3c2adcde",
+ "metadata": {
+ "editable": true
+ },
"source": [
"meaning that the solution for $\\boldsymbol{\\beta}$ is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.\n",
"\n",
@@ -3737,8 +4007,10 @@
},
{
"cell_type": "markdown",
- "id": "5245bb29",
- "metadata": {},
+ "id": "18810250",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Own code for Ordinary Least Squares\n",
"\n",
@@ -3748,9 +4020,12 @@
},
{
"cell_type": "code",
- "execution_count": 2,
- "id": "76e7e216",
- "metadata": {},
+ "execution_count": 39,
+ "id": "8cd21881",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# matrix inversion to find beta\n",
@@ -3761,17 +4036,22 @@
},
{
"cell_type": "markdown",
- "id": "2da324cf",
- "metadata": {},
+ "id": "5898bfbf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Alternatively, you can use the least squares functionality in **Numpy** as"
]
},
{
"cell_type": "code",
- "execution_count": 3,
- "id": "6a508b28",
- "metadata": {},
+ "execution_count": 40,
+ "id": "82b4215d",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"fit = np.linalg.lstsq(X, Energies, rcond =None)[0]\n",
@@ -3780,31 +4060,23 @@
},
{
"cell_type": "markdown",
- "id": "c998781e",
- "metadata": {},
+ "id": "7d7add29",
+ "metadata": {
+ "editable": true
+ },
"source": [
"And finally we plot our fit with and compare with data"
]
},
{
"cell_type": "code",
- "execution_count": 4,
- "id": "17ad0305",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": 41,
+ "id": "36a44d91",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"Masses['Eapprox'] = ytilde\n",
"# Generate a plot comparing the experimental with the fitted values values.\n",
@@ -3822,8 +4094,10 @@
},
{
"cell_type": "markdown",
- "id": "8a268c03",
- "metadata": {},
+ "id": "e0479f62",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Adding error analysis and training set up\n",
"\n",
@@ -3833,9 +4107,12 @@
},
{
"cell_type": "code",
- "execution_count": 5,
- "id": "ea27e8ce",
- "metadata": {},
+ "execution_count": 42,
+ "id": "42d0fcff",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"def R2(y_data, y_model):\n",
@@ -3844,52 +4121,46 @@
},
{
"cell_type": "markdown",
- "id": "08794dc7",
- "metadata": {},
+ "id": "228359ba",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and we would be using it as"
]
},
{
"cell_type": "code",
- "execution_count": 6,
- "id": "f4ea9b85",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.9549351910143222\n"
- ]
- }
- ],
+ "execution_count": 43,
+ "id": "88e43404",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"print(R2(Energies,ytilde))"
]
},
{
"cell_type": "markdown",
- "id": "1a98cd90",
- "metadata": {},
+ "id": "30605a71",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We can easily add our **MSE** score as"
]
},
{
"cell_type": "code",
- "execution_count": 7,
- "id": "67443c25",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.022022882954618378\n"
- ]
- }
- ],
+ "execution_count": 44,
+ "id": "58f54995",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"def MSE(y_data,y_model):\n",
" n = np.size(y_model)\n",
@@ -3900,38 +4171,23 @@
},
{
"cell_type": "markdown",
- "id": "5acb03ba",
- "metadata": {},
+ "id": "8f0ba674",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and finally the relative error as"
]
},
{
"cell_type": "code",
- "execution_count": 8,
- "id": "6db08232",
- "metadata": {},
- "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"
- ]
- }
- ],
+ "execution_count": 45,
+ "id": "c38607b0",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"def RelativeError(y_data,y_model):\n",
" return abs((y_data-y_model)/y_data)\n",
@@ -3940,8 +4196,10 @@
},
{
"cell_type": "markdown",
- "id": "e59fbc6c",
- "metadata": {},
+ "id": "759d0e1c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The $\\chi^2$ function\n",
"\n",
@@ -3960,8 +4218,10 @@
},
{
"cell_type": "markdown",
- "id": "509f82a9",
- "metadata": {},
+ "id": "6a94c6bb",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\chi^2(\\boldsymbol{\\beta})=\\frac{1}{n}\\sum_{i=0}^{n-1}\\frac{\\left(y_i-\\tilde{y}_i\\right)^2}{\\sigma_i^2}=\\frac{1}{n}\\left\\{\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)^T\\frac{1}{\\boldsymbol{\\Sigma^2}}\\left(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}}\\right)\\right\\},\n",
@@ -3970,16 +4230,20 @@
},
{
"cell_type": "markdown",
- "id": "23973e86",
- "metadata": {},
+ "id": "03ff149c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where the matrix $\\boldsymbol{\\Sigma}$ is a diagonal matrix with $\\sigma_i$ as matrix elements."
]
},
{
"cell_type": "markdown",
- "id": "9ff81a4f",
- "metadata": {},
+ "id": "e519adca",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The $\\chi^2$ function\n",
"\n",
@@ -3988,8 +4252,10 @@
},
{
"cell_type": "markdown",
- "id": "639f9b51",
- "metadata": {},
+ "id": "f981fa41",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = \\frac{\\partial }{\\partial \\beta_j}\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)^2\\right]=0,\n",
@@ -3998,16 +4264,20 @@
},
{
"cell_type": "markdown",
- "id": "1e570605",
- "metadata": {},
+ "id": "cc67b78d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which results in"
]
},
{
"cell_type": "markdown",
- "id": "375073cd",
- "metadata": {},
+ "id": "a2b86ec9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_j} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}\\frac{x_{ij}}{\\sigma_i}\\left(\\frac{y_i-\\beta_0x_{i,0}-\\beta_1x_{i,1}-\\beta_2x_{i,2}-\\dots-\\beta_{n-1}x_{i,n-1}}{\\sigma_i}\\right)\\right]=0,\n",
@@ -4016,16 +4286,20 @@
},
{
"cell_type": "markdown",
- "id": "0cfa8a7c",
- "metadata": {},
+ "id": "478f60b2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"or in a matrix-vector form as"
]
},
{
"cell_type": "markdown",
- "id": "318e32a7",
- "metadata": {},
+ "id": "36b90d92",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right).\n",
@@ -4034,16 +4308,20 @@
},
{
"cell_type": "markdown",
- "id": "d2b3cba7",
- "metadata": {},
+ "id": "417090b3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have defined the matrix $\\boldsymbol{A} =\\boldsymbol{X}/\\boldsymbol{\\Sigma}$ with matrix elements $a_{ij} = x_{ij}/\\sigma_i$ and the vector $\\boldsymbol{b}$ with elements $b_i = y_i/\\sigma_i$."
]
},
{
"cell_type": "markdown",
- "id": "de645a59",
- "metadata": {},
+ "id": "1733b547",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The $\\chi^2$ function\n",
"\n",
@@ -4052,8 +4330,10 @@
},
{
"cell_type": "markdown",
- "id": "bd4e345b",
- "metadata": {},
+ "id": "dcae0bf9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = 0 = \\boldsymbol{A}^T\\left( \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{\\beta}\\right),\n",
@@ -4062,16 +4342,20 @@
},
{
"cell_type": "markdown",
- "id": "f2bd166f",
- "metadata": {},
+ "id": "c1597a0d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"as"
]
},
{
"cell_type": "markdown",
- "id": "3921d291",
- "metadata": {},
+ "id": "645f430f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{A}^T\\boldsymbol{b} = \\boldsymbol{A}^T\\boldsymbol{A}\\boldsymbol{\\beta},\n",
@@ -4080,16 +4364,20 @@
},
{
"cell_type": "markdown",
- "id": "98cb07da",
- "metadata": {},
+ "id": "f220836a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and if the matrix $\\boldsymbol{A}^T\\boldsymbol{A}$ is invertible we have the solution"
]
},
{
"cell_type": "markdown",
- "id": "05b99af8",
- "metadata": {},
+ "id": "b60849bd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\beta} =\\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1}\\boldsymbol{A}^T\\boldsymbol{b}.\n",
@@ -4098,8 +4386,10 @@
},
{
"cell_type": "markdown",
- "id": "636409fa",
- "metadata": {},
+ "id": "38701f71",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The $\\chi^2$ function\n",
"\n",
@@ -4108,8 +4398,10 @@
},
{
"cell_type": "markdown",
- "id": "68ef36dc",
- "metadata": {},
+ "id": "197ca2f1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{H} = \\left(\\boldsymbol{A}^T\\boldsymbol{A}\\right)^{-1},\n",
@@ -4118,16 +4410,20 @@
},
{
"cell_type": "markdown",
- "id": "d3d9722d",
- "metadata": {},
+ "id": "5a28774b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"we have then the following expression for the parameters $\\beta_j$ (the matrix elements of $\\boldsymbol{H}$ are $h_{ij}$)"
]
},
{
"cell_type": "markdown",
- "id": "061a1c64",
- "metadata": {},
+ "id": "0d8a30fd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\beta_j = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}\\frac{y_i}{\\sigma_i}\\frac{x_{ik}}{\\sigma_i} = \\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}b_ia_{ik}\n",
@@ -4136,16 +4432,20 @@
},
{
"cell_type": "markdown",
- "id": "b28cc402",
- "metadata": {},
+ "id": "12da00a1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We state without proof the expression for the uncertainty in the parameters $\\beta_j$ as (we leave this as an exercise)"
]
},
{
"cell_type": "markdown",
- "id": "4c1ffa0b",
- "metadata": {},
+ "id": "83c8397b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\sigma^2(\\beta_j) = \\sum_{i=0}^{n-1}\\sigma_i^2\\left( \\frac{\\partial \\beta_j}{\\partial y_i}\\right)^2,\n",
@@ -4154,16 +4454,20 @@
},
{
"cell_type": "markdown",
- "id": "af65117b",
- "metadata": {},
+ "id": "3e6ed6b9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"resulting in"
]
},
{
"cell_type": "markdown",
- "id": "1ec0350a",
- "metadata": {},
+ "id": "e1eb16cc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\sigma^2(\\beta_j) = \\left(\\sum_{k=0}^{p-1}h_{jk}\\sum_{i=0}^{n-1}a_{ik}\\right)\\left(\\sum_{l=0}^{p-1}h_{jl}\\sum_{m=0}^{n-1}a_{ml}\\right) = h_{jj}!\n",
@@ -4172,8 +4476,10 @@
},
{
"cell_type": "markdown",
- "id": "bd81a867",
- "metadata": {},
+ "id": "d1cf71a9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The $\\chi^2$ function\n",
"The first step here is to approximate the function $y$ with a first-order polynomial, that is we write"
@@ -4181,8 +4487,10 @@
},
{
"cell_type": "markdown",
- "id": "353f76f6",
- "metadata": {},
+ "id": "bf012ada",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"y=y(x) \\rightarrow y(x_i) \\approx \\beta_0+\\beta_1 x_i.\n",
@@ -4191,16 +4499,20 @@
},
{
"cell_type": "markdown",
- "id": "07ac6252",
- "metadata": {},
+ "id": "664a7425",
+ "metadata": {
+ "editable": true
+ },
"source": [
"By computing the derivatives of $\\chi^2$ with respect to $\\beta_0$ and $\\beta_1$ show that these are given by"
]
},
{
"cell_type": "markdown",
- "id": "7e14dc03",
- "metadata": {},
+ "id": "1c5690d6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_0} = -2\\left[ \\frac{1}{n}\\sum_{i=0}^{n-1}\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0,\n",
@@ -4209,16 +4521,20 @@
},
{
"cell_type": "markdown",
- "id": "39166168",
- "metadata": {},
+ "id": "9bfd652f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and"
]
},
{
"cell_type": "markdown",
- "id": "fd4f4bbf",
- "metadata": {},
+ "id": "08ac6f7a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\chi^2(\\boldsymbol{\\beta})}{\\partial \\beta_1} = -\\frac{2}{n}\\left[ \\sum_{i=0}^{n-1}x_i\\left(\\frac{y_i-\\beta_0-\\beta_1x_{i}}{\\sigma_i^2}\\right)\\right]=0.\n",
@@ -4227,8 +4543,10 @@
},
{
"cell_type": "markdown",
- "id": "ccb858f6",
- "metadata": {},
+ "id": "03c0cfbb",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The $\\chi^2$ function\n",
"\n",
@@ -4238,8 +4556,10 @@
},
{
"cell_type": "markdown",
- "id": "1664e71a",
- "metadata": {},
+ "id": "b4df468d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\gamma = \\sum_{i=0}^{n-1}\\frac{1}{\\sigma_i^2},\n",
@@ -4248,8 +4568,10 @@
},
{
"cell_type": "markdown",
- "id": "dc691b69",
- "metadata": {},
+ "id": "652a7d67",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\gamma_x = \\sum_{i=0}^{n-1}\\frac{x_{i}}{\\sigma_i^2},\n",
@@ -4258,8 +4580,10 @@
},
{
"cell_type": "markdown",
- "id": "420f165f",
- "metadata": {},
+ "id": "caf4a86a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\gamma_y = \\sum_{i=0}^{n-1}\\left(\\frac{y_i}{\\sigma_i^2}\\right),\n",
@@ -4268,8 +4592,10 @@
},
{
"cell_type": "markdown",
- "id": "8d3dd5d9",
- "metadata": {},
+ "id": "afbb0992",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\gamma_{xx} = \\sum_{i=0}^{n-1}\\frac{x_ix_{i}}{\\sigma_i^2},\n",
@@ -4278,8 +4604,10 @@
},
{
"cell_type": "markdown",
- "id": "14d90403",
- "metadata": {},
+ "id": "37e3bd5e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\gamma_{xy} = \\sum_{i=0}^{n-1}\\frac{y_ix_{i}}{\\sigma_i^2},\n",
@@ -4288,16 +4616,20 @@
},
{
"cell_type": "markdown",
- "id": "cdcd2f57",
- "metadata": {},
+ "id": "0ea604ae",
+ "metadata": {
+ "editable": true
+ },
"source": [
"we obtain"
]
},
{
"cell_type": "markdown",
- "id": "8013559b",
- "metadata": {},
+ "id": "d3868dbf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\beta_0 = \\frac{\\gamma_{xx}\\gamma_y-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2},\n",
@@ -4306,8 +4638,10 @@
},
{
"cell_type": "markdown",
- "id": "dbbb8318",
- "metadata": {},
+ "id": "4107cf10",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\beta_1 = \\frac{\\gamma_{xy}\\gamma-\\gamma_x\\gamma_y}{\\gamma\\gamma_{xx}-\\gamma_x^2}.\n",
@@ -4316,8 +4650,10 @@
},
{
"cell_type": "markdown",
- "id": "73f53c6d",
- "metadata": {},
+ "id": "2ff3febf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"This approach (different linear and non-linear regression) suffers\n",
"often from both being underdetermined and overdetermined in the\n",
@@ -4327,8 +4663,10 @@
},
{
"cell_type": "markdown",
- "id": "4514c016",
- "metadata": {},
+ "id": "0430b4b7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Fitting an Equation of State for Dense Nuclear Matter\n",
"\n",
@@ -4352,45 +4690,23 @@
},
{
"cell_type": "markdown",
- "id": "6104f6f4",
- "metadata": {},
+ "id": "53a02241",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The code"
]
},
{
"cell_type": "code",
- "execution_count": 9,
- "id": "aae219de",
- "metadata": {},
- "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.057088709962727\n",
- "Mean squared error: 197.93\n",
- "Variance score: 1.00\n",
- "Mean absolute error: 11.69\n",
- "[ 0. 28.18220995 282.79902342 842.30879705] 12.946893955210385\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": 46,
+ "id": "3d3898bc",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Common imports\n",
"import os\n",
@@ -4481,8 +4797,10 @@
},
{
"cell_type": "markdown",
- "id": "d0e3bb71",
- "metadata": {},
+ "id": "c83b0d4f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The above simple polynomial in density $\\rho$ gives an excellent fit\n",
"to the data. \n",
@@ -4494,8 +4812,10 @@
},
{
"cell_type": "markdown",
- "id": "6e8f8820",
- "metadata": {},
+ "id": "5d9e5e20",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Splitting our Data in Training and Test data\n",
"\n",
@@ -4513,25 +4833,13 @@
},
{
"cell_type": "code",
- "execution_count": 21,
- "id": "5436a04b",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Training R2\n",
- "0.9999871210964857\n",
- "Training MSE\n",
- "4.810022933346783\n",
- "Test R2\n",
- "0.999972658732442\n",
- "Test MSE\n",
- "17.53673673563248\n"
- ]
- }
- ],
+ "execution_count": 47,
+ "id": "62a7e87f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"import os\n",
"import numpy as np\n",
@@ -4601,8 +4909,10 @@
},
{
"cell_type": "markdown",
- "id": "140acafd",
- "metadata": {},
+ "id": "6a0e5b8c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Exercises\n",
"Here are three possible exercises for weeks 34 and 35."
@@ -4610,8 +4920,10 @@
},
{
"cell_type": "markdown",
- "id": "17a2199f",
- "metadata": {},
+ "id": "49256cb8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Exercise 1: Setting up various Python environments\n",
"\n",
@@ -4677,8 +4989,10 @@
},
{
"cell_type": "markdown",
- "id": "a84cc2c0",
- "metadata": {},
+ "id": "0770d0e0",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Exercise 2: making your own data and exploring scikit-learn\n",
"\n",
@@ -4689,8 +5003,11 @@
{
"cell_type": "code",
"execution_count": 48,
- "id": "5cf897b5",
- "metadata": {},
+ "id": "b8aa2e1e",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"x = np.random.rand(100,1)\n",
@@ -4699,8 +5016,10 @@
},
{
"cell_type": "markdown",
- "id": "67144260",
- "metadata": {},
+ "id": "2da41638",
+ "metadata": {
+ "editable": true
+ },
"source": [
"1. Write your own code (following the examples under the [regression notes](https://compphysics.github.io/MachineLearning/doc/LectureNotes/_build/html/chapter1.html)) for computing the parametrization of the data set fitting a second-order polynomial. \n",
"\n",
@@ -4711,8 +5030,10 @@
},
{
"cell_type": "markdown",
- "id": "fda06579",
- "metadata": {},
+ "id": "d4e9ecc3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"MSE(\\boldsymbol{y},\\boldsymbol{\\tilde{y}}) = \\frac{1}{n}\n",
@@ -4722,8 +5043,10 @@
},
{
"cell_type": "markdown",
- "id": "b0b67264",
- "metadata": {},
+ "id": "d7792d5c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and the $R^2$ score function.\n",
"If $\\tilde{\\boldsymbol{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as"
@@ -4731,8 +5054,10 @@
},
{
"cell_type": "markdown",
- "id": "8634905c",
- "metadata": {},
+ "id": "beb9e5c6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n",
@@ -4741,16 +5066,20 @@
},
{
"cell_type": "markdown",
- "id": "b3d64229",
- "metadata": {},
+ "id": "1a80ae05",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have defined the mean value of $\\boldsymbol{y}$ as"
]
},
{
"cell_type": "markdown",
- "id": "a2f16298",
- "metadata": {},
+ "id": "5f3c798b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n",
@@ -4759,8 +5088,10 @@
},
{
"cell_type": "markdown",
- "id": "7e006fdd",
- "metadata": {},
+ "id": "e8a44567",
+ "metadata": {
+ "editable": true
+ },
"source": [
"You can use the functionality included in scikit-learn. If you feel for it, you can use your own program and define functions which compute the above two functions. \n",
"Discuss the meaning of these results. Try also to vary the coefficient in front of the added stochastic noise term and discuss the quality of the fits.\n",
@@ -4773,8 +5104,11 @@
{
"cell_type": "code",
"execution_count": 49,
- "id": "7618a40a",
- "metadata": {},
+ "id": "696dd214",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import os\n",
@@ -4821,16 +5155,20 @@
},
{
"cell_type": "markdown",
- "id": "520f4a70",
- "metadata": {},
+ "id": "b642d3f0",
+ "metadata": {
+ "editable": true
+ },
"source": [
""
]
},
{
"cell_type": "markdown",
- "id": "57017553",
- "metadata": {},
+ "id": "2ce3c926",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Exercise 3: Normalizing our data\n",
"\n",
@@ -4873,8 +5211,11 @@
{
"cell_type": "code",
"execution_count": 50,
- "id": "17d66f2c",
- "metadata": {},
+ "id": "422dfecc",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# split in training and test data\n",
@@ -4883,8 +5224,10 @@
},
{
"cell_type": "markdown",
- "id": "75e06a64",
- "metadata": {},
+ "id": "359dbd44",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Then we can use the standard scaler to scale our data as"
]
@@ -4892,8 +5235,11 @@
{
"cell_type": "code",
"execution_count": 51,
- "id": "789e6a0f",
- "metadata": {},
+ "id": "8566a9b9",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"scaler = StandardScaler()\n",
@@ -4904,8 +5250,10 @@
},
{
"cell_type": "markdown",
- "id": "f02d2e90",
- "metadata": {},
+ "id": "68b6b010",
+ "metadata": {
+ "editable": true
+ },
"source": [
"In this exercise we want you to to compute the MSE for the training\n",
"data and the test data as function of the complexity of a polynomial,\n",
@@ -4920,8 +5268,11 @@
{
"cell_type": "code",
"execution_count": 52,
- "id": "48cb1804",
- "metadata": {},
+ "id": "73c7b897",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"np.random.seed()\n",
@@ -4934,16 +5285,20 @@
},
{
"cell_type": "markdown",
- "id": "bfffe7b0",
- "metadata": {},
+ "id": "eaab2471",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $y$ is the function we want to fit with a given polynomial."
]
},
{
"cell_type": "markdown",
- "id": "0491f9ef",
- "metadata": {},
+ "id": "dc2375c2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"**a)**\n",
"Write a first code which sets up a design matrix $X$ defined by a fifth-order polynomial. Scale your data and split it in training and test data."
@@ -4951,8 +5306,10 @@
},
{
"cell_type": "markdown",
- "id": "e0a2615d",
- "metadata": {},
+ "id": "c9b9ba1e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"**b)**\n",
"Perform an ordinary least squares and compute the means squared error and the $R2$ factor for the training data and the test data, with and without scaling."
@@ -4960,33 +5317,17 @@
},
{
"cell_type": "markdown",
- "id": "5cc2a8aa",
- "metadata": {},
+ "id": "a6771e96",
+ "metadata": {
+ "editable": true
+ },
"source": [
"**c)**\n",
"Add now a model which allows you to make polynomials up to degree $15$. Perform a standard OLS fitting of the training data and compute the MSE and $R2$ for the training and test data and plot both test and training data MSE and $R2$ as functions of the polynomial degree. Compare what you see with Figure 2.11 of Hastie et al. Comment your results. For which polynomial degree do you find an optimal MSE (smallest value)?"
]
}
],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.12"
- }
- },
+ "metadata": {},
"nbformat": 4,
"nbformat_minor": 5
}
diff --git a/doc/src/week34/week34.do.txt b/doc/src/week34/week34.do.txt
index e0c1918d6..613dfbdbe 100644
--- a/doc/src/week34/week34.do.txt
+++ b/doc/src/week34/week34.do.txt
@@ -15,7 +15,8 @@ DATE: Week 34, August 22-26, 2022
* Thursday August 25: Computer lab in the morning, First lecture 1215pm-2pm: Presentation of the course, aims and content
* Thursday: Second Lecture: Start with simple linear regression and repetition of linear algebra and elements of statistics
* "Video of lecture":"https://youtu.be/KL0m3-yhd5w"
- * Friday August 26: Linear regression
+ * Friday August 26: Linear regression
+ * "Video of lecture":"https://www.youtube.com/watch?v=ne_xCL2ctM0"
* Computer lab: Wednesdays, 8am-6pm and Thursdays 8am-12pm and additional self study 4pm-6pm. First time: Wednesday August 24.
!eblock