From e6da2639ffdba28d938975eb937341de2d84217f Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Fri, 10 Sep 2021 09:20:03 +0200 Subject: [PATCH] wrapping up project 1 --- .../2021/Project1/html/._Project1-bs000.html | 633 ++++++++++++++++++ .../2021/Project1/html/Project1-bs.html | 633 ++++++++++++++++++ doc/Projects/2021/Project1/html/Project1.html | 573 ++++++++++++++++ .../2021/Project1/ipynb/Project1.ipynb | 533 +++++++++++++++ .../Project1/ipynb/ipynb-Project1-src.tar.gz | Bin 0 -> 193 bytes doc/Projects/2021/Project1/pdf/Project1.p.tex | 583 ++++++++++++++++ doc/Projects/2021/Project1/pdf/Project1.pdf | Bin 0 -> 278612 bytes doc/Projects/2021/Project1/pdf/Project1.tex | 551 +++++++++++++++ .../2021/Project1/._Project1-bs000.html | 633 ++++++++++++++++++ .../Projects/2021/Project1/Project1-bs.html | 633 ++++++++++++++++++ .../Projects/2021/Project1/Project1.do.txt | 413 ++++++++++++ doc/src/Projects/2021/Project1/Project1.html | 573 ++++++++++++++++ doc/src/Projects/2021/Project1/Project1.ipynb | 533 +++++++++++++++ doc/src/Projects/2021/Project1/Project1.p.tex | 583 ++++++++++++++++ doc/src/Projects/2021/Project1/Project1.pdf | Bin 0 -> 278612 bytes doc/src/Projects/2021/Project1/Project1.tex | 551 +++++++++++++++ doc/src/Projects/2021/Project1/README.txt | 2 + doc/src/Projects/2021/Project1/clean.sh | 3 + .../2021/Project1/ipynb-Project1-src.tar.gz | Bin 0 -> 193 bytes doc/src/Projects/2021/Project1/make.sh | 87 +++ 20 files changed, 7517 insertions(+) create mode 100644 doc/Projects/2021/Project1/html/._Project1-bs000.html create mode 100644 doc/Projects/2021/Project1/html/Project1-bs.html create mode 100644 doc/Projects/2021/Project1/html/Project1.html create mode 100644 doc/Projects/2021/Project1/ipynb/Project1.ipynb create mode 100644 doc/Projects/2021/Project1/ipynb/ipynb-Project1-src.tar.gz create mode 100644 doc/Projects/2021/Project1/pdf/Project1.p.tex create mode 100644 doc/Projects/2021/Project1/pdf/Project1.pdf create mode 100644 doc/Projects/2021/Project1/pdf/Project1.tex create mode 100644 doc/src/Projects/2021/Project1/._Project1-bs000.html create mode 100644 doc/src/Projects/2021/Project1/Project1-bs.html create mode 100644 doc/src/Projects/2021/Project1/Project1.do.txt create mode 100644 doc/src/Projects/2021/Project1/Project1.html create mode 100644 doc/src/Projects/2021/Project1/Project1.ipynb create mode 100644 doc/src/Projects/2021/Project1/Project1.p.tex create mode 100644 doc/src/Projects/2021/Project1/Project1.pdf create mode 100644 doc/src/Projects/2021/Project1/Project1.tex create mode 100644 doc/src/Projects/2021/Project1/README.txt create mode 100755 doc/src/Projects/2021/Project1/clean.sh create mode 100644 doc/src/Projects/2021/Project1/ipynb-Project1-src.tar.gz create mode 100755 doc/src/Projects/2021/Project1/make.sh diff --git a/doc/Projects/2021/Project1/html/._Project1-bs000.html b/doc/Projects/2021/Project1/html/._Project1-bs000.html new file mode 100644 index 000000000..af8e05322 --- /dev/null +++ b/doc/Projects/2021/Project1/html/._Project1-bs000.html @@ -0,0 +1,633 @@ + + + + + + + + +Project 1 on Machine Learning, deadline October 4, 2020 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

 

 

 

+ + + + + + +
+

Project 1 on Machine Learning, deadline October 4, 2020

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

University of Oslo, Norway
+
+

+

Sep 10, 2021

+
+

+

+ +

Regression analysis and resampling methods

+ +

+The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is 100 points. Each subtask has its own final score. + +

+We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +

+The Franke function, which is a weighted sum of four exponentials reads as follows +$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

+The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for \( x \) and \( y \), or as in +the example below just a set of fixed +values for \( x \) and \( y \) with a given step +size. We will fit a +function (for example a polynomial) of \( x \) and \( y \). Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) \( \lambda \). + +

+Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +

+The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +

+ + +

from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+ +

Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)

+ +

+We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( \cal{N}(0,1) \). + +

+Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. Find the +confidence intervals of the parameters (estimators) \( \beta \) by computing their +variances, evaluate the Mean Squared error (MSE) + +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

+and the \( R^2 \) score function. If \( \tilde{\hat{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as + +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

+where we have defined the mean value of \( \hat{y} \) as + +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

+Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. + +

+It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + +

Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)

+ +

+Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique. + +

+With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +

+Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +

+With this result we move on to the bias-variance trade-off analysis. + +

+Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). + +

+Let us assume that the true data is generated from a noisy model + +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

+Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). + +

+In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). + +

+The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function + +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +Here the expected value \( \mathbb{E} \) is the sample value. + +

+Show that you can rewrite this as +$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

+Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +

+Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +

+Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. + +

+Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \). + +

Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)

+ +

+The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +

+Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. + +

+Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. + +

Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)

+ +

+Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on \( \lambda \). + +

+Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. + +

Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))

+ +

+This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. + +

Exercise 6: Analysis of real data (score 30 points)

+ +

+With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, + +

+In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using + +

+ + +

scipy.misc.imread
+
+

+Here is a simple part of a Python code which reads and plots the data +from such files + +

+ + +

import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+

+If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +

+Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples. + +

+Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +

+At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+ +

Introduction to numerical projects

+ +

+Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +

+ +

Format for electronic delivery of report and programs

+ +

+The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +

+ +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +

Software and needed installations

+ +

+If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as + +

    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+ +For Python3, replace pip with pip3. + +

+See below for a discussion of tensorflow and scikit-learn. + +

+For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example + +

    +
  1. brew install python3
  2. +
+ +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as + +
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+ +etc etc. + +

+If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely + +

    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+ +Popular software packages written in Python for ML are + + + +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + +

+ +

+ +

+ + +
+ + + + + + + +
+ © 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/Projects/2021/Project1/html/Project1-bs.html b/doc/Projects/2021/Project1/html/Project1-bs.html new file mode 100644 index 000000000..af8e05322 --- /dev/null +++ b/doc/Projects/2021/Project1/html/Project1-bs.html @@ -0,0 +1,633 @@ + + + + + + + + +Project 1 on Machine Learning, deadline October 4, 2020 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

 

 

 

+ + + + + + +
+

Project 1 on Machine Learning, deadline October 4, 2020

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

University of Oslo, Norway
+
+

+

Sep 10, 2021

+
+

+

+ +

Regression analysis and resampling methods

+ +

+The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is 100 points. Each subtask has its own final score. + +

+We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +

+The Franke function, which is a weighted sum of four exponentials reads as follows +$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

+The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for \( x \) and \( y \), or as in +the example below just a set of fixed +values for \( x \) and \( y \) with a given step +size. We will fit a +function (for example a polynomial) of \( x \) and \( y \). Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) \( \lambda \). + +

+Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +

+The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +

+ + +

from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+ +

Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)

+ +

+We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( \cal{N}(0,1) \). + +

+Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. Find the +confidence intervals of the parameters (estimators) \( \beta \) by computing their +variances, evaluate the Mean Squared error (MSE) + +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

+and the \( R^2 \) score function. If \( \tilde{\hat{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as + +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

+where we have defined the mean value of \( \hat{y} \) as + +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

+Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. + +

+It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + +

Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)

+ +

+Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique. + +

+With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +

+Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +

+With this result we move on to the bias-variance trade-off analysis. + +

+Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). + +

+Let us assume that the true data is generated from a noisy model + +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

+Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). + +

+In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). + +

+The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function + +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +Here the expected value \( \mathbb{E} \) is the sample value. + +

+Show that you can rewrite this as +$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

+Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +

+Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +

+Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. + +

+Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \). + +

Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)

+ +

+The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +

+Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. + +

+Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. + +

Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)

+ +

+Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on \( \lambda \). + +

+Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. + +

Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))

+ +

+This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. + +

Exercise 6: Analysis of real data (score 30 points)

+ +

+With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, + +

+In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using + +

+ + +

scipy.misc.imread
+
+

+Here is a simple part of a Python code which reads and plots the data +from such files + +

+ + +

import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+

+If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +

+Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples. + +

+Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +

+At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+ +

Introduction to numerical projects

+ +

+Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +

+ +

Format for electronic delivery of report and programs

+ +

+The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +

+ +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +

Software and needed installations

+ +

+If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as + +

    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+ +For Python3, replace pip with pip3. + +

+See below for a discussion of tensorflow and scikit-learn. + +

+For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example + +

    +
  1. brew install python3
  2. +
+ +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as + +
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+ +etc etc. + +

+If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely + +

    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+ +Popular software packages written in Python for ML are + + + +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + +

+ +

+ +

+ + +
+ + + + + + + +
+ © 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/Projects/2021/Project1/html/Project1.html b/doc/Projects/2021/Project1/html/Project1.html new file mode 100644 index 000000000..45c385855 --- /dev/null +++ b/doc/Projects/2021/Project1/html/Project1.html @@ -0,0 +1,573 @@ + + + + + + + + +Project 1 on Machine Learning, deadline October 4, 2020 + + + + + + + + + + + + + + + + + + + + + + + +

Project 1 on Machine Learning, deadline October 4, 2020

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

University of Oslo, Norway
+
+

+

Sep 10, 2021

+
+ +

Regression analysis and resampling methods

+ +

+The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is 100 points. Each subtask has its own final score. + +

+We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +

+The Franke function, which is a weighted sum of four exponentials reads as follows +$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

+The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for \( x \) and \( y \), or as in +the example below just a set of fixed +values for \( x \) and \( y \) with a given step +size. We will fit a +function (for example a polynomial) of \( x \) and \( y \). Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) \( \lambda \). + +

+Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +

+The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +

+ + +

from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+ +

Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)

+ +

+We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( \cal{N}(0,1) \). + +

+Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. Find the +confidence intervals of the parameters (estimators) \( \beta \) by computing their +variances, evaluate the Mean Squared error (MSE) + +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

+and the \( R^2 \) score function. If \( \tilde{\hat{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as + +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

+where we have defined the mean value of \( \hat{y} \) as + +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

+Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. + +

+It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + +

Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)

+ +

+Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique. + +

+With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +

+Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +

+With this result we move on to the bias-variance trade-off analysis. + +

+Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). + +

+Let us assume that the true data is generated from a noisy model + +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

+Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). + +

+In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). + +

+The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function + +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +Here the expected value \( \mathbb{E} \) is the sample value. + +

+Show that you can rewrite this as +$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

+Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +

+Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +

+Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. + +

+Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \). + +

Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)

+ +

+The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +

+Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. + +

+Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. + +

Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)

+ +

+Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on \( \lambda \). + +

+Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. + +

Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))

+ +

+This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. + +

Exercise 6: Analysis of real data (score 30 points)

+ +

+With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, + +

+In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using + +

+ + +

scipy.misc.imread
+
+

+Here is a simple part of a Python code which reads and plots the data +from such files + +

+ + +

import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+

+If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +

+Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples. + +

+Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +

+At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+ +

Introduction to numerical projects

+ +

+Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +

+ +

Format for electronic delivery of report and programs

+ +

+The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +

+ +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +

Software and needed installations

+ +

+If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as + +

    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+ +For Python3, replace pip with pip3. + +

+See below for a discussion of tensorflow and scikit-learn. + +

+For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example + +

    +
  1. brew install python3
  2. +
+ +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as + +
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+ +etc etc. + +

+If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely + +

    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+ +Popular software packages written in Python for ML are + + + +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + +

+ + + + +

