From c51c668c16f4d241d8d576abbc8f5deed12d3358 Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Tue, 8 Oct 2024 06:16:26 +0200 Subject: [PATCH] update p2 --- doc/LectureNotes/project2.ipynb | 351 ++++++++++++++ .../2024/Project2/html/._Project2-bs000.html | 402 +++++++++++++++++ .../2024/Project2/html/Project2-bs.html | 402 +++++++++++++++++ doc/Projects/2024/Project2/html/Project2.html | 427 ++++++++++++++++++ .../2024/Project2/ipynb/Project2.ipynb | 351 ++++++++++++++ .../Project2/ipynb/ipynb-Project2-src.tar.gz | Bin 0 -> 192 bytes doc/Projects/2024/Project2/pdf/Project2.p.tex | 402 +++++++++++++++++ doc/Projects/2024/Project2/pdf/Project2.pdf | Bin 0 -> 243992 bytes doc/Projects/2024/Project2/pdf/Project2.tex | 374 +++++++++++++++ .../Projects/2024/Project2/Project2.do.txt | 31 +- 10 files changed, 2726 insertions(+), 14 deletions(-) create mode 100644 doc/LectureNotes/project2.ipynb create mode 100644 doc/Projects/2024/Project2/html/._Project2-bs000.html create mode 100644 doc/Projects/2024/Project2/html/Project2-bs.html create mode 100644 doc/Projects/2024/Project2/html/Project2.html create mode 100644 doc/Projects/2024/Project2/ipynb/Project2.ipynb create mode 100644 doc/Projects/2024/Project2/ipynb/ipynb-Project2-src.tar.gz create mode 100644 doc/Projects/2024/Project2/pdf/Project2.p.tex create mode 100644 doc/Projects/2024/Project2/pdf/Project2.pdf create mode 100644 doc/Projects/2024/Project2/pdf/Project2.tex diff --git a/doc/LectureNotes/project2.ipynb b/doc/LectureNotes/project2.ipynb new file mode 100644 index 000000000..c1411ffd6 --- /dev/null +++ b/doc/LectureNotes/project2.ipynb @@ -0,0 +1,351 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5b2f9dda", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "cacbd604", + "metadata": { + "editable": true + }, + "source": [ + "# Project 2 on Machine Learning, deadline November 4 (Midnight)\n", + "**[Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html)**, Department of Physics, University of Oslo, Norway\n", + "\n", + "Date: **Oct 8, 2024**\n", + "\n", + "Copyright 1999-2024, [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" + ] + }, + { + "cell_type": "markdown", + "id": "acb32119", + "metadata": { + "editable": true + }, + "source": [ + "## Classification and Regression, from linear and logistic regression to neural networks\n", + "\n", + "The main aim of this project is to study both classification and\n", + "regression problems by developing our own feed-forward neural network\n", + "(FFNN) code. We can reuse the regression algorithms studied in project\n", + "1. We will also include logistic regression for classification\n", + "problems and write our own FFNN code for studying both regression and\n", + "classification problems. The codes developed in project 1, including\n", + "bootstrap **and/or** cross-validation as well as the computation of the\n", + "mean-squared error and/or the $R2$ or the accuracy score\n", + "(classification problems) functions can also be utilized in the\n", + "present analysis.\n", + "\n", + "The data sets that we propose here are (the default sets)\n", + "\n", + "* Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be\n", + "\n", + "a. A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so.\n", + "\n", + "* Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called [Wisconsin Breat Cancer Data](https://www.kaggle.com/uciml/breast-cancer-wisconsin-data) data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the [Machine Learning repository of the University of California at Irvine](https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29). Feel free to consult this site and the pertinent literature.\n", + "\n", + "You can find more information about this at the [Scikit-Learn site](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html) or at the [University of California at Irvine](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)). \n", + "\n", + "However, if you would like to study other data sets, feel free to\n", + "propose other sets. What we list here are mere suggestions from our\n", + "side. If you opt for another data set, consider using a set which has\n", + "been studied in the scientific literature. This makes it easier for\n", + "you to compare and analyze your results. Comparing with existing\n", + "results from the scientific literature is also an essential element of\n", + "the scientific discussion. The University of California at Irvine\n", + "with its Machine Learning repository at\n", + " is an excellent site to\n", + "look up for examples and\n", + "inspiration. [Kaggle.com](https://www.kaggle.com/) is an equally\n", + "interesting site. Feel free to explore these sites.\n", + "\n", + "We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code." + ] + }, + { + "cell_type": "markdown", + "id": "027202f0", + "metadata": { + "editable": true + }, + "source": [ + "### Part a): Write your own Stochastic Gradient Descent code, first step\n", + "\n", + "In order to get started, we will now replace in our standard ordinary\n", + "least squares (OLS) and Ridge regression codes (from project 1) the\n", + "matrix inversion algorithm with our own gradient descent (GD) and SGD\n", + "codes. You can use the Franke function or the terrain data from\n", + "project 1. **However, we recommend using a simpler function like**\n", + "$f(x)=a_0+a_1x+a_2x^2$ or higher-order one-dimensional polynomials.\n", + "You can obviously test your final codes against for example the Franke\n", + "function.\n", + "\n", + "The exercise set for week 41 should help in solving this part of the project.\n", + "\n", + "You should include in your analysis of the GD and SGD codes the following elements\n", + "1. A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient.\n", + "\n", + "2. Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient.\n", + "\n", + "3. Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient.\n", + "\n", + "4. Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD.\n", + "\n", + "5. Add RMSprop and Adam to your library of methods for tuning the learning rate.\n", + "\n", + "The lecture notes from [weeks 39 and 40 contain more\n", + "details](https://compphysics.github.io/MachineLearning/doc/pub/week39/html/week39.html) and code examples. Feel free to use these examples.\n", + "1. Replace thereafter your analytical gradient with either **Autograd** or **JAX**\n", + "\n", + "**Feel free to use codes on these methods from the lecture notes from week 39 and week 40**.\n", + "\n", + "In summary, you should \n", + "perform an analysis of the results for OLS and Ridge regression as\n", + "function of the chosen learning rates, the number of mini-batches and\n", + "epochs as well as algorithm for scaling the learning rate. You can\n", + "also compare your own results with those that can be obtained using\n", + "for example **Scikit-Learn**'s various SGD options. Discuss your\n", + "results. For Ridge regression you need now to study the results as functions of the hyper-parameter $\\lambda$ and \n", + "the learning rate $\\eta$. Discuss your results.\n", + "\n", + "You will need your SGD code for the setup of the Neural Network and\n", + "Logistic Regression codes. You will find the Python [Seaborn\n", + "package](https://seaborn.pydata.org/generated/seaborn.heatmap.html)\n", + "useful when plotting the results as function of the learning rate\n", + "$\\eta$ and the hyper-parameter $\\lambda$ when you use Ridge\n", + "regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40.\n", + "\n", + "We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at . This chapter contains many useful insights and discussions on the optimization part of machine learning." + ] + }, + { + "cell_type": "markdown", + "id": "9388fa74", + "metadata": { + "editable": true + }, + "source": [ + "### Part b): Writing your own Neural Network code\n", + "\n", + "Your aim now, and this is the central part of this project, is to\n", + "write your own Feed Forward Neural Network code implementing the back\n", + "propagation algorithm discussed in the lecture slides from [week 41](https://compphysics.github.io/MachineLearning/doc/pub/week41/ipynb/week41.ipynb) and\n", + "[week 42](https://compphysics.github.io/MachineLearning/doc/pub/week42/ipynb/week42.ipynb).\n", + "\n", + "We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the \n", + "Franke function or terrain data (or both or other data sets) from\n", + "project 1.\n", + "\n", + "Discuss again your choice of cost function.\n", + "\n", + "Write an FFNN code for regression with a flexible number of hidden\n", + "layers and nodes using the Sigmoid function as activation function for\n", + "the hidden layers. Initialize the weights using a normal\n", + "distribution. How would you initialize the biases? And which\n", + "activation function would you select for the final output layer?\n", + "\n", + "Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data.\n", + "You should test your results against a similar code using **Scikit-Learn** (see the examples in the above lecture notes from weeks 41 and 42) or **tensorflow/keras** or **Pytorch** (for Pytorch, see Raschka et al.'s text chapters 12 and 13). \n", + "\n", + "Comment your results and give a critical discussion of the results\n", + "obtained with the Linear Regression code and your own Neural Network\n", + "code. \n", + "Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and $R2$ scores.\n", + "\n", + "A useful reference on the back progagation algorithm is Nielsen's book at . It is an excellent\n", + "read." + ] + }, + { + "cell_type": "markdown", + "id": "49666354", + "metadata": { + "editable": true + }, + "source": [ + "### Part c): Testing different activation functions\n", + "\n", + "You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases." + ] + }, + { + "cell_type": "markdown", + "id": "79aacf29", + "metadata": { + "editable": true + }, + "source": [ + "### Part d): Classification analysis using neural networks\n", + "\n", + "With a well-written code it should now be easy to change the\n", + "activation function for the output layer.\n", + "\n", + "Here we will change the cost function for our neural network code\n", + "developed in parts b) and c) in order to perform a classification analysis. \n", + "\n", + "We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, $0$ or $1$ etc.\n", + "You find more information about this at the [Scikit-Learn\n", + "site](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html) or at the [University of California\n", + "at Irvine](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)). \n", + "\n", + "To measure the performance of our classification problem we use the\n", + "so-called *accuracy* score. The accuracy is as you would expect just\n", + "the number of correctly guessed targets $t_i$ divided by the total\n", + "number of targets, that is" + ] + }, + { + "cell_type": "markdown", + "id": "42e22900", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\text{Accuracy} = \\frac{\\sum_{i=1}^n I(t_i = y_i)}{n} ,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "82ae763d", + "metadata": { + "editable": true + }, + "source": [ + "where $I$ is the indicator function, $1$ if $t_i = y_i$ and $0$\n", + "otherwise if we have a binary classification problem. Here $t_i$\n", + "represents the target and $y_i$ the outputs of your FFNN code and $n$ is simply the number of targets $t_i$.\n", + "\n", + "Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter $\\lambda$ (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions. \n", + "\n", + "As stated in the introduction, it can also be useful to study other\n", + "datasets. \n", + "\n", + "Again, we strongly recommend that you compare your own neural Network\n", + "code for classification and pertinent results against a similar code using **Scikit-Learn** or **tensorflow/keras** or **pytorch**." + ] + }, + { + "cell_type": "markdown", + "id": "1d6b84d1", + "metadata": { + "editable": true + }, + "source": [ + "### Part e): Write your Logistic Regression code, final step\n", + "\n", + "Finally, we want to compare the FFNN code we have developed with\n", + "Logistic regression, that is we wish to compare our neural network\n", + "classification results with the results we can obtain with another\n", + "method.\n", + "\n", + "Define your cost function and the design matrix before you start writing your code.\n", + "Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter.\n", + "Study the results as functions of the chosen learning rates.\n", + "Add also an $l_2$ regularization parameter $\\lambda$. Compare your results with those from your FFNN code as well as those obtained using **Scikit-Learn**'s logistic regression functionality.\n", + "\n", + "The weblink here compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article." + ] + }, + { + "cell_type": "markdown", + "id": "0bce8832", + "metadata": { + "editable": true + }, + "source": [ + "### Part f) Critical evaluation of the various algorithms\n", + "\n", + "After all these glorious calculations, you should now summarize the\n", + "various algorithms and come with a critical evaluation of their pros\n", + "and cons. Which algorithm works best for the regression case and which\n", + "is best for the classification case. These codes can also be part of\n", + "your final project 3, but now applied to other data sets." + ] + }, + { + "cell_type": "markdown", + "id": "51b1b29b", + "metadata": { + "editable": true + }, + "source": [ + "## Background literature\n", + "\n", + "1. The text of Michael Nielsen is highly recommended, see Nielsen's book at . It is an excellent read.\n", + "\n", + "2. Goodfellow, Bengio and Courville, Deep Learning at . Here we recommend chapters 6, 7 and 8\n", + "\n", + "3. Raschka et al. at . Here we recommend chapters 11, 12 and 13." + ] + }, + { + "cell_type": "markdown", + "id": "7e4ffbbd", + "metadata": { + "editable": true + }, + "source": [ + "## Introduction to numerical projects\n", + "\n", + "Here follows a brief recipe and recommendation on how to write a report for each\n", + "project.\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.\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." + ] + }, + { + "cell_type": "markdown", + "id": "56112b03", + "metadata": { + "editable": true + }, + "source": [ + "## 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 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." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/doc/Projects/2024/Project2/html/._Project2-bs000.html b/doc/Projects/2024/Project2/html/._Project2-bs000.html new file mode 100644 index 000000000..545fef21a --- /dev/null +++ b/doc/Projects/2024/Project2/html/._Project2-bs000.html @@ -0,0 +1,402 @@ + + + + + + + +Project 2 on Machine Learning, deadline November 4 (Midnight) + + + + + + + + + + + + + + + + + + + + +
+

 

 

 

