diff --git a/doc/LectureNotes/Results/FigureFiles/EoSfitting.png b/doc/LectureNotes/Results/FigureFiles/EoSfitting.png index dfbe67cd5..ad6242d0a 100644 Binary files a/doc/LectureNotes/Results/FigureFiles/EoSfitting.png and b/doc/LectureNotes/Results/FigureFiles/EoSfitting.png differ diff --git a/doc/LectureNotes/_build/.doctrees/chapter1.doctree b/doc/LectureNotes/_build/.doctrees/chapter1.doctree index 90c4c8184..2da43f30b 100644 Binary files a/doc/LectureNotes/_build/.doctrees/chapter1.doctree and b/doc/LectureNotes/_build/.doctrees/chapter1.doctree differ diff --git a/doc/LectureNotes/_build/.doctrees/chapter2.doctree b/doc/LectureNotes/_build/.doctrees/chapter2.doctree index 5622196e5..d7dad109b 100644 Binary files a/doc/LectureNotes/_build/.doctrees/chapter2.doctree and b/doc/LectureNotes/_build/.doctrees/chapter2.doctree differ diff --git a/doc/LectureNotes/_build/.doctrees/chapter3.doctree b/doc/LectureNotes/_build/.doctrees/chapter3.doctree index 677298c6a..29981a4cc 100644 Binary files a/doc/LectureNotes/_build/.doctrees/chapter3.doctree and b/doc/LectureNotes/_build/.doctrees/chapter3.doctree differ diff --git a/doc/LectureNotes/_build/.doctrees/chapter4.doctree b/doc/LectureNotes/_build/.doctrees/chapter4.doctree index 1bb3dd684..9e619ece3 100644 Binary files a/doc/LectureNotes/_build/.doctrees/chapter4.doctree and b/doc/LectureNotes/_build/.doctrees/chapter4.doctree differ diff --git a/doc/LectureNotes/_build/.doctrees/environment.pickle b/doc/LectureNotes/_build/.doctrees/environment.pickle index a1fb76610..2ef5fde0a 100644 Binary files a/doc/LectureNotes/_build/.doctrees/environment.pickle and b/doc/LectureNotes/_build/.doctrees/environment.pickle differ diff --git a/doc/LectureNotes/_build/html/Clustering.html b/doc/LectureNotes/_build/html/Clustering.html index 777167a84..eb64804f0 100644 --- a/doc/LectureNotes/_build/html/Clustering.html +++ b/doc/LectureNotes/_build/html/Clustering.html @@ -5,7 +5,7 @@ - 11. Clustering Analysis — Applied Data Analysis and Machine Learning + 12. Clustering Analysis — Applied Data Analysis and Machine Learning @@ -54,8 +54,8 @@ - - + + @@ -139,17 +139,17 @@ @@ -171,12 +171,12 @@ @@ -188,12 +188,12 @@ @@ -205,12 +205,12 @@ @@ -286,29 +286,29 @@ @@ -324,7 +324,7 @@
-

11. Clustering Analysis

+

12. Clustering Analysis

In this chapter we will concern ourselves with the study of cluster analysis. In general terms cluster analysis, or clustering, is the task of grouping a data-set into different distinct categories based on some measure of equality of @@ -343,7 +343,7 @@ exists different categories of clustering algorithms. A few of the most common are: centroid-, distribution-, density- and hierarchical- clustering. We will concern ourselves primarily with the first one.

-

11.1. Basic Idea of the K-means Clustering Algorithm

+

12.1. Basic Idea of the K-means Clustering Algorithm

The simplest of all clustering algorithms is the aptly named k-means algorithm , sometimes also referred to as Lloyds algorithm. It is the simplest and also the most common. From its simplicity it obtains both strengths and weaknesses. @@ -436,7 +436,7 @@ no-where, don’t fret, the method does get a whole lot simpler once we start programming.

-

11.2. The K-means Clustering Algorithm

+

12.2. The K-means Clustering Algorithm

The k-means clustering algorithm goes as follows (note in my opinion this description is a bit complicated and is lifted directly out of ESL HASTIE for deeper understanding purposes)

@@ -460,12 +460,12 @@ understood but to help you along the way we summarize the algorithm as follows

That’s it, nothing magical happening.

-

11.3. Writing Our Own Code

+

12.3. Writing Our Own Code

In the following section we will work to develop a deeper understanding of the previously discussed mathematics through developing codes to do k-means cluster analysis.

-

11.3.1. Basic Python

+

12.3.1. Basic Python

Let us now program the most basic version of the algorithm using nothing but Python with numpy arrays. This code is kept intentionally simple to gradually progress our understanding. There is no vectorization of any kind, and even most @@ -718,7 +718,7 @@ two improvements.

-

11.4. Towards a More Numpythonic Code

+

12.4. Towards a More Numpythonic Code

def get_distances_to_clusters(data, centroids):
@@ -1000,8 +1000,8 @@ Runtime: 0.004456043243408203 seconds
         
         
         
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_11_0.png b/doc/LectureNotes/_build/html/_images/chapter1_11_0.png
index 8585b7491..65d331dc5 100644
Binary files a/doc/LectureNotes/_build/html/_images/chapter1_11_0.png and b/doc/LectureNotes/_build/html/_images/chapter1_11_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_136_0.png b/doc/LectureNotes/_build/html/_images/chapter1_136_0.png
new file mode 100644
index 000000000..29a1bd652
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_136_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_13_1.png b/doc/LectureNotes/_build/html/_images/chapter1_13_1.png
index b145ce82a..d70ab26ee 100644
Binary files a/doc/LectureNotes/_build/html/_images/chapter1_13_1.png and b/doc/LectureNotes/_build/html/_images/chapter1_13_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_183_1.png b/doc/LectureNotes/_build/html/_images/chapter1_183_1.png
new file mode 100644
index 000000000..0821feaf6
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_183_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_199_1.png b/doc/LectureNotes/_build/html/_images/chapter1_199_1.png
new file mode 100644
index 000000000..f19e88b16
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_199_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_201_1.png b/doc/LectureNotes/_build/html/_images/chapter1_201_1.png
new file mode 100644
index 000000000..13fd31349
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_201_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_203_0.png b/doc/LectureNotes/_build/html/_images/chapter1_203_0.png
new file mode 100644
index 000000000..dfe1e253c
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_203_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_210_0.png b/doc/LectureNotes/_build/html/_images/chapter1_210_0.png
new file mode 100644
index 000000000..a3eac788b
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_210_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_218_0.png b/doc/LectureNotes/_build/html/_images/chapter1_218_0.png
new file mode 100644
index 000000000..cbac4fd70
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter1_218_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_27_0.png b/doc/LectureNotes/_build/html/_images/chapter1_27_0.png
index bef273ce3..889056124 100644
Binary files a/doc/LectureNotes/_build/html/_images/chapter1_27_0.png and b/doc/LectureNotes/_build/html/_images/chapter1_27_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_3_0.png b/doc/LectureNotes/_build/html/_images/chapter1_3_0.png
index 0be2e475d..656724cd5 100644
Binary files a/doc/LectureNotes/_build/html/_images/chapter1_3_0.png and b/doc/LectureNotes/_build/html/_images/chapter1_3_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter1_61_10.png b/doc/LectureNotes/_build/html/_images/chapter1_61_10.png
index 16b5dca78..2c196f8b3 100644
Binary files a/doc/LectureNotes/_build/html/_images/chapter1_61_10.png and b/doc/LectureNotes/_build/html/_images/chapter1_61_10.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter2_245_1.png b/doc/LectureNotes/_build/html/_images/chapter2_245_1.png
new file mode 100644
index 000000000..dc3a3ce3e
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter2_245_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter2_316_1.png b/doc/LectureNotes/_build/html/_images/chapter2_316_1.png
new file mode 100644
index 000000000..07584f6bb
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter2_316_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter3_25_2.png b/doc/LectureNotes/_build/html/_images/chapter3_25_2.png
index b77a1febb..dada82b44 100644
Binary files a/doc/LectureNotes/_build/html/_images/chapter3_25_2.png and b/doc/LectureNotes/_build/html/_images/chapter3_25_2.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter4_114_1.png b/doc/LectureNotes/_build/html/_images/chapter4_114_1.png
new file mode 100644
index 000000000..6c642a6a1
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter4_114_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter4_116_0.png b/doc/LectureNotes/_build/html/_images/chapter4_116_0.png
new file mode 100644
index 000000000..dfd44cb86
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter4_116_0.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter4_122_1.png b/doc/LectureNotes/_build/html/_images/chapter4_122_1.png
new file mode 100644
index 000000000..59590fe49
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter4_122_1.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter4_57_2.png b/doc/LectureNotes/_build/html/_images/chapter4_57_2.png
new file mode 100644
index 000000000..fa199fba3
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter4_57_2.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter4_57_3.png b/doc/LectureNotes/_build/html/_images/chapter4_57_3.png
new file mode 100644
index 000000000..88bffd58a
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter4_57_3.png differ
diff --git a/doc/LectureNotes/_build/html/_images/chapter4_57_4.png b/doc/LectureNotes/_build/html/_images/chapter4_57_4.png
new file mode 100644
index 000000000..e242a4058
Binary files /dev/null and b/doc/LectureNotes/_build/html/_images/chapter4_57_4.png differ
diff --git a/doc/LectureNotes/_build/html/_sources/chapter1.ipynb b/doc/LectureNotes/_build/html/_sources/chapter1.ipynb
index c930e0a6b..9dab26cdc 100644
--- a/doc/LectureNotes/_build/html/_sources/chapter1.ipynb
+++ b/doc/LectureNotes/_build/html/_sources/chapter1.ipynb
@@ -13,38 +13,37 @@
     "\n",
     "\n",
     "\n",
-    "Our emphasis throughout this series of lectures  \n",
-    "is on understanding the mathematical aspects of\n",
-    "different algorithms used in the fields of data analysis and machine learning. \n",
+    "Our emphasis throughout this series of lectures is on understanding\n",
+    "the mathematical aspects of different algorithms used in the fields of\n",
+    "data analysis and machine learning.\n",
     "\n",
-    "However, where possible we will emphasize the\n",
-    "importance of using available software. We start thus with a hands-on\n",
-    "and top-down approach to machine learning. The aim is thus to start with\n",
-    "relevant data or data we have produced \n",
-    "and use these to introduce statistical data analysis\n",
-    "concepts and machine learning algorithms before we delve into the\n",
-    "algorithms themselves. The examples we will use in the beginning, start with simple\n",
-    "polynomials with random noise added. We will use the Python\n",
-    "software package [Scikit-Learn](http://scikit-learn.org/stable/) and\n",
-    "introduce various machine learning algorithms to make fits of\n",
-    "the data and predictions. We move thereafter to more interesting\n",
-    "cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example).\n",
-    "These are examples where we can easily set up the data and\n",
-    "then use machine learning algorithms included in for example\n",
-    "**Scikit-Learn**. \n",
+    "However, where possible we will emphasize the importance of using\n",
+    "available software. We start thus with a hands-on and top-down\n",
+    "approach to machine learning. The aim is thus to start with relevant\n",
+    "data or data we have produced and use these to introduce statistical\n",
+    "data analysis concepts and machine learning algorithms before we delve\n",
+    "into the algorithms themselves. The examples we will use in the\n",
+    "beginning, start with simple polynomials with random noise added. We\n",
+    "will use the Python software package\n",
+    "[Scikit-Learn](http://scikit-learn.org/stable/) and introduce various\n",
+    "machine learning algorithms to make fits of the data and\n",
+    "predictions. We move thereafter to more interesting cases such as data\n",
+    "from say experiments (below we will look at experimental nuclear\n",
+    "binding energies as an example).  These are examples where we can\n",
+    "easily set up the data and then use machine learning algorithms\n",
+    "included in for example **Scikit-Learn**.\n",
     "\n",
     "These examples will serve us the purpose of getting\n",
     "started. Furthermore, they allow us to catch more than two birds with\n",
     "a stone. They will allow us to bring in some programming specific\n",
-    "topics and tools as well as showing the power of various Python \n",
-    "libraries for machine learning and statistical data analysis.  \n",
+    "topics and tools as well as showing the power of various Python\n",
+    "libraries for machine learning and statistical data analysis.\n",
     "\n",
-    "Here, we will mainly focus on two\n",
-    "specific Python packages for Machine Learning, Scikit-Learn and\n",
-    "Tensorflow (see below for links etc).  Moreover, the examples we\n",
-    "introduce will serve as inputs to many of our discussions later, as\n",
-    "well as allowing you to set up models and produce your own data and\n",
-    "get started with programming.\n",
+    "Here, we will mainly focus on two specific Python packages for Machine\n",
+    "Learning, Scikit-Learn and Tensorflow (see below for links etc).\n",
+    "Moreover, the examples we introduce will serve as inputs to many of\n",
+    "our discussions later, as well as allowing you to set up models and\n",
+    "produce your own data and get started with programming.\n",
     "\n",
     "\n",
     "\n",
@@ -286,7 +285,17 @@
     "[gallery](https://matplotlib.org/gallery/index.html) of examples. In\n",
     "this example we plot our original values of $x$ and $y$ as well as the\n",
     "prediction **ypredict** ($\\tilde{y}$), which attempts at fitting our\n",
-    "data with a straight line.\n",
+    "data with a straight line.  Note also that **Scikit-Learn** requires a\n",
+    "matrix as input for the input values $x$ and $y$. In the above code we\n",
+    "have solved this by declaring $x$ and $y$ as arrays of dimension\n",
+    "$n\\times 1$.\n",
+    "\n",
+    "In the code here we have also made a new array for $x\\in [0,1]$. Our\n",
+    "prediction is computed for these values, meaning that they were not\n",
+    "included in the data set used to *train* (or fit) the model.\n",
+    "This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set.\n",
+    "Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!\n",
+    "\n",
     "\n",
     "The Python code follows here."
    ]
@@ -311,6 +320,7 @@
     "y = 2*x+np.random.randn(100,1)\n",
     "linreg = LinearRegression()\n",
     "linreg.fit(x,y)\n",
+    "# This is our new x-array to which we test our model\n",
     "xnew = np.array([[0],[1]])\n",
     "ypredict = linreg.predict(xnew)\n",
     "\n",
@@ -460,8 +470,7 @@
     "Depending on the parameter in front of the normal distribution, we may\n",
     "have a small or larger relative error. Try to play around with\n",
     "different training data sets and study (graphically) the value of the\n",
-    "relative error. Note also that **Scikit-Learn** requires a matrix as input for the input values $x$ and $y$. In the above code we have\n",
-    "solved this by declaring $x$ and $y$ as arrays of dimension $n\\times 1$.\n",
+    "relative error.\n",
     "\n",
     "As mentioned above, **Scikit-Learn** has an impressive functionality.\n",
     "We can for example extract the values of $\\alpha$ and $\\beta$ and\n",
@@ -1039,7 +1048,7 @@
    "metadata": {},
    "source": [
     "The next step, and we will define this mathematically later, is to set up the so-called **design matrix**. We will throughout call this matrix $\\boldsymbol{X}$.\n",
-    "It has dimensionality $p\\times n$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit."
+    "It has dimensionality $n\\times p$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit."
    ]
   },
   {
@@ -1064,9 +1073,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Note well that we have made life simple here. We perform a fit in terms of the number of nucleons only. A more sophisticated fit can be done by including an explicit dependence on the number of protons and neutrons in the asymmetry and Coulomb terms.\n",
+    "Note well that we have made life simple here. We perform a fit in\n",
+    "terms of the number of nucleons only.  A more sophisticated fit can be\n",
+    "done by including an explicit dependence on the number of protons and\n",
+    "neutrons in the asymmetry and Coulomb terms. We leave this as an exercise to you the reader.\n",
     "\n",
-    "With **scikitlearn** we are now ready to use linear regression and fit our data."
+    "With **Scikit-Learn** we are now ready to use linear regression and fit our data."
    ]
   },
   {
@@ -1124,7 +1136,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "As a teaser, let us now see how we can do this with decision trees using **scikit-learn**. Later we will switch to so-called **random forests**!"
+    "As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**!"
    ]
   },
   {
@@ -1172,6 +1184,17 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "With a deeper and deeper tree level, we can almost reproduce every\n",
+    "single data point by increasing the max depth of the tree.\n",
+    "We can actually decide to make a decision tree which fits every single point.\n",
+    "As we will\n",
+    "see later, this has the benefit that we can really train a model which\n",
+    "traverses every single data point. However, the price we pay is that\n",
+    "we will easily overfit. That is, if we apply our model to unseen data,\n",
+    "we will most likely fail miserably in our attempt at making\n",
+    "predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.\n",
+    "\n",
+    "\n",
     "The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) \n",
     "functionality."
    ]
@@ -1977,6 +2000,47 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "We can then compute the second derivative of the cost function, which in our case is the second derivative\n",
+    "of the means squared error. This leads to"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "\\frac{\\partial^2 C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}^T\\partial \\boldsymbol{\\beta}} =\\frac{2}{n}\\boldsymbol{X}^T\\boldsymbol{X}.\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).\n",
+    "\n",
+    "The Hessian matrix plays an important role and is defined for the mean squared error  as"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The Hessian matrix for ordinary least squares is also proportional to\n",
+    "the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix  to find\n",
+    "the eigenvalues of the covariance matrix and the Hessian matrix in\n",
+    "terms of the singular values.\n",
+    "\n",
+    "\n",
     "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by"
    ]
   },
@@ -2529,9 +2593,7 @@
     "**pandas** again, rather extensively in order to organize our data.\n",
     "\n",
     "The difference now is that we use **Scikit-Learn's** regression tools\n",
-    "instead of our own matrix inversion implementation. Furthermore, we\n",
-    "sneak in **Ridge** regression (to be discussed below) which includes a\n",
-    "hyperparameter $\\lambda$, also to be explained below."
+    "instead of our own matrix inversion implementation."
    ]
   },
   {
@@ -2603,18 +2665,6 @@
     "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, ytilde))\n",
     "print(clf.coef_, clf.intercept_)\n",
     "\n",
-    "# The Ridge regression with a hyperparameter lambda = 0.1\n",
-    "_lambda = 0.1\n",
-    "clf_ridge = skl.Ridge(alpha=_lambda).fit(X, Energies)\n",
-    "yridge = clf_ridge.predict(X)\n",
-    "EoS['Eridge']  = yridge\n",
-    "# The mean squared error                               \n",
-    "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, yridge))\n",
-    "# Explained variance score: 1 is perfect prediction                                 \n",
-    "print('Variance score: %.2f' % r2_score(Energies, yridge))\n",
-    "# Mean absolute error                                                           \n",
-    "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, yridge))\n",
-    "print(clf_ridge.coef_, clf_ridge.intercept_)\n",
     "\n",
     "fig, ax = plt.subplots()\n",
     "ax.set_xlabel(r'$\\rho[\\mathrm{fm}^{-3}]$')\n",
@@ -2623,8 +2673,6 @@
     "            label='Theoretical data')\n",
     "ax.plot(EoS['Density'], EoS['Eols'], alpha=0.7, lw=2, c='m',\n",
     "            label='OLS')\n",
-    "ax.plot(EoS['Density'], EoS['Eridge'], alpha=0.7, lw=2, c='g',\n",
-    "            label='Ridge $\\lambda = 0.1$')\n",
     "ax.legend()\n",
     "save_fig(\"EoSfitting\")\n",
     "plt.show()"
@@ -2637,13 +2685,11 @@
     "The above simple polynomial in density $\\rho$ gives an excellent fit\n",
     "to the data. \n",
     "\n",
-    "We note also that there is a small deviation between the\n",
-    "standard OLS and the Ridge regression at higher densities. We discuss this in more detail\n",
-    "below.\n",
     "\n",
     "\n",
     "## Splitting our Data in Training and Test data\n",
     "\n",
+    "\n",
     "It is normal in essentially all Machine Learning studies to split the\n",
     "data in a training set and a test set (sometimes also an additional\n",
     "validation set).  **Scikit-Learn** has an own function for this. There\n",
@@ -2653,6 +2699,107 @@
     "postpone a discussion of this splitting to the end of these notes and\n",
     "our discussion of the so-called **bias-variance** tradeoff. Here we\n",
     "limit ourselves to repeat the above equation of state fitting example\n",
+    "but now splitting the data into a training set and a test set.\n",
+    "\n",
+    "Let us study some examples. The first code here takes a simple\n",
+    "one-dimensional second-order polynomial and we fit it to a\n",
+    "second-order polynomial. Depending on the strength of the added noise,\n",
+    "the various measures like the $R2$ score or the mean-squared error,\n",
+    "the fit becomes better or worse."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false,
+    "editable": true
+   },
+   "outputs": [],
+   "source": [
+    "import os\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "import matplotlib.pyplot as plt\n",
+    "from sklearn.model_selection import train_test_split\n",
+    "\n",
+    "\n",
+    "def R2(y_data, y_model):\n",
+    "    return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n",
+    "def MSE(y_data,y_model):\n",
+    "    n = np.size(y_model)\n",
+    "    return np.sum((y_data-y_model)**2)/n\n",
+    "\n",
+    "x = np.random.rand(100)\n",
+    "y = 2.0+5*x*x+0.1*np.random.randn(100)\n",
+    "\n",
+    "\n",
+    "#  The design matrix now as function of a given polynomial\n",
+    "X = np.zeros((len(x),3))\n",
+    "X[:,0] = 1.0\n",
+    "X[:,1] = x\n",
+    "X[:,2] = x**2\n",
+    "# We split the data in test and training data\n",
+    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
+    "# matrix inversion to find beta\n",
+    "beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train\n",
+    "print(beta)\n",
+    "# and then make the prediction\n",
+    "ytilde = X_train @ beta\n",
+    "print(\"Training R2\")\n",
+    "print(R2(y_train,ytilde))\n",
+    "print(\"Training MSE\")\n",
+    "print(MSE(y_train,ytilde))\n",
+    "ypredict = X_test @ beta\n",
+    "print(\"Test R2\")\n",
+    "print(R2(y_test,ypredict))\n",
+    "print(\"Test MSE\")\n",
+    "print(MSE(y_test,ypredict))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Alternatively, you could write your own test-train splitting function as shown here."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false,
+    "editable": true
+   },
+   "outputs": [],
+   "source": [
+    "# equivalently in numpy\n",
+    "def train_test_split_numpy(inputs, labels, train_size, test_size):\n",
+    "    n_inputs = len(inputs)\n",
+    "    inputs_shuffled = inputs.copy()\n",
+    "    labels_shuffled = labels.copy()\n",
+    "\n",
+    "    np.random.shuffle(inputs_shuffled)\n",
+    "    np.random.shuffle(labels_shuffled)\n",
+    "\n",
+    "    train_end = int(n_inputs*train_size)\n",
+    "    X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]\n",
+    "    Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]\n",
+    "\n",
+    "    return X_train, X_test, Y_train, Y_test"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "But since **scikit-learn** has its own function for doing this and since\n",
+    "it interfaces easily with **tensorflow** and other libraries, we\n",
+    "normally recommend using the latter functionality.\n",
+    "\n",
+    "\n",
+    "As another example, we apply the training and testing split to \n",
+    "to the above equation of state fitting example\n",
     "but now splitting the data into a training set and a test set."
    ]
   },
@@ -3050,119 +3197,6 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Splitting our Data in Training and Test data\n",
-    "\n",
-    "\n",
-    "It is normal in essentially all Machine Learning studies to split the\n",
-    "data in a training set and a test set (sometimes also an additional\n",
-    "validation set).  **Scikit-Learn** has an own function for this. There\n",
-    "is no explicit recipe for how much data should be included as training\n",
-    "data and say test data.  An accepted rule of thumb is to use\n",
-    "approximately $2/3$ to $4/5$ of the data as training data. We will\n",
-    "postpone a discussion of this splitting to the end of these notes and\n",
-    "our discussion of the so-called **bias-variance** tradeoff. Here we\n",
-    "limit ourselves to repeat the above equation of state fitting example\n",
-    "but now splitting the data into a training set and a test set.\n",
-    "\n",
-    "Let us study some examples. The first code here takes a simple\n",
-    "one-dimensional second-order polynomial and we fit it to a\n",
-    "second-order polynomial. Depending on the strength of the added noise,\n",
-    "the various measures like the $R2$ score or the mean-squared error,\n",
-    "the fit becomes better or worse."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false,
-    "editable": true
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import numpy as np\n",
-    "import pandas as pd\n",
-    "import matplotlib.pyplot as plt\n",
-    "from sklearn.model_selection import train_test_split\n",
-    "\n",
-    "\n",
-    "def R2(y_data, y_model):\n",
-    "    return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n",
-    "def MSE(y_data,y_model):\n",
-    "    n = np.size(y_model)\n",
-    "    return np.sum((y_data-y_model)**2)/n\n",
-    "\n",
-    "x = np.random.rand(100)\n",
-    "y = 2.0+5*x*x+0.1*np.random.randn(100)\n",
-    "\n",
-    "\n",
-    "#  The design matrix now as function of a given polynomial\n",
-    "X = np.zeros((len(x),3))\n",
-    "X[:,0] = 1.0\n",
-    "X[:,1] = x\n",
-    "X[:,2] = x**2\n",
-    "# We split the data in test and training data\n",
-    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
-    "# matrix inversion to find beta\n",
-    "beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train\n",
-    "print(beta)\n",
-    "# and then make the prediction\n",
-    "ytilde = X_train @ beta\n",
-    "print(\"Training R2\")\n",
-    "print(R2(y_train,ytilde))\n",
-    "print(\"Training MSE\")\n",
-    "print(MSE(y_train,ytilde))\n",
-    "ypredict = X_test @ beta\n",
-    "print(\"Test R2\")\n",
-    "print(R2(y_test,ypredict))\n",
-    "print(\"Test MSE\")\n",
-    "print(MSE(y_test,ypredict))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Alternatively, you could write your own test-train splitting function as shown here."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false,
-    "editable": true
-   },
-   "outputs": [],
-   "source": [
-    "# equivalently in numpy\n",
-    "def train_test_split_numpy(inputs, labels, train_size, test_size):\n",
-    "    n_inputs = len(inputs)\n",
-    "    inputs_shuffled = inputs.copy()\n",
-    "    labels_shuffled = labels.copy()\n",
-    "\n",
-    "    np.random.shuffle(inputs_shuffled)\n",
-    "    np.random.shuffle(labels_shuffled)\n",
-    "\n",
-    "    train_end = int(n_inputs*train_size)\n",
-    "    X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]\n",
-    "    Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]\n",
-    "\n",
-    "    return X_train, X_test, Y_train, Y_test"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "But since **scikit-learn** has its own function for doing this and since\n",
-    "it interfaces easily with **tensorflow** and other libraries, we\n",
-    "normally recommend using the latter functionality.\n",
-    "\n",
-    "\n",
-    "\n",
-    "\n",
     "## Reducing the number of degrees of freedom, overarching view\n",
     "\n",
     "Many Machine Learning problems involve thousands or even millions of\n",
diff --git a/doc/LectureNotes/_build/html/_sources/chapter2.ipynb b/doc/LectureNotes/_build/html/_sources/chapter2.ipynb
index 651eadf4a..3049b1030 100644
--- a/doc/LectureNotes/_build/html/_sources/chapter2.ipynb
+++ b/doc/LectureNotes/_build/html/_sources/chapter2.ipynb
@@ -13,7 +13,7 @@
     "What is presented here is a mathematical analysis of various regression algorithms (ordinary least  squares, Ridge and Lasso Regression). The analysis is based on an important algorithm in linear algebra, the so-called Singular Value Decomposition (SVD). \n",
     "\n",
     "\n",
-    "We have shown that in ordinary least squares the optimal parameters $\\beta$ are given by"
+    "We have shown that in ordinary least squares (OLS) the optimal parameters $\\beta$ are given by"
    ]
   },
   {
@@ -21,7 +21,7 @@
    "metadata": {},
    "source": [
     "$$\n",
-    "\\hat{\\boldsymbol{\\beta}} = \\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n",
+    "\\hat{\\boldsymbol{\\beta}}_{\\mathrm{OLS}} = \\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n",
     "$$"
    ]
   },
@@ -79,7 +79,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The matrix $\\boldsymbol{A}$ has the important property that $\\boldsymbol{A}^2=\\boldsymbol{A}$. This is the definition of a projection matrix.\n",
+    "The matrix $\\boldsymbol{A}$ has the important property that $\\boldsymbol{A}^2=\\boldsymbol{A}$. This is the definition of a [projection matrix](https://en.wikipedia.org/wiki/Projection_matrix).\n",
     "We can then interpret our optimal model $\\tilde{\\boldsymbol{y}}$ as being represented  by an orthogonal  projection of $\\boldsymbol{y}$ onto a space defined by the column vectors of $\\boldsymbol{X}$.  In our case here the matrix $\\boldsymbol{A}$ is a square matrix. If it is a general rectangular matrix we have an oblique projection matrix.\n",
     "\n",
     "\n",
@@ -545,7 +545,7 @@
     "\n",
     "## Code for SVD and Inversion of Matrices\n",
     "\n",
-    "How do we use the SVD to invert a matrix $\\boldsymbol{X}^\\boldsymbol{X}$ which is singular or near singular?\n",
+    "How do we use the SVD to invert a matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ which is singular or near singular?\n",
     "The simple answer is to use the linear algebra function for the pseudoinverse, that is"
    ]
   },
@@ -3258,6 +3258,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "**More text will be added to this example.**\n",
+    "\n",
     "## Linking the regression analysis with a statistical interpretation\n",
     "\n",
     "We will now couple the discussions of ordinary least squares, Ridge\n",
@@ -3624,7 +3626,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "It is a conditional probability (see below) and reads as the likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters $\\boldsymbol{\\beta}$.\n",
+    "It is a conditional probability (see below) and reads as the\n",
+    "likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters\n",
+    "$\\boldsymbol{\\beta}$.\n",
     "\n",
     "\n",
     "In statistics, maximum likelihood estimation (MLE) is a method of\n",
@@ -3728,7 +3732,7 @@
     "We define also the likelihood for $X$ and $Y$ as $p(X)$ and $p(Y)$ respectively.\n",
     "The likelihood of a specific event $x_i$ (or $y_i$) is then written as $p(X=x_i)$ or just $p(x_i)=p_i$. \n",
     "\n",
-    "**Union of events is given by.**"
+    "The union of events is given by"
    ]
   },
   {
@@ -3744,7 +3748,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "**The product rule (aka joint probability) is given by.**"
+    "The product rule (aka joint probability) is given by"
    ]
   },
   {
@@ -3762,8 +3766,6 @@
    "source": [
     "where we read $p(X\\vert Y)$ as the likelihood of obtaining $X$ given $Y$.\n",
     "\n",
-    "\n",
-    "\n",
     "If we have independent events then $p(X,Y)=p(X)p(Y)$.\n",
     "\n",
     "\n",
@@ -3840,21 +3842,27 @@
     "the parameter space represented by $X$. This function is not\n",
     "necesseraly normalized and is normally called the likelihood function.\n",
     "\n",
-    "The function $p(X)$ on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution.\n",
+    "The function $p(X)$ on the right hand side is called the prior while\n",
+    "the function on the left hand side is the called the posterior\n",
+    "probability. The denominator on the right hand side serves as a\n",
+    "normalization factor for the posterior distribution.\n",
     "\n",
     "Let us try to illustrate Bayes' theorem through an example.\n",
     "\n",
     "\n",
-    "Let us suppose that you are undergoing a series of mammography scans in\n",
-    "order to rule out possible breast cancer cases.  We define the\n",
+    "Let us suppose that you are undergoing a series of mammography scans\n",
+    "in order to rule out possible breast cancer cases.  We define the\n",
     "sensitivity for a positive event by the variable $X$. It takes binary\n",
     "values with $X=1$ representing a positive event and $X=0$ being a\n",
     "negative event. We reserve $Y$ as a classification parameter for\n",
-    "either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a  positive thing).\n",
+    "either a negative or a positive breast cancer confirmation. (Short\n",
+    "note on wordings: positive here means having breast cancer, although\n",
+    "none of us would consider this being a positive thing).\n",
     "\n",
     "We let $Y=1$ represent the the case of having breast cancer and $Y=0$ as not.\n",
     "\n",
-    "Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$, that is we have"
+    "Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$ (the numbers here are all made up),\n",
+    "that is we have"
    ]
   },
   {
@@ -3870,12 +3878,32 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "This obviously sounds  scary since many would conclude that if the test is positive, there is a likelihood of $80\\%$ for having cancer.\n",
-    "It is however not correct, as the following Bayesian analysis shows.\n",
+    "This obviously sounds scary since many would conclude that if the test\n",
+    "is positive, there is a likelihood of $80\\%$ for having cancer.  It is\n",
+    "however not correct, as the following Bayesian analysis shows. The correct question to pose is *what is the probability of having breast cancer in case of a positive test?*\n",
+    "We are thus interested in"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "p(Y=1\\vert X=1),\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "instead  of $p(X=1\\vert Y=1)$.\n",
     "\n",
     "\n",
-    "If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number.\n",
-    "Let us assume that the prior probability in the population as a whole is"
+    "\n",
+    "If we look at various national surveys on breast cancer, the general\n",
+    "likelihood of developing breast cancer is a very small number.  Let us\n",
+    "assume that the prior probability in the population as a whole is"
    ]
   },
   {
@@ -3891,7 +3919,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have"
+    "We need also to account for the fact that the test may produce a false\n",
+    "positive result (false alarm). Let us here assume that we have"
    ]
   },
   {
@@ -3907,15 +3936,38 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Using Bayes' theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute"
+    "Using Bayes' theorem we can then find the posterior probability that\n",
+    "the person has breast cancer in case of a positive test, that is we\n",
+    "can compute"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "\n",
+    "
\n", + "\n", "$$\n", - "p(Y=1\\vert X=1)=\\frac{p(X=1\\vert Y=1)p(Y=1)}{p(X=1\\vert Y=1)p(Y=1)+p(X=1\\vert Y=0)p(Y=0)}=\\frac{0.8\\times 0.004}{0.8\\times 0.004+0.1\\times 0.996}=0.031.\n", + "\\begin{equation}\n", + "p(Y=1\\vert X=1)=\\frac{p(X=1\\vert Y=1)p(Y=1)}{p(X=1\\vert Y=1)p(Y=1)+p(X=1\\vert Y=0)p(Y=0)}= \n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + " \\frac{0.8\\times 0.004}{0.8\\times 0.004+0.1\\times 0.996}=0.031.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", "$$" ] }, @@ -3941,9 +3993,12 @@ "parameters $\\boldsymbol{\\beta}$ using OLS, Ridge and Lasso regression. For\n", "OLS, you will notice as function of the noise and polynomial degree,\n", "that the parameters $\\beta$ will fluctuate from order to order in the\n", - "polynomial fit and that for larger and larger polynomial degrees of freedom, the parameters will tend to increase in value for OLS.\n", + "polynomial fit and that for larger and larger polynomial degrees of\n", + "freedom, the parameters will tend to increase in value for OLS.\n", "\n", - "For Ridge and Lasso regression, the higher order parameters will typically be reduced, providing thereby less fluctuations from one order to another one." + "For Ridge and Lasso regression, the higher order parameters will\n", + "typically be reduced, providing thereby less fluctuations from one\n", + "order to another one." ] }, { @@ -4008,8 +4063,8 @@ " # Compute the MSE and print it\n", " MSERidgePredict[i] = MSE(y_test,ypredictRidge)\n", " MSELassoPredict[i] = MSE(y_test,ypredictLasso)\n", - " print(lmb,RegRidge.coef_)\n", - " print(lmb,RegLasso.coef_)\n", + "# print(lmb,RegRidge.coef_)\n", + "# print(lmb,RegLasso.coef_)\n", "# Now plot the results\n", "plt.figure()\n", "plt.plot(np.log10(lambdas), MSERidgePredict, 'b', label = 'MSE Ridge Test')\n", @@ -4024,10 +4079,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "How can we understand this? \n", + "How can we understand this? **More text to be added**.\n", "\n", "\n", "\n", + "## Linking Bayes' Theorem with Ridge and Lasso Regression\n", + "\n", + "\n", "Using Bayes' theorem we can gain a better intuition about Ridge and Lasso regression. \n", "\n", "For ordinary least squares we postulated that the maximum likelihood for the doamin of events $\\boldsymbol{D}$ (one-dimensional case)" diff --git a/doc/LectureNotes/_build/html/_sources/chapter3.ipynb b/doc/LectureNotes/_build/html/_sources/chapter3.ipynb index d7f8222d5..b2933e098 100644 --- a/doc/LectureNotes/_build/html/_sources/chapter3.ipynb +++ b/doc/LectureNotes/_build/html/_sources/chapter3.ipynb @@ -575,196 +575,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Various steps in cross-validation\n", - "\n", - "When the repetitive splitting of the data set is done randomly,\n", - "samples may accidently end up in a fast majority of the splits in\n", - "either training or test set. Such samples may have an unbalanced\n", - "influence on either model building or prediction evaluation. To avoid\n", - "this $k$-fold cross-validation structures the data splitting. The\n", - "samples are divided into $k$ more or less equally sized exhaustive and\n", - "mutually exclusive subsets. In turn (at each split) one of these\n", - "subsets plays the role of the test set while the union of the\n", - "remaining subsets constitutes the training set. Such a splitting\n", - "warrants a balanced representation of each sample in both training and\n", - "test set over the splits. Still the division into the $k$ subsets\n", - "involves a degree of randomness. This may be fully excluded when\n", - "choosing $k=n$. This particular case is referred to as leave-one-out\n", - "cross-validation (LOOCV). \n", - "\n", - "\n", - "* Define a range of interest for the penalty parameter.\n", - "\n", - "* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", - "\n", - "* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\boldsymbol{\\sigma}_{-i}^2(\\lambda)$, as" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "\\begin{align*}\n", - "\\boldsymbol{\\beta}_{-i}(\\lambda) & = ( \\boldsymbol{X}_{-i, \\ast}^{T}\n", - "\\boldsymbol{X}_{-i, \\ast} + \\lambda \\boldsymbol{I}_{pp})^{-1}\n", - "\\boldsymbol{X}_{-i, \\ast}^{T} \\boldsymbol{y}_{-i}\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\boldsymbol{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\boldsymbol{X}_{i, \\ast} \\boldsymbol{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", - "\n", - "* Repeat the first three steps such that each sample plays the role of the test set once.\n", - "\n", - "* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "\\begin{align*}\n", - "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}.\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For the various values of $k$\n", - "\n", - "1. shuffle the dataset randomly.\n", - "\n", - "2. Split the dataset into $k$ groups.\n", - "\n", - "3. For each unique group:\n", - "\n", - "a. Decide which group to use as set for test data\n", - "\n", - "b. Take the remaining groups as a training data set\n", - "\n", - "c. Fit a model on the training set and evaluate it on the test set\n", - "\n", - "d. Retain the evaluation score and discard the model\n", - "\n", - "\n", - "5. Summarize the model using the sample of model evaluation scores\n", - "\n", - "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import KFold\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.model_selection import cross_val_score\n", - "from sklearn.preprocessing import PolynomialFeatures\n", - "\n", - "# A seed just to ensure that the random numbers are the same for every run.\n", - "# Useful for eventual debugging.\n", - "np.random.seed(3155)\n", - "\n", - "# Generate the data.\n", - "nsamples = 100\n", - "x = np.random.randn(nsamples)\n", - "y = 3*x**2 + np.random.randn(nsamples)\n", - "\n", - "## Cross-validation on Ridge regression using KFold only\n", - "\n", - "# Decide degree on polynomial to fit\n", - "poly = PolynomialFeatures(degree = 6)\n", - "\n", - "# Decide which values of lambda to use\n", - "nlambdas = 500\n", - "lambdas = np.logspace(-3, 5, nlambdas)\n", - "\n", - "# Initialize a KFold instance\n", - "k = 5\n", - "kfold = KFold(n_splits = k)\n", - "\n", - "# Perform the cross-validation to estimate MSE\n", - "scores_KFold = np.zeros((nlambdas, k))\n", - "\n", - "i = 0\n", - "for lmb in lambdas:\n", - " ridge = Ridge(alpha = lmb)\n", - " j = 0\n", - " for train_inds, test_inds in kfold.split(x):\n", - " xtrain = x[train_inds]\n", - " ytrain = y[train_inds]\n", - "\n", - " xtest = x[test_inds]\n", - " ytest = y[test_inds]\n", - "\n", - " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", - " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", - "\n", - " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", - " ypred = ridge.predict(Xtest)\n", - "\n", - " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", - "\n", - " j += 1\n", - " i += 1\n", - "\n", - "\n", - "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", - "\n", - "## Cross-validation using cross_val_score from sklearn along with KFold\n", - "\n", - "# kfold is an instance initialized above as:\n", - "# kfold = KFold(n_splits = k)\n", - "\n", - "estimated_mse_sklearn = np.zeros(nlambdas)\n", - "i = 0\n", - "for lmb in lambdas:\n", - " ridge = Ridge(alpha = lmb)\n", - "\n", - " X = poly.fit_transform(x[:, np.newaxis])\n", - " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", - "\n", - " # cross_val_score return an array containing the estimated negative mse for every fold.\n", - " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", - " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", - "\n", - " i += 1\n", - "\n", - "## Plot and compare the slightly different ways to perform cross-validation\n", - "\n", - "plt.figure()\n", - "\n", - "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", - "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", - "\n", - "plt.xlabel('log10(lambda)')\n", - "plt.ylabel('mse')\n", - "\n", - "plt.legend()\n", - "\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1221,6 +1031,203 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cross-validation\n", + "\n", + "When the repetitive splitting of the data set is done randomly,\n", + "samples may accidently end up in a fast majority of the splits in\n", + "either training or test set. Such samples may have an unbalanced\n", + "influence on either model building or prediction evaluation. To avoid\n", + "this $k$-fold cross-validation structures the data splitting. The\n", + "samples are divided into $k$ more or less equally sized exhaustive and\n", + "mutually exclusive subsets. In turn (at each split) one of these\n", + "subsets plays the role of the test set while the union of the\n", + "remaining subsets constitutes the training set. Such a splitting\n", + "warrants a balanced representation of each sample in both training and\n", + "test set over the splits. Still the division into the $k$ subsets\n", + "involves a degree of randomness. This may be fully excluded when\n", + "choosing $k=n$. This particular case is referred to as leave-one-out\n", + "cross-validation (LOOCV). \n", + "\n", + "\n", + "* Define a range of interest for the penalty parameter.\n", + "\n", + "* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", + "\n", + "* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\boldsymbol{\\sigma}_{-i}^2(\\lambda)$, as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\boldsymbol{\\beta}_{-i}(\\lambda) & = ( \\boldsymbol{X}_{-i, \\ast}^{T}\n", + "\\boldsymbol{X}_{-i, \\ast} + \\lambda \\boldsymbol{I}_{pp})^{-1}\n", + "\\boldsymbol{X}_{-i, \\ast}^{T} \\boldsymbol{y}_{-i}\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\boldsymbol{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\boldsymbol{X}_{i, \\ast} \\boldsymbol{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", + "\n", + "* Repeat the first three steps such that each sample plays the role of the test set once.\n", + "\n", + "* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the various values of $k$\n", + "\n", + "1. shuffle the dataset randomly.\n", + "\n", + "2. Split the dataset into $k$ groups.\n", + "\n", + "3. For each unique group:\n", + "\n", + "a. Decide which group to use as set for test data\n", + "\n", + "b. Take the remaining groups as a training data set\n", + "\n", + "c. Fit a model on the training set and evaluate it on the test set\n", + "\n", + "d. Retain the evaluation score and discard the model\n", + "\n", + "\n", + "5. Summarize the model using the sample of model evaluation scores\n", + "\n", + "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.linear_model import Ridge\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "# A seed just to ensure that the random numbers are the same for every run.\n", + "# Useful for eventual debugging.\n", + "np.random.seed(3155)\n", + "\n", + "# Generate the data.\n", + "nsamples = 100\n", + "x = np.random.randn(nsamples)\n", + "y = 3*x**2 + np.random.randn(nsamples)\n", + "\n", + "## Cross-validation on Ridge regression using KFold only\n", + "\n", + "# Decide degree on polynomial to fit\n", + "poly = PolynomialFeatures(degree = 6)\n", + "\n", + "# Decide which values of lambda to use\n", + "nlambdas = 500\n", + "lambdas = np.logspace(-3, 5, nlambdas)\n", + "\n", + "# Initialize a KFold instance\n", + "k = 5\n", + "kfold = KFold(n_splits = k)\n", + "\n", + "# Perform the cross-validation to estimate MSE\n", + "scores_KFold = np.zeros((nlambdas, k))\n", + "\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + " j = 0\n", + " for train_inds, test_inds in kfold.split(x):\n", + " xtrain = x[train_inds]\n", + " ytrain = y[train_inds]\n", + "\n", + " xtest = x[test_inds]\n", + " ytest = y[test_inds]\n", + "\n", + " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", + " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", + "\n", + " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", + " ypred = ridge.predict(Xtest)\n", + "\n", + " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", + "\n", + " j += 1\n", + " i += 1\n", + "\n", + "\n", + "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", + "\n", + "## Cross-validation using cross_val_score from sklearn along with KFold\n", + "\n", + "# kfold is an instance initialized above as:\n", + "# kfold = KFold(n_splits = k)\n", + "\n", + "estimated_mse_sklearn = np.zeros(nlambdas)\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + "\n", + " X = poly.fit_transform(x[:, np.newaxis])\n", + " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", + "\n", + " # cross_val_score return an array containing the estimated negative mse for every fold.\n", + " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", + " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", + "\n", + " i += 1\n", + "\n", + "## Plot and compare the slightly different ways to perform cross-validation\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", + "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", + "\n", + "plt.xlabel('log10(lambda)')\n", + "plt.ylabel('mse')\n", + "\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More examples of the application of cross-validation follow here." + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/doc/LectureNotes/_build/html/_sources/chapter4.ipynb b/doc/LectureNotes/_build/html/_sources/chapter4.ipynb index 7cd60a191..81b9d76c8 100644 --- a/doc/LectureNotes/_build/html/_sources/chapter4.ipynb +++ b/doc/LectureNotes/_build/html/_sources/chapter4.ipynb @@ -7,8 +7,6 @@ "# Logistic Regression\n", "\n", "\n", - "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK3155/h20/forelesningsvideoer/LectureSeptember18.mp4?vrtx=view-as-webpage)\n", - "\n", "\n", "## Logistic Regression\n", "\n", @@ -911,7 +909,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Optimization, the central part of any Machine Learning algortithm\n", + "# Optimization, the central part of any Machine Learning algortithm\n", "\n", "Almost every problem in machine learning and data science starts with\n", "a dataset $X$, a model $g(\\beta)$, which is a function of the\n", @@ -924,7 +922,6 @@ "\n", "\n", "\n", - "## Revisiting our Logistic Regression case\n", "\n", "In our discussion on Logistic Regression we studied the \n", "case of\n", @@ -953,7 +950,6 @@ "where $\\boldsymbol{\\beta}$ are the weights we wish to extract from data, in our case $\\beta_0$ and $\\beta_1$. \n", "\n", "\n", - "## The equations to solve\n", "\n", "Our compact equations used a definition of a vector $\\boldsymbol{y}$ with $n$\n", "elements $y_i$, an $n\\times p$ matrix $\\boldsymbol{X}$ which contains the\n", @@ -995,7 +991,6 @@ "This defines what is called the Hessian matrix.\n", "\n", "\n", - "## Solving using Newton-Raphson's method\n", "\n", "If we can set up these equations, Newton-Raphson's iterative method is normally the method of choice. It requires however that we can compute in an efficient way the matrices that define the first and second derivatives. \n", "\n", @@ -1036,9 +1031,6 @@ "If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. \n", "\n", "\n", - "\n", - "## Brief reminder on Newton-Raphson's method\n", - "\n", "Let us quickly remind ourselves how we derive the above method.\n", "\n", "Perhaps the most celebrated of all one-dimensional root-finding\n", @@ -1050,7 +1042,6 @@ "normally discourage the use of this method.\n", "\n", "\n", - "## The equations\n", "\n", "The Newton-Raphson formula consists geometrically of extending the\n", "tangent line at a current point until it crosses zero, then setting\n", @@ -1125,8 +1116,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Simple geometric interpretation\n", - "\n", "The above is Newton-Raphson's method. It has a simple geometric\n", "interpretation, namely $x_{n+1}$ is the point where the tangent from\n", "$(x_n,f(x_n))$ crosses the $x$-axis. Close to the solution,\n", @@ -1141,7 +1130,6 @@ "\n", "\n", "\n", - "## Extending to more than one variable\n", "\n", "Newton's method can be generalized to systems of several non-linear equations\n", "and variables. Consider the case with two equations" @@ -1278,8 +1266,6 @@ "we are always moving towards smaller function values, i.e a minimum.\n", "\n", "\n", - "## More on Steepest descent\n", - "\n", "The previous observation is the basis of the method of steepest\n", "descent, which is also referred to as just gradient descent (GD). One\n", "starts with an initial guess $\\mathbf{x}_0$ for a minimum of $F$ and\n", @@ -1303,8 +1289,6 @@ "the learning rate within the context of Machine Learning.\n", "\n", "\n", - "## The ideal\n", - "\n", "Ideally the sequence $\\{\\mathbf{x}_k \\}_{k=0}$ converges to a global\n", "minimum of the function $F$. In general we do not know if we are in a\n", "global or local minimum. In the special case when $F$ is a convex\n", @@ -1325,7 +1309,6 @@ "\n", "\n", "\n", - "## The sensitiveness of the gradient descent\n", "\n", "The gradient descent method \n", "is sensitive to the choice of learning rate $\\gamma_k$. This is due\n", @@ -1356,13 +1339,10 @@ "regular polygons (triangles, rectangles, pentagons, etc...).\n", "\n", "\n", - "## Convex function\n", "\n", "**Convex function**: Let $X \\subset \\mathbb{R}^n$ be a convex set. Assume that the function $f: X \\rightarrow \\mathbb{R}$ is continuous, then $f$ is said to be convex if $$f(tx_1 + (1-t)x_2) \\leq tf(x_1) + (1-t)f(x_2) $$ for all $x_1, x_2 \\in X$ and for all $t \\in [0,1]$. If $\\leq$ is replaced with a strict inequaltiy in the definition, we demand $x_1 \\neq x_2$ and $t\\in(0,1)$ then $f$ is said to be strictly convex. For a single variable function, convexity means that if you draw a straight line connecting $f(x_1)$ and $f(x_2)$, the value of the function on the interval $[x_1,x_2]$ is always below the line as illustrated below.\n", "\n", "\n", - "## Conditions on convex functions\n", - "\n", "In the following we state first and second-order conditions which\n", "ensures convexity of a function $f$. We write $D_f$ to denote the\n", "domain of $f$, i.e the subset of $R^n$ where $f$ is defined. For more\n", @@ -1395,7 +1375,6 @@ "This condition is particularly useful since it gives us an procedure for determining if the function under consideration is convex, apart from using the definition.\n", "\n", "\n", - "## More on convex functions\n", "\n", "The next result is of great importance to us and the reason why we are\n", "going on about convex functions. In machine learning we frequently\n", @@ -1418,7 +1397,7 @@ "This result means that if we know that the cost/loss function is convex and we are able to find a minimum, we are guaranteed that it is a global minimum.\n", "\n", "\n", - "## Some simple problems\n", + "### Some simple problems\n", "\n", "1. Show that $f(x)=x^2$ is convex for $x \\in \\mathbb{R}$ using the definition of convexity. Hint: If you re-write the definition, $f$ is convex if the following holds for all $x,y \\in D_f$ and any $\\lambda \\in [0,1]$ $\\lambda f(x)+(1-\\lambda)f(y)-f(\\lambda x + (1-\\lambda) y ) \\geq 0$.\n", "\n", @@ -1443,13 +1422,6 @@ "Using the definition of convexity, try to show that a function satisfying the properties above is convex (the third condition is not needed to show this).\n", "\n", "\n", - "\n", - "## Friday September 25\n", - "\n", - "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureSeptember25.mp4?vrtx=view-as-webpage) and [link to handwritten notes](https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/NotesSeptember25.pdf).\n", - "\n", - "\n", - "\n", "## Standard steepest descent\n", "\n", "\n", @@ -1498,7 +1470,6 @@ "When we have found the exact solution, $\\boldsymbol{r}=0$.\n", "\n", "\n", - "## Gradient method\n", "\n", "The residual is zero when we reach the minimum of the quadratic equation" ] @@ -1520,9 +1491,6 @@ "symmetric. This defines also the Hessian and we want it to be positive definite. \n", "\n", "\n", - "\n", - "## Steepest descent method\n", - "\n", "We denote the initial guess for $\\boldsymbol{x}$ as $\\boldsymbol{x}_0$. \n", "We can assume without loss of generality that" ] @@ -1559,8 +1527,6 @@ "instead.\n", "\n", "\n", - "\n", - "## Steepest descent method\n", "One can show that the solution $\\boldsymbol{x}$ is also the unique minimizer of the quadratic form" ] }, @@ -1599,9 +1565,6 @@ "$\\boldsymbol{x}_0=0$ it is equal $-\\boldsymbol{b}$.\n", "\n", "\n", - "\n", - "\n", - "## Final expressions\n", "We can compute the residual iteratively as" ] }, @@ -1678,13 +1641,6 @@ "$$" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Steepest descent example" - ] - }, { "cell_type": "code", "execution_count": null, @@ -1848,10 +1804,6 @@ "Two vectors are conjugate if they are orthogonal with respect to \n", "this inner product. Being conjugate is a symmetric relation: if $\\boldsymbol{s}$ is conjugate to $\\boldsymbol{t}$, then $\\boldsymbol{t}$ is conjugate to $\\boldsymbol{s}$.\n", "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "An example is given by the eigenvectors of the matrix" ] }, @@ -1868,13 +1820,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "which is zero unless $i=j$.\n", + "which is zero unless $i=j$. \n", "\n", - "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "Assume now that we have a symmetric positive-definite matrix $\\boldsymbol{A}$ of size\n", "$n\\times n$. At each iteration $i+1$ we obtain the conjugate direction of a vector" ] @@ -1910,7 +1857,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Conjugate gradient method\n", "The coefficients are given by" ] }, @@ -1959,8 +1905,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Conjugate gradient method and iterations\n", - "\n", "If we choose the conjugate vectors $\\boldsymbol{p}_k$ carefully, \n", "then we may not need all of them to obtain a good approximation to the solution \n", "$\\boldsymbol{x}$. \n", @@ -2003,11 +1947,6 @@ "source": [ "instead.\n", "\n", - "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "One can show that the solution $\\boldsymbol{x}$ is also the unique minimizer of the quadratic form" ] }, @@ -2047,11 +1986,6 @@ "The other vectors in the basis will be conjugate to the gradient, \n", "hence the name conjugate gradient method.\n", "\n", - "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "Let $\\boldsymbol{r}_k$ be the residual at the $k$-th step:" ] }, @@ -2090,7 +2024,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Conjugate gradient method\n", "We can also compute the residual iteratively as" ] }, @@ -2155,14 +2088,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Revisiting our first homework\n", + "## Revisiting our Linear Regression Solvers\n", "\n", "We will use linear regression as a case study for the gradient descent\n", "methods. Linear regression is a great test case for the gradient\n", "descent methods discussed in the lectures since it has several\n", "desirable properties such as:\n", "\n", - "1. An analytical solution (recall homework set 1).\n", + "1. An analytical solution.\n", "\n", "2. The gradient can be computed analytically.\n", "\n", @@ -2221,8 +2154,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Gradient descent example\n", - "\n", "Let $\\mathbf{y} = (y_1,\\cdots,y_n)^T$, $\\mathbf{\\boldsymbol{y}} = (\\boldsymbol{y}_1,\\cdots,\\boldsymbol{y}_n)^T$ and $\\beta = (\\beta_0, \\beta_1)^T$\n", "\n", "It is convenient to write $\\mathbf{\\boldsymbol{y}} = X\\beta$ where $X \\in \\mathbb{R}^{100 \\times 2} $ is the design matrix given by (we keep the intercept here)" @@ -2264,8 +2195,6 @@ "and we want to find $\\beta$ such that $C(\\beta)$ is minimized.\n", "\n", "\n", - "## The derivative of the cost/loss function\n", - "\n", "Computing $\\partial C(\\beta) / \\partial \\beta_0$ and $\\partial C(\\beta) / \\partial \\beta_1$ we can show that the gradient can be written as" ] }, @@ -2287,7 +2216,6 @@ "where $X$ is the design matrix defined above.\n", "\n", "\n", - "## The Hessian matrix\n", "The Hessian matrix of $C(\\beta)$ is given by" ] }, @@ -2311,10 +2239,6 @@ "\n", "\n", "\n", - "\n", - "\n", - "## Simple program\n", - "\n", "We can now write a program that minimizes $C(\\beta)$ using the gradient descent method with a constant learning rate $\\gamma$ according to" ] }, @@ -2339,9 +2263,8 @@ "$\\beta= (X^TX)^{-1} X^T \\mathbf{y}$.\n", "\n", "\n", - "## Gradient Descent Example\n", "\n", - "Here our simple example" + "Here is our simple example" ] }, { @@ -2405,7 +2328,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## And a corresponding example using **scikit-learn**" + "Alternatively, we can use **Scikit-Learn** as done here" ] }, { @@ -2439,8 +2362,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Gradient descent and Ridge\n", - "\n", "We have also discussed Ridge regression where the loss function contains a regularized term given by the $L_2$ norm of $\\beta$," ] }, @@ -2487,13 +2408,6 @@ "$$" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Program example for gradient descent with Ridge Regression" - ] - }, { "cell_type": "code", "execution_count": null, @@ -2590,8 +2504,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Computation of gradients\n", - "\n", "This in turn means that the gradient can be\n", "computed as a sum over $i$-gradients" ] @@ -2617,7 +2529,7 @@ "$k=1,\\cdots,n/M$.\n", "\n", "\n", - "## SGD example\n", + "\n", "As an example, suppose we have $10$ data points $(\\mathbf{x}_1,\\cdots, \\mathbf{x}_{10})$ \n", "and we choose to have $M=5$ minibathces,\n", "then each minibatch contains two data points. In particular we have\n", @@ -2648,8 +2560,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## The gradient step\n", - "\n", "Thus a gradient descent step now looks like" ] }, @@ -2671,10 +2581,7 @@ "probability from $[1,n/M]$. An iteration over the number of\n", "minibathces (n/M) is commonly referred to as an epoch. Thus it is\n", "typical to choose a number of epochs and for each epoch iterate over\n", - "the number of minibatches, as exemplified in the code below.\n", - "\n", - "\n", - "## Simple example code" + "the number of minibatches, as exemplified in the code below." ] }, { @@ -2715,7 +2622,6 @@ "all $n$ datapoints.\n", "\n", "\n", - "## When do we stop?\n", "\n", "A natural question is when do we stop the search for a new minimum?\n", "One possibility is to compute the full gradient after a given number\n", @@ -2729,7 +2635,6 @@ "gave the lowest value.\n", "\n", "\n", - "## Slightly different approach\n", "\n", "Another approach is to let the step length $\\gamma_j$ depend on the\n", "number of epochs in such a way that it becomes very small after a\n", @@ -2783,7 +2688,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Program for stochastic gradient" + "### Program for stochastic gradient" ] }, { @@ -2865,7 +2770,922 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Challenge**: try to write a similar code for a Logistic Regression case." + "## Momentum based GD\n", + "\n", + "The stochastic gradient descent (SGD) is almost always used with a\n", + "*momentum* or inertia term that serves as a memory of the direction we\n", + "are moving in parameter space. This is typically implemented as\n", + "follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t) \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\boldsymbol{\\theta}_{t+1}= \\boldsymbol{\\theta}_t -\\mathbf{v}_{t},\n", + "\\label{_auto2} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have introduced a momentum parameter $\\gamma$, with\n", + "$0\\le\\gamma\\le 1$, and for brevity we dropped the explicit notation to\n", + "indicate the gradient is to be taken over a different mini-batch at\n", + "each step. We call this algorithm gradient descent with momentum\n", + "(GDM). From these equations, it is clear that $\\mathbf{v}_t$ is a\n", + "running average of recently encountered gradients and\n", + "$(1-\\gamma)^{-1}$ sets the characteristic time scale for the memory\n", + "used in the averaging procedure. Consistent with this, when\n", + "$\\gamma=0$, this just reduces down to ordinary SGD as discussed\n", + "earlier. An equivalent way of writing the updates is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta \\boldsymbol{\\theta}_{t+1} = \\gamma \\Delta \\boldsymbol{\\theta}_t -\\ \\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have defined $\\Delta \\boldsymbol{\\theta}_{t}= \\boldsymbol{\\theta}_t-\\boldsymbol{\\theta}_{t-1}$.\n", + "\n", + "\n", + "\n", + "Let us try to get more intuition from these equations. It is helpful\n", + "to consider a simple physical analogy with a particle of mass $m$\n", + "moving in a viscous medium with drag coefficient $\\mu$ and potential\n", + "$E(\\mathbf{w})$. If we denote the particle's position by $\\mathbf{w}$,\n", + "then its motion is described by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m {d^2 \\mathbf{w} \\over dt^2} + \\mu {d \\mathbf{w} \\over dt }= -\\nabla_w E(\\mathbf{w}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can discretize this equation in the usual way to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m { \\mathbf{w}_{t+\\Delta t}-2 \\mathbf{w}_{t} +\\mathbf{w}_{t-\\Delta t} \\over (\\Delta t)^2}+\\mu {\\mathbf{w}_{t+\\Delta t}- \\mathbf{w}_{t} \\over \\Delta t} = -\\nabla_w E(\\mathbf{w}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rearranging this equation, we can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta \\mathbf{w}_{t +\\Delta t}= - { (\\Delta t)^2 \\over m +\\mu \\Delta t} \\nabla_w E(\\mathbf{w})+ {m \\over m +\\mu \\Delta t} \\Delta \\mathbf{w}_t.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that this equation is identical to previous one if we identify\n", + "the position of the particle, $\\mathbf{w}$, with the parameters\n", + "$\\boldsymbol{\\theta}$. This allows us to identify the momentum\n", + "parameter and learning rate with the mass of the particle and the\n", + "viscous drag as:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\gamma= {m \\over m +\\mu \\Delta t }, \\qquad \\eta = {(\\Delta t)^2 \\over m +\\mu \\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, as the name suggests, the momentum parameter is proportional to\n", + "the mass of the particle and effectively provides inertia.\n", + "Furthermore, in the large viscosity/small learning rate limit, our\n", + "memory time scales as $(1-\\gamma)^{-1} \\approx m/(\\mu \\Delta t)$.\n", + "\n", + "Why is momentum useful? SGD momentum helps the gradient descent\n", + "algorithm gain speed in directions with persistent but small gradients\n", + "even in the presence of stochasticity, while suppressing oscillations\n", + "in high-curvature directions. This becomes especially important in\n", + "situations where the landscape is shallow and flat in some directions\n", + "and narrow and steep in others. It has been argued that first-order\n", + "methods (with appropriate initial conditions) can perform comparable\n", + "to more expensive second order methods, especially in the context of\n", + "complex deep learning models.\n", + "\n", + "These beneficial properties of momentum can sometimes become even more\n", + "pronounced by using a slight modification of the classical momentum\n", + "algorithm called Nesterov Accelerated Gradient (NAG).\n", + "\n", + "In the NAG algorithm, rather than calculating the gradient at the\n", + "current parameters, $\\nabla_\\theta E(\\boldsymbol{\\theta}_t)$, one\n", + "calculates the gradient at the expected value of the parameters given\n", + "our current momentum, $\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma\n", + "\\mathbf{v}_{t-1})$. This yields the NAG update rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma \\mathbf{v}_{t-1}) \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\boldsymbol{\\theta}_{t+1}= \\boldsymbol{\\theta}_t -\\mathbf{v}_{t}.\n", + "\\label{_auto3} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the major advantages of NAG is that it allows for the use of a larger learning rate than GDM for the same choice of $\\gamma$.\n", + "\n", + "\n", + "\n", + "In stochastic gradient descent, with and without momentum, we still\n", + "have to specify a schedule for tuning the learning rates $\\eta_t$\n", + "as a function of time. As discussed in the context of Newton's\n", + "method, this presents a number of dilemmas. The learning rate is\n", + "limited by the steepest direction which can change depending on the\n", + "current position in the landscape. To circumvent this problem, ideally\n", + "our algorithm would keep track of curvature and take large steps in\n", + "shallow, flat directions and small steps in steep, narrow directions.\n", + "Second-order methods accomplish this by calculating or approximating\n", + "the Hessian and normalizing the learning rate by the\n", + "curvature. However, this is very computationally expensive for\n", + "extremely large models. Ideally, we would like to be able to\n", + "adaptively change the step size to match the landscape without paying\n", + "the steep computational price of calculating or approximating\n", + "Hessians.\n", + "\n", + "Recently, a number of methods have been introduced that accomplish\n", + "this by tracking not only the gradient, but also the second moment of\n", + "the gradient. These methods include AdaGrad, AdaDelta, RMS-Prop, and\n", + "ADAM.\n", + "\n", + "\n", + "### RMS prop\n", + "\n", + "In RMS prop, in addition to keeping a running average of the first\n", + "moment of the gradient, we also keep track of the second moment\n", + "denoted by $\\mathbf{s}_t=\\mathbb{E}[\\mathbf{g}_t^2]$. The update rule\n", + "for RMS prop is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathbf{g}_t = \\nabla_\\theta E(\\boldsymbol{\\theta}) \n", + "\\label{_auto4} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{s}_t =\\beta \\mathbf{s}_{t-1} +(1-\\beta)\\mathbf{g}_t^2 \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\mathbf{g}_t \\over \\sqrt{\\mathbf{s}_t +\\epsilon}}, \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\beta$ controls the averaging time of the second moment and is\n", + "typically taken to be about $\\beta=0.9$, $\\eta_t$ is a learning rate\n", + "typically chosen to be $10^{-3}$, and $\\epsilon\\sim 10^{-8} $ is a\n", + "small regularization constant to prevent divergences. Multiplication\n", + "and division by vectors is understood as an element-wise operation. It\n", + "is clear from this formula that the learning rate is reduced in\n", + "directions where the norm of the gradient is consistently large. This\n", + "greatly speeds up the convergence by allowing us to use a larger\n", + "learning rate for flat directions.\n", + "\n", + "### ADAM optimizer\n", + "\n", + "A related algorithm is the ADAM optimizer. In ADAM, we keep a running\n", + "average of both the first and second moment of the gradient and use\n", + "this information to adaptively change the learning rate for different\n", + "parameters. In addition to keeping a running average of the first and\n", + "second moments of the gradient\n", + "(i.e. $\\mathbf{m}_t=\\mathbb{E}[\\mathbf{g}_t]$ and\n", + "$\\mathbf{s}_t=\\mathbb{E}[\\mathbf{g}^2_t]$, respectively), ADAM\n", + "performs an additional bias correction to account for the fact that we\n", + "are estimating the first two moments of the gradient using a running\n", + "average (denoted by the hats in the update rule below). The update\n", + "rule for ADAM is given by (where multiplication and division are once\n", + "again understood to be element-wise operations below)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathbf{g}_t = \\nabla_\\theta E(\\boldsymbol{\\theta}) \n", + "\\label{_auto5} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{m}_t = \\beta_1 \\mathbf{m}_{t-1} + (1-\\beta_1) \\mathbf{g}_t \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{s}_t =\\beta_2 \\mathbf{s}_{t-1} +(1-\\beta_2)\\mathbf{g}_t^2 \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\mathbf{m}}_t={\\mathbf{m}_t \\over 1-\\beta_1^t} \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\mathbf{s}}_t ={\\mathbf{s}_t \\over1-\\beta_2^t} \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\boldsymbol{\\mathbf{m}}_t \\over \\sqrt{\\boldsymbol{\\mathbf{s}}_t} +\\epsilon}, \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\label{_auto6} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\beta_1$ and $\\beta_2$ set the memory lifetime of the first and\n", + "second moment and are typically taken to be $0.9$ and $0.99$\n", + "respectively, and $\\eta$ and $\\epsilon$ are identical to RMSprop.\n", + "\n", + "Like in RMSprop, the effective step size of a parameter depends on the\n", + "magnitude of its gradient squared. To understand this better, let us\n", + "rewrite this expression in terms of the variance\n", + "$\\boldsymbol{\\sigma}_t^2 = \\boldsymbol{\\mathbf{s}}_t -\n", + "(\\boldsymbol{\\mathbf{m}}_t)^2$. Consider a single parameter $\\theta_t$. The\n", + "update rule for this parameter is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta \\theta_{t+1}= -\\eta_t { \\boldsymbol{m}_t \\over \\sqrt{\\sigma_t^2 + m_t^2 }+\\epsilon}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Practical tips\n", + "\n", + "* **Randomize the data when making mini-batches**. It is always important to randomly shuffle the data when forming mini-batches. Otherwise, the gradient descent method can fit spurious correlations resulting from the order in which data is presented.\n", + "\n", + "* **Transform your inputs**. Learning becomes difficult when our landscape has a mixture of steep and flat directions. One simple trick for minimizing these situations is to standardize the data by subtracting the mean and normalizing the variance of input variables. Whenever possible, also decorrelate the inputs. To understand why this is helpful, consider the case of linear regression. It is easy to show that for the squared error cost function, the Hessian of the cost function is just the correlation matrix between the inputs. Thus, by standardizing the inputs, we are ensuring that the landscape looks homogeneous in all directions in parameter space. Since most deep networks can be viewed as linear transformations followed by a non-linearity at each layer, we expect this intuition to hold beyond the linear case.\n", + "\n", + "* **Monitor the out-of-sample performance.** Always monitor the performance of your model on a validation set (a small portion of the training data that is held out of the training process to serve as a proxy for the test set. If the validation error starts increasing, then the model is beginning to overfit. Terminate the learning process. This *early stopping* significantly improves performance in many settings.\n", + "\n", + "* **Adaptive optimization methods don't always have good generalization.** Recent studies have shown that adaptive methods such as ADAM, RMSPorp, and AdaGrad tend to have poor generalization compared to SGD or SGD with momentum, particularly in the high-dimensional limit (i.e. the number of parameters exceeds the number of data points). Although it is not clear at this stage why these methods perform so well in training deep neural networks, simpler procedures like properly-tuned SGD may work as well or better in these applications.\n", + "\n", + "## Automatic differentiation\n", + "\n", + "[Automatic differentiation (AD)](https://en.wikipedia.org/wiki/Automatic_differentiation), \n", + "also called algorithmic\n", + "differentiation or computational differentiation,is a set of\n", + "techniques to numerically evaluate the derivative of a function\n", + "specified by a computer program. AD exploits the fact that every\n", + "computer program, no matter how complicated, executes a sequence of\n", + "elementary arithmetic operations (addition, subtraction,\n", + "multiplication, division, etc.) and elementary functions (exp, log,\n", + "sin, cos, etc.). By applying the chain rule repeatedly to these\n", + "operations, derivatives of arbitrary order can be computed\n", + "automatically, accurately to working precision, and using at most a\n", + "small constant factor more arithmetic operations than the original\n", + "program.\n", + "\n", + "Automatic differentiation is neither:\n", + "\n", + "* Symbolic differentiation, nor\n", + "\n", + "* Numerical differentiation (the method of finite differences).\n", + "\n", + "Symbolic differentiation can lead to inefficient code and faces the\n", + "difficulty of converting a computer program into a single expression,\n", + "while numerical differentiation can introduce round-off errors in the\n", + "discretization process and cancellation\n", + "\n", + "\n", + "\n", + "Python has tools for so-called **automatic differentiation**.\n", + "Consider the following example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(x) = \\sin\\left(2\\pi x + x^2\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which has the following derivative" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using **autograd** we have" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "\n", + "# To do elementwise differentiation:\n", + "from autograd import elementwise_grad as egrad \n", + "\n", + "# To plot:\n", + "import matplotlib.pyplot as plt \n", + "\n", + "\n", + "def f(x):\n", + " return np.sin(2*np.pi*x + x**2)\n", + "\n", + "def f_grad_analytic(x):\n", + " return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)\n", + "\n", + "# Do the comparison:\n", + "x = np.linspace(0,1,1000)\n", + "\n", + "f_grad = egrad(f)\n", + "\n", + "computed = f_grad(x)\n", + "analytic = f_grad_analytic(x)\n", + "\n", + "plt.title('Derivative computed from Autograd compared with the analytical derivative')\n", + "plt.plot(x,computed,label='autograd')\n", + "plt.plot(x,analytic,label='analytic')\n", + "\n", + "plt.xlabel('x')\n", + "plt.ylabel('y')\n", + "plt.legend()\n", + "\n", + "plt.show()\n", + "\n", + "print(\"The max absolute difference is: %g\"%(np.max(np.abs(computed - analytic))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we\n", + "experiment with what kind of functions Autograd is capable\n", + "of finding the gradient of. The following Python functions are just\n", + "meant to illustrate what Autograd can do, but please feel free to\n", + "experiment with other, possibly more complicated, functions as well." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "\n", + "def f1(x):\n", + " return x**3 + 1\n", + "\n", + "f1_grad = grad(f1)\n", + "\n", + "# Remember to send in float as argument to the computed gradient from Autograd!\n", + "a = 1.0\n", + "\n", + "# See the evaluated gradient at a using autograd:\n", + "print(\"The gradient of f1 evaluated at a = %g using autograd is: %g\"%(a,f1_grad(a)))\n", + "\n", + "# Compare with the analytical derivative, that is f1'(x) = 3*x**2 \n", + "grad_analytical = 3*a**2\n", + "print(\"The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g\"%(a,grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To differentiate with respect to two (or more) arguments of a Python\n", + "function, Autograd need to know at which variable the function if\n", + "being differentiated with respect to." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f2(x1,x2):\n", + " return 3*x1**3 + x2*(x1 - 5) + 1\n", + "\n", + "# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1\n", + "f2_grad_x1 = grad(f2,0)\n", + "\n", + "# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad\n", + "f2_grad_x2 = grad(f2,1)\n", + "\n", + "x1 = 1.0\n", + "x2 = 3.0 \n", + "\n", + "print(\"Evaluating at x1 = %g, x2 = %g\"%(x1,x2))\n", + "print(\"-\"*30)\n", + "\n", + "# Compare with the analytical derivatives:\n", + "\n", + "# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:\n", + "f2_grad_x1_analytical = 9*x1**2 + x2\n", + "\n", + "# Derivative of f2 w.r.t x2 is: x1 - 5:\n", + "f2_grad_x2_analytical = x1 - 5\n", + "\n", + "# See the evaluated derivations:\n", + "print(\"The derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "\n", + "print()\n", + "\n", + "print(\"The derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f3(x): # Assumes x is an array of length 5 or higher\n", + " return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2\n", + "\n", + "f3_grad = grad(f3)\n", + "\n", + "x = np.linspace(0,4,5)\n", + "\n", + "# Print the computed gradient:\n", + "print(\"The computed gradient of f3 is: \", f3_grad(x))\n", + "\n", + "# The analytical gradient is: (2, 3, 5, 7, 22*x[4])\n", + "f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f3 is: \", f3_grad_analytical)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in this case, when sending an array as input argument, the\n", + "output from Autograd is another array. This is the true gradient of\n", + "the function, as opposed to the function in the previous example. By\n", + "using arrays to represent the variables, the output from Autograd\n", + "might be easier to work with, as the output is closer to what one\n", + "could expect form a gradient-evaluting function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f4(x):\n", + " return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)\n", + "\n", + "f4_grad = grad(f4)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f4 at x = %g is: %g\"%(x,f4_grad(x)))\n", + "\n", + "# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi\n", + "f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f4 at x = %g is: %g\"%(x,f4_grad_analytical))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f5(x):\n", + " if x >= 0:\n", + " return x**2\n", + " else:\n", + " return -3*x + 1\n", + "\n", + "f5_grad = grad(f5)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f5 at x = %g is: %g\"%(x,f5_grad(x)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2\n", + "6\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9\n", + "# The analytical derivative is: sum(i*x**(i-1)) \n", + "f6_grad_analytical = 0\n", + "for i in range(10):\n", + " f6_grad_analytical += i*x**(i-1)\n", + "\n", + "print(\"The analytical derivative of f6 at x = %g is: %g\"%(x,f6_grad_analytical))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "\n", + "def f7(n): # Assume that n is an integer\n", + " if n == 1 or n == 0:\n", + " return 1\n", + " else:\n", + " return n*f7(n-1)\n", + "\n", + "f7_grad = grad(f7)\n", + "\n", + "n = 2.0\n", + "\n", + "print(\"The computed derivative of f7 at n = %d is: %g\"%(n,f7_grad(n)))\n", + "\n", + "# The function f7 is an implementation of the factorial of n.\n", + "# By using the product rule, one can find that the derivative is:\n", + "\n", + "f7_grad_analytical = 0\n", + "for i in range(int(n)-1):\n", + " tmp = 1\n", + " for k in range(int(n)-1):\n", + " if k != i:\n", + " tmp *= (n - k)\n", + " f7_grad_analytical += tmp\n", + "\n", + "print(\"The analytical derivative of f7 at n = %d is: %g\"%(n,f7_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input.\n", + "\n", + "\n", + "Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd.\n", + "\n", + "Assigning a value to the variable being differentiated with respect to" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f8(x): # Assume x is an array\n", + " x[2] = 3\n", + " return x*2\n", + "\n", + "f8_grad = grad(f8)\n", + "\n", + "x = 8.4\n", + "\n", + "print(\"The derivative of f8 is:\",f8_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f9(a): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return a.dot(b)\n", + "\n", + "f9_grad = grad(f9)\n", + "\n", + "x = np.array([1.0,0.0])\n", + "\n", + "print(\"The derivative of f9 is:\",f9_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we are told that the 'dot' function does not belong to Autograd's\n", + "version of a Numpy array. To overcome this, an alternative syntax\n", + "which also computed the dot product can be used:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f9_alternative(x): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2\n", + "\n", + "f9_alternative_grad = grad(f9_alternative)\n", + "\n", + "x = np.array([3.0,0.0])\n", + "\n", + "print(\"The gradient of f9 is:\",f9_alternative_grad(x))\n", + "\n", + "# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively\n", + "# w.r.t x is (b_1, b_2)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The documentation recommends to avoid inplace operations such as" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "a += b\n", + "a -= b\n", + "a*= b\n", + "a /=b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More examples will be added, in particular how to compare autograd with own codes for the gradients." ] } ], diff --git a/doc/LectureNotes/_build/html/chapter1.html b/doc/LectureNotes/_build/html/chapter1.html index 3e61ffcbd..2e7c0a670 100644 --- a/doc/LectureNotes/_build/html/chapter1.html +++ b/doc/LectureNotes/_build/html/chapter1.html @@ -159,7 +159,7 @@
  • - 7. Support Vector Machines, overarching aims + 8. Support Vector Machines, overarching aims
  • @@ -171,12 +171,12 @@ @@ -188,12 +188,12 @@ @@ -205,12 +205,12 @@ @@ -357,39 +357,34 @@ 3.7. Housing data, the code -
  • - - 3.8. Splitting our Data in Training and Test data - -
  • - 3.9. Reducing the number of degrees of freedom, overarching view + 3.8. Reducing the number of degrees of freedom, overarching view
  • - 3.10. Testing the Means Squared Error as function of Complexity + 3.9. Testing the Means Squared Error as function of Complexity
  • - 3.11. Exercises + 3.10. Exercises @@ -409,35 +404,34 @@

    3. Linear Regression

    3.1. Introduction

    -

    Our emphasis throughout this series of lectures
    -is on understanding the mathematical aspects of -different algorithms used in the fields of data analysis and machine learning.

    -

    However, where possible we will emphasize the -importance of using available software. We start thus with a hands-on -and top-down approach to machine learning. The aim is thus to start with -relevant data or data we have produced -and use these to introduce statistical data analysis -concepts and machine learning algorithms before we delve into the -algorithms themselves. The examples we will use in the beginning, start with simple -polynomials with random noise added. We will use the Python -software package Scikit-Learn and -introduce various machine learning algorithms to make fits of -the data and predictions. We move thereafter to more interesting -cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example). -These are examples where we can easily set up the data and -then use machine learning algorithms included in for example -Scikit-Learn.

    +

    Our emphasis throughout this series of lectures is on understanding +the mathematical aspects of different algorithms used in the fields of +data analysis and machine learning.

    +

    However, where possible we will emphasize the importance of using +available software. We start thus with a hands-on and top-down +approach to machine learning. The aim is thus to start with relevant +data or data we have produced and use these to introduce statistical +data analysis concepts and machine learning algorithms before we delve +into the algorithms themselves. The examples we will use in the +beginning, start with simple polynomials with random noise added. We +will use the Python software package +Scikit-Learn and introduce various +machine learning algorithms to make fits of the data and +predictions. We move thereafter to more interesting cases such as data +from say experiments (below we will look at experimental nuclear +binding energies as an example). These are examples where we can +easily set up the data and then use machine learning algorithms +included in for example Scikit-Learn.

    These examples will serve us the purpose of getting started. Furthermore, they allow us to catch more than two birds with a stone. They will allow us to bring in some programming specific topics and tools as well as showing the power of various Python libraries for machine learning and statistical data analysis.

    -

    Here, we will mainly focus on two -specific Python packages for Machine Learning, Scikit-Learn and -Tensorflow (see below for links etc). Moreover, the examples we -introduce will serve as inputs to many of our discussions later, as -well as allowing you to set up models and produce your own data and -get started with programming.

    +

    Here, we will mainly focus on two specific Python packages for Machine +Learning, Scikit-Learn and Tensorflow (see below for links etc). +Moreover, the examples we introduce will serve as inputs to many of +our discussions later, as well as allowing you to set up models and +produce your own data and get started with programming.

    3.2. What is Machine Learning?

    @@ -625,7 +619,15 @@ quality figures. Feel free to explore the extensive gallery of examples. In this example we plot our original values of \(x\) and \(y\) as well as the prediction ypredict (\(\tilde{y}\)), which attempts at fitting our -data with a straight line.

    +data with a straight line. Note also that Scikit-Learn requires a +matrix as input for the input values \(x\) and \(y\). In the above code we +have solved this by declaring \(x\) and \(y\) as arrays of dimension +\(n\times 1\).

    +

    In the code here we have also made a new array for \(x\in [0,1]\). Our +prediction is computed for these values, meaning that they were not +included in the data set used to train (or fit) the model. +This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set. +Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called train-validate-test spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!

    The Python code follows here.

    @@ -640,6 +642,7 @@ data with a straight line.

    y = 2*x+np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) +# This is our new x-array to which we test our model xnew = np.array([[0],[1]]) ypredict = linreg.predict(xnew) @@ -745,8 +748,7 @@ to be dominated by outliers.

    Depending on the parameter in front of the normal distribution, we may have a small or larger relative error. Try to play around with different training data sets and study (graphically) the value of the -relative error. Note also that Scikit-Learn requires a matrix as input for the input values \(x\) and \(y\). In the above code we have -solved this by declaring \(x\) and \(y\) as arrays of dimension \(n\times 1\).

    +relative error.

    As mentioned above, Scikit-Learn has an impressive functionality. We can for example extract the values of \(\alpha\) and \(\beta\) and their error estimates, or the variance and standard deviation and many @@ -787,13 +789,13 @@ example of the functionality of Scikit-Learn.

    The intercept alpha: 
    - [1.84860939]
    + [1.89992521]
     Coefficient beta : 
    - [[5.2571699]]
    -Mean squared error: 0.25
    -Variance score: 0.90
    + [[5.12908963]]
    +Mean squared error: 0.20
    +Variance score: 0.92
     Mean squared log error: 0.01
    -Mean absolute error: 0.40
    +Mean absolute error: 0.36
     
    _images/chapter1_13_1.png @@ -893,7 +895,7 @@ a linear \(x\)-dependence we s
    _images/chapter1_27_0.png -
    0.0050000000000000044
    +
    0.005000000000000007
     
    @@ -1117,7 +1119,7 @@ A

    The next step, and we will define this mathematically later, is to set up the so-called design matrix. We will throughout call this matrix \(\boldsymbol{X}\). -It has dimensionality \(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.

    +It has dimensionality \(n\times p\), where \(n\) is the number of data points and \(p\) are the so-called predictors. In our case here they are given by the number of polynomials in \(A\) we wish to include in the fit.

    # Now we set up the design matrix X
    @@ -1131,8 +1133,11 @@ It has dimensionality \(p\times n\)
     
    -

    Note well that we have made life simple here. We perform a fit in terms of the number of nucleons only. A more sophisticated fit can be done by including an explicit dependence on the number of protons and neutrons in the asymmetry and Coulomb terms.

    -

    With scikitlearn we are now ready to use linear regression and fit our data.

    +

    Note well that we have made life simple here. We perform a fit in +terms of the number of nucleons only. A more sophisticated fit can be +done by including an explicit dependence on the number of protons and +neutrons in the asymmetry and Coulomb terms. We leave this as an exercise to you the reader.

    +

    With Scikit-Learn we are now ready to use linear regression and fit our data.

    clf = skl.LinearRegression().fit(X, Energies)
    @@ -1176,7 +1181,7 @@ Mean absolute error: 0.05
     _images/chapter1_57_1.png
     
    -

    As a teaser, let us now see how we can do this with decision trees using scikit-learn. Later we will switch to so-called random forests!

    +

    As a teaser, let us now see how we can do this with decision trees using Scikit-Learn. Later we will switch to so-called random forests!

    #Decision Tree Regression
    @@ -1228,11 +1233,20 @@ A
     270 3344  160  110  270      Ds  7.253775  7.253775
     
     [267 rows x 6 columns]
    -0.009883615646716186
    +0.009883615646716188
     
    +

    With a deeper and deeper tree level, we can almost reproduce every +single data point by increasing the max depth of the tree. +We can actually decide to make a decision tree which fits every single point. +As we will +see later, this has the benefit that we can really train a model which +traverses every single data point. However, the price we pay is that +we will easily overfit. That is, if we apply our model to unseen data, +we will most likely fail miserably in our attempt at making +predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.

    The seaborn package allows us to visualize data in an efficient way. Note that we use scikit-learn’s multi-layer perceptron (or feed forward neural network) functionality.

    @@ -1270,14 +1284,6 @@ functionality.

    -
    /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    -  warnings.warn(
    -/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    -  warnings.warn(
    -/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    -  warnings.warn(
    -
    -
    /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
       warnings.warn(
     /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    @@ -1334,16 +1340,12 @@ functionality.

    warnings.warn( /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet. warnings.warn( +
    +
    +
    /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
     /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
       warnings.warn(
    -
    -
    -
    /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    -  warnings.warn(
    -
    -
    -
    /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    -  warnings.warn(
     /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
       warnings.warn(
     
    @@ -1360,7 +1362,11 @@ functionality.

    warnings.warn(
  • -_images/chapter1_61_11.png +
    /Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +_images/chapter1_61_10.png
    @@ -1878,6 +1884,22 @@ K

    \[ \frac{\partial\log{\vert\boldsymbol{A}\vert}}{\partial \boldsymbol{A}}=(\boldsymbol{A}^{-1})^T. \]
    +

    We can then compute the second derivative of the cost function, which in our case is the second derivative +of the means squared error. This leads to

    +
    +\[ +\frac{\partial^2 C(\boldsymbol{\beta})}{\partial \boldsymbol{\beta}^T\partial \boldsymbol{\beta}} =\frac{2}{n}\boldsymbol{X}^T\boldsymbol{X}. +\]
    +

    This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).

    +

    The Hessian matrix plays an important role and is defined for the mean squared error as

    +
    +\[ +\boldsymbol{H}=\boldsymbol{X}^T\boldsymbol{X}. +\]
    +

    The Hessian matrix for ordinary least squares is also proportional to +the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find +the eigenvalues of the covariance matrix and the Hessian matrix in +terms of the singular values.

    The residuals \(\boldsymbol{\epsilon}\) are in turn given by

    \[ @@ -1935,7 +1957,7 @@ write

    -_images/chapter1_132_0.png +_images/chapter1_136_0.png

    We can easily test our fit by computing the \(R2\) score that we discussed in connection with the functionality of Scikit-Learn in the introductory slides. @@ -2138,9 +2160,7 @@ time the file is presented as a standard csv file.

    before, with the same initializations and declarations. We use also pandas again, rather extensively in order to organize our data.

    The difference now is that we use Scikit-Learn’s regression tools -instead of our own matrix inversion implementation. Furthermore, we -sneak in Ridge regression (to be discussed below) which includes a -hyperparameter \(\lambda\), also to be explained below.

    +instead of our own matrix inversion implementation.

    # Common imports
    @@ -2203,18 +2223,6 @@ hyperparameter \(\lambda\), al
     print('Mean absolute error: %.2f' % mean_absolute_error(Energies, ytilde))
     print(clf.coef_, clf.intercept_)
     
    -# The Ridge regression with a hyperparameter lambda = 0.1
    -_lambda = 0.1
    -clf_ridge = skl.Ridge(alpha=_lambda).fit(X, Energies)
    -yridge = clf_ridge.predict(X)
    -EoS['Eridge']  = yridge
    -# The mean squared error                               
    -print("Mean squared error: %.2f" % mean_squared_error(Energies, yridge))
    -# Explained variance score: 1 is perfect prediction                                 
    -print('Variance score: %.2f' % r2_score(Energies, yridge))
    -# Mean absolute error                                                           
    -print('Mean absolute error: %.2f' % mean_absolute_error(Energies, yridge))
    -print(clf_ridge.coef_, clf_ridge.intercept_)
     
     fig, ax = plt.subplots()
     ax.set_xlabel(r'$\rho[\mathrm{fm}^{-3}]$')
    @@ -2223,8 +2231,6 @@ hyperparameter \(\lambda\), al
                 label='Theoretical data')
     ax.plot(EoS['Density'], EoS['Eols'], alpha=0.7, lw=2, c='m',
                 label='OLS')
    -ax.plot(EoS['Density'], EoS['Eridge'], alpha=0.7, lw=2, c='g',
    -            label='Ridge $\lambda = 0.1$')
     ax.legend()
     save_fig("EoSfitting")
     plt.show()
    @@ -2236,20 +2242,13 @@ hyperparameter \(\lambda\), al
     Variance score: 1.00
     Mean absolute error: 2.83
     [   0.          618.32047562 -861.13519106 1404.91549644] -11.057088709963637
    -Mean squared error: 197.93
    -Variance score: 1.00
    -Mean absolute error: 11.69
    -[  0.          28.18220995 282.79902342 842.30879705] 12.946893955211749
     
    -_images/chapter1_179_1.png +_images/chapter1_183_1.png

    The above simple polynomial in density \(\rho\) gives an excellent fit to the data.

    -

    We note also that there is a small deviation between the -standard OLS and the Ridge regression at higher densities. We discuss this in more detail -below.

    @@ -2264,6 +2263,95 @@ postpone a discussion of this splitting to the end of these notes and our discussion of the so-called bias-variance tradeoff. Here we limit ourselves to repeat the above equation of state fitting example but now splitting the data into a training set and a test set.

    +

    Let us study some examples. The first code here takes a simple +one-dimensional second-order polynomial and we fit it to a +second-order polynomial. Depending on the strength of the added noise, +the various measures like the \(R2\) score or the mean-squared error, +the fit becomes better or worse.

    +
    +
    +
    import os
    +import numpy as np
    +import pandas as pd
    +import matplotlib.pyplot as plt
    +from sklearn.model_selection import train_test_split
    +
    +
    +def R2(y_data, y_model):
    +    return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)
    +def MSE(y_data,y_model):
    +    n = np.size(y_model)
    +    return np.sum((y_data-y_model)**2)/n
    +
    +x = np.random.rand(100)
    +y = 2.0+5*x*x+0.1*np.random.randn(100)
    +
    +
    +#  The design matrix now as function of a given polynomial
    +X = np.zeros((len(x),3))
    +X[:,0] = 1.0
    +X[:,1] = x
    +X[:,2] = x**2
    +# We split the data in test and training data
    +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    +# matrix inversion to find beta
    +beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train
    +print(beta)
    +# and then make the prediction
    +ytilde = X_train @ beta
    +print("Training R2")
    +print(R2(y_train,ytilde))
    +print("Training MSE")
    +print(MSE(y_train,ytilde))
    +ypredict = X_test @ beta
    +print("Test R2")
    +print(R2(y_test,ypredict))
    +print("Test MSE")
    +print(MSE(y_test,ypredict))
    +
    +
    +
    +
    +
    [ 2.00247083e+00 -3.54710530e-03  5.02096350e+00]
    +Training R2
    +0.99620088364924
    +Training MSE
    +0.008171076530362356
    +Test R2
    +0.9968966158779216
    +Test MSE
    +0.006530396683779109
    +
    +
    +
    +
    +

    Alternatively, you could write your own test-train splitting function as shown here.

    +
    +
    +
    # equivalently in numpy
    +def train_test_split_numpy(inputs, labels, train_size, test_size):
    +    n_inputs = len(inputs)
    +    inputs_shuffled = inputs.copy()
    +    labels_shuffled = labels.copy()
    +
    +    np.random.shuffle(inputs_shuffled)
    +    np.random.shuffle(labels_shuffled)
    +
    +    train_end = int(n_inputs*train_size)
    +    X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]
    +    Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]
    +
    +    return X_train, X_test, Y_train, Y_test
    +
    +
    +
    +
    +

    But since scikit-learn has its own function for doing this and since +it interfaces easily with tensorflow and other libraries, we +normally recommend using the latter functionality.

    +

    As another example, we apply the training and testing split to +to the above equation of state fitting example +but now splitting the data into a training set and a test set.

    import os
    @@ -2335,13 +2423,13 @@ but now splitting the data into a training set and a test set.

    Training R2
    -0.9999869956119286
    +0.9999850282256434
     Training MSE
    -5.745136489050356
    +6.653725417896576
     Test R2
    -0.9999787681537219
    +0.9999887274726137
     Test MSE
    -9.712199063818309
    +5.071447584032141
     
    @@ -2460,7 +2548,7 @@ dtype: int64 warnings.warn(msg, FutureWarning)
    -_images/chapter1_191_1.png +_images/chapter1_199_1.png

    It is now useful to look at the correlation matrix

    @@ -2478,7 +2566,7 @@ dtype: int64
    <AxesSubplot:>
     
    -_images/chapter1_193_1.png +_images/chapter1_201_1.png

    From the above coorelation plot we can see that MEDV is strongly correlated to LSTAT and RM. We see also that RAD and TAX are stronly correlated, but we don’t include this in our features together to avoid multi-colinearity

    @@ -2501,7 +2589,7 @@ dtype: int64
    -_images/chapter1_195_0.png +_images/chapter1_203_0.png

    Now we start training our model

    @@ -2599,111 +2687,12 @@ R2 score is 0.6628996975186952
    -_images/chapter1_202_0.png +_images/chapter1_210_0.png
    -
    -

    3.8. Splitting our Data in Training and Test data

    -

    It is normal in essentially all Machine Learning studies to split the -data in a training set and a test set (sometimes also an additional -validation set). Scikit-Learn has an own function for this. There -is no explicit recipe for how much data should be included as training -data and say test data. An accepted rule of thumb is to use -approximately \(2/3\) to \(4/5\) of the data as training data. We will -postpone a discussion of this splitting to the end of these notes and -our discussion of the so-called bias-variance tradeoff. Here we -limit ourselves to repeat the above equation of state fitting example -but now splitting the data into a training set and a test set.

    -

    Let us study some examples. The first code here takes a simple -one-dimensional second-order polynomial and we fit it to a -second-order polynomial. Depending on the strength of the added noise, -the various measures like the \(R2\) score or the mean-squared error, -the fit becomes better or worse.

    -
    -
    -
    import os
    -import numpy as np
    -import pandas as pd
    -import matplotlib.pyplot as plt
    -from sklearn.model_selection import train_test_split
    -
    -
    -def R2(y_data, y_model):
    -    return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)
    -def MSE(y_data,y_model):
    -    n = np.size(y_model)
    -    return np.sum((y_data-y_model)**2)/n
    -
    -x = np.random.rand(100)
    -y = 2.0+5*x*x+0.1*np.random.randn(100)
    -
    -
    -#  The design matrix now as function of a given polynomial
    -X = np.zeros((len(x),3))
    -X[:,0] = 1.0
    -X[:,1] = x
    -X[:,2] = x**2
    -# We split the data in test and training data
    -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    -# matrix inversion to find beta
    -beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train
    -print(beta)
    -# and then make the prediction
    -ytilde = X_train @ beta
    -print("Training R2")
    -print(R2(y_train,ytilde))
    -print("Training MSE")
    -print(MSE(y_train,ytilde))
    -ypredict = X_test @ beta
    -print("Test R2")
    -print(R2(y_test,ypredict))
    -print("Test MSE")
    -print(MSE(y_test,ypredict))
    -
    -
    -
    -
    -
    [ 2.05802766 -0.30626706  5.27262964]
    -Training R2
    -0.9967292151090247
    -Training MSE
    -0.007931713723267314
    -Test R2
    -0.9966744029509663
    -Test MSE
    -0.006968283076248407
    -
    -
    -
    -
    -

    Alternatively, you could write your own test-train splitting function as shown here.

    -
    -
    -
    # equivalently in numpy
    -def train_test_split_numpy(inputs, labels, train_size, test_size):
    -    n_inputs = len(inputs)
    -    inputs_shuffled = inputs.copy()
    -    labels_shuffled = labels.copy()
    -
    -    np.random.shuffle(inputs_shuffled)
    -    np.random.shuffle(labels_shuffled)
    -
    -    train_end = int(n_inputs*train_size)
    -    X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]
    -    Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]
    -
    -    return X_train, X_test, Y_train, Y_test
    -
    -
    -
    -
    -

    But since scikit-learn has its own function for doing this and since -it interfaces easily with tensorflow and other libraries, we -normally recommend using the latter functionality.

    -
    -

    3.9. Reducing the number of degrees of freedom, overarching view

    +

    3.8. Reducing the number of degrees of freedom, overarching view

    Many Machine Learning problems involve thousands or even millions of features for each training instance. Not only does this make training extremely slow, it can also make it much harder to find a good @@ -3156,7 +3145,7 @@ x_j^{(i)} \rightarrow (b-a)\frac{x_j^{(i)} - \min(x_j)}{\max(x_j) - \min(x_j)} -

    where \(\min(x_j)\) and \(\max(x_j)\) return the minimum and maximum value of \(x_j\) over the data set, respectively.

    -

    3.10. Testing the Means Squared Error as function of Complexity

    +

    3.9. Testing the Means Squared Error as function of Complexity

    Before we proceed with a more detailed analysis of the so-called Bias-Variance tradeoff, we present here an example of the relation between model complexity and the mean squared error for the triaining @@ -3208,14 +3197,14 @@ ourmodel (here in terms of the polynomial degree of the model).

    -_images/chapter1_214_0.png +_images/chapter1_218_0.png
    -

    3.11. Exercises

    +

    3.10. Exercises

    -

    3.11.1. Exercise: Setting up various Python environments

    +

    3.10.1. Exercise: Setting up various Python environments

    The first exercise here is of a mere technical art. We want you to have

    -

    3.11.2. Exercise: making your own data and exploring scikit-learn

    +

    3.10.2. Exercise: making your own data and exploring scikit-learn

    We will generate our own dataset for a function \(y(x)\) where \(x \in [0,1]\) and defined by random numbers computed with the uniform distribution. The function \(y\) is a quadratic polynomial in \(x\) with added stochastic noise according to the normal distribution \(\cal {N}(0,1)\). The following simple Python instructions define our \(x\) and \(y\) values (with 100 data points).

    @@ -3307,7 +3296,7 @@ R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i 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.

    -

    3.11.3. Exercise: Normalizing our data

    +

    3.10.3. Exercise: Normalizing our data

    A much used approach before starting to train the data is to preprocess our data. Normally the data may need a rescaling and/or may be sensitive to extreme values. Scaling the data renders our inputs much more diff --git a/doc/LectureNotes/_build/html/chapter10.html b/doc/LectureNotes/_build/html/chapter10.html index f570beb9f..75098e166 100644 --- a/doc/LectureNotes/_build/html/chapter10.html +++ b/doc/LectureNotes/_build/html/chapter10.html @@ -5,7 +5,7 @@ - 13. Building a Feed Forward Neural Network — Applied Data Analysis and Machine Learning + 14. Building a Feed Forward Neural Network — Applied Data Analysis and Machine Learning @@ -54,7 +54,7 @@ - + @@ -138,17 +138,17 @@

    @@ -170,12 +170,12 @@ @@ -187,12 +187,12 @@ @@ -204,12 +204,12 @@ @@ -285,151 +285,151 @@ @@ -444,7 +444,7 @@
    -

    13. Building a Feed Forward Neural Network

    +

    14. Building a Feed Forward Neural Network

    We are now gong to develop an example based on the MNIST data base. This is a classification problem and we need to use our cross-entropy function we discussed in connection with logistic @@ -472,7 +472,7 @@ P(y = 1 \mid \hat{x}, \hat{\theta}) = 1 - P(y = 0 \mid \hat{x}, \hat{\theta}) ,

    where \(y \in \{0, 1\}\) and \(\hat{\theta}\) represents the weights and biases of our network.

    -

    13.1. Defining the cost function

    +

    14.1. Defining the cost function

    Our cost function is given as (see the Logistic regression lectures)

    \[ @@ -510,7 +510,7 @@ P(\mathcal{D} \mid \hat{\theta}) = \prod_{i=1}^n \prod_{c=0}^{C-1} [P(y_{ic} = 1

    See the logistic regression lectures for a full definition of the cost function.

    The back propagation equations need now only a small change, namely the definition of a new cost function. We are thus ready to use the same equations as before!

    -

    13.1.1. Example: binary classification problem

    +

    14.1.1. Example: binary classification problem

    As an example of the above, relevant for project 2 as well, let us consider a binary class. As discussed in our logistic regression lectures, we defined a cost function in terms of the parameters \(\beta\) as

    \[ @@ -552,7 +552,7 @@ Our cost function at the final layer

    In case we use another activation function than the logistic one, we need to evaluate other derivatives.

    -

    13.1.2. The Softmax function

    +

    14.1.2. The Softmax function

    In case we employ the more general case given by the Softmax equation, we need to evaluate the derivative of the activation function with respect to the activation \(z_i^l\), that is we need

    \[ @@ -573,7 +573,7 @@ f(z_i^l) = \frac{\exp{(z_i^l)}}{\sum_{m=1}^K\exp{(z_m^l)}}.
    -

    13.2. Developing a code for doing neural networks with back propagation

    +

    14.2. Developing a code for doing neural networks with back propagation

    One can identify a set of key steps when using neural networks to solve supervised learning problems:

    1. Collect and pre-process data

    2. @@ -584,7 +584,7 @@ f(z_i^l) = \frac{\exp{(z_i^l)}}{\sum_{m=1}^K\exp{(z_m^l)}}.
    3. Adjust hyperparameters (if necessary, network architecture)

    -

    13.2.1. Collect and pre-process data

    +

    14.2.1. Collect and pre-process data

    Here we will be using the MNIST dataset, which is readily available through the scikit-learn package. You may also find it for example here.
    The MNIST (Modified National Institute of Standards and Technology) database is a large database @@ -679,7 +679,7 @@ X = (n_inputs, n_features) = (1797, 64)

    -

    13.2.2. Train and test datasets

    +

    14.2.2. Train and test datasets

    Performing analysis before partitioning the dataset is a major error, that can lead to incorrect conclusions.

    We will reserve \(80 \%\) of our dataset for training and \(20 \%\) for testing.

    It is important that the train and test datasets are drawn randomly from our dataset, to ensure @@ -728,7 +728,7 @@ Number of test images: 360

    -

    13.2.3. Define model and architecture

    +

    14.2.3. Define model and architecture

    Our simple feed-forward neural network will consist of an input layer, a single hidden layer and an output layer. The activation \(y\) of each neuron is a weighted sum of inputs, passed through an activation function. In case of the simple perceptron model we have

    \[ z = \sum_{i=1}^n w_i a_i ,\]
    @@ -758,7 +758,7 @@ We will be using the sigmoid function which is inspired by probability theory (see logistic regression) and was most commonly used until about 2011. See the discussion below concerning other activation functions.

    -

    13.2.4. Layers

    +

    14.2.4. Layers

    • Input

    @@ -815,7 +815,7 @@ of values. Without it, any input with the value 0 will be mapped to zero (before
    -

    13.2.5. Feed-forward pass

    +

    14.2.5. Feed-forward pass

    Denote \(F\) the number of features, \(H\) the number of hidden neurons and \(C\) the number of categories.
    For each input image we calculate a weighted sum of input features (pixel values) to each neuron \(j\) in the hidden layer \(l\):

    @@ -908,7 +908,7 @@ correct label for image 0: 6
    -

    13.2.6. Choose cost function and optimizer

    +

    14.2.6. Choose cost function and optimizer

    To measure how well our neural network is doing we need to introduce a cost function.
    We will call the function that gives the error of a single sample output the loss function, and the function that gives the total error of our network across all samples the cost function. @@ -927,7 +927,7 @@ probability of the correct category \ you got the correct label. The probability of category \(c\) is given by the softmax function. The vector \(\hat{\theta}\) represents the parameters of our network, i.e. all the weights and biases.

    -

    13.2.7. Optimizing the cost function

    +

    14.2.7. Optimizing the cost function

    The network is trained by finding the weights and biases that minimize the cost function. One of the most widely used classes of methods is gradient descent and its generalizations. The idea behind gradient descent is simply to adjust the weights in the direction where the gradient of the cost function is large and negative. This ensures we flow toward a local minimum of the cost function.
    Each parameter \(\theta\) is iteratively adjusted according to the rule

    @@ -953,7 +953,7 @@ We denote each minibatch \(B_k\)The various optmization methods, with codes and algorithms, are discussed in our lectures on Gradient descent approaches.

    -

    13.2.8. Regularization

    +

    14.2.8. Regularization

    It is common to add an extra term to the cost function, proportional to the size of the weights. This is equivalent to constraining the size of the weights, so that they do not grow out of control. @@ -976,7 +976,7 @@ above. This is a clever use of the chain rule that allows us to calculate the gradient efficently.

    -

    13.2.9. Matrix multiplication

    +

    14.2.9. Matrix multiplication

    To more efficently train our network these equations are implemented using matrix operations.
    The error in the output layer is calculated simply as, with \(\hat{t}\) being our targets,

    @@ -1089,7 +1089,7 @@ the Hadamard product, meaning element-wise multiplication.

    -

    13.3. Improving performance

    +

    14.3. Improving performance

    As we can see the network does not seem to be learning at all. It seems to be just guessing the label for each image.
    In order to obtain a network that does something useful, we will have to do a bit more work.

    The choice of hyperparameters such as learning rate and regularization parameter is hugely influential for the performance of the network. Typically a grid-search is performed, wherein we test different hyperparameters separated by orders of magnitude. For example we could test the learning rates \(\eta = 10^{-6}, 10^{-5},...,10^{-1}\) with different regularization parameters \(\lambda = 10^{-6},...,10^{-0}\).

    @@ -1206,7 +1206,7 @@ being realizations of this object with different hyperparameters. An implementat
    -

    13.4. Evaluate model performance on test data

    +

    14.4. Evaluate model performance on test data

    To measure the performance of our network we evaluate how well it does it data it has never seen before, i.e. the test data.
    We measure the performance of the network using the accuracy score.
    The accuracy is as you would expect just the number of images correctly labeled divided by the total number of images. A perfect classifier will have an accuracy score of \(1\).

    @@ -1242,7 +1242,7 @@ The accuracy is as you would expect just the number of images correctly labeled
    -

    13.5. Adjust hyperparameters

    +

    14.5. Adjust hyperparameters

    We now perform a grid search to find the optimal hyperparameters for the network.
    Note that we are only using 1 layer with 50 neurons, and human performance is estimated to be around \(98\%\) (\(2\%\) error rate).

    @@ -1530,7 +1530,7 @@ Accuracy score on test set: 0.07777777777777778
    -

    13.6. Visualization

    +

    14.6. Visualization

    # visual representation of grid search
    @@ -1580,7 +1580,7 @@ Accuracy score on test set:  0.07777777777777778
     
    -

    13.7. scikit-learn implementation

    +

    14.7. scikit-learn implementation

    scikit-learn focuses more on traditional machine learning methods, such as regression, clustering, decision trees, etc. As such, it has only two types of @@ -1939,7 +1939,7 @@ Accuracy score on test set: 0.1527777777777778

    -

    13.8. Visualization

    +

    14.8. Visualization

    # optional
    @@ -1986,7 +1986,7 @@ Accuracy score on test set:  0.1527777777777778
     
    -

    13.9. Building neural networks in Tensorflow and Keras

    +

    14.9. Building neural networks in Tensorflow and Keras

    Now we want to build on the experience gained from our neural network implementation in NumPy and scikit-learn and use it to construct a neural network in Tensorflow. Once we have constructed a neural network in NumPy and Tensorflow, building one in Keras is really quite trivial, though the performance may suffer.

    @@ -2214,7 +2214,7 @@ If you have Anaconda installed you may run the following command

    -

    13.10. The Breast Cancer Data, now with Keras

    +

    14.10. The Breast Cancer Data, now with Keras

    import tensorflow as tf
    @@ -2388,7 +2388,7 @@ If you have Anaconda installed you may run the following command

    -

    13.11. Fine-tuning neural network hyperparameters

    +

    14.11. Fine-tuning neural network hyperparameters

    The flexibility of neural networks is also one of their main drawbacks: there are many hyperparameters to tweak. Not only can you use any imaginable network topology (how neurons/nodes are interconnected), @@ -2419,7 +2419,7 @@ of training data. However, you will rarely have to train such networks from scra common to reuse parts of a pretrained state-of-the-art network that performs a similar task.

    -

    13.12. Which activation function should I use?

    +

    14.12. Which activation function should I use?

    The Back propagation algorithm we derived above works by going from the output layer to the input layer, propagating the error gradient on the way. Once the algorithm has computed the gradient of the cost @@ -2484,7 +2484,7 @@ it does not saturate for positive values (and also because it is quite fast to compute).

    -

    13.13. The RELU function family

    +

    14.13. The RELU function family

    The ReLU activation function suffers from a problem known as the dying ReLUs: during training, some neurons effectively die, meaning they stop outputting anything other than 0.

    @@ -2521,7 +2521,7 @@ bootstrap to evaluate other activation functions.

    -

    13.14. Batch Normalization

    +

    14.14. Batch Normalization

    Batch Normalization aims to address the vanishing/exploding gradients problems, and more generally the problem that the distribution of each layer’s inputs changes during training, as the parameters of the previous layers change.

    @@ -2534,7 +2534,7 @@ standard deviation. It does so by evaluating the mean and standard deviation of mini-batch, from this the name batch normalization.

    -

    13.15. Dropout

    +

    14.15. Dropout

    It is a fairly simple algorithm: at every training step, every neuron (including the input neurons but excluding the output neurons) has a probability \(p\) of being temporarily dropped out, meaning it will be entirely ignored during this training step, but it may be active during the next step.

    @@ -2543,7 +2543,7 @@ hyperparameter \(p\) is called It is viewed as one of the most popular regularization techniques.

    -

    13.16. Gradient Clipping

    +

    14.16. Gradient Clipping

    A popular technique to lessen the exploding gradients problem is to simply clip the gradients during backpropagation so that they never exceed some threshold (this is mostly useful for recurrent neural networks).

    @@ -2552,7 +2552,7 @@ networks).

    Normalization is preferred.

    -

    13.17. A top-down perspective on Neural networks

    +

    14.17. A top-down perspective on Neural networks

    The first thing we would like to do is divide the data into two or three parts. A training set, a validation or dev (development) set, and a test set. The test set is the data on which we want to make @@ -2586,7 +2586,7 @@ can serve as another important diagnostic when using DNNs for supervised learning.

    -

    13.18. Limitations of supervised learning with deep networks

    +

    14.18. Limitations of supervised learning with deep networks

    Like all statistical methods, supervised learning using neural networks has important limitations. This is especially important when one seeks to apply these methods, especially to physics problems. Like @@ -2630,7 +2630,7 @@ features).

    diff --git a/doc/LectureNotes/_build/html/chapter2.html b/doc/LectureNotes/_build/html/chapter2.html index e41ee49d1..846cae837 100644 --- a/doc/LectureNotes/_build/html/chapter2.html +++ b/doc/LectureNotes/_build/html/chapter2.html @@ -159,7 +159,7 @@
  • - 7. Support Vector Machines, overarching aims + 8. Support Vector Machines, overarching aims
  • @@ -171,12 +171,12 @@ @@ -188,12 +188,12 @@ @@ -205,12 +205,12 @@ @@ -349,6 +349,11 @@ 4.13. Bayes’ Theorem and Ridge and Lasso Regression +
  • + + 4.14. Linking Bayes’ Theorem with Ridge and Lasso Regression + +
  • @@ -365,10 +370,10 @@

    4.1. Mathematical Interpretation of Ordinary Least Squares

    What is presented here is a mathematical analysis of various regression algorithms (ordinary least squares, Ridge and Lasso Regression). The analysis is based on an important algorithm in linear algebra, the so-called Singular Value Decomposition (SVD).

    -

    We have shown that in ordinary least squares the optimal parameters \(\beta\) are given by

    +

    We have shown that in ordinary least squares (OLS) the optimal parameters \(\beta\) are given by

    \[ -\hat{\boldsymbol{\beta}} = \left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. +\hat{\boldsymbol{\beta}}_{\mathrm{OLS}} = \left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. \]

    The hat over \(\boldsymbol{\beta}\) means we have the optimal parameters after minimization of the cost function.

    This means that our best model is defined as

    @@ -386,7 +391,7 @@ \[ \tilde{\boldsymbol{y}}=\boldsymbol{X}\hat{\boldsymbol{\beta}} = \boldsymbol{A}\boldsymbol{y}. \]
    -

    The matrix \(\boldsymbol{A}\) has the important property that \(\boldsymbol{A}^2=\boldsymbol{A}\). This is the definition of a projection matrix. +

    The matrix \(\boldsymbol{A}\) has the important property that \(\boldsymbol{A}^2=\boldsymbol{A}\). This is the definition of a projection matrix. We can then interpret our optimal model \(\tilde{\boldsymbol{y}}\) as being represented by an orthogonal projection of \(\boldsymbol{y}\) onto a space defined by the column vectors of \(\boldsymbol{X}\). In our case here the matrix \(\boldsymbol{A}\) is a square matrix. If it is a general rectangular matrix we have an oblique projection matrix.

    We have defined the residual error as

    @@ -659,7 +664,7 @@ example

    4.5. Code for SVD and Inversion of Matrices

    -

    How do we use the SVD to invert a matrix \(\boldsymbol{X}^\boldsymbol{X}\) which is singular or near singular? +

    How do we use the SVD to invert a matrix \(\boldsymbol{X}^T\boldsymbol{X}\) which is singular or near singular? The simple answer is to use the linear algebra function for the pseudoinverse, that is

    @@ -1096,10 +1101,10 @@ covariance matrix through the np.linalg.eig() function.

    -
    0.059680303635344434
    -4.260227742627244
    -[[0.89704131 2.55795935]
    - [2.55795935 8.24340751]]
    +
    -0.1831277634928002
    +3.3041320306136366
    +[[1.03929932 3.07670437]
    + [3.07670437 9.7701384 ]]
     
    @@ -1136,10 +1141,10 @@ a more brute force way. Here we scale the mean values for each column of the des
    -
    0.08362077210702115
    -1.8429949116841184
    -[[1.        0.6996584]
    - [0.6996584 1.       ]]
    +
    0.09456011349477329
    +1.6600855222624895
    +[[1.         0.70183798]
    + [0.70183798 1.        ]]
     
    @@ -1169,30 +1174,30 @@ this matrix we easily see that it is a positive definite matrix.

    -
    [[-1.25981533 -3.84976606]
    - [-0.52570079 -0.62262506]
    - [ 0.51707172  3.46973015]
    - [-0.47265243 -1.87030083]
    - [ 0.73734906  2.46183815]
    - [ 0.4918372   2.05531364]
    - [ 0.3893239   0.47862383]
    - [-0.41237437 -0.85058354]
    - [ 0.77622336  0.54697204]
    - [-0.24126232 -1.81920231]]
    +
    [[ 0.54316925  0.40968888]
    + [-1.8393131  -5.8788431 ]
    + [ 0.24613822  0.9957744 ]
    + [ 1.38892672  3.93679587]
    + [ 0.06540809 -0.84008474]
    + [ 0.49841285  2.31081134]
    + [-0.49323032 -1.25263916]
    + [ 0.08380813 -0.7925146 ]
    + [ 0.64078247  2.92814088]
    + [-1.13410232 -1.81712976]]
               0         1
    -0 -1.259815 -3.849766
    -1 -0.525701 -0.622625
    -2  0.517072  3.469730
    -3 -0.472652 -1.870301
    -4  0.737349  2.461838
    -5  0.491837  2.055314
    -6  0.389324  0.478624
    -7 -0.412374 -0.850584
    -8  0.776223  0.546972
    -9 -0.241262 -1.819202
    +0  0.543169  0.409689
    +1 -1.839313 -5.878843
    +2  0.246138  0.995774
    +3  1.388927  3.936796
    +4  0.065408 -0.840085
    +5  0.498413  2.310811
    +6 -0.493230 -1.252639
    +7  0.083808 -0.792515
    +8  0.640782  2.928141
    +9 -1.134102 -1.817130
               0         1
    -0  1.000000  0.881323
    -1  0.881323  1.000000
    +0  1.000000  0.942726
    +1  0.942726  1.000000
     
    @@ -1249,37 +1254,37 @@ this matrix we easily see that it is a positive definite matrix.

         0         1         2         3         4         5         6         7   \
     0   0.0  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000   
    -1   0.0  0.082272  0.078892  0.081102  0.080738  0.080182  0.072012  0.072246   
    -2   0.0  0.078892  0.076822  0.075975  0.076166  0.076251  0.066705  0.067202   
    -3   0.0  0.081102  0.075975  0.085259  0.084103  0.082616  0.078750  0.078649   
    -4   0.0  0.080738  0.076166  0.084103  0.083246  0.082091  0.077338  0.077407   
    -5   0.0  0.080182  0.076251  0.082616  0.082091  0.081309  0.075567  0.075818   
    -6   0.0  0.072012  0.066705  0.078750  0.077338  0.075567  0.074693  0.074434   
    -7   0.0  0.072246  0.067202  0.078649  0.077407  0.075818  0.074434  0.074285   
    -8   0.0  0.072468  0.067718  0.078474  0.077416  0.076026  0.074077  0.074044   
    -9   0.0  0.072661  0.068244  0.078197  0.077339  0.076169  0.073591  0.073681   
    -10  0.0  0.063190  0.058247  0.070949  0.069542  0.067794  0.068593  0.068293   
    -11  0.0  0.063523  0.058719  0.071156  0.069853  0.068213  0.068717  0.068491   
    -12  0.0  0.063880  0.059225  0.071359  0.070166  0.068640  0.068821  0.068673   
    -13  0.0  0.064257  0.059765  0.071549  0.070473  0.069071  0.068896  0.068828   
    -14  0.0  0.064647  0.060335  0.071714  0.070764  0.069496  0.068928  0.068945   
    +1   0.0  0.080633  0.085811  0.085748  0.084826  0.083221  0.080341  0.078342   
    +2   0.0  0.085811  0.092659  0.093248  0.092932  0.091659  0.088414  0.086561   
    +3   0.0  0.085748  0.093248  0.096639  0.096802  0.095941  0.093928  0.092288   
    +4   0.0  0.084826  0.092932  0.096802  0.097346  0.096763  0.094774  0.093328   
    +5   0.0  0.083221  0.091659  0.095941  0.096763  0.096406  0.094513  0.093236   
    +6   0.0  0.080341  0.088414  0.093928  0.094774  0.094513  0.093573  0.092375   
    +7   0.0  0.078342  0.086561  0.092288  0.093328  0.093236  0.092375  0.091318   
    +8   0.0  0.076213  0.084461  0.090355  0.091535  0.091578  0.090817  0.089881   
    +9   0.0  0.074037  0.082239  0.088258  0.089540  0.089693  0.089039  0.088209   
    +10  0.0  0.073546  0.081474  0.088137  0.089326  0.089437  0.089352  0.088484   
    +11  0.0  0.071453  0.079337  0.086052  0.087334  0.087544  0.087526  0.086757   
    +12  0.0  0.069371  0.077163  0.083905  0.085253  0.085544  0.085598  0.084916   
    +13  0.0  0.067326  0.074996  0.081744  0.083138  0.083495  0.083622  0.083015   
    +14  0.0  0.065334  0.072862  0.079597  0.081024  0.081435  0.081632  0.081092   
     
               8         9         10        11        12        13        14  
     0   0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
    -1   0.072468  0.072661  0.063190  0.063523  0.063880  0.064257  0.064647  
    -2   0.067718  0.068244  0.058247  0.058719  0.059225  0.059765  0.060335  
    -3   0.078474  0.078197  0.070949  0.071156  0.071359  0.071549  0.071714  
    -4   0.077416  0.077339  0.069542  0.069853  0.070166  0.070473  0.070764  
    -5   0.076026  0.076169  0.067794  0.068213  0.068640  0.069071  0.069496  
    -6   0.074077  0.073591  0.068593  0.068717  0.068821  0.068896  0.068928  
    -7   0.074044  0.073681  0.068293  0.068491  0.068673  0.068828  0.068945  
    -8   0.073926  0.073695  0.067889  0.068165  0.068427  0.068667  0.068873  
    -9   0.073695  0.073607  0.067355  0.067711  0.068056  0.068385  0.068686  
    -10  0.067889  0.067355  0.063925  0.064013  0.064075  0.064101  0.064078  
    -11  0.068165  0.067711  0.064013  0.064156  0.064273  0.064357  0.064393  
    -12  0.068427  0.068056  0.064075  0.064273  0.064449  0.064591  0.064689  
    -13  0.068667  0.068385  0.064101  0.064357  0.064591  0.064795  0.064958  
    -14  0.068873  0.068686  0.064078  0.064393  0.064689  0.064958  0.065188  
    +1   0.076213  0.074037  0.073546  0.071453  0.069371  0.067326  0.065334  
    +2   0.084461  0.082239  0.081474  0.079337  0.077163  0.074996  0.072862  
    +3   0.090355  0.088258  0.088137  0.086052  0.083905  0.081744  0.079597  
    +4   0.091535  0.089540  0.089326  0.087334  0.085253  0.083138  0.081024  
    +5   0.091578  0.089693  0.089437  0.087544  0.085544  0.083495  0.081435  
    +6   0.090817  0.089039  0.089352  0.087526  0.085598  0.083622  0.081632  
    +7   0.089881  0.088209  0.088484  0.086757  0.084916  0.083015  0.081092  
    +8   0.088556  0.086985  0.087242  0.085610  0.083855  0.082032  0.080182  
    +9   0.086985  0.085510  0.085763  0.084221  0.082549  0.080806  0.079029  
    +10  0.087242  0.085763  0.086430  0.084864  0.083177  0.081425  0.079643  
    +11  0.085610  0.084221  0.084864  0.083384  0.081778  0.080101  0.078390  
    +12  0.083855  0.082549  0.083177  0.081778  0.080249  0.078646  0.077005  
    +13  0.082032  0.080806  0.081425  0.080101  0.078646  0.077115  0.075542  
    +14  0.080182  0.079029  0.079643  0.078390  0.077005  0.075542  0.074036  
     
    @@ -1758,13 +1763,11 @@ We select values of the hyperparameter
    [2. 2.]
    -
    -
    -
    Training MSE for OLS
    +Training MSE for OLS
     3.0
     
    -_images/chapter2_245_2.png +_images/chapter2_245_1.png

    We see here that we reach a plateau for the Ridge results. Writing out the coefficients \(\boldsymbol{\beta}\), we that they are getting smaller and smaller and our error stabilizes since the predicted values of \(\tilde{\boldsymbol{y}}\) approach zero.

    @@ -2438,6 +2441,7 @@ Optimal solution found.
    +

    More text will be added to this example.

    4.11. Linking the regression analysis with a statistical interpretation

    @@ -2619,7 +2623,9 @@ We can now rewrite the above probability as

    \[ p(\boldsymbol{D}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. \]
    -

    It is a conditional probability (see below) and reads as the likelihood of a domain of events \(\boldsymbol{D}\) given a set of parameters \(\boldsymbol{\beta}\).

    +

    It is a conditional probability (see below) and reads as the +likelihood of a domain of events \(\boldsymbol{D}\) given a set of parameters +\(\boldsymbol{\beta}\).

    In statistics, maximum likelihood estimation (MLE) is a method of estimating the parameters of an assumed probability distribution, given some observed data. This is achieved by maximizing a likelihood @@ -2663,12 +2669,12 @@ Bayes’ theorem is extremely simple to derive. But to do so we need some basic

    Assume we have two domains of events \(X=[x_0,x_1,\dots,x_{n-1}]\) and \(Y=[y_0,y_1,\dots,y_{n-1}]\).

    We define also the likelihood for \(X\) and \(Y\) as \(p(X)\) and \(p(Y)\) respectively. The likelihood of a specific event \(x_i\) (or \(y_i\)) is then written as \(p(X=x_i)\) or just \(p(x_i)=p_i\).

    -

    Union of events is given by.

    +

    The union of events is given by

    \[ p(X \cup Y)= p(X)+p(Y)-p(X \cap Y). \]
    -

    The product rule (aka joint probability) is given by.

    +

    The product rule (aka joint probability) is given by

    \[ p(X \cup Y)= p(X,Y)= p(X\vert Y)p(Y)=p(Y\vert X)p(X), @@ -2700,37 +2706,68 @@ p(X\vert Y)= \frac{p(X,Y)}{\sum_{i=0}^{n-1}p(Y\vert X=x_i)p(x_i)}=\frac{p(Y\vert evaluated for the observed data \(Y\) and can be viewed as a function of the parameter space represented by \(X\). This function is not necesseraly normalized and is normally called the likelihood function.

    -

    The function \(p(X)\) on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution.

    +

    The function \(p(X)\) on the right hand side is called the prior while +the function on the left hand side is the called the posterior +probability. The denominator on the right hand side serves as a +normalization factor for the posterior distribution.

    Let us try to illustrate Bayes’ theorem through an example.

    -

    Let us suppose that you are undergoing a series of mammography scans in -order to rule out possible breast cancer cases. We define the +

    Let us suppose that you are undergoing a series of mammography scans +in order to rule out possible breast cancer cases. We define the sensitivity for a positive event by the variable \(X\). It takes binary values with \(X=1\) representing a positive event and \(X=0\) being a negative event. We reserve \(Y\) as a classification parameter for -either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing).

    +either a negative or a positive breast cancer confirmation. (Short +note on wordings: positive here means having breast cancer, although +none of us would consider this being a positive thing).

    We let \(Y=1\) represent the the case of having breast cancer and \(Y=0\) as not.

    -

    Let us assume that if you have breast cancer, the test will be positive with a probability of \(0.8\), that is we have

    +

    Let us assume that if you have breast cancer, the test will be positive with a probability of \(0.8\) (the numbers here are all made up), +that is we have

    \[ p(X=1\vert Y=1) =0.8. \]
    -

    This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of \(80\%\) for having cancer. -It is however not correct, as the following Bayesian analysis shows.

    -

    If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number. -Let us assume that the prior probability in the population as a whole is

    +

    This obviously sounds scary since many would conclude that if the test +is positive, there is a likelihood of \(80\%\) for having cancer. It is +however not correct, as the following Bayesian analysis shows. The correct question to pose is what is the probability of having breast cancer in case of a positive test? +We are thus interested in

    +
    +\[ +p(Y=1\vert X=1), +\]
    +

    instead of \(p(X=1\vert Y=1)\).

    +

    If we look at various national surveys on breast cancer, the general +likelihood of developing breast cancer is a very small number. Let us +assume that the prior probability in the population as a whole is

    \[ p(Y=1) =0.004. \]
    -

    We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have

    +

    We need also to account for the fact that the test may produce a false +positive result (false alarm). Let us here assume that we have

    \[ p(X=1\vert Y=0) =0.1. \]
    -

    Using Bayes’ theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute

    +

    Using Bayes’ theorem we can then find the posterior probability that +the person has breast cancer in case of a positive test, that is we +can compute

    + +
    \[ -p(Y=1\vert X=1)=\frac{p(X=1\vert Y=1)p(Y=1)}{p(X=1\vert Y=1)p(Y=1)+p(X=1\vert Y=0)p(Y=0)}=\frac{0.8\times 0.004}{0.8\times 0.004+0.1\times 0.996}=0.031. +\begin{equation} +p(Y=1\vert X=1)=\frac{p(X=1\vert Y=1)p(Y=1)}{p(X=1\vert Y=1)p(Y=1)+p(X=1\vert Y=0)p(Y=0)}= +\label{_auto2} \tag{2} +\end{equation} +\]
    + +
    +
    +\[ +\begin{equation} + \frac{0.8\times 0.004}{0.8\times 0.004+0.1\times 0.996}=0.031. +\label{_auto3} \tag{3} +\end{equation} \]

    That is, in case of a positive test, there is only a \(3\%\) chance of having breast cancer!

    @@ -2745,8 +2782,11 @@ more intuitive way of understanding what Ridge and Lasso express.

    parameters \(\boldsymbol{\beta}\) using OLS, Ridge and Lasso regression. For OLS, you will notice as function of the noise and polynomial degree, that the parameters \(\beta\) will fluctuate from order to order in the -polynomial fit and that for larger and larger polynomial degrees of freedom, the parameters will tend to increase in value for OLS.

    -

    For Ridge and Lasso regression, the higher order parameters will typically be reduced, providing thereby less fluctuations from one order to another one.

    +polynomial fit and that for larger and larger polynomial degrees of +freedom, the parameters will tend to increase in value for OLS.

    +

    For Ridge and Lasso regression, the higher order parameters will +typically be reduced, providing thereby less fluctuations from one +order to another one.

    import numpy as np
    @@ -2802,8 +2842,8 @@ polynomial fit and that for larger and larger polynomial degrees of freedom, the
         # Compute the MSE and print it
         MSERidgePredict[i] = MSE(y_test,ypredictRidge)
         MSELassoPredict[i] = MSE(y_test,ypredictLasso)
    -    print(lmb,RegRidge.coef_)
    -    print(lmb,RegLasso.coef_)
    +#    print(lmb,RegRidge.coef_)
    +#    print(lmb,RegLasso.coef_)
     # Now plot the results
     plt.figure()
     plt.plot(np.log10(lambdas), MSERidgePredict, 'b', label = 'MSE Ridge Test')
    @@ -2819,22 +2859,15 @@ polynomial fit and that for larger and larger polynomial degrees of freedom, the
     
    [ 1.0169643   0.27924636 -1.4087793   1.03308408  0.        ]
     Test MSE OLS
     0.958228616652075
    -0.001 [ 1.0170259   0.27852549 -1.40702     1.03193199  0.        ]
    -0.001 [ 1.034342   -0.18063928 -0.          0.          0.        ]
     
    -
    0.021544346900318832 [ 1.01825571  0.26412372 -1.37186301  1.00890601  0.        ]
    -0.021544346900318832 [ 0.92280994 -0.         -0.         -0.          0.        ]
    -0.46415888336127775 [ 1.0344707   0.07160764 -0.89928965  0.69843037  0.        ]
    -0.46415888336127775 [0.48019541 0.         0.         0.         0.        ]
    -10.0 [ 1.04529095 -0.18224665 -0.15751596  0.16831012  0.        ]
    -10.0 [0. 0. 0. 0. 0.]
    -
    -
    -_images/chapter2_313_2.png +_images/chapter2_316_1.png
    -

    How can we understand this?

    +

    How can we understand this? More text to be added.

    +
    +
    +

    4.14. Linking Bayes’ Theorem with Ridge and Lasso Regression

    Using Bayes’ theorem we can gain a better intuition about Ridge and Lasso regression.

    For ordinary least squares we postulated that the maximum likelihood for the doamin of events \(\boldsymbol{D}\) (one-dimensional case)

    -
    Runtime: 0.136687 sec
    +
    Runtime: 0.138472 sec
     Jackknife Statistics :
     original           bias      std. error
    - 99.9196        99.9096        0.149076
    + 100.094        100.084        0.150306
     
    @@ -718,10 +718,10 @@ theorem.

    -
    Runtime: 1.78082 sec
    +
    Runtime: 2.06834 sec
     Bootstrap Statistics :
     original           bias      std. error
    - 99.9769  14.9969        99.9765        0.149832
    + 99.9933  15.0354        99.9941        0.149739
     
    ---------------------------------------------------------------------------
    @@ -769,158 +769,8 @@ original           bias      std. error
     
    -
    -

    5.4. Various steps in cross-validation

    -

    When the repetitive splitting of the data set is done randomly, -samples may accidently end up in a fast majority of the splits in -either training or test set. Such samples may have an unbalanced -influence on either model building or prediction evaluation. To avoid -this \(k\)-fold cross-validation structures the data splitting. The -samples are divided into \(k\) more or less equally sized exhaustive and -mutually exclusive subsets. In turn (at each split) one of these -subsets plays the role of the test set while the union of the -remaining subsets constitutes the training set. Such a splitting -warrants a balanced representation of each sample in both training and -test set over the splits. Still the division into the \(k\) subsets -involves a degree of randomness. This may be fully excluded when -choosing \(k=n\). This particular case is referred to as leave-one-out -cross-validation (LOOCV).

    -
      -
    • Define a range of interest for the penalty parameter.

    • -
    • Divide the data set into training and test set comprising samples \(\{1, \ldots, n\} \setminus i\) and \(\{ i \}\), respectively.

    • -
    • Fit the linear regression model by means of ridge estimation for each \(\lambda\) in the grid using the training set, and the corresponding estimate of the error variance \(\boldsymbol{\sigma}_{-i}^2(\lambda)\), as

    • -
    -
    -\[ -\begin{align*} -\boldsymbol{\beta}_{-i}(\lambda) & = ( \boldsymbol{X}_{-i, \ast}^{T} -\boldsymbol{X}_{-i, \ast} + \lambda \boldsymbol{I}_{pp})^{-1} -\boldsymbol{X}_{-i, \ast}^{T} \boldsymbol{y}_{-i} -\end{align*} -\]
    -
      -
    • Evaluate the prediction performance of these models on the test set by \(\log\{L[y_i, \boldsymbol{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}\). Or, by the prediction error \(|y_i - \boldsymbol{X}_{i, \ast} \boldsymbol{\beta}_{-i}(\lambda)|\), the relative error, the error squared or the R2 score function.

    • -
    • Repeat the first three steps such that each sample plays the role of the test set once.

    • -
    • Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as

    • -
    -
    -\[ -\begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}. -\end{align*} -\]
    -

    For the various values of \(k\)

    -
      -
    1. shuffle the dataset randomly.

    2. -
    3. Split the dataset into \(k\) groups.

    4. -
    5. For each unique group:

    6. -
    -

    a. Decide which group to use as set for test data

    -

    b. Take the remaining groups as a training data set

    -

    c. Fit a model on the training set and evaluate it on the test set

    -

    d. Retain the evaluation score and discard the model

    -
      -
    1. Summarize the model using the sample of model evaluation scores

    2. -
    -

    The code here uses Ridge regression with cross-validation (CV) resampling and \(k\)-fold CV in order to fit a specific polynomial.

    -
    -
    -
    import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.model_selection import KFold
    -from sklearn.linear_model import Ridge
    -from sklearn.model_selection import cross_val_score
    -from sklearn.preprocessing import PolynomialFeatures
    -
    -# A seed just to ensure that the random numbers are the same for every run.
    -# Useful for eventual debugging.
    -np.random.seed(3155)
    -
    -# Generate the data.
    -nsamples = 100
    -x = np.random.randn(nsamples)
    -y = 3*x**2 + np.random.randn(nsamples)
    -
    -## Cross-validation on Ridge regression using KFold only
    -
    -# Decide degree on polynomial to fit
    -poly = PolynomialFeatures(degree = 6)
    -
    -# Decide which values of lambda to use
    -nlambdas = 500
    -lambdas = np.logspace(-3, 5, nlambdas)
    -
    -# Initialize a KFold instance
    -k = 5
    -kfold = KFold(n_splits = k)
    -
    -# Perform the cross-validation to estimate MSE
    -scores_KFold = np.zeros((nlambdas, k))
    -
    -i = 0
    -for lmb in lambdas:
    -    ridge = Ridge(alpha = lmb)
    -    j = 0
    -    for train_inds, test_inds in kfold.split(x):
    -        xtrain = x[train_inds]
    -        ytrain = y[train_inds]
    -
    -        xtest = x[test_inds]
    -        ytest = y[test_inds]
    -
    -        Xtrain = poly.fit_transform(xtrain[:, np.newaxis])
    -        ridge.fit(Xtrain, ytrain[:, np.newaxis])
    -
    -        Xtest = poly.fit_transform(xtest[:, np.newaxis])
    -        ypred = ridge.predict(Xtest)
    -
    -        scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)
    -
    -        j += 1
    -    i += 1
    -
    -
    -estimated_mse_KFold = np.mean(scores_KFold, axis = 1)
    -
    -## Cross-validation using cross_val_score from sklearn along with KFold
    -
    -# kfold is an instance initialized above as:
    -# kfold = KFold(n_splits = k)
    -
    -estimated_mse_sklearn = np.zeros(nlambdas)
    -i = 0
    -for lmb in lambdas:
    -    ridge = Ridge(alpha = lmb)
    -
    -    X = poly.fit_transform(x[:, np.newaxis])
    -    estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)
    -
    -    # cross_val_score return an array containing the estimated negative mse for every fold.
    -    # we have to the the mean of every array in order to get an estimate of the mse of the model
    -    estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)
    -
    -    i += 1
    -
    -## Plot and compare the slightly different ways to perform cross-validation
    -
    -plt.figure()
    -
    -plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')
    -plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')
    -
    -plt.xlabel('log10(lambda)')
    -plt.ylabel('mse')
    -
    -plt.legend()
    -
    -plt.show()
    -
    -
    -
    -
    -
    -

    5.5. The bias-variance tradeoff

    +

    5.4. The bias-variance tradeoff

    We will discuss the bias-variance tradeoff in the context of continuous predictions such as regression. However, many of the intuitions and ideas discussed here also carry over to classification @@ -1265,6 +1115,157 @@ flexible statistical methods have higher variance.

    +
    +
    +

    5.5. Cross-validation

    +

    When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this \(k\)-fold cross-validation structures the data splitting. The +samples are divided into \(k\) more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the \(k\) subsets +involves a degree of randomness. This may be fully excluded when +choosing \(k=n\). This particular case is referred to as leave-one-out +cross-validation (LOOCV).

    +
      +
    • Define a range of interest for the penalty parameter.

    • +
    • Divide the data set into training and test set comprising samples \(\{1, \ldots, n\} \setminus i\) and \(\{ i \}\), respectively.

    • +
    • Fit the linear regression model by means of ridge estimation for each \(\lambda\) in the grid using the training set, and the corresponding estimate of the error variance \(\boldsymbol{\sigma}_{-i}^2(\lambda)\), as

    • +
    +
    +\[ +\begin{align*} +\boldsymbol{\beta}_{-i}(\lambda) & = ( \boldsymbol{X}_{-i, \ast}^{T} +\boldsymbol{X}_{-i, \ast} + \lambda \boldsymbol{I}_{pp})^{-1} +\boldsymbol{X}_{-i, \ast}^{T} \boldsymbol{y}_{-i} +\end{align*} +\]
    +
      +
    • Evaluate the prediction performance of these models on the test set by \(\log\{L[y_i, \boldsymbol{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}\). Or, by the prediction error \(|y_i - \boldsymbol{X}_{i, \ast} \boldsymbol{\beta}_{-i}(\lambda)|\), the relative error, the error squared or the R2 score function.

    • +
    • Repeat the first three steps such that each sample plays the role of the test set once.

    • +
    • Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as

    • +
    +
    +\[ +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +\]
    +

    For the various values of \(k\)

    +
      +
    1. shuffle the dataset randomly.

    2. +
    3. Split the dataset into \(k\) groups.

    4. +
    5. For each unique group:

    6. +
    +

    a. Decide which group to use as set for test data

    +

    b. Take the remaining groups as a training data set

    +

    c. Fit a model on the training set and evaluate it on the test set

    +

    d. Retain the evaluation score and discard the model

    +
      +
    1. Summarize the model using the sample of model evaluation scores

    2. +
    +

    The code here uses Ridge regression with cross-validation (CV) resampling and \(k\)-fold CV in order to fit a specific polynomial.

    +
    +
    +
    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.model_selection import KFold
    +from sklearn.linear_model import Ridge
    +from sklearn.model_selection import cross_val_score
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +# A seed just to ensure that the random numbers are the same for every run.
    +# Useful for eventual debugging.
    +np.random.seed(3155)
    +
    +# Generate the data.
    +nsamples = 100
    +x = np.random.randn(nsamples)
    +y = 3*x**2 + np.random.randn(nsamples)
    +
    +## Cross-validation on Ridge regression using KFold only
    +
    +# Decide degree on polynomial to fit
    +poly = PolynomialFeatures(degree = 6)
    +
    +# Decide which values of lambda to use
    +nlambdas = 500
    +lambdas = np.logspace(-3, 5, nlambdas)
    +
    +# Initialize a KFold instance
    +k = 5
    +kfold = KFold(n_splits = k)
    +
    +# Perform the cross-validation to estimate MSE
    +scores_KFold = np.zeros((nlambdas, k))
    +
    +i = 0
    +for lmb in lambdas:
    +    ridge = Ridge(alpha = lmb)
    +    j = 0
    +    for train_inds, test_inds in kfold.split(x):
    +        xtrain = x[train_inds]
    +        ytrain = y[train_inds]
    +
    +        xtest = x[test_inds]
    +        ytest = y[test_inds]
    +
    +        Xtrain = poly.fit_transform(xtrain[:, np.newaxis])
    +        ridge.fit(Xtrain, ytrain[:, np.newaxis])
    +
    +        Xtest = poly.fit_transform(xtest[:, np.newaxis])
    +        ypred = ridge.predict(Xtest)
    +
    +        scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)
    +
    +        j += 1
    +    i += 1
    +
    +
    +estimated_mse_KFold = np.mean(scores_KFold, axis = 1)
    +
    +## Cross-validation using cross_val_score from sklearn along with KFold
    +
    +# kfold is an instance initialized above as:
    +# kfold = KFold(n_splits = k)
    +
    +estimated_mse_sklearn = np.zeros(nlambdas)
    +i = 0
    +for lmb in lambdas:
    +    ridge = Ridge(alpha = lmb)
    +
    +    X = poly.fit_transform(x[:, np.newaxis])
    +    estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)
    +
    +    # cross_val_score return an array containing the estimated negative mse for every fold.
    +    # we have to the the mean of every array in order to get an estimate of the mse of the model
    +    estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)
    +
    +    i += 1
    +
    +## Plot and compare the slightly different ways to perform cross-validation
    +
    +plt.figure()
    +
    +plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')
    +plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')
    +
    +plt.xlabel('log10(lambda)')
    +plt.ylabel('mse')
    +
    +plt.legend()
    +
    +plt.show()
    +
    +
    +
    +
    +

    More examples of the application of cross-validation follow here.

    -

    6.6. Optimization, the central part of any Machine Learning algortithm

    +

    7. Optimization, the central part of any Machine Learning algortithm

    Almost every problem in machine learning and data science starts with a dataset \(X\), a model \(g(\beta)\), which is a function of the parameters \(\beta\) and a cost function \(C(X, g(\beta))\) that allows @@ -1307,9 +1135,6 @@ us to judge how well the model \(g(\b the cost function. Ideally we would be able to solve for \(\beta\) analytically, however this is not possible in general and we must use some approximative/numerical method to compute the minimum.

    -
    -
    -

    6.7. Revisiting our Logistic Regression case

    In our discussion on Logistic Regression we studied the case of two classes, with \(y_i\) either @@ -1324,9 +1149,6 @@ p(y_i=0|x_i,\boldsymbol{\beta}) &= 1 - p(y_i=1|x_i,\boldsymbol{\beta}), \end{align*} \end{split}\]

    where \(\boldsymbol{\beta}\) are the weights we wish to extract from data, in our case \(\beta_0\) and \(\beta_1\).

    -
    -
    -

    6.8. The equations to solve

    Our compact equations used a definition of a vector \(\boldsymbol{y}\) with \(n\) elements \(y_i\), an \(n\times p\) matrix \(\boldsymbol{X}\) which contains the \(x_i\) values and a vector \(\boldsymbol{p}\) of fitted probabilities @@ -1343,9 +1165,6 @@ the first derivative of the cost function as

    \frac{\partial^2 \mathcal{C}(\boldsymbol{\beta})}{\partial \boldsymbol{\beta}\partial \boldsymbol{\beta}^T} = \boldsymbol{X}^T\boldsymbol{W}\boldsymbol{X}. \]

    This defines what is called the Hessian matrix.

    -
    -
    -

    6.9. Solving using Newton-Raphson’s method

    If we can set up these equations, Newton-Raphson’s iterative method is normally the method of choice. It requires however that we can compute in an efficient way the matrices that define the first and second derivatives.

    Our iterative scheme is then given by

    @@ -1359,9 +1178,6 @@ the first derivative of the cost function as

    \]

    The right-hand side is computed with the old values of \(\beta\).

    If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement.

    -
    -
    -

    6.10. Brief reminder on Newton-Raphson’s method

    Let us quickly remind ourselves how we derive the above method.

    Perhaps the most celebrated of all one-dimensional root-finding routines is Newton’s method, also called the Newton-Raphson @@ -1370,9 +1186,6 @@ function \(f\) and its derivat If you can only calculate the derivative numerically and/or your function is not of the smooth type, we normally discourage the use of this method.

    -
    -
    -

    6.11. The equations

    The Newton-Raphson formula consists geometrically of extending the tangent line at a current point until it crosses zero, then setting the next guess to the abscissa of that zero-crossing. The mathematics @@ -1401,9 +1214,6 @@ s\approx x-\frac{f(x)}{f'(x)}. \[ x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}. \]

    -
    -
    -

    6.12. Simple geometric interpretation

    The above is Newton-Raphson’s method. It has a simple geometric interpretation, namely \(x_{n+1}\) is the point where the tangent from \((x_n,f(x_n))\) crosses the \(x\)-axis. Close to the solution, @@ -1415,9 +1225,6 @@ from the true root as to let the search interval include a local maximum or minimum of the function. If an iteration places a trial guess near such a local extremum, so that the first derivative nearly vanishes, then Newton-Raphson may fail totally

    -
    -
    -

    6.13. Extending to more than one variable

    Newton’s method can be generalized to systems of several non-linear equations and variables. Consider the case with two equations

    @@ -1463,9 +1270,8 @@ is to understand that difficulties may arise in case \(\boldsymbol{J}\) is nearly singular.

    It is rather straightforward to extend the above scheme to systems of more than two non-linear equations. In our case, the Jacobian matrix is given by the Hessian that represents the second derivative of cost function.

    -
    -

    6.14. Steepest descent

    +

    7.1. Steepest descent

    The basic idea of gradient descent is that a function \(F(\mathbf{x})\), \(\mathbf{x} \equiv (x_1,\cdots,x_n)\), decreases fastest if one goes from \(\bf {x}\) in the @@ -1479,9 +1285,6 @@ direction of the negative gradient \(

    For \(\gamma_k\) small enough, then \(F(\mathbf{x}_{k+1}) \leq F(\mathbf{x}_k)\). This means that for a sufficiently small \(\gamma_k\) we are always moving towards smaller function values, i.e a minimum.

    -
    -
    -

    6.15. More on Steepest descent

    The previous observation is the basis of the method of steepest descent, which is also referred to as just gradient descent (GD). One starts with an initial guess \(\mathbf{x}_0\) for a minimum of \(F\) and @@ -1492,9 +1295,6 @@ computes new approximations according to

    \]

    The parameter \(\gamma_k\) is often referred to as the step length or the learning rate within the context of Machine Learning.

    -
    -
    -

    6.16. The ideal

    Ideally the sequence \(\{\mathbf{x}_k \}_{k=0}\) converges to a global minimum of the function \(F\). In general we do not know if we are in a global or local minimum. In the special case when \(F\) is a convex @@ -1510,9 +1310,6 @@ have a very good intial guess. This also implies that the scheme is sensitive to the chosen initial condition.

    Note that the gradient is a function of \(\mathbf{x} = (x_1,\cdots,x_n)\) which makes it expensive to compute numerically.

    -
    -
    -

    6.17. The sensitiveness of the gradient descent

    The gradient descent method is sensitive to the choice of learning rate \(\gamma_k\). This is due to the fact that we are only guaranteed that \(F(\mathbf{x}_{k+1}) \leq @@ -1525,7 +1322,7 @@ randomness. One such method is that of Stochastic Gradient Descent (SGD), see below.

    -

    6.18. Convex functions

    +

    7.2. Convex functions

    Ideally we want our cost/loss function to be convex(concave).

    First we give the definition of a convex set: A set \(C\) in \(\mathbb{R}^n\) is said to be convex if, for all \(x\) and \(y\) in \(C\) and @@ -1535,13 +1332,7 @@ connecting \(x\) and The convex subsets of \(\mathbb{R}\) are the intervals of \(\mathbb{R}\). Examples of convex sets of \(\mathbb{R}^2\) are the regular polygons (triangles, rectangles, pentagons, etc…).

    -
    -
    -

    6.19. Convex function

    Convex function: Let \(X \subset \mathbb{R}^n\) be a convex set. Assume that the function \(f: X \rightarrow \mathbb{R}\) is continuous, then \(f\) is said to be convex if $\(f(tx_1 + (1-t)x_2) \leq tf(x_1) + (1-t)f(x_2) \)\( for all \)x_1, x_2 \in X\( and for all \)t \in [0,1]\(. If \)\leq\( is replaced with a strict inequaltiy in the definition, we demand \)x_1 \neq x_2\( and \)t\in(0,1)\( then \)f\( is said to be strictly convex. For a single variable function, convexity means that if you draw a straight line connecting \)f(x_1)\( and \)f(x_2)\(, the value of the function on the interval \)[x_1,x_2]$ is always below the line as illustrated below.

    -
    -
    -

    6.20. Conditions on convex functions

    In the following we state first and second-order conditions which ensures convexity of a function \(f\). We write \(D_f\) to denote the domain of \(f\), i.e the subset of \(R^n\) where \(f\) is defined. For more @@ -1563,9 +1354,6 @@ Hessian is positive semi-definite for all \(f''(x) \geq 0\). Geometrically this means that \(f\) has nonnegative curvature everywhere.

    This condition is particularly useful since it gives us an procedure for determining if the function under consideration is convex, apart from using the definition.

    -
    -
    -

    6.21. More on convex functions

    The next result is of great importance to us and the reason why we are going on about convex functions. In machine learning we frequently have to minimize a loss/cost function in order to find the best @@ -1579,9 +1367,8 @@ is convex the following result provides invaluable information:

    is minimal, where \(f\) is convex and differentiable. Then, any point \(x^*\) that satisfies \(\nabla f(x^*) = 0\) is a global minimum.

    This result means that if we know that the cost/loss function is convex and we are able to find a minimum, we are guaranteed that it is a global minimum.

    -
    -

    6.22. Some simple problems

    +

    7.2.1. Some simple problems

    1. Show that \(f(x)=x^2\) is convex for \(x \in \mathbb{R}\) using the definition of convexity. Hint: If you re-write the definition, \(f\) is convex if the following holds for all \(x,y \in D_f\) and any \(\lambda \in [0,1]\) \(\lambda f(x)+(1-\lambda)f(y)-f(\lambda x + (1-\lambda) y ) \geq 0\).

    2. Using the second order condition show that the following functions are convex on the specified domain.

    3. @@ -1601,12 +1388,9 @@ is minimal, where \(f\) is con

      Using the definition of convexity, try to show that a function satisfying the properties above is convex (the third condition is not needed to show this).

    -
    -

    6.23. Friday September 25

    -

    Video of Lecture and link to handwritten notes.

    -

    6.24. Standard steepest descent

    +

    7.3. Standard steepest descent

    Before we proceed, we would like to discuss the approach called the standard Steepest descent (different from the above steepest descent discussion), which again leads to us having to be able to compute a matrix. It belongs to the class of Conjugate Gradient methods (CG).

    @@ -1626,9 +1410,6 @@ algebra of the type

    \]

    where \(\boldsymbol{r}\) is the so-called residual or error in the iterative process.

    When we have found the exact solution, \(\boldsymbol{r}=0\).

    -
    -
    -

    6.25. Gradient method

    The residual is zero when we reach the minimum of the quadratic equation

    \[ @@ -1636,9 +1417,6 @@ P(\boldsymbol{x})=\frac{1}{2}\boldsymbol{x}^T\boldsymbol{A}\boldsymbol{x} - \bol \]

    with the constraint that the matrix \(\boldsymbol{A}\) is positive definite and symmetric. This defines also the Hessian and we want it to be positive definite.

    -
    -
    -

    6.26. Steepest descent method

    We denote the initial guess for \(\boldsymbol{x}\) as \(\boldsymbol{x}_0\). We can assume without loss of generality that

    @@ -1651,9 +1429,6 @@ We can assume without loss of generality that

    \boldsymbol{A}\boldsymbol{z} = \boldsymbol{b}-\boldsymbol{A}\boldsymbol{x}_0, \]

    instead.

    -
    -
    -

    6.27. Steepest descent method

    One can show that the solution \(\boldsymbol{x}\) is also the unique minimizer of the quadratic form

    \[ @@ -1668,9 +1443,6 @@ which equals

    \]

    and \(\boldsymbol{x}_0=0\) it is equal \(-\boldsymbol{b}\).

    -
    -
    -

    6.28. Final expressions

    We can compute the residual iteratively as

    \[ @@ -1696,9 +1468,6 @@ which equals

    \[ \boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\alpha_k\boldsymbol{r}_{k}, \]
    -
    -
    -

    6.29. Steepest descent example

    import numpy as np
    @@ -1724,6 +1493,12 @@ which equals

    +
    +
    <mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0x7febdb109490>
    +
    +
    +_images/chapter4_114_1.png +

    And then as countor plot

    @@ -1734,6 +1509,9 @@ which equals

    +
    +_images/chapter4_116_0.png +

    Find guesses

    @@ -1757,6 +1535,11 @@ which equals

    +
    +
    [ 1.33333333 -0.26666667]
    +
    +
    +

    What happened?

    @@ -1768,10 +1551,16 @@ which equals

    +
    +
    [<matplotlib.lines.Line2D at 0x7febdb6780d0>]
    +
    +
    +_images/chapter4_122_1.png +
    -

    6.30. Conjugate gradient method

    +

    7.4. Conjugate gradient method

    In the CG method we define so-called conjugate directions and two vectors \(\boldsymbol{s}\) and \(\boldsymbol{t}\) are said to be @@ -1788,18 +1577,12 @@ of our vectors \(\boldsymbol{x}_i\)

    Two vectors are conjugate if they are orthogonal with respect to this inner product. Being conjugate is a symmetric relation: if \(\boldsymbol{s}\) is conjugate to \(\boldsymbol{t}\), then \(\boldsymbol{t}\) is conjugate to \(\boldsymbol{s}\).

    -
    -
    -

    6.31. Conjugate gradient method

    An example is given by the eigenvectors of the matrix

    \[ \boldsymbol{v}_i^T\boldsymbol{A}\boldsymbol{v}_j= \lambda\boldsymbol{v}_i^T\boldsymbol{v}_j, \]

    which is zero unless \(i=j\).

    -
    -
    -

    6.32. Conjugate gradient method

    Assume now that we have a symmetric positive-definite matrix \(\boldsymbol{A}\) of size \(n\times n\). At each iteration \(i+1\) we obtain the conjugate direction of a vector

    @@ -1813,9 +1596,6 @@ Then the \(\boldsymbol{p}_{i}\) -
    -
    -

    6.33. Conjugate gradient method

    The coefficients are given by

    \[ @@ -1831,9 +1611,6 @@ Then the \(\boldsymbol{p}_{i}\) -
    -
    -

    6.34. Conjugate gradient method and iterations

    If we choose the conjugate vectors \(\boldsymbol{p}_k\) carefully, then we may not need all of them to obtain a good approximation to the solution \(\boldsymbol{x}\). @@ -1852,9 +1629,6 @@ We can assume without loss of generality that

    \boldsymbol{A}\boldsymbol{z} = \boldsymbol{b}-\boldsymbol{A}\boldsymbol{x}_0, \]

    instead.

    -
    -
    -

    6.35. Conjugate gradient method

    One can show that the solution \(\boldsymbol{x}\) is also the unique minimizer of the quadratic form

    \[ @@ -1871,9 +1645,6 @@ which equals

    \(\boldsymbol{x}_0=0\) it is equal \(-\boldsymbol{b}\). The other vectors in the basis will be conjugate to the gradient, hence the name conjugate gradient method.

    -
    -
    -

    6.36. Conjugate gradient method

    Let \(\boldsymbol{r}_k\) be the residual at the \(k\)-th step:

    \[ @@ -1890,9 +1661,6 @@ This gives the following expression

    \[ \boldsymbol{p}_{k+1}=\boldsymbol{r}_k-\frac{\boldsymbol{p}_k^T \boldsymbol{A}\boldsymbol{r}_k}{\boldsymbol{p}_k^T\boldsymbol{A}\boldsymbol{p}_k} \boldsymbol{p}_k. \]
    -
    -
    -

    6.37. Conjugate gradient method

    We can also compute the residual iteratively as

    \[ @@ -1914,14 +1682,14 @@ This gives the following expression

    \boldsymbol{r}_{k+1}=\boldsymbol{r}_k-\boldsymbol{A}\boldsymbol{p}_{k}, \]
    -
    -

    6.38. Revisiting our first homework

    +
    +

    7.5. Revisiting our Linear Regression Solvers

    We will use linear regression as a case study for the gradient descent methods. Linear regression is a great test case for the gradient descent methods discussed in the lectures since it has several desirable properties such as:

      -
    1. An analytical solution (recall homework set 1).

    2. +
    3. An analytical solution.

    4. The gradient can be computed analytically.

    5. The cost function is convex which guarantees that gradient descent converges for small enough learning rates

    @@ -1933,6 +1701,17 @@ desirable properties such as:

    +
    +
    ---------------------------------------------------------------------------
    +NameError                                 Traceback (most recent call last)
    +<ipython-input-14-be0d226abb41> in <module>
    +----> 1 x = 2*np.random.rand(m,1)
    +      2 y = 4+3*x+np.random.randn(m,1)
    +
    +NameError: name 'm' is not defined
    +
    +
    +

    with \(x_i \in [0,1] \) is chosen randomly using a uniform distribution. Additionally we have a stochastic noise chosen according to a normal distribution \(\cal {N}(0,1)\). The linear regression model is given by

    @@ -1945,9 +1724,6 @@ h_\beta(x) = \boldsymbol{y} = \beta_0 + \beta_1 x, \[ \boldsymbol{y}_i = \beta_0 + \beta_1 x_i. \] - -
    -

    6.39. Gradient descent example

    Let \(\mathbf{y} = (y_1,\cdots,y_n)^T\), \(\mathbf{\boldsymbol{y}} = (\boldsymbol{y}_1,\cdots,\boldsymbol{y}_n)^T\) and \(\beta = (\beta_0, \beta_1)^T\)

    It is convenient to write \(\mathbf{\boldsymbol{y}} = X\beta\) where \(X \in \mathbb{R}^{100 \times 2} \) is the design matrix given by (we keep the intercept here)

    @@ -1964,9 +1740,6 @@ X \equiv \begin{bmatrix} C(\beta) = \frac{1}{n}||X\beta-\mathbf{y}||_{2}^{2} = \frac{1}{n}\sum_{i=1}^{100}\left[ (\beta_0 + \beta_1 x_i)^2 - 2 y_i (\beta_0 + \beta_1 x_i) + y_i^2\right] \]

    and we want to find \(\beta\) such that \(C(\beta)\) is minimized.

    -
    -
    -

    6.40. The derivative of the cost/loss function

    Computing \(\partial C(\beta) / \partial \beta_0\) and \(\partial C(\beta) / \partial \beta_1\) we can show that the gradient can be written as

    \[\begin{split} @@ -1975,9 +1748,6 @@ C(\beta) = \frac{1}{n}||X\beta-\mathbf{y}||_{2}^{2} = \frac{1}{n}\sum_{i=1}^{100 \end{bmatrix} = \frac{2}{n}X^T(X\beta - \mathbf{y}), \end{split}\]

    where \(X\) is the design matrix defined above.

    -
    -
    -

    6.41. The Hessian matrix

    The Hessian matrix of \(C(\beta)\) is given by

    \[\begin{split} @@ -1987,9 +1757,6 @@ C(\beta) = \frac{1}{n}||X\beta-\mathbf{y}||_{2}^{2} = \frac{1}{n}\sum_{i=1}^{100 \end{bmatrix} = \frac{2}{n}X^T X. \end{split}\]

    This result implies that \(C(\beta)\) is a convex function since the matrix \(X^T X\) always is positive semi-definite.

    -
    -
    -

    6.42. Simple program

    We can now write a program that minimizes \(C(\beta)\) using the gradient descent method with a constant learning rate \(\gamma\) according to

    \[ @@ -2000,10 +1767,7 @@ C(\beta) = \frac{1}{n}||X\beta-\mathbf{y}||_{2}^{2} = \frac{1}{n}\sum_{i=1}^{100 when \(||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8}\). Note that the code below does not include the latter stop criterion.

    And finally we can compare our solution for \(\beta\) with the analytic result given by \(\beta= (X^TX)^{-1} X^T \mathbf{y}\).

    -
    -
    -

    6.43. Gradient Descent Example

    -

    Here our simple example

    +

    Here is our simple example

    # Importing various packages
    @@ -2055,9 +1819,7 @@ when \(||\nabla_\beta C(\beta_k) || \
     
    -
    -
    -

    6.44. And a corresponding example using scikit-learn

    +

    Alternatively, we can use Scikit-Learn as done here

    # Importing various packages
    @@ -2080,9 +1842,6 @@ when \(||\nabla_\beta C(\beta_k) || \
     
    -
    -
    -

    6.45. Gradient descent and Ridge

    We have also discussed Ridge regression where the loss function contains a regularized term given by the \(L_2\) norm of \(\beta\),

    \[ @@ -2100,9 +1859,6 @@ C_{\text{ridge}}(\beta) = \frac{1}{n}||X\beta -\mathbf{y}||^2 + \lambda ||\beta| \[ \beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. \]
    -
    -
    -

    6.46. Program example for gradient descent with Ridge Regression

    from random import random, seed
    @@ -2154,7 +1910,7 @@ C_{\text{ridge}}(\beta) = \frac{1}{n}||X\beta -\mathbf{y}||^2 + \lambda ||\beta|
     
    -

    6.47. Using gradient descent methods, limitations

    +

    7.6. Using gradient descent methods, limitations

    • Gradient descent (GD) finds local minima of our function. Since the GD algorithm is deterministic, if it converges, it will converge to a local minimum of our cost/loss/risk function. Because in ML we are often dealing with extremely rugged landscapes with many local minima, this can lead to poor performance.

    • GD is sensitive to initial conditions. One consequence of the local nature of GD is that initial conditions matter. Depending on where one starts, one will end up at a different local minima. Therefore, it is very important to think about how one initializes the training process. This is true for GD as well as more complicated variants of GD.

    • @@ -2165,7 +1921,7 @@ C_{\text{ridge}}(\beta) = \frac{1}{n}||X\beta -\mathbf{y}||^2 + \lambda ||\beta|
    -

    6.48. Stochastic Gradient Descent

    +

    7.7. Stochastic Gradient Descent

    Stochastic gradient descent (SGD) and variants thereof address some of the shortcomings of the Gradient descent method discussed above.

    The underlying idea of SGD comes from the observation that the cost @@ -2176,9 +1932,6 @@ sum over \(n\) data points -

    -
    -

    6.49. Computation of gradients

    This in turn means that the gradient can be computed as a sum over \(i\)-gradients

    @@ -2191,9 +1944,6 @@ gradient on a subset of the data called minibatches. If there are \(M\), there will be \(n/M\) minibatches. We denote these minibatches by \(B_k\) where \(k=1,\cdots,n/M\).

    -
    -
    -

    6.50. SGD example

    As an example, suppose we have \(10\) data points \((\mathbf{x}_1,\cdots, \mathbf{x}_{10})\) and we choose to have \(M=5\) minibathces, then each minibatch contains two data points. In particular we have @@ -2212,9 +1962,6 @@ C(\mathbf{\beta}) = \sum_{i=1}^n \nabla_\beta c_i(\mathbf{x}_i, \mathbf{\beta}) \rightarrow \sum_{i \in B_k}^n \nabla_\beta c_i(\mathbf{x}_i, \mathbf{\beta}). \]

    -
    -
    -

    6.51. The gradient step

    Thus a gradient descent step now looks like

    \[ @@ -2226,9 +1973,6 @@ probability from \([1,n/M]\). minibathces (n/M) is commonly referred to as an epoch. Thus it is typical to choose a number of epochs and for each epoch iterate over the number of minibatches, as exemplified in the code below.

    -
    -
    -

    6.52. Simple example code

    import numpy as np 
    @@ -2256,9 +2000,6 @@ the size of the minibatches are small relative to the number of
     datapoints (\(M <  n\)), the computation of the gradient is much
     cheaper since we sum over the datapoints in the \(k-th\) minibatch and not
     all \(n\) datapoints.

    -
    -
    -

    6.53. When do we stop?

    A natural question is when do we stop the search for a new minimum? One possibility is to compute the full gradient after a given number of epochs and check if the norm of the gradient is smaller than some @@ -2269,9 +2010,6 @@ evaluate the cost function at this point, store the result and continue the search. If the test kicks in at a later stage we can compare the values of the cost function and keep the \(\beta\) that gave the lowest value.

    -
    -
    -

    6.54. Slightly different approach

    Another approach is to let the step length \(\gamma_j\) depend on the number of epochs in such a way that it becomes very small after a reasonable time such that we do not move at all.

    @@ -2311,9 +2049,8 @@ function.

    -
    -

    6.55. Program for stochastic gradient

    +

    7.7.1. Program for stochastic gradient

    # Importing various packages
    @@ -2384,7 +2121,594 @@ function.

    -

    Challenge: try to write a similar code for a Logistic Regression case.

    +
    +
    +
    +

    7.8. Momentum based GD

    +

    The stochastic gradient descent (SGD) is almost always used with a +momentum or inertia term that serves as a memory of the direction we +are moving in parameter space. This is typically implemented as +follows

    +
    +\[ +\mathbf{v}_{t}=\gamma \mathbf{v}_{t-1}+\eta_{t}\nabla_\theta E(\boldsymbol{\theta}_t) \nonumber +\]
    + +
    +
    +\[ +\begin{equation} +\boldsymbol{\theta}_{t+1}= \boldsymbol{\theta}_t -\mathbf{v}_{t}, +\label{_auto2} \tag{3} +\end{equation} +\]
    +

    where we have introduced a momentum parameter \(\gamma\), with +\(0\le\gamma\le 1\), and for brevity we dropped the explicit notation to +indicate the gradient is to be taken over a different mini-batch at +each step. We call this algorithm gradient descent with momentum +(GDM). From these equations, it is clear that \(\mathbf{v}_t\) is a +running average of recently encountered gradients and +\((1-\gamma)^{-1}\) sets the characteristic time scale for the memory +used in the averaging procedure. Consistent with this, when +\(\gamma=0\), this just reduces down to ordinary SGD as discussed +earlier. An equivalent way of writing the updates is

    +
    +\[ +\Delta \boldsymbol{\theta}_{t+1} = \gamma \Delta \boldsymbol{\theta}_t -\ \eta_{t}\nabla_\theta E(\boldsymbol{\theta}_t), +\]
    +

    where we have defined \(\Delta \boldsymbol{\theta}_{t}= \boldsymbol{\theta}_t-\boldsymbol{\theta}_{t-1}\).

    +

    Let us try to get more intuition from these equations. It is helpful +to consider a simple physical analogy with a particle of mass \(m\) +moving in a viscous medium with drag coefficient \(\mu\) and potential +\(E(\mathbf{w})\). If we denote the particle’s position by \(\mathbf{w}\), +then its motion is described by

    +
    +\[ +m {d^2 \mathbf{w} \over dt^2} + \mu {d \mathbf{w} \over dt }= -\nabla_w E(\mathbf{w}). +\]
    +

    We can discretize this equation in the usual way to get

    +
    +\[ +m { \mathbf{w}_{t+\Delta t}-2 \mathbf{w}_{t} +\mathbf{w}_{t-\Delta t} \over (\Delta t)^2}+\mu {\mathbf{w}_{t+\Delta t}- \mathbf{w}_{t} \over \Delta t} = -\nabla_w E(\mathbf{w}). +\]
    +

    Rearranging this equation, we can rewrite this as

    +
    +\[ +\Delta \mathbf{w}_{t +\Delta t}= - { (\Delta t)^2 \over m +\mu \Delta t} \nabla_w E(\mathbf{w})+ {m \over m +\mu \Delta t} \Delta \mathbf{w}_t. +\]
    +

    Notice that this equation is identical to previous one if we identify +the position of the particle, \(\mathbf{w}\), with the parameters +\(\boldsymbol{\theta}\). This allows us to identify the momentum +parameter and learning rate with the mass of the particle and the +viscous drag as:

    +
    +\[ +\gamma= {m \over m +\mu \Delta t }, \qquad \eta = {(\Delta t)^2 \over m +\mu \Delta t}. +\]
    +

    Thus, as the name suggests, the momentum parameter is proportional to +the mass of the particle and effectively provides inertia. +Furthermore, in the large viscosity/small learning rate limit, our +memory time scales as \((1-\gamma)^{-1} \approx m/(\mu \Delta t)\).

    +

    Why is momentum useful? SGD momentum helps the gradient descent +algorithm gain speed in directions with persistent but small gradients +even in the presence of stochasticity, while suppressing oscillations +in high-curvature directions. This becomes especially important in +situations where the landscape is shallow and flat in some directions +and narrow and steep in others. It has been argued that first-order +methods (with appropriate initial conditions) can perform comparable +to more expensive second order methods, especially in the context of +complex deep learning models.

    +

    These beneficial properties of momentum can sometimes become even more +pronounced by using a slight modification of the classical momentum +algorithm called Nesterov Accelerated Gradient (NAG).

    +

    In the NAG algorithm, rather than calculating the gradient at the +current parameters, \(\nabla_\theta E(\boldsymbol{\theta}_t)\), one +calculates the gradient at the expected value of the parameters given +our current momentum, \(\nabla_\theta E(\boldsymbol{\theta}_t +\gamma +\mathbf{v}_{t-1})\). This yields the NAG update rule

    +
    +\[ +\mathbf{v}_{t}=\gamma \mathbf{v}_{t-1}+\eta_{t}\nabla_\theta E(\boldsymbol{\theta}_t +\gamma \mathbf{v}_{t-1}) \nonumber +\]
    + +
    +
    +\[ +\begin{equation} +\boldsymbol{\theta}_{t+1}= \boldsymbol{\theta}_t -\mathbf{v}_{t}. +\label{_auto3} \tag{4} +\end{equation} +\]
    +

    One of the major advantages of NAG is that it allows for the use of a larger learning rate than GDM for the same choice of \(\gamma\).

    +

    In stochastic gradient descent, with and without momentum, we still +have to specify a schedule for tuning the learning rates \(\eta_t\) +as a function of time. As discussed in the context of Newton’s +method, this presents a number of dilemmas. The learning rate is +limited by the steepest direction which can change depending on the +current position in the landscape. To circumvent this problem, ideally +our algorithm would keep track of curvature and take large steps in +shallow, flat directions and small steps in steep, narrow directions. +Second-order methods accomplish this by calculating or approximating +the Hessian and normalizing the learning rate by the +curvature. However, this is very computationally expensive for +extremely large models. Ideally, we would like to be able to +adaptively change the step size to match the landscape without paying +the steep computational price of calculating or approximating +Hessians.

    +

    Recently, a number of methods have been introduced that accomplish +this by tracking not only the gradient, but also the second moment of +the gradient. These methods include AdaGrad, AdaDelta, RMS-Prop, and +ADAM.

    +
    +

    7.8.1. RMS prop

    +

    In RMS prop, in addition to keeping a running average of the first +moment of the gradient, we also keep track of the second moment +denoted by \(\mathbf{s}_t=\mathbb{E}[\mathbf{g}_t^2]\). The update rule +for RMS prop is given by

    + +
    +
    +\[ +\begin{equation} +\mathbf{g}_t = \nabla_\theta E(\boldsymbol{\theta}) +\label{_auto4} \tag{5} +\end{equation} +\]
    +
    +\[ +\mathbf{s}_t =\beta \mathbf{s}_{t-1} +(1-\beta)\mathbf{g}_t^2 \nonumber +\]
    +
    +\[ +\boldsymbol{\theta}_{t+1}=\boldsymbol{\theta}_t - \eta_t { \mathbf{g}_t \over \sqrt{\mathbf{s}_t +\epsilon}}, \nonumber +\]
    +

    where \(\beta\) controls the averaging time of the second moment and is +typically taken to be about \(\beta=0.9\), \(\eta_t\) is a learning rate +typically chosen to be \(10^{-3}\), and \(\epsilon\sim 10^{-8} \) is a +small regularization constant to prevent divergences. Multiplication +and division by vectors is understood as an element-wise operation. It +is clear from this formula that the learning rate is reduced in +directions where the norm of the gradient is consistently large. This +greatly speeds up the convergence by allowing us to use a larger +learning rate for flat directions.

    +
    +
    +

    7.8.2. ADAM optimizer

    +

    A related algorithm is the ADAM optimizer. In ADAM, we keep a running +average of both the first and second moment of the gradient and use +this information to adaptively change the learning rate for different +parameters. In addition to keeping a running average of the first and +second moments of the gradient +(i.e. \(\mathbf{m}_t=\mathbb{E}[\mathbf{g}_t]\) and +\(\mathbf{s}_t=\mathbb{E}[\mathbf{g}^2_t]\), respectively), ADAM +performs an additional bias correction to account for the fact that we +are estimating the first two moments of the gradient using a running +average (denoted by the hats in the update rule below). The update +rule for ADAM is given by (where multiplication and division are once +again understood to be element-wise operations below)

    + +
    +
    +\[ +\begin{equation} +\mathbf{g}_t = \nabla_\theta E(\boldsymbol{\theta}) +\label{_auto5} \tag{6} +\end{equation} +\]
    +
    +\[ +\mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1-\beta_1) \mathbf{g}_t \nonumber +\]
    +
    +\[ +\mathbf{s}_t =\beta_2 \mathbf{s}_{t-1} +(1-\beta_2)\mathbf{g}_t^2 \nonumber +\]
    +
    +\[ +\boldsymbol{\mathbf{m}}_t={\mathbf{m}_t \over 1-\beta_1^t} \nonumber +\]
    +
    +\[ +\boldsymbol{\mathbf{s}}_t ={\mathbf{s}_t \over1-\beta_2^t} \nonumber +\]
    +
    +\[ +\boldsymbol{\theta}_{t+1}=\boldsymbol{\theta}_t - \eta_t { \boldsymbol{\mathbf{m}}_t \over \sqrt{\boldsymbol{\mathbf{s}}_t} +\epsilon}, \nonumber +\]
    + +
    +
    +\[ +\begin{equation} +\label{_auto6} \tag{7} +\end{equation} +\]
    +

    where \(\beta_1\) and \(\beta_2\) set the memory lifetime of the first and +second moment and are typically taken to be \(0.9\) and \(0.99\) +respectively, and \(\eta\) and \(\epsilon\) are identical to RMSprop.

    +

    Like in RMSprop, the effective step size of a parameter depends on the +magnitude of its gradient squared. To understand this better, let us +rewrite this expression in terms of the variance +\(\boldsymbol{\sigma}_t^2 = \boldsymbol{\mathbf{s}}_t - +(\boldsymbol{\mathbf{m}}_t)^2\). Consider a single parameter \(\theta_t\). The +update rule for this parameter is given by

    +
    +\[ +\Delta \theta_{t+1}= -\eta_t { \boldsymbol{m}_t \over \sqrt{\sigma_t^2 + m_t^2 }+\epsilon}. +\]
    +
    +
    +
    +

    7.9. Practical tips

    +
      +
    • Randomize the data when making mini-batches. It is always important to randomly shuffle the data when forming mini-batches. Otherwise, the gradient descent method can fit spurious correlations resulting from the order in which data is presented.

    • +
    • Transform your inputs. Learning becomes difficult when our landscape has a mixture of steep and flat directions. One simple trick for minimizing these situations is to standardize the data by subtracting the mean and normalizing the variance of input variables. Whenever possible, also decorrelate the inputs. To understand why this is helpful, consider the case of linear regression. It is easy to show that for the squared error cost function, the Hessian of the cost function is just the correlation matrix between the inputs. Thus, by standardizing the inputs, we are ensuring that the landscape looks homogeneous in all directions in parameter space. Since most deep networks can be viewed as linear transformations followed by a non-linearity at each layer, we expect this intuition to hold beyond the linear case.

    • +
    • Monitor the out-of-sample performance. Always monitor the performance of your model on a validation set (a small portion of the training data that is held out of the training process to serve as a proxy for the test set. If the validation error starts increasing, then the model is beginning to overfit. Terminate the learning process. This early stopping significantly improves performance in many settings.

    • +
    • Adaptive optimization methods don’t always have good generalization. Recent studies have shown that adaptive methods such as ADAM, RMSPorp, and AdaGrad tend to have poor generalization compared to SGD or SGD with momentum, particularly in the high-dimensional limit (i.e. the number of parameters exceeds the number of data points). Although it is not clear at this stage why these methods perform so well in training deep neural networks, simpler procedures like properly-tuned SGD may work as well or better in these applications.

    • +
    +
    +
    +

    7.10. Automatic differentiation

    +

    Automatic differentiation (AD), +also called algorithmic +differentiation or computational differentiation,is a set of +techniques to numerically evaluate the derivative of a function +specified by a computer program. AD exploits the fact that every +computer program, no matter how complicated, executes a sequence of +elementary arithmetic operations (addition, subtraction, +multiplication, division, etc.) and elementary functions (exp, log, +sin, cos, etc.). By applying the chain rule repeatedly to these +operations, derivatives of arbitrary order can be computed +automatically, accurately to working precision, and using at most a +small constant factor more arithmetic operations than the original +program.

    +

    Automatic differentiation is neither:

    +
      +
    • Symbolic differentiation, nor

    • +
    • Numerical differentiation (the method of finite differences).

    • +
    +

    Symbolic differentiation can lead to inefficient code and faces the +difficulty of converting a computer program into a single expression, +while numerical differentiation can introduce round-off errors in the +discretization process and cancellation

    +

    Python has tools for so-called automatic differentiation. +Consider the following example

    +
    +\[ +f(x) = \sin\left(2\pi x + x^2\right) +\]
    +

    which has the following derivative

    +
    +\[ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +\]
    +

    Using autograd we have

    +
    +
    +
    import autograd.numpy as np
    +
    +# To do elementwise differentiation:
    +from autograd import elementwise_grad as egrad 
    +
    +# To plot:
    +import matplotlib.pyplot as plt 
    +
    +
    +def f(x):
    +    return np.sin(2*np.pi*x + x**2)
    +
    +def f_grad_analytic(x):
    +    return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)
    +
    +# Do the comparison:
    +x = np.linspace(0,1,1000)
    +
    +f_grad = egrad(f)
    +
    +computed = f_grad(x)
    +analytic = f_grad_analytic(x)
    +
    +plt.title('Derivative computed from Autograd compared with the analytical derivative')
    +plt.plot(x,computed,label='autograd')
    +plt.plot(x,analytic,label='analytic')
    +
    +plt.xlabel('x')
    +plt.ylabel('y')
    +plt.legend()
    +
    +plt.show()
    +
    +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic))))
    +
    +
    +
    +
    +

    Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +
    +def f1(x):
    +    return x**3 + 1
    +
    +f1_grad = grad(f1)
    +
    +# Remember to send in float as argument to the computed gradient from Autograd!
    +a = 1.0
    +
    +# See the evaluated gradient at a using autograd:
    +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a)))
    +
    +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 
    +grad_analytical = 3*a**2
    +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical))
    +
    +
    +
    +
    +

    To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f2(x1,x2):
    +    return 3*x1**3 + x2*(x1 - 5) + 1
    +
    +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1
    +f2_grad_x1 = grad(f2,0)
    +
    +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad
    +f2_grad_x2 = grad(f2,1)
    +
    +x1 = 1.0
    +x2 = 3.0 
    +
    +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2))
    +print("-"*30)
    +
    +# Compare with the analytical derivatives:
    +
    +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:
    +f2_grad_x1_analytical = 9*x1**2 + x2
    +
    +# Derivative of f2 w.r.t x2 is: x1 - 5:
    +f2_grad_x2_analytical = x1 - 5
    +
    +# See the evaluated derivations:
    +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +
    +print()
    +
    +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +
    +
    +
    +
    +

    Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f3(x): # Assumes x is an array of length 5 or higher
    +    return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2
    +
    +f3_grad = grad(f3)
    +
    +x = np.linspace(0,4,5)
    +
    +# Print the computed gradient:
    +print("The computed gradient of f3 is: ", f3_grad(x))
    +
    +# The analytical gradient is: (2, 3, 5, 7, 22*x[4])
    +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f3 is: ", f3_grad_analytical)
    +
    +
    +
    +
    +

    Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f4(x):
    +    return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)
    +
    +f4_grad = grad(f4)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x)))
    +
    +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi
    +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical))
    +
    +
    +
    +
    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f5(x):
    +    if x >= 0:
    +        return x**2
    +    else:
    +        return -3*x + 1
    +
    +f5_grad = grad(f5)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x)))
    +
    +
    +
    +
    +

    2 +6

    +

    < +< +< +! +! +C +O +D +E +_ +B +L +O +C +K

    +

    p +y +c +o +d

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9
    +# The analytical derivative is: sum(i*x**(i-1)) 
    +f6_grad_analytical = 0
    +for i in range(10):
    +    f6_grad_analytical += i*x**(i-1)
    +
    +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical))
    +
    +
    +
    +
    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +
    +def f7(n): # Assume that n is an integer
    +    if n == 1 or n == 0:
    +        return 1
    +    else:
    +        return n*f7(n-1)
    +
    +f7_grad = grad(f7)
    +
    +n = 2.0
    +
    +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n)))
    +
    +# The function f7 is an implementation of the factorial of n.
    +# By using the product rule, one can find that the derivative is:
    +
    +f7_grad_analytical = 0
    +for i in range(int(n)-1):
    +    tmp = 1
    +    for k in range(int(n)-1):
    +        if k != i:
    +            tmp *= (n - k)
    +    f7_grad_analytical += tmp
    +
    +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical))
    +
    +
    +
    +
    +

    Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input.

    +

    Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd.

    +

    Assigning a value to the variable being differentiated with respect to

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f8(x): # Assume x is an array
    +    x[2] = 3
    +    return x*2
    +
    +f8_grad = grad(f8)
    +
    +x = 8.4
    +
    +print("The derivative of f8 is:",f8_grad(x))
    +
    +
    +
    +
    +

    Here, Autograd tells us that an ‘ArrayBox’ does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f9(a): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return a.dot(b)
    +
    +f9_grad = grad(f9)
    +
    +x = np.array([1.0,0.0])
    +
    +print("The derivative of f9 is:",f9_grad(x))
    +
    +
    +
    +
    +

    Here we are told that the ‘dot’ function does not belong to Autograd’s +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used:

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad
    +def f9_alternative(x): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2
    +
    +f9_alternative_grad = grad(f9_alternative)
    +
    +x = np.array([3.0,0.0])
    +
    +print("The gradient of f9 is:",f9_alternative_grad(x))
    +
    +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively
    +# w.r.t x is (b_1, b_2).
    +
    +
    +
    +
    +

    The documentation recommends to avoid inplace operations such as

    +
    +
    +
    a += b
    +a -= b
    +a*= b
    +a /=b
    +
    +
    +
    +
    +

    More examples will be added, in particular how to compare autograd with own codes for the gradients.

    @@ -2414,7 +2738,7 @@ function.

    diff --git a/doc/LectureNotes/_build/html/chapter5.html b/doc/LectureNotes/_build/html/chapter5.html index f4d68f250..288731c0c 100644 --- a/doc/LectureNotes/_build/html/chapter5.html +++ b/doc/LectureNotes/_build/html/chapter5.html @@ -5,7 +5,7 @@ - 7. Support Vector Machines, overarching aims — Applied Data Analysis and Machine Learning + 8. Support Vector Machines, overarching aims — Applied Data Analysis and Machine Learning @@ -54,7 +54,7 @@ - + @@ -139,17 +139,17 @@ @@ -171,12 +171,12 @@ @@ -188,12 +188,12 @@ @@ -205,12 +205,12 @@ @@ -286,49 +286,49 @@ @@ -343,7 +343,7 @@
    -

    7. Support Vector Machines, overarching aims

    +

    8. Support Vector Machines, overarching aims

    A Support Vector Machine (SVM) is a very powerful and versatile Machine Learning method, capable of performing linear or nonlinear classification, regression, and even outlier detection. It is one of @@ -365,7 +365,7 @@ below. We distinguish also between linear and non-linear approaches. The latter are the most frequent ones since it is rather unlikely that we can separate classes easily by say straight lines.

    -

    7.1. Hyperplanes and all that

    +

    8.1. Hyperplanes and all that

    The theory behind support vector machines (SVM hereafter) is based on the mathematical description of so-called hyperplanes. Let us start with a two-dimensional case. This will also allow us to introduce our @@ -509,7 +509,7 @@ y_i\left(b+w_1x_{i1}+w_2x_{i2}+\dots +w_px_{ip}\right) > 0. \]

    When we try to separate hyperplanes, if it exists, we can use it to construct a natural classifier: a test observation is assigned a given class depending on which side of the hyperplane it is located.

    -

    7.1.1. The two-dimensional case

    +

    8.1.1. The two-dimensional case

    Let us try to develop our intuition about SVMs by limiting ourselves to a two-dimensional plane. To separate the two classes of data points, there are many possible lines (hyperplanes if you prefer a more strict naming)
    @@ -578,7 +578,7 @@ properly into two distinct classes, we may not experience a converge at all.

    -

    7.1.2. A better approach

    +

    8.1.2. A better approach

    A better approach is rather to try to define a large margin between the two classes (if they are well separated from the beginning).

    Thus, we wish to find a margin \(M\) with \(\boldsymbol{w}\) normalized to @@ -611,7 +611,7 @@ about Lagrangian multipliers.

    -

    7.2. A quick Reminder on Lagrangian Multipliers

    +

    8.2. A quick Reminder on Lagrangian Multipliers

    Consider a function of three independent variables \(f(x,y,z)\) . For the function \(f\) to be an extreme we have

    @@ -767,7 +767,7 @@ y_i = \mathrm{sign}(\boldsymbol{w}^T\boldsymbol{x}_i+b).

    Below we discuss how to find the optimal values of \(\lambda_i\). Before we proceed however, we discuss now the so-called soft classifier.

    -

    7.3. A soft classifier

    +

    8.3. A soft classifier

    Till now, the margin is strictly defined by the support vectors. This defines what is called a hard classifier, that is the margins are well defined.

    Suppose now that classes overlap in feature space, as shown in the figure here. One way to deal with this problem before we define the @@ -851,7 +851,7 @@ y_i(\boldsymbol{w}^T\boldsymbol{x}_i+b) -(1-\xi_) \geq 0 \hspace{0.1cm}\forall i \]

    -

    7.4. Kernels and non-linearity

    +

    8.4. Kernels and non-linearity

    The cases we have studied till now, were all characterized by two classes with a close to linear separability. The classifiers we have described so far find linear boundaries in our input feature space. It is @@ -984,7 +984,7 @@ Given a kernel \(K\) and the t \(0\leq \lambda_i\) and \(\lambda_i \leq C\). These two inequalities define then the matrix \(\boldsymbol{G}\) and the vector \(\boldsymbol{h}\).

    -

    7.5. Different kernels and Mercer’s theorem

    +

    8.5. Different kernels and Mercer’s theorem

    There are several popular kernels being used. These are

    1. Linear: \(K(\boldsymbol{x},\boldsymbol{y})=\boldsymbol{x}^T\boldsymbol{y}\),

    2. @@ -1010,7 +1010,7 @@ don’t respect all of Mercer’s conditions, yet they generally work well in practice.

    -

    7.6. The moons example

    +

    8.6. The moons example

    from __future__ import division, print_function, unicode_literals
    @@ -1222,7 +1222,7 @@ Phi(-1.0, 1) = [0.30119421]
     
    -

    7.7. Mathematical optimization of convex functions

    +

    8.7. Mathematical optimization of convex functions

    A mathematical (quadratic) optimization problem, or just optimization problem, has the form

    \[\begin{split} @@ -1367,7 +1367,7 @@ With the slack constants this leads to the additional constraint 6. Logistic Regression - 8. Decision trees, overarching aims + 9. Decision trees, overarching aims
    diff --git a/doc/LectureNotes/_build/html/chapter6.html b/doc/LectureNotes/_build/html/chapter6.html index 5b28a4d7f..a7a382fbf 100644 --- a/doc/LectureNotes/_build/html/chapter6.html +++ b/doc/LectureNotes/_build/html/chapter6.html @@ -5,7 +5,7 @@ - 8. Decision trees, overarching aims — Applied Data Analysis and Machine Learning + 9. Decision trees, overarching aims — Applied Data Analysis and Machine Learning @@ -54,8 +54,8 @@ - - + + @@ -139,17 +139,17 @@ @@ -171,12 +171,12 @@ @@ -188,12 +188,12 @@ @@ -205,12 +205,12 @@ @@ -286,100 +286,100 @@

    A good read is for example Vidal, Ma and Sastry.

    -

    10.1. Introducing the Covariance and Correlation functions

    +

    11.1. Introducing the Covariance and Correlation functions

    Before we discuss the PCA theorem, we need to remind ourselves about the definition of the covariance and the correlation function. These are quantities

    Suppose we have defined two vectors @@ -532,7 +532,7 @@ covariance matrix through the np.linalg.eig() function.

    -

    10.2. Correlation Matrix

    +

    11.2. Correlation Matrix

    The previous example can be converted into the correlation matrix by simply scaling the matrix elements with the variances. We should also subtract the mean values for each column. This leads to the following @@ -752,7 +752,7 @@ x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\

    It is easy to generalize this to a matrix \(\boldsymbol{X}\in {\mathbb{R}}^{n\times p}\).

    -

    10.3. Towards the PCA theorem

    +

    11.3. Towards the PCA theorem

    We have that the covariance matrix (the correlation matrix involves a simple rescaling) is given as

    \[ @@ -790,7 +790,7 @@ dimensions where the eigenvalues are very small. If \(p\) to \(l << p\) and handle only \(l\) features/predictors.

    -

    10.3.1. The Algorithm before theorem

    +

    11.3.1. The Algorithm before theorem

    Here’s how we would proceed in setting up the algorithm for the PCA, see also discussion below here.

    • Set up the datapoints for the design/feature matrix \(\boldsymbol{X}\) with \(\boldsymbol{X}\in {\mathbb{R}}^{n\times p}\), with the predictors/features \(p\) referring to the column numbers and the entries \(n\) being the row elements.

    • @@ -815,7 +815,7 @@ x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \dots & \dots x_{n-1,p-1}\\
    -

    10.3.2. Writing our own PCA code

    +

    11.3.2. Writing our own PCA code

    We will use a simple example first with two-dimensional data drawn from a multivariate normal distribution with the following mean and covariance matrix (we have fixed these quantities but will play around with them below):

    @@ -937,7 +937,7 @@ Our own code here is not very elegant and asks for obvious improvements. It is t The plot shows how the data are clustered around a line with slope close to one. Is this expected? Try to change the covariance and the mean values. For example, try to make the variance of the first element much larger than that of the second diagonal element. Try also to shrink the covariance (the non-diagonal elements) and see how the data points are distributed.

    -

    10.3.3. Diagonalize the sample covariance matrix to obtain the principal components

    +

    11.3.3. Diagonalize the sample covariance matrix to obtain the principal components

    Now we are ready to solve for the principal components! To do so we diagonalize the sample covariance matrix \(\Sigma\). We can use the function np.linalg.eig to do so. It will return the eigenvalues and @@ -1005,7 +1005,7 @@ Second eigenvector

    -

    10.4. Classical PCA Theorem

    +

    11.4. Classical PCA Theorem

    We assume now that we have a design matrix \(\boldsymbol{X}\) which has been centered as discussed above. For the sake of simplicity we skip the overline symbol. The matrix is defined in terms of the various column @@ -1065,7 +1065,7 @@ chapter 12.4 and discussion therein.

    For more details, see for example Vidal, Ma and Sastry, chapter 2.

    -

    10.6. PCA and scikit-learn

    +

    11.6. PCA and scikit-learn

    Scikit-Learn’s PCA class implements PCA using SVD decomposition just like we did before. The following code applies PCA to reduce the dimensionality of the dataset down to two dimensions (note that it automatically takes care of centering the data):

    @@ -1299,7 +1299,7 @@ available via the \(explained\_varian variance that lies along the axis of each principal component.

    -

    10.7. Back to the Cancer Data

    +

    11.7. Back to the Cancer Data

    We can now repeat the above but applied to real data, in this case our breast cancer data. Here we compute performance scores on the training data using logistic regression.

    @@ -1382,7 +1382,7 @@ a float between 0.0 and 1.0, indicating the ratio of variance you wish to preser
    -

    10.7.1. Incremental PCA

    +

    11.7.1. Incremental PCA

    One problem with the preceding implementation of PCA is that it requires the whole training set to fit in memory in order for the SVD algorithm to run. Fortunately, Incremental PCA (IPCA) algorithms have been developed: you can split the training set into mini-batches and feed an IPCA algorithm one minibatch @@ -1390,14 +1390,14 @@ at a time. This is useful for large training sets, and also to apply PCA online instances arrive).

    -

    10.7.2. Randomized PCA

    +

    11.7.2. Randomized PCA

    Scikit-Learn offers yet another option to perform PCA, called Randomized PCA. This is a stochastic algorithm that quickly finds an approximation of the first d principal components. Its computational complexity is \(O(m \times d^2)+O(d^3)\), instead of \(O(m \times n^2) + O(n^3)\), so it is dramatically faster than the previous algorithms when \(d\) is much smaller than \(n\).

    -

    10.7.3. Kernel PCA

    +

    11.7.3. Kernel PCA

    The kernel trick is a mathematical technique that implicitly maps instances into a very high-dimensional space (called the feature space), enabling nonlinear classification and regression with Support Vector Machines. Recall that a linear decision boundary in the high-dimensional feature @@ -1419,7 +1419,7 @@ For example, the following code uses Scikit-Learn’s KernelPCA class to perform

    -

    10.8. Other techniques

    +

    11.8. Other techniques

    There are many other dimensionality reduction techniques, several of which are available in Scikit-Learn.

    Here are some of the most popular:

    @@ -170,12 +170,12 @@ @@ -187,12 +187,12 @@ @@ -204,12 +204,12 @@ diff --git a/doc/LectureNotes/_build/html/reports/chapter4.log b/doc/LectureNotes/_build/html/reports/chapter4.log index 64735e6fa..ab0fdb8ff 100644 --- a/doc/LectureNotes/_build/html/reports/chapter4.log +++ b/doc/LectureNotes/_build/html/reports/chapter4.log @@ -17,61 +17,16 @@ Traceback (most recent call last): raise CellExecutionError.from_cell_and_msg(cell, exec_reply['content']) nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: ------------------ -import matplotlib.pyplot as plt -import numpy as np -from sklearn.model_selection import train_test_split -from sklearn.datasets import load_breast_cancer -from sklearn.linear_model import LogisticRegression - -# Load the data -cancer = load_breast_cancer() - -X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -print(X_train.shape) -print(X_test.shape) -# Logistic Regression -logreg = LogisticRegression(solver='lbfgs') -logreg.fit(X_train, y_train) -print("Test set accuracy with Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) -#now scale the data -from sklearn.preprocessing import StandardScaler -scaler = StandardScaler() -scaler.fit(X_train) -X_train_scaled = scaler.transform(X_train) -X_test_scaled = scaler.transform(X_test) -# Logistic Regression -logreg.fit(X_train_scaled, y_train) -print("Test set accuracy Logistic Regression with scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - - -from sklearn.preprocessing import LabelEncoder -from sklearn.model_selection import cross_validate -#Cross validation -accuracy = cross_validate(logreg,X_test_scaled,y_test,cv=10)['test_score'] -print(accuracy) -print("Test set accuracy with Logistic Regression and scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - - -import scikitplot as skplt -y_pred = logreg.predict(X_test_scaled) -skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True) -plt.show() -y_probas = logreg.predict_proba(X_test_scaled) -skplt.metrics.plot_roc(y_test, y_probas) -plt.show() -skplt.metrics.plot_cumulative_gain(y_test, y_probas) -plt.show() +x = 2*np.random.rand(m,1) +y = 4+3*x+np.random.randn(m,1) ------------------ --------------------------------------------------------------------------- -ModuleNotFoundError Traceback (most recent call last) - in  - 34  - 35  ----> 36 import scikitplot as skplt - 37 y_pred = logreg.predict(X_test_scaled) - 38 skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True) +NameError Traceback (most recent call last) + in  +----> 1 x = 2*np.random.rand(m,1) + 2 y = 4+3*x+np.random.randn(m,1) -ModuleNotFoundError: No module named 'scikitplot' -ModuleNotFoundError: No module named 'scikitplot' +NameError: name 'm' is not defined +NameError: name 'm' is not defined diff --git a/doc/LectureNotes/_build/html/search.html b/doc/LectureNotes/_build/html/search.html index 1ff418ad7..f5d056516 100644 --- a/doc/LectureNotes/_build/html/search.html +++ b/doc/LectureNotes/_build/html/search.html @@ -162,7 +162,7 @@
  • - 7. Support Vector Machines, overarching aims + 8. Support Vector Machines, overarching aims
  • @@ -174,12 +174,12 @@ @@ -191,12 +191,12 @@ @@ -208,12 +208,12 @@ diff --git a/doc/LectureNotes/_build/html/searchindex.js b/doc/LectureNotes/_build/html/searchindex.js index 08e6b3d20..18ce0c3c5 100644 --- a/doc/LectureNotes/_build/html/searchindex.js +++ b/doc/LectureNotes/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["Clustering","chapter1","chapter10","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","content","intro","linalg","schedule","statistics","teachers","textbooks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["Clustering.ipynb","chapter1.ipynb","chapter10.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","content.md","intro.md","linalg.ipynb","schedule.md","statistics.ipynb","teachers.md","textbooks.md"],objects:{},objnames:{},objtypes:{},terms:{"000":2,"000000":[1,3,9],"00000000e":3,"0001":2,"00015921913736794912":7,"00019998":3,"00024087":3,"00029012":3,"00034944":3,"00042089":3,"00050694":3,"00061058":3,"00073541":3,"00079968":3,"00088573":3,"00096314":3,"001":[2,3,5,6],"00106677":3,"00109273":[],"00115999":3,"00128479":3,"00139705":3,"00154733":3,"00168251":3,"00186347":3,"00200":6,"00202624":3,"00224413":3,"0024401":3,"00270244":3,"00293838":3,"0032542":3,"0032873138755776365":15,"00353823":3,"003704":1,"003717":1,"003759":1,"003774":1,"003788":1,"00391839":3,"004":3,"00426027":3,"00433417":9,"004456043243408203":0,"00445655":9,"00471782":3,"0049999999999999845":[],"004999999999999996":[],"004999999999999997":[],"0050000000000000044":1,"005000000000000007":[],"00512927":3,"0056799":3,"00617499":3,"00683748":3,"006968283076248407":1,"00727646693":1,"00728323e":[],"007315":1,"0074331":3,"007789":[],"007824":1,"007931713723267314":1,"00823002":3,"0086649156":1,"008675369724976777":3,"008885578722629236":[],"00890601":3,"00894639":3,"009154":1,"009163470508352228":3,"009735":9,"00973536":9,"009790":1,"009883615646716182":[],"009883615646716184":[],"009883615646716186":1,"00990475":3,"009911":1,"01057384067458835":[],"010679893512872646":[],"01076611":3,"0110":15,"011347":1,"01191824":3,"01210814993019007":[],"01295356":3,"0140617":[],"01433809":3,"01503674":[],"015037":[],"01514394":[],"015144":[],"01558197":3,"0169643":3,"0170259":3,"01724499":3,"018232":1,"01825571":3,"01867234e":15,"01873344":9,"01873869":3,"02073509":3,"021544346900318832":3,"02161783e":15,"021901":9,"02190139":9,"02252765":3,"02492265":3,"02493044e":[],"02568378":[],"025709":[1,9],"02625193":6,"02707227":3,"02730126581656065":15,"02881304":[],"029688":[],"02968834":[],"029733":1,"02994311":3,"03019554":[],"030196":[],"030670":[],"03067028":[],"03099776":3,"031":3,"03193199":3,"03251863":3,"03256632e":2,"03303359":[],"033037772005753835":[],"03308408":3,"034342":3,"0344707":3,"0359565":3,"03607832":[],"03652792":[],"036528":[],"03697069":[],"03707133":9,"03750367":13,"03787596148305236":1,"03791824e":15,"038300":[1,9],"03871832":[],"039039":3,"04205220e":15,"04260073e":[],"04315108":3,"04330858":[],"04346721":3,"04421672e":[],"044334":1,"044402":1,"04455272":[],"044553":[],"04529095":3,"0458":7,"04648335":3,"04683565":3,"04757618e":[],"04829457939163212":15,"051115":[],"051649":[1,9],"0517473":3,"052645":[],"053053":[],"0530533":[],"05318162":[],"053182":[],"05364854":6,"05396545e":[],"054187":[],"054276":[],"054674":[],"055":[],"055085":[],"05531364":3,"055314":3,"055676":1,"055744":[],"055774":[],"055831":[],"055887":[],"055916":[],"05614483":3,"056326":[],"056329":9,"056484":[],"057035":[],"057088709963637":1,"057320":[],"057332":[],"05755374":[],"057571":[],"057654":[],"057919":[],"05802766":1,"058178":[],"058247":3,"058282":[],"058719":3,"058805":[],"058892":[],"059225":3,"059245":[],"059344":9,"059406":[],"059455":[],"059531":[],"059571":[],"059680303635344434":3,"059765":3,"059806":[],"059865":[],"059908":[],"059994":[],"060064":9,"060070":9,"060308":[],"060335":3,"06041458e":[],"060520":[],"060919":[],"061164":[],"061176":[],"061255":[],"06126507e":15,"061330":[],"061601":9,"061652":[],"061774":[],"061842":[],"061855":[],"061896":[],"06200174":3,"06209126":[],"062188":[],"062327":[],"062376":[],"062639":[],"062659":[],"062660":9,"062731":[],"062822":[],"062829":[],"062879":[],"062885":[],"062923":9,"062979":[],"063055":[],"063097":[],"063122":[],"063178":9,"063190":3,"063324":9,"063395":[],"063415":[],"063523":3,"063526":[],"063615":[],"063670":[],"063727":[],"063759":[],"063763":[],"063880":3,"063882":[],"063925":3,"063982":[],"064000":[],"064013":3,"064075":3,"064078":3,"064101":3,"06412177e":15,"064156":3,"064257":3,"064273":3,"064304":[],"064354":[],"064357":3,"064393":3,"064410":[],"064449":3,"064472":[],"064591":3,"064647":3,"064648":9,"064686":[],"064689":3,"064783":9,"064795":3,"06492086e":[],"064929":[],"064958":3,"064964":[],"064982":[],"065":[],"065003":[],"065086":[],"065110":9,"065144":[],"065151":[],"065188":3,"065200":[],"065202":[],"065204":[],"065355":[],"065591":[],"065618":[],"065660":[],"065680":[],"065762":[],"065860":9,"065994":[],"066002":9,"06600226":9,"066030":9,"066047":[],"066074":9,"066092":[],"066116":[],"06619182206626131":[],"066249":[],"066272":[],"066294":[],"066312":9,"066389":[],"066403":9,"066487":[],"066629":[],"066683":9,"066705":3,"066761":[],"066788":[],"066835":[],"066837":[1,9],"066951":9,"066963":[],"067043":[],"067061":[],"067123":[],"067132":9,"067175":9,"067202":3,"06724062":3,"067355":3,"067440":9,"067504":[],"067531":[],"067577":[],"067601":[],"067610":[],"067667":9,"067685":9,"067711":3,"067718":3,"067769":[],"067777":[],"067794":3,"067844":[],"067865":[],"067889":3,"067892":[],"067985":[],"067990":[],"068056":3,"068073":[],"068165":3,"068185":[],"068213":3,"068244":3,"068276":[],"068293":3,"068351":9,"068385":3,"068427":3,"068460":[],"068491":3,"068514":[],"068593":3,"068640":3,"068654":[],"068667":3,"068673":3,"068686":3,"068697":9,"068717":3,"068818":9,"068821":3,"068828":3,"068838":9,"068840":[],"068873":3,"068896":3,"068920":[],"068928":3,"068945":3,"069005":[],"069028":[],"069071":3,"069081":[],"069098":[],"069195":9,"069243":9,"069282":[],"069369":[],"069413":9,"069496":3,"069503":[],"069510":[],"069516":[],"069528":[],"069542":3,"069584":1,"069635":[],"069641":9,"069775":9,"069814":[],"069848":[],"069853":3,"069859":[],"069872":[],"069890":[],"069902":[],"069988":9,"070043":1,"070103":[],"070129":[],"070131":[],"070138":[],"070166":3,"070182":[],"070188":[],"070254":[],"070337":9,"070456":[],"070473":3,"070517":[],"070548":9,"070653":[],"070762":9,"070764":3,"070791":9,"070812":[],"070815":[],"070867":9,"070889":[1,9],"070949":3,"070967":[],"071016":[],"071049":9,"07106781e":[],"071096":[],"07110274":13,"071156":3,"071248":[],"071268":[],"0713":1,"071313":[],"071325":[],"071359":3,"071435":9,"07145103":9,"071481":[],"071502":[],"071547":9,"071549":3,"07155335":[],"071576":[],"071579":[],"07159175":[],"07160764":3,"071660":9,"071667":[],"071681":[],"071684":[],"071714":3,"071761":[],"071855":[],"071887":[],"071917":[],"072012":3,"072094":[],"072198":[],"072246":3,"072279":[],"072424":[],"072468":3,"072471":[],"072555":9,"072589":[],"072598":[],"072620":[],"072654":9,"072661":3,"072710":9,"072826":[],"072879":9,"072910":[],"073":[],"073020":[],"073035":[],"073096":9,"073310":9,"073333":[],"073352":[],"073371":9,"073372":[],"073483":[],"073567":[],"073591":3,"073598":[1,9],"073602":[],"073607":3,"073656":9,"073681":3,"073695":3,"073765":9,"073851":[],"073902":[],"073915":1,"073926":3,"073966":[],"074":[],"074027":[],"074044":3,"074067":[1,9],"074077":3,"074096":[],"074099":[],"074134":[],"074170":[],"074191":[],"074201":9,"074207":[],"07421084":3,"074230":[],"07423848370736122":[],"074248":[],"074285":3,"074286":[],"074331":9,"074432":[],"074434":3,"074453":[],"074488":[],"07456491":3,"074568":[],"074618":9,"074665":[],"074693":3,"074696":[],"074848":[],"074979":9,"075084":[],"075119":[],"075163":[],"075194":9,"075212":[],"07521771":[],"075218":[],"075261":[],"075266":[],"075289":[],"075296":9,"075309":[],"075526":9,"075545":9,"0755452":9,"075562":[],"075567":3,"075615":9,"075754":[],"075772":[],"07581375":[],"075814":[],"075818":3,"075821":[],"075865":[],"075975":3,"075993":9,"076026":3,"076062":[],"076166":3,"076169":3,"076189":[],"076251":3,"076283":[],"076320":[],"076367":9,"076398":[],"076408":[],"076410":9,"076466":9,"076469":[],"076730":[],"076822":3,"076938":[1,9],"077010":9,"077046":9,"077143":9,"077160":[],"077212":[],"07729012413236423":9,"077303":[],"077305":9,"077338":3,"077339":3,"077386":[],"077407":3,"077416":3,"07744472306026946":7,"077469":[],"077533":[],"077623":[],"077771":9,"07777777777777778":2,"077891":[],"077927":9,"078049":[],"078076":[],"078099":9,"078103":9,"078197":3,"078244":9,"078279":[],"078311":[],"078388":[],"078399":[],"07839924":[],"078451":[],"078474":3,"078649":3,"078674":[],"078693":9,"078710":9,"078746":9,"078750":3,"078892":3,"078927":[],"078930":[],"078937":[],"078966":[],"079001":[],"079037":[],"079137":[],"079139":[],"079333":[],"079365":[],"07944154":13,"079624":[],"079785":9,"079848":9,"079956":[],"080024":9,"080084":1,"080115":[],"080182":3,"080223":[],"080264":9,"080325":9,"080336":[],"080381":[],"080387":[],"080398":[],"08043851":3,"080570":9,"080626":9,"080675":9,"080738":3,"080845":[],"080871":[],"081077":9,"081102":3,"081103":[],"081129":9,"081210":9,"081227":[],"081260":[],"081309":3,"081402":[],"081480":[],"081489":9,"081514":[],"08170444":[],"081816":[],"081886":[],"082091":3,"082211":9,"082225":9,"082247":9,"082272":3,"08248290e":[],"08251898":15,"082616":3,"082687":[],"08271336":[],"082866":[],"082990":[],"083128":[],"08318298e":2,"0832":[],"083246":3,"083295":9,"083376":[],"083527":1,"083577":[],"083618":[],"08362077210702115":3,"083657":[],"083658":9,"083728":[],"083775":[],"084092":[],"084103":3,"08415761":[],"084167":[],"084181":[],"084249":9,"084251":[],"084604":9,"084813":9,"084873":[],"084931":[],"08501147":[],"085121":9,"085259":3,"085285":[],"085289":[],"085597":[],"085646":9,"085676":[],"085928":[],"085951":[],"08611111111111111":2,"086116":[],"086325":[],"086465":[],"086592":[],"08665060086846632":[],"086652":9,"086974":9,"087202":9,"087482":[],"087563":9,"0881981":3,"08839750e":[],"088660":[],"08871404":3,"088871":[],"08888888888888889":2,"089300":[],"089425":9,"089504":[],"089916":[],"089931":[],"090274":9,"09103481e":15,"091159":[],"09166666666666666":2,"0917":7,"091979":[],"093755":9,"09487315108590391":9,"095173":[],"095472":[],"09609807":3,"096726":[],"09672604":[],"09678277e":15,"09741585e":[],"097452":[],"09903804":6,"099763":[],"09976319":[],"100":[0,1,2,3,4,5,6,7,8,9,13,15,16],"1000":[0,1,2,5,6,9,12,15],"10000":[0,3,4,8,9,15],"100000":6,"10001":8,"1001":15,"1002":15,"1003":15,"1005":15,"1007125":[],"1009":15,"10094646e":[],"1011":15,"1013":15,"10131725":[],"1013904243":15,"1015":15,"102":1,"1022964509394572":2,"1023":15,"1026":15,"1027":15,"103":2,"1030":15,"10307631":[],"10327559":13,"1037":15,"10378326e":2,"1038":15,"1040":15,"10405456":9,"104411":1,"1047":15,"105137868830763":15,"10555555555555556":2,"10589577":3,"106095":[1,9],"108":1,"10806972":[],"108070":[],"10896672e":15,"10898112e":[],"10th":7,"10x":1,"110":1,"1100":15,"1101":15,"11022302e":3,"111":[2,5,10],"1111111111111111":2,"112283":1,"112383":[1,9],"11304709e":15,"11388888888888889":2,"11456076e":[],"11462415":3,"11507992e":2,"11666666666666667":2,"117":6,"118318":1,"11944444444444445":2,"12002944":[],"1203284":6,"121":[6,7,8],"122":[6,7,8],"12222222222222222":2,"12283463":[],"123190":1,"123459876":15,"12366979e":15,"124":1,"12497018e":[],"12618549":3,"127773":15,"12777777777777777":2,"1298":7,"12adb44b1c20":5,"13055555555555556":2,"13060772":[],"13162821e":[],"13209041":[],"13266452e":[],"133":5,"13328820e":[],"13457922":[],"13519106":1,"13579199e":[],"1361111111111111":2,"13646574":3,"136687":4,"137268":[],"137400784702912":1,"137652":[1,9],"13803928":[],"13865173":3,"138775":[1,9],"13891144e":[],"139462":[],"139475":[],"1404":1,"143":5,"1437":2,"1440501043841336":2,"1445":4,"14459063":[],"1446":4,"1447":4,"1448":4,"1449":4,"14662074":[],"14722222222222223":2,"147400":[1,9],"147420":[1,9],"147722":[],"148":[],"149076":4,"149366":[],"149667":[],"149832":4,"149894":[],"149903":[],"14g":4,"150":6,"15005476":3,"15024669":[],"151":[],"152636":[],"1527777777777778":2,"153036":1,"153106":1,"15324631":[],"15332528e":[],"154720":1,"15475232":[],"154911":1,"155491":1,"155687":1,"155883":1,"156":1,"157":1,"15751596":3,"158":1,"159":1,"15979239e":15,"15g":4,"160":1,"16111111111111112":2,"16211139":3,"16342407":3,"16496581e":[],"16553696":[],"16637855e":15,"16666666666666666":2,"16807":15,"16831012":3,"16861772":[],"168618":[],"16b8e3cda33a":2,"17117385":[],"17174962e":2,"17234827e":[],"17248441e":[],"17385778e":[],"174497":[],"17449733":[],"175300":1,"1758506":[],"17654307":[],"17707436":[],"17777777777777778":2,"17801022":3,"17917768":3,"17949575":3,"17953942":9,"1797":2,"180092462880674":[],"18029127":3,"18063928":3,"18220995":1,"18224665":3,"18333333333333332":2,"18404906e":[],"184519":1,"1856411":[],"18611111111111112":2,"18620601e":[],"18673098":9,"189496":1,"18954529":[],"189622":1,"18968431e":15,"1914224774238273":[],"19207979":3,"1940":1,"1943":10,"197":1,"1970":13,"1973":7,"197370":[1,9],"19742904e":[],"1979":4,"1989":15,"19937":15,"19955871":[],"199559":[],"19972087e":15,"1_1":10,"1_2":10,"1_3":10,"1cm":[1,6,8,15],"1e10":0,"200":[1,6,7,8,15],"2000":1,"200000":1,"2004":5,"2006":17,"2010":2,"2011":2,"2015":2,"2016":1,"2018":[1,4],"201841":[],"20184113":[],"2021":0,"20277777777777778":2,"203757":[],"20375701":[],"205466494327873":[],"20632410e":[],"207545":[1,9],"20772452":[],"20819609e":[],"20833333333333334":2,"20843563e":[],"20906175e":15,"210340":[1,9],"21058097":3,"212":[],"21208310e":[],"212327334149492":[],"2125":[],"2126":[],"2127":[],"2128":[],"2129":[],"213":[],"213103":[1,9],"21347282":[],"213743":[1,9],"214":[],"2147483647":15,"215":[],"216":[],"21623344":[],"216290":[1,9],"216683":[1,9],"22044605e":3,"22076362":[],"221":6,"221180":1,"22209371e":[],"222400":1,"22443803":[],"22527008e":15,"22690428":3,"22717936e":15,"22847924":3,"22999784":[],"229998":[],"23117916e":15,"23167717":3,"232435":1,"23333333333333334":2,"2335879":[],"23382086e":[],"23438810e":[],"241262":3,"24126232":3,"2433e":3,"24340751":3,"24444444444444444":2,"24829908":3,"250":[5,7],"25000":1,"250000":1,"250154":1,"251559":[],"2515593":[],"251879":1,"25190225e":[],"25226753e":15,"25240108":[],"252436":1,"253":[],"25303483":[],"253775":1,"254":[],"254509":[],"25450941":[],"25457052":[],"255":[],"255001":1,"2551":1,"256":[],"256962":1,"257":[],"2571699":1,"25726439e":[],"2572e3a4b38d":2,"25803281":[],"259107":[],"25910749":[],"259153":[1,9],"259815":3,"25981533":3,"260227742627244":3,"2627588":13,"26301436":3,"26381865":[],"263819":[],"264":1,"26412372":3,"265":1,"2653678":[],"266":1,"267":1,"26710969":3,"26780278":3,"2683":4,"2684":4,"2685":4,"2686":4,"2687":4,"26890510e":[],"269":1,"26974938e":[],"270":1,"27262964":1,"27296891e":[],"276263":[1,9],"27753165e":15,"27852549":3,"27924636":3,"27n_":15,"280647":[1,9],"28166741":[],"282":1,"282727":[1,9],"28310983":[],"283110":[],"2836":15,"28475098":6,"2861":15,"2873":7,"2882":15,"2886":15,"2890":1,"2892":15,"28971976":9,"289720":9,"290":[],"291":[],"2915":15,"291614":[],"29167186":3,"292":[],"293":[],"2931":[],"294":[],"295656121491569":[],"296247":1,"2968":[],"297219777724628":9,"297260":1,"2980":[],"298273":1,"2983233":13,"298375":1,"2990":[],"299444":9,"29944428":9,"299748":1,"2_1":10,"2_2":10,"2_3":10,"2_i":10,"2_m":15,"2_x":15,"2cm":6,"2ff97f4bf03b":15,"2nd":7,"2x_ix_jy_iy_j":6,"2x_j":6,"2y_i":8,"2y_j":6,"30000":1,"300162456113691":[],"30119421":6,"30626706":1,"306854":[],"30685416":[],"30879705":1,"30968181":[],"31109204e":[],"31318084":3,"31457796":3,"3155":[3,4],"3156929654100207":7,"31608475e":[],"31718909":9,"31730641":[],"317367":9,"31853484":[],"31896852":6,"3200":2,"32047562":1,"323291478597321":15,"3250":2,"32521615e":15,"326238":1,"327631":1,"32938847":13,"32945844e":15,"3304":1,"33066907e":3,"3310":1,"3317":1,"331939":1,"333":5,"333333":1,"3338":1,"3344":1,"33443859e":[],"33544681":[],"33569998e":[],"33861512":[],"338869":[],"33886902":[],"339535706819584":15,"33953571":15,"340782":[1,9],"34114547":3,"34114641e":[],"34172919":[],"342680":1,"3436":1,"3437":1,"344172":1,"34569596":3,"346433":9,"34643337":9,"34902789e":15,"350387":[],"35038714":[],"351636":[1,9],"35176067":[],"35182854":3,"35216172e":[],"35367281e":[],"356399":1,"357508":1,"358869339268145":15,"35886934":15,"359":3,"359640894899012":[],"360":2,"360688":1,"361556":1,"3621311":3,"36436520e":[],"36468301":[],"3655222":3,"369139":[1,9],"36941772":[],"369418":[],"37186301":3,"372889":[],"3728892":[],"37416969":9,"374170":9,"37738324":[],"38207279e":[],"38216436":[],"38629436":13,"38777878e":3,"3893239":3,"389324":3,"38937995e":15,"38986237":[],"39579407":3,"396740":9,"39674043":9,"39706038":3,"397700":[1,9],"39792608e":[],"399836":1,"3cd19a0768e1":[],"4000":17,"401842":[1,9],"40212127":[],"404":1,"40425078e":15,"405890":[1,9],"40702":3,"40708470e":[],"40859":[],"4087793":3,"40902095":[],"412374":3,"41237437":3,"4140e":3,"41433969":3,"41511965e":2,"415634483874318":[],"416694683938511":9,"4171578884124756":0,"41754964":[],"41770932":[],"418506":[1,9],"41876428e":[],"4200e":3,"4201e":3,"4203e":3,"42441033":3,"426":5,"42847770e":15,"42937310e":15,"43054282":3,"4332e":3,"435163":1,"435490":[],"43549028":[],"43766686":9,"438136":1,"44089210e":3,"442600":[1,9],"443217":1,"44395541":[],"44625466e":15,"44970586e":2,"45013332e":[],"45019484":[],"450257":[1,9],"4557763":9,"455947":1,"458027":1,"458078":[1,9],"45937170e":[],"45960079":3,"46016532e":[],"461":15,"461838":3,"46183815":3,"462":5,"46323168e":15,"4632e":3,"46415888336127775":3,"46423858e":[],"465564":[],"46556436":[],"466":15,"46675058":[],"46914544e":[],"46929603e":[],"469730":3,"46973015":3,"47042744":3,"470714":1,"47079457e":15,"47125748":3,"47132891":3,"472652":3,"47265243":3,"47441766":[],"47566390e":15,"47654764e":[],"47815203":9,"47862383":3,"478624":3,"48019541":3,"48154187202453613":0,"48257387":16,"48471852e":[],"48476997":9,"48608063e":[],"48994188":3,"491837":3,"4918372":3,"4940954":1,"497221":[],"49722108":[],"49865673":[],"4990":15,"4992":15,"4997":15,"4c4c7f":[7,8],"4y_i":8,"500":[2,4,5,7,8,15],"500000":1,"50000455":3,"50000553":3,"50000718":3,"50000855":3,"50000969":3,"50001063":3,"50001142":3,"50001207":3,"50001261":3,"50001306":3,"50001343":3,"50001374":3,"500014":3,"50001414":3,"50001422":3,"50001439":3,"50001454":3,"50001466":3,"50001476":3,"50001485":3,"50001492":3,"50001498":3,"50001502":3,"50001506":3,"5000151":3,"50001512":3,"50001515":3,"50001517":3,"50001518":3,"50001519":3,"50001521":3,"50001522":3,"50001523":3,"50001524":3,"50001525":3,"5018":15,"50321091":3,"50394742":[],"506":1,"507d50":[7,8],"5098779":[],"509878":[],"50j":5,"50x10":2,"510":2,"5120":0,"512132":1,"51257863e":[],"51345668e":[],"51363731e":[],"514219":1,"51523276e":[],"515768":[],"51576807":[],"51707172":3,"517072":3,"51893804e":[],"51943726":9,"519842":1,"52158335":[],"5222222222222223":2,"52570079":3,"525701":3,"526744":[1,9],"52687171":[],"526872":[],"52722156":[],"52874252":3,"52d2c51caad1":[],"5303329":9,"5305555555555556":2,"531280":1,"535457":[],"53545715":[],"5378811":9,"539261":[1,9],"54039921":3,"54096582":[],"540966":[],"54121682":[],"541217":[],"54152940e":[],"541605":1,"54237024":15,"544439":1,"546972":3,"54697204":3,"54702088e":[],"55111512e":3,"55138385":9,"551384":9,"55280484":[],"5555555555555556":2,"55707065":[],"557071":[],"557795":[1,9],"55795935":3,"55854694":9,"56033697":3,"56198284":3,"56216797e":[],"564374":[1,9],"56536":1,"569":2,"56939714":3,"57051369":[],"571":3,"574465":[1,9],"5755035":[],"57781668":[],"57871326":[],"581766":9,"58176612":9,"582":[1,2],"58228342e":15,"58239999":[],"582400":[],"583595":1,"584804":1,"58521266":9,"585213":9,"58596975":[],"585970":[],"587401":1,"58836420e":15,"5888888888888889":2,"59007674e":15,"59304755e":[],"5944444444444444":2,"59480085":[],"5cm":15,"60122668e":15,"60293962":3,"60394236e":[],"60420593":3,"60673226":9,"60949193":[],"609492":[],"60999846":[],"61069091e":15,"6111111111111112":2,"61124978":[],"61234223":[],"612939":1,"613579":1,"614808":[1,9],"61505887e":[],"61745046e":[],"618":1,"6183694":[],"61869821":[],"618982":1,"622539":9,"62253933":9,"622625":3,"62262506":3,"6226921":[],"62316154e":15,"62359224e":15,"62373464":9,"625":5,"62783293":[],"62856593":[],"62894215":3,"629961":1,"6300745149331701":1,"63315151":[],"63339159":[],"63374631":[],"63437572":[],"63442451e":[],"63498144":3,"636323":9,"63632311":9,"63680118":[],"637129335071195":1,"63993205e":[],"64012627":3,"64166831e":[],"64447921":[],"64580686":[],"646283":[1,9],"64669382":[],"646694":[],"647473":[1,9],"64857826e":[],"649382":[1,9],"64x50":2,"650024":[],"65002433":[],"6510573774179256":15,"65105738":15,"65238878":13,"65245958":[],"653095390463358":[],"653702":13,"6544e":3,"65482578":[],"65572035":[],"65599927":[],"65766387":[],"65885453":3,"65933852":[],"65939208e":[],"66020213e":[],"6614":[],"66183486":9,"661835":9,"6628996975186952":1,"66302359":[],"66383151":[],"66677842":[],"66800261":[],"668172":1,"66880047":[],"67006792":[],"67060602":[],"671089":1,"6714":[],"67171347e":15,"672721":1,"67279536":[],"67303655":9,"673037":9,"67407338e":15,"67450955":[],"67708423":[],"677149":[],"67714918":[],"6796265324852733":[],"68002363":[],"680024":[],"68034946e":[],"6813":4,"6814":4,"6815":4,"6816":4,"6817":4,"6818813252071303":15,"68188133":15,"68192193":3,"68316185":[],"68342382":[],"68542204":3,"68616263":13,"68729414":[],"68937695":[],"689519":[1,9],"690617":1,"69069n_":15,"693361":1,"69347005":[],"693850":9,"69385025":9,"69519693":[],"695197":[],"69573183":[],"69695259":3,"69843037":3,"6996584":3,"69981195e":15,"6999536":9,"6ea927cc6e88":2,"6n_":15,"7022283":[],"70234019":[],"70415861":[],"70523024e":[],"70589906":[],"7070e":3,"70710678":3,"70790937":[],"70832814":3,"70885528e":[],"70886748":[],"70946493e":[],"712018":[1,9],"712199063818309":1,"71281409":[],"71351486":[],"71442781":13,"71606852":[],"7162":[],"71669651":[],"7172":[],"72108703":[],"72174172":9,"72218808":[],"72312577":[],"7236674":3,"7240496":[],"725394195434945":[],"72780613e":15,"72859758":3,"72879865e":[],"72981762":6,"73091052e":[],"731000":1,"733096":1,"73453972":[],"7371165871823337":[],"737349":3,"73734906":3,"73921714":[],"74081822":6,"74107697":9,"74143127e":[],"7432283":[],"74382593":[],"74495014":[],"745136489050356":1,"74840212":3,"74845978":[],"74921867":[],"749765":1,"750445":1,"751699":[1,9],"75170092":3,"75195757":[],"7522047280566193":[],"75382481":[],"75524378":[],"75629493":[],"756352":1,"75841112":[],"75932862":[],"76172241e":[],"762":[5,9],"7621419":[],"76290332":[],"763880":[],"76388013":[],"76497666":[],"765":5,"76504618":[],"76570177":[],"76648901e":[],"76936315":3,"7693978131030923":9,"77152076":3,"77156117e":3,"7718":7,"772b904ae9cb":4,"77317984":[],"7733":[],"77350269e":[],"774300":1,"776223":3,"77622336":3,"77661393e":15,"77714169":6,"78080633":[],"78082":4,"78195":[],"78857629":[],"78941903":3,"78944806":[],"7899453":[],"79111643":3,"79295029e":15,"793167":1,"79326583e":15,"79328828":[],"793701":1,"794282":[1,9],"79459035":[],"79648291":[],"79902342":1,"7c394b1e8b71":7,"7d7d58":[7,8],"800":5,"80004454e":[],"800266":[],"80026635":[],"80121":[],"80469739":3,"8055555555555556":2,"81160425":3,"81620806":[],"81633628":9,"816454":1,"816847":1,"81781888":9,"819202":3,"81920231":3,"82198978":3,"8265786":3,"827265":1,"82889306e":15,"8305555555555556":2,"83425361":9,"834254":9,"83512277":3,"83614019":[],"8388888888888889":2,"83935285":[],"84087101":[],"842":1,"842436":1,"84251485":[],"842515":[],"8429949116841184":3,"84355903e":2,"84372853":[],"84443254e":2,"84658093e":15,"8479552268981934":0,"84860939":1,"849766":3,"84976606":3,"84994524":3,"85058354":3,"850584":3,"8520127":[],"85278450e":[],"85396354":[],"85450859":9,"85463934e":[],"85497163e":[],"85546305e":[],"85601992":3,"861":1,"86117291":3,"86134827":3,"86145244":9,"8638888888888889":2,"86436607":[],"86574276":[],"8666666666666667":2,"86692943":[],"87030083":3,"870301":3,"8718475896381779":15,"87184759":15,"8722222222222222":2,"87381451":3,"875":2,"87761937":[],"8777777777777778":2,"87972591":[],"8802":[],"88046261":3,"88046462":[],"8805555555555555":2,"881323":3,"88297395":[],"88336879":3,"88559559":[],"8867467323038865":[],"88693966e":15,"88712946":[],"8888888888888888":2,"8901":[],"8914984":[],"8921171964770647":9,"8923":[],"89288636":9,"89383322":[],"89410423":3,"8944444444444445":2,"89704131":3,"89742056":[],"897421":[],"898500":9,"89850037":9,"89928965":3,"89942598":[],"89975818":[],"8x8":2,"90075537":3,"90220243":3,"90233874":[],"90266948":3,"90316476":[],"9040":7,"9055555555555556":2,"90618734e":15,"907307":9,"90730735":9,"90825063":[],"9096":4,"91012519e":[],"9111111111111111":2,"91128596":3,"91145266e":15,"91417278":[],"91549644":1,"9166666666666666":2,"916978":[],"91697817":[],"9171356":[],"91760278":3,"91812702":3,"918992":1,"9196":4,"9222222222222223":2,"922312":[],"92231203":[],"92280994":3,"924018":1,"925":2,"92507116e":2,"92578916":3,"92605247":[],"92645039":9,"92646965":9,"926470":9,"92732185e":[],"9277777777777778":2,"9279671770201344":15,"92857143":5,"92919670e":15,"9305555555555556":2,"931":1,"93100040e":15,"93155188":3,"93158979":3,"932734":[],"93273404":[],"933":3,"9354":[],"9361111111111111":2,"937":15,"937082":1,"93799826":3,"938":15,"9388888888888889":2,"939":[1,15],"94019247e":[],"94034531":[],"94284104":3,"94320205":3,"9444444444444444":2,"94536341":15,"94591015":13,"94639099":9,"946893955211749":1,"947543":9,"9482527":3,"948729":[],"95014575":[],"95231424":3,"9527777777777777":2,"95284275":3,"95351665":3,"954":15,"95443703e":[],"9547578478889096":1,"95517094":[],"955171":[],"9555555555555556":2,"95628168":[],"956282":[],"956563":[1,9],"95684892":3,"958228616652075":3,"9583333333333334":2,"959247":[],"960":15,"96024953":3,"96084663":3,"961":15,"96104648":[],"9611111111111111":2,"962":15,"963499":9,"96349948":9,"9640435":3,"965548":1,"965885569080809":[],"96688672":3,"9674916":3,"967809":[1,9],"96793117e":[],"97005689":3,"97101567e":15,"9722222222222222":2,"97243128":3,"97300836":3,"975":2,"97507735":3,"9756404":[],"976":6,"97622676":[],"976227":[],"9765":4,"9769":4,"97705827":3,"97723801":[],"97758848":3,"9777777777777777":2,"9780387310732":17,"9780387848570":17,"9781492032632":17,"97926491":3,"9804422":[],"98046438":[],"9805555555555555":2,"98091621":3,"981321":1,"98139097":3,"98275501":3,"98314755":[],"983148":[],"983310":1,"98413059":3,"98452685":[],"98454786":3,"985":15,"98526763":[],"98528992":[],"98531221":[],"98566191":3,"986":15,"9860803":[],"98609175":15,"986091753050161":15,"9861111111111112":2,"98661465":[],"98680716":3,"98716878":3,"9877742":[],"987902":[],"98808176":3,"988663":[],"9888888888888889":2,"98892195e":15,"98893512":[],"989":15,"9890348":3,"98927731":[],"9893447":3,"9898ff":[7,8],"99009525":3,"99009739":[],"9901168":[],"99013921":[],"99016161":[],"99018401":[],"99043999":[],"99088801":3,"9909252":[],"991":15,"991072":9,"99107239":9,"99115119":3,"99126104":[],"99133007":[],"99160404":[],"99176998":3,"99190487":[],"99194716":[],"992":15,"99218987":[],"99219378":[],"99242605":[],"99242921":3,"99248001":[],"99265097":3,"99273355":[],"99276945":[],"993":15,"99305549":[],"99305802":[],"99311297":[],"99316252":3,"99346398":[],"99363129":[],"99363383":[],"99371056":3,"99389612":3,"99393624":[],"994":4,"99400444":[],"99418903":9,"99420743":[],"99420997":[],"99428016":[],"9943201":3,"9945452":[],"99462421":[],"99473581":[],"9947756":3,"99478645":[],"99478898":[],"99492986":3,"99498985":[],"995":4,"99501236":[],"99503487":[],"99505739":[],"9950799":[],"99527696":[],"99528218":3,"9953048353087299":[],"99536326":[],"9953658":[],"99539415":3,"99544872":[],"9954538761021741":[],"99566069":3,"99578809":3,"99579317":[],"99581841":[],"99594294":[],"996":[3,4],"99600927":[],"99608161":3,"99636015":[],"9963961":3,"99650061":3,"99652042":[],"99652296":[],"99655111":[],"9966744029509663":1,"9967292151090247":1,"9967458":3,"9969":4,"99696351":[],"997":4,"99700706":3,"99709215":3,"99709325":[],"99710078":[],"99723611":[],"99728435":[],"99729756":3,"99730848":[],"99751458":3,"99758326":3,"99763569":[],"99767893":[],"99775587":3,"99782689":[],"99793613":3,"99799099":3,"998":4,"99813653":3,"99817842":[],"99825997":[],"99828624":3,"9983295":3,"99836973":[],"99845267":3,"9984806":[],"998577":3,"99861053":3,"99871521":3,"99881845":3,"99883879":[],"99884384":3,"99891285":[],"99893323":3,"999":[7,15],"99901896":3,"99903755":3,"99911427":3,"99918546":3,"99919837":3,"99926459":3,"9993237":3,"99933188":3,"99938942":3,"9994385":3,"99944272":3,"99945628":[],"99949306":3,"99953381":3,"99953475":3,"99957911":3,"99961294":3,"99965056":3,"99967865":3,"99970988":3,"9997332":3,"99975913":3,"99977849":3,"99980002":3,"9998161":3,"99984732":3,"99987324":3,"99988687":[],"99989476":3,"9999095":[],"99991263":3,"99992746":3,"99993212":[],"99993978":3,"99995":3,"99995475":[],"99995818594196":[],"999974281880048":[],"99997737":[],"9999787681537219":1,"9999794306626945":[],"9999822527140678":[],"9999864543345858":[],"9999868619217517":[],"9999869956119286":1,"9999878260589065":[],"9999910208315801":[],"9b9cf4fa1a95":[],"\u00f8yvind":16,"abstract":2,"break":[0,1,9],"byte":13,"case":[1,2,3,4,9,10,12,13,14],"catch":1,"char":15,"class":[1,2,4,5,6,7,9,10,15],"const":15,"default":[1,2,5,13],"ekstr\u00f8m":16,"export":7,"f\u00f8470":16,"final":[0,1,2,3,4,6,7,8,9,14,15,16],"float":[0,1,3,7,9,13,15],"function":[0,3,4,7,12,13],"import":[0,1,2,4,5,6,7,8,9,10],"int":[0,1,2,3,5,9,13,15],"long":[1,2,5,10,15],"new":[0,1,2,3,4,5,6,7,8,9,13,15],"null":15,"public":[1,12],"return":[0,1,2,3,4,5,6,7,9,13,15],"s\u00f8rli":16,"sch\u00f8yen":16,"short":[0,3,11],"steinsv\u00e5g":16,"super":3,"switch":[0,1],"throw":15,"true":[0,1,2,3,4,5,6,7,8,10,15],"try":[0,1,2,3,5,6,7,8,9,12,13,15],"var":[3,4,8,9,15],"while":[0,1,2,3,4,5,6,7,9,10,15],AGE:1,Adding:2,Age:5,And:[0,1,4,7,12,15],Are:9,Being:5,But:[0,1,2,3,4,7,8,15],CAS:[],DIS:1,Doing:[3,5,8],EoS:[1,4],FYS:14,For:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,17],Going:2,Ising:[3,10],Its:[2,9],MDS:9,NNs:10,N_s:6,Not:[1,2,3,4],OLS:[1,4],One:[1,2,3,4,5,6,9,10,15],PCs:[9,12],RMS:15,Such:[4,10,15],That:[0,1,3,5,8,9,10,15],The:[8,13,14,16,17],Then:[0,1,2,3,4,5,6,7,8,9,10,13,15],There:[0,1,3,6,7,9,10,11,13,14,15,16],These:[0,1,3,6,7,8,9,10,13,15],Use:[1,7],Useful:[3,4,13],Using:[1,3,4,6,8,10,13],With:[1,3,4,6,7,8,9,10,13,15],__class__:8,__doc__:4,__future__:[6,7],__getattr__:[],__init__:[2,4],__mosek:3,__name__:[4,8],_auto10:10,_auto1:[3,5,10,13,15],_auto2:[10,13,15],_auto3:[10,13],_auto4:[10,13],_auto5:[10,13],_auto6:[10,13],_auto7:[10,13],_auto8:10,_auto9:10,_ax:4,_base:6,_build:[12,17],_check_optimize_result:[5,9],_compon:9,_datafram:[],_depth:7,_fraction:7,_lambda:1,_leaf:7,_logist:[5,9],_make_index:[],_multilayer_perceptron:[1,2],_node:7,_num_sampl:[],_ratio:9,_sampl:7,_split:7,_varianc:9,_weight:7,a0faa0:[7,8],a77d5ac269b2:[],a_0:1,a_1a:1,a_2a:1,a_3:1,a_3a:1,a_4:1,a_4a:1,a_h:2,a_i:[1,2,10],a_j:[2,10],a_k:[2,10],aaron:17,ab_channel:12,abandon:2,abbrevi:14,abid:15,abil:[1,8],abl:[2,3,5,8,10,15],abort:15,about:[0,1,2,3,4,5,6,7,8,9,10,12,13,17],abov:[0,1,2,3,4,5,6,7,8,9,10,13,15],abovement:4,abs:[0,1,3],abscissa:5,absolut:[1,3,4],acccess:[],accept:[1,7],access:[1,9,15],accid:4,accmod:3,accompani:1,accomplish:[6,7],accord:[0,1,2,3,4,5,7,10,15],accordingli:9,account:[1,3,15],accumul:[10,15],accur:[4,8,15],accuraci:[1,2,3,5,7,8,9,10],accuracy_scor:[1,2,8],accuracy_score_numpi:2,achiev:[1,2,3,4,6,10,13],aco:15,acquaint:12,acquir:[2,12],acr:1,across:[2,4,7,12],act:[2,13],action:15,activ:[0,1,7,14],actual:[1,2,3,4,6,9,13],ada_clf:8,adaboostclassifi:8,adam:2,adapt:[1,4,5,17],add:[1,2,3,4,6,8,9,10,15],add_subplot:[0,2,5,10],added:[1,2,3,5,6,13],addendum:3,adding:[0,2,4,13],addit:[0,1,3,4,5,6,7,8,10,12,13,15,16,17],addition:[5,10],address:[2,5,7,9,17],adjac:10,adjoint:3,adjust:[5,10],admir:1,advanc:[4,10,17],advantag:[2,3,4,5,8,13],afecionado:[],affect:[],affin:[1,6,9],aficionado:[],aforement:0,african:1,after:[0,1,2,3,4,5,7,9,10,12,13,15],afterward:1,again:[0,1,2,3,4,5,6,8,9,10,15],against:[2,5,8],age:[1,5],agegroup:5,agegroupmean:5,aggreg:[7,8],agorithm:8,agre:[3,15],ahead:7,aid:9,aim:[0,1,2,4,5,9,12,13],ainv:3,aka:3,alarm:3,albeit:0,algebra:[1,3,5,12,14],algo:15,algorithm:[1,2,3,4,5,6,12,13,14,15,17],align:[1,3,4,5,6,15],all:[0,1,2,3,4,5,7,8,9,10,12,13,14,15,16,17],allevi:[2,5],alloc:13,allow:[1,2,3,4,5,6,8,12,13],almost:[1,2,4,5,6,9,15],alon:7,along:[0,3,4,7,8,9,12,13],alpha:[0,1,2,3,4,5,6,7,8,15],alpha_:8,alpha_i:5,alpha_k:5,alpha_m:8,alpha_opt:5,alreadi:[3,8,10,12,13,15],also:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,17],alter:[2,15],altern:[1,2,3,5,6,7,9,13],although:[2,3,4,6,8],alwai:[0,1,3,4,5,10,15],ame2016:1,american:1,among:[1,3,7,8,10],amongst:3,amount:[0,1,2,4,6,8,12],an_:15,anaconda3:[1,2,4,5,6,9],anaconda:[1,2,12],analys:[4,15],analysi:[2,4,5,13,14,17],analyt:[1,3,4,5,10,12],analyz:[1,2,3,15],andrew:2,angl:[1,7,15],ani:[0,1,2,3,4,6,7,8,10,15],anim:10,ann:10,annot:[1,2,5,6],anoth:[1,2,3,4,5,6,8,9,10,13,15],ans:15,ansatz:1,answer:[1,2,3,4,13],anymor:[2,6],anyon:6,anyth:[2,15],anytim:16,apach:2,apart:[5,9],api:[2,12],appear:[1,2,13,15],append:[2,4,5,6,7,15],appendcon:3,appendvar:3,appli:[1,2,4,5,6,7,8,9,10,15,17],applic:[1,2,3,4,5,7,10,15,17],approach:[2,3,4,7,8,9,10,12,15,17],appropri:[4,7,10,12,15],approx:[1,5,8,9,15],approxim:[1,2,3,4,5,8,9,15],apt:[1,12],aptli:0,aragorn:[],arang:[2,4,5,7,8,10],arbitrari:[2,5,6,10,15],arbitrarili:[1,2,9],architectur:[10,17],area:[1,17],arg:4,argc:15,argmax:[2,9],argmin:[0,8],argsort:9,argu:2,arguabl:0,argument:[1,3,9,10,15],argv:15,aris:[1,4,5,10,15],arithmet:[1,13],arma:15,armadillo:[13,15],around:[1,2,3,4,9,15],arrai:[0,1,2,3,4,5,6,7,9,10,12,15],arriv:[1,7,9,13,15],arrow:10,arrowprop:6,art:[1,2,12],articl:[0,1,4,8,15],artifici:[1,5,10,17],artificialneuron:10,artist:4,asarrai:[1,7],asc:3,ascii:15,ask:[3,4,9,10],aspect:[1,12],assembl:1,assess:[1,4],assign:[0,1,5,6,7,10,14,17],assign_points_to_clust:0,associ:[0,1,4,7,10,15],assum:[0,1,2,3,4,5,6,7,8,9,10,13,15],assumpt:[1,3,4,7,9,15],ast:[1,3,4],astyp:[7,8],asymmetri:1,asymptot:4,atoi:15,atom:1,attempt:[1,5,6,8],attend:14,attent:[1,13],attr:[],attract:[1,8],attribut:[1,7],attributeerror:4,audi:1,aurelien:[1,14,17],author:[1,2,8,15],authour:1,auto:[7,8,15],autocor:15,autocorrelation_tim:15,autocorrelform:15,autocovari:15,autoencod:12,autoencond:12,autograd:12,autom:[1,12],automac:13,automag:[],automat:[1,2,9,12,13],autonom:17,avail:[1,2,4,8,9,12,13,14,17],averag:[0,1,2,4,7,8,15,16],avg:15,avoid:[0,1,3,4,7,9,13],awai:15,awar:8,award:16,axes3d:5,axes:[1,4,5,6,7,8,9],axessubplot:1,axhlin:6,axi:[0,1,2,4,5,6,7,8,9,10,15],axiom:3,axlabel:1,axvlin:6,b_1:[5,10],b_5:5,b_group:7,b_i:[1,2,10],b_ia_:1,b_index:7,b_j:[2,10],b_k:[2,5,10],b_m:10,b_score:7,b_valu:7,bachelor:14,back:[1,3,6,7,8,13,15],backbon:13,backend:2,background:17,backpropag:2,backtrack:7,backup:13,backward:[2,10,13],bad:15,badli:15,bag:[7,12,14],bag_clf:8,baggin:[],baggingboot:8,baggingclassifi:8,baggingtre:8,balanc:4,band:13,bandwidth:13,bar:[1,9],barber:17,bare:8,barebon:0,base:[0,1,2,3,5,6,7,8,12,15,16,17],basi:[3,5,6,8,9,10,13],basic:[6,10,12,14,15],batch:[5,9,10],batch_siz:2,bay:5,bayesian:[3,12,17],becaus:[0,1,2,3,4,5,6,7,10],becom:[0,1,2,3,4,5,7,10,15],been:[1,2,4,9,10,12,13],befor:[0,1,2,3,4,5,6,10,13,15],beforehand:[0,1,15],begin:[0,1,2,3,4,5,6,7,9,10,13,15],behav:[2,4,5],behavior:[1,2,5],behaviour:10,behind:[1,2,5,6],being:[0,1,2,3,5,6,8,9,10,15],believ:[7,13],belong:[0,3,5,6,7],below:[1,2,3,4,5,6,7,8,9,10,13,15],benchmark:8,bendik:16,benefici:2,benefit:[1,2,5,9,12],bengio:[2,14,17],benign:[2,5],besid:3,bessel:3,best:[0,1,2,3,4,5,6,7,8,10,15,16],beta:[1,2,3,4,5,8,9],beta_0:[1,2,3,5],beta_0x_:1,beta_1:[1,2,3,5,8],beta_1x_0:1,beta_1x_1:[1,5],beta_1x_2:1,beta_1x_:1,beta_1x_i:5,beta_2:1,beta_2x_0:1,beta_2x_1:1,beta_2x_2:[1,5],beta_2x_:1,beta_:[1,5],beta_i:[1,3],beta_j:[1,3,5],beta_k:5,beta_linreg:5,beta_m:8,beta_mg_m:8,beta_p:5,beta_px_p:5,better:[0,1,2,3,7,8,9,10],between:[0,1,2,3,4,5,6,7,9,10,15],beyond:[1,2,3,5,6],bia:[1,2,3,6,7,8,10,14,15],bias:[2,3,4,7,10],big:[0,1,2,3,4],bigger:2,bigr:10,bike:7,bilbo:[],bilek:16,billion:[10,12],bin:[1,4,5,15],binari:[1,3,5,7,8,10,14,15],bind:[1,4],binomi:12,binsboot:4,bioinformat:1,biolog:[2,10,17],bios1100:12,bird:1,birth:[],bishop:[14,17],bit:[0,2,13,15],bitwis:15,bla:[3,13],black:[0,6,7],block:[0,4,8,12,13],blockingavg:15,blockingstd:15,blockingvar:15,blocksiz:15,blocksizemax:15,blocksizemin:15,blue:1,bmatrix:[1,2,3,5,6,9,13],bmi:2,bodi:[1,2,10],bold:2,boldfac:[1,3],boldsymbol:[0,1,2,3,4,5,6,8,9],boltzmann:[10,12],book:17,bool:0,boost:[2,7,12,14],boostrap:8,bootavg:15,bootstd:15,bootstrap:[2,12,14],bootvar:15,bootvec:15,borrow:[],boston_dataset:1,bot:6,both:[0,1,2,3,4,5,6,7,8,12,13,15,16],bottl:5,bottom:4,bound:[1,3,4,6,10],boundari:[6,9,10],boundkei:3,box:7,boyd:[5,6],bracket:15,brain:[2,5,10],branch:7,breast:[3,5,9],brew:[1,12],brg:6,briefli:1,bring:[1,3,8],broad:1,broadcast:0,browser:[],brute:[3,9],bsol:[],bsubex:[],build:[1,3,4,8,13,15],built:[1,2,4],bunch:9,busi:1,bzl:3,c46dd114b2af:6,c_0:15,c_1:10,c_2:10,c_3:10,c_4:10,c_i:[5,10],c_k:15,cach:8,cal:[1,5,6,8,10],calcul:[0,1,2,3,4,5,6,7,8,9,10,13],call:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,17],callabl:4,calor:1,cambridg:[5,17],came:0,can:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,17],cancel:1,cancer:[3,8],cancerpd:5,candid:[6,7,8],cannot:[1,2,3,5,6,7,14,15],canopi:[1,12],cap:3,capabl:[1,2,6,12],capita:1,captur:[9,10],card:[1,5],cardin:2,care:[0,9],carefulli:5,carlo:[1,4,12,15,17],carri:[4,5],cart:8,casella:17,cast:2,categor:[1,2,7,9],categori:[0,1,2,5,8,10,14],categorical_crossentropi:2,caus:[1,3,4,15],causal:1,causat:1,cax:2,cbar:2,ccc:[3,10],cdf:15,cdot:[0,1,4,5,10,13,15],celebr:5,center:[0,1,2,4,5,6,7,9,15],centr:17,central:[1,3,4,6,13],centroid:[0,15],centroid_differ:0,centroid_list:0,certain:[0,1,4,5,7,15],cha:1,chain:[2,12,15],challeng:[0,5],chanc:[2,3,5,15],chang:[0,1,2,3,4,5,6,7,9,10,13,15],chapter:[0,4,8,9,13,14,17],charact:[1,3,6,15],character:[6,7,8,10,15],characterist:[1,2,8],charg:1,charl:1,chd:5,chddata:5,cheap:3,cheaper:[2,5],chebychev:0,check:[1,2,3,5,9,13],check_consistent_length:[],chemic:15,chen:8,choic:[0,1,2,4,5,7,10,13,15],choleski:[3,13],choos:[0,4,5,7,8,9,15],chosen:[1,2,4,5,6,7,8,15],chosen_datapoint:2,christian:17,christoph:[14,17],cin:15,circ:[2,10],circl:[1,6,10],circumfer:7,circumv:[2,3],clariti:[0,15],class_nam:7,class_val:7,class_valu:7,classic:[5,7],classif:[1,3,4,5,6,9,10,12,14,17],classifi:[1,2,5,7,8,9],classificaton:2,classifii:8,clean:2,clear:[2,3,8,10],clearer:0,clearli:[1,3,4,5,6,15],clever:[0,2,8],clf3:1,clf:[1,6,7,8],clf_ridg:1,clip:15,close:[0,1,2,4,5,6,7,9,10,15,17],closer:3,closest:[0,5,6,9],closur:12,cloud:12,clust:0,cluster:[1,2,4,9,12,14],cluster_label:0,cmap:[1,2,6,7,8],cmath:15,cmb:14,cmd:7,cn_:15,cnn:10,cntk:12,code:[4,6,12,13,14,17],coef0:6,coef:1,coef_:[1,3,5,6,7],coeffici:[1,3,4,5,6,7,13],coerc:[1,4],coin:[8,15],coin_toss:8,col:[1,9],colab:12,cold:7,colinear:1,collaps:6,collect:[1,4,8,9,12,15,17],collinear:3,color:[1,4,6,7,8,15],colorbar:2,colsample_bytre:8,colsaobject:8,column:[1,2,3,4,5,6,7,9,10,13],columntransform:7,com:[12,16,17],combin:[2,3,4,5,8,15],come:[0,1,2,3,5,10],comma:[],command:[1,2,15],comment:1,commerci:[1,12],commod:1,common:[0,1,2,3,4,5,7,9,15],commonli:[0,1,2,4,5,7],commun:[1,10],compact:[0,1,2,3,4,5,7,9,10],compar:[0,1,3,4,5,9,13],compat:5,compet:1,competit:8,compil:[1,2,12,13,15],complet:[1,7,10],completenn:10,complex:[2,3,4,6,7,9,10],complic:[0,1,2,4,5,7],compon:[0,1,2,3,4,5,7,12,14],components_:9,compos:[0,7,10],compphys:[12,14,17],compress:1,compris:4,compromis:3,compulsori:12,comput:[0,1,2,3,4,6,8,9,10,12,13,14,17],computation:[1,4,5,7,15],con:3,concaten:0,concav:[2,5],concentr:[1,8],concept:[0,1,12],conceptu:[5,10],concern:[0,1,2,5],concic:[],conclud:[1,3],conclus:2,conda:[1,2,12],condit:[1,3,4,6,7,9,15],conduct:12,coneqp:3,confid:[1,3,4,5,6],confirm:[3,10],confus:[3,4,8,13],confusion_matrix:7,congruenti:15,conjug:6,conjugaci:5,connect:[1,2,5,7,9,10,13],consequ:[3,4,5,6,8,10],conserv:[0,3],consid:[0,1,2,3,4,5,6,7,8,10,13,15],consider:[1,2,3,5],consist:[1,2,4,5,10,15],constant:[1,3,5,6,10,15],constitu:1,constitut:4,constrain:[2,3,5,9],constraint:[3,5,6],construct:[1,2,3,4,5,6,7,8,9,13,15,17],contact:1,contain:[0,1,3,4,5,6,7,9,10,13,15,17],contemporari:17,content:[2,12,13],context:[4,5,8],continu:[1,2,3,4,5,6,7,8,10,13],contour:[5,7,8],contourf:[6,7,8],contrast:[2,7,8,10],contribut:[1,3,15],contributor:1,control:[1,2,7,12],conveni:[1,3,4,5,10,13],convent:10,converg:[0,1,2,3,5,6,9],convergencewarn:[1,2,5,6,9],convert:[1,2,3,7,9,13],convex:3,convinc:5,convolut:[2,12,14],cool:7,coordin:[0,3,10],coorel:1,copi:[0,1,2],core:8,corel:1,coronari:5,corr:[1,3,5,9],correalt:[9,12],correct:[0,1,2,3,13,15],correctli:[2,4,8],correl:[1,2,3,5,8,10,12],correlation_matrix:[1,3,5,9],correspond:[0,1,3,4,6,7,9,10,12,13,15],cortex:10,cos:[1,4,7],cosin:[0,4],cost:[1,3,4,6,7,10,15],could:[1,2,3,4,5,6,7,8,9,10,13,15],coulomb:1,count:[1,7,14,15,16],countor:5,coupl:3,cours:[1,2,3,9,14,15],courvil:[14,17],cout:15,cov:[3,4,9,13,15],cov_xi:[3,9],cov_xx:[3,9],cov_yi:[3,9],covari:[5,12,13],covariance_matrix:[0,3,9],cover:[1,3,11,12,17],covert:1,covxi:15,covxx:15,covxz:15,covyi:15,covyz:15,covzz:15,cpu:2,creat:[2,3,7,8,9,10,12],create_biases_and_weight:2,create_neural_network_kera:2,create_x:[3,9],credit:[1,5],crim:1,crime:1,criteria:[0,1,7,8,15],criterion:[5,7,8],cross:[1,2,5,7,8,12,14,15],cross_val_scor:4,cross_valid:[5,8],crossvalid:4,crucial:[2,15],csr_matrix:13,cstdlib:15,csv:[1,4,5,7],ctnk:2,cubic:1,cumbersom:3,cumsum:[8,9],cumul:[4,8],cumulative_heads_ratio:8,cup:3,current:[0,2,5],curs:1,curv:[5,8,10],curvatur:5,custom:[0,3],custom_cmap2:[7,8],custom_cmap:[7,8],cutpoint:7,cvxbook:5,cvxopt:[3,6],cyber:17,cycl:[0,2,10,15],d_f:5,dagger:[3,13],dai:[2,7,12],dalen:16,darget:7,darkr:15,dat:1,dat_id:[1,4,5,7],data1:0,data2:0,data3:0,data4:0,data:[0,3,4,6,8,10,13,17],data_id:[1,4,5,7],data_indic:2,data_panda:[],data_path:[1,4,5,7],databas:2,datafil:[1,4,5,7],datafram:[1,3,5,7,9],datapoint:[2,3,4,5,9],dataset:[0,1,4,5,6,7,8,9],date:1,daughter:8,david:17,dbh:2,dbo:2,dcomposit:13,dcost:3,dead:2,deal:[0,1,2,3,5,6,9,13,15],debt:5,debug:[3,4],decad:1,decai:[1,5,15],decent:8,decid:[3,4,7],decim:1,decis:[1,2,6,9,12,14,17],decision_funct:6,decision_tre:7,decisiontreeclassifi:[7,8],decisiontreeregressor:[1,7,8],declar:[1,13],decompos:[3,13],decomposit:[1,10],decompost:3,decorrel:8,decreas:[2,3,4,5,8,9],deduc:1,deep:[5,10,12,14,17],deep_tree_clf1:7,deep_tree_clf2:7,deep_tree_clf:[7,8],deepen:12,deeper:0,deeplearningbook:17,def:[0,1,2,3,4,5,6,7,8,9,15],def_covari:15,defect:3,defici:3,defin:[0,1,3,4,5,6,7,8,9,10,13,15],definit:[0,2,3,4,5,6,8,9,10,13],defint:15,degre:[3,4,6,7,8,9,15],del:2,delet:[4,15],deliv:14,delta:[0,1,6,10,15],delta_:[2,13],delta_h:[1,2],delta_j:10,delta_k:10,delta_l:2,delta_n:1,delug:12,delv:1,demand:5,demonstr:[1,3,4,5,9,10,12],denomin:[2,3],denot:[2,4,5,15],dens:[0,2],densiti:[0,1,4,15],depart:16,depend:[0,1,2,3,4,5,6,9,10,12,15],depict:15,deploy:[1,12],deprec:1,depth:[7,8,13],deriv:[1,2,4,6,8,9,12],descend:[3,7,9],descent:[1,2,6,10],descr:1,describ:[0,1,3,4,6,8,9,10,13],descript:[0,1,6,7],design:[1,2,3,4,5,8,9,10],designmatrix:1,desir:[0,1,3,5],despit:[2,10],destroi:13,det:[3,13],detail:[0,1,5,9,13],detect:[6,10],determin:[1,3,5,6,7,8,9,10,13,15],determinist:[5,15],dev:[2,15],develop:[0,1,3,6,8,9,10,12,13],deviat:[1,2,3,4],devis:10,df1:[],diag:[3,6],diagnost:[2,8],diagon:[1,3,5,13,15],diagonaliz:3,diagram:8,dict:6,dict_kei:1,dictionari:1,did:[0,1,2,3,5,8,9],die:2,diffeent:6,differ:[0,1,2,3,4,7,8,9,10,12,13,15,17],differenti:[5,12,13],difficult:[0,1,2,4,8,15],difficulti:[1,2,5],digit:[1,2,14,16],dilut:2,dim:[0,9],dimens:[0,1,2,3,6,9,13],dimension:[0,1,3,4,5,7,9,12,13],dimensionless:1,diment:13,dimes:0,direct:[0,1,2,5,9,10],directli:[0,2,3,15],directori:[],disadvantag:1,discard:[4,9],disciplin:[1,10],disclaim:15,discourag:5,discov:1,discover:3,discret:[2,3,5],discrimin:[5,8,9],discuss:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,17],diseas:5,disk:[],disord:[2,5],displai:[0,1,2,4,5,6,7,8,9,10,15],displaystyl:[1,3],displot:1,disregard:1,dissimilar:[0,9],dist:0,distanc:[0,1,6,7,9,15],distance_list:7,distinct:[0,5,6,7,8],distinctli:6,distinguish:[1,5,6,15],distplot:1,distribut:[0,1,2,4,5,8,9,12,13],distrubut:[1,12],div:3,dive:[1,6],diverg:[2,5],divid:[1,2,3,4,6,7,9,10,15],divis:[4,6,7,13,15],dna:5,dnn:[1,2,10],dnn_kera:2,dnn_model:2,dnn_numpi:2,dnn_scikit:[1,2],doamin:3,doc:[12,14,17],doconc:[],document:[5,9],doe:[0,1,2,3,4,5,6,8,9,10,13,15],doesn:[7,10],dog:2,doi:0,doing:[1,3,4,9],domain:[3,5,6],domin:1,don:[0,1,2,6,9,12,15],done:[0,1,3,4,7,8,9,13,15],dot:[1,3,5,6,7,8,9,10,13,15],doubl:[13,15],doubli:2,down:[1,5,7,9,10],download:[1,2,3,13,17],dozen:2,dramat:9,draw:[4,5,8],drawback:[1,2,5],drawn:[2,4,5,9,15],dre:3,drop:[1,2,3,4,9,15],dropna:[1,4],dtype:[0,1,2,13],dub:1,due:[0,2,3,4,5,6,8,10],dummi:1,dure:[1,2,6,7,9,12],dwell:1,dwh:2,dwo:2,dx_1:15,dx_n:15,dying:2,each:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16],eapprox:1,earli:2,earlier:[1,3,5,6,7,9,10],eas:[0,7],easi:[1,3,4,5,6,7,8,9,10,12,13],easier:[3,4,6,7,15],easiest:5,easili:[1,2,3,5,6,7,8,9,10,13],eastern:16,ebind:1,eblock:7,econometr:[],economi:3,ecosystem:12,ect:14,edgecolor:4,edit:[],edu:5,educ:1,eface79dac2c:8,eff:15,effect:[2,8,15],effic:2,effici:[1,5,8,12,13,15],efron:[4,15],eig:[3,5,9,13,15],eigen:15,eigenpair:[3,9],eigenvalu:[3,5,6,9,13],eigenvector:[3,5,9],eight:13,eigval:[13,15],eigvalu:[5,9],eigvec:[13,15],eigvector:[5,9],eispack:13,either:[1,2,3,4,5,6,7,8,9,15],ekstrom:16,elabor:15,electr:[1,10],electur:17,eleg:9,element:[2,3,4,5,6,9,10,12,13,14,17],elementari:[8,13],elessar:[],elif:0,elim:13,elimin:[3,6],els:[2,5,7,10,15],elu:2,elus:1,email:[14,16],embed:[1,9],embodi:4,emit:15,emner:17,emphas:[1,8,12],emphasi:[1,12,17],empir:[2,9,15],emploi:[1,2,3,4,5,9,15],employ:1,empti:[4,8],emul:10,enabl:9,encapsul:0,encod:[0,1,3,7,9],encompass:[1,15],encount:[1,2,3,5,15],end:[0,1,2,3,4,5,6,7,8,9,10,13,15],endl:15,endpoint:15,energi:[1,4],enforc:10,eng:17,engin:[1,2,12,15],english:17,enough:[1,4,5],ensembl:[2,7,14,15],ensur:[1,2,3,4,5,9,15],enter:[3,15],enthought:[1,12],entir:[2,5,7,12,15],entiti:[7,10,13],entri:[1,3,6,9,10,13],entropi:[2,5,8],enumer:[1,2,6],env:[3,15],environ:[12,17],eol:1,eosfit:1,epoch:[1,2,5,10],epsilon:[1,3,4,5],epsilon_0:1,epsilon_1:1,epsilon_2:1,epsilon_:1,epsilon_i:1,eqnarrai:[3,4],equal:[0,1,2,3,4,5,6,7,9,10,13,15],equat:[0,2,3,4,6,7,8,9,13,15],equilibrium:10,equiv:[5,13,15],equival:[1,2,3,6,9,12,13],erf:15,eriador:[],eridg:1,err:[1,8],err_:4,errat:5,errno:[],error:[2,3,4,5,7,9,10,12,15],error_estimate_corr_tim:15,error_hidden:2,error_output:2,escap:5,esl:0,esol:[],especi:[2,7,10],essenti:[0,1,3,7,8,10,15],establish:[1,8,9],estim:[1,2,3,4,5,8,9,12,15],estimated_mse_fold:4,estimated_mse_kfold:4,estimated_mse_sklearn:4,esubex:[],eta0:[5,6],eta:[1,2,5,6,10],eta_v:[1,2],etc:[0,1,2,3,5,6,7,9,10,12,13,15],ethic:12,etsim:4,euclidean:[0,1],evalu:[1,3,4,5,7,15],even:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],event:[3,5,8],eventu:[3,4,5,9,10,16],everi:[0,1,2,3,4,5,7,8,9,10,12,15],everyth:10,everywher:5,evolv:1,exact:[1,3,5,9,10,13,15],exactli:[1,10,12],examin:4,exampl:[3,4,9,10,12,13,14,17],exce:[2,10],excel:[0,1,2,3,8,17],except:[3,4,6,7,15],excess:1,excit:1,exclud:[2,4,10],exclus:[1,2,4,15],execut:3,exemplifi:5,exercis:[3,12,14],exhaust:4,exhibit:[1,6],exist:[0,1,2,3,4,5,6,7,13,17],exit:[3,13,15],exp:[1,2,3,4,5,6,8,9,10,15],exp_term:2,expand:[3,5,9],expans:[1,3,5,6,8,10],expect:[1,2,3,4,5,9,10,12],expectation_value_of_h_wrt_p:15,expens:[4,5,8,15],experi:[1,2,4,5,6,12],experiment:[1,4,7,15],expert:[2,7],explain:[0,1,5,7,8,9,15],explained_variance_ratio_:9,explanatori:1,explicit:[1,13],explicitli:[0,1],explod:2,exploit:[1,10],explor:[2,5,6,12],expon:2,exponenti:[1,2,3,5,8],export_graphviz:7,export_text:7,exporttext:7,expos:12,express:[1,3,4,8,10,13,15],exptmean:15,exptvari:15,extend:[3,9,12],extens:[1,10,12],extent:[1,2,4,17],extern:7,extra:[2,3],extract:[1,3,5,6,9,13],extrapol:1,extrem:[0,1,2,3,5,6,7,13],extremum:5,extrins:9,eye:[0,1,3,5,13],f11:1,f12:1,f13:1,f1d:5,f6d7a289d493:13,f_0:8,f_1:[5,8],f_2:[5,10],f_3:10,f_d:15,f_i:[4,10],f_m:8,face:5,facecolor:[4,6,15],facil:[1,12],facilit:10,fact:[1,2,3,5,7,9,10],factor:[1,2,3,7,8,9,13,15],fafab0:[7,8],fail:[4,5,6,9,16],failur:5,fairli:[0,2,15],fall:[6,7,14],fals:[0,1,2,3,4,5,7,8],famili:[1,5,6,15],familiar:[1,3,6,12,13,15],famou:[4,10,13],far:[0,1,3,5,6,9,10,15],fashion:[1,7,8],fast:[2,4,5,8,10,12,15],faster:[2,9],fastest:5,favor:5,favorit:15,featur:[1,2,3,4,5,6,8,9,10,12,15],feature_nam:[1,2,5,7],feautur:7,fed:2,feed:[1,9,12,14],feed_forward:2,feed_forward_out:2,feed_forward_train:2,feedforward:[2,10],feel:[0,1,3,9,12,16],feet:1,few:[0,2,7,11,15],fewer:[1,7,9],ffnn:[2,10],field:[1,10,12],fifth:1,fig:[0,1,2,5,10],fig_id:[1,4,5,7],figaxi:15,figsiz:[1,2,4,5,6,7,8],figur:[0,1,2,3,4,5,6,7,8,10,12],figure_id:[1,4,5,7],figurefil:[1,4,5,7],file:[1,2,3,4,5,6,7,13,15],filenam:[1,15],filenotfounderror:[],fileout:15,fill:[3,7],financ:1,find:[0,1,2,3,4,5,6,7,8,9,10,12,15],fine:[0,1],finit:[3,4,10,15],first:[0,1,2,3,4,6,7,8,9,13,15,17],firsteigvector:9,fit:[2,3,4,5,6,7,9,10,15],fit_intercept:[1,3,4],fit_mod:7,fit_transform:[1,4,6,7,9],fiti:1,five:[1,7],fix:[1,4,5,8,9,10],fkkt:3,flag:0,flat:[5,10],flatten:[2,3],flexibl:[1,2,4,6,8,10],float32:7,float64:[1,13],flop:[3,13],flow:[2,10],fluctuat:3,fly:9,flyvbjerg:15,fmesh:5,focu:[1,3,4,12,17],focus:[2,5,13],fold:[4,7],folder:1,follow:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17],font:[1,5,15],fontdict:15,fontsiz:[2,6,7,8,15],fontweight:2,foral:6,forc:[1,3,8,9],forecast:10,forest:[1,2,7,12,14],forget:9,form:[1,3,4,5,6,7,9,10,12,13,15],formal:[0,15],format:[1,2,4,5,6,7,8,9,12,15,17],formatstrformatt:5,formul:[0,9],formula:[5,15],forth:10,fortran2003:12,fortran90:15,fortran:[1,12,13],fortun:[1,9],forward:[1,4,12,13,14],found:[2,3,4,5,10],foundat:12,four:[3,6,10,13,14],fourier:1,fourth:10,frac:[0,1,2,3,4,5,6,7,8,9,10,13,15],fraction:7,frame:5,framework:[2,6,8,15],frank:[3,9],frankefunct:[3,9],free:[1,9,12,13,15,16,17],freecodecamp:12,freedom:3,freeli:1,frequenc:[4,5,15],frequent:[1,5,6,7],frequentist:12,fresh:8,fret:0,fridai:14,friedman:[14,17],frodo:[],from:[0,1,2,4,5,6,7,9,12,13,14,15,16,17],from_cod:7,front:[1,3],fruit:0,fstream:15,fulfil:[3,10],full:[1,2,3,5,7,8,15],full_matric:3,fulli:[4,10,14,15],fun:12,func:4,functionali:9,fundament:[1,4,12],further:7,furthermor:[1,3,4,5,9,10,12],futur:[1,6,7],futurewarn:1,fys:16,g_1:8,g_2:8,g_m:8,gain:[0,2,3,7,8],galleri:1,gamge:[],gamma1:6,gamma2:6,gamma:[1,5,6,7,8,9],gamma_0:8,gamma_1:8,gamma_1x:8,gamma_:1,gamma_i:[1,6,15],gamma_j:5,gamma_k:5,gamma_m:8,gamma_x:1,gap:[3,6],gate:10,gather:[1,2,10],gaug:10,gaussbacksub:13,gaussian:[0,3,4,6],gaussian_point:0,gaussian_rbf:6,gave:5,gbc:14,gca:[4,5,6],gd_clf:8,gdclassiffiercgain:8,gdclassiffierconfus:8,gdclassiffierroc:8,gdregress:8,gemv:3,gen:15,gender:1,gener:[0,1,2,3,4,5,6,8,9,10,13,17],generallay:10,generate_simple_clustering_dataset:0,genom:12,geodes:9,geometr:1,geometri:3,georg:17,geq:[3,5,6,7],geron:[1,14,17],get:[0,1,2,3,4,5,7,8,9,12,13,15],get_distances_to_clust:0,get_dummi:7,get_split:7,get_yaxi:6,getattr:4,getsolutionslic:3,gibb:12,gini:8,gini_index:7,git:[1,12],github:[1,12,14,17],gitlab:[1,12],give:[0,1,2,3,5,6,7,8,10,12,15,17],given:[0,1,2,3,4,5,6,7,8,9,10,13,15],glare:0,global:[5,15],glorot:2,gmail:16,goal:[1,5,7],goe:[0,1,2,3,4,5,13],going:[1,2,3,4,5,6,7,9,10],golden:5,gone:3,gong:2,good:[0,2,3,5,7,8,9,12,15,17],goodfellow:[14,17],googl:[0,2,12],got:2,gpu:2,grade:14,gradient:[1,6,7,10,12,14],gradientboostingclassifi:8,gradientboostingregressor:8,gradual:[0,2],graph:[2,5,7,9,10],graph_from_dot_data:7,graphic:[1,2,7],grasp:1,gray_r:2,great:5,greater:[2,5,15],greedi:7,green:[1,7,15],grid:[2,4,5,6,10,15],grossli:5,ground:1,group:[0,1,4,5,7,12,14],groupbi:1,grow:[2,7,8],growth:1,guarante:[1,5,15],guess:[0,2,5,8],guestrin:8,guid:2,h_1:5,h_2:5,h_m:8,habit:1,had:[1,2,4,5],hadamard:[2,10],half:[2,6,7],halv:8,hand:[1,2,3,5,9,10,12,13,14,15,17],handl:[1,2,3,7,9,12],handle_unknown:7,handsid:10,handwrit:10,handwritten:[2,3,5],happen:[0,2,3,5,8,15],hard:[2,5,6,8],hardcopi:12,harder:[1,2],has:[0,1,2,3,4,5,6,7,8,9,10,13,15],hasn:[1,2],hassl:[1,12],hast:12,hasti:[0,1,14,17],hat:[2,3,5,7,8,9,10,13,15],have:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],haven:2,hdf5:[],head:[1,8,15],header:1,heads_proba:8,health:1,hear:1,heart:[1,5],heatmap:[1,2,5],heavili:1,heavisid:2,height:2,help:[0,1,2,10],helper:0,henc:[1,3,4,5,6,7,8,10],her:5,here:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,17],hereaft:[1,6,10],hermitian:13,hessenberg:13,hessian:3,heterogen:[7,8],hidden:[2,10],hidden_bia:2,hidden_bias_gradi:2,hidden_layer_s:[1,2],hidden_weight:2,hidden_weights_gradi:2,hierarch:[0,3],high:[0,1,2,3,4,5,7,8,9,12,13],higher:[1,2,3,4,5,6],highest:2,highli:[1,8,12,13,15,17],highwai:1,hing:6,hint:5,hip:12,hire:1,his:5,hist:[4,5,15],histogram:[1,4,5,15],histor:[5,9],histori:10,histplot:1,histtyp:4,hitherto:3,hjorth:16,hobbi:15,hoc:3,hoff:17,hold:[0,2,4,5,15],holder:1,home:1,homogen:[2,7,8],hopefulli:[1,9,15],horizont:9,hors:5,hot:[2,7],hour:[2,12,14,15,16],how:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,17],howev:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],hspace:[1,6,8,15],hstack:2,htf:14,html:[5,9,12,14,17],http:[5,9,12,13,14,17],huang:1,huber:1,huge:[2,12],human:[1,2,7,10],humid:7,hundr:2,hungri:2,hybrid:14,hydrogen:1,hyperbol:[2,10],hyperparam:6,hyperparamet:[0,1,3,7],hyperplan:9,i_1:[3,4],i_2:[3,4],ian:17,idea:[1,2,4,5,7,8,10,13,15],ideal:[0,1,4,6,15],idem:4,ident:[3,4,10,13],identical:3,identifi:[0,1,2,5,6,7,9,10],idum:15,ieor:15,ifi:17,ifs:12,ignor:[1,2,7],iii:13,ijca2016907841:0,illustr:[0,3,5,8,10,12],imag:[2,7,9,10,17],image_path:[1,4,5,7],imagin:2,immedi:[1,12],implement:[0,1,3,5,6,7,8,9,10],impli:[3,4,5,13],implicitli:[9,15],impos:[1,9,10],imposs:[1,3],impress:[1,10],improv:[0,1,3,7,8,9],impur:7,imshow:2,in3050:17,in4080:17,in4300:17,in5400:17,inaccur:5,inact:10,inadequ:1,includ:[1,2,3,5,9,10,12,15,16,17],include_bia:[4,7],incom:10,inconsist:[],incorrect:2,incoveni:6,increas:[1,2,3,4,5,6,7,9,10,15],increasingli:15,ind:4,inde:[1,3],indent:15,indentationerror:15,independ:[1,3,4,5,6,10,15],index:[0,1,2,8,12,15,17],index_col:1,indic:[1,2,3,7,8,9],indispens:4,individu:[2,5,8,10,15],indu:1,indx:13,ineffici:0,inequ:6,inequaltii:5,inf1000:12,inf1100:12,inf1100l:12,inf1110:12,inf3000:17,inf4490:17,inf5860:17,inf:1,infeas:7,infer:[1,2,4,17],inferenc:2,infil:[1,4,5,7],infin:[3,4,5,9],infinitesim:15,influenc:[4,8],influenti:2,info:[],inform:[0,1,2,4,5,7,9,10,13,17],infti:[5,15],ingeni:5,ingredi:[1,7],inher:4,inherit:13,initi:[0,1,2,4,5,8,13,15],initialis:15,inject:0,inlin:[0,1,2,3,4,5,6,7,8,9,10,13,15],inner:[4,5],innov:17,input:[0,1,2,3,4,5,6,7,8,10,13,15],input_dim:2,inputs:2,inputs_shuffl:[1,2],insert:[3,6,8,15],insid:[1,5],insight:[1,2,3,12,17],insist:5,inspir:[1,2,10,17],instal:[1,2,3,7,14],instanc:[1,2,4,5,7,9],instanti:8,instead:[0,1,2,3,4,5,6,7,9,13,15],institut:2,instruct:[1,2],int32:8,int64:1,int_0:15,int_:15,int_a:15,intak:1,integ:[0,2,13,15],integer_vector:2,integr:15,intellig:[0,1,17],intend:8,intens:2,intention:0,interact:[1,7,10,12],intercept:[1,5,6,9],intercept_:[1,5,6,7],interchang:[3,10,13],interconnect:2,interest:[1,2,3,4,5,6,7,10,12,15],interfac:[1,2,13],interior:[1,7],intermedi:13,intern:[2,8,10],interpol:[2,10],interpr:3,interpret:[1,2,7,8,10,13,14,15],interv:[1,3,4,5,15],intial:5,intimid:[],intract:1,intrins:[9,13,15],intro:[12,17],introduc:[1,2,3,5,6,8,10,13,15],introduct:[2,5,14,17],introductori:[1,13,17],intuit:[1,3,4,6,10],inv:[1,3,5],invalid:[2,6,13],invalu:[1,5,12],invari:2,invd:3,inver:6,invers:[1,5],invers_period:15,inverse_transform:6,invert:[1,3,5,8],invok:[1,6],involv:[1,4,5,9,10],iomanip:15,ios:15,iostream:15,ipca:9,ipynb:12,ipython:[0,1,2,4,5,6,7,8,9,12,13,15],irani:0,iri:[6,7],irreduc:4,irrelev:3,irrespect:1,isn:3,isnul:1,isomap:9,issu:[2,7,13],it_arrai:5,item:1,items:13,iter:[0,1,2,4,6,9,15],itr:3,its:[0,1,2,3,4,5,6,7,8,9,10,12,13,17],itself:[3,4,10,15],jackknavg:15,jackknif:[4,12],jackknstd:15,jackknvar:15,jackknvec:15,jacobian:5,jargon:15,jensen:16,jerom:17,job:[6,8],join:[1,4,5,7],joint:3,journal:15,judg:5,julia:[12,13],jump:[0,15],jupyt:[0,1,12,17],just:[0,1,2,3,4,5,6,7,8,9,10,15],justif:1,justifi:8,k_mean:0,kappa_d:15,karim:16,karlsen:16,karush:6,keep:[0,1,2,3,5,9,13],keepdim:[2,4,8],kei:[1,2,10,17],kept:0,kera:[1,12,14],kernel:[1,2,12],kernel_regular:2,kernelpca:9,kev:1,kevin:17,keyword:13,kfold:4,kick:[2,5],kind:[0,1,6,10],kjm:12,kkt:[3,6],kktsolver:3,kmeanspoint:0,kn_k:0,know:[0,1,2,3,5,6,12,15],knowledg:[1,12],known:[2,3,4,5,6,7,10,13,15,17],kondev:1,kpca:9,kroneck:0,kuhn:6,kwarg:4,kwown:1,l1_l2:2,l1regl:3,l1regls_mosek2:3,l1regls_mosek:3,l_1:5,l_2:5,l_j:10,la_i:10,la_k:10,lab:[12,14],label:[0,1,2,3,4,5,6,7,8,10,12,13,15],labelencod:[5,8],labels:[6,7],labels_shuffl:[1,2],labor:0,laboratori:14,lack:[0,1],lagrang:[6,9],lambda:[1,2,3,4,5,6,8,10,15],lambda_0:9,lambda_1:[3,6,9],lambda_2:[6,9],lambda_:9,lambda_i:[6,9],lambda_iy_i:6,lambda_jy_iy_j:6,lambda_k:6,lambda_n:[3,6],lamda:2,land:[1,6],landmark:6,landscap:5,langl:[1,9,15],languag:[1,2,6,12,13,17],lapack:[3,13],laplac:3,laptop:12,larg:[1,2,3,4,5,6,7,8,9,12,13,15,17],larger:[1,3,4,5,6,8,9,15],largest:[6,9],lasso:[1,4,5,12,14],last:[0,1,2,3,4,5,6,7,8,10,13,15],later:[0,1,2,5,6,10,12,15],latex:[],latter:[1,3,5,6,9,13,15],lattic:10,law:1,layer:1,lbfg:[5,7,8,9],lbl:4,lcc:[3,4],lda:9,ldot:[1,4,9,15],lead:[1,2,3,4,5,6,7,8,9,10,13,15],leaf:7,leaki:2,lear:5,learn:[3,4,6,7,8,10,13,14,17],learner:8,learning_r:[6,8],learning_rate_init:[1,2],learning_schedul:5,least:[0,1,4,5,6,8,9,12,13,15],leav:[1,2,3,4,7,9],lectur:[1,2,3,5,8,9,10,12,13,14,17],lecturenot:[12,17],left:[1,2,3,4,5,6,7,8,9,10,13,15],leftarrow:[6,10],legend:[1,3,4,5,6,7,8],len:[0,1,2,3,4,6,7,8,9,10,13,15],length:[1,2,5,6,7,12,15],leq:[0,1,3,5,6,15],less:[1,2,3,4,6,7,15],lessen:2,let:[0,1,2,3,4,5,6,7,8,9,10,13,15],letter:[1,13,15],level:[1,2,3,4,7,12,13,14],lib:[1,2,4,5,6,9],liblinear:[6,8],librari:[1,2,3,7,8,9,13,15,17],licens:[1,2,12],lie:[1,4,9,15],lies:[6,9],life:[1,2,6,10],lift:0,light:[],like:[0,1,2,3,4,5,7,8,9,10,12,13,15],likelihood:[1,2,3,7],lim_:15,limit:[1,3,4,6,9,10,13],lin_clf:6,lin_model:1,lin_reg:7,linalg:[1,3,5,6,9,13,15],line1:6,line2:6,line3:6,line:[1,2,4,5,6,9,13,15],linear:[2,3,4,5,7,8,9,10,12,14,15],linear_model:[1,3,4,5,6,7,8,9],linear_regress:4,linearli:3,linearloc:5,linearregress:[1,4,5,7],linearsvc:6,liner:2,linerar:8,linewidth:[1,4,6,7,8],link:[1,5,7,10,12],linlag:3,linpack:13,linreg:1,linspac:[1,4,6,7,8,13,15],linu:16,linuek:16,linux:[1,2,12],liquid:1,list:[0,1,2,3,7,12],listedcolormap:[7,8],literatur:[0,2,5,17],littl:[2,7,10],live:6,lle:1,lloyd:0,lmb:[3,4],lmbd:[1,2],lmbd_val:[1,2],lmbda:5,load:[1,2,5,7,8],load_boston:1,load_breast_canc:[2,5,7,8,9],load_digit:2,load_iri:[6,7],loc:[1,4,5,6,7,8],local:[1,2,5,10],locat:6,log10:[3,4],log:[1,2,3,4,5,7,8,9,13],log_:1,log_clf:8,logarithm:[1,3,5,13],logic:[1,2,7],logist:[1,2,6,7,8,9,10,12,14],logisticregress:[5,7,8,9],logit:5,logreg:[5,7,8,9],logspac:[1,2,3,4],longer:[0,6,8,13,15],longest:0,loocv:4,look:[0,1,2,3,4,5,6,7,8,9,13,15],loop:[0,2,4,8,10,12,13,15],lose:2,loss:[1,2,3,4,6,8,9,13],lot:[0,1,2,4],low:[1,4,7,8,9,15],lower:[1,2,7,8,13],lowercas:13,lowest:[5,7,15],lstat:1,lstsq:1,lubksb:13,ludcmp:13,lux:13,lvert:2,m_1:0,m_h:1,m_k:0,m_l:10,m_n:1,m_p:1,machin:[2,3,4,7,8,9,10,13,14,17],machinelearn:[12,14,17],mackai:17,made:[1,2,3,4,5,7,9,10],mae:1,magic:0,magnitud:[2,5],mai:[1,2,3,4,5,6,7,9,10,12,13,15],mail:14,main:[1,2,3,5,7,13,17],mainli:[1,3,4,5,7],maintain:4,major:[2,4,5,7,8,13],make:[0,2,3,4,5,6,9,10,12,13,15,17],make_moon:[6,7,8],make_pipelin:[1,4,8],makedir:[1,4,5,7],makeplot:1,malcondit:13,malign:[2,5,7],mammographi:3,manag:[1,12],manhattan:0,mani:[0,1,2,3,4,5,6,7,9,11,12,13,15,17],manifold:9,manual:0,map:[0,1,2,4,5,6,9,10,15],margin:[1,3,6],marit:1,mark:[],marker:[1,5,13],markov:12,marsaglia:15,mask:15,mass:[1,2,3],massag:1,masses2016:1,masses2016ol:1,masses2016tre:1,masseval2016:1,master:14,mat1100:12,mat1110:12,mat1120:12,mat3155:14,mat4155:14,mat:12,match:[0,2,3,5],materi:[3,5,13],math:[0,5,10,13,15,17],mathbb:[0,1,3,4,5,6,9,10,13,15],mathbf:[1,3,4,5,6,13,15],mathcal:[2,3,4,5],mathemat:[0,1,5,9,10,12,13,15,17],mathemati:[],mathemt:[],mathrm:[0,1,2,3,4,5,6,7,8,9,10,15],matmul:[2,3],matnat:[16,17],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],matric:[1,2,5,6,9,12,13],matrix:[1,4,6,8],matshow:2,matter:5,max:[1,2,5,7,8,10],max_depth:[1,7,8],max_it:[1,2,5,6,9],max_iter:0,max_leaf_nod:8,max_sampl:8,maxdegre:[1,4,8],maxdepth:8,maxim:[2,3,5,6,9],maximum:[0,1,2,3,5,6,7,8],maxpolydegre:[3,4],mbox:[3,4],mcculloch:10,mcint:15,mcintsqr2:15,mean:[2,3,4,5,7,8,9,10,12,13,14],mean_absolute_error:1,mean_divisor:0,mean_i:15,mean_matrix:0,mean_squared_error:[1,4,5,8],mean_squared_log_error:1,mean_vector:0,mean_x:15,meaning:[1,5],meansquarederror:1,meant:[5,8],meantempvec:15,meanvec:15,measur:[0,1,2,3,4,7,9,10,15],mechan:[1,15],median:1,medicin:10,medium:6,medv:1,meet:[1,16],mehta:1,memori:[9,10,13],mention:[0,1,5,10,15],mere:1,mersienn:15,meshgrid:[3,6,7,8,9],messag:3,met:[1,6],meteorolog:7,method:[0,1,2,3,6,9,10,12,13,14,17],metric:[0,1,2,4,5,7,8],metropoli:12,mev:[1,15],mglearn:12,mgrid:5,mhjensen:[1,2,5,6,9],microsoft:17,mid:2,midpoint:7,might:[1,2,5,7],mild:7,miller:15,million:1,mimic:10,min:[1,3,6,7],min_:[0,1,3],min_samples_leaf:7,mind:[0,1,5],mine:12,mini:[2,5,9,10],minibatch:[2,5,9],minibathc:5,minim:[0,1,2,3,4,5,6,7,8,9,10,15],minima:[1,2,5],minimum:[1,2,4,5,6,7,9],minkowski:0,minmaxscal:1,minor:15,minst:2,minu:5,mirror:7,misclassif:[6,7,8],misclassifi:[6,8],mismatch:2,miss:[1,8],mit:17,mix:2,mkdir:[1,4,5,7],mlab:[4,15],mle:[3,5],mlp:2,mlpclassifi:2,mlpregressor:1,mnist:[2,9],mod:15,mode:[14,15],model:[0,3,4,5,6,7,8,9,12,15,17],model_select:[1,2,3,4,5,7,8,9],moder:8,modern:[1,4,5,12],modif:10,modifi:[1,2,3,5,6,8,10],modul:[1,4,5,7,8,9,13],modular:15,modulenotfounderror:[5,7],modulo:15,moe:[3,9],moment:[3,4],monoton:[3,10,15],mont:[1,4,12,15,17],montecarlocycl:15,moor:3,more:[1,2,3,4,6,7,8,9,10,12,14,15],moreov:1,morten:16,mosek:3,most:[0,1,2,3,4,5,6,7,8,9,10,12,15],mostli:[2,9],motion:1,motiv:2,move:[0,1,3,5,7,10,15],mpl:[1,5],mpl_toolkit:5,mplot3d:5,mplregressor:2,mse:[1,3,4,7,8],mse_simpletre:8,mselassopredict:3,mselassotrain:3,msepredict:3,mseridgepredict:3,msetrain:3,msg:1,msle:1,mt19937_64:15,mu0:15,mu1:15,mu2:15,mu_:15,mu_n:9,mu_x:15,much:[1,2,3,4,5,6,7,8,9,10,13,15],mul:3,multi:[1,2,5,12],multiclass:[2,5],multidimension:[9,10],multilay:2,multinomi:5,multipl:[3,4,5,10,15],multipli:[3,5,9,13,15],multiplum:6,multitud:[],multivari:[1,8,9,12,15],multivariate_norm:[0,9],murphi:[9,17],must:[0,2,3,4,5,6,8,10,15],mutat:5,mutual:[2,4,5],mx_:15,myriad:[1,12],mz1:15,mz2:15,n_0:[10,15],n_b:15,n_boostrap:[4,8],n_bootstrap:4,n_categori:2,n_cluster:0,n_compon:9,n_epoch:5,n_estim:8,n_featur:2,n_hidden_neuron:[1,2],n_i:15,n_input:[1,2],n_instanc:7,n_iter_i:[5,9],n_job:8,n_k:0,n_l:[10,15],n_layer:2,n_m:7,n_neuron:2,n_neurons_layer1:2,n_neurons_layer2:2,n_point:0,n_sampl:[0,4,6,7,8],n_split:4,nabla:[2,5],nabla_:5,naimi:1,naiv:[0,5],nall:1,name:[0,1,2,3,4,5,6,7,8,10,12,13,16],nameerror:8,namespac:15,nation:[2,3],nativ:12,natur:[1,2,5,6,7,10,15,17],navier:10,nb_:13,nbconvert:[],nboot:15,nearest:[2,9],nearli:5,neat:[],neccesari:4,necessari:[0,1,2,6],necessarili:[1,9,15],necesserali:3,neck:5,need:[0,1,2,3,4,5,6,7,8,9,10,13,15],neg:[1,2,3,4,5,8,15],neg_mean_squared_error:4,neglect:15,neglig:15,neighbor:9,neq:[0,5,15],nervou:10,nest:[7,10],net:10,netlib:13,network:[1,7,12,14,17],neural:[1,5,12,14,17],neural_network:[1,2],neuralnetwork:2,neuron:[2,10],neutral:1,neutron:1,never:[2,4,7,15],new_hobbit:[],new_sig:4,newaxi:[1,4,7],newli:1,newton:[2,6,15],next:[0,1,2,3,5,6,7,15],next_guess:5,nian:16,nice:[0,1,2,3,9],nichola:16,nicholaskarlsen1102:16,niter:5,nitric:1,nlambda:[3,4],nm_n:1,nmse:4,nn_model:2,node:[2,7,8,10],nois:[1,3,4,5,6,7,8],noisi:[2,4],non:[0,1,2,3,4,5,7,8,9,10,13,15],none:[0,1,2,3,4,5,7,8,15],nonetheless:0,nonlinear:[4,6,7,9,10],nonneg:[4,5,7],nonparametr:4,nonsens:15,nonsingular:13,nonumb:[5,6,13],nor:2,norm:[1,2,3,4,5,6,9],normal:[3,4,5,6,7,8,9,10,12,13],normali:13,normpdf:4,notat:[0,1,3,4,15],note:[0,1,2,3,4,5,6,9,10,12,13,14,15,17],notebook:[0,1,2,7,12],noth:[0,2,3,6,10,15],notic:[3,10,13,15],novel:[4,8],novemb:2,now:[0,1,3,4,5,6,8,9,10,13,15],nowadai:[1,2,7,12],nox:1,np_assign_points_to_clust:0,np_get_distances_to_clust:0,np_k_mean:0,nsampl:4,nspin:15,nthi:1,nuclear:3,nuclei:[1,15],nucleon:1,nucleu:1,num_tre:8,number:[0,2,3,4,5,6,7,8,9,10,13,14,16],numberid:5,numer:[1,3,4,5,7,8,9,10,12,13,17],numpi:[0,1,2,3,4,5,6,7,8,9,10,12,15],nunmpi:3,obei:[5,9],object:[1,2,3,4,6,8,13],objsens:3,obliqu:3,observ:[0,2,3,4,5,6,7,8,9,10],obtain:[0,1,2,3,4,5,6,7,8,10,13,15],obviou:[3,9,15],obviouli:1,obvious:[1,3,13],occupi:1,occur:[1,6,7,15],odd:[1,5],off:[2,3,4,7,15],offend:[],offer:[4,9,12,13,14],offic:16,offici:14,ofil:15,ofstream:15,often:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],ofter:13,old:[2,3,5,8],olsbeta:3,omit:[1,3],onc:[0,2,4,7,9,15],one:[0,1,2,3,4,6,7,8,9,12,13,15],onehot:2,onehot_vector:2,onehotencod:7,ones:[1,3,5,6,7,8,9,13],onli:[0,1,2,3,4,5,6,7,8,9,10,13,15],onlin:[9,14],onto:[3,9],open:[1,2,4,5,7,12,14,15],oper:[1,2,3,4,8,9,10,12,13,15],operation:15,opinion:0,oplu:15,opmiz:5,opportun:1,opposit:[2,3,6],opt:[1,2,3,4,5,6,9],optim:[0,1,3,4,7,8,9,14],optimis:2,option:[1,2,3,5,6,9],optmiz:[2,6],orang:1,order:[1,2,3,4,5,6,7,8,9,10,13,15],ordinari:[1,4,5,9,12,14],oreilli:17,org:[5,9,12,13,17],organ:[0,4,5,8,13],orient:[2,3,4,15],origin:[1,3,4,6,9,10,13,15],orthogn:3,orthogon:[1,3,5,6,9,13],orthonorm:3,oscar:2,oslo:[1,14,16],osx:[1,12],other:[0,1,2,3,4,5,6,8,12,13,14,17],otherwis:[1,2,5],ouput:[3,5,10],our:[2,4,6,7,8,10,12,13],ourmodel:1,ourselv:[0,1,3,5,6,9],out:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],out_fil:7,outcom:[1,5,7,8,10,15],outdoor:7,outer:10,outfilenam:15,outlier:[1,6],outlin:[4,8,9],outlook:7,outperform:8,output:[1,2,3,5,6,7,8,10,13],output_bia:2,output_bias_gradi:2,output_weight:2,output_weights_gradi:2,outputlayer1:10,outputlayer2:10,over:[0,1,2,3,4,5,7,8,10,15],overal:[2,8],overcast:7,overcom:10,overdetermin:1,overfit:[2,4,7,8],overflow:[2,3],overhead:10,overlap:[5,6,7],overlin:[0,1,3,4,7,8,9,13],overst:1,overview:[0,17],own:[3,5,6,10,12,13],owner:1,oxid:1,oyvinssc:16,p_i:[3,15],p_j:15,p_n:15,p_x:15,pack:1,packag:[1,2,3,4,5,6,9,12,15],page:[1,12],pai:[2,7],painless:[],pair:[1,7,12,15],panda:[1,3,4,5,7,9,12],panel:[],paper:2,paradigm:1,parallel:[8,13],paramet:[1,2,3,4,5,6,7,8,10,15],parameter:[1,8],parametr:[1,4],paramt:3,park:15,part:[0,1,2,3,4,8,13,14,15,17],partial:[1,2,3,5,6,8,9,10,15],particip:[12,14],particl:[1,15],particular:[1,2,3,4,5,7,8,9,10,15,17],particularli:[3,4,5,6,9,15],partit:[2,7],pass:[0,10,15],past:[8,15],patch:[4,15],path:[1,4,5,7,12],patient:5,pattern:[1,10,14,17],pauli:1,pca:[1,5,12,14],pcost:3,pdf:[1,3,4,7,17],pedagog:1,penalti:[4,5],penros:3,pentagon:5,peopl:[1,2,7,12],per:[1,2,4,14],percentag:[1,8,9],perceptron:[1,2,5],peregrin:[],perfect:[1,2],perfectli:4,perform:[0,1,3,4,5,6,8,9,10,12,13,15],perhap:[1,3,5],perimet:2,period:2,permut:9,person:[3,5,14,16],perspect:17,pertin:10,petal:[6,7],peter:17,petersen:15,phantom:15,phase:10,phatak:0,phenomena:15,phi:6,phi_k:6,philip:16,philosophi:5,phone:16,phrase:1,physic:[1,2,5,10,15,16,17],pick:[0,2,5,7,8,9,15],pickl:2,pictur:1,pie:12,piec:[0,9],pillow:[1,12],pinv:3,pip3:[1,2],pip:[1,2,12],pipelin:[1,4,6,8],pippin:[],pise:0,pitt:10,pixel:2,pixel_height:2,pixel_width:2,place:[1,4,5,6,13],plai:[1,3,4,6,9,12],plain:[5,6,8,10],plan:[4,7,16,17],plane:[6,7],plateau:[3,15],platform:12,plausibl:10,pleas:[1,5,9],plenti:2,plethora:10,plot:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],plot_confusion_matrix:[5,8],plot_cumulative_gain:[5,8],plot_data:2,plot_dataset:6,plot_decision_boundari:[7,8],plot_import:8,plot_predict:6,plot_regression_predict:7,plot_roc:[5,8],plot_surfac:5,plot_train:7,plot_tre:[7,8],plt:[0,1,2,3,4,5,6,7,8,9,10,13,15],plu:[1,3,5],png:[1,4,5,7],point:[0,1,2,3,4,5,6,7,8,9,13,15,16],points_in_clust:0,poisson:12,poli:[4,6],poly100_kernel_svm_clf:6,poly3:1,poly3_plot:1,poly_featur:[6,7],poly_features10:7,poly_fit10:7,poly_fit:7,poly_kernel_svm_clf:6,polydegre:[1,3,4,8],polygon:5,polym:10,polynomi:[1,3,4,5,6,7,8,9],polynomial_featur:4,polynomial_svm_clf:6,polynomialfeatur:[1,4,6,7],polytrop:[1,4],poor:[2,5],poorli:1,popul:[1,3],popular:[1,2,4,5,6,7,9,10,12,13,15],popularli:1,portabl:8,portion:9,pose:[1,9,15],posit:[0,1,2,3,5,6,8,9,13,15],possibl:[1,2,3,4,5,6,7,8,9,10,12,13,15,16],posterior:3,postpon:1,postul:3,potenti:[1,3,10],potr:3,potrf:3,pott:10,power:[1,2,3,4,6,7,10],practic:[1,3,4,5,6,15],practition:[1,2],pre:3,preced:[2,9,10,15],preceq:6,precis:[1,3,9,13,15],pred:4,predict:[1,2,3,4,5,6,7,8,12,17],predict_prob:2,predict_proba:[5,8],predictor:[1,3,5,7,8,9],prefer:[1,2,6,7,9,12],prepar:1,preprocess:[1,4,5,6,7,8,9],prerequisit:1,present:[1,3,7,10,15],preserv:9,press:[5,17],pretrain:2,pretti:[1,6,7,12],prev_centroid:0,prevent:15,previou:[1,2,3,5,6,8,9,10,13,15],previous:[0,7,8,15],price:[1,7],primal:6,primari:[1,5],primarili:0,prime:15,princip:[1,3,5,12,14],principl:[0,1,4,5,6],print:[0,1,2,3,4,5,6,7,8,9,13,15],print_funct:[6,7],printout:1,prior:[1,3,4],privat:1,prob:[2,15],probabilist:[1,17],probabl:[1,2,4,5,8,12],problem:[1,3,4,6,7,8,9,10,12,13,14,15],proce:[1,3,5,6,7,8,9,13],procedur:[3,4,5,6,8,9],proceed:13,process:[0,1,4,5,7,8,10,12,13,15,17],prod:17,prod_:[2,3,5],produc:[0,1,3,7,8,9,10,12,13,15],product:[1,2,3,4,5,6,10,12,13],profess:1,profil:0,program:[0,1,2,3,6,10,12,13,14,15],programm:13,progress:[0,2],progression_plot:0,prohibit:4,project:[1,2,3,5,9,12,14,15,16],project_root_dir:[1,4,5,7],promin:10,promis:6,prone:7,pronounc:12,proof:[1,5,9,10],prop:4,proper:[1,4],properli:[0,2,6,8],properti:[1,2,4,5,10,13],proport:[1,2,3,7,9,15],propos:[2,8],propto:[3,5],proton:1,prove:5,provid:[1,2,3,4,5,6,7,8,10,12,13,15,17],proxi:2,prun:0,prune:7,pseudoinv:3,pseudoinvers:3,pseudorandom:15,psycholog:1,ptratio:1,punish:[1,2],pure:[7,15],purest:7,puriti:7,purpos:[0,1,8,10],put:2,putarow:3,putboundslic:3,putclist:3,putobjsens:3,putqobj:3,pycod:[],pydata:12,pydot:7,pyhton2:[],pylab:[1,5],pypi:12,pyplot:[0,1,2,3,4,5,6,7,8,9,10,13,15],pythagora:[0,3],python2:1,python3:[1,2,4,5,6,9,12],python:[2,3,6,9,10,14],pytorch:[1,12],qquad:[9,13],quad:[2,5,13],quadrat:[1,3,5,6,7],qualit:[7,15],qualiti:[1,7,12],quantifi:2,quantil:8,quantit:[1,4,7],quantiti:[0,1,3,4,5,7,8,9,10,13,15],quantum:10,quartil:1,queri:7,question:[1,3,4,5,7,9,10],quick:15,quickli:[2,5,7,9],quirk:0,quit:[2,3,4,7,8,10],quot:15,r2_score:1,r2score:1,r_1:7,r_2:7,r_j:7,r_m:7,rad:1,radial:[1,6,10],radioact:15,radiu:[1,2],rain:7,rais:4,ramp:2,ran1:15,ran2:15,ran3:15,rand:[1,3,4,5,7,8,13,15],rand_max:15,randint:[4,5,7],randn:[1,2,3,4,5,7,9],random:[0,1,2,3,4,5,6,7,12,13,14],random_devic:15,random_forest_model:8,random_index:5,random_indic:2,random_st:[1,5,6,7,8,9],randomforestclassifi:8,randomli:[0,2,4,5,7,15],randomnumbergener:15,rang:[0,1,2,3,4,5,7,8,9,10,13,15],rangl:[1,9,15],rangle_x:15,rank:3,raphson:[2,6],rapidli:1,rare:2,rate:[1,2,5,6,7,8,10],rather:[1,2,3,4,5,6,7,8,9,10,13,15],ratio:[5,7,8,9],rational:1,ravel:[3,4,5,6,7,8,9],raw:15,rbf:[6,9,10],rbf_kernel_svm_clf:6,rbf_pca:9,rcond:1,rcparam:[1,2,5,6,7,8,15],reach:[0,1,2,3,4,5,7,8,9,10,15],read:[0,1,3,4,5,6,9,10,13,14,15,17],read_csv:[1,4,5,7],read_fwf:1,readabl:0,reader:[1,13,15],readi:[0,1,2,3,6,8,9,10,13],readili:2,real:[1,2,4,5,8,9,10,13],realist:6,realiti:15,realiz:[2,10],realli:2,reason:[0,1,2,5,8,17],reassign:2,recal:[3,4,5,7,8,9,10,13,15],recalcul:15,receiv:[2,8,10,15],recent:[1,4,5,7,8],recept:10,recip:[1,5,13],reciproc:3,recogn:[1,3,8],recognit:[1,2,10,14,17],recommend:[1,6,12,13,14,15,17],reconsid:7,reconstruct:9,record:[8,14],recreat:15,rectangl:[4,5,7],rectangular:3,rectifi:[2,10],recur:[1,12],recurr:[2,12,14],recurs:[7,12,13],recycl:15,red:[1,4,6,7],redefin:[1,8],reduc:[2,3,5,7,8,9],reduct:[1,8,9,12,15],refer:[0,1,2,3,4,5,9,10,13,17],refin:10,refit:4,reflect:[1,2,15],refresh:[12,14],reg:[8,9],regard:[2,5,7],regardless:10,region:[7,10],regist:15,reglasso:3,regr_1:[1,7],regr_2:[1,7],regr_3:[1,7],regress:[2,4,6,9,10,12,14],regressor:[1,5,8],regridg:3,regular:[1,3,5,7],reilli:[1,17],reinforc:[1,6,12],reiter:2,rel:[1,4,5,7,10,15],relat:[0,1,2,3,5,9,13,15],relationship:[1,7],relativeerror:1,releas:[2,12],relev:[1,2,3,5,9,12,15],reli:[1,6],reliabl:[5,15],remain:[2,4,10,13,15],remaind:15,remark:2,rememb:[1,6,13],remind:[1,3,9,13,15],remov:[1,3],render:1,reorder:[3,5],reorgan:1,repeat:[0,1,2,3,4,5,7,8,9,13,15],repeated:1,repeatedli:[4,8,15],repetit:[4,14],rephras:5,replac:[0,1,2,3,4,5,8,10],replica:4,repositori:1,repres:[1,2,3,4,5,6,7,8,10,15],represent:[1,2,4,15],reproduc:[1,3,7,10,12,15],repuls:1,request:1,requir:[1,2,3,4,5,6,7,9,10,13],resampl:[1,5,8,12,14,15],rescal:[1,9,10],rescu:3,research:[1,12,17],resembl:[4,15],reserv:[2,3,4,15],reset:15,reshap:[0,1,2,4,6,7,8],residenti:1,residu:[1,3,5],resiz:3,respect:[0,1,2,3,4,5,6,8,9,10,15],respond:10,respons:[1,5,7,10],rest:[1,3],restat:[1,10],restrict:[1,7,10],result:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],ret:4,retail:1,retain:[3,4],return_data:0,return_x_i:7,reus:2,reveal:[1,10],revers:2,review:[12,13],revisit:0,reward:1,rewrit:[1,3,4,5,6,8,9,10,13,15],rewritten:[4,6,8,15],rewrot:5,rgoj5yh7evk:12,rho:[1,8],rho_1:8,rho_2:8,rho_m:8,rhs:3,rich:1,rid:0,ride:7,rideclass:7,ridedata:7,ridg:[1,4,9,12,14],ridgebeta:3,right:[1,2,3,4,5,6,7,8,10,13,15],rightarrow:[1,2,3,5,6,9,10,15],rigor:1,rise:1,risk:[1,5],river:1,rmse:1,rmsprop:2,rnd_clf:8,rnn:10,rntrick1:15,rntrick2:15,rntrick3:15,rntrick4:15,robert:17,robust:1,robustscal:1,roc:8,role:[1,3,4,6,12],room:[1,16],root:[1,3,5,7,15],rot:[],rotat:[2,6,7,8],rotation_matrix:7,roughli:2,round:[1,5,7],routin:[5,13],row:[1,2,3,4,5,7,9,13],rrr:3,rthe:3,rug:5,rule:[1,2,3],run:[0,1,2,3,4,5,6,7,9,12],runtim:[0,2,4],runtimewarn:2,rust:[1,12,13],rvert:2,rvert_2:2,rwidth:4,s_i:5,saddl:5,safe:15,sai:[0,1,2,3,4,5,6,7,8,9,10,13,15],said:[4,5,7],sake:[1,3,5,9],sale:1,sam:[],same:[0,1,2,3,4,5,6,7,9,10,13,15],samm:8,sampl:[0,1,2,3,4,5,6,7,8,12,13],sample_vari:0,sampleexptvari:15,samwis:[],sanitize_sequ:4,sastri:9,satisfactori:1,satisfi:[2,4,5,6,13,15],satur:[2,4],save:[1,4,5,7],save_fig:[1,4,5,7,8],savefig:[1,4,5,7,15],saw:3,scalabl:8,scalar:[3,4,8],scale:[1,2,3,5,6,7,8,9,10,12,16],scaler:[1,5,6,7,8,9],scan:[3,5],scari:3,scatter:[0,1,2,4,5,6,7],scenario:5,scheme:[2,5],schrage:15,scienc:[1,2,5,8,10,12,14,15,17],scientif:[1,12],scientist:[0,1],scikit:[3,6,7,8,12,13,14,17],scikitlearn:1,scikitplot:[5,8],scipi:[1,3,5,12,13],score:[1,2,4,5,7,8,9,16],scores_kfold:4,scratch:2,sdg:5,seaborn:[1,2,5],seamless:[1,12],search:[1,2,3,5,7],sec:4,second:[0,1,3,4,5,6,7,9,10,12,13,15],secondeigvector:9,secondli:10,section:[0,9,11,13,14,15],sector:1,see:[0,1,2,3,4,5,6,8,9,10,12,13,14,15],seed:[0,1,2,3,4,5,6,7,9,15],seek:[2,6],seem:2,seemingli:1,seen:[1,2,3,8,10,15],segment:5,seldomli:1,select:[2,3,4,6,7,8,9,14,17],self:[2,3,4,15,17],semest:[5,14],semi:[5,6],send:[3,10,16],senior:14,sens:[1,4,6],sensit:[1,3,4,7],sentenc:10,separ:[0,1,2,4,6,7,10,12,15],sequenc:[0,5,7,8,10,12,13,15],sequenti:[2,8,10,15],seri:[1,2,3,5,8,9,10,13,14],serif:[1,5,15],serv:[1,2,3,5,17],session:[2,14],set:[0,2,3,4,5,6,8,9,12,13,15],set_:4,set_label:4,set_stream:3,set_tick:[2,6],set_ticklabel:2,set_titl:[0,1,2,5,10],set_xlabel:[1,2,5,10],set_xlim:[5,10],set_xticklabel:2,set_ylabel:[1,2,5],set_ylim:[5,10],set_ytick:5,set_yticklabel:2,setiosflag:15,setminu:4,setosa:[6,7],setosa_or_versicolor:6,setp:4,setprecis:15,setse:3,setup:[2,3,6,12],setw:15,sever:[1,3,4,5,6,7,9,10,12,13,14,15],sgd:2,sgd_clf:6,sgdclassifi:6,sgdreg:5,sgdregressor:5,sgn:3,shape:[0,1,2,3,4,5,6,7,8,9,13],share:2,she:5,shift:[2,10,15],shire:[],shortcom:5,shorter:15,shorthand:[],shortli:13,should:[0,1,3,4,6,7,9,10,13],show:[0,1,2,3,4,5,6,7,8,9,10,13,15],shown:[1,3,5,6,9,10,15],showpoint:15,shrink:[3,6,9],shrinkag:3,shrunk:9,shuffl:[1,2,4],side:[1,3,5,6,10,13],sigh:12,sigma0:15,sigma1:15,sigma2:15,sigma:[1,2,3,4,5,8,9,10,13,15],sigma_0:3,sigma_1:3,sigma_2:3,sigma_:[3,13,15],sigma_fn:[5,10],sigma_i:[1,3],sigma_j:3,sigma_m:15,sigma_n:[9,15],sigma_x:15,sigmoid:[2,5,6,8,10],sigmundson:16,sign:[2,5,6,8,15],signal:[2,8,10],signific:2,significantli:[2,5,15],sim:[3,4,15],similar:[0,1,2,3,4,5,6,7,8,9,12,13],similarli:[1,2,3,6,8,15],simpl:[0,2,3,4,6,8,9,10,12,13],simplepredict:8,simpler:[0,1,2,3,12],simplest:[0,1,2,7,8,10],simpletre:8,simpli:[1,2,3,4,6,7,8,9,10,12,13,15],simplic:[0,3,5,6,7,8,9,10],simplicti:3,simplifi:[1,4,7,12],simplist:15,simul:[4,15],simultan:4,sin:[1,2,7,10,13],sinc:[1,2,3,4,5,6,7,8,9,13,15,17],sine:10,singl:[2,3,5,6,7,10,13,15],singular:[1,4,5,13],site:[1,2,4,5,6,9,14],situat:[1,3,5],six:15,size:[1,2,3,4,5,6,7,8,9,13,15],sketch:8,ski:7,skill:1,skip:9,skl:1,sklearn:[1,2,3,4,5,6,7,8,9],skplt:[5,8],slack:6,slice:13,slide:[1,15],slight:4,slightli:[2,3,4,8,15],slope:[6,9,10],slow:[1,5,6],slower:[3,13],slowli:10,slp:2,small:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],smaller:[1,2,3,4,5,6,7,9,15],smallest:[0,1],smallest_row_index:0,smart:4,smooth:[1,5],sne:9,sneak:1,sns:[1,2,5],soar:4,social:1,soft:[2,5,8,10],soften:6,softmax:5,softwar:[1,6,12,13,14],sol:6,sole:1,solid:[1,5],solitem:3,soltyp:3,solut:[1,2,3,4,5,6,8,9,13,15],solutionsummari:3,solv:[1,2,3,6,8,9,10,13],solver:[3,5,6,7,8,9,13],some:[0,1,2,3,4,6,7,8,9,10,13,15],someth:[1,2,5,7,9,15],sometim:[0,1,2,9,10],soon:13,sophist:1,sopt:5,sort:[3,4,7,9,15],sound:3,sourc:[0,1,2,4,12,13,15],space:[0,1,2,3,5,6,7,9,10,15],span:[1,3,7,9,13],spare:2,spars:[3,13],sparse_mtx:13,sparsiti:8,spatial:[2,10],spdiag:3,speak:15,special:[4,5,8,10,13,15],specif:[1,2,3,4,5,6,7,9,10,12,13,15],specifi:[0,1,3,4,5,7,9,15],specifici:[1,8],spectral:2,speech:[1,2,10],speed:2,spend:15,sphere:1,spite:1,spline:6,split:[0,2,3,4,6,7,8,9,15],splitter:[2,8],spmatrix:3,spontan:15,spread:[1,9,15],springer:17,sqquar:3,sqrt:[1,3,4,5,6,8,9,15],squar:[0,2,4,5,6,7,9,12,13,15],squarederror:8,squaredeuclidean:0,squash:10,srand:15,stabil:3,stabl:[1,3,5,7,9,12],stack:4,stage:[3,5],stai:[1,3,9],stand:[1,3,7,10],standard:[1,2,3,4,6,8,10,13],standardscal:[1,5,6,7,8,9],stanford:5,start:[0,1,2,3,4,5,6,7,8,9,10,13,15],start_tim:0,startpoint:15,stat:4,state:[0,2,3,5,6,8,9,10,12,15],statement:[1,5,13],statis:[],statist:[0,1,2,5,7,8,9,10,13,14,17],statu:[1,5,9],std:[1,4,15],stdev:15,stdout:3,steep:5,step:[0,1,2,7,8,9,10,13,15],step_fn:[5,10],step_length:5,steps_list:7,stian:16,still:[3,4,5,9,15],stimuli:10,stk2100:17,stk4021:17,stk4051:17,stk5000:17,stk:17,stochast:[1,2,3,4,6,9,10],stoke:10,stone:[1,5],stop:[0,2,7,9,15],storag:3,store:[1,2,5,9,15],str:2,straight:[1,4,5,6],straightforward:[1,3,4,5,6,7,8,13],strategi:[1,2,7],stratifi:4,streamtyp:3,strength:[0,1,3],stretch:9,strict:[5,6],strictli:[5,6],string:[2,15],stroke:5,strong:[7,8,10,15],strongli:[1,6,12,13],stronli:1,structur:[0,1,2,4,7,8,10,12],stuck:[2,5],student:[1,14,16,17],studi:[0,1,3,5,6,9,10,12,17],studier:17,style:[1,5,7],sub:[7,10],subdivid:[1,13],subfield:1,subject:[3,6,15],subplot:[0,1,2,4,5,6,7,8],subplots_adjust:[6,15],subprogram:13,subract:1,subroutin:1,subscript:2,subsequ:[2,3,4,10,13,15],subset:[2,4,5,7,10,12],subspac:[1,6,9],substanti:[7,8],substep:9,substitut:[4,10,13],subsubset:7,subtl:2,subtract:[1,3,4,9,13,15],subtre:7,succeed:1,success:[5,7,15],successfulli:7,sucess:15,sudo:[1,12],suffer:[1,2,3,8],suffici:[2,4,5,6,9],suggest:[2,5,17],suit:[6,10],suitabl:[1,15],sum:[0,1,2,3,4,5,6,7,8,9,10,15],sum_:[0,1,2,3,4,5,6,7,8,9,10,13,15],sum_i:[3,4,5,6],sum_k:[6,10,13],summar:[0,3,4,7],summari:[0,2,8,14],summat:[],sunni:7,superscript:[2,10],supervis:[1,3,4,5,7,10,12],supplement:5,support:[1,2,7,8,9,12],suppos:[1,3,4,5,6,8,9,10,13],suppress:3,sure:2,surfac:1,surpris:1,surround:12,survei:[1,3],svc:[6,7,8],svd:[1,4,9],svdinv:3,svm:[6,7,8,9],svm_clf:[6,8],swath:3,symbol:[2,3,9,12,15],symmeteri:2,symmetr:[1,3,5,6,9,10,13],sympi:[1,12],synonim:15,syntax:[2,13],syntaxerror:[2,6,13],syrk:3,sys:[3,5],system:[1,2,3,5,7,8,10,12,13,17],systemat:[4,15],t_0:[5,7],t_1:5,t_b:8,t_i:[2,10],t_j:[3,10],t_k:7,tabl:[7,15,16],tabul:1,tabular:[],tackl:0,tag:[0,3,5,10,13,15],taht:1,tail:15,tailor:[6,9],taiwan:1,take:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],taken:[1,2,4,8,13],tangent:[2,5,10],tanh:[2,5,6,10],target:[1,2,3,5,6,7,8,9,10],target_nam:7,task:[0,1,2,3,4,7,9,10],tau:[3,15],tax:1,taylor:5,taylornr:5,team:2,teaser:1,technic:[0,1,3],techniqu:[1,2,6,8,12,15,17],technolog:[1,2],tek5040:17,tell:[1,4,5,8,9,15],temp1:2,temp2:2,temp:2,temperatur:[1,7],temporarili:2,ten:[],tend:[0,3,4,6,7,8,10],tendenc:1,tension:4,tensorflow:[0,1,6,12,13,14,17],term1:[3,9],term2:[3,9],term3:[3,9],term4:[3,9],term:[0,1,2,3,4,5,6,7,8,9,10,15],termin:[1,3,7,8],test:[3,4,5,6,7,8,15],test_accuraci:2,test_data:0,test_ind:4,test_pr:2,test_predict:2,test_scor:[5,8],test_siz:[1,2,3,4,8],test_split:7,tester:[],testerror:[1,4],text:[1,2,3,5,6,7,9,13,15,17],textual:7,textur:2,than:[1,2,3,4,7,8,9,10,12,15],thats:0,theano:[2,12],thei:[0,1,2,3,4,5,6,7,9,10,13,15],them:[1,2,5,6,7,8,9,10,13],theme:1,themselv:[1,15],thenc:4,theorem:[4,5],theoret:[1,8],theori:[1,2,5,6,7,10,12,17],thereaft:[1,4,9,10,13],therebi:[1,3,5,9,15],therefor:[1,2,4,5,6,9,15],therein:9,thereof:[1,4,5],theta:[2,4,5,15],theta_:2,theta_i:2,theta_k:15,theta_linreg:5,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17],thing:[0,1,2,3,5,7,15],think:[0,1,2,4,5,7,10,15],third:[1,5],thirti:5,thorough:0,those:[0,3,6,7,8,9,13,14],though:[2,13,15],thought:[0,4,15],thousand:[1,2],three:[1,2,3,4,6,7,10,13,14,16],threshold:[2,5,7,8,9,10],through:[0,1,2,3,5,6,9,10,12,13,15],throughout:[0,1,3,12,13,15],thu:[1,2,3,4,5,6,8,9,10,15,16],thumb:1,thursdai:14,tibshirani:[14,17],ticker:[5,15],tight_layout:[2,5],tightli:9,tild:[1,3,4,9,15],till:[1,5,6,7,8,10,13],time:[0,1,2,3,4,5,6,7,8,9,10,13,14,15],timefunct:15,tini:2,tip:11,titl:[1,2,4,5,6,7,8,15],to_categor:2,to_categorical_numpi:2,to_numer:[1,4],to_str:15,togeth:[1,6,9],toi:0,toler:0,tomographi:10,too:[1,3,4,5,7,9,15,17],took:6,tool:[0,1,2,4,12,15],toolbox:6,top:[1,3,4,7,8,12],topic:[0,1,3,5,6,12,17],topolog:[2,10],toss:8,total:[0,1,2,4,5,6,8,9,10,15,16],totalclustervari:0,totalscatt:0,totalvari:15,toward:[2,5,10],town:1,tpng:7,traceback:[4,5,7,8],track:[0,5,13],tract:1,tractabl:1,trade:[3,4,7],tradeoff:[1,3,14],tradit:[1,2,4],train:[3,4,5,6,7,8,9,10],train_accuraci:[1,2],train_end:[1,2],train_ind:4,train_pr:2,train_siz:[1,2],train_test_split:[1,2,3,4,5,7,8,9],train_test_split_numpi:[1,2],trainerror:1,trainingerror:4,trait:1,tran:3,transfer:7,transform:[1,3,4,5,6,7,8,9,10,12,13],transit:10,translat:[2,8],transpos:[2,3,9],treat:[1,2,4,5,10,15],tree:[1,2,12,14],tree_clf:[7,8],tree_clf_:7,tree_clf_sr:7,tree_reg1:7,tree_reg2:7,tree_reg:7,trend:15,trevor:17,tri:7,triain:1,trial:[1,4,5,15],triangl:5,triangular:13,trick:[6,9,15],trickier:15,tridiagon:13,trillion:12,trivial:[1,2,3,9,15],troubl:[1,6,10],true_divid:2,true_fun:4,tucker:6,tumor:[5,7],tumour:5,tunabl:2,tune:[7,13],turn:[1,2,3,4,5,6,7,8,9,10,13,15],tutori:2,tweak:[2,8,15],twice:5,twist:9,twister:15,two:[0,1,2,3,4,5,7,8,9,10,13,14,15,17],tx_1:5,type:[1,2,4,5,6,8,13,15],typeerror:[],typic:[1,2,3,5,7,8,10,15],u_i:10,u_m:8,ubuntu:[1,12],uci:1,uio:[16,17],unari:13,unbalanc:[4,7],unbias:[1,3,4,15],uncertainti:[1,3],uncertitud:15,unchang:2,uncorrel:8,undefin:3,under:[1,2,3,4,5,8,12],underdetermin:1,underfit:[2,4],underflowproblem:3,undergo:3,undergradu:14,underli:[1,2,5,7,15],underset:0,understand:[0,1,2,3,5,8,12],understood:[0,6],undesir:6,undetermin:[3,6],unexpect:[4,15],unexpected:15,unfortun:[2,6,7,8],unicode_liter:[6,7],uniform:[1,2,3,5,9],uniform_real_distribut:15,uniformli:[5,15],unifrompdf:15,unimport:5,union:[3,4],uniqu:[0,1,4,5,13],unique_cluster_label:0,unit:[1,2,3,8,10,15],unitari:[3,13],unitarili:13,uniti:15,univari:15,univers:[1,2,5,14,16],unix:2,unknow:[1,13],unknown:[1,2,3,4,6,8,13],unknowwn:10,unlabel:2,unless:[1,4,5,9],unlik:[2,5,6,15],unnecessarili:7,unravel:2,unrol:9,unseen:[5,7],unstabl:2,unsupervis:[1,2,10,12,14],unsymmetr:13,until:[0,2,5,7,10,15],unusu:10,updat:[0,2,4,8,10],upload:[12,17],upon:[2,9,13],upper:[1,6,7,13],uppercas:[13,15],ups:[],usag:[1,6,12,15],usd10000:1,usd:1,use:[0,1,3,4,5,6,7,8,9,10,12,13,14],usecol:1,used:[0,1,2,3,4,6,7,8,9,10,12,13,15,17],useful:[1,2,3,4,5,7,9,10,12,13,15,17],useless:2,user:[1,2,5,6,9,12,13],uses:[1,2,3,4,7,9,10,13,15],usetex:15,using:[0,2,3,4,6,7,8,9,10,13],usr:15,usual:[0,1,5,10],util:[0,2,4,5,8],v_0:9,valid:[1,2,5,7,8,12,14,15],valu:[0,1,2,4,5,6,7,8,10,12,13],valuat:7,valueerror:[],van:1,vandenbergh:[5,6],vandermond:1,vanilla:[1,9],vanish:[2,5,15],var_x:15,varabl:6,varepsilon:[3,4],varepsilon_:[3,4],varepsilon_i:[3,4],vari:[1,2,4,8],variabl:[0,1,2,3,4,6,8,9,10,13],varianc:[0,1,2,3,5,7,8,9,12,13,14],variance_i:[3,9],variance_x:[3,9],variant:[1,2,4,5,6,10],variat:9,varieti:[1,10,12],variou:[2,3,5,6,7,9,10,12,13,15],vartempvec:15,varvec:15,vaue:2,vdot:5,vec:[4,15],vector:[0,1,2,3,4,5,7,8,9,12],vector_mean:0,ventur:[1,6,12],verbos:2,veri:[0,1,2,3,4,5,6,7,8,9,10,15,17],verifi:[9,13],versatil:6,versicolor:[6,7],version:[0,1,8,12,13,15],versu:2,vert:[1,2,3,5,6,7,9],vert_1:3,vert_2:[3,9],vertic:4,via:[1,3,4,5,6,7,8,9,10,12,13,14,15],vidal:9,video:[1,2,5,10,12,14],view:[2,3,10,15,17],violat:6,virginica:7,viridi:[1,2],virtual:2,vision:1,visual:[1,9,10,12],visualis:2,viz:[6,15],vmax:2,vmc:15,vmin:2,volum:1,vote:8,voting_clf:8,votingclassifi:8,votingsimpl:8,vstack:[3,9,13,15],w_1:[6,13],w_1x_1:6,w_1x_:6,w_2:[6,13],w_2x_2:6,w_2x_:6,w_3:13,w_4:13,w_i:[2,8],w_ix_i:10,w_j:13,w_m:13,w_px_:6,w_px_p:6,wai:[0,1,2,3,4,5,6,8,9,10,11,13,15],walk:7,walker:15,wang:1,want:[0,1,2,3,4,5,6,7,8,9,10,12,15],warn:[1,2,6],warrant:4,watch:12,wavelet:6,weak:[0,7,8],weather:[2,10],web:[12,14],websit:[13,14],wedg:[6,15],wednesdai:14,wee:9,week:[3,5],weekli:[12,17],weight:[1,2,4,5,7,8,10,15],welcom:[6,12],well:[1,2,3,4,5,6,7,8,10,12,13,15,17],went:6,were:[0,1,2,3,4,5,6,8,9,10,15],wessel:1,what:[0,2,3,4,5,6,7,8,9,10,12,13,14],when:[0,1,2,3,4,6,7,8,9,10,13,15],whenev:15,where:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16],wherea:[4,15],wherein:[2,10],whether:[1,3,5,7,15],which:[0,1,3,4,5,6,7,8,9,10,12,13,14,16],whichev:2,white:7,who:[1,14],whole:[0,2,3,7,9],whose:[1,4,8,15],whow:[3,9],why:[1,2,5],wide:[1,2,4,5,10,12,13],widehat:4,width:[1,6,7],wieringen:1,win:8,wind:7,wing:16,wiscons:5,wisconsin:8,wise:[1,2,3,10],wish:[0,1,3,5,6,9,13],with_std:1,within:[0,1,5,7,10,15,17],withinclust:0,without:[1,2,3,5,6,7,9,10],won:1,wonder:6,word:[0,1,2,3,15],work:[0,1,2,4,5,6,7,12,14,15],world:[1,6],worldwid:1,wors:[1,2,4],worth:7,would:[1,2,3,4,5,6,7,8,9,10,13,15],wrap:13,write:[1,2,3,5,6,10,11,13,14,15],written:[1,3,5,9,10,12,13,15],wrong:[2,6],wrongli:[8,15],wrote:[3,9],wrt:8,wth:8,www:[12,13,17],wx_1:6,x0s:6,x1_exampl:6,x1d:6,x1s:[6,7,8],x2d:[6,9],x2d_train:9,x2dsl:9,x2s:[6,7,8],x3s:6,x_0:[1,3,9,13],x_1:[1,3,4,5,6,7,8,9,13,15],x_2:[1,3,4,5,6,7,8,9,13,15],x_3:[6,13,15],x_4:13,x_center:9,x_data:2,x_data_ful:2,x_i:[0,1,2,3,4,5,6,7,8,9,10,13,15],x_ix_:1,x_iy_i:6,x_j:[1,6,7,10,15],x_jy_j:6,x_k:[0,10,13,15],x_l:15,x_m:[10,13,15],x_n:[1,4,5,6,9,10,13,15],x_new:[7,8],x_p:[5,7],x_poli:7,x_poly10:7,x_reduc:9,x_scale:6,x_test:[1,2,3,4,5,7,8,9],x_test_scal:[1,5,7,8,9],x_train:[1,2,3,4,5,7,8,9],x_train_scal:[1,5,7,8,9],x_val:2,xarrai:12,xavier:2,xbnew:5,xcode:[1,12],xdclassiffierconfus:8,xdclassiffierroc:8,xg_clf:8,xgb:8,xgbclassifi:8,xgboost:7,xgboot:8,xgbregressor:8,xgparam:8,xgtree:8,xi_1:6,xi_:6,xi_i:6,xlabel:[1,2,3,4,5,6,7,8,15],xlim:[4,8],xmesh:5,xnew:[1,5],xpanda:1,xpd:[3,9],xplot:1,xscale:1,xsr:7,xt_x:5,xtest:4,xtick:[4,6,7],xtrain:4,xytext:6,y_0:[1,3,9,13],y_1:[1,3,5,6,7,9,13],y_1y_1:6,y_1y_1k:6,y_1y_2:6,y_1y_2k:6,y_1y_n:6,y_1y_nk:6,y_2:[1,3,6,7,9,13],y_2y_1:6,y_2y_1k:6,y_2y_2:6,y_2y_2k:6,y_3:[1,7,13],y_4:13,y_data:[1,2,3],y_data_ful:2,y_decis:6,y_fit:1,y_i:[1,2,3,4,5,6,7,8,9,10,13],y_if_:8,y_ix_:1,y_ix_i:[5,6],y_iy_jk:6,y_j:[4,6,10],y_k:10,y_m:13,y_model:[1,3],y_n:[5,6],y_ny_1:6,y_ny_1k:6,y_ny_2:6,y_ny_2k:6,y_ny_n:6,y_ny_nk:6,y_plot:7,y_pred1:7,y_pred2:7,y_pred:[1,2,4,5,6,7,8],y_pred_rf:8,y_pred_tre:8,y_proba:[5,8],y_test:[1,2,3,4,5,7,8,9],y_test_onehot:2,y_test_predict:1,y_train:[1,2,3,4,5,7,8,9],y_train_onehot:2,y_train_predict:1,y_val:2,year:[1,12],yes:[4,5],yet:[1,2,4,6,9],yield:[0,1,3,4,5,6,8,10,13,15],ylabel:[1,2,3,4,5,6,7,8,15],ylim:4,ymesh:5,yoshua:[2,17],you:[0,1,2,3,4,5,6,7,8,9,12,13,15,17],young:1,your:[0,2,4,5,6,9,12,13,15],yourself:[5,9],youtub:12,ypred:4,ypredict2:5,ypredict:[1,5],ypredictlasso:3,ypredictol:3,ypredictridg:3,yridg:1,ytest:4,ytick:[4,6,7],ytild:[1,4],ytildelasso:3,ytildenp:1,ytildeol:3,ytilderidg:3,ytrain:4,z_0:13,z_1:13,z_2:13,z_c:2,z_h:2,z_i:[2,10],z_j:[2,10],z_k:10,z_m:2,z_mod:7,z_o:2,zaman:15,zero:[0,1,2,3,4,5,6,7,8,9,10,13,15],zm_h:1,zone:1},titles:["11. Clustering Analysis","3. Linear Regression","13. Building a Feed Forward Neural Network","4. Ridge and Lasso Regression","5. Resampling Methods","6. Logistic Regression","7. Support Vector Machines, overarching aims","8. Decision trees, overarching aims","9. Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods","10. Basic ideas of the Principal Component Analysis (PCA)","12. Neural networks","Content in Jupyter Book","Applied Data Analysis and Machine Learning, FYS-STK3155/4155 at the University of Oslo, Norway","2. Linear Algebra, Handling of Arrays and more Python Features","Teaching schedule with links to material","1. Elements of Probability Theory and Statistical Data Analysis","Teachers and Grading","Textbooks"],titleterms:{"2021":16,"4155":12,"case":[5,6,8,15],"final":[5,10],"function":[1,2,5,6,8,9,10,15],"import":[3,13,15],And:5,Eye:8,FYS:12,OLS:3,The:[0,1,2,3,4,5,6,7,9,10,12,15],Useful:12,Using:5,activ:[2,10],actual:15,adaboost:8,adapt:8,adjust:2,again:7,aim:[6,7],algebra:13,algorithm:[0,7,8,9,10],algortithm:5,all:6,analys:3,analysi:[0,1,3,9,12,15],ani:5,anoth:7,appli:12,approach:[1,5,6],approxim:10,architectur:2,arrai:13,assist:16,august:14,autocorrel:15,back:[2,9,10],background:12,bag:8,basic:[0,1,3,5,7,8,9,13],batch:2,bay:3,befor:9,better:[6,15],bia:4,binari:2,binomi:15,bird:8,block:15,book:11,boost:8,bootstrap:[4,8,15],boston:1,breast:2,brief:5,bring:10,build:[2,7],calcul:15,cancer:[2,5,7,9],cart:7,central:[5,12,15],chain:10,chang:8,chi:1,choos:2,classic:9,classif:[2,7,8],classifi:6,clip:2,cluster:0,code:[0,1,2,3,5,7,9,10,15],collect:2,compar:8,complex:1,compon:9,comput:[5,7,15],con:7,concept:15,condit:5,conjug:5,content:11,continu:15,convex:[5,6],convolut:10,correl:[9,15],correspond:5,cost:[2,5,8],cours:[12,17],covari:[3,9,15],cross:4,cumul:15,cython:[],data:[1,2,5,7,9,12,15],dataset:2,decemb:14,decis:[7,8],decomposit:[3,9,13],deep:2,defin:2,definit:15,degre:1,demonstr:15,dens:1,deriv:[3,5,10],descent:[5,8],develop:2,deviat:15,diagon:9,dice:15,differ:[5,6],dimension:6,disadvantag:7,discret:15,disguis:15,distribut:[3,15],doing:2,domain:15,down:2,dropout:2,economi:[],element:[1,15],elimin:13,ensembl:8,entropi:7,environ:1,equat:[1,5,10],error:[1,8],etc:[],evalu:2,event:15,exampl:[1,2,5,6,7,8,15],exercis:1,expect:15,experi:15,explor:1,exponenti:15,express:5,extend:5,extrem:8,fall:16,famili:2,famou:15,fantast:[],featur:[7,13],feed:[2,10],fine:2,first:[5,10],fit:[1,8],forest:8,forward:[2,10],frank:[],freedom:1,frequentist:1,fridai:5,from:[3,8,10],further:3,gaussian:[13,15],gener:[7,15],geometr:[5,9],gini:7,good:1,grade:16,gradient:[2,5,8],handl:13,has:12,hessian:5,homework:5,hous:1,how:15,hyperparamet:2,hyperplan:6,id3:7,idea:[0,9],ideal:5,implement:[2,15],implic:3,improv:2,increment:9,index:7,inform:16,instal:12,instructor:16,interpret:[3,5,9],introduc:9,introduct:[1,4,12,13],invers:[3,13],iter:[5,8],its:15,jackknif:15,julia:[],jungl:8,jupyt:11,kera:2,kernel:[6,9],lagrangian:6,lasso:3,later:3,layer:[2,10],learn:[1,2,5,9,12],least:3,level:8,librari:12,likelihood:5,limit:[2,5,15],linear:[1,6,13],link:[3,9,14,17],logist:5,loss:5,machin:[1,5,6,12],main:15,make:[1,7,8],mani:[8,10],materi:14,math:3,mathemat:[3,6],matric:3,matrix:[2,3,5,9,10,13,15],matter:1,mean:[0,1,15],meet:[3,8,15],mercer:6,mersenn:15,method:[4,5,7,8,15],mlp:10,model:[1,2,10],moment:15,moon:[6,7],more:[0,5,13],multilay:10,multipl:2,multipli:6,name:15,need:[],network:[2,5,10],neural:[2,10],newton:5,non:6,normal:[1,2,15],norwai:12,notat:10,novemb:14,now:[2,7],nuclear:1,nueral:5,numba:[],number:[1,15],numer:15,numpi:13,numpython:0,observ:15,obtain:9,octob:14,one:[5,10],optim:[2,5,6,12],ordinari:3,organ:1,oslo:[12,17],other:[7,9,10,15],our:[0,1,3,5,9,15],outcom:12,output:15,overarch:[1,6,7],overview:8,own:[0,1,8,9],packag:13,panda:[],part:[5,12],pass:2,pca:9,pdf:15,perceptron:10,perform:[2,7],period:15,perspect:2,poisson:15,pre:2,preprocess:[],prerequisit:12,princip:9,pro:7,probabl:[3,15],problem:[2,5],procedur:7,process:2,program:5,propag:[2,10],properti:[3,15],pseudo:15,python:[0,1,7,12,13,15],quick:6,ran0:15,random:[8,9,15],raphson:5,read:7,recip:15,recurr:10,reduc:1,regress:[1,3,5,7,8],regular:2,relev:17,relu:2,remind:[4,5,6],requir:12,resampl:4,revisit:5,ridg:[3,5],rng:15,rule:10,sampl:[9,15],schedul:14,schemat:7,scikit:[1,2,5,9],select:15,semest:16,sensit:5,septemb:[5,14],set:[1,7,10],sgd:5,should:[2,15],simpl:[1,5,7,15],singl:8,singular:[3,9],situat:15,size:[],slightli:5,soft:6,softmax:2,softwar:[],solv:5,some:5,split:1,squar:[1,3,8],standard:[5,15],state:1,statist:[3,4,12,15],steepest:[5,8],step:[4,5],stk3155:12,stochast:[5,15],stop:5,supervis:2,support:6,svd:3,teach:[14,16],teacher:16,techniqu:9,technolog:12,tensorflow:2,test:[1,2],textbook:17,than:5,theorem:[3,6,9,10,15],theori:15,three:15,togeth:10,top:2,toss:15,toward:[0,9],tradeoff:4,train:[1,2],tree:[7,8],tune:2,two:[6,12],type:10,uncorrel:15,understand:[],uniform:15,univers:[10,12,17],use:[2,15],used:5,using:[1,5,15],valid:4,valu:[3,9,15],variabl:[5,15],varianc:[4,15],variou:[1,4],vector:[6,10,13],view:[1,8],visual:[2,7],wai:7,week:14,weekli:14,what:[1,15],when:5,which:[2,15],why:15,wisconsin:5,write:[0,9],xgboost:8,your:[1,8]}}) \ No newline at end of file +Search.setIndex({docnames:["Clustering","chapter1","chapter10","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","content","intro","linalg","schedule","statistics","teachers","textbooks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["Clustering.ipynb","chapter1.ipynb","chapter10.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","content.md","intro.md","linalg.ipynb","schedule.md","statistics.ipynb","teachers.md","textbooks.md"],objects:{},objnames:{},objtypes:{},terms:{"000":2,"000000":[1,3,9],"00000000e":3,"0001":2,"00015921913736794912":7,"00019998":3,"00024087":3,"00029012":3,"00034944":3,"00042089":3,"00050694":3,"00061058":3,"00073541":3,"00079968":3,"00088573":3,"00096314":3,"001":[2,5,6],"00106677":3,"00109273":[],"00115999":3,"00128479":3,"00139705":3,"00154733":3,"00168251":3,"00186347":3,"00200":6,"00202624":3,"00224413":3,"0024401":3,"00247083e":1,"00270244":3,"00293838":3,"0032542":3,"0032873138755776365":15,"00353823":3,"003704":1,"003717":1,"003759":1,"003774":1,"003788":1,"00391839":3,"004":3,"00426027":3,"00433417":9,"004456043243408203":0,"00445655":9,"00471782":3,"0049999999999999845":[],"004999999999999996":[],"004999999999999997":[],"0050000000000000044":[],"005000000000000007":1,"00512927":3,"0056799":3,"00617499":3,"006530396683779109":1,"00683748":3,"006968283076248407":[],"00727646693":1,"00728323e":[],"007315":1,"0074331":3,"007789":[],"007824":1,"007931713723267314":[],"008171076530362356":1,"00823002":3,"0086649156":1,"008675369724976777":3,"008885578722629236":[],"00890601":[],"00894639":3,"009154":1,"009163470508352228":3,"009735":9,"00973536":9,"009790":1,"009883615646716182":[],"009883615646716184":[],"009883615646716186":[],"009883615646716188":1,"00990475":3,"009911":1,"01057384067458835":[],"010679893512872646":[],"01076611":3,"0110":15,"011347":1,"01191824":3,"01210814993019007":[],"01295356":3,"0140617":[],"01433809":3,"01503674":[],"015037":[],"01514394":[],"015144":[],"01558197":3,"0169643":3,"0170259":[],"01724499":3,"018232":1,"01825571":[],"01867234e":15,"01873344":9,"01873869":3,"02073509":3,"02096350e":1,"021544346900318832":[],"02161783e":15,"021901":9,"02190139":9,"02252765":3,"02492265":3,"02493044e":[],"02568378":[],"025709":[1,9],"02625193":6,"02707227":3,"02730126581656065":15,"02881304":[],"029688":[],"02968834":[],"029733":1,"02994311":3,"03019554":[],"030196":[],"030670":[],"03067028":[],"03099776":3,"031":3,"03193199":[],"03251863":3,"03256632e":2,"03303359":[],"033037772005753835":[],"03308408":3,"034342":[],"0344707":[],"0354":4,"0359565":3,"03607832":[],"03652792":[],"036528":[],"03697069":[],"03707133":9,"03750367":13,"03787596148305236":1,"03791824e":15,"038300":[1,9],"03871832":[],"039039":3,"03929932":3,"04205220e":15,"04260073e":[],"04315108":3,"04330858":[],"04346721":3,"04421672e":[],"044334":1,"044402":1,"04455272":[],"044553":[],"04529095":[],"0458":7,"04648335":3,"04683565":3,"04757618e":[],"04829457939163212":15,"051115":[],"051649":[1,9],"0517473":3,"052645":[],"053053":[],"0530533":[],"05318162":[],"053182":[],"05364854":6,"05396545e":[],"054187":[],"054276":[],"054674":[],"055":[],"055085":[],"05531364":[],"055314":[],"055676":1,"055744":[],"055774":[],"055831":[],"055887":[],"055916":[],"05614483":3,"056326":[],"056329":9,"056484":[],"057035":[],"057088709963637":1,"057320":[],"057332":[],"05755374":[],"057571":[],"057654":[],"057919":[],"05802766":[],"058178":[],"058247":[],"058282":[],"058719":[],"058805":[],"058892":[],"059225":[],"059245":[],"059344":9,"059406":[],"059455":[],"059531":[],"059571":[],"059680303635344434":[],"059765":[],"059806":[],"059865":[],"059908":[],"059994":[],"060064":9,"060070":9,"060308":[],"060335":[],"06041458e":[],"060520":[],"060919":[],"061164":[],"061176":[],"061255":[],"06126507e":15,"061330":[],"061601":9,"061652":[],"061774":[],"061842":[],"061855":[],"061896":[],"06200174":3,"06209126":[],"062188":[],"062327":[],"062376":[],"062639":[],"062659":[],"062660":9,"062731":[],"062822":[],"062829":[],"062879":[],"062885":[],"062923":9,"062979":[],"063055":[],"063097":[],"063122":[],"063178":9,"063190":[],"063324":9,"063395":[],"063415":[],"063523":[],"063526":[],"063615":[],"063670":[],"063727":[],"063759":[],"063763":[],"063880":[],"063882":[],"063925":[],"063982":[],"064000":[],"064013":[],"064075":[],"064078":[],"064101":[],"06412177e":15,"064156":[],"064257":[],"064273":[],"064304":[],"064354":[],"064357":[],"064393":[],"064410":[],"064449":[],"064472":[],"064591":[],"064647":[],"064648":9,"064686":[],"064689":[],"064783":9,"064795":[],"06492086e":[],"064929":[],"064958":[],"064964":[],"064982":[],"065":[],"065003":[],"065086":[],"065110":9,"065144":[],"065151":[],"065188":[],"065200":[],"065202":[],"065204":[],"065334":3,"065355":[],"065408":3,"06540809":3,"065591":[],"065618":[],"065660":[],"065680":[],"065762":[],"065860":9,"065994":[],"066002":9,"06600226":9,"066030":9,"066047":[],"066074":9,"066092":[],"066116":[],"06619182206626131":[],"066249":[],"066272":[],"066294":[],"066312":9,"066389":[],"066403":9,"066487":[],"066629":[],"066683":9,"066705":[],"066761":[],"066788":[],"066835":[],"066837":[1,9],"066951":9,"066963":[],"067043":[],"067061":[],"067123":[],"067132":9,"067175":9,"067202":[],"06724062":3,"067326":3,"067355":[],"067440":9,"067504":[],"067531":[],"067577":[],"067601":[],"067610":[],"067667":9,"067685":9,"067711":[],"067718":[],"067769":[],"067777":[],"067794":[],"067844":[],"067865":[],"067889":[],"067892":[],"067985":[],"067990":[],"068056":[],"068073":[],"068165":[],"068185":[],"068213":[],"068244":[],"068276":[],"068293":[],"06834":4,"068351":9,"068385":[],"068427":[],"068460":[],"068491":[],"068514":[],"068593":[],"068640":[],"068654":[],"068667":[],"068673":[],"068686":[],"068697":9,"068717":[],"068818":9,"068821":[],"068828":[],"068838":9,"068840":[],"068873":[],"068896":[],"068920":[],"068928":[],"068945":[],"069005":[],"069028":[],"069071":[],"069081":[],"069098":[],"069195":9,"069243":9,"069282":[],"069369":[],"069371":3,"069413":9,"069496":[],"069503":[],"069510":[],"069516":[],"069528":[],"069542":[],"069584":1,"069635":[],"069641":9,"069775":9,"069814":[],"069848":[],"069853":[],"069859":[],"069872":[],"069890":[],"069902":[],"069988":9,"070043":1,"070103":[],"070129":[],"070131":[],"070138":[],"070166":[],"070182":[],"070188":[],"070254":[],"070337":9,"070456":[],"070473":[],"070517":[],"070548":9,"070653":[],"070762":9,"070764":[],"070791":9,"070812":[],"070815":[],"070867":9,"070889":[1,9],"070949":[],"070967":[],"071016":[],"071049":9,"07106781e":[],"071096":[],"07110274":13,"071156":[],"071248":[],"071268":[],"0713":1,"071313":[],"071325":[],"071359":[],"071435":9,"071447584032141":1,"07145103":9,"071453":3,"071481":[],"071502":[],"071547":9,"071549":[],"07155335":[],"071576":[],"071579":[],"07159175":[],"07160764":[],"071660":9,"071667":[],"071681":[],"071684":[],"071714":[],"071761":[],"071855":[],"071887":[],"071917":[],"072012":[],"072094":[],"072198":[],"072246":[],"072279":[],"072424":[],"072468":[],"072471":[],"072555":9,"072589":[],"072598":[],"072620":[],"072654":9,"072661":[],"072710":9,"072826":[],"072862":3,"072879":9,"072910":[],"073":[],"073020":[],"073035":[],"073096":9,"073310":9,"073333":[],"073352":[],"073371":9,"073372":[],"073483":[],"073546":3,"073567":[],"073591":[],"073598":[1,9],"073602":[],"073607":[],"073656":9,"073681":[],"073695":[],"073765":9,"073851":[],"073902":[],"073915":1,"073926":[],"073966":[],"074":[],"074027":[],"074036":3,"074037":3,"074044":[],"074067":[1,9],"074077":[],"074096":[],"074099":[],"074134":[],"074170":[],"074191":[],"074201":9,"074207":[],"07421084":3,"074230":[],"07423848370736122":[],"074248":[],"074285":[],"074286":[],"074331":9,"074432":[],"074434":[],"074453":[],"074488":[],"07456491":3,"074568":[],"074618":9,"074665":[],"074693":[],"074696":[],"074848":[],"074979":9,"074996":3,"075084":[],"075119":[],"075163":[],"075194":9,"075212":[],"07521771":[],"075218":[],"075261":[],"075266":[],"075289":[],"075296":9,"075309":[],"075526":9,"075542":3,"075545":9,"0755452":9,"075562":[],"075567":[],"075615":9,"075754":[],"075772":[],"07581375":[],"075814":[],"075818":[],"075821":[],"075865":[],"075975":[],"075993":9,"076026":[],"076062":[],"076166":[],"076169":[],"076189":[],"076213":3,"076251":[],"076283":[],"076320":[],"076367":9,"076398":[],"076408":[],"076410":9,"076466":9,"076469":[],"07670437":3,"076730":[],"076822":[],"076938":[1,9],"077005":3,"077010":9,"077046":9,"077115":3,"077143":9,"077160":[],"077163":3,"077212":[],"07729012413236423":9,"077303":[],"077305":9,"077338":[],"077339":[],"077386":[],"077407":[],"077416":[],"07744472306026946":7,"077469":[],"077533":[],"077623":[],"077771":9,"07777777777777778":2,"077891":[],"077927":9,"078049":[],"078076":[],"078099":9,"078103":9,"078197":[],"078244":9,"078279":[],"078311":[],"078342":3,"078388":[],"078390":3,"078399":[],"07839924":[],"078451":[],"078474":[],"078646":3,"078649":[],"078674":[],"078693":9,"078710":9,"078746":9,"078750":[],"078892":[],"078927":[],"078930":[],"078937":[],"078966":[],"079001":[],"079029":3,"079037":[],"079137":[],"079139":[],"079333":[],"079337":3,"079365":[],"07944154":13,"079597":3,"079624":[],"079643":3,"079785":9,"079848":9,"079956":[],"080024":9,"080084":1,"080101":3,"080115":[],"080182":3,"080223":[],"080249":3,"080264":9,"080325":9,"080336":[],"080341":3,"080381":[],"080387":[],"080398":[],"08043851":3,"080570":9,"080626":9,"080633":3,"080675":9,"080738":[],"080806":3,"080845":[],"080871":[],"081024":3,"081077":9,"081092":3,"081102":[],"081103":[],"081129":9,"081210":9,"081227":[],"081260":[],"081309":[],"081402":[],"081425":3,"081435":3,"081474":3,"081480":[],"081489":9,"081514":[],"081632":3,"08170444":[],"081744":3,"081778":3,"081816":[],"081886":[],"082032":3,"082091":[],"082211":9,"082225":9,"082239":3,"082247":9,"082272":[],"08248290e":[],"08251898":15,"082549":3,"082616":[],"082687":[],"08271336":[],"082866":[],"082990":[],"083015":3,"083128":[],"083138":3,"083177":3,"08318298e":2,"0832":[],"083221":3,"083246":[],"083295":9,"083376":[],"083384":3,"083495":3,"083527":1,"083577":[],"083618":[],"08362077210702115":[],"083622":3,"083657":[],"083658":9,"083728":[],"083775":[],"083808":3,"08380813":3,"083855":3,"083905":3,"084":4,"084092":[],"084103":[],"08415761":[],"084167":[],"084181":[],"084221":3,"084249":9,"084251":[],"084461":3,"084604":9,"084813":9,"084826":3,"084864":3,"084873":[],"084916":3,"084931":[],"08501147":[],"085121":9,"085253":3,"085259":[],"085285":[],"085289":[],"085510":3,"085544":3,"085597":[],"085598":3,"085610":3,"085646":9,"085676":[],"085748":3,"085763":3,"085811":3,"085928":[],"085951":[],"086052":3,"08611111111111111":2,"086116":[],"086325":[],"086430":3,"086465":[],"086561":3,"086592":[],"08665060086846632":[],"086652":9,"086757":3,"086974":9,"086985":3,"087202":9,"087242":3,"087334":3,"087482":[],"087526":3,"087544":3,"087563":9,"088137":3,"0881981":3,"088209":3,"088258":3,"08839750e":[],"088414":3,"088484":3,"088556":3,"088660":[],"08871404":3,"088871":[],"08888888888888889":2,"089039":3,"089300":[],"089326":3,"089352":3,"089425":9,"089437":3,"089504":[],"089540":3,"089693":3,"089881":3,"089916":[],"089931":[],"090274":9,"090355":3,"090817":3,"09103481e":15,"091159":[],"091318":3,"091535":3,"091578":3,"091659":3,"09166666666666666":2,"0917":7,"091979":[],"092288":3,"092375":3,"092659":3,"092932":3,"093236":3,"093248":3,"093328":3,"093573":3,"093755":9,"093928":3,"094":4,"094513":3,"09456011349477329":3,"094774":3,"09487315108590391":9,"095173":[],"095472":[],"095941":3,"09609807":3,"096406":3,"096639":3,"096726":[],"09672604":[],"096763":3,"09678277e":15,"096802":3,"097346":3,"09741585e":[],"097452":[],"09903804":6,"099763":[],"09976319":[],"0x7febdb109490":5,"0x7febdb6780d0":5,"100":[0,1,2,3,4,5,6,7,8,9,13,15,16],"1000":[0,1,2,5,6,9,12,15],"10000":[0,3,4,8,9,15],"100000":6,"10001":8,"1001":15,"1002":15,"1003":15,"1005":15,"1007125":[],"1009":15,"10094646e":[],"1011":15,"1013":15,"10131725":[],"1013904243":15,"1015":15,"102":1,"1022964509394572":2,"1023":15,"1026":15,"1027":15,"103":2,"1030":15,"10307631":[],"10327559":13,"1037":15,"10378326e":2,"1038":15,"1040":15,"10405456":9,"104411":1,"1047":15,"105137868830763":15,"10555555555555556":2,"10589577":3,"106095":[1,9],"108":1,"10806972":[],"108070":[],"10896672e":15,"10898112e":[],"10th":7,"10x":1,"110":1,"1100":15,"1101":15,"11022302e":3,"111":[2,5,10],"1111111111111111":2,"112283":1,"112383":[1,9],"11304709e":15,"11388888888888889":2,"11456076e":[],"11462415":3,"11507992e":2,"11666666666666667":2,"117":6,"118318":1,"11944444444444445":2,"12002944":[],"1203284":6,"121":[6,7,8],"122":[6,7,8],"12222222222222222":2,"12283463":[],"123190":1,"123459876":15,"12366979e":15,"124":1,"12497018e":[],"12618549":3,"127773":15,"12777777777777777":2,"12908963":1,"1298":7,"12adb44b1c20":[],"13055555555555556":2,"13060772":[],"13162821e":[],"13209041":[],"13266452e":[],"133":5,"13328820e":[],"134102":3,"13410232":3,"13457922":[],"13519106":1,"13579199e":[],"1361111111111111":2,"13646574":3,"136687":[],"137268":[],"137400784702912":1,"137652":[1,9],"13803928":[],"138472":4,"13865173":3,"138775":[1,9],"13891144e":[],"139462":[],"139475":[],"1404":1,"143":5,"1437":2,"1440501043841336":2,"1445":4,"14459063":[],"1446":4,"1447":4,"1448":4,"1449":4,"14662074":[],"14722222222222223":2,"147400":[1,9],"147420":[1,9],"147722":[],"148":[],"149076":[],"149366":[],"149667":[],"149739":4,"149832":[],"149894":[],"149903":[],"14g":4,"150":6,"15005476":3,"15024669":[],"150306":4,"151":[],"152636":[],"1527777777777778":2,"153036":1,"153106":1,"15324631":[],"15332528e":[],"154720":1,"15475232":[],"154911":1,"155491":1,"155687":1,"155883":1,"156":1,"157":1,"15751596":[],"158":1,"159":1,"15979239e":15,"15g":4,"160":1,"16111111111111112":2,"16211139":3,"16342407":3,"16496581e":[],"16553696":[],"16637855e":15,"16666666666666666":2,"16807":15,"16831012":[],"16861772":[],"168618":[],"16b8e3cda33a":2,"17117385":[],"17174962e":2,"17234827e":[],"17248441e":[],"17385778e":[],"174497":[],"17449733":[],"175300":1,"1758506":[],"17654307":[],"17707436":[],"17777777777777778":2,"17801022":3,"17917768":3,"17949575":3,"17953942":9,"1797":2,"180092462880674":[],"18029127":3,"18063928":[],"18220995":[],"18224665":[],"1831277634928002":3,"18333333333333332":2,"18404906e":[],"184519":1,"1856411":[],"18611111111111112":2,"18620601e":[],"18673098":9,"189496":1,"18954529":[],"189622":1,"18968431e":15,"1914224774238273":[],"19207979":3,"1940":1,"1943":10,"197":[],"1970":13,"1973":7,"197370":[1,9],"19742904e":[],"1979":4,"1989":15,"19937":15,"19955871":[],"199559":[],"19972087e":15,"1_1":10,"1_2":10,"1_3":10,"1cm":[1,6,8,15],"1e10":0,"200":[1,6,7,8,15],"2000":1,"200000":1,"2004":5,"2006":17,"2010":2,"2011":2,"2015":2,"2016":1,"2018":[1,4],"201841":[],"20184113":[],"2021":0,"20277777777777778":2,"203757":[],"20375701":[],"205466494327873":[],"20632410e":[],"207545":[1,9],"20772452":[],"20819609e":[],"20833333333333334":2,"20843563e":[],"20906175e":15,"210340":[1,9],"21058097":3,"212":[],"21208310e":[],"212327334149492":[],"2125":[],"2126":[],"2127":[],"2128":[],"2129":[],"213":[],"213103":[1,9],"21347282":[],"213743":[1,9],"214":[],"2147483647":15,"215":[],"216":[],"21623344":[],"216290":[1,9],"216683":[1,9],"22044605e":3,"22076362":[],"221":6,"221180":1,"22209371e":[],"222400":1,"22443803":[],"22527008e":15,"22690428":3,"22717936e":15,"22847924":3,"22999784":[],"229998":[],"23117916e":15,"23167717":3,"232435":1,"23333333333333334":2,"2335879":[],"23382086e":[],"23438810e":[],"241262":[],"24126232":[],"2433e":3,"24340751":[],"24444444444444444":2,"246138":3,"24613822":3,"24829908":3,"250":[5,7],"25000":1,"250000":1,"250154":1,"251559":[],"2515593":[],"251879":1,"25190225e":[],"25226753e":15,"25240108":[],"252436":1,"252639":3,"25263916":3,"253":[],"25303483":[],"253775":1,"254":[],"254509":[],"25450941":[],"25457052":[],"255":[],"255001":1,"2551":1,"256":[],"256962":1,"257":[],"2571699":[],"25726439e":[],"2572e3a4b38d":2,"25803281":[],"259107":[],"25910749":[],"259153":[1,9],"259815":[],"25981533":[],"260227742627244":[],"2627588":13,"26301436":3,"26381865":[],"263819":[],"264":1,"26412372":[],"265":1,"2653678":[],"266":1,"26666667":5,"267":1,"26710969":3,"26780278":3,"2683":4,"2684":4,"2685":4,"2686":4,"2687":4,"26890510e":[],"269":1,"26974938e":[],"270":1,"27262964":[],"27296891e":[],"276263":[1,9],"27753165e":15,"27852549":[],"27924636":3,"27n_":15,"280647":[1,9],"28166741":[],"282":[],"282727":[1,9],"28310983":[],"283110":[],"2836":15,"28475098":6,"2861":15,"2873":7,"2882":15,"2886":15,"2890":1,"2892":15,"28971976":9,"289720":9,"290":[],"291":[],"2915":15,"291614":[],"29167186":3,"292":[],"293":[],"2931":[],"294":[],"295656121491569":[],"296247":1,"2968":[],"297219777724628":9,"297260":1,"2980":[],"298273":1,"2983233":13,"298375":1,"2990":[],"299444":9,"29944428":9,"299748":1,"2_1":10,"2_2":10,"2_3":10,"2_i":10,"2_m":15,"2_t":5,"2_x":15,"2cm":6,"2ff97f4bf03b":15,"2nd":7,"2x_ix_jy_iy_j":6,"2x_j":6,"2y_i":8,"2y_j":6,"30000":1,"300162456113691":[],"30119421":6,"3041320306136366":3,"30626706":[],"306854":[],"30685416":[],"30879705":[],"30968181":[],"310811":3,"31081134":3,"31109204e":[],"31318084":3,"31457796":3,"3155":[3,4],"3156929654100207":7,"31608475e":[],"31718909":9,"31730641":[],"317367":9,"31853484":[],"31896852":6,"3200":2,"32047562":1,"323291478597321":15,"3250":2,"32521615e":15,"326238":1,"327631":1,"32938847":13,"32945844e":15,"3304":1,"33066907e":3,"3310":1,"3317":1,"331939":1,"333":5,"333333":1,"33333333":5,"3338":1,"3344":1,"33443859e":[],"33544681":[],"33569998e":[],"33861512":[],"338869":[],"33886902":[],"339535706819584":15,"33953571":15,"340782":[1,9],"34114547":3,"34114641e":[],"34172919":[],"342680":1,"3436":1,"3437":1,"344172":1,"34569596":3,"346433":9,"34643337":9,"34902789e":15,"350387":[],"35038714":[],"351636":[1,9],"35176067":[],"35182854":3,"35216172e":[],"35367281e":[],"356399":1,"357508":1,"358869339268145":15,"35886934":15,"359":3,"359640894899012":[],"360":2,"360688":1,"361556":1,"3621311":3,"36436520e":[],"36468301":[],"3655222":3,"369139":[1,9],"36941772":[],"369418":[],"37186301":[],"372889":[],"3728892":[],"37416969":9,"374170":9,"37738324":[],"38207279e":[],"38216436":[],"38629436":13,"38777878e":3,"38892672":3,"388927":3,"3893239":[],"389324":[],"38937995e":15,"38986237":[],"39579407":3,"396740":9,"39674043":9,"39706038":3,"397700":[1,9],"39792608e":[],"399836":1,"3cd19a0768e1":[],"4000":17,"401842":[1,9],"40212127":[],"404":1,"40425078e":15,"405890":[1,9],"40702":[],"40708470e":[],"40859":[],"4087793":3,"40902095":[],"40968888":3,"409689":3,"412374":[],"41237437":[],"4140e":3,"41433969":3,"41511965e":2,"415634483874318":[],"416694683938511":9,"4171578884124756":0,"41754964":[],"41770932":[],"418506":[1,9],"41876428e":[],"4200e":3,"4201e":3,"4203e":3,"42441033":3,"426":5,"42847770e":15,"42937310e":15,"43054282":3,"4332e":3,"435163":1,"435490":[],"43549028":[],"43766686":9,"438136":1,"44089210e":3,"442600":[1,9],"443217":1,"44395541":[],"44625466e":15,"44970586e":2,"45013332e":[],"45019484":[],"450257":[1,9],"4557763":9,"455947":1,"458027":1,"458078":[1,9],"45937170e":[],"45960079":3,"46016532e":[],"461":15,"461838":[],"46183815":[],"462":5,"46323168e":15,"4632e":3,"46415888336127775":[],"46423858e":[],"465564":[],"46556436":[],"466":15,"46675058":[],"46914544e":[],"46929603e":[],"469730":[],"46973015":[],"47042744":3,"470714":1,"47079457e":15,"47125748":3,"47132891":3,"472652":[],"47265243":[],"47441766":[],"47566390e":15,"47654764e":[],"47815203":9,"47862383":[],"478624":[],"48019541":[],"48154187202453613":0,"48257387":16,"48471852e":[],"48476997":9,"48608063e":[],"48994188":3,"491837":[],"4918372":[],"493230":3,"49323032":3,"4940954":1,"497221":[],"49722108":[],"49841285":3,"498413":3,"49865673":[],"4990":15,"4992":15,"4997":15,"4c4c7f":[7,8],"4y_i":8,"500":[2,4,5,7,8,15],"500000":1,"50000455":3,"50000553":3,"50000718":3,"50000855":3,"50000969":3,"50001063":3,"50001142":3,"50001207":3,"50001261":3,"50001306":3,"50001343":3,"50001374":3,"500014":3,"50001414":3,"50001422":3,"50001439":3,"50001454":3,"50001466":3,"50001476":3,"50001485":3,"50001492":3,"50001498":3,"50001502":3,"50001506":3,"5000151":3,"50001512":3,"50001515":3,"50001517":3,"50001518":3,"50001519":3,"50001521":3,"50001522":3,"50001523":3,"50001524":3,"50001525":3,"5018":15,"50321091":3,"50394742":[],"506":1,"507d50":[7,8],"5098779":[],"509878":[],"50j":5,"50x10":2,"510":2,"5120":0,"512132":1,"51257863e":[],"51345668e":[],"51363731e":[],"514219":1,"51523276e":[],"515768":[],"51576807":[],"51707172":[],"517072":[],"51893804e":[],"51943726":9,"519842":1,"52158335":[],"5222222222222223":2,"52570079":[],"525701":[],"526744":[1,9],"52687171":[],"526872":[],"52722156":[],"52874252":3,"52d2c51caad1":[],"5303329":9,"5305555555555556":2,"531280":1,"535457":[],"53545715":[],"5378811":9,"539261":[1,9],"54039921":3,"54096582":[],"540966":[],"54121682":[],"541217":[],"54152940e":[],"541605":1,"54237024":15,"543169":3,"54316925":3,"544439":1,"546972":[],"54697204":[],"54702088e":[],"54710530e":1,"55111512e":3,"55138385":9,"551384":9,"55280484":[],"5555555555555556":2,"55707065":[],"557071":[],"557795":[1,9],"55795935":[],"55854694":9,"56033697":3,"56198284":3,"56216797e":[],"564374":[1,9],"56536":1,"569":2,"56939714":3,"57051369":[],"571":3,"574465":[1,9],"5755035":[],"57781668":[],"57871326":[],"581766":9,"58176612":9,"582":[1,2],"58228342e":15,"58239999":[],"582400":[],"583595":1,"584804":1,"58521266":9,"585213":9,"58596975":[],"585970":[],"587401":1,"58836420e":15,"5888888888888889":2,"59007674e":15,"59304755e":[],"5944444444444444":2,"59480085":[],"5cm":15,"60122668e":15,"60293962":3,"60394236e":[],"60420593":3,"60673226":9,"60949193":[],"609492":[],"60999846":[],"61069091e":15,"6111111111111112":2,"61124978":[],"61234223":[],"612939":1,"613579":1,"614808":[1,9],"61505887e":[],"61745046e":[],"618":1,"6183694":[],"61869821":[],"618982":1,"622539":9,"62253933":9,"622625":[],"62262506":[],"6226921":[],"62316154e":15,"62359224e":15,"62373464":9,"625":5,"62783293":[],"62856593":[],"62894215":3,"629961":1,"6300745149331701":1,"63315151":[],"63339159":[],"63374631":[],"63437572":[],"63442451e":[],"63498144":3,"636323":9,"63632311":9,"63680118":[],"637129335071195":1,"63993205e":[],"64012627":3,"640782":3,"64078247":3,"64166831e":[],"64447921":[],"64580686":[],"646283":[1,9],"64669382":[],"646694":[],"647473":[1,9],"64857826e":[],"649382":[1,9],"64x50":2,"650024":[],"65002433":[],"6510573774179256":15,"65105738":15,"65238878":13,"65245958":[],"653095390463358":[],"653702":13,"653725417896576":1,"6544e":3,"65482578":[],"65572035":[],"65599927":[],"65766387":[],"65885453":3,"65933852":[],"65939208e":[],"6600855222624895":3,"66020213e":[],"6614":[],"66183486":9,"661835":9,"6628996975186952":1,"66302359":[],"66383151":[],"66677842":[],"66800261":[],"668172":1,"66880047":[],"67006792":[],"67060602":[],"671089":1,"6714":[],"67171347e":15,"672721":1,"67279536":[],"67303655":9,"673037":9,"67407338e":15,"67450955":[],"67708423":[],"677149":[],"67714918":[],"6796265324852733":[],"68002363":[],"680024":[],"68034946e":[],"6813":4,"6814":4,"6815":4,"6816":4,"6817":4,"6818813252071303":15,"68188133":15,"68192193":3,"68316185":[],"68342382":[],"68542204":3,"68616263":13,"68729414":[],"68937695":[],"689519":[1,9],"690617":1,"69069n_":15,"693361":1,"69347005":[],"693850":9,"69385025":9,"69519693":[],"695197":[],"69573183":[],"69695259":3,"69843037":[],"6996584":[],"69981195e":15,"6999536":9,"6ea927cc6e88":2,"6n_":15,"70183798":3,"7022283":[],"70234019":[],"70415861":[],"70523024e":[],"70589906":[],"7070e":3,"70710678":3,"70790937":[],"70832814":3,"70885528e":[],"70886748":[],"70946493e":[],"712018":[1,9],"712199063818309":[],"71281409":[],"71351486":[],"71442781":13,"71606852":[],"7162":[],"71669651":[],"7172":[],"72108703":[],"72174172":9,"72218808":[],"72312577":[],"7236674":3,"7240496":[],"725394195434945":[],"72780613e":15,"72859758":3,"72879865e":[],"72981762":6,"73091052e":[],"731000":1,"733096":1,"73453972":[],"7371165871823337":[],"737349":[],"73734906":[],"73921714":[],"74081822":6,"74107697":9,"74143127e":[],"7432283":[],"74382593":[],"74495014":[],"745136489050356":[],"74840212":3,"74845978":[],"74921867":[],"749765":1,"750445":1,"751699":[1,9],"75170092":3,"75195757":[],"7522047280566193":[],"75382481":[],"75524378":[],"75629493":[],"756352":1,"75841112":[],"75932862":[],"76172241e":[],"762":[5,9],"7621419":[],"76290332":[],"763880":[],"76388013":[],"76497666":[],"765":5,"76504618":[],"76570177":[],"76648901e":[],"76936315":3,"7693978131030923":9,"7701384":3,"77152076":3,"77156117e":3,"7718":7,"772b904ae9cb":4,"77317984":[],"7733":[],"77350269e":[],"774300":1,"776223":[],"77622336":[],"77661393e":15,"77714169":6,"78080633":[],"78082":[],"78195":[],"78857629":[],"78941903":3,"78944806":[],"7899453":[],"79111643":3,"7925146":3,"792515":3,"79295029e":15,"793167":1,"79326583e":15,"79328828":[],"793701":1,"794282":[1,9],"79459035":[],"79648291":[],"79902342":[],"7c394b1e8b71":7,"7d7d58":[7,8],"800":5,"80004454e":[],"800266":[],"80026635":[],"80121":[],"80469739":3,"8055555555555556":2,"81160425":3,"81620806":[],"81633628":9,"816454":1,"816847":1,"81712976":3,"817130":3,"81781888":9,"819202":[],"81920231":[],"82198978":3,"8265786":3,"827265":1,"82889306e":15,"8305555555555556":2,"83425361":9,"834254":9,"83512277":3,"83614019":[],"8388888888888889":2,"839313":3,"8393131":3,"83935285":[],"84008474":3,"840085":3,"84087101":[],"842":[],"842436":1,"84251485":[],"842515":[],"8429949116841184":[],"84355903e":2,"84372853":[],"84443254e":2,"84658093e":15,"8479552268981934":0,"84860939":[],"849766":[],"84976606":[],"84994524":3,"85058354":[],"850584":[],"8520127":[],"85278450e":[],"85396354":[],"85450859":9,"85463934e":[],"85497163e":[],"85546305e":[],"85601992":3,"861":1,"86117291":3,"86134827":3,"86145244":9,"8638888888888889":2,"86436607":[],"86574276":[],"8666666666666667":2,"86692943":[],"87030083":[],"870301":[],"8718475896381779":15,"87184759":15,"8722222222222222":2,"87381451":3,"875":2,"87761937":[],"8777777777777778":2,"878843":3,"8788431":3,"87972591":[],"8802":[],"88046261":3,"88046462":[],"8805555555555555":2,"881323":[],"88297395":[],"88336879":3,"88559559":[],"8867467323038865":[],"88693966e":15,"88712946":[],"8888888888888888":2,"8901":[],"8914984":[],"8921171964770647":9,"8923":[],"89288636":9,"89383322":[],"89410423":3,"8944444444444445":2,"89704131":[],"89742056":[],"897421":[],"898500":9,"89850037":9,"89928965":[],"89942598":[],"89975818":[],"89992521":1,"8x8":2,"90075537":3,"90220243":3,"90233874":[],"90266948":3,"90316476":[],"9040":7,"9055555555555556":2,"90618734e":15,"907307":9,"90730735":9,"90825063":[],"9096":[],"91012519e":[],"9111111111111111":2,"91128596":3,"91145266e":15,"91417278":[],"91549644":1,"9166666666666666":2,"916978":[],"91697817":[],"9171356":[],"91760278":3,"91812702":3,"918992":1,"9196":[],"9222222222222223":2,"922312":[],"92231203":[],"92280994":[],"924018":1,"925":2,"92507116e":2,"92578916":3,"92605247":[],"92645039":9,"92646965":9,"926470":9,"92732185e":[],"9277777777777778":2,"9279671770201344":15,"92814088":3,"928141":3,"92857143":5,"92919670e":15,"9305555555555556":2,"931":1,"93100040e":15,"93155188":3,"93158979":3,"932734":[],"93273404":[],"933":3,"9354":[],"9361111111111111":2,"93679587":3,"936796":3,"937":15,"937082":1,"93799826":3,"938":15,"9388888888888889":2,"939":[1,15],"94019247e":[],"94034531":[],"942726":3,"94284104":3,"94320205":3,"9444444444444444":2,"94536341":15,"94591015":13,"94639099":9,"946893955211749":[],"947543":9,"9482527":3,"948729":[],"95014575":[],"95231424":3,"9527777777777777":2,"95284275":3,"95351665":3,"954":15,"95443703e":[],"9547578478889096":1,"95517094":[],"955171":[],"9555555555555556":2,"95628168":[],"956282":[],"956563":[1,9],"95684892":3,"958228616652075":3,"9583333333333334":2,"959247":[],"960":15,"96024953":3,"96084663":3,"961":15,"96104648":[],"9611111111111111":2,"962":15,"963499":9,"96349948":9,"9640435":3,"965548":1,"965885569080809":[],"96688672":3,"9674916":3,"967809":[1,9],"96793117e":[],"97005689":3,"97101567e":15,"9722222222222222":2,"97243128":3,"97300836":3,"975":2,"97507735":3,"9756404":[],"976":6,"97622676":[],"976227":[],"9765":[],"9769":[],"97705827":3,"97723801":[],"97758848":3,"9777777777777777":2,"9780387310732":17,"9780387848570":17,"9781492032632":17,"97926491":3,"9804422":[],"98046438":[],"9805555555555555":2,"98091621":3,"981321":1,"98139097":3,"98275501":3,"98314755":[],"983148":[],"983310":1,"98413059":3,"98452685":[],"98454786":3,"985":15,"98526763":[],"98528992":[],"98531221":[],"98566191":3,"986":15,"9860803":[],"98609175":15,"986091753050161":15,"9861111111111112":2,"98661465":[],"98680716":3,"98716878":3,"9877742":[],"987902":[],"98808176":3,"988663":[],"9888888888888889":2,"98892195e":15,"98893512":[],"989":15,"9890348":3,"98927731":[],"9893447":3,"9898ff":[7,8],"99009525":3,"99009739":[],"9901168":[],"99013921":[],"99016161":[],"99018401":[],"99043999":[],"99088801":3,"9909252":[],"991":15,"991072":9,"99107239":9,"99115119":3,"99126104":[],"99133007":[],"99160404":[],"99176998":3,"99190487":[],"99194716":[],"992":15,"99218987":[],"99219378":[],"99242605":[],"99242921":3,"99248001":[],"99265097":3,"99273355":[],"99276945":[],"993":15,"99305549":[],"99305802":[],"99311297":[],"99316252":3,"9933":4,"99346398":[],"99363129":[],"99363383":[],"99371056":3,"99389612":3,"99393624":[],"994":4,"99400444":[],"9941":4,"99418903":9,"99420743":[],"99420997":[],"99428016":[],"9943201":3,"9945452":[],"99462421":[],"99473581":[],"9947756":3,"99478645":[],"99478898":[],"99492986":3,"99498985":[],"995":4,"99501236":[],"99503487":[],"99505739":[],"9950799":[],"99527696":[],"99528218":3,"9953048353087299":[],"99536326":[],"9953658":[],"99539415":3,"99544872":[],"9954538761021741":[],"99566069":3,"995774":3,"9957744":3,"99578809":3,"99579317":[],"99581841":[],"99594294":[],"996":[3,4],"99600927":[],"99608161":3,"99620088364924":1,"99636015":[],"9963961":3,"99650061":3,"99652042":[],"99652296":[],"99655111":[],"9966744029509663":[],"9967292151090247":[],"9967458":3,"9968966158779216":1,"9969":[],"99696351":[],"997":4,"99700706":3,"99709215":3,"99709325":[],"99710078":[],"99723611":[],"99728435":[],"99729756":3,"99730848":[],"99751458":3,"99758326":3,"99763569":[],"99767893":[],"99775587":3,"99782689":[],"99793613":3,"99799099":3,"998":4,"99813653":3,"99817842":[],"99825997":[],"99828624":3,"9983295":3,"99836973":[],"99845267":3,"9984806":[],"998577":3,"99861053":3,"99871521":3,"99881845":3,"99883879":[],"99884384":3,"99891285":[],"99893323":3,"999":[7,15],"99901896":3,"99903755":3,"99911427":3,"99918546":3,"99919837":3,"99926459":3,"9993237":3,"99933188":3,"99938942":3,"9994385":3,"99944272":3,"99945628":[],"99949306":3,"99953381":3,"99953475":3,"99957911":3,"99961294":3,"99965056":3,"99967865":3,"99970988":3,"9997332":3,"99975913":3,"99977849":3,"99980002":3,"9998161":3,"99984732":3,"99987324":3,"99988687":[],"99989476":3,"9999095":[],"99991263":3,"99992746":3,"99993212":[],"99993978":3,"99995":3,"99995475":[],"99995818594196":[],"999974281880048":[],"99997737":[],"9999787681537219":[],"9999794306626945":[],"9999822527140678":[],"9999850282256434":1,"9999864543345858":[],"9999868619217517":[],"9999869956119286":[],"9999878260589065":[],"9999887274726137":1,"9999910208315801":[],"9b9cf4fa1a95":[],"\u00f8yvind":16,"abstract":2,"break":[0,1,9],"byte":13,"case":[1,2,3,4,5,9,10,12,13,14],"catch":1,"char":15,"class":[1,2,4,5,6,7,9,10,15],"const":15,"default":[1,2,5,13],"ekstr\u00f8m":16,"export":7,"f\u00f8470":16,"final":[0,1,2,3,4,5,6,7,8,9,14,15,16],"float":[0,1,3,5,7,9,13,15],"function":[0,3,4,7,12,13],"import":[0,1,2,4,5,6,7,8,9,10],"int":[0,1,2,3,5,9,13,15],"long":[1,2,5,10,15],"new":[0,1,2,3,4,5,6,7,8,9,13,15],"null":15,"public":[1,12],"return":[0,1,2,3,4,5,6,7,9,13,15],"s\u00f8rli":16,"sch\u00f8yen":16,"short":[0,3,11],"steinsv\u00e5g":16,"super":3,"switch":[0,1],"throw":15,"true":[0,1,2,3,4,5,6,7,8,10,15],"try":[0,1,2,3,5,6,7,8,9,12,13,15],"var":[3,4,8,9,15],"while":[0,1,2,3,4,5,6,7,9,10,15],AGE:1,Adding:2,Age:5,And:[0,1,4,5,7,12,15],Are:9,Being:5,But:[0,1,2,3,4,7,8,15],CAS:[],DIS:1,Doing:[3,5,8],EoS:[1,4],FYS:14,For:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,17],Going:2,Ising:[3,10],Its:[2,9],MDS:9,NNs:10,N_s:6,Not:[1,2,3,4],OLS:[1,4],One:[1,2,3,4,5,6,9,10,15],PCs:[9,12],RMS:15,Such:[4,10,15],That:[0,1,3,5,8,9,10,15],The:[8,13,14,16,17],Then:[0,1,2,3,4,5,6,7,8,9,10,13,15],There:[0,1,3,6,7,9,10,11,13,14,15,16],These:[0,1,3,5,6,7,8,9,10,13,15],Use:[1,7],Useful:[3,4,13],Using:[1,3,4,6,8,10,13],With:[1,3,4,6,7,8,9,10,13,15],__class__:8,__doc__:4,__future__:[6,7],__getattr__:[],__init__:[2,4],__mosek:3,__name__:[4,8],_auto10:10,_auto1:[3,5,10,13,15],_auto2:[3,5,10,13,15],_auto3:[3,5,10,13],_auto4:[5,10,13],_auto5:[5,10,13],_auto6:[5,10,13],_auto7:[10,13],_auto8:10,_auto9:10,_ax:4,_base:6,_build:[12,17],_check_optimize_result:[5,9],_compon:9,_datafram:[],_depth:7,_fraction:7,_lambda:[],_leaf:7,_logist:[5,9],_make_index:[],_multilayer_perceptron:[1,2],_node:7,_num_sampl:[],_ratio:9,_sampl:7,_split:7,_varianc:9,_weight:7,a0faa0:[7,8],a77d5ac269b2:[],a_0:1,a_1a:1,a_2a:1,a_3:1,a_3a:1,a_4:1,a_4a:1,a_h:2,a_i:[1,2,10],a_j:[2,10],a_k:[2,10],aaron:17,ab_channel:12,abandon:2,abbrevi:14,abid:15,abil:[1,8],abl:[2,3,5,8,10,15],abort:15,about:[0,1,2,3,4,5,6,7,8,9,10,12,13,17],abov:[0,1,2,3,4,5,6,7,8,9,10,13,15],abovement:4,abs:[0,1,3,5],abscissa:5,absolut:[1,3,4,5],acccess:[],acceler:5,accept:[1,7],access:[1,9,15],accid:4,accmod:3,accompani:1,accomplish:[5,6,7],accord:[0,1,2,3,4,5,7,10,15],accordingli:9,account:[1,3,5,15],accumul:[10,15],accur:[1,4,5,8,15],accuraci:[1,2,3,5,7,8,9,10],accuracy_scor:[1,2,8],accuracy_score_numpi:2,achiev:[1,2,3,4,6,10,13],aco:15,acquaint:12,acquir:[2,12],acr:1,across:[2,4,7,12],act:[2,13],action:15,activ:[0,1,7,14],actual:[1,2,3,4,6,9,13],ada_clf:8,adaboostclassifi:8,adadelta:5,adagrad:5,adam:2,adapt:[1,4,5,17],add:[1,2,3,4,6,8,9,10,15],add_subplot:[0,2,5,10],added:[1,2,3,5,6,13],addendum:3,adding:[0,2,4,13],addit:[0,1,3,4,5,6,7,8,10,12,13,15,16,17],addition:[5,10],address:[2,5,7,9,17],adjac:10,adjoint:3,adjust:[1,5,10],admir:1,advanc:[4,10,17],advantag:[2,3,4,5,8,13],afecionado:[],affect:[],affin:[1,6,9],aficionado:[],aforement:0,african:1,after:[0,1,2,3,4,5,7,9,10,12,13,15],afterward:1,again:[0,1,2,3,4,5,6,8,9,10,15],against:[2,5,8],age:[1,5],agegroup:5,agegroupmean:5,aggreg:[7,8],agorithm:8,agre:[3,15],ahead:7,aid:9,aim:[0,1,2,4,5,9,12,13],ainv:3,aka:3,alarm:3,albeit:0,algebra:[1,3,5,12,14],algo:15,algorithm:[1,2,3,4,5,6,12,13,14,15,17],align:[1,3,4,5,6,15],all:[0,1,2,3,4,5,7,8,9,10,12,13,14,15,16,17],allevi:[2,5],alloc:13,allow:[1,2,3,4,5,6,8,12,13],almost:[1,2,4,5,6,9,15],alon:7,along:[0,3,4,7,8,9,12,13],alpha:[0,1,2,3,4,5,6,7,8,15],alpha_:8,alpha_i:5,alpha_k:5,alpha_m:8,alpha_opt:5,alreadi:[3,8,10,12,13,15],also:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,17],alter:[2,15],altern:[1,2,3,5,6,7,9,13],although:[2,3,4,5,6,8],alwai:[0,1,3,4,5,10,15],ame2016:1,american:1,among:[1,3,7,8,10],amongst:3,amount:[0,1,2,4,6,8,12],an_:15,anaconda3:[1,2,4,5,6,9],anaconda:[1,2,12],analog:5,analys:[4,15],analysi:[2,4,5,13,14,17],analyt:[1,3,4,5,10,12],analyz:[1,2,3,15],andrew:2,angl:[1,7,15],ani:[0,1,2,3,4,6,7,8,10,15],anim:10,ann:10,annot:[1,2,5,6],anoth:[1,2,3,4,5,6,8,9,10,13,15],ans:15,ansatz:1,answer:[1,2,3,4,13],anymor:[2,6],anyon:6,anyth:[2,15],anytim:16,apach:2,apart:[5,9],api:[2,12],appear:[1,2,5,13,15],append:[2,4,5,6,7,15],appendcon:3,appendvar:3,appli:[1,2,4,5,6,7,8,9,10,15,17],applic:[1,2,3,4,5,7,10,15,17],approach:[2,3,4,5,7,8,9,10,12,15,17],appropri:[4,5,7,10,12,15],approx:[1,5,8,9,15],approxim:[1,2,3,4,5,8,9,15],apt:[1,12],aptli:0,aragorn:[],arang:[2,4,5,7,8,10],arbitrari:[2,5,6,10,15],arbitrarili:[1,2,9],architectur:[10,17],area:[1,17],arg:4,argc:15,argmax:[2,9],argmin:[0,8],argsort:9,argu:[2,5],arguabl:0,argument:[1,3,5,9,10,15],argv:15,aris:[1,4,5,10,15],arithmet:[1,5,13],arma:15,armadillo:[13,15],around:[1,2,3,4,9,15],arrai:[0,1,2,3,4,5,6,7,9,10,12,15],arraybox:5,arriv:[1,7,9,13,15],arrow:10,arrowprop:6,art3d:5,art:[1,2,12],articl:[0,1,4,8,15],artifici:[1,5,10,17],artificialneuron:10,artist:4,arug:5,asarrai:[1,7],asc:3,ascii:15,ask:[3,4,9,10],aspect:[1,12],assembl:1,assess:[1,4],assign:[0,1,5,6,7,10,14,17],assign_points_to_clust:0,associ:[0,1,4,7,10,15],assum:[0,1,2,3,4,5,6,7,8,9,10,13,15],assumpt:[1,3,4,7,9,15],ast:[1,3,4],astyp:[7,8],asymmetri:1,asymptot:4,atoi:15,atom:1,attempt:[1,5,6,8],attend:14,attent:[1,13],attr:[],attract:[1,8],attribut:[1,7],attributeerror:4,audi:1,aurelien:[1,14,17],author:[1,2,8,15],authour:1,auto:[7,8,15],autocor:15,autocorrelation_tim:15,autocorrelform:15,autocovari:15,autoencod:12,autoencond:12,autograd:[5,12],autom:[1,12],automac:13,automag:[],automat:[1,2,9,12,13],autonom:17,avail:[1,2,4,8,9,12,13,14,17],averag:[0,1,2,4,5,7,8,15,16],avg:15,avoid:[0,1,3,4,5,7,9,13],awai:15,awar:8,award:16,axes3d:5,axes:[1,4,5,6,7,8,9],axessubplot:1,axhlin:6,axi:[0,1,2,4,5,6,7,8,9,10,15],axiom:3,axlabel:1,axvlin:6,b_1:[5,10],b_2:5,b_5:5,b_group:7,b_i:[1,2,10],b_ia_:1,b_index:7,b_j:[2,10],b_k:[2,5,10],b_m:10,b_score:7,b_valu:7,bachelor:14,back:[1,3,6,7,8,13,15],backbon:13,backend:2,background:17,backpropag:2,backtrack:7,backup:13,backward:[2,10,13],bad:15,badli:15,bag:[7,12,14],bag_clf:8,baggin:[],baggingboot:8,baggingclassifi:8,baggingtre:8,balanc:4,band:13,bandwidth:13,bar:[1,9],barber:17,bare:8,barebon:0,base:[0,1,2,3,6,7,8,12,15,16,17],basi:[3,5,6,8,9,10,13],basic:[6,10,12,14,15],batch:[5,9,10],batch_siz:2,bay:5,bayesian:[3,12,17],be0d226abb41:5,becaus:[0,1,2,3,4,5,6,7,10],becom:[0,1,2,3,4,5,7,10,15],been:[1,2,4,5,9,10,12,13],befor:[0,1,2,3,4,5,6,10,13,15],beforehand:[0,1,15],begin:[0,1,2,3,4,5,6,7,9,10,13,15],behav:[2,4,5],behavior:[1,2,5],behaviour:10,behind:[1,2,5,6],being:[0,1,2,3,5,6,8,9,10,15],believ:[7,13],belong:[0,3,5,6,7],below:[1,2,3,4,5,6,7,8,9,10,13,15],benchmark:8,bendik:16,benefici:[2,5],benefit:[1,2,5,9,12],bengio:[2,14,17],benign:[2,5],besid:3,bessel:3,best:[0,1,2,3,4,5,6,7,8,10,15,16],beta:[1,2,3,4,5,8,9],beta_0:[1,2,3,5],beta_0x_:1,beta_1:[1,2,3,5,8],beta_1x_0:1,beta_1x_1:[1,5],beta_1x_2:1,beta_1x_:1,beta_1x_i:5,beta_2:[1,5],beta_2x_0:1,beta_2x_1:1,beta_2x_2:[1,5],beta_2x_:1,beta_:[1,5],beta_i:[1,3],beta_j:[1,3,5],beta_k:5,beta_linreg:5,beta_m:8,beta_mg_m:8,beta_p:5,beta_px_p:5,better:[0,1,2,3,5,7,8,9,10],between:[0,1,2,3,4,5,6,7,9,10,15],beyond:[1,2,3,5,6],bia:[1,2,3,5,6,7,8,10,14,15],bias:[2,3,4,7,10],big:[0,1,2,3,4],bigger:2,bigr:10,bike:7,bilbo:[],bilek:16,billion:[10,12],bin:[1,4,5,15],binari:[1,3,5,7,8,10,14,15],bind:[1,4],binomi:12,binsboot:4,bioinformat:1,biolog:[2,10,17],bios1100:12,bird:1,birth:[],bishop:[14,17],bit:[0,2,13,15],bitwis:15,bla:[3,13],black:[0,6,7],block:[0,4,8,12,13],blockingavg:15,blockingstd:15,blockingvar:15,blocksiz:15,blocksizemax:15,blocksizemin:15,blue:1,bmatrix:[1,2,3,5,6,9,13],bmi:2,bodi:[1,2,10],bold:2,boldfac:[1,3],boldsymbol:[0,1,2,3,4,5,6,8,9],boltzmann:[10,12],book:17,bool:0,boost:[2,7,12,14],boostrap:8,bootavg:15,bootstd:15,bootstrap:[2,12,14],bootvar:15,bootvec:15,borrow:[],boston_dataset:1,bot:6,both:[0,1,2,3,4,5,6,7,8,12,13,15,16],bottl:5,bottom:4,bound:[1,3,4,6,10],boundari:[6,9,10],boundkei:3,box:7,boyd:[5,6],bracket:15,brain:[2,5,10],branch:7,breast:[3,5,9],breviti:5,brew:[1,12],brg:6,briefli:1,bring:[1,3,8],broad:1,broadcast:0,browser:[],brute:[3,9],bsol:[],bsubex:[],build:[1,3,4,8,13,15],built:[1,2,4],bunch:9,busi:1,bzl:3,c46dd114b2af:6,c_0:15,c_1:10,c_2:10,c_3:10,c_4:10,c_i:[5,10],c_k:15,cach:8,cal:[1,5,6,8,10],calcul:[0,1,2,3,4,5,6,7,8,9,10,13],call:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,17],callabl:4,calor:1,cambridg:[5,17],came:0,can:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,17],cancel:[1,5],cancer:[3,8],cancerpd:5,candid:[6,7,8],cannot:[1,2,3,5,6,7,14,15],canopi:[1,12],cap:3,capabl:[1,2,5,6,12],capita:1,captur:[9,10],card:[1,5],cardin:2,care:[0,9],carefulli:5,carlo:[1,4,12,15,17],carri:[4,5],cart:8,casella:17,cast:2,categor:[1,2,7,9],categori:[0,1,2,5,8,10,14],categorical_crossentropi:2,caus:[1,3,4,15],causal:1,causat:1,cax:2,cbar:2,ccc:[3,10],cdf:15,cdot:[0,1,4,5,10,13,15],celebr:5,center:[0,1,2,4,5,6,7,9,15],centr:17,central:[1,3,4,6,13],centroid:[0,15],centroid_differ:0,centroid_list:0,certain:[0,1,4,5,7,15],cha:1,chain:[2,5,12,15],challeng:0,chanc:[2,3,5,15],chang:[0,1,2,3,4,5,6,7,9,10,13,15],chapter:[0,1,4,8,9,13,14,17],charact:[1,3,6,15],character:[6,7,8,10,15],characterist:[1,2,5,8],charg:1,charl:1,chd:5,chddata:5,cheap:3,cheaper:[2,5],chebychev:0,check:[1,2,3,5,9,13],check_consistent_length:[],chemic:15,chen:8,choic:[0,1,2,4,5,7,10,13,15],choleski:[3,13],choos:[0,4,5,7,8,9,15],chosen:[1,2,4,5,6,7,8,15],chosen_datapoint:2,christian:17,christoph:[14,17],cin:15,circ:[2,10],circl:[1,6,10],circumfer:7,circumv:[2,3,5],clariti:[0,15],class_nam:7,class_val:7,class_valu:7,classic:[5,7],classif:[1,3,4,5,6,9,10,12,14,17],classifi:[1,2,5,7,8,9],classificaton:2,classifii:8,clean:2,clear:[2,3,5,8,10],clearer:0,clearli:[1,3,4,5,6,15],clever:[0,2,8],clf3:1,clf:[1,6,7,8],clf_ridg:[],clip:15,close:[0,1,2,4,5,6,7,9,10,15,17],closer:[3,5],closest:[0,5,6,9],closur:12,cloud:12,clust:0,cluster:[1,2,4,9,12,14],cluster_label:0,cmap:[1,2,6,7,8],cmath:15,cmb:14,cmd:7,cn_:15,cnn:10,cntk:12,code:[4,5,6,12,13,14,17],coef0:6,coef:1,coef_:[1,3,5,6,7],coeffici:[1,3,4,5,6,7,13],coerc:[1,4],coin:[8,15],coin_toss:8,col:[1,9],colab:12,cold:7,colinear:1,collaps:6,collect:[1,4,8,9,12,15,17],collinear:3,color:[1,4,6,7,8,15],colorbar:2,colsample_bytre:8,colsaobject:8,column:[1,2,3,4,5,6,7,9,10,13],columntransform:7,com:[12,16,17],combin:[2,3,4,5,8,15],come:[0,1,2,3,5,10],comma:[],command:[1,2,15],comment:1,commerci:[1,12],commod:1,common:[0,1,2,3,4,5,7,9,15],commonli:[0,1,2,4,5,7],commun:[1,10],compact:[0,1,2,3,4,5,7,9,10],compar:[0,1,3,4,5,9,13],comparison:5,compat:5,compet:1,competit:8,compil:[1,2,12,13,15],complet:[1,7,10],completenn:10,complex:[2,3,4,5,6,7,9,10],complic:[0,1,2,4,5,7],compon:[0,1,2,3,4,5,7,12,14],components_:9,compos:[0,7,10],compphys:[12,14,17],compress:1,compris:4,compromis:3,compulsori:12,comput:[0,1,2,3,4,5,6,8,9,10,12,13,14,17],computation:[1,4,5,7,15],con:3,concaten:0,concav:[2,5],concentr:[1,8],concept:[0,1,12],conceptu:[5,10],concern:[0,1,2,5],concic:[],conclud:[1,3],conclus:2,conda:[1,2,12],condit:[1,3,4,5,6,7,9,15],conduct:12,coneqp:3,confid:[1,3,4,5,6],confirm:[3,10],confus:[3,4,8,13],confusion_matrix:7,congruenti:15,conjug:6,conjugaci:5,connect:[1,2,5,7,9,10,13],consequ:[3,4,5,6,8,10],conserv:[0,3],consid:[0,1,2,3,4,5,6,7,8,10,13,15],consider:[1,2,3,5],consist:[1,2,4,5,10,15],constant:[1,3,5,6,10,15],constitu:1,constitut:4,constrain:[2,3,5,9],constraint:[3,5,6],construct:[1,2,3,4,5,6,7,8,9,13,15,17],contact:1,contain:[0,1,3,4,5,6,7,9,10,13,15,17],contemporari:17,content:[2,12,13],context:[4,5,8],continu:[1,2,3,4,5,6,7,8,10,13],contour:[5,7,8],contourf:[6,7,8],contrast:[2,7,8,10],contribut:[1,3,15],contributor:1,control:[1,2,5,7,12],conveni:[1,3,4,5,10,13],convent:10,converg:[0,1,2,3,5,6,9],convergencewarn:[1,2,5,6,9],convert:[1,2,3,5,7,9,13],convex:3,convinc:5,convolut:[2,12,14],cool:7,coordin:[0,3,10],coorel:1,copi:[0,1,2],core:8,corel:1,coronari:5,corr:[1,3,5,9],correalt:[9,12],correct:[0,1,2,3,5,13,15],correctli:[2,4,8],correl:[1,2,3,5,8,10,12],correlation_matrix:[1,3,5,9],correspond:[0,1,3,4,6,7,9,10,12,13,15],cortex:10,cos:[1,4,5,7],cosin:[0,4],cost:[1,3,4,5,6,7,10,15],could:[1,2,3,4,5,6,7,8,9,10,13,15],coulomb:1,count:[1,7,14,15,16],countor:5,coupl:3,cours:[1,2,3,9,14,15],courvil:[14,17],cout:15,cov:[3,4,9,13,15],cov_xi:[3,9],cov_xx:[3,9],cov_yi:[3,9],covari:[1,5,12,13],covariance_matrix:[0,3,9],cover:[1,3,11,12,17],covert:1,covxi:15,covxx:15,covxz:15,covyi:15,covyz:15,covzz:15,cpu:2,creat:[2,3,7,8,9,10,12],create_biases_and_weight:2,create_neural_network_kera:2,create_x:[3,9],credit:[1,5],crim:1,crime:1,criteria:[0,1,7,8,15],criterion:[5,7,8],cross:[1,2,5,7,8,12,14,15],cross_val_scor:4,cross_valid:[5,8],crossvalid:4,crucial:[2,15],csr_matrix:13,cstdlib:15,csv:[1,4,5,7],ctnk:2,cubic:1,cumbersom:3,cumsum:[8,9],cumul:[4,8],cumulative_heads_ratio:8,cup:3,current:[0,2,5],curs:1,curv:[5,8,10],curvatur:5,custom:[0,3],custom_cmap2:[7,8],custom_cmap:[7,8],cutpoint:7,cvxbook:5,cvxopt:[3,6],cyber:17,cycl:[0,2,10,15],d_f:5,dagger:[3,13],dai:[2,7,12],dalen:16,darget:7,darkr:15,dat:1,dat_id:[1,4,5,7],data1:0,data2:0,data3:0,data4:0,data:[0,3,4,6,8,10,13,17],data_id:[1,4,5,7],data_indic:2,data_panda:[],data_path:[1,4,5,7],databas:2,datafil:[1,4,5,7],datafram:[1,3,5,7,9],datapoint:[2,3,4,5,9],dataset:[0,1,4,5,6,7,8,9],date:1,daughter:8,david:17,dbh:2,dbo:2,dcomposit:13,dcost:3,dead:2,deal:[0,1,2,3,5,6,9,13,15],debt:5,debug:[3,4],decad:1,decai:[1,5,15],decent:8,decid:[1,3,4,7],decim:1,decis:[1,2,6,9,12,14,17],decision_funct:6,decision_tre:7,decisiontreeclassifi:[7,8],decisiontreeregressor:[1,7,8],declar:[1,13],decompos:[3,13],decomposit:[1,10],decompost:3,decorrel:[5,8],decreas:[2,3,4,5,8,9],deduc:1,deep:[5,10,12,14,17],deep_tree_clf1:7,deep_tree_clf2:7,deep_tree_clf:[7,8],deepen:12,deeper:[0,1],deeplearningbook:17,def:[0,1,2,3,4,5,6,7,8,9,15],def_covari:15,defect:3,defici:3,defin:[0,1,3,4,5,6,7,8,9,10,13,15],definit:[0,2,3,4,5,6,8,9,10,13],defint:15,degre:[3,4,6,7,8,9,15],del:2,delet:[4,15],deliv:14,delta:[0,1,5,6,10,15],delta_:[2,13],delta_h:[1,2],delta_j:10,delta_k:10,delta_l:2,delta_n:1,delug:12,delv:1,demand:5,demonstr:[1,3,4,5,9,10,12],denomin:[2,3],denot:[2,4,5,15],dens:[0,2],densiti:[0,1,4,15],depart:16,depend:[0,1,2,3,4,5,6,9,10,12,15],depict:15,deploy:[1,12],deprec:1,depth:[1,7,8,13],deriv:[1,2,4,5,6,8,9,12],descend:[3,7,9],descent:[1,2,6,10],descr:1,describ:[0,1,3,4,5,6,8,9,10,13],descript:[0,1,6,7],design:[1,2,3,4,5,8,9,10],designmatrix:1,desir:[0,1,3,5],despit:[2,10],destroi:13,det:[3,13],detail:[0,1,5,9,13],detect:[6,10],determin:[1,3,5,6,7,8,9,10,13,15],determinist:[5,15],dev:[2,15],develop:[0,1,3,6,8,9,10,12,13],deviat:[1,2,3,4],devis:10,df1:[],diag:[3,6],diagnost:[2,8],diagon:[1,3,5,13,15],diagonaliz:3,diagram:8,dict:6,dict_kei:1,dictionari:1,did:[0,1,2,3,5,8,9],die:2,diffeent:6,differ:[0,1,2,3,4,5,7,8,9,10,12,13,15,17],differenti:[12,13],difficult:[0,1,2,4,5,8,15],difficulti:[1,2,5],digit:[1,2,14,16],dilemma:5,dilut:2,dim:[0,9],dimens:[0,1,2,3,6,9,13],dimension:[0,1,3,4,5,7,9,12,13],dimensionless:1,diment:13,dimes:0,direct:[0,1,2,5,9,10],directli:[0,2,3,15],directori:[],disadvantag:1,discard:[4,9],disciplin:[1,10],disclaim:15,discourag:5,discov:1,discover:3,discret:[2,3,5],discrimin:[5,8,9],discuss:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,17],diseas:5,disk:[],disord:[2,5],displai:[0,1,2,4,5,6,7,8,9,10,15],displaystyl:[1,3],displot:1,disregard:1,dissimilar:[0,9],dist:0,distanc:[0,1,6,7,9,15],distance_list:7,distinct:[0,5,6,7,8],distinctli:6,distinguish:[1,5,6,15],distplot:1,distribut:[0,1,2,4,5,8,9,12,13],distrubut:[1,12],div:3,dive:[1,6],diverg:[2,5],divid:[1,2,3,4,6,7,9,10,15],divis:[4,5,6,7,13,15],dna:5,dnn:[1,2,10],dnn_kera:2,dnn_model:2,dnn_numpi:2,dnn_scikit:[1,2],doamin:3,doc:[12,14,17],doconc:[],document:[5,9],doe:[0,1,2,3,4,5,6,8,9,10,13,15],doesn:[7,10],dog:2,doi:0,doing:[1,3,4,9],domain:[3,5,6],domin:1,don:[0,1,2,5,6,9,12,15],done:[0,1,3,4,5,7,8,9,13,15],dot:[1,3,5,6,7,8,9,10,13,15],doubl:[13,15],doubli:2,down:[1,5,7,9,10],download:[1,2,3,13,17],dozen:2,drag:5,dramat:9,draw:[4,5,8],drawback:[1,2,5],drawn:[2,4,5,9,15],dre:3,drop:[1,2,3,4,5,9,15],dropna:[1,4],dtype:[0,1,2,13],dub:1,due:[0,2,3,4,5,6,8,10],dummi:1,dure:[1,2,6,7,9,12],dwell:1,dwh:2,dwo:2,dx_1:15,dx_n:15,dying:2,each:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16],eapprox:1,earli:[2,5],earlier:[1,3,5,6,7,9,10],eas:[0,7],easi:[1,3,4,5,6,7,8,9,10,12,13],easier:[3,4,5,6,7,15],easiest:5,easili:[1,2,3,5,6,7,8,9,10,13],eastern:16,ebind:1,eblock:7,econometr:[],economi:3,ecosystem:12,ect:14,edgecolor:4,edit:[],edu:5,educ:1,eface79dac2c:8,eff:15,effect:[2,5,8,15],effic:2,effici:[1,5,8,12,13,15],efron:[4,15],egrad:5,eig:[3,5,9,13,15],eigen:15,eigenpair:[3,9],eigenvalu:[1,3,5,6,9,13],eigenvector:[3,5,9],eight:13,eigval:[13,15],eigvalu:[5,9],eigvec:[13,15],eigvector:[5,9],eispack:13,either:[1,2,3,4,5,6,7,8,9,15],ekstrom:16,elabor:15,electr:[1,10],electur:17,eleg:9,element:[2,3,4,5,6,9,10,12,13,14,17],elementari:[5,8,13],elementwis:5,elementwise_grad:5,elessar:[],elif:0,elim:13,elimin:[3,6],els:[2,5,7,10,15],elu:2,elus:1,email:[14,16],embed:[1,9],embodi:4,emit:15,emner:17,emphas:[1,8,12],emphasi:[1,12,17],empir:[2,9,15],emploi:[1,2,3,4,5,9,15],employ:1,empti:[4,8],emul:10,enabl:9,encapsul:0,encod:[0,1,3,7,9],encompass:[1,15],encount:[1,2,3,5,15],end:[0,1,2,3,4,5,6,7,8,9,10,13,15],endl:15,endpoint:15,energi:[1,4],enforc:10,eng:17,engin:[1,2,12,15],english:17,enough:[1,4,5],ensembl:[2,7,14,15],ensur:[1,2,3,4,5,9,15],enter:[3,15],enthought:[1,12],entir:[2,5,7,12,15],entiti:[7,10,13],entri:[1,3,6,9,10,13],entropi:[2,5,8],enumer:[1,2,6],env:[3,15],environ:[12,17],eol:1,eosfit:1,epoch:[1,2,5,10],epsilon:[1,3,4,5],epsilon_0:1,epsilon_1:1,epsilon_2:1,epsilon_:1,epsilon_i:1,eqnarrai:[3,4],equal:[0,1,2,3,4,5,6,7,9,10,13,15],equat:[0,2,3,4,5,6,7,8,9,13,15],equilibrium:10,equiv:[5,13,15],equival:[1,2,3,5,6,9,12,13],erf:15,eriador:[],eridg:[],err:[1,8],err_:4,errat:5,errno:[],error:[2,3,4,5,7,9,10,12,15],error_estimate_corr_tim:15,error_hidden:2,error_output:2,escap:5,esl:0,esol:[],especi:[2,5,7,10],essenti:[0,1,3,7,8,10,15],establish:[1,8,9],estim:[1,2,3,4,5,8,9,12,15],estimated_mse_fold:4,estimated_mse_kfold:4,estimated_mse_sklearn:4,esubex:[],eta0:[5,6],eta:[1,2,5,6,10],eta_:5,eta_t:5,eta_v:[1,2],etc:[0,1,2,3,5,6,7,9,10,12,13,15],ethic:12,etsim:4,euclidean:[0,1],evalu:[1,3,4,5,7,15],evalut:5,even:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],event:[3,5,8],eventu:[3,4,5,9,10,16],everi:[0,1,2,3,4,5,7,8,9,10,12,15],everyth:10,everywher:5,evolv:1,exact:[1,3,5,9,10,13,15],exactli:[1,10,12],examin:4,exampl:[3,4,9,10,12,13,14,17],exce:[2,5,10],excel:[0,1,2,3,8,17],except:[3,4,6,7,15],excess:1,excit:1,exclud:[2,4,10],exclus:[1,2,4,15],execut:[3,5],exemplifi:5,exercis:[3,12,14],exhaust:4,exhibit:[1,6],exist:[0,1,2,3,4,5,6,7,13,17],exit:[3,13,15],exp:[1,2,3,4,5,6,8,9,10,15],exp_term:2,expand:[3,5,9],expans:[1,3,5,6,8,10],expect:[1,2,3,4,5,9,10,12],expectation_value_of_h_wrt_p:15,expens:[4,5,8,15],experi:[1,2,4,5,6,12],experiment:[1,4,7,15],expert:[2,7],explain:[0,1,5,7,8,9,15],explained_variance_ratio_:9,explanatori:1,explicit:[1,5,13],explicitli:[0,1],explod:2,exploit:[1,5,10],explor:[2,5,6,12],expon:2,exponenti:[1,2,3,5,8],export_graphviz:7,export_text:7,exporttext:7,expos:12,express:[1,3,4,5,8,10,13,15],exptmean:15,exptvari:15,extend:[3,5,9,12],extens:[1,10,12],extent:[1,2,4,17],extern:7,extra:[2,3],extract:[1,3,5,6,9,13],extrapol:1,extrem:[0,1,2,3,5,6,7,13],extremum:5,extrins:9,eye:[0,1,3,5,13],f11:1,f12:1,f13:1,f1_grad:5,f1d:5,f2_grad_x1:5,f2_grad_x1_analyt:5,f2_grad_x2:5,f2_grad_x2_analyt:5,f3_grad:5,f3_grad_analyt:5,f4_grad:5,f4_grad_analyt:5,f5_grad:5,f6_grad_analyt:5,f6d7a289d493:13,f7_grad:5,f7_grad_analyt:5,f8_grad:5,f9_altern:5,f9_alternative_grad:5,f9_grad:5,f_0:8,f_1:[5,8],f_2:[5,10],f_3:10,f_d:15,f_grad:5,f_grad_analyt:5,f_i:[4,10],f_m:8,face:5,facecolor:[4,6,15],facil:[1,12],facilit:10,fact:[1,2,3,5,7,9,10],factor:[1,2,3,5,7,8,9,13,15],factori:5,fafab0:[7,8],fail:[1,4,5,6,9,16],failur:5,fairli:[0,2,15],fall:[6,7,14],fals:[0,1,2,3,4,5,7,8],famili:[1,5,6,15],familiar:[1,3,6,12,13,15],famou:[4,10,13],far:[0,1,3,5,6,9,10,15],fashion:[1,7,8],fast:[2,4,5,8,10,12,15],faster:[2,9],fastest:5,favor:5,favorit:15,featur:[1,2,3,4,5,6,8,9,10,12,15],feature_nam:[1,2,5,7],feautur:7,fed:2,feed:[1,9,12,14],feed_forward:2,feed_forward_out:2,feed_forward_train:2,feedforward:[2,10],feel:[0,1,3,5,9,12,16],feet:1,few:[0,2,7,11,15],fewer:[1,7,9],ffnn:[2,10],field:[1,10,12],fifth:1,fig:[0,1,2,5,10],fig_id:[1,4,5,7],figaxi:15,figsiz:[1,2,4,5,6,7,8],figur:[0,1,2,3,4,5,6,7,8,10,12],figure_id:[1,4,5,7],figurefil:[1,4,5,7],file:[1,2,3,4,5,6,7,13,15],filenam:[1,15],filenotfounderror:[],fileout:15,fill:[3,7],financ:1,find:[0,1,2,3,4,5,6,7,8,9,10,12,15],fine:[0,1],finit:[3,4,5,10,15],first:[0,1,2,3,4,5,6,7,8,9,13,15,17],firsteigvector:9,fit:[2,3,4,5,6,7,9,10,15],fit_intercept:[1,3,4],fit_mod:7,fit_transform:[1,4,6,7,9],fiti:1,five:[1,7],fix:[1,4,5,8,9,10],fkkt:3,flag:0,flat:[5,10],flatten:[2,3],flexibl:[1,2,4,6,8,10],float32:7,float64:[1,13],flop:[3,13],flow:[2,10],fluctuat:3,fly:9,flyvbjerg:15,fmesh:5,focu:[1,3,4,12,17],focus:[2,5,13],fold:[4,7],folder:1,follow:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17],font:[1,5,15],fontdict:15,fontsiz:[2,6,7,8,15],fontweight:2,foral:6,forc:[1,3,8,9],forecast:10,forest:[1,2,7,12,14],forget:9,form:[1,3,4,5,6,7,9,10,12,13,15],formal:[0,15],format:[1,2,4,5,6,7,8,9,12,15,17],formatstrformatt:5,formul:[0,9],formula:[5,15],forth:10,fortran2003:12,fortran90:15,fortran:[1,12,13],fortun:[1,9],forward:[1,4,12,13,14],found:[2,3,4,5,10],foundat:12,four:[3,6,10,13,14],fourier:1,fourth:10,frac:[0,1,2,3,4,5,6,7,8,9,10,13,15],fraction:7,frame:5,framework:[2,6,8,15],frank:[3,9],frankefunct:[3,9],free:[1,5,9,12,13,15,16,17],freecodecamp:12,freedom:3,freeli:1,frequenc:[4,5,15],frequent:[1,5,6,7],frequentist:12,fresh:8,fret:0,fridai:14,friedman:[14,17],frodo:[],from:[0,1,2,4,5,6,7,9,12,13,14,15,16,17],from_cod:7,front:[1,3],fruit:0,fstream:15,fulfil:[3,10],full:[1,2,3,5,7,8,15],full_matric:3,fulli:[4,10,14,15],fun:12,func:4,functionali:9,fundament:[1,4,12],further:7,furthermor:[1,3,4,5,9,10,12],futur:[1,6,7],futurewarn:1,fys:16,g_1:8,g_2:8,g_m:8,gain:[0,2,3,5,7,8],galleri:1,gamge:[],gamma1:6,gamma2:6,gamma:[1,5,6,7,8,9],gamma_0:8,gamma_1:8,gamma_1x:8,gamma_:1,gamma_i:[1,6,15],gamma_j:5,gamma_k:5,gamma_m:8,gamma_x:1,gap:[3,6],gate:10,gather:[1,2,10],gaug:10,gaussbacksub:13,gaussian:[0,3,4,6],gaussian_point:0,gaussian_rbf:6,gave:5,gbc:14,gca:[4,5,6],gd_clf:8,gdclassiffiercgain:8,gdclassiffierconfus:8,gdclassiffierroc:8,gdm:5,gdregress:8,gemv:3,gen:15,gender:1,gener:[0,1,2,3,4,5,6,8,9,10,13,17],generallay:10,generate_simple_clustering_dataset:0,genom:12,geodes:9,geometr:[1,5],geometri:3,georg:17,geq:[3,5,6,7],geron:[1,14,17],get:[0,1,2,3,4,5,7,8,9,12,13,15],get_distances_to_clust:0,get_dummi:7,get_split:7,get_yaxi:6,getattr:4,getsolutionslic:3,gibb:12,gini:8,gini_index:7,git:[1,12],github:[1,12,14,17],gitlab:[1,12],give:[0,1,2,3,5,6,7,8,10,12,15,17],given:[0,1,2,3,4,5,6,7,8,9,10,13,15],glare:0,global:[5,15],glorot:2,gmail:16,goal:[1,5,7],goe:[0,1,2,3,4,5,13],going:[1,2,3,4,5,6,7,9,10],golden:5,gone:3,gong:2,good:[0,2,3,5,7,8,9,12,15,17],goodfellow:[14,17],googl:[0,2,12],got:2,gpu:2,grad:5,grad_analyt:5,grade:14,gradient:[1,6,7,10,12,14],gradientboostingclassifi:8,gradientboostingregressor:8,gradual:[0,2],graph:[2,5,7,9,10],graph_from_dot_data:7,graphic:[1,2,7],grasp:1,gray_r:2,great:5,greater:[2,5,15],greatli:5,greedi:7,green:[1,7,15],grid:[2,4,5,6,10,15],grossli:5,ground:1,group:[0,1,4,5,7,12,14],groupbi:1,grow:[2,7,8],growth:1,guarante:[1,5,15],guess:[0,2,5,8],guestrin:8,guid:2,h_1:5,h_2:5,h_m:8,habit:1,had:[1,2,4,5],hadamard:[2,10],half:[2,6,7],halv:8,hand:[1,2,3,5,9,10,12,13,14,15,17],handl:[1,2,3,7,9,12],handle_unknown:7,handsid:10,handwrit:10,handwritten:[2,3],happen:[0,2,3,5,8,15],hard:[2,5,6,8],hardcopi:12,harder:[1,2],has:[0,1,2,3,4,5,6,7,8,9,10,13,15],hasn:[1,2],hassl:[1,12],hast:12,hasti:[0,1,14,17],hat:[2,3,5,7,8,9,10,13,15],have:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],haven:2,hdf5:[],head:[1,8,15],header:1,heads_proba:8,health:1,hear:1,heart:[1,5],heatmap:[1,2,5],heavili:1,heavisid:2,height:2,held:5,help:[0,1,2,5,10],helper:0,henc:[1,3,4,5,6,7,8,10],her:5,here:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,17],hereaft:[1,6,10],hermitian:13,hessenberg:13,hessian:[1,3,5],heterogen:[7,8],hidden:[2,10],hidden_bia:2,hidden_bias_gradi:2,hidden_layer_s:[1,2],hidden_weight:2,hidden_weights_gradi:2,hierarch:[0,3],high:[0,1,2,3,4,5,7,8,9,12,13],higher:[1,2,3,4,5,6],highest:2,highli:[1,8,12,13,15,17],highwai:1,hing:6,hint:5,hip:12,hire:1,his:5,hist:[4,5,15],histogram:[1,4,5,15],histor:[5,9],histori:10,histplot:1,histtyp:4,hitherto:3,hjorth:16,hobbi:15,hoc:3,hoff:17,hold:[0,2,4,5,15],holder:1,home:1,homework:5,homogen:[2,5,7,8],hopefulli:[1,9,15],horizont:9,hors:5,hot:[2,7],hour:[2,12,14,15,16],how:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,17],howev:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],hspace:[1,6,8,15],hstack:2,htf:14,html:[5,9,12,14,17],http:[5,9,12,13,14,17],huang:1,huber:1,huge:[2,12],human:[1,2,7,10],humid:7,hundr:2,hungri:2,hybrid:14,hydrogen:1,hyperbol:[2,10],hyperparam:6,hyperparamet:[0,3,7],hyperplan:9,i_1:[3,4],i_2:[3,4],ian:17,idea:[1,2,4,5,7,8,10,13,15],ideal:[0,1,4,5,6,15],idem:4,ident:[3,4,5,10,13],identical:3,identifi:[0,1,2,5,6,7,9,10],idum:15,ieor:15,ifi:17,ifs:12,ignor:[1,2,7],iii:13,ijca2016907841:0,illustr:[0,3,5,8,10,12],imag:[2,7,9,10,17],image_path:[1,4,5,7],imagin:2,immedi:[1,12],implement:[0,1,3,5,6,7,8,9,10],impli:[3,4,5,13],implicitli:[9,15],impos:[1,9,10],imposs:[1,3],impress:[1,10],improv:[0,1,3,5,7,8,9],impur:7,imshow:2,in3050:17,in4080:17,in4300:17,in5400:17,inaccur:5,inact:10,inadequ:1,includ:[1,2,3,5,9,10,12,15,16,17],include_bia:[4,7],incom:10,inconsist:[],incorrect:2,incoveni:6,increas:[1,2,3,4,5,6,7,9,10,15],increasingli:15,ind:4,inde:[1,3],indent:15,indentationerror:15,independ:[1,3,4,5,6,10,15],index:[0,1,2,8,12,15,17],index_col:1,indic:[1,2,3,5,7,8,9],indispens:4,individu:[2,5,8,10,15],indu:1,indx:13,ineffici:[0,5],inequ:6,inequaltii:5,inertia:5,inf1000:12,inf1100:12,inf1100l:12,inf1110:12,inf3000:17,inf4490:17,inf5860:17,inf:1,infeas:7,infer:[1,2,4,17],inferenc:2,infil:[1,4,5,7],infin:[3,4,5,9],infinitesim:15,influenc:[4,8],influenti:2,info:[],inform:[0,1,2,4,5,7,9,10,13,17],infti:[5,15],ingeni:5,ingredi:[1,7],inher:4,inherit:13,initi:[0,1,2,4,5,8,13,15],initialis:15,inject:0,inlin:[0,1,2,3,4,5,6,7,8,9,10,13,15],inner:[4,5],innov:17,inplac:5,input:[0,1,2,3,4,5,6,7,8,10,13,15],input_dim:2,inputs:2,inputs_shuffl:[1,2],insert:[3,6,8,15],insid:[1,5],insight:[1,2,3,12,17],insist:5,inspir:[1,2,10,17],instal:[1,2,3,7,14],instanc:[1,2,4,5,7,9],instanti:8,instead:[0,1,2,3,4,5,6,7,9,13,15],institut:2,instruct:[1,2],int32:8,int64:1,int_0:15,int_:15,int_a:15,intak:1,integ:[0,2,5,13,15],integer_vector:2,integr:15,intellig:[0,1,17],intend:8,intens:2,intention:0,interact:[1,7,10,12],intercept:[1,5,6,9],intercept_:[1,5,6,7],interchang:[3,10,13],interconnect:2,interest:[1,2,3,4,5,6,7,10,12,15],interfac:[1,2,13],interior:[1,7],intermedi:13,intern:[2,8,10],interpol:[2,10],interpr:3,interpret:[1,2,5,7,8,10,13,14,15],interv:[1,3,4,5,15],intial:5,intimid:[],intract:1,intrins:[9,13,15],intro:[12,17],introduc:[1,2,3,5,6,8,10,13,15],introduct:[2,5,14,17],introductori:[1,13,17],intuit:[1,3,4,5,6,10],inv:[1,3,5],invalid:[2,6,13],invalu:[1,5,12],invari:2,invd:3,inver:6,invers:[1,5],invers_period:15,inverse_transform:6,invert:[1,3,5,8],invok:[1,6],involv:[1,4,5,9,10],iomanip:15,ios:15,iostream:15,ipca:9,ipynb:12,ipython:[0,1,2,4,5,6,7,8,9,12,13,15],irani:0,iri:[6,7],irreduc:4,irrelev:3,irrespect:1,isn:3,isnul:1,isomap:9,issu:[2,7,13],it_arrai:5,item:[1,5],items:13,iter:[0,1,2,4,5,6,9,15],itr:3,its:[0,1,2,3,4,5,6,7,8,9,10,12,13,17],itself:[3,4,10,15],jackknavg:15,jackknif:[4,12],jackknstd:15,jackknvar:15,jackknvec:15,jacobian:5,jargon:15,jensen:16,jerom:17,job:[6,8],join:[1,4,5,7],joint:3,journal:15,judg:5,julia:[12,13],jump:[0,15],jupyt:[0,1,12,17],just:[0,1,2,3,4,5,6,7,8,9,10,15],justif:1,justifi:8,k_mean:0,kappa_d:15,karim:16,karlsen:16,karush:6,keep:[0,1,2,3,5,9,13],keepdim:[2,4,8],kei:[1,2,10,17],kept:0,kera:[1,12,14],kernel:[1,2,12],kernel_regular:2,kernelpca:9,kev:1,kevin:17,keyword:13,kfold:4,kick:[2,5],kind:[0,1,5,6,10],kjm:12,kkt:[3,6],kktsolver:3,kmeanspoint:0,kn_k:0,know:[0,1,2,3,5,6,12,15],knowledg:[1,12],known:[2,3,4,5,6,7,10,13,15,17],kondev:1,kpca:9,kroneck:0,kuhn:6,kwarg:4,kwown:1,l1_l2:2,l1regl:3,l1regls_mosek2:3,l1regls_mosek:3,l_1:5,l_2:5,l_j:10,la_i:10,la_k:10,lab:[12,14],label:[0,1,2,3,4,5,6,7,8,10,12,13,15],labelencod:[5,8],labels:[6,7],labels_shuffl:[1,2],labor:0,laboratori:14,lack:[0,1],lagrang:[6,9],lambda:[1,2,3,4,5,6,8,10,15],lambda_0:9,lambda_1:[3,6,9],lambda_2:[6,9],lambda_:9,lambda_i:[6,9],lambda_iy_i:6,lambda_jy_iy_j:6,lambda_k:6,lambda_n:[3,6],lamda:2,land:[1,6],landmark:6,landscap:5,langl:[1,9,15],languag:[1,2,6,12,13,17],lapack:[3,13],laplac:3,laptop:12,larg:[1,2,3,4,5,6,7,8,9,12,13,15,17],larger:[1,3,4,5,6,8,9,15],largest:[6,9],lasso:[1,4,5,12,14],last:[0,1,2,3,4,5,6,7,8,10,13,15],later:[0,1,2,5,6,10,12,15],latex:[],latter:[1,3,5,6,9,13,15],lattic:10,law:1,layer:[1,5],lbfg:[5,7,8,9],lbl:4,lcc:[3,4],lda:9,ldot:[1,4,9,15],lead:[1,2,3,4,5,6,7,8,9,10,13,15],leaf:7,leaki:2,lear:5,learn:[3,4,6,7,8,10,13,14,17],learner:8,learning_r:[6,8],learning_rate_init:[1,2],learning_schedul:5,least:[0,1,4,5,6,8,9,12,13,15],leav:[1,2,3,4,7,9],lectur:[1,2,3,5,8,9,10,12,13,14,17],lecturenot:[12,17],left:[1,2,3,4,5,6,7,8,9,10,13,15],leftarrow:[6,10],legend:[1,3,4,5,6,7,8],len:[0,1,2,3,4,6,7,8,9,10,13,15],length:[1,2,5,6,7,12,15],leq:[0,1,3,5,6,15],less:[1,2,3,4,6,7,15],lessen:2,let:[0,1,2,3,4,5,6,7,8,9,10,13,15],letter:[1,13,15],level:[1,2,3,4,7,12,13,14],lib:[1,2,4,5,6,9],liblinear:[6,8],librari:[1,2,3,7,8,9,13,15,17],licens:[1,2,12],lie:[1,4,9,15],lies:[6,9],life:[1,2,6,10],lifetim:5,lift:0,light:[],like:[0,1,2,3,4,5,7,8,9,10,12,13,15],likelihood:[1,2,3,7],lim_:15,limit:[1,3,4,6,9,10,13],lin_clf:6,lin_model:1,lin_reg:7,linalg:[1,3,5,6,9,13,15],line1:6,line2:6,line2d:5,line3:6,line:[1,2,4,5,6,9,13,15],linear:[2,3,4,7,8,9,10,12,14,15],linear_model:[1,3,4,5,6,7,8,9],linear_regress:4,linearli:3,linearloc:5,linearregress:[1,4,5,7],linearsvc:6,liner:2,linerar:8,linewidth:[1,4,6,7,8],link:[1,7,10,12],linlag:3,linpack:13,linreg:1,linspac:[1,4,5,6,7,8,13,15],linu:16,linuek:16,linux:[1,2,12],liquid:1,list:[0,1,2,3,7,12],listedcolormap:[7,8],literatur:[0,2,5,17],littl:[2,7,10],live:6,lle:1,lloyd:0,lmb:[3,4],lmbd:[1,2],lmbd_val:[1,2],lmbda:5,load:[1,2,5,7,8],load_boston:1,load_breast_canc:[2,5,7,8,9],load_digit:2,load_iri:[6,7],loc:[1,4,5,6,7,8],local:[1,2,5,10],locat:6,log10:[3,4],log:[1,2,3,4,5,7,8,9,13],log_:1,log_clf:8,logarithm:[1,3,5,13],logic:[1,2,7],logist:[1,2,6,7,8,9,10,12,14],logisticregress:[5,7,8,9],logit:5,logreg:[5,7,8,9],logspac:[1,2,3,4],longer:[0,6,8,13,15],longest:0,loocv:4,look:[0,1,2,3,4,5,6,7,8,9,13,15],loop:[0,2,4,8,10,12,13,15],lose:2,loss:[1,2,3,4,5,6,8,9,13],lot:[0,1,2,4],low:[1,4,7,8,9,15],lower:[1,2,7,8,13],lowercas:13,lowest:[5,7,15],lstat:1,lstsq:1,lubksb:13,ludcmp:13,lux:13,lvert:2,m_1:0,m_h:1,m_k:0,m_l:10,m_n:1,m_p:1,m_t:5,machin:[2,3,4,7,8,9,10,13,14,17],machinelearn:[12,14,17],mackai:17,made:[1,2,3,4,5,7,9,10],mae:1,magic:0,magnitud:[2,5],mai:[1,2,3,4,5,6,7,9,10,12,13,15],mail:14,main:[1,2,3,5,7,13,17],mainli:[1,3,4,5,7],maintain:4,major:[2,4,5,7,8,13],make:[0,2,3,4,5,6,9,10,12,13,15,17],make_moon:[6,7,8],make_pipelin:[1,4,8],makedir:[1,4,5,7],makeplot:1,malcondit:13,malign:[2,5,7],mammographi:3,manag:[1,12],manhattan:0,mani:[0,1,2,3,4,5,6,7,9,11,12,13,15,17],manifold:9,manual:0,map:[0,1,2,4,5,6,9,10,15],margin:[1,3,6],marit:1,mark:[],marker:[1,5,13],markov:12,marsaglia:15,mask:15,mass:[1,2,3,5],massag:1,masses2016:1,masses2016ol:1,masses2016tre:1,masseval2016:1,master:14,mat1100:12,mat1110:12,mat1120:12,mat3155:14,mat4155:14,mat:12,match:[0,2,3,5],materi:[3,5,13],math:[0,5,10,13,15,17],mathbb:[0,1,3,4,5,6,9,10,13,15],mathbf:[1,3,4,5,6,13,15],mathcal:[2,3,4,5],mathemat:[0,1,5,9,10,12,13,15,17],mathemati:[],mathemt:[],mathrm:[0,1,2,3,4,5,6,7,8,9,10,15],matmul:[2,3],matnat:[16,17],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],matric:[1,2,5,6,9,12,13],matrix:[1,4,5,6,8],matshow:2,matter:5,max:[1,2,5,7,8,10],max_depth:[1,7,8],max_it:[1,2,5,6,9],max_iter:0,max_leaf_nod:8,max_sampl:8,maxdegre:[1,4,8],maxdepth:8,maxim:[2,3,5,6,9],maximum:[0,1,2,3,5,6,7,8],maxpolydegre:[3,4],mbox:[3,4],mcculloch:10,mcint:15,mcintsqr2:15,mean:[2,3,4,5,7,8,9,10,12,13,14],mean_absolute_error:1,mean_divisor:0,mean_i:15,mean_matrix:0,mean_squared_error:[1,4,5,8],mean_squared_log_error:1,mean_vector:0,mean_x:15,meaning:[1,5],meansquarederror:1,meant:[5,8],meantempvec:15,meanvec:15,measur:[0,1,2,3,4,7,9,10,15],mechan:[1,15],median:1,medicin:10,medium:[5,6],medv:1,meet:[1,16],mehta:1,memori:[5,9,10,13],mention:[0,1,5,10,15],mere:1,mersienn:15,meshgrid:[3,6,7,8,9],messag:[3,5],met:[1,6],meteorolog:7,method:[0,1,2,3,6,9,10,12,13,14,17],metric:[0,1,2,4,5,7,8],metropoli:12,mev:[1,15],mglearn:12,mgrid:5,mhjensen:[1,2,5,6,9],microsoft:17,mid:2,midpoint:7,might:[1,2,5,7],mild:7,miller:15,million:1,mimic:10,min:[1,3,6,7],min_:[0,1,3],min_samples_leaf:7,mind:[0,1,5],mine:12,mini:[2,5,9,10],minibatch:[2,5,9],minibathc:5,minim:[0,1,2,3,4,5,6,7,8,9,10,15],minima:[1,2,5],minimum:[1,2,4,5,6,7,9],minkowski:0,minmaxscal:1,minor:15,minst:2,minu:5,mirror:7,misclassif:[6,7,8],misclassifi:[6,8],miser:1,mismatch:2,miss:[1,8],mit:17,mix:2,mixtur:5,mkdir:[1,4,5,7],mlab:[4,15],mle:[3,5],mlp:2,mlpclassifi:2,mlpregressor:1,mnist:[2,9],mod:15,mode:[14,15],model:[0,3,4,5,6,7,8,9,12,15,17],model_select:[1,2,3,4,5,7,8,9],moder:8,modern:[1,4,5,12],modif:[5,10],modifi:[1,2,3,5,6,8,10],modul:[1,4,5,7,8,9,13],modular:15,modulenotfounderror:7,modulo:15,moe:[3,9],moment:[3,4,5],monitor:5,monoton:[3,10,15],mont:[1,4,12,15,17],montecarlocycl:15,moor:3,more:[1,2,3,4,5,6,7,8,9,10,12,14,15],moreov:1,morten:16,mosek:3,most:[0,1,2,3,4,5,6,7,8,9,10,12,15],mostli:[2,9],motion:[1,5],motiv:2,move:[0,1,3,5,7,10,15],mpl:[1,5],mpl_toolkit:5,mplot3d:5,mplregressor:2,mse:[1,3,4,7,8],mse_simpletre:8,mselassopredict:3,mselassotrain:3,msepredict:3,mseridgepredict:3,msetrain:3,msg:1,msle:1,mt19937_64:15,mu0:15,mu1:15,mu2:15,mu_:15,mu_n:9,mu_x:15,much:[1,2,3,4,5,6,7,8,9,10,13,15],mul:3,multi:[1,2,5,12],multiclass:[2,5],multidimension:[9,10],multilay:2,multinomi:5,multipl:[3,4,5,10,15],multipli:[3,5,9,13,15],multiplum:6,multitud:[],multivari:[1,8,9,12,15],multivariate_norm:[0,9],murphi:[9,17],must:[0,2,3,4,5,6,8,10,15],mutat:5,mutual:[2,4,5],mx_:15,myriad:[1,12],mz1:15,mz2:15,n_0:[10,15],n_b:15,n_boostrap:[4,8],n_bootstrap:4,n_categori:2,n_cluster:0,n_compon:9,n_epoch:5,n_estim:8,n_featur:2,n_hidden_neuron:[1,2],n_i:15,n_input:[1,2],n_instanc:7,n_iter_i:[5,9],n_job:8,n_k:0,n_l:[10,15],n_layer:2,n_m:7,n_neuron:2,n_neurons_layer1:2,n_neurons_layer2:2,n_point:0,n_sampl:[0,4,6,7,8],n_split:4,nabla:[2,5],nabla_:5,nabla_w:5,nag:5,naimi:1,naiv:[0,5],nall:1,name:[0,1,2,3,4,5,6,7,8,10,12,13,16],nameerror:[5,8],namespac:15,narrow:5,nation:[2,3],nativ:12,natur:[1,2,5,6,7,10,15,17],navier:10,nb_:13,nbconvert:[],nboot:15,nearest:[2,9],nearli:5,neat:[],neccesari:4,necessari:[0,1,2,6],necessarili:[1,9,15],necesserali:3,neck:5,need:[0,1,2,3,4,5,6,7,8,9,10,13,15],neg:[1,2,3,4,5,8,15],neg_mean_squared_error:4,neglect:15,neglig:15,neighbor:9,neither:5,neq:[0,5,15],nervou:10,nest:[7,10],nesterov:5,net:10,netlib:13,network:[1,7,12,14,17],neural:[1,5,12,14,17],neural_network:[1,2],neuralnetwork:2,neuron:[2,10],neutral:1,neutron:1,never:[2,4,7,15],new_hobbit:[],new_sig:4,newaxi:[1,4,7],newli:1,newton:[2,5,6,15],next:[0,1,2,3,5,6,7,15],next_guess:5,nian:16,nice:[0,1,2,3,9],nichola:16,nicholaskarlsen1102:16,niter:5,nitric:1,nlambda:[3,4],nm_n:1,nmse:4,nn_model:2,node:[2,7,8,10],nois:[1,3,4,5,6,7,8],noisi:[2,4],non:[0,1,2,3,4,5,7,8,9,10,13,15],none:[0,1,2,3,4,5,7,8,15],nonetheless:0,nonlinear:[4,6,7,9,10],nonneg:[4,5,7],nonparametr:4,nonsens:15,nonsingular:13,nonumb:[5,6,13],nor:[2,5],norm:[1,2,3,4,5,6,9],normal:[3,4,5,6,7,8,9,10,12,13],normali:13,normpdf:4,notat:[0,1,3,4,5,15],note:[0,1,2,3,4,5,6,9,10,12,13,14,15,17],notebook:[0,1,2,7,12],noth:[0,2,3,6,10,15],notic:[3,5,10,13,15],novel:[4,8],novemb:2,now:[0,1,3,4,5,6,8,9,10,13,15],nowadai:[1,2,7,12],nox:1,np_assign_points_to_clust:0,np_get_distances_to_clust:0,np_k_mean:0,nsampl:4,nspin:15,nthi:1,nuclear:3,nuclei:[1,15],nucleon:1,nucleu:1,num_tre:8,number:[0,2,3,4,5,6,7,8,9,10,13,14,16],numberid:5,numer:[1,3,4,5,7,8,9,10,12,13,17],numpi:[0,1,2,3,4,5,6,7,8,9,10,12,15],nunmpi:3,obei:[5,9],object:[1,2,3,4,6,8,13],objsens:3,obliqu:3,observ:[0,2,3,4,5,6,7,8,9,10],obtain:[0,1,2,3,4,5,6,7,8,10,13,15],obviou:[3,9,15],obviouli:1,obvious:[1,3,13],occupi:1,occur:[1,6,7,15],odd:[1,5],oen:1,off:[2,3,4,5,7,15],offend:[],offer:[4,9,12,13,14],offic:16,offici:14,ofil:15,ofstream:15,often:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],ofter:13,old:[2,3,5,8],olsbeta:3,omit:[1,3],onc:[0,2,4,5,7,9,15],one:[0,1,2,3,4,5,6,7,8,9,12,13,15],onehot:2,onehot_vector:2,onehotencod:7,ones:[1,3,5,6,7,8,9,13],onli:[0,1,2,3,4,5,6,7,8,9,10,13,15],onlin:[9,14],onto:[3,9],open:[1,2,4,5,7,12,14,15],oper:[1,2,3,4,5,8,9,10,12,13,15],operation:15,opinion:0,oplu:15,opmiz:5,opportun:1,oppos:5,opposit:[2,3,6],opt:[1,2,3,4,5,6,9],optim:[0,1,3,4,7,8,9,14],optimis:2,option:[1,2,3,5,6,9],optmiz:[2,6],orang:1,order:[1,2,3,4,5,6,7,8,9,10,13,15],ordinari:[1,4,5,9,12,14],oreilli:17,org:[5,9,12,13,17],organ:[0,4,5,8,13],orient:[2,3,4,15],origin:[1,3,4,5,6,9,10,13,15],orthogn:3,orthogon:[1,3,5,6,9,13],orthonorm:3,oscar:2,oscil:5,oslo:[1,14,16],osx:[1,12],other:[0,1,2,3,4,5,6,8,12,13,14,17],otherwis:[1,2,5],ouput:[3,5,10],our:[2,4,6,7,8,10,12,13],ourmodel:1,ourselv:[0,1,3,5,6,9],out:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],out_fil:7,outcom:[1,5,7,8,10,15],outdoor:7,outer:10,outfilenam:15,outlier:[1,6],outlin:[4,8,9],outlook:7,outperform:8,output:[1,2,3,5,6,7,8,10,13],output_bia:2,output_bias_gradi:2,output_weight:2,output_weights_gradi:2,outputlayer1:10,outputlayer2:10,over1:5,over:[0,1,2,3,4,5,7,8,10,15],overal:[2,8],overcast:7,overcom:[5,10],overdetermin:1,overfit:[1,2,4,5,7,8],overflow:[2,3],overhead:10,overlap:[5,6,7],overlin:[0,1,3,4,7,8,9,13],overst:1,overview:[0,17],own:[3,5,6,10,12,13],owner:1,oxid:1,oyvinssc:16,p_i:[3,15],p_j:15,p_n:15,p_x:15,pack:1,packag:[1,2,3,4,5,6,9,12,15],page:[1,12],pai:[1,2,5,7],painless:[],pair:[1,7,12,15],panda:[1,3,4,5,7,9,12],panel:[],paper:2,paradigm:1,parallel:[8,13],paramet:[1,2,3,4,5,6,7,8,10,15],parameter:[1,8],parametr:[1,4],paramt:3,park:15,part:[0,1,2,3,4,8,13,14,15,17],partial:[1,2,3,5,6,8,9,10,15],particip:[12,14],particl:[1,5,15],particular:[1,2,3,4,5,7,8,9,10,15,17],particularli:[3,4,5,6,9,15],partit:[2,7],pass:[0,10,15],past:[8,15],patch:[4,15],path:[1,4,5,7,12],patient:5,pattern:[1,10,14,17],pauli:1,pca:[1,5,12,14],pcost:3,pdf:[1,3,4,7,17],pedagog:1,penalti:[4,5],penros:3,pentagon:5,peopl:[1,2,7,12],per:[1,2,4,14],percentag:[1,8,9],perceptron:[1,2,5],peregrin:[],perfect:[1,2],perfectli:4,perform:[0,1,3,4,5,6,8,9,10,12,13,15],perhap:[1,3,5],perimet:2,period:2,permut:9,persist:5,person:[3,5,14,16],perspect:17,pertin:10,petal:[6,7],peter:17,petersen:15,phantom:15,phase:10,phatak:0,phenomena:15,phi:6,phi_k:6,philip:16,philosophi:5,phone:16,phrase:1,physic:[1,2,5,10,15,16,17],pick:[0,2,5,7,8,9,15],pickl:2,pictur:1,pie:12,piec:[0,9],pillow:[1,12],pinv:3,pip3:[1,2],pip:[1,2,12],pipelin:[1,4,6,8],pippin:[],pise:0,pitt:10,pixel:2,pixel_height:2,pixel_width:2,place:[1,4,5,6,13],plai:[1,3,4,6,9,12],plain:[5,6,8,10],plan:[4,7,16,17],plane:[6,7],plateau:[3,15],platform:12,plausibl:10,pleas:[1,5,9],plenti:2,plethora:10,plot:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],plot_confusion_matrix:[5,8],plot_cumulative_gain:[5,8],plot_data:2,plot_dataset:6,plot_decision_boundari:[7,8],plot_import:8,plot_predict:6,plot_regression_predict:7,plot_roc:[5,8],plot_surfac:5,plot_train:7,plot_tre:[7,8],plt:[0,1,2,3,4,5,6,7,8,9,10,13,15],plu:[1,3,5],png:[1,4,5,7],point:[0,1,2,3,4,5,6,7,8,9,13,15,16],points_in_clust:0,poisson:12,poli:[4,6],poly100_kernel_svm_clf:6,poly3:1,poly3_plot:1,poly3dcollect:5,poly_featur:[6,7],poly_features10:7,poly_fit10:7,poly_fit:7,poly_kernel_svm_clf:6,polydegre:[1,3,4,8],polygon:5,polym:10,polynomi:[1,3,4,5,6,7,8,9],polynomial_featur:4,polynomial_svm_clf:6,polynomialfeatur:[1,4,6,7],polytrop:[1,4],poor:[2,5],poorli:1,popul:[1,3],popular:[1,2,4,5,6,7,9,10,12,13,15],popularli:1,portabl:8,portion:[5,9],pose:[1,3,9,15],posit:[0,1,2,3,5,6,8,9,13,15],possibl:[1,2,3,4,5,6,7,8,9,10,12,13,15,16],posterior:3,postpon:1,postul:3,potenti:[1,3,5,10],potr:3,potrf:3,pott:10,power:[1,2,3,4,6,7,10],practic:[1,3,4,6,15],practition:[1,2],pre:3,preced:[2,9,10,15],preceq:6,precis:[1,3,5,9,13,15],pred:4,predicit:1,predict:[1,2,3,4,5,6,7,8,12,17],predict_prob:2,predict_proba:[5,8],predictor:[1,3,5,7,8,9],prefer:[1,2,6,7,9,12],prepar:1,preprocess:[1,4,5,6,7,8,9],prerequisit:1,presenc:5,present:[1,3,5,7,10,15],preserv:9,press:[5,17],pretrain:2,pretti:[1,6,7,12],prev_centroid:0,prevent:[5,15],previou:[1,2,3,5,6,8,9,10,13,15],previous:[0,7,8,15],price:[1,5,7],primal:6,primari:[1,5],primarili:0,prime:15,princip:[1,3,5,12,14],principl:[0,1,4,5,6],print:[0,1,2,3,4,5,6,7,8,9,13,15],print_funct:[6,7],printout:1,prior:[1,3,4],privat:1,prob:[2,15],probabilist:[1,17],probabl:[1,2,4,5,8,12],problem:[1,3,4,6,7,8,9,10,12,13,14,15],proce:[1,3,5,6,7,8,9,13],procedur:[3,4,5,6,8,9],proceed:13,process:[0,1,4,5,7,8,10,12,13,15,17],prod:17,prod_:[2,3,5],produc:[0,1,3,5,7,8,9,10,12,13,15],product:[1,2,3,4,5,6,10,12,13],profess:1,profil:0,program:[0,1,2,3,6,10,12,13,14,15],programm:13,progress:[0,2],progression_plot:0,prohibit:4,project:[1,2,3,5,9,12,14,15,16],project_root_dir:[1,4,5,7],promin:10,promis:6,prone:7,pronounc:[5,12],proof:[1,5,9,10],prop:4,proper:[1,4],properli:[0,2,5,6,8],properti:[1,2,4,5,10,13],proport:[1,2,3,5,7,9,15],propos:[2,8],propto:[3,5],proton:1,prove:5,provid:[1,2,3,4,5,6,7,8,10,12,13,15,17],proxi:[2,5],prun:0,prune:7,pseudoinv:3,pseudoinvers:3,pseudorandom:15,psycholog:1,ptratio:1,punish:[1,2],pure:[7,15],purest:7,puriti:7,purpos:[0,1,8,10],put:2,putarow:3,putboundslic:3,putclist:3,putobjsens:3,putqobj:3,pycod:[],pydata:12,pydot:7,pyhton2:[],pylab:[1,5],pypi:12,pyplot:[0,1,2,3,4,5,6,7,8,9,10,13,15],pythagora:[0,3],python2:1,python3:[1,2,4,5,6,9,12],python:[2,3,5,6,9,10,14],pytorch:[1,12],qquad:[5,9,13],quad:[2,5,13],quadrat:[1,3,5,6,7],qualit:[7,15],qualiti:[1,7,12],quantifi:2,quantil:8,quantit:[1,4,7],quantiti:[0,1,3,4,5,7,8,9,10,13,15],quantum:10,quartil:1,queri:7,question:[1,3,4,5,7,9,10],quick:15,quickli:[2,5,7,9],quirk:0,quit:[2,3,4,7,8,10],quot:15,r2_score:1,r2score:1,r_1:7,r_2:7,r_j:7,r_m:7,rad:1,radial:[1,6,10],radioact:15,radiu:[1,2],rain:7,rais:4,ramp:2,ran1:15,ran2:15,ran3:15,rand:[1,3,4,5,7,8,13,15],rand_max:15,randint:[4,5,7],randn:[1,2,3,4,5,7,9],random:[0,1,2,3,4,5,6,7,12,13,14],random_devic:15,random_forest_model:8,random_index:5,random_indic:2,random_st:[1,5,6,7,8,9],randomforestclassifi:8,randomli:[0,2,4,5,7,15],randomnumbergener:15,rang:[0,1,2,3,4,5,7,8,9,10,13,15],rangl:[1,9,15],rangle_x:15,rank:3,raphson:[2,5,6],rapidli:1,rare:2,rate:[1,2,5,6,7,8,10],rather:[1,2,3,4,5,6,7,8,9,10,13,15],ratio:[5,7,8,9],rational:1,ravel:[3,4,5,6,7,8,9],raw:15,rbf:[6,9,10],rbf_kernel_svm_clf:6,rbf_pca:9,rcond:1,rcparam:[1,2,5,6,7,8,15],reach:[0,1,2,3,4,5,7,8,9,10,15],read:[0,1,3,4,5,6,9,10,13,14,15,17],read_csv:[1,4,5,7],read_fwf:1,readabl:0,reader:[1,13,15],readi:[0,1,2,3,6,8,9,10,13],readili:2,real:[1,2,4,5,8,9,10,13],realist:6,realiti:15,realiz:[2,10],realli:[1,2],rearrang:5,reason:[0,1,2,5,8,17],reassign:2,recal:[3,4,7,8,9,10,13,15],recalcul:15,receiv:[2,8,10,15],recent:[1,4,5,7,8],recept:10,recip:[1,5,13],reciproc:3,recogn:[1,3,8],recognit:[1,2,10,14,17],recommend:[1,5,6,12,13,14,15,17],reconsid:7,reconstruct:9,record:[8,14],recreat:15,rectangl:[4,5,7],rectangular:3,rectifi:[2,10],recur:[1,12],recurr:[1,2,12,14],recurs:[7,12,13],recycl:15,red:[1,4,6,7],redefin:[1,8],reduc:[2,3,5,7,8,9],reduct:[1,8,9,12,15],refer:[0,1,2,3,4,5,9,10,13,17],refin:10,refit:4,reflect:[1,2,15],refresh:[12,14],reg:[8,9],regard:[2,5,7],regardless:10,region:[7,10],regist:15,reglasso:3,regr_1:[1,7],regr_2:[1,7],regr_3:[1,7],regress:[2,4,6,9,10,12,14],regressor:[1,5,8],regridg:3,regular:[1,3,5,7],reilli:[1,17],reinforc:[1,6,12],reiter:2,rel:[1,4,5,7,10,15],relat:[0,1,2,3,5,9,13,15],relationship:[1,7],relativeerror:1,releas:[2,12],relev:[1,2,3,5,9,12,15],reli:[1,6],reliabl:[5,15],remain:[2,4,10,13,15],remaind:15,remark:2,rememb:[1,5,6,13],remind:[1,3,5,9,13,15],remov:[1,3],render:1,reorder:[3,5],reorgan:1,repeat:[0,1,2,3,4,5,7,8,9,13,15],repeated:1,repeatedli:[4,5,8,15],repetit:[4,14],rephras:5,replac:[0,1,2,3,4,5,8,10],replica:4,repositori:1,repres:[1,2,3,4,5,6,7,8,10,15],represent:[1,2,4,15],reproduc:[1,3,7,10,12,15],repuls:1,request:1,requir:[1,2,3,4,5,6,7,9,10,13],resampl:[1,5,8,12,14,15],rescal:[1,9,10],rescu:3,research:[1,12,17],resembl:[4,15],reserv:[2,3,4,15],reset:15,reshap:[0,1,2,4,6,7,8],residenti:1,residu:[1,3,5],resiz:3,respect:[0,1,2,3,4,5,6,8,9,10,15],respond:10,respons:[1,5,7,10],rest:[1,3],restat:[1,10],restrict:[1,7,10],result:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],ret:4,retail:1,retain:[3,4],return_data:0,return_x_i:7,reus:2,reveal:[1,10],revers:2,review:[12,13],revisit:0,reward:1,rewrit:[1,3,4,5,6,8,9,10,13,15],rewritten:[4,6,8,15],rewrot:5,rgoj5yh7evk:12,rho:[1,8],rho_1:8,rho_2:8,rho_m:8,rhs:3,rich:1,rid:0,ride:7,rideclass:7,ridedata:7,ridg:[1,4,5,9,12,14],ridgebeta:3,right:[1,2,3,4,5,6,7,8,10,13,15],rightarrow:[1,2,3,5,6,9,10,15],rigor:1,rise:1,risk:[1,5],river:1,rmse:1,rmsporp:5,rmsprop:[2,5],rnd_clf:8,rnn:10,rntrick1:15,rntrick2:15,rntrick3:15,rntrick4:15,robert:17,robust:1,robustscal:1,roc:8,role:[1,3,4,6,12],room:[1,16],root:[1,3,5,7,15],rot:[],rotat:[2,6,7,8],rotation_matrix:7,roughli:2,round:[1,5,7],routin:[5,13],row:[1,2,3,4,5,7,9,13],rrr:3,rthe:3,rug:5,rule:[1,2,3,5],run:[0,1,2,3,4,5,6,7,9,12],runtim:[0,2,4],runtimewarn:2,rust:[1,12,13],rvert:2,rvert_2:2,rwidth:4,s_i:5,saddl:5,safe:15,sai:[0,1,2,3,4,5,6,7,8,9,10,13,15],said:[4,5,7],sake:[1,3,5,9],sale:1,sam:[],same:[0,1,2,3,4,5,6,7,9,10,13,15],samm:8,sampl:[0,1,2,3,4,5,6,7,8,12,13],sample_vari:0,sampleexptvari:15,samwis:[],sanitize_sequ:4,sastri:9,satisfactori:1,satisfi:[2,4,5,6,13,15],satur:[2,4],save:[1,4,5,7],save_fig:[1,4,5,7,8],savefig:[1,4,5,7,15],saw:3,scalabl:8,scalar:[3,4,8],scale:[1,2,3,5,6,7,8,9,10,12,16],scaler:[1,5,6,7,8,9],scan:[3,5],scari:3,scatter:[0,1,2,4,5,6,7],scenario:5,schedul:5,scheme:[2,5],schrage:15,scienc:[1,2,5,8,10,12,14,15,17],scientif:[1,12],scientist:[0,1],scikit:[3,5,6,7,8,12,13,14,17],scikitlearn:[],scikitplot:[5,8],scipi:[1,3,5,12,13],score:[1,2,4,5,7,8,9,16],scores_kfold:4,scratch:2,sdg:5,seaborn:[1,2,5],seamless:[1,12],search:[1,2,3,5,7],sec:4,second:[0,1,3,4,5,6,7,9,10,12,13,15],secondeigvector:9,secondli:10,section:[0,9,11,13,14,15],sector:1,see:[0,1,2,3,4,5,6,8,9,10,12,13,14,15],seed:[0,1,2,3,4,5,6,7,9,15],seek:[2,6],seem:2,seemingli:1,seen:[1,2,3,8,10,15],segment:5,seldomli:1,select:[2,3,4,6,7,8,9,14,17],self:[2,3,4,15,17],semest:[5,14],semi:[5,6],send:[3,5,10,16],senior:14,sens:[1,4,6],sensit:[1,3,4,5,7],sentenc:10,separ:[0,1,2,4,6,7,10,12,15],sequenc:[0,5,7,8,10,12,13,15],sequenti:[2,8,10,15],seri:[1,2,3,5,8,9,10,13,14],serif:[1,5,15],serv:[1,2,3,5,17],session:[2,14],set:[0,2,3,4,5,6,8,9,12,13,15],set_:4,set_label:4,set_stream:3,set_tick:[2,6],set_ticklabel:2,set_titl:[0,1,2,5,10],set_xlabel:[1,2,5,10],set_xlim:[5,10],set_xticklabel:2,set_ylabel:[1,2,5],set_ylim:[5,10],set_ytick:5,set_yticklabel:2,setiosflag:15,setminu:4,setosa:[6,7],setosa_or_versicolor:6,setp:4,setprecis:15,setse:3,setup:[2,3,6,12],setw:15,sever:[1,3,4,5,6,7,9,10,12,13,14,15],sgd:[2,5],sgd_clf:6,sgdclassifi:6,sgdreg:5,sgdregressor:5,sgn:3,shallow:5,shape:[0,1,2,3,4,5,6,7,8,9,13],share:2,she:5,shift:[2,10,15],shire:[],shortcom:5,shorter:15,shorthand:[],shortli:13,should:[0,1,3,4,6,7,9,10,13],show:[0,1,2,3,4,5,6,7,8,9,10,13,15],shown:[1,3,5,6,9,10,15],showpoint:15,shrink:[3,6,9],shrinkag:3,shrunk:9,shuffl:[1,2,4,5],side:[1,3,5,6,10,13],sigh:12,sigma0:15,sigma1:15,sigma2:15,sigma:[1,2,3,4,5,8,9,10,13,15],sigma_0:3,sigma_1:3,sigma_2:3,sigma_:[3,13,15],sigma_fn:[5,10],sigma_i:[1,3],sigma_j:3,sigma_m:15,sigma_n:[9,15],sigma_t:5,sigma_x:15,sigmoid:[2,5,6,8,10],sigmundson:16,sign:[2,5,6,8,15],signal:[2,8,10],signific:2,significantli:[2,5,15],sim:[3,4,5,15],similar:[0,1,2,3,4,5,6,7,8,9,12,13],similarli:[1,2,3,6,8,15],simpl:[0,2,3,4,6,8,9,10,12,13],simplepredict:8,simpler:[0,1,2,3,5,12],simplest:[0,1,2,7,8,10],simpletre:8,simpli:[1,2,3,4,6,7,8,9,10,12,13,15],simplic:[0,3,5,6,7,8,9,10],simplicti:3,simplifi:[1,4,7,12],simplist:15,simul:[4,15],simultan:4,sin:[1,2,5,7,10,13],sinc:[1,2,3,4,5,6,7,8,9,13,15,17],sine:10,singl:[1,2,3,5,6,7,10,13,15],singular:[1,4,5,13],site:[1,2,4,5,6,9,14],situat:[1,3,5],six:15,size:[1,2,3,4,5,6,7,8,9,13,15],sketch:8,ski:7,skill:1,skip:9,skl:1,sklearn:[1,2,3,4,5,6,7,8,9],skplt:[5,8],slack:6,slice:13,slide:[1,15],slight:[4,5],slightli:[2,3,4,5,8,15],slope:[6,9,10],slow:[1,5,6],slower:[3,13],slowli:10,slp:2,small:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],smaller:[1,2,3,4,5,6,7,9,15],smallest:[0,1],smallest_row_index:0,smart:4,smooth:[1,5],sne:9,sneak:[],sns:[1,2,5],soar:4,social:1,soft:[2,5,8,10],soften:6,softmax:5,softwar:[1,6,12,13,14],sol:6,sole:1,solid:[1,5],solitem:3,soltyp:3,solut:[1,2,3,4,5,6,8,9,13,15],solutionsummari:3,solv:[1,2,3,5,6,8,9,10,13],solver:[3,6,7,8,9,13],some:[0,1,2,3,4,6,7,8,9,10,13,15],someth:[1,2,5,7,9,15],sometim:[0,1,2,5,9,10],soon:13,sophist:1,sopt:5,sort:[3,4,7,9,15],sound:3,sourc:[0,1,2,4,12,13,15],space:[0,1,2,3,5,6,7,9,10,15],span:[1,3,7,9,13],spare:2,spars:[3,13],sparse_mtx:13,sparsiti:8,spatial:[2,10],spdiag:3,speak:15,special:[4,5,8,10,13,15],specif:[1,2,3,4,5,6,7,9,10,12,13,15],specifi:[0,1,3,4,5,7,9,15],specifici:[1,8],spectral:2,speech:[1,2,10],speed:[2,5],spend:15,sphere:1,spite:1,spline:6,split:[0,2,3,4,6,7,8,9,15],splite:1,splitter:[2,8],spmatrix:3,spontan:15,spread:[1,9,15],springer:17,spuriou:5,sqquar:3,sqrt:[1,3,4,5,6,8,9,15],squar:[0,2,4,5,6,7,9,12,13,15],squarederror:8,squaredeuclidean:0,squash:10,srand:15,stabil:3,stabl:[1,3,5,7,9,12],stack:4,stage:[3,5],stai:[1,3,9],stand:[1,3,7,10],standard:[1,2,3,4,6,8,10,13],standardscal:[1,5,6,7,8,9],stanford:5,start:[0,1,2,3,4,5,6,7,8,9,10,13,15],start_tim:0,startpoint:15,stat:4,state:[0,2,3,5,6,8,9,10,12,15],statement:[1,5,13],statis:[],statist:[0,1,2,5,7,8,9,10,13,14,17],statu:[1,5,9],std:[1,4,15],stdev:15,stdout:3,steep:5,step:[0,1,2,4,5,7,8,9,10,13,15],step_fn:[5,10],step_length:5,steps_list:7,stian:16,still:[3,4,5,9,15],stimuli:10,stk2100:17,stk4021:17,stk4051:17,stk5000:17,stk:17,stochast:[1,2,3,4,6,9,10],stoke:10,stone:[1,5],stop:[0,2,5,7,9,15],storag:3,store:[1,2,5,9,15],str:2,straight:[1,4,5,6],straightforward:[1,3,4,5,6,7,8,13],strategi:[1,2,7],stratifi:4,streamtyp:3,strength:[0,1,3],stretch:9,strict:[5,6],strictli:[5,6],string:[2,15],stroke:5,strong:[7,8,10,15],strongli:[1,6,12,13],stronli:1,structur:[0,1,2,4,7,8,10,12],stuck:[2,5],student:[1,14,16,17],studi:[0,1,3,5,6,9,10,12,17],studier:17,style:[1,5,7],sub:[7,10],subdivid:[1,13],subfield:1,subject:[3,6,15],subplot:[0,1,2,4,5,6,7,8],subplots_adjust:[6,15],subprogram:13,subract:1,subroutin:1,subscript:2,subsequ:[2,3,4,10,13,15],subset:[2,4,5,7,10,12],subspac:[1,6,9],substanti:[7,8],substep:9,substitut:[4,10,13],subsubset:7,subtl:2,subtract:[1,3,4,5,9,13,15],subtre:7,succeed:1,success:[5,7,15],successfulli:7,sucess:15,sudo:[1,12],suffer:[1,2,3,8],suffici:[2,4,5,6,9],suggest:[2,5,17],suit:[6,10],suitabl:[1,15],sum:[0,1,2,3,4,5,6,7,8,9,10,15],sum_:[0,1,2,3,4,5,6,7,8,9,10,13,15],sum_i:[3,4,5,6],sum_k:[6,10,13],summar:[0,3,4,7],summari:[0,2,8,14],summat:[],sunni:7,superscript:[2,10],supervis:[1,3,4,5,7,10,12],supplement:5,support:[1,2,5,7,8,9,12],suppos:[1,3,4,5,6,8,9,10,13],suppress:[3,5],sure:2,surfac:1,surpris:1,surround:12,survei:[1,3],svc:[6,7,8],svd:[1,4,9],svdinv:3,svm:[6,7,8,9],svm_clf:[6,8],swath:3,symbol:[2,3,5,9,12,15],symmeteri:2,symmetr:[1,3,5,6,9,10,13],sympi:[1,12],synonim:15,syntax:[2,5,13],syntaxerror:[2,6,13],syrk:3,sys:[3,5],system:[1,2,3,5,7,8,10,12,13,17],systemat:[4,15],t_0:[5,7],t_1:5,t_b:8,t_i:[2,10],t_j:[3,10],t_k:7,tabl:[7,15,16],tabul:1,tabular:[],tackl:0,tag:[0,3,5,10,13,15],taht:1,tail:15,tailor:[6,9],taiwan:1,take:[0,1,2,3,4,5,6,7,8,9,10,12,13,15],taken:[1,2,4,5,8,13],tangent:[2,5,10],tanh:[2,5,6,10],target:[1,2,3,5,6,7,8,9,10],target_nam:7,task:[0,1,2,3,4,7,9,10],tau:[3,15],tax:1,taylor:5,taylornr:5,team:2,teaser:1,technic:[0,1,3],techniqu:[1,2,5,6,8,12,15,17],technolog:[1,2],tek5040:17,tell:[1,4,5,8,9,15],temp1:2,temp2:2,temp:2,temperatur:[1,7],temporarili:2,ten:[],tend:[0,3,4,5,6,7,8,10],tendenc:1,tension:4,tensorflow:[0,1,6,12,13,14,17],term1:[3,9],term2:[3,9],term3:[3,9],term4:[3,9],term:[0,1,2,3,4,5,6,7,8,9,10,15],termin:[1,3,5,7,8],test:[3,4,5,6,7,8,15],test_accuraci:2,test_data:0,test_ind:4,test_pr:2,test_predict:2,test_scor:[5,8],test_siz:[1,2,3,4,8],test_split:7,tester:[],testerror:[1,4],text:[1,2,3,5,6,7,9,13,15,17],textual:7,textur:2,than:[1,2,3,4,5,7,8,9,10,12,15],thats:0,theano:[2,12],thei:[0,1,2,3,4,5,6,7,9,10,13,15],them:[1,2,5,6,7,8,9,10,13],theme:1,themselv:[1,15],thenc:4,theorem:[4,5],theoret:[1,8],theori:[1,2,5,6,7,10,12,17],thereaft:[1,4,9,10,13],therebi:[1,3,5,9,15],therefor:[1,2,4,5,6,9,15],therein:9,thereof:[1,4,5],theta:[2,4,5,15],theta_:[2,5],theta_i:2,theta_k:15,theta_linreg:5,theta_t:5,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17],thing:[0,1,2,3,5,7,15],think:[0,1,2,4,5,7,10,15],third:[1,5],thirti:5,thorough:0,those:[0,3,6,7,8,9,13,14],though:[2,13,15],thought:[0,4,15],thousand:[1,2],three:[1,2,3,4,6,7,10,13,14,16],threshold:[2,5,7,8,9,10],through:[0,1,2,3,5,6,9,10,12,13,15],throughout:[0,1,3,12,13,15],thu:[1,2,3,4,5,6,8,9,10,15,16],thumb:1,thursdai:14,tibshirani:[14,17],ticker:[5,15],tight_layout:[2,5],tightli:9,tild:[1,3,4,9,15],till:[1,5,6,7,8,10,13],time:[0,1,2,3,4,5,6,7,8,9,10,13,14,15],timefunct:15,tini:2,tip:11,titl:[1,2,4,5,6,7,8,15],tmp:5,to_categor:2,to_categorical_numpi:2,to_numer:[1,4],to_str:15,togeth:[1,6,9],toi:0,told:5,toler:0,tomographi:10,too:[1,3,4,5,7,9,15,17],took:6,tool:[0,1,2,4,5,12,15],toolbox:6,top:[1,3,4,7,8,12],topic:[0,1,3,5,6,12,17],topolog:[2,10],toss:8,total:[0,1,2,4,5,6,8,9,10,15,16],totalclustervari:0,totalscatt:0,totalvari:15,toward:[2,5,10],town:1,tpng:7,traceback:[4,5,7,8],track:[0,5,13],tract:1,tractabl:1,trade:[3,4,7],tradeoff:[1,3,14],tradit:[1,2,4],train:[3,4,5,6,7,8,9,10],train_accuraci:[1,2],train_end:[1,2],train_ind:4,train_pr:2,train_siz:[1,2],train_test_split:[1,2,3,4,5,7,8,9],train_test_split_numpi:[1,2],trainerror:1,trainingerror:4,trait:1,tran:3,transfer:7,transform:[1,3,4,5,6,7,8,9,10,12,13],transit:10,translat:[2,8],transpos:[2,3,9],travers:1,treat:[1,2,4,5,10,15],tree:[1,2,12,14],tree_clf:[7,8],tree_clf_:7,tree_clf_sr:7,tree_reg1:7,tree_reg2:7,tree_reg:7,trend:15,trevor:17,tri:[5,7],triain:1,trial:[1,4,5,15],triangl:5,triangular:13,trick:[5,6,9,15],trickier:15,tridiagon:13,trillion:12,trivial:[1,2,3,9,15],troubl:[1,6,10],true_divid:2,true_fun:4,tucker:6,tumor:[5,7],tumour:5,tunabl:2,tune:[5,7,13],turn:[1,2,3,4,5,6,7,8,9,10,13,15],tutori:2,tweak:[2,8,15],twice:5,twist:9,twister:15,two:[0,1,2,3,4,5,7,8,9,10,13,14,15,17],tx_1:5,type:[1,2,4,5,6,8,13,15],typeerror:[],typic:[1,2,3,5,7,8,10,15],u_i:10,u_m:8,ubuntu:[1,12],uci:1,uio:[16,17],unari:13,unbalanc:[4,7],unbias:[1,3,4,15],uncertainti:[1,3],uncertitud:15,unchang:2,uncorrel:8,undefin:3,under:[1,2,3,4,5,8,12],underdetermin:1,underfit:[2,4],underflowproblem:3,undergo:3,undergradu:14,underli:[1,2,5,7,15],underset:0,understand:[0,1,2,3,5,8,12],understood:[0,5,6],undesir:6,undetermin:[3,6],unexpect:[4,15],unexpected:15,unfortun:[2,6,7,8],unicode_liter:[6,7],uniform:[1,2,3,5,9],uniform_real_distribut:15,uniformli:[5,15],unifrompdf:15,unimport:5,union:[3,4],uniqu:[0,1,4,5,13],unique_cluster_label:0,unit:[1,2,3,8,10,15],unitari:[3,13],unitarili:13,uniti:15,univari:15,univers:[1,2,5,14,16],unix:2,unknow:[1,13],unknown:[1,2,3,4,6,8,13],unknowwn:10,unlabel:2,unless:[1,4,5,9],unlik:[2,5,6,15],unnecessarili:7,unravel:2,unrol:9,unseen:[1,5,7],unstabl:2,unsupervis:[1,2,10,12,14],unsymmetr:13,until:[0,2,5,7,10,15],untouch:1,unusu:10,updat:[0,2,4,5,8,10],upload:[12,17],upon:[2,9,13],upper:[1,6,7,13],uppercas:[13,15],ups:[],usag:[1,6,12,15],usd10000:1,usd:1,use:[0,1,3,4,5,6,7,8,9,10,12,13,14],usecol:1,used:[0,1,2,3,4,6,7,8,9,10,12,13,15,17],useful:[1,2,3,4,5,7,9,10,12,13,15,17],useless:2,user:[1,2,5,6,9,12,13],uses:[1,2,3,4,7,9,10,13,15],usetex:15,using:[0,2,3,4,5,6,7,8,9,10,13],usr:15,usual:[0,1,5,10],util:[0,2,4,5,8],v_0:9,valid:[1,2,5,7,8,12,14,15],valu:[0,1,2,4,5,6,7,8,10,12,13],valuat:7,valueerror:[],van:1,vandenbergh:[5,6],vandermond:1,vanilla:[1,9],vanish:[2,5,15],var_x:15,varabl:6,varepsilon:[3,4],varepsilon_:[3,4],varepsilon_i:[3,4],vari:[1,2,4,8],variabl:[0,1,2,3,4,5,6,8,9,10,13],varianc:[0,1,2,3,5,7,8,9,12,13,14],variance_i:[3,9],variance_x:[3,9],variant:[1,2,4,5,6,10],variat:9,varieti:[1,10,12],variou:[2,3,4,5,6,7,9,10,12,13,15],vartempvec:15,varvec:15,vaue:2,vault:1,vdot:5,vec:[4,15],vector:[0,1,2,3,4,5,7,8,9,12],vector_mean:0,ventur:[1,6,12],verbos:2,veri:[0,1,2,3,4,5,6,7,8,9,10,15,17],verifi:[9,13],versatil:6,versicolor:[6,7],version:[0,1,5,8,12,13,15],versu:2,vert:[1,2,3,5,6,7,9],vert_1:3,vert_2:[3,9],vertic:4,via:[1,3,4,5,6,7,8,9,10,12,13,14,15],vidal:9,video:[1,2,10,12,14],view:[2,3,5,10,15,17],violat:6,virginica:7,viridi:[1,2],virtual:2,viscos:5,viscou:5,vision:1,visual:[1,9,10,12],visualis:2,viz:[6,15],vmax:2,vmc:15,vmin:2,volum:1,vote:8,voting_clf:8,votingclassifi:8,votingsimpl:8,vstack:[3,9,13,15],w_1:[6,13],w_1x_1:6,w_1x_:6,w_2:[6,13],w_2x_2:6,w_2x_:6,w_3:13,w_4:13,w_i:[2,8],w_ix_i:10,w_j:13,w_m:13,w_px_:6,w_px_p:6,wai:[0,1,2,3,4,5,6,8,9,10,11,13,15],walk:7,walker:15,wang:1,want:[0,1,2,3,4,5,6,7,8,9,10,12,15],warn:[1,2,6],warrant:4,watch:12,wavelet:6,weak:[0,7,8],weather:[2,10],web:[12,14],websit:[13,14],wedg:[6,15],wednesdai:14,wee:9,week:[3,5],weekli:[12,17],weight:[1,2,4,5,7,8,10,15],welcom:[6,12],well:[1,2,3,4,5,6,7,8,10,12,13,15,17],went:6,were:[0,1,2,3,4,5,6,8,9,10,15],wessel:1,what:[0,2,3,4,5,6,7,8,9,10,12,13,14],when:[0,1,2,3,4,5,6,7,8,9,10,13,15],whenev:[5,15],where:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16],wherea:[4,15],wherein:[2,10],whether:[1,3,5,7,15],which:[0,1,3,4,5,6,7,8,9,10,12,13,14,16],whichev:2,white:7,who:[1,14],whole:[0,2,3,7,9],whose:[1,4,8,15],whow:[3,9],why:[1,2,5],wide:[1,2,4,5,10,12,13],widehat:4,width:[1,6,7],wieringen:1,win:8,wind:7,wing:16,wiscons:5,wisconsin:8,wise:[1,2,3,5,10],wish:[0,1,3,5,6,9,13],with_std:1,within:[0,1,5,7,10,15,17],withinclust:0,without:[1,2,3,5,6,7,9,10],won:1,wonder:6,word:[0,1,2,3,15],work:[0,1,2,4,5,6,7,12,14,15],world:[1,6],worldwid:1,wors:[1,2,4],worth:7,would:[1,2,3,4,5,6,7,8,9,10,13,15],wrap:13,write:[1,2,3,5,6,10,11,13,14,15],written:[1,3,5,9,10,12,13,15],wrong:[2,6],wrongli:[8,15],wrote:[3,9],wrt:8,wth:8,www:[12,13,17],wx_1:6,x0s:6,x1_exampl:6,x1d:6,x1s:[6,7,8],x2d:[6,9],x2d_train:9,x2dsl:9,x2s:[6,7,8],x3s:6,x_0:[1,3,9,13],x_1:[1,3,4,5,6,7,8,9,13,15],x_2:[1,3,4,5,6,7,8,9,13,15],x_3:[6,13,15],x_4:13,x_center:9,x_data:2,x_data_ful:2,x_i:[0,1,2,3,4,5,6,7,8,9,10,13,15],x_ix_:1,x_iy_i:6,x_j:[1,6,7,10,15],x_jy_j:6,x_k:[0,10,13,15],x_l:15,x_m:[10,13,15],x_n:[1,4,5,6,9,10,13,15],x_new:[7,8],x_p:[5,7],x_poli:7,x_poly10:7,x_reduc:9,x_scale:6,x_test:[1,2,3,4,5,7,8,9],x_test_scal:[1,5,7,8,9],x_train:[1,2,3,4,5,7,8,9],x_train_scal:[1,5,7,8,9],x_val:2,xarrai:12,xavier:2,xbnew:5,xcode:[1,12],xdclassiffierconfus:8,xdclassiffierroc:8,xg_clf:8,xgb:8,xgbclassifi:8,xgboost:7,xgboot:8,xgbregressor:8,xgparam:8,xgtree:8,xi_1:6,xi_:6,xi_i:6,xlabel:[1,2,3,4,5,6,7,8,15],xlim:[4,8],xmesh:5,xnew:[1,5],xpanda:1,xpd:[3,9],xplot:1,xscale:1,xsr:7,xt_x:5,xtest:4,xtick:[4,6,7],xtrain:4,xytext:6,y_0:[1,3,9,13],y_1:[1,3,5,6,7,9,13],y_1y_1:6,y_1y_1k:6,y_1y_2:6,y_1y_2k:6,y_1y_n:6,y_1y_nk:6,y_2:[1,3,6,7,9,13],y_2y_1:6,y_2y_1k:6,y_2y_2:6,y_2y_2k:6,y_3:[1,7,13],y_4:13,y_data:[1,2,3],y_data_ful:2,y_decis:6,y_fit:1,y_i:[1,2,3,4,5,6,7,8,9,10,13],y_if_:8,y_ix_:1,y_ix_i:[5,6],y_iy_jk:6,y_j:[4,6,10],y_k:10,y_m:13,y_model:[1,3],y_n:[5,6],y_ny_1:6,y_ny_1k:6,y_ny_2:6,y_ny_2k:6,y_ny_n:6,y_ny_nk:6,y_plot:7,y_pred1:7,y_pred2:7,y_pred:[1,2,4,5,6,7,8],y_pred_rf:8,y_pred_tre:8,y_proba:[5,8],y_test:[1,2,3,4,5,7,8,9],y_test_onehot:2,y_test_predict:1,y_train:[1,2,3,4,5,7,8,9],y_train_onehot:2,y_train_predict:1,y_val:2,year:[1,12],yes:[4,5],yet:[1,2,4,5,6,9],yield:[0,1,3,4,5,6,8,10,13,15],ylabel:[1,2,3,4,5,6,7,8,15],ylim:4,ymesh:5,yoshua:[2,17],you:[0,1,2,3,4,5,6,7,8,9,12,13,15,17],young:1,your:[0,2,4,5,6,9,12,13,15],yourself:[5,9],youtub:12,ypred:4,ypredict2:5,ypredict:[1,5],ypredictlasso:3,ypredictol:3,ypredictridg:3,yridg:[],ytest:4,ytick:[4,6,7],ytild:[1,4],ytildelasso:3,ytildenp:1,ytildeol:3,ytilderidg:3,ytrain:4,z_0:13,z_1:13,z_2:13,z_c:2,z_h:2,z_i:[2,10],z_j:[2,10],z_k:10,z_m:2,z_mod:7,z_o:2,zaman:15,zero:[0,1,2,3,4,5,6,7,8,9,10,13,15],zm_h:1,zone:1},titles:["12. Clustering Analysis","3. Linear Regression","14. Building a Feed Forward Neural Network","4. Ridge and Lasso Regression","5. Resampling Methods","6. Logistic Regression","8. Support Vector Machines, overarching aims","9. Decision trees, overarching aims","10. Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods","11. Basic ideas of the Principal Component Analysis (PCA)","13. Neural networks","Content in Jupyter Book","Applied Data Analysis and Machine Learning, FYS-STK3155/4155 at the University of Oslo, Norway","2. Linear Algebra, Handling of Arrays and more Python Features","Teaching schedule with links to material","1. Elements of Probability Theory and Statistical Data Analysis","Teachers and Grading","Textbooks"],titleterms:{"2021":16,"4155":12,"case":[6,8,15],"final":10,"function":[1,2,5,6,8,9,10,15],"import":[3,13,15],And:[],Eye:8,FYS:12,OLS:3,RMS:5,The:[0,1,2,3,4,5,6,7,9,10,12,15],Useful:12,Using:5,activ:[2,10],actual:15,adaboost:8,adam:5,adapt:8,adjust:2,again:7,aim:[6,7],algebra:13,algorithm:[0,7,8,9,10],algortithm:5,all:6,analys:3,analysi:[0,1,3,9,12,15],ani:5,anoth:7,appli:12,approach:[1,6],approxim:10,architectur:2,arrai:13,assist:16,august:14,autocorrel:15,automat:5,back:[2,9,10],background:12,bag:8,base:5,basic:[0,1,3,5,7,8,9,13],batch:2,bay:3,befor:9,better:[6,15],bia:4,binari:2,binomi:15,bird:8,block:15,book:11,boost:8,bootstrap:[4,8,15],boston:1,breast:2,brief:[],bring:10,build:[2,7],calcul:15,cancer:[2,5,7,9],cart:7,central:[5,12,15],chain:10,chang:8,chi:1,choos:2,classic:9,classif:[2,7,8],classifi:6,clip:2,cluster:0,code:[0,1,2,3,7,9,10,15],collect:2,compar:8,complex:1,compon:9,comput:[7,15],con:7,concept:15,condit:[],conjug:5,content:11,continu:15,convex:[5,6],convolut:10,correl:[9,15],correspond:[],cost:[2,8],cours:[12,17],covari:[3,9,15],cross:4,cumul:15,cython:[],data:[1,2,5,7,9,12,15],dataset:2,decemb:14,decis:[7,8],decomposit:[3,9,13],deep:2,defin:2,definit:15,degre:1,demonstr:15,dens:1,deriv:[3,10],descent:[5,8],develop:2,deviat:15,diagon:9,dice:15,differ:6,differenti:5,dimension:6,disadvantag:7,discret:15,disguis:15,distribut:[3,15],doing:2,domain:15,down:2,dropout:2,economi:[],element:[1,15],elimin:13,ensembl:8,entropi:7,environ:1,equat:[1,10],error:[1,8],etc:[],evalu:2,event:15,exampl:[1,2,5,6,7,8,15],exercis:1,expect:15,experi:15,explor:1,exponenti:15,express:[],extend:[],extrem:8,fall:16,famili:2,famou:15,fantast:[],featur:[7,13],feed:[2,10],fine:2,first:10,fit:[1,8],forest:8,forward:[2,10],frank:[],freedom:1,frequentist:1,fridai:[],from:[3,8,10],further:3,gaussian:[13,15],gener:[7,15],geometr:9,gini:7,good:1,grade:16,gradient:[2,5,8],handl:13,has:12,hessian:[],homework:[],hous:1,how:15,hyperparamet:2,hyperplan:6,id3:7,idea:[0,9],ideal:[],implement:[2,15],implic:3,improv:2,increment:9,index:7,inform:16,instal:12,instructor:16,interpret:[3,9],introduc:9,introduct:[1,4,12,13],invers:[3,13],iter:8,its:15,jackknif:15,julia:[],jungl:8,jupyt:11,kera:2,kernel:[6,9],lagrangian:6,lasso:3,later:3,layer:[2,10],learn:[1,2,5,9,12],least:3,level:8,librari:12,likelihood:5,limit:[2,5,15],linear:[1,5,6,13],link:[3,9,14,17],logist:5,loss:[],machin:[1,5,6,12],main:15,make:[1,7,8],mani:[8,10],materi:14,math:3,mathemat:[3,6],matric:3,matrix:[2,3,9,10,13,15],matter:1,mean:[0,1,15],meet:[3,8,15],mercer:6,mersenn:15,method:[4,5,7,8,15],mlp:10,model:[1,2,10],moment:15,momentum:5,moon:[6,7],more:[0,13],multilay:10,multipl:2,multipli:6,name:15,need:[],network:[2,5,10],neural:[2,10],newton:[],non:6,normal:[1,2,15],norwai:12,notat:10,novemb:14,now:[2,7],nuclear:1,nueral:5,numba:[],number:[1,15],numer:15,numpi:13,numpython:0,observ:15,obtain:9,octob:14,one:10,optim:[2,5,6,12],ordinari:3,organ:1,oslo:[12,17],other:[7,9,10,15],our:[0,1,3,5,9,15],outcom:12,output:15,overarch:[1,6,7],overview:8,own:[0,1,8,9],packag:13,panda:[],part:[5,12],pass:2,pca:9,pdf:15,perceptron:10,perform:[2,7],period:15,perspect:2,poisson:15,practic:5,pre:2,preprocess:[],prerequisit:12,princip:9,pro:7,probabl:[3,15],problem:[2,5],procedur:7,process:2,program:5,prop:5,propag:[2,10],properti:[3,15],pseudo:15,python:[0,1,7,12,13,15],quick:6,ran0:15,random:[8,9,15],raphson:[],read:7,recip:15,recurr:10,reduc:1,regress:[1,3,5,7,8],regular:2,relev:17,relu:2,remind:[4,6],requir:12,resampl:4,revisit:5,ridg:3,rng:15,rule:10,sampl:[9,15],schedul:14,schemat:7,scikit:[1,2,9],select:15,semest:16,sensit:[],septemb:14,set:[1,7,10],sgd:[],should:[2,15],simpl:[1,5,7,15],singl:8,singular:[3,9],situat:15,size:[],slightli:[],soft:6,softmax:2,softwar:[],solv:[],solver:5,some:5,split:1,squar:[1,3,8],standard:[5,15],state:1,statist:[3,4,12,15],steepest:[5,8],step:[],stk3155:12,stochast:[5,15],stop:[],supervis:2,support:6,svd:3,teach:[14,16],teacher:16,techniqu:9,technolog:12,tensorflow:2,test:[1,2],textbook:17,than:[],theorem:[3,6,9,10,15],theori:15,three:15,tip:5,togeth:10,top:2,toss:15,toward:[0,9],tradeoff:4,train:[1,2],tree:[7,8],tune:2,two:[6,12],type:10,uncorrel:15,understand:[],uniform:15,univers:[10,12,17],use:[2,15],used:5,using:[1,15],valid:4,valu:[3,9,15],variabl:15,varianc:[4,15],variou:1,vector:[6,10,13],view:[1,8],visual:[2,7],wai:7,week:14,weekli:14,what:[1,15],when:[],which:[2,15],why:15,wisconsin:5,write:[0,9],xgboost:8,your:[1,8]}}) \ No newline at end of file diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb b/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb index 0dbf33b5b..8d73f71ab 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb +++ b/doc/LectureNotes/_build/jupyter_execute/chapter1.ipynb @@ -13,38 +13,37 @@ "\n", "\n", "\n", - "Our emphasis throughout this series of lectures \n", - "is on understanding the mathematical aspects of\n", - "different algorithms used in the fields of data analysis and machine learning. \n", + "Our emphasis throughout this series of lectures is on understanding\n", + "the mathematical aspects of different algorithms used in the fields of\n", + "data analysis and machine learning.\n", "\n", - "However, where possible we will emphasize the\n", - "importance of using available software. We start thus with a hands-on\n", - "and top-down approach to machine learning. The aim is thus to start with\n", - "relevant data or data we have produced \n", - "and use these to introduce statistical data analysis\n", - "concepts and machine learning algorithms before we delve into the\n", - "algorithms themselves. The examples we will use in the beginning, start with simple\n", - "polynomials with random noise added. We will use the Python\n", - "software package [Scikit-Learn](http://scikit-learn.org/stable/) and\n", - "introduce various machine learning algorithms to make fits of\n", - "the data and predictions. We move thereafter to more interesting\n", - "cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example).\n", - "These are examples where we can easily set up the data and\n", - "then use machine learning algorithms included in for example\n", - "**Scikit-Learn**. \n", + "However, where possible we will emphasize the importance of using\n", + "available software. We start thus with a hands-on and top-down\n", + "approach to machine learning. The aim is thus to start with relevant\n", + "data or data we have produced and use these to introduce statistical\n", + "data analysis concepts and machine learning algorithms before we delve\n", + "into the algorithms themselves. The examples we will use in the\n", + "beginning, start with simple polynomials with random noise added. We\n", + "will use the Python software package\n", + "[Scikit-Learn](http://scikit-learn.org/stable/) and introduce various\n", + "machine learning algorithms to make fits of the data and\n", + "predictions. We move thereafter to more interesting cases such as data\n", + "from say experiments (below we will look at experimental nuclear\n", + "binding energies as an example). These are examples where we can\n", + "easily set up the data and then use machine learning algorithms\n", + "included in for example **Scikit-Learn**.\n", "\n", "These examples will serve us the purpose of getting\n", "started. Furthermore, they allow us to catch more than two birds with\n", "a stone. They will allow us to bring in some programming specific\n", - "topics and tools as well as showing the power of various Python \n", - "libraries for machine learning and statistical data analysis. \n", + "topics and tools as well as showing the power of various Python\n", + "libraries for machine learning and statistical data analysis.\n", "\n", - "Here, we will mainly focus on two\n", - "specific Python packages for Machine Learning, Scikit-Learn and\n", - "Tensorflow (see below for links etc). Moreover, the examples we\n", - "introduce will serve as inputs to many of our discussions later, as\n", - "well as allowing you to set up models and produce your own data and\n", - "get started with programming.\n", + "Here, we will mainly focus on two specific Python packages for Machine\n", + "Learning, Scikit-Learn and Tensorflow (see below for links etc).\n", + "Moreover, the examples we introduce will serve as inputs to many of\n", + "our discussions later, as well as allowing you to set up models and\n", + "produce your own data and get started with programming.\n", "\n", "\n", "\n", @@ -286,7 +285,17 @@ "[gallery](https://matplotlib.org/gallery/index.html) of examples. In\n", "this example we plot our original values of $x$ and $y$ as well as the\n", "prediction **ypredict** ($\\tilde{y}$), which attempts at fitting our\n", - "data with a straight line.\n", + "data with a straight line. Note also that **Scikit-Learn** requires a\n", + "matrix as input for the input values $x$ and $y$. In the above code we\n", + "have solved this by declaring $x$ and $y$ as arrays of dimension\n", + "$n\\times 1$.\n", + "\n", + "In the code here we have also made a new array for $x\\in [0,1]$. Our\n", + "prediction is computed for these values, meaning that they were not\n", + "included in the data set used to *train* (or fit) the model.\n", + "This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set.\n", + "Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault!\n", + "\n", "\n", "The Python code follows here." ] @@ -301,7 +310,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -327,6 +336,7 @@ "y = 2*x+np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", + "# This is our new x-array to which we test our model\n", "xnew = np.array([[0],[1]])\n", "ypredict = linreg.predict(xnew)\n", "\n", @@ -451,7 +461,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -492,8 +502,7 @@ "Depending on the parameter in front of the normal distribution, we may\n", "have a small or larger relative error. Try to play around with\n", "different training data sets and study (graphically) the value of the\n", - "relative error. Note also that **Scikit-Learn** requires a matrix as input for the input values $x$ and $y$. In the above code we have\n", - "solved this by declaring $x$ and $y$ as arrays of dimension $n\\times 1$.\n", + "relative error.\n", "\n", "As mentioned above, **Scikit-Learn** has an impressive functionality.\n", "We can for example extract the values of $\\alpha$ and $\\beta$ and\n", @@ -517,18 +526,18 @@ "output_type": "stream", "text": [ "The intercept alpha: \n", - " [1.84860939]\n", + " [1.89992521]\n", "Coefficient beta : \n", - " [[5.2571699]]\n", - "Mean squared error: 0.25\n", - "Variance score: 0.90\n", + " [[5.12908963]]\n", + "Mean squared error: 0.20\n", + "Variance score: 0.92\n", "Mean squared log error: 0.01\n", - "Mean absolute error: 0.40\n" + "Mean absolute error: 0.36\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -721,7 +730,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -738,7 +747,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.0050000000000000044\n" + "0.005000000000000007\n" ] } ], @@ -1157,7 +1166,7 @@ "metadata": {}, "source": [ "The next step, and we will define this mathematically later, is to set up the so-called **design matrix**. We will throughout call this matrix $\\boldsymbol{X}$.\n", - "It has dimensionality $p\\times n$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit." + "It has dimensionality $n\\times p$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit." ] }, { @@ -1182,9 +1191,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note well that we have made life simple here. We perform a fit in terms of the number of nucleons only. A more sophisticated fit can be done by including an explicit dependence on the number of protons and neutrons in the asymmetry and Coulomb terms.\n", + "Note well that we have made life simple here. We perform a fit in\n", + "terms of the number of nucleons only. A more sophisticated fit can be\n", + "done by including an explicit dependence on the number of protons and\n", + "neutrons in the asymmetry and Coulomb terms. We leave this as an exercise to you the reader.\n", "\n", - "With **scikitlearn** we are now ready to use linear regression and fit our data." + "With **Scikit-Learn** we are now ready to use linear regression and fit our data." ] }, { @@ -1266,7 +1278,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As a teaser, let us now see how we can do this with decision trees using **scikit-learn**. Later we will switch to so-called **random forests**!" + "As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**!" ] }, { @@ -1310,7 +1322,7 @@ "270 3344 160 110 270 Ds 7.253775 7.253775\n", "\n", "[267 rows x 6 columns]\n", - "0.009883615646716186\n" + "0.009883615646716188\n" ] } ], @@ -1351,6 +1363,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "With a deeper and deeper tree level, we can almost reproduce every\n", + "single data point by increasing the max depth of the tree.\n", + "We can actually decide to make a decision tree which fits every single point.\n", + "As we will\n", + "see later, this has the benefit that we can really train a model which\n", + "traverses every single data point. However, the price we pay is that\n", + "we will easily overfit. That is, if we apply our model to unseen data,\n", + "we will most likely fail miserably in our attempt at making\n", + "predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced.\n", + "\n", + "\n", "The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) \n", "functionality." ] @@ -1363,18 +1386,6 @@ "editable": true }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", - " warnings.warn(\n", - "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", - " warnings.warn(\n", - "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", - " warnings.warn(\n" - ] - }, { "name": "stderr", "output_type": "stream", @@ -1454,8 +1465,6 @@ "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", " warnings.warn(\n", "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", - " warnings.warn(\n", - "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", " warnings.warn(\n" ] }, @@ -1463,6 +1472,10 @@ "name": "stderr", "output_type": "stream", "text": [ + "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", + "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n", "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", " warnings.warn(\n" ] @@ -1491,22 +1504,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", - " warnings.warn(\n", "/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", " warnings.warn(\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAJjCAYAAADQ22+yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABfx0lEQVR4nO3dd3hUZd6H8XsmCU1AFAlFbKyKrmJZUVddRbARQIqKIhYQFRuIDYkoYAEFZAUEdO1gF1YBcUFUFGxYUF+xrGVRVKQkiBipKTPvH2dpC4wZcjIh4f5wzXUxZ87kPL85U575Ps85E4nH43EkSZIUmmhZN0CSJKmisYMlSZIUMjtYkiRJIbODJUmSFDI7WJIkSSGzgyVJkhSy9LJugLQjGzhwIB9++CEA8+bNY/fdd6dKlSoAPPfcc+v//0cuvfRS+vTpw7777rvVdUaOHMlee+1F+/btS9zudXr27MkHH3zAzJkzqVq1amh/V5LKu4jnwZK2Dy1atGDkyJE0adKkrJtSLEuWLKFdu3YceuihnHjiiZx77rll3SRJ2m44RChtp0aNGsXFF1/M6aefzg033MDSpUu58sorOeecc2jRogUXXHABv/zyCxB0zj777DPef/99OnXqRO/evWnfvj2tWrXivffeAyA7O5tHHnkEgCZNmjBq1Cg6depEixYtGDt2LABFRUXcddddnHLKKZxxxhnceuutXHDBBVts3/jx4znmmGPo0KEDjz/+OBt/V/v000/p2LEjbdq0oUOHDsyePTvh8saNG7Ns2bL19193/f3336dt27Z06tSJtm3bkp+fz8CBA+nYsSOtWrUiKyuLjz76CICVK1dy0003cdppp9GqVSvuueceVq1axZFHHsn333+//m9fdNFFvPbaa2HsIknaKjtY0nbs559/ZuLEiQwbNox//etfHHbYYTz33HPMmDGDKlWqMHny5M3uM3fuXLp168akSZM466yzGD169Gbr5Ofns8suu/Dss89y77338ve//521a9cyYcIEvvjiC1566SWeffZZfvrppy22q7CwkPHjx9O2bVtatGjBL7/8wptvvglAQUEBV111FVdddRUvvfQSd9xxB3feeSf5+flbXB6LxRI+Bt9++y1///vfefHFF/niiy/IycnhueeeY+rUqXTo0IGHHnoIgHvvvZe1a9cydepUJk2axMcff8xnn31G+/btmTBhAgA//vgj33//Pc2bN09qP0hSspyDJW3HDjvsMNLTg5dply5dmDNnDo899hjz58/n22+/5dBDD93sPg0aNODAAw8E4M9//jMTJ07c4t8+6aSTADjooIPIz89n1apVzJo1i3bt2lG5cmUAzjnnHJ544onN7jtjxgxisRjHH3886enptGrVinHjxtGsWTO++eYbotEoJ554IgAHH3wwU6ZM4Ysvvtji8j9Sv359dt99dwAOP/xwdt555/Wdv/fff5+ddtoJgHfffZebbrqJtLQ00tLSePLJJwHIzMzk/PPP59prr+W5557jrLPOIi0t7Q+3K0klYQdL2o5Vq1Zt/f/vvvtu5s6dy5lnnsnRRx9NYWEhW5pCufHE+EgkssV1gPWdqEgkAkA8Hl/fmVsnGt1yyP3MM8+wZs0aTj31VCBIxHJzc/n2229JS0tb/zfX+eabb7a6vFGjRpssy8/P3+T6xo/BzJkzGTRoEBdddBEnnXQSjRo14sUXXwQgPT19k7+/aNEiqlSpwj777EPjxo2ZMWMGU6ZMWZ9mSVJpcohQKifefvttunTpQvv27alduzbvvvsuRUVFoW6jWbNmvPjii+Tn51NYWLjF9Ov777/ngw8+YOLEibz++uu8/vrrvP322zRt2pRx48bRqFEjIpEI77zzDgBffPEFXbp02eryWCzGrrvuymeffQbAq6++utX2vfPOOzRv3pzOnTvTpEkTXnvttfWPwTHHHMPEiROJxWLk5+dz9dVXrz9Cs3PnzgwdOpRDDz2UunXrhvqYSdKWmGBJ5cRVV13F0KFDue+++0hLS+Mvf/kLP/74Y6jbOOOMM/j+++9p37491apVo2HDhpudfuGZZ57h5JNPZs8999xkeY8ePbjsssu47rrrGDVqFHfeeSdDhw4lIyODUaNGUalSpa0uv+WWW7j99tupWbMmxx57LHXq1Nli+zp16sQNN9zA6aefTlpaGk2bNuWVV14hFovRo0cPBg0aRLt27SgqKqJVq1brE7bmzZtzyy230KlTp1AfL0naGk/TIGm9t99+m19++YV27doBwXm6KleuTO/evcu4ZSXz8ccf069fP1566aXNhiklqTTYwZK03pIlS8jOzuaXX36hqKiIAw44gFtvvZUaNWqUddO2WZ8+ffjggw8YMmQIRx11VFk3R9IOwg6WJEkq96ZM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J554Ylk3JaXi8TjfffcdM2fOJD19x/v4+OmnnxgwYAATJkygdu3adOnShVmzZtGsWbOybpq2QyZY2+jdd9/lr3/9K7Vq1aJatWqcdtppvPzyy2XdrJQZP348AwYMIDMzs6ybknJ16tQhOzubSpUqkZGRwZ/+9CcWLlxY1s1KmaOOOorHH3+c9PR0fvnlF4qKiqhWrVpZNytlli9fzvDhw7n88svLuikp99133xGJRLj00ktp27YtTz75ZFk3KaVeffVVWrVqRb169cjIyGD48OEceuihZd0sbad2vK8gIcnJyaFOnTrrr2dmZjJ37twybFFqDRo0qKybUGb222+/9f+fP38+U6dO5dlnny3DFqVeRkYG9957L48++igtW7akbt26Zd2klOnfvz/XXnstixYtKuumpFxeXh7HHHMMt956K2vWrOHCCy9kn3324bjjjivrpqXEDz/8QEZGBhdffDG5ubk0b96ca665pqybpe2UCdY2isfjmy2LRCJl0BKVlW+//ZZu3brRp08f9t5777JuTspdffXVzJ49m0WLFjF+/Piybk5KTJgwgfr163PMMceUdVPKxOGHH87QoUOpVq0au+66K2eddRazZs0q62alTFFREbNnz+buu+9m/PjxfPbZZ0ycOLGsm6XtlB2sbVS3bl2WLl26/npOTs4OOVy2o/roo4/o2rUr119/PR06dCjr5qTUvHnz+Pe//w1A1apVOfXUU/n666/LuFWpMXXqVN555x3atWvHvffey+uvv86dd95Z1s1KmTlz5jB79uz11+Px+A41F2u33XbjmGOOYdddd6VKlSqcdNJJO9TIhZJjB2sbHXvsscyePZtly5axevVqXnnlFU444YSybpZSYNGiRVx11VUMGzaM1q1bl3VzUm7BggXccsst5Ofnk5+fz4wZMzjiiCPKulkp8dhjj/HSSy8xefJkrr76alq0aEHfvn3Lulkp8/vvvzN06FDWrl3LihUrmDhx4g5zcAdA8+bNefvtt8nLy6OoqIi33nqLgw46qKybpe3UjvPVI2R169bl2muv5cILL6SgoICzzjqLQw45pKybpRR45JFHWLt2LYMHD16/rFOnTpx77rll2KrUadasGZ9++int27cnLS2NU089dYfsaO6Imjdvvn7fx2IxOnfuzOGHH17WzUqZQw89lEsuuYTOnTtTUFDAcccdx5lnnlnWzdJ2KhLf0mQiSZIkbTOHCCVJkkJmB0uSJClkdrAkSZJCZgdLkiQpZHawJEmSQmYHS5IkKWR2sCRJkkJmB0tS0rKysjjhhBP49ttvy7opkrRdsoMlKWkvvfQSe++9N9OnTy/rpkjSdskOlqSkpaWlccQRR+wwP/IsScnytwglJW3NmjX861//wl/akqQtM8GSlLThw4dTt25dfvrpJ1auXFnWzZGk7Y4dLElJ+eSTT3j55ZcZNWoUNWrU4JtvvinrJknSdscOlqRiW7t2LTfddBO33XYbtWrV4oADDnAeliRtgR0sScU2cuRIDj/8cE488UQADjjgAL766quybZQkbYfsYEkqlrlz5/Lyyy/Tt2/f9csOPPBAEyxJ2oJI3MOAJEmSQmWCJUmSFDI7WJIkSSGzgyVJkhQyO1iSJEkhs4MlSZIUMjtYkiRJIbODJUmSFLL/B9J07RddsyZ8AAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAJjCAYAAADQ22+yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABin0lEQVR4nO3dd3gUVd+H8Xs3hSJVJFQLPCo2RFTsimCjCIgVUQTsBbCiYC+ggiiCvYAFUQEVEAVRUKzY0MfeXhQV6VhCT7K77x+jlAdYsmayIeH+cOW62NnZzDkzW377PWcmkUQikUCSJEmhiZZ0AyRJksoaCyxJkqSQWWBJkiSFzAJLkiQpZBZYkiRJIbPAkiRJCllmSTdA2pL169ePjz76CICZM2dSr149ypcvD8CoUaNW/39TzjnnHK666ip23HHHja4zZMgQtt9+e4477rgit/sfPXv25MMPP2TatGlUqFAhtN8rSaVdxOtgSZuHli1bMmTIEBo3blzSTSmU+fPn06FDB5o0acLhhx/OqaeeWtJNkqTNhkOE0mbqnnvu4ayzzqJdu3ZcccUVLFq0iAsvvJBTTjmFli1b0qVLFxYvXgwExdkXX3zBBx98QKdOnejduzfHHXccbdq04f333wegT58+DBs2DIDGjRtzzz330KlTJ1q2bMnjjz8OQCwW47bbbuOoo47i+OOP58Ybb6RLly4bbN/o0aM58MAD6dixI08++SRrf1f77LPPOOmkkzj22GPp2LEj06dPT7q8UaNG/P7776sf/8/tDz74gPbt29OpUyfat29PXl4e/fr146STTqJNmza0bt2aGTNmALBs2TL69u3LMcccQ5s2bbjrrrtYvnw5zZo146efflr9u7t3786UKVPCOESStFEWWNJm7LfffmPs2LEMGjSIl19+mb322otRo0YxdepUypcvz/jx49d7zOeff86ZZ57JuHHjOPHEE7n33nvXWycvL4/q1avz7LPPMnToUO68805WrVrFmDFj+Oqrr3jppZd49tln+fXXXzfYroKCAkaPHk379u1p2bIlixcv5q233gIgPz+fiy66iIsuuoiXXnqJW265hVtvvZW8vLwNLo/H40n3wQ8//MCdd97Jiy++yFdffcWCBQsYNWoUEydOpGPHjjzyyCMADB06lFWrVjFx4kTGjRvHJ598whdffMFxxx3HmDFjAPjl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kjPBSpkJliRJUsgssCRJkkLmEKEkSUrKyzSkzgRLkiQpZCZYkiQpOROslJlgSZIkhcwES5IkJWeClTITLEmSpJCZYEmSpKQ8izB1JliSJEkhs8CSJEnJJdL4E6KPP/6Y448/nnbt2nH++efz119/AZCbm8u5555L69atOe2001i4cCEAeXl59O7dm9atW9OxY0dmzpwZdD+RYMCAAbRq1Yo2bdowY8aMTW7bAkuSJJVJffv2ZeDAgUyYMIEdd9yRYcOGAXD33Xez7777MmnSJE466ST69+8PwIgRI6hQoQKTJk3i6quvpk+fPgBMnjyZmTNnMnHiRO677z769OlDQUFB0m1bYEmSpKQiifT95ObmMnv27PV+cnNzU273xIkT2XHHHcnPz2f+/PlUqVIFgGnTptGuXTsAjj32WN566y3y8/OZNm0a7du3B6BZs2b88ccfzJkzhzfffJM2bdoQjUZp0KABdevW5dNPP026bSe5S5KkzcYTTzzBvffeu97yHj160LNnz5R+V1ZWFt999x3du3cnMzOTyy67DIAFCxZQs2ZNADIzM6lUqRK///77OssBatasybx581iwYAE5OTnrLU/GAkuSJCWXxrMIu3btSseOHddb/k/6tCGTJk3itttuW2dZw4YNefzxx2nUqBHvvfcezz77LJdeeinPPvvsBn9HNLrhQb1oNEoisf4O2Nj6/7DAkiRJm40qVaokLaY2pHXr1rRu3XqdZatWrWLKlCkceeSRALRv354BAwYAkJOTw6JFi6hduzYFBQUsXbqUatWqkZOTw8KFC9l+++0BWLhwITk5OdSqVWv1RPi1lyfjHCxJkpRcKTyLMDMzk5tuuokvv/wSCFKuvffeG4DmzZszbtw4IJinte+++5KVlUXz5s0ZP348EJyBWK5cOerWrcthhx3GhAkTiMVi/Pzzz8yaNYvGjRsn3354XZEkSdo8ZGRkMHjwYK6//npisRi1atVafbbgxRdfTJ8+fWjbti2VK1dm0KBBAHTp0oXrr7+etm3bkp2dzcCBAwFo1aoVn3/++eoJ8P3796d8+fJJtx9JbGhgsRSJz9u5pJsgSVJaRWt/n9btNb5scNq29cVdl6ZtW8XJBEuSJCUVKekGlELOwZIkSQqZCZYkSUquVE8mKhkWWBsxbToMfhjy8qFRQ+h3FVTaas39416BJ8asub1k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\n", "text/plain": [ "
    " ] }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_61_11.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_61_10.png" } }, "output_type": "display_data" @@ -2457,6 +2468,47 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "We can then compute the second derivative of the cost function, which in our case is the second derivative\n", + "of the means squared error. This leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 C(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}^T\\partial \\boldsymbol{\\beta}} =\\frac{2}{n}\\boldsymbol{X}^T\\boldsymbol{X}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize).\n", + "\n", + "The Hessian matrix plays an important role and is defined for the mean squared error as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{H}=\\boldsymbol{X}^T\\boldsymbol{X}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Hessian matrix for ordinary least squares is also proportional to\n", + "the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find\n", + "the eigenvalues of the covariance matrix and the Hessian matrix in\n", + "terms of the singular values.\n", + "\n", + "\n", "The residuals $\\boldsymbol{\\epsilon}$ are in turn given by" ] }, @@ -2574,7 +2626,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_132_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_136_0.png" } }, "output_type": "display_data" @@ -3060,9 +3112,7 @@ "**pandas** again, rather extensively in order to organize our data.\n", "\n", "The difference now is that we use **Scikit-Learn's** regression tools\n", - "instead of our own matrix inversion implementation. Furthermore, we\n", - "sneak in **Ridge** regression (to be discussed below) which includes a\n", - "hyperparameter $\\lambda$, also to be explained below." + "instead of our own matrix inversion implementation." ] }, { @@ -3080,23 +3130,19 @@ "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.057088709963637\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.946893955211749\n" + "[ 0. 618.32047562 -861.13519106 1404.91549644] -11.057088709963637\n" ] }, { "data": { - "image/png": "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wzC45ZZb3F12h6fff/fTPtA6XnnlFRwOB0899VTjbZZvv/12h9gHTMbpLmCIiIhIh6YzACIiIh5IAUBERMQDKQCIiIh4IAUAERERD6QAICIi4oEUAERERDyQhosSkTbJbrdz9913Y7VaMZvNLFmypN2MsCbSHmgcABFpk5xOJyaTCbPZzIcffkheXh6//OUv3V2WSIehSwAics569erF4MGDefbZZxunHT16lKuuuoohQ4bw5ptvNtu6LBYLZvOJP1FVVVUkJSU1zps7dy4DBgzg+uuvb7b1iXgaXQIQkfPy8ccf07Vr18bX//jHPxgxYgQff/xxs68rNTWVRx55hPLycl599dXG6W+++SYffvgh7733XrOvU8RTKACIyEXJyck57UNSzkVhYSG//vWvT5n+zDPPYLPZ6NOnD++99x4rV67kb3/7G4sWLbrYckXk/ygAiMgpKisr+cMf/sCqVauwWCz84he/4Oabbz7lfXPnzmXbtm3s2LGDJ598kg8//JDbbruNOXPm8PHHH5OZmcn06dP59a9/zYMPPsiOHTsYNGgQf/7znwkJCcFms7F06dLT1lBXV4e3tzcAQUFB+Pn5teSPLOJxFABE5BR33XUXY8aMYePGjezYsYNbb72VmTNnnvK+N998k5tuuokrr7yS6667rnH6559/zmuvvYbT6eTqq68mNTWVJ554gh49enD77bezdOlS7r777rPWkJaWxh/+8AfMZjM+Pj48+eSTzf5zingyBQAROclXX30FwB133AHAqFGjiI6O5tixY+e8jBtvvJHIyEgAhg4dSnh4OH379gVg0qRJbN68ucllDBw4kLfeeut8yxeRc6S7AETkJGvXruWKK65ofO1yuaioqCAiIuKcl/Gfgz+Aj4/PSa99fX2prq5unmJF5IIpAIjISXbv3k1oaGjj6y1bthAeHk737t3dV5SINDsFABFpVF9fT3p6OqtXr8bhcHDo0CEee+wxfvOb37i7NBFpZuoDICKNjhw5QufOnUlKSmL06NFERERw5513MnXqVHeXJiLNTEMBi0ijjz/+mC+//JLnn3/+tPMHDBiAt7c3N910E7/61a9at7gfuOWWW9i1axcDBw7kjTfecFsdIu2ZzgCISKO0tLSzXuv//vvvW7GaM3vttdfcXYJIu6c+ACLS6ODBg+rsJ+IhdAlARETEA+kMgIiIiAdSABAREfFACgAiIiIeSAFARETEAykAiIiIeCAFABEREQ+kACAiIuKBFABEREQ8kAKAiIiIB/r/Af0IcebZmWXeAAAAAElFTkSuQmCC\n", + "image/png": "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jb3WyYo1mRRln8QExMa2YdzEngQG+nm7NPkBBQAREakXxaU1rFiVTk1xFWaziQEDohn1oy6YzWrvb4oUAERE5IrtP3yCdWv246quw9/Pwo+SutK7b5S3y5ILUAAQEZHLZhgGqd/ksXPrYXC4CA0NYOKknkS2b+Xt0sQDBQAREbksDqeLVesPkJtZBIZBVPswJk3uRXBIgLdLk4ugACAiIpestNLOio8zqThejslkomfvSEZf1x2LVQ/zaS4UAERE5JJkHysj5ZNMnBW1WK1mho/oxKDBHTS4TzOjACAiIhfFMAy2fXucHZuzoc5FUJAfY8f3JLZTG2+XJpdBAUBERDxyOF188tlBctILMRkG7WwhTJqsh/k0ZwoAIiJyQeVVtSxflU758QrMJhM9erbjujFxWNXe36wpAIiIyHkdPlbGJ6szcVTWYrWYGTayE/Fq728RFABEROScduw5xldfZIPjVHv/uAk96RjbxttlST1RABARkTM4nC5SPj9EzncFoPb+FksBQERE3MqralnxcQZlx07d3989rh3Xj1V7f0ukACAiIgAcOV7G6tWZOCpqsVjMDBsRy+CrYtTe30IpAIiICGl7j7N1Y9Z/2/vH96Sj7u9v0RQARER8mNN1qr0/e++p9v6IdiFMTu5NWJja+1s6BQARER9VUV3L8lWn2vs53d4/Ru39PkMBQETEB33//n6LxczQ4bFcNUTt/b5EAUBExIcYhsH2b4+xfVOOu71/7ISexOr+fp+jACAi4iMcThcfr9vP0X3F7vv7Jyf3JjRU7f2+SAFARMQHnCyvYcVHGVQWVWIymejZJ5LR13XHYlF7v69q0D3/pz/9icmTJzN58mReeOEFAFJTU0lOTmbcuHG89NJL7vemp6czbdo0xo8fz29+8xscDgcAeXl53H777UyYMIH777+fysrKhixZRKTFOXj4JO++s4vKokqsVgs/urYbY8bG6eTv4y5q79fU1JCZmYlhGNTU1FzUglNTU9m0aRPLly9nxYoV7N27l1WrVvHkk0+yePFiVq9ezZ49e9i4cSMAjz76KE899RRr1qzBMAyWLl0KwDPPPMOMGTNISUmhf//+LF68+DJ/VBER32IYBl9uO0LKynScNQ5CQgO4aWo/Bgxo7+3SpAnwGAB27tzJmDFjmDVrFvn5+SQlJfH11197XLDNZuPxxx/H398fPz8/unfvTnZ2Np07dyY2Nhar1UpycjIpKSnk5uZSU1NDfHw8AFOnTiUlJYW6ujq2b9/O+PHjz5guIiIXVlvn4INV6ezeehhcLtrHtGL6jEFEtQ/zdmnSRHjsA/DCCy/w5ptv8sgjj9C+fXteeOEFFixYwAcffHDBz8XFxbn/n52dzerVq7nzzjux2Wzu6ZGRkeTn51NQUHDGdJvNRn5+PidOnCA0NBSr1XrG9CsRERF6RZ//IZtNB5M3aft7n/aBd51r+xcUV/Lu+3uoLK7CYjUzdHgnxo/rhcmsW/waQnM9BjwGgJqaGnr06OF+nZSUdEbbvSf79+9n1qxZPPbYY1itVrKyss6YbzKZMAzjrM9daPqVKC6uwOU6e7mXw2YLo7CwvF6WJZdO29/7tA+861zbP/1AEZ+vO4Cr1omfv5Vrr+tGz542ioorvFRly9aUjwGz2XTBL70emwCsViulpaXuE++hQ4cueuVpaWncddddPPzww9x8881ERUVRVFTknl9QUEBkZORZ0wsLC4mMjCQ8PJyKigqcTucZ00VE5EyGYbBuUxbrP9mHq9ZJWOtAbvnxAHr2tHn+sPgkjwHg5z//OXfccQfHjx/nV7/6Fbfddhv333+/xwUfO3aMBx54gEWLFjF58mQABg0aRFZWFjk5OTidTlatWkViYiIxMTEEBASQlpYGwIoVK0hMTMTPz4+EhARWr159xnQREfmvqpo63l22h8yv8zAZENulLbfNiCc8PNjbpUkTZjLOdZ39B3Jycti8eTMul4sRI0ac0SRwPs8++ywffPABnTp1ck+bPn06Xbp0YeHChdjtdpKSknjiiScwmUxkZGQwd+5cKisr6du3LwsXLsTf35/c3Fwef/xxiouLiY6O5sUXX6R169aX/QOrCaDl0Pb3Pu0D77LZwvhmTx6ffJxBbUUtZrOJIcNiGTq0o4b0bSRN+Rjw1ARw3gCwd+/eCy64X79+V1aZlygAtBza/t6nfeBdGYdK2JCSieFwERDkx9jxPemsR/g2qqZ8DHgKAOftBDh79uzzfshkMrF+/forq0xERC5LncPJ6nUHyDtQguFyER4ZSvKU3oSGBni7NGlGzhsANmzY4P5/RUUFoaGh2O12KioqiIiIaJTiRETkTCWl1az8KJ3KkmosFjO9+kVx3ejumHWLn1wij50AV69ezdSpU4FTw/JOmTLljHAgIiKNI+NgEUvf3U1lSTVWPwtTburHmOt76OQvl8VjAPjLX/7CW2+9BUDXrl1ZtmwZr7zySoMXJiIipxiGwfovD7F+9T6cdgehp2/xGxwf4+3SpBnzOBCQy+Wiffv/jhsdHR2Ny+Vq0KJEROSU6uo6VqxKp+TYqY5mHbu0ZdLEXvj5WbxcmTR3Hq8AhIeH8+677+JwOHA6nbz//vu0a9euMWoTEfFpR4+VseTtnZQcK8dsNjF0VGduSO6jk7/UC49XAJ555hkefvhh5s+fj8lkol+/fixatKgxahMR8VnbvsllR+phDOepW/zGT+xJbMc23i5LWhCPAeA/7f6lpaVYLBZCQ+v3YToiIvJfdQ4nH6/ZR+7BEgAiokK54YY+BAf5e7kyaWnOGwBee+017r33Xv73f//3nCNKzZ07t0ELExHxNUUlVXz0UTpVpTVgMtFnQHuuTeyC2eyxtVbkkp03AISFnXq8Ydu2bRutGBERX/Vtej6bPs/CVefE6m/h2ut60Kun+ltJwzlvAJg+fTpwqhPgjBkzzpj3t7/9rWGrEhHxEU6Xi7XrD3IooxAMg1bhwSQn96ZN6yBvlyYt3HkDwDvvvENNTQ1vvvkmdrvdPb2uro4lS5Zw3333NUqBIiItVWlZDR9+lE55cRVgolsvG+PG9MBi0SV/aXjnDQBWq5V9+/ZRU1PDvn373NMtFgtPPfVUoxQnItJS7TtYzGefHsBR68BiNTMqsSsD+7f3/EGRenLeAHDrrbdy6623sm7dOsaMGdOYNYmItFgul4vPv8wmffdxMAyCWwUwJbkPtogQb5cmPsbjdaaXXnqpMeoQEWnxKqtq+fd735K+6xgYBjFdw7njjsE6+YtXeBwHoGfPnrz66qskJCQQHBzsnt6vX78GLUxEpCXJOXySNWv2UVddh9liJmFkJ4ZepbH8xXs8BoBdu3axa9cu3nvvPfc0k8nE+vXrG7QwEZGWwDAMUr86zK4duRgug8AQfyZO7k2H9mHeLk18nMcAoEf/iohcnhq7g5Wr0inMLQMgsmNrkif3JjDA459ekQbn8bewpKSElStXUllZiWEYuFwucnJy+MMf/tAY9YmINEtHcktZ88k+7FW1mMwmBiZ05JoRnbxdloibxwDwy1/+ksDAQA4cOMCoUaNITU1lyJAhjVGbiEizYxgGW746ws4dRzFcBv7Bfoyf0JNOepCPNDEe7wLIy8vjb3/7G4mJidxxxx288847HD58uDFqExFpVmpq6nh/2R6+2XYEw2XQLqYVd9w+WCd/aZI8XgFo1+7UWNRdunRh37593HDDDTgcjgYvTESkOTmaW0rKJ5nYq+rAbGLgkBiuGdHpnA9TE2kKPAaAiIgI/v73vxMfH88rr7xCaGgoFRUVjVGbiEiT999L/rkYLhd+QX6Mn9iLzh1be7s0kQvy2AQwf/58/P39SUhIoH///rz88ss88sgjjVGbiEiTVl1dxwfL9p6+5O8iokMr7rhjsE7+0iyYDMMwPL3J6XSSmZmJ2WymV69ezfqSVnFxBS6Xxx/5othsYRQWltfLsuTSaft7ny/vg6NHS1mzZh81lbVgNjHgqhh+NLJxL/n78vZvKpryPjCbTUREhJ53vscmgB07djBnzhwsFgsulws/Pz8WL15Mr1696rVQEZHmwDAMtm47ws7tR3G5DPyC/Bg3oSddYtt4uzSRS+IxADz77LMsWLCAxMRE4NTAQPPmzePdd99t8OJERJqSqupaVq/OJP/0wD7h0WHcMKU3IUH+Xq5M5NJd1EOn/3PyB7juuuuorq5usIJERJqinMMn+b9/7Tx18jeb6J/Qkem3DNDJX5otjwGgd+/erF692v1606ZN9OzZs0GLEhFpKgzD4Isvs/h45XfYq+vwC/Zjyk39SBrVuVn3hxLx2ASwbds2VqxYwTPPPIPVaqW4uJiAgADWrVuHyWTi66+/bow6RUQaXXm5ndWrMyjKP3Xrc7vY1twwsTdBgRrLX5o/j7/FS5YsaYw6RESalAMHivls/QFq7Q6wmBk8PJaRQ2L0rV9aDI8BICZGz6sWEd/hdLrYuDGLjL35GIZBQFgAEyf2IkaP75UWRtexREROKy2t5uNVGZworgKgfbdwksfH4e+nP5XS8ui3WkQESE8v4MuNh6irdWKymhl6dWcSBkbrkr+0WB7vAvj1r3/dGHWIiHhFXZ2TlJRMPlt3gLpaJ4FtApn2k4EMHdRBJ39p0TxeAcjIyMAwDB0IItLiFORXkPJJJuVlNWAy0bFnOyZe3wN/P4u3SxNpcB4DgM1mY/LkyQwaNIiQkBD39Llz517UCioqKpg+fTp/+ctf6NixI0888QRpaWkEBQUB8OCDDzJ27FhSU1NZuHAhdrudiRMnMmfOHADS09OZO3cuFRUVJCQkuG9HFBG5XIZhkJaWy45tR3A6XJgDLIxK7MagPpHeLk2k0Xg8kw4ePJjBgwdf1sJ37drF3Llzyc7Odk/bs2cP//rXv4iM/O+BVlNTw5NPPsmSJUuIjo5m1qxZbNy4kaSkJB599FGeffZZ4uPjefLJJ1m6dCkzZsy4rHpERKqr60j5JJO8o2WAQZgthOTJvWnbKtDbpYk0Ko8B4MEHH6SmpoacnBzi4uKora0lMPDiDpSlS5cyb948dz+Cqqoq8vLyeOqpp8jLy2Ps2LE8+OCD7N69m86dOxMbGwtAcnIyKSkp9OjRg5qaGuLj4wGYOnUqL7/8sgKAiFyWnJwTrP90P9VVdWA20XNQNNdd3QWL+aJGRRdpUTwGgF27dvHAAw9gtVp59913ufHGG3n11Ve56qqrPC58wYIFZ7wuLi5mxIgRzJ8/n+DgYGbNmsX7779PcHAwNpvN/b7IyEjy8/MpKCg4Y7rNZiM/P/9Sfr6zXOjRiJfDZtO9wd6k7e99zWEfuJwu1qzNJG3bUVwuF4GtArnx5v706dHO26Vdseaw/Vu65roPPAaA3/3ud7z55ps88sgjtG/fnhdeeIEFCxbwwQcfXPLKYmNj+fOf/+x+feedd7JixQomTJhw1ntNJhOGYZxz+pUoLq7A5Tp7uZejKT8H2hdo+3tfc9gHZaU1rF6dQXFhJQARsa1JntCLkCC/Jl+7J81h+7d0TXkfmM2mC37p9Xjdq6amhh49erhfJyUl4XQ6L6uYzMxM1qxZ435tGAZWq5WoqCiKiorc0wsKCoiMjDxremFh4Rl9B0REzscwDNK/y+ff7+w6dfK3mhl8dWd+clM/QoL8vF2eiNd5DABWq5XS0lL3N+9Dhw5d9soMw+C5556jtLSUuro6/v3vfzN27FgGDRpEVlYWOTk5OJ1OVq1aRWJiIjExMQQEBJCWlgbAihUrzng0sYjIudTaHXyyOpPP1h+kttZBQOtAbr6lP6OGdNQtzSKneWwCuP/++7njjjsoLCzkV7/6FZs3b2b+/PmXtbLevXtz3333cdttt+FwOBg3bhxTpkwB4Pnnn2f27NnY7XaSkpLczQKLFi1i7ty5VFZW0rdvX2bOnHlZ6xYR35CXW8qna/dTUW4Hk4mYXu2YOLo7Af66fVjk+0zGuRrafyAnJ4fNmzfjcrkYMWLEGU0CzY36ALQc2v7e15T2gctlsHVLDrt3HsPpdGEOtHLNtd0Y0NPm+cPNVFPa/r6qKe8DT30ALioS19bWUltbi9ls1iA8ItLklJVWk/LJPgoLKgBoFR1G8oRetAkL8HJlIk2Xxz4A77zzDjNnziQ9PZ3du3czY8YMVq9e3Ri1iYhc0H87+u0+dfK3mOk/PJbbbxmgk7+IBx6/zr/55pusWLGCqKgoAPLy8rjvvvuYNGlSgxcnInI+9po6Nqw/SNahEgzDwL9VABMm9CS2fStvlybSLHgMAKGhoe6TP0CHDh3w9/dv0KJERC4k92gp6z491dHPMJno2KsdE0Z3J1Ad/UQumsejJSEhgXnz5nH77bdjsVj48MMP6dKlC3v37gWgX79+DV6kiAiA0+lia2oO3+4+/t+OfkldGdBL44OIXCqPAeDTTz8F4Msvvzxj+uzZszGZTKxfv75hKhMR+Z4TJVWsXbOPotMj+rWKDmPKhF60VVu/yGXxGAA2bNjQGHWIiJyTYRjs3nmMbVsPU1vnBKuZ/gkx/CghFrNZg/qIXC41mIlIk1VVWcu6tfs5erQUwzAIaBvExPE9iYms34d6ifgiBQARaZIOHSjm888OUl1dh2E20aVfFOMTu+JntXi7NJEWQQFARJqUulonGz8/xP59hbhcBpYQf669vhu9u0R4uzSRFsXjQECzZ88mNTW1MWoRER93/FgZ/35nJ5kZBbgMiOjShjtmDNLJX6QBeAwA48aNY/HixYwfP57XX3+dkydPNkJZIuJLnE4XWzZn8+GyvZSW1mDytzBsdFd+ktyX0CCNOyLSEDw2ASQnJ5OcnMzBgwf54IMPuPXWW4mPj+fOO+9k4MCBjVGjiLRgJcWVfLp2P0WFVYBBSGQoUyb0pF2bIG+XJtKiXVQfAJfLRU5ODtnZ2TgcDiIiIvjtb3/LyJEjefTRRxu6RhFpgQzDYOfXeezYdoTaOieG1Uzfq2JIGhaLxezx4qSIXCGPAeCll15i2bJlxMbGMmPGDP74xz/i5+dHVVUVo0ePVgAQkUtWXl7DujX7yTtWDqdv75swLo6OUWHeLk3EZ3gMACUlJbz22mv07t37jOnBwcH84Q9/aLDCRKTlMQyDjPQCUjdlU1PjwDCb6DagPWOv6aLb+0Qa2UX1ASgvL2f79u0AmEwmAgMD6dKlC9dcc02DFygiLUN1VS0b1h8kJ/sEhmFgDQvguuu7E9eprbdLE/FJHgPA888/T0ZGBj169MBisbBv3z5sNhvV1dUsWLCAMWPGNEadItKMZR0sYePnB6msrMUwm4juEcGk63oQFKChSES8xePR16FDBx577DGGDx8OwO7du3nzzTf59a9/zf33368AICLnVWt3sPHzQxzYX4TLZWAO9uPqxK4MiGuHyaRx/EW8yWMAOHLkiPvkDzBw4ECys7Np3759gxYmIs3b4ZwTfL7hIOXldjCZCO/chkljetA6RE/vE2kKPAYAq9XKpk2b3O39mzZtws/Pj5KSEhwOR4MXKCLNS12tk01fZpGZUYjT6cIUaGXY1Z0Y0re9vvWLNCEeA8C8efN46KGHMJlMGIaBv78/L7/8Mn//+9+ZPn16Y9QoIs1EXm4pG9YdoLS0BkwmWse0YvK4ONqGBXq7NBH5AY8BoKCggPXr17Nv3z4sFgvdu3fHYrGcdVugiPguh8PFls05fLfnOA6nCwKsXDU8luGDojHrW79Ik3RRAwGNGTOGPn36NEY9ItLMFBwvZ/26A5SUVIHJRFh0GJPGxmkoX5EmzmMA6NmzJ6+++ioJCQkEBwe7p/fr169BCxORps3pdLFubSZbt+TgcLjAz8KAhBiuHhKjoXxFmgGPAWDXrl3s2rWL9957zz3NZDKxfv36Bi1MRJquwvwK1q/bz4kTNbhcLoJtIUwc35P24cGePywiTYLHALBhw4bGqENEmgGn08W2rUf4dlcedQ4X5gArfQd14EdDY7Fa9K1fpDnxeMRWVlYyf/58fvrTn3Ly5EmefvppKisrG6M2EWlCCgsqeO/d3Xydlkudw0VQuxB+9j/DGD2is07+Is2Qx6P22WefJSwsjOLiYgICAqioqODpp59ujNpEpAlwOl1sTc1h+fvfUlxciWE10XtoR2b+ZCCx7Vt5uzwRuUweA0B6ejpz5szBarUSFBTEokWLSE9Pb4zaRMTLCvPLee/dXaTtOP2t3xbMtFsHcP1IfesXae489gEw/6A3r9PpPGuaiLQsToeLr7Ye5tvdx3A4XBhWM30Gx5A0TG39Ii2FxwAwdOhQfv/731NTU8OXX37J22+/fcazAUSkZck/VsaG9QdP3dcPBNtCmDC2B9HtQr1cmYjUJ49R/pFHHiE4OJiwsDBeeuklevXqxa9//evGqE1EGpHD4eLLjVmsWLb31Mnfz0K/4bHM/MlAnfxFWiCPVwD8/Px44IEHeOCBBxqjHhHxgrzcUj5bf5CTJ6sBCIkKYeKYOKIiQrxcmYg0FI8BYNu2bbzyyiuUlpZiGIZ7+kcffdSghYlIw3M/uS+9EKfLBf4WBg3tyKjBMZjNGsNfpCXzGADmz5/PtGnT6Nu3rx7lKdKCHM4+weefHaS83A4mE606hDFxjMbwF/EVF9UE8LOf/awxahGRRmCvqWPj51kcPFCEy2VgCrAyZEQnhg5sryf3ifgQj50A4+LiyMzMvKyFV1RUMGXKFI4ePQpAamoqycnJjBs3jpdeesn9vvT0dKZNm8b48eP5zW9+g8PhACAvL4/bb7+dCRMmcP/992sEQpErYBgG+/cV8X//2sn+fYW4DGgb25rbb4/XY3tFfJDHAHDkyBGmTZvGuHHjSE5Odv/zZNeuXdx2221kZ2cDUFNTw5NPPsnixYtZvXo1e/bsYePGjQA8+uijPPXUU6xZswbDMFi6dCkAzzzzDDNmzCAlJYX+/fuzePHiK/hRRXxXZWUtH3+Uzqdr9lFVVYs5yI9RY7pz2039aB0a4O3yRMQLPDYBzJkz57IWvHTpUubNm+e+ZXD37t107tyZ2NhYAJKTk0lJSaFHjx7U1NQQHx8PwNSpU3n55Ze59dZb2b59O3/+85/d0++44w4effTRy6pHxBcZhsHePcf5asthamocGCYT0d3DGX9dd0KD/L1dnoh40XkDQF5eHh06dGDYsGFnzfviiy88LnjBggVnvC4oKMBms7lfR0ZGkp+ff9Z0m81Gfn4+J06cIDQ0FKvVesb0KxURUb/3M9tsYfW6PLk02v7nV1JcxYcr9nDk8EnAILBNEJMm92Zg76h6XY/2gXdp+3tfc90H5w0ADzzwAMuXLwdg9uzZvPLKK+55L730EomJiZe0ou/fQvgfJpPpkqdfqeLiClyus5d9OWy2MAoLy+tlWXLptP3PzeUy2LH9CDu/zqOuzolhNtG1j43rr+lKYIC1XreZ9oF3aft7X1PeB2az6YJfes8bAL5/Aj5y5Mh5512sqKgoioqK3K8LCgqIjIw8a3phYSGRkZGEh4dTUVGB0+nEYrG4p4vI+eXnl7Nh3QFKik8N4xvYNogx1/egcwc9tU9EznTeToDf/7b9w2/el/NNfNCgQWRlZZGTk4PT6WTVqlUkJiYSExNDQEAAaWlpAKxYsYLExET8/PxISEhg9erVZ0wXkbPV1Tn57LODLH9/z6mTv9VMn4QYfjojXid/ETmni7oCUB8CAgJ4/vnnmT17Nna7naSkJCZMmADAokWLmDt3LpWVlfTt25eZM2cCMG/ePB5//HFeffVVoqOjefHFF+u1JpGWICurhI2fHaKywg5AWPtQJo6Nw9Y22MuViUhTdt4A4HK53MP/Op3OM4YCdjqdF72CDRs2uP8/cuRIVq5cedZ7evfuzfvvv3/W9JiYGJYsWXLR6xLxJVVVdjasP8Th7BMYhoE5wErCyE4kDGivUTtFxKPzBoB9+/YxYsQI90n/+48A1h8XEe8xDIPdu4+xbesRau0OMJmI6tqW8df3ICxYt/aJyMU5bwDIyMhozDpE5CIUF1ex7tP9FBVUAgZ+of4kje5Gr64R3i5NRJoZjwMBiYj3ORxONm/OIX1PPk6nCyxmevSLYvTVXfD3s3i7PBFphhQARJq4rOzTnfzKT3XyC7WFMH5MD9rb6ndQKxHxLQoAIk1UVVUt69Yf5Oh/Ovn5W7hqeCzD4juoH46IXDEFAJEmxjAMvv4mj7RtR6irdYLJRHTXtoy7Po7QYD9vlyciLYQCgEgTcjy/nPXrDnDy9Eh+AWEBXDu6Oz26tPVyZSLS0igAiDQBtbVOPt94iIOZhbhcBiaLmd6DokkcGYvVok5+IlL/FABEvGxvej5bNuVgr64DoG10GOPHxhHRJsjLlYlIS6YAIOIlxSVVrFt3gKLjp54k5hfsx4hrujCwtx56JSINTwFApJE5nC6++DKLzL0FuJwuMJvo1sfG9YnddE+/iDQaBQCRRpSxr5DNX2ZTU1kLQCtbCGPHxNHeFuLlykTE1ygAiDSCEyer+XTdAQrzygCwBloZOrITg/vrwT0i4h0KACINyOFw8cXmbDL35J+63G8y0aVXO8YkdSUgQPf0i4j3KACINJDvMgtJ/TIbe9Xpy/3tQhhzfQ+iozSEr4h4nwKASD0rKqlk3fqDFB871bvfGmhl6IhODB6gy/0i0nQoAIjUk9o6J599kcXB9AIMl4HJbKJrr3Zcl9SNAH8daiLStOivksgVMgyDnXuPs33LEer+M5hPZCjXX9+dKD2xT0SaKAUAkSuQd7ycDZ8dpLSwEgD/ID9GjOrMgH5RXq5MROTCFABELkNVdR3rPz/E4QPFYBiYLWbi+kaSdE1n/Px0WIlI06e/VCKXwOly8dWOXHZ/nYuz1gmYsHVoxZjrexDeVmP3i0jzoQAgcpH2HSpm0xdZVJfZAQgOC+CapK7EdYvwcmUiIpdOAUDEg6IT1azbcIDi3NOj+PlZGDC4A8OHdsRiMXu5OhGRy6MAIHIeNXYHn23K4lB6IbgMTCYTnbqHc93obgQH+Xu7PBGRK6IAIPIDLsNg+848vtl+FGeNA4BwWwjXju5GdPtWXq5ORKR+KACIfM/+7BN8+cUhqk/WABAY7M/wUZ3o1ydSo/iJSIuiACACFJZUsf6zgxTnlYNhYLGa6TugPaNGdsJqtXi7PBGReqcAID6tsrqOzzZlkbOvGJwuTCYTsd3CGX1tN0JDA7xdnohIg1EAEJ/kcLrYkpbLnm9ycdlP3c8fbgshKakbHTqonV9EWj4FAPEphmHwbWYhX205TG356fv5QwMYMbITvXvb1M4vIj5DAUB8xuFjpXy+MZvyggoA/P2t9B/UnqFDO6qdX0R8jgKAtHjFpdVs2JhFfs5JTKfH7e/WI4LExK4EBfl5uzwREa9QAJAWq6qmjo2pORzKKASHC7PJRFRMK669thsRESHeLk9ExKsUAKTFcThdpO44yt5dx3DVOAATbcKDueZHXejcua23yxMRaRIUAKTFMAyDnekFbN96hLqK0x38QvxJGBZL//5R6uAnIvI9CgDS7BmGwYHDJ9m0KZuq4irgdAe/ge0ZOiwWq1UP7BER+SGvBICZM2dSXFyM1Xpq9fPnz+fw4cO8+uqr1NXVcdddd3H77bcDkJqaysKFC7Hb7UycOJE5c+Z4o2RponILyvn8y2xO/mcEP4uZ7j3bcc01nQnSA3tERM6r0QOAYRgcOnSIzz//3B0A8vPzmTNnDsuWLcPf35/p06czfPhwOnbsyJNPPsmSJUuIjo5m1qxZbNy4kaSkpMYuW5qY4tIaVq07QHZGASaXgdlsomPntiQmdqV1myBvlyci0uQ1egA4dOgQJpOJe++9l+LiYn784x8TEhLCiBEjaNOmDQDjx48nJSWFYcOG0blzZ2JjYwFITk4mJSVFAcCHlVfVsjE1h5x9RZhdBmYDbO3D+NGPutA+WiP4iYhcrEYPAGVlZYwcOZLf/va31NTUMHPmTCZOnIjNZnO/JzIykt27d1NQUHDW9Pz8/Ctaf0RE6BV9/odstrB6XZ6cW1VNHZ9uPMjutFwMuwMzJiLahXD9mDh69daT+rxJx4B3aft7X3PdB40eAAYPHszgwYMBCA4O5pZbbmHhwoX8/Oc/P+N9JpMJwzDO+vyV/qEvLq7A5Tp7uZfDZgujsLC8XpYl51bncLH1m1z27DyGq7oOgLCwABKGxfKjxO4UF1dQVFTh5Sp9l44B79L2976mvA/MZtMFv/Q2egDYsWMHdXV1jBw5EjjVJyAmJoaioiL3ewoKCoiMjCQqKuqc06Xlc7pcfL33OF9vz8VRUQtAUJAfAwd3YPDgDlgsZsxmfesXEblcjX5/VHl5OS+88AJ2u52KigqWL1/O73//e7Zs2UJJSQnV1dWsXbuWxMREBg0aRFZWFjk5OTidTlatWkViYmJjlyyNyGUY7Mwo4PUl37DtsywcFbUE+FsZPCSGO2ZeRUJCRywW3dYnInKlGv0KwOjRo9m1axc33XQTLpeLGTNmMGTIEObMmcPMmTOpq6vjlltuYeDAgQA8//zzzJ49G7vdTlJSEhMmTGjskqURGIZB+qFitmw9Qk1JNRgGfn4W4nrZGDEilqBg3dInIlKfTMa5GtpbMPUBaFoMw+DAkZNsTs2hsrAKDAOrxUzX7uGMuroLoWEB5/2str/3aR94l7a/9zXlfdDk+gCIwKkTf1ZuKZtScyjLr8R0ehCf2M5tufrqzrRpG+ztEkVEWjQFAGl0OcfK2JSaw4lj5ZhcBhaziZjYNlx9TRci2ukpfSIijUEBQBrNkfxyvkzNoSS3zH3ibx/Tmquv7kRkew3iIyLSmBQApMHlFVbwxeYcio6Wnjrxm0xERocxcmRnomNaaRAfEREvUACQBnOssIIvUnMoPHLqxG82mbBFhTJiRCc6dmqjE7+IiBcpAEi9O1ZYwRdbDlN4+KT7xN8uMpQRIzsRqxO/iEiToAAg9SavsIIvf/CNv11kKMNHdKJTZ534RUSaEgUAuWJHC8rZlHrY3cZvNploZwtl2PBYOndtqxO/iEgTpAAgl+3I8XK+3PLfXv3ub/zDO9Gpi77xi4g0ZQoAckkMwyAnr4zNWw+77+P/T+e+4SPUxi8i0lwoAMhFMQyDg0dK2fLVYUrzK9z38duiwxg+vBMdY1vrxC8i0owoAMgFGYZBZtYJvtp2mIrTY/VbzCaiYlozckQn2ncI04lfRKQZUgCQc3IZBnv3F7Fj+1GqTj+dz2w20SG2DSNHdCKyfZi3SxQRkSugACBncLpc7PyugG++zsV+sgYAi8VMx05tGTmyk8bqFxFpIRQABIA6h5Ptu46xZ9cx6ipqAbBazXTuFs6IEZ1o0ybIyxWKiEh9UgDwcTW1DrbuyCVjbz7O6joA/PwtdI9rx4jhsYSEBni5QhERaQgKAD6qvLKW1G2HOZRZhKvWCUBAoJVefaIYNjSGgEA/L1coIiINSQHAxxSfrGbzlhyOHjqB4XQBEBTiT7+B7bkqvgN+fhYvVygiIo1BAcBH5B4rZ8vWHPJzy8BlABDWOpD4q2Lo3y8Ks1m38omI+BIFgBYu80AxO3Yc5WRBxekpJsJtoQwdGkP37hG6h19ExEcpALRALpeLnd8eZ/fOY1SWnrqVz2QyEdWxFSOGxxLTobWXKxQREW9TAGhB7PY6tu3IJfO7Auyne/SbrWZiu7Zl1IjOhLfVrXwiInKKAkALcPJENVu3HSHnUAmOulM9+q0BVrr3sjFqeCzBQerRLyIiZ1IAaKYMwyA3t5Tt249yPLcM1+mOfQFhAfTr356hV0VjtahHv4iInJsCQDPjdLrIzChk5zd5nDhxaox+TCbC2oVw1ZAY+vVsp459IiLikQJAM1FVWcuuXcfITC+gsvLUUL1YzNhiWjN8WEc6q2OfiIhcAgWAJswwDIoLK/nm6zxysk9gr3WcmuFvoVP3CEYN7UiExugXEZHLoADQBDkdLg5nnWDXrjzyCypwOE6N2GcJ9adXvyiGDYwmRB37RETkCigANCFVFbXszyzku735nCyrweUyMMwmAiOCGRQfTXwvG35WdewTEZErpwDgZYZhUJRfQcbefLKyTlBRXYdhGBh+FlrHhDJsSAxxsW0wq2OfiIjUIwUAL6mrdXI0+wTf7c2noKCCKrsDTCaMICsdurRheHwMHSKC1aNfREQahAJAI6soqyFrfxGZGUWcKKuhts6JYTFjah1IXK92DO3XnrZhAd4uU0REWjgFgEZgGAaFx8s5kFFETs4JSitrcTpdGP4W/CJDGNg/ikE9bAQHaneIiEjj0BmnATkcLnJzTrAvvYDj+ZWUV9ViAK4gK2FRrUnoF0Xvzm2xWszeLlVERHyMAkADsNc4yDlYTOZ3BRSfrKay2oFhMeEK9SO6cxsS+kTRpX2Y2vdFRMRrFADqkb2mjgMZhWR8V8CJMjv2WgeGnwUjPJAePSIY0stGZNtgb5cpIiKiAFAf6uqc7P+ugG93H+NkuR2Hw4UrwIq1fQj9e0cS36MdYcH+3i5TRETErVkEgI8++ohXX32Vuro67rrrLm6//XZvl+R26GAx21IPc6K0GpfLwBVoJTg6jKv6R9GvSzj+fhq4R0REmp4mHwDy8/N56aWXWLZsGf7+/kyfPp3hw4fTo0cPr9ZVXFrNhx9ncvRQMZweuCeiW2uGDuxAt5hWGrhHRESatCYfAFJTUxkxYgRt2rQBYPz48aSkpPDggw96ta4PP87AXlINQFS3cEaNiKVDu1Cv1iQiInKxmnwAKCgowGazuV9HRkaye/fuy15eRET9nKQjA/2pbAXjk/sS17NdvSxTLp3NFubtEnye9oF3aft7X3PdB00+ABiGcda0K7l9rri4Apfr7GVeqiFDOxLWKpDQ1gEUFpZf8fLk0tlsYdr2XqZ94F3a/t7XlPeB2Wy64JfeJj8CTVRUFEVFRe7XBQUFREZGerGiU6JjW9O1h775i4hI89TkA8CoUaPYsmULJSUlVFdXs3btWhITE71dloiISLPW5JsAoqKimDNnDjNnzqSuro5bbrmFgQMHerssERGRZq3JBwCA5ORkkpOTvV2GiIhIi9HkmwBERESk/ikAiIiI+CAFABERER+kACAiIuKDFABERER8kAKAiIiID1IAEBER8UHNYhyA+mQ21+9jeut7eXJptP29T/vAu7T9va+p7gNPdZmMcz1tR0RERFo0NQGIiIj4IAUAERERH6QAICIi4oMUAERERHyQAoCIiIgPUgAQERHxQQoAIiIiPkgBQERExAcpAIiIiPggBQAREREfpAAgIiLigxQAREREfJACgIiIiA9SALgIH330EZMmTWLs2LG8/fbbZ81PT09n2rRpjB8/nt/85jc4HA4vVNlyedr+f/rTnxg9ejQ33ngjN9544znfI1emoqKCKVOmcPTo0bPm6fe/cVxoH+gYaFh/+tOfmDx5MpMnT+aFF144a36zPQYMuaDjx48bo0ePNk6cOGFUVlYaycnJxv79+894z+TJk41vvvnGMAzDeOKJJ4y3337bC5W2TBez/WfNmmV8/fXXXqqw5du5c6cxZcoUo1+/fsaRI0fOmq/f/4bnaR/oGGg4mzdvNn7yk58YdrvdqK2tNWbOnGmsXbv2jPc012NAVwA8SE1NZcSIEbRp04bg4GDGjx9PSkqKe35ubi41NTXEx8cDMHXq1DPmy5XxtP0B9uzZw2uvvUZycjLz58/Hbrd7qdqWaenSpcybN4/IyMiz5un3v3FcaB+AjoGGZLPZePzxx/H398fPz4/u3buTl5fnnt+cjwEFAA8KCgqw2Wzu15GRkeTn5593vs1mO2O+XBlP27+yspI+ffrw2GOPsXz5csrKyli8eLE3Sm2xFixYQEJCwjnn6fe/cVxoH+gYaFhxcXHuk3t2djarV68mKSnJPb85HwMKAB4YhnHWNJPJdNHz5cp42r4hISG89tprdO7cGavVyt13383GjRsbs0Sfpt9/79Mx0Dj279/P3XffzWOPPUaXLl3c05vzMaAA4EFUVBRFRUXu1wUFBWdchvvh/MLCwvNeppNL52n75+Xl8f7777tfG4aB1Wpt1Bp9mX7/vU/HQMNLS0vjrrvu4uGHH+bmm28+Y15zPgYUADwYNWoUW7ZsoaSkhOrqatauXUtiYqJ7fkxMDAEBAaSlpQGwYsWKM+bLlfG0/QMDA/n973/PkSNHMAyDt99+m7Fjx3qxYt+i33/v0zHQsI4dO8YDDzzAokWLmDx58lnzm/MxoADgQVRUFHPmzGHmzJncdNNNTJkyhYEDB3Lvvffy7bffArBo0SIWLlzIxIkTqa6uZubMmV6uuuXwtP3Dw8OZP38+999/PxMmTMAwDH72s595u+wWT7//3qdjoHG8/vrr2O12nn/+efdtlu+8806LOAZMxrkaMERERKRF0xUAERERH6QAICIi4oMUAERERHyQAoCIiIgPUgAQERHxQQoAIiIiPkjDRYlIk1RUVMSDDz6I1WrFbDazaNGiZjPCmkhzoHEARKRJcjqdmEwmzGYzy5Yt4/jx4/ziF7/wdlkiLYaaAETkovXq1Yv4+Hheeukl97RDhw5x4403MnjwYN566616W5fFYsFsPvUnqrKykri4OPe8mTNnMmDAAG677bZ6W5+Ir1ETgIhckg8//JDOnTu7X//9739n+PDhfPjhh/W+rvT0dJ5++mnKysp444033NPfeustli1bxnvvvVfv6xTxFQoAInJF8vLyzvmQlItRWFjIr371q7Omv/jii9hsNvr06cN7773H6tWr+etf/8r8+fOvtFwROU0BQETOUlFRwe9+9ztSUlKwWCz8/Oc/56677jrrfTNnzmT79u2kpaXx3HPPsWzZMu655x5mzJjBhx9+yJEjR5g0aRK/+tWvePzxx0lLS2PQoEH88Y9/pHXr1thsNpYsWXLOGmpra/H39wcgLCyMoKCghvyRRXyOAoCInOWBBx7g6quvZvPmzaSlpXH33XczZcqUs9731ltvceedd3LDDTdw6623uqevXbuWf/zjHzidTm666SbS09NZsGAB3bt3595772XJkiU8+OCDF6whIyOD3/3ud5jNZgICAnjuuefq/ecU8WUKACJyhs8++wyA++67D4CRI0cSFRVFVlbWRS/jjjvuoF27dgAkJCQQHh5O3759ARg7dixbtmzxuIyBAwfy9ttvX2r5InKRdBeAiJxhw4YNXH/99e7XLpeL8vJyIiIiLnoZ/zn5AwQEBJzxOjAwkKqqqvopVkQumwKAiJxh165dtGnTxv1669athIeH061bN+8VJSL1TgFARNzq6urIzs5mzZo12O129u/fzzPPPMPDDz/s7dJEpJ6pD4CIuB08eJCOHTsSFxfHqFGjiIiI4P7772fChAneLk1E6pmGAhYRtw8//JB169bxyiuvnHP+gAED8Pf358477+SXv/xl4xb3PT/72c/YuXMnAwcO5J///KfX6hBpznQFQETcMjIyLtjW/+233zZiNef3j3/8w9sliDR76gMgIm779u1TZz8RH6EmABERER+kKwAiIiI+SAFARETEBykAiIiI+CAFABERER+kACAiIuKDFABERER8kAKAiIiID1IAEBER8UEKACIiIj7o/wG/u0XiRQqQvQAAAABJRU5ErkJggg==\n", "text/plain": [ "
    " ] }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_179_1.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_183_1.png" } }, "output_type": "display_data" @@ -3163,18 +3209,6 @@ "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, ytilde))\n", "print(clf.coef_, clf.intercept_)\n", "\n", - "# The Ridge regression with a hyperparameter lambda = 0.1\n", - "_lambda = 0.1\n", - "clf_ridge = skl.Ridge(alpha=_lambda).fit(X, Energies)\n", - "yridge = clf_ridge.predict(X)\n", - "EoS['Eridge'] = yridge\n", - "# The mean squared error \n", - "print(\"Mean squared error: %.2f\" % mean_squared_error(Energies, yridge))\n", - "# Explained variance score: 1 is perfect prediction \n", - "print('Variance score: %.2f' % r2_score(Energies, yridge))\n", - "# Mean absolute error \n", - "print('Mean absolute error: %.2f' % mean_absolute_error(Energies, yridge))\n", - "print(clf_ridge.coef_, clf_ridge.intercept_)\n", "\n", "fig, ax = plt.subplots()\n", "ax.set_xlabel(r'$\\rho[\\mathrm{fm}^{-3}]$')\n", @@ -3183,8 +3217,6 @@ " label='Theoretical data')\n", "ax.plot(EoS['Density'], EoS['Eols'], alpha=0.7, lw=2, c='m',\n", " label='OLS')\n", - "ax.plot(EoS['Density'], EoS['Eridge'], alpha=0.7, lw=2, c='g',\n", - " label='Ridge $\\lambda = 0.1$')\n", "ax.legend()\n", "save_fig(\"EoSfitting\")\n", "plt.show()" @@ -3197,13 +3229,11 @@ "The above simple polynomial in density $\\rho$ gives an excellent fit\n", "to the data. \n", "\n", - "We note also that there is a small deviation between the\n", - "standard OLS and the Ridge regression at higher densities. We discuss this in more detail\n", - "below.\n", "\n", "\n", "## Splitting our Data in Training and Test data\n", "\n", + "\n", "It is normal in essentially all Machine Learning studies to split the\n", "data in a training set and a test set (sometimes also an additional\n", "validation set). **Scikit-Learn** has an own function for this. There\n", @@ -3213,7 +3243,13 @@ "postpone a discussion of this splitting to the end of these notes and\n", "our discussion of the so-called **bias-variance** tradeoff. Here we\n", "limit ourselves to repeat the above equation of state fitting example\n", - "but now splitting the data into a training set and a test set." + "but now splitting the data into a training set and a test set.\n", + "\n", + "Let us study some examples. The first code here takes a simple\n", + "one-dimensional second-order polynomial and we fit it to a\n", + "second-order polynomial. Depending on the strength of the added noise,\n", + "the various measures like the $R2$ score or the mean-squared error,\n", + "the fit becomes better or worse." ] }, { @@ -3228,14 +3264,125 @@ "name": "stdout", "output_type": "stream", "text": [ + "[ 2.00247083e+00 -3.54710530e-03 5.02096350e+00]\n", "Training R2\n", - "0.9999869956119286\n", + "0.99620088364924\n", "Training MSE\n", - "5.745136489050356\n", + "0.008171076530362356\n", "Test R2\n", - "0.9999787681537219\n", + "0.9968966158779216\n", "Test MSE\n", - "9.712199063818309\n" + "0.006530396683779109\n" + ] + } + ], + "source": [ + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "def R2(y_data, y_model):\n", + " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n", + "def MSE(y_data,y_model):\n", + " n = np.size(y_model)\n", + " return np.sum((y_data-y_model)**2)/n\n", + "\n", + "x = np.random.rand(100)\n", + "y = 2.0+5*x*x+0.1*np.random.randn(100)\n", + "\n", + "\n", + "# The design matrix now as function of a given polynomial\n", + "X = np.zeros((len(x),3))\n", + "X[:,0] = 1.0\n", + "X[:,1] = x\n", + "X[:,2] = x**2\n", + "# We split the data in test and training data\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", + "# matrix inversion to find beta\n", + "beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train\n", + "print(beta)\n", + "# and then make the prediction\n", + "ytilde = X_train @ beta\n", + "print(\"Training R2\")\n", + "print(R2(y_train,ytilde))\n", + "print(\"Training MSE\")\n", + "print(MSE(y_train,ytilde))\n", + "ypredict = X_test @ beta\n", + "print(\"Test R2\")\n", + "print(R2(y_test,ypredict))\n", + "print(\"Test MSE\")\n", + "print(MSE(y_test,ypredict))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, you could write your own test-train splitting function as shown here." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "# equivalently in numpy\n", + "def train_test_split_numpy(inputs, labels, train_size, test_size):\n", + " n_inputs = len(inputs)\n", + " inputs_shuffled = inputs.copy()\n", + " labels_shuffled = labels.copy()\n", + "\n", + " np.random.shuffle(inputs_shuffled)\n", + " np.random.shuffle(labels_shuffled)\n", + "\n", + " train_end = int(n_inputs*train_size)\n", + " X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]\n", + " Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]\n", + "\n", + " return X_train, X_test, Y_train, Y_test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But since **scikit-learn** has its own function for doing this and since\n", + "it interfaces easily with **tensorflow** and other libraries, we\n", + "normally recommend using the latter functionality.\n", + "\n", + "\n", + "As another example, we apply the training and testing split to \n", + "to the above equation of state fitting example\n", + "but now splitting the data into a training set and a test set." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training R2\n", + "0.9999850282256434\n", + "Training MSE\n", + "6.653725417896576\n", + "Test R2\n", + "0.9999887274726137\n", + "Test MSE\n", + "5.071447584032141\n" ] } ], @@ -3352,7 +3499,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 27, "metadata": { "collapsed": false, "editable": true @@ -3375,7 +3522,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 28, "metadata": { "collapsed": false, "editable": true @@ -3387,7 +3534,7 @@ "dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])" ] }, - "execution_count": 26, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -3411,7 +3558,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 29, "metadata": { "collapsed": false, "editable": true @@ -3432,7 +3579,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 30, "metadata": { "collapsed": false, "editable": true @@ -3458,7 +3605,7 @@ "dtype: int64" ] }, - "execution_count": 28, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -3477,7 +3624,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 31, "metadata": { "collapsed": false, "editable": true @@ -3500,7 +3647,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_191_1.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_199_1.png" } }, "output_type": "display_data" @@ -3524,7 +3671,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 32, "metadata": { "collapsed": false, "editable": true @@ -3536,7 +3683,7 @@ "" ] }, - "execution_count": 30, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, @@ -3549,7 +3696,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_193_1.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_201_1.png" } }, "output_type": "display_data" @@ -3572,7 +3719,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "metadata": { "collapsed": false, "editable": true @@ -3587,7 +3734,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_195_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_203_0.png" } }, "output_type": "display_data" @@ -3618,7 +3765,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 34, "metadata": { "collapsed": false, "editable": true @@ -3638,7 +3785,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 35, "metadata": { "collapsed": false, "editable": true @@ -3676,7 +3823,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 36, "metadata": { "collapsed": false, "editable": true @@ -3735,7 +3882,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 37, "metadata": { "collapsed": false, "editable": true @@ -3750,7 +3897,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_202_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_210_0.png" } }, "output_type": "display_data" @@ -3767,135 +3914,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Splitting our Data in Training and Test data\n", - "\n", - "\n", - "It is normal in essentially all Machine Learning studies to split the\n", - "data in a training set and a test set (sometimes also an additional\n", - "validation set). **Scikit-Learn** has an own function for this. There\n", - "is no explicit recipe for how much data should be included as training\n", - "data and say test data. An accepted rule of thumb is to use\n", - "approximately $2/3$ to $4/5$ of the data as training data. We will\n", - "postpone a discussion of this splitting to the end of these notes and\n", - "our discussion of the so-called **bias-variance** tradeoff. Here we\n", - "limit ourselves to repeat the above equation of state fitting example\n", - "but now splitting the data into a training set and a test set.\n", - "\n", - "Let us study some examples. The first code here takes a simple\n", - "one-dimensional second-order polynomial and we fit it to a\n", - "second-order polynomial. Depending on the strength of the added noise,\n", - "the various measures like the $R2$ score or the mean-squared error,\n", - "the fit becomes better or worse." - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 2.05802766 -0.30626706 5.27262964]\n", - "Training R2\n", - "0.9967292151090247\n", - "Training MSE\n", - "0.007931713723267314\n", - "Test R2\n", - "0.9966744029509663\n", - "Test MSE\n", - "0.006968283076248407\n" - ] - } - ], - "source": [ - "import os\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "\n", - "def R2(y_data, y_model):\n", - " return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2)\n", - "def MSE(y_data,y_model):\n", - " n = np.size(y_model)\n", - " return np.sum((y_data-y_model)**2)/n\n", - "\n", - "x = np.random.rand(100)\n", - "y = 2.0+5*x*x+0.1*np.random.randn(100)\n", - "\n", - "\n", - "# The design matrix now as function of a given polynomial\n", - "X = np.zeros((len(x),3))\n", - "X[:,0] = 1.0\n", - "X[:,1] = x\n", - "X[:,2] = x**2\n", - "# We split the data in test and training data\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", - "# matrix inversion to find beta\n", - "beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train\n", - "print(beta)\n", - "# and then make the prediction\n", - "ytilde = X_train @ beta\n", - "print(\"Training R2\")\n", - "print(R2(y_train,ytilde))\n", - "print(\"Training MSE\")\n", - "print(MSE(y_train,ytilde))\n", - "ypredict = X_test @ beta\n", - "print(\"Test R2\")\n", - "print(R2(y_test,ypredict))\n", - "print(\"Test MSE\")\n", - "print(MSE(y_test,ypredict))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you could write your own test-train splitting function as shown here." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "# equivalently in numpy\n", - "def train_test_split_numpy(inputs, labels, train_size, test_size):\n", - " n_inputs = len(inputs)\n", - " inputs_shuffled = inputs.copy()\n", - " labels_shuffled = labels.copy()\n", - "\n", - " np.random.shuffle(inputs_shuffled)\n", - " np.random.shuffle(labels_shuffled)\n", - "\n", - " train_end = int(n_inputs*train_size)\n", - " X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:]\n", - " Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:]\n", - "\n", - " return X_train, X_test, Y_train, Y_test" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But since **scikit-learn** has its own function for doing this and since\n", - "it interfaces easily with **tensorflow** and other libraries, we\n", - "normally recommend using the latter functionality.\n", - "\n", - "\n", - "\n", - "\n", "## Reducing the number of degrees of freedom, overarching view\n", "\n", "Many Machine Learning problems involve thousands or even millions of\n", @@ -4509,7 +4527,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_214_0.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter1_218_0.png" } }, "output_type": "display_data" diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1.py b/doc/LectureNotes/_build/jupyter_execute/chapter1.py index f7147cccd..be4c4230e 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter1.py +++ b/doc/LectureNotes/_build/jupyter_execute/chapter1.py @@ -7,38 +7,37 @@ -Our emphasis throughout this series of lectures -is on understanding the mathematical aspects of -different algorithms used in the fields of data analysis and machine learning. +Our emphasis throughout this series of lectures is on understanding +the mathematical aspects of different algorithms used in the fields of +data analysis and machine learning. -However, where possible we will emphasize the -importance of using available software. We start thus with a hands-on -and top-down approach to machine learning. The aim is thus to start with -relevant data or data we have produced -and use these to introduce statistical data analysis -concepts and machine learning algorithms before we delve into the -algorithms themselves. The examples we will use in the beginning, start with simple -polynomials with random noise added. We will use the Python -software package [Scikit-Learn](http://scikit-learn.org/stable/) and -introduce various machine learning algorithms to make fits of -the data and predictions. We move thereafter to more interesting -cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example). -These are examples where we can easily set up the data and -then use machine learning algorithms included in for example -**Scikit-Learn**. +However, where possible we will emphasize the importance of using +available software. We start thus with a hands-on and top-down +approach to machine learning. The aim is thus to start with relevant +data or data we have produced and use these to introduce statistical +data analysis concepts and machine learning algorithms before we delve +into the algorithms themselves. The examples we will use in the +beginning, start with simple polynomials with random noise added. We +will use the Python software package +[Scikit-Learn](http://scikit-learn.org/stable/) and introduce various +machine learning algorithms to make fits of the data and +predictions. We move thereafter to more interesting cases such as data +from say experiments (below we will look at experimental nuclear +binding energies as an example). These are examples where we can +easily set up the data and then use machine learning algorithms +included in for example **Scikit-Learn**. These examples will serve us the purpose of getting started. Furthermore, they allow us to catch more than two birds with a stone. They will allow us to bring in some programming specific -topics and tools as well as showing the power of various Python -libraries for machine learning and statistical data analysis. +topics and tools as well as showing the power of various Python +libraries for machine learning and statistical data analysis. -Here, we will mainly focus on two -specific Python packages for Machine Learning, Scikit-Learn and -Tensorflow (see below for links etc). Moreover, the examples we -introduce will serve as inputs to many of our discussions later, as -well as allowing you to set up models and produce your own data and -get started with programming. +Here, we will mainly focus on two specific Python packages for Machine +Learning, Scikit-Learn and Tensorflow (see below for links etc). +Moreover, the examples we introduce will serve as inputs to many of +our discussions later, as well as allowing you to set up models and +produce your own data and get started with programming. @@ -270,7 +269,17 @@ quality figures. Feel free to explore the extensive [gallery](https://matplotlib.org/gallery/index.html) of examples. In this example we plot our original values of $x$ and $y$ as well as the prediction **ypredict** ($\tilde{y}$), which attempts at fitting our -data with a straight line. +data with a straight line. Note also that **Scikit-Learn** requires a +matrix as input for the input values $x$ and $y$. In the above code we +have solved this by declaring $x$ and $y$ as arrays of dimension +$n\times 1$. + +In the code here we have also made a new array for $x\in [0,1]$. Our +prediction is computed for these values, meaning that they were not +included in the data set used to *train* (or fit) the model. +This is a recurrring theme in machine learning and data analysis. We would like to train a model on a specific given data set. +Thereafter we wish to apply it to data which were not included in the training. Below we will encounter this again in the so-called *train-validate-test* spliting. We will typically split our data into different sets, oen for training, one for validation and finally, our data from the untouched test vault! + The Python code follows here. @@ -285,6 +294,7 @@ x = np.random.rand(100,1) y = 2*x+np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) +# This is our new x-array to which we test our model xnew = np.array([[0],[1]]) ypredict = linreg.predict(xnew) @@ -384,8 +394,7 @@ plt.show() Depending on the parameter in front of the normal distribution, we may have a small or larger relative error. Try to play around with different training data sets and study (graphically) the value of the -relative error. Note also that **Scikit-Learn** requires a matrix as input for the input values $x$ and $y$. In the above code we have -solved this by declaring $x$ and $y$ as arrays of dimension $n\times 1$. +relative error. As mentioned above, **Scikit-Learn** has an impressive functionality. We can for example extract the values of $\alpha$ and $\beta$ and @@ -728,7 +737,7 @@ Energies = Masses['Ebinding'] print(Masses) The next step, and we will define this mathematically later, is to set up the so-called **design matrix**. We will throughout call this matrix $\boldsymbol{X}$. -It has dimensionality $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. +It has dimensionality $n\times p$, where $n$ is the number of data points and $p$ are the so-called predictors. In our case here they are given by the number of polynomials in $A$ we wish to include in the fit. # Now we set up the design matrix X X = np.zeros((len(A),5)) @@ -738,9 +747,12 @@ X[:,2] = A**(2.0/3.0) X[:,3] = A**(-1.0/3.0) X[:,4] = A**(-1.0) -Note well that we have made life simple here. We perform a fit in terms of the number of nucleons only. A more sophisticated fit can be done by including an explicit dependence on the number of protons and neutrons in the asymmetry and Coulomb terms. +Note well that we have made life simple here. We perform a fit in +terms of the number of nucleons only. A more sophisticated fit can be +done by including an explicit dependence on the number of protons and +neutrons in the asymmetry and Coulomb terms. We leave this as an exercise to you the reader. -With **scikitlearn** we are now ready to use linear regression and fit our data. +With **Scikit-Learn** we are now ready to use linear regression and fit our data. clf = skl.LinearRegression().fit(X, Energies) fity = clf.predict(X) @@ -768,7 +780,7 @@ ax.legend() save_fig("Masses2016") plt.show() -As a teaser, let us now see how we can do this with decision trees using **scikit-learn**. Later we will switch to so-called **random forests**! +As a teaser, let us now see how we can do this with decision trees using **Scikit-Learn**. Later we will switch to so-called **random forests**! #Decision Tree Regression @@ -801,6 +813,17 @@ plt.show() print(Masses) print(np.mean( (Energies-y_1)**2)) +With a deeper and deeper tree level, we can almost reproduce every +single data point by increasing the max depth of the tree. +We can actually decide to make a decision tree which fits every single point. +As we will +see later, this has the benefit that we can really train a model which +traverses every single data point. However, the price we pay is that +we will easily overfit. That is, if we apply our model to unseen data, +we will most likely fail miserably in our attempt at making +predictions. As an exercise, try to make the tree level larger by adjusting the maximum depth variable. When printing out the predicition, you will note that the binding energy of every nucleus is accurately reproduced. + + The **seaborn** package allows us to visualize data in an efficient way. Note that we use **scikit-learn**'s multi-layer perceptron (or feed forward neural network) functionality. @@ -1291,6 +1314,27 @@ $$ \frac{\partial\log{\vert\boldsymbol{A}\vert}}{\partial \boldsymbol{A}}=(\boldsymbol{A}^{-1})^T. $$ +We can then compute the second derivative of the cost function, which in our case is the second derivative +of the means squared error. This leads to + +$$ +\frac{\partial^2 C(\boldsymbol{\beta})}{\partial \boldsymbol{\beta}^T\partial \boldsymbol{\beta}} =\frac{2}{n}\boldsymbol{X}^T\boldsymbol{X}. +$$ + +This quantity defines was what is called the Hessian matrix (the second derivative of a function we want to optimize). + +The Hessian matrix plays an important role and is defined for the mean squared error as + +$$ +\boldsymbol{H}=\boldsymbol{X}^T\boldsymbol{X}. +$$ + +The Hessian matrix for ordinary least squares is also proportional to +the covariance matrix. As we will see in the chapter on Ridge and Lasso regression, This means that we can use the Singular Value Decomposition of a matrix to find +the eigenvalues of the covariance matrix and the Hessian matrix in +terms of the singular values. + + The residuals $\boldsymbol{\epsilon}$ are in turn given by $$ @@ -1523,9 +1567,7 @@ before, with the same initializations and declarations. We use also **pandas** again, rather extensively in order to organize our data. The difference now is that we use **Scikit-Learn's** regression tools -instead of our own matrix inversion implementation. Furthermore, we -sneak in **Ridge** regression (to be discussed below) which includes a -hyperparameter $\lambda$, also to be explained below. +instead of our own matrix inversion implementation. # Common imports import os @@ -1587,18 +1629,6 @@ print('Variance score: %.2f' % r2_score(Energies, ytilde)) print('Mean absolute error: %.2f' % mean_absolute_error(Energies, ytilde)) print(clf.coef_, clf.intercept_) -# The Ridge regression with a hyperparameter lambda = 0.1 -_lambda = 0.1 -clf_ridge = skl.Ridge(alpha=_lambda).fit(X, Energies) -yridge = clf_ridge.predict(X) -EoS['Eridge'] = yridge -# The mean squared error -print("Mean squared error: %.2f" % mean_squared_error(Energies, yridge)) -# Explained variance score: 1 is perfect prediction -print('Variance score: %.2f' % r2_score(Energies, yridge)) -# Mean absolute error -print('Mean absolute error: %.2f' % mean_absolute_error(Energies, yridge)) -print(clf_ridge.coef_, clf_ridge.intercept_) fig, ax = plt.subplots() ax.set_xlabel(r'$\rho[\mathrm{fm}^{-3}]$') @@ -1607,8 +1637,6 @@ ax.plot(EoS['Density'], EoS['Energy'], alpha=0.7, lw=2, label='Theoretical data') ax.plot(EoS['Density'], EoS['Eols'], alpha=0.7, lw=2, c='m', label='OLS') -ax.plot(EoS['Density'], EoS['Eridge'], alpha=0.7, lw=2, c='g', - label='Ridge $\lambda = 0.1$') ax.legend() save_fig("EoSfitting") plt.show() @@ -1616,13 +1644,11 @@ plt.show() The above simple polynomial in density $\rho$ gives an excellent fit to the data. -We note also that there is a small deviation between the -standard OLS and the Ridge regression at higher densities. We discuss this in more detail -below. ## Splitting our Data in Training and Test data + It is normal in essentially all Machine Learning studies to split the data in a training set and a test set (sometimes also an additional validation set). **Scikit-Learn** has an own function for this. There @@ -1634,6 +1660,77 @@ our discussion of the so-called **bias-variance** tradeoff. Here we limit ourselves to repeat the above equation of state fitting example but now splitting the data into a training set and a test set. +Let us study some examples. The first code here takes a simple +one-dimensional second-order polynomial and we fit it to a +second-order polynomial. Depending on the strength of the added noise, +the various measures like the $R2$ score or the mean-squared error, +the fit becomes better or worse. + +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from sklearn.model_selection import train_test_split + + +def R2(y_data, y_model): + return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2) +def MSE(y_data,y_model): + n = np.size(y_model) + return np.sum((y_data-y_model)**2)/n + +x = np.random.rand(100) +y = 2.0+5*x*x+0.1*np.random.randn(100) + + +# The design matrix now as function of a given polynomial +X = np.zeros((len(x),3)) +X[:,0] = 1.0 +X[:,1] = x +X[:,2] = x**2 +# We split the data in test and training data +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) +# matrix inversion to find beta +beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train +print(beta) +# and then make the prediction +ytilde = X_train @ beta +print("Training R2") +print(R2(y_train,ytilde)) +print("Training MSE") +print(MSE(y_train,ytilde)) +ypredict = X_test @ beta +print("Test R2") +print(R2(y_test,ypredict)) +print("Test MSE") +print(MSE(y_test,ypredict)) + +Alternatively, you could write your own test-train splitting function as shown here. + +# equivalently in numpy +def train_test_split_numpy(inputs, labels, train_size, test_size): + n_inputs = len(inputs) + inputs_shuffled = inputs.copy() + labels_shuffled = labels.copy() + + np.random.shuffle(inputs_shuffled) + np.random.shuffle(labels_shuffled) + + train_end = int(n_inputs*train_size) + X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:] + Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:] + + return X_train, X_test, Y_train, Y_test + +But since **scikit-learn** has its own function for doing this and since +it interfaces easily with **tensorflow** and other libraries, we +normally recommend using the latter functionality. + + +As another example, we apply the training and testing split to +to the above equation of state fitting example +but now splitting the data into a training set and a test set. + import os import numpy as np import pandas as pd @@ -1854,89 +1951,6 @@ print('R2 score is {}'.format(r2)) plt.scatter(Y_test, y_test_predict) plt.show() -## Splitting our Data in Training and Test data - - -It is normal in essentially all Machine Learning studies to split the -data in a training set and a test set (sometimes also an additional -validation set). **Scikit-Learn** has an own function for this. There -is no explicit recipe for how much data should be included as training -data and say test data. An accepted rule of thumb is to use -approximately $2/3$ to $4/5$ of the data as training data. We will -postpone a discussion of this splitting to the end of these notes and -our discussion of the so-called **bias-variance** tradeoff. Here we -limit ourselves to repeat the above equation of state fitting example -but now splitting the data into a training set and a test set. - -Let us study some examples. The first code here takes a simple -one-dimensional second-order polynomial and we fit it to a -second-order polynomial. Depending on the strength of the added noise, -the various measures like the $R2$ score or the mean-squared error, -the fit becomes better or worse. - -import os -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from sklearn.model_selection import train_test_split - - -def R2(y_data, y_model): - return 1 - np.sum((y_data - y_model) ** 2) / np.sum((y_data - np.mean(y_data)) ** 2) -def MSE(y_data,y_model): - n = np.size(y_model) - return np.sum((y_data-y_model)**2)/n - -x = np.random.rand(100) -y = 2.0+5*x*x+0.1*np.random.randn(100) - - -# The design matrix now as function of a given polynomial -X = np.zeros((len(x),3)) -X[:,0] = 1.0 -X[:,1] = x -X[:,2] = x**2 -# We split the data in test and training data -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) -# matrix inversion to find beta -beta = np.linalg.inv(X_train.T @ X_train) @ X_train.T @ y_train -print(beta) -# and then make the prediction -ytilde = X_train @ beta -print("Training R2") -print(R2(y_train,ytilde)) -print("Training MSE") -print(MSE(y_train,ytilde)) -ypredict = X_test @ beta -print("Test R2") -print(R2(y_test,ypredict)) -print("Test MSE") -print(MSE(y_test,ypredict)) - -Alternatively, you could write your own test-train splitting function as shown here. - -# equivalently in numpy -def train_test_split_numpy(inputs, labels, train_size, test_size): - n_inputs = len(inputs) - inputs_shuffled = inputs.copy() - labels_shuffled = labels.copy() - - np.random.shuffle(inputs_shuffled) - np.random.shuffle(labels_shuffled) - - train_end = int(n_inputs*train_size) - X_train, X_test = inputs_shuffled[:train_end], inputs_shuffled[train_end:] - Y_train, Y_test = labels_shuffled[:train_end], labels_shuffled[train_end:] - - return X_train, X_test, Y_train, Y_test - -But since **scikit-learn** has its own function for doing this and since -it interfaces easily with **tensorflow** and other libraries, we -normally recommend using the latter functionality. - - - - ## Reducing the number of degrees of freedom, overarching view Many Machine Learning problems involve thousands or even millions of diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_11_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_11_0.png index 8585b7491..65d331dc5 100644 Binary files a/doc/LectureNotes/_build/jupyter_execute/chapter1_11_0.png and b/doc/LectureNotes/_build/jupyter_execute/chapter1_11_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_136_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_136_0.png new file mode 100644 index 000000000..29a1bd652 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_136_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_13_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_13_1.png index b145ce82a..d70ab26ee 100644 Binary files a/doc/LectureNotes/_build/jupyter_execute/chapter1_13_1.png and b/doc/LectureNotes/_build/jupyter_execute/chapter1_13_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_183_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_183_1.png new file mode 100644 index 000000000..0821feaf6 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_183_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_199_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_199_1.png new file mode 100644 index 000000000..f19e88b16 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_199_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_201_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_201_1.png new file mode 100644 index 000000000..13fd31349 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_201_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_203_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_203_0.png new file mode 100644 index 000000000..dfe1e253c Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_203_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_210_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_210_0.png new file mode 100644 index 000000000..a3eac788b Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_210_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_218_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_218_0.png new file mode 100644 index 000000000..cbac4fd70 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter1_218_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_27_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_27_0.png index bef273ce3..889056124 100644 Binary files a/doc/LectureNotes/_build/jupyter_execute/chapter1_27_0.png and b/doc/LectureNotes/_build/jupyter_execute/chapter1_27_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_3_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_3_0.png index 0be2e475d..656724cd5 100644 Binary files a/doc/LectureNotes/_build/jupyter_execute/chapter1_3_0.png and b/doc/LectureNotes/_build/jupyter_execute/chapter1_3_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter1_61_10.png b/doc/LectureNotes/_build/jupyter_execute/chapter1_61_10.png index 16b5dca78..2c196f8b3 100644 Binary files a/doc/LectureNotes/_build/jupyter_execute/chapter1_61_10.png and b/doc/LectureNotes/_build/jupyter_execute/chapter1_61_10.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter2.ipynb b/doc/LectureNotes/_build/jupyter_execute/chapter2.ipynb index 1ced6d808..e167c4f90 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter2.ipynb +++ b/doc/LectureNotes/_build/jupyter_execute/chapter2.ipynb @@ -13,7 +13,7 @@ "What is presented here is a mathematical analysis of various regression algorithms (ordinary least squares, Ridge and Lasso Regression). The analysis is based on an important algorithm in linear algebra, the so-called Singular Value Decomposition (SVD). \n", "\n", "\n", - "We have shown that in ordinary least squares the optimal parameters $\\beta$ are given by" + "We have shown that in ordinary least squares (OLS) the optimal parameters $\\beta$ are given by" ] }, { @@ -21,7 +21,7 @@ "metadata": {}, "source": [ "$$\n", - "\\hat{\\boldsymbol{\\beta}} = \\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", + "\\hat{\\boldsymbol{\\beta}}_{\\mathrm{OLS}} = \\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n", "$$" ] }, @@ -79,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The matrix $\\boldsymbol{A}$ has the important property that $\\boldsymbol{A}^2=\\boldsymbol{A}$. This is the definition of a projection matrix.\n", + "The matrix $\\boldsymbol{A}$ has the important property that $\\boldsymbol{A}^2=\\boldsymbol{A}$. This is the definition of a [projection matrix](https://en.wikipedia.org/wiki/Projection_matrix).\n", "We can then interpret our optimal model $\\tilde{\\boldsymbol{y}}$ as being represented by an orthogonal projection of $\\boldsymbol{y}$ onto a space defined by the column vectors of $\\boldsymbol{X}$. In our case here the matrix $\\boldsymbol{A}$ is a square matrix. If it is a general rectangular matrix we have an oblique projection matrix.\n", "\n", "\n", @@ -567,7 +567,7 @@ "\n", "## Code for SVD and Inversion of Matrices\n", "\n", - "How do we use the SVD to invert a matrix $\\boldsymbol{X}^\\boldsymbol{X}$ which is singular or near singular?\n", + "How do we use the SVD to invert a matrix $\\boldsymbol{X}^T\\boldsymbol{X}$ which is singular or near singular?\n", "The simple answer is to use the linear algebra function for the pseudoinverse, that is" ] }, @@ -1470,10 +1470,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.059680303635344434\n", - "4.260227742627244\n", - "[[0.89704131 2.55795935]\n", - " [2.55795935 8.24340751]]\n" + "-0.1831277634928002\n", + "3.3041320306136366\n", + "[[1.03929932 3.07670437]\n", + " [3.07670437 9.7701384 ]]\n" ] } ], @@ -1513,10 +1513,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.08362077210702115\n", - "1.8429949116841184\n", - "[[1. 0.6996584]\n", - " [0.6996584 1. ]]\n" + "0.09456011349477329\n", + "1.6600855222624895\n", + "[[1. 0.70183798]\n", + " [0.70183798 1. ]]\n" ] } ], @@ -1571,30 +1571,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[-1.25981533 -3.84976606]\n", - " [-0.52570079 -0.62262506]\n", - " [ 0.51707172 3.46973015]\n", - " [-0.47265243 -1.87030083]\n", - " [ 0.73734906 2.46183815]\n", - " [ 0.4918372 2.05531364]\n", - " [ 0.3893239 0.47862383]\n", - " [-0.41237437 -0.85058354]\n", - " [ 0.77622336 0.54697204]\n", - " [-0.24126232 -1.81920231]]\n", + "[[ 0.54316925 0.40968888]\n", + " [-1.8393131 -5.8788431 ]\n", + " [ 0.24613822 0.9957744 ]\n", + " [ 1.38892672 3.93679587]\n", + " [ 0.06540809 -0.84008474]\n", + " [ 0.49841285 2.31081134]\n", + " [-0.49323032 -1.25263916]\n", + " [ 0.08380813 -0.7925146 ]\n", + " [ 0.64078247 2.92814088]\n", + " [-1.13410232 -1.81712976]]\n", " 0 1\n", - "0 -1.259815 -3.849766\n", - "1 -0.525701 -0.622625\n", - "2 0.517072 3.469730\n", - "3 -0.472652 -1.870301\n", - "4 0.737349 2.461838\n", - "5 0.491837 2.055314\n", - "6 0.389324 0.478624\n", - "7 -0.412374 -0.850584\n", - "8 0.776223 0.546972\n", - "9 -0.241262 -1.819202\n", + "0 0.543169 0.409689\n", + "1 -1.839313 -5.878843\n", + "2 0.246138 0.995774\n", + "3 1.388927 3.936796\n", + "4 0.065408 -0.840085\n", + "5 0.498413 2.310811\n", + "6 -0.493230 -1.252639\n", + "7 0.083808 -0.792515\n", + "8 0.640782 2.928141\n", + "9 -1.134102 -1.817130\n", " 0 1\n", - "0 1.000000 0.881323\n", - "1 0.881323 1.000000\n" + "0 1.000000 0.942726\n", + "1 0.942726 1.000000\n" ] } ], @@ -1636,37 +1636,37 @@ "text": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "1 0.0 0.082272 0.078892 0.081102 0.080738 0.080182 0.072012 0.072246 \n", - "2 0.0 0.078892 0.076822 0.075975 0.076166 0.076251 0.066705 0.067202 \n", - "3 0.0 0.081102 0.075975 0.085259 0.084103 0.082616 0.078750 0.078649 \n", - "4 0.0 0.080738 0.076166 0.084103 0.083246 0.082091 0.077338 0.077407 \n", - "5 0.0 0.080182 0.076251 0.082616 0.082091 0.081309 0.075567 0.075818 \n", - "6 0.0 0.072012 0.066705 0.078750 0.077338 0.075567 0.074693 0.074434 \n", - "7 0.0 0.072246 0.067202 0.078649 0.077407 0.075818 0.074434 0.074285 \n", - "8 0.0 0.072468 0.067718 0.078474 0.077416 0.076026 0.074077 0.074044 \n", - "9 0.0 0.072661 0.068244 0.078197 0.077339 0.076169 0.073591 0.073681 \n", - "10 0.0 0.063190 0.058247 0.070949 0.069542 0.067794 0.068593 0.068293 \n", - "11 0.0 0.063523 0.058719 0.071156 0.069853 0.068213 0.068717 0.068491 \n", - "12 0.0 0.063880 0.059225 0.071359 0.070166 0.068640 0.068821 0.068673 \n", - "13 0.0 0.064257 0.059765 0.071549 0.070473 0.069071 0.068896 0.068828 \n", - "14 0.0 0.064647 0.060335 0.071714 0.070764 0.069496 0.068928 0.068945 \n", + "1 0.0 0.080633 0.085811 0.085748 0.084826 0.083221 0.080341 0.078342 \n", + "2 0.0 0.085811 0.092659 0.093248 0.092932 0.091659 0.088414 0.086561 \n", + "3 0.0 0.085748 0.093248 0.096639 0.096802 0.095941 0.093928 0.092288 \n", + "4 0.0 0.084826 0.092932 0.096802 0.097346 0.096763 0.094774 0.093328 \n", + "5 0.0 0.083221 0.091659 0.095941 0.096763 0.096406 0.094513 0.093236 \n", + "6 0.0 0.080341 0.088414 0.093928 0.094774 0.094513 0.093573 0.092375 \n", + "7 0.0 0.078342 0.086561 0.092288 0.093328 0.093236 0.092375 0.091318 \n", + "8 0.0 0.076213 0.084461 0.090355 0.091535 0.091578 0.090817 0.089881 \n", + "9 0.0 0.074037 0.082239 0.088258 0.089540 0.089693 0.089039 0.088209 \n", + "10 0.0 0.073546 0.081474 0.088137 0.089326 0.089437 0.089352 0.088484 \n", + "11 0.0 0.071453 0.079337 0.086052 0.087334 0.087544 0.087526 0.086757 \n", + "12 0.0 0.069371 0.077163 0.083905 0.085253 0.085544 0.085598 0.084916 \n", + "13 0.0 0.067326 0.074996 0.081744 0.083138 0.083495 0.083622 0.083015 \n", + "14 0.0 0.065334 0.072862 0.079597 0.081024 0.081435 0.081632 0.081092 \n", "\n", " 8 9 10 11 12 13 14 \n", "0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "1 0.072468 0.072661 0.063190 0.063523 0.063880 0.064257 0.064647 \n", - "2 0.067718 0.068244 0.058247 0.058719 0.059225 0.059765 0.060335 \n", - "3 0.078474 0.078197 0.070949 0.071156 0.071359 0.071549 0.071714 \n", - "4 0.077416 0.077339 0.069542 0.069853 0.070166 0.070473 0.070764 \n", - "5 0.076026 0.076169 0.067794 0.068213 0.068640 0.069071 0.069496 \n", - "6 0.074077 0.073591 0.068593 0.068717 0.068821 0.068896 0.068928 \n", - "7 0.074044 0.073681 0.068293 0.068491 0.068673 0.068828 0.068945 \n", - "8 0.073926 0.073695 0.067889 0.068165 0.068427 0.068667 0.068873 \n", - "9 0.073695 0.073607 0.067355 0.067711 0.068056 0.068385 0.068686 \n", - "10 0.067889 0.067355 0.063925 0.064013 0.064075 0.064101 0.064078 \n", - "11 0.068165 0.067711 0.064013 0.064156 0.064273 0.064357 0.064393 \n", - "12 0.068427 0.068056 0.064075 0.064273 0.064449 0.064591 0.064689 \n", - "13 0.068667 0.068385 0.064101 0.064357 0.064591 0.064795 0.064958 \n", - "14 0.068873 0.068686 0.064078 0.064393 0.064689 0.064958 0.065188 \n" + "1 0.076213 0.074037 0.073546 0.071453 0.069371 0.067326 0.065334 \n", + "2 0.084461 0.082239 0.081474 0.079337 0.077163 0.074996 0.072862 \n", + "3 0.090355 0.088258 0.088137 0.086052 0.083905 0.081744 0.079597 \n", + "4 0.091535 0.089540 0.089326 0.087334 0.085253 0.083138 0.081024 \n", + "5 0.091578 0.089693 0.089437 0.087544 0.085544 0.083495 0.081435 \n", + "6 0.090817 0.089039 0.089352 0.087526 0.085598 0.083622 0.081632 \n", + "7 0.089881 0.088209 0.088484 0.086757 0.084916 0.083015 0.081092 \n", + "8 0.088556 0.086985 0.087242 0.085610 0.083855 0.082032 0.080182 \n", + "9 0.086985 0.085510 0.085763 0.084221 0.082549 0.080806 0.079029 \n", + "10 0.087242 0.085763 0.086430 0.084864 0.083177 0.081425 0.079643 \n", + "11 0.085610 0.084221 0.084864 0.083384 0.081778 0.080101 0.078390 \n", + "12 0.083855 0.082549 0.083177 0.081778 0.080249 0.078646 0.077005 \n", + "13 0.082032 0.080806 0.081425 0.080101 0.078646 0.077115 0.075542 \n", + "14 0.080182 0.079029 0.079643 0.078390 0.077005 0.075542 0.074036 \n" ] } ], @@ -2866,14 +2866,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2. 2.]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", + "[2. 2.]\n", "Training MSE for OLS\n", "3.0\n" ] @@ -2887,7 +2880,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter2_245_2.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter2_245_1.png" }, "needs_background": "light" }, @@ -3707,6 +3700,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "**More text will be added to this example.**\n", + "\n", "## Linking the regression analysis with a statistical interpretation\n", "\n", "We will now couple the discussions of ordinary least squares, Ridge\n", @@ -4073,7 +4068,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "It is a conditional probability (see below) and reads as the likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters $\\boldsymbol{\\beta}$.\n", + "It is a conditional probability (see below) and reads as the\n", + "likelihood of a domain of events $\\boldsymbol{D}$ given a set of parameters\n", + "$\\boldsymbol{\\beta}$.\n", "\n", "\n", "In statistics, maximum likelihood estimation (MLE) is a method of\n", @@ -4177,7 +4174,7 @@ "We define also the likelihood for $X$ and $Y$ as $p(X)$ and $p(Y)$ respectively.\n", "The likelihood of a specific event $x_i$ (or $y_i$) is then written as $p(X=x_i)$ or just $p(x_i)=p_i$. \n", "\n", - "**Union of events is given by.**" + "The union of events is given by" ] }, { @@ -4193,7 +4190,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**The product rule (aka joint probability) is given by.**" + "The product rule (aka joint probability) is given by" ] }, { @@ -4211,8 +4208,6 @@ "source": [ "where we read $p(X\\vert Y)$ as the likelihood of obtaining $X$ given $Y$.\n", "\n", - "\n", - "\n", "If we have independent events then $p(X,Y)=p(X)p(Y)$.\n", "\n", "\n", @@ -4289,21 +4284,27 @@ "the parameter space represented by $X$. This function is not\n", "necesseraly normalized and is normally called the likelihood function.\n", "\n", - "The function $p(X)$ on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution.\n", + "The function $p(X)$ on the right hand side is called the prior while\n", + "the function on the left hand side is the called the posterior\n", + "probability. The denominator on the right hand side serves as a\n", + "normalization factor for the posterior distribution.\n", "\n", "Let us try to illustrate Bayes' theorem through an example.\n", "\n", "\n", - "Let us suppose that you are undergoing a series of mammography scans in\n", - "order to rule out possible breast cancer cases. We define the\n", + "Let us suppose that you are undergoing a series of mammography scans\n", + "in order to rule out possible breast cancer cases. We define the\n", "sensitivity for a positive event by the variable $X$. It takes binary\n", "values with $X=1$ representing a positive event and $X=0$ being a\n", "negative event. We reserve $Y$ as a classification parameter for\n", - "either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing).\n", + "either a negative or a positive breast cancer confirmation. (Short\n", + "note on wordings: positive here means having breast cancer, although\n", + "none of us would consider this being a positive thing).\n", "\n", "We let $Y=1$ represent the the case of having breast cancer and $Y=0$ as not.\n", "\n", - "Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$, that is we have" + "Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$ (the numbers here are all made up),\n", + "that is we have" ] }, { @@ -4319,12 +4320,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of $80\\%$ for having cancer.\n", - "It is however not correct, as the following Bayesian analysis shows.\n", + "This obviously sounds scary since many would conclude that if the test\n", + "is positive, there is a likelihood of $80\\%$ for having cancer. It is\n", + "however not correct, as the following Bayesian analysis shows. The correct question to pose is *what is the probability of having breast cancer in case of a positive test?*\n", + "We are thus interested in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p(Y=1\\vert X=1),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "instead of $p(X=1\\vert Y=1)$.\n", "\n", "\n", - "If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number.\n", - "Let us assume that the prior probability in the population as a whole is" + "\n", + "If we look at various national surveys on breast cancer, the general\n", + "likelihood of developing breast cancer is a very small number. Let us\n", + "assume that the prior probability in the population as a whole is" ] }, { @@ -4340,7 +4361,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have" + "We need also to account for the fact that the test may produce a false\n", + "positive result (false alarm). Let us here assume that we have" ] }, { @@ -4356,15 +4378,38 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Using Bayes' theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute" + "Using Bayes' theorem we can then find the posterior probability that\n", + "the person has breast cancer in case of a positive test, that is we\n", + "can compute" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "\n", + "
    \n", + "\n", "$$\n", - "p(Y=1\\vert X=1)=\\frac{p(X=1\\vert Y=1)p(Y=1)}{p(X=1\\vert Y=1)p(Y=1)+p(X=1\\vert Y=0)p(Y=0)}=\\frac{0.8\\times 0.004}{0.8\\times 0.004+0.1\\times 0.996}=0.031.\n", + "\\begin{equation}\n", + "p(Y=1\\vert X=1)=\\frac{p(X=1\\vert Y=1)p(Y=1)}{p(X=1\\vert Y=1)p(Y=1)+p(X=1\\vert Y=0)p(Y=0)}= \n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + " \\frac{0.8\\times 0.004}{0.8\\times 0.004+0.1\\times 0.996}=0.031.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", "$$" ] }, @@ -4390,9 +4435,12 @@ "parameters $\\boldsymbol{\\beta}$ using OLS, Ridge and Lasso regression. For\n", "OLS, you will notice as function of the noise and polynomial degree,\n", "that the parameters $\\beta$ will fluctuate from order to order in the\n", - "polynomial fit and that for larger and larger polynomial degrees of freedom, the parameters will tend to increase in value for OLS.\n", + "polynomial fit and that for larger and larger polynomial degrees of\n", + "freedom, the parameters will tend to increase in value for OLS.\n", "\n", - "For Ridge and Lasso regression, the higher order parameters will typically be reduced, providing thereby less fluctuations from one order to another one." + "For Ridge and Lasso regression, the higher order parameters will\n", + "typically be reduced, providing thereby less fluctuations from one\n", + "order to another one." ] }, { @@ -4409,21 +4457,7 @@ "text": [ "[ 1.0169643 0.27924636 -1.4087793 1.03308408 0. ]\n", "Test MSE OLS\n", - "0.958228616652075\n", - "0.001 [ 1.0170259 0.27852549 -1.40702 1.03193199 0. ]\n", - "0.001 [ 1.034342 -0.18063928 -0. 0. 0. ]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.021544346900318832 [ 1.01825571 0.26412372 -1.37186301 1.00890601 0. ]\n", - "0.021544346900318832 [ 0.92280994 -0. -0. -0. 0. ]\n", - "0.46415888336127775 [ 1.0344707 0.07160764 -0.89928965 0.69843037 0. ]\n", - "0.46415888336127775 [0.48019541 0. 0. 0. 0. ]\n", - "10.0 [ 1.04529095 -0.18224665 -0.15751596 0.16831012 0. ]\n", - "10.0 [0. 0. 0. 0. 0.]\n" + "0.958228616652075\n" ] }, { @@ -4435,7 +4469,7 @@ }, "metadata": { "filenames": { - "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter2_313_2.png" + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter2_316_1.png" }, "needs_background": "light" }, @@ -4496,8 +4530,8 @@ " # Compute the MSE and print it\n", " MSERidgePredict[i] = MSE(y_test,ypredictRidge)\n", " MSELassoPredict[i] = MSE(y_test,ypredictLasso)\n", - " print(lmb,RegRidge.coef_)\n", - " print(lmb,RegLasso.coef_)\n", + "# print(lmb,RegRidge.coef_)\n", + "# print(lmb,RegLasso.coef_)\n", "# Now plot the results\n", "plt.figure()\n", "plt.plot(np.log10(lambdas), MSERidgePredict, 'b', label = 'MSE Ridge Test')\n", @@ -4512,10 +4546,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "How can we understand this? \n", + "How can we understand this? **More text to be added**.\n", "\n", "\n", "\n", + "## Linking Bayes' Theorem with Ridge and Lasso Regression\n", + "\n", + "\n", "Using Bayes' theorem we can gain a better intuition about Ridge and Lasso regression. \n", "\n", "For ordinary least squares we postulated that the maximum likelihood for the doamin of events $\\boldsymbol{D}$ (one-dimensional case)" diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter2.py b/doc/LectureNotes/_build/jupyter_execute/chapter2.py index 99539ec90..73becd4f1 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter2.py +++ b/doc/LectureNotes/_build/jupyter_execute/chapter2.py @@ -7,10 +7,10 @@ What is presented here is a mathematical analysis of various regression algorithms (ordinary least squares, Ridge and Lasso Regression). The analysis is based on an important algorithm in linear algebra, the so-called Singular Value Decomposition (SVD). -We have shown that in ordinary least squares the optimal parameters $\beta$ are given by +We have shown that in ordinary least squares (OLS) the optimal parameters $\beta$ are given by $$ -\hat{\boldsymbol{\beta}} = \left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. +\hat{\boldsymbol{\beta}}_{\mathrm{OLS}} = \left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. $$ The **hat** over $\boldsymbol{\beta}$ means we have the optimal parameters after minimization of the cost function. @@ -33,7 +33,7 @@ $$ \tilde{\boldsymbol{y}}=\boldsymbol{X}\hat{\boldsymbol{\beta}} = \boldsymbol{A}\boldsymbol{y}. $$ -The matrix $\boldsymbol{A}$ has the important property that $\boldsymbol{A}^2=\boldsymbol{A}$. This is the definition of a projection matrix. +The matrix $\boldsymbol{A}$ has the important property that $\boldsymbol{A}^2=\boldsymbol{A}$. This is the definition of a [projection matrix](https://en.wikipedia.org/wiki/Projection_matrix). We can then interpret our optimal model $\tilde{\boldsymbol{y}}$ as being represented by an orthogonal projection of $\boldsymbol{y}$ onto a space defined by the column vectors of $\boldsymbol{X}$. In our case here the matrix $\boldsymbol{A}$ is a square matrix. If it is a general rectangular matrix we have an oblique projection matrix. @@ -344,7 +344,7 @@ example ## Code for SVD and Inversion of Matrices -How do we use the SVD to invert a matrix $\boldsymbol{X}^\boldsymbol{X}$ which is singular or near singular? +How do we use the SVD to invert a matrix $\boldsymbol{X}^T\boldsymbol{X}$ which is singular or near singular? The simple answer is to use the linear algebra function for the pseudoinverse, that is #Ainv = np.linlag.pinv(A) @@ -1917,6 +1917,8 @@ X = matrix( [ [ 2, 0, 1], [0, 1, 3]]) y = matrix( [4, 2, 3]) x = l1regls(X,y) +**More text will be added to this example.** + ## Linking the regression analysis with a statistical interpretation We will now couple the discussions of ordinary least squares, Ridge @@ -2133,7 +2135,9 @@ $$ p(\boldsymbol{D}\vert\boldsymbol{\beta})=\prod_{i=0}^{n-1}\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[-\frac{(y_i-\boldsymbol{X}_{i,*}\boldsymbol{\beta})^2}{2\sigma^2}\right]}. $$ -It is a conditional probability (see below) and reads as the likelihood of a domain of events $\boldsymbol{D}$ given a set of parameters $\boldsymbol{\beta}$. +It is a conditional probability (see below) and reads as the +likelihood of a domain of events $\boldsymbol{D}$ given a set of parameters +$\boldsymbol{\beta}$. In statistics, maximum likelihood estimation (MLE) is a method of @@ -2197,13 +2201,13 @@ Assume we have two domains of events $X=[x_0,x_1,\dots,x_{n-1}]$ and $Y=[y_0,y_1 We define also the likelihood for $X$ and $Y$ as $p(X)$ and $p(Y)$ respectively. The likelihood of a specific event $x_i$ (or $y_i$) is then written as $p(X=x_i)$ or just $p(x_i)=p_i$. -**Union of events is given by.** +The union of events is given by $$ p(X \cup Y)= p(X)+p(Y)-p(X \cap Y). $$ -**The product rule (aka joint probability) is given by.** +The product rule (aka joint probability) is given by $$ p(X \cup Y)= p(X,Y)= p(X\vert Y)p(Y)=p(Y\vert X)p(X), @@ -2211,8 +2215,6 @@ $$ where we read $p(X\vert Y)$ as the likelihood of obtaining $X$ given $Y$. - - If we have independent events then $p(X,Y)=p(X)p(Y)$. @@ -2249,47 +2251,82 @@ evaluated for the observed data $Y$ and can be viewed as a function of the parameter space represented by $X$. This function is not necesseraly normalized and is normally called the likelihood function. -The function $p(X)$ on the right hand side is called the prior while the function on the left hand side is the called the posterior probability. The denominator on the right hand side serves as a normalization factor for the posterior distribution. +The function $p(X)$ on the right hand side is called the prior while +the function on the left hand side is the called the posterior +probability. The denominator on the right hand side serves as a +normalization factor for the posterior distribution. Let us try to illustrate Bayes' theorem through an example. -Let us suppose that you are undergoing a series of mammography scans in -order to rule out possible breast cancer cases. We define the +Let us suppose that you are undergoing a series of mammography scans +in order to rule out possible breast cancer cases. We define the sensitivity for a positive event by the variable $X$. It takes binary values with $X=1$ representing a positive event and $X=0$ being a negative event. We reserve $Y$ as a classification parameter for -either a negative or a positive breast cancer confirmation. (Short note on wordings: positive here means having breast cancer, although none of us would consider this being a positive thing). +either a negative or a positive breast cancer confirmation. (Short +note on wordings: positive here means having breast cancer, although +none of us would consider this being a positive thing). We let $Y=1$ represent the the case of having breast cancer and $Y=0$ as not. -Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$, that is we have +Let us assume that if you have breast cancer, the test will be positive with a probability of $0.8$ (the numbers here are all made up), +that is we have $$ p(X=1\vert Y=1) =0.8. $$ -This obviously sounds scary since many would conclude that if the test is positive, there is a likelihood of $80\%$ for having cancer. -It is however not correct, as the following Bayesian analysis shows. +This obviously sounds scary since many would conclude that if the test +is positive, there is a likelihood of $80\%$ for having cancer. It is +however not correct, as the following Bayesian analysis shows. The correct question to pose is *what is the probability of having breast cancer in case of a positive test?* +We are thus interested in + +$$ +p(Y=1\vert X=1), +$$ + +instead of $p(X=1\vert Y=1)$. -If we look at various national surveys on breast cancer, the general likelihood of developing breast cancer is a very small number. -Let us assume that the prior probability in the population as a whole is + +If we look at various national surveys on breast cancer, the general +likelihood of developing breast cancer is a very small number. Let us +assume that the prior probability in the population as a whole is $$ p(Y=1) =0.004. $$ -We need also to account for the fact that the test may produce a false positive result (false alarm). Let us here assume that we have +We need also to account for the fact that the test may produce a false +positive result (false alarm). Let us here assume that we have $$ p(X=1\vert Y=0) =0.1. $$ -Using Bayes' theorem we can then find the posterior probability that the person has breast cancer in case of a positive test, that is we can compute +Using Bayes' theorem we can then find the posterior probability that +the person has breast cancer in case of a positive test, that is we +can compute + + +
    $$ -p(Y=1\vert X=1)=\frac{p(X=1\vert Y=1)p(Y=1)}{p(X=1\vert Y=1)p(Y=1)+p(X=1\vert Y=0)p(Y=0)}=\frac{0.8\times 0.004}{0.8\times 0.004+0.1\times 0.996}=0.031. +\begin{equation} +p(Y=1\vert X=1)=\frac{p(X=1\vert Y=1)p(Y=1)}{p(X=1\vert Y=1)p(Y=1)+p(X=1\vert Y=0)p(Y=0)}= +\label{_auto2} \tag{2} +\end{equation} +$$ + + +
    + +$$ +\begin{equation} + \frac{0.8\times 0.004}{0.8\times 0.004+0.1\times 0.996}=0.031. +\label{_auto3} \tag{3} +\end{equation} $$ That is, in case of a positive test, there is only a $3\%$ chance of having breast cancer! @@ -2310,9 +2347,12 @@ We will play around with a study of the values for the optimal parameters $\boldsymbol{\beta}$ using OLS, Ridge and Lasso regression. For OLS, you will notice as function of the noise and polynomial degree, that the parameters $\beta$ will fluctuate from order to order in the -polynomial fit and that for larger and larger polynomial degrees of freedom, the parameters will tend to increase in value for OLS. +polynomial fit and that for larger and larger polynomial degrees of +freedom, the parameters will tend to increase in value for OLS. -For Ridge and Lasso regression, the higher order parameters will typically be reduced, providing thereby less fluctuations from one order to another one. +For Ridge and Lasso regression, the higher order parameters will +typically be reduced, providing thereby less fluctuations from one +order to another one. import numpy as np import matplotlib.pyplot as plt @@ -2367,8 +2407,8 @@ for i in range(nlambdas): # Compute the MSE and print it MSERidgePredict[i] = MSE(y_test,ypredictRidge) MSELassoPredict[i] = MSE(y_test,ypredictLasso) - print(lmb,RegRidge.coef_) - print(lmb,RegLasso.coef_) +# print(lmb,RegRidge.coef_) +# print(lmb,RegLasso.coef_) # Now plot the results plt.figure() plt.plot(np.log10(lambdas), MSERidgePredict, 'b', label = 'MSE Ridge Test') @@ -2378,10 +2418,13 @@ plt.ylabel('MSE') plt.legend() plt.show() -How can we understand this? +How can we understand this? **More text to be added**. +## Linking Bayes' Theorem with Ridge and Lasso Regression + + Using Bayes' theorem we can gain a better intuition about Ridge and Lasso regression. For ordinary least squares we postulated that the maximum likelihood for the doamin of events $\boldsymbol{D}$ (one-dimensional case) diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter2_245_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter2_245_1.png new file mode 100644 index 000000000..dc3a3ce3e Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter2_245_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter2_316_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter2_316_1.png new file mode 100644 index 000000000..07584f6bb Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter2_316_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter3.ipynb b/doc/LectureNotes/_build/jupyter_execute/chapter3.ipynb index c7de9b6cd..e8b17d19c 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter3.ipynb +++ b/doc/LectureNotes/_build/jupyter_execute/chapter3.ipynb @@ -397,10 +397,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Runtime: 0.136687 sec\n", + "Runtime: 0.138472 sec\n", "Jackknife Statistics :\n", "original bias std. error\n", - " 99.9196 99.9096 0.149076\n" + " 100.094 100.084 0.150306\n" ] } ], @@ -544,10 +544,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Runtime: 1.78082 sec\n", + "Runtime: 2.06834 sec\n", "Bootstrap Statistics :\n", "original bias std. error\n", - " 99.9769 14.9969 99.9765 0.149832\n" + " 99.9933 15.0354 99.9941 0.149739\n" ] }, { @@ -567,7 +567,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -627,196 +627,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Various steps in cross-validation\n", - "\n", - "When the repetitive splitting of the data set is done randomly,\n", - "samples may accidently end up in a fast majority of the splits in\n", - "either training or test set. Such samples may have an unbalanced\n", - "influence on either model building or prediction evaluation. To avoid\n", - "this $k$-fold cross-validation structures the data splitting. The\n", - "samples are divided into $k$ more or less equally sized exhaustive and\n", - "mutually exclusive subsets. In turn (at each split) one of these\n", - "subsets plays the role of the test set while the union of the\n", - "remaining subsets constitutes the training set. Such a splitting\n", - "warrants a balanced representation of each sample in both training and\n", - "test set over the splits. Still the division into the $k$ subsets\n", - "involves a degree of randomness. This may be fully excluded when\n", - "choosing $k=n$. This particular case is referred to as leave-one-out\n", - "cross-validation (LOOCV). \n", - "\n", - "\n", - "* Define a range of interest for the penalty parameter.\n", - "\n", - "* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", - "\n", - "* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\boldsymbol{\\sigma}_{-i}^2(\\lambda)$, as" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "\\begin{align*}\n", - "\\boldsymbol{\\beta}_{-i}(\\lambda) & = ( \\boldsymbol{X}_{-i, \\ast}^{T}\n", - "\\boldsymbol{X}_{-i, \\ast} + \\lambda \\boldsymbol{I}_{pp})^{-1}\n", - "\\boldsymbol{X}_{-i, \\ast}^{T} \\boldsymbol{y}_{-i}\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\boldsymbol{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\boldsymbol{X}_{i, \\ast} \\boldsymbol{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", - "\n", - "* Repeat the first three steps such that each sample plays the role of the test set once.\n", - "\n", - "* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "\\begin{align*}\n", - "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}.\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For the various values of $k$\n", - "\n", - "1. shuffle the dataset randomly.\n", - "\n", - "2. Split the dataset into $k$ groups.\n", - "\n", - "3. For each unique group:\n", - "\n", - "a. Decide which group to use as set for test data\n", - "\n", - "b. Take the remaining groups as a training data set\n", - "\n", - "c. Fit a model on the training set and evaluate it on the test set\n", - "\n", - "d. Retain the evaluation score and discard the model\n", - "\n", - "\n", - "5. Summarize the model using the sample of model evaluation scores\n", - "\n", - "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "editable": true - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import KFold\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.model_selection import cross_val_score\n", - "from sklearn.preprocessing import PolynomialFeatures\n", - "\n", - "# A seed just to ensure that the random numbers are the same for every run.\n", - "# Useful for eventual debugging.\n", - "np.random.seed(3155)\n", - "\n", - "# Generate the data.\n", - "nsamples = 100\n", - "x = np.random.randn(nsamples)\n", - "y = 3*x**2 + np.random.randn(nsamples)\n", - "\n", - "## Cross-validation on Ridge regression using KFold only\n", - "\n", - "# Decide degree on polynomial to fit\n", - "poly = PolynomialFeatures(degree = 6)\n", - "\n", - "# Decide which values of lambda to use\n", - "nlambdas = 500\n", - "lambdas = np.logspace(-3, 5, nlambdas)\n", - "\n", - "# Initialize a KFold instance\n", - "k = 5\n", - "kfold = KFold(n_splits = k)\n", - "\n", - "# Perform the cross-validation to estimate MSE\n", - "scores_KFold = np.zeros((nlambdas, k))\n", - "\n", - "i = 0\n", - "for lmb in lambdas:\n", - " ridge = Ridge(alpha = lmb)\n", - " j = 0\n", - " for train_inds, test_inds in kfold.split(x):\n", - " xtrain = x[train_inds]\n", - " ytrain = y[train_inds]\n", - "\n", - " xtest = x[test_inds]\n", - " ytest = y[test_inds]\n", - "\n", - " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", - " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", - "\n", - " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", - " ypred = ridge.predict(Xtest)\n", - "\n", - " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", - "\n", - " j += 1\n", - " i += 1\n", - "\n", - "\n", - "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", - "\n", - "## Cross-validation using cross_val_score from sklearn along with KFold\n", - "\n", - "# kfold is an instance initialized above as:\n", - "# kfold = KFold(n_splits = k)\n", - "\n", - "estimated_mse_sklearn = np.zeros(nlambdas)\n", - "i = 0\n", - "for lmb in lambdas:\n", - " ridge = Ridge(alpha = lmb)\n", - "\n", - " X = poly.fit_transform(x[:, np.newaxis])\n", - " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", - "\n", - " # cross_val_score return an array containing the estimated negative mse for every fold.\n", - " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", - " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", - "\n", - " i += 1\n", - "\n", - "## Plot and compare the slightly different ways to perform cross-validation\n", - "\n", - "plt.figure()\n", - "\n", - "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", - "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", - "\n", - "plt.xlabel('log10(lambda)')\n", - "plt.ylabel('mse')\n", - "\n", - "plt.legend()\n", - "\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1273,6 +1083,203 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cross-validation\n", + "\n", + "When the repetitive splitting of the data set is done randomly,\n", + "samples may accidently end up in a fast majority of the splits in\n", + "either training or test set. Such samples may have an unbalanced\n", + "influence on either model building or prediction evaluation. To avoid\n", + "this $k$-fold cross-validation structures the data splitting. The\n", + "samples are divided into $k$ more or less equally sized exhaustive and\n", + "mutually exclusive subsets. In turn (at each split) one of these\n", + "subsets plays the role of the test set while the union of the\n", + "remaining subsets constitutes the training set. Such a splitting\n", + "warrants a balanced representation of each sample in both training and\n", + "test set over the splits. Still the division into the $k$ subsets\n", + "involves a degree of randomness. This may be fully excluded when\n", + "choosing $k=n$. This particular case is referred to as leave-one-out\n", + "cross-validation (LOOCV). \n", + "\n", + "\n", + "* Define a range of interest for the penalty parameter.\n", + "\n", + "* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", + "\n", + "* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\boldsymbol{\\sigma}_{-i}^2(\\lambda)$, as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\boldsymbol{\\beta}_{-i}(\\lambda) & = ( \\boldsymbol{X}_{-i, \\ast}^{T}\n", + "\\boldsymbol{X}_{-i, \\ast} + \\lambda \\boldsymbol{I}_{pp})^{-1}\n", + "\\boldsymbol{X}_{-i, \\ast}^{T} \\boldsymbol{y}_{-i}\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\boldsymbol{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\boldsymbol{X}_{i, \\ast} \\boldsymbol{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", + "\n", + "* Repeat the first three steps such that each sample plays the role of the test set once.\n", + "\n", + "* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\boldsymbol{\\beta}_{-i}(\\lambda), \\boldsymbol{\\sigma}_{-i}^2(\\lambda)]\\}.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the various values of $k$\n", + "\n", + "1. shuffle the dataset randomly.\n", + "\n", + "2. Split the dataset into $k$ groups.\n", + "\n", + "3. For each unique group:\n", + "\n", + "a. Decide which group to use as set for test data\n", + "\n", + "b. Take the remaining groups as a training data set\n", + "\n", + "c. Fit a model on the training set and evaluate it on the test set\n", + "\n", + "d. Retain the evaluation score and discard the model\n", + "\n", + "\n", + "5. Summarize the model using the sample of model evaluation scores\n", + "\n", + "The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.linear_model import Ridge\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "# A seed just to ensure that the random numbers are the same for every run.\n", + "# Useful for eventual debugging.\n", + "np.random.seed(3155)\n", + "\n", + "# Generate the data.\n", + "nsamples = 100\n", + "x = np.random.randn(nsamples)\n", + "y = 3*x**2 + np.random.randn(nsamples)\n", + "\n", + "## Cross-validation on Ridge regression using KFold only\n", + "\n", + "# Decide degree on polynomial to fit\n", + "poly = PolynomialFeatures(degree = 6)\n", + "\n", + "# Decide which values of lambda to use\n", + "nlambdas = 500\n", + "lambdas = np.logspace(-3, 5, nlambdas)\n", + "\n", + "# Initialize a KFold instance\n", + "k = 5\n", + "kfold = KFold(n_splits = k)\n", + "\n", + "# Perform the cross-validation to estimate MSE\n", + "scores_KFold = np.zeros((nlambdas, k))\n", + "\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + " j = 0\n", + " for train_inds, test_inds in kfold.split(x):\n", + " xtrain = x[train_inds]\n", + " ytrain = y[train_inds]\n", + "\n", + " xtest = x[test_inds]\n", + " ytest = y[test_inds]\n", + "\n", + " Xtrain = poly.fit_transform(xtrain[:, np.newaxis])\n", + " ridge.fit(Xtrain, ytrain[:, np.newaxis])\n", + "\n", + " Xtest = poly.fit_transform(xtest[:, np.newaxis])\n", + " ypred = ridge.predict(Xtest)\n", + "\n", + " scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred)\n", + "\n", + " j += 1\n", + " i += 1\n", + "\n", + "\n", + "estimated_mse_KFold = np.mean(scores_KFold, axis = 1)\n", + "\n", + "## Cross-validation using cross_val_score from sklearn along with KFold\n", + "\n", + "# kfold is an instance initialized above as:\n", + "# kfold = KFold(n_splits = k)\n", + "\n", + "estimated_mse_sklearn = np.zeros(nlambdas)\n", + "i = 0\n", + "for lmb in lambdas:\n", + " ridge = Ridge(alpha = lmb)\n", + "\n", + " X = poly.fit_transform(x[:, np.newaxis])\n", + " estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold)\n", + "\n", + " # cross_val_score return an array containing the estimated negative mse for every fold.\n", + " # we have to the the mean of every array in order to get an estimate of the mse of the model\n", + " estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds)\n", + "\n", + " i += 1\n", + "\n", + "## Plot and compare the slightly different ways to perform cross-validation\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score')\n", + "plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold')\n", + "\n", + "plt.xlabel('log10(lambda)')\n", + "plt.ylabel('mse')\n", + "\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More examples of the application of cross-validation follow here." + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter3.py b/doc/LectureNotes/_build/jupyter_execute/chapter3.py index 6aaa20907..6c9083dee 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter3.py +++ b/doc/LectureNotes/_build/jupyter_execute/chapter3.py @@ -433,161 +433,6 @@ plt.grid(True) plt.show() -## Various steps in cross-validation - -When the repetitive splitting of the data set is done randomly, -samples may accidently end up in a fast majority of the splits in -either training or test set. Such samples may have an unbalanced -influence on either model building or prediction evaluation. To avoid -this $k$-fold cross-validation structures the data splitting. The -samples are divided into $k$ more or less equally sized exhaustive and -mutually exclusive subsets. In turn (at each split) one of these -subsets plays the role of the test set while the union of the -remaining subsets constitutes the training set. Such a splitting -warrants a balanced representation of each sample in both training and -test set over the splits. Still the division into the $k$ subsets -involves a degree of randomness. This may be fully excluded when -choosing $k=n$. This particular case is referred to as leave-one-out -cross-validation (LOOCV). - - -* Define a range of interest for the penalty parameter. - -* Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. - -* Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\boldsymbol{\sigma}_{-i}^2(\lambda)$, as - -$$ -\begin{align*} -\boldsymbol{\beta}_{-i}(\lambda) & = ( \boldsymbol{X}_{-i, \ast}^{T} -\boldsymbol{X}_{-i, \ast} + \lambda \boldsymbol{I}_{pp})^{-1} -\boldsymbol{X}_{-i, \ast}^{T} \boldsymbol{y}_{-i} -\end{align*} -$$ - -* Evaluate the prediction performance of these models on the test set by $\log\{L[y_i, \boldsymbol{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|y_i - \boldsymbol{X}_{i, \ast} \boldsymbol{\beta}_{-i}(\lambda)|$, the relative error, the error squared or the R2 score function. - -* Repeat the first three steps such that each sample plays the role of the test set once. - -* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as - -$$ -\begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}. -\end{align*} -$$ - -For the various values of $k$ - -1. shuffle the dataset randomly. - -2. Split the dataset into $k$ groups. - -3. For each unique group: - -a. Decide which group to use as set for test data - -b. Take the remaining groups as a training data set - -c. Fit a model on the training set and evaluate it on the test set - -d. Retain the evaluation score and discard the model - - -5. Summarize the model using the sample of model evaluation scores - -The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial. - -import numpy as np -import matplotlib.pyplot as plt -from sklearn.model_selection import KFold -from sklearn.linear_model import Ridge -from sklearn.model_selection import cross_val_score -from sklearn.preprocessing import PolynomialFeatures - -# A seed just to ensure that the random numbers are the same for every run. -# Useful for eventual debugging. -np.random.seed(3155) - -# Generate the data. -nsamples = 100 -x = np.random.randn(nsamples) -y = 3*x**2 + np.random.randn(nsamples) - -## Cross-validation on Ridge regression using KFold only - -# Decide degree on polynomial to fit -poly = PolynomialFeatures(degree = 6) - -# Decide which values of lambda to use -nlambdas = 500 -lambdas = np.logspace(-3, 5, nlambdas) - -# Initialize a KFold instance -k = 5 -kfold = KFold(n_splits = k) - -# Perform the cross-validation to estimate MSE -scores_KFold = np.zeros((nlambdas, k)) - -i = 0 -for lmb in lambdas: - ridge = Ridge(alpha = lmb) - j = 0 - for train_inds, test_inds in kfold.split(x): - xtrain = x[train_inds] - ytrain = y[train_inds] - - xtest = x[test_inds] - ytest = y[test_inds] - - Xtrain = poly.fit_transform(xtrain[:, np.newaxis]) - ridge.fit(Xtrain, ytrain[:, np.newaxis]) - - Xtest = poly.fit_transform(xtest[:, np.newaxis]) - ypred = ridge.predict(Xtest) - - scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred) - - j += 1 - i += 1 - - -estimated_mse_KFold = np.mean(scores_KFold, axis = 1) - -## Cross-validation using cross_val_score from sklearn along with KFold - -# kfold is an instance initialized above as: -# kfold = KFold(n_splits = k) - -estimated_mse_sklearn = np.zeros(nlambdas) -i = 0 -for lmb in lambdas: - ridge = Ridge(alpha = lmb) - - X = poly.fit_transform(x[:, np.newaxis]) - estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold) - - # cross_val_score return an array containing the estimated negative mse for every fold. - # we have to the the mean of every array in order to get an estimate of the mse of the model - estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds) - - i += 1 - -## Plot and compare the slightly different ways to perform cross-validation - -plt.figure() - -plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score') -plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold') - -plt.xlabel('log10(lambda)') -plt.ylabel('mse') - -plt.legend() - -plt.show() - ## The bias-variance tradeoff @@ -934,6 +779,163 @@ plt.ylabel('log10[MSE]') plt.legend() plt.show() +## Cross-validation + +When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this $k$-fold cross-validation structures the data splitting. The +samples are divided into $k$ more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the $k$ subsets +involves a degree of randomness. This may be fully excluded when +choosing $k=n$. This particular case is referred to as leave-one-out +cross-validation (LOOCV). + + +* Define a range of interest for the penalty parameter. + +* Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. + +* Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\boldsymbol{\sigma}_{-i}^2(\lambda)$, as + +$$ +\begin{align*} +\boldsymbol{\beta}_{-i}(\lambda) & = ( \boldsymbol{X}_{-i, \ast}^{T} +\boldsymbol{X}_{-i, \ast} + \lambda \boldsymbol{I}_{pp})^{-1} +\boldsymbol{X}_{-i, \ast}^{T} \boldsymbol{y}_{-i} +\end{align*} +$$ + +* Evaluate the prediction performance of these models on the test set by $\log\{L[y_i, \boldsymbol{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|y_i - \boldsymbol{X}_{i, \ast} \boldsymbol{\beta}_{-i}(\lambda)|$, the relative error, the error squared or the R2 score function. + +* Repeat the first three steps such that each sample plays the role of the test set once. + +* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as + +$$ +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \boldsymbol{\beta}_{-i}(\lambda), \boldsymbol{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +$$ + +For the various values of $k$ + +1. shuffle the dataset randomly. + +2. Split the dataset into $k$ groups. + +3. For each unique group: + +a. Decide which group to use as set for test data + +b. Take the remaining groups as a training data set + +c. Fit a model on the training set and evaluate it on the test set + +d. Retain the evaluation score and discard the model + + +5. Summarize the model using the sample of model evaluation scores + +The code here uses Ridge regression with cross-validation (CV) resampling and $k$-fold CV in order to fit a specific polynomial. + +import numpy as np +import matplotlib.pyplot as plt +from sklearn.model_selection import KFold +from sklearn.linear_model import Ridge +from sklearn.model_selection import cross_val_score +from sklearn.preprocessing import PolynomialFeatures + +# A seed just to ensure that the random numbers are the same for every run. +# Useful for eventual debugging. +np.random.seed(3155) + +# Generate the data. +nsamples = 100 +x = np.random.randn(nsamples) +y = 3*x**2 + np.random.randn(nsamples) + +## Cross-validation on Ridge regression using KFold only + +# Decide degree on polynomial to fit +poly = PolynomialFeatures(degree = 6) + +# Decide which values of lambda to use +nlambdas = 500 +lambdas = np.logspace(-3, 5, nlambdas) + +# Initialize a KFold instance +k = 5 +kfold = KFold(n_splits = k) + +# Perform the cross-validation to estimate MSE +scores_KFold = np.zeros((nlambdas, k)) + +i = 0 +for lmb in lambdas: + ridge = Ridge(alpha = lmb) + j = 0 + for train_inds, test_inds in kfold.split(x): + xtrain = x[train_inds] + ytrain = y[train_inds] + + xtest = x[test_inds] + ytest = y[test_inds] + + Xtrain = poly.fit_transform(xtrain[:, np.newaxis]) + ridge.fit(Xtrain, ytrain[:, np.newaxis]) + + Xtest = poly.fit_transform(xtest[:, np.newaxis]) + ypred = ridge.predict(Xtest) + + scores_KFold[i,j] = np.sum((ypred - ytest[:, np.newaxis])**2)/np.size(ypred) + + j += 1 + i += 1 + + +estimated_mse_KFold = np.mean(scores_KFold, axis = 1) + +## Cross-validation using cross_val_score from sklearn along with KFold + +# kfold is an instance initialized above as: +# kfold = KFold(n_splits = k) + +estimated_mse_sklearn = np.zeros(nlambdas) +i = 0 +for lmb in lambdas: + ridge = Ridge(alpha = lmb) + + X = poly.fit_transform(x[:, np.newaxis]) + estimated_mse_folds = cross_val_score(ridge, X, y[:, np.newaxis], scoring='neg_mean_squared_error', cv=kfold) + + # cross_val_score return an array containing the estimated negative mse for every fold. + # we have to the the mean of every array in order to get an estimate of the mse of the model + estimated_mse_sklearn[i] = np.mean(-estimated_mse_folds) + + i += 1 + +## Plot and compare the slightly different ways to perform cross-validation + +plt.figure() + +plt.plot(np.log10(lambdas), estimated_mse_sklearn, label = 'cross_val_score') +plt.plot(np.log10(lambdas), estimated_mse_KFold, 'r--', label = 'KFold') + +plt.xlabel('log10(lambda)') +plt.ylabel('mse') + +plt.legend() + +plt.show() + +More examples of the application of cross-validation follow here. + # Common imports import os import numpy as np diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter3_25_2.png b/doc/LectureNotes/_build/jupyter_execute/chapter3_25_2.png index b77a1febb..dada82b44 100644 Binary files a/doc/LectureNotes/_build/jupyter_execute/chapter3_25_2.png and b/doc/LectureNotes/_build/jupyter_execute/chapter3_25_2.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4.ipynb b/doc/LectureNotes/_build/jupyter_execute/chapter4.ipynb index 20eae65ba..68907a468 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter4.ipynb +++ b/doc/LectureNotes/_build/jupyter_execute/chapter4.ipynb @@ -7,8 +7,6 @@ "# Logistic Regression\n", "\n", "\n", - "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK3155/h20/forelesningsvideoer/LectureSeptember18.mp4?vrtx=view-as-webpage)\n", - "\n", "\n", "## Logistic Regression\n", "\n", @@ -1145,15 +1143,46 @@ ] }, { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'scikitplot'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mscikitplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mskplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlogreg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test_scaled\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0mskplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_confusion_matrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnormalize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'scikitplot'" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter4_57_2.png" + } + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAFmCAYAAACBRIhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB1R0lEQVR4nO3dd1gUVxfA4d9SlSZIU+y9995i7xhL7L0FjcHeO3YFwZpYE2vU2I0tGjXYu7E3FBQQC1V63+8PPjciIGhclsXzPk+esLOzM2fuImfunZl7FEqlUokQQgghshUdTQcghBBCiC9PErwQQgiRDUmCF0IIIbIhSfBCCCFENiQJXgghhMiGJMELIYQQ2ZCepgMQQiR3/vx5nJ2defjwITVq1ECpVOLv70+lSpWYNWsWRkZGqnVv3LjBihUriI2NJSEhgTx58jB27FgKFCiQbJs7duzgwIED6OnpERcXR968eencuTP16tVLM47P+YwQIgtRCiGynEuXLilLliypjIuLUyqVSmVISIiyTp06yuXLlydbp3HjxkpPT0/VsmPHjinr16+vfPXqlWrZkiVLlH379lWGhYUplUqlMiEhQbl06VJltWrV0tz/53xGCJG1yBC9EFogV65cVK9enbt37wKQmJjIjBkzGDp0KEWKFFGt16JFC6pVq8aSJUsA8Pb2Zs2aNcycORMTExMAdHR0GDFiBLa2tqnu63M+I4TIeiTBC6El4uPjVQn2/v37PHv2jLp166ZYr0GDBpw4cYLExET++usv8ubNS9GiRZOto1Ao+P3331PdT0Y+M2HCBCpUqMDly5cB+OGHHyhVqhS+vr4AODo6UqFCBdavX8/QoUOpXbs2K1eupHz58nTo0AFPT0+ePHlC27ZtadWqFf7+/gQGBuLo6EivXr3o3r07J06cUO37999/p2vXrvTr148hQ4bw9OnTz2xFIb4ecg1eCC3g5+eHUqnkxx9/BJJ62UCqPWpbW1vCwsIIDg7G29sbGxubVLf5rnf+oYx8xtnZmWvXrqmWr1q1ilKlSqler1y5kiZNmvD06VNWr17N5cuXiYqKolGjRpQvX1518lC/fn169OiBtbU1AwYMoHLlyowcOZI3b97Qrl07SpcujYWFBW5ubpw9exYDAwM2bdrErVu3KFasWHrNJsRXTXrwQmRh/fv357vvvqN169bUq1dP64bImzZtCkCtWrVo1KgRHTp0YP/+/QAkJCTg6+tL4cKFef36NRcuXKBz584A2NjYULVqVQ4fPoyuri4A+/fvJyoqil69emFvb6+R4xFCm0iCFyIL27hxI3v27KF37944OzsTGBgIoLpL/s2bNyk+8/r1a8zMzLCwsKBQoUKprvMxn/OZtJiamiZ73bBhQ4KDg7l16xbnzp1T3ZH/6tUrACZOnEifPn3o06cPPj4+REZGkiNHDrZu3cqVK1do2rQpM2bMIDw8/IvEJ0R2JgleCC3g6OiIsbExO3bsAKBcuXIUKlSICxcupFj33LlztGzZEh0dHZo3b87r16/x8vJKtk54eDiDBg0iJiYmxecz+hl9fX1iY2MBCA0NzdBx6Ovr07ZtW/bt28eRI0do27YtAHny5AFg+fLlbNmyhS1btrBnzx4cHByIi4vD0tKSxYsXc+zYMd6+fcuiRYsytD8hvmaS4IXQAjlz5qRv375s376duLg4dHR0mDNnDqtXr+bZs2eq9U6cOMGtW7cYNWoUkNTTHz58OLNmzSIiIgKAuLg4FixYQIkSJTA0NEyxr4x+Jn/+/Hh4eABw+vTpDB9Lhw4dOHLkCImJieTKlQtIum+gXr16HDhwQLXezJkzuXz5Mq9fv2b69OlA0ohAmTJlSEhIyPD+hPhaKZRKqQcvRFby4UQ3Tk5OFC9enLCwMBo1akShQoWYMmUK1atX59q1a6xYsYL4+HgSEhKws7Nj/Pjx5M2bN9k2d+7cye7duzE0NCQ2NpaGDRsydOhQdHTSPsdP7zPXrl1j6tSp5M2bl/bt2zNp0iQqVarEihUrcHV15ejRoxQtWpTBgwfTrl27ZNtu3bo1Y8eOpVmzZqplgYGBzJo1i4CAAAC++eYbhg4dSmRkJHPnzsXLywsdHR0MDQ2ZO3cudnZ2X6rJhciWJMELIYQQ2ZAM0QshhBDZkCR4IYQQIhuSBC+EEEJkQ5LghRBCiGxIErwQQgiRDWnVXPTx8QkEB0dqOoxszcLCSNo4E0g7q5+0sfpJG2cOa2vT9FdKhVb14PX0dDUdQrYnbZw5pJ3VT9pY/aSNszatSvBCCCGEyBhJ8EIIIUQ2JAleCCGEyIYkwQshhBDZkCR4IYQQIhuSBC+EEEJkQ5LghRBCiGxIErwQQgiRDUmCF0IIIbIhtUxV6+/vz9KlS3n48CF79uxJ8X5iYiJubm4YGxvz4sULOnfuTOXKldURihBCCPFVUkuCv379Ok2bNuXBgwepvn/06FHCw8MZN24cISEhdOvWjSNHjqCrK9MeahulUkl8fCIxMQnExCRgYqKPoWHKX6vw8FhOn35ObGzSejly6NGhQ6lUt7l//yOOH/f8/7rxdO1alnbtSmIy8wI5d3mo1gtzqkOZBacJDY1RLbt4cQA2NsZYl92UbJvblzdgyJAjqtdNmxZh7dq25Nj5GFOni6rlUV1K0P1FEH///Uy1bN26tjRpUgTzzgfRvx+kWn5/VRNqDzygem1ra8yFCwPQuxeIRZdDquVxZXPjVN+GFSuuqpZNmdKAQYMqpXpMlVzPERDw7/ze2nJMI0fWZMSImlnqmKyz4TGRhY5JoVCgVCqz1TG9k5WOiZ9b8jnUkuBbtWrF5cuX03zf3d2devXqAWBubo6BgQEeHh6ULl1aHeFkqp5enTkRdjzzdhijB5GGEKcLsXpgGg250ij+cLICRBhCnF7Sut9dAoP4lOvdKwDb6yetE6cHFZ7DwFOpb3NCH7hR7N/XizZDNc+U6/lZwICR/77OE4xD0WWpb/NUU9jdQPXyWL51UOgsawK740A91fKxviN4EVofwoxUy8rfLwGvwlGyItkmez7pBmE9VK/3v/6D/bd78L1vXdby7/ItgRv547UOhJVULev+pAtYPeZa1HiqUVC1vJtnJ8Le22aYQQA2t82o6lmA60xQLb8ddZP5PlchrJFq2eQH05h8+3Sqx+QVUhfCTLTumOZ6z2GuHJMckxyTGo4pCyX49AQFBWFi8m+Dm5iYEBQU9JFP/Otzq+p8Me7eMM4dnocmX+7vSHh4LCdenAWzfxd/f6Iua9cnfcF7YmLYWtiT/ZXvJyXPljehYIBq3WuTx1PNqyCvEhPpEhrGjXwvidRJBLNIcP33bLOqZwGuT0n65ZgSEcmCqKh/dzjgJPQ6q3q5Zm13HE4l/cJbBwYRoFT+u26rf5IleGX3pF/4/TGxdAwL+3c90/e2/8ExtXkbylHi/n0zLvmv1Ltj8ktIJB/Baa73/jE5RUQyi/f2GfeRkR2DhLTfE0IIrRQE7/+t/kwauckud+7chIeHq16Hh4eTO3fuDH3W3z9Mo/8ljD6VLLkfiImlZkgIVlbOmJougM2NAHhTMZQ3FUNxzb9cte6G6Bj237GBLY3g9/ps0f9Ltd6biqFUzFkZACVwLj6eyOfW4GWLtV+5ZOudKHFGtc0ciuTtM8ZiSrJ1+1j2V71nqEi+8o1ij5Ktm9Y2Gxu2TLbe+8eU44Nt/pJ3W6rHZPjBNs0TrD5yTMlXdsw1LsWxAElxBCYfgbhTxiPZsbyzufCOZK9bmrVOcSwAfSz709ws+dny1sI7kx3LOzuKJL+/JI9+3hTHAlAxZ2XG2kxKtsypqFOax2StZ6OVxzTedoockxyTHNN/OqY44CSwknYh9VM9pk+hUCq/wGlCKi5fvsyiRYvYu3cvAJGRkURHR5M7d24OHz7M1atXcXJy+uRr8P7+Yemu87lSDK+/MYPtDcDLBlw2g37y3uLMXa0ps60p3cP+PVmh9iOYu131C/T+9ZvOoWHsiY1Vrbp+vT3ffvvvMM+76zdBiYlYBv3b282VyxAPjx9Vr9+/frMoMopJkf8Oyf/4Y3VmzvxG9fr9a1LFg4J5mpioeu/SpQEULWqhev3umtTfsXE0Cf33H0C9evnZt6+r6vX7x9QjNIzd8XEY5NAjRw5dFi9ujr19iRTHFKVU0j0sDJ26+dC3zomZmSELFjRJ9ZjuxMdz1TYHCWOrY2CgS/HiFpQsaUlqbGyS/vE+eeKTdLwmBujoKFKsFxeXQFTUvycDuro6GBvrp7rNiIg4EhL+baecOfXQ10/5u5mYqCQ8/N/vU6EAU1PDVLcZHR1PbOy/vz/58pkTFhaV6rphYTHJTt615ZgMDHTJkSP1QUFNHJO1tSn+/mHZ6pjeySrHZGVlQkBAeLY6pncy+5jc3U8zYcJInj3zRKFQMGLEWKZOnQF8/si1Wobor1y5woEDB/D39+fnn39m4MCB7Nu3j0ePHjF79mxat27N/fv3WblyJX5+fixatChL3GCXLLkHG8PogfDaPOn1m1yQ79/LCDN3tcZpTxuu6MQl38grc5qZtkh1+x/2YmNiUrn+TcoebFrrAZgpFFjp62JgnRMDA13MzXOkuW5XQ0NeVbVGr6wlBga6mJgYpLpeBT1dDpiaErWuOTly6GJhkTPNbf5masKvXUsSPqtumusA5FQoOGBmRvDMhsSXSz1Z/7t/PUrbmhGSxk14yUUDYGaW+j+ad/T1dVP9B5iatP5Rf0hHR5Huft/JkUMv2R+gHDn0CEvjXDWtPwAfymrH9DFyTNnzmHLlykFsbNxH19W2Y8qIL3lMISHBzJ49g61bkzpYpUqVxtV1BTVr1srQPj5GbT14dVFnD97mdtLFc59SQXTqtJurV/1U7x03M2VXzB7WxVz44FNGoLpZIgHwB1ansYfyQB4g/v//PQbepLKeAij43nrxQOBnHNHX482blENuWdm73qVQH2lj9ZM2/m/u3btLt24defPmNQYGBowaNY7hw0djaJj8pCBL9eC1XXh48uEXgH/i07qZKxLYAIQAYUBiGusB3P3/f+lRAs8zsJ4AaNYs9RETIYTIyooWLYaxsTE1a9bGzW0FJUtmZNQy477qHrz+BT9MnS6i6xtOXNncGMzoBSTdIBcVFcfIkcfZv/8RJXV1+NssF7Z5jAk63TWdrWo3OSPPHNLO6idtrH7Sxp8mMTGR337bzLffdiBXLnMA/PxekCdPXnR00r7n/XN78F/1VLXvkntqcubUZ82aNrTSf8bQHA+x09VB1z/1m6KEEEKIj3n06CHt2rVk7NgRzJnjpFpuZ5fvo8n9v/iqE7yubzgxjfITq1Qmm33oHYVCwZ9xGzFWJA27J+Q3SbGOEEIIkZaYmBgWLZpHkyb1uHr1MjY2tjRs2DhT9v1VJ/iLnYrSM+gtdd++Jb0rFQn5TQhzqpNJkQkhhNB2ly5dpEmTeri6LiIuLo4+fQZw/vxV2rVrnyn7/ypusnv/WnvwLnuiS1nQr98B/vrLS7XO0VxpN8WQ8B10PL42M0IVQgiRDXh4PKZ9+1YolUqKFSuOm9sK6tSpl/4Hv6CvIsF/eK1dT08nRUGUBUYffkoIIYT4PCVKlKRHj97kyZOHUaPGkyNH2nOUqMtXMUT/fnI3+ukmAMOH10i2TkB8AoRn/hcghBBC+7169ZJBg/py7doV1bIlS1YyadJ0jSR3yMYJPjIyjl9+uUl4eCwRwyoRVzZprntDd18AqlTJQ4MGBalRw46tWzvg7t4XTKI1GbIQQggtk5iYyObNG6hfvyYHD+5n+vTJqnu6FIqUU+Jmpmw3RB8cHMWvv95i/fp/CAyMIjY2gR8cq2HgnjRX+ft3wm/a9G2a07UKIYQQH+Ph8ZixY0dw6VLSDKctWrRi0SI3jSf2d7R6opuePTtz4sSHtdcbAu8/ghAKLOOa+RgsFEYMCd/BibhHqW/8xP//3yzlW9o2FernkokrMoe0s/pJG6vf19rGsbGxrFixhCVLXIiNjcXKypr5851p376TWpL7VzlVbcrkDnAVqA+8KwZgBlSkeojLZ+9HpkIVQgjxTkhICGvW/ERsbCw9e/Zh5sw5WFhkrOR5ZtLqBP/Oh73rqVP/Zt26fzA1NWDgwMp8//0QbGyM093Ou2IzX0tvXQghRMaEh4dhaJgDfX19bGxscHNbSa5cuWjQoKGmQ0tTtrrJrqdXZ2xumxGut4yFRkb46BtT9uVmzs8ejc1ts3T/E0IIIT50/PhRGjSoxapVK1XL7O2/zdLJHbJZgn9Xz90kVzQTjXKSS0cHh1P1cDiV8ckF0qrlLoQQ4uvy5s0bHBz607t3N1688OXEiWMkJn6sYmjWonVD9O/PSqe0WgEkVWB/n2v+5cBF1euE/Ca8qSjD7kIIIdKnVCrZvn0rTk5TCQkJwcjIiEmTpjF48FC1FYZRB61L8B+rAJcamUNeCCFERoWEBDNoUF/Onj0NQOPGTXFxWUrBgoU0HNmn07oEn1pyHznyGEZG+qCsD1ZhvB1elOiuJTUQnRBCCG1mZpaL2NhYLC0tmTNnId991zXLPNf+qbT2OXijlTcx/vkW8UolBkFBvH8Uvr4jMTDQ1VCE2u1rfa41s0k7q5+0sfpllzb+55/rWFpaqXrpPj7eGBkZY2lpqeHIknzuc/DaczHhA5GOlVEEDEc/cFqy5I55hCR3IYQQ6QoPD2f69Mm0bt2U8eNHqaaYLVCgYJZJ7v+F1g3Rp/TBmY2l3EwnhBDi406d+ovx40fj4+ONjo4OZcqUIz4+Hn19/fQ/rCW0KsGnfh0kmNWr2/DyZTiz7i4C84hMj0sIIYR2CAgIYPr0SezZsxOAChUq4ea2nEqVqmg4si9PqxJ8apo1q0+nTqUBmHX7mIajEUIIkVVFRkbSuHFdXr9+RY4cOZgwYSpDh/6Inp7Wp8JUad1RyTSyQgghPoeRkRG9evXh6tWrLF68lCJFimo6JLXSugSfY+fjZK/lcTghhBCpiY+PZ+3aVRQsWAh7+28BGDduMrq6ulr76Nun0LoEb+p0MdlrSfBCCCE+dOfOLUaPHs7t2zextrahceOmGBsbZ9vh+NR8PUcqhBAi24uMjMTFZQGrV68kISGB/PkL4OKyBGPj9CuKZjda+xz8Oz4+ocTExGs6DCGEEBp2+vTfNGxYm59+WoZSqWTIkGGcOXOZpk2/ziJiWteDj+pSQvVzWGwC1aqtB8DSMidYD4YV6zUVmhBCCA2Ji4tjwoTRPH/+jDJlyrFkyQqqVq2u6bA0SusSfPisuqqfnz4Jgl+uAhAYGAX6xpD975sQQghBUtW3uLg4DAwM0NfXZ/HiZdy4cY1hw0ZkqwlrPpfWJfj3vXz5QeEZS+2fE1kIIUT6fHy8mTBhNPnzF8TFZQkADRo0pEGDhhqOLOvQ6mvw0dHx2NgYo3raQRK8EEJkawkJCaxd+zMNGtTi5Mm/OHBgD0FBgZoOK0vS6h588+ZFuXt3CPHxibx5E0Hle2U1HZIQQgg1uXfvLmPHDufGjesAfPttR+bNcyZ3bu0vDKMOWp3g39HT08HOzhQC3mo6FCGEEF+YUqlkwYI5rFy5lPj4ePLmtWPRIjdatWqj6dCyNK0eohdCCJH9KRQKfHy8SUhIYODA7zl37ook9wzQuh68eeeDyV6H7G6noUiEEEKoS0hIMAEBARQvnvRo9Jw5Cxk48Htq1Kil4ci0h9YleP37QZoOQQghhJoolUr++GMfU6ZMwMrKir/+OoOBgQFWVlZYWVlpOjytIkP0QgghsoQXL3zp27c733/fH3//N5iamhEcHKzpsLSW1vXg3wlKTGRmZBTmy6+QJ48JBQuagZGmoxJCCPGpEhMT2bBhPXPnOhEREY6pqRnTp8+ib98B6OhIP/RzaV2CD95lD8Dtx4GsHHII5p4DoFQpS/hJk5EJIYT4HH36dOOvv44B0Lq1PQsXLiZvXjsNR6X9tO7UKL6cJfHlLPE10k22PE8eEw1FJIQQ4r9o06YdtrZ5+PXXrWzatE2S+xeidT34d169ikj2Om9eSfBCCKENLl26yLNnnnTv3guAnj378O23HTA1NdNwZNmL1ib46tXzMnPmN7x6Fc6rV+HUrGnHDk0HJYQQIk2hoW+ZM8eJTZt+IUeOHNSqVYciRYqiUCgkuauB1ib4cuWsKVfOOtmyMbc1FIwQQoiPOnz4IJMnj+PVq5fo6+szbNgIGYpXM61N8EIIIbK+V69eMmnSOI4cSZqkrFq1GixZspLSpctoOLLsT+sSvN695FWD4stJkQEhhMiqxowZzokTxzE2NmHatJn07z8YXV3d9D8o/jOtS/BmnQ+iq6oPC/73+2kwGiGEEB9SKpUo/v932slpHoaGOZg7dyH58uXXcGRfFy17TM6WciEh3IyP13QgQgghPhAbG4ur6yL69++FUqkEoGTJUmzYsFWSuwZoWQ++N48SEmn4NpRDZqY00NfXdEBCCCGAq1cvM3bsCB4+fADA9etXqV69poaj+rqpLcFfuHCB48ePY2lpiUKhwNHRMdn7Pj4+ODs7U6FCBR48eIC9vT1NmzZNZ6umAIQqlbQIC+Na1YLYqCl+IYQQ6QsPD2PevFn8+us6lEolRYoUxdV1uST3LEAtCT4qKoqZM2dy+PBhDAwMGD58OBcvXqROnTqqddavX0+1atXo378/9+/fZ9SoURlI8P/qM6gy1nMbqSF6IYQQGXH48GEcHIbg5/cCPT09fvxxJGPGTCBnzpyaDk2gpmvwN2/exM7ODgMDAwCqVq2Ku7t7snWsrKwICkoq/RoUFES5cuUysOWTAHTuXIY5cxqpbuIQQgiR+S5evIif3wuqVKnK8eOnmTp1piT3LEQtPfjAwECMjY1Vr01MTAgMTP5424ABA/jxxx9ZsGABt2/fZtiwYRnY8lkOHVpPixbF0NdP+zELa2vTzw1dIO2XWaSd1U/a+MtSKpU8f/6cwoULAzBt2jQKFy7MgAED5NG3LEgtCd7S0pKIiH/nig8PD8fSMvnz6pMmTaJLly7Y29sTFBREixYtOHHiBObm5h/dds2aeQkJifzoOv7+YZ8d+9fO2tpU2i8TSDurn7Txl+Xp+YSxY0fy+PEjzp+/irm5BdbWprRv342goI//TRb/zeeeqKpliL5y5cr4+fkRGxsLwI0bN2jUqBEhISGEh4cD8PLlS6ytk6aaNTMzQ0dHh8TERHWEI4QQ4jPFxcWxbJkrDRvW4fz5syQmJuDh8VjTYYkMUEsPPmfOnDg5OTF37lwsLCwoVaoUderUwdnZGXNzcxwcHJg8eTKbN2/mn3/+wdfXl9GjR5M7d251hCOEEOIz/PPPdUaPHs79+3cB6Nq1B7NmzU8xIiuyJoXy3WwEWkChUBD5w5/JloXPqqv62eZ2UjWiNxVDMzWu7ESGNTOHtLP6SRv/NytXLmPu3JkkJiZSsGBhFi9eSqNGTZKtI22cOT53iF7LJrqBnLs8kr1+P8ELIYT4MipUqIhCoeDHH0cyfvxkjIyMNB2S+ERal+CFEEJ8ef7+/pw8eZzu3XsB0LBhY65cuUWBAgU1HJn4XFo2F70QQogvSalUsmPHb9SvX50RI37g8uVLqvckuWs3revBhznVSX8lIYQQ6fLy8mT8+NGcOfM3AN980xhbW1sNRyW+FK1L8NFdS2o6BCGE0Grx8fGsXv0TLi7ziYqKwsLCgtmzF9C1aw+ZITQb0boEL4QQ4r9xcZnPkiWLAfjuu67MmbMQKysrDUclvjRJ8EII8ZUZPPgHTp06yaRJU2natIWmwxFqIjfZCSFENufufoq+fXsQFxcHgLW1NcePu0tyz+YkwQshRDYVFBSIo+MQunbtwJ9/Hmbr1k2q9+Rae/YnQ/RCCJHNKJVK9u7dxbRpEwkMDCRHjhyMGzeJ3r37aTo0kYm0LsFbl92U7LX/ffmFFUKId3x8vBk/fhSnTp0AoH79b1i8eClFixbXcGQis2ldghdCCJG2M2fcOXXqBLlymTNr1jx69Ogtw/FfKUnwQgih5d6+DSFXLnMAevbsw6tXL+ndu79MWvOVk5vshBBCS0VFRTF3rhNVq5bn2TMvIOnmubFjJ0pyF9rXg5dr7kIIAefOnWHs2BF4eXmiUChwdz9F//6DNB2WyEK0LsELIcTXLDg4iFmzprNt2xYASpcug6vrcmrUqKXhyERWo1UJ/ntDqf0uhPh6nTnjztChgwgI8MfAwIDRo8czfPhoDAwMNB2ayIK0KsELIcTXzNY2D2/fhlCrVh3c3FZQooQU3xJp07qb7IxW3tR0CEIIkSkSEhI4fPggSqUSgFKlSnPkyAkOHDgqyV2kS6sSvJNRG4x/vqXpMIQQQu0ePLiPvX0LBgzoxb59u1XLK1Wqgo6OVv3pFhqiVUP0drq5NB2CEEKoVXR0NEuXLmbFiiXExcVha5sHU1NTTYcltJBWnQaujT5PVJcSmg5DCCHU4tKlCzRpUg83N2fi4uLo128Q589fpXnzVpoOTWghrerBD9m/gyHsgNuajkQIIb6so0cP069fDwBKlCiJq+tyateWJ4fE59OqBJ8RzUylvrEQQvs0btyUMmXK0qZNO0aNGoehoaGmQxJaTusS/JuKoZoOQQgh/rNXr16yaNE8Zs6cg7m5BTly5ODEibPo6+trOjSRTWhdghdCCG2WmJjI5s0bmDNnJmFhoRgaGrJwoSuAJHfxRUmCF0KITPL48SPGjh3B5csXAWjVqg0jRozRcFQiu5IEL4QQahYbG8vy5W4sXbqY2NhYbGxsWbDABXv79lKrXaiNVj0md23yeMw7H9R0GEII8UmuX7+Ks/N8YmNj6d27H+fOXaFduw6S3IVapduDv3fvHtOmTcPS0pJ27dphbGxMs2bNMiO2FKp5FQSCNLJvIYT4FLGxsaoiMHXq1GPMmAk0aNCQevUaaDgy8bVItwf/+++/s3LlSmrWrEn79u25ceNGZsQlhBBa688/j1C7dhWuXLmsWjZp0jRJ7iJTpZvgCxUqRL58+VRDSebm5uqOSQghtNLr168ZNKgvfft2x9fXh40b12s6JPEVS3eI/vHjxxw+fBh/f3/+/vtvvL29MyOuVFWb78yJEmc0tn8hhEiNUqnkt982M2vWdN6+DcHIyJgpU6YzaNAQTYcmvmLpJvgxY8bg7OzMo0ePCAoKYuLEiZkRV6puFPUhvpylxvYvhBAf8vX1YfjwoZw/fxaAZs1asGiRGwUKFNRwZOJrl26Cj4yMxNU1aRIGLy8vHj58iLW1tdoDE0IIbWBomIP79+9iZWXF3LmL6Nixs9wdL7KEdK/BHz58WPVzvnz5cHd3V2c8QgiR5d2+fZO4uDgArK2t2bRpO+fOXaVTpy6S3EWWkWYP/sSJE5w8eZKHDx/y4sULIOk60+vXrzMtOCGEyErCw8NZuHAO69atZsqUGYwcORZAqr6JLCnNBF+mTBnMzMzYt28fHTt2BEBHR4cSJaQeuxDi63PixDEmTBiDr68Purq6REVFaTokIT4qzQSfL18+8uXLR5UqVZIVQPDx8SFXrlyZEtyHqnoWQE83UG60E0JkGn9/f6ZNm8C+fXsAqFixMkuWrKBChUoajkyIj0v3JrvY2Fh27dpFUFDSDHLXrl1j48aN6o4rVdenTAAO4X+/n0b2L4T4unh6PqF166YEBweTM2dOJk6choPDD+jpSRkPkfWl+1vq5OREuXLl8PDwoF69epiZmWVGXEIIoXGFCxelTJly6Ovr4+KylMKFi2g6JCEyLN0EX7JkSfr3709sbCxdu3YlJCQkE8ISQojMFx8fz5o1P9O2bTsKFy6Cjo4Omzdvx9TUTO6OF1on3cfkvLy8CA8PJzg4mGvXrnH58uX0PqI214t4E1c2t8b2L4TIvm7fvknLlo2ZNWsa48ePQqlUAmBmlkuSu9BK6fbgmzRpwsOHD7G3t2fatGl07tw5M+JKVfUFLrypGKqx/Qshsp+IiAicneezZs1PJCYmUqBAQX74YbgkdaH10k3w75eG3bdvH2fPnlVrQEIIkVn+/vsk48ePxtv7GTo6OgwZ8iMTJ07FxMRE06EJ8Z99dIj+1q1bPH/+XPX6/v37rFy5Uu1BCSGEur169ZI+fbrh7f2McuUqcPToSebMWSDJXWQbafbgZ8yYwa1bt4iMjGTGjBns3buXJ0+e8MMPP2RmfEII8cW8u66uUCjIkycvEyZMART88INjsvk+hMgOPjpEf+DAAeLj4+nRowe9evXCzc1NrksJIbSSt/dzxo8fRffuvejYMeleohEjxmg4KiHUJ80hehsbGwD09PT45ptv6NChAwqFgjt37mRacEII8V8lJCSwevVKvvmmFn//fRIXlwUkJiZqOiwh1C7NHvydO3f47bffAHj48KHq53PnzrFq1ap0N3zhwgWOHz+OpaUlCoUCR0fHZO8rlUq2bNkCwIsXLwgNDWXBggUf3eaatd0xsbxA+Cwp7CCESN/du3cYM8aRmzf/AaBDh07MneuMjk66TwgLofXSTPCvX7/m7t27AJiZmal+zkg1uaioKGbOnMnhw4cxMDBg+PDhXLx4kTp16qjWOXDgAGZmZnTo0AFIOolIj8OpeoCHJHghxEdFR0czefJ8XFxcSEhIwM4uH87ObrRo0VrToQmRadJM8OPHj6devXopll+8eDHdjd68eRM7OzsMDAwAqFq1Ku7u7skS/MGDB2nQoAGbN28mICCALl26fE78QgiRglKpZM+ePSQmJjJ48BCmTJmBiYmppsMSIlOlmeBTS+5AsiSdlsDAQIyNjVWvTUxMCAwMTLaOn58f4eHhODo64uXlxeDBgzly5Ai6urrpbt/aWv6hqpO0b+aQdv6ygoKC0NXV/X+1S1M2bdqEQqGgdu3amg4tW5Pf46xLLSWRLC0tiYiIUL0ODw/H0jJ5iVcTExMqVUoqt1ikSBHCw8N5+fIl+fPnT3O7DoO345p/OdH+YeoIW5D0j9Vf2lftpJ2/HKVSyYEDe5kyZQKtW9vj6roMSOqM+PuHSTurkfweZ47PPYlSy50mlStXxs/Pj9jYWABu3LhBo0aNCAkJITw8HEj6x+fj4wMknQAkJCRgbW390e2ua3aB6K4l1RGyEEIL+fr60Lt3VxwcBhAQ4M/Tpx6qvztCfO0UynczP3xEYmIiISEhWFhYZPg5+PPnz3Ps2DEsLCzQ19fH0dERZ2dnzM3NcXBwICwsDBcXF+zs7PD29qZly5Y0bNjw48GeVMhc9GomZ+SZQ9r5v0lISGDDhnXMmzebiIhwzMxyMXPmHHr16qu6Q17aWP2kjTPH5/bg003w586dY8aMGZQsWZK2bdsSERFB9+7dP2tn/5UkePWTf7CZQ9r580VFRdGpkz3Xr18FwN6+PQsWuGBrmyfZetLG6idtnDnUNkT/999/c/ToUapWrUq7du148+bNZ+1ICCG+hJw5c1K0aDHy5MnLxo3b+PXXLSmSuxAiAzfZ2draYmhoqBqaf/fomxBCZJaLF8+TI0cOqlSpBsC8eYvQ0dHBzCyXhiMTIutKtwf/7Nkz1q5dy9OnT9m6dWuGJroRQogv4e3bEMaOHUn79q0ZOXKY6gY6c3MLSe5CpCPdBD9lyhTCw8MJDg7G39+fcePGZUZcqVJ2X4F12U0a278QInMolUoOHjxA/fo12bJlA/r6+tjbt9d0WEJolXSH6A8fPsyYMVJxSQiROV6+9GPixLH8+edhAGrUqIWb2wpKlSqt4ciE0C7pJvg//viDhw8fUq9ePZo2bSrlYoUQahMfH0+7di3x9n6OiYkp06fPol+/gVIcRojPkG6CX7JkCTY2Npw7d46ZM2dSqFAhBg0alBmxCSG+Mnp6eowdO5GjRw+zcOFi7OzyaTokIbRWugne29sbHR0dbt68yYULF0hISMiMuFKl2DFcnoMXIhuJiYlh+XI3TExM+eGHpJLS3bv3onv3XjJaKMR/lG6CnzBhAvr6+nTp0oXdu3djbm6eCWEJIbK7K1cuM2aMI48fPyJnzpx06dIdKysrSexCfCHpJvgWLVowYcIEuQYmhPgiwsJCmTvXiY0bf0GpVFK0aDFcXZdjZWWl6dCEyFbSzdqTJk1Kltx///13tQYkhMi+jh49TP36NdmwYT26urqMHj0Od/eL1KvXQNOhCZHtpNmD79OnD1u2bKFGjRqYmZkBSc+mRkRE0K1bt0wLUAiRPSiVSlavXsnLl35UrVoNN7eVlC1bTtNhCZFtpZngV61aBcDUqVPp0KGDavnBgwfVHpQQIntITEwkPDwMM7NcKBQKXF2X8/ffJxg40AFdXV1NhydEtpZmgjcxMQFIdl3s4cOH+Pn5qT+qNHx/oi45Hj6WmvBCaIEnTzwYO3YEBgYG7Ny5H4VCQfHiJShevISmQxPiq5DuNfibN2+qfi5dujSRkZHqjOej1q7vganTRY3tXwiRvtjYWJYscaFx47pcvHiee/fu4Ovro+mwhPjqpNmD37RpE5s2bSI8PJx9+/YBoKOjQ7lycs1MCJG669evMmbMcB48uA8kPdPu5DSX3LktNRyZEF+fNBN8v3796NevHzt37qRr166ZGZMQQgs5OU1j1aoVKJVKChUqzOLFy2jYsLGmwxLiq5XuEP2Hyf3s2bNqCyY9a5ucJ6qLXL8TIivKmTMnOjo6ODqO4vTpS5LchdAwhVKpVKb2hrOzMxMmTKBPnz6qmaWUSiUvX77kxIkTmRrkO4qTCpmqVs2srU3x9w/TdBjZXnZo5zdv3uDl5UmtWrWBpGlnPTweU758BQ1HliQ7tHFWJ22cOaytTT/rc2kO0TdokDTxRLly5ejTpw+QlOC3b9/+WTsSQmQPSqWSHTt+Y+bMKejp6XP+/FUsLHJjaGiYZZK7EOIjCb5OnTpA0kx274SGhjJ+/Hj1RyWEyJI8PZ8yfvxozp51B6BRoyZER0drMiQhRBrSvQbv5OTEzZs3+e233+jQoQOLFi3KjLiEEFlIXFwcy5cvoVGjOpw9607u3Ln56ae1/P77PvLmtdN0eEKIVKSb4O3s7KhcuTIHDhzg8OHDqglwhBBfj6FDBzF37kyio6Pp3Lkb585do0uX7lL5TYgsLN1qchEREVy7do0CBQqQM2fOzIhJCJHFDBgwmFu3buLs7EaTJs00HY4QIgPS7cHb2toyd+5cvv/+e/7++29evXqVGXGl6trk8Zh3lrnwhVC3v/8+yeLFC1Wv69f/hosXr0tyF0KLpPmY3IeCg4OxsLBQdzwfZ70SAP/7/TQbRzYmj71kjqzazoGBgUyfPondu5PKQh89epJq1WpoOKrPk1XbODuRNs4cn/uYXLo9+Bs3btCwYUOaNm1K48aNk81NL4TIHpRKJbt27aBevWrs3v07OXLkYPr02VSsWFnToQkhPlO61+D379/P3r17sbS0xN/fn6VLl1K5cuVMCE0IkRmeP3/GhAmj+fvvkwA0aNAQF5elFC1aTMORCSH+i3QTfKFChbC0TCoUYW1tTaFChdQeVFqqzXfmRIkzGtu/ENnR0qWL+fvvk5ibmzN79gK6despd8cLkQ2km+C9vLw4fvw4BQoUwNvbm2fPnmVCWKm7UdSH+HJSlUqI/youLg59fX0Apk2bhY6ODhMnTsPGxkbDkQkhvpR0E/yIESNYtGgRjx49onTp0kyYMCEz4hJCqEFkZCSLFy/E3f0Uf/55CgMDAywtLXF1Xa7p0IQQX1iaCT4oKIhff/0VCwsLFi1ahJ5euucCQogs7MwZd8aNG8mzZ14oFArOnTsjj70JkY2leRe9k5MThoaGPH/+nHXr1mVmTEKILyg4OIiRI4fRufO3PHvmRZkyZTly5IQkdyGyuTS75YUKFWL48OEAuLi4ZFpAQogv5/Dhg4wfP4qAAH8MDQ0ZM2YCP/44EgMDA02HJoRQszR78IaGhqqf35+iduPGjWoN6GOqehZA716gxvYvhLZ5+zaEgAB/6tatj7v7BUaPHi/JXYivRJoz2TVo0ABbW1sAXr9+ja2tLUqlkoCAAE6fPp2pQarITHZqJzNTZQ51tXNCQgJ3796mUqUqQNIENn/+eYSWLVujo5PuvFbZivwuq5+0ceb43Jns0hyir1+/Ph07dkyx/MCBA5+1IyGEet2/f48xYxy5f/8e7u4XKVq0GAqFgtat22o6NCGEBqSZ4MePH0/u3LlTLC9evLhaAxJCfJro6Gjc3JxZuXIp8fHx5M1rx5s3r2UmOiG+cmmO2aWW3D+2PDNcL+JNXFnN7V+IrObChXM0alSHpUsXEx8fz4ABgzl37gq1a9fVdGhCCA3Tqofbqy9w4U3FUE2HIUSWsGbNT0yfPhmAkiVL4eq6glq1ams4KiFEVvF13XUjRDbSpElzTExMGT9+MidPnpPkLoRIJkM9+FOnThEeHk6ZMmXInz9/ssfmhBCZ4+VLP7Zv38ro0eNRKBSUKFGSf/65R65c5poOTQiRBaXbg3d2duavv/7i2rVrxMXF4erqmhlxCSH+LzExkV9/XUe9ejVYuHAuu3f/rnpPkrsQIi3pJngzMzMWLFhA/vz5KVu2rFSbEiITPXr0kHbtWjJp0ljCw8No3dqe+vW/0XRYQggtkO4QfXBwMICqPnRQUJB6IxJCEBMTw9Kli1m+3I24uDhsbGxZuNAVe/tvNR2aEEJLpJvgCxcuTJs2bdDR0eHYsWN069YtM+JK1Zq13TGxvED4LHkESGRvGzasw9V1EQB9+gxgxoxZMhwvhPgkaU5V+76nT5/i4eFByZIlKVq0aGbElTqZqlbtZOrJzJFaOyuVStVIWUxMDN9/348ffhhOnTr1NBGi1pPfZfWTNs4cnztVbYYekytWrBitWrWiaNGiHDly5LN2JIRI29Gjh2nevCHBwUmXwAwNDdm8eYckdyHEZ0t3iL5JkyaqXoVSqSQiIoI2bdqoPTAhvgavX79i8uTxHDqUVONh48ZfGD16vIajEkJkB+km+KFDh9K1a1cA/Pz8uHr1aoY2fOHCBY4fP46lpSUKhQJHR8dU1/vjjz8YP348N27cwNjY+KPbdBi8Hdf8yzO0fyGyssTERDZv3sDs2TMIDX2LsbEJU6fOYMCA7zUdmhAim0g3wb9L7gB2dnb4+fmlu9GoqChmzpzJ4cOHMTAwYPjw4Vy8eJE6deokW+/p06c8ffo0w8Gua3aBeRVLZnh9IbKip0896Nx5NGfOnAGgefOWLFrkRv78BTQcmRAiO0k3wU+ePFn1c0REBImJielu9ObNm9jZ2WFgYABA1apVcXd3T5bgo6KiWL9+PbNmzWL16tWfE7sQWsnPz48zZ85gZWXN/PnOtG/fSXUZTAghvpQMTVX7ri68sbExZcqUSXf9wMDAZMPtJiYmBAYGJltnyZIlDBs2THUSkFGfezehyDhp4y/v2bNnFC5cGIBOnezZsGED3377rUarM34N5HdZ/aSNs650E7yBgQFmZmaULl06wxu1tLQkIiJC9To8PBxLS0vV65cvXxIaGsrRo0dVyzZs2EDDhg2pUKHCR7ctj2Solzz28mWFh4cxf/5sNmxYz759h1VlXPv374+/f5i0tRrJ77L6SRtnjs89iUo3wfv6+lKqVKlP2mjlypXx8/MjNjYWAwMDbty4Qc+ePQkJCUFPT4+8efOycOFC1fqurq4MGDAg3ZvshNAmx48fZeLEsbx44Yuuri53796WOu1CiEyT7nPwVapUSdYb37hxY7obzZkzJ05OTsydO5clS5ZQqlQp6tSpw9q1a9m2bZtqvaCgIH7++WcA1q9fz+vXrz/jEITIWt68eYODQ3969+7Gixe+VK5chePHTzN48FBNhyaE+IqkO5Nd48aNCQoKUg2xR0REcPny5UwJLgWZyU7tZMjtv7lw4Rz9+yeNVhkZGTFp0jQGDx6Knl7ywTJpZ/WTNlY/aePMobYh+rZt2zJu3DjV6127dn3WjoT4GpQsWRodHR0aN26Ki8tSChYspOmQhBBfqTQT/OTJk6lZs2ay5A7QpUsXtQclhLaIi4tj27Yt9OjRGwMDA6ysrDh+/DQFChSUR9+EEBqVZoI3NzdXPR4nhEjp5s0bjB49nHv37hAUFKiaYlZ67UKIrCDNm+zS6n3s3btXbcGkR7FjuFx/FxoXERHB9OmTadWqCffu3aFgwcJUqVJN02EJIUQyafbgd+7cybFjx5Ite1dsplOnTmoPTIis6NSpvxg/fjQ+Pt7o6OgwbNgIxo+fLI94CiGynDQTfPPmzRk4cGCyZUqlkp07d6o9KCGyovPnz9K9+3cAVKhQCTe35VSqVEXDUQkhROrSTPAWFhaUKFEixfLx46WUpfg61a1bn+bNW1KnTn2GDv0xxaNvQgiRlaR5Df7WrVvs27cvxXJDQ0O1BiREVvH8+TP69u2Op2dSxUOFQsHWrTtxdBwpyV0IkeWl+Vfqt99+y8w4hMgy4uPjWbPmZ5yd5xEVFYWurh4bNmwF0r75VAghshqt6oZ8f6IuOR4+Jrqr1IQX6nHnzi1Gjx7O7ds3AejUqTNz5izSbFBCCPEZtCrBr13fA7goCV58cZGRkSxevJBVq1aQkJBA/vwFcHZ2o1mzlpoOTQghPku6xWaE+Bq8eOHL2rU/k5iYiIPDD5w5c1mSuxBCq2lVD16ILyk09C2mpmYoFApKlCjJokVulC5dhmrVamg6NCGE+M+0qge/tsl5orqkfHRPiE+hVCrZu3cXtWtXYc+ef+d16NWrryR3IUS2oVUJfojDDsJn1dV0GEKL+fh407NnZ4YOHURAQABHjx7WdEhCCKEWWpXghfhcCQkJrF37Mw0a1OLkyb/IlcscN7cVrFu3UdOhCSGEWsg1eJHt+fm9YODA3ty4cR2Ab7/tyLx5ztja2mo4MiGEUB9J8CLby53bkrdv35I3rx2LFrnRqlUbTYckhBBqJwleZEsXL56nTJmymJtbkCNHDjZt2k7evHkxNTXTdGhCCJEp5Bq8yFZCQoIZM2Y47du3Ztas6arlJUuWkuQuhPiqaFWCvzZ5POadD2o6DJEFKZVKDh7cT716Ndi6dRMGBgbkz18ApVKp6dCEEEIjtGqIvppXQSBI02GILMbP7wWTJo3lzz+PAFCrVh1cXZdTsmQpDUcmhBCao1UJXogPvX79mgYNahEWFoqpqRnTp8+ib98B6Oho1eCUEEJ8cZLghVaztbWlbdt2hIaGsmCBC3nz2mk6JCGEyBK0KsFXm+/MiRJnNB2G0KCYmBiWLl1Mo0ZNqVWrNgCLFy/DwMBAw5EJIUTWolUJ/kZRH+LLWWo6DKEhly5dZOzY4Xh4PObQoQO4u19EV1dXkrsQQqRCqxK8+DqFhr5lzhwnNm36BYDixUvg7LwEXV1dDUcmhBBZlyR4kaUdOXKISZPG8urVS/T19Rk+fDSjRo0jR44cmg5NCCGyNEnwIssKDX3LmDGOBAUFUa1aDdzcVlCmTFlNhyWEEFpBErzIUhITE0lMTERPTw8zs1wsWLCYoKBA+vcfLEPyQgjxCbTqYeGqngXQuxeo6TCEmnh4PKZDhzasXLlUtaxjx84MGjREkrsQQnwirUrw16dMwKLLIU2HIb6w2NhYXF0X0bhxXS5dusCWLRuJiYnRdFhCCKHVtCrBi+zn6tXLNGvWgEWL5hEbG0uvXn05efIshoaGmg5NCCG0mlyDFxoRExODk9NUfv11HUqlkiJFiuLqupz69b/RdGhCCJEtaFUP/noRb+LK5tZ0GOILMDAw4OHDB+jo6DBy5Fjc3S9KchdCiC9Iq3rw1Re48KZiqKbDEJ/p9evXxMfHkS9ffhQKBW5uK4iIiKB8+QqaDk0IIbIdrerBC+2kVCr57bfN1K9fgxEjhqlqtBcpUlSSuxBCqIlW9eCF9vH0fMLYsSM5f/4sAPr6ekREhGNiYqrhyIQQInuTHrxQi7i4OJYtc6VhwzqcP38WS0tLVq1az/bteyS5CyFEJpAevPjiEhISsLdvzj//3ACga9cezJo1H0tLqQQohBCZRRK8+OJ0dXVp3rwVgYFBLF68lEaNmmg6JCGE+Opo1RD9mrXdMZl5QdNhiFScOvUXf/55RPV6xIgxnD59UZK7EEJoiFYleIdT9ci5y0PTYYj3BAQEMHToILp3/47Ro38kKCipVoCBgQHGxsYajk4IIb5eWpXgRdahVCr5/fdt1K9fnb17d5EzZ04cHUdjZpZL06EJIYRArsGLz/DsmRfjx4/i9Om/Afjmm8YsXryUwoWLaDgyIYQQ72hVgncYvB3X/Ms1HcZXTalUMnBgH+7evY2FhQWzZy+ga9ceKBQKTYcmhBDiPVo1RL+u2QWiu5bUdBhfpXezzykUCubOXUinTl04d+4a3br1lOQuhBBZkFb14EXmi4yMxNl5PhEREbi4LAGgbt361K1bX8ORCSGE+Bit6sGLzHX69N80bFibn39eztatG3n2zEvTIQkh1CAhIUHTIWS6r+GY1daDv3DhAsePH8fS0hKFQoGjo2Oy99euXUtAQADW1tbcvXuXESNGUKxYMXWFIz5BUFAgM2dO5ffftwFQpkw5lixZITfRiY+6f/8uP/+8nPj4eGrUqEVYWBgBAf5Mnz4bQ0NDAP788zAeHo8xMjIiKiqKAgUK8u23HVWXeS5fvsjlyxcwNTUjPDyMN2/e0KtXX0qXLqvJQ8uw69ev8tdff2JiYkrx4iVo1aptmutGRkawbJkriYmJTJ3q9MVjOXbsCI8fP0JXVwc7u/x06PBdqusdPLgfS0urLD0qt23bZiIiIggLC6VmzdrUr98wxTpXr17m5Mnj5M9fAG/v5/9/qseM0NC3rFy5lIIFC+Hr60Pz5q2oVq0G/v5v2Lt3Jw4OP6Knlz0Hs9VyVFFRUcycOZPDhw9jYGDA8OHDuXjxInXq1FGtExkZyeTJk1EoFBw5cgQXFxdWr16tjnDEJ9i+fTsjRowgICAAQ0NDxo2bxLBhI9DX19d0aCKLK1u2PFWqVCMqKopBg4YAMGnSGM6c+ZvmzVuxf/8enj3zZNSo8arPrF69kr17d/Ldd924ceMaBw7sZd48Z1XC37t3F7dv39SaBH/ixDFVAomPj//oukZGxrRs2YajRw998TjevHnN9u1b2bDhNxQKBYMH96VatRoUKFAw2Xo3b97g3r07TJo0/YvH8KXcu3eXGzeusXhx0slj795dqFy5GiYmJqp1EhISmDVrKr/9tptcuczZvXsHv/66llGjxrFhw3qKFStOt269CA0NpV+/7uzYsY88efJSrlwFfv11LQ4OwzR4hOqjlgR/8+ZN7OzsMDAwAKBq1aq4u7snS/CjRo1S/ZyYmIiRkZE6QhGf6NixYwQEBFCvXgMWL15KsWIlNB2S+Aw9e3bmxInjX3SbzZq1YNu23Z/0mbdv32JhkRuA7du3sGDB4mTvt2/fiREjhvLdd93YseM3OnT4LtlNm99+25Ho6OgU2719+yZHjx6iQIGCPHhwnx49euPn94LFixfw55/u3L9/Fze3hQwbNorixUvi5DQVUFKwYGFu3LhK//7fM2/eTEaPnoC9fXsWLJhNdHQUs2YtYP361SQkJKCjo4ORkRG9evVLsf8DB/bi4+ONiYkJISEhDB8+mjt3bvHgwX3i4+MJDAykRYtWyT6zYcM64uLiMDAw4MmTx8yd65zs/bt377Br1zZKliyNh8djhg4dTp48eTh9+hQ3b/6DlZUVDx8+YM6chakue9+VKxcpVaq0qi3Ll6/ApUsXUiT4P/7YR6NGTVWvFy2ai5WVNVFRUVhaWtGjR2/u3r3N4sULKVWqNPr6Bri7n2T79r2cOHEMf38/DAyMiIiIYNiwESgUCiZPHkeZMmV58+YNFStWokWL1inab8OGddy5czvF8vr1v6FTpy7Jll24cJby5SsCoKenR6FChbl583qyXnxoaCgxMbHkymUOgJ1dfg4c2AuAr683lSpVBsDMzIy4uFi8vJ5SunRZateui5vbIgYPHoqOTva7Yq2WBB8YGJhsFjMTExMCAwNTXTc2NpZ9+/Yxc+bMdLer7L4C2AT+jumuKzImISGBly9fkj9/fgBcXV1p1KgR/fr1k7vj1czaWn1V9QwMvvw/bQMDvXRjNjY25M6df9i5czNnz56lZ8/utG6dlEBev35FyZKFsbD4dxtmZoV59eolFhY5efXqBcWKFUh3H0qlklmzprJ3716srKx4/PgxUVFRNGzYmXXrfsba2pSGDetw9GgZzM2NKFYsH46OP+Di4sK8ebPw9/cnMTGRq1dbkDevFdbWptjaWuHo6MiNGzfw8HjAr7/+CkCfPn1o2bIpZcqUUe3/6dOnHDiwm4MHDwIwc+ZMTp8+Rrdu3Th58igdO3akVq1ayWI+e/YsHh4PWLduHQC7du3C2toUc3MjcuTQx9raFDs7SyZPnkiBAgU4fvw4R47sZeLEiZw6dYzmzZvTsWNHbty4gbW1aarL3hcbG4mlpblquZWVBTEx4SnW8/F5RokShVTLW7VqTrNmzQBo3749Awf2oXHjety924KoqCgmTJjAw4d9iIsLY9++nRw5cgSFQsGkSZO4ffsKzZo1o3v3LjRr1oyEhATatGlDr15dU3yHEyaM+eh3/L7o6HDs7IqqYsyd25z4+Khkx2JtbUqePLaEhLyiRIkSPH/uQXR00jp16tTC0/MRXbp0wNvbm7dv36Knl/j/z5uiVCpRKGKwtrbJcEzaQi0J3tLSkoiICNXr8PDwVCuJxcbG4uTkxOjRoylYsGCK99Pi7x/2ReL82t29e4exY4cTERHByZPnMDQ0xNrakrZtvyMgIFzT4WVr1tamav093rhxh1q2m17MERExFC9emq5d+1KiRDlWrVpB/frNUCgU2Nrm4fHjZxQt+u+fnZcv/cidOzfBwVHkzm3F06c+2NoW+ug+goODCQsLR6k0xN8/DAuLvFhYJMWWkJCYLMaQkEj8/cMICYkkX76C/38vBzo6YG//HatWLadEiQrExSmJjEzkxo3bhIaG4+a2AgALC0u8vHyxssqv2ua1a7extrZV7cfSMg///HOHJk3aEB0dp9rn+27cuI2NTV7V8kaNWqniio6Ow98/jMjIBH77bQPm5ub4+fkRH5+03MFhOFu3bmTDhk3UqVOP/PmLp7rs/RNyAwMjAgNDVPsLCAgmX74CKeKKioomLCxGtdzLy4e5cxdiZGTM27dheHq+IG9eOyIiYsiTJx/+/mFYWubj1KkTJCbCunXrCA+PIT5eycuXAbx8Gczt2/e5du0mBgaGBAQEpvo788sva7h9+1aK5d9805DvvuuWbFmOHCb4+werthMUFIKeXs4U2124cAk7duzG0tIK0MfKygZ//zC+/bYrO3duY9mynzEyyknhwkXIkSOX6vM6Orr4+QWiUORMEU9W8bmdAbUk+MqVK+Pn50dsbCwGBgbcuHGDnj17EhISgp6eHiYmJkRFRTF79mwGDhxIiRIlOHbsGC1btlRHOOIDUVFRuLouUt0QZWeXj+fPn1GyZClNhyaykSpVqmFiYsqZM3/TsGETevTozR9/7Et2Df7Agb306NEHgO7de3Po0H7q1KmnSlYbN64nT568yW5WMzc3x8TEhODgICwscvPkiQdRUZFUqFAJIyMjIiLCMTY2wc/PL1k8H45IlStXnpiYaFauXEKfPgMAKF68JHfv3qFPn/5A0k1z+fIVSPa5YsWK8/Llv9v29fWmVKkyfEzx4iX555/rqteHDh2gZcs2ydb56adlfPNNI1q3tufKlUv89defAHh5eTJx4jTi4+NxdHSgQYNG+Pu/SbGsVKnSqm3VrFmH3bt3/r93quDu3TspEieAjY0toaGhAHh4POa337awa9cBAM6fP5Nm+xUrVhxDQ0McHBzw9w/j0aOH6OnpcfHiOa5evczy5Un3U+3Z83uq7fHuHo2MqFOnPhs3Jo18xMfH8/z5MypVqgokjQpZWVmjq6tLZGQEQ4cmje4eOLBX1b5BQYG0afMt5ubmhIaG4u5+ivz5k75TpVJJVFQkVlbWGY5Hm6glwefMmRMnJyfmzp2LhYUFpUqVok6dOjg7O2Nubo6DgwPjx4/Hw8MDX19fIOmmO0nw6nfu3BnGjh2Bl5cnCoWCQYMcmDp1JiYm6hsuFl+Hhw/vc+vWP8TFxXH16iVq1KjNwIEOzJs3k9jYWDp06Myffx5mxYolGBkZERMTTcGChbC37wBA7dp1AVi5cgnGxiaEhYVhYWGRIhEqFAqcnOaxevVK8ucvSGCgP99//wMAnTp1ZckSF8qVq4COjg7Hjh2hZMnSHDt2hKdPPXB3P5nsmnOnTl05efK46tp0zZq1uX//LqtXr8TIyIiwsDBV0ninUKHCfPddN5Ytc8XExAR9fX3atv2WW7du8vSpB8eOHcHY2OSDhFube/fusHr1SgwMDMiVKxdxcbGquO7cuUXLlq3Zvft3Xr70482b1zx96sHDh/e5d+8O9+7dIUeOHBQpUoyiRYvh7n4yxbL32djY0qNHb5Yvd0NHRwd7+/Yprr8DfPNNI+7du0P16jUpWLAghQsXZuHCORQsWBh//zccPvwHLVq05tatf/D0fELRosUoXboshQoVpn37TixYsABDQ2MCAvwZMsSR3Llz8/vv21iyxBlraxuio6M4dOgA9vbtP/O3Kun+gapVq7NmzU+EhYXi6DgKU9Okv1czZ07hhx9GUKlSZQ4c2Iuuri62tnlJSIinZ8++QNLU2rt3/06FChUJCwtl0qQZqm0/efKYKlWqqZ7yyG4UyndTlGkBxUkFbyqGajoMreXkNI2ff06a6rd06TK4ui6nRo3k1wrVPXQskkg7q5+0cfri4+OZN8+JQYOGqHq1n0Kb2zgmJgZn57kMHvwDefPaaTqcj/rcIfrsd9ugSFPp0mUwMDBg4sSpnDhxNkVyF0J8XfT09Jg2bRaxsbGaDiXThYa+ZeTIcVk+uf8X2fPpfgHAixe+3LhxnXbtkobHunXrSZ069ShUqLBmAxNCZBm6urophvi/BtnxrvkPSQ8+G0pISOCXX9ZQv35Nhg0bzNOnHkDStUtJ7kII8XWQHnw28+DBfcaMGc7161cBaNv2W7mBTgghvkKS4LOJ6Oholi5dzIoVS4iLi8PWNg8LF7rStm07TYcmhBBCA7RqiP77E3XJsfOxpsPIkiZOHIObmzNxcXH06zeI8+evSnIXQmTI11BZ7UNfwzFrVQ9+7foewEWiu5bUdChZzogRo7lz5zbz57tQu3ad9D8gxBcm1eSyVjU5X18ffvppKbq6uinmvX/f2bPuhIeH07q1/ReP4UvJSGW8x48fsmvXDgoXLoKXlyeDB/9Anjx5iI2NZdmyxdjY2BIYGEDFipVp1qwlUVFR/PLLGgYPHoKxsUkqe9V+WtWDF/86dOgPHB2H8G4ag2LFSnDy5FlJ7kJj3lWTK1++IoMGDWHUqHHEx8dx5szfAOzfv4eHD+8zfPhoBg0agqPjKF6+9GPv3p0Aqmpyw4ePYcCA7xk+fAxVqlTj9u2bGjyqT/Oumpyj4yiaNfv4xF3vqsmpy/37d6ldu95H1/Hx8eaPP/Zl6eT+rjKeo+Mohg0byaFDB/Dx8U6x3vz5s+nSpTu9evWjUaOmLF2adFKzf/9u9PUN6NdvECNGjGXVqhUEBARgYmJCq1ZtcXVdlNmHlGm0qgcv4NWrl0yaNI4jR5IKXdjbt6dVq6Q/ElIcRrzT06szJ8K+cDU50xZsKyLV5CDrV5MDaNGitervRFqOHj2UbD6MdetWERcXh76+PrGxsfz440h8fLyZP38WlpZWWFpacv78WRYsWIyfnx+3b1/DwsKaV69eMXz4aAwNDVOtSPeh/fv3cOaMe4rl5cqVTzGNbUYr4/n6emNrmwcAO7t8XL9+DQAfHx/s7PIBSc/9W1jk5s6dmzRu3IxSpUpz+/ZN3r4NUVWiy060KsGvbXKePpb9NR2GRiQmJrJ58wbmzJlJWFgoxsYmTJs2k+bNZXpfkbU8eHCPjRvXc+nSBb79tiPVq9cEkk5OkwqB/Ct3bktevXpJfHw8L174kDt38qJU72pXvE+pVDJz5hR++WULuXNb4un5hKioaJo1a8nq1SuBpNGEdxXgzMzM6N27H6tWLWfUqHEEBgaQmJhIw4ZNVFUvzcxyMXLkOC5fvsi9e3dYsuQnABwdHahZszYlSvxbp+HZMy/27t3Jpk1JBX0WL17AoUMHaN++EyVKlKR1a3uqVq2eLOZ32128OGkmyUOH9qdot5w5czJkiCN2dvk4ffoUe/b8zo8/juTPPw/zzTeNad3anjt3kgq0pLbsc3h5edK8+b8nIqVLl6FBg0YATJw4Gk/PpxQtWox27Tpw8eJ5Ro+eQNeuPTE1NWPcuBGcOnWKsLA4fvllDQcO7KVr1x7UrVtftY3+/XvSvn1HjIyMk+23Q4fvUh1mT01wcHCyzxsZGRMcHJRivYoVK3Pv3l3q1q3Pgwf3iI6OIj4+nooVK3H6dNIoUlhYGD4+z5MVQ7OwsMDHx1sSvKYNcdhBx4prNR1GpvPweMyYMcO5fPkiAC1btmbhQlfy5cufzifF1+pTe9pfUpky5ejffzCVKlVh1aoVtG5tj0KhIE+evAQGBiT7QxoUFEju3LnR09PD2tqGoKDUy0q/LyQkhIiICNXJQNGixTMUV6FCRQBUJxnffdeNVauWU61aTfT09DAyMuLpUw+io6PZsmUjALa2toSEBCfbjqfnU/Lkyat6nS9fAZ488fjovp8+9Ug2Fey7+fffZ2hoyJ49O5NVkwNwdBzN1q0b2b37d+rUqUf58hVTXfY5I3hxcbHo6uq+9zqen39ehqlpLvz9/ZMde+HCRf5/vPl58OAeoGDz5s2Eh8cQFhZKzpxGAAQGBrBmzU8YGRkTERHB27dvUyT4fft24+5+KkU85cqVx8FhWLJlFhYW+Pr6qF5HRkakKAAEMH36bHbt2oGvrw/GxsZYWVmjp6dHs2YtiYiIYPPmXzEyMqJMmXKqnj4knUTGxMR8QqtpD61K8F+r/fv3cPnyRaytbViwwIV27TrIcLzI8qSa3L8yu5pcRtnY2BIW9hZI6t3OnTuDY8dOo6+vr5ogKzX58hXAwMCQgQMHEhwcxYsXvgQE+Kdbke6djh0707Fj5wzF+LHKeAEBAZiammJoaEhAQIDq5ODKlUuq9g0LC6V27XrkyZOH+Ph4Tp06QZUq1VTbDw0NTZbwsxNJ8FlUaOhbzMxyATBixBgSEuIZOtQRc3MLDUcmROqkmlzWqSYHSXfHnz9/Bm/v5/z226ZU7yX45pvGnD59Cnv7DpiYmNC4cTPmzp1BqVJlefbMi2PHjlC4cBHOnz9DWFgY165doXr1mpiZmTFixGjmzZuHqWluXr9+yYAB32NiYpJqRbrBg4d+8u/TOx+rjLd8uSsNGjSkefNWnD9/hl27tlO4cFEiIsIZMGAwAP7+/qxY4UblylWJjIxk7NhJ6Oklpb7Q0LcYGhp+VqEdbSDV5LKYsLBQ5s514tChPzh79nKKa5Lqps3VobSJtLP6SRtnzOLFC2jTph1ly5b/5M9qcxsnJiayZIkLbdrYU6ZMOU2H81FSTS4b+PPPI9SvX5MNG9YTHBzEhQvnNR2SECKbGzduMgYG2bMe+sdERETQu3e/LJ/c/wsZos8CXr9+zZQp4zl4cD8AVapUxc1tJeXKffoZtRBCfKrixUtoOoRMZ2pqiqlp9q7ToVU9+GuTx2Pe+ePPdWqbgwcPUL9+DQ4e3I+RkTFz5izgyJGTktyFEEL8J1rVg6/mVRBI+fyjNsudOzdv34bQtGlznJ2XpJi8QQghhPgcWpXgs4O4uKSpO5s2bQFAvXoNOHr0JFWrVpdH34QQQnwxWjVEr+1u3LhG8+YN6dGjMxcunFMtr1athiR3IUS29zVUcEuNpo5bq3rw1eY7c6JE6hMnZGXh4eEsXDiH9evXkJiYSKFChdHRkXMr8XU6dOgA0dFRdO7cXdOhaNyBA3tZtWo5zZq1wtzcnGfPPKlZsw7fftsRSJp8ZsuWDapqfMHBwXTo8J3qprjY2Fh++20TiYmJAPj5+WJqasaPP45CX19fMweVBm/vZxw+fJAffhiu6VDS5OHxiL17d5E3rx3BwcH8+ONI1TPz74SGvmXlyqUULFgIX18fmjdvRbVqNQD4/fff8Pf3J2fOnMTGxjJ0qCMKhYKNG9fTqFFTihXL2KyLX4pWJfgbRX2IL5e5z4X/VydOHGPChDH4+vqgq6vLjz+OZPz4yRgZGWk6NJHNWZfdlOy1//2UE50A5Nj5GFOni6rXUV1KED6rrtrisrdvjxZNv6FW7dt3YsuWDXTq1JmiRYsTGhpKx46tsbdvj0KhYOLE0YwYMUZVLjcqKgpHRwcWLnTF2tqGxYsXUK/eNzRs2BhI6ikOGzaY6OjoLJXgExISmDvXiSVLVmo6lDQplUpmz57O0qU/Y2lpxYoVS/jzz0MpphXesGE9xYoVp1u3XoSGhtKvX3d27NjH8+deHD16mI0btwEwdep4zpxxp2HDxvTq1Y+RI3/gp5/WpThhUCetSvDaZtOmXxk/fhSQVAhhyZIVVKhQSbNBCaEmhw//wZo1P9G9ey+ePvUgJOQtbdq048qVi/j6+uDsvASApUuTKspNnepEZGQEK1Ysxc4uH8HBgZiZ5aJp0xapVi979eolV69extraFj+/FwwfPirFHOdnzrhz7txpChQoxIsXzxg+fBw+Pt44OU2jYsVKTJkyk6NHD3HgwF5mzpzL48ePuHz5AnZ2+VQV0Tw8HrF48UJKlSqNvr4B7u4n2b59L/Pnz6JMmbK8efOGihUr0aJFawC2bNnIs2dPKViwMHfu3EJfX5+RI8cTGRnBb79tolix4jx//oy+fQemWz/iXVUzHR0dbt26SUxMjCq5Q1JBmrp163Pw4H6++64rFy6cY8qUmar3dXV1cXFZqiqi874Pq9lNnz6HxYsXqL6LAwf2smXLBnbvPsi5c2dYscKNevUaEBkZycWL56hYsQre3s+ZPn02urq6zJvnxPDhP2JnV4TVq1dStGgxfH19ad++E6VLJ5+698aNa1haWqrqrr//PXl6PmHcuEkYG5swY8Zk/PxeULlyVe7evU2TJs2oXr1Wqu24b99uvLyeqgoWjRs3OUXyvHv3Nr/+ui5FWxgaGqaobOjn94KYmBhVrYKKFStx7NjRFAne19ebSpUqA0mFjOLiYvHyeoqfnx82Nraq9ezs8nP9+hUaNmxMjhw5sLPLx6VL56lfv2Gq3706SIJXo3bt2rN8uRuDBg3BweGHTD1zEyKztW37LUePHqJkydL07NmXyZPHEhUVweTJM1i6dDFXr16mUaOmtG5tz9GjhwDYvHkD+fPnV02jeujQAQoUKJhq9bIJE0azc+cB9PX12bp1I1u2bGTIkB+TxWBqasqIEWMxMTHh0KHd/PnnEb77riu9evXFw+MRALq6egwd6oixsQlubgvZufMAhoY5klVEa9CgITEx0QwbNpIOHb4jZ86ctGljT4MGjUhISKBXry60aNEaT88nHDt2mK1bdwEwe/Z0qlevSZ48eRgyZACOjqOoUKESN25cY+XKpSmSyjuHDiXN3f7gwT1WrFgDwOvXKavvAVhaWnLnzi18fX3JnTt3ivffTXH9vtSq2RkaGib7Lt6NJgDUr/8Np0+fIn/+gnTq1IWHD++TP39B+vfvQYECBVEqlVSqVIVmzZoxbNhw6tX7hhYtWvHypR9Tpoxjw4Ztyfbv5eWJlZVNqt/Tjh1bVd/TDz8M54cfBjF0qCOxsTEEBAQwb55Tqu1obW1D+/ad0NHRYelSF65cuUTduvWT7bd8+Yq4ua1Itc0/FBwc9ElV6xo1asqLF768ffuWiIgIypQpy5o1K4mJicHAwICHD+8nS/jW1tZ4eXlKgtdWXl6erFy5jPnznTE0NCR3bksuXryBgYGBpkMTItO866WamJhiZ5f0s6mpKZGRkSnWffrUA3v79qrX7//8YfUyMzMz1bBz/vwFOHz4j2Q9tLFjJ5IzpxEbNqz7//XsJ9jZJT122qJFKzZt+oWhQx25desG48dPUVVE27kzqezr+xXR4N/qc8WLlyA+Pp5nz7x4/PgRBgaGqiprXl5eyXrl7+qOvzu2K1cucfPmP8TGxmBklDPNNrO3b0/RosWZP38WV65comPHztjaJlXf+1BgYCDW1rZYW1sTFJSxx4YzUs0uNe++g3ejCLVr1+XkyePExsbSsmXr/2/7CRYWuXn9+hWgxMIiN4mJicnuM/qwat3739OjRw8pUqSo6r38+Qugp6eHnp4eBQsap9mOOXLk4Oefl5MrlzleXl6ULJmy2M6dO7dYv35NiuWGhoaqEaV3LCxyExn5bxnZyMgILCxSnkD16NGHnTu3sW3bFoyMclK4cBFsbfOQN68dEyZMZePG9VhYWFC0aDHViAUknVhmdtU6SfBfQHx8PKtX/4SLy3yioqIoWLAgI0eOBZDkLjQmrWvuH4ruWpLoriXVHE3qihcvyYsXvkDSNdADB/amWic8X74ChIaGEhcXh76+Pj4+PhQvXjJFD23AgJ6MHDmOypWrcurUEby8ksqMGhrmoHHjZixZ4qIaXn1XEa1Hj97o6empKqK98/6TLRcvnuPq1cssX74agD17fgeSEuD7pUz9/F6oknzx4iVp2LAJxYuXIDY2ljNn/k63PQYOHMKPPw6mdWt7KlSoqOoJvn8N/vz5M8yd64yNjS3VqtXgzBl3vvmmEQAxMdGMGzeSefNcMDMzS9bOqVWze1fSFeDVq1fpxtepU1fmz59F6dJlVN9T8eIlqF69BvXrN0SpVGJlZZ3iJmIbG1s8PZ+oXi9aNEf1PR04sDdZu38orXacNm0iGzduJ0+ePMkS8/sqVKjEsmU/p3tckHRyZmhoSGBgAJaWVty+fYu6desBSe0eHR2NhYUFQUGBtGnzLebm5oSGhuLufkp18mRmZqYaVZozZzodO3ZRbT8sLDTdqoNfmlYl+KqeBdDTDcxSN9rdvn2T0aOHc+fOLYD/Dwdm7A+rENnJ1auXeP36FUeOHKR+/YaqympWVtbcuvUPnp5PqFq1erIKan369GfFiqVs2vQL4eHh1K5dl6CgwFSrl40ZM4GlS12wtrbh1auXjBgxJkUM9vbt2bhxPVWrVufZsycEBATh6+tD/vwF6NixMw4O/Rk3bhKAqiLasmWu2NjYqiqieXs/V8VbtGgxSpcuS/nyFfn9920sWeKMtbUN0dFRHDp0AHv79rRo0ZqZM6dQvHhJYmNjVScGkyZNZ8eOreTLV4DAwAAaN26WIt5Dhw4QHh7OH3/so2/fgeTJk4fateuyYMEs+vf/HmfnpWzZsoHz588CSUli6tRZqpOIKVNmsn37FtXlh9evXzF48A/JkjukXs1OX1+fEiVKolQmqsryhoeH89dff5IvX37V92djY6tKYEWLFsPIyIgqVaqrtu3oOIr161fj5eVJaGgo5ctXSHGctWrVZevWjal+T48ePSAsLAxfXx+OHDnI69evVG37sXbs0OE73NwWUbFiJe7evY239zPq1KmPhcXnVdxUKBTMmDGHtWt/Jk+evCQmJtKqlT0AR44cxNPzCePHT+HZMy927/6dChUqEhYWyqRJM1TbWLp0MRUrVsbAwIB69RqqRkAAHj16wMCBDp8V2+fSqmpyWCfdgZnRnok6RUZG4uw8n9WrV5KYmEiBAgVxcVlCkybNNR3af6LN1aG0ibSz+mVWGz94cE9VsGT+/Fm0bdteNUqQ3X1KGx8+/AfR0VGqWu5fk0OHDhAbG0unTl3SXzkVn1tNTqt68FnJn38e5uefl6Ojo8OQIT8yceJUTExM0v+gECJb2bVrBwULFiIxMRFra5uvJrl/qrZtv+XJEw9Nh6ERpUuX1UhBH0nwn+Dd9T+Ajh07c/XqZbp27UGVKtU0HJkQQlNmzJij6RC0xtdYtQ40d9xaNZ3a9SLexJVNeVejuimVSnbv/p2aNSupbhRRKBQsWLBYkrsQQogsSasSfPUFLoTsbpep+/T2fk737p0YNux7XrzwZevWzZm6fyGEEOJzyBB9GhISEli3bhULF84lMjISc3NzZs2aT/fuvTQdmhBCCJEuSfCpePz4EY6ODty8+Q8AHTp0+v9zpzbpfFIIIURGJCQkJJv85muQ2ccsCT4VOjo6PHhwHzu7fDg7u6nmnBZCCHWIi4vj55+X88cfe+nZsy8JCQk8fvyQ/v0HU758RSCpGtvevbswNU16xj08PJx+/QZhbm4OQEBAANu3b8bU1Iy4uDi8vDypWrValqzad/asO+Hh4bRuba/pUNJ07NgRHj9+hK6uDnZ2+VOdgOnx44fs2rWDwoWL4OXlyeDBP5AnTx5iY2NZtmwxNja2BAYGULFiZZo1a0lUVBS//LKGwYOHJJvlTl0kwf/frVv/ULFiZRQKBcWLl2DTpu3UrFkLE5PPe/5QCE2zsXFL9vrNm5QTwwBs3nybceNOqF736VMBV1ftns9B2+jr69O1aw+OHz/CoEFDADh9+m9+/XUtbm4rCQgIYPr0yfz88zpVYvD0fMrkyWNYuXIdCQkJTJo0hvnzXVTznwcFBTJt2sQsl+B9fLz54499uLgs03QoaXrz5jXbt29lw4bfUCgUDB7cl2rValCgQMFk682fP5spU2ZQsmRpzp07w9Klzixc6Mb+/bvR1zegX79BxMfH061bBypXroaVlRWtWrXF1XVRpjx98dUn+ODgIJycprF9+1ZWrlxD1649AGjSJOWsU0KItGWkmpyxsUmaVcCePfNi27bNFC5chKdPPWjSpAVKpTJZVbMrVy6xd+9hNmxYR3x8PEqlEn19fQYM+D5FPEuXLuXt2wj09fWJjY3lxx9HcurUCebNm8no0ROwt2/PggWziY6OYtasBaxfv5qEhAR0dHQwMjKiV69+qmNq374Tfn6+eHs/x8lpPitXLqF8+Yp4ej6he/felChRitjYWBYunIOFhQUmJqacPPkXtWrVZvjwMZw+/XeKqnXvaryn5e3bENWsbIcO7adGjVrJen1FixZDV1eP27dv8vZtCHny5E1W3CR3bkvmzXNJsd3UKvg1btwMF5f5tGnTjubNW+HsPA9IqjK3bdtmNmxYx6BBQ7h79zYJCYkEBLzB0tKKZcuWcPHiOX75ZS0TJ04lMjKSw4f/oHDhInh7P2fo0OGqEYZ3jh49RI0atVSv161bpXoE+d335OPjnWpFQT8/v1TbcdGiuVhZWRMVFYWlpRU9evROcdz79+/hzBn3FMvLlSuvOql658qVi5QqVVo1K2H58hW4dOlCigTv6+uNrW0eIGmq2+vXrwHg4+Ojmm1QT08PC4vc3Llzk8aNm1GqVGnVd5YrV/K2+dK0KsGvWdsdE8sLX6RW9bt5r6dMmUBAgD8GBgaqAhJCiE+X0WpyaVUBW7BgNiNHjqVs2fIEBgbw6NFD6tVrkKKq2eXLF3nw4B7OzksBGDt2BFeuXKJmzdrJ4ilfvjyVKiUlkokTR+Pp+ZQmTZpx7txpVTlVM7NcjBw5TlVtbcmSnwBwdHSgZs3aqmMqW7YcgwYN4eHD++jr69O///eUKlWaR48esmnTr8ydu4iDB/djZGTE8OFjSExM5ODB/XTu3J3Q0NA0q9Z9KCYmhi1bNuLp+YTExEQmTpwGJE1BW7Bg4RTrW1pa8uKFDyEhIVhappzCO7VpW1Or4FeoUGHVI7/6+vrJqsz17NmXvXt3UatWXbp3783Dh/cJCwtj167tmJiYYGJiynffdaV48ZJ07NiGdes2YW1tw5EjB9m8+RdGjBibbP9eXp40b95K9bp06TI0aNAo2fdUtGixVCsKjhs3ItV2rFu3vmob/fv3pH37jilKCXfo8F2qw+ypCQ4O/qTKcnXr1ufBg3tER0cRHx9PxYqVOH06ac78sLAwfHyeq+b8f/e9+Ph4S4J/n8OpeoDHf07wvr4+TJw4hr/+OgZAnTr1cHVd/tVOwiDEl5ReNbm0qoC9X/HM0tIqWenP96uabdu2OVnVtvz58/PkyWP8/F5w5ow7RkY5mTvX+f/XtZdhapoLf39/1Qn8d991Y9Wq5VSrVhM9PT2MjIx4+tSD6OhotmzZCICtrW2yE/53leVKly5LUFAgJ08e49Kl80RERLxXWc5TFb+Ojg5589oB8OKFDx+rWvc+Q0ND+vTpT2xsLN9/35cXL3wpUaIktrZ5PlpZzsDAkIcPH6T/5fDxCn4f82FlueXLXfHx8eHkyb8YNmwEISEhhIaG8uefR/5/nG/R0Ul5Q9mHleXi4uJT/Z7e3+e7ioJptWNgYABr1vykKp7z9u3bFAl+377duLufShFPuXLlcXAYlmyZhYVFsiJCkZER5MtX4MOPMn36bHbt2oGvrw/GxsZYWVmjp6dHs2YtiYiIYPPmXzEyMqJMmXKqnj4k9eozo7KcViX4L+H69at07tyeiIhwzMxyMWPGbHr37pei+pEQ2i6ta+4f6tu3In37VlRzNP9KqwrYu8pyZma58Pd/w6NHD6lf/5sUn/+wMpqPjw/1639DjRq1VT20sLAwJkyYwLFjp9HX1+fp03+nSC1XrjwxMdGsXLmEPn0GqLZ59+4d+vTpDyT9nXj/D/r7leW2bt2IqakZ/foNwtv7Offv3wWgSJEieHo+BSAxMZGXL/2A9KvWpcbAwIA+fQawfv0qFi1agr19e8aOHUFERHiya/DR0dFUr16TuLg4fvttM/7+b7C2Tnrax9v7GT/9tIxFi5KXRU2rgt/7leWSSr8m934bAHTo0JmlS5dia5sPAwMD9PX1MTc3p337TpiZmfH2bQh3795JsR0bG1vCwt4CSd/T3LkzUv2ePpRWO3p4POa337awa9cBAM6fP5Pq5zt27EzHjp3T3P77atasw+7dO1EqlSgUCu7evaOaQz8gIABTU1MMDQ0JCAhQnRxcuXKJli3b/P+4Qqldux558uQhPj6eU6dOJJsULTQ0NFnCV5evLsGXL18ROzs7SpUqw4IFLpnSyEJ8DTJSTa527bppVgGbNGk627Zt5tq1q/j7v6ZPnwHcv383RVWz9yujKZVKypevQI0ayYfnTUxMaN26NXPnzqBUqbI8e+bFsWNHqFixMnp6enTq1JWTJ4+rrqnWrFmb+/fvsnr1SoyMjAgLC2PoUEfVMe3Zs5NevfphYWFBw4ZNWbNmJbGxscTHx/P69SuuXbuCvX0HFiyYzdKli7G2tiZXrlwoFIo0q9a9Lz4+nj17dhITE8O2bVvo2bMPTZo0Z+PGX1i9eiX9+g1i9uwFrF37M2ZmuYCk0rCLFy9HV1cXXV1dXF2Xs2PHbxgbGxMXF0dQUCDjxk1O8T2lVsEPoGHDxri6LiIhIZ7Q0FBVxT9/f3/Cw8PZuHE9vXv3R08vKW20bm3Phg1r2bBhG5B0AjBr1nxWrVqBnV0+Xr9+RefOKQvLfPNNY06fPoW9fQdMTExo3LhZiu+pcOEiqVYUTK0dTUxMKFy4MAsXzqFgwcL4+7/h8OE/GDx46Gf/LtvY2NKjR2+WL3dDR0cHe/v2qt+V5ctdadCgIc2bt+L8+TPs2rWdwoWLEhERzoABgwHw9/dnxQo3KleuSmRkJGPHTlK1W2joWwwNDVWjPeqkVdXkHCbXwzX/8k+qXR0dHc2qVSvo338QFhZJ09yGhARjbv55JQWzO6lyljmkndUvs9s4MjKSN29eq4aV+/Tpyq+//qaqX5EdfW4bL168gDZt2lG2bHk1RJV1JSYmsmSJC23a2KsqEGbE51aT06oErzip4E3F0Ayvf/HiecaOHcGTJx706NGbZct+VmN02YMknswh7ax+md3GwcHBLFw4m4oVKxMUFEiZMuVo1qxlpu1fE/5LGz954vHV3fcUFhZGZGTEJ48cS7nY97x9G8Ls2TPZsmUDACVKlKRHjz4ajkoIkZ1ZWFikuN4t0va1JXdIutnU1DTz5lbJdgn+0KE/mDx5HK9fv0JfX58RI8YwatS4dJ85FUIIIbKTbJXg7927y8CBSRMcVK9eEze3FZQuXUbDUQkhhBCZT+sT/LvHGCDp8ZchQ4ZRpEgx+vcfJI++CSGE+GppdQZ8/PgR7du35uLF86plc+YsZODA7yW5CyGE+KppVRZUdl+BddlNxMTE4OKygCZN6nHp0gUWLZqn6dCEEEKILEVtQ/QXLlzg+PHjWFpaolAocHR0TPZ+TEwMixYtwtbWlmfPnuHg4ECRIkXS326cJwObNeDRo4cA9O7djxkzZqvlGIQQQghtpZYEHxUVxcyZMzl8+DAGBgYMHz6cixcvUqdOHdU6mzZtIm/evHz//fc8evSIqVOnsm3bto9u1zF8Jz9Hn0P5VknRosVwc1uRbL5qIYQQQiRRyxD9zZs3sbOzw8DAAICqVavi7u6ebB13d3eqVKkCQKlSpXj48CHh4eEf3e7vMf+gi4JRo8bh7n5RkrsQQgiRBrX04AMDA1XlGCFpXujAwMAMrWNiYkJa/BNl5q/M8LmzJolPI+2sftLG6idtnHWppQdvaWmZrPZteHh4ilrFGVlHCCGEEJ9HLQm+cuXK+Pn5ERsbC8CNGzdo1KgRISEhqmH4Ro0a8c8//wDw6NEjSpcu/dHeuxBCCCEyTm3FZs6fP8+xY8ewsLBAX18fR0dHnJ2dMTc3x8HBgejoaBYtWoS1tTXe3t4MGTIkQ3fRCyGEECJ9WlVNTgghhBAZo1UT3QghhBAiYyTBCyGEENlQliw2o65Z8MS/0mvjtWvXEhAQgLW1NXfv3mXEiBEUK1ZMQ9Fqp/Ta+J0//viD8ePHc+PGjWSPjoqMSa+dlUolW7ZsAeDFixeEhoayYMECTYSqtdJrYx8fH5ydnalQoQIPHjzA3t6epk2baiha7eTv78/SpUt5+PAhe/bsSfF+YmIibm5uGBsb8+LFCzp37kzlypU/vlFlFhMZGals1qyZMiYmRqlUKpWOjo7KCxcuJFtnzZo1yrVr1yqVSqXy4cOHyh49emR6nNosI228ZMkSZWJiolKpVCoPHz6sHDJkSKbHqc0y0sZKpVL55MkTpZubm7JkyZLK8PDwzA5T62Wknfft26fct2+f6vWDBw8yM0Stl5E2njFjhnLDhg1KpVKpvHfvnrJ58+aZHabWO3r0qPLkyZPKjh07pvr+oUOHlDNnzlQqlUplcHCwskWLFsr4+PiPbjPLDdGraxY88a+MtPGoUaNUZXgTExMxMjLK7DC1WkbaOCoqivXr1/Pjjz9qIMLsISPtfPDgQUJCQti8ebOqByQyLiNtbGVlRVBQEABBQUGUK1cus8PUeq1atfro76a7u7uqx25ubo6BgQEeHh4f3WaWS/D/ZRY8kTGf0n6xsbHs27ePUaNGZVJ02UNG2njJkiUMGzZM9YdTfLqMtLOfnx/h4eH07duXjh07MnjwYBISEjI7VK2VkTYeMGAAt27dYsGCBfz000906tQps8PM9oKCgpLNFWNiYqI6qUpLlrsGL7PgqV9G2y82NhYnJydGjx5NwYIFMzNErZdeG798+ZLQ0FCOHj2qWrZhwwYaNmxIhQoVMjVWbZaR32UTExMqVaoEQJEiRQgPD+fly5fkz58/U2PVVhlp40mTJtGlSxfs7e0JCgqiRYsWnDhxAnNz80yONvvKnTt3spHq8PBwcufO/dHPZLkevMyCp34ZaeN3FQEHDBhA+fLlOXbsmCZD1jrptXHevHlZuHAhDg4OODg4AEm9IEnunyYjv8t16tTBx8cHSPqjmJCQgLW1tcZi1jYZaeOXL1+q2tTMzAwdHR0SExM1FnN2ERkZqeqlN2rUiJs3bwIQEhJCbGwsJUqU+Ojns+RENzILnvql18aOjo54eHhgY2MDJP2ipXZnp0hbem0MScNuO3bsYNmyZQwbNozu3btja2ur4ci1S3rtHBYWhouLC3Z2dnh7e9OyZUsaNmyo6bC1SnptfO3aNTZv3kzZsmXx9fWlXLly9OjRQ9Nha5UrV66wf/9+zp49S48ePRg4cCB79uzh0aNHzJ49m8TERFxdXcmZMyd+fn507do13bvos2SCF0IIIcR/k+WG6IUQQgjx30mCF0IIIbIhSfBCCCFENiQJXgghhMiGJMELIYQQ2VCWm+hGiOzo9u3buLi4EBcXR7169YCkokkxMTFMnTo1xfqPHz9m7ty5dOjQ4T/NCvb777/j4uKCvb09FhYWPH36lA4dOtCkSZNP2k6nTp3YtWsXurq6nDhxgtKlS6smipk8eTJ9+vShbNmynx1nYGAgLi4unDt3jm7duhEbG8uDBw+YNm0ahQsX/uhnN27cSP/+/T9730JkV/KYnBCZZMWKFURGRjJx4kQgKcFfuHCBxo0bp7l+vnz5/vO0n02aNGH16tWULFkSHx8funbtysWLFz9pG0qlUlWbYNKkSXTs2JFatWqleO+/uHz5MosWLWLv3r1AUuL29PRk9uzZH/1ckyZNOHXq1H/evxDZjfTghdCA+Ph4Fi9ezNSpU1m6dClxcXHo6+sTExOjOgF43/Lly9HRSbqiFhcXx+jRo/Hw8GDdunWULFkST09PfvjhBwoUKPDR/fr7+2NhYQHAypUriY+PR6lUqiYv8fT0VG3z/v37DBs2DE9PT+bNm8fmzZsJCgriwYMHANy6dYtvvvmGefPm0bFjR/LkycPYsWPp1asXjo6O/PTTT9y4cYMlS5Zw6NAhvLy8sLCwICwsjAkTJqR7UhAcHKyaijMiIoLRo0dTvXp1vLy8aNeuHXXr1uXIkSOEhoayYsUKihYtStu2bVm2bBkJCQno6OhgbGzM999//8nfjxDZgSR4ITLR5cuXmTdvXrJeb/ny5WnWrBkAQ4cOxcPDI8UUlDt37mTTpk0UK1aMGzduADBt2jQmTpxI1apVuXz5MgsXLuSnn35Kdb/btm3D3NycsLAwVq5cydmzZ7lz5w5r1qwBYPDgwZw7d44nT56gr69Pr169eP36NYaGhjRt2pSNGzcCULFiRcqUKZOsB1+zZk0A6tatS9euXcmZMycA+vr6ODk54e/vz5YtWzhy5AgKhYJJkyZx8uRJ1TG/LyAggLVr1/LPP/+QL18+JkyYAICOjg79+/enbt26hISEMGjQIOrWrUubNm1YvHgxw4cPB+Ds2bPcunWLX3/9FYA+ffpQv359ypQp8xnflhDaTRK8EJmoVq1aTJw4EaVSybNnz4CkHvm7aT/fvHmTaoUoV1dX3NzcCAwMpE+fPkBSHYbz589z7do1oqOjP1rSt2fPnpQsWVL1+tSpU8l6+4UKFeLhw4f07NmTtWvX0qtXL4oUKcKkSZM+6fh69OhBv3796NOnD69evaJAgQIcPXoUHR0d1q1bB4Cenl6a5Z2trKxwcHAgJCSEzp074+DggI2NDUqlksuXL/PPP/+gr69PcHBwqp9/9OgRUVFRrF27FoA8efKkW3FLiOxKErwQGqBQKChSpAihoaFMmDCB69evY2BgwKNHj1JdPyIigp9++onAwEDat29P27ZtKV26NM2bN6d06dLExsby119/ZXj/pUuX5sqVK6rXz549o0mTJty6dQsHBwdGjRrFokWLOHDgAAMGDEj2WR0dHZRKJd7e3imqiuXJk4dSpUoxY8YM2rdvD0DJkiUxNDRUzb9/79499PQ+/qfH3Nycrl27snbtWqZNm8auXbt48+YNCxYsIDY2lh07dqSI513hqZs3b6r2dfHiRQoVKpThdhEiO5EEL0QmuHPnDlevXiUuLo6jR4/SunVrAExNTWndujUTJ06kfPnyPHnyhAMHDmBubs7Vq1d5/Pgx9erVY9++fTx69Ijo6Gh69+4NwLx58/j1118pVKgQb968oVWrVin2u3v3bsLCwti5cyd9+vRRJbv69etz8+ZNXF1dUSqVVKlShXr16vHnn3+ycOFC8ufPT3BwMD179sTd3Z0XL16wY8cOxo0bR7169di1axcKhYLBgwcni9PW1pY+ffrg5OTEwoULAShWrBjdu3dnwYIF5M6dmzdv3jBmzJhkcQYFBXHgwAH8/f3ZtWsXXbp0oVevXrRu3RorKyuaN2/OsWPHWLRokepSw7Fjx2jZsiWNGjVi0aJFQNINgLdv38bV1RVjY2Pevn3LuHHj1Pa9CpGVyV30QgghRDYkE90IIYQQ2ZAkeCGEECIbkgQvhBBCZEOS4IUQQohsSBK8EEIIkQ1JghdCCCGyIUnwQgghRDYkCV4IIYTIhv4H/Pxb+LuHBdIAAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter4_57_3.png" + } + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAFmCAYAAACBRIhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB21klEQVR4nO3dd3gU1dfA8e9ukk0lpBB6CyV0CCC9hV4E6SAKKF1KELCi/gQrAgISmgKKiA3pXXroHULvLSEJIb3X3Xn/WN8BlBIgm0k5n+fxebyzszNnh82euXdmztUpiqIghBBCiDxFr3UAQgghhMh6kuCFEEKIPEgSvBBCCJEHSYIXQggh8iBJ8EIIIUQeJAleCCGEyIOstQ5AiJzg6NGjLFiwgIyMDIxGI7a2trzyyiu8/PLLGAyGbItj7ty5/PHHH7z66qv4+vo+8/tTU1Np164df//9N/b29lkaW0hICLNmzeLOnTtYWVmRkpJC3bp1efXVV/H09Hzq+4cNG8bQoUNp0KBBlsaVnJzMnDlzOHnyJDY2NqSmplKrVi369u1LhQoVsnRfQuQqihD53J49exQfHx/l1q1b6jJ/f3+latWqyoULF7I9ng8++EDx8/PL1Lr9+/dXVq1a9dCy2NjYLI/p7t27SrNmzZStW7eqy6Kjo5VevXop33zzTaa2ER8fr5hMpiyNKyMjQ+nfv78yffp0ddvx8fHKkCFDlJEjR2bpvoTIbWSIXuRrJpOJzz77jLfeeosyZcqoy1u0aEH79u01jOz5OTs7Z/k2Z86cSb169WjXrp26zMXFhXHjxmFra5upbTg5OaHT6bI0rnXr1hEUFMS4cePUbTs5OfHRRx9l+b6EyG0kwYt87fz589y5c4cmTZr857Wvv/4aLy8vlixZQpMmTZgzZw4Afn5+vPTSS6xevRowD6s3adKEzz//nHfffZf27dszffp0zpw5w6hRo2jdujU7duwAYMOGDbRq1YoPP/wQgN9///2hbT/K5MmTeeONNxgwYAATJkwgISEBgBkzZnDx4kUWLlzIgAED8Pf355133qFGjRocOXKE5cuXU6dOHTp27MjRo0eJiYmhR48etGrViosXL5KYmMjEiRPp168fr776Kn/88ccj928ymdixY8cjj1GTJk0YN27cU2NdvHjxQ59z8uTJvPTSS3z33XeMHTuW9u3bM3PmTHU7J0+epF+/fgwcOJABAwawe/fuR8a2detWGjZsiLX1w1cby5Urx9SpU4mJiaFPnz5UqlQJgKCgILp27UqrVq0A82WH/3999erVDB48mOrVqzNkyBAqVarE0KFD1X+3Zs2aMWrUKADOnTvH66+/Tv/+/XnjjTe4fv36Y//9hNCM1kMIQmhp06ZNipeXl5KWlvbE9f49bP7vofEPPvhA6d69u5KamqpERkYq1apVU+bNm6coiqJs3bpVad++vbqun5+f8sEHHzx22/9uL1269KH3zpo167FxKIqitGzZUjl8+LCiKIry9ddfK5988on62s8//6zs379fURRF+fjjj5X3339fURTzsHarVq2UY8eO/eezh4eHK15eXur7nuRJsT7qGA4bNkwxmUxKWFiYUrVqVeXu3buKoihKz549lYCAAEVRFOXixYsPHa8HdejQQZk5c+YTYwoKClK8vLzU9uHDh5WWLVv+5/U1a9YoiqIoP/30kxISEqI0atRIOXHihLreW2+9pRiNRiUuLk5p0KCBcvDgQUVRFGX37t1Ku3btFKPR+MQ4hMhu0oMXIovUr18fg8GAm5sbbm5uVK5cGYBKlSpx586d596ura0tr732Gv3792fTpk2cP38+0+/t1q0bW7ZsITU1FYAjR47QqFEjTCYT69ato2fPnoB5WLtly5asX7/+sdtSHpi2wmg0MmDAAHr06EG/fv2eO9amTZui0+koXLgwLi4uBAcHA1CwYEHWrVtHREQElStXZtKkSZn+zM+rdevWAAwaNIhixYrx8ssvs3btWgCuXLlCxYoV0ev17N69GwcHBxo1agSAj48PERERnD592uIxCvEs5C56ka+VLl0agLCwMEqWLPlC23J0dFT/39raWm1bWVmRnp7+XNs8cuQI33zzDRs2bKBkyZKsXr2aNWvWZPr9VapUoVixYuzcuRMvLy/KlSuHXq8nIiKCtLQ0pk+fjp2dHQBxcXFUqVLlP9twc3PD0dGRsLAwdZmVlRXLli1jxYoVLFiw4LljdXJyUv/f1tZWPU4zZsxg4cKFdO/eHS8vL959991HxlamTJmH4noRBQoUeKjdrVs33nzzTT755BPWrVtHjx49ALh79y6xsbEMGDBAXdfNzY2YmJgsiUOIrCIJXuRrVatWpWzZshw4cIC+ffs+9NpHH33E66+/TrVq1bCxsSEtLU19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CJEHSYIXQggh8iBJ8EIIIUQeJAleCCGEyINyXKEbIXKzM2fOMH36dNLT02nSpAlRUVHo9Xo+/vhj9PrsP5/esWMHlStX1qyoy5QpU3BxceH06dPMmDEj28vEhoaG8vXXX+Pl5YWvr2+27lsIrUmCFyIL1axZk/r165OUlKQmlP79+7Nv3z5Nnr3esWMHBQoU0CzB79ixg507d5Keno6NjU22779YsWK0bNmS4ODgbN+3EFqTBC+EBWVkZBAdHY2rqyvbt29n3759lCxZkpCQECZOnMiFCxeYPHky1apVw2AwsHXrVrZu3cqWLVu4efMmrq6uBAQEMH36dAC++uorypYty927d2nVqhXNmjVj+vTpbNy4ke7du3P9+nWcnJyYMmUKZ86c4eLFiwCcPn2a4cOH88knn1CkSBGSkpLw8PBg8ODBAKxdu5Zdu3ZRpUoVrl69Snh4OB9//DGurq7MmDGDihUrEhgYSN++falevfpDnzEhIYFp06apn6tp06a0adOGX375hdjYWObMmUPHjh2pUKGC+p7ffvuNsLAwderLzz//XD0Z8PT05PLly3z22Wc4OTkxbtw4goODady4MadOnaJNmzZERUVx8eJFqlatyttvv83OnTv56quvePnll7G1teXcuXP4+vr+Z9KTsLCwp34eIfKMrJzuTgihKH5+fkrfvn0VPz8/5fPPP1fWr1+vxMTEKE2aNFGSk5PVdX7++Wf1/6dOnaooinkq00uXLikvv/yyur0tW7YocXFxyrfffqssWLBAURRFSU5OVnx8fJT09HRFURSlevXqSlxcnKIoitKpUyclKipKURRF+eCDD5TDhw+r29q+fbv6/6+88ooSHx+vREVFKU2aNFGnA505c6bi5+enKIqijB8/Xlm/fr2iKIoSFBSkdO3a9T+f99tvv1UWL16sKIqipKamKs2aNVNiYmIURVGUli1bPvIYvfLKK8qRI0cURVGUEydOKIqiKEeOHFE/w08//aT8+uuv6n59fHwUo9GoxMbGKjVr1lQSEhIUo9GotGjRQt1m//79lQMHDiiKoigBAQFKjx49FEVRlFWrVj3T5xEir5AevBAWULt27Yeu+Z45cwaAX375BYDY2NiHpuAtX748AJUrV2bLli0PDal36NABMM+74OLiwsKFCwHw8vIiNjYWd3d3ChUqRIECBQDzpBSJiYm4urr+J67w8HBmzpyJk5MTCQkJxMTEEBUVhaurqzqrXalSpQgNDVX36ebmRmhoKIqi4O7ujslkeuh+gsuXL9OrVy8ADAYDBQsW5Pbt29SsWfOxx+ebb75h8eLFTJs2ja5du1KnTh0cHByYN28erq6unD9//qE62yVLlkSv1+Ps7Iy7u7t6Lf/f9zWUKlUKgNKlS3Pt2rX/7Dczn0eIvEISvBDZoEyZMtja2jJ48GCsra0JDAzk3r176us6nU79fy8vr4euGW/dupV69epRuXJlChUqxMCBAwFYt26dOlvXg+9/kF6vR1EUAgMDSUpKYvHixezcuROAXbt2AeakGBkZSWpqKra2tgQFBWFtbf5pqFy5Mo0aNaJ169YoikKRIkX+kwwrV65MYGAgAKmpqcTGxlK2bNknHo/Q0FBmzJhBUlISnTt3pkuXLnzyySd8/PHH1KtXj+XLlz90fDIrKCiIUqVKcevWLfWk6d+xPu3zCJFXSIIXIgudPXuWY8eOkZ6eztatW2nfvj0ABQsWZOLEiXz11VcUK1aM4OBgxowZw82bNzl27BhXrlyhYsWK1KhRg/Lly9O/f3+++uorXF1dMZlMtG/fnuHDhzN9+nTmz59Peno6Hh4eWFlZsWLFCuLj49m6dSsFCxYkODiYVatW8fbbb9OkSRNWrFiBTqfj888/p3z58nz88ceUK1eOsLAwdb133nmH8ePHU7NmTSIjIylatCgA77//Pn5+fly7do2YmBhq1679n888fPhwvvnmG+bPn09oaCiffvopzs7O/Pbbb8THxzN//nxGjBiBlZWV+p5du3Zx4cIFANq2bYuLiwu9evVi/vz5NGjQgPPnzxMbG8vt27dZvXo1wcHBHD58mJCQEOLj49m+fTsA8fHxrFixgt69e6vH//jx45w5c4bPPvuM0NBQdu/eTWxsLNeuXcvU5xEir5DJZoQQnDlzRh1Snzt3LqVKlaJr164aR/VsBgwYwJQpU2SedyH+IWNTQgg2btzI7Nmz+f7774mOjubll1/WOqRn4u/vT3BwML///rvWoQiRY0gPXgghhMiDpAcvhBBC5EGS4IUQQog8SBK8EEIIkQdJghdCCCHyIEnwQgghRB4kCV4IIYTIg/4P2w5ECBkhgJ8AAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter4_57_4.png" + } + }, + "output_type": "display_data" } ], "source": [ @@ -1207,7 +1236,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Optimization, the central part of any Machine Learning algortithm\n", + "# Optimization, the central part of any Machine Learning algortithm\n", "\n", "Almost every problem in machine learning and data science starts with\n", "a dataset $X$, a model $g(\\beta)$, which is a function of the\n", @@ -1220,7 +1249,6 @@ "\n", "\n", "\n", - "## Revisiting our Logistic Regression case\n", "\n", "In our discussion on Logistic Regression we studied the \n", "case of\n", @@ -1249,7 +1277,6 @@ "where $\\boldsymbol{\\beta}$ are the weights we wish to extract from data, in our case $\\beta_0$ and $\\beta_1$. \n", "\n", "\n", - "## The equations to solve\n", "\n", "Our compact equations used a definition of a vector $\\boldsymbol{y}$ with $n$\n", "elements $y_i$, an $n\\times p$ matrix $\\boldsymbol{X}$ which contains the\n", @@ -1291,7 +1318,6 @@ "This defines what is called the Hessian matrix.\n", "\n", "\n", - "## Solving using Newton-Raphson's method\n", "\n", "If we can set up these equations, Newton-Raphson's iterative method is normally the method of choice. It requires however that we can compute in an efficient way the matrices that define the first and second derivatives. \n", "\n", @@ -1332,9 +1358,6 @@ "If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. \n", "\n", "\n", - "\n", - "## Brief reminder on Newton-Raphson's method\n", - "\n", "Let us quickly remind ourselves how we derive the above method.\n", "\n", "Perhaps the most celebrated of all one-dimensional root-finding\n", @@ -1346,7 +1369,6 @@ "normally discourage the use of this method.\n", "\n", "\n", - "## The equations\n", "\n", "The Newton-Raphson formula consists geometrically of extending the\n", "tangent line at a current point until it crosses zero, then setting\n", @@ -1421,8 +1443,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Simple geometric interpretation\n", - "\n", "The above is Newton-Raphson's method. It has a simple geometric\n", "interpretation, namely $x_{n+1}$ is the point where the tangent from\n", "$(x_n,f(x_n))$ crosses the $x$-axis. Close to the solution,\n", @@ -1437,7 +1457,6 @@ "\n", "\n", "\n", - "## Extending to more than one variable\n", "\n", "Newton's method can be generalized to systems of several non-linear equations\n", "and variables. Consider the case with two equations" @@ -1574,8 +1593,6 @@ "we are always moving towards smaller function values, i.e a minimum.\n", "\n", "\n", - "## More on Steepest descent\n", - "\n", "The previous observation is the basis of the method of steepest\n", "descent, which is also referred to as just gradient descent (GD). One\n", "starts with an initial guess $\\mathbf{x}_0$ for a minimum of $F$ and\n", @@ -1599,8 +1616,6 @@ "the learning rate within the context of Machine Learning.\n", "\n", "\n", - "## The ideal\n", - "\n", "Ideally the sequence $\\{\\mathbf{x}_k \\}_{k=0}$ converges to a global\n", "minimum of the function $F$. In general we do not know if we are in a\n", "global or local minimum. In the special case when $F$ is a convex\n", @@ -1621,7 +1636,6 @@ "\n", "\n", "\n", - "## The sensitiveness of the gradient descent\n", "\n", "The gradient descent method \n", "is sensitive to the choice of learning rate $\\gamma_k$. This is due\n", @@ -1652,13 +1666,10 @@ "regular polygons (triangles, rectangles, pentagons, etc...).\n", "\n", "\n", - "## Convex function\n", "\n", "**Convex function**: Let $X \\subset \\mathbb{R}^n$ be a convex set. Assume that the function $f: X \\rightarrow \\mathbb{R}$ is continuous, then $f$ is said to be convex if $$f(tx_1 + (1-t)x_2) \\leq tf(x_1) + (1-t)f(x_2) $$ for all $x_1, x_2 \\in X$ and for all $t \\in [0,1]$. If $\\leq$ is replaced with a strict inequaltiy in the definition, we demand $x_1 \\neq x_2$ and $t\\in(0,1)$ then $f$ is said to be strictly convex. For a single variable function, convexity means that if you draw a straight line connecting $f(x_1)$ and $f(x_2)$, the value of the function on the interval $[x_1,x_2]$ is always below the line as illustrated below.\n", "\n", "\n", - "## Conditions on convex functions\n", - "\n", "In the following we state first and second-order conditions which\n", "ensures convexity of a function $f$. We write $D_f$ to denote the\n", "domain of $f$, i.e the subset of $R^n$ where $f$ is defined. For more\n", @@ -1691,7 +1702,6 @@ "This condition is particularly useful since it gives us an procedure for determining if the function under consideration is convex, apart from using the definition.\n", "\n", "\n", - "## More on convex functions\n", "\n", "The next result is of great importance to us and the reason why we are\n", "going on about convex functions. In machine learning we frequently\n", @@ -1714,7 +1724,7 @@ "This result means that if we know that the cost/loss function is convex and we are able to find a minimum, we are guaranteed that it is a global minimum.\n", "\n", "\n", - "## Some simple problems\n", + "### Some simple problems\n", "\n", "1. Show that $f(x)=x^2$ is convex for $x \\in \\mathbb{R}$ using the definition of convexity. Hint: If you re-write the definition, $f$ is convex if the following holds for all $x,y \\in D_f$ and any $\\lambda \\in [0,1]$ $\\lambda f(x)+(1-\\lambda)f(y)-f(\\lambda x + (1-\\lambda) y ) \\geq 0$.\n", "\n", @@ -1739,13 +1749,6 @@ "Using the definition of convexity, try to show that a function satisfying the properties above is convex (the third condition is not needed to show this).\n", "\n", "\n", - "\n", - "## Friday September 25\n", - "\n", - "[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureSeptember25.mp4?vrtx=view-as-webpage) and [link to handwritten notes](https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/NotesSeptember25.pdf).\n", - "\n", - "\n", - "\n", "## Standard steepest descent\n", "\n", "\n", @@ -1794,7 +1797,6 @@ "When we have found the exact solution, $\\boldsymbol{r}=0$.\n", "\n", "\n", - "## Gradient method\n", "\n", "The residual is zero when we reach the minimum of the quadratic equation" ] @@ -1816,9 +1818,6 @@ "symmetric. This defines also the Hessian and we want it to be positive definite. \n", "\n", "\n", - "\n", - "## Steepest descent method\n", - "\n", "We denote the initial guess for $\\boldsymbol{x}$ as $\\boldsymbol{x}_0$. \n", "We can assume without loss of generality that" ] @@ -1855,8 +1854,6 @@ "instead.\n", "\n", "\n", - "\n", - "## Steepest descent method\n", "One can show that the solution $\\boldsymbol{x}$ is also the unique minimizer of the quadratic form" ] }, @@ -1895,9 +1892,6 @@ "$\\boldsymbol{x}_0=0$ it is equal $-\\boldsymbol{b}$.\n", "\n", "\n", - "\n", - "\n", - "## Final expressions\n", "We can compute the residual iteratively as" ] }, @@ -1974,21 +1968,39 @@ "$$" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Steepest descent example" - ] - }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "collapsed": false, "editable": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter4_114_1.png" + } + }, + "output_type": "display_data" + } + ], "source": [ "import numpy as np\n", "import numpy.linalg as la\n", @@ -2021,12 +2033,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "collapsed": false, "editable": true }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter4_116_0.png" + } + }, + "output_type": "display_data" + } + ], "source": [ "pt.axis(\"equal\")\n", "pt.contour(xmesh, ymesh, fmesh)\n", @@ -2042,7 +2069,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": false, "editable": true @@ -2062,12 +2089,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "collapsed": false, "editable": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1.33333333 -0.26666667]\n" + ] + } + ], "source": [ "def f1d(alpha):\n", " return f(x + alpha*s)\n", @@ -2087,12 +2122,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": false, "editable": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter4_122_1.png" + } + }, + "output_type": "display_data" + } + ], "source": [ "pt.axis(\"equal\")\n", "pt.contour(xmesh, ymesh, fmesh, 50)\n", @@ -2144,10 +2204,6 @@ "Two vectors are conjugate if they are orthogonal with respect to \n", "this inner product. Being conjugate is a symmetric relation: if $\\boldsymbol{s}$ is conjugate to $\\boldsymbol{t}$, then $\\boldsymbol{t}$ is conjugate to $\\boldsymbol{s}$.\n", "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "An example is given by the eigenvectors of the matrix" ] }, @@ -2164,13 +2220,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "which is zero unless $i=j$.\n", + "which is zero unless $i=j$. \n", "\n", - "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "Assume now that we have a symmetric positive-definite matrix $\\boldsymbol{A}$ of size\n", "$n\\times n$. At each iteration $i+1$ we obtain the conjugate direction of a vector" ] @@ -2206,7 +2257,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Conjugate gradient method\n", "The coefficients are given by" ] }, @@ -2255,8 +2305,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Conjugate gradient method and iterations\n", - "\n", "If we choose the conjugate vectors $\\boldsymbol{p}_k$ carefully, \n", "then we may not need all of them to obtain a good approximation to the solution \n", "$\\boldsymbol{x}$. \n", @@ -2299,11 +2347,6 @@ "source": [ "instead.\n", "\n", - "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "One can show that the solution $\\boldsymbol{x}$ is also the unique minimizer of the quadratic form" ] }, @@ -2343,11 +2386,6 @@ "The other vectors in the basis will be conjugate to the gradient, \n", "hence the name conjugate gradient method.\n", "\n", - "\n", - "\n", - "\n", - "\n", - "## Conjugate gradient method\n", "Let $\\boldsymbol{r}_k$ be the residual at the $k$-th step:" ] }, @@ -2386,7 +2424,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Conjugate gradient method\n", "We can also compute the residual iteratively as" ] }, @@ -2451,14 +2488,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Revisiting our first homework\n", + "## Revisiting our Linear Regression Solvers\n", "\n", "We will use linear regression as a case study for the gradient descent\n", "methods. Linear regression is a great test case for the gradient\n", "descent methods discussed in the lectures since it has several\n", "desirable properties such as:\n", "\n", - "1. An analytical solution (recall homework set 1).\n", + "1. An analytical solution.\n", "\n", "2. The gradient can be computed analytically.\n", "\n", @@ -2469,12 +2506,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "collapsed": false, "editable": true }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'm' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'm' is not defined" + ] + } + ], "source": [ "x = 2*np.random.rand(m,1)\n", "y = 4+3*x+np.random.randn(m,1)" @@ -2517,8 +2566,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Gradient descent example\n", - "\n", "Let $\\mathbf{y} = (y_1,\\cdots,y_n)^T$, $\\mathbf{\\boldsymbol{y}} = (\\boldsymbol{y}_1,\\cdots,\\boldsymbol{y}_n)^T$ and $\\beta = (\\beta_0, \\beta_1)^T$\n", "\n", "It is convenient to write $\\mathbf{\\boldsymbol{y}} = X\\beta$ where $X \\in \\mathbb{R}^{100 \\times 2} $ is the design matrix given by (we keep the intercept here)" @@ -2560,8 +2607,6 @@ "and we want to find $\\beta$ such that $C(\\beta)$ is minimized.\n", "\n", "\n", - "## The derivative of the cost/loss function\n", - "\n", "Computing $\\partial C(\\beta) / \\partial \\beta_0$ and $\\partial C(\\beta) / \\partial \\beta_1$ we can show that the gradient can be written as" ] }, @@ -2583,7 +2628,6 @@ "where $X$ is the design matrix defined above.\n", "\n", "\n", - "## The Hessian matrix\n", "The Hessian matrix of $C(\\beta)$ is given by" ] }, @@ -2607,10 +2651,6 @@ "\n", "\n", "\n", - "\n", - "\n", - "## Simple program\n", - "\n", "We can now write a program that minimizes $C(\\beta)$ using the gradient descent method with a constant learning rate $\\gamma$ according to" ] }, @@ -2635,9 +2675,8 @@ "$\\beta= (X^TX)^{-1} X^T \\mathbf{y}$.\n", "\n", "\n", - "## Gradient Descent Example\n", "\n", - "Here our simple example" + "Here is our simple example" ] }, { @@ -2701,7 +2740,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## And a corresponding example using **scikit-learn**" + "Alternatively, we can use **Scikit-Learn** as done here" ] }, { @@ -2735,8 +2774,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Gradient descent and Ridge\n", - "\n", "We have also discussed Ridge regression where the loss function contains a regularized term given by the $L_2$ norm of $\\beta$," ] }, @@ -2783,13 +2820,6 @@ "$$" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Program example for gradient descent with Ridge Regression" - ] - }, { "cell_type": "code", "execution_count": null, @@ -2886,8 +2916,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Computation of gradients\n", - "\n", "This in turn means that the gradient can be\n", "computed as a sum over $i$-gradients" ] @@ -2913,7 +2941,7 @@ "$k=1,\\cdots,n/M$.\n", "\n", "\n", - "## SGD example\n", + "\n", "As an example, suppose we have $10$ data points $(\\mathbf{x}_1,\\cdots, \\mathbf{x}_{10})$ \n", "and we choose to have $M=5$ minibathces,\n", "then each minibatch contains two data points. In particular we have\n", @@ -2944,8 +2972,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## The gradient step\n", - "\n", "Thus a gradient descent step now looks like" ] }, @@ -2967,10 +2993,7 @@ "probability from $[1,n/M]$. An iteration over the number of\n", "minibathces (n/M) is commonly referred to as an epoch. Thus it is\n", "typical to choose a number of epochs and for each epoch iterate over\n", - "the number of minibatches, as exemplified in the code below.\n", - "\n", - "\n", - "## Simple example code" + "the number of minibatches, as exemplified in the code below." ] }, { @@ -3011,7 +3034,6 @@ "all $n$ datapoints.\n", "\n", "\n", - "## When do we stop?\n", "\n", "A natural question is when do we stop the search for a new minimum?\n", "One possibility is to compute the full gradient after a given number\n", @@ -3025,7 +3047,6 @@ "gave the lowest value.\n", "\n", "\n", - "## Slightly different approach\n", "\n", "Another approach is to let the step length $\\gamma_j$ depend on the\n", "number of epochs in such a way that it becomes very small after a\n", @@ -3079,7 +3100,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Program for stochastic gradient" + "### Program for stochastic gradient" ] }, { @@ -3161,7 +3182,922 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Challenge**: try to write a similar code for a Logistic Regression case." + "## Momentum based GD\n", + "\n", + "The stochastic gradient descent (SGD) is almost always used with a\n", + "*momentum* or inertia term that serves as a memory of the direction we\n", + "are moving in parameter space. This is typically implemented as\n", + "follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t) \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\boldsymbol{\\theta}_{t+1}= \\boldsymbol{\\theta}_t -\\mathbf{v}_{t},\n", + "\\label{_auto2} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have introduced a momentum parameter $\\gamma$, with\n", + "$0\\le\\gamma\\le 1$, and for brevity we dropped the explicit notation to\n", + "indicate the gradient is to be taken over a different mini-batch at\n", + "each step. We call this algorithm gradient descent with momentum\n", + "(GDM). From these equations, it is clear that $\\mathbf{v}_t$ is a\n", + "running average of recently encountered gradients and\n", + "$(1-\\gamma)^{-1}$ sets the characteristic time scale for the memory\n", + "used in the averaging procedure. Consistent with this, when\n", + "$\\gamma=0$, this just reduces down to ordinary SGD as discussed\n", + "earlier. An equivalent way of writing the updates is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta \\boldsymbol{\\theta}_{t+1} = \\gamma \\Delta \\boldsymbol{\\theta}_t -\\ \\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have defined $\\Delta \\boldsymbol{\\theta}_{t}= \\boldsymbol{\\theta}_t-\\boldsymbol{\\theta}_{t-1}$.\n", + "\n", + "\n", + "\n", + "Let us try to get more intuition from these equations. It is helpful\n", + "to consider a simple physical analogy with a particle of mass $m$\n", + "moving in a viscous medium with drag coefficient $\\mu$ and potential\n", + "$E(\\mathbf{w})$. If we denote the particle's position by $\\mathbf{w}$,\n", + "then its motion is described by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m {d^2 \\mathbf{w} \\over dt^2} + \\mu {d \\mathbf{w} \\over dt }= -\\nabla_w E(\\mathbf{w}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can discretize this equation in the usual way to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m { \\mathbf{w}_{t+\\Delta t}-2 \\mathbf{w}_{t} +\\mathbf{w}_{t-\\Delta t} \\over (\\Delta t)^2}+\\mu {\\mathbf{w}_{t+\\Delta t}- \\mathbf{w}_{t} \\over \\Delta t} = -\\nabla_w E(\\mathbf{w}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rearranging this equation, we can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta \\mathbf{w}_{t +\\Delta t}= - { (\\Delta t)^2 \\over m +\\mu \\Delta t} \\nabla_w E(\\mathbf{w})+ {m \\over m +\\mu \\Delta t} \\Delta \\mathbf{w}_t.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that this equation is identical to previous one if we identify\n", + "the position of the particle, $\\mathbf{w}$, with the parameters\n", + "$\\boldsymbol{\\theta}$. This allows us to identify the momentum\n", + "parameter and learning rate with the mass of the particle and the\n", + "viscous drag as:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\gamma= {m \\over m +\\mu \\Delta t }, \\qquad \\eta = {(\\Delta t)^2 \\over m +\\mu \\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, as the name suggests, the momentum parameter is proportional to\n", + "the mass of the particle and effectively provides inertia.\n", + "Furthermore, in the large viscosity/small learning rate limit, our\n", + "memory time scales as $(1-\\gamma)^{-1} \\approx m/(\\mu \\Delta t)$.\n", + "\n", + "Why is momentum useful? SGD momentum helps the gradient descent\n", + "algorithm gain speed in directions with persistent but small gradients\n", + "even in the presence of stochasticity, while suppressing oscillations\n", + "in high-curvature directions. This becomes especially important in\n", + "situations where the landscape is shallow and flat in some directions\n", + "and narrow and steep in others. It has been argued that first-order\n", + "methods (with appropriate initial conditions) can perform comparable\n", + "to more expensive second order methods, especially in the context of\n", + "complex deep learning models.\n", + "\n", + "These beneficial properties of momentum can sometimes become even more\n", + "pronounced by using a slight modification of the classical momentum\n", + "algorithm called Nesterov Accelerated Gradient (NAG).\n", + "\n", + "In the NAG algorithm, rather than calculating the gradient at the\n", + "current parameters, $\\nabla_\\theta E(\\boldsymbol{\\theta}_t)$, one\n", + "calculates the gradient at the expected value of the parameters given\n", + "our current momentum, $\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma\n", + "\\mathbf{v}_{t-1})$. This yields the NAG update rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma \\mathbf{v}_{t-1}) \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\boldsymbol{\\theta}_{t+1}= \\boldsymbol{\\theta}_t -\\mathbf{v}_{t}.\n", + "\\label{_auto3} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the major advantages of NAG is that it allows for the use of a larger learning rate than GDM for the same choice of $\\gamma$.\n", + "\n", + "\n", + "\n", + "In stochastic gradient descent, with and without momentum, we still\n", + "have to specify a schedule for tuning the learning rates $\\eta_t$\n", + "as a function of time. As discussed in the context of Newton's\n", + "method, this presents a number of dilemmas. The learning rate is\n", + "limited by the steepest direction which can change depending on the\n", + "current position in the landscape. To circumvent this problem, ideally\n", + "our algorithm would keep track of curvature and take large steps in\n", + "shallow, flat directions and small steps in steep, narrow directions.\n", + "Second-order methods accomplish this by calculating or approximating\n", + "the Hessian and normalizing the learning rate by the\n", + "curvature. However, this is very computationally expensive for\n", + "extremely large models. Ideally, we would like to be able to\n", + "adaptively change the step size to match the landscape without paying\n", + "the steep computational price of calculating or approximating\n", + "Hessians.\n", + "\n", + "Recently, a number of methods have been introduced that accomplish\n", + "this by tracking not only the gradient, but also the second moment of\n", + "the gradient. These methods include AdaGrad, AdaDelta, RMS-Prop, and\n", + "ADAM.\n", + "\n", + "\n", + "### RMS prop\n", + "\n", + "In RMS prop, in addition to keeping a running average of the first\n", + "moment of the gradient, we also keep track of the second moment\n", + "denoted by $\\mathbf{s}_t=\\mathbb{E}[\\mathbf{g}_t^2]$. The update rule\n", + "for RMS prop is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathbf{g}_t = \\nabla_\\theta E(\\boldsymbol{\\theta}) \n", + "\\label{_auto4} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{s}_t =\\beta \\mathbf{s}_{t-1} +(1-\\beta)\\mathbf{g}_t^2 \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\mathbf{g}_t \\over \\sqrt{\\mathbf{s}_t +\\epsilon}}, \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\beta$ controls the averaging time of the second moment and is\n", + "typically taken to be about $\\beta=0.9$, $\\eta_t$ is a learning rate\n", + "typically chosen to be $10^{-3}$, and $\\epsilon\\sim 10^{-8} $ is a\n", + "small regularization constant to prevent divergences. Multiplication\n", + "and division by vectors is understood as an element-wise operation. It\n", + "is clear from this formula that the learning rate is reduced in\n", + "directions where the norm of the gradient is consistently large. This\n", + "greatly speeds up the convergence by allowing us to use a larger\n", + "learning rate for flat directions.\n", + "\n", + "### ADAM optimizer\n", + "\n", + "A related algorithm is the ADAM optimizer. In ADAM, we keep a running\n", + "average of both the first and second moment of the gradient and use\n", + "this information to adaptively change the learning rate for different\n", + "parameters. In addition to keeping a running average of the first and\n", + "second moments of the gradient\n", + "(i.e. $\\mathbf{m}_t=\\mathbb{E}[\\mathbf{g}_t]$ and\n", + "$\\mathbf{s}_t=\\mathbb{E}[\\mathbf{g}^2_t]$, respectively), ADAM\n", + "performs an additional bias correction to account for the fact that we\n", + "are estimating the first two moments of the gradient using a running\n", + "average (denoted by the hats in the update rule below). The update\n", + "rule for ADAM is given by (where multiplication and division are once\n", + "again understood to be element-wise operations below)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathbf{g}_t = \\nabla_\\theta E(\\boldsymbol{\\theta}) \n", + "\\label{_auto5} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{m}_t = \\beta_1 \\mathbf{m}_{t-1} + (1-\\beta_1) \\mathbf{g}_t \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{s}_t =\\beta_2 \\mathbf{s}_{t-1} +(1-\\beta_2)\\mathbf{g}_t^2 \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\mathbf{m}}_t={\\mathbf{m}_t \\over 1-\\beta_1^t} \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\mathbf{s}}_t ={\\mathbf{s}_t \\over1-\\beta_2^t} \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\boldsymbol{\\mathbf{m}}_t \\over \\sqrt{\\boldsymbol{\\mathbf{s}}_t} +\\epsilon}, \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\label{_auto6} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\beta_1$ and $\\beta_2$ set the memory lifetime of the first and\n", + "second moment and are typically taken to be $0.9$ and $0.99$\n", + "respectively, and $\\eta$ and $\\epsilon$ are identical to RMSprop.\n", + "\n", + "Like in RMSprop, the effective step size of a parameter depends on the\n", + "magnitude of its gradient squared. To understand this better, let us\n", + "rewrite this expression in terms of the variance\n", + "$\\boldsymbol{\\sigma}_t^2 = \\boldsymbol{\\mathbf{s}}_t -\n", + "(\\boldsymbol{\\mathbf{m}}_t)^2$. Consider a single parameter $\\theta_t$. The\n", + "update rule for this parameter is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta \\theta_{t+1}= -\\eta_t { \\boldsymbol{m}_t \\over \\sqrt{\\sigma_t^2 + m_t^2 }+\\epsilon}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Practical tips\n", + "\n", + "* **Randomize the data when making mini-batches**. It is always important to randomly shuffle the data when forming mini-batches. Otherwise, the gradient descent method can fit spurious correlations resulting from the order in which data is presented.\n", + "\n", + "* **Transform your inputs**. Learning becomes difficult when our landscape has a mixture of steep and flat directions. One simple trick for minimizing these situations is to standardize the data by subtracting the mean and normalizing the variance of input variables. Whenever possible, also decorrelate the inputs. To understand why this is helpful, consider the case of linear regression. It is easy to show that for the squared error cost function, the Hessian of the cost function is just the correlation matrix between the inputs. Thus, by standardizing the inputs, we are ensuring that the landscape looks homogeneous in all directions in parameter space. Since most deep networks can be viewed as linear transformations followed by a non-linearity at each layer, we expect this intuition to hold beyond the linear case.\n", + "\n", + "* **Monitor the out-of-sample performance.** Always monitor the performance of your model on a validation set (a small portion of the training data that is held out of the training process to serve as a proxy for the test set. If the validation error starts increasing, then the model is beginning to overfit. Terminate the learning process. This *early stopping* significantly improves performance in many settings.\n", + "\n", + "* **Adaptive optimization methods don't always have good generalization.** Recent studies have shown that adaptive methods such as ADAM, RMSPorp, and AdaGrad tend to have poor generalization compared to SGD or SGD with momentum, particularly in the high-dimensional limit (i.e. the number of parameters exceeds the number of data points). Although it is not clear at this stage why these methods perform so well in training deep neural networks, simpler procedures like properly-tuned SGD may work as well or better in these applications.\n", + "\n", + "## Automatic differentiation\n", + "\n", + "[Automatic differentiation (AD)](https://en.wikipedia.org/wiki/Automatic_differentiation), \n", + "also called algorithmic\n", + "differentiation or computational differentiation,is a set of\n", + "techniques to numerically evaluate the derivative of a function\n", + "specified by a computer program. AD exploits the fact that every\n", + "computer program, no matter how complicated, executes a sequence of\n", + "elementary arithmetic operations (addition, subtraction,\n", + "multiplication, division, etc.) and elementary functions (exp, log,\n", + "sin, cos, etc.). By applying the chain rule repeatedly to these\n", + "operations, derivatives of arbitrary order can be computed\n", + "automatically, accurately to working precision, and using at most a\n", + "small constant factor more arithmetic operations than the original\n", + "program.\n", + "\n", + "Automatic differentiation is neither:\n", + "\n", + "* Symbolic differentiation, nor\n", + "\n", + "* Numerical differentiation (the method of finite differences).\n", + "\n", + "Symbolic differentiation can lead to inefficient code and faces the\n", + "difficulty of converting a computer program into a single expression,\n", + "while numerical differentiation can introduce round-off errors in the\n", + "discretization process and cancellation\n", + "\n", + "\n", + "\n", + "Python has tools for so-called **automatic differentiation**.\n", + "Consider the following example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(x) = \\sin\\left(2\\pi x + x^2\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which has the following derivative" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using **autograd** we have" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "\n", + "# To do elementwise differentiation:\n", + "from autograd import elementwise_grad as egrad \n", + "\n", + "# To plot:\n", + "import matplotlib.pyplot as plt \n", + "\n", + "\n", + "def f(x):\n", + " return np.sin(2*np.pi*x + x**2)\n", + "\n", + "def f_grad_analytic(x):\n", + " return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)\n", + "\n", + "# Do the comparison:\n", + "x = np.linspace(0,1,1000)\n", + "\n", + "f_grad = egrad(f)\n", + "\n", + "computed = f_grad(x)\n", + "analytic = f_grad_analytic(x)\n", + "\n", + "plt.title('Derivative computed from Autograd compared with the analytical derivative')\n", + "plt.plot(x,computed,label='autograd')\n", + "plt.plot(x,analytic,label='analytic')\n", + "\n", + "plt.xlabel('x')\n", + "plt.ylabel('y')\n", + "plt.legend()\n", + "\n", + "plt.show()\n", + "\n", + "print(\"The max absolute difference is: %g\"%(np.max(np.abs(computed - analytic))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we\n", + "experiment with what kind of functions Autograd is capable\n", + "of finding the gradient of. The following Python functions are just\n", + "meant to illustrate what Autograd can do, but please feel free to\n", + "experiment with other, possibly more complicated, functions as well." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "\n", + "def f1(x):\n", + " return x**3 + 1\n", + "\n", + "f1_grad = grad(f1)\n", + "\n", + "# Remember to send in float as argument to the computed gradient from Autograd!\n", + "a = 1.0\n", + "\n", + "# See the evaluated gradient at a using autograd:\n", + "print(\"The gradient of f1 evaluated at a = %g using autograd is: %g\"%(a,f1_grad(a)))\n", + "\n", + "# Compare with the analytical derivative, that is f1'(x) = 3*x**2 \n", + "grad_analytical = 3*a**2\n", + "print(\"The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g\"%(a,grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To differentiate with respect to two (or more) arguments of a Python\n", + "function, Autograd need to know at which variable the function if\n", + "being differentiated with respect to." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f2(x1,x2):\n", + " return 3*x1**3 + x2*(x1 - 5) + 1\n", + "\n", + "# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1\n", + "f2_grad_x1 = grad(f2,0)\n", + "\n", + "# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad\n", + "f2_grad_x2 = grad(f2,1)\n", + "\n", + "x1 = 1.0\n", + "x2 = 3.0 \n", + "\n", + "print(\"Evaluating at x1 = %g, x2 = %g\"%(x1,x2))\n", + "print(\"-\"*30)\n", + "\n", + "# Compare with the analytical derivatives:\n", + "\n", + "# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:\n", + "f2_grad_x1_analytical = 9*x1**2 + x2\n", + "\n", + "# Derivative of f2 w.r.t x2 is: x1 - 5:\n", + "f2_grad_x2_analytical = x1 - 5\n", + "\n", + "# See the evaluated derivations:\n", + "print(\"The derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "\n", + "print()\n", + "\n", + "print(\"The derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f3(x): # Assumes x is an array of length 5 or higher\n", + " return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2\n", + "\n", + "f3_grad = grad(f3)\n", + "\n", + "x = np.linspace(0,4,5)\n", + "\n", + "# Print the computed gradient:\n", + "print(\"The computed gradient of f3 is: \", f3_grad(x))\n", + "\n", + "# The analytical gradient is: (2, 3, 5, 7, 22*x[4])\n", + "f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f3 is: \", f3_grad_analytical)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in this case, when sending an array as input argument, the\n", + "output from Autograd is another array. This is the true gradient of\n", + "the function, as opposed to the function in the previous example. By\n", + "using arrays to represent the variables, the output from Autograd\n", + "might be easier to work with, as the output is closer to what one\n", + "could expect form a gradient-evaluting function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f4(x):\n", + " return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)\n", + "\n", + "f4_grad = grad(f4)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f4 at x = %g is: %g\"%(x,f4_grad(x)))\n", + "\n", + "# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi\n", + "f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f4 at x = %g is: %g\"%(x,f4_grad_analytical))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f5(x):\n", + " if x >= 0:\n", + " return x**2\n", + " else:\n", + " return -3*x + 1\n", + "\n", + "f5_grad = grad(f5)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f5 at x = %g is: %g\"%(x,f5_grad(x)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2\n", + "6\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9\n", + "# The analytical derivative is: sum(i*x**(i-1)) \n", + "f6_grad_analytical = 0\n", + "for i in range(10):\n", + " f6_grad_analytical += i*x**(i-1)\n", + "\n", + "print(\"The analytical derivative of f6 at x = %g is: %g\"%(x,f6_grad_analytical))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "\n", + "def f7(n): # Assume that n is an integer\n", + " if n == 1 or n == 0:\n", + " return 1\n", + " else:\n", + " return n*f7(n-1)\n", + "\n", + "f7_grad = grad(f7)\n", + "\n", + "n = 2.0\n", + "\n", + "print(\"The computed derivative of f7 at n = %d is: %g\"%(n,f7_grad(n)))\n", + "\n", + "# The function f7 is an implementation of the factorial of n.\n", + "# By using the product rule, one can find that the derivative is:\n", + "\n", + "f7_grad_analytical = 0\n", + "for i in range(int(n)-1):\n", + " tmp = 1\n", + " for k in range(int(n)-1):\n", + " if k != i:\n", + " tmp *= (n - k)\n", + " f7_grad_analytical += tmp\n", + "\n", + "print(\"The analytical derivative of f7 at n = %d is: %g\"%(n,f7_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input.\n", + "\n", + "\n", + "Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd.\n", + "\n", + "Assigning a value to the variable being differentiated with respect to" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f8(x): # Assume x is an array\n", + " x[2] = 3\n", + " return x*2\n", + "\n", + "f8_grad = grad(f8)\n", + "\n", + "x = 8.4\n", + "\n", + "print(\"The derivative of f8 is:\",f8_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f9(a): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return a.dot(b)\n", + "\n", + "f9_grad = grad(f9)\n", + "\n", + "x = np.array([1.0,0.0])\n", + "\n", + "print(\"The derivative of f9 is:\",f9_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we are told that the 'dot' function does not belong to Autograd's\n", + "version of a Numpy array. To overcome this, an alternative syntax\n", + "which also computed the dot product can be used:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f9_alternative(x): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2\n", + "\n", + "f9_alternative_grad = grad(f9_alternative)\n", + "\n", + "x = np.array([3.0,0.0])\n", + "\n", + "print(\"The gradient of f9 is:\",f9_alternative_grad(x))\n", + "\n", + "# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively\n", + "# w.r.t x is (b_1, b_2)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The documentation recommends to avoid inplace operations such as" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "a += b\n", + "a -= b\n", + "a*= b\n", + "a /=b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More examples will be added, in particular how to compare autograd with own codes for the gradients." ] } ], diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4.py b/doc/LectureNotes/_build/jupyter_execute/chapter4.py index 8e216da7c..8b1ee3013 100644 --- a/doc/LectureNotes/_build/jupyter_execute/chapter4.py +++ b/doc/LectureNotes/_build/jupyter_execute/chapter4.py @@ -1,8 +1,6 @@ # Logistic Regression -[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK3155/h20/forelesningsvideoer/LectureSeptember18.mp4?vrtx=view-as-webpage) - ## Logistic Regression @@ -575,7 +573,7 @@ plt.show() skplt.metrics.plot_cumulative_gain(y_test, y_probas) plt.show() -## Optimization, the central part of any Machine Learning algortithm +# Optimization, the central part of any Machine Learning algortithm Almost every problem in machine learning and data science starts with a dataset $X$, a model $g(\beta)$, which is a function of the @@ -588,7 +586,6 @@ some approximative/numerical method to compute the minimum. -## Revisiting our Logistic Regression case In our discussion on Logistic Regression we studied the case of @@ -607,7 +604,6 @@ $$ where $\boldsymbol{\beta}$ are the weights we wish to extract from data, in our case $\beta_0$ and $\beta_1$. -## The equations to solve Our compact equations used a definition of a vector $\boldsymbol{y}$ with $n$ elements $y_i$, an $n\times p$ matrix $\boldsymbol{X}$ which contains the @@ -629,7 +625,6 @@ $$ This defines what is called the Hessian matrix. -## Solving using Newton-Raphson's method If we can set up these equations, Newton-Raphson's iterative method is normally the method of choice. It requires however that we can compute in an efficient way the matrices that define the first and second derivatives. @@ -650,9 +645,6 @@ The right-hand side is computed with the old values of $\beta$. If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. - -## Brief reminder on Newton-Raphson's method - Let us quickly remind ourselves how we derive the above method. Perhaps the most celebrated of all one-dimensional root-finding @@ -664,7 +656,6 @@ numerically and/or your function is not of the smooth type, we normally discourage the use of this method. -## The equations The Newton-Raphson formula consists geometrically of extending the tangent line at a current point until it crosses zero, then setting @@ -699,8 +690,6 @@ $$ x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}. $$ -## Simple geometric interpretation - The above is Newton-Raphson's method. It has a simple geometric interpretation, namely $x_{n+1}$ is the point where the tangent from $(x_n,f(x_n))$ crosses the $x$-axis. Close to the solution, @@ -715,7 +704,6 @@ vanishes, then Newton-Raphson may fail totally -## Extending to more than one variable Newton's method can be generalized to systems of several non-linear equations and variables. Consider the case with two equations @@ -792,8 +780,6 @@ F(\mathbf{x}_k)$. This means that for a sufficiently small $\gamma_k$ we are always moving towards smaller function values, i.e a minimum. -## More on Steepest descent - The previous observation is the basis of the method of steepest descent, which is also referred to as just gradient descent (GD). One starts with an initial guess $\mathbf{x}_0$ for a minimum of $F$ and @@ -807,8 +793,6 @@ The parameter $\gamma_k$ is often referred to as the step length or the learning rate within the context of Machine Learning. -## The ideal - Ideally the sequence $\{\mathbf{x}_k \}_{k=0}$ converges to a global minimum of the function $F$. In general we do not know if we are in a global or local minimum. In the special case when $F$ is a convex @@ -829,7 +813,6 @@ Note that the gradient is a function of $\mathbf{x} = -## The sensitiveness of the gradient descent The gradient descent method is sensitive to the choice of learning rate $\gamma_k$. This is due @@ -860,13 +843,10 @@ $\mathbb{R}$. Examples of convex sets of $\mathbb{R}^2$ are the regular polygons (triangles, rectangles, pentagons, etc...). -## Convex function **Convex function**: Let $X \subset \mathbb{R}^n$ be a convex set. Assume that the function $f: X \rightarrow \mathbb{R}$ is continuous, then $f$ is said to be convex if $$f(tx_1 + (1-t)x_2) \leq tf(x_1) + (1-t)f(x_2) $$ for all $x_1, x_2 \in X$ and for all $t \in [0,1]$. If $\leq$ is replaced with a strict inequaltiy in the definition, we demand $x_1 \neq x_2$ and $t\in(0,1)$ then $f$ is said to be strictly convex. For a single variable function, convexity means that if you draw a straight line connecting $f(x_1)$ and $f(x_2)$, the value of the function on the interval $[x_1,x_2]$ is always below the line as illustrated below. -## Conditions on convex functions - In the following we state first and second-order conditions which ensures convexity of a function $f$. We write $D_f$ to denote the domain of $f$, i.e the subset of $R^n$ where $f$ is defined. For more @@ -899,7 +879,6 @@ everywhere. This condition is particularly useful since it gives us an procedure for determining if the function under consideration is convex, apart from using the definition. -## More on convex functions The next result is of great importance to us and the reason why we are going on about convex functions. In machine learning we frequently @@ -922,7 +901,7 @@ $x^*$ that satisfies $\nabla f(x^*) = 0$ is a global minimum. This result means that if we know that the cost/loss function is convex and we are able to find a minimum, we are guaranteed that it is a global minimum. -## Some simple problems +### Some simple problems 1. Show that $f(x)=x^2$ is convex for $x \in \mathbb{R}$ using the definition of convexity. Hint: If you re-write the definition, $f$ is convex if the following holds for all $x,y \in D_f$ and any $\lambda \in [0,1]$ $\lambda f(x)+(1-\lambda)f(y)-f(\lambda x + (1-\lambda) y ) \geq 0$. @@ -947,13 +926,6 @@ This result means that if we know that the cost/loss function is convex and we a Using the definition of convexity, try to show that a function satisfying the properties above is convex (the third condition is not needed to show this). - -## Friday September 25 - -[Video of Lecture](https://www.uio.no/studier/emner/matnat/fys/FYS-STK4155/h20/forelesningsvideoer/LectureSeptember25.mp4?vrtx=view-as-webpage) and [link to handwritten notes](https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/NotesSeptember25.pdf). - - - ## Standard steepest descent @@ -982,7 +954,6 @@ where $\boldsymbol{r}$ is the so-called residual or error in the iterative proce When we have found the exact solution, $\boldsymbol{r}=0$. -## Gradient method The residual is zero when we reach the minimum of the quadratic equation @@ -994,9 +965,6 @@ with the constraint that the matrix $\boldsymbol{A}$ is positive definite and symmetric. This defines also the Hessian and we want it to be positive definite. - -## Steepest descent method - We denote the initial guess for $\boldsymbol{x}$ as $\boldsymbol{x}_0$. We can assume without loss of generality that @@ -1013,8 +981,6 @@ $$ instead. - -## Steepest descent method One can show that the solution $\boldsymbol{x}$ is also the unique minimizer of the quadratic form $$ @@ -1033,9 +999,6 @@ and $\boldsymbol{x}_0=0$ it is equal $-\boldsymbol{b}$. - - -## Final expressions We can compute the residual iteratively as $$ @@ -1066,8 +1029,6 @@ $$ \boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\alpha_k\boldsymbol{r}_{k}, $$ -## Steepest descent example - import numpy as np import numpy.linalg as la @@ -1137,23 +1098,14 @@ $$ Two vectors are conjugate if they are orthogonal with respect to this inner product. Being conjugate is a symmetric relation: if $\boldsymbol{s}$ is conjugate to $\boldsymbol{t}$, then $\boldsymbol{t}$ is conjugate to $\boldsymbol{s}$. - - - -## Conjugate gradient method An example is given by the eigenvectors of the matrix $$ \boldsymbol{v}_i^T\boldsymbol{A}\boldsymbol{v}_j= \lambda\boldsymbol{v}_i^T\boldsymbol{v}_j, $$ -which is zero unless $i=j$. +which is zero unless $i=j$. - - - - -## Conjugate gradient method Assume now that we have a symmetric positive-definite matrix $\boldsymbol{A}$ of size $n\times n$. At each iteration $i+1$ we obtain the conjugate direction of a vector @@ -1169,7 +1121,6 @@ $$ \boldsymbol{x} = \sum^{n}_{i=1} \alpha_i \boldsymbol{p}_i. $$ -## Conjugate gradient method The coefficients are given by $$ @@ -1188,8 +1139,6 @@ $$ \alpha_k = \frac{\boldsymbol{p}_k^T \boldsymbol{b}}{\boldsymbol{p}_k^T \boldsymbol{A} \boldsymbol{p}_k} $$ -## Conjugate gradient method and iterations - If we choose the conjugate vectors $\boldsymbol{p}_k$ carefully, then we may not need all of them to obtain a good approximation to the solution $\boldsymbol{x}$. @@ -1212,11 +1161,6 @@ $$ instead. - - - - -## Conjugate gradient method One can show that the solution $\boldsymbol{x}$ is also the unique minimizer of the quadratic form $$ @@ -1236,11 +1180,6 @@ $\boldsymbol{x}_0=0$ it is equal $-\boldsymbol{b}$. The other vectors in the basis will be conjugate to the gradient, hence the name conjugate gradient method. - - - - -## Conjugate gradient method Let $\boldsymbol{r}_k$ be the residual at the $k$-th step: $$ @@ -1259,7 +1198,6 @@ $$ \boldsymbol{p}_{k+1}=\boldsymbol{r}_k-\frac{\boldsymbol{p}_k^T \boldsymbol{A}\boldsymbol{r}_k}{\boldsymbol{p}_k^T\boldsymbol{A}\boldsymbol{p}_k} \boldsymbol{p}_k. $$ -## Conjugate gradient method We can also compute the residual iteratively as $$ @@ -1284,14 +1222,14 @@ $$ \boldsymbol{r}_{k+1}=\boldsymbol{r}_k-\boldsymbol{A}\boldsymbol{p}_{k}, $$ -## Revisiting our first homework +## Revisiting our Linear Regression Solvers We will use linear regression as a case study for the gradient descent methods. Linear regression is a great test case for the gradient descent methods discussed in the lectures since it has several desirable properties such as: -1. An analytical solution (recall homework set 1). +1. An analytical solution. 2. The gradient can be computed analytically. @@ -1315,8 +1253,6 @@ $$ \boldsymbol{y}_i = \beta_0 + \beta_1 x_i. $$ -## Gradient descent example - Let $\mathbf{y} = (y_1,\cdots,y_n)^T$, $\mathbf{\boldsymbol{y}} = (\boldsymbol{y}_1,\cdots,\boldsymbol{y}_n)^T$ and $\beta = (\beta_0, \beta_1)^T$ It is convenient to write $\mathbf{\boldsymbol{y}} = X\beta$ where $X \in \mathbb{R}^{100 \times 2} $ is the design matrix given by (we keep the intercept here) @@ -1338,8 +1274,6 @@ $$ and we want to find $\beta$ such that $C(\beta)$ is minimized. -## The derivative of the cost/loss function - Computing $\partial C(\beta) / \partial \beta_0$ and $\partial C(\beta) / \partial \beta_1$ we can show that the gradient can be written as $$ @@ -1351,7 +1285,6 @@ $$ where $X$ is the design matrix defined above. -## The Hessian matrix The Hessian matrix of $C(\beta)$ is given by $$ @@ -1365,10 +1298,6 @@ This result implies that $C(\beta)$ is a convex function since the matrix $X^T X - - -## Simple program - We can now write a program that minimizes $C(\beta)$ using the gradient descent method with a constant learning rate $\gamma$ according to $$ @@ -1383,9 +1312,8 @@ And finally we can compare our solution for $\beta$ with the analytic result giv $\beta= (X^TX)^{-1} X^T \mathbf{y}$. -## Gradient Descent Example -Here our simple example +Here is our simple example # Importing various packages @@ -1434,7 +1362,7 @@ plt.ylabel(r'$y$') plt.title(r'Gradient descent example') plt.show() -## And a corresponding example using **scikit-learn** +Alternatively, we can use **Scikit-Learn** as done here # Importing various packages from random import random, seed @@ -1453,8 +1381,6 @@ sgdreg = SGDRegressor(max_iter = 50, penalty=None, eta0=0.1) sgdreg.fit(x,y.ravel()) print(sgdreg.intercept_, sgdreg.coef_) -## Gradient descent and Ridge - We have also discussed Ridge regression where the loss function contains a regularized term given by the $L_2$ norm of $\beta$, $$ @@ -1475,8 +1401,6 @@ $$ \beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. $$ -## Program example for gradient descent with Ridge Regression - from random import random, seed import numpy as np import matplotlib.pyplot as plt @@ -1549,8 +1473,6 @@ C(\mathbf{\beta}) = \sum_{i=1}^n c_i(\mathbf{x}_i, \mathbf{\beta}). $$ -## Computation of gradients - This in turn means that the gradient can be computed as a sum over $i$-gradients @@ -1566,7 +1488,7 @@ minibatches. We denote these minibatches by $B_k$ where $k=1,\cdots,n/M$. -## SGD example + As an example, suppose we have $10$ data points $(\mathbf{x}_1,\cdots, \mathbf{x}_{10})$ and we choose to have $M=5$ minibathces, then each minibatch contains two data points. In particular we have @@ -1587,8 +1509,6 @@ C(\mathbf{\beta}) = \sum_{i=1}^n \nabla_\beta c_i(\mathbf{x}_i, c_i(\mathbf{x}_i, \mathbf{\beta}). $$ -## The gradient step - Thus a gradient descent step now looks like $$ @@ -1602,9 +1522,6 @@ minibathces (n/M) is commonly referred to as an epoch. Thus it is typical to choose a number of epochs and for each epoch iterate over the number of minibatches, as exemplified in the code below. - -## Simple example code - import numpy as np n = 100 #100 datapoints @@ -1629,7 +1546,6 @@ cheaper since we sum over the datapoints in the $k-th$ minibatch and not all $n$ datapoints. -## When do we stop? A natural question is when do we stop the search for a new minimum? One possibility is to compute the full gradient after a given number @@ -1643,7 +1559,6 @@ compare the values of the cost function and keep the $\beta$ that gave the lowest value. -## Slightly different approach Another approach is to let the step length $\gamma_j$ depend on the number of epochs in such a way that it becomes very small after a @@ -1682,7 +1597,7 @@ for epoch in range(1,n_epochs+1): print("gamma_j after %d epochs: %g" % (n_epochs,gamma_j)) -## Program for stochastic gradient +### Program for stochastic gradient # Importing various packages from math import exp, sqrt @@ -1749,4 +1664,579 @@ plt.ylabel(r'$y$') plt.title(r'Random numbers ') plt.show() -**Challenge**: try to write a similar code for a Logistic Regression case. \ No newline at end of file +## Momentum based GD + +The stochastic gradient descent (SGD) is almost always used with a +*momentum* or inertia term that serves as a memory of the direction we +are moving in parameter space. This is typically implemented as +follows + +$$ +\mathbf{v}_{t}=\gamma \mathbf{v}_{t-1}+\eta_{t}\nabla_\theta E(\boldsymbol{\theta}_t) \nonumber +$$ + + +
    + +$$ +\begin{equation} +\boldsymbol{\theta}_{t+1}= \boldsymbol{\theta}_t -\mathbf{v}_{t}, +\label{_auto2} \tag{3} +\end{equation} +$$ + +where we have introduced a momentum parameter $\gamma$, with +$0\le\gamma\le 1$, and for brevity we dropped the explicit notation to +indicate the gradient is to be taken over a different mini-batch at +each step. We call this algorithm gradient descent with momentum +(GDM). From these equations, it is clear that $\mathbf{v}_t$ is a +running average of recently encountered gradients and +$(1-\gamma)^{-1}$ sets the characteristic time scale for the memory +used in the averaging procedure. Consistent with this, when +$\gamma=0$, this just reduces down to ordinary SGD as discussed +earlier. An equivalent way of writing the updates is + +$$ +\Delta \boldsymbol{\theta}_{t+1} = \gamma \Delta \boldsymbol{\theta}_t -\ \eta_{t}\nabla_\theta E(\boldsymbol{\theta}_t), +$$ + +where we have defined $\Delta \boldsymbol{\theta}_{t}= \boldsymbol{\theta}_t-\boldsymbol{\theta}_{t-1}$. + + + +Let us try to get more intuition from these equations. It is helpful +to consider a simple physical analogy with a particle of mass $m$ +moving in a viscous medium with drag coefficient $\mu$ and potential +$E(\mathbf{w})$. If we denote the particle's position by $\mathbf{w}$, +then its motion is described by + +$$ +m {d^2 \mathbf{w} \over dt^2} + \mu {d \mathbf{w} \over dt }= -\nabla_w E(\mathbf{w}). +$$ + +We can discretize this equation in the usual way to get + +$$ +m { \mathbf{w}_{t+\Delta t}-2 \mathbf{w}_{t} +\mathbf{w}_{t-\Delta t} \over (\Delta t)^2}+\mu {\mathbf{w}_{t+\Delta t}- \mathbf{w}_{t} \over \Delta t} = -\nabla_w E(\mathbf{w}). +$$ + +Rearranging this equation, we can rewrite this as + +$$ +\Delta \mathbf{w}_{t +\Delta t}= - { (\Delta t)^2 \over m +\mu \Delta t} \nabla_w E(\mathbf{w})+ {m \over m +\mu \Delta t} \Delta \mathbf{w}_t. +$$ + +Notice that this equation is identical to previous one if we identify +the position of the particle, $\mathbf{w}$, with the parameters +$\boldsymbol{\theta}$. This allows us to identify the momentum +parameter and learning rate with the mass of the particle and the +viscous drag as: + +$$ +\gamma= {m \over m +\mu \Delta t }, \qquad \eta = {(\Delta t)^2 \over m +\mu \Delta t}. +$$ + +Thus, as the name suggests, the momentum parameter is proportional to +the mass of the particle and effectively provides inertia. +Furthermore, in the large viscosity/small learning rate limit, our +memory time scales as $(1-\gamma)^{-1} \approx m/(\mu \Delta t)$. + +Why is momentum useful? SGD momentum helps the gradient descent +algorithm gain speed in directions with persistent but small gradients +even in the presence of stochasticity, while suppressing oscillations +in high-curvature directions. This becomes especially important in +situations where the landscape is shallow and flat in some directions +and narrow and steep in others. It has been argued that first-order +methods (with appropriate initial conditions) can perform comparable +to more expensive second order methods, especially in the context of +complex deep learning models. + +These beneficial properties of momentum can sometimes become even more +pronounced by using a slight modification of the classical momentum +algorithm called Nesterov Accelerated Gradient (NAG). + +In the NAG algorithm, rather than calculating the gradient at the +current parameters, $\nabla_\theta E(\boldsymbol{\theta}_t)$, one +calculates the gradient at the expected value of the parameters given +our current momentum, $\nabla_\theta E(\boldsymbol{\theta}_t +\gamma +\mathbf{v}_{t-1})$. This yields the NAG update rule + +$$ +\mathbf{v}_{t}=\gamma \mathbf{v}_{t-1}+\eta_{t}\nabla_\theta E(\boldsymbol{\theta}_t +\gamma \mathbf{v}_{t-1}) \nonumber +$$ + + +
    + +$$ +\begin{equation} +\boldsymbol{\theta}_{t+1}= \boldsymbol{\theta}_t -\mathbf{v}_{t}. +\label{_auto3} \tag{4} +\end{equation} +$$ + +One of the major advantages of NAG is that it allows for the use of a larger learning rate than GDM for the same choice of $\gamma$. + + + +In stochastic gradient descent, with and without momentum, we still +have to specify a schedule for tuning the learning rates $\eta_t$ +as a function of time. As discussed in the context of Newton's +method, this presents a number of dilemmas. The learning rate is +limited by the steepest direction which can change depending on the +current position in the landscape. To circumvent this problem, ideally +our algorithm would keep track of curvature and take large steps in +shallow, flat directions and small steps in steep, narrow directions. +Second-order methods accomplish this by calculating or approximating +the Hessian and normalizing the learning rate by the +curvature. However, this is very computationally expensive for +extremely large models. Ideally, we would like to be able to +adaptively change the step size to match the landscape without paying +the steep computational price of calculating or approximating +Hessians. + +Recently, a number of methods have been introduced that accomplish +this by tracking not only the gradient, but also the second moment of +the gradient. These methods include AdaGrad, AdaDelta, RMS-Prop, and +ADAM. + + +### RMS prop + +In RMS prop, in addition to keeping a running average of the first +moment of the gradient, we also keep track of the second moment +denoted by $\mathbf{s}_t=\mathbb{E}[\mathbf{g}_t^2]$. The update rule +for RMS prop is given by + + +
    + +$$ +\begin{equation} +\mathbf{g}_t = \nabla_\theta E(\boldsymbol{\theta}) +\label{_auto4} \tag{5} +\end{equation} +$$ + +$$ +\mathbf{s}_t =\beta \mathbf{s}_{t-1} +(1-\beta)\mathbf{g}_t^2 \nonumber +$$ + +$$ +\boldsymbol{\theta}_{t+1}=\boldsymbol{\theta}_t - \eta_t { \mathbf{g}_t \over \sqrt{\mathbf{s}_t +\epsilon}}, \nonumber +$$ + +where $\beta$ controls the averaging time of the second moment and is +typically taken to be about $\beta=0.9$, $\eta_t$ is a learning rate +typically chosen to be $10^{-3}$, and $\epsilon\sim 10^{-8} $ is a +small regularization constant to prevent divergences. Multiplication +and division by vectors is understood as an element-wise operation. It +is clear from this formula that the learning rate is reduced in +directions where the norm of the gradient is consistently large. This +greatly speeds up the convergence by allowing us to use a larger +learning rate for flat directions. + +### ADAM optimizer + +A related algorithm is the ADAM optimizer. In ADAM, we keep a running +average of both the first and second moment of the gradient and use +this information to adaptively change the learning rate for different +parameters. In addition to keeping a running average of the first and +second moments of the gradient +(i.e. $\mathbf{m}_t=\mathbb{E}[\mathbf{g}_t]$ and +$\mathbf{s}_t=\mathbb{E}[\mathbf{g}^2_t]$, respectively), ADAM +performs an additional bias correction to account for the fact that we +are estimating the first two moments of the gradient using a running +average (denoted by the hats in the update rule below). The update +rule for ADAM is given by (where multiplication and division are once +again understood to be element-wise operations below) + + +
    + +$$ +\begin{equation} +\mathbf{g}_t = \nabla_\theta E(\boldsymbol{\theta}) +\label{_auto5} \tag{6} +\end{equation} +$$ + +$$ +\mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1-\beta_1) \mathbf{g}_t \nonumber +$$ + +$$ +\mathbf{s}_t =\beta_2 \mathbf{s}_{t-1} +(1-\beta_2)\mathbf{g}_t^2 \nonumber +$$ + +$$ +\boldsymbol{\mathbf{m}}_t={\mathbf{m}_t \over 1-\beta_1^t} \nonumber +$$ + +$$ +\boldsymbol{\mathbf{s}}_t ={\mathbf{s}_t \over1-\beta_2^t} \nonumber +$$ + +$$ +\boldsymbol{\theta}_{t+1}=\boldsymbol{\theta}_t - \eta_t { \boldsymbol{\mathbf{m}}_t \over \sqrt{\boldsymbol{\mathbf{s}}_t} +\epsilon}, \nonumber +$$ + + +
    + +$$ +\begin{equation} +\label{_auto6} \tag{7} +\end{equation} +$$ + +where $\beta_1$ and $\beta_2$ set the memory lifetime of the first and +second moment and are typically taken to be $0.9$ and $0.99$ +respectively, and $\eta$ and $\epsilon$ are identical to RMSprop. + +Like in RMSprop, the effective step size of a parameter depends on the +magnitude of its gradient squared. To understand this better, let us +rewrite this expression in terms of the variance +$\boldsymbol{\sigma}_t^2 = \boldsymbol{\mathbf{s}}_t - +(\boldsymbol{\mathbf{m}}_t)^2$. Consider a single parameter $\theta_t$. The +update rule for this parameter is given by + +$$ +\Delta \theta_{t+1}= -\eta_t { \boldsymbol{m}_t \over \sqrt{\sigma_t^2 + m_t^2 }+\epsilon}. +$$ + +## Practical tips + +* **Randomize the data when making mini-batches**. It is always important to randomly shuffle the data when forming mini-batches. Otherwise, the gradient descent method can fit spurious correlations resulting from the order in which data is presented. + +* **Transform your inputs**. Learning becomes difficult when our landscape has a mixture of steep and flat directions. One simple trick for minimizing these situations is to standardize the data by subtracting the mean and normalizing the variance of input variables. Whenever possible, also decorrelate the inputs. To understand why this is helpful, consider the case of linear regression. It is easy to show that for the squared error cost function, the Hessian of the cost function is just the correlation matrix between the inputs. Thus, by standardizing the inputs, we are ensuring that the landscape looks homogeneous in all directions in parameter space. Since most deep networks can be viewed as linear transformations followed by a non-linearity at each layer, we expect this intuition to hold beyond the linear case. + +* **Monitor the out-of-sample performance.** Always monitor the performance of your model on a validation set (a small portion of the training data that is held out of the training process to serve as a proxy for the test set. If the validation error starts increasing, then the model is beginning to overfit. Terminate the learning process. This *early stopping* significantly improves performance in many settings. + +* **Adaptive optimization methods don't always have good generalization.** Recent studies have shown that adaptive methods such as ADAM, RMSPorp, and AdaGrad tend to have poor generalization compared to SGD or SGD with momentum, particularly in the high-dimensional limit (i.e. the number of parameters exceeds the number of data points). Although it is not clear at this stage why these methods perform so well in training deep neural networks, simpler procedures like properly-tuned SGD may work as well or better in these applications. + +## Automatic differentiation + +[Automatic differentiation (AD)](https://en.wikipedia.org/wiki/Automatic_differentiation), +also called algorithmic +differentiation or computational differentiation,is a set of +techniques to numerically evaluate the derivative of a function +specified by a computer program. AD exploits the fact that every +computer program, no matter how complicated, executes a sequence of +elementary arithmetic operations (addition, subtraction, +multiplication, division, etc.) and elementary functions (exp, log, +sin, cos, etc.). By applying the chain rule repeatedly to these +operations, derivatives of arbitrary order can be computed +automatically, accurately to working precision, and using at most a +small constant factor more arithmetic operations than the original +program. + +Automatic differentiation is neither: + +* Symbolic differentiation, nor + +* Numerical differentiation (the method of finite differences). + +Symbolic differentiation can lead to inefficient code and faces the +difficulty of converting a computer program into a single expression, +while numerical differentiation can introduce round-off errors in the +discretization process and cancellation + + + +Python has tools for so-called **automatic differentiation**. +Consider the following example + +$$ +f(x) = \sin\left(2\pi x + x^2\right) +$$ + +which has the following derivative + +$$ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +$$ + +Using **autograd** we have + +import autograd.numpy as np + +# To do elementwise differentiation: +from autograd import elementwise_grad as egrad + +# To plot: +import matplotlib.pyplot as plt + + +def f(x): + return np.sin(2*np.pi*x + x**2) + +def f_grad_analytic(x): + return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x) + +# Do the comparison: +x = np.linspace(0,1,1000) + +f_grad = egrad(f) + +computed = f_grad(x) +analytic = f_grad_analytic(x) + +plt.title('Derivative computed from Autograd compared with the analytical derivative') +plt.plot(x,computed,label='autograd') +plt.plot(x,analytic,label='analytic') + +plt.xlabel('x') +plt.ylabel('y') +plt.legend() + +plt.show() + +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic)))) + +Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well. + +import autograd.numpy as np +from autograd import grad + +def f1(x): + return x**3 + 1 + +f1_grad = grad(f1) + +# Remember to send in float as argument to the computed gradient from Autograd! +a = 1.0 + +# See the evaluated gradient at a using autograd: +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a))) + +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 +grad_analytical = 3*a**2 +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical)) + +To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to. + +import autograd.numpy as np +from autograd import grad +def f2(x1,x2): + return 3*x1**3 + x2*(x1 - 5) + 1 + +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1 +f2_grad_x1 = grad(f2,0) + +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad +f2_grad_x2 = grad(f2,1) + +x1 = 1.0 +x2 = 3.0 + +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2)) +print("-"*30) + +# Compare with the analytical derivatives: + +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2: +f2_grad_x1_analytical = 9*x1**2 + x2 + +# Derivative of f2 w.r.t x2 is: x1 - 5: +f2_grad_x2_analytical = x1 - 5 + +# See the evaluated derivations: +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) )) +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) )) + +print() + +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) )) +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) )) + +Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. + +import autograd.numpy as np +from autograd import grad +def f3(x): # Assumes x is an array of length 5 or higher + return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2 + +f3_grad = grad(f3) + +x = np.linspace(0,4,5) + +# Print the computed gradient: +print("The computed gradient of f3 is: ", f3_grad(x)) + +# The analytical gradient is: (2, 3, 5, 7, 22*x[4]) +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]]) + +# Print the analytical gradient: +print("The analytical gradient of f3 is: ", f3_grad_analytical) + +Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function. + +import autograd.numpy as np +from autograd import grad +def f4(x): + return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x) + +f4_grad = grad(f4) + +x = 2.7 + +# Print the computed derivative: +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x))) + +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi + +# Print the analytical gradient: +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical)) + +import autograd.numpy as np +from autograd import grad +def f5(x): + if x >= 0: + return x**2 + else: + return -3*x + 1 + +f5_grad = grad(f5) + +x = 2.7 + +# Print the computed derivative: +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x))) + +2 +6 + +< +< +< +! +! +C +O +D +E +_ +B +L +O +C +K + + +p +y +c +o +d + +import autograd.numpy as np +from autograd import grad +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9 +# The analytical derivative is: sum(i*x**(i-1)) +f6_grad_analytical = 0 +for i in range(10): + f6_grad_analytical += i*x**(i-1) + +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical)) + +import autograd.numpy as np +from autograd import grad + +def f7(n): # Assume that n is an integer + if n == 1 or n == 0: + return 1 + else: + return n*f7(n-1) + +f7_grad = grad(f7) + +n = 2.0 + +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n))) + +# The function f7 is an implementation of the factorial of n. +# By using the product rule, one can find that the derivative is: + +f7_grad_analytical = 0 +for i in range(int(n)-1): + tmp = 1 + for k in range(int(n)-1): + if k != i: + tmp *= (n - k) + f7_grad_analytical += tmp + +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical)) + +Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. + + +Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd. + +Assigning a value to the variable being differentiated with respect to + +import autograd.numpy as np +from autograd import grad +def f8(x): # Assume x is an array + x[2] = 3 + return x*2 + +f8_grad = grad(f8) + +x = 8.4 + +print("The derivative of f8 is:",f8_grad(x)) + +Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. + +import autograd.numpy as np +from autograd import grad +def f9(a): # Assume a is an array with 2 elements + b = np.array([1.0,2.0]) + return a.dot(b) + +f9_grad = grad(f9) + +x = np.array([1.0,0.0]) + +print("The derivative of f9 is:",f9_grad(x)) + +Here we are told that the 'dot' function does not belong to Autograd's +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used: + +import autograd.numpy as np +from autograd import grad +def f9_alternative(x): # Assume a is an array with 2 elements + b = np.array([1.0,2.0]) + return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2 + +f9_alternative_grad = grad(f9_alternative) + +x = np.array([3.0,0.0]) + +print("The gradient of f9 is:",f9_alternative_grad(x)) + +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively +# w.r.t x is (b_1, b_2). + +The documentation recommends to avoid inplace operations such as + +a += b +a -= b +a*= b +a /=b + +More examples will be added, in particular how to compare autograd with own codes for the gradients. \ No newline at end of file diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4_114_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter4_114_1.png new file mode 100644 index 000000000..6c642a6a1 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter4_114_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4_116_0.png b/doc/LectureNotes/_build/jupyter_execute/chapter4_116_0.png new file mode 100644 index 000000000..dfd44cb86 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter4_116_0.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4_122_1.png b/doc/LectureNotes/_build/jupyter_execute/chapter4_122_1.png new file mode 100644 index 000000000..59590fe49 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter4_122_1.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4_57_2.png b/doc/LectureNotes/_build/jupyter_execute/chapter4_57_2.png new file mode 100644 index 000000000..fa199fba3 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter4_57_2.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4_57_3.png b/doc/LectureNotes/_build/jupyter_execute/chapter4_57_3.png new file mode 100644 index 000000000..88bffd58a Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter4_57_3.png differ diff --git a/doc/LectureNotes/_build/jupyter_execute/chapter4_57_4.png b/doc/LectureNotes/_build/jupyter_execute/chapter4_57_4.png new file mode 100644 index 000000000..e242a4058 Binary files /dev/null and b/doc/LectureNotes/_build/jupyter_execute/chapter4_57_4.png differ