+ © 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/Projects/2021/Project1/ipynb/Project1.ipynb b/doc/Projects/2021/Project1/ipynb/Project1.ipynb new file mode 100644 index 000000000..eddf25d11 --- /dev/null +++ b/doc/Projects/2021/Project1/ipynb/Project1.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Project 1 on Machine Learning, deadline October 4, 2020\n", + "\n", + " \n", + "**[Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html)**, University of Oslo, Norway\n", + "\n", + "Date: **Sep 10, 2021**\n", + "\n", + "Copyright 1999-2021, [Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html). Released under CC Attribution-NonCommercial 4.0 license\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Regression analysis and resampling methods\n", + "\n", + "The main aim of this project is to study in more detail various\n", + "regression methods, including the Ordinary Least Squares (OLS) method,\n", + "The total score is **100** points. Each subtask has its own final score.\n", + "\n", + "\n", + "We will first study how to fit polynomials to a specific\n", + "two-dimensional function called [Franke's\n", + "function](http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf). This\n", + "is a function which has been widely used when testing various\n", + "interpolation and fitting algorithms. Furthermore, after having\n", + "established the model and the method, we will employ resamling\n", + "techniques such as cross-validation and/or bootstrap in order to perform a\n", + "proper assessment of our models. We will also study in detail the\n", + "so-called Bias-Variance trade off.\n", + "\n", + "\n", + "The Franke function, which is a weighted sum of four exponentials reads as follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "f(x,y) &= \\frac{3}{4}\\exp{\\left(-\\frac{(9x-2)^2}{4} - \\frac{(9y-2)^2}{4}\\right)}+\\frac{3}{4}\\exp{\\left(-\\frac{(9x+1)^2}{49}- \\frac{(9y+1)}{10}\\right)} \\\\\n", + "&+\\frac{1}{2}\\exp{\\left(-\\frac{(9x-7)^2}{4} - \\frac{(9y-3)^2}{4}\\right)} -\\frac{1}{5}\\exp{\\left(-(9x-4)^2 - (9y-7)^2\\right) }.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function will be defined for $x,y\\in [0,1]$. Our first step will\n", + "be to perform an OLS regression analysis of this function, trying out\n", + "a polynomial fit with an $x$ and $y$ dependence of the form $[x, y,\n", + "x^2, y^2, xy, \\dots]$. We will also include bootstrap first as\n", + "a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform\n", + "distribution to set up the arrays of values for $x$ and $y$, or as in\n", + "the example below just a set of fixed \n", + "values for $x$ and $y$ with a given step\n", + "size. We will fit a\n", + "function (for example a polynomial) of $x$ and $y$. Thereafter we\n", + "will repeat much of the same procedure using the Ridge and Lasso\n", + "regression methods, introducing thus a dependence on the bias\n", + "(penalty) $\\lambda$.\n", + "\n", + "Finally we are going to use (real) digital terrain data and try to\n", + "reproduce these data using the same methods. We will also try to go\n", + "beyond the second-order polynomials metioned above and explore \n", + "which polynomial fits the data best.\n", + "\n", + "\n", + "The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm\n", + "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n", + "import numpy as np\n", + "from random import random, seed\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.gca(projection='3d')\n", + "\n", + "# Make data.\n", + "x = np.arange(0, 1, 0.05)\n", + "y = np.arange(0, 1, 0.05)\n", + "x, y = np.meshgrid(x,y)\n", + "\n", + "\n", + "def FrankeFunction(x,y):\n", + " term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n", + " term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n", + " term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n", + " term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n", + " return term1 + term2 + term3 + term4\n", + "\n", + "\n", + "z = FrankeFunction(x, y)\n", + "\n", + "# Plot the surface.\n", + "surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,\n", + " linewidth=0, antialiased=False)\n", + "\n", + "# Customize the z axis.\n", + "ax.set_zlim(-0.10, 1.40)\n", + "ax.zaxis.set_major_locator(LinearLocator(10))\n", + "ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n", + "\n", + "# Add a color bar which maps values to colors.\n", + "fig.colorbar(surf, shrink=0.5, aspect=5)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)\n", + "\n", + "We will generate our own dataset for a function\n", + "$\\mathrm{FrankeFunction}(x,y)$ with $x,y \\in [0,1]$. The function\n", + "$f(x,y)$ is the Franke function. You should explore also the addition\n", + "of an added stochastic noise to this function using the normal\n", + "distribution $\\cal{N}(0,1)$.\n", + "\n", + "*Write your own code* (using either a matrix inversion or a singular\n", + "value decomposition from e.g., **numpy** ) or use your code from\n", + "homeworks 1 and 2 and perform a standard least square regression\n", + "analysis using polynomials in $x$ and $y$ up to fifth order. Find the\n", + "[confidence intervals](https://en.wikipedia.org/wiki/Confidence_interval) of the parameters (estimators) $\\beta$ by computing their\n", + "variances, evaluate the Mean Squared error (MSE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "MSE(\\hat{y},\\hat{\\tilde{y}}) = \\frac{1}{n}\n", + "\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the $R^2$ score function. If $\\tilde{\\hat{y}}_i$ is the predicted\n", + "value of the $i-th$ sample and $y_i$ is the corresponding true value,\n", + "then the score $R^2$ is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "R^2(\\hat{y}, \\tilde{\\hat{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have defined the mean value of $\\hat{y}$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Your code has to include a scaling of the data (for example by\n", + "subtracting the mean value), and\n", + "a split of the data in training and test data. For this part you can\n", + "either write your own code or use for example the function for\n", + "splitting training data provided by the library **Scikit-Learn** (make\n", + "sure you have installed it). This function is called\n", + "$train\\_test\\_split$. **You should present a critical discussion of why and how you have scaled or not scaled the data**.\n", + "\n", + "It is normal in essentially all Machine Learning studies to split the\n", + "data in a training set and a test set (eventually also an additional\n", + "validation set). 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.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "### Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)\n", + "\n", + "Our aim here is to study the bias-variance trade-off by implementing the **bootstrap** resampling technique.\n", + "\n", + "With a code which does OLS and includes resampling techniques, \n", + "we will now discuss the bias-variance trade-off in the context of\n", + "continuous predictions such as regression. However, many of the\n", + "intuitions and ideas discussed here also carry over to classification\n", + "tasks and basically all Machine Learning algorithms. \n", + "\n", + "Before you perform an analysis of the bias-variance trade-off on your test data, make\n", + "first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and\n", + "Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to \n", + "indicate possible regions of low/high bias and variance. You will most likely not get an\n", + "equally smooth curve!\n", + "\n", + "With this result we move on to the bias-variance trade-off analysis.\n", + "\n", + "Consider a\n", + "dataset $\\mathcal{L}$ consisting of the data\n", + "$\\mathbf{X}_\\mathcal{L}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$.\n", + "\n", + "Let us assume that the true data is generated from a noisy model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $\\epsilon$ is normally distributed with mean zero and standard\n", + "deviation $\\sigma^2$.\n", + "\n", + "In our derivation of the ordinary least squares method we defined then\n", + "an approximation to the function $f$ in terms of the parameters\n", + "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", + "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$.\n", + "\n", + "The parameters $\\boldsymbol{\\beta}$ are in turn found by optimizing the means\n", + "squared error via the so-called cost function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the expected value $\\mathbb{E}$ is the sample value. \n", + "\n", + "Show that you can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Explain what the terms mean, which one is the bias and which one is\n", + "the variance and discuss their interpretations.\n", + "\n", + "Perform then a bias-variance analysis of the Franke function by\n", + "studying the MSE value as function of the complexity of your model.\n", + "\n", + "Discuss the bias and variance trade-off as function\n", + "of your model complexity (the degree of the polynomial) and the number\n", + "of data points, and possibly also your training and test data using the **bootstrap** resampling method.\n", + "\n", + "Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$.\n", + "\n", + "\n", + "### Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)\n", + "\n", + "The aim here is to write your own code for another widely popular\n", + "resampling technique, the so-called cross-validation method. Again,\n", + "before you start with cross-validation approach, you should scale your\n", + "data.\n", + "\n", + "Implement the $k$-fold cross-validation algorithm (write your own\n", + "code) and evaluate again the MSE function resulting\n", + "from the test folds. You can compare your own code with that from\n", + "**Scikit-Learn** if needed. \n", + "\n", + "Compare the MSE you get from your cross-validation code with the one\n", + "you got from your **bootstrap** code. Comment your results. Try $5-10$\n", + "folds. You can also compare your own cross-validation code with the\n", + "one provided by **Scikit-Learn**.\n", + "\n", + "\n", + "### Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)\n", + "\n", + "Write your own code for the Ridge method, either using matrix\n", + "inversion or the singular value decomposition as done in the previous\n", + "exercise. Perform the same bootstrap analysis as in the\n", + "Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\\lambda$. Compare and\n", + "analyze your results with those obtained in exercises 1-3. Study the\n", + "dependence on $\\lambda$.\n", + "\n", + "Study also the bias-variance trade-off as function of various values of\n", + "the parameter $\\lambda$. For the bias-variance trade-off, use the **bootstrap** resampling method. Comment your results. \n", + "\n", + "### Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))\n", + "\n", + "This exercise is essentially a repeat of the previous two ones, but now\n", + "with Lasso regression. Write either your own code (difficult and optional) or, in this case,\n", + "you can also use the functionalities of **Scikit-Learn** (recommended). \n", + "Give a\n", + "critical discussion of the three methods and a judgement of which\n", + "model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the **bootstrap** resampling technique and an analysis of the mean squared error using cross-validation. \n", + "\n", + "### Exercise 6: Analysis of real data (score 30 points)\n", + "\n", + "With our codes functioning and having been tested properly on a\n", + "simpler function we are now ready to look at real data. We will\n", + "essentially repeat in part g) what was done in parts a-e). However, we\n", + "need first to download the data and prepare properly the inputs to our\n", + "codes. We are going to download digital terrain data from the website\n", + ",\n", + "\n", + "In order to obtain data for a specific region, you need to register as\n", + "a user (free) at this website and then decide upon which area you want\n", + "to fetch the digital terrain data from. In order to be able to read\n", + "the data properly, you need to specify that the format should be **SRTM\n", + "Arc-Second Global** and download the data as a **GeoTIF** file. The\n", + "files are then stored in *tif* format which can be imported into a\n", + "Python program using" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "scipy.misc.imread" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a simple part of a Python code which reads and plots the data\n", + "from such files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from imageio import imread\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "from matplotlib import cm\n", + "\n", + "# Load the terrain\n", + "terrain1 = imread('SRTM_data_Norway_1.tif')\n", + "# Show the terrain\n", + "plt.figure()\n", + "plt.title('Terrain over Norway 1')\n", + "plt.imshow(terrain1, cmap='gray')\n", + "plt.xlabel('X')\n", + "plt.ylabel('Y')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you should have problems in downloading the digital terrain data,\n", + "we provide two examples under the data folder of project 1. One is\n", + "from a region close to Stavanger in Norway and the other Møsvatn\n", + "Austfjell, again in Norway.\n", + "Feel free to produce your own terrain data.\n", + "\n", + "\n", + "Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example [kaggle.com](https://www.kaggle.com/datasets) for examples.\n", + "\n", + "\n", + "Our final part deals with the parameterization of your digital terrain\n", + "data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial\n", + "approximation and cross-validation as resampling technique to evaluate which\n", + "model fits the data best.\n", + "\n", + "At the end, you should present a critical evaluation of your results\n", + "and discuss the applicability of these regression methods to the type\n", + "of data presented here (either the terrain data we propose or other data sets).\n", + "\n", + "\n", + "\n", + "\n", + "## Background literature\n", + "\n", + "1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the [Lecture notes on ridge regression by Wessel N. van Wieringen](https://arxiv.org/abs/1509.09169)\n", + "\n", + "2. The textbook of [Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer](https://www.springer.com/gp/book/9780387848570), chapters 3 and 7 are the most relevant ones for the analysis here. \n", + "\n", + "## Introduction to numerical projects\n", + "\n", + "Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.\n", + "\n", + "\n", + " * Give a short description of the nature of the problem and the eventual numerical methods you have used.\n", + "\n", + " * Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.\n", + "\n", + " * Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.\n", + "\n", + " * If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.\n", + "\n", + " * Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.\n", + "\n", + " * Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.\n", + "\n", + " * Try to give an interpretation of you results in your answers to the problems.\n", + "\n", + " * Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.\n", + "\n", + " * Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.\n", + "\n", + "## Format for electronic delivery of report and programs\n", + "\n", + "The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:\n", + "\n", + " * Use Canvas to hand in your projects, log in at with your normal UiO username and password.\n", + "\n", + " * Upload **only** the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.\n", + "\n", + " * In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.\n", + "\n", + "Finally, \n", + "we encourage you to collaborate. Optimal working groups consist of \n", + "2-3 students. You can then hand in a common report. \n", + "\n", + "\n", + "\n", + "## Software and needed installations\n", + "\n", + "If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, \n", + "we recommend that you install the following Python packages via **pip** as\n", + "1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow\n", + "\n", + "For Python3, replace **pip** with **pip3**.\n", + "\n", + "See below for a discussion of **tensorflow** and **scikit-learn**. \n", + "\n", + "For OSX users we recommend also, after having installed Xcode, to install **brew**. Brew allows \n", + "for a seamless installation of additional software via for example\n", + "1. brew install python3\n", + "\n", + "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution\n", + "you can use **pip** as well and simply install Python as \n", + "1. sudo apt-get install python3 (or python for python2.7)\n", + "\n", + "etc etc. \n", + "\n", + "If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely\n", + "1. [Anaconda](https://docs.anaconda.com/) Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system **conda**\n", + "\n", + "2. [Enthought canopy](https://www.enthought.com/product/canopy/) is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.\n", + "\n", + "Popular software packages written in Python for ML are\n", + "\n", + "* [Scikit-learn](http://scikit-learn.org/stable/), \n", + "\n", + "* [Tensorflow](https://www.tensorflow.org/),\n", + "\n", + "* [PyTorch](http://pytorch.org/) and \n", + "\n", + "* [Keras](https://keras.io/).\n", + "\n", + "These are all freely available at their respective GitHub sites. They \n", + "encompass communities of developers in the thousands or more. And the number\n", + "of code developers and contributors keeps increasing." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/Projects/2021/Project1/ipynb/ipynb-Project1-src.tar.gz b/doc/Projects/2021/Project1/ipynb/ipynb-Project1-src.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..17ccd89ef6786e629f6ac20e898ca7aac7240cc0 GIT binary patch literal 193 zcmV;y06za8iwFP%2RmT^1MSaC3c@fD2H>uHia9|^nlxPtcHu%O;ssKh+Ekm=Bn5kW z`v6@jZi)!`Hb27*!^|PuZ1-8@?k-pjLWofcQ>HAL6U9qC!#D*@F=h-AiU=S~l9&X5 z);sB?w~m|fl(ue!vO>L^8^@~Z!=B|8c;=rt*3!Z*A6%^!DD6a{^#yXH8*y?tlHH&R vD7COt6O6d^(g@&c0A7~TNv-%b?2JAe-r6Yq^*f&DdES>E@HC=s00;m8v<_Ce literal 0 HcmV?d00001 diff --git a/doc/Projects/2021/Project1/pdf/Project1.p.tex b/doc/Projects/2021/Project1/pdf/Project1.p.tex new file mode 100644 index 000000000..8e37ea274 --- /dev/null +++ b/doc/Projects/2021/Project1/pdf/Project1.p.tex @@ -0,0 +1,583 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/hplgit/doconce/) +%% +%% +% #ifdef PTEX2TEX_EXPLANATION +%% +%% The file follows the ptex2tex extended LaTeX format, see +%% ptex2tex: https://code.google.com/p/ptex2tex/ +%% +%% Run +%% ptex2tex myfile +%% or +%% doconce ptex2tex myfile +%% +%% to turn myfile.p.tex into an ordinary LaTeX file myfile.tex. +%% (The ptex2tex program: https://code.google.com/p/ptex2tex) +%% Many preprocess options can be added to ptex2tex or doconce ptex2tex +%% +%% ptex2tex -DMINTED myfile +%% doconce ptex2tex myfile envir=minted +%% +%% ptex2tex will typeset code environments according to a global or local +%% .ptex2tex.cfg configure file. doconce ptex2tex will typeset code +%% according to options on the command line (just type doconce ptex2tex to +%% see examples). If doconce ptex2tex has envir=minted, it enables the +%% minted style without needing -DMINTED. +% #endif + +% #define PREAMBLE + +% #ifdef PREAMBLE +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{ptex2tex} +% #ifdef MINTED +\usepackage{minted} +\usemintedstyle{default} +% #endif + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% --- fancyhdr package for fancy headers --- +\usepackage{fancyhdr} +\fancyhf{} % sets both header and footer to nothing +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[LE,RO]{\thepage} +% Ensure copyright on titlepage (article style) and chapter pages (book style) +\fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} +% \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} +% Ensure copyright on titlepages with \thispagestyle{empty} +\fancypagestyle{empty}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} + \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} + +\pagestyle{fancy} + + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE +% #endif + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 4, 2020 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 10, 2021 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is \textbf{100} points. Each subtask has its own final score. + + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for $x$ and $y$, or as in +the example below just a set of fixed +values for $x$ and $y$ with a given step +size. We will fit a +function (for example a polynomial) of $x$ and $y$. Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +\bpycod +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + +\epycod + + +\paragraph{Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points).} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $\cal{N}(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in $x$ and $y$ up to fifth order. Find the +\href{{https://en.wikipedia.org/wiki/Confidence_interval}}{confidence intervals} of the parameters (estimators) $\beta$ by computing their +variances, evaluate the Mean Squared error (MSE) + +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\hat{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\hat{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + + + + + + +\paragraph{Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points).} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] + +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + + +\paragraph{Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points).} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + + +\paragraph{Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points).} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points)).} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Exercise 6: Analysis of real data (score 30 points).} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + +\bpycod +scipy.misc.imread +\epycod + +Here is a simple part of a Python code which reads and plots the data +from such files + +\bpycod +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() +\epycod + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + + + + +\subsection{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + + + +\subsection{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + + + + +% ------------------- end of main content --------------- + +% #ifdef PREAMBLE +\end{document} +% #endif + diff --git a/doc/Projects/2021/Project1/pdf/Project1.pdf b/doc/Projects/2021/Project1/pdf/Project1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d70acd442bb5c51248611f17518d76651351909 GIT binary patch literal 278612 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 z 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

V4@5c`9;!iFJkD-l6M zT8RJH*5U~ogfZQhsLk{A-g#iHQa;_!9uN004 zD>0?{5-y7~EmI*V)g4t`ObUN=48<6k?B=fV{S&M49<=^m8>qe*&?On?lioV&*H~>tIuQAZ0_iR?J}q)&W+>J zzM0dM6zDgYR?2g1Fm8a4vwiDa4ZA7aAYq)IY%(o8dA2q*$A-5mNPt|$lcgtCYzp~+ z{fsm<$TzK^UJA>YK`v$^&EZ_h-Sc-a;Hyk{OxY%3Uf?j(KDB0xcOqz~GRE66a9ZgZ z9P0F@sPSUf-a)@b@%oT&FZgWN>9UasKbUjSb1G+RrR=_c_txn^#j|#fw9cWjq@T0w3qdmOkBsS&2L*7DkfdEZc+aq?Y0F z_?-w1y1Z6W!-?Dl-RCPx9d9K@DC$fex8tPFd)fO5@hy*(H0{*=7u%Gphb|Fk(}#v& z5iWMH&#t%p>QS18#i@T$)n5yn-m+2{sBY$7fK$%6Pxk66W+^IP-vaC^%oW=h{*^@5 z>pOGPQ|0ASDJ|ctJj^A~LR18Z>3($dsaKESBN^R2X=h{3Q}PS z3_5Y5YS~h1*Ldj`tx29AN5DP}wRrO#LZ;AKUJ=UFoZjOAn@-mN;skOY@r{Zm#Rr=^ zEtz_^b05!|jaQw!s?)O<1dFpWyJt5Y$AKgPvXhSx`vu2YypDnsKG z64#3g8FJ`jx?7HjBaSZC3 z_80aWR(8@_0OKJLk-G|Q1taR8f8l8h-^?WDSdaTOT1r;tw!OeV!mud)9;`y6$Bh z1r+-U_uXX=EUJ!ZWiQr#WPyMFbs9^~EndRe;n602%A=ycK?fASOWo$?pgpd3XRUqM zf_N5k=h(`)F%Y=9<+}>QoiFtP)+ll^&P*2bl8`ZELrSyiCG42U@nA5Ixtjy~l@Ki) zeT3H+WJ_EX*Tm6rOA3*)E8^DRf!($TkY8oWz{Und^vGFve}|nLUD-1&Q9>mxh#p^9P_4I z53H=7gU5fla{ciZ*T}bqYlDDvJ=RrwyJ?3-Qj6bMT_FO%$su^2++pHBTx2;?@nK;4e70p~SLSq)41KfbJ#2#N zs^X=`tlrmUy)D)JJgbU{0|=s6VjleBKKC*s$8e_6I1YBRpOkSxKxz$UiMY02V`D5EH8{K>8ZGNKhoXr z62N`yBK2?e3eJbhZtEVBwiY_;{?(_nEUa@aB0nrkRqT1k_)ak-s!JSSvo^+ToKvZE z+j9TPcc0>qZM|?-uAW!*c_;L+KB!zQt`_I<7`h%l-xIsTtwP*p?@WSI^B_O?*P%pE z^@|3*y%yx+&e4v^%-y!vn>eWzglltR)XcxS9YvxOwqJrcpz3 zM^|hb*~J9m{4nRVF`s``Os_Jf!|@2(&Nh}@ob1Rr)#A?ziG4L&mjJoFh;>_j&ipA( zl0QfrqQ5$dQ;cnww2Q8=NzfFPmRk1-W&Xf2s_bJuu_rgiq&9wr+P~i!MT!$MrCDAY zYsR0|R#giP%qHoev5S$*PHUDmVJ>^*wEar30}>OHoZBJntnc$mk2NQ_W!Sze!RM_u zZ9fzg2V3{VwXACDzPTs%L>utV>Dsuh2$jB6F7GAA4 zZ9{dN8rNZ2-qL}Kr{BP6Pa~}VP3d#~H>JrS#e@>bnPhP)ocAvO+&&2Q~(dWMWt#ji*6t;)X zlDY@Z)1nI^hn_#WP5pf&`YW)Al1bv%KV^t0F`@*}M1~+@%<&MrRmfT1TMCU(4q;FD3@~J0C^$gVpUQAkkAle(0CCDeleK<7>7PZSSSi04NMQ2Fo@VsqW2ey zUv6z1QFm{e6bX7E1#0RYaSD*XJnA9zst*qUvUjhVP=W-}!Y7zP>L#TfBs;d&@(eLL z-HuNDA9>`V<3F2pS0JZYXlj+P;tL8JcrfOhG;Aa)1p^0b;N8Tq184$v_NG5FNyVjh zRKi=T}9Q~Abe8nGS^gM=)iNw=c5-9DFKuqps5E!KD>2xJim%hd`N zW?^~S;l~4TNCz+>DT+Ma#QveMt6XIsxD^k}yVp8lZ@-b>assZ;VAxp>^7cSvDJYdH zBr@--P;=zCO2r+YfxQXxzoSgP5>x_m4gQ)y@1q81K#9gH?dm;^V1f{N4;M1Pn*qr} z*!>a8&nRwG<-|^{_Wzq~WK6{X9xK3vmKiLew=X!ZELg_Sn?z}+dYlqcBS+GXfk^y| z1K?p`FR^~nR|*EYP0Y}Dm~dKvn~AAxkdyhh2+gpR1}{wi*H~2OUJys-7e6<9xvF0H z@8Q71+JzlAxn|ZK?O6U{*IL-526oQXha6FQAQp3iZ z@1BsI8j-mIi;$ob2svNQ*N~Tr--pJBuE_hlp?MlA7m9pmnv;Mj!w;X0jQG4_G$_tf zv_d;SD`z^r2!bIKf;`q{XAs$hR-<-L{cGE5y1Lndx1Rk`vZ}~dM56BMa>^QxP4(gu zp}4Oye8@Rs9G9wgmcYxPUK*ny3F(j&y&mB?I_09{O_AsNosS|T!`g82)^ZD77VRk6 zo*P3YC-eA2bF?`tP6dBuLKZcr7Bqjk59m5X=^7eKEkq`#CI?;HJKr-j+v6GTjs93F zP2@$&b={y0yrtNFJ+?@2j zZ#x}SZ6*?DhD#k4eVNJK_nl~u^)a>SPz~lKpvKzBSf~&T*zJ(-hTs3+nG_>Fe&A+L^jH0CK*S=G}Cw z?Onq|l!<3V;M0fHx!e2G4&PnF>pZOrUDRaTMrX^N+$Pr!%a&o^fcpLZ;ct|?R1I#h zq@VD_-@Gzc3t_EHs?g&qE&W=Chf!B@daXaL&EKk@MJ?=4WZms;tZVY2c&$(xtD zpQ5rh)G&GeSTZ)48QQ&P4uzU*-QOZ*MF}eM5Pk8murZYlKF!I$bzMQLew4cnEca`c zc(66L6T4^Rwy_nJ59W)TNN%mzLY<4inqn>?Jg~9;yJCwwP8F-ay>eSCqUvAG4hMM(C zOH6*^^6kO9?vad$n1HtCj_Vs=zS%EeF&Z+gY@4bWPWgkvdnILcO6FB34%r zimP+^cAExFp1dlkTnqWHXY znv!y+<$JwZjd7R`!ReAd>#b{#*HR(I4KQzMXV&{ty8UZ}o%8ZOuw0~rw*lK`xSrr} zVq+`B=c3xQg(k~k3AVo>J#B#NYSkiX0J=9;l9wNv9<3VrO#crV!}}{IDTfcB?kJ>>sk=9g~lo z3zu>Q^9%{}<&nKl2!!zU#~RX-+ufK`oX>?n0%(1b$|6pebO+mHE!|Z}%Q0uI2`@rp zYg`?Vr~J1L&8NZE7K3OKaT~QAgX9^PW(%JyO{-zE-+KlJV}M|>Rvr*A$mI-!}vEVZk87@>teb=mw=TZ|pCcFviwQ@`K-*@L6I9Ew4BV4qfKly@X>f4{P6 zRdDt1_uyP$soLh0`pHL-Ww!Nmxob>iPw>CmDg-ZY_k>?0dfha5j7Y&u)UR>9w2FIN zHp%Q5t6pTrNB`Obr(do7O4T?#r7~&oiA>6+JQ3nh=rasrm!MZyy6PR z?KFvne_m6{u#cMbc9cO!a$@!Ec%=CH4fJ~FO!HrcYgWepGF&sUa{dqSBNICd1KWRQ z?f>bcF>!D*vHdT>kB!gH>ZqGc-eH_^(-KqS3N|e|BDH7JRoyZokM*M9C)0HijW);k~@NI zc73Z47IxRj*z`m!FE0)RbZXN|P5B0HShqYB*-AC;$ zi*^iJp5=%7=-&Q+sgId7z~Pltl|U-7B4L@TUhDxs9MA)sjm>m` zl~s0jcIEO_wM`{qEo()?0RKm$wUst-HeoF<&>ar!5A=~ZvLk_1M3x9gYWqQ=pS2K7Z{MCr=#;);;u+tK@Nes6mgPdGXbi|6$*$@A?x z@>Bn)z4KW#2;LLMno)V$vC+SWIrRG(YYa zmu#htj?K5ocQrYn3KmP0&j*N{oZJtOsgOxFS&>j&9LiEHapz8QL&(Vi)W2)(E2pj5 z6~vwE^`pmyT9aJ5VrN{lox92`#fy0Lb4r4e(^^kXVX2Mx^SX9a^Gr>df|3S(ArYk8{wm;mkD zSk;a>FtR%+p$QbRp8Px2$tQ;la&%Rw8h>Ml9m6j;Fy-3UEB0?=tt&`-JBSH|SH?4f53WL25Pc<1aN(RzXy8<*!YaV==Ky-M=NH*X zI(wcY2wYpo<-bWt31sTZ&hLi?6?x~${DXY7Lhh0I7V-jOE93tmL6UtE435C-C42_D z0b7mxB9h1*Ap{(jeL>y|-z|O<$^vB^6AXguExZM`0$Z*7A{K^k6OaJuEqo&&`#mtf zBkYGPvIJ)8)mBw}<{(P6zY>5+w!9$h`@hf#z{gg-%Kf_9K^Gt47v)?9bkcqY-~zGj z5}5lCW4JPh_J9!5RDL!3RZfmCAIL$>*s_n}eW-zu48GAr<>}prA{yyhb!J)n{n#@C zR?WVGqv)%j;DGeiZ*YL+M+Tk<&F3JOO-?i-^t8YYf6Rohko$Mt zTELgpPnR3BDdgzDZBBMipw^~fkL&lf2QDrm=QnZ&Xnj7v22T&t>;b)f8{ktLZ&J(p zOUhsQODPtze`5*)_QO&faPD{y_L&4!w)bUvNXYx;uAxmUu-hXVU==x{i%67zLNNM^ z^6U{K$m#J5MhML3Ih46@o}2JR_a`}XC;$EF@^w#B``sqTMyY?*A(QH z`$jD?Gzn*QZrlssw!lf~GP=_9&Gc3S!Qz`;&{I!JDyYLpvx!)y-b#3OYj6L-$KL7l zon&!abMl#U0_Jf3iSzBF2`rF{F$-dB4{roOwMyAUR6L_k;MahVBkuM10GCsiV}!S1 zw62dz72q4ZUx~`(_2~UwrTPAjgRmhUW)0{ z6QN@!{8c?iVq?3=bd{(x^BKEDa+u7^J8zc2lC4)uBDKyP zc`xI|y2#2-v(T}IHOrod9_}eHpvcFh3h9Jzz>zx4k4b})`B{By+1y@654YAr^+FB9X=+X?e`%I`QKQw4n{RFvlCq4bX!D|8|W z-|%QQYgfMVH$rg75nryyep>I{7wGAB$E0dND`$XiXiufCQ((8eY)mJpyCP(^O*5Q* z;vsza!|B&7u^qt4i>9=ER>}KS-6*GMU(lZdN}Ii{U>XhUTmu!cG=g09=4l;yOHs<9 z>oFR1gq4h^M1;LU4TKp4qq-Zhv$BL)>#7zzITrATtF5t({!O^_#_-=*`UUf|Uf=K| zhwR!-CG=k(qcR2OiKPsLe~szIAeogC0mk0(IPrDd0Vsh6oC`VQTIPkXS0fA4`#mWh zRtpt^)=Yv`bTKbQQ#Ymq$@*%=TEg-^%|ZMniV}Q z+u~o*Y6BlKARV_b#1rtcm{>XYDEa6tl2S+u9W6Rs_pl-T+}M=JpbScWh~;8B38x z`y(O7xqpv{meM8IjAO|@9%1ae@sWkd*Yp|YrNW^@@D zw?4QP5<;A;p77eJBb7N8ha368b71oUh1?1!wm&QWF+374qSK(QLMM1s60$I!5&5Z* zM4boG__;62;%T_Zd|MbMJ*25PB>knY-Q3(Hb&KEHDA>2c;|9b}hj;h>Bp+c7lwQ`L zzZ`+C+sbhFE!K7|qaUw>KBMb5ku4e3d0{X{ekEqt3oN^$n@?~oP_AbIC{SV`NZrGpau>SOJB4WUn`6f##$raK@Y!4IFM8(`*Z6kf_! zxfa0Nspb?ky}r*E4D1@kyR43F3Lp0 z97L@|sqb>mq&aT(|8k*wBR|FT6h3-c_Jf~tVX7z;R;p8YMAhC}c`hx(35lAq|3&{n zN~)f?r}W$>g|x;?>l+EV`-SM>`#_;K=i!P`W9wuPGG zAYk$|NStn zIm~u{lI8k!;k@A1V||lXW6##gWgkktGdHj**_{2#Mvk8`1$Y&b}|e&83F|Z zd;j!Qxj)%ZwlO1D5=y7`$c%J!GD|&Sa?b25tr{#^2}w(tO%H`6Z_<7cc3;6odiS|!Ud3F&7<&c|dKJu0gPK6ey%t>cd?hbp1y&E<(B#B^>*XKjiy zQQ7Uzt$NX43An>D+i+%Qt>wM0wJ7FsaPe%X+%j^bu3uV|F9c;ut?^gr$RK=IOrU+B za%!as9_@~g>I1*cCU3k%cqP5?#KA9`F?^cI%R)w64@+-~ms9qK*YJ?rJaPvG(`85k zeaFJnJ=uy3^TS1Kf+b(&EI(EG4$1ZnkIN&c%Ip3f#{Nw`3)_VxjNZK2wNqs$Ag8>Y zto{_osQUXx&@LR08K)|-U{z3V8`NM(On||Z-!AUn34rI}^C+fW_DneamC+7aoc3 zdwk~B`NHq<_i-nTt-y+!v?$}x8_X0+`EuqOHtjg> zhrs1VG~J{)Ah6I;@JsBRWG+ChIAHO=F1rf^u30-nL%^ldFlO>V%j%9A?4>LVz87ie zr}|#%SnyT$HK4hbJUf?ld&D!A-`CECQh2)ufOt;|OQ`-aHSJ27O=qqTQyVHZH&)F? z-YlR1`%+C3{#|GAiYf+fv;K?mdSn1*UzcP=FKYU<@GyTVJj4+*PySx>bo#W{?au%D zg`=rD!oTipTQ^x4>a%ZShvi=t&MWTRZzUh&FKQ?=hi2zCq+b;O@QN;uG&Op(tg=H~4x=zU7JPk5;ex9Ai6u zOmnRU2@92nDQiR3fq*Qi&Bt_wLVdDHOFk`?D9az1&e*?G_a_QEh?-QXGn`VXrP|aQ z>lUi00wzA}!6o+U8)oukVTXlk&$YLenEGrc!0Tx)7eAge8K%wZYYP3+mjTRTqzk@53~EXp|$SZ-41QU0^DzD|0Hi^cwou%f-e8&G=6SFTsKv z1IJ3>yNt^;Cr*NO`BhIxZ@MGSnm~EzyO*oL)GCo~m3X!pAt{zEEJk_h;?`|TB8g-s zG1BYsVzb6=KDJhyxFoz&Lj5;M5v4{(Gj6>Qb&gVqV>>gfgNB~SROL>jH%$F>LaAF& z8Y_5fuCpP8DwR2>ReXJKmjTzvps?JHyMCIGWYaWV*T0H4TD7u`HButw;IF2(I(_?2 zgzYhut3Ewg;RR&0LPP29nQ^5IsRSSCeYX`+0xGb_1FWjvOxx7-M*Fu&2u;Q{aLSP&?q z?Ul;B5plt*P}t^jj>z*%`b;VUN`S8ka#XE5;^Cf-*f2ELt#{(LP=z zYrH9>sGIbj*F8>PnLpfx`b;y!CJ5QlE>cnBK=S4q?}X7a7H!m}%Cvg^T0K23$3NyO~TPwCqUhIqC=&4EB2 zB2@zh=3v&FM#kwVmP0So9MgAhWZB|@BYBt3CA5vB!84x&nW4>)YRep#+T5;))mQ*R9k)-r29oQp3cx!5+8ww`VcaNBHIvA<(EnxI2Kb0#CmnA5`@ z{uSACqkaDx7S~hU@dd;bV8M~G2WO16K39pZNGkw;snplAMlH{P|xgk zvInLk#yTwvTI6q1QOx-6y1(t~+);6Tm_aEOV<^~)NAZWTj1a&fS6_9!pKZz97EG+b z76}e5#9b&>B~6=K4qiIa7^QD!b7_<5URd8YPnRE;5owxPb10#~C6zwTIeIn|>RYkx z2v-=$ngG}L7uTZ5w+PU@Ii#rVZ>p?g?jibs0iv_r2E}#P2X3hD?KCg7~s4%5AA^F$NS#iFlWy-WBLu z1<5QHmcoEMvW!SAl9SoLycfpX)Dh~PLf6PpIi4M2-`$G{boSKs=I6l*Z58e^!Zn>p z;Nid5=5waZ(@&!&TV&OMa;AZGwQf=8ODr71&4#>8<6!(T@m$aUt^8?M1X4D65)n%h zm70%YnK7|^!Ss>tKA6F>;q(Ya07O_}b0T2d-C=7suE_}|{53g4G71Vs7+)5Mk)5wk zuoj4}My7pSzAZP~BpS;A&jJqs;Pe-{QpmcfM#_^Cu-`UBe$cqwBQv5?OL^!I-s)~% z0c|{kxu3sgi7T%toc__&DUhPH+7Kg3%g^UBhZqN+rl3o}HY;IP*UZmpCXk})4UrQL zf2|^r_bW%;4ObBY`IRzn54@iNZe4acBSARN+j24ClSoofR4#_+Uz)l!O10t>a|J-O zE`Y$0?TA?7!unm3z(r8G^BN|~oI>%Bb5VI(&d0UfgCy?H@S2O@2AMT@D>>>ByeDli zk&n5$-!OMz8u^Rii_StMXxheP4x2P9Qcc&y`@p(9_?i{}zV_zXl#s=ia?S5&a?^h_ zL9y*>L7KBO&zCFa`&$JQ?6M_iMyyVJ{4Zxq!alfe<@S_*`C+wXAn)28qf+s>bo&+j56AeCQB-f;W9vQXGm_%2;f5oqa2VApVP!IgSb&bej}CU{0xc%1faMVg zZ2)<&(Dg}ZypHYDDrH^>mrcEe4*{Bn3s1=fhE>BMhoGtUqyo732a_J@?~<9VF=LsJ zEd~m)x-9WIdU{x6e$2Q@okWng%07e3M-;<<~|*jOM2&ASPV(3E?)t% zat?YTD`0ac_d@}cpD~i4)N4B?Caqz=Lx>gZG{zf1%klI^_4B6xBq6B%nl3wF9>2<}+g>d9vWfaPen0SmzYWi)FSA+Sh|i5s_$;}Vt^@Ea zlqL++m+z6J$ldjx+D|(d6U*Tk_i`k*MviOs3dwCFdO8oUO=#~7rx{3>9*HNg8D`N6 z9jPut{)dT4*k%InbFizY=i}w;M^(ed!ZPCOxDb30Bp9ucw1ZgL$ulMZpV5oWUk$E~ zM49CLUN@pr@DD3?k5A?Z8z}cr5-a1@mWtj0`@#k>El=#0>|E6yjFzdObe+kc$uJc5 zhcn&cw(9n70zA(cU^W3!QfE zim!J# zrd5=WI@--k7w`Q9*OMhAZ}$}ERR6s?724~RGr2Q_OyheQzD&?0VnsX1LOUt+y76(2 zQJIQ@jynYGQyCFjqme;q&s5G;Oma?H+awp&Lt3y<2*X9By+lOwCihJ5$9fs<{%M=v zl88@G@t*6CkxW`+XZ34l*mz}LA(E2{;kh0f^?&k&oT(PGX)l#wPR_gb{&Xk&dq>{V zQ&4vaolaf$y3MEMXqpn)96V3@G{)cXG;3rLIV8e#rI~id*ivxXO2Oe?VqFYRzZ%A? zkE3VBxYKv`K_TrR6Umu{2EB$>&FDT?zD_vYT4K)5vX)x7U(zC4j}iUgJx+Y28e*=X zCTfX32e8vcC5b%JgGEwSyIASsfDuhTdtza6h)krT-qa%)Tv?JYgV&3RpebM%2ST#9N942CuoLV~L!mR-YX2pU^_r7lg`i1}NW--5 zgshecS8p}0;N>R3$Vf`dGq6De=0FmsNmaF}vQ1!gbv?wsveTx*88aN8)xNq3jaX{_ zLzGJ8wN|Ns5x3ppNYM+BtIvm}C~+`r=y9iNT1Co>=2UjcfLmzFFCwR;p)2Z{d9Qc%j4?g654ZxyD|o^Jy&c&YA_5(-n8vi)Z~S8X&Z|&81d;g?!Sb z)4{CvTygOwF z9JRWKxM{R9#*ulWRv-w&42ZM1WBw~BeaUNL-*`&9jBo^1BRX4nUdjDAZEPG^Q(3fZ z5fu(rh9M!cQ{0P}K311MI#6if%*6P>u2?@r+SSZKQs9~B!Rv`A&r?UNf(p7p*8Yzt%J)Fh-Hc?_p<&C@~Ad!5b<@Zm4w zd57Y?bM8;<9LLD{?6p8$J?jd$KFW523sZb@%Q;0>tuZ^}ioO2H0+Hn#e1*_7i=i3v zOUcG6hyEEMQ4MmQH$X+et3AIRk2@X!s)4?!YrH9-?IyKFYM#YB>Pf-#*d3D9B3i1D zK?XOsd;Mny4%VL?zwM=F*H$@3kf9Cw0pt^=%qRNN6@E9otzT=@Ibv&@`z;VMF^bj) zkCrP##hX)fM;;7J|o9p z>YKR>dmb&O+fotfEc$UC@Rq{OOFCr+KRxRXmf<6)sV7cxO5(KlVK-)B75O{1{`|r5 zsv}!_^XbplM_SpFmW%GV6n;5JX&`Y=4Z3+^!(&%hx2R-^5kgC1ei|Rhu*YzGo6$cf zx&5HAPEkf@ooEj;1EXQ4q)oR~0Ex**_aj?lp|^aF*GDSs2zyck>K^7Oh=@+Z-K8&O zeZ}o@#Hv9uBc4%ca}y;>hTVlAi6T?NlyVuUV^SwkAhQE!TB$c8ZPiX{zYY&>p6IbN zBHH)<}rm{e6enMVmi4DgPT?h8%XC z60OQ(DKR)DCm@liDwU^-LA!{ND>CLHD^MOTP30%3($CfziaC!wU}EP*4xmY)9ou93 z9COv#siw5yJNg=7oNvnfJ^dIQh_xL;mZ46*YY?oLWa@O@?u44_=mh;@qWqyn`}8F7(PD4;zd zyaI+N^M@l220Lut6+g71i*42)eDB_OAz*SiEwE9RW;)Mu*O-zjWKXtwd$I{XI7hO1 ztbux+UR>I*Ssict&GHpdvCE^1uh03`Gq{t;L@(VguGq~gN^ltFf;v&`z`BDkg-dFT za7w`(Xx>cY-lmot1B#{!ThxiBHC&V-_c^bEegAUM(+@7C8o%fW@gAnAp^72J;F#ds zb{(J+havVirhD=T6eh~n*TpSNHfvC~Z&(no(_3^nPr)7nVkJ$}{z?g@B?sy9yc|nZ zzZU7#GXq#z z$!50?;nObZ={(zAEnGz{34x|p{Xh^apO-#f>H8z|{4zs!sGlRDwyeB97CG z&594*c^XRPrt`8|<+m;{xn%zbH$ce0Q$)tsftfn>12N;!w+H4~ zY)DdLaW20GHC1=D5}>olu=$(vG9J!uYLp5rKHerX3~I**s1WAq(ZN)`;uj7vC!}OU zay}K4FnJd`_>sBP#r6IHywnat-JERZ5n6YZCo5OyDSn^sFr+_T5;<k8P_0*RfvEvx6L{uh=*F4U$>f%?o8e6iLu?g9L_D8~ z;!YRmVfSY&Xze)-pF6}`qA;j z{unLY{f+uK*0n4J$AXfPtKCG>jdci9cgxuZ*ZS1gB>P(UEo`!WPRDQ10VU^ZZ3Y^j z2kD{frEucE#@gU&;=i`wUlUOV<_2L;t|f9y*JS!u!RewSe7qG61wSt}xdvGAcn|*y zH1LPBV(xrbJn=}bEvL++#O)pG{C3$rX>!ZvL+G2z?kt(!VU_a|9BliisPOo~StpK2 z*(*8N2AM50*q;bRhiwi!6JIAcbG&45g&fs<_&2!A2sPwSKYoo!b()rQqqr$y&fO;w z@~~UwTy67}A>=gLoZdwmW>C=yG+T+hvo(cE!>*g$cQESM)7f#Jc8k7uE_V?>!Y6y@ zdH-G&Y3T67L6Ag4i#_s3dhL_#(oVfBYKH6?r72$c6Fl&6u{1lQ0S(_#QU~n@H>(72 z1_ntwG67GC^5tsR=fj4{s!3nOoBXo?daJwO-D}>^Wi2E^^2eY~RN8n&q$f6IXl4AI zE*1?skW%B1sB{|Le}69Fw-&jgA~Em3IoL zOfMK;0CPp+kY~d8+n5X1HEMXCx$T8Rw)Wf-BJ^nYFpSH2@9;-%j?!V?Rtdc!UuMHH zHb#RD=1)eZySy_?jh$9T#&e;Vv@vkGA;2?|G)r%(z3Ow5OO(*pc^M;bpI_lF$myVW zojFe3i4~%&RIgG6j3w3M8oH;<&11iwGTY?rBfOQTjgNdHvLsKy+H<3@e#gzmoo4k7Ot)g@t7La_wLFq(A01f1r(I0oat zB_<>^KqP+n22P5yhs$P`|MlC?YB0C`{ycHLBDw3x^5h9|EKQ8A&q%w2O8lfM90M&urAapGUpOg@8^i4}g~ zwe)GWN7PH#znfso{vj%AgOyG|fs!Ybl`KEHq4~u(psSchBtIq~sYkgWQlXU0>GpM~ zf>sYTVfH?%87GDeKEka06yvV-FWOQgYY+U9pUMR_ABMKc?)&vmV%|r1S?$e~BPM-t z2PoCb-I%17yTZngI)oKih7*ZX>3)h&KsbcQM;bj&Z~5ScrnKU_LwiM)DWma}7J_3h zh`R*GxwBVolI6=B>{)I=@|I>uQ=QX7K*#%{W=0eR$3ZeJGr)oQuFPW9)@b_mHjyyi zQ+G@EAjSyR<54A_Wti{kSIwzKFOq@MLyS+qF4(e;MNSNpZ@xX@@ zu2>S!thr2zqV(=dlOJFwqjY#773CBdS?d}wtfO?wf7qy25W7&hNsS=v;p0V=M@8R_ zeQ3?=D8=!cODR z-vG%BiEHn%xijeX)k0UA9Y8CfMcrVU%YOW63{PJRY#vp6-)!I0rz`9i&~;_i;H9xT zV;YTB8UB_l^HbPSd?9zN)bcw4`Xe90`TJ5oZ)eN7`zZ@*r!^hubhDTX2Qf_T(kgxT zB=XgQlzCtNNf&`3A$xvX za6wg$&ktW4_Nh$5QMP0bSB@XB#RpQ>j3nP(Ot|9X;ex}Qf!sXc)3hPJT7J7uEP4NM z{jJmnm-8_Z%&PxitJu4}oMr1_7-x+8rMAP2u+2+}E(n=oWXkW=W<}Q0V@(aW>fOybuIzdZKvg z!xY!=ITZQ%c|I-X0QpN{KQh8XUn4%FJYLqg`+f?E{R5%??MbhL*EZVNxa!eq9$t3w z+g;SLPSdZCNCNtjV6i4G9T@(VX0}$S-1-(S`c=Liil9nr3bVJCb`&0$ z^B8Wfr0`(Hj!-0}uf*RVKkRm97&~y_e3WgCDhz7kX^)9wKwU_jpE!J9;35n(M@POp zeetw9Y4_c*v+M#gx#g;PxpTRkXY#m7gd(>Dl zdG@U$8LCi*8JRlx0aRB1xR#gKgSb?w)e8rBoG}Y;%m4>%rHLJJh{7vy&)#DZnM@3& z%p>XumcpBsadvh;;%F^wxAnIU#~Y-K#d)0%NYA2eyi;|qedqA25)5-s>QN7DL-9aC z-?O1&@S1v(LghxJPTZ&79DYvFr$k?9p@pJKU7&E7iMU!NakWswc zN`IF1dMXUoN=|+7XK_8*73{#(cP!Vn0;p_+hf2)yLDR2r44(nxm(W}t7?r0_%E2}H zH(lu4hga`;xnGz$K@7-P;qvadMI8H^2yqYTKSQF_Q(bAS(lyQmL_!D5$Rf4wJ(IXnJoZRfTc_~X=` z)2*5FkT1nry}X$x$o>wlO?%Ow?xy+CH=3`6q9oxw>b- z>1n0J8AE=e;_21N!!OcZismartz$KdPjH84UwP}*xpJ}91*0?K@#+i`M9>e~U%n~g zBM2RnAxQ>hcx%_ck`)Z8HW&IXB?i=3V=Ts{u9j4CiuH0}7tu$QGY!A|Hdjcji{C4U zuE?w!xcrluTOuOB_?pB}EHHRbs@X>MurXrz^IYdMDlVum{-)i>2|Sxt3^S-qAh)x0 z4IqT3gRU}#V(Xx{^3HgmGp?e-85DGAmsddg<#qh2x2sNp4_eke7yoE=FcTR%ye$P= zY^~Xe3m@6roaL1*cl%;9M-yLM+6^m+;ac=kn2hjMh6$<;kNv2lc;c2e7?k?d6g7Q5NZktw)d)0C zVgakzLy^F^7JZrv`KzYx9@v=7Q8_n@an8x%uzt+t7F8_({feb8U?YSbX>xJFOe|wL z{u#O@27ha~VPG1FZ1WRYd?Jz(!FR^{ zC7KfOsqE+6O~lpm$URo^TcQq}0M<6++t?_x6*mg`QVYO|4m;PPS&4(6 zW6jQaqg}EDMGPY!_7vG&mtQ;T^GCw3J$~VWjd~ZsIYJ22sOgdDwfV^FUf|=osKqd5 zcN37E$e?cowB zRmLu99*m#Y1$C=LN7%Ru9hnuu72AOzlN(yVGLjp>Q538PN0fvjjkugJWaLmB`Kp>wIM$`y%+=U*At!7n!xxDT-6Hl_+v3C){ z^eM!p63eTO4plIRp$JnGX7=8aaxlWGFD+U-&?(zd%TjS>`l-P@Ctad9$c(tk< zyZ&gCb@gGizsA^UMnptjo~KD&MGk>z`pYbOhiD(%U4*rj!pzQ_%kIPk;v1=-QG3Mu zC}`0%-M%LP;5KFdeG+L>8s!KvSORQ%o_Qy!o7l@si-7I~XN;%Fh?bELs6Ish0n- zodYe9x+TMjBy-W?yq4oaFli@064zt+XY5NBO15!dd^krFmRH*SuLWe(;+gYmN4JjB~@nUO(9CSbRgvs8By&O|HzxX+2ndung-!m1WH7Nl>kfRQ-6c!BnNuj&D^EF zqdt3VGcW#7)%U^Z`%9&k(U<%$*6TVae)kML_-&cPoQ$r`vB&ss}CgV&nz z2-@L;p*WLZ{*~L*QhS1}c&-)E`0GKwc&}-wrB{w}I~%A){I9mfW2e35aY^-O(dh}) zpkNix+fEr9&6Lz__?bN{r76D>q-MYHrC>)|QIub;8#MaOXzMj>CB(z%(>AM#Zfe5C zNT#j==ZmoB6UggYnocr7r2DHAb&IytdE<*jKv=dBYgo~da%%I~AKj|`X1Od(M|FxW zx90M}q`Lx2tuGF1OeOehQm^fHHq?sKN=X8h2+F7X4P(|lLK3bl;^*EEF)rcw&IzP9 z%jEaZYU{isv#U<0iVMqbP$BW7>a1IsE9lat;)Vf77kf1r)<;QZNiy(~1+d6Y>La`M zX9@pm-+S%P=G?FclJ1^Dr6OU>#?I=L6lbVhoDmSYO}AWCvDq1WKkS?FqHSb_NCMvZ zm>wI$MYnnU%mGNhsbYaa`P`0M7AFHNS#ku85jE(M&}i*v?pq_x8n~C^JhEo>6;JNO zDi*a$4{0&BA8+lGsLjlGM6Ls%Jk;VNJBl47KI1nE!+(+0)Q&W}11x(<{%pmRb5h3n zZl-#|n9Rcx-19!TGO5!>9fumNOIy=p;gkqpc1`s(8*K1g5pSJmyg*DoQf*9)_B=C= z6m{F=uENJ}7@FzD8^=+Vq!y`tQXR}(?ypn(-rb2awLXNqMrLJVRN*=MnHE!5!uQHy z)}dNQ^Wzip&Ca3YOOenTdJN0jH)NHbsCru&1@*bPFA1W1h>Nsw;Ag54sFY72g{S;C zA{Tf?FVccwC-)VHwD%sg(wSeGXPS`~T;AXt9^4W$__kb+T&eT9AG+qv>+ZPN9 z{OP;q744jg25rNt?zrZQB}QGes;TD*O6Z%>h4cYcae9u%cvY*@)R>)f{Bpn0A0X$u zcZcTwbk|VxvvbU^v3v|Vaz7*%@EnX2)NuXkZk043HL)rSiDZS{*+^$09>Y&j?^o2C zEuOrI3lbV6O?t~twDU>7tGwsaw>_O>BRxlXk)jO#{-rKd=hwk*lgz-TLtDg;PBlJl zOk>DfBZBC`lo^z?vPSK63`FlLULVN$mtRMvmZD0HM&imPWL;e1$j?U0uXB=c1sM^1 zS@&n*mh{{}KdBdUVp4&!r||0f1qbFO98;`z_T$v8Pw^)batT`M;}Z9^$9_=9^xM-~ zmU%3?t%%#xmvC?Tq9;5!aIi{Zw~lHsLmjnPGO=W1X1`$s-XS2SnhFh0D(*p}mL|C~u#J z0&Q=a;s^0$q8Zz!nY(}~sa^?f2AL^7pBtl6gUs0nH@{~#UWT^Xl-_C|_F;TqI@UH! z57e!Gw1B4VLPD1IKbXr%6pB^&MjNU+Q@CtCwl&p3c+YLx2|cXL;rP=u?^sw?Fg?Nm zL|68PGzh$6`6+>Y+87bGWBASS%?`1NkHS_uRNF0d0HeeitPrcq)&08BmowDy1WZe0 z90&Y_vZ>=TMloBG2rTxm1K8aI|Hz#qU z9lP1u6ELNkk|Z`J7s5SbBZeQ}y!O>-sBabzM3kv{;1{T(!RZKK(?b*EbRWrs`zlwm z#a@zWo7g^g{~&ut;Wb`1QaH|(Fv#44aN3Y6xN+(U!x1=kRqPiogb+f;>GQN6hcU4% zqARh-`WRA2sU3y5@m*_|cW%>pX|%d|NB910Hme6~cE}xGf$*t-fWIPP! z7twgrCq6anWP+835=Yx}IC!w9MDwk2g{5x*tpzba*7M%VQNqcbvUI(1{g_|V8Q*#7 z6oMPYrgC7jLw?A|!rm!pEPtRZ&`QZ_949}{ z^b+KkqUiA|q?ZlI4Lvt^-y*1r+ieynL%JBTKvX%riBI{2L#luh#W*r>>J-`*=V}_zP*}%{9eHEcH;)z(JSGDX?+`X#_9s#pw3l#(mbF* z3%8|!S(zVXOSniVcI&5K0?LO+AnYVChTvER$TImZ3Q4O~j)qwK*-mdnGTU5AFQjzy zfm&t8O!hJ@6T5F+AMKl~y%GZa$F_`}suBeW5C z>@N&RJgmTI1yFx^<44C^)9%(!9(EpVo^W+-TgkO~5I38bi4+4u_~;|JFQva143x{4 ztw|uvUD1?w72AyK@OBf;=-3Z3Bj+MFT#L1tKbYkj(DGBjpQrXN72)j+J)^qFu+oEd zMZrtU4yzeB#OSmA#B1h`Be*KWi!3y8?I#i5$oI`2Ic8RshW@)O zifqM(KgluLyyI3=>!Zery4qWFf}mL<7Go*_UreTci<>i-_j}*bScmaL4K^<>O<3Jm zUHHX61i4q(7sMqc!G8|<<+ZW8_5L9-Gilqf3Go?gzJeN^=luPvX;dngw%v->%u^>9 z=OXM{D%2=h<{EVI&Wjk+M3#i@^3Z`F=HmPW_8!YGpG$hbGnF~Yg#byo$$8U2CB;Q2j<$JmH@UIVzX?+8@V{*S_#B`@*}ea^^9Z*zq6+(nNxYq5aO+G zWrK(7rl+ZT>YOas05N1owRWj!yBscK(-wX~T(F$t(N|coJ&r+&)_K~SnCJSS?9y!D zdJ+(|$R*Toguioo-e_+4sW~T`xM4Nya%wNmI!;X$_Xm#STvJ^E3eeonh;cZv-{&_T@$%9 zgaNFXr6jAkAA&H@lJw#f(df5D7piq+gpFrQc!wtvk&e5$ptJ46OJF@r)85^YQ8mS7 zUEVvkjnRMMlnmu;SN@#7AEW=(kJI}?*L5AS29qU2ZA6?{d^jP^kRxUB?3?p1?UQ)T zw?D5F=*-;6kDYkW;xCHM7U+V5Oqg0ZXLhxn;fcFE%V_1}RLu*#P>g0UReOw^*5t2c zF|_Io8MAH@k##n)o$9fXOALKhWTT`flJnGjtr3c;2id8_W) z+rT3T1-Gb5)+7e%)v&y}v6yG!oqEF;IauXZGPd))KBs(5`;^0&$YVsd*Oa)Qn?03IyhQ~zxz*|% z6OWO@R-{GD`vbNS1}cE2UI`BZ!&$4Dz8q0bD(9T*5er*;2i9<6apt{gt`V1$A9+o; zelYC-dSmQ$@xqUiiN2^~g|xBB<6+SF{4{;zc+-W@@HVg=A#Hs}Mi2hkaNP2JDn`#| z-T{=z%yAv=m^R_d(pTB5aQ8W%Ka~G8SJsA>Dtsz*wqhD9Ma1j+%am>Cm>^eEva*89(!b{C0esPGR^p&nN;HInCACT8nu?SjVZp3%hLs zAv@P%ywjVbJ8X(Mac=$30#9?;N6ZLqu}dQYUJeZV)(NJUD+i5l>WqkpNGk{id`&_w zq`c#x|G&1)VY?Clfr7DZ+qR94)v>J?+qTm&U#yO8+qSKa?U~K&<{#>uTZ>!Upv-#E z^?&gBCb}5QW9adi1z_qpV6(UHx2?Y53~bfMgrhv3rQDqR+JA=d=v?jr5}8Up3WwiU zjcyTh8ks?2t7!VQ%wHz!exe`s3_s`$pD#};CnVnWumMyn1VIH@+5l}OgGmv0numU` zul*&`w`WyL?Sf_l zVlqVL>oNlk+gH)s=Ur&d#LDor+kTy!dnqk$iZVu;LZsHGA9KOnKF?p?94vLeaiZ_v zy1~M*On_tF*Gi+GbA7}ci-hqs_9GE%M8>_C^pw+?iYmcZMy9;@#)FHHOwy5WEX0>8 z4CjQL)DmOm$A~x$hNEEm+VDy~MMb-6iL%MUhEdHfNPXIY2{hOG;e-*Jw20S66MA{o z?C{<{+EG0}o;{@f%QT(zqx%hdb(_6!X~naBp*yCq_$|-)y_fWd%1T*_4ehCsc115r zVHBkSKVWw8X){UDw{O1g0X?IhpJxCYCFgJ0sp@ZW5PAVNvsq2SmJhwRs;LJfQJep* z1R0)K-k{}AhL?6qOm+1kDAmHm!Zgm&mcXwt83%IV&x>C+i=6YSE&U~&PeZysRHdX; zbxX|`-`%)ZIQmm{+Y1f2m^yxVLaI#DE%FX7^poJuFW^L0c5JCm)vAt^DKv25*U6T8 zzPV}E6n7LxtZaQ*CimsQ&@?%EDiEN3BmaqJ2_4n!Uq z(m7(=D{y!jPOfTx?^v{|LUweIhCW!ppOhxmY^cBV4kZrnuTXmc7H@604Yt|6)a>@; z*JuI~&Hc}%4pBdj{yGc+u5##8_1ibca^q+Dyru)r(=EkaJ4EI;Z#6dh1awC$`RUGW)P?Zrg#z@AqhQ2YFzgkNi!6r3Wt1j4( z21g1HcSYRj-()iqYvRTBb=$n<>8t~OOG@T zZwk@qckaFa?3&%)XQoMtx%<&`YCA**En82(W7EO?V7M+78f z=LqTUVn&%L?>%Pr$8~BrFy|6LX%NsT*`WH)`4z7t2Ui;=LSGy?FZ22ppObypoh6U$ zr35dCRA3nibZ^Bk>mPCmL6p+FKvVw&)(wpW*SeE~f#^bjOd9$&WzYrHoXx>RS5t9; zar)2q7=LN)=CcMAkVJOd?q=NaE0(>Jjap#wG-(OMV+$Vd9hJ(FIae0nL?6|fiH-0C zQjpTIx+z(dCcg}k)$nW_j3<7n^+d#ok#EQTy;^t>rgNA8|KPew_~>?;DGB(xp21yo z_7`#J^W~kfCma)orQW6>LaC-SnROfVSR5Xu^10bp8KyH5b8=q=dw{|$b<95UR%KgU zLr5QT8A@TUhp0!{XgIUVqcxxUn1DszVt)<8&aH7;2VYReO{(@1t--p1J|;&+>);MU zq&tEM*z5*f_t}2*#+(}ZLDfSGwKk)N@sgWkRz}~k8~h>jVbMl{R;4!9nU$bZM({l; zYBN4f4SC?}O3k(L5;2`q zFy~9Z@UNO(WVS?*oL4)$B?t%;iy+KjWC>GM=x@}TF@BfJie~KZT;dKvx-){`e9Nnp z#N4303#kh8Z$>h)a4<`kDa&sf{;ky4BOWNTt>u)Q)R&q(F%_lot25-tIiBG4NX8j; zV_)ljyQSO?N_JcOnQZ5P(bwq!D?kB-TAp=^JOsV>*=*46@ zvZgLWx>BA;Z&~-~ia`(I64PMLhK6km&y{Tyxyec{^2Z*9x%MkuFMQHiiQ|8^*x&%X zoMKWW7;liO5){)JV@z~;(k%b}AI(@w?8KY$cgEyYHYuS3lHo6Pf8-z0S`;LNug)#@ zr_KCvpl>$c@tLZd|A9O?(Gi|&$mR+`quBcj^`csej-~YSJpBXl`KMc!9hxFj5~`Z4 z4Ds`spo@DPLTAK-sEK?gvX6oJy%$(guXwet8IMYgP}Pf-;3H?4*X2bYY(HclALU~` zfrAvHB|c@$;MW7NCf}ikj}oC4d|EqvayJSkTLl;a6{-)S)Gi7jKaIyuX`Im1t2NV? zs2r2}sJ29FPi~$weZpFuM8Mux5Zc7O2tM-}D1Iqh*;wi0NnL16C!053kss6lx}y`U z8^)4QkPdxM35f8BB`^A(Gp$y%Hr|%}ffK4(&CZpAqeD;!wi`U;R1+Dg>OIP>R&3@1u<-%_*@~97k(ftb@ zE}=={*fw@Wc}Y}Zl+aVw%3}=G2sJ?z=0xFs7alg6r`o7XYWVnpY+Z>PQTqEY_m?Q5 zIY4Ph1kXv3f?%wh64;dOYf`H}toDy#aB}xh0Fr`%*P(0*K(r+Vf_erDs(>%c&)y{9 zEb}!)k+M^aFC7DXc3V3C$M%P7LC|>pJ7_exdPjtZr>*oUA)Mj}8PeX4f@GsL2rnqm z__@N8lrm-=Aw}Tx(70(f)(ZLbWO}U2PSi-T!^V{8gxr6N+XA9;IJ)1Ev#sn{ zg6|m^p?~y}C_o_l`*D~F$Yc=X`XHTe_EqDXN;WwbLEOVsplIc5$MA2k>^G=)l-`>I zvA7?xO!{S5OWzk_>O$$YJ#J#zXnSPcY(>Z$=pE#T*8`rqLd;uC2>9%ZaphYXL)nN_ zqo6k}oYH)~{W<8=NH<4`$P|1;|HGus&todolRU6w2%q~ep`T{Aud6L)N1BvA--D%$ zJxAe*ptT@~?ZcVfwexny;aI#vF`m`iJZH%~K}*FEfGRTK{!87p_OBGTwgdtJS>IY# zf|8`^YSmXx-;-QR>>=ZNo`XI*WACH5*RG622ImsLRkV9ftx2k{p;sGX$%ssI+ct%0 zM1neWqezR!`cbA??&<*1fJ$pEK1Ix~*4NxO9VMoLLDsvv)L*QiaI9RXPIpN^yctmt z9aeFP!?5kE$nyo1S+16=v&wV%nC%LfA+&kNY!`bv&>T9&xp>N<(C`Fg&f)sysSOaq zl<{}z^$ix_fW;gMga~`^Gmcczm{cFm%fi{W+z{VqoaWN%Gcq{sFGhNdG0YEAxnRj0 zFdIHJs?%Ol^*G07RY{?R#zeSi0DSV7*OfUcJP7xA^D(L>XfvU23%)FLK=mRIBKlvL zg-_@Ec{^)H#ef+F&8-vTzsN+JO&SbWi8qPK9o9iUkwCrYx0fiSNSVFDsp*uBldJQz zq=xM2-T{M&4fez56?=e)B-#a(GTDR?_FVE(do2>wEqO{7It@l}+sQfgSODkN-bllv z(t|ZrCiX)o348+4ztwZfcDseUNowG0o}&e=08m3+PTd16E_DMxiDO%Zd$zg zQWYh*KpFKyH=c@(d4-#j4$FdEN+g}J#*>a6 z-FPMb9Eo%hS6R9;eoBWC+#+SIohFh42?#m9PQ=+Z<+E0oL_!zhMy>_>5Pzu%gKG_q zOXRD>eL3szKsgq;sx5(0LIEc)I?>sGfV8Zy452ClYVR7S~OSZzRWt#ls{FmYE@A4!N2L)q&-vFee@b2;WA( zmWK%!PRcBLJ%1LS)13SB6T$k{v#N5(g(<@~urKX#biC5!O z$?%!_LmGTwDJP#psOeCh4>z1)NX~So+49NW0Ry;uFE#*q0|Zs zA1b_!tt}*|U1H*qc>|mtmI6C486~8bs^!OUu6yAhItH6WjXk|1M67$HHifsJL-&OMe;6m zVUg|uV(93&19dT%k~myHg>YnB4Lr=qU)v-`3BeW;s-Sp=1wk*(Or2gHWFpsi-x9t#g!t&N>(!jpv zC@TkHD*isOu}CGJhfaG~_qeiSxI7XBlxru8?l>V90!?F4;ytl^T_{YXH@Q zRvWlz4hmL;9&=yQ%mr^kdQIFIhH1;CJ0-&Ak@5G?um@1aRUtrn{16DptUj$tjAIn% zy~$>b4`F69{mH&c*Y_ksmOik0TatY z6VAjz*k7Kv4{58ySA|i+)dS&C3x*KBWQk2cNQiS@dUvDQ%znEU;6mdE;YxZ@tAVVear1lXp zb#6c$#aDS}p&uw!){(ng1q|^p)oUuyQ?9J&S9?w2i|TjKnep$|BdvQk$M?5Sv4%>O zAZwV(`Dqk8janF^(PJx<@q;eR!F8xLe_m<@HntAF?R5P$7`tcDZ;gZ^V{ku`K9F$5 zb`8XZf1OLLuG9kJ*;R;Nbg;Dz-cNfEK2Dgl{s@>~ULcx@?)en5G9L8}q;t27YkZIy zl${n!_`nVNlB&NOI6^0<1^%HwsAM;E?)w6Jcuq$)gL zdKbELuZv416aZp$9+RyDT1OKW1!R9Nt7P=_!=BXmak^ojIsO&oGtl44$f5aZ&1sI% zg_kb&nVJ9OlxA?P+L1*!u{oVUvA#r9JHSrr`R6%f+TqMq%f;f7+PV`Q(0t)3LATXe zA;_tVs*$hYlwvFe1F=YfyVC<;YD(5|3CcNU)ZSTN%!#=u<@8+F$T9=9Cw^*sH5WN&+^=+;Fsb{s{;h_b@Ksh?-D*&bA0l}%R z;LU!CH{$ps_lxi*-)V#$pxo;-q?-J;hqop^e^{g{Y=?(zZiFrF~Iu~*urhNj>GC)$ejl=(3qrL34Hj3R= zET%pc(AgH;FgW)&U{ITXsPFE({?0xdvM~e6Y@f6ELC3S<%($gk`q_hoW;2G#o7r=R zjM-M!=c7|-R@GqmSNSxMP=9*(mKU-B%$P((dZ_8M`KrkTNAqxXm|FHve+O!~>s<>< z#)U%nhMg}8J8X8-E5X0DsS)lOt#wV$4Da~>+YH5e-#C{*9?L&p&+oO-WCJ0%FG*M< zOKRn2QSs-mER!8qP+90mGX1fSvu_Rxnj0Tjv`!hK5Eh_CVAnGfRDN^tTle_O72Uj+ zXHmMW2WyYj<-!d{&Eq4%$#g}@xT@3m>6S)f^Tgd(TCwe4SOg+yD7k&P-1O!c?pf9;0@wV-<6hr4RMO4NRQktp7*pf zJ6sn~RFH6>DmHSc5o%jS*!nA9nein_3o~q~*5*R&j9qf_L4qo`rimwNv?KuvuWO9y zbZws?quV(+x;y>-y_o`S?RN;~SXN%zk;a|;+i%*@mZ5wl&wSpjdCmmA=pgw{i?Te0TSh!%E34sTAG&UCb8q7Ew|*aIOMj0P?4FVsL2djx-i4RHLG z5uSA77k9F7Ba^g0tltetYWM7dpAYNa8J`t0^&3u=)R8J7+eLhHf6q-sl$UllD360a zs94TI;fC3-eav+h#gZa&Kfn!MJKT(Js>Og>kZ0h!J1ySGdX8PoY6E=gY4II|awd|n z!6Lkk>k@Vj)B`i!rmmnxLGPyzP+x2Eldo=+0jszR+%&>~lLC5zr!&59tX&*52TqSO z@10}-0Hqf&v>{{q)NZiZ>Kq4PY14$fo|Xc-cV<8HO1A2uJKjLq)bj=W%BbyRm$LAw;CQ+t{^&> zam&UZ@g*q?({Mj9=x*unKufGx3AE3^=?;_ER(Z}f#!fc*L=qp+d^g^30AXuLvT-qp z7*ijX6?g>R&cP(MDyDngFkzRkE08wdu3o<21-<+NptiKMRuCi83K23y6u_aKLC@+J zQ-Lh}gXbrzJWiXL*GWe<6p$6V)qFBM+<5UKd~6Hgxb?WL_0_W>_qXawgPizB@JKdVayN ztOLB1HFL}Ix$NhE_`bo?KXdpUy;qyjk(FvAMs`f}Dk(xrdMvvT5)7G(v(P&@_MLP(-G$k6B?py1jS_=7P%^JFWS@606j12 zw+(1g!%Z?D@&$bie_3DD)VtfcAR1>nrBbv%!L6W7>BV0_|KN~3rWKLQgdq%*(bOFF*&os1aG}qIYJ^mDdzBD<;8JIXvO#b{j}x zOVh(H@>YP7rNM!{t?$#dN48t2BmCM)xZF8k5YdI~C6Pd8#d;GmD*1#8&VVgX4_vZA z0KA9`qXcC61_NI&y-#%eA7kHHtpEVKT<-=E`Z!pCHI*fF3yNnNpOBAF!? z&->5`K6xBbYRg&Z9sl09@6|AnuxNF$XJa=Tbe`mve$Ri?BVZG_cM0=^n|_^Br*~q_ zq7^HwBr$=9fdxmJCID9;UM%Go58~DpyF)y7Vcfvg^&yh=#$RiiR#`*6dI&OgZ}qUTJJ#- z4Nc3vrk^hokdf;2okGe}Z5`Z)Jn4SuGI`D;>kNcTYjCDDW4T&sknkHx2H$m@T)|t%6uE!#w1s%6e#3H3U69}L$+*_v+iowAREUa_P zy;X$$qHIrIa?!j{E__L8wwWLn>U}#{7@GV^yyPN_ih^e}VtgYSwWXg!U8_)V=C|H{ z@Gz)ef;ckrSP=}SF*&D@fZ4Ilmm;6-OWe6}%8AW>v)<4;3YQq4Q@k(`vGV) zwU7BNS>f4d^`k&+;^}xas!bX?cNh;uQc)`&hqI+?0v|q3-j>+6od%=TQ|6Ot)sA#o z+mwfmgR@^`n!PXly1ODDpeX`$3UAeH_14|8T5M*mW&#(QB~?iI)z zrm6|o4<#;eW1Y^5s{X2R+BfK*{%WToX=`5bhNVIhav4j64}tc2%veIGfYc!+k3N+S zY%=LnL_@ES2&OJ^{D3q`?}aV_?4Jv42#Da+aqGCo6YCbr!ym82%242a^tQ&#aaKCT z1E)lbhTbsF#7kt#hH3=lXxJVzqxtvCAL}P`UKf5jNg4OpTVN>AHvhwt3K0lx@Bo}& z{exL1OJ#FD;X=i?zZTFWP4$iZ^rlWop z&c5^lZGZ9_x$734gu{Pa=s|pkpq0v{%FJPqK!1K5I!;$0dcGUPJ20#yizEOmFhsbz z(l0-P_$t38SYiMndNTx+!$8A-Bfz=gB&`8T9@M&iMP+)WzrI+{Wz)Me#2zu|V+<4r z1|EmfMzLL1e?=L4+`S-GJ2ihzbaQp0v2bq*et4gYy{AGHDm*J-T9zGY1_)(uO6pwS zvIIL(Dp2W?8j!z#Cdbb(iCj~0c_gy!3wwi@&@r|;y%K_3@zGXNU6Y~du3;&RA)LOp zfU^<2@mnW#tgxOtGD2SBmc=b(B)OaB0)v^!h!8U87AZm&Dh!o5m-{)w3R4Pj)dOOk zZRHU>>Jnf5FWfmTVNlr3#V_yzA1QJiln%)|SsZA$;4|l*?Ly)#YH}M#3kJJ)xv89Q znj@FklN++2AAig!&-0wHiXOZyZha16yVf&7%uE`I+Eio)eKa;tc3pMf)nlfTb@kx} zSVs{3Q8}P#;X!{^)h1$$Z`Fw}yh?t)Jj&`y{VcqVeFab@znd*E4DRkWgS$Hn?(Xh7 zz(p?Z?(Xg|xcgv(yIkDeT?c>s-oF37eQ&pFx2mf;Nhj$f-Kq2S=`T5KdBuo)N}+%5 z*<)+oS{!RG^gM8oqy8i!4M{iJ zJP^X#lrr?EiQP1Oj&gHe(r%1wqL%F`mL7lu7{|Vem`eWX6=Vki?UEKL+WN~pO{t(l ze+!WS0ecM_;!wq45dkQ zElZnQZSGv7pY}O2Lt?^G6V*otXeSgP;h^j+L3P!jHg|Uxw%k8Gd<@ioha)_)$gyec z>Q5J-&KjU_gMyqe?E}eIUHyLIDR`TS=3<~0VxPhBnKY&O}hY4ei0h#W5F&z^F zg~<%<6;W*Ku?+!Y^+hZ=9ochIt0_?}y8h}w!M^(wn#R-mpT^+2X_0{04{@xydKG6> znJdpWRT*!A9Dumen3NOKo(sYUd-KbYrTp?mbWhPAs>GdfUVdw{lZH~^#?UuPk1x6_ zwFpQ2Q`q}vHO}ewMBSz^l0FRm@r+_Gso~fND@ntyurk6rdA4nc+o|6ewd7^AF~2}T zjIC^N>G%mUaZc?t@UL#ZA^7|7r6glnTZ4=XCiS`AR@G^m>4(jw8J?AR7dfkXzQyF$ zp6o93l_kk+mHrCpMmdKt6-VHFTSW3a9l8C{runBzO@lt*_VgEBrk;(%{!w4+U><(P z&HKFJhMwB9gHg^xWBSQmlP8b>?`PDM-p;967iz;$e1--F9V^@jY90UTs?WT}rslle zZ+~u?LcrN>o?64>o->#R=?R9FLP7h56z-nkl0iI0DcnsU8jczDbKb4~bHJNsya*$r z#Odwzg1+kply-6h^ zf2ye95Nxr^=T%71$r!kW9ngCy<)t;TTz7mR@26EBNW_%b6TdG=)o2&9c1hL~S<5l;#mBMwLjFC$J!S)oWir%b5a_#t6v z&5*8zNuyvm4X!VIJYC-rE=u)*c}+&_UppE}_MP*bXtLsA#SHuf_Yo(K4qQ;i?X$Xn z@^W&`&{Chwl~5y^Xq6&IiAcAOaOGhG4|z-D`-Cq&o>fKS!q++Bw)5mGgi+YUpLKk( zo}RG6OdZ{W8*5@Oh#-r(Lc|e?pzadR3b7LL=KiL+>G+s(b{7Tji@?f-&TH)dwOVF|r7U~YA-sl>eO8EdhY%OwEROQ!>^sjp^6jg5iy1EX%!j263{f@Du`(P9dwITPNy8 z{ylB{PTl(o-gP!XWDYr*lzp;`H8BU(!LjT?g!1caYS-_RZL8HOrHOI#RTz&E{zV-$1&E z`UOP^_}6W7!X1__XcRh-qUM>^#8GIDcH|35+|UeFPFHw{S@1w!Ck+qHw^u$0rDv~XV$X4J3>yV z4S>75vjNToUCdiUQw4z=quK5-<1>?AYV@geutC*&!)KjAJp~#{Jl;E5gb<-gxwQ^M z9o{pLnCVN&1ya7Lq1fpiBsKC1@2gL~ESazQ>L)$Hih zF>y&pWUow|H@ZhP`o7`bV5P=_0!64yIc6Oa|AATt;c6`A_)&o;H-ixqHDKtk!-F@d z)v_7Dw#PgGD_=Zbe~dh{E+6oK=@IxN;~|!}sbIcX13w+imK0)Gt-DQ|w|qjG?`2en z#7-P-AHOUBTeC?2?T?VmY?_}p|7dw;_m?q7Vjju}!_){h_x5~*b3lpJh55JdFc4ba z)6R6i5~Bu&v<}via%O~K1?Z7FN66zNU)|7P!#XNq^`A05L%p)2P=hfYC9ZdIH&;yfryYVllU*0;N|VC~$&QGwx7$~EWww1ji~a1@+`CNW za6#4iR6hzuxD-CS65dv*X`h@#?NPZun{Y2WR0i)?T4Kcl6`qLdeSY{h(;C1Waw0*r z^*ag5@Sbl$%Ck0zg5LfZ&l?VFwO5%hof9;>Qs9r9?d;cgb`r)XDYNj=QwfAg9);?u zcA@C~9KXp7tGO*vWx$afqQz<1f5USm!X+#i@5au+N^PiA>U;X-U-*Je-6yO5SF($r zI*KF!V{14*zJDnzGLtZ~{$HKNPfc@Hj(-H3B35UHRVlZKj}8Bn+@90VV`D=KTL|*>^MFcXichjxF{MrE1?HH+f$M4cXy#6&3h6627Y!X9H&2PXh8vlJ5 zVqt&5ph!d5YcgWAz#mbuJ*^&+FtjN!L&fqK5z@tEB4}T66D8U-S0OM1BEhiLdv0(v z!S2Wd!6YG&Q^YB>z;a-e5V#V1npZ4`HIDA%;fW-4ng|9#ig7 zM+OVmnk9xxeg-2aX#iZ%GYh0NH93r!sq~WPHAx6leAjY;ApuhvLdGrxkDnP>%zh-* zGqjsE_1b08@q{R%b~HvJ1gR2KrC1QtwZtq{9uCfyBYEY#*Cmd}w;9VHepe1Cuo9$H z$2!122=LGs{jd9ybTGweH-+Hk?~nHw@>H^Z`NsF0ZXaRPx{GmUL;|-^GVdoqr#@r< z!I%+9mj|G5DS{`I{dc65dv%(!RI?tjNeW^XM9M|KJC7vG4C^_ z#P6s5Pmxw80{C00c3zxKZg*#;n`2}Ny$My9sgt7z@p(cky^yh757}rd{fxcI=cSRq z8XlcL_p1(%iHYUhq^3@3qxFr1qxGNc&#Qry=<9W$Z^7{jHjDb1wO1gS;M|1wwUz?1 z?*aaB1+p7S4vb~(SnG{BHncx|U3fbN64_fSx896qGG|hTR)=@R=WL~k`OSJE23t`_ z_N$lozuE;?a{{uja|(|%RUc`bcsllXtKl_{#)sw~kyel-GF;M|n(?H(JL+}xT)KWa zGTleFLfL8aRo$e`CK@HrIrDJO&?qb6w@%+SRkrR7aA)5e=aaI8nzSHSy_y=(?sp&x!qdFNB{hL8N3|JYrn}#Mtg8^;AY}Vmrn5MiLQ>< z_H!zqzu-oS_|MHl1R&T%EnX=6Jx1?^;AF+oG}Y39``%mXjC!r|b&%ng{cgBS zN%tks#^f3IoU*y5a14C8GGJ2au@U6U^{rXY^ zKkTAjX{h1L*wB>G27&pou^FcK)k+%St>;;cN+vD~YICd>!{`YjfNn*nK(^kzG5XLH zpUao0_sKow@m=LmLqauHvSS0ssOWrarIwTKUOzF^HABo)Z^JuilP@MAbA0)|s z4tuq9+jx8Y&B=IT;aJoKfF*CQ#9e-QZo(SI?rlUeZo8?oVe9(VigL;x+#9K;$8oIx zX>w0Ca4&T&^2LCSFhNmbk8{5K6Ce#}adfynAE9ct&pCCEh`w2L9^%D%$2paF;~f`V zo#4ou!w9nXB>`0Uy!(z_=Iukb0@MgPT04Fkl-aINa)?_9(8CkO7;V3c zO>tZlZQ7=H)(-Dff3^W)cr6@+Pk%bboJ@L&|1J30lu$2ctB@Uuk3`=Zpxr9_Z%+B*U39Gvdzh*??bq;|L%+(J7d2YzaWH1I znMkd`*pKGnBscp6HK+Gsrxhhi7assvfxMAIQ1P_|~@i zCHis5chZ9il<%Bjdfe64o9r-2@U#}Kvlx06gbUDT`)-Y9Rg(T0W!J1Pw zsO|77m3xIhuXaRiEVh7J72J&g z)hx%>#Ij3rJ<@0}rJJ`|OaaD|Z!3*o`*m#ks1BsHsTz$24yG61@5M5z*DA7n?W7U0 zVGl+OvSC`2eaaXI$d_cBS%Z9(oEqI%Ej&m%%q9a3G|4L{KK4(Y2QFuZ6H*dvx+U}h zY62TW9DVSG0dI>6#;{Wn-ku33y=%*(7554+fE{yS*6+qk^%u3eXmgQJ#dEi3yHT+{)1jNW#U+_Ai5pgq@k4 z^M7gyo$Fcw@Y_<}E)0~2H$}b;?8pnS5us2zq=Y9%H2~WK4N1n#bkMc-Q}*a?PY>5* zqzmY%M>rXrqyK%>!cERsvN<#FwRmrKQhls%Xl{yV$$RHVPBPHE4EL^9VMpVKJc+x~yn0 zqyTsR;-17_W{Sjt6;U;+=-y^##Td_Z<;v|!$zmFK(R36A-&UZ<;RF3ewF>%FbrGN! zjHIi}dLT3MHv$#zPA#qFHRRP-@aAZ}p!r0QE@4nn5C;2hB*U@f@~$y`nOciDMh(Tt!Kl=LNg_^p36@Od zE^}Xux64`Mn3%DI}!)Euw|>}93k~f@gCa^zPUhP?gs2W*i7@Db*U5MVQ^{x{Utz@ z_k?qv2N!K^>} zLNqyMT~qJ|PU+7tuPa+W4UvI00Qu4*6+Yr9f$*2^_t9@*FK@?r_~DB?=OZf5ujh_D zo$sM223=ld04P2FlYUbVCl1S@f=;|o(MCCm&N8kK4pfQm?uA)xW}NIMgUhDE$Y)0n z_E%nQ^T)yx+c z!ohX{UPg*eu%4IA4-(l0BAkclDtwLT>DOHf>4~JtC%lz9#IoyhJ44Y_$yl(O2oiTl z8S>01F_t!#L)bf-LoF>wB6G!+ENG0P%;ZG8@tY&oamze1=0hXnIUBk(^5nrkN&OWL zi@xi|?tUMk63K2~j@Ltu=?4@an$4*?BdzIzO2%De>QJ<)Q6S>G;lF8DGod|#95646 zHb#ZXw`S-}^S~f&WeE)#=(~*0TtLyVNri;-22imzqK z@KysTuoIsPUg%Qh=WUR&8=x2##xh(`R;Tfz!TKwzESuoiM_Yu9z{{2QQ~fl`AJ%qK zt-C1Q*5KUEa<=Nip)*U)9D7nJPSyzdzxV~`;rKhqd9tjNZ1oMoyrke|W~}>*8G%YS z1_o-YUe=SjPUSokU3l6=G_f=B^1j@`-ZawopP0xLXO&kWbxhTAzVrMYm#=W;K@B@M zSvTawf6OiTPHOxZx^8)12d}a+pW%{=^}uq}{RabcZqZny#I*8rPW~cYM|spa9JzO6 zYWI7~OYUmLD%E?G5+%kX^kV9LKA;?KgeBOs)@+xYVj%%Ce|$j?xvyKr|IsmNFo@w| zD~6w;4b?zMe}$Q~8KFKKW0zP(cdlo}iLDdLZ<}in?zQd`U(?bejMeQu{OQu_FI~>V zp~DT&^L`^J2Vpeu{8AeUiM6mveu<$BxqoSX$$poE#GJ*>p1nMA=I4a9|6--KabyB5 zNFd8F0O|h$h7j4S+GxS~M#OpkD4y$y?%*1@h2YY8H4zr{JsVhj`2o+G%4B33fUgI- z&c6F3B9Slc7w##Y0duFWg$+cR^=1|OEiKwUdQ>5riIeTk1-829^Db}J)Tqi!RhHC~ zh(;Ygt*=m9rtL4P=KINC7SK(%`@TW8i?EQ5Y3|8j=(mWC8 zuT3n#zlb8!XB7&DJM|rHtywHIHA93+meO!@dcH5PaHb+X7oo-hntjmf9D~}K>k5>V zZ@s0xcN-{~d8iUviB^}urS~Y@c17N!<^X-F_JXTAj@ffcxjd`c=&8_k?3_J?wCvt9 zvh3*A6{ANRdUI^o)Xn>rPc2S^_ew1#n1~3!s>(vv@-V_-BCyxF7|%qH>Gk>$hnL-@ z)^qnWh zIDu78_UoOWFf-r2XU#zUVyT2z>M$%*M=cJ_BNS#mgN!3X^6Mq_VB~KasK#Sc3ZVFd zR{UVEIycxu-XnZ-Kc!qym&?Tc6`R+4w3#$xt&i-G=^Gz!b!btXvH3xGn;?qo84?T1|cf)5Qz`*vc)ciL0UVvgm!4+as#X$DduIal_Jr8@7q*FE&^aJFqBo%$3c1#UiQW_3T4)o+2+r(^$2}M#rA$QL7Sa>n3up60h=3nT%&CE4*S^TM+@;eedtV zcPR)(p|<3gLR_~IbS);4L|c2dC3F6xRYp-XJ2Tu9Cxg2q*Zdpr_a|o%513gM|00JZD*({Ph~82 z>80Uz1{!3*;Yxo>CAXv}@ViNiAOVFRSYVl{^XRE~j# z&D2M@y{=sI=e0+#DC2pEG3C+5AgMEMI)#Y10KZEC_B9d~Di!RqMY*!?hH>a76M1ob z`5yU{PGe}t>-iX@1LbTY)B~1n3S{za2@wX|qh<7WX{Tx06QL^)h3e+p7EbBk*ebY; zsDtam>0{z`^VV}3`qK{Szsx96QMpsH?4qwoF*+SQ>kisFUBa%82o=8{E~(vapO075 zLpB?>nFcKHPTp8!xMxQVW|6@&C6|j4=c|r$I~Pn>^6@zOS_wt0^#3UP1uvV#kwr+r zDbjdi;Zj2SXv4P5iB2d{cs5x%$$OPf?|^uTR5&uXpdx$rB+i#S)4_RWSt$4OhqeVd z^hboJi|$zF*MSbv#>E(Qkb|i6n6rI7*%AMB^W@Vkv)p(j;a^C9CQOWM0XNNW12u;| zSWu~)ytO4ux(SJ7sL)8>X!Ql9ot~Cl&(eIjJn&|7S|u`{&-?eel2as}J2^xy!cvfZ z%&Ih^?6EM-$TNrn_h*1NL8F9I>{%~DO#>{Oib&1U4bO?G*TRMO1BNGUGws(b(Pa7Hq-@_5;b`HwVy-b@*++rx@u06bn76K{I1fI}f&6z@s{ox{tDGT#?dfn`|Pa zI;fE+c#YGJ3XWcr6IOeW0Mb@@maR|CZVbqt)EeE`#6M+e_)9gf zLE1Zt;GIFa&%(T||JIJJ4NoNWw*c6#ZYol*NTLg?XsI_3YVw-)bucqG68kA-6Rkv} zmz$qU+oR|Zb%DHkM!~SdVKI)QKp85C4i=U$v+;O`z}=T#PAPLh#tevPSFkg;v|I~YA&R`bSyLKRQcWGs11f}Cr0@bm27i` zl$(wX@bTF>gLLf}Do3ey=q=C49!^|v)|e;Y<}JV2UZKLXT!fT)Frt_ZSG6&#FeM96 z?T0*@mDSd*+9b3`u}xPK#Mjk1w%R1C?nJ;h91a^YEWShCn_Y%UGm&m7>Fmi13NB?Ee1ca3x3G~mF%pR0HGeUoi~q^lk6a*KcnpL z-BZ#@=!uN#*>EoUI3pfBP3clcj^Y@fIhMp;VLYpKS=~9@cH07Z+eDi>Im$ipTYsED zv5De1=|Xc^MX9}|+|>yymCib;++V?3iVk`Sila`?b*;L^kwc;9MS?`S3LOsZVO}#G z!V`U=v776@Z)1VGeUJ4*1GTQqWwHfadm2a=S{myrUi|yR2ffviFNp%3Zd+tj#CO%X zje(Ied{C|=mN?}dlw~)^jhqB`m$3{Xw!s$$3ab^az+xAYjYDyJ_M_c;&Jy0K?(kzn zw}p59XkWG;wCTS6bwI7(>A9&2x%^&#F+9kZkHD~d)JQ(Fy ztrQv;6MJj%rLNVybj+tO{%kcoB5x83JncVSOS#VDj~r|maq{U*mBKbU&dg3x91l6a z&Q3?E7@r?9tb0395ru{B#B-s=4yarMcG|eG7ze`L=r?}Abw}oKVS3M8hTM6mx;oFJ zTNGd(?ht%H=f>kl++LW|G4vO=zPflX$Mpa3LKATy7cW3x|Ao1@lcDc{+k6O0!Uw7L zJM$6&Ep`-`vCx@uy)YAv0FKlp#va^uI?Qjg;rQ2DUZmTRAJ#+bH*kOT)VGfI&S$y> zGiv;vH{jf~{lR!m`D^?bHMX!8#$9Nq`=e>?VMYWelzj&rbESUA-OKiTxz44nCqI^h zx2j51TN6`P$ocL2egjj_b0Nn_>|Ly(0!5hrP}JFq`!IMqP=c_%FvG}3AM9XF$_`2r z{s|Xv`5JEX;i zGX(u{L=gV9`fv2^iFM)pFd1zsc|b^?i?p~6)5WH4Hu7o>Em4pK>53r0LuAJ1{EOOh zSr#(n$L5}nIo4JAB5|R_D}E0W#m^;jFrUqBU1R{o6_4)*5X7OziZr2IvGHgANDi;{hC%zz%5CKl9A8IIk7 zK4bXyW{YBmNl5#O;NO1<6NIa0?m%hc;pKQI5fRs}^w??4)_2l-`-=Qe})?wfuGjG`8S|2^#BI zwQtp~fk|YG)1wO|$jk8~)-^Wg&GGg5%58TUvBy$X#P@I5d!7R71fB)QN|7A%W`Z$~ zUiEyTnZSX|LpONV*ii6)<|LUp*#847sptqWbv7|`B%!i5HCHv$q-SPeV`5-op@w4= zat2xg9I2=oRjq(FW}jyjXJczK6X0h^#L>(M_<2p%=(7lks}<0a#PXBgbaXT`r)HEf zb9V(enmSQ^*73hHS^?}tjeuq(RH8gAOf1Yy+@I7ZH#0XY6D<=9B@+|nXFfTA>3^3+ z)zQe_-prJQQQXMJ$qbHBQB_QnLEPEK#@NWt?w<~*T3R`gd>;SS5jqleGe@V-Ta&Od zFtahUbF*-;v(mFLaQv%>p9MbKE^FmtM)FUqs7Zd>8v!ky%#27}{!c*;237`EYB&Lb ze+KcN|Juy#|8eO4e?pg)^Iv=}D--L#^SR6%OkDp{K6fB()ozswCFJrAtceN`hqKww0Ym6%W zwXRs^7kPLsw?4PSuP&AymPj|G4IZRz%YtT!RynFf%Oc1~2wGUoHCx3-UMzBi^XeWC z@w8yyqXZ?JsVfWCkZ73QBjivsw6|q9XL{fc+JRIAU4KawJC`wYDq6K33BFhd%5bJ`$CkNE%L9`b&<8m= z<))&FA+|+wkcBIMt_NN4FE`k?c0szRN8g2bkP@xFtZbVWup~o%e*7^(Q=q2>F@;}I zd~ZfPVGeu6>7t(%j+Q|E9_dz8&zD8P1)Ekurzj<4Q)3+;4AKI3A|@2KuK!&TC`9$mP@xWyxXO@Q4{FTxN1yC<&;>_%we@Ih@0rSL) zpb2-lru8BWq@!eFt^My4^kkyoK>?5-xZ~Hk8p6Adjg8}sY8*(3Vlh9z9BARt!X!$i z1r4D8k{sYMBZOV-ci0xcL@#bHmtDT8PP#Vx#tc;FJ8?&lqP3%KweGiU;S=vv*0UN4sy~I67a`Kn^=T_uP<|4$p4&CkJ14Y|p~! zCUWK*W@ZO*bOTRDrv`^dlG}p^XKLR9+yt-RpaH7VDUM}!=&AW>BI?Z8pV&W!&?^hZ zz{hHcQ!4QDhbbZ`5z*5UDG#c}ewQBuPP(?7I+hk=GjBSC8z3*W<9S`UaDXFAQdNq0 z#ki+Lnrz)G5Qk(}aISZlyDn}sG_%NiK*ci9x$|9e5}kXHU+AW!bdtlpOh8kuK3<7s zo7Cz(v>!gU&^CWb?{CTFm7OnY(|Els-(D~pHLo$dJ$Xqxd|fC-YLCB~8+P+T_5@$4 z5>#{lqJ0b@WUt-w{8mcUZIqNP7-Zt5LG|TFxrMtjKQmf~u2PT&wvv7qfxX?O(}n7L z)@Z!N$7p=Zi6(!{$t8n%EWY4E4X1A-XzN^W+hPE=jPJui>(^gK58)!)B;1r>rDlb& zv1pc|dM(CUx(e`Zo~XV8j)n4hECs97rB&wN+%S|CHw1^jj&%#e?8hs`TTgHewZysP zPnjzG)#aKcrFkbs6#Fn;;>>YJ2%M;}N5(ynM^fAOXr_rN-{(%vawUsWN`C=GhkrfMY1sXCQt}n$(AK zub;WY%^&r8GgI;e5o1;SOx}5JFm^5uRR*S-teMvmCiA*1q{J$yA2%w|_ub!A?d3VP z@t>~P@u)Kms{xcmjS3cR0M!W~N3NS!mp9_wVU4~23i3Jr1LXf3ZfPo;nZq$k*_oQT zk?1gyFmrI~!7-{>d6@kZgk#ho(P1WGC1L(dR0aTmpNVXrRVe>c!W{4!`v(aBiHVZv z@UgM6u&{8lvIsM?af^zva_gOygBWq@7@o7k~v9SFc zUXuI+r#8S(XlE3+`LrKI%}fBMX8*vk6Y$giu!VD5AqR1*UKUdnso)8uAwv^!67)0MNo8VV5qb~Z(Kvd!E(pGK&v4GgB3Wmx)RJB{RNMBLcp!|@{8P~be0 ztXCslpkE+utu%Mg*^aI`QKTEV&bJ#g2hJ|`NDO#LcK+qpaf6kc*8~JRiRdL35b`ZU zw`6JS4xB~|-KGLki+BI+M?DG_;DUUc{_=$hGSFU@nf<`zQ&$)}o1`roWREJoRb+fn z%9-o0VvjZ1>)s01XAe8L#S+zriKE6=Ud;lYxHh;pi=i9*(?0vF!adZ;ZkN=}9UxwJ zpF_3}Va>n8K9>Gn-+WtOyqAy9FZ4>XPSLe2WT&qlWHPWA0YWc(UbPa^Ua|L}q5p97 zps1SU;ZN;y=IT_$+bpmDb$46{k}39;ldn-_Q_s?`_`7EBQAno1)2UY1e6M|}>e9^H zslk1dn$+QUY*CVnYx^ni5yip!cYMn!cXazQ^JBc<;}u%IKs@U|zmQHqBS)ayr?m*j S!pX_a$^u7DE~X$3_rC!ADaca* literal 0 HcmV?d00001 diff --git a/doc/Projects/2021/Project1/pdf/Project1.tex b/doc/Projects/2021/Project1/pdf/Project1.tex new file mode 100644 index 000000000..63acd18f6 --- /dev/null +++ b/doc/Projects/2021/Project1/pdf/Project1.tex @@ -0,0 +1,551 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/hplgit/doconce/) +%% +%% + + +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{fancyvrb} % packages needed for verbatim environments + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% --- fancyhdr package for fancy headers --- +\usepackage{fancyhdr} +\fancyhf{} % sets both header and footer to nothing +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[LE,RO]{\thepage} +% Ensure copyright on titlepage (article style) and chapter pages (book style) +\fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} +% \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} +% Ensure copyright on titlepages with \thispagestyle{empty} +\fancypagestyle{empty}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} + \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} + +\pagestyle{fancy} + + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 4, 2020 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 10, 2021 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection*{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is \textbf{100} points. Each subtask has its own final score. + + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for $x$ and $y$, or as in +the example below just a set of fixed +values for $x$ and $y$ with a given step +size. We will fit a +function (for example a polynomial) of $x$ and $y$. Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +\begin{verbatim} +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + +\end{verbatim} + + +\paragraph{Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points).} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $\cal{N}(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in $x$ and $y$ up to fifth order. Find the +\href{{https://en.wikipedia.org/wiki/Confidence_interval}}{confidence intervals} of the parameters (estimators) $\beta$ by computing their +variances, evaluate the Mean Squared error (MSE) + +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\hat{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\hat{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + + + + + + +\paragraph{Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points).} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] + +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + + +\paragraph{Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points).} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + + +\paragraph{Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points).} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points)).} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Exercise 6: Analysis of real data (score 30 points).} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + +\begin{verbatim} +scipy.misc.imread +\end{verbatim} + +Here is a simple part of a Python code which reads and plots the data +from such files + +\begin{verbatim} +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() +\end{verbatim} + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + + + + +\subsection*{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection*{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection*{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + + + +\subsection*{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + + + + +% ------------------- end of main content --------------- + +\end{document} + diff --git a/doc/src/Projects/2021/Project1/._Project1-bs000.html b/doc/src/Projects/2021/Project1/._Project1-bs000.html new file mode 100644 index 000000000..af8e05322 --- /dev/null +++ b/doc/src/Projects/2021/Project1/._Project1-bs000.html @@ -0,0 +1,633 @@ + + + + + + + + +Project 1 on Machine Learning, deadline October 4, 2020 + + + + + + + + + + + + + + + + + + + + + + + +

+ + +
+ +

 

 

 

+ + + + + + +
+

Project 1 on Machine Learning, deadline October 4, 2020

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

University of Oslo, Norway
+
+

+

Sep 10, 2021

+
+

+

+ +

Regression analysis and resampling methods

+ +

+The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is 100 points. Each subtask has its own final score. + +

+We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +

+The Franke function, which is a weighted sum of four exponentials reads as follows +$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

+The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for \( x \) and \( y \), or as in +the example below just a set of fixed +values for \( x \) and \( y \) with a given step +size. We will fit a +function (for example a polynomial) of \( x \) and \( y \). Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) \( \lambda \). + +

+Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +

+The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +

+ + +

from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+ +

Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)

+ +

+We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( \cal{N}(0,1) \). + +

+Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. Find the +confidence intervals of the parameters (estimators) \( \beta \) by computing their +variances, evaluate the Mean Squared error (MSE) + +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

+and the \( R^2 \) score function. If \( \tilde{\hat{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as + +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

+where we have defined the mean value of \( \hat{y} \) as + +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

+Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. + +

+It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + +

Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)

+ +

+Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique. + +

+With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +

+Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +

+With this result we move on to the bias-variance trade-off analysis. + +

+Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). + +

+Let us assume that the true data is generated from a noisy model + +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

+Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). + +

+In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). + +

+The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function + +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +Here the expected value \( \mathbb{E} \) is the sample value. + +

+Show that you can rewrite this as +$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

+Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +

+Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +

+Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. + +

+Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \). + +

Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)

+ +

+The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +

+Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. + +

+Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. + +

Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)

+ +

+Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on \( \lambda \). + +

+Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. + +

Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))

+ +

+This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. + +

Exercise 6: Analysis of real data (score 30 points)

+ +

+With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, + +

+In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using + +

+ + +

scipy.misc.imread
+
+

+Here is a simple part of a Python code which reads and plots the data +from such files + +

+ + +

import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+

+If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +

+Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples. + +

+Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +

+At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+ +

Introduction to numerical projects

+ +

+Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +

    +
  • Give a short description of the nature of the problem and the eventual numerical methods you have used.
  • +
  • Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.
  • +
  • Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.
  • +
  • If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.
  • +
  • Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.
  • +
  • Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.
  • +
  • Try to give an interpretation of you results in your answers to the problems.
  • +
  • Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.
  • +
  • Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.
  • +
+ +

Format for electronic delivery of report and programs

+ +

+The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +

    +
  • Use Canvas to hand in your projects, log in at https://www.uio.no/english/services/it/education/canvas/ with your normal UiO username and password.
  • +
  • Upload only the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.
  • +
  • In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.
  • +
+ +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +

Software and needed installations

+ +

+If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as + +

    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+ +For Python3, replace pip with pip3. + +

+See below for a discussion of tensorflow and scikit-learn. + +

+For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example + +

    +
  1. brew install python3
  2. +
+ +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as + +
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+ +etc etc. + +

+If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely + +

    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+ +Popular software packages written in Python for ML are + + + +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + +

+ +

+ +

    +
  • 1
  • +
+ + +
+ + + + + + + +
+ © 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/src/Projects/2021/Project1/Project1-bs.html b/doc/src/Projects/2021/Project1/Project1-bs.html new file mode 100644 index 000000000..af8e05322 --- /dev/null +++ b/doc/src/Projects/2021/Project1/Project1-bs.html @@ -0,0 +1,633 @@ + + + + + + + + +Project 1 on Machine Learning, deadline October 4, 2020 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

 

 

 