+ + +
+
+

Project 2 on Machine Learning, deadline November 4 (Midnight)

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+Department of Physics, University of Oslo, Norway +
+
+
+

Oct 8, 2024

+
+
+ + +
+

Classification and Regression, from linear and logistic regression to neural networks

+ +

The main aim of this project is to study both classification and +regression problems by developing our own feed-forward neural network +(FFNN) code. We can reuse the regression algorithms studied in project +1. We will also include logistic regression for classification +problems and write our own FFNN code for studying both regression and +classification problems. The codes developed in project 1, including +bootstrap and/or cross-validation as well as the computation of the +mean-squared error and/or the \( R2 \) or the accuracy score +(classification problems) functions can also be utilized in the +present analysis. +

+ +

The data sets that we propose here are (the default sets)

+ +
    +
  • Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be +
      +
    1. A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so.
    2. +
    +
  • Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called Wisconsin Breat Cancer Data data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the Machine Learning repository of the University of California at Irvine. Feel free to consult this site and the pertinent literature.
  • +
+

You can find more information about this at the Scikit-Learn site or at the University of California at Irvine.

+ +

However, if you would like to study other data sets, feel free to +propose other sets. What we list here are mere suggestions from our +side. If you opt for another data set, consider using a set which has +been studied in the scientific literature. This makes it easier for +you to compare and analyze your results. Comparing with existing +results from the scientific literature is also an essential element of +the scientific discussion. The University of California at Irvine +with its Machine Learning repository at +https://archive.ics.uci.edu/ml/index.php is an excellent site to +look up for examples and +inspiration. Kaggle.com is an equally +interesting site. Feel free to explore these sites. +

+ +

We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code.

+

Part a): Write your own Stochastic Gradient Descent code, first step

+ +

In order to get started, we will now replace in our standard ordinary +least squares (OLS) and Ridge regression codes (from project 1) the +matrix inversion algorithm with our own gradient descent (GD) and SGD +codes. You can use the Franke function or the terrain data from +project 1. However, we recommend using a simpler function like +\( f(x)=a_0+a_1x+a_2x^2 \) or higher-order one-dimensional polynomials. +You can obviously test your final codes against for example the Franke +function. +

+ +

The exercise set for week 41 should help in solving this part of the project.

+ +

You should include in your analysis of the GD and SGD codes the following elements

+
    +
  1. A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient.
  2. +
  3. Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient.
  4. +
  5. Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient.
  6. +
  7. Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD.
  8. +
  9. Add RMSprop and Adam to your library of methods for tuning the learning rate.
  10. +
+

The lecture notes from weeks 39 and 40 contain more +details and code examples. Feel free to use these examples. +

+
    +
  1. Replace thereafter your analytical gradient with either Autograd or JAX
  2. +
+Feel free to use codes on these methods from the lecture notes from week 39 and week 40. + +

In summary, you should +perform an analysis of the results for OLS and Ridge regression as +function of the chosen learning rates, the number of mini-batches and +epochs as well as algorithm for scaling the learning rate. You can +also compare your own results with those that can be obtained using +for example Scikit-Learn's various SGD options. Discuss your +results. For Ridge regression you need now to study the results as functions of the hyper-parameter \( \lambda \) and +the learning rate \( \eta \). Discuss your results. +

+ +

You will need your SGD code for the setup of the Neural Network and +Logistic Regression codes. You will find the Python Seaborn +package +useful when plotting the results as function of the learning rate +\( \eta \) and the hyper-parameter \( \lambda \) when you use Ridge +regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40. +

+ +

We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at https://www.deeplearningbook.org/. This chapter contains many useful insights and discussions on the optimization part of machine learning.

+

Part b): Writing your own Neural Network code

+ +

Your aim now, and this is the central part of this project, is to +write your own Feed Forward Neural Network code implementing the back +propagation algorithm discussed in the lecture slides from week 41 and +week 42. +

+ +

We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the +Franke function or terrain data (or both or other data sets) from +project 1. +

+ +

Discuss again your choice of cost function.

+ +

Write an FFNN code for regression with a flexible number of hidden +layers and nodes using the Sigmoid function as activation function for +the hidden layers. Initialize the weights using a normal +distribution. How would you initialize the biases? And which +activation function would you select for the final output layer? +

+ +

Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data. +You should test your results against a similar code using Scikit-Learn (see the examples in the above lecture notes from weeks 41 and 42) or tensorflow/keras or Pytorch (for Pytorch, see Raschka et al.'s text chapters 12 and 13). +

+ +

Comment your results and give a critical discussion of the results +obtained with the Linear Regression code and your own Neural Network +code. +Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and \( R2 \) scores. +

+ +

A useful reference on the back progagation algorithm is Nielsen's book at http://neuralnetworksanddeeplearning.com/. It is an excellent +read. +

+

Part c): Testing different activation functions

+ +

You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases.

+

Part d): Classification analysis using neural networks

+ +

With a well-written code it should now be easy to change the +activation function for the output layer. +

+ +

Here we will change the cost function for our neural network code +developed in parts b) and c) in order to perform a classification analysis. +

+ +

We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, \( 0 \) or \( 1 \) etc. +You find more information about this at the Scikit-Learn +site or at the University of California +at Irvine. +

+ +

To measure the performance of our classification problem we use the +so-called accuracy score. The accuracy is as you would expect just +the number of correctly guessed targets \( t_i \) divided by the total +number of targets, that is +

+ +$$ +\text{Accuracy} = \frac{\sum_{i=1}^n I(t_i = y_i)}{n} , +$$ + +

where \( I \) is the indicator function, \( 1 \) if \( t_i = y_i \) and \( 0 \) +otherwise if we have a binary classification problem. Here \( t_i \) +represents the target and \( y_i \) the outputs of your FFNN code and \( n \) is simply the number of targets \( t_i \). +

+ +

Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter \( \lambda \) (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions.

+ +

As stated in the introduction, it can also be useful to study other +datasets. +

+ +

Again, we strongly recommend that you compare your own neural Network +code for classification and pertinent results against a similar code using Scikit-Learn or tensorflow/keras or pytorch. +

+

Part e): Write your Logistic Regression code, final step

+ +

Finally, we want to compare the FFNN code we have developed with +Logistic regression, that is we wish to compare our neural network +classification results with the results we can obtain with another +method. +

+ +

Define your cost function and the design matrix before you start writing your code. +Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter. +Study the results as functions of the chosen learning rates. +Add also an \( l_2 \) regularization parameter \( \lambda \). Compare your results with those from your FFNN code as well as those obtained using Scikit-Learn's logistic regression functionality. +

+ +

The weblink here https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article.

+

Part f) Critical evaluation of the various algorithms

+ +

After all these glorious calculations, you should now summarize the +various algorithms and come with a critical evaluation of their pros +and cons. Which algorithm works best for the regression case and which +is best for the classification case. These codes can also be part of +your final project 3, but now applied to other data sets. +

+

Background literature

+ +
    +
  1. The text of Michael Nielsen is highly recommended, see Nielsen's book at http://neuralnetworksanddeeplearning.com/. It is an excellent read.
  2. +
  3. Goodfellow, Bengio and Courville, Deep Learning at https://www.deeplearningbook.org/. Here we recommend chapters 6, 7 and 8
  4. +
  5. Raschka et al. at https://sebastianraschka.com/blog/2022/ml-pytorch-book.html. Here we recommend chapters 11, 12 and 13.
  6. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to write a report for each +project. +

+ +
    +
  • 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.
  • +
  • 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 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. +

+ +

+ +

    +
  • 1
  • +
+ +
+ + + + +
+ © 1999-2024, "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/2024/Project2/html/Project2-bs.html b/doc/Projects/2024/Project2/html/Project2-bs.html new file mode 100644 index 000000000..545fef21a --- /dev/null +++ b/doc/Projects/2024/Project2/html/Project2-bs.html @@ -0,0 +1,402 @@ + + + + + + + +Project 2 on Machine Learning, deadline November 4 (Midnight) + + + + + + + + + + + + + + + + + + + + +
+

 

 

 

+ + +
+
+

Project 2 on Machine Learning, deadline November 4 (Midnight)

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+Department of Physics, University of Oslo, Norway +
+
+
+

Oct 8, 2024

+
+
+ + +
+

Classification and Regression, from linear and logistic regression to neural networks

+ +

The main aim of this project is to study both classification and +regression problems by developing our own feed-forward neural network +(FFNN) code. We can reuse the regression algorithms studied in project +1. We will also include logistic regression for classification +problems and write our own FFNN code for studying both regression and +classification problems. The codes developed in project 1, including +bootstrap and/or cross-validation as well as the computation of the +mean-squared error and/or the \( R2 \) or the accuracy score +(classification problems) functions can also be utilized in the +present analysis. +

+ +

The data sets that we propose here are (the default sets)

+ +
    +
  • Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be +
      +
    1. A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so.
    2. +
    +
  • Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called Wisconsin Breat Cancer Data data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the Machine Learning repository of the University of California at Irvine. Feel free to consult this site and the pertinent literature.
  • +
+

You can find more information about this at the Scikit-Learn site or at the University of California at Irvine.

+ +