+ + + + + + +
+

Project 1 on Machine Learning, deadline October 4, 2020

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

University of Oslo, Norway
+
+

+

Sep 10, 2021

+
+

+

+ +

Regression analysis and resampling methods

+ +

+The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is 100 points. Each subtask has its own final score. + +

+We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +

+The Franke function, which is a weighted sum of four exponentials reads as follows +$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

+The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for \( x \) and \( y \), or as in +the example below just a set of fixed +values for \( x \) and \( y \) with a given step +size. We will fit a +function (for example a polynomial) of \( x \) and \( y \). Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) \( \lambda \). + +

+Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +

+The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +

+ + +

from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+ +

Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)

+ +

+We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( \cal{N}(0,1) \). + +

+Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. Find the +confidence intervals of the parameters (estimators) \( \beta \) by computing their +variances, evaluate the Mean Squared error (MSE) + +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

+and the \( R^2 \) score function. If \( \tilde{\hat{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as + +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

+where we have defined the mean value of \( \hat{y} \) as + +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

+Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. + +

+It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + +

Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)

+ +

+Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique. + +

+With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +

+Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +

+With this result we move on to the bias-variance trade-off analysis. + +

+Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). + +

+Let us assume that the true data is generated from a noisy model + +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

+Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). + +

+In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). + +

+The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function + +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +Here the expected value \( \mathbb{E} \) is the sample value. + +

+Show that you can rewrite this as +$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

+Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +

+Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +

+Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. + +

+Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \). + +

Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)

+ +

+The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +

+Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. + +

+Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. + +

Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)

+ +

+Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on \( \lambda \). + +

+Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. + +

Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))

+ +

+This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. + +

Exercise 6: Analysis of real data (score 30 points)

+ +

+With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, + +

+In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using + +

+ + +

scipy.misc.imread
+
+

+Here is a simple part of a Python code which reads and plots the data +from such files + +

+ + +

import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+

+If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +

+Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples. + +

+Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +

+At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+ +

Introduction to numerical projects

+ +

+Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +

    +
  • Give a short description of the nature of the problem and the eventual numerical methods you have used.
  • +
  • Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.
  • +
  • Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.
  • +
  • If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.
  • +
  • Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.
  • +
  • Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.
  • +
  • Try to give an interpretation of you results in your answers to the problems.
  • +
  • Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.
  • +
  • Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.
  • +
+ +

Format for electronic delivery of report and programs

+ +

+The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +

    +
  • Use Canvas to hand in your projects, log in at https://www.uio.no/english/services/it/education/canvas/ with your normal UiO username and password.
  • +
  • Upload only the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.
  • +
  • In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.
  • +
+ +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +

Software and needed installations

+ +

+If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as + +

    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+ +For Python3, replace pip with pip3. + +