However, if you would like to study other data sets, feel free to +propose other sets. What we list here are mere suggestions from our +side. If you opt for another data set, consider using a set which has +been studied in the scientific literature. This makes it easier for +you to compare and analyze your results. Comparing with existing +results from the scientific literature is also an essential element of +the scientific discussion. The University of California at Irvine +with its Machine Learning repository at +https://archive.ics.uci.edu/ml/index.php is an excellent site to +look up for examples and +inspiration. Kaggle.com is an equally +interesting site. Feel free to explore these sites. +

+ +

We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code.

+

Part a): Write your own Stochastic Gradient Descent code, first step

+ +

In order to get started, we will now replace in our standard ordinary +least squares (OLS) and Ridge regression codes (from project 1) the +matrix inversion algorithm with our own gradient descent (GD) and SGD +codes. You can use the Franke function or the terrain data from +project 1. However, we recommend using a simpler function like +\( f(x)=a_0+a_1x+a_2x^2 \) or higher-order one-dimensional polynomials. +You can obviously test your final codes against for example the Franke +function. +

+ +

The exercise set for week 41 should help in solving this part of the project.

+ +

You should include in your analysis of the GD and SGD codes the following elements

+
    +
  1. A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient.
  2. +
  3. Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient.
  4. +
  5. Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient.
  6. +
  7. Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD.
  8. +
  9. Add RMSprop and Adam to your library of methods for tuning the learning rate.
  10. +
+

The lecture notes from weeks 39 and 40 contain more +details and code examples. Feel free to use these examples. +

+
    +
  1. Replace thereafter your analytical gradient with either Autograd or JAX
  2. +
+Feel free to use codes on these methods from the lecture notes from week 39 and week 40. + +

In summary, you should +perform an analysis of the results for OLS and Ridge regression as +function of the chosen learning rates, the number of mini-batches and +epochs as well as algorithm for scaling the learning rate. You can +also compare your own results with those that can be obtained using +for example Scikit-Learn's various SGD options. Discuss your +results. For Ridge regression you need now to study the results as functions of the hyper-parameter \( \lambda \) and +the learning rate \( \eta \). Discuss your results. +

+ +

You will need your SGD code for the setup of the Neural Network and +Logistic Regression codes. You will find the Python Seaborn +package +useful when plotting the results as function of the learning rate +\( \eta \) and the hyper-parameter \( \lambda \) when you use Ridge +regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40. +

+ +

We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at https://www.deeplearningbook.org/. This chapter contains many useful insights and discussions on the optimization part of machine learning.

+

Part b): Writing your own Neural Network code

+ +

Your aim now, and this is the central part of this project, is to +write your own Feed Forward Neural Network code implementing the back +propagation algorithm discussed in the lecture slides from week 41 and +week 42. +

+ +

We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the +Franke function or terrain data (or both or other data sets) from +project 1. +

+ +

Discuss again your choice of cost function.

+ +

Write an FFNN code for regression with a flexible number of hidden +layers and nodes using the Sigmoid function as activation function for +the hidden layers. Initialize the weights using a normal +distribution. How would you initialize the biases? And which +activation function would you select for the final output layer? +

+ +

Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data. +You should test your results against a similar code using Scikit-Learn (see the examples in the above lecture notes from weeks 41 and 42) or tensorflow/keras or Pytorch (for Pytorch, see Raschka et al.'s text chapters 12 and 13). +

+ +

Comment your results and give a critical discussion of the results +obtained with the Linear Regression code and your own Neural Network +code. +Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and \( R2 \) scores. +

+ +

A useful reference on the back progagation algorithm is Nielsen's book at http://neuralnetworksanddeeplearning.com/. It is an excellent +read. +

+

Part c): Testing different activation functions

+ +

You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases.

+

Part d): Classification analysis using neural networks

+ +

With a well-written code it should now be easy to change the +activation function for the output layer. +

+ +

Here we will change the cost function for our neural network code +developed in parts b) and c) in order to perform a classification analysis. +

+ +

We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, \( 0 \) or \( 1 \) etc. +You find more information about this at the Scikit-Learn +site or at the University of California +at Irvine. +

+ +

To measure the performance of our classification problem we use the +so-called accuracy score. The accuracy is as you would expect just +the number of correctly guessed targets \( t_i \) divided by the total +number of targets, that is +

+ +$$ +\text{Accuracy} = \frac{\sum_{i=1}^n I(t_i = y_i)}{n} , +$$ + +

where \( I \) is the indicator function, \( 1 \) if \( t_i = y_i \) and \( 0 \) +otherwise if we have a binary classification problem. Here \( t_i \) +represents the target and \( y_i \) the outputs of your FFNN code and \( n \) is simply the number of targets \( t_i \). +

+ +

Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter \( \lambda \) (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions.

+ +

As stated in the introduction, it can also be useful to study other +datasets. +

+ +

Again, we strongly recommend that you compare your own neural Network +code for classification and pertinent results against a similar code using Scikit-Learn or tensorflow/keras or pytorch. +

+

Part e): Write your Logistic Regression code, final step

+ +

Finally, we want to compare the FFNN code we have developed with +Logistic regression, that is we wish to compare our neural network +classification results with the results we can obtain with another +method. +

+ +

Define your cost function and the design matrix before you start writing your code. +Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter. +Study the results as functions of the chosen learning rates. +Add also an \( l_2 \) regularization parameter \( \lambda \). Compare your results with those from your FFNN code as well as those obtained using Scikit-Learn's logistic regression functionality. +

+ +

The weblink here https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article.

+

Part f) Critical evaluation of the various algorithms

+ +

After all these glorious calculations, you should now summarize the +various algorithms and come with a critical evaluation of their pros +and cons. Which algorithm works best for the regression case and which +is best for the classification case. These codes can also be part of +your final project 3, but now applied to other data sets. +

+

Background literature

+ +
    +
  1. The text of Michael Nielsen is highly recommended, see Nielsen's book at http://neuralnetworksanddeeplearning.com/. It is an excellent read.
  2. +
  3. Goodfellow, Bengio and Courville, Deep Learning at https://www.deeplearningbook.org/. Here we recommend chapters 6, 7 and 8
  4. +
  5. Raschka et al. at https://sebastianraschka.com/blog/2022/ml-pytorch-book.html. Here we recommend chapters 11, 12 and 13.
  6. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to write a report for each +project. +

+ +
    +
  • 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.
  • +
  • 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 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. +

+ +

+ +

    +
  • 1
  • +
+ +
+ + + + +
+ © 1999-2024, "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/2024/Project2/html/Project2.html b/doc/Projects/2024/Project2/html/Project2.html new file mode 100644 index 000000000..bf97d6d26 --- /dev/null +++ b/doc/Projects/2024/Project2/html/Project2.html @@ -0,0 +1,427 @@ + + + + + + + +Project 2 on Machine Learning, deadline November 4 (Midnight) + + + + + + + + + + + + + + +
+

Project 2 on Machine Learning, deadline November 4 (Midnight)

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+Department of Physics, University of Oslo, Norway +
+
+
+

Oct 8, 2024

+
+
+

Classification and Regression, from linear and logistic regression to neural networks

+ +

The main aim of this project is to study both classification and +regression problems by developing our own feed-forward neural network +(FFNN) code. We can reuse the regression algorithms studied in project +1. We will also include logistic regression for classification +problems and write our own FFNN code for studying both regression and +classification problems. The codes developed in project 1, including +bootstrap and/or cross-validation as well as the computation of the +mean-squared error and/or the \( R2 \) or the accuracy score +(classification problems) functions can also be utilized in the +present analysis. +

+ +

The data sets that we propose here are (the default sets)

+ +
    +
  • Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be +
      +
    1. A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so.
    2. +
    +
  • Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called Wisconsin Breat Cancer Data data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the Machine Learning repository of the University of California at Irvine. Feel free to consult this site and the pertinent literature.
  • +
+

You can find more information about this at the Scikit-Learn site or at the University of California at Irvine.

+ +

However, if you would like to study other data sets, feel free to +propose other sets. What we list here are mere suggestions from our +side. If you opt for another data set, consider using a set which has +been studied in the scientific literature. This makes it easier for +you to compare and analyze your results. Comparing with existing +results from the scientific literature is also an essential element of +the scientific discussion. The University of California at Irvine +with its Machine Learning repository at +https://archive.ics.uci.edu/ml/index.php is an excellent site to +look up for examples and +inspiration. Kaggle.com is an equally +interesting site. Feel free to explore these sites. +

+ +

We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code.

+

Part a): Write your own Stochastic Gradient Descent code, first step

+ +

In order to get started, we will now replace in our standard ordinary +least squares (OLS) and Ridge regression codes (from project 1) the +matrix inversion algorithm with our own gradient descent (GD) and SGD +codes. You can use the Franke function or the terrain data from +project 1. However, we recommend using a simpler function like +\( f(x)=a_0+a_1x+a_2x^2 \) or higher-order one-dimensional polynomials. +You can obviously test your final codes against for example the Franke +function. +

+ +

The exercise set for week 41 should help in solving this part of the project.

+ +

You should include in your analysis of the GD and SGD codes the following elements

+
    +
  1. A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient.
  2. +
  3. Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient.
  4. +
  5. Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient.
  6. +
  7. Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD.
  8. +
  9. Add RMSprop and Adam to your library of methods for tuning the learning rate.
  10. +
+

The lecture notes from weeks 39 and 40 contain more +details and code examples. Feel free to use these examples. +

+
    +
  1. Replace thereafter your analytical gradient with either Autograd or JAX
  2. +
+Feel free to use codes on these methods from the lecture notes from week 39 and week 40. + +

In summary, you should +perform an analysis of the results for OLS and Ridge regression as +function of the chosen learning rates, the number of mini-batches and +epochs as well as algorithm for scaling the learning rate. You can +also compare your own results with those that can be obtained using +for example Scikit-Learn's various SGD options. Discuss your +results. For Ridge regression you need now to study the results as functions of the hyper-parameter \( \lambda \) and +the learning rate \( \eta \). Discuss your results. +

+ +

You will need your SGD code for the setup of the Neural Network and +Logistic Regression codes. You will find the Python Seaborn +package +useful when plotting the results as function of the learning rate +\( \eta \) and the hyper-parameter \( \lambda \) when you use Ridge +regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40. +

+ +

We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at https://www.deeplearningbook.org/. This chapter contains many useful insights and discussions on the optimization part of machine learning.

+

Part b): Writing your own Neural Network code

+ +

Your aim now, and this is the central part of this project, is to +write your own Feed Forward Neural Network code implementing the back +propagation algorithm discussed in the lecture slides from week 41 and +week 42. +

+ +

We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the +Franke function or terrain data (or both or other data sets) from +project 1. +

+ +

Discuss again your choice of cost function.

+ +

Write an FFNN code for regression with a flexible number of hidden +layers and nodes using the Sigmoid function as activation function for +the hidden layers. Initialize the weights using a normal +distribution. How would you initialize the biases? And which +activation function would you select for the final output layer? +

+ +

Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data. +You should test your results against a similar code using Scikit-Learn (see the examples in the above lecture notes from weeks 41 and 42) or tensorflow/keras or Pytorch (for Pytorch, see Raschka et al.'s text chapters 12 and 13). +

+ +

Comment your results and give a critical discussion of the results +obtained with the Linear Regression code and your own Neural Network +code. +Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and \( R2 \) scores. +

+ +

A useful reference on the back progagation algorithm is Nielsen's book at http://neuralnetworksanddeeplearning.com/. It is an excellent +read. +

+

Part c): Testing different activation functions