+See below for a discussion of tensorflow and scikit-learn. + +

+For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example + +

    +
  1. brew install python3
  2. +
+ +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as + +
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+ +etc etc. + +

+If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely + +

    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+ +Popular software packages written in Python for ML are + + + +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + +

+ +

+ +

    +
  • 1
  • +
+ + +
+ + + + + + + +
+ © 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/src/Projects/2021/Project1/Project1.do.txt b/doc/src/Projects/2021/Project1/Project1.do.txt new file mode 100644 index 000000000..5acfcc61e --- /dev/null +++ b/doc/src/Projects/2021/Project1/Project1.do.txt @@ -0,0 +1,413 @@ +TITLE: Project 1 on Machine Learning, deadline October 4, 2020 +AUTHOR: "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html" {copyright, 1999-present|CC BY-NC} at University of Oslo, Norway +DATE: today + + + +===== Regression analysis and resampling methods ===== + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is _100_ points. Each subtask has its own final score. + + +We will first study how to fit polynomials to a specific +two-dimensional function called "Franke's +function":"http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf". This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + + +The Franke function, which is a weighted sum of four exponentials reads as follows +!bt +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +!et + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for $x$ and $y$, or as in +the example below just a set of fixed +values for $x$ and $y$ with a given step +size. We will fit a +function (for example a polynomial) of $x$ and $y$. Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +!bc pycod +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + +!ec + + +=== Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points) === + +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $\cal{N}(0,1)$. + +*Write your own code* (using either a matrix inversion or a singular +value decomposition from e.g., _numpy_ ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in $x$ and $y$ up to fifth order. Find the +"confidence intervals":"https://en.wikipedia.org/wiki/Confidence_interval" of the parameters (estimators) $\beta$ by computing their +variances, evaluate the Mean Squared error (MSE) + +!bt +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] +!et + +and the $R^2$ score function. If $\tilde{\hat{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +!bt +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] +!et + +where we have defined the mean value of $\hat{y}$ as + +!bt +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] +!et + +Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library _Scikit-Learn_ (make +sure you have installed it). This function is called +$train\_test\_split$. _You should present a critical discussion of why and how you have scaled or not scaled the data_. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + + + + + + +=== Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points) === + +Our aim here is to study the bias-variance trade-off by implementing the _bootstrap_ resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +!bt +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] +!et + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +!bt +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +!et +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +!bt +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] +!et + +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the _bootstrap_ resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + + +=== Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points) === + + +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +_Scikit-Learn_ if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your _bootstrap_ code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by _Scikit-Learn_. + + +=== Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points) === + +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the _bootstrap_ resampling method. Comment your results. + +=== Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points)) === + +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of _Scikit-Learn_ (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the _bootstrap_ resampling technique and an analysis of the mean squared error using cross-validation. + +=== Exercise 6: Analysis of real data (score 30 points) === + +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +URL:"https://earthexplorer.usgs.gov/", + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be _SRTM +Arc-Second Global_ and download the data as a _GeoTIF_ file. The +files are then stored in *tif* format which can be imported into a +Python program using + +!bc pycod +scipy.misc.imread +!ec + +Here is a simple part of a Python code which reads and plots the data +from such files + +!bc pycod +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() +!ec + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example "kaggle.com":"https://www.kaggle.com/datasets" for examples. + + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + + + + +===== Background literature ===== + +o For a discussion and derivation of the variances and mean squared errors using linear regression, see the "Lecture notes on ridge regression by Wessel N. van Wieringen":"https://arxiv.org/abs/1509.09169" + +o The textbook of "Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer":"https://www.springer.com/gp/book/9780387848570", chapters 3 and 7 are the most relevant ones for the analysis here. + +===== Introduction to numerical projects ===== + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + + + * Give a short description of the nature of the problem and the eventual numerical methods you have used. + + * Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + * Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + * If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + * Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + * Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + * Try to give an interpretation of you results in your answers to the problems. + + * Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + * Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. + + + + + +===== Format for electronic delivery of report and programs ===== + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + + * Use Canvas to hand in your projects, log in at URL:"https://www.uio.no/english/services/it/education/canvas/" with your normal UiO username and password. + + * Upload _only_ the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + * In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. + + +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + + + +===== Software and needed installations ===== + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via _pip_ as +o pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +For Python3, replace _pip_ with _pip3_. + +See below for a discussion of _tensorflow_ and _scikit-learn_. + +For OSX users we recommend also, after having installed Xcode, to install _brew_. Brew allows +for a seamless installation of additional software via for example +o brew install python3 + +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use _pip_ as well and simply install Python as +o sudo apt-get install python3 (or python for python2.7) +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +o "Anaconda":"https://docs.anaconda.com/" Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system _conda_ +o "Enthought canopy":"https://www.enthought.com/product/canopy/" is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. + +Popular software packages written in Python for ML are + +* "Scikit-learn":"http://scikit-learn.org/stable/", +* "Tensorflow":"https://www.tensorflow.org/", +* "PyTorch":"http://pytorch.org/" and +* "Keras":"https://keras.io/". +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + + + diff --git a/doc/src/Projects/2021/Project1/Project1.html b/doc/src/Projects/2021/Project1/Project1.html new file mode 100644 index 000000000..45c385855 --- /dev/null +++ b/doc/src/Projects/2021/Project1/Project1.html @@ -0,0 +1,573 @@ + + + + + + + + +Project 1 on Machine Learning, deadline October 4, 2020 + + + + + + + + + + + + + + + + + + + + + + + +

Project 1 on Machine Learning, deadline October 4, 2020

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

University of Oslo, Norway
+
+

+

Sep 10, 2021

+
+ +

Regression analysis and resampling methods

+ +

+The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is 100 points. Each subtask has its own final score. + +

+We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +

+The Franke function, which is a weighted sum of four exponentials reads as follows +$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

+The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for \( x \) and \( y \), or as in +the example below just a set of fixed +values for \( x \) and \( y \) with a given step +size. We will fit a +function (for example a polynomial) of \( x \) and \( y \). Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) \( \lambda \). + +

+Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +

+The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +

+ + +

from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+ +

Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)

+ +

+We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( \cal{N}(0,1) \). + +

+Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. Find the +confidence intervals of the parameters (estimators) \( \beta \) by computing their +variances, evaluate the Mean Squared error (MSE) + +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

+and the \( R^2 \) score function. If \( \tilde{\hat{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as + +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

+where we have defined the mean value of \( \hat{y} \) as + +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

+Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. + +

+It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + +

Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)

+ +

+Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique. + +

+With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +

+Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +

+With this result we move on to the bias-variance trade-off analysis. + +

+Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). + +

+Let us assume that the true data is generated from a noisy model + +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

+Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). + +

+In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). + +

+The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function + +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +Here the expected value \( \mathbb{E} \) is the sample value. + +

+Show that you can rewrite this as +$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

+Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +

+Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +

+Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. + +

+Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \). + +

Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)

+ +

+The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +

+Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. + +

+Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. + +

Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)

+ +

+Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on \( \lambda \). + +

+Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. + +

Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))

+ +

+This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. + +

Exercise 6: Analysis of real data (score 30 points)

+ +

+With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, + +

+In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using + +

+ + +

scipy.misc.imread
+
+

+Here is a simple part of a Python code which reads and plots the data +from such files + +

+ + +

import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+

+If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +

+Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples. + +

+Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +

+At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+ +

Introduction to numerical projects

+ +

+Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +

    +
  • Give a short description of the nature of the problem and the eventual numerical methods you have used.
  • +
  • Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.
  • +
  • Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.
  • +
  • If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.
  • +
  • Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.
  • +
  • Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.
  • +
  • Try to give an interpretation of you results in your answers to the problems.
  • +
  • Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.
  • +
  • Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.
  • +
+ +

Format for electronic delivery of report and programs

+ +

+The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +

    +
  • Use Canvas to hand in your projects, log in at https://www.uio.no/english/services/it/education/canvas/ with your normal UiO username and password.
  • +
  • Upload only the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.
  • +
  • In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.
  • +
+ +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +

Software and needed installations

+ +

+If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as + +

    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+ +For Python3, replace pip with pip3. + +

+See below for a discussion of tensorflow and scikit-learn. + +

+For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example + +

    +
  1. brew install python3
  2. +
+ +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as + +
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+ +etc etc. + +

+If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely + +

    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+ +Popular software packages written in Python for ML are + + + +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + +

+ + + + +