+ +

You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases.

+

Part d): Classification analysis using neural networks

+ +

With a well-written code it should now be easy to change the +activation function for the output layer. +

+ +

Here we will change the cost function for our neural network code +developed in parts b) and c) in order to perform a classification analysis. +

+ +

We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, \( 0 \) or \( 1 \) etc. +You find more information about this at the Scikit-Learn +site or at the University of California +at Irvine. +

+ +

To measure the performance of our classification problem we use the +so-called accuracy score. The accuracy is as you would expect just +the number of correctly guessed targets \( t_i \) divided by the total +number of targets, that is +

+ +$$ +\text{Accuracy} = \frac{\sum_{i=1}^n I(t_i = y_i)}{n} , +$$ + +

where \( I \) is the indicator function, \( 1 \) if \( t_i = y_i \) and \( 0 \) +otherwise if we have a binary classification problem. Here \( t_i \) +represents the target and \( y_i \) the outputs of your FFNN code and \( n \) is simply the number of targets \( t_i \). +

+ +

Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter \( \lambda \) (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions.

+ +

As stated in the introduction, it can also be useful to study other +datasets. +

+ +

Again, we strongly recommend that you compare your own neural Network +code for classification and pertinent results against a similar code using Scikit-Learn or tensorflow/keras or pytorch. +

+

Part e): Write your Logistic Regression code, final step

+ +

Finally, we want to compare the FFNN code we have developed with +Logistic regression, that is we wish to compare our neural network +classification results with the results we can obtain with another +method. +

+ +

Define your cost function and the design matrix before you start writing your code. +Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter. +Study the results as functions of the chosen learning rates. +Add also an \( l_2 \) regularization parameter \( \lambda \). Compare your results with those from your FFNN code as well as those obtained using Scikit-Learn's logistic regression functionality. +

+ +

The weblink here https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article.

+

Part f) Critical evaluation of the various algorithms

+ +

After all these glorious calculations, you should now summarize the +various algorithms and come with a critical evaluation of their pros +and cons. Which algorithm works best for the regression case and which +is best for the classification case. These codes can also be part of +your final project 3, but now applied to other data sets. +

+

Background literature

+ +
    +
  1. The text of Michael Nielsen is highly recommended, see Nielsen's book at http://neuralnetworksanddeeplearning.com/. It is an excellent read.
  2. +
  3. Goodfellow, Bengio and Courville, Deep Learning at https://www.deeplearningbook.org/. Here we recommend chapters 6, 7 and 8
  4. +
  5. Raschka et al. at https://sebastianraschka.com/blog/2022/ml-pytorch-book.html. Here we recommend chapters 11, 12 and 13.
  6. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to write a report for each +project. +

+ +
    +
  • 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.
  • +
  • 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 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. +

+ + +
+ © 1999-2024, "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/2024/Project2/ipynb/Project2.ipynb b/doc/Projects/2024/Project2/ipynb/Project2.ipynb new file mode 100644 index 000000000..c1411ffd6 --- /dev/null +++ b/doc/Projects/2024/Project2/ipynb/Project2.ipynb @@ -0,0 +1,351 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5b2f9dda", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "cacbd604", + "metadata": { + "editable": true + }, + "source": [ + "# Project 2 on Machine Learning, deadline November 4 (Midnight)\n", + "**[Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html)**, Department of Physics, University of Oslo, Norway\n", + "\n", + "Date: **Oct 8, 2024**\n", + "\n", + "Copyright 1999-2024, [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" + ] + }, + { + "cell_type": "markdown", + "id": "acb32119", + "metadata": { + "editable": true + }, + "source": [ + "## Classification and Regression, from linear and logistic regression to neural networks\n", + "\n", + "The main aim of this project is to study both classification and\n", + "regression problems by developing our own feed-forward neural network\n", + "(FFNN) code. We can reuse the regression algorithms studied in project\n", + "1. We will also include logistic regression for classification\n", + "problems and write our own FFNN code for studying both regression and\n", + "classification problems. The codes developed in project 1, including\n", + "bootstrap **and/or** cross-validation as well as the computation of the\n", + "mean-squared error and/or the $R2$ or the accuracy score\n", + "(classification problems) functions can also be utilized in the\n", + "present analysis.\n", + "\n", + "The data sets that we propose here are (the default sets)\n", + "\n", + "* Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be\n", + "\n", + "a. A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so.\n", + "\n", + "* Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called [Wisconsin Breat Cancer Data](https://www.kaggle.com/uciml/breast-cancer-wisconsin-data) data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the [Machine Learning repository of the University of California at Irvine](https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29). Feel free to consult this site and the pertinent literature.\n", + "\n", + "You can find more information about this at the [Scikit-Learn site](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html) or at the [University of California at Irvine](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)). \n", + "\n", + "However, if you would like to study other data sets, feel free to\n", + "propose other sets. What we list here are mere suggestions from our\n", + "side. If you opt for another data set, consider using a set which has\n", + "been studied in the scientific literature. This makes it easier for\n", + "you to compare and analyze your results. Comparing with existing\n", + "results from the scientific literature is also an essential element of\n", + "the scientific discussion. The University of California at Irvine\n", + "with its Machine Learning repository at\n", + " is an excellent site to\n", + "look up for examples and\n", + "inspiration. [Kaggle.com](https://www.kaggle.com/) is an equally\n", + "interesting site. Feel free to explore these sites.\n", + "\n", + "We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code." + ] + }, + { + "cell_type": "markdown", + "id": "027202f0", + "metadata": { + "editable": true + }, + "source": [ + "### Part a): Write your own Stochastic Gradient Descent code, first step\n", + "\n", + "In order to get started, we will now replace in our standard ordinary\n", + "least squares (OLS) and Ridge regression codes (from project 1) the\n", + "matrix inversion algorithm with our own gradient descent (GD) and SGD\n", + "codes. You can use the Franke function or the terrain data from\n", + "project 1. **However, we recommend using a simpler function like**\n", + "$f(x)=a_0+a_1x+a_2x^2$ or higher-order one-dimensional polynomials.\n", + "You can obviously test your final codes against for example the Franke\n", + "function.\n", + "\n", + "The exercise set for week 41 should help in solving this part of the project.\n", + "\n", + "You should include in your analysis of the GD and SGD codes the following elements\n", + "1. A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient.\n", + "\n", + "2. Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient.\n", + "\n", + "3. Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient.\n", + "\n", + "4. Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD.\n", + "\n", + "5. Add RMSprop and Adam to your library of methods for tuning the learning rate.\n", + "\n", + "The lecture notes from [weeks 39 and 40 contain more\n", + "details](https://compphysics.github.io/MachineLearning/doc/pub/week39/html/week39.html) and code examples. Feel free to use these examples.\n", + "1. Replace thereafter your analytical gradient with either **Autograd** or **JAX**\n", + "\n", + "**Feel free to use codes on these methods from the lecture notes from week 39 and week 40**.\n", + "\n", + "In summary, you should \n", + "perform an analysis of the results for OLS and Ridge regression as\n", + "function of the chosen learning rates, the number of mini-batches and\n", + "epochs as well as algorithm for scaling the learning rate. You can\n", + "also compare your own results with those that can be obtained using\n", + "for example **Scikit-Learn**'s various SGD options. Discuss your\n", + "results. For Ridge regression you need now to study the results as functions of the hyper-parameter $\\lambda$ and \n", + "the learning rate $\\eta$. Discuss your results.\n", + "\n", + "You will need your SGD code for the setup of the Neural Network and\n", + "Logistic Regression codes. You will find the Python [Seaborn\n", + "package](https://seaborn.pydata.org/generated/seaborn.heatmap.html)\n", + "useful when plotting the results as function of the learning rate\n", + "$\\eta$ and the hyper-parameter $\\lambda$ when you use Ridge\n", + "regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40.\n", + "\n", + "We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at . This chapter contains many useful insights and discussions on the optimization part of machine learning." + ] + }, + { + "cell_type": "markdown", + "id": "9388fa74", + "metadata": { + "editable": true + }, + "source": [ + "### Part b): Writing your own Neural Network code\n", + "\n", + "Your aim now, and this is the central part of this project, is to\n", + "write your own Feed Forward Neural Network code implementing the back\n", + "propagation algorithm discussed in the lecture slides from [week 41](https://compphysics.github.io/MachineLearning/doc/pub/week41/ipynb/week41.ipynb) and\n", + "[week 42](https://compphysics.github.io/MachineLearning/doc/pub/week42/ipynb/week42.ipynb).\n", + "\n", + "We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the \n", + "Franke function or terrain data (or both or other data sets) from\n", + "project 1.\n", + "\n", + "Discuss again your choice of cost function.\n", + "\n", + "Write an FFNN code for regression with a flexible number of hidden\n", + "layers and nodes using the Sigmoid function as activation function for\n", + "the hidden layers. Initialize the weights using a normal\n", + "distribution. How would you initialize the biases? And which\n", + "activation function would you select for the final output layer?\n", + "\n", + "Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data.\n", + "You should test your results against a similar code using **Scikit-Learn** (see the examples in the above lecture notes from weeks 41 and 42) or **tensorflow/keras** or **Pytorch** (for Pytorch, see Raschka et al.'s text chapters 12 and 13). \n", + "\n", + "Comment your results and give a critical discussion of the results\n", + "obtained with the Linear Regression code and your own Neural Network\n", + "code. \n", + "Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and $R2$ scores.\n", + "\n", + "A useful reference on the back progagation algorithm is Nielsen's book at . It is an excellent\n", + "read." + ] + }, + { + "cell_type": "markdown", + "id": "49666354", + "metadata": { + "editable": true + }, + "source": [ + "### Part c): Testing different activation functions\n", + "\n", + "You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases." + ] + }, + { + "cell_type": "markdown", + "id": "79aacf29", + "metadata": { + "editable": true + }, + "source": [ + "### Part d): Classification analysis using neural networks\n", + "\n", + "With a well-written code it should now be easy to change the\n", + "activation function for the output layer.\n", + "\n", + "Here we will change the cost function for our neural network code\n", + "developed in parts b) and c) in order to perform a classification analysis. \n", + "\n", + "We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, $0$ or $1$ etc.\n", + "You find more information about this at the [Scikit-Learn\n", + "site](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html) or at the [University of California\n", + "at Irvine](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)). \n", + "\n", + "To measure the performance of our classification problem we use the\n", + "so-called *accuracy* score. The accuracy is as you would expect just\n", + "the number of correctly guessed targets $t_i$ divided by the total\n", + "number of targets, that is" + ] + }, + { + "cell_type": "markdown", + "id": "42e22900", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\text{Accuracy} = \\frac{\\sum_{i=1}^n I(t_i = y_i)}{n} ,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "82ae763d", + "metadata": { + "editable": true + }, + "source": [ + "where $I$ is the indicator function, $1$ if $t_i = y_i$ and $0$\n", + "otherwise if we have a binary classification problem. Here $t_i$\n", + "represents the target and $y_i$ the outputs of your FFNN code and $n$ is simply the number of targets $t_i$.\n", + "\n", + "Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter $\\lambda$ (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions. \n", + "\n", + "As stated in the introduction, it can also be useful to study other\n", + "datasets. \n", + "\n", + "Again, we strongly recommend that you compare your own neural Network\n", + "code for classification and pertinent results against a similar code using **Scikit-Learn** or **tensorflow/keras** or **pytorch**." + ] + }, + { + "cell_type": "markdown", + "id": "1d6b84d1", + "metadata": { + "editable": true + }, + "source": [ + "### Part e): Write your Logistic Regression code, final step\n", + "\n", + "Finally, we want to compare the FFNN code we have developed with\n", + "Logistic regression, that is we wish to compare our neural network\n", + "classification results with the results we can obtain with another\n", + "method.\n", + "\n", + "Define your cost function and the design matrix before you start writing your code.\n", + "Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter.\n", + "Study the results as functions of the chosen learning rates.\n", + "Add also an $l_2$ regularization parameter $\\lambda$. Compare your results with those from your FFNN code as well as those obtained using **Scikit-Learn**'s logistic regression functionality.\n", + "\n", + "The weblink here compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article." + ] + }, + { + "cell_type": "markdown", + "id": "0bce8832", + "metadata": { + "editable": true + }, + "source": [ + "### Part f) Critical evaluation of the various algorithms\n", + "\n", + "After all these glorious calculations, you should now summarize the\n", + "various algorithms and come with a critical evaluation of their pros\n", + "and cons. Which algorithm works best for the regression case and which\n", + "is best for the classification case. These codes can also be part of\n", + "your final project 3, but now applied to other data sets." + ] + }, + { + "cell_type": "markdown", + "id": "51b1b29b", + "metadata": { + "editable": true + }, + "source": [ + "## Background literature\n", + "\n", + "1. The text of Michael Nielsen is highly recommended, see Nielsen's book at . It is an excellent read.\n", + "\n", + "2. Goodfellow, Bengio and Courville, Deep Learning at . Here we recommend chapters 6, 7 and 8\n", + "\n", + "3. Raschka et al. at . Here we recommend chapters 11, 12 and 13." + ] + }, + { + "cell_type": "markdown", + "id": "7e4ffbbd", + "metadata": { + "editable": true + }, + "source": [ + "## Introduction to numerical projects\n", + "\n", + "Here follows a brief recipe and recommendation on how to write a report for each\n", + "project.\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.\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." + ] + }, + { + "cell_type": "markdown", + "id": "56112b03", + "metadata": { + "editable": true + }, + "source": [ + "## 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 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." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/doc/Projects/2024/Project2/ipynb/ipynb-Project2-src.tar.gz b/doc/Projects/2024/Project2/ipynb/ipynb-Project2-src.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9358b8adfdeae9aeae11bc7623910c5cf4646ca9 GIT binary patch literal 192 zcmV;x06+g9iwFRtu>@xT1MSaE3WG2Z1z^{nVoo55MqL-`qKkr*ULe+3V{67H5$f&h z545Y6Zlo0QZ60ABVdju+w)-rwck8W&5RxzkQ>IBgCkdDLjM5Y+OUI1HVg!UnamYL% z>#g+C8_V^$N?SKV8KK_w##&W<_-8o;$*`>c7rOQ uL}8{OXmRVM7Qod2yey@asQA_IG@dnYP2m6f9LI4S=SvUTM}-9d2mkQ literal 0 HcmV?d00001 diff --git a/doc/Projects/2024/Project2/pdf/Project2.p.tex b/doc/Projects/2024/Project2/pdf/Project2.p.tex new file mode 100644 index 000000000..0dcf5536b --- /dev/null +++ b/doc/Projects/2024/Project2/pdf/Project2.p.tex @@ -0,0 +1,402 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/doconce/doconce/) +%% doconce format latex Project2.do.txt --print_latex_style=trac --latex_admon=paragraph +%% +% #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[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-2024, "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-2024, "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 2 on Machine Learning, deadline November 4 (Midnight) +\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 Department of Physics, University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Oct 8, 2024 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection{Classification and Regression, from linear and logistic regression to neural networks} + +The main aim of this project is to study both classification and +regression problems by developing our own feed-forward neural network +(FFNN) code. We can reuse the regression algorithms studied in project +1. We will also include logistic regression for classification +problems and write our own FFNN code for studying both regression and +classification problems. The codes developed in project 1, including +bootstrap \textbf{and/or} cross-validation as well as the computation of the +mean-squared error and/or the $R2$ or the accuracy score +(classification problems) functions can also be utilized in the +present analysis. + +The data sets that we propose here are (the default sets) + +\begin{itemize} +\item Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be +\begin{enumerate} + + \item A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so. + +\end{enumerate} + +\noindent +\item Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called \href{{https://www.kaggle.com/uciml/breast-cancer-wisconsin-data}}{Wisconsin Breat Cancer Data} data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the \href{{https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29}}{Machine Learning repository of the University of California at Irvine}. Feel free to consult this site and the pertinent literature. +\end{itemize} + +\noindent +You can find more information about this at the \href{{https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html}}{Scikit-Learn site} or at the \href{{https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)}}{University of California at Irvine}. + +However, if you would like to study other data sets, feel free to +propose other sets. What we list here are mere suggestions from our +side. If you opt for another data set, consider using a set which has +been studied in the scientific literature. This makes it easier for +you to compare and analyze your results. Comparing with existing +results from the scientific literature is also an essential element of +the scientific discussion. The University of California at Irvine +with its Machine Learning repository at +\href{{https://archive.ics.uci.edu/ml/index.php}}{\nolinkurl{https://archive.ics.uci.edu/ml/index.php}} is an excellent site to +look up for examples and +inspiration. \href{{https://www.kaggle.com/}}{Kaggle.com} is an equally +interesting site. Feel free to explore these sites. + +We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code. + +\paragraph{Part a): Write your own Stochastic Gradient Descent code, first step.} +In order to get started, we will now replace in our standard ordinary +least squares (OLS) and Ridge regression codes (from project 1) the +matrix inversion algorithm with our own gradient descent (GD) and SGD +codes. You can use the Franke function or the terrain data from +project 1. \textbf{However, we recommend using a simpler function like} +$f(x)=a_0+a_1x+a_2x^2$ or higher-order one-dimensional polynomials. +You can obviously test your final codes against for example the Franke +function. + +The exercise set for week 41 should help in solving this part of the project. + +You should include in your analysis of the GD and SGD codes the following elements +\begin{enumerate} +\item A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient. + +\item Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient. + +\item Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient. + +\item Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD. + +\item Add RMSprop and Adam to your library of methods for tuning the learning rate. +\end{enumerate} + +\noindent +The lecture notes from \href{{https://compphysics.github.io/MachineLearning/doc/pub/week39/html/week39.html}}{weeks 39 and 40 contain more +details} and code examples. Feel free to use these examples. +\begin{enumerate} +\item Replace thereafter your analytical gradient with either \textbf{Autograd} or \textbf{JAX} +\end{enumerate} + +\noindent +\textbf{Feel free to use codes on these methods from the lecture notes from week 39 and week 40}. + +In summary, you should +perform an analysis of the results for OLS and Ridge regression as +function of the chosen learning rates, the number of mini-batches and +epochs as well as algorithm for scaling the learning rate. You can +also compare your own results with those that can be obtained using +for example \textbf{Scikit-Learn}'s various SGD options. Discuss your +results. For Ridge regression you need now to study the results as functions of the hyper-parameter $\lambda$ and +the learning rate $\eta$. Discuss your results. + +You will need your SGD code for the setup of the Neural Network and +Logistic Regression codes. You will find the Python \href{{https://seaborn.pydata.org/generated/seaborn.heatmap.html}}{Seaborn +package} +useful when plotting the results as function of the learning rate +$\eta$ and the hyper-parameter $\lambda$ when you use Ridge +regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40. + +We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at \href{{https://www.deeplearningbook.org/}}{\nolinkurl{https://www.deeplearningbook.org/}}. This chapter contains many useful insights and discussions on the optimization part of machine learning. + +\paragraph{Part b): Writing your own Neural Network code.} +Your aim now, and this is the central part of this project, is to +write your own Feed Forward Neural Network code implementing the back +propagation algorithm discussed in the lecture slides from \href{{https://compphysics.github.io/MachineLearning/doc/pub/week41/ipynb/week41.ipynb}}{week 41} and +\href{{https://compphysics.github.io/MachineLearning/doc/pub/week42/ipynb/week42.ipynb}}{week 42}. + +We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the +Franke function or terrain data (or both or other data sets) from +project 1. + +Discuss again your choice of cost function. + +Write an FFNN code for regression with a flexible number of hidden +layers and nodes using the Sigmoid function as activation function for +the hidden layers. Initialize the weights using a normal +distribution. How would you initialize the biases? And which +activation function would you select for the final output layer? + +Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data. +You should test your results against a similar code using \textbf{Scikit-Learn} (see the examples in the above lecture notes from weeks 41 and 42) or \textbf{tensorflow/keras} or \textbf{Pytorch} (for Pytorch, see Raschka et al.'s text chapters 12 and 13). + +Comment your results and give a critical discussion of the results +obtained with the Linear Regression code and your own Neural Network +code. +Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and $R2$ scores. + +A useful reference on the back progagation algorithm is Nielsen's book at \href{{http://neuralnetworksanddeeplearning.com/}}{\nolinkurl{http://neuralnetworksanddeeplearning.com/}}. It is an excellent +read. + +\paragraph{Part c): Testing different activation functions.} +You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases. + +\paragraph{Part d): Classification analysis using neural networks.} +With a well-written code it should now be easy to change the +activation function for the output layer. + +Here we will change the cost function for our neural network code +developed in parts b) and c) in order to perform a classification analysis. + +We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, $0$ or $1$ etc. +You find more information about this at the \href{{https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html}}{Scikit-Learn +site} or at the \href{{https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)}}{University of California +at Irvine}. + +To measure the performance of our classification problem we use the +so-called \emph{accuracy} score. The accuracy is as you would expect just +the number of correctly guessed targets $t_i$ divided by the total +number of targets, that is + +\[ +\text{Accuracy} = \frac{\sum_{i=1}^n I(t_i = y_i)}{n} , +\] + +where $I$ is the indicator function, $1$ if $t_i = y_i$ and $0$ +otherwise if we have a binary classification problem. Here $t_i$ +represents the target and $y_i$ the outputs of your FFNN code and $n$ is simply the number of targets $t_i$. + +Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter $\lambda$ (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions. + +As stated in the introduction, it can also be useful to study other +datasets. + +Again, we strongly recommend that you compare your own neural Network +code for classification and pertinent results against a similar code using \textbf{Scikit-Learn} or \textbf{tensorflow/keras} or \textbf{pytorch}. + +\paragraph{Part e): Write your Logistic Regression code, final step.} +Finally, we want to compare the FFNN code we have developed with +Logistic regression, that is we wish to compare our neural network +classification results with the results we can obtain with another +method. + +Define your cost function and the design matrix before you start writing your code. +Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter. +Study the results as functions of the chosen learning rates. +Add also an $l_2$ regularization parameter $\lambda$. Compare your results with those from your FFNN code as well as those obtained using \textbf{Scikit-Learn}'s logistic regression functionality. + +The weblink here \href{{https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3}}{\nolinkurl{https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3}}compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article. + +\paragraph{Part f) Critical evaluation of the various algorithms.} +After all these glorious calculations, you should now summarize the +various algorithms and come with a critical evaluation of their pros +and cons. Which algorithm works best for the regression case and which +is best for the classification case. These codes can also be part of +your final project 3, but now applied to other data sets. + +\subsection{Background literature} + +\begin{enumerate} +\item The text of Michael Nielsen is highly recommended, see Nielsen's book at \href{{http://neuralnetworksanddeeplearning.com/}}{\nolinkurl{http://neuralnetworksanddeeplearning.com/}}. It is an excellent read. + +\item Goodfellow, Bengio and Courville, Deep Learning at \href{{https://www.deeplearningbook.org/}}{\nolinkurl{https://www.deeplearningbook.org/}}. Here we recommend chapters 6, 7 and 8 + +\item Raschka et al.~at \href{{https://sebastianraschka.com/blog/2022/ml-pytorch-book.html}}{\nolinkurl{https://sebastianraschka.com/blog/2022/ml-pytorch-book.html}}. Here we recommend chapters 11, 12 and 13. +\end{enumerate} + +\noindent +\subsection{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to write a report for each +project. + +\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. + + \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 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. + + +% ------------------- end of main content --------------- + +% #ifdef PREAMBLE +\end{document} +% #endif + diff --git a/doc/Projects/2024/Project2/pdf/Project2.pdf b/doc/Projects/2024/Project2/pdf/Project2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e78cd894a5e81100f013233e6fcd461bb55056f2 GIT binary patch literal 243992 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%0Dd-n zN`RCC;;qhku_0%JSACN#&{ksQh{1qNKsOw&_Jx#VmZD#oR{@s^(O$rx_DrgOSl@(0 zyQNb3d+d_m+J6UFAEy_XIj4r$Y<7MLRdljpbX!Xe=(h(186huR`+kwnM)jdYW|j31 z9GS4r5ROeyVZwWMzypf5dDZ1RUPgdNv~}`Wjy8Mq?{YI^!@!f7F|GQ>97DPGmis-v z^C$6=fiXcmeH>CKJsX*hgy#19S8!gOe!-m(uFOdC_u9zm4(TgCi=TIg^B}oRt3VSu zj{@EhNp{1rc@{cKhUak*i6`~^sjMzW{kX|K(c}39TOxC5DIYmyw4!No_By+`4|1P* z5H?p)YoQEzH(^AATQ`MD?@wSKVi2J-1-5()NX|n+F=SE&fBpz_J>tcNjKI5suwdfN zp;^cQCmOlawWXZ?Y=0gmCEx?|ut4MuJl*1qy+NVT)}Lst1$vc{JI|uQ8^bSa0{%KC zYK4ZAD&TQ^`ME(W0Xb)FVC|FDV4|T~_Uy0PdNw31a&}QP$Sbso<$O{2XaKj`3uqMP zU-r`*H#@{Q_Na1y3f;b1guR0@8HS0UmYJncyyx0)fNhL*Rl*TWN`7;KwJ*_l`0iUm zv={^StkcQb(THbHj2WuqkVo)%_5uuJpHDYJzFXy_0hKbudah6+R{S!r*Z0~?l~&zV zSpi?^d^hUMr?er5lLtM|&-xy&m`*95HAY(B16QFgxxYO#(|78?otz5|rSvz$&;}ud zScR6J#OLXL3l+emKmCJ`Lau;CY2-&=I=HkiN_W?AdBztIb>ri)bF6# z2X$9WFndR68N(y#{@KWFk;KAns$tHL=B$d0zY3QG&x{S6s1hSh&9sS@0Y^LVw_pMB zaW7Ip>-X?+7zYHiI4!*RkR6v3Qa0_tfAB9Ug2zCCXL_{0v|Z0h(s2c2Ag9PH92!<# zKU;gXR8ZBhT4u9ynAdp>Gbb|vIzS^VEhC<+#jgOSFywscOL^nggT(T238-G<>53q* zm_E`POy>nq<-kyK;H+_hh{BX<(k?7!c|J;mXg#p}QvT3J_}u(X&W+#dzv^|)Kqn?g znmHEbV7KSDy=aXKB5=voSSE9E=)*FbM>0pIltUgUQOAzTv(32G%*_;S6P|OBNADT< z8*3daUs7^dtwNpiJof~E@`F2`gacPXaU769`J3-)pvvlgL+#3H2N9%qZ>Cm-h{dg^ zJ29}0#4cD)GJ6NHldl91eDWd*c(#xzE6L_dnMS9qBZ%;p2Rt6S`^s7ej=l5x_zD0W zf8pC+xjtTqm&%hCsJjspm<6BKZ4U|k%iNdi~>^Z zkK~&c{-u8dM-Ri5n;>*aPb%nk7u0OB5S7X9c^QB+aM7JeB)I@mF15%G5_ZovhWqW2 zw~}!no-TNc*>>Fz%HBEn^Ls%m2wdt&&Ne!wh+{y{eV}b+dg>&FCwW?2=+KWNi1jln z=Y+dW4vRvNaflqiIzbk!&+bCj8^lAfaKrg_FeqZ@ls}Owf$f+QI^tS6JJZrt?whz5 z2K>|NyW7eUm~;o8*<-(0jEqhAv?cGg0!5bMZ2p1o1!{JtbHDyfo z`+=yJAhvwe-_FT-~$+)f-rJms%*VFJqrIZ^Kw<$PxfLx}U z3mde=M|WA}X~|gBDkWs%EEbpkvQJ)c`e&w@eFqIy(d;$Ef6JqG>T)hn2Atj-*CY}j zSDXtac@ptRmwZ=#pDF%!Pq`=W1Tx$@5e0}o!uxOt~}%~CxUHIj$iLNhjl zlY7j|ILY;tNf{Gv{qHx3aH?G@TlIA|xt|%uRV90heQ=-Z;nKTYeGD(V&PWI0N1seAA9RA!+kRNkzN6#< z3FmJPlsLCf8Ozm46$op&Unx+cGt8_~}Yx`rkE;v*sV zI4gAIZK1KVO3((3naPWIi}XRMb#G6Ji;c5JlsY6Lp*5G8C-b~D^iZL!MF<@?G22U% zPYfrMHtA)$sL)U7f+P%c+0&Z~d>ZhIbx+5&TiJ9RxqR1eF^E`Qd#bCNaXBgrHzPeD z!>%n-|CW(xWi?D4w&^Wbprq;bhRow+Pqt#KgoS$0ou$S?3f;O-4yVcm@PNA&#RNo@z38}Oac-*ssC+BuIk=! zYld=R#t-A2zL+Y7Z#rl8nIw~dJOTP48!P}MjSB$)+1I#*SNUCJ|E<3f5W*5K;=A{g~OA(@>dKL$WV_exs@-@LNC~< zif9#4dypMMVWEn=O+%SX0S_Tg-3M!`<<*h|VyL?-l=DoPK2{=O`=e?gQX8zkG}@HY zBTTLjPw$rQq{p4R2g}Qtu4C;2-E=#-f$0C$b_oQ9+fZf+gFF7vO_x9@KKt_dy!e@> zVYG7kqowLx-{L0|*lCkzZyKj9uEt}-Mc{Uty)0t8`ShN%*50ZK58}L%!4u{Pgp_<~ z*EqFo`lS~1Q_^+beJuF+nEcD?*t_5Xv~3_oZF4JrKJiLE8dnb)YjhG_`sWn5d0lft z@Jf9KfT`@1fsUXentI+AhxD)+@ma7Kz7ML-YBVbxU$W8ezo;RX$66(7HVwnKQN z%GPY0?jI^LI4+KuOqFJyc8WK2+J;Cj^Pra^UTickW#NDEqKH#8=H_6<2UFMYH37%d zDT1yKQtKBTI2x%vp&fw9VIp55IMX^Nk5D;dUJ25y&N5WO1;V<5k%ULjrIGkjs`g57CJpx|<=pL*DL}aKFs{PprSX&BFptY%Y*+O` zobNX*S63W*P$Sf8OgN;dk->wR$x1lfxi)~7&!h$86VE6Bk-A3DE&APXqRJ>^r6Fh^ z6p?zz>%VZmKdnuvIxQC!YOYjXwqCZa@U(A!6`=z^P9RQ2;fHchwVu>l7re+WtEozL zBL1;CS`^a5sP-4|04A*F=;b2@WB6L#c7Q85(ZSdQa-Q>%_@UK{#~e0IJRtCkz~s;! zsvG#_;8L0pHq+HBOte%g(g6GBObF6oC9?;#=D)vea}?}=jOCd&lF*qzy7c%T_ErQp*UE=|3nIs#AT#vRJfH%-OxNMwBX8E2cHB5Bmur!O>Z5U!gV2?aS_f zfq;(9IIs&g-=?1)cVqhr-8ZW&%|j#b3z9aD-$!7-2rWh>ZaplZ{lgW&8>dUw)*5P~ zqPCstgurgarD(aAuG{fn!w^!VfzexVu`Z{cXgFHUrvwJlMhRJkU8v^Izy^Y*CDd<-6 zEY2$YVFFs+{mw8hdzd{m(;M*i8C~|JkiiB;j>aF8(x^ayZO?E;Be5X#uI~*+L-IS49%Tdt5Hz(^ns zA){$0kzVH$K^%oClhBpODxp+SH(+R~HmM5Yi0Z^aa8chtOH@ThKm&_A3V@=B1hgR4TOAttCq^%pQ7DO)&Tl_aL16|jT4 z&dbCkDiCsE!d_GMvq22+OD&_0lZ7Vo%JCKhzz073{xBo?jnmf-6w-);E>;K>vv&&-=I}pSZW6yMAvFp^WVnpt z%&bB~#X2PzwL#r)+hRkr{#S$Hy%l#0Lb`f%Wa zkq@WBoTXspRe4({#)O#>M@TFRu8=iT=HYhYDzSCpKe&bke+778jKjs0%QnSMYLlB{wd0`>SC0Vt-Z0X7C~IlMFmZW1{UP+`!i zDI!2YAOThi5S+*e$SUc$E*34KCm@0S;`LNJEx>|2KKFr>9Fwcv48Y45DDi~y1|xK!><@Dh=L>&y2g^<@KmD}Laggo`6nX8yq21Gu-OA2WM=a|G+- z%PX5-O66UL*6e_oiNAWS0}QcLn6%`Rs}iTp(N$rzFl!@eX{^a#*S9}m*VRv{NZn_p zx98!LA#CB;MV!;XTJE$9mR@TjBO+krW(fE2M!6m8ztUs->G+Z-O|OznwmZ~Rx-nEk zD)^F34t;oLpRk*w?l!paVz_*oRJqktZ^O~~crJmU|4T9a>*1>2dp6?UHn++#OTq1B zE#22*yCxzYrqC&P!EPI-2HUlv@j`y8yOwa`xqeY#)?O`18hw3P+{>0z)t33=<>9iC zRr69d+w0Qt{^5$<*|q<7o%>UuEtc%*qDryQ`>@MO>t@JDx-`1NKI)Mj_KNF{RbHzo z*3$Eo_NVkIG1>H+_oao~R9Tu#t0HxVzdkSX%!9(yVKK6|wjF!4r`5&(goVL=;L5@@ z$jqkf;)AAZV+Yx9J%u{X|I@*cQ^S!)KYM56@0UQa@kokEzHqne_vnjzNA=A(9uv2Y z-?v^noz|Al>*&o{NJLk4-Eq(60l$fa!oqj~Gw0;jUzA98doz{~UOwpCA(&H* zb(i~ix!-TCK!%FvSyqK>=QkGDm7&7T7z9OHajB7B;}(eL9WHhYl$ckwuVgL3(7RYnV&xzzhXoH28_ z_Vl}?m(5oQbgY_s{c-*@?w-@x{D(iNc))$rh&=gc`}DeNQL!G+cwd8)K{DT{x0w81$vPwl^Ie*8x{FXY12aQ-SKWa?7r5s=0{x zyX|em&YG|BhL<>>VEjSW8VqZlGqUehL(7R(oHTT=PP-lbCnw2px`q3(e$)HUzFX=k zw`raA-e~g~>Lh)HXX5bGt!FNrJ9bnYdJWG>I~Q3Z?hEs2+h>&o8Cr^mon{tS5Shv= zRH`;H$vv;_BbRq{oMW2HtK0Gl_8m9uVlH!^B$%=`i7Y!0m?qjh6Lot7JfeH3BhtJ^ za4{QS9v_vF6ZBB+yr9biLQ9*pT_6i~#gZRisc5>cic=AfoXx`R{C~}tvaYdED>HN& zJkjG8Q)@0(mjypo*hx4;lw_3XEnZ$?x8Qg{w&;J*zECtXyQxKp354w zr{&1KulD=+k#Yz?=X@Kts%=6T@2rntX4jr3HqT?>?RBdWO6h7PqCsfCy8NYcljkfS zy;zvxDfh32fKH7~)OK~U^ag(DZyR`}Zxx#u`DTh{K_9c<8RbB){JU;erJThS)p&GH zZ{$suhv_)qMfQ&&*FvMKtbA}et2hO%lRGun>#N(t(rNQOPRu^~7EjT#YcF|c@x&>v z`vbptU;FZ(R2b8LQehmdO#h|3mrbc;K;`~xrPWeVN-jUgxaFUDTuVyCh3YR#wF~CQm6MgJBzoD zynnxVXOCjmo?7$r&puzg@EH-QwK;83c9B{7k0hKJJS(^i%axQkwyL z#x+0y116{i3TcdtIzbQw2lpMlAdo8H`cou#18C31fqZ!dfdpU`jS+!i1aTw^{wfBT z6BxiHA>0e_BY;T|xxrHNB$Av(5-9Bu%t8kPmsU`Adh`hZjZS5YR67dE#i>Q6)e^&J z5G3$zd?P}ZeDnxP z@5Xma$KS>l2BGi>f*1HE3(#;-$6$gJO-(+A{h<-y#_fj*25}TgNHYoey?8E_l9Vkv zEa{6>3?*2wGV%`t7D4z@$F>J?WM7+}oP@a-HEBCe zwY-jOVIJCdV|2EKHU{?9?#RJ(eRXg;^{C?F@Kge@WY1EQ*PfHXRZvp~F<54|m3wid z(Cx0LPi0LECCkSPt3rm9hY0x^`{3qGdn@3=&8#7nak(P1(5`<6yy8e1}xZ{5XAc!X-gHF8d}G(a}Q14}k$uAj|+Y z_9s^i5q|tOJNLaX5g0e3LFg+y`a^$uvkamK!+zmE^o?)^uZF11lK#UKdoD`C$p!#`TTWp1u#<9Lw4bIcCXX$^iOYm;@@3iwH_W zLIf#-F{N1;X1O5@b~p)D9XtCJ>b1biYJ4FHD-Um0CjtDDi`fn2HlGrVjhBeFcZHp z6S5CFipCkG|7qAtZk;Igt){qIT8cn;LI7m*y~(rj_UwwrJS{dHi7isXmuY&+v7?4F zTP9tG1a#wt?zDQ5%dHrZ*aqKORrsHYFB>mt6=90(1xxs2*s+u5k{>|BzUGh}Rv3gqr zI)eOjHkw6~<9*JDPn(`^)e`ly_!vnEJA;0TP@3HY2>m5=HrIHzuITt$KF%4v)}t$P zhpka{u*%*mPzPCNU#+xj;eyQ(BhL!(bH*P7&Mno4IF!BK5^feLmWyKJpWDKUiS5y1 z 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"}=kK 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 literal 0 HcmV?d00001 diff --git a/doc/Projects/2024/Project2/pdf/Project2.tex b/doc/Projects/2024/Project2/pdf/Project2.tex new file mode 100644 index 000000000..4186c5cf0 --- /dev/null +++ b/doc/Projects/2024/Project2/pdf/Project2.tex @@ -0,0 +1,374 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/doconce/doconce/) +%% doconce format latex Project2.do.txt --print_latex_style=trac --latex_admon=paragraph +%% + + +%-------------------- 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[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-2024, "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-2024, "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 2 on Machine Learning, deadline November 4 (Midnight) +\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 Department of Physics, University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Oct 8, 2024 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection*{Classification and Regression, from linear and logistic regression to neural networks} + +The main aim of this project is to study both classification and +regression problems by developing our own feed-forward neural network +(FFNN) code. We can reuse the regression algorithms studied in project +1. We will also include logistic regression for classification +problems and write our own FFNN code for studying both regression and +classification problems. The codes developed in project 1, including +bootstrap \textbf{and/or} cross-validation as well as the computation of the +mean-squared error and/or the $R2$ or the accuracy score +(classification problems) functions can also be utilized in the +present analysis. + +The data sets that we propose here are (the default sets) + +\begin{itemize} +\item Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be +\begin{enumerate} + + \item A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so. + +\end{enumerate} + +\noindent +\item Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called \href{{https://www.kaggle.com/uciml/breast-cancer-wisconsin-data}}{Wisconsin Breat Cancer Data} data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the \href{{https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29}}{Machine Learning repository of the University of California at Irvine}. Feel free to consult this site and the pertinent literature. +\end{itemize} + +\noindent +You can find more information about this at the \href{{https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html}}{Scikit-Learn site} or at the \href{{https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)}}{University of California at Irvine}. + +However, if you would like to study other data sets, feel free to +propose other sets. What we list here are mere suggestions from our +side. If you opt for another data set, consider using a set which has +been studied in the scientific literature. This makes it easier for +you to compare and analyze your results. Comparing with existing +results from the scientific literature is also an essential element of +the scientific discussion. The University of California at Irvine +with its Machine Learning repository at +\href{{https://archive.ics.uci.edu/ml/index.php}}{\nolinkurl{https://archive.ics.uci.edu/ml/index.php}} is an excellent site to +look up for examples and +inspiration. \href{{https://www.kaggle.com/}}{Kaggle.com} is an equally +interesting site. Feel free to explore these sites. + +We will start with a regression problem and we will reuse our codes from project 1 starting with writing our own Stochastic Gradient Descent (SGD) code. + +\paragraph{Part a): Write your own Stochastic Gradient Descent code, first step.} +In order to get started, we will now replace in our standard ordinary +least squares (OLS) and Ridge regression codes (from project 1) the +matrix inversion algorithm with our own gradient descent (GD) and SGD +codes. You can use the Franke function or the terrain data from +project 1. \textbf{However, we recommend using a simpler function like} +$f(x)=a_0+a_1x+a_2x^2$ or higher-order one-dimensional polynomials. +You can obviously test your final codes against for example the Franke +function. + +The exercise set for week 41 should help in solving this part of the project. + +You should include in your analysis of the GD and SGD codes the following elements +\begin{enumerate} +\item A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient. + +\item Add momentum to the plain GD code and compare convergence with a fixed learning rate (you may need to tune the learning rate). Keep using the analytical expression for the gradient. + +\item Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient. + +\item Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD. + +\item Add RMSprop and Adam to your library of methods for tuning the learning rate. +\end{enumerate} + +\noindent +The lecture notes from \href{{https://compphysics.github.io/MachineLearning/doc/pub/week39/html/week39.html}}{weeks 39 and 40 contain more +details} and code examples. Feel free to use these examples. +\begin{enumerate} +\item Replace thereafter your analytical gradient with either \textbf{Autograd} or \textbf{JAX} +\end{enumerate} + +\noindent +\textbf{Feel free to use codes on these methods from the lecture notes from week 39 and week 40}. + +In summary, you should +perform an analysis of the results for OLS and Ridge regression as +function of the chosen learning rates, the number of mini-batches and +epochs as well as algorithm for scaling the learning rate. You can +also compare your own results with those that can be obtained using +for example \textbf{Scikit-Learn}'s various SGD options. Discuss your +results. For Ridge regression you need now to study the results as functions of the hyper-parameter $\lambda$ and +the learning rate $\eta$. Discuss your results. + +You will need your SGD code for the setup of the Neural Network and +Logistic Regression codes. You will find the Python \href{{https://seaborn.pydata.org/generated/seaborn.heatmap.html}}{Seaborn +package} +useful when plotting the results as function of the learning rate +$\eta$ and the hyper-parameter $\lambda$ when you use Ridge +regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40. + +We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at \href{{https://www.deeplearningbook.org/}}{\nolinkurl{https://www.deeplearningbook.org/}}. This chapter contains many useful insights and discussions on the optimization part of machine learning. + +\paragraph{Part b): Writing your own Neural Network code.} +Your aim now, and this is the central part of this project, is to +write your own Feed Forward Neural Network code implementing the back +propagation algorithm discussed in the lecture slides from \href{{https://compphysics.github.io/MachineLearning/doc/pub/week41/ipynb/week41.ipynb}}{week 41} and +\href{{https://compphysics.github.io/MachineLearning/doc/pub/week42/ipynb/week42.ipynb}}{week 42}. + +We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the +Franke function or terrain data (or both or other data sets) from +project 1. + +Discuss again your choice of cost function. + +Write an FFNN code for regression with a flexible number of hidden +layers and nodes using the Sigmoid function as activation function for +the hidden layers. Initialize the weights using a normal +distribution. How would you initialize the biases? And which +activation function would you select for the final output layer? + +Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data. +You should test your results against a similar code using \textbf{Scikit-Learn} (see the examples in the above lecture notes from weeks 41 and 42) or \textbf{tensorflow/keras} or \textbf{Pytorch} (for Pytorch, see Raschka et al.'s text chapters 12 and 13). + +Comment your results and give a critical discussion of the results +obtained with the Linear Regression code and your own Neural Network +code. +Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and $R2$ scores. + +A useful reference on the back progagation algorithm is Nielsen's book at \href{{http://neuralnetworksanddeeplearning.com/}}{\nolinkurl{http://neuralnetworksanddeeplearning.com/}}. It is an excellent +read. + +\paragraph{Part c): Testing different activation functions.} +You should now also test different activation functions for the hidden layers. Try out the Sigmoid, the RELU and the Leaky RELU functions and discuss your results. You may also study the way you initialize your weights and biases. + +\paragraph{Part d): Classification analysis using neural networks.} +With a well-written code it should now be easy to change the +activation function for the output layer. + +Here we will change the cost function for our neural network code +developed in parts b) and c) in order to perform a classification analysis. + +We will here study the Wisconsin Breast Cancer data set. This is a typical binary classification problem with just one single output, either True or Fale, $0$ or $1$ etc. +You find more information about this at the \href{{https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html}}{Scikit-Learn +site} or at the \href{{https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)}}{University of California +at Irvine}. + +To measure the performance of our classification problem we use the +so-called \emph{accuracy} score. The accuracy is as you would expect just +the number of correctly guessed targets $t_i$ divided by the total +number of targets, that is + +\[ +\text{Accuracy} = \frac{\sum_{i=1}^n I(t_i = y_i)}{n} , +\] + +where $I$ is the indicator function, $1$ if $t_i = y_i$ and $0$ +otherwise if we have a binary classification problem. Here $t_i$ +represents the target and $y_i$ the outputs of your FFNN code and $n$ is simply the number of targets $t_i$. + +Discuss your results and give a critical analysis of the various parameters, including hyper-parameters like the learning rates and the regularization parameter $\lambda$ (as you did in Ridge Regression), various activation functions, number of hidden layers and nodes and activation functions. + +As stated in the introduction, it can also be useful to study other +datasets. + +Again, we strongly recommend that you compare your own neural Network +code for classification and pertinent results against a similar code using \textbf{Scikit-Learn} or \textbf{tensorflow/keras} or \textbf{pytorch}. + +\paragraph{Part e): Write your Logistic Regression code, final step.} +Finally, we want to compare the FFNN code we have developed with +Logistic regression, that is we wish to compare our neural network +classification results with the results we can obtain with another +method. + +Define your cost function and the design matrix before you start writing your code. +Write thereafter a Logistic regression code using your SGD algorithm. You can also use standard gradient descent in this case, with a learning rate as hyper-parameter. +Study the results as functions of the chosen learning rates. +Add also an $l_2$ regularization parameter $\lambda$. Compare your results with those from your FFNN code as well as those obtained using \textbf{Scikit-Learn}'s logistic regression functionality. + +The weblink here \href{{https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3}}{\nolinkurl{https://medium.com/ai-in-plain-english/comparison-between-logistic-regression-and-neural-networks-in-classifying-digits-dc5e85cd93c3}}compares logistic regression and FFNN using the so-called MNIST data set. You may find several useful hints and ideas from this article. + +\paragraph{Part f) Critical evaluation of the various algorithms.} +After all these glorious calculations, you should now summarize the +various algorithms and come with a critical evaluation of their pros +and cons. Which algorithm works best for the regression case and which +is best for the classification case. These codes can also be part of +your final project 3, but now applied to other data sets. + +\subsection*{Background literature} + +\begin{enumerate} +\item The text of Michael Nielsen is highly recommended, see Nielsen's book at \href{{http://neuralnetworksanddeeplearning.com/}}{\nolinkurl{http://neuralnetworksanddeeplearning.com/}}. It is an excellent read. + +\item Goodfellow, Bengio and Courville, Deep Learning at \href{{https://www.deeplearningbook.org/}}{\nolinkurl{https://www.deeplearningbook.org/}}. Here we recommend chapters 6, 7 and 8 + +\item Raschka et al.~at \href{{https://sebastianraschka.com/blog/2022/ml-pytorch-book.html}}{\nolinkurl{https://sebastianraschka.com/blog/2022/ml-pytorch-book.html}}. Here we recommend chapters 11, 12 and 13. +\end{enumerate} + +\noindent +\subsection*{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to write a report for each +project. + +\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. + + \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 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. + + +% ------------------- end of main content --------------- + +\end{document} + diff --git a/doc/src/Projects/2024/Project2/Project2.do.txt b/doc/src/Projects/2024/Project2/Project2.do.txt index c864aac45..5d2667fb8 100644 --- a/doc/src/Projects/2024/Project2/Project2.do.txt +++ b/doc/src/Projects/2024/Project2/Project2.do.txt @@ -1,4 +1,4 @@ -TITLE: Project 2 on Machine Learning, deadline November 17 (Midnight) +TITLE: Project 2 on Machine Learning, deadline November 4 (Midnight) 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 Department of Physics, University of Oslo, Norway DATE: today @@ -21,7 +21,7 @@ The data sets that we propose here are (the default sets) * Regression (fitting a continuous function). In this part you will need to bring back your results from project 1 and compare these with what you get from your Neural Network code to be developed here. The data sets could be o A simple one-dimensional function or the Franke function or the terrain data from project 1, or data sets your propose. It could be a simpler function than the Franke function. We recommend testing a simpler function (see below). But if you wish to try more complex function, feel free to do so. -* Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called "Wisconsin Breat Cancer Data":"https://www.kaggle.com/uciml/breast-cancer-wisconsin-data" data set of images representing various features of tumors. These are discussed intensively in the lecture notes, see for example the slides from "week 41":"https://compphysics.github.io/MachineLearning/doc/pub/week41/html/week41.html". A longer explanation with links to the scientific literature can be found at the "Machine Learning repository of the University of California at Irvine":"https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29". Feel free to consult this site and the pertinent literature. +* Classification. Here you will also need to develop a Logistic regression code that you will use to compare with the Neural Network code. The data set we propose are the so-called "Wisconsin Breat Cancer Data":"https://www.kaggle.com/uciml/breast-cancer-wisconsin-data" data set of images representing various features of tumors. A longer explanation with links to the scientific literature can be found at the "Machine Learning repository of the University of California at Irvine":"https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29". Feel free to consult this site and the pertinent literature. You can find more information about this at the "Scikit-Learn site":"https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html" or at the "University of California at Irvine":"https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)". @@ -52,6 +52,8 @@ $f(x)=a_0+a_1x+a_2x^2$ or higher-order one-dimensional polynomials. You can obviously test your final codes against for example the Franke function. +The exercise set for week 41 should help in solving this part of the project. + You should include in your analysis of the GD and SGD codes the following elements o A plain gradient descent with a fixed learning rate (you will need to tune it) using the analytical expression for the gradient. @@ -59,10 +61,13 @@ o Add momentum to the plain GD code and compare convergence with a fixed learnin o Repeat these steps for stochastic gradient descent with mini batches and a given number of epochs. Use a tunable learning rate as discussed in the lectures from weeks 39 and 40. Discuss the results as functions of the various parameters (size of batches, number of epochs etc). Use the analytical gradient. o Implement the Adagrad method in order to tune the learning rate. Do this with and without momentum for plain gradient descent and SGD. o Add RMSprop and Adam to your library of methods for tuning the learning rate. -The lecture notes from "weeks 39 and 40contain more +The lecture notes from "weeks 39 and 40 contain more details":"https://compphysics.github.io/MachineLearning/doc/pub/week39/html/week39.html" and code examples. Feel free to use these examples. o Replace thereafter your analytical gradient with either _Autograd_ or _JAX_ +_Feel free to use codes on these methods from the lecture notes from week 39 and week 40_. + + In summary, you should perform an analysis of the results for OLS and Ridge regression as function of the chosen learning rates, the number of mini-batches and @@ -77,16 +82,16 @@ Logistic Regression codes. You will find the Python "Seaborn package":"https://seaborn.pydata.org/generated/seaborn.heatmap.html" useful when plotting the results as function of the learning rate $\eta$ and the hyper-parameter $\lambda$ when you use Ridge -regression. +regression. Since you will use different gradient descent methods, you can also add Lasse regression. This is however optional. How to code Lasso regression is discussed in the lecture notes from week 40. -We recommend reading chapter 8 on optimization from the textbook of "Goodfellow, Bengio and Courville":"https://www.deeplearningbook.org/". This chapter contains many useful insights and discussions on the optimization part of machine learning. +We recommend reading chapter 8 on optimization from the textbook of Goodfellow, Bengio and Courville at URL:"https://www.deeplearningbook.org/". This chapter contains many useful insights and discussions on the optimization part of machine learning. === Part b): Writing your own Neural Network code === Your aim now, and this is the central part of this project, is to write your own Feed Forward Neural Network code implementing the back -propagation algorithm discussed in the lecture slides from "week 40":"https://compphysics.github.io/MachineLearning/doc/pub/week41/html/week40.html" and -"week 41":"https://compphysics.github.io/MachineLearning/doc/pub/week41/html/week41.html". +propagation algorithm discussed in the lecture slides from "week 41":"https://compphysics.github.io/MachineLearning/doc/pub/week41/ipynb/week41.ipynb" and +"week 42":"https://compphysics.github.io/MachineLearning/doc/pub/week42/ipynb/week42.ipynb". We will focus on a regression problem first and study either the simple second-order polynomial from part a) or the Franke function or terrain data (or both or other data sets) from @@ -101,15 +106,14 @@ distribution. How would you initialize the biases? And which activation function would you select for the final output layer? Train your network and compare the results with those from your OLS and Ridge Regression codes from project 1 if you use the Franke function or the terrain data. -You should test your results against a similar code using _Scikit-Learn_ (see the examples in the above lecture notes from week 41) or _tensorflow/keras_. +You should test your results against a similar code using _Scikit-Learn_ (see the examples in the above lecture notes from weeks 41 and 42) or _tensorflow/keras_ or _Pytorch_ (for Pytorch, see Raschka et al.'s text chapters 12 and 13). Comment your results and give a critical discussion of the results obtained with the Linear Regression code and your own Neural Network code. Make an analysis of the regularization parameters and the learning rates employed to find the optimal MSE and $R2$ scores. -A useful reference on the back progagation algorithm is "Nielsen's -book":"http://neuralnetworksanddeeplearning.com/". It is an excellent +A useful reference on the back progagation algorithm is Nielsen's book at URL:"http://neuralnetworksanddeeplearning.com/". It is an excellent read. @@ -191,12 +195,11 @@ your final project 3, but now applied to other data sets. ===== Background literature ===== -o The text of Michael Nielsen is highly recommended, see "Nielsen's book":"http://neuralnetworksanddeeplearning.com/". It is an excellent read. +o The text of Michael Nielsen is highly recommended, see Nielsen's book at URL:"http://neuralnetworksanddeeplearning.com/". It is an excellent read. -o "Mehta et al, arXiv 1803.08823":"https://arxiv.org/abs/1803.08823", *A high-bias, low-variance introduction to Machine Learning for physicists*, ArXiv:1803.08823. - -o "Goodfellow, Bengio and Courville":"https://www.deeplearningbook.org/", *Deep Learning*. +o Goodfellow, Bengio and Courville, Deep Learning at URL:"https://www.deeplearningbook.org/". Here we recommend chapters 6, 7 and 8 +o Raschka et al. at URL:"https://sebastianraschka.com/blog/2022/ml-pytorch-book.html". Here we recommend chapters 11, 12 and 13. ===== Introduction to numerical projects =====