+ © 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/src/Projects/2021/Project1/Project1.ipynb b/doc/src/Projects/2021/Project1/Project1.ipynb new file mode 100644 index 000000000..eddf25d11 --- /dev/null +++ b/doc/src/Projects/2021/Project1/Project1.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Project 1 on Machine Learning, deadline October 4, 2020\n", + "\n", + " \n", + "**[Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html)**, University of Oslo, Norway\n", + "\n", + "Date: **Sep 10, 2021**\n", + "\n", + "Copyright 1999-2021, [Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html). Released under CC Attribution-NonCommercial 4.0 license\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Regression analysis and resampling methods\n", + "\n", + "The main aim of this project is to study in more detail various\n", + "regression methods, including the Ordinary Least Squares (OLS) method,\n", + "The total score is **100** points. Each subtask has its own final score.\n", + "\n", + "\n", + "We will first study how to fit polynomials to a specific\n", + "two-dimensional function called [Franke's\n", + "function](http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf). This\n", + "is a function which has been widely used when testing various\n", + "interpolation and fitting algorithms. Furthermore, after having\n", + "established the model and the method, we will employ resamling\n", + "techniques such as cross-validation and/or bootstrap in order to perform a\n", + "proper assessment of our models. We will also study in detail the\n", + "so-called Bias-Variance trade off.\n", + "\n", + "\n", + "The Franke function, which is a weighted sum of four exponentials reads as follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "f(x,y) &= \\frac{3}{4}\\exp{\\left(-\\frac{(9x-2)^2}{4} - \\frac{(9y-2)^2}{4}\\right)}+\\frac{3}{4}\\exp{\\left(-\\frac{(9x+1)^2}{49}- \\frac{(9y+1)}{10}\\right)} \\\\\n", + "&+\\frac{1}{2}\\exp{\\left(-\\frac{(9x-7)^2}{4} - \\frac{(9y-3)^2}{4}\\right)} -\\frac{1}{5}\\exp{\\left(-(9x-4)^2 - (9y-7)^2\\right) }.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function will be defined for $x,y\\in [0,1]$. Our first step will\n", + "be to perform an OLS regression analysis of this function, trying out\n", + "a polynomial fit with an $x$ and $y$ dependence of the form $[x, y,\n", + "x^2, y^2, xy, \\dots]$. We will also include bootstrap first as\n", + "a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform\n", + "distribution to set up the arrays of values for $x$ and $y$, or as in\n", + "the example below just a set of fixed \n", + "values for $x$ and $y$ with a given step\n", + "size. We will fit a\n", + "function (for example a polynomial) of $x$ and $y$. Thereafter we\n", + "will repeat much of the same procedure using the Ridge and Lasso\n", + "regression methods, introducing thus a dependence on the bias\n", + "(penalty) $\\lambda$.\n", + "\n", + "Finally we are going to use (real) digital terrain data and try to\n", + "reproduce these data using the same methods. We will also try to go\n", + "beyond the second-order polynomials metioned above and explore \n", + "which polynomial fits the data best.\n", + "\n", + "\n", + "The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm\n", + "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n", + "import numpy as np\n", + "from random import random, seed\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.gca(projection='3d')\n", + "\n", + "# Make data.\n", + "x = np.arange(0, 1, 0.05)\n", + "y = np.arange(0, 1, 0.05)\n", + "x, y = np.meshgrid(x,y)\n", + "\n", + "\n", + "def FrankeFunction(x,y):\n", + " term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n", + " term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n", + " term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n", + " term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n", + " return term1 + term2 + term3 + term4\n", + "\n", + "\n", + "z = FrankeFunction(x, y)\n", + "\n", + "# Plot the surface.\n", + "surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,\n", + " linewidth=0, antialiased=False)\n", + "\n", + "# Customize the z axis.\n", + "ax.set_zlim(-0.10, 1.40)\n", + "ax.zaxis.set_major_locator(LinearLocator(10))\n", + "ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n", + "\n", + "# Add a color bar which maps values to colors.\n", + "fig.colorbar(surf, shrink=0.5, aspect=5)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points)\n", + "\n", + "We will generate our own dataset for a function\n", + "$\\mathrm{FrankeFunction}(x,y)$ with $x,y \\in [0,1]$. The function\n", + "$f(x,y)$ is the Franke function. You should explore also the addition\n", + "of an added stochastic noise to this function using the normal\n", + "distribution $\\cal{N}(0,1)$.\n", + "\n", + "*Write your own code* (using either a matrix inversion or a singular\n", + "value decomposition from e.g., **numpy** ) or use your code from\n", + "homeworks 1 and 2 and perform a standard least square regression\n", + "analysis using polynomials in $x$ and $y$ up to fifth order. Find the\n", + "[confidence intervals](https://en.wikipedia.org/wiki/Confidence_interval) of the parameters (estimators) $\\beta$ by computing their\n", + "variances, evaluate the Mean Squared error (MSE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "MSE(\\hat{y},\\hat{\\tilde{y}}) = \\frac{1}{n}\n", + "\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the $R^2$ score function. If $\\tilde{\\hat{y}}_i$ is the predicted\n", + "value of the $i-th$ sample and $y_i$ is the corresponding true value,\n", + "then the score $R^2$ is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "R^2(\\hat{y}, \\tilde{\\hat{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have defined the mean value of $\\hat{y}$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Your code has to include a scaling of the data (for example by\n", + "subtracting the mean value), and\n", + "a split of the data in training and test data. For this part you can\n", + "either write your own code or use for example the function for\n", + "splitting training data provided by the library **Scikit-Learn** (make\n", + "sure you have installed it). This function is called\n", + "$train\\_test\\_split$. **You should present a critical discussion of why and how you have scaled or not scaled the data**.\n", + "\n", + "It is normal in essentially all Machine Learning studies to split the\n", + "data in a training set and a test set (eventually also an additional\n", + "validation set). 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.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "### Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points)\n", + "\n", + "Our aim here is to study the bias-variance trade-off by implementing the **bootstrap** resampling technique.\n", + "\n", + "With a code which does OLS and includes resampling techniques, \n", + "we will now discuss the bias-variance trade-off in the context of\n", + "continuous predictions such as regression. However, many of the\n", + "intuitions and ideas discussed here also carry over to classification\n", + "tasks and basically all Machine Learning algorithms. \n", + "\n", + "Before you perform an analysis of the bias-variance trade-off on your test data, make\n", + "first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and\n", + "Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to \n", + "indicate possible regions of low/high bias and variance. You will most likely not get an\n", + "equally smooth curve!\n", + "\n", + "With this result we move on to the bias-variance trade-off analysis.\n", + "\n", + "Consider a\n", + "dataset $\\mathcal{L}$ consisting of the data\n", + "$\\mathbf{X}_\\mathcal{L}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$.\n", + "\n", + "Let us assume that the true data is generated from a noisy model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $\\epsilon$ is normally distributed with mean zero and standard\n", + "deviation $\\sigma^2$.\n", + "\n", + "In our derivation of the ordinary least squares method we defined then\n", + "an approximation to the function $f$ in terms of the parameters\n", + "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", + "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$.\n", + "\n", + "The parameters $\\boldsymbol{\\beta}$ are in turn found by optimizing the means\n", + "squared error via the so-called cost function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the expected value $\\mathbb{E}$ is the sample value. \n", + "\n", + "Show that you can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Explain what the terms mean, which one is the bias and which one is\n", + "the variance and discuss their interpretations.\n", + "\n", + "Perform then a bias-variance analysis of the Franke function by\n", + "studying the MSE value as function of the complexity of your model.\n", + "\n", + "Discuss the bias and variance trade-off as function\n", + "of your model complexity (the degree of the polynomial) and the number\n", + "of data points, and possibly also your training and test data using the **bootstrap** resampling method.\n", + "\n", + "Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$.\n", + "\n", + "\n", + "### Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points)\n", + "\n", + "The aim here is to write your own code for another widely popular\n", + "resampling technique, the so-called cross-validation method. Again,\n", + "before you start with cross-validation approach, you should scale your\n", + "data.\n", + "\n", + "Implement the $k$-fold cross-validation algorithm (write your own\n", + "code) and evaluate again the MSE function resulting\n", + "from the test folds. You can compare your own code with that from\n", + "**Scikit-Learn** if needed. \n", + "\n", + "Compare the MSE you get from your cross-validation code with the one\n", + "you got from your **bootstrap** code. Comment your results. Try $5-10$\n", + "folds. You can also compare your own cross-validation code with the\n", + "one provided by **Scikit-Learn**.\n", + "\n", + "\n", + "### Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points)\n", + "\n", + "Write your own code for the Ridge method, either using matrix\n", + "inversion or the singular value decomposition as done in the previous\n", + "exercise. Perform the same bootstrap analysis as in the\n", + "Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\\lambda$. Compare and\n", + "analyze your results with those obtained in exercises 1-3. Study the\n", + "dependence on $\\lambda$.\n", + "\n", + "Study also the bias-variance trade-off as function of various values of\n", + "the parameter $\\lambda$. For the bias-variance trade-off, use the **bootstrap** resampling method. Comment your results. \n", + "\n", + "### Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points))\n", + "\n", + "This exercise is essentially a repeat of the previous two ones, but now\n", + "with Lasso regression. Write either your own code (difficult and optional) or, in this case,\n", + "you can also use the functionalities of **Scikit-Learn** (recommended). \n", + "Give a\n", + "critical discussion of the three methods and a judgement of which\n", + "model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the **bootstrap** resampling technique and an analysis of the mean squared error using cross-validation. \n", + "\n", + "### Exercise 6: Analysis of real data (score 30 points)\n", + "\n", + "With our codes functioning and having been tested properly on a\n", + "simpler function we are now ready to look at real data. We will\n", + "essentially repeat in part g) what was done in parts a-e). However, we\n", + "need first to download the data and prepare properly the inputs to our\n", + "codes. We are going to download digital terrain data from the website\n", + ",\n", + "\n", + "In order to obtain data for a specific region, you need to register as\n", + "a user (free) at this website and then decide upon which area you want\n", + "to fetch the digital terrain data from. In order to be able to read\n", + "the data properly, you need to specify that the format should be **SRTM\n", + "Arc-Second Global** and download the data as a **GeoTIF** file. The\n", + "files are then stored in *tif* format which can be imported into a\n", + "Python program using" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "scipy.misc.imread" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a simple part of a Python code which reads and plots the data\n", + "from such files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from imageio import imread\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "from matplotlib import cm\n", + "\n", + "# Load the terrain\n", + "terrain1 = imread('SRTM_data_Norway_1.tif')\n", + "# Show the terrain\n", + "plt.figure()\n", + "plt.title('Terrain over Norway 1')\n", + "plt.imshow(terrain1, cmap='gray')\n", + "plt.xlabel('X')\n", + "plt.ylabel('Y')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you should have problems in downloading the digital terrain data,\n", + "we provide two examples under the data folder of project 1. One is\n", + "from a region close to Stavanger in Norway and the other Møsvatn\n", + "Austfjell, again in Norway.\n", + "Feel free to produce your own terrain data.\n", + "\n", + "\n", + "Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example [kaggle.com](https://www.kaggle.com/datasets) for examples.\n", + "\n", + "\n", + "Our final part deals with the parameterization of your digital terrain\n", + "data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial\n", + "approximation and cross-validation as resampling technique to evaluate which\n", + "model fits the data best.\n", + "\n", + "At the end, you should present a critical evaluation of your results\n", + "and discuss the applicability of these regression methods to the type\n", + "of data presented here (either the terrain data we propose or other data sets).\n", + "\n", + "\n", + "\n", + "\n", + "## Background literature\n", + "\n", + "1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the [Lecture notes on ridge regression by Wessel N. van Wieringen](https://arxiv.org/abs/1509.09169)\n", + "\n", + "2. The textbook of [Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer](https://www.springer.com/gp/book/9780387848570), chapters 3 and 7 are the most relevant ones for the analysis here. \n", + "\n", + "## Introduction to numerical projects\n", + "\n", + "Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.\n", + "\n", + "\n", + " * Give a short description of the nature of the problem and the eventual numerical methods you have used.\n", + "\n", + " * Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.\n", + "\n", + " * Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.\n", + "\n", + " * If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.\n", + "\n", + " * Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.\n", + "\n", + " * Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.\n", + "\n", + " * Try to give an interpretation of you results in your answers to the problems.\n", + "\n", + " * Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.\n", + "\n", + " * Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.\n", + "\n", + "## Format for electronic delivery of report and programs\n", + "\n", + "The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:\n", + "\n", + " * Use Canvas to hand in your projects, log in at with your normal UiO username and password.\n", + "\n", + " * Upload **only** the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.\n", + "\n", + " * In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.\n", + "\n", + "Finally, \n", + "we encourage you to collaborate. Optimal working groups consist of \n", + "2-3 students. You can then hand in a common report. \n", + "\n", + "\n", + "\n", + "## Software and needed installations\n", + "\n", + "If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, \n", + "we recommend that you install the following Python packages via **pip** as\n", + "1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow\n", + "\n", + "For Python3, replace **pip** with **pip3**.\n", + "\n", + "See below for a discussion of **tensorflow** and **scikit-learn**. \n", + "\n", + "For OSX users we recommend also, after having installed Xcode, to install **brew**. Brew allows \n", + "for a seamless installation of additional software via for example\n", + "1. brew install python3\n", + "\n", + "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution\n", + "you can use **pip** as well and simply install Python as \n", + "1. sudo apt-get install python3 (or python for python2.7)\n", + "\n", + "etc etc. \n", + "\n", + "If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely\n", + "1. [Anaconda](https://docs.anaconda.com/) Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system **conda**\n", + "\n", + "2. [Enthought canopy](https://www.enthought.com/product/canopy/) is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.\n", + "\n", + "Popular software packages written in Python for ML are\n", + "\n", + "* [Scikit-learn](http://scikit-learn.org/stable/), \n", + "\n", + "* [Tensorflow](https://www.tensorflow.org/),\n", + "\n", + "* [PyTorch](http://pytorch.org/) and \n", + "\n", + "* [Keras](https://keras.io/).\n", + "\n", + "These are all freely available at their respective GitHub sites. They \n", + "encompass communities of developers in the thousands or more. And the number\n", + "of code developers and contributors keeps increasing." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/Projects/2021/Project1/Project1.p.tex b/doc/src/Projects/2021/Project1/Project1.p.tex new file mode 100644 index 000000000..8e37ea274 --- /dev/null +++ b/doc/src/Projects/2021/Project1/Project1.p.tex @@ -0,0 +1,583 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/hplgit/doconce/) +%% +%% +% #ifdef PTEX2TEX_EXPLANATION +%% +%% The file follows the ptex2tex extended LaTeX format, see +%% ptex2tex: https://code.google.com/p/ptex2tex/ +%% +%% Run +%% ptex2tex myfile +%% or +%% doconce ptex2tex myfile +%% +%% to turn myfile.p.tex into an ordinary LaTeX file myfile.tex. +%% (The ptex2tex program: https://code.google.com/p/ptex2tex) +%% Many preprocess options can be added to ptex2tex or doconce ptex2tex +%% +%% ptex2tex -DMINTED myfile +%% doconce ptex2tex myfile envir=minted +%% +%% ptex2tex will typeset code environments according to a global or local +%% .ptex2tex.cfg configure file. doconce ptex2tex will typeset code +%% according to options on the command line (just type doconce ptex2tex to +%% see examples). If doconce ptex2tex has envir=minted, it enables the +%% minted style without needing -DMINTED. +% #endif + +% #define PREAMBLE + +% #ifdef PREAMBLE +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{ptex2tex} +% #ifdef MINTED +\usepackage{minted} +\usemintedstyle{default} +% #endif + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% --- fancyhdr package for fancy headers --- +\usepackage{fancyhdr} +\fancyhf{} % sets both header and footer to nothing +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[LE,RO]{\thepage} +% Ensure copyright on titlepage (article style) and chapter pages (book style) +\fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} +% \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} +% Ensure copyright on titlepages with \thispagestyle{empty} +\fancypagestyle{empty}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} + \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} + +\pagestyle{fancy} + + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE +% #endif + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 4, 2020 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 10, 2021 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is \textbf{100} points. Each subtask has its own final score. + + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for $x$ and $y$, or as in +the example below just a set of fixed +values for $x$ and $y$ with a given step +size. We will fit a +function (for example a polynomial) of $x$ and $y$. Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +\bpycod +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + +\epycod + + +\paragraph{Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points).} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $\cal{N}(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in $x$ and $y$ up to fifth order. Find the +\href{{https://en.wikipedia.org/wiki/Confidence_interval}}{confidence intervals} of the parameters (estimators) $\beta$ by computing their +variances, evaluate the Mean Squared error (MSE) + +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\hat{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\hat{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + + + + + + +\paragraph{Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points).} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] + +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + + +\paragraph{Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points).} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + + +\paragraph{Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points).} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points)).} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Exercise 6: Analysis of real data (score 30 points).} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + +\bpycod +scipy.misc.imread +\epycod + +Here is a simple part of a Python code which reads and plots the data +from such files + +\bpycod +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() +\epycod + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + + + + +\subsection{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + + + +\subsection{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + + + + +% ------------------- end of main content --------------- + +% #ifdef PREAMBLE +\end{document} +% #endif + diff --git a/doc/src/Projects/2021/Project1/Project1.pdf b/doc/src/Projects/2021/Project1/Project1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d70acd442bb5c51248611f17518d76651351909 GIT binary patch literal 278612 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 z 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

V4@5c`9;!iFJkD-l6M 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 S!pX_a$^u7DE~X$3_rC!ADaca* literal 0 HcmV?d00001 diff --git a/doc/src/Projects/2021/Project1/Project1.tex b/doc/src/Projects/2021/Project1/Project1.tex new file mode 100644 index 000000000..63acd18f6 --- /dev/null +++ b/doc/src/Projects/2021/Project1/Project1.tex @@ -0,0 +1,551 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/hplgit/doconce/) +%% +%% + + +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{fancyvrb} % packages needed for verbatim environments + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% --- fancyhdr package for fancy headers --- +\usepackage{fancyhdr} +\fancyhf{} % sets both header and footer to nothing +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[LE,RO]{\thepage} +% Ensure copyright on titlepage (article style) and chapter pages (book style) +\fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} +% \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} +% Ensure copyright on titlepages with \thispagestyle{empty} +\fancypagestyle{empty}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2021, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} + \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} + +\pagestyle{fancy} + + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 4, 2020 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 10, 2021 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection*{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +The total score is \textbf{100} points. Each subtask has its own final score. + + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as +a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform +distribution to set up the arrays of values for $x$ and $y$, or as in +the example below just a set of fixed +values for $x$ and $y$ with a given step +size. We will fit a +function (for example a polynomial) of $x$ and $y$. Thereafter we +will repeat much of the same procedure using the Ridge and Lasso +regression methods, introducing thus a dependence on the bias +(penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) +\begin{verbatim} +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + +\end{verbatim} + + +\paragraph{Exercise 1: Ordinary Least Square (OLS) on the Franke function (score 10 points).} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $\cal{N}(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) or use your code from +homeworks 1 and 2 and perform a standard least square regression +analysis using polynomials in $x$ and $y$ up to fifth order. Find the +\href{{https://en.wikipedia.org/wiki/Confidence_interval}}{confidence intervals} of the parameters (estimators) $\beta$ by computing their +variances, evaluate the Mean Squared error (MSE) + +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\hat{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\hat{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Your code has to include a scaling of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this part you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). 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. + + + + + + +\paragraph{Exercise 2: Bias-variance trade-off and resampling techniques (score 15 points).} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] + +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + + +\paragraph{Exercise 3: Cross-validation as resampling techniques, adding more complexity (score 15 points).} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + + +\paragraph{Exercise 4: Ridge Regression on the Franke function with resampling (score 20 points).} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +Exercise 2 (for the same polynomials) and the cross-validation part in part c) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in exercises 1-3. Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Exercise 5: Lasso Regression on the Franke function with resampling (Score 10 points)).} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Exercise 6: Analysis of real data (score 30 points).} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in part g) what was done in parts a-e). However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + +\begin{verbatim} +scipy.misc.imread +\end{verbatim} + +Here is a simple part of a Python code which reads and plots the data +from such files + +\begin{verbatim} +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() +\end{verbatim} + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + + + + +\subsection*{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection*{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection*{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + + + +\subsection*{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + + + + +% ------------------- end of main content --------------- + +\end{document} + diff --git a/doc/src/Projects/2021/Project1/README.txt b/doc/src/Projects/2021/Project1/README.txt new file mode 100644 index 000000000..08cc9f17c --- /dev/null +++ b/doc/src/Projects/2021/Project1/README.txt @@ -0,0 +1,2 @@ +This IPython notebook Project1.ipynb does not require any additional +programs. diff --git a/doc/src/Projects/2021/Project1/clean.sh b/doc/src/Projects/2021/Project1/clean.sh new file mode 100755 index 000000000..2e5da2c72 --- /dev/null +++ b/doc/src/Projects/2021/Project1/clean.sh @@ -0,0 +1,3 @@ +#!/bin/sh +doconce clean +rm -rf *.pdf *.tex ipynb*.tar.gz *.html ._*.html *~ reveal.js Trash README.txt diff --git a/doc/src/Projects/2021/Project1/ipynb-Project1-src.tar.gz b/doc/src/Projects/2021/Project1/ipynb-Project1-src.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..17ccd89ef6786e629f6ac20e898ca7aac7240cc0 GIT binary patch literal 193 zcmV;y06za8iwFP%2RmT^1MSaC3c@fD2H>uHia9|^nlxPtcHu%O;ssKh+Ekm=Bn5kW z`v6@jZi)!`Hb27*!^|PuZ1-8@?k-pjLWofcQ>HAL6U9qC!#D*@F=h-AiU=S~l9&X5 z);sB?w~m|fl(ue!vO>L^8^@~Z!=B|8c;=rt*3!Z*A6%^!DD6a{^#yXH8*y?tlHH&R vD7COt6O6d^(g@&c0A7~TNv-%b?2JAe-r6Yq^*f&DdES>E@HC=s00;m8v<_Ce literal 0 HcmV?d00001 diff --git a/doc/src/Projects/2021/Project1/make.sh b/doc/src/Projects/2021/Project1/make.sh new file mode 100755 index 000000000..3b48fe3c7 --- /dev/null +++ b/doc/src/Projects/2021/Project1/make.sh @@ -0,0 +1,87 @@ +#!/bin/sh +set -x + +function system { + "$@" + if [ $? -ne 0 ]; then + echo "make.sh: unsuccessful command $@" + echo "abort!" + exit 1 + fi +} + +if [ $# -eq 0 ]; then +echo 'bash make.sh slides1|slides2' +exit 1 +fi + +name=$1 +rm -f *.tar.gz + +opt="--encoding=utf-8" +opt= + +rm -f *.aux + + + +# Plain HTML documents +html=${name} +system doconce format html $name --pygments_html_style=default --html_style=bloodish --html_links_in_new_window --html_output=$html $opt +system doconce split_html $html.html --method=space10 + +# Bootstrap style +html=${name}-bs +system doconce format html $name --html_style=bootstrap --pygments_html_style=default --html_admon=bootstrap_panel --html_output=$html $opt +system doconce split_html $html.html --method=split --pagination --nav_button=bottom + +# IPython notebook +system doconce format ipynb $name $opt + + +# Ordinary plain LaTeX document +system doconce format pdflatex $name --print_latex_style=trac --latex_admon=paragraph $opt +system doconce ptex2tex $name envir=verbatim +# Add special packages +doconce subst "% Add user's preamble" "\g<1>\n\\usepackage{simplewick}" $name.tex +doconce replace 'section{' 'section*{' $name.tex +pdflatex -shell-escape $name +pdflatex -shell-escape $name +mv -f $name.pdf ${name}.pdf +cp $name.tex ${name}.tex + +# Publish +dest=../../../../Projects/2021 +if [ ! -d $dest/$name ]; then +mkdir $dest/$name +mkdir $dest/$name/pdf +mkdir $dest/$name/html +mkdir $dest/$name/ipynb +fi +cp ${name}*.tex $dest/$name/pdf +cp ${name}*.pdf $dest/$name/pdf +cp -r ${name}*.html ._${name}*.html $dest/$name/html + +# Figures: cannot just copy link, need to physically copy the files +if [ -d fig-${name} ]; then +if [ ! -d $dest/$name/html/fig-$name ]; then +mkdir $dest/$name/html/fig-$name +fi +cp -r fig-${name}/* $dest/$name/html/fig-$name +fi + +cp ${name}.ipynb $dest/$name/ipynb +ipynb_tarfile=ipynb-${name}-src.tar.gz +if [ ! -f ${ipynb_tarfile} ]; then +cat > README.txt <