diff --git a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/.ipynb_checkpoints/exercise1-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/.ipynb_checkpoints/exercise1-checkpoint.ipynb new file mode 100644 index 000000000..c9184cd8f --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/.ipynb_checkpoints/exercise1-checkpoint.ipynb @@ -0,0 +1,1302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 1: Linear Regression\n", + "\n", + "## Introduction\n", + "\n", + "In this exercise, you will implement linear regression and get to see it work on data. Before starting on this programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, and [`matplotlib`](https://matplotlib.org/) for plotting.\n", + "\n", + "You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "from mpl_toolkits.mplot3d import Axes3D # needed to plot 3-D surfaces\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils \n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader.\n", + "\n", + "For this programming exercise, you are only required to complete the first part of the exercise to implement linear regression with one variable. The second part of the exercise, which is optional, covers linear regression with multiple variables. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "**Required Exercises**\n", + "\n", + "| Section | Part |Submitted Function | Points \n", + "|---------|:- |:- | :-: \n", + "| 1 | [Warm up exercise](#section1) | [`warmUpExercise`](#warmUpExercise) | 10 \n", + "| 2 | [Compute cost for one variable](#section2) | [`computeCost`](#computeCost) | 20 \n", + "| 3 | [Gradient descent for one variable](#section3) | [`gradientDescent`](#gradientDescent) | 20 \n", + "| 4 | [Feature normalization](#section4) | [`featureNormalize`](#featureNormalize) | 10 |\n", + "| 5 | [Compute cost for multiple variables](#section5) | [`computeCostMulti`](#computeCostMulti) | 20 |\n", + "| 6 | [Gradient descent for multiple variables](#section5) | [`gradientDescentMulti`](#gradientDescentMulti) |10 |\n", + "| 7 | [Normal Equations](#section7) | [`normalEqn`](#normalEqn) | 10 |\n", + "| | Total Points | | 100 \n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once. They must also be re-executed everytime the submitted function is updated.\n", + "
\n", + "\n", + "\n", + "## Debugging\n", + "\n", + "Here are some things to keep in mind throughout this exercise:\n", + "\n", + "- Python array indices start from zero, not one (contrary to OCTAVE/MATLAB). \n", + "\n", + "- There is an important distinction between python arrays (called `list` or `tuple`) and `numpy` arrays. You should use `numpy` arrays in all your computations. Vector/matrix operations work only with `numpy` arrays. Python lists do not support vector operations (you need to use for loops).\n", + "\n", + "- If you are seeing many errors at runtime, inspect your matrix operations to make sure that you are adding and multiplying matrices of compatible dimensions. Printing the dimensions of `numpy` arrays using the `shape` property will help you debug.\n", + "\n", + "- By default, `numpy` interprets math operators to be element-wise operators. If you want to do matrix multiplication, you need to use the `dot` function in `numpy`. For, example if `A` and `B` are two `numpy` matrices, then the matrix operation AB is `np.dot(A, B)`. Note that for 2-dimensional matrices or vectors (1-dimensional), this is also equivalent to `A@B` (requires python >= 3.5)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## 1 Simple python and `numpy` function\n", + "\n", + "The first part of this assignment gives you practice with python and `numpy` syntax and the homework submission process. In the next cell, you will find the outline of a `python` function. Modify it to return a 5 x 5 identity matrix by filling in the following code:\n", + "\n", + "```python\n", + "A = np.eye(5)\n", + "```\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def warmUpExercise():\n", + " \"\"\"\n", + " Example function in Python which computes the identity matrix.\n", + " \n", + " Returns\n", + " -------\n", + " A : array_like\n", + " The 5x5 identity matrix.\n", + " \n", + " Instructions\n", + " ------------\n", + " Return the 5x5 identity matrix.\n", + " \"\"\" \n", + " # ======== YOUR CODE HERE ======\n", + " A = [] # modify this line\n", + " \n", + " # ==============================\n", + " return A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The previous cell only defines the function `warmUpExercise`. We can now run it by executing the following cell to see its output. You should see output similar to the following:\n", + "\n", + "```python\n", + "array([[ 1., 0., 0., 0., 0.],\n", + " [ 0., 1., 0., 0., 0.],\n", + " [ 0., 0., 1., 0., 0.],\n", + " [ 0., 0., 0., 1., 0.],\n", + " [ 0., 0., 0., 0., 1.]])\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "warmUpExercise()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Submitting solutions\n", + "\n", + "After completing a part of the exercise, you can submit your solutions for grading by first adding the function you modified to the grader object, and then sending your function to Coursera for grading. \n", + "\n", + "The grader will prompt you for your login e-mail and submission token. You can obtain a submission token from the web page for the assignment. You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "Execute the next cell to grade your solution to the first part of this exercise.\n", + "\n", + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# appends the implemented function in part 1 to the grader object\n", + "grader[1] = warmUpExercise\n", + "\n", + "# send the added functions to coursera grader for getting a grade on this part\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Linear regression with one variable\n", + "\n", + "Now you will implement linear regression with one variable to predict profits for a food truck. Suppose you are the CEO of a restaurant franchise and are considering different cities for opening a new outlet. The chain already has trucks in various cities and you have data for profits and populations from the cities. You would like to use this data to help you select which city to expand to next. \n", + "\n", + "The file `Data/ex1data1.txt` contains the dataset for our linear regression problem. The first column is the population of a city (in 10,000s) and the second column is the profit of a food truck in that city (in $10,000s). A negative value for profit indicates a loss. \n", + "\n", + "We provide you with the code needed to load this data. The dataset is loaded from the data file into the variables `x` and `y`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Read comma separated data\n", + "data = np.loadtxt(os.path.join('Data', 'ex1data1.txt'), delimiter=',')\n", + "X, y = data[:, 0], data[:, 1]\n", + "\n", + "m = y.size # number of training examples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Plotting the Data\n", + "\n", + "Before starting on any task, it is often useful to understand the data by visualizing it. For this dataset, you can use a scatter plot to visualize the data, since it has only two properties to plot (profit and population). Many other problems that you will encounter in real life are multi-dimensional and cannot be plotted on a 2-d plot. There are many plotting libraries in python (see this [blog post](https://blog.modeanalytics.com/python-data-visualization-libraries/) for a good summary of the most popular ones). \n", + "\n", + "In this course, we will be exclusively using `matplotlib` to do all our plotting. `matplotlib` is one of the most popular scientific plotting libraries in python and has extensive tools and functions to make beautiful plots. `pyplot` is a module within `matplotlib` which provides a simplified interface to `matplotlib`'s most common plotting tasks, mimicking MATLAB's plotting interface.\n", + "\n", + "
\n", + "You might have noticed that we have imported the `pyplot` module at the beginning of this exercise using the command `from matplotlib import pyplot`. This is rather uncommon, and if you look at python code elsewhere or in the `matplotlib` tutorials, you will see that the module is named `plt`. This is used by module renaming by using the import command `import matplotlib.pyplot as plt`. We will not using the short name of `pyplot` module in this class exercises, but you should be aware of this deviation from norm.\n", + "
\n", + "\n", + "\n", + "In the following part, your first job is to complete the `plotData` function below. Modify the function and fill in the following code:\n", + "\n", + "```python\n", + " pyplot.plot(x, y, 'ro', ms=10, mec='k')\n", + " pyplot.ylabel('Profit in $10,000')\n", + " pyplot.xlabel('Population of City in 10,000s')\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def plotData(x, y):\n", + " \"\"\"\n", + " Plots the data points x and y into a new figure. Plots the data \n", + " points and gives the figure axes labels of population and profit.\n", + " \n", + " Parameters\n", + " ----------\n", + " x : array_like\n", + " Data point values for x-axis.\n", + "\n", + " y : array_like\n", + " Data point values for y-axis. Note x and y should have the same size.\n", + " \n", + " Instructions\n", + " ------------\n", + " Plot the training data into a figure using the \"figure\" and \"plot\"\n", + " functions. Set the axes labels using the \"xlabel\" and \"ylabel\" functions.\n", + " Assume the population and revenue data have been passed in as the x\n", + " and y arguments of this function. \n", + " \n", + " Hint\n", + " ----\n", + " You can use the 'ro' option with plot to have the markers\n", + " appear as red circles. Furthermore, you can make the markers larger by\n", + " using plot(..., 'ro', ms=10), where `ms` refers to marker size. You \n", + " can also set the marker edge color using the `mec` property.\n", + " \"\"\"\n", + " fig = pyplot.figure() # open a new figure\n", + " \n", + " # ====================== YOUR CODE HERE ======================= \n", + " \n", + "\n", + " # =============================================================\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now run the defined function with the loaded data to visualize the data. The end result should look like the following figure:\n", + "\n", + "![](Figures/dataset1.png)\n", + "\n", + "Execute the next cell to visualize the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plotData(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To quickly learn more about the `matplotlib` plot function and what arguments you can provide to it, you can type `?pyplot.plot` in a cell within the jupyter notebook. This opens a separate page showing the documentation for the requested function. You can also search online for plotting documentation. \n", + "\n", + "To set the markers to red circles, we used the option `'or'` within the `plot` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "?pyplot.plot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.2 Gradient Descent\n", + "\n", + "In this part, you will fit the linear regression parameters $\\theta$ to our dataset using gradient descent.\n", + "\n", + "#### 2.2.1 Update Equations\n", + "\n", + "The objective of linear regression is to minimize the cost function\n", + "\n", + "$$ J(\\theta) = \\frac{1}{2m} \\sum_{i=1}^m \\left( h_{\\theta}(x^{(i)}) - y^{(i)}\\right)^2$$\n", + "\n", + "where the hypothesis $h_\\theta(x)$ is given by the linear model\n", + "$$ h_\\theta(x) = \\theta^Tx = \\theta_0 + \\theta_1 x_1$$\n", + "\n", + "Recall that the parameters of your model are the $\\theta_j$ values. These are\n", + "the values you will adjust to minimize cost $J(\\theta)$. One way to do this is to\n", + "use the batch gradient descent algorithm. In batch gradient descent, each\n", + "iteration performs the update\n", + "\n", + "$$ \\theta_j = \\theta_j - \\alpha \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta(x^{(i)}) - y^{(i)}\\right)x_j^{(i)} \\qquad \\text{simultaneously update } \\theta_j \\text{ for all } j$$\n", + "\n", + "With each step of gradient descent, your parameters $\\theta_j$ come closer to the optimal values that will achieve the lowest cost J($\\theta$).\n", + "\n", + "
\n", + "**Implementation Note:** We store each example as a row in the the $X$ matrix in Python `numpy`. To take into account the intercept term ($\\theta_0$), we add an additional first column to $X$ and set it to all ones. This allows us to treat $\\theta_0$ as simply another 'feature'.\n", + "
\n", + "\n", + "\n", + "#### 2.2.2 Implementation\n", + "\n", + "We have already set up the data for linear regression. In the following cell, we add another dimension to our data to accommodate the $\\theta_0$ intercept term. Do NOT execute this cell more than once." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Add a column of ones to X. The numpy function stack joins arrays along a given axis. \n", + "# The first axis (axis=0) refers to rows (training examples) \n", + "# and second axis (axis=1) refers to columns (features).\n", + "X = np.stack([np.ones(m), X], axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 2.2.3 Computing the cost $J(\\theta)$\n", + "\n", + "As you perform gradient descent to learn minimize the cost function $J(\\theta)$, it is helpful to monitor the convergence by computing the cost. In this section, you will implement a function to calculate $J(\\theta)$ so you can check the convergence of your gradient descent implementation. \n", + "\n", + "Your next task is to complete the code for the function `computeCost` which computes $J(\\theta)$. As you are doing this, remember that the variables $X$ and $y$ are not scalar values. $X$ is a matrix whose rows represent the examples from the training set and $y$ is a vector whose each elemennt represent the value at a given row of $X$.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def computeCost(X, y, theta):\n", + " \"\"\"\n", + " Compute cost for linear regression. Computes the cost of using theta as the\n", + " parameter for linear regression to fit the data points in X and y.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The input dataset of shape (m x n+1), where m is the number of examples,\n", + " and n is the number of features. We assume a vector of one's already \n", + " appended to the features so we have n+1 columns.\n", + " \n", + " y : array_like\n", + " The values of the function at each data point. This is a vector of\n", + " shape (m, ).\n", + " \n", + " theta : array_like\n", + " The parameters for the regression function. This is a vector of \n", + " shape (n+1, ).\n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The value of the regression cost function.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost of a particular choice of theta. \n", + " You should set J to the cost.\n", + " \"\"\"\n", + " \n", + " # initialize some useful values\n", + " m = y.size # number of training examples\n", + " \n", + " # You need to return the following variables correctly\n", + " J = 0\n", + " \n", + " # ====================== YOUR CODE HERE =====================\n", + "\n", + " \n", + " # ===========================================================\n", + " return J" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the function, the next step will run `computeCost` two times using two different initializations of $\\theta$. You will see the cost printed to the screen." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "J = computeCost(X, y, theta=np.array([0.0, 0.0]))\n", + "print('With theta = [0, 0] \\nCost computed = %.2f' % J)\n", + "print('Expected cost value (approximately) 32.07\\n')\n", + "\n", + "# further testing of the cost function\n", + "J = computeCost(X, y, theta=np.array([-1, 2]))\n", + "print('With theta = [-1, 2]\\nCost computed = %.2f' % J)\n", + "print('Expected cost value (approximately) 54.24')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions by executing the following cell.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[2] = computeCost\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 2.2.4 Gradient descent\n", + "\n", + "Next, you will complete a function which implements gradient descent.\n", + "The loop structure has been written for you, and you only need to supply the updates to $\\theta$ within each iteration. \n", + "\n", + "As you program, make sure you understand what you are trying to optimize and what is being updated. Keep in mind that the cost $J(\\theta)$ is parameterized by the vector $\\theta$, not $X$ and $y$. That is, we minimize the value of $J(\\theta)$ by changing the values of the vector $\\theta$, not by changing $X$ or $y$. [Refer to the equations in this notebook](#section2) and to the video lectures if you are uncertain. A good way to verify that gradient descent is working correctly is to look at the value of $J(\\theta)$ and check that it is decreasing with each step. \n", + "\n", + "The starter code for the function `gradientDescent` calls `computeCost` on every iteration and saves the cost to a `python` list. Assuming you have implemented gradient descent and `computeCost` correctly, your value of $J(\\theta)$ should never increase, and should converge to a steady value by the end of the algorithm.\n", + "\n", + "
\n", + "**Vectors and matrices in `numpy`** - Important implementation notes\n", + "\n", + "A vector in `numpy` is a one dimensional array, for example `np.array([1, 2, 3])` is a vector. A matrix in `numpy` is a two dimensional array, for example `np.array([[1, 2, 3], [4, 5, 6]])`. However, the following is still considered a matrix `np.array([[1, 2, 3]])` since it has two dimensions, even if it has a shape of 1x3 (which looks like a vector).\n", + "\n", + "Given the above, the function `np.dot` which we will use for all matrix/vector multiplication has the following properties:\n", + "- It always performs inner products on vectors. If `x=np.array([1, 2, 3])`, then `np.dot(x, x)` is a scalar.\n", + "- For matrix-vector multiplication, so if $X$ is a $m\\times n$ matrix and $y$ is a vector of length $m$, then the operation `np.dot(y, X)` considers $y$ as a $1 \\times m$ vector. On the other hand, if $y$ is a vector of length $n$, then the operation `np.dot(X, y)` considers $y$ as a $n \\times 1$ vector.\n", + "- A vector can be promoted to a matrix using `y[None]` or `[y[np.newaxis]`. That is, if `y = np.array([1, 2, 3])` is a vector of size 3, then `y[None, :]` is a matrix of shape $1 \\times 3$. We can use `y[:, None]` to obtain a shape of $3 \\times 1$.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def gradientDescent(X, y, theta, alpha, num_iters):\n", + " \"\"\"\n", + " Performs gradient descent to learn `theta`. Updates theta by taking `num_iters`\n", + " gradient steps with learning rate `alpha`.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The input dataset of shape (m x n+1).\n", + " \n", + " y : arra_like\n", + " Value at given features. A vector of shape (m, ).\n", + " \n", + " theta : array_like\n", + " Initial values for the linear regression parameters. \n", + " A vector of shape (n+1, ).\n", + " \n", + " alpha : float\n", + " The learning rate.\n", + " \n", + " num_iters : int\n", + " The number of iterations for gradient descent. \n", + " \n", + " Returns\n", + " -------\n", + " theta : array_like\n", + " The learned linear regression parameters. A vector of shape (n+1, ).\n", + " \n", + " J_history : list\n", + " A python list for the values of the cost function after each iteration.\n", + " \n", + " Instructions\n", + " ------------\n", + " Peform a single gradient step on the parameter vector theta.\n", + "\n", + " While debugging, it can be useful to print out the values of \n", + " the cost function (computeCost) and gradient here.\n", + " \"\"\"\n", + " # Initialize some useful values\n", + " m = y.shape[0] # number of training examples\n", + " \n", + " # make a copy of theta, to avoid changing the original array, since numpy arrays\n", + " # are passed by reference to functions\n", + " theta = theta.copy()\n", + " \n", + " J_history = [] # Use a python list to save cost in every iteration\n", + " \n", + " for i in range(num_iters):\n", + " # ==================== YOUR CODE HERE =================================\n", + " \n", + "\n", + " # =====================================================================\n", + " \n", + " # save the cost J in every iteration\n", + " J_history.append(computeCost(X, y, theta))\n", + " \n", + " return theta, J_history" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you are finished call the implemented `gradientDescent` function and print the computed $\\theta$. We initialize the $\\theta$ parameters to 0 and the learning rate $\\alpha$ to 0.01. Execute the following cell to check your code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# initialize fitting parameters\n", + "theta = np.zeros(2)\n", + "\n", + "# some gradient descent settings\n", + "iterations = 1500\n", + "alpha = 0.01\n", + "\n", + "theta, J_history = gradientDescent(X ,y, theta, alpha, iterations)\n", + "print('Theta found by gradient descent: {:.4f}, {:.4f}'.format(*theta))\n", + "print('Expected theta values (approximately): [-3.6303, 1.1664]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use your final parameters to plot the linear fit. The results should look like the following figure.\n", + "\n", + "![](Figures/regression_result.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot the linear fit\n", + "plotData(X[:, 1], y)\n", + "pyplot.plot(X[:, 1], np.dot(X, theta), '-')\n", + "pyplot.legend(['Training data', 'Linear regression']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Your final values for $\\theta$ will also be used to make predictions on profits in areas of 35,000 and 70,000 people.\n", + "\n", + "
\n", + "Note the way that the following lines use matrix multiplication, rather than explicit summation or looping, to calculate the predictions. This is an example of code vectorization in `numpy`.\n", + "
\n", + "\n", + "
\n", + "Note that the first argument to the `numpy` function `dot` is a python list. `numpy` can internally converts **valid** python lists to numpy arrays when explicitly provided as arguments to `numpy` functions.\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Predict values for population sizes of 35,000 and 70,000\n", + "predict1 = np.dot([1, 3.5], theta)\n", + "print('For population = 35,000, we predict a profit of {:.2f}\\n'.format(predict1*10000))\n", + "\n", + "predict2 = np.dot([1, 7], theta)\n", + "print('For population = 70,000, we predict a profit of {:.2f}\\n'.format(predict2*10000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions by executing the next cell.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[3] = gradientDescent\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Visualizing $J(\\theta)$\n", + "\n", + "To understand the cost function $J(\\theta)$ better, you will now plot the cost over a 2-dimensional grid of $\\theta_0$ and $\\theta_1$ values. You will not need to code anything new for this part, but you should understand how the code you have written already is creating these images.\n", + "\n", + "In the next cell, the code is set up to calculate $J(\\theta)$ over a grid of values using the `computeCost` function that you wrote. After executing the following cell, you will have a 2-D array of $J(\\theta)$ values. Then, those values are used to produce surface and contour plots of $J(\\theta)$ using the matplotlib `plot_surface` and `contourf` functions. The plots should look something like the following:\n", + "\n", + "![](Figures/cost_function.png)\n", + "\n", + "The purpose of these graphs is to show you how $J(\\theta)$ varies with changes in $\\theta_0$ and $\\theta_1$. The cost function $J(\\theta)$ is bowl-shaped and has a global minimum. (This is easier to see in the contour plot than in the 3D surface plot). This minimum is the optimal point for $\\theta_0$ and $\\theta_1$, and each step of gradient descent moves closer to this point." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# grid over which we will calculate J\n", + "theta0_vals = np.linspace(-10, 10, 100)\n", + "theta1_vals = np.linspace(-1, 4, 100)\n", + "\n", + "# initialize J_vals to a matrix of 0's\n", + "J_vals = np.zeros((theta0_vals.shape[0], theta1_vals.shape[0]))\n", + "\n", + "# Fill out J_vals\n", + "for i, theta0 in enumerate(theta0_vals):\n", + " for j, theta1 in enumerate(theta1_vals):\n", + " J_vals[i, j] = computeCost(X, y, [theta0, theta1])\n", + " \n", + "# Because of the way meshgrids work in the surf command, we need to\n", + "# transpose J_vals before calling surf, or else the axes will be flipped\n", + "J_vals = J_vals.T\n", + "\n", + "# surface plot\n", + "fig = pyplot.figure(figsize=(12, 5))\n", + "ax = fig.add_subplot(121, projection='3d')\n", + "ax.plot_surface(theta0_vals, theta1_vals, J_vals, cmap='viridis')\n", + "pyplot.xlabel('theta0')\n", + "pyplot.ylabel('theta1')\n", + "pyplot.title('Surface')\n", + "\n", + "# contour plot\n", + "# Plot J_vals as 15 contours spaced logarithmically between 0.01 and 100\n", + "ax = pyplot.subplot(122)\n", + "pyplot.contour(theta0_vals, theta1_vals, J_vals, linewidths=2, cmap='viridis', levels=np.logspace(-2, 3, 20))\n", + "pyplot.xlabel('theta0')\n", + "pyplot.ylabel('theta1')\n", + "pyplot.plot(theta[0], theta[1], 'ro', ms=10, lw=2)\n", + "pyplot.title('Contour, showing minimum')\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Optional Exercises\n", + "\n", + "If you have successfully completed the material above, congratulations! You now understand linear regression and should able to start using it on your own datasets.\n", + "\n", + "For the rest of this programming exercise, we have included the following optional exercises. These exercises will help you gain a deeper understanding of the material, and if you are able to do so, we encourage you to complete them as well. You can still submit your solutions to these exercises to check if your answers are correct.\n", + "\n", + "## 3 Linear regression with multiple variables\n", + "\n", + "In this part, you will implement linear regression with multiple variables to predict the prices of houses. Suppose you are selling your house and you want to know what a good market price would be. One way to do this is to first collect information on recent houses sold and make a model of housing prices.\n", + "\n", + "The file `Data/ex1data2.txt` contains a training set of housing prices in Portland, Oregon. The first column is the size of the house (in square feet), the second column is the number of bedrooms, and the third column is the price\n", + "of the house. \n", + "\n", + "\n", + "### 3.1 Feature Normalization\n", + "\n", + "We start by loading and displaying some values from this dataset. By looking at the values, note that house sizes are about 1000 times the number of bedrooms. When features differ by orders of magnitude, first performing feature scaling can make gradient descent converge much more quickly." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load data\n", + "data = np.loadtxt(os.path.join('Data', 'ex1data2.txt'), delimiter=',')\n", + "X = data[:, :2]\n", + "y = data[:, 2]\n", + "m = y.size\n", + "\n", + "# print out some data points\n", + "print('{:>8s}{:>8s}{:>10s}'.format('X[:,0]', 'X[:, 1]', 'y'))\n", + "print('-'*26)\n", + "for i in range(10):\n", + " print('{:8.0f}{:8.0f}{:10.0f}'.format(X[i, 0], X[i, 1], y[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Your task here is to complete the code in `featureNormalize` function:\n", + "- Subtract the mean value of each feature from the dataset.\n", + "- After subtracting the mean, additionally scale (divide) the feature values by their respective “standard deviations.”\n", + "\n", + "The standard deviation is a way of measuring how much variation there is in the range of values of a particular feature (most data points will lie within ±2 standard deviations of the mean); this is an alternative to taking the range of values (max-min). In `numpy`, you can use the `std` function to compute the standard deviation. \n", + "\n", + "For example, the quantity `X[:, 0]` contains all the values of $x_1$ (house sizes) in the training set, so `np.std(X[:, 0])` computes the standard deviation of the house sizes.\n", + "At the time that the function `featureNormalize` is called, the extra column of 1’s corresponding to $x_0 = 1$ has not yet been added to $X$. \n", + "\n", + "You will do this for all the features and your code should work with datasets of all sizes (any number of features / examples). Note that each column of the matrix $X$ corresponds to one feature.\n", + "\n", + "
\n", + "**Implementation Note:** When normalizing the features, it is important\n", + "to store the values used for normalization - the mean value and the standard deviation used for the computations. After learning the parameters\n", + "from the model, we often want to predict the prices of houses we have not\n", + "seen before. Given a new x value (living room area and number of bedrooms), we must first normalize x using the mean and standard deviation that we had previously computed from the training set.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def featureNormalize(X):\n", + " \"\"\"\n", + " Normalizes the features in X. returns a normalized version of X where\n", + " the mean value of each feature is 0 and the standard deviation\n", + " is 1. This is often a good preprocessing step to do when working with\n", + " learning algorithms.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset of shape (m x n).\n", + " \n", + " Returns\n", + " -------\n", + " X_norm : array_like\n", + " The normalized dataset of shape (m x n).\n", + " \n", + " Instructions\n", + " ------------\n", + " First, for each feature dimension, compute the mean of the feature\n", + " and subtract it from the dataset, storing the mean value in mu. \n", + " Next, compute the standard deviation of each feature and divide\n", + " each feature by it's standard deviation, storing the standard deviation \n", + " in sigma. \n", + " \n", + " Note that X is a matrix where each column is a feature and each row is\n", + " an example. You needto perform the normalization separately for each feature. \n", + " \n", + " Hint\n", + " ----\n", + " You might find the 'np.mean' and 'np.std' functions useful.\n", + " \"\"\"\n", + " # You need to set these values correctly\n", + " X_norm = X.copy()\n", + " mu = np.zeros(X.shape[1])\n", + " sigma = np.zeros(X.shape[1])\n", + "\n", + " # =========================== YOUR CODE HERE =====================\n", + "\n", + " \n", + " # ================================================================\n", + " return X_norm, mu, sigma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Execute the next cell to run the implemented `featureNormalize` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# call featureNormalize on the loaded data\n", + "X_norm, mu, sigma = featureNormalize(X)\n", + "\n", + "print('Computed mean:', mu)\n", + "print('Computed standard deviation:', sigma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should not submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[4] = featureNormalize\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the `featureNormalize` function is tested, we now add the intercept term to `X_norm`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Add intercept term to X\n", + "X = np.concatenate([np.ones((m, 1)), X_norm], axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 3.2 Gradient Descent\n", + "\n", + "Previously, you implemented gradient descent on a univariate regression problem. The only difference now is that there is one more feature in the matrix $X$. The hypothesis function and the batch gradient descent update\n", + "rule remain unchanged. \n", + "\n", + "You should complete the code for the functions `computeCostMulti` and `gradientDescentMulti` to implement the cost function and gradient descent for linear regression with multiple variables. If your code in the previous part (single variable) already supports multiple variables, you can use it here too.\n", + "Make sure your code supports any number of features and is well-vectorized.\n", + "You can use the `shape` property of `numpy` arrays to find out how many features are present in the dataset.\n", + "\n", + "
\n", + "**Implementation Note:** In the multivariate case, the cost function can\n", + "also be written in the following vectorized form:\n", + "\n", + "$$ J(\\theta) = \\frac{1}{2m}(X\\theta - \\vec{y})^T(X\\theta - \\vec{y}) $$\n", + "\n", + "where \n", + "\n", + "$$ X = \\begin{pmatrix}\n", + " - (x^{(1)})^T - \\\\\n", + " - (x^{(2)})^T - \\\\\n", + " \\vdots \\\\\n", + " - (x^{(m)})^T - \\\\ \\\\\n", + " \\end{pmatrix} \\qquad \\mathbf{y} = \\begin{bmatrix} y^{(1)} \\\\ y^{(2)} \\\\ \\vdots \\\\ y^{(m)} \\\\\\end{bmatrix}$$\n", + "\n", + "the vectorized version is efficient when you are working with numerical computing tools like `numpy`. If you are an expert with matrix operations, you can prove to yourself that the two forms are equivalent.\n", + "
\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def computeCostMulti(X, y, theta):\n", + " \"\"\"\n", + " Compute cost for linear regression with multiple variables.\n", + " Computes the cost of using theta as the parameter for linear regression to fit the data points in X and y.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset of shape (m x n+1).\n", + " \n", + " y : array_like\n", + " A vector of shape (m, ) for the values at a given data point.\n", + " \n", + " theta : array_like\n", + " The linear regression parameters. A vector of shape (n+1, )\n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The value of the cost function. \n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost of a particular choice of theta. You should set J to the cost.\n", + " \"\"\"\n", + " # Initialize some useful values\n", + " m = y.shape[0] # number of training examples\n", + " \n", + " # You need to return the following variable correctly\n", + " J = 0\n", + " \n", + " # ======================= YOUR CODE HERE ===========================\n", + "\n", + " \n", + " # ==================================================================\n", + " return J\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[5] = computeCostMulti\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def gradientDescentMulti(X, y, theta, alpha, num_iters):\n", + " \"\"\"\n", + " Performs gradient descent to learn theta.\n", + " Updates theta by taking num_iters gradient steps with learning rate alpha.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset of shape (m x n+1).\n", + " \n", + " y : array_like\n", + " A vector of shape (m, ) for the values at a given data point.\n", + " \n", + " theta : array_like\n", + " The linear regression parameters. A vector of shape (n+1, )\n", + " \n", + " alpha : float\n", + " The learning rate for gradient descent. \n", + " \n", + " num_iters : int\n", + " The number of iterations to run gradient descent. \n", + " \n", + " Returns\n", + " -------\n", + " theta : array_like\n", + " The learned linear regression parameters. A vector of shape (n+1, ).\n", + " \n", + " J_history : list\n", + " A python list for the values of the cost function after each iteration.\n", + " \n", + " Instructions\n", + " ------------\n", + " Peform a single gradient step on the parameter vector theta.\n", + "\n", + " While debugging, it can be useful to print out the values of \n", + " the cost function (computeCost) and gradient here.\n", + " \"\"\"\n", + " # Initialize some useful values\n", + " m = y.shape[0] # number of training examples\n", + " \n", + " # make a copy of theta, which will be updated by gradient descent\n", + " theta = theta.copy()\n", + " \n", + " J_history = []\n", + " \n", + " for i in range(num_iters):\n", + " # ======================= YOUR CODE HERE ==========================\n", + "\n", + " \n", + " # =================================================================\n", + " \n", + " # save the cost J in every iteration\n", + " J_history.append(computeCostMulti(X, y, theta))\n", + " \n", + " return theta, J_history" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[6] = gradientDescentMulti\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.2.1 Optional (ungraded) exercise: Selecting learning rates\n", + "\n", + "In this part of the exercise, you will get to try out different learning rates for the dataset and find a learning rate that converges quickly. You can change the learning rate by modifying the following code and changing the part of the code that sets the learning rate.\n", + "\n", + "Use your implementation of `gradientDescentMulti` function and run gradient descent for about 50 iterations at the chosen learning rate. The function should also return the history of $J(\\theta)$ values in a vector $J$.\n", + "\n", + "After the last iteration, plot the J values against the number of the iterations.\n", + "\n", + "If you picked a learning rate within a good range, your plot look similar as the following Figure. \n", + "\n", + "![](Figures/learning_rate.png)\n", + "\n", + "If your graph looks very different, especially if your value of $J(\\theta)$ increases or even blows up, adjust your learning rate and try again. We recommend trying values of the learning rate $\\alpha$ on a log-scale, at multiplicative steps of about 3 times the previous value (i.e., 0.3, 0.1, 0.03, 0.01 and so on). You may also want to adjust the number of iterations you are running if that will help you see the overall trend in the curve.\n", + "\n", + "
\n", + "**Implementation Note:** If your learning rate is too large, $J(\\theta)$ can diverge and ‘blow up’, resulting in values which are too large for computer calculations. In these situations, `numpy` will tend to return\n", + "NaNs. NaN stands for ‘not a number’ and is often caused by undefined operations that involve −∞ and +∞.\n", + "
\n", + "\n", + "
\n", + "**MATPLOTLIB tip:** To compare how different learning learning rates affect convergence, it is helpful to plot $J$ for several learning rates on the same figure. This can be done by making `alpha` a python list, and looping across the values within this list, and calling the plot function in every iteration of the loop. It is also useful to have a legend to distinguish the different lines within the plot. Search online for `pyplot.legend` for help on showing legends in `matplotlib`.\n", + "
\n", + "\n", + "Notice the changes in the convergence curves as the learning rate changes. With a small learning rate, you should find that gradient descent takes a very long time to converge to the optimal value. Conversely, with a large learning rate, gradient descent might not converge or might even diverge!\n", + "Using the best learning rate that you found, run the script\n", + "to run gradient descent until convergence to find the final values of $\\theta$. Next,\n", + "use this value of $\\theta$ to predict the price of a house with 1650 square feet and\n", + "3 bedrooms. You will use value later to check your implementation of the normal equations. Don’t forget to normalize your features when you make this prediction!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "Instructions\n", + "------------\n", + "We have provided you with the following starter code that runs\n", + "gradient descent with a particular learning rate (alpha). \n", + "\n", + "Your task is to first make sure that your functions - `computeCost`\n", + "and `gradientDescent` already work with this starter code and\n", + "support multiple variables.\n", + "\n", + "After that, try running gradient descent with different values of\n", + "alpha and see which one gives you the best result.\n", + "\n", + "Finally, you should complete the code at the end to predict the price\n", + "of a 1650 sq-ft, 3 br house.\n", + "\n", + "Hint\n", + "----\n", + "At prediction, make sure you do the same feature normalization.\n", + "\"\"\"\n", + "# Choose some alpha value - change this\n", + "alpha = 0.1\n", + "num_iters = 400\n", + "\n", + "# init theta and run gradient descent\n", + "theta = np.zeros(3)\n", + "theta, J_history = gradientDescentMulti(X, y, theta, alpha, num_iters)\n", + "\n", + "# Plot the convergence graph\n", + "pyplot.plot(np.arange(len(J_history)), J_history, lw=2)\n", + "pyplot.xlabel('Number of iterations')\n", + "pyplot.ylabel('Cost J')\n", + "\n", + "# Display the gradient descent's result\n", + "print('theta computed from gradient descent: {:s}'.format(str(theta)))\n", + "\n", + "# Estimate the price of a 1650 sq-ft, 3 br house\n", + "# ======================= YOUR CODE HERE ===========================\n", + "# Recall that the first column of X is all-ones. \n", + "# Thus, it does not need to be normalized.\n", + "\n", + "price = 0 # You should change this\n", + "\n", + "# ===================================================================\n", + "\n", + "print('Predicted price of a 1650 sq-ft, 3 br house (using gradient descent): ${:.0f}'.format(price))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You do not need to submit any solutions for this optional (ungraded) part.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 3.3 Normal Equations\n", + "\n", + "In the lecture videos, you learned that the closed-form solution to linear regression is\n", + "\n", + "$$ \\theta = \\left( X^T X\\right)^{-1} X^T\\vec{y}$$\n", + "\n", + "Using this formula does not require any feature scaling, and you will get an exact solution in one calculation: there is no “loop until convergence” like in gradient descent. \n", + "\n", + "First, we will reload the data to ensure that the variables have not been modified. Remember that while you do not need to scale your features, we still need to add a column of 1’s to the $X$ matrix to have an intercept term ($\\theta_0$). The code in the next cell will add the column of 1’s to X for you." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load data\n", + "data = np.loadtxt(os.path.join('Data', 'ex1data2.txt'), delimiter=',')\n", + "X = data[:, :2]\n", + "y = data[:, 2]\n", + "m = y.size\n", + "X = np.concatenate([np.ones((m, 1)), X], axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Complete the code for the function `normalEqn` below to use the formula above to calculate $\\theta$. \n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def normalEqn(X, y):\n", + " \"\"\"\n", + " Computes the closed-form solution to linear regression using the normal equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset of shape (m x n+1).\n", + " \n", + " y : array_like\n", + " The value at each data point. A vector of shape (m, ).\n", + " \n", + " Returns\n", + " -------\n", + " theta : array_like\n", + " Estimated linear regression parameters. A vector of shape (n+1, ).\n", + " \n", + " Instructions\n", + " ------------\n", + " Complete the code to compute the closed form solution to linear\n", + " regression and put the result in theta.\n", + " \n", + " Hint\n", + " ----\n", + " Look up the function `np.linalg.pinv` for computing matrix inverse.\n", + " \"\"\"\n", + " theta = np.zeros(X.shape[1])\n", + " \n", + " # ===================== YOUR CODE HERE ============================\n", + "\n", + " \n", + " # =================================================================\n", + " return theta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[7] = normalEqn\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Optional (ungraded) exercise: Now, once you have found $\\theta$ using this\n", + "method, use it to make a price prediction for a 1650-square-foot house with\n", + "3 bedrooms. You should find that gives the same predicted price as the value\n", + "you obtained using the model fit with gradient descent (in Section 3.2.1)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Calculate the parameters from the normal equation\n", + "theta = normalEqn(X, y);\n", + "\n", + "# Display normal equation's result\n", + "print('Theta computed from the normal equations: {:s}'.format(str(theta)));\n", + "\n", + "# Estimate the price of a 1650 sq-ft, 3 br house\n", + "# ====================== YOUR CODE HERE ======================\n", + "\n", + "price = 0 # You should change this\n", + "\n", + "# ============================================================\n", + "\n", + "print('Predicted price of a 1650 sq-ft, 3 br house (using normal equations): ${:.0f}'.format(price))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/exercise1.ipynb b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/exercise1.ipynb index dc594f146..c9184cd8f 100644 --- a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/exercise1.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/exercise1.ipynb @@ -1294,7 +1294,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2 (1).ipynb b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2 (1).ipynb new file mode 100644 index 000000000..ca0e52719 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2 (1).ipynb @@ -0,0 +1,367 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns; sns.set()\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "A = np.eye(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(A)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def warmUpExcercise():\n", + " A = []\n", + " \n", + " for i in range(5):\n", + " row=[]\n", + " for j in range(5):\n", + " if j == i:\n", + " row.append(1)\n", + " row.append(0)\n", + " A.append(row)\n", + " return A" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "warmUpExcercise()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "data = np.loadtxt('data1.txt',delimiter=',')\n", + "x,y = data[:,0], data[:,1]\n", + "m = y.size" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(x,y);" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "model = LinearRegression(fit_intercept=True)\n", + "\n", + "model.fit(x[:, np.newaxis], y)\n", + "\n", + "xfit = np.linspace(5,22.5,100)\n", + "yfit = model.predict(xfit[:, np.newaxis])\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_axes([0,0,1,1])\n", + "\n", + "ax.scatter(x,y,c='r', marker='o', Label='Training set')\n", + "ax.plot(xfit,yfit, label='Linear Regression');\n", + "ax.set_xlabel('Population of City in 1000s')\n", + "ax.set_ylabel('Profit in $10,000')\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# Gradient Descent\n", + "x = np.stack([np.ones(m), x], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def computeCost(X,y,theta):\n", + " m = y.size\n", + " \n", + " hyp = X.dot(theta)\n", + " dif = np.square(hyp - y)\n", + " \n", + " j = (np.sum(dif)) * (1/(2*m))\n", + " return j" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "54.24\n" + ] + } + ], + "source": [ + "J = computeCost(x,y,theta=np.array([-1,2]))\n", + "print('%.2f'%J)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "def GradientDescent(X, y, theta, alpha, num_iters):\n", + " \n", + " J_history = []\n", + " \n", + " for i in range(num_iters):\n", + " der = 1/m * np.transpose(X).dot(X.dot(theta) - y)\n", + " theta = theta - (alpha * der)\n", + " cost_val = computeCost(X,y,theta)\n", + " J_history.append(cost_val)\n", + " \n", + " return theta, J_history" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Theta found by gradient descent: -3.6303, 1.1664\n", + "Expected theta values (approximately): [-3.6303, 1.1664]\n" + ] + } + ], + "source": [ + "theta, J_history = GradientDescent(x ,y, theta=np.zeros(2), alpha=0.01, num_iters=1500)\n", + "print('Theta found by gradient descent: {:.4f}, {:.4f}'.format(*theta))\n", + "print('Expected theta values (approximately): [-3.6303, 1.1664]')" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAD7CAYAAACYLnSTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXhTVfrA8W/S0rK1UNoCgsgqx0FF2YZ9cZ1xwQUcZVBKRwsyo+MyKDKKjooo4OC+s4iCiDo4LoM46gAiICgI6g/xsAooW0uBUoSWNvn9kaS0yU2apFnuTd/P8/hIT+7ykob3npz7nnNtTqcTIYQQ1maPdwBCCCFqTpK5EEIkAEnmQgiRACSZCyFEApBkLoQQCSA5DudMBXoAe4DyOJxfCCGsKAk4BfgaKPF+MahkrpT6B3Ct+8eFWutxSqlXgX7AUXf7Q1rrfwdxuB7AF8GcVwghhI/+wHLvxmqTuVLqQuBioAvgBD5WSl0NdAcGaK33hBjIHoCDB4/icIRe456Z2ZADB4pD3i9eJN7os1rMEm90WS1eCC5mu91GRkYDcOdQb8H0zPcAY7XWpQBKqY3Aae7/ZimlWgL/xtUzdwRxvHIAh8MZVjL37GslEm/0WS1miTe6rBYvhBSz4fB0tclca73B82el1Om4hlv6A4OAvwCHgf8ANwHTg41GCCFE5NiCnc6vlDoTWAj8Q2v9mtdrVwM5WuurgzhUG2B7iHEKIYRwaQv85N0Y7A3QvsAC4A6t9Xyl1NlAR631AvcmNuBEKNEcOFDs87Xi2LGjFBcfory8zO9+drsdhyOY0RxzkHiN2EhJqUtGRjY2m63GR8vOTiM//0gE4ooNiTe6rBYvBBez3W4jM7Oh39eDuQHaCngPuE5rvdjdbAOeUkotBoqB0cBrfg4RlGPHjnLkyEEaN86mTp0Uv//Ik5PtlJVZJzlKvL6cTgeHDhVQXHyYtLTGUT2XELVFMD3zu4C6wBNKKU/bS8BjwAqgDrBAa/1mTQIpLj5E48bZpKSk1uQwwgJsNjtpaRkUFu6TZC5qhaJVKyl4dwFlhQdIbpJJ1pChpPfqE9FzBHMD9Hbgdj8vvxCpQMrLy6hTJyVShxMml5SUjMMhc8ZE4itatZJ9r8/GWVoKQFnhAfa9PhsgogndVNP5IzF+KqxBfteitih4d0FFIvdwlpZS8O4CP3uEx1TJ3EymTZtCbu5wbrjhDwwa1Ivc3OHk5g5n4cIPgj7GjBkvsWzZ5wG3yc0dXtNQfUya9CAfffRhwG0effQh9u4Ndb6XECJUZYUHQmoPVzzWZrGEsWPvAWDPnt389a83M3v2vJCPkZc3ptobiuEcNxK++WYNf/rTqLicW4jaJLlJpmHiTm6SGdnzRPRotcTMmS+zYcP/sX//XoYOvY42bdryyisvUFJynCNHirnttjvp338QkyY9SLdu3TnnnK7ce+9dtGvXnk2bNE2aZDJx4mTS0xvRr193li9fw8yZL1NQkM+uXTvZt28vl19+JSNH3kRZWRmPP/4o3323nuzspthsNkaOvImuXbtXxON0OnnuuSdZsWI5WVlZOBwOunTpBsDLLz/P2rVfU1RURFZWFg8//BgLF35IQUE+d999O88/P521a9cwf/5cSkpKKCs7wfjx93P22efE6+0VIqFkDRlaZcwcwJaSQtaQoRE9j2mT+Yrv97D8O99hAJsNavrY0n6dT6Hv2afU6BilpSXMnfsOABMmjGP8+Ptp3boNa9d+zdNP/5P+/QdV2X7Lls38/e8P0LHjGdx339188skirrlmmM82L7wwg+LiI1x77VUMGXIt//3vQo4fP8a8eQvYt28vOTlV9wFYuvR/bNqkmTv3bY4cOUJurmubn3/exc6dP/HSS7Ow2+1MnPgA//3vIkaMyOX99xfw+ONPk5aWzvvvL2Dq1Kdo3LgxixZ9wJw5s5k69ckavT9CCBfPTc64V7MIY506nVXx5/vvn8jKlV+wZMlnbNjwPceOHfPZPiOjCR07ngFAu3YdKCoq8tmma9fu1KlTh4yMJqSnp3P0aDFff72awYOvxmaz0bz5KXTr1sNnv3Xr1jJw4HkkJyeTkZFBr159ATj11FbceuudfPjhe+zcuYMNG76nZctTq+xrt9t59NHHWbHiC3bu3MH69Wux2eRWihCRlN6rT8STtzfTJvO+Zxv3ns0yCSc19WQ9/C23jKJr12506dKNbt168NBDE3y2T0mpWnZptIxC5W1sNhtOpxO7PQmnM/Df17XtyZ+TkpIA+PHHjTz44H0MGzac8867gKQku895f/31V0aNGsnFF1/COed0oWPHjrz99vyA5xNCmI90wWqoqOgwu3bt4KabxtCrV1+++OLziE6H7979t3z22Sc4nU4KCvJZt26tT1lf9+6/ZfHiTyktLaWoqIjVq78EYP36tXTp0o2rrrqGVq1OY+XK5RWxJSUlUV5ezq5dO7HZbOTk3EjXrt1ZunSxpZYfEEK4mLZnbhXp6Y24/PIrGTHiWpKTk+natQfHjx83HGoJx5VXDmHLls3k5FxHZmYWzZufUuVbAUD//oPYuPEHcnKuo0mTTNq0aQfABRdczL333k1OznUAKPUb9uzZDUCfPv25667bmTbtGTp06Mjw4ddgt9vo1asP69evi0jsQojYCXrVxAhqA2z3Xmhr794dNG/eutqdzTLMEqyaxrty5XKcTid9+/anuLiYP/3pembOfJ309EYRjPKkWL6/wf7Oq2O1hZUk3qoiPdXdau8vhLzQVvirJor4adOmLRMnPsD06S8CkJd3c9QSuRCxFqup7rWBJHOTa9GiJS++ODPeYQgRFYGmuksyD43cABVCxE2sprrXBpLMhRBx429Ke6SnutcGksyFEHGTNWQoNq85GNGY6h5vH67Yzo2TF3Pj5MWciFKBgYyZCyHiJtpT3WPxUAh/nE4n7yzdyserd1a0dTy1EXWSo9OHlmQuhIiraE11j1eljMPp5PWPNcu+3V3R1iyjHvfldKdhvTpRO68Ms/jxzTdruPXW0T7tP/74A5MnT4xDROYRjTXYhYi0WD0UwqOs3MEL7/0feVOWVCTy1s3TeP7OATx2c++oJnJIgJ55rL9GnXFGJ8aP7xS141tBvNZgFyIUsaqUOVFWzjMLvmfD9sKKtt+0zuD2azqTUicpoucKxNLJPB5fo775Zg2zZr3Cc8+9wq23jqZTpzP59tv1HDp0kDvuuJvevftSWHiAxx9/lH379pGUZGf06Fvo0aMn+fn7eeyxiRQXH6GgIJ9LLx1MXt4YPvroQxYt+g+HDx+ib98B3HzzLRXnmzTpQQ4fPswvv+ziz3++jczMTJ555glKSo7TqFFj7r77Xlq0aMm2bVuYNOkhysvLOeecc1m1aiVvvfVe0PvPnz+XRYsWkpRk54wzOjFu3H1s2bKZqVMnUV5eTkpKCvfe+w9atTqtYg3248ePM2XKI2zZsgm73c6wYTdwySWX89FHH7J69UqKiorYvfsXevToxV13jY/K70MIf6L9UIjjpWX8c/56tu0+uQJqN5XNzVecSXJS7Ac9LJ3MzTDh4MSJMl5++VWWL1/G9Okv0rt3X55++p9cdtkV9Os3kEOHDjB69I3Mnj2PTz/9Lxdd9DsuueRyiouLGTLksoo1zfPz9zN37jskJ/v+Sho1asTUqU9y4sQJ8vJymDLlSZo3b87q1V8yZcoknn76BR555EFGjRpD7979eOutNygvLw96/yeeeJa5c2fz3nsfk5KSzCOPPER+/n7efnsew4bdwPnnX8iiRf9hw4bvadXqtIrjzpr1Mo0aNWLOnLc5dOgQo0aN5PTTFQDff/8dc+e+jd2exPDhQ9m69Rrat+8Q1d+FEJVF66EQR4+fYNLra9lb+GtFW7/Op5D7+zOw2+P3bFtLJ3MzTDjo2bM3AO3atefIEdcVes2ar9ixYwczZryMzQZlZWX88svPDB8+gm++WcO8eXPYvn0rZWUnOH7ctSBXx45nGCZyOLl2+q5dO9i9+2fGj/9bxWtHjx6lqOgwe/fuoXfvfgBcdtmVvPPO/KD3T0pK4qyzOpOXl8PAgQMZNux6srOb0rt3X554YiqrV6+kb98B9O3bv0pca9euYfz4+wFo3Lgx/fsPYN26tTRo0ICzz+5M/foNANcs1qKiw2G+w0KEx9Oh2/fmGziPHgXwKYMMRWHRcR5+bQ1FR09eHC7u0Yrrzu9gigeUWzqZx+rZeoF41iD3rD8OUF7u4JlnXiQ9vRHJyXb27t1PRkYGzz77JLt3/8JFF/2eAQMGsWbNVxX7eK+EWJnntfJyBy1atKwYsy4vL+fgwUL3muf+F0yrbn+Axx6bxoYN3/PVV18yduxtPPDARM4770LOOqszK1Z8wdtvz+PLL5dzzz0n12r3Xmfd6YTy8jL3+5Lq9VrMF3QTwuXEiYo/OoqLQx6K3bTrEJPf+KZK21X92jK4bxtTJHEPS1ezmHXCQbdu3Xn3Xdcj5bZv30ZOznWUlBxnzZrVDB8+gvPPv5CdO3eQn78/pLXDW7duQ1FREd9+61qiduHCD3jwwfto2LAhLVueypdfrgDg008/NvyQ+dv/4MGD3HDDH2jXrgOjR/+ZHj16snXrZh544O9s3PgDV101lLy8MWj9Y5Xjde3ag4UL3wfg0KFDfPHFUrp06e5zXiHipSYVLeu3FHDj5MVVEnnn9pnMGn8+V/Rra6pEDhbvmUd7wsF3363nootODi1cfPElXHDBxdXud+ed45g6dRIjR7rGw++//2Hq12/ADTfkMnHiA6SmptK0aXPOOKMTu3f/EnQ8KSkpTJw4maef/ielpaXUr9+ACRMeAmDChId47LGHmT79Bdq3P92wp+9v/4yMDK644mpGjcqhbt26tGrVmssuu5JzzunKlCmPMHv2dJKT6/jcxPzTn/KYNm0KOTnX4XA4yMm5EaXOYOvWzUH/nYSIpnCGYld8v4eZCzdWaTv91Eb8/YZuEY0t0mQ98yiLVbyvvjqdwYOvJisri88/X8wnnyxi0qTHQz6OrGcefRJvdFWOd9u4sX6HYttNnVal7ZOvdjJ/8ZYqbT3OaMqfrzqLaJP1zEWFZs2ac+edfyE5OZm0tPSKG5NC1GbBVLS8s3QLi1btrLLfhd1OZfhFHWMWZyRIMk8Ql146mEsvHRzvMIQwlUBDsbMWbmT593uqbD9kQDsu79MmDpHWXFDJXCn1D+Ba948LtdbjlFIXAk8A9YC3tNa+j6QXQog481775Ym31vN/SxdX2Wbk7xUDz20Z69Aiqtpk7k7aFwNdACfwsVLqj8AUYCCwC1iolLpEa70o/FBsOJ0ObDZLF9iIIEmpooi1+2eu5pf8o1Xabrn6LLqppnGKKLKC6ZnvAcZqrUsBlFIbgY7AZq31dnfbXOAPQNjJPCWlLocOFZCWlkFSUrLpyn5E5DidTo4eLSI5OfwJHEIE68bJi33a7h52Lr9p0yQO0URPtclca73B82el1Om4hluexZXkPfYAp4ZyYvdd2Uo/N6CgoICDB/MpKyv3s5dIFPXq1aVDh7bUqROZleSys9MicpxYkXijKyurIVfc9YFP+5N3DKRDq8ZxiKh6NX2Pg74BqpQ6E1gI3A2U4eqde9iAkOrZvEsTAWy2ejRpUi/gflYuk7KCWMZ76NBx4HiNjyPvcXRZKd6ycgejH1/q037bNZ05t0MWgCn/LiGWJhoK9gZoX2ABcIfWer5SaiBwSqVNmgO7DXcWQogoO1ZSxi1PLvNpn5DTnXYt0uMQUewFcwO0FfAecJ3W2jP4tNr1kuoAbAeGA7OiFqUQQhg4eKSEsc+v8Gl/7OZeNMuoH4eI4ieYnvldQF3gCaWUp+0lIBdXb70u8BHwryjEJ4QQPn7JL+b+mV/5tD91Wz/at8405VBKtAVzA/R24HY/L58T2XCEEMI/vfMgU+at82l/cexAUmP4VB8zkhmgQgjT+2rjPl56f4NP+/Rxg0iyy9wUkGQuhDAxo8WvAGbec57MRfEiyVwIYTrzPtvEZ2t+9mmfNf78OERjDZLMhRCm8dQ73/LdVt8layWJV0+SuRAi7v78xOeUlPrO/JYkHjxJ5kKIuDFaNwUkiYdDkrkQIuYkiUeeJHMhRMxYNYkXrVoZtWcNR4okcyFE1Fk1iYMrkVd+9FxZ4QH2vT4bwFQJvdYmcytcaYWwOqMk3rp5Gv/I7RGHaMJT8O6CKs8QBXCWllLw7gJT5YxamcytcqUVwoqcTic3TVni09737ObcdFmnOERUM2WFvqWSgdrjpVYmc6tcaYWwkhNl5dz8z8992q8Z1J5Le7WOQ0SRkdwk0zBxJzfJjEM0/tXKZG6VK60QVlB87AS3Pf2FT/uYK8/kt79pFoeIIitryNAq3+QBbCkpZA0ZGseofNXKZG6VK60QZrav8Ff+/soqn/Z7R3SjQ8tGQR/H7PevPLGYOUaopcncKldaIcxo88+HeGzuNz7tk8f0pmnjwI999GaV+1fpvfqYKh4jtTKZW+VKK4SZrPphL6988INP+zO396dhvfAezC33ryKnViZzsMaVVggzeOszzdxFP/q0v3zXIOok12wtcbl/FTm1NpkLIQJ75cMNrNqwz6c9kmuJy/2ryJFkLoSo4oGZq/k5/6hPezRma8r9q8iRZC6EAPxPuf9w2pVRe0Cy3L+KHEnmQtRy8V43Re5fRYYkcyFqqXgncRFZksyFqGUkiScmSeZC1BKSxBObJHMhQmD2qedGJInXDpLMhQiSVaaeexgl8ZZZDZiY1zMO0Yhok2QuRJCsMPXc31riPTs14+YrzoxDRCJWJJkLESQzTz0vK3cw+vGlPu1X9WvLFf3axj4gEXNBJ3OlVDqwErhca/2TUupVoB/gmSr2kNb631GIUQhTMOPU86PHT/DXp3zXEh81uBO9z2weh4hEvASVzJVSPYHpQMdKzd2BAVrrPdEITAizMdPU8/2HjjH+pS992sdf35WOrRrHPB4Rf8H2zEcBtwBzAJRS9YHTgFlKqZbAv3H1zB1RiVKICKhpJYoZpp5v/eUwk+as9WmfNKonp2Q2iFkcwnxsTqcz6I2VUj8BgwA7MA34C3AY+A/wptZ6ehCHaQNsDy1MIWpm/+fL2Pr8SzhKSira7KmptL9lDE0HDohjZMFZ8e1uJr/+tU/73Id+T6OGqXGISMRRW+An78awboBqrbcBV3t+Vko9C+TgGooJyoEDxTgcwV9IPLKz06K26E80SLzRF0zM22fPrZLIARwlJWyfPRdbpy7RDM9HKO/xotU7eGfJVp/2l+8aSJ3kJEqPlZJ/rNRgz8ix2mfCavFCcDHb7TYyMxv6fT2sZK6UOhvoqLVe4G6yASfCOZYQsWDmShQjsz7ayPLvfG9HzbjnPOwRWktcJJZwSxNtwFNKqcVAMTAaeC1iUQkRYWasRDEy8bWv2b7Ht4cmszVFdcIdZvlOKfUYsAKoAyzQWr8Z0ciEiCAzVaIYuWnyYowGHSWJi2CFlMy11m0q/fkF4IVIByRENJihEsWIrJsiIkVmgIpaw0wPQZAkLiJNkrnJWXGVPuGfJHERLZLMTcxqq/SZgVkvfpLERbRJMjcxK6zSZyZmvPhJEhexIsncxKxWGx1vZrr4GSXxs9o14W/XnmvJSS3C/CSZm5hVaqPNIt4XP39riV/Y7VSGX9TRYA8hIkeSuYmZvTbabOJ18St3OBg1dalP+x8vPJ2LureK6rmF8JBkbmJmrY02q1hf/I6VlHHLk8t82m8dcjZdO2ZH5ZxC+CPJ3OTMVBttdrG6+B08UsLY51f4tN+X0432LRpF9FxCBEuSuUgo0bz4bd9TxMTX1vi0T765F00z6kflnEIES5K5ENVYtymfZ9/93qf9mdv707BenThEJIQvSeZC+PHJ17uY/7/NPu0vjh1Iap2kOEQkhH+SzBOQWWdBWsXr/9UsXfeLT7usJS7MTJK5BYSSnM04C9IqHp27li0/H/Zpr+lsTe/fnzP3hpg/3UgkPknmYYhFz7fyOSqrLjmbaRakVYyZtpTSE77PIo/ElHuji+vW51+i6YiR8vsQESXJPESx6Pl6n8NboOQc71mQVhKLdVOMLq6OkhK5uIqIk2Qeolj0fI3O4c1fcpYlAKoXy8Wv5OIqYkWSeYhi8Y8zmGP5S86yBIB/8VjBUC6uIlYkmYcoFv84/Z3DI1ByliUAfMVzGVqji6s9NVUuriLiJJmHKBY9X6NzeASTnGUJABczrCVudHFtK9UsIgokmYcoFj1f6V3XjBmSeGXeF1dZz1xEgyTzMMSi5yu969D4W0u8ZXYDJt7UMw4RCRFbksyFpZWVOxg89n2f9rPaNuFv150bh4iEiA9J5sKSjh4/wV+f+sKn/dJerblmUPs4RCREfEkyF5ayr/BX/v7KKp/2vMt/Q5+zTolDREKYgyRzYQkbdxzk8TfX+bSPv74rfbu2khuKotaTZC5Mbdm3u5m96Eef9iljepPduF4cIhLCnCSZC1N687PNfLpml0/7c3cMoH7dwB9bWQJY1EZBJXOlVDqwErhca/2TUupC4AmgHvCW1npCFGMUtciUN75B7zrk0z593CCS7PZq95clgEVtVW0yV0r1BKYDHd0/1wNmAQOBXcBCpdQlWutF0QxUJLZRU5dQ7nD6tIc60UeWABa1VTA981HALcAc98+/BTZrrbcDKKXmAn8AJJmLkEV6tqasUihqq2qTudY6D0Ap5WlqAeyptMke4NRQT5yZ2TDUXSpkZ6eFvW88SLy+jCb6AHw47cqwjueJeUd2FiX5BT6vp2Znmer3YKZYgiHxRl9NYw7nBqgdqPx92Ab4PqalGgcOFOMw+FpdHautayHxVlVdTzycc1eOOePKIYYLoWVcOcQ0vwf5TESX1eKF4GK2220BO8HhJPOfgcqzM5oDu8M4jqhFYrX4lSxSJmqrcJL5akAppToA24HhuG6Ixp2UpJlPPFYwlEXKRG0UcjLXWh9XSuUCC4C6wEfAvyIcV8ikJM1czLYMrTe58ItEE3Qy11q3qfTn/wHnRCOgcElJmjmYPYmDXPhFYkqYGaBSkhZfVkjiHnLhF4koYZK5PDg39sodDkZNXerT3rxJfR4d3Sv2AQVJLvwiESVMMpen0seOv7XE+5zVnLzLO8UhotDIhV8kooRJ5lKSFn17C3/lXoO1xIddcDoX92gVh4jCIxd+kYgSJpmDlKRFy4afCpk2f71P+x1/OIfO7a3Xm5ULv0hECZXMRWS998U2Pljxk0/7xLyetMxqEPuAIkgu/CLRSDIXPqbNX8eGnw76tD99Wz/S6qdE9FxS7y1EZEgyFxXypizB4fRdL+fuLXNJbZKB87u6EMFEK/XeQkSOJHPht0Z8/M75EMVEK/XeQkSOJPNaqmjVSu5YetzwtVnjz2fbuLGURTnRSr23EJEjybwW8tcTf2pQXdoP/h35+Udikmil3luIyJFkblLRuDHodzhly+sAFBRm0n7w74DYJFqp9xYicmpFMrdaxUSkbwxWl8Q9KifvWCRaqfcWInISPplbsWIiUjcG/SXxCYULq+11h5Now7loSr23EJGR8MncihUTNR2vrm4Fw6JVdYPqdYeSaK140RQikSR8Mo9nxUTRqpXseP9dSvILKnqqUH1vN9zx6mCXoa2u1125h43dDg5HtT1tK140hUgkCZ/MPcnIsN1ApMbXjXqqe1+dBTihvLyirXLvtUoS9RJovDrQmLgtJYWiVXV9/g7+et37P19Wtdfufu+q62lLmaEQ8ZX4ydwokftpj+RQgVFPlfIyn+08vVfAZ+jDw+iiUlbuYPTjSw3PXfnGZqi9451z3jCMobpjSZmhEPGV8Mk8lCQTyaGCUHqkZYUHjJO/O852U6dV/Hy4uIQ7n1theBzv6pRwYikpCLytv2NJmaEQ8ZXwyTyUJBPJoQJ/F5FQt/W0b/nlMI/OWevzeoeWjbh3RDcAto2rvkqlOqlZmZTkFwSM1YiUGQoRXwmfzENJMn6Tqt1O0aqVISUmo4sISclUHjOHkxcWf2PlX7fowWSDMfEr+rbhqv7tqj1nqL3j00Zcz5bnXjT8llDdsaTMUIj4SfhkDsEnGcMEDOBwhDx27tnuYAjVLJXPPavV5exPbeJz3NuGdubc07MCnrMmveOmAwdwpOhYyNUsQoj4qhXJPFieRLV31gyfG6ThjJ2n9+pTsdaJ0XmM2vwtfvVIXk9aBPFAiEj0jqWHLYT1WCaZe8r2Nh0sJDmjSdR6iem9+rB3xiuGr0WzzM5feeGduxbQesT1pFv8yT5CiOiyRDKPxexCo4ky3qJRZucvid+z5XVs7j/LxBshRHUskcyjPbvQ+2JhlMiNbv7VZIJRsItfQc2/EZh9oTGzxyeEFVgimUd7duH++fP8TpTxSOvTt0qCCffbQqAp99vGjcV3WlHNvhGYfc0Us8cnhFXUKJkrpZYATYET7qabtdaraxyVF38lg/aGDWt87KJVK3EUF1e73a/ffVfl51C/LQSzbkoopYXB9mbNvmaK2eMTwirCTuZKKRvQEWittTbqUEZM1pChrnVNvKbDO44dC7n+25tnKn11vC8mwX5bGDz2fcPtvBe/guBLC0PpzZp9zRSzxyeEVdSkZ67c//9EKZUJTNdaPxeBmHyk9+rDvjffwHnU65pRXl7jHlwoszS9fw40wchfieHfd86nWU6u3/MEUxYYSm/W7GummD0+IazCeOnA4GQA/wOuBi4AxiilLopIVAacR48atte0BxdM0jAa6sgaMhRbSorPtpPb3WCYyMdveZ3xW16vsrBWuELpzRrFaaY1U8wenxBWEXbPXGv9JfCl52el1EzgUuDTYPbPzAxtvHtHdpbhmiGp2VlkZ6dVadv/+TJ2znmDkoIDpGZlctqI62k6cIDhcZ25N7DlmedxlhmPFKVmZxnunz34d6Sl12PzU8+Cw8HkDjmG+xtWpxwsxPnDuqBj9BbKe+GJM5RzeR8jmsKJz/A4MYw5EiTe6LJavFDzmG1OpzOsHZVS/YBUrfX/3D//DWiutR5Xza5tgO0HDhTjcAR/bp/yQVw9uGY5uQGrTPxt533s/fPnVdwItTVoQLM/Xh/U8E2gEoBYG0EAAA6ASURBVMNAN26dpaUhxegdb6h/x2BlZ6f5zFg1O6vFLPFGl9XiheBittttnk5wW+An79drMmbeGHhYKdUHqAOMBMbU4HgB+VvrxDuRhzMVP9Tp60GtJW6z+R0OcZSWQpBj3oGqVqQ2WwjhUZNhlv8opXoC64Ak4Hn30EvU+FvrBE72Vv09jCIS1RH5h45xz0vGf0Wf4ZRA33j81LSXFR5g27ixFYm5uqoVSd5CCI8a1Zlrre8H7o9QLDXi7+EOHjWpjlir9/P8v//P8LVZ48939Z4Lg1+/PJDKCbsmNdgyq1KI2sUSM0A9jB6Q7ElQgRJpuNURsxZuZPn3e3zaG5Qd486ixRXHNFrCtiY8CTvcGmyZVSlE7WOZZF5dggpU9x3qjcEx05ZSesJ3uKZn0UbO2/+16/xQ5fzVfTPwCathQ+wpqQETdrg12DKrUojapyZ15jEVKEGB/3rl5jfmhbT41Y2TF/sk8rHXncuEwoUVidzo/KEMsdhSUmg6bDjtpk7zm5g93zzCqcGWWZVC1D6W6ZkHSlCe8WFnaWlYT8bxV17415/fo/0Nw0hv24RN1STIUJ75WfmbQqD1WMKtWpFZlULUPpZJ5v4SlK1BA9/la5OScJSWsHfGKxS8u8BvAgxlLfFACbJo1UocpSVB/z0qx1Jdwg6naiUSzwIVQliLZZK5vwRls9lcdduVlZdXTAAqKzzA3hmvsHfOazQfMZL0Xn3CWkvc3/nrd+5sfOMzJQXKHVUWB/OXUCNdZih16ELUPpZJ5v4mDfl7xJuPkhLXmilLfRO5URL38AxN+EuQ/m58JjdMI2vI0ICTnKJJ6tCFqF0sk8zBeNJQoBI+j1DWTanMuydtlCADPS800CQnIYSIJEslc6M6c6PhDw9/SXzW+PPZlJcb8Fxys1EIYSWWSeb+6syb5eTSLCe3Sg89UE/clWTPD5iE202dFnRccrNRCGEGlknmgerM202dFtyNzaTkiiTrr0dfv3PnkOKSm41CCDOwTDIPVGcebHWKvV7dij+n9+rDr1s2U7R0SZVtjqxcQf0Op4eUjOVmoxAi3iyTzI2GRfwNp0woXEhZ4QFsDRrgPF5SUR7oKC6uMgXf+yHNINPehRDWZJlk7hkWcZSWMiXAjU0X1/+3jRtLmdfj5iona5n2LoRIFJZJ5um9+rDrx+1M23tKlfY2v+5m2O7P3DMx61bpUVeXrKUSRQiRKCyTzAF2b94Faa5kfsXeZXQq/qnitbLCA+x9dRZAxYMdPOu0+LDbKVq1UipRhBAJw1LJvPW+Hxm/70f/G5SXsX/+PICATx3C4TAsa5RKFCGEVVkqmQezMqGjuDiotcW9yxqFEMLKLJXMs4YMZf+c13CUBF6hMNgbmJ7t5BFrQgirs1QyT+/Vh7T0emyfPddvwrY1aEBSat3gErrdzt65r3Fk5Qp5xJoQwtIs86Qhj6YDB9Bu6jSa542GpKSqLyYl0eyP1xs+oceQw0HR0iUBn2AkhBBWYKmeeWVG0+iTmzVl76wZFTc+bampOEtK/Fe1BBBMz16GZ4QQZmHZZA5Vp9Hvnfuaz9R8Z0kJ6YPOo/kNIwGqXSmxsupqzat7wLQQQsSS5YZZ/Cla9rlx+9IlrppzXOPpwQim1ry6B0wLIUQsWa5nvv/zZRU3QD1DG0DAYRRPj9lms+E0eN2WmgrJyTjdU/+DGW+XpQCEEGZiqWRetGplldJE16zPmdWOhztLS6uMpfu8XlKCzXkyzXsvyGVElgIQQpiJpYZZCt5d4FtjXl4OTqP+tpdACd9uNxwy2TvjFbaNG1sxTFOZUcWMLAUghIgXS/XMozGEYUtJCThb1N+NTXkohRDCTGqUzJVSw4EJQB3gKa318xGJyo9gpvOHchxPAq7uodD+1jiPxkMppNxRCBGOsJO5UqolMAnoBpQAK5VSS7TWP0QqOG9ZQ4ayd8YrNTqGv2d8+nsotEcsbmxKuaMQIlw1GTO/EFistS7UWh8F/gVcE5mwjNU0ofkb007v1YdmObkBb17G4samlDsKIcJVk2TeAthT6ec9wKk1C6d6qdlZxi/Y/fxV3O3JTTJplpPr94KQ3qtPxTIB8bqxKeWOQohw1WTM3A5VyrZtQNBz5jMzG4Z1UueI69n6/EtVqlrsqalknz+I/MVLfdrb3zKGpgMHBH387MG/Iy29HjvnvEFJwQFSszI5bcT1IR3D55jZaUFttyM7i5L8Ap/21OysoI8RCbE8V6RYLWaJN7qsFi/UPOaaJPOfgf6Vfm4O7A525wMHinE4gigp9NJ04ACOFB0zvEloa9nap93WqQv5+UdCOoetUxdaP9alSluox/DIzk4Let+MK4cYPvko48ohYZ8/VKHEaxZWi1nijS6rxQvBxWy32wJ2gmuSzD8DHlRKZQNHgaHA6Bocr8aiUV0SS1LuKIQIV9jJXGv9i1LqPmAJkALM0Fp/FbHI/Nj/+bKErviw+gVJCBEfNaoz11rPA+ZFKJag7Jzzht+KD0mCQojaylLT+QFKCqTiQwghvFkumadmGdd72xuGVx0jhBCJwHLJ/LQR10OS7+iQ49gxwwWxglW0aiXbxo1lU16u38W1hBDCrCyXzJsOHICtbqrvC+XlYc+U9Eyj9wzVeG6qSkIXQliF5ZI5UPEQCW/hjpvLNHohhNVZMpn7Wycl3PVTZBq9EMLqLJnMI/1giEhfHIQQItYsmcy9VzmsbhGt6shTg4QQVmepJw1VFsmZkjKNXghhdZZN5pEm0+iFEFZmyWEWIYQQVVmmZ+55Nuamg4UkZzSRYRAhhKjEEslcno0phBCBWWKYRSb1CCFEYJZI5jKpRwghArNEMpdJPUIIEZglkrlM6hFCiMAscQO0yqQeqWYRQggflkjmcHJSjxWfvC2EENFmiWEWIYQQgUkyF0KIBCDJXAghEoAkcyGESADxuAGaBGC328I+QE32jQeJN/qsFrPEG11Wixeqj7nS60lGr9ucTmeEQ6pWP+CLWJ9UCCESRH9guXdjPJJ5KtAD2AOUx/rkQghhUUnAKcDXQIn3i/FI5kIIISJMboAKIUQCkGQuhBAJQJK5EEIkAEnmQgiRACSZCyFEApBkLoQQCUCSuRBCJADTrmeulFoCNAVOuJtu1lqvrvT6hcATQD3gLa31hNhHWRFLHnBrpaa2wByt9a2VtvkHcCNw0N00XWv9fOyirIgjHVgJXK61/imY91EpdRowF9fvQwPXa62L4xTvaOA2wAmswfW5KPXaZyQwGdjnblqotb4vTvG+imvW81H3Jg9prf/ttc+5wAwgHVgGjNFal8UiXu+YgU7Ao5Vebgms1lpf7rVPXN5j97+jayudc5yZP8N+4o3KZ9iUyVwpZQM6Aq2NPtRKqXrALGAgsAtYqJS6RGu9KLaRumitZ+D6x4hS6kzgPeBBr826A8O01l/GNrqTlFI9gem43ttQ3scXgBe01vOVUvcD9wP3xCHejsDdQDfgCDAbuAV40mvX7sDftNZvRjvGyrzjrRTLAK31ngC7zgXytNarlFIzgVHAi9GL9CTvmLXWHwEfuV9rDqwA7jTYNebvsTtpXwx0wZUIP1ZK/RGYggk/w37ivQfIIwqfYbMOsyj3/z9RSn2rlLrV6/XfApu11tvdyX4u8IeYRujfi8C9WusCr/buwL1Kqe+UUs8pperGIbZRuD44u90/V/s+KqXqAAOAf7mbZntvE0Xe8ZYAf9FaF2mtncD3wGkG+/UARiqlvldKzVVKZcQm3KrxKqXqu+Ob5f69P6SUqvJvTinVGqintV7lbppNbD/L3u9xZY8DL2mtNxu8Fo/3eA8wVmtdqrU+AWzEdREy62fYKN66ROkzbNZkngH8D7gauAAYo5S6qNLrLXC9UR57gFNjF54x95W4ntb6Ha/2hsA6XL3KrkBjXD2DmNJa52mtKy9yFsz7mAUUVfqGFLP32jterfUOrfWnAEqpbFxDW+8b7LoHmAh0xtVbey4G4Rq9v82BxbiG13rhWiDpJq/d4vpZNogZAKXU6cAg4Bk/u8b8PdZab/Bc9NzxXQs4MOln2E+886L1GTblMIt7KKJiOML91fNS4FN3kx3X1xYPG65farzdjGvsrgr32Nylnp+VUtNwDW/EZBw3gGDeR+9tMNgmppRSLYFFwEyt9VLv17XWV1fadiqwNXbRVYljG64OiSeWZ4EcXMMaHmb9LI/GNSzhs6ATxPc9dg9lLsTVOSqj6rCW6T7DleP1fMuJxmfYlD1zpVQ/pdQFlZpsnLwRCvAzrtXDPJpj/DUxZpRSKbjG7T4weO00pdSNlZq8/z7xEsz7uB9opJTyrKF8isE2MaOUOgPXzbrXtNYTDV5vpJSqPMZrw/UPPuaUUmcrpYZ6xeL9ezfdZ9ntKmC+0QvxfI+VUn1xfWsfr7V+DZN/hg3ijdpn2JTJHNcwxONKqbpKqTRgJFC5AmA1oJRSHdy/oOG4rnLx1BnYpLU+avDaMWCqUqqt++buLVT9+8RLte+je6zvC+A6d1OO9zax4v4sfAJM0FpP87NZMTDOfWMPXF9j4/Ve24CnlFIZ7nHb0d6xaK13AMfd/+gBRhDnz7JSKgvXcOF2P5vE5T1WSrXCVVwwXGvtudCY9jNsFG80P8OmTOZa6//g+lqyDlgLzNJaf6mUWq+UaqG1Pg7kAguAH4AfOXlzI17a4eolVFBKfaSU6q61zsc1BPMhrrIoG+DvFxkzgd5HpdQMpdQV7k3/AoxWSv2Aa9w3XmWgeUAzYKz7s7BeKfUwnIxXa12Oa2zyRaXURlxVA+PiEazW+jvgMVwVIT8A6z3VCZ7PhnvT64EnlVI/Ag3xP04dKz6fZTDFe3wXrhuIT3h+/7g+v7mY8zNsFO+tROkzLOuZCyFEAjBlz1wIIURoJJkLIUQCkGQuhBAJQJK5EEIkAEnmQgiRACSZCyFEApBkLoQQCUCSuRBCJID/B6wHNhbUVEaFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# plot the linear fit\n", + "plt.scatter(x[:,1],y,c='r', marker='o')\n", + "plt.plot(x[:, 1], np.dot(x, theta), '-')\n", + "plt.legend(['Training data', 'Linear regression']);" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "For population = 35,000, we predict a profit of 4519.77\n", + "\n", + "For population = 70,000, we predict a profit of 45342.45\n", + "\n" + ] + } + ], + "source": [ + "# Predict values for population sizes of 35,000 and 70,000\n", + "predict1 = np.dot([1, 3.5], theta)\n", + "print('For population = 35,000, we predict a profit of {:.2f}\\n'.format(predict1*10000))\n", + "\n", + "predict2 = np.dot([1, 7], theta)\n", + "print('For population = 70,000, we predict a profit of {:.2f}\\n'.format(predict2*10000))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "theta0_vals = np.linspace(-10, 10, 100)\n", + "theta1_vals = np.linspace(-1, 4, 100)\n", + "\n", + "J_vals = np.zeros((theta0_vals.shape[0], theta1_vals.shape[0]))\n", + "\n", + "for i, theta0 in enumerate(theta0_vals):\n", + " for j, theta1 in enumerate(theta1_vals):\n", + " J_vals[i, j] = computeCost(x, y, [theta0, theta1])\n", + " \n", + "J_vals = J_vals.T\n", + "\n", + "fig = plt.figure(figsize=(12, 5))\n", + "ax = fig.add_subplot(121, projection='3d')\n", + "ax.plot_surface(theta0_vals, theta1_vals, J_vals, cmap='viridis')\n", + "plt.xlabel('theta0')\n", + "plt.ylabel('theta1')\n", + "plt.title('Surface')\n", + "\n", + "ax = plt.subplot(122)\n", + "plt.contour(theta0_vals, theta1_vals, J_vals, linewidths=2, cmap='viridis', levels=np.logspace(-2, 3, 20))\n", + "plt.xlabel('theta0')\n", + "plt.ylabel('theta1')\n", + "plt.plot(theta[0], theta[1], 'ro', ms=10, lw=2)\n", + "plt.title('Contour, showing minimum')\n", + "pass" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2_optional.ipynb b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2_optional.ipynb new file mode 100644 index 000000000..05c1005e0 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2_optional.ipynb @@ -0,0 +1,270 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import os\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "from sklearn import preprocessing" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " X[:,0] X[:, 1] y\n", + "--------------------------\n", + " 2104 3 399900\n", + " 1600 3 329900\n", + " 2400 3 369000\n", + " 1416 2 232000\n", + " 3000 4 539900\n", + " 1985 4 299900\n", + " 1534 3 314900\n", + " 1427 3 198999\n", + " 1380 3 212000\n", + " 1494 3 242500\n" + ] + } + ], + "source": [ + "data = np.loadtxt('data2.txt', delimiter = ',')\n", + "X,y = data[:,:2], data[:,2]\n", + "m=y.size\n", + "print('{:>8s}{:>8s}{:>10s}'.format('X[:,0]', 'X[:, 1]', 'y'))\n", + "print('-'*26)\n", + "for i in range(10):\n", + " print('{:8.0f}{:8.0f}{:10.0f}'.format(X[i, 0], X[i, 1], y[i]))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def featureNormalize(X):\n", + " X_norm = preprocessing.normalize(X)\n", + " return X_norm, X_norm.mean(axis=0), X_norm.std(axis=0) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean: [0.99999841 0.00171549]\n", + "Standard Deviation: [8.59473201e-07 4.94386241e-04]\n" + ] + } + ], + "source": [ + "X_norm, mean, std = featureNormalize(X)\n", + "print('Mean: ', mean)\n", + "print('Standard Deviation: ',std)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(47, 3)\n" + ] + } + ], + "source": [ + "X = np.concatenate([np.ones((m,1)),X_norm], axis=1)\n", + "print(X.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Gradient Descent with multiple variables" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def computeCostMulti(X,y,theta):\n", + " m = y.size\n", + " J = np.sum((X.dot(theta) - y) ** 2)/(2 * m)\n", + " return J" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def gradientDescentMulti(X, y, theta, alpha, iterations):\n", + " cost_history = [0] * iterations\n", + " m = y.size\n", + " \n", + " for iteration in range(iterations):\n", + " \n", + " h = X.dot(theta)\n", + " loss = h - y\n", + " gradient = X.T.dot(loss) / m\n", + " theta = theta - alpha * gradient\n", + " cost = computeCostMulti(X, y, theta)\n", + " cost_history[iteration] = cost\n", + " \n", + " return theta, cost_history" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "theta computed from gradient descent: [1.70153701e+05 1.70153677e+05 1.45682035e+02]\n", + "Predicted price of a 1650 sq-ft, 3 br house (using gradient descent): $281264214\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Choose some alpha value - change this\n", + "alpha = 0.01\n", + "num_iters = 400\n", + "\n", + "# init theta and run gradient descent\n", + "theta = np.zeros(3)\n", + "theta, J_history = gradientDescentMulti(X, y, theta, alpha, num_iters)\n", + "\n", + "# Plot the convergence graph\n", + "plt.plot(np.arange(len(J_history)), J_history, lw=2)\n", + "plt.xlabel('Number of iterations')\n", + "plt.ylabel('Cost J')\n", + "\n", + "# Display the gradient descent's result\n", + "print('theta computed from gradient descent: {:s}'.format(str(theta)))\n", + "\n", + "# Estimate the price of a 1650 sq-ft, 3 br house\n", + "# ======================= YOUR CODE HERE ===========================\n", + "# Recall that the first column of X is all-ones. \n", + "# Thus, it does not need to be normalized.\n", + "\n", + "price = np.dot([1650,3,1], theta)\n", + " # You should change this\n", + "\n", + "# ===================================================================\n", + "\n", + "print('Predicted price of a 1650 sq-ft, 3 br house (using gradient descent): ${:.0f}'.format(price))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def normalEqn(X,y):\n", + " X_transpose = X.T \n", + " theta = np.linalg.inv(X_transpose.dot(X)).dot(X_transpose).dot(y) \n", + " return theta\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Theta computed from the normal equations: [ 7.61530058e+10 -7.61523054e+10 -2.80655730e+08]\n", + "Predicted price of a 1650 sq-ft, 3 br house (using normal equations): $125423721934439\n" + ] + } + ], + "source": [ + "theta = normalEqn(X, y);\n", + "\n", + "# Display normal equation's result\n", + "print('Theta computed from the normal equations: {:s}'.format(str(theta)));\n", + "\n", + "# Estimate the price of a 1650 sq-ft, 3 br house\n", + "# ====================== YOUR CODE HERE ======================\n", + "\n", + "price = np.dot([1650,3,1],theta) # You should change this\n", + "\n", + "# ============================================================\n", + "\n", + "print('Predicted price of a 1650 sq-ft, 3 br house (using normal equations): ${:.0f}'.format(price))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data1.txt b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data1.txt new file mode 100644 index 000000000..24cba7461 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data1.txt @@ -0,0 +1,97 @@ +6.1101,17.592 +5.5277,9.1302 +8.5186,13.662 +7.0032,11.854 +5.8598,6.8233 +8.3829,11.886 +7.4764,4.3483 +8.5781,12 +6.4862,6.5987 +5.0546,3.8166 +5.7107,3.2522 +14.164,15.505 +5.734,3.1551 +8.4084,7.2258 +5.6407,0.71618 +5.3794,3.5129 +6.3654,5.3048 +5.1301,0.56077 +6.4296,3.6518 +7.0708,5.3893 +6.1891,3.1386 +20.27,21.767 +5.4901,4.263 +6.3261,5.1875 +5.5649,3.0825 +18.945,22.638 +12.828,13.501 +10.957,7.0467 +13.176,14.692 +22.203,24.147 +5.2524,-1.22 +6.5894,5.9966 +9.2482,12.134 +5.8918,1.8495 +8.2111,6.5426 +7.9334,4.5623 +8.0959,4.1164 +5.6063,3.3928 +12.836,10.117 +6.3534,5.4974 +5.4069,0.55657 +6.8825,3.9115 +11.708,5.3854 +5.7737,2.4406 +7.8247,6.7318 +7.0931,1.0463 +5.0702,5.1337 +5.8014,1.844 +11.7,8.0043 +5.5416,1.0179 +7.5402,6.7504 +5.3077,1.8396 +7.4239,4.2885 +7.6031,4.9981 +6.3328,1.4233 +6.3589,-1.4211 +6.2742,2.4756 +5.6397,4.6042 +9.3102,3.9624 +9.4536,5.4141 +8.8254,5.1694 +5.1793,-0.74279 +21.279,17.929 +14.908,12.054 +18.959,17.054 +7.2182,4.8852 +8.2951,5.7442 +10.236,7.7754 +5.4994,1.0173 +20.341,20.992 +10.136,6.6799 +7.3345,4.0259 +6.0062,1.2784 +7.2259,3.3411 +5.0269,-2.6807 +6.5479,0.29678 +7.5386,3.8845 +5.0365,5.7014 +10.274,6.7526 +5.1077,2.0576 +5.7292,0.47953 +5.1884,0.20421 +6.3557,0.67861 +9.7687,7.5435 +6.5159,5.3436 +8.5172,4.2415 +9.1802,6.7981 +6.002,0.92695 +5.5204,0.152 +5.0594,2.8214 +5.7077,1.8451 +7.6366,4.2959 +5.8707,7.2029 +5.3054,1.9869 +8.2934,0.14454 +13.394,9.0551 +5.4369,0.61705 \ No newline at end of file diff --git a/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data2.txt b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data2.txt new file mode 100644 index 000000000..c7767b077 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data2.txt @@ -0,0 +1,47 @@ +2104,3,399900 +1600,3,329900 +2400,3,369000 +1416,2,232000 +3000,4,539900 +1985,4,299900 +1534,3,314900 +1427,3,198999 +1380,3,212000 +1494,3,242500 +1940,4,239999 +2000,3,347000 +1890,3,329999 +4478,5,699900 +1268,3,259900 +2300,4,449900 +1320,2,299900 +1236,3,199900 +2609,4,499998 +3031,4,599000 +1767,3,252900 +1888,2,255000 +1604,3,242900 +1962,4,259900 +3890,3,573900 +1100,3,249900 +1458,3,464500 +2526,3,469000 +2200,3,475000 +2637,3,299900 +1839,2,349900 +1000,1,169900 +2040,4,314900 +3137,3,579900 +1811,4,285900 +1437,3,249900 +1239,3,229900 +2132,4,345000 +4215,4,549000 +2162,4,287000 +1664,2,368500 +2238,3,329900 +2567,4,314000 +1200,3,299000 +852,2,179900 +1852,4,299900 +1203,3,239500 \ No newline at end of file diff --git a/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/.ipynb_checkpoints/exercise3-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/.ipynb_checkpoints/exercise3-checkpoint.ipynb new file mode 100644 index 000000000..0791cd41a --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/.ipynb_checkpoints/exercise3-checkpoint.ipynb @@ -0,0 +1,1120 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 3\n", + "# Multi-class Classification and Neural Networks\n", + "\n", + "## Introduction\n", + "\n", + "\n", + "In this exercise, you will implement one-vs-all logistic regression and neural networks to recognize handwritten digits. Before starting the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics. \n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, [`matplotlib`](https://matplotlib.org/) for plotting, and [`scipy`](https://docs.scipy.org/doc/scipy/reference/) for scientific and numerical computation functions and tools. You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize as opt\n", + "\n", + "# will be used to load MATLAB mat datafile format\n", + "from scipy.io import loadmat\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submission function | Points \n", + "| :- |:- | :- | :-: \n", + "| 1 | [Regularized Logistic Regression](#section1) | [`lrCostFunction`](#lrCostFunction) | 30 \n", + "| 2 | [One-vs-all classifier training](#section2) | [`oneVsAll`](#oneVsAll) | 20 \n", + "| 3 | [One-vs-all classifier prediction](#section3) | [`predictOneVsAll`](#predictOneVsAll) | 20 \n", + "| 4 | [Neural Network Prediction Function](#section4) | [`predict`](#predict) | 30\n", + "| | Total Points | | 100 \n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once. They must also be re-executed everytime the submitted function is updated.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 Multi-class Classification\n", + "\n", + "For this exercise, you will use logistic regression and neural networks to recognize handwritten digits (from 0 to 9). Automated handwritten digit recognition is widely used today - from recognizing zip codes (postal codes)\n", + "on mail envelopes to recognizing amounts written on bank checks. This exercise will show you how the methods you have learned can be used for this classification task.\n", + "\n", + "In the first part of the exercise, you will extend your previous implementation of logistic regression and apply it to one-vs-all classification.\n", + "\n", + "### 1.1 Dataset\n", + "\n", + "You are given a data set in `ex3data1.mat` that contains 5000 training examples of handwritten digits (This is a subset of the [MNIST](http://yann.lecun.com/exdb/mnist) handwritten digit dataset). The `.mat` format means that that the data has been saved in a native Octave/MATLAB matrix format, instead of a text (ASCII) format like a csv-file. We use the `.mat` format here because this is the dataset provided in the MATLAB version of this assignment. Fortunately, python provides mechanisms to load MATLAB native format using the `loadmat` function within the `scipy.io` module. This function returns a python dictionary with keys containing the variable names within the `.mat` file. \n", + "\n", + "There are 5000 training examples in `ex3data1.mat`, where each training example is a 20 pixel by 20 pixel grayscale image of the digit. Each pixel is represented by a floating point number indicating the grayscale intensity at that location. The 20 by 20 grid of pixels is “unrolled” into a 400-dimensional vector. Each of these training examples becomes a single row in our data matrix `X`. This gives us a 5000 by 400 matrix `X` where every row is a training example for a handwritten digit image.\n", + "\n", + "$$ X = \\begin{bmatrix} - \\: (x^{(1)})^T \\: - \\\\ -\\: (x^{(2)})^T \\:- \\\\ \\vdots \\\\ - \\: (x^{(m)})^T \\:- \\end{bmatrix} $$\n", + "\n", + "The second part of the training set is a 5000-dimensional vector `y` that contains labels for the training set. \n", + "We start the exercise by first loading the dataset. Execute the cell below, you do not need to write any code here." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# 20x20 Input Images of Digits\n", + "input_layer_size = 400\n", + "\n", + "# 10 labels, from 1 to 10 (note that we have mapped \"0\" to label 10)\n", + "num_labels = 10\n", + "\n", + "# training data stored in arrays X, y\n", + "data = loadmat(os.path.join('Data', 'ex3data1.mat'))\n", + "X, y = data['X'], data['y'].ravel()\n", + "\n", + "# set the zero digit to 0, rather than its mapped 10 in this dataset\n", + "# This is an artifact due to the fact that this dataset was used in \n", + "# MATLAB where there is no index 0\n", + "y[y == 10] = 0\n", + "\n", + "m = y.size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Visualizing the data\n", + "\n", + "You will begin by visualizing a subset of the training set. In the following cell, the code randomly selects selects 100 rows from `X` and passes those rows to the `displayData` function. This function maps each row to a 20 pixel by 20 pixel grayscale image and displays the images together. We have provided the `displayData` function in the file `utils.py`. You are encouraged to examine the code to see how it works. Run the following cell to visualize the data." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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aU0CkgHSOlauix5/nevVV18NALj88stDp8kqPXr0SPwmUAjABoD9998/5OOOOw5A7evbeK5kxhhjjDF1xA86xhhjjKlaiua6oplLS3GruVwDbxnsuc0224SOtVmAQon8PLqz1oaa89W0rJ12l19+eQDJYFwNHNt2220BJMvus2x73qiLUINV1TRO16J25918881DpplVa2No4NqOO+4IoHwBgor+zkorrRSy7rW0AHb9O8etwdQabM35aQBhHmSNf6GFFgKQPFe1DhJdHxqgnXf37rpAl6LWVlE3COsDaR2arHYl5UbX6fXXXw95+rYK1bQAACAASURBVPTpITPw/4MPPgidul7pBtCO5nqtohtFz9m111475HKdi3r+q2uDrUnU9aHB/Ndccw2AZID5CSecEDKTQLQ2VKlJq+ei7jQNtqUbX93Zur68V2oygLqZea8shTtcx6/XB9as0qSabt26haxuRH6Htq3QYHqeX+ru7969e8h0o+qc9FyuTzsPW3SMMcYYU7X4QccYY4wxVUuDXFdpnaDVRKV1ZLRmDtsyaG68Zkj8+eefAJImqrwzINLKpqs58dBDDw2ZLjnWgwAKZecB4OuvvwZQWVktNBOri0rdiWpGputNo9832mijkGl6VHOmtsCga09bfOSxvrW5KHTOmoF2ww03ACh0OQeS7Ui4F9S0nHdNFoXHWs85zXqjy1Fdz2ll1/OuvZLVvfqYY44BUGiVACRd5wMGDACQrJOU1iIhD3Qc6ppRN2KrVq0AJF3Lei4xm4XXWSBZp+zwww8HkMwazCNMQOeqWbn33nsvgGRtLc1a5fVFXXualVYprkdtUaHn0qBBgwAkO3p/++23IbP+zptvvhm6LbbYIuQNN9wQQDIcolhrptc8rXPDvdKnT5/QpbnzgULX9b322it0eq3cbLPNACTXVOfCtWQXeyCZzaZhInO71pVzpzXGGGOMKTINsujoUxyDGbU5mebW69MfA880AI1vKbN/b56kNQrUJ2d9C9Y6Mnwq1gCzK6+8MmTWV8jboqFr8sMPPwAovO0CyWA4voUAQO/evQEk38JohdPvYnM6IFnTg81A9Yk+72DXtLcTrWaq1iu+say55pqh0zoZDOzMe05ZTfm4l9V6p9ZH/q/W1tEqvQxi1besPAJY9fxS6wYDjzWwXoMoKWddZziXvNdPz4+0yrJq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tftgvX6Nk39KjJz3Z+OE+7PaYxyrfX8qdl0ZY4wxpmopX933OkBLjpbIfuGFF0Jef/31ASRLvVeiCy6rjkQlZfiY/4+0tfonrVNdap78k45LYyGr3UA1wrnWVkepEu8J1URjumbYomOMMcaYqqViLDr6RMgGZvvuu2/ovvjii5AffvhhAMC8884bukp6eudctBGbNiPkuPN+yi0VWquG6LGoFHTPqfWQNG/ePORqXCu1AkyfPj1kNgDVNWOjU5W16WXa+QtU1nlZbeie1Aa2tHSnnYeNiSyLAZtiaqNate5rs1pSifswKwaVsq5vJV4/064ZQGHcuv/YqFT15bym2qJjjDHGmKrFDzrGGGOMqVpydV2p6W7WrFkhn3HGGQCAp556KnTXXXddyIsvvjiA/JsvZsF5ffTRR6E766yzQr799tsBJE3/lWharQtqeuW81V230korhVwpc9Ux33bbbSG/9tprAIDLL788dGoOb+xuLM57ypQpoevfv3/IPO9+/vnn0O2+++4hX3/99QCAH374IXS613v06BEy3X+lXvO6BEby77r+aQ1OK3WdOf6pU6eGbssttwx5yJAhAICNNtoodJXo+siC66L3hOeeey7k0047DQAwceLE0K266qohH3XUUQCAPfbYI3TqRsn7+sP1U3fPl19+GfKPP/4IAGjbtm3oOnXqFDKPTx7zGDVqVMg33HBDqv6vv/4CACy88MKhO/zww2vIiy66aOhKPRdbdIwxxhhTtfhBxxhjjDFVSy6uqzTT8plnnhnyNddcAwDYbbfdQrfTTjuF3FjMsDrO9957L+Rff/0VQNJ011jmpOg6qpvq1FNPBZB0YXTp0iXkvE3HaeiYbrnlFgDASSedFLrOnTuHXKkujTmhpvvJkycDAPr27Rs6dRPvv//+AIB27dqF7vXXXw/5xRdfBACcfvrpoXvnnXdCfv/990Pu0KEDgOKteVamirqxmZWTlkkHFNxso0ePDt3yyy8f8hZbbAEgmSlSSXuWY9HxrbnmmiHff//9AIB11lkndJXuJk/LALzgggtCp6ELXNf55psvdB988EHI3Ne//PJL6NR1kuWyLCW6b5khx+skADzxxBMh//bbbwCS89MM5OOOOw5Aed3p/P577703dN99913Ieq1s1qwZAGDcuHGhu/DCC0Pm/U91/AxQmjWxRccYY4wxVUsu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dL169Qp53XXXBZC/iyBrr86YMQMA8OOPP4bugQceCPnpp58GkHQ9qmuSLpOpU6eGbsqUKSEPHz485N133x3A3B+LrPXjmL/99tvQTZgwIeT3338/5DFjxgBIuq7ozgGAHXfcEQCw//77p/69Uq6fumaPPPJIyP3796/xvyuvvHLIdFm1b98+dH379g15nXXWAVA598TZ4X37+++/D90RRxwR8jPPPAMAWGuttUL31FNPhcw9suCCC4bOritjjDHGmAxKatHJerpnYByf3AHg7rvvDplvJPoU3LVr15DzqOPB8etbBt9sAeDSSy8NmW8nOs6OHTuGfO211wIAHn300dDdcccdIS+99NIAKisoMu3t4bXXXgudWgT++OMPAMkn9pdeeinkk08+GUBy/mq9K8XbCcevx/S9994LWYMxf/75ZwCFoFwAmDx5csjcnzrOAw44IOSz7IFw0gAAIABJREFUzz4bQP5WOl0zzgkAbr75ZgDAbbfdFjoGGAOFdVlyySVDd+SRR4ZMS+QTTzwROgaIAvWbKz+jlgfW2wCAVq1aAUi+uWfBc1SDbWnFAYBLLrkEAPDggw+G7t///nfIa665JoDsYNlyoev31ltvhcxzTQM8O3XqFPK+++4LAFhhhRVSv4vyhRdeGDpa8QBg8cUXD3lu5512fRw2bFjII0aMAJC0IioLL7xwDVnH/+eff4ZMi7DO6ZBDDgk5b0sc0WvNnnvuGfISSywBABg9enTq/9ISp9dHtY7cd999AICFFloodHnPWc8VrtUpp5wSOr2Xb7XVVgCA6667LnQMQAYK56Lr6BhjjDHGzAV+0DHGGGNM1VI21xUDkADg8ssvB5B0XWnO/Oabbw4AuPPOO0Onrg0GsZbTXEfT3BdffBG6Y489NmQNJqNpVWuP6N8ffvhhAEnT8f333x/ySSedBCB/11WW65Fruffee4dur732CvnUU08FkHRn9OzZM+QVV1wRQHldAxz/q6++GrpddtklZHVdpdUB0hLlXEvWwwCA7777LmS6LCspQHLw4MEh03WjwfB0twGFYFU95w477LCQe/fuDSAZDLvUUkuFPLdz1fXneaXjUHcTa0917tw5dFkB4qxZ9e6774Zu/PjxIdMlpu4quluBwnUlj6By/U0NJj700ENDXm+99QAkrz/t2rULWeuzEL1W8hz44YcfQsegYyDp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tju50q+raa7/fv361fh7pWZapdXJeeihh0I+5ZRTACSzItW1ut9++5V6iDXgntAQhdqOb5q7WD9XzuuLLTrGGGOMqVqKZtHh28WHH34YuscffzxkvuUChTct1lsB0q0Hjz76aOjOPffckBmMlWV9qER0rHwjO/vss0O32WabhczA5HLOib/122+/hW6eeeYJWZ/OiT7R69sz56fBuo0JrtXkyZNDN2DAgJBpfVtggQVC9/TTT4fMIEi16OSB7jm1CBx99NEAgPXWWy90aj1tjJWtda5//vknAODEE08M3TPPPBPyBhtsAADo2bNn6LbeeuuQ1RJCsqybxT5G8847b8hqsVGL72KLLQYAWH/99UPXqVOnkLl+7733Xug0WJf1We66667QrbnmmiFX+rpzfjfeeGPo6CUAgMMOOwxA8ppVSXPi+N9+++3QqUWKlg4NRtaaOQysLrVFJM1iv9pqq4Xuxx9/DFmPNesXqZV7xRVXDLl3794AkgHypZ6LLTrGGGOMqVr8oGOMMcaYqqVBris1F3/88ccAki4YDabSOgY0UzHoGEiavmgyowkaAO65556Qt9tuOwDJUuyVZJpMQ4/VI488AiAZDHn//feHzHlpHY9SwzXRoLf9998/ZK2pwnHpMZ9vvvlCXm655QAkA3grNTCQ6Ppw39IEDiTrzHAva2Ce7uU//vijxveXq+ZFWisOADjzzDND/vrrrwEAQ4cODZ26Kcu57xpCVguAwYMHAwAefPDB0I0aNSrklVZaCUByzdNaJOThOtagZ55HAPDOO++EvOuuuwIAzjnnnNCxbQyQfv286qqrQr7ooosAJMMB7rzzzpB1L1RKQLreH+imevjhh0OngdXHHXdcjc/kPQ8dC5NQNNj8559/DvmMM84AkHRnaWJEueai+79FixYAktcMTSbSmlTPPfccgOQ9W69FbBp8ww03hK7UddZs0THGGGNM1eIHHWOMMcZULUXLunriiScAJM32aq5TN9POO+8MAFhhhRVCpxH0zNzSehVazpt/16yRSkTn//nnn4d8ySWXACiYoAFg4403DrlcrgM1/dPMrdkZ++yzT+r/EjUxaqdgurleffXV0FWiO0TnpDL3srqr1Ix77LHHAkhmHWidFrZQYJdhIOlaKCXqjtHaVVqng605tM5RbebiPMrN14bO9a233gr5pptuAgBcc801odM6XHQ5ZtWhKRdp5xTbvwBJd9viiy8eMuv86J5SNypRF9Thhx8e8vPPPw+g4GKY/Xc1w6cSM/B4jXr33XdDp92927dvDyD/Mev+/Pbbb0PmdUEzIa+++uqQd9xxRwDJOnS1tUsqNfz9TTfdNHTa9kavH8zA1Wv+K6+8EvKgQYMAJO9/Tz31VMhcv2K6sGzRMcYYY0zV4gcdY4wxxlQtRXNdLbroogCApZZaKnRqmjrwwANrfIYuAiDdjKymR4061wyuSkYjzTXDgRHqmtWjWTt5uK6YAabHXN1RtZmB1bRK19V9990XOu2+zIJseWdC6Py1UCJdH1oEcffddw+ZWR36+SlTpoTMQpkjR44M3R577BFyKV0munc0K0XHyrlkZXJwLfW71DXCz+VRsFPnocdRXYcLL7wwgGQmoGYg0aWj88vDzaFz+emnnwAAt99+e+jUddGuXbuQeX7Vto/073os2NpCXVdacE/3Qlqh0HKhv63tHoYNGwagcM8Bkm52XkvzcJfrmmrWMdtuAIVr4fzzzx86nSvvC1qwVLPm6IbNY8/qMdXrh5LWwkiLc44fPx5AIfsPSK4vC63adWWMMcYYMxc0yKKjT1x8S2RDwNn/fscdd4TMYDgNUNLAYz7d6huNNjLTctKVCMevTTtZOwAotLDQAMk8rBtpFg19Yk9rxJaF/i+DXPWN5tlnnw05j6Z0ROeh+4tviUCh/k+PHj1Cx9oWQKH1g1o5Vl555ZAfeOABAMn179WrV0OHPkd4/LUeh7Y90PpWTALQN0I9Fgz2VyuJBtMvs8wyAJKNQMtV0yor2Fqtw7SY6lu+tjhgMK+2fdDWC+Wqo6N7kW+52jZF35h1LtTXZXz6v9yrahnPO9hV4VjUIq5v/+PGjQNQSGoBCrWRgHwTH9Qyo7WPRo8eHTLXT+d3/PHHh9ymTRsAhVZAs/+d56Va+fKYc9b+q21fct+Xc89Vzu42xhhjjCkyftAxxhhjTNVStGBkBoBpgBjrdQDJwEyWk9Y6DwpNX2q6VTM8P9e/f//QaSfpPIK00loIaNl9Ne2zK60GIOfhutLfpJmUXWqBggsGAA455JCQ09ZNgz1psv3rr79Cp8HIebaD0N9WN891110XMl1S6m6iuwYoBHnqPtP6UdzfW221VejKtb56zL/55puQGYAKFNzE7GINJDt9v/HGGwCSa6owSF0DrBkADJTm/Eszd3OcQNJlwMBHHYea9pkYcN5554VOgz3XXnvtxG/O/l3FQr+fnazVHdqqVauQNbEjLVi8NtKOm7pOFllkkZDzCEBO65StLS5uvvnmkHn90fuL3ivydF3pPtH1Szv/s1zHrKl29tlnh+7oo48OmffCPEMA5gbdc3pfmTRpUo3/1WD5UpxrtugYY4wxpmrxg44xxhhjqpaiua7SOpKzXgqQNC3SpJVV4jotGlvLZQ8ZMqTG37VOTd41PS6//HIAwMsvvxw6LUfPrLG82yLocaJrba+99god68UASTfBWmutBSBp4lbXIjOstER9t27dijXsBqFjfu+990JWNxbL7W+yySah07Xm/tSsH+0+36dPHwAFFwhQPteVzi+r3tSYMWMAJGtbaQYguwrr+cnPAIX6SKWekx5z/pa65rbYYouQ9VizDkeWi5Trpq5JdcOx6/K6666b+vlSXF/SvjNr/HP7+/r56dOnh0zXgX6PusxUX0o3c9Z3002l13nNiuN1SbMi867JRfTYaVax1univNV1qK7lgQMHAkjeSzUbjy068gwBmBt0fB988EHIrN+00047ha4u7Wjqgy06xhhjjKlaimbR4ZOsvkVqNUitMssqnOuvv37o2MgLKNTiueyyy0KnVXb5pPj1118XY+j1Ri1Pd955Z8hXXHEFgOQboz695m3JSYPH9JRTTgmdBh2zWjBQqDOjaODdDjvsAKBQIRjIf62IvnFpNU61FDCIWAPI9e2EdVo0QLB169Yh8xhqbahSrznnpUH5Wm9K148NdNXKdv3114fMeatFR+fPpoq65sWycmQ1WqWVSQPkdcysFgwUxp01Jr49sp4OkKxTwiDtLItOudDx1+f46vVJK3fz7Vq/MysYuZSWEv2dF198MeTzzz8fQPKcOe2000Jmg9JKajTLuaiVd+jQoan/y2QFreM0ePDgkGld0zpVGnhNi3qlWLGyUC+HnqtTp04FkPQY8JgApblW2qJjjDHGmKrFDzrGGGOMqVqK5roiakLUpmUM0AUKpiltGqnByh9//HGN70oLvMqjbLmOQ8viq8uHgZEMKgOyGyhWCjzW6m7R2irHHHNMjf9VdH4MvHv66adDp4G/edY50qBMDbBWc2mXLl0AJAMg9XM0revntcUHa0mVc515TNXdqI1I2XYFKNS00GBODTamG0/d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9/N6TXXo0CHkWlhPbdExxhhjTGnxg44xxhhjSkvdXFdqhvyf//kfAEnT8FtvvRXyHXfcAQAYOXJk6NQM9sADDwAAFltssdAVPVhQzXwcv5pW1fVRFpNrluumKOPTc/7DDz+EPN988wFouDv2q6++GrrFF1885LnmmgtAccY5o5LVHTuNNm3ahNy/f38AwCuvvBK6QYMGhUzXVjWPj3I19jF+18SJE0P30UcfhbzCCisASI65SGuVx68dsb/88suQR48eDaBynQHAvPPOG/I888wDoNIlGyjW/SFt/087vqzu9fXsCzk1ehzjx48P+fnnnw/5sssuAwC8/fbboaO7FKjMy5Zbbhm6Cy64IGTe16s5Z7boGGOMMaa0+EHHGGOMMaWlpq4rNXN99913Id91110Akqat4cOHh/z3338DSJru1HV15513AgD69OlT5SOuDmnR6Oqau+GGGwAkXW/7779/yDTD5mFObkymUFqdhDQzbJaJn6Zb/qufqTV6zL///nvIp556asgDBgwAkDw+lV977TUAwLnnnhu6G2+8sfoH2wz0OGud9aXm6CLBtaTH17Zt22n+Tq/TH3/8MWTO/+qrr171Y9M5+fPPP0NmpgrdplP/bVP2Ao7rvffeC91///vfkB988EEAyXNSJNcVj//ll18O3dFHHx3ymDFjAACzzjpr6OiuAoAuXboAAE455ZTQde7cOeQ8XD+6v910000AKi5EAOjevfs0n9H5454DAPvuuy+AZCZdzevQ/P85+eqrr0J3xBFHhKxztdxyywFInn+91w0bNgwAcPfdd4dO1+J1110HIJmJ1dLx2aJjjDHGmNJSN4uOBhbfdtttAIAlllgidIcddljIa621FoDkG/fDDz8c8tNPPw0AOOigg0KngWnVerpN+56st2R9O6RFauDAgaG7//77Q15++eUBJIPljj322JBPO+00AJUnY6B6Fg89Tg1QvOWWWwAA22yzTej0LUPHTUsNxwkkrXN8uh88eHDo9C1qk002AQAceeSRoVtqqaVCruXbiY5frYh6fGkWOdXx7UrPlb5R5hH4SOvF559/Hrp//vkn5LSaJFmVf3n+s6xDlHXO9O0yD/T3X3rpJQDAxRdfHLp77703ZAbh6px+8803IdNisNlmm4WupXPKc6a/qcfEAM533313muNsLv/6179C/uyzz0L++eef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WNKOVdcnz0vW+GtBmrn76quvDvm6664L+dVXXwWQXJ9FdM1UEz0vQ4cOBQBMmjQpdJ988knIF198MQDgxhtvDF2t568p8FgmT54cunPPPTfkl156CUDSHb7FFluEnEe2Eo/5l19+Cd3tt98eMvd0oOK612P+6quvQua8PPHEE6GbbbbZQi7SXkL0vsFs3N9//z10zJQDKq7VBRZYIHQLLrhgyFtuuSUAYNFFFw1dkcbMfe+1114L3XLLLRcyj1X3R5W5F+k9Rc9fc8Zqi44xxhhjSkvdLDppb7zai0Xh078+0anF5PrrrwcAXHnllaHTwMJa1IdIe4vimzGQfOJmMONCCy0Uug8//DDkJ598EgBw2WWXhe7RRx8NeccddwRQqWAK1O+JXedEgwF13CNHjgSQfKPSKqysjzDPPPOETt8+dtttt2l0DdXOqDUDBgwI+b///S8A4MILLwydBj5OnDgRQPKYdfyffvopgOT8rrDCCiHXwnrCN6KPPvoodGrFWXnllUPm229TLKppfZOK9BaZhr4lqkX10ksvBZCcP50TznWRrDhpvPvuuyGrdZn7zqGHHho6DUyul0VHzx+t2GuvvXbodP2ceuqpIffs2RNA8ph1L9puu+0AAN9++23oZp999tTvzRMd/xtvvBHyWWedBQAYPnx46HR/pSVZax/pnN16660Akve/NdZYo0pH3Tx0rNwfPvjgg9DpvYLrVuvoqMw9TO8PO+ywQ8jNWb+26BhjjDGmtPhBxxhjjDGlpaauKzUdf/755yEziPiYY44JXYcOHab5HF1UAHDzzTeHfMQRRwAA9txzz9DVuqw9zaFaKl5dUxpYPPPMMwNImsZXXHHFkLt16wYAePrpp0PH2hEAMHbsWADJALtaB4vS9KgmVg0QHDNmTMgjRowAkKzToq6NL7/8cprvV3Py/fffDyA5p6usskrItTSt65y88MILIZ933nkh0/V5/PHHh07HmoauC67fUaNGhU7nvxZwfeg61DlT1xqvtazzzLWg7oI777wz5F69egFI1mYpYjCzrjlNXPjtt98AJPccuiMBYK211gKQXCt5txvQvfTPP/8EkAxA1sDqE088EQCw6qqrhi7v4+f+vMEGG4TuqKOOCllduzxWdYfotcR7ibqrioLO0+jRo0NmOAJQGZe26FhqqaVCXmaZZQAkkyHoDgeAU045BUDFxQ4k92p+HqhcA7V25+m4GXDOoGoA2HDDDUOmG/OWW24Jne41q622GoCku8p1dIwxxhhjMvCDjjHGGGNKS9VdV1m1V7RmAqPGtc7DYostFjKzei644ILQ7bPPPiGzZo5G5aeVyJ5aXw30+zSrSKFpee655079HE2zGmmvrh+6QepZop/tKjRTY/z48SHPP//8IdO0uNJKK4VO54Lz/uOPP4bunnvuCZntCO6+++7Q6XfVAh6TZsppR12taTHHHHMASLpGmemh36XuAHWzMoOuS5cuoatXJogek2btqZu1oWPhunv22WdDd9VVV4XMc0EXbdHg8WtbAV1/7dq1A5DcJ+aaa66Q55xzzlofYqPIqiPWt29fAEnX60477RTyfvvtV4ejaxhdZx07dgQA9OvXL3RpmXxAZdx///136FjbCKi0gJhvvvlSfytPdM50T9G1duaZZwJI7j/jxo0LmS4v1nsCKpm8QMXNyvskAGy88cYh63m55pprANQ+K0vHzX1fM6nS5l3drTp/dNnp+mip69UWHWOMMcaUFj/oGGOMMaa0VM11RXOxZqdoEauBAweGTDeUlrjW7ruHH344gKRrR10qNMn//PPPodOobS1tX+2iX2qCpAkVAM4555yQWXr/oosuCp0eK83omhWj30uXDrNbgKTrqCVmWnWHMfsEAC655BIASReUuis22mijkOnaySr4yGwVLduuWTtEx69FHrVQVjgVSgcAACAASURBVEvGqnPPse67776h++6770KmOw6ojFszQRSeQ2YPAMAXX3wRMrteV2vOmoJeM1okUDM4Ggu7YAPJdVFE0rq2/+c//wmdrjW6hjXTarPNNguZJve83SE6Ju0ETTepdlzXFjjMJsty4eeZIad7hh6T7kt0U5x++umh0xYJzAzVNalukDzRc6uZVN27dw+ZLmEd86BBg0Kme72hMAl1t7ItBJB0Uy+yyCLTfFe10PWp42ZWrbruvv7662mOLytrk8dazUxBW3SMMcYYU1paZNHRJzq+kbO8NZAMQNpqq61CPvnkkwEkn2i1DsA777wDIFlnZYkllgj5rbfeApB8i9GmfLvvvnvILC1erbcY/R61SOkb4W233QYg+caldXIeeeQRAMk3krRmoWyVANSmwad+D+dPg9b0PKa9ETZ0Th9++OGQNdhw2223BQAcdthhoWOAKFC9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Zv5oBpDCcWdlDdYLPf+///57yFyLb7zxRuhGjhwZ8iOPPAIA+Ouvv0Knbp609anndeONN67KMas77cILLwQA3HDDDaGjCx8A5phjjpBfe+01AJUQAKCyZwBAv379AAC77rpr6vHnuZfomhwzZkzIBx98cMh0zR111FGhUzcdXd9p7uRaUbwr3RhjjDGmSjTaosMnSg1g1Kewn3/+GUD2U/QXX3wRMp/OH3744dDp28maa64JAJh33nlDt+GGG4bcrVs3ANkWoWrRlMqWWTVJ0v6Wb5/6RsLaD0Dl6Z9vw1N/vpboOLT2BK04QOWNapNNNgndAQccEPLMM88MAFhsscVCp8FmRbHo6Dxde+21IZ9zzjkAkmtdLTZnnXXWNN/11FNPhcy3m+effz71t+o1l/qbarHZbrvtACQtTuedd17Ia6yxBgBgoYUWCt2//vWvkGmx+eCDD0J3zz33hKyfO/DAA5s/gBR07cw222wh617x008/AQBeffXV0D333HMh0zq30korha7We0lD8LrTfUDP71133RXyuHHjACTfkmmlA4Czzz4bQHLP1PNG64lafP7973+HXK9qwe+//37IO+20U8jLLrssAGDHHXcMna7V9u3bA0haSXTN0RK5wAILhE4tyh07dgy5sXsRj1uvqTfffDPkSy65BEByn7j66qtDXmWVVULu0KEDgGSAtF4nvBYZlAwk99I8LTo6f08++WTIo0aNmkav61Ovr7TK+bXGFh1jjDHGlBY/6BhjjDGmtEzXdaVmKrpbTj/99NAxKBOoBFhl1bbQnHm6bDSATGFOvpq7tPYBWwzMPffcoatWTRY1ZWowWdr36/nRAEy6CVSnrjuaLPX80RwNVAI/11133dDl4e7QYEA1/dOMrCW+aW4G0oOpi+KuynLNqeuJgdUMWgWAQw45JOR11lkHALDwwguHTgN3jzzySADJYD39/zxMz9pgjy7RW2+9NXQaOM65UjeKrgW6UbTthwYe9ujRI+Rqmal5/Wm9FK3dlBbMf/fdd4fuhBNOCFnHlSdpAaYaIK7X14ILLhjyQQcdBCBZm0THx/XLekhAsubM5ZdfDgDYZ599QqduolrUt+J9Qes16e/TnQpU7jGzzz77dI9J7zVpTYMb0zSzqetS186LL74YMt3VWjtm0UUXDTnNdTPffPOFTlskPProowCS1+ziiy/e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euuEPuZaz19aXAtQm14zyowyf2XfX8o+vpauz6zri/FieWVPOUbHGGOMMaZE5FpHx5jWjL6xabsPvrEV1S3M4x43blzobrrpppC32GILAMByyy0XurxLuFcTzlWZxmSKge4Jf//9d8gDBw4Mee211waQbNFSxHYyZcIWHWOMMcaUlqpbdPSJVmvf6BtvQ02/ivhGzHHpOHSsWfL00BiIolcB1TGxQZ+ei4ZoTWNtCJ4LHccff/wR8iyzzAIg2UixiGtZqwlfeumlIX///fcAgIsvvjh0addv0cmqHcO5mnnmmUOne5UtPfnS0v0lz/nTY/79999D1mvprbfeAgBcd911odMq0a3l+mqILIs357ehe4LunypPmTIl5MaeK1t0jDHGGFNa/KBjjDHGmNJSNddVmjn8+eefD/m9994LuUOHDgCAxRdfPHRLLbVUyNSr6SsPc2RaC4dvv/02dGpC+/XXX0PWcuzT+95u3bqFboEFFgi5KKZLHf/kyZNDHjVqFADg888/D50G3tHMqK6BFVZYIWSOtTW6Q4DKceta2HDDDUN+8cUXAQALLrhg6IrUiI/nWlsEzDnnnCEvueSSAFqvOyfNzfzwww+HfOyxxwIAbrzxxtB17949ZJ6X1jhmlbOuryKGBijcXz788MPQpbk22rVrF/Iaa6wR8uyzzw4gn/nT41xkkUVC1hY/dFmNHj06dHr/KzJNCdfQ9fXNN9+E/NlnnwEAVlllldDp/kPGjBkT8jvvvBPypptuGjL3qIbWsi06xhhjjCktftAxxhhjTGmpuuvqiSeeCN2TTz4Z8hJLLBEyzXuvvvpq6M4999yQWb/joosuCt1ss80Wcr1Mkmr6HTlyJABgv/32C526c9R1xe7rSpqZ77jjjgvd+eefH3JRspL0mL/++uuQ6abROix0RwIV15VGyqsb67777gMArLzyyqErypibgo5v7NixIX/11VcAku7IIkFz7yOPPBI6dUNqBkhrQa9VulGvvPLK0F199dUh8/o88sgjQ6f7U58+fQAk3SFFdPNkZSV99913AIBBgwaFTmu2bLLJJgDyzwrU4//0009D7tWrFwDgiy++CJ2GRPBY9fi33377kC+44AIAydCIvF3H7CgPVLIan3766dDRXQxU9t0irTkek94TdM9T1xTn5e233w7dzTffHPJHH30EANh5551Dpxlo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6eVNIa0gW2unub06jKk3ev2R1nQdph1/Q7Sm8SncS7LGPCPuNa19/ZraYouOMcYYY0pLrhYdffPQrsTsXtqct7S8YHdlRYt4aXfltBYXM+JbmCkOf/75Z8hcq9rxu4jrU/cH7TTPrsp6Teq1xvG1a9cudK2pICQtxRMnTgzd5MmTQ2b38uaU4m8NpI2LHc8B4MwzzwQAXH755aFbaqmlQralZ8aj9TxJGGOMMcY0ET/oGGOMMaa05OK6osn59ddfD52aGS+77DIAwEILLRS6IpqW1YT622+/hfzYY48BAL7++uvQdevWLeSuXbsCAOadd97QqWsrj7HmYeYuojsEqJwLdY2ozPkpkwn8/PPPD5nr9tZbbw0d3clAvvOm61TdNaecckrI7777LgBgnnnmCd348eNDXmCBBQAAJ598cug6deoUctHnlS65q6++OnSDBw8OmfvPHHPMEbqij6khdN45Fo4TAI466qiQuRf/61//Cl1R9xqStv82pSN4kcIgGto/09Djp1zNcdiiY4wxxpjS4gcdY4wxxpSWXF1Xr7zySujUjaUm6aKhJrhff/015AMPPDDkRx99FEDS3D/nnHOGPP/88wNIurOOPPLIkJdbbrlpfqsW7iw1h/L79Xf099WMmGaaVGh61O8vYgZdVu2m77//HgAwZMiQ0OlaPeaYYwAAq666auiK6FptCsxUAoCXX34ZQDITUjOUiuK60uvv8ccfD5kuC7qoAODvv/8O+fnnnwcAbLrppqFbYoklqn+wVUTPOdftZ599Fjo9F8zG0qwzXZ+tJRtLj/+vv/4K+corrwQA9OvXL3Rzzz13yLfffjsAYL755gtdrdcs948sd02a6033HM0aHDt2LADgu+++C923334bMsei95cePXqEzPtLrcna3zlXI0eODN2gQYNC5lrUcI1evXqFvMYaa0zznS2dv+LdfYwxxhhjqkQuFh0+na222mqh08DBDh06JP6uCPDpUp+8L7jggpA1MO6AAw4AABx22GGhW3DBBUP++OOPp/nM9ttvH/LOO+8MAOjTp0/oZptttpCrZT3QN6YHH3wQANCzZ8/Q6VvuDz/8EDKDHHX+9O3kzTffBJC0Yu26664hH3vssQCSdVrqFSypbwl//PFHyOecc07IN910E4CkFUPfKD/44AMAwLBhw0KnY50yZQqA5JiK9BbNY1Erjgazbr311gAq9ViA4lyLehx6Tcw666whr7322gCAiy66KHR6/lkzSINVix6smxaErQkQXbp0CZnX9SeffBI6vZZ5Dou0JhUeHy2rAHD22WeHTOuAzv8JJ5wQ8pprrgmguhYBkhUMf/HFFwMAunfvHjquQyA5FloUhw8fHjreE4DKvvTvf/87dIsuumjIaRZz/dt6WXT0/L7zzjsh77PPPgCS9wy13nBf0QQBekEA4NRTTwUAHHTQQaFraZcBW3SMMcYYU1r8oGOMMcaY0pKr62rhhRcOnQY+0k1QJNMqj2XEiBGh69+/f8jqZqKcZRpfd911AQDrrLNO6LbddtuQ99xzTwBJ0zPdKQDQsWPHkFvixtJjWn/99QEAjzzySOr/61x8+umnAJLmWA2M69y5MwCgb9++oVPTJeV6ukN4/GpuZql4ALjllltCphtrgw02CJ2aYXv37g0g6brcbLPNQmaQspqTi+L6UdKC0afWFw09j+pa05pU3D90/er6nH322af5riLOj6JuZro56EIFkuv3ueeeA5Dcn5566qnU7yoKuj+MGjUKALD//vuH7qWXXgqZc33vvfeGTvdSruVazK9eGxMmTAj5ySefBADcddddoVt++eVDfuGFF0LmHrTXXnuF7qSTTgp5mWWWAZB0x+r6TjuWNm3aNGEUzUfXDu8DQOWeBVSur5122il0vOcBlfp4L774YujorgKAO++8EwCw7777hq6l47NFxxhjjDGlxQ86xhhjjCktuXYvZ3bK1BTFdJ7WHVnNwdtss03I6rpi1phmtaSh41xrrbVCZjbPdtttF7orrrgi5LPOOmua72iOaVZN+3SH6Ziy4Lj082pavOOOOwAko/+1zhD/tp61ZziXb7/9duiuv/76kNXNdvDBBwNImtOXXXbZkJnVcemll4bu2muvDfnEE08EkGxLUCS4ZtJqrwAV03IRXRx6zWhtHNYeASoug6K0rag233zzDQDgl19+CZ1mrdL1o3VYxo0bFzKv9bzPiV5fb7zxRshszaGujQ033HAaWd3sDz30UMjMcN1yyy1Dt9hii4Xckppeuv6++OKLkNk2RV3jek1pi6PNN98cQMXFAyT3z7Q9vaGswFrPJfcCXXN04U8NW8doWxXdSzjv7733Xuh0fD/++OM0upZii44xxhhjSosfdIwxxhhTWnJxXdE0p6YrNfPl6brKykRhp2CWxweAp59+OmTNsMlyyU2Nmhv1t2jyu+GGG0LHrCigUlAQqHRCb6npkmbCxrTfSGsBofPH1gmrr7566LSgXh7tEuh6vOSSS0KnZeO1UCLRc6Fmds6Pjl8zMOgmSGubUQR43MxuAJLF51ZYYQUAyYKOOr95oudRCz7q8dMNoKZvnb800jJ08s7K0rFqVirdrEsvvXTotN0BXVvqOi9KQUS9ZnicQPK6ZIYVW+EAyfHRJUcXCZC8VjnW++67L3Tq5mpOV3fOhe7t99xzT8g//fQTgGT2Gwvn6ef1N3UfLFL3cZJWpE9brbz22msha1Yws26zxse95Iknngid/u2hhx4KIFmwtaXYomOMMcaY0pKrRWf06NGhK+IbBwPMAOCaa64BAGyyySah0wC3hgKPmwK/SwNg1aKjgXcrrbRS1X63sfDpPq2RG1Cp76Fl2fNA30j4Jsby6wAwyyyzTPdz+vm0txtds2qxYjsPDcAryvoGKmPR9a0tSljHg608AGCppZYKmZaeorx5Asm3P7az0Dofap3iceucaR0klvHX/1dqOW79bl0/av2mVZnNK4Hk+Div+nn9f163WWuyFuPjb2owK1vBAMkWADxWrZOklgRat7TFgiY+MIhZ96SWWiR5zbB9CAA8/PDD0xyzWnn0+tF2OWzAqXXkFJ6rLCsk562e1x8tLlrPSM+5BounHZ+uRa5P/S71iKTtny29v9qiY4wxxpjS4gcdY4wxxpSWurmu1PRPM5TWNEkLJssDNZeNHDkyZLYA0I7kag6uZoAtx68lwLWE9gMPPBDyGWecUbXfbSxprh1tkcDA38bU5Kklajqla2PHHXcMnQbjfvXVVyEzGDet4zUAfPjhhwCSpuXjjjsuZAZhF8m1o2OhSf/LL78MnbpkGVitJfa1u3tRxqXnX9utUK/mcN1T6BrQOijqOuHnLrzwwtBtscUWqcdQrXOR5g7WNaduHtbXyjomumnVta77Gr9Xj13PZbWCQPX/r5ddAAAJo0lEQVQ3P/vsMwDAHnvsETrt2K01ZXgveP/990OniQMMfNWO7OweDgA///wzgGRbgrnmmivk5txf+BldU5qMwrYbGoysbR/uvvvukHleNLBZ3eiss6N1gDQwe5FFFgGQnLNaJ3hwrfDcAsDKK68csl5/HJ/WBtI6TtxLtI7XaaedFjLd6NUcky06xhhjjCktftAxxhhjTGnJtXu51r7QOgns1Jq3iVxNZzSndenSJXR6fGpyTqvD0RT4XWra1JoTRek0rSZgrVlBk7maM/OeS5p5tUvuW2+9FbK6tGg61hYCrJMBVOo/qGlZXQt5dGdvCHUjfPLJJwCSrgF1k9A1cPTRR4cuLessD/S3tR6K1pxiNohmkqXVNNKsHLojgUprEHVH6v60yiqrhFytDBgek2aXXHXVVSG//vrrIS+wwALT/L/uD9o6gey9994h81jVDaPds7P2uMag+6BmWNE1wbUHAN26dQtZ3RjffvstgGTW21ZbbRUys3Z0/K+++mrIvJaPOeaY0KmbpyVzpd+jrsEDDjgAALDLLruEji58IDk/nGPNelSZLRCOP/740GnW2G677QYA6NWrV+hWXHHFkGtxfXL/0OyxG2+8MVWmS0uzqnVNcv/cYYcdQnfQQQeFnFYHq6XYomOMMcaY0pKrRUefPPXti28aeb8Rp9WhUJ0+ZesTLYPFaBkAkoFZDY2Lb0X6FKyBs3nXpyH69qmBeQxsLVJTRb4d6FuYVubU+hd8O9S3UwZTApU6HnyzApIBnHlUfk4jLQEAqFSu1rdoffvmW6kGexalDlBWbY5VV101ZB6rWkTTLFJsvgtUGrXq/6uVUptOqkWnWvD4NCmDb/ZAso4RKwM/9dRTodP19/333wMAjjjiiNCpRYTXgFp0ZptttpBbcq1mVT5mYK7+P48TAMaPHx8yz4U2bdXrk//PfRYAzjvvvJBZkbg5FZCbQtp3au0fDTDWpquE9ZqA9Cr5p59+eug0AYUNhAcNGhS6u+66K2StL9SSuUzzWLBqMZBspHvBBReEzMBynVOtYs76cGzeCiSt/9WsSUds0THGGGNMafGDjjHGGGNKSy51dGjGUtPsRhttFHJDJcprif6mmkZZW2TMmDGh+/zzz0Pu169fyEOHDgXQsDlOz4ma4WnyPfjgg6f5fSBZ8yQPeNwaTK6m/T59+gBIBu7VwhzZHNQcy6B3IBm4SFnnR+t0MMhO23Lk7ZpLQ49f3awahEyWXHLJkNPqHxVlfFltOXR98VizAvXVfULeeeedkM8991wAwOKLLx463Z+UatfRUXeaBtvq9U83uLqrtEXCiBEjAACHH3546HR+0/bVrKaSTU12yGqESpeOBoBrTRZ193KtMugaANZZZ52Q6brX2jJpoQF53D+yxt+UY+G9QF1vGqxL15zqzj///JAffPDBkKvVroXHr8eke+J+++0XMl37bD4LJMMw9t13XwDAoosuGrpau/tt0THGGGNMafGDjjHGGGNKS91cV2ouZul5Zg8AyXLdeaImNDWN0gysmQwdO3YMuXPnziGfcsopAJKZHDvttFPIrA+hkejayZWd0vX8aM0BdpcG8nEp0JytJfS1RDuzdbLMuEWhoeNTHTuyAxXzrbYAKTqazcOaMeouVTM4XTZFcTcC6XVm1F2q5ejpJtFrWV0HzAa5/PLLQ6cZLPyt/v37hy7vDLS0mlR6LjSDcI011gCQ7C6t56Kha7Eltbn0d7p27RryM888AyBZm+nJJ58MWVtD0LWhrquFFlooZLr3dB6KkhXYGHgvzNp/0rKS9Vqly1Kzti666KKQ9VrnuarW/qvnWd2FmvXImkCffvpp6LQ206677gog+UxQ6/mzRccYY4wxpSUXiw6DbbWOh1bBzBN98tU39t69ewNIVsPVYFwN9mMwowaIadMyPpHrk7fWHOBT+Nlnnx06rdJazyfhNPjG995774VO3zhZk6OIVpymoJVN1XpA65XOQ5r1Iy3oNS/S3hi1kaIGIBfx7ZhrTsdx//33h6zBuHxjfO2110KnFrlhw4YBSI5fK2MfddRRAJLJCFnBuvWiod/UtcoGlnmvP/39Tp06AQAOOeSQ0L377rsh0+IDAD169AAArLXWWqHTxIYirs+G0GNmzSoN7E1rpJr2GaCyfvWeolWSNaC9XmtV1x9r+rDCNfD/2rt3HMWBIIzjNQEPCcENOAIpKRlcgKtACpwAAiTuwUEQdyHhkWywWz0fWnsQxo1Nz/8XWR6hcePHeKq6q+6jpz7ud57H+jyJAQAASsaLDgAASNbbUlcaQuv1en9/uYQj61I2X2WF/XQicF6jQ69/oRM8NTTrdQb08xrm9ZoRw+Ew8+dVp4T8uLWOkKbhqj6+V/n4NLTq58zMbDAYmFn+9asTB6uUl4b1iYHadqXf74ftOqYG/Ji0rYg2PdTUrjce1LYJ2oxwuVyamdloNAr7dGFBVh2Wul/T2u7CU27PtJ2JzVO7k8kk7NO2MVpTzZt96n1Ux2vyEX2+6/Nxs9mY2X2LC03TeWpHUz+73S5sH49HM7tf4LJYLMK23iMxvzcdn9ZH8nZF3urB7H5hTlmNcJ9BRAcAACSLFx0AAJCsr5/CR9frtbTYUlYY73Q6hX3aPTd26L/ZbH79O44osTMfq47jmToW/rmiofPY4/OQuLZNOBwOYdvTdJraKTNMGXt8WWazWdjebrdm9t3qwsxsPp+H7VdrV/j4zudzlPF5OwFNh2pqK3ZIud1ulzI+vb+0RYI/V3Qli25n1T8qM03l47vdblG/SD1OTYP4fRerzlOj0Sjl/tPzl7WCsap0W4zni47Fr9X9fh/2ac0mT5PrSk5fiWb2XXNIa9P4dBCzx+kqH9/lcint/OmqRq9ptV6vwz6tP5dVJ6hMrVbrv0JQRHQAAECyeNEBAADJqmTVlc8K98JWZp85qz5PVon2vK7LWeq4Ai2LrvTQru7efbjb7YZ9Va/6KELPk3aC9uKIWjyyiiJdRXU6HTOrf4uOR/Q+0TTNo9RhFas+YtDrU+81p8/UV9o6xKLn71OeeUXp9+/3nxb5m06nYTvrb6GuoPOUUdHu6GXR3+9jMjNbrVZmZjYej99+THmI6AAAgGS9bTJynVQxmfWdYo/PJw5qFEfrKHi590+fjJzXVM/Hpf+F5kXviog9GblqZU1Grqt3TUauSlmTkevqt/x9eHUystLno29XFbFjMjIAAPhVeNEBAADJ+jF1BQAA8MmI6AAAgGTxogMAAJLFiw4AAEgWLzoAACBZvOgAAIBk8aIDAACS9QdJrNQUsQgApwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Randomly select 100 data points to display\n", + "rand_indices = np.random.choice(m, 100, replace=False)\n", + "sel = X[rand_indices, :]\n", + "\n", + "utils.displayData(sel)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 1.3 Vectorizing Logistic Regression\n", + "\n", + "You will be using multiple one-vs-all logistic regression models to build a multi-class classifier. Since there are 10 classes, you will need to train 10 separate logistic regression classifiers. To make this training efficient, it is important to ensure that your code is well vectorized. In this section, you will implement a vectorized version of logistic regression that does not employ any `for` loops. You can use your code in the previous exercise as a starting point for this exercise. \n", + "\n", + "To test your vectorized logistic regression, we will use custom data as defined in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# test values for the parameters theta\n", + "theta_t = np.array([-2, -1, 1, 2], dtype=float)\n", + "\n", + "# test values for the inputs\n", + "X_t = np.concatenate([np.ones((5, 1)), np.arange(1, 16).reshape(5, 3, order='F')/10.0], axis=1)\n", + "\n", + "# test values for the labels\n", + "y_t = np.array([1, 0, 1, 0, 1])\n", + "\n", + "# test value for the regularization parameter\n", + "lambda_t = 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 1.3.1 Vectorizing the cost function \n", + "\n", + "We will begin by writing a vectorized version of the cost function. Recall that in (unregularized) logistic regression, the cost function is\n", + "\n", + "$$ J(\\theta) = \\frac{1}{m} \\sum_{i=1}^m \\left[ -y^{(i)} \\log \\left( h_\\theta\\left( x^{(i)} \\right) \\right) - \\left(1 - y^{(i)} \\right) \\log \\left(1 - h_\\theta \\left( x^{(i)} \\right) \\right) \\right] $$\n", + "\n", + "To compute each element in the summation, we have to compute $h_\\theta(x^{(i)})$ for every example $i$, where $h_\\theta(x^{(i)}) = g(\\theta^T x^{(i)})$ and $g(z) = \\frac{1}{1+e^{-z}}$ is the sigmoid function. It turns out that we can compute this quickly for all our examples by using matrix multiplication. Let us define $X$ and $\\theta$ as\n", + "\n", + "$$ X = \\begin{bmatrix} - \\left( x^{(1)} \\right)^T - \\\\ - \\left( x^{(2)} \\right)^T - \\\\ \\vdots \\\\ - \\left( x^{(m)} \\right)^T - \\end{bmatrix} \\qquad \\text{and} \\qquad \\theta = \\begin{bmatrix} \\theta_0 \\\\ \\theta_1 \\\\ \\vdots \\\\ \\theta_n \\end{bmatrix} $$\n", + "\n", + "Then, by computing the matrix product $X\\theta$, we have: \n", + "\n", + "$$ X\\theta = \\begin{bmatrix} - \\left( x^{(1)} \\right)^T\\theta - \\\\ - \\left( x^{(2)} \\right)^T\\theta - \\\\ \\vdots \\\\ - \\left( x^{(m)} \\right)^T\\theta - \\end{bmatrix} = \\begin{bmatrix} - \\theta^T x^{(1)} - \\\\ - \\theta^T x^{(2)} - \\\\ \\vdots \\\\ - \\theta^T x^{(m)} - \\end{bmatrix} $$\n", + "\n", + "In the last equality, we used the fact that $a^Tb = b^Ta$ if $a$ and $b$ are vectors. This allows us to compute the products $\\theta^T x^{(i)}$ for all our examples $i$ in one line of code.\n", + "\n", + "#### 1.3.2 Vectorizing the gradient\n", + "\n", + "Recall that the gradient of the (unregularized) logistic regression cost is a vector where the $j^{th}$ element is defined as\n", + "\n", + "$$ \\frac{\\partial J }{\\partial \\theta_j} = \\frac{1}{m} \\sum_{i=1}^m \\left( \\left( h_\\theta\\left(x^{(i)}\\right) - y^{(i)} \\right)x_j^{(i)} \\right) $$\n", + "\n", + "To vectorize this operation over the dataset, we start by writing out all the partial derivatives explicitly for all $\\theta_j$,\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "\\begin{bmatrix} \n", + "\\frac{\\partial J}{\\partial \\theta_0} \\\\\n", + "\\frac{\\partial J}{\\partial \\theta_1} \\\\\n", + "\\frac{\\partial J}{\\partial \\theta_2} \\\\\n", + "\\vdots \\\\\n", + "\\frac{\\partial J}{\\partial \\theta_n}\n", + "\\end{bmatrix} = &\n", + "\\frac{1}{m} \\begin{bmatrix}\n", + "\\sum_{i=1}^m \\left( \\left(h_\\theta\\left(x^{(i)}\\right) - y^{(i)} \\right)x_0^{(i)}\\right) \\\\\n", + "\\sum_{i=1}^m \\left( \\left(h_\\theta\\left(x^{(i)}\\right) - y^{(i)} \\right)x_1^{(i)}\\right) \\\\\n", + "\\sum_{i=1}^m \\left( \\left(h_\\theta\\left(x^{(i)}\\right) - y^{(i)} \\right)x_2^{(i)}\\right) \\\\\n", + "\\vdots \\\\\n", + "\\sum_{i=1}^m \\left( \\left(h_\\theta\\left(x^{(i)}\\right) - y^{(i)} \\right)x_n^{(i)}\\right) \\\\\n", + "\\end{bmatrix} \\\\\n", + "= & \\frac{1}{m} \\sum_{i=1}^m \\left( \\left(h_\\theta\\left(x^{(i)}\\right) - y^{(i)} \\right)x^{(i)}\\right) \\\\\n", + "= & \\frac{1}{m} X^T \\left( h_\\theta(x) - y\\right)\n", + "\\end{align*}\n", + "$$\n", + "\n", + "where\n", + "\n", + "$$ h_\\theta(x) - y = \n", + "\\begin{bmatrix}\n", + "h_\\theta\\left(x^{(1)}\\right) - y^{(1)} \\\\\n", + "h_\\theta\\left(x^{(2)}\\right) - y^{(2)} \\\\\n", + "\\vdots \\\\\n", + "h_\\theta\\left(x^{(m)}\\right) - y^{(m)} \n", + "\\end{bmatrix} $$\n", + "\n", + "Note that $x^{(i)}$ is a vector, while $h_\\theta\\left(x^{(i)}\\right) - y^{(i)}$ is a scalar (single number).\n", + "To understand the last step of the derivation, let $\\beta_i = (h_\\theta\\left(x^{(m)}\\right) - y^{(m)})$ and\n", + "observe that:\n", + "\n", + "$$ \\sum_i \\beta_ix^{(i)} = \\begin{bmatrix} \n", + "| & | & & | \\\\\n", + "x^{(1)} & x^{(2)} & \\cdots & x^{(m)} \\\\\n", + "| & | & & | \n", + "\\end{bmatrix}\n", + "\\begin{bmatrix}\n", + "\\beta_1 \\\\\n", + "\\beta_2 \\\\\n", + "\\vdots \\\\\n", + "\\beta_m\n", + "\\end{bmatrix} = x^T \\beta\n", + "$$\n", + "\n", + "where the values $\\beta_i = \\left( h_\\theta(x^{(i)} - y^{(i)} \\right)$.\n", + "\n", + "The expression above allows us to compute all the partial derivatives\n", + "without any loops. If you are comfortable with linear algebra, we encourage you to work through the matrix multiplications above to convince yourself that the vectorized version does the same computations. \n", + "\n", + "Your job is to write the unregularized cost function `lrCostFunction` which returns both the cost function $J(\\theta)$ and its gradient $\\frac{\\partial J}{\\partial \\theta}$. Your implementation should use the strategy we presented above to calculate $\\theta^T x^{(i)}$. You should also use a vectorized approach for the rest of the cost function. A fully vectorized version of `lrCostFunction` should not contain any loops.\n", + "\n", + "
\n", + "**Debugging Tip:** Vectorizing code can sometimes be tricky. One common strategy for debugging is to print out the sizes of the matrices you are working with using the `shape` property of `numpy` arrays. For example, given a data matrix $X$ of size $100 \\times 20$ (100 examples, 20 features) and $\\theta$, a vector with size $20$, you can observe that `np.dot(X, theta)` is a valid multiplication operation, while `np.dot(theta, X)` is not. Furthermore, if you have a non-vectorized version of your code, you can compare the output of your vectorized code and non-vectorized code to make sure that they produce the same outputs.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def lrCostFunction(theta, X, y, lambda_):\n", + " \"\"\"\n", + " Computes the cost of using theta as the parameter for regularized\n", + " logistic regression and the gradient of the cost w.r.t. to the parameters.\n", + " \n", + " Parameters\n", + " ----------\n", + " theta : array_like\n", + " Logistic regression parameters. A vector with shape (n, ). n is \n", + " the number of features including any intercept. \n", + " \n", + " X : array_like\n", + " The data set with shape (m x n). m is the number of examples, and\n", + " n is the number of features (including intercept).\n", + " \n", + " y : array_like\n", + " The data labels. A vector with shape (m, ).\n", + " \n", + " lambda_ : float\n", + " The regularization parameter. \n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The computed value for the regularized cost function. \n", + " \n", + " grad : array_like\n", + " A vector of shape (n, ) which is the gradient of the cost\n", + " function with respect to theta, at the current values of theta.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost of a particular choice of theta. You should set J to the cost.\n", + " Compute the partial derivatives and set grad to the partial\n", + " derivatives of the cost w.r.t. each parameter in theta\n", + " \n", + " Hint 1\n", + " ------\n", + " The computation of the cost function and gradients can be efficiently\n", + " vectorized. For example, consider the computation\n", + " \n", + " sigmoid(X * theta)\n", + " \n", + " Each row of the resulting matrix will contain the value of the prediction\n", + " for that example. You can make use of this to vectorize the cost function\n", + " and gradient computations. \n", + " \n", + " Hint 2\n", + " ------\n", + " When computing the gradient of the regularized cost function, there are\n", + " many possible vectorized solutions, but one solution looks like:\n", + " \n", + " grad = (unregularized gradient for logistic regression)\n", + " temp = theta \n", + " temp[0] = 0 # because we don't add anything for j = 0\n", + " grad = grad + YOUR_CODE_HERE (using the temp variable)\n", + " \n", + " Hint 3\n", + " ------\n", + " We have provided the implementatation of the sigmoid function within \n", + " the file `utils.py`. At the start of the notebook, we imported this file\n", + " as a module. Thus to access the sigmoid function within that file, you can\n", + " do the following: `utils.sigmoid(z)`.\n", + " \n", + " \"\"\"\n", + " #Initialize some useful values\n", + " m = y.size\n", + " \n", + " # convert labels to ints if their type is bool\n", + " if y.dtype == bool:\n", + " y = y.astype(int)\n", + " \n", + " # You need to return the following variables correctly\n", + " J = 0\n", + " grad = np.zeros(theta.shape)\n", + " \n", + " # ====================== YOUR CODE HERE ======================\n", + " hyp = utils.sigmoid(X@theta)\n", + " reg = (lambda_/(2*m)) * (theta[1:].T @ theta[1:])\n", + " J = (-1/m) * (y.T @ np.log(hyp) + (1-y.T) @ np.log(1 - hyp)) + reg\n", + " #J=J+reg\n", + " grad = (1/m)*(hyp-y)@X\n", + " temp = theta\n", + " temp[0] = 0\n", + " grad[1:] = grad[1:] + (lambda_/m)*temp[1:]\n", + "\n", + " \n", + " # =============================================================\n", + " return J, grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1.3.3 Vectorizing regularized logistic regression\n", + "\n", + "After you have implemented vectorization for logistic regression, you will now\n", + "add regularization to the cost function. Recall that for regularized logistic\n", + "regression, the cost function is defined as\n", + "\n", + "$$ J(\\theta) = \\frac{1}{m} \\sum_{i=1}^m \\left[ -y^{(i)} \\log \\left(h_\\theta\\left(x^{(i)} \\right)\\right) - \\left( 1 - y^{(i)} \\right) \\log\\left(1 - h_\\theta \\left(x^{(i)} \\right) \\right) \\right] + \\frac{\\lambda}{2m} \\sum_{j=1}^n \\theta_j^2 $$\n", + "\n", + "Note that you should not be regularizing $\\theta_0$ which is used for the bias term.\n", + "Correspondingly, the partial derivative of regularized logistic regression cost for $\\theta_j$ is defined as\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "& \\frac{\\partial J(\\theta)}{\\partial \\theta_0} = \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta\\left( x^{(i)} \\right) - y^{(i)} \\right) x_j^{(i)} & \\text{for } j = 0 \\\\\n", + "& \\frac{\\partial J(\\theta)}{\\partial \\theta_0} = \\left( \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta\\left( x^{(i)} \\right) - y^{(i)} \\right) x_j^{(i)} \\right) + \\frac{\\lambda}{m} \\theta_j & \\text{for } j \\ge 1\n", + "\\end{align*}\n", + "$$\n", + "\n", + "Now modify your code in lrCostFunction in the [**previous cell**](#lrCostFunction) to account for regularization. Once again, you should not put any loops into your code.\n", + "\n", + "
\n", + "**python/numpy Tip:** When implementing the vectorization for regularized logistic regression, you might often want to only sum and update certain elements of $\\theta$. In `numpy`, you can index into the matrices to access and update only certain elements. For example, A[:, 3:5]\n", + "= B[:, 1:3] will replaces the columns with index 3 to 5 of A with the columns with index 1 to 3 from B. To select columns (or rows) until the end of the matrix, you can leave the right hand side of the colon blank. For example, A[:, 2:] will only return elements from the $3^{rd}$ to last columns of $A$. If you leave the left hand size of the colon blank, you will select elements from the beginning of the matrix. For example, A[:, :2] selects the first two columns, and is equivalent to A[:, 0:2]. In addition, you can use negative indices to index arrays from the end. Thus, A[:, :-1] selects all columns of A except the last column, and A[:, -5:] selects the $5^{th}$ column from the end to the last column. Thus, you could use this together with the sum and power ($^{**}$) operations to compute the sum of only the elements you are interested in (e.g., `np.sum(z[1:]**2)`). In the starter code, `lrCostFunction`, we have also provided hints on yet another possible method computing the regularized gradient.\n", + "
\n", + "\n", + "Once you finished your implementation, you can call the function `lrCostFunction` to test your solution using the following cell:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost : 2.534819\n", + "Expected cost: 2.534819\n", + "-----------------------\n", + "Gradients:\n", + " [0.146561, -0.548558, 0.724722, 1.398003]\n", + "Expected gradients:\n", + " [0.146561, -0.548558, 0.724722, 1.398003]\n" + ] + } + ], + "source": [ + "J, grad = lrCostFunction(theta_t, X_t, y_t, lambda_t)\n", + "\n", + "print('Cost : {:.6f}'.format(J))\n", + "print('Expected cost: 2.534819')\n", + "print('-----------------------')\n", + "print('Gradients:')\n", + "print(' [{:.6f}, {:.6f}, {:.6f}, {:.6f}]'.format(*grad))\n", + "print('Expected gradients:')\n", + "print(' [0.146561, -0.548558, 0.724722, 1.398003]');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After completing a part of the exercise, you can submit your solutions for grading by first adding the function you modified to the submission object, and then sending your function to Coursera for grading. \n", + "\n", + "The submission script will prompt you for your login e-mail and submission token. You can obtain a submission token from the web page for the assignment. You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "*Execute the following cell to grade your solution to the first part of this exercise.*" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise multi-class-classification-and-neural-networks\n", + "\n", + "Login (email address): tanmayss2109@gmail.com\n", + "Token: fr8kwluMqRLcPibL\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Regularized Logistic Regression | 30 / 30 | Nice work!\n", + " One-vs-All Classifier Training | 0 / 20 | \n", + " One-vs-All Classifier Prediction | 0 / 20 | \n", + " Neural Network Prediction Function | 0 / 30 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "# appends the implemented function in part 1 to the grader object\n", + "grader[1] = lrCostFunction\n", + "\n", + "# send the added functions to coursera grader for getting a grade on this part\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.4 One-vs-all Classification\n", + "\n", + "In this part of the exercise, you will implement one-vs-all classification by training multiple regularized logistic regression classifiers, one for each of the $K$ classes in our dataset. In the handwritten digits dataset, $K = 10$, but your code should work for any value of $K$. \n", + "\n", + "You should now complete the code for the function `oneVsAll` below, to train one classifier for each class. In particular, your code should return all the classifier parameters in a matrix $\\theta \\in \\mathbb{R}^{K \\times (N +1)}$, where each row of $\\theta$ corresponds to the learned logistic regression parameters for one class. You can do this with a “for”-loop from $0$ to $K-1$, training each classifier independently.\n", + "\n", + "Note that the `y` argument to this function is a vector of labels from 0 to 9. When training the classifier for class $k \\in \\{0, ..., K-1\\}$, you will want a K-dimensional vector of labels $y$, where $y_j \\in 0, 1$ indicates whether the $j^{th}$ training instance belongs to class $k$ $(y_j = 1)$, or if it belongs to a different\n", + "class $(y_j = 0)$. You may find logical arrays helpful for this task. \n", + "\n", + "Furthermore, you will be using scipy's `optimize.minimize` for this exercise. \n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def GraDes(X,y,theta,alpha,num_iters,Lambda):\n", + " m=len(y)\n", + " J_his=[]\n", + " \n", + " for i in range(num_iters):\n", + " cost,grad = lrCostFunction(theta,X,y,Lambda)\n", + " theta = theta - (alpha*grad)\n", + " J_his.append(J)\n", + " return theta, J_history\n", + "\n", + "def oneVsAll(X, y, num_labels, lambda_):\n", + " \"\"\"\n", + " Trains num_labels logistic regression classifiers and returns\n", + " each of these classifiers in a matrix all_theta, where the i-th\n", + " row of all_theta corresponds to the classifier for label i.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The input dataset of shape (m x n). m is the number of \n", + " data points, and n is the number of features. Note that we \n", + " do not assume that the intercept term (or bias) is in X, however\n", + " we provide the code below to add the bias term to X. \n", + " \n", + " y : array_like\n", + " The data labels. A vector of shape (m, ).\n", + " \n", + " num_labels : int\n", + " Number of possible labels.\n", + " \n", + " lambda_ : float\n", + " The logistic regularization parameter.\n", + " \n", + " Returns\n", + " -------\n", + " all_theta : array_like\n", + " The trained parameters for logistic regression for each class.\n", + " This is a matrix of shape (K x n+1) where K is number of classes\n", + " (ie. `numlabels`) and n is number of features without the bias.\n", + " \n", + " Instructions\n", + " ------------\n", + " You should complete the following code to train `num_labels`\n", + " logistic regression classifiers with regularization parameter `lambda_`. \n", + " \n", + " Hint\n", + " ----\n", + " You can use y == c to obtain a vector of 1's and 0's that tell you\n", + " whether the ground truth is true/false for this class.\n", + " \n", + " Note\n", + " ----\n", + " For this assignment, we recommend using `scipy.optimize.minimize(method='CG')`\n", + " to optimize the cost function. It is okay to use a for-loop \n", + " (`for c in range(num_labels):`) to loop over the different classes.\n", + " \n", + " Example Code\n", + " ------------\n", + " \n", + " # Set Initial theta\n", + " initial_theta = np.zeros(n + 1)\n", + " \n", + " # Set options for minimize\n", + " options = {'maxiter': 50}\n", + " \n", + " # Run minimize to obtain the optimal theta. This function will \n", + " # return a class object where theta is in `res.x` and cost in `res.fun`\n", + " res = optimize.minimize(lrCostFunction, \n", + " initial_theta, \n", + " (X, (y == c), lambda_), \n", + " jac=True, \n", + " method='TNC',\n", + " options=options) \n", + " \"\"\"\n", + " # Some useful variables\n", + " m, n = X.shape\n", + " \n", + " # You need to return the following variables correctly \n", + " all_theta = np.zeros((num_labels, n + 1))\n", + "\n", + " # Add ones to the X data matrix\n", + " X = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " Options = {'maxiter': 50}\n", + " for c in range(num_labels):\n", + " initial_theta = np.zeros((n+1,1))\n", + " res = opt.minimize(lrCostFunction, \n", + " initial_theta, \n", + " (X, (y == c),lambda_), \n", + " jac=True, \n", + " method='CG',\n", + " options=Options) \n", + " all_theta[c,:] = res[\"x\"]\n", + " \n", + "\n", + "\n", + " # ============================================================\n", + " return all_theta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you have completed the code for `oneVsAll`, the following cell will use your implementation to train a multi-class classifier. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "lambda_ = 0.1\n", + "all_theta = oneVsAll(X, y, num_labels, lambda_)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise multi-class-classification-and-neural-networks\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): Y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Regularized Logistic Regression | 30 / 30 | Nice work!\n", + " One-vs-All Classifier Training | 20 / 20 | Nice work!\n", + " One-vs-All Classifier Prediction | 0 / 20 | \n", + " Neural Network Prediction Function | 0 / 30 | \n", + " --------------------------------\n", + " | 50 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[2] = oneVsAll\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 1.4.1 One-vs-all Prediction\n", + "\n", + "After training your one-vs-all classifier, you can now use it to predict the digit contained in a given image. For each input, you should compute the “probability” that it belongs to each class using the trained logistic regression classifiers. Your one-vs-all prediction function will pick the class for which the corresponding logistic regression classifier outputs the highest probability and return the class label (0, 1, ..., K-1) as the prediction for the input example. You should now complete the code in the function `predictOneVsAll` to use the one-vs-all classifier for making predictions. \n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def predictOneVsAll(all_theta, X):\n", + " \"\"\"\n", + " Return a vector of predictions for each example in the matrix X. \n", + " Note that X contains the examples in rows. all_theta is a matrix where\n", + " the i-th row is a trained logistic regression theta vector for the \n", + " i-th class. You should set p to a vector of values from 0..K-1 \n", + " (e.g., p = [0, 2, 0, 1] predicts classes 0, 2, 0, 1 for 4 examples) .\n", + " \n", + " Parameters\n", + " ----------\n", + " all_theta : array_like\n", + " The trained parameters for logistic regression for each class.\n", + " This is a matrix of shape (K x n+1) where K is number of classes\n", + " and n is number of features without the bias.\n", + " \n", + " X : array_like\n", + " Data points to predict their labels. This is a matrix of shape \n", + " (m x n) where m is number of data points to predict, and n is number \n", + " of features without the bias term. Note we add the bias term for X in \n", + " this function. \n", + " \n", + " Returns\n", + " -------\n", + " p : array_like\n", + " The predictions for each data point in X. This is a vector of shape (m, ).\n", + " \n", + " Instructions\n", + " ------------\n", + " Complete the following code to make predictions using your learned logistic\n", + " regression parameters (one-vs-all). You should set p to a vector of predictions\n", + " (from 0 to num_labels-1).\n", + " \n", + " Hint\n", + " ----\n", + " This code can be done all vectorized using the numpy argmax function.\n", + " In particular, the argmax function returns the index of the max element,\n", + " for more information see '?np.argmax' or search online. If your examples\n", + " are in rows, then, you can use np.argmax(A, axis=1) to obtain the index \n", + " of the max for each row.\n", + " \"\"\"\n", + " m = X.shape[0];\n", + "\n", + " # You need to return the following variables correctly \n", + " p = np.zeros(m)\n", + "\n", + " # Add ones to the X data matrix\n", + " X = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " p = np.argmax(utils.sigmoid( np.dot(X,all_theta.T) ), axis=1) \n", + " # ============================================================\n", + " return p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you are done, call your `predictOneVsAll` function using the learned value of $\\theta$. You should see that the training set accuracy is about 95.1% (i.e., it classifies 95.1% of the examples in the training set correctly)." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Set Accuracy: 95.12%\n" + ] + } + ], + "source": [ + "pred = predictOneVsAll(all_theta, X)\n", + "print('Training Set Accuracy: {:.2f}%'.format(np.mean(pred == y) * 100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise multi-class-classification-and-neural-networks\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): Y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Regularized Logistic Regression | 30 / 30 | Nice work!\n", + " One-vs-All Classifier Training | 20 / 20 | Nice work!\n", + " One-vs-All Classifier Prediction | 20 / 20 | Nice work!\n", + " Neural Network Prediction Function | 0 / 30 | \n", + " --------------------------------\n", + " | 70 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[3] = predictOneVsAll\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Neural Networks\n", + "\n", + "In the previous part of this exercise, you implemented multi-class logistic regression to recognize handwritten digits. However, logistic regression cannot form more complex hypotheses as it is only a linear classifier (You could add more features - such as polynomial features - to logistic regression, but that can be very expensive to train).\n", + "\n", + "In this part of the exercise, you will implement a neural network to recognize handwritten digits using the same training set as before. The neural network will be able to represent complex models that form non-linear hypotheses. For this week, you will be using parameters from a neural network that we have already trained. Your goal is to implement the feedforward propagation algorithm to use our weights for prediction. In next week’s exercise, you will write the backpropagation algorithm for learning the neural network parameters. \n", + "\n", + "We start by first reloading and visualizing the dataset which contains the MNIST handwritten digits (this is the same as we did in the first part of this exercise, we reload it here to ensure the variables have not been modified). " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ui+++KLOZy211FKh22CDDUI+/PDDASSbBud91ur5xrGoRVjPym222QZA0qJardapWaH3jJ4vedxLtugYY4wxpmbxg44xxhhjapayua7Sgs20xL8Gm40dOxZAsrupds895phjACTNXSeeeGLIyy+/PIDqMienUawEPa9FHqWw1V2kAdJ77LEHgGTQn7re0jp1ax0clt0HCt3np06dGjp187D+0W677dbAWdQf1lZh53sgWZtDXRucH10YAHDUUUeFzCC6Sy+9NHQ0NwPAc889ByAZ4Pzyyy+H3LFjxwbOouGoy4duONZTAZL1k9juQ9sOVAtqwme9GwDo3r17yFxLTXZYffXVQ2bgqrpDVllllZBZX+n6668PXTE3fKXQs4JuYp2fBtbfeOONAJJtW9Q1myfFajOpm5w1jfQ7QTutf/fddwCSbmi9v3iG3XDDDaFj2wggfzcQz1JNBkhrR6LteJo6uu56L1UKW3SMMcYYU7P4QccYY4wxNUujXFdqgqLLqk+fPqGjCR8AunbtWkev7iztnvvbb78BSEbVb7311nX+ft4myFKoaVbN5J988gmAfLLH1ITIejBAwYyqmQrqWkrrLv7111+H7oEHHgh5xIgRdf6WymuuuSaAZKZEFmup+5NuOpq9AWD99dcPWdeK2X7alkRdIwMHDgSQzATU36fLTk3P6hrKu2ZL2t9U3dprrw0gef9Vy72mLtSVVlop5GHDhoXM+iOaaZRWE0ld47p+3NdZz7k++0B/Ttewula1JhXdVOeff37o2HYHKLj88t57xbJyuK7aokXrUDEkQrMGtYXEqFGjAAD33Xdf6DSDsFoysIq5cJi1mre7tKGktZD5448/Qi5WvytLbNExxhhjTM1Sb4uOvvloTQTWbhg9enTo+vfvHzKDXYFCEKdWPtZg3bQnXn07o77ag5F1fDoXBsbm/UbVsmXLkLmuamXTt8Bu3bqFzHnp/LRy7r777lvn8/WNjcF2+vMsa+cAhcBMrY3y8ccfh6zWx1NOOQUA0K5du9DddtttIfONS+f05Zdf1vl9DYBU61WlLDq657ROByvP6vXXt1wGoVfj/aXXS88EtZ7x/xS7tkOHDgUAnHHGGaFTixsteVobqVzXolhzV/1bpeBYdM56LfjGrE0htU5NnueOWu7Voq2Vczl+rZysFpkddtgBQLIelVp8DjjgAADp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+JB/++03AMDUqVNDt9FGG4XcrFkzAE1rznlji44xxhhjapZcLTrqd9Wn3GnTpgFIxqX89NNPIU+aNCnxLwCstdZaIbdr1y7kf/3rf6dYTU+/nPf06dNDd+edd4Z82mmnAQC23HLL0KlFp1ooZTHgtQeSFoM8CmVx/bVLsHbUVThu7a6eNle+WenvAIX5VdJKwvFp9+uPPvoo5DvuuCNk3ktHHXVU6FZfffU6n5nHPaPXWc+HtLYhen3TxtrUrVTFLL48F/V8nDlzZsjc17p/9ffnnHNOAMnrm3fxOh3fjz/+CADo169f6JZZZpmQS7UwqUbSxnrhhReGjh3LgcK+1fN/s802y3qINY0tOsYYY4ypWfygY4wxxpiaJRfXFc14X375Zeiee+65kB9++GEAwPvvvx+6Fi1ahNytWzcAwJFHHhm65ZdfPuRqCVIulj746aefAgDOPffc0KlrgWbac845J3RqZs7DJF9sLmnQJffaa6+Fbqmllgp56aWXBpC9uTzNHbr++uuH7uOPP079vVatWgEANt9889Bp4CPH3aFDh9B17Ngx5JVXXhkAsNBCC4UuizVLc6fpnrr88stD3nHHHUNeZ511AAA33XRT6C655JKQ6drIA3XnvvnmmyEzMLV169ahW3LJJUPmmgGF67LAAguErnnz5iFzLUq5vvJA11Rdq6+++mrII0eOBFA4RwDgvffeC/mTTz4BAKy77rqh0+vD83O//fYL3SKLLBJypc4Xnau63vr27QsgGYJw3nnn1fm9puSa1POb32u33HJL6HR//vDDDwCAxRZbLHR65ubtZpxdiiVGpJ1bWd+LtugYY4wxpmbxg44xxhhjapaKua7UdMesj4MPPjh0zz77bMh0GZx//vmh06wqmvTSMl2qgbSsAHWT7LnnngCAcePGhW6HHXYI+ayzzgKQNM3nYVpXc+mUKVNCfvzxxwEk5/T555+HTDPsY489Frr55psv5CFDhgAA1l577dBlbYbmXmnbtm3oNCupTZs2Ia+66qoAgKeffjp0v/76a8g0s+v6qmura9euAIBrr702dPp3s5grs60060rHr9eaY7344otDpzWbunTpAqCye47XUvcZXdgA8OSTTwIAvv7669AtvPDCIae5rtT0v9xyy4VMl8h2220XOv2/eWab6d4YOHBgyGeeeWbIHJ/uOc0A5HVhPS4g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0vbUJZdckvpz1he69tprQ0d3EZB0Y2XpftW9etZZZ4XMa1SsNgl/7/nnnw+dBiOz5lPedawUncsPP/wAILm/WPsJAO666y4ASXee7hvK7733Xug+/PDDkNVNcssttwDIfv66losuuigAoF27dqFTl1A1klYb5qmnngpZ3dw8SzTpQufPe0brQH399dchM0xAz89qRPec1il75JFHABRc4EAyWSCL0BNbdIwxxhhTs/hBxxhjjDE1S71tX2qK1qypc889F0Ay00OzdtT0xk7CrVq1Cl3btm1DZrbL9ttvHzqtQ0OTubpL8ijRruZkNf0yG4wuOCCZ1bHIIosASGYiqWuL7gd1Dd19990hazZMlhlm+tlqBmcGRrE6D0RdK5r1cd111wEolNoHkmtdqfXTv6MtKpjBd8UVV4Ru9913r/NzvSYPPPBAyMzaYcYKUL46LHqddf/vueeeAJKZNpqdklZzivWagKRrgHVMtG0Ca7MABZfzySefHDpm+gDJ+7pSGZBpdX70b2u7EtYxUdfb999/HzLreGyzzTahyyOTU89a3TO33norgMI6AYW2MQCw4oor1vksdR0zg1LdKZpVpvueZ1XWtYP0XqSbV9dUqcaaadwf6rpS15PW5OL8Srl4H3300ZDvv//+kNk6R2uPVTvPPfdcyGyBxOxdIJnBadeVMcYYY0w98IOOMcYYY2qWeruu1MSoUd8sbqTuGDXd77DDDiEzm6FTp06h0wwXFjRT15iWM6fLSEuBp2VlZUFa9gMAnHjiiSGz0Ngqq6wSOjXTsSuyRqJrcTLq1V3FIlFAMhuEmTVZu3vUtLrAAgsASJqz2dEcKLgxWBgKSLrmmNWhmXJprodKon+TBQF1z6kbltec2SFAsvga3UdasK5c5lgdp+7FPn361Pm/pToiq7lYrz8LBuqaDhgwIGS2E9CCbnl39067Llpkjm0fAODpp58GkCxSpiXoWehN55RH2we95/Rcve222wAks+JWWmmlkHluvvXWW6HTDE6GEag7eccddwxZs4HymDfXUsMZ1E3H/VmseGYe8P6hWwlIjo+hHQCw2GKLAUie4wznAArFBU844YTQ6VlD16Lef3kXyVU4bz0z1Q1Ol/tee+1VRwfYdWWMMcYYUy8alYif9kbZo0eP0GmApwbj0hJUrCkg5SFDhoROa1507doVALDffvuFLus3Dz6lam0gfaPSBnScn9Zm0ZoXLMGubR/WW2+9kBnE1qZNm9DpG7UGObPWRCXrXDDg/MEHHwydvj0zIE8bDWoDNwYep7UFyQvdPwzmVIujlsWn9VKbH3JPAoVgV93z5ZpfsbfYtGBGnVNaOxa1fKp1kU0ttbaMNoVcf/31AST3v9ZBSqsJUkn4dk3LBwA89NBDIXOsq666auhOP/30kHluVUvzTiB5r7DFiNZm0jpctNRobSe1qN94440AklaCYg2U84D7Wi0eGuzP80WDrvNoQaLw+mkrB7Wy3nnnnSGz3YaOX9s50BKnTZ/pBQAKDU7zXqdS6J5V6xPXlwkUlcAWHWOMMcbULH7QMcYYY0zNUrYa0nTXaJdjNa2raVRdGkSDIVnTQl0DGjjIwK6sA5jS0ABVrcOh82YLgFNOOSV0DEADSptZGQyoZlANVsujNokGQ/L6q2ly0003DXnQoEEAgI8//jh0GljHEuhZd0SuD2kuFtYQAZLBqqyJc+mll4ZOA495XbJep7Qx6z1XrA7JF198AaCwTkChNgtQMIlriXY1w7P1hbYIqSYzOu8v7eita8EWNJoAwNoyALD//vvX+Z080LVkggZQqO9z2mmnhY4JAkDBJa61V9Zcc82Qeb5U05opnLeeqZrMQDdrWr2gvOBeUXf1xRdfHLLWCWMYg7rDda9xfTTZh7VngELNIw18rkb0e27w4MEhs85YJc8PW3SMMcYYU7P4QccYY4wxNUvZu5fXxwSlpnXNZurXrx+AZCaIZh0xQylr07KOj3UAmFEDJF0HWoeCpfcXX3zx0DXENDdp0qSQNYNNzdRZotdXTbLMxlHXoZrWWX/ktddeC52WQ8/bJUCKdVfv378/gGQ7E12/PfbYAwDQpUuX0Kk7No/58f4r5m5U18wFF1wAINmWhZkcAHDwwQcDSNYxUZl/o5gLNu8S/bwW6i5WN93w4cMBJDMhtcUF231oPZlK1WnRa5fmzgeAd999F0CyTk7Pnj1DvummmwAkXR/VlFVVCl5rzdRR1z1bl2hblWqpqaNrprW1tK0G61N17949dNq6hd97bAUEJDPo2HVeM331+yHvmkJ03euZo+crQzsqiS06xhhjjKlZymbRaQj65KmBnaw5oE0f2Sjz77+XJfoWxKZ5Wi1WgzV1rMsvvzyA0m9Oxd7eXnzxRQDJaq5aWVODZPMITGYQWbGmg3ySv/rqq0N3/fXXh8wGd3m8WRazeBx11FEhf/vttwCSTfVGjhwZMteHlh0g+facxxsV36K0WrfuydGjR4fMOiz6c23wyH1dzApAfRaWG12fUo06S13nYlXc+farOt0LtFS1aNFitv9WY+G11OvMCs4AcPzxx4dMS5NaPNTKy5+rFaQposkOWjOIFXfztlwo3Ktawfmggw4K+fXXXw+ZzTi1Ka6uH63DWln4xx9/DJlB9rTMAsnvijyui96rrP9zyy23hI6NcoFCEHUlz39bdIwxxhhTs/hBxxhjjDE1Sy6uK5ppta2Duq5YYl5Nc2ykCBRMXlmbzrWsupr+idaxWGGFFer8vFiJfppktWmpuklohmRQ89/lLAPv6nNNNQBX148NSLWRoLaAoPshDxOruj5YCh8ouKuAQv0RNSfT3QMUmpJqo7o11lgj5DybWmorBm0rooGNv/32G4BkWXoNnGcwsgabl2o30Vj4mT/99FPoNBif7lqtvVGsTlDaz9U1dddddwFIltjfaKONQua882groOZ+dW2kufG1TpAG+1eTS6chcPytWrUK3a677hoy7zs9f9S1VSn0PuC5orXVGDQNJNuRpLXASXOzaoCxfv+RCRMmpP5+3oHZPB95zgCFthdAPskatugYY4wxpmbxg44xxhhjapaKua7UTPfhhx8CKJjIgUJHaKDgBinW4iHLOh362epaoplb56HZT2omp0lVzYZaB4M1O+69997QqWvspJNOApDMNNOaHuUy/en46A5UE7hGxev8mNmj3au1nPlVV10FINmdNu/aHRy/ZiVpnRx2fAYK7h/NWtG13mmnnQAka6+o6yoPuCd0nxx77LEh77bbbiHTtKyuO+3ezToe6o7MuqYM7zut7aPuTromNtxww9Cx3hZQaHug4/vll19Cx3sKKNQfYSl9IFkHK49Mxq+++gpAsu2N1jY666yzQub4NRNQ17Ja6lQ1FK6fnrVae4XfG1qbRd3MebqONVNK3cG613gvFcsgpF73x5tvvhnyc889ByCZiZc2lqxJy7QCCntR7zmtw5ZLtm3F/6IxxhhjTIXI1KKj1hF90mVjTA02vOOOO0Lu2LEjgHzeTPRv6lviJptsAgC47rrrQqdvWePHjw957NixAJLBcu+8807ItBRoALNWXE4LVivXtdA1GTVqVMgMgmTDx7+jwZxssKdv+VqHhZVlqwnOW600GrjL2j5A+huR1lxZbrnlACSrlR566KF1/lYl4d/UfaIBmqztBBSsN9ttt13oevXqFTLvRQ2AX3vttUPO4o2R41511VVDp4GdHPPQoUNDpxYNrczNN01tBKkWVTbFvOGGG0KnFrtKvXHq/c0EBLUi6/qwESIADBkyBEAyGHnLLbcMOW/rabnQ+0gbeDLIVZsGr7vuupUb2P+R1kB30UUXTf2/V155ZchcK7WI/PrrryGz8rV2C/joo49CfuihhwAkG7XmYcXS9dGmwKussgqAguUbyN/KaIuOMcYYY2oWP+gYY4wxpmbJ1HWl5jSaW4FC07k+ffqEbocddgg5TzNXsbLxNB2ru0NN6xdeeGHINEmrOV3rQLB1gJoeF1pooZA5/3Jeh7QS80899VTIdFmpuZ8BkkCyQSLbJey1116ha9euXZ2/WU31PHgt9Tqr60DdGBrk+vffBwq1XD755JPQac2VPGp6kLTaHn+Xua/pggOSbki697SmTaXQ8W+88cYhs60IA6mBZNl7DTLnXNX1s/LKK4fM0vx5uKuK8ccffwBItpjRsvna9PHuu+8GAHTr1i10eddOyQLds23atAmZLhFtGpyH60qhG0oD6LUmkiY7aH04omvGs0RdW9rUevXVV6/z80p9ZxYLR3nsscdCPvXUUwEkz5S87y9bdIwxxhhTs/hBxxhjjDE1S9ldV+oOYPQ4kOy+vfnmmwNItlBo3rx5yHlHaBM1J9LloSbEvn37pv5fotdC6wjQpJdWOyFr9O9onSK6K7TEvprONQOHbix10eRRLr8+8FprKXWtM6PrypoXa621Vupn0XzbpUuX0OlaVyPqhqXJWTN5NIOFLh3N1KoUxdwuHNPRRx8duv333z/ktJokes/p+UKTf97mdB0z3dnqAmYrHADo3LlzyNzD9enk3hTR+WkLFg2DSPu/ecC/z87cQDKrddiwYSEzA1DvSbqjgMK+1EzQrl27hsyzJo856zmntX3UDdypUycA+a+JYouOMcYYY2oWP+gYY4wxpmaZY1Ymz5kzZ9bbHqqmrXHjxoWsJbxpMu/du7f+rfr+qQbTvHnzOQDgr7/+qvf8NOq8PoXh9DpnbWZu1qzZHAAwY8aMWf6hxs4lL3P5nHPOOQfQsP2pFOt+Pbsm16yyHhqzPxVd04kTJ4bM7vJa5EsL1TFD5MQTT0z9rMbC/Zn1/Vdsf1bq/qvP/uReKjanPNzcxeD+bOz911B4rbI6Uxszv2L7syH3T7H5NXau5TpfFD0L8/5+4P2n2KJjjDHGmJql7BYdRVsgTJ48OWQ28MyrEVsWT7TVxOxadJoq5bLoVCtZ7E+ticN7UYMh9Y2M9XU0cLucTXUbY9FpCjTEotOUyNuikzX/lPnV+v2n2KJjjDHGmJrFDzrGGGOMqVlm6boyxhhjjGnKzLJgYK378GrdBzt9+vSanF+LFi3+Eevn+69xaNyRxiMx3iirIpf/lBgPz69p8k/5flDsujLGGGNMzZJp93Lzz6FUzYi8a3+YupRas2Kd0Kvd3c1aXl9++WXo2PEbKLRW0BYfWv+r2ufHdSmV/eZ7zpj/xRYdY4wxxtQstuiYBqMxENogcdq0aQCScREtWrQIudrfmBtCmnWkWi0itF7ommllclZJVt28884bclpT2rzRBrNsJnzEEUeE7sUXXwx5tdVWAwCMGTMmdNoAtFrmpVYmrUlGmc1ZgWS8EffdggsuGDq9F7nu5ax2nQc6fl1/otesWta0GLrWaRXbdX2bylx0HvXZazwr9Xxq7Jxt0THGGGNMzeIHHWOMMcbULLm6rhpqOq12012tQ9PkF198EbpBgwaF/OSTTwIAll122dBde+21IS+55JIAkqbJPFDTapobrtQ+0/2rpuXff/+9zmeq66dSga86PnVdfP311wCAG2+8MXSffvppyM888wyA5Pqom2eFFVao8/M80Os7fvz4kE877TQAwJtvvhk6uqsAYP/99wcANG/ePHTVcqaoi/ONN94IecSIESF/9tlnAJJr8ssvv4TMte7Xr1/ojjrqqJBbtWoFoHrmXF+47nSRA8CDDz4YMl2rm222WejUtVUt89b784MPPqgj6/7cYIMNQuZZkvc89BzTfcv9+fHHH4du6tSpIac1/dSzZNVVVwUALL/88qGbe+65U//v7GKLjjHGGGNqFj/oGGOMMaZmmWULiHJWZlUzHU2Pau5npofqNVNHzXj8/YZmsjSkMmupTBqFeh2TyjT5FTP9NZYsKl+qm4Am4yOPPDJ0d911V8hrrLEGgKQ7ZL/99gv5ggsuANBwc3JjKiPrNVdz8QsvvBDyAQccACA557Tx6V5QcyrnN2rUqNCdcMIJIe+www51PkM/vzGVkYvVxlHX4g033AAguT5aU2bvvfcGAGy66aahY0dzoHBdGmo6b0xlZN0zahrfa6+9Qn7vvfcAAK1btw7dY489FjLnotennG6AxlTW1XPgsssuC/m+++4LmXWAVl999dDRXQMAjzzySJ3fGTJkSMg9e/YE0PDK0HlXDua63X777aE7+OCDQ+Z3xciRI0O34YYbhlzK9VGu+RVzjVN+6623QsczByi4VmfMmBE6dWOef/75AJKhAfX5/ijX98PLL78c8rBhw0JmhuNXX32VOr61114bANCmTZvQ/frrryF/++23AIDFF188dOqG7dy5c8hp960rIxtjjDHmH0WmwcjF6kDwie+WW24J3fPPPx/yH3/8AQBYZpllQqdvwVtvvTWAguUAyO7tjPDtZ9y4caG79957Q55rrrlCpqVg4sSJoZsyZUrIfCPbbrvtQrfllluGnFZHIQ+KWQf49D58+PDQHX744SHzjePcc88N3eDBg0NmfZN27dqFLqu+Q4TXVN+Srr/++pB1Lbk+7du3D13aW6CuE/csALz22msAgFdffTV0r7/+esi67nqPlAMd07PPPhuyrgXfBPWNV9+S+EZcrE5SHkGQ3H/ffPNN6C655JKQ1TrHYHe1Yqy44oohz26weR7oNT/++ONTZQYbF1sfWrTU+sUA5KaKBtPTOnfyySeHTmsG8bqoRyAPvvvuu5CZAAAUrG8XX3xx6DbZZJOQDzroIADJ9VOL8IknnggAuOOOO0KnHo8s4Dml89AA9wkTJoRM65pa2RZZZJGQWbNKx6z797fffgMAXHTRRaFjggsArLPOOiHPrnW5Or5RjTHGGGMywA86xhhjjKlZyua6omlZzalaZ+W6664LmW4MdWepa2SxxRYDkHRXvfTSSyFfccUVAIArr7wydPvss0/I5arvoXNh4Nhuu+0Wuu+//z7ktJpAxcp606SutTHUjcBgrbzrlOicJk+eHPJVV11V5/9qYNkCCywAAJh//vlDp3PJ2k2VBq+/uhPvv//+kLXdAZtBsp4DkBw/r4vO49Zbbw2ZQXrqetVgWTVJl3uvalC/BmtqHQoGqy688MKhSwvsz2OdlLRg7z59+oROzdlLLLFEyLy/unTpUuf3gep0WaWh58cPP/wQMu/FhRZaKHQa+M51V3fyRhttFHLe6zq7FKtT9dRTTwFIhgOom4r1V1ZZZZXQZd3glPefBuD26NEjZD13fv75ZwDJ83H06NEhMwxC53/MMceEvMsuuwAouMiBZLB1FnPlZ6qL8Jxzzgl54MCBIdNNqnVwSrUA0r3O7/8BAwaETr9rldm9l23RMcYYY0zN4gcdY4wxxtQsjXJdpWUHadn1Qw89NGSNQGdWi5Zt1+7BrCOgmQZqkqfJ7Oyzz67zmQDQtm3bkBvjGlDTIU1nP/30U+iKRY3TJaBmNS2BzeumtQPUdMkMmLxdV4qaWekmbNmyZR0dUDAza52WPND1o2tKXag//vhjyJrBR5dVsetPMytbPQBJNxjrDGltjA4dOoScpRld56zuKh3rRx99BADo2rVr6mdUo2uHWW1jx44NnWY6albfeuutB6B0na1iWYVp51qxz6pUCw89H4499lgASXeAru+OO+4IIOla0Do7WbtxyoWuAzvSA4VroZlYei0Y2qD7v1KuK9aAAZKupQsvvDBkni8nnXRS6OjuBwpj1fnrdw3nqmuedSd67nPdRxpaojVvevfuDSBZ++e8884L+f333wdQyA7UzwcKIS3bbrtt6DQrtCHYomOMMcaYmsUPOsYYY4ypWertulJzmka9s/gfi8UBhcJ+QLJFAM1cNMECSTMeo67VHKdukrPOOgtAskiR/t2rr746ZJo3G2Ji1t/hmFZeeeXQsUsrUCjypPKff/4ZOjXzUa+fr4XsqgU196pr8ZRTTqnzf9PM+RpJr9271fyZJbp/6Ka65557UsekxefSuqvrZ9ENqa6Bt99+O2SaWdlF++9k4e7gWum1Pfroo0N+4oknQmaLBy04pq7ftBYmecP7X91V2rE7rThcsfHzDNP11XuVGTKaFaru8LRO9FlcK/1MuqOAghuf2UcA8Oijj4bM/andvfW6VTtpGYR9+/YNmVlnOifNSlpzzTWzHmIdeM8stdRSoaMLFUhm1e68884Akt9/mgH5988Ekm4gnsVaZLBS7shiHcd1rvwu33fffUOnxUu5vprVqkUAmU2o97TOT79XnHVljDHGmH88s23RSasdcvnll4fMnHe1bDAoDEhaBPgkeOqpp4Zu6aWXDpl1RooFg/JJ77jjjgvdFltsEbIGPjGnvyGBvfoUyWDShx9+OHRa9l/f+Pj2qbVZ9CmUY9Gn+KzrIDSEYk3p0sanFg++CWsdJa1pwVoMlQoQBAp1RjQonFY6INkgkb9XLFh16NChAArNMYHkm8Vhhx0GIFl2v1QD2HKh+1zbHtx8880hsxnrgQceGDptEUHro1pR86hDo9ecSQBqpdAAeS0xnzY+3Qu0BGtg+ocfflhH1vtXr6XuZZ57OpZyofPQteAZu8cee4RO6+jQuqEl+m+66aaQGaRbTRa7tPNDA8y1ASbRYHq1jvCsreQ5yr+lZ8ptt90WsraroEVVPQ9qieVeVY9B//79Q+b6qkUrj7VMO1+BQp01DQbX2mGcq7aA0po7aevX2PPHFh1jjDHG1Cx+0DHGGGNMzTLbriuaqTQA8Nprrw2ZwWIaoKnBRGllx5dbbrmQ1RxVyuRIM6e6wzSYMAuTJU1vDFTVcQDpLQ5KjUOvj7qx8uwOrbUpNBiQtVcA4Lnnnkv8DpCsA0HTo9a+0BYIWZrOdfxap4HB6jpm3TMapMz6Dbp+Wj+J9Z90zbXOBWtJsZUHkAxg1WvFPZBlgDIAbLzxxiE/8MADAJLm8EMOOSTkMWPGAADOOOOM0KlJvlLByrpWdDexszEAtG7dOuRS3bnvvPPOkBl4rskMmgzAtdLP12DQjz/+OGS2WdA1zQK91jxf1J2lrWnmm28+AMDuu+8eOnUt8P9WU50udW2whYruT3X9c100gSCLtioNQddp2WWXDfmaa64Jmd+RdGEBSTcq97K6JjWZRc/SSqPuKtbDAZLJRKxJpskYetbSpapnLjuyA4VrWM7zxRYdY4wxxtQsftAxxhhjTM1S7zo6aa0OgPRIcK1DkUaxUuo0WRfLemHmzKWXXhq6Yp3CywXHNztm0dktx12sJkGl0HHSHaEmbjX3s+O1/p7+vpr++VlqWtc6IIy6L7U/GoKOSVts0OWh+0QzeDQrQrMhiNaM4rppVoH+XWa4aFsIdampGfqyyy4DUL71L7b31I3FDKIbb7wxdFpT54ILLgAAjBs3rs44gYJLTv9W1nVk6BpSd+/XX38dspbbZ/0udZdffPHFIbNOjn6WZovSNaCZPtpuRted7vNyzV/PrmLufF73tLL5ANC9e3cAhXotAPDiiy+GzHsxi3OyPqS1aAEKNVeK1RljiyB1DVVLpqqiY9KsQO5FzTTWTvOct2YSqxuZ52cl55yWCaYtbvSsZTa0ttXRbFe69jUru1OnTiFvvvnmAMr7nWiLjjHGGGNqlkY19dSnNFar1GBdfYtNQ5/Y9e2CT3L6lK9Pkny70mqTmpPPOi1APk/6nFexNyb+XK9PHjURdHwMttxzzz1DpwG2p59+esj77bcfgOQb2b///e+QWUdGn8j17blSjRB//vnnkGnR0aBgfQvWvTZp0iQAxRs58o2qmEWLlix9S9Mg/l69eqV+bmNIq3Olc9L9xXmpThvwsuIq1xlI7ouLLroIALDrrrvW+ftANutL67EGnWpTw6effjpkVlnVM0OvP616avHQwF2eK2rRZLVWABg+fHjIPO8ae85wL2qF7TZt2oS8xBJLhDy7yRr6/3T+vC8bUmG2nKSdP0Ch/oyej7ru3bp1q/Nz3evViK4FLYIaQK7eCa7FEUccETqt05SH9Z/jVyuMNjB96KGHQmbFYz0T9buEQcqvv/566DSJabXVVgOQngDRUGzRMcYYY0zN4gcdY4wxxtQss+26oumINRoAoEePHiGzJoCagLWsvpoeGVj4+eefh26ZZZYJma4DbQQ2evTokFdaaSUAyUaFWg68WJBzpaDpWE176iah6VED1Nq1a1fn51mj7oZ33nkHQNIdeeaZZ4asTfNoclY3ia4VW2NsttlmdXRZoyZODVZk4N9RctEIAAAgAElEQVQ333wTurXWWivk7bbbLmTuL60jpK0/Hn/8cQDJPb3BBhuEvMsuuwAAevbsGTo13danZtTswrXUMV944YUha4M9NqYt9rc5f3UH9+nTJ2S2btFGfuqyLtc9p5/DRsAaNDxo0KCQtdw+XU+6P/W60GXz2GOPhU5lujn172uLDG1GmDbW2UVdNzzzdB8NGzYsZK2dkuamUTcU3V/cp0DSDcJ9W00tIK688sqQ2YBXzyf9XmHTziySGbJC58KaZHpP6f3JM1hbGd16660h61mSJTpmJm688sorodMAfW2kmnauqI4uc3WDdezYMWTWP+M9Xw5s0THGGGNMzeIHHWOMMcbULLPtuqKZU7usqmmNWRnaJVfNberGYTaMRmVrVgFNVp07dw6dZkCwjoeWXa+mcuY0SbNVAJCcK3++/fbbhy4PM7L+TUa4q7ly0UUXDVnN7KxfctZZZ4VOzex0bahpNq17exboZ7dv3z7kRx99FEDSdaXuQq1pkVaLRn+PLRS0hYmWeKfLTMeS9f7kWmp2m85DM4y4bnSxAekZkuqiUTM1s7HobgGApZZaqsFjL0Zaba1+/fqFTl2/AwcODJkZoOq6SsuA1DpKaS0G1F2r5fqLjbG+pHUn1+wuzWRhJhxQOPfSWmQABTeI1rHSMAPONe/aXS+88ELIWgeJe1H/r7os86gj0xDSXD9Aod2BZhWpm/mDDz4AkNxz1AEFl3sl1y+tLQPvMyB5r3H9iq0P78VibVuy+C60RccYY4wxNUu96+joU5oGRbF2hQYV6f9Nq1mib1n6RsVgOX3LTHsjqyYrThpqxUlDa5fkgT45M5hMq3EOHjw45E8//TRkWjS00ae+/bLBm65fFgG4aaRZAYBCgC3//TtpTWdVp5WDuVdZoRVIBj5zX1bSSpdWm2nAgAEh69sTa3bcfPPNodMgWO4BDSDXysK8f1lhWf9+VqTN7+CDDw5Zg3WHDh0KoFCB9e+/R3R91frHz9XaJUq59q9eM1q0tfaS1lbRKtVt27YFkAxK1kajPCvvvffe0On88jg3/z97ZxkuVfW+/9vr+oGA3d2KKAgGgh0YiGJ3d2Jjd3eAqNiB2GJ3d4tgoKJiYQF2EH5f/N/872fuLXuYc87Mnj1ne3/e+FwPnpm19lp7zd5P8p759ttvQ6cB0gxABkr3rVq8NXGgkYKop4WeP08++WTIXEtN4ND9yaam2ghTfx/rhV5nBhBvtNFGodMK8toAl/WBtIK4ftb48eMBJJuyauCxWjVrhS06xhhjjCksftAxxhhjTGGpqgVEmglXzXVqblNZAyabSqO7qRRegxdffDF0WscjLdguD3T9GIyrjR7Z3BFIminp5tK2EJtssknIeQY7KmlNU5vSqiBtXTSYkG7YcsHkeZrWy7nu+vfvHzLdPOqaZLA2kAw8JnSXACWTs7Zaqdecy7mN1Ezer18/AM27v9L2Sh5NEzXYmg1DgaSb8aWXXgJQaoUAJPciXeJdunQJXaME7pb7fVA3KYPkL7nkktCpa6dR5tIctOklXY4MAQCSgf333HMPAKB3796hY+0rIJ9zlftTmx+PHTs2ZLZ1AErNjMuNma67UaNGhe6KK64ImfX33NTTGGOMMaYJ+EHHGGOMMYVlummZnP/555/WEd7eTNq0aTMdAEyZMiWT+TFrTLs/a8djmuQ0A0Fr1lRrmm3btu10ADBp0qRmz0+z2zQrRTtF0/WodTrUJJ21abldu3aZrl9a92d1Q7JFgLa4KJdh0BK4flndf2muRXXNabaHjClkZiO11F2X9f2XN1y/5syP10/vP10fbc1C16l2n9d2JFyrrFwcLZkf7yndJ5qJpC0gTj75ZADAGmusEbq0rMisaMn80tAz8ccffwyZrXU0a1Vh1tJee+0VOj1rq6Wa3wedk4ZjsIUQUKqPxFYsADBu3LiQWQfviCOOCJ3W7ErbK82Bvw+KLTrGGGOMKSx+0DHGGGNMYbHrKgNofmbhJyAZQb/11lsDSHZf1ky0Wrk+WmKaVNRMmZbBklemUdauqzTSCnapa6uW88/adUXKrW9T17qlc7brqvmkFUwtd/2zvhermV9T9hzHn1d2VRbrV+n+SiOr87Vevw/NoZZztevKGGOMMf8pqqqjY9Lhm8gqq6wSujfeeCNktgtQK04j1oZolNowjUDeNYGywOvbemjE86El/Ff3XBHn3ZrmZIuOMcYYYwqLH3SMMcYYU1imGYxsjDHGGNOasUXHGGOMMYVlmsHIRU8vrza9rqUwFU8b1bHaaS3II/26ntQr/TovnH7duvH8Wjec38SJEws5v/bt2/8n1k+xRccYY4wxhcXp5XVCC8799NNPAICHHnoodDvuuGPIaukxjUel4m1pBfWqLahlpqZSwbKipGTXgkYt/vlfpjkF9xpxfSoVfGyUcQK26BhjjDGmwNh0kCFqxZkwYULIZ5xxBgBg8uTJodt1113rN7AMUCsULR4ad9RIT/dppFlf1HKjc2En9ylTpoROuwvPOOOMmY3TlNAijn/88UfI008/PYBkR3m9F9NaDBSpIGSl/fvnn38CSM555plnDlnv5Ua/b1sjXJ+///47dNqdPo1ZZ501ZBaarWdH9zQq3X96Jur9x/uunlYqW3SMMcYYU1j8oGOMMcaYwlI315WaUdMCr5oTmEXTVyOZm9OCsUaOHBm6fv36hbzuuusCAI4++uhp/n2jkrY+n3/+ecgfffQRAGC99dYLXdu2bUNuxPmlzembb74JecCAASE/+OCDAICvvvoqdF27dg35xhtvBAB06dIldI0056YGRus9qzLvv6y6t08LNYEPHz485K222irkFVdcEQCwxRZbhG6eeeYJuUOHDgCATp06pf4756rnSyOtXxpprgHdn9dcc03It9xyC4Dk/J5++umQl1122ZDzdI+Uc6E10rnfVPSee+211wAAZ511Vuhef/31af7N/vvvH/IOO+wAILl/65XAomO6//77Qz7iiCNC7t69OwBg7bXXDl2PHj1C7tixIwBgpplmCp26udKSCKpNLLBFxxhjjDGFxQ86xhhjjCks0+x1VW3lWTUxvvPOOyFPmjQJADBu3LjQvffeeyH//PPPAErZLUDShLr66qsDAA444IDQqem2ErWqjJxWTwUAHn74YQDAoYceGrpNN9005HPPPRdAMiuklubYrCsj03ypmRxqWn3kkUcAAKNHjw7dbLPNFnK1c826MvKrr74KADj88MNDN2LEiJCZ9aDrp1kTa6yxBoBknaSW7M9q16+ci4rXv1zWEe/P999/P3SPP/54yCuvvDIAYOONNw5dc1yT1VTW1Xtu7NixIdMdDJRcjvr/MhNEURcN3V1AaX5bbrll6DSTLsv5tZQXX3wxZJ4//C+QdGPR5XHaaaeFrnfv3iHrtUqbaxbz0/uD58pll10WugUWWCBkum7KnSPc9y11N9aqMrLef88991zI/N1iPTUg6XpKuz91L88xxxwASucUAMw+++whV5p3Syoj8/t/++230GntN/19n3feeQEAY8aMCR3PTKDkulpwwQVDp2EO3bp1AwDMN998odP/txKujGyMMcaY/xQ1j2DSJ0+12Oy5554h//DDDwCSVpolllgiZL79q0VHn+6+/fZbAEmLQr1qP+j8+OYLANdff33I559/PoBkgNbBBx8cMsfaGoPqgNKbitYB0mBGrl+jVwPWtXzhhRdC7tOnD4DkGxWtiACw9dZbA0i+hZx++ukh8+2N+xQAFllkkZDzCGxlgDgAnHnmmQCSwda6Vnzj0vtX/37w4MEAgLvvvjt0G2ywQchZ7mu9dhpATCspUKpZpVYYtfjQeqxWkKuuuirkG264Yap/V+uCBk7msZa0fowaNSp0++23X8i03mgw6CWXXBIyLY6zzDJL6PIILNc9x9o+AHDnnXcCAAYOHBg6rklTPov7r5zFPUvUMvXxxx+HfMghh4RMS45aQXVPcV/rb+Inn3wSMi1u9ZxfmhVfa+do4gUtiR9++GHobr755pBp6VcruZ6/bdq0AQAsv/zyobvyyitDXnjhhUNu6llji44xxhhjCosfdIwxxhhTWDJNvlcTqLqp9tlnHwAlFwAALLbYYiGzHPnEiROn0gGVmypmQZrpTs3latqmaX/bbbcNnY45bawtqSOUFxzf119/HTq9LnmPr6noOiy66KIhc39q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kC+44AIAySfWFVZYIeSlllpqqu+vF/pkrk/O33zzTchPP/00gGQw4N9//x1yu3btAACHH3546HR+jWjd0TGdf/75AIAzzzwzdJ06dQq5Y8eOAJJvZF988UXIvBbbb7996NQS0xK4l9RyeOONN4ZM62KvXr1Cp2+BGphJi1P79u2n+nygtAd++eWX0D366KMhM5h+s802C92MM86Y+lnVoHvx3XffBQBcdNFFoVtggQVCnmOOOULmPfzII4+ETi1yDz74IIBksGMj1uzQs0gtHiNGjJhK15oCV4lahDWA+tRTT53q3xdaaKGQaSn97rvvQvfEE0+EfNtttwEoBbUC9bOI6Jq98cYbIffr1y/kJZZYAkDpdwJInp8ff/wxAOCSSy4J3bHHHhvytttuC6B8sGy90O9XixTX78ADDwzdoYceGjKDdNu2bRs6vW60uD711FOh69y5c41GnQ7n8vPPP4dOf7M12YjomXPaaaeFzP2pezbr3zxbdIwxxhhTWPygY4wxxpjC0mzXlZrjfvzxx5CZJ7/11luHbuDAgSGrGSvNjEhzI1Ays7744ouh03LuHEM9zdH8zr/++it0Oj+tDbTaaqsBKJkoAWDOOecMmWZWuhuAZLBko6DmUjUd003ZvXv30N15550hM9hMA9d0ffi51ZbgV3fXe++9BwDYeOONQ8egd/2u0aNHp45Jx3LGGWckxvnv/zctsDktgFnrYKjLrFZuIN3/yy+/PICkO0prbygcN10AANC1a9eQeV9rMGRrorW4ptLQoFR1TXBPAqV179u3b+iOP/74kHlfquuO7magFMy67777hi6L/alwz3300Ueh22effULu0aNHyIMGDQKQ3L86JrqBBg8eHDp17W244YYAkr85ebteL7300ql0uibqOmSQvAbL61nz2muvAQCWXnrpmo+zHNxz88wzT+jOO++8kA844ICQeX7ob7q6Fknab8K/9bXCFh1jjDHGFBY/6BhjjDGmsFRVR0dNTIwQP/LII0M3++yzp/4da3pcddVVodOsD5q+1E10wgknhHzhhRcCSNYOKJcNVSv4+Zo9pGXXdfw0+au7R02rdMNpHZlGNLerOVFN55yXuknUzUGTa6U6QdXOWdf87bffBgCMGzcudJq1wAwObTWiY/rpp59C5vjV9cbaEEAp6+HPP/9M/XuOq9pMsuag4yPqulA4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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# training data stored in arrays X, y\n", + "data = loadmat(os.path.join('Data', 'ex3data1.mat'))\n", + "X, y = data['X'], data['y'].ravel()\n", + "\n", + "# set the zero digit to 0, rather than its mapped 10 in this dataset\n", + "# This is an artifact due to the fact that this dataset was used in \n", + "# MATLAB where there is no index 0\n", + "y[y == 10] = 0\n", + "\n", + "# get number of examples in dataset\n", + "m = y.size\n", + "\n", + "# randomly permute examples, to be used for visualizing one \n", + "# picture at a time\n", + "indices = np.random.permutation(m)\n", + "\n", + "# Randomly select 100 data points to display\n", + "rand_indices = np.random.choice(m, 100, replace=False)\n", + "sel = X[rand_indices, :]\n", + "\n", + "utils.displayData(sel)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.1 Model representation \n", + "\n", + "Our neural network is shown in the following figure.\n", + "\n", + "![Neural network](Figures/neuralnetwork.png)\n", + "\n", + "It has 3 layers: an input layer, a hidden layer and an output layer. Recall that our inputs are pixel values of digit images. Since the images are of size 20×20, this gives us 400 input layer units (excluding the extra bias unit which always outputs +1). As before, the training data will be loaded into the variables X and y. \n", + "\n", + "You have been provided with a set of network parameters ($\\Theta^{(1)}$, $\\Theta^{(2)}$) already trained by us. These are stored in `ex3weights.mat`. The following cell loads those parameters into `Theta1` and `Theta2`. The parameters have dimensions that are sized for a neural network with 25 units in the second layer and 10 output units (corresponding to the 10 digit classes)." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup the parameters you will use for this exercise\n", + "input_layer_size = 400 # 20x20 Input Images of Digits\n", + "hidden_layer_size = 25 # 25 hidden units\n", + "num_labels = 10 # 10 labels, from 0 to 9\n", + "\n", + "# Load the .mat file, which returns a dictionary \n", + "weights = loadmat(os.path.join('Data', 'ex3weights.mat'))\n", + "\n", + "# get the model weights from the dictionary\n", + "# Theta1 has size 25 x 401\n", + "# Theta2 has size 10 x 26\n", + "Theta1, Theta2 = weights['Theta1'], weights['Theta2']\n", + "\n", + "# swap first and last columns of Theta2, due to legacy from MATLAB indexing, \n", + "# since the weight file ex3weights.mat was saved based on MATLAB indexing\n", + "Theta2 = np.roll(Theta2, 1, axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.2 Feedforward Propagation and Prediction\n", + "\n", + "Now you will implement feedforward propagation for the neural network. You will need to complete the code in the function `predict` to return the neural network’s prediction. You should implement the feedforward computation that computes $h_\\theta(x^{(i)})$ for every example $i$ and returns the associated predictions. Similar to the one-vs-all classification strategy, the prediction from the neural network will be the label that has the largest output $\\left( h_\\theta(x) \\right)_k$.\n", + "\n", + "
\n", + "**Implementation Note:** The matrix $X$ contains the examples in rows. When you complete the code in the function `predict`, you will need to add the column of 1’s to the matrix. The matrices `Theta1` and `Theta2` contain the parameters for each unit in rows. Specifically, the first row of `Theta1` corresponds to the first hidden unit in the second layer. In `numpy`, when you compute $z^{(2)} = \\theta^{(1)}a^{(1)}$, be sure that you index (and if necessary, transpose) $X$ correctly so that you get $a^{(l)}$ as a 1-D vector.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(Theta1, Theta2, X):\n", + " \"\"\"\n", + " Predict the label of an input given a trained neural network.\n", + " \n", + " Parameters\n", + " ----------\n", + " Theta1 : array_like\n", + " Weights for the first layer in the neural network.\n", + " It has shape (2nd hidden layer size x input size)\n", + " \n", + " Theta2: array_like\n", + " Weights for the second layer in the neural network. \n", + " It has shape (output layer size x 2nd hidden layer size)\n", + " \n", + " X : array_like\n", + " The image inputs having shape (number of examples x image dimensions).\n", + " \n", + " Return \n", + " ------\n", + " p : array_like\n", + " Predictions vector containing the predicted label for each example.\n", + " It has a length equal to the number of examples.\n", + " \n", + " Instructions\n", + " ------------\n", + " Complete the following code to make predictions using your learned neural\n", + " network. You should set p to a vector containing labels \n", + " between 0 to (num_labels-1).\n", + " \n", + " Hint\n", + " ----\n", + " This code can be done all vectorized using the numpy argmax function.\n", + " In particular, the argmax function returns the index of the max element,\n", + " for more information see '?np.argmax' or search online. If your examples\n", + " are in rows, then, you can use np.argmax(A, axis=1) to obtain the index\n", + " of the max for each row.\n", + " \n", + " Note\n", + " ----\n", + " Remember, we have supplied the `sigmoid` function in the `utils.py` file. \n", + " You can use this function by calling `utils.sigmoid(z)`, where you can \n", + " replace `z` by the required input variable to sigmoid.\n", + " \"\"\"\n", + " # Make sure the input has two dimensions\n", + " if X.ndim == 1:\n", + " X = X[None] # promote to 2-dimensions\n", + " \n", + " # useful variables\n", + " m = X.shape[0]\n", + " num_labels = Theta2.shape[0]\n", + " X = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + "\n", + "\n", + " # You need to return the following variables correctly \n", + " p = np.zeros(X.shape[0])\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " a2 = utils.sigmoid(np.dot(X,Theta1.T))\n", + " \n", + " #Adding bias unit\n", + " a2 = np.column_stack((np.ones((a2.shape[0],1)), a2))\n", + " \n", + " a3 = utils.sigmoid(np.dot(a2,Theta2.T))\n", + " \n", + " p = np.argmax(a3, axis=1)\n", + "\n", + " # =============================================================\n", + " return p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you are done, call your predict function using the loaded set of parameters for `Theta1` and `Theta2`. You should see that the accuracy is about 97.5%." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Set Accuracy: 97.5%\n" + ] + } + ], + "source": [ + "pred = predict(Theta1, Theta2, X)\n", + "print('Training Set Accuracy: {:.1f}%'.format(np.mean(pred == y) * 100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After that, we will display images from the training set one at a time, while at the same time printing out the predicted label for the displayed image. \n", + "\n", + "Run the following cell to display a single image the the neural network's prediction. You can run the cell multiple time to see predictions for different images." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Neural Network Prediction: 3\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "if indices.size > 0:\n", + " i, indices = indices[0], indices[1:]\n", + " utils.displayData(X[i, :], figsize=(4, 4))\n", + " pred = predict(Theta1, Theta2, X[i, :])\n", + " print('Neural Network Prediction: {}'.format(*pred))\n", + "else:\n", + " print('No more images to display!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise multi-class-classification-and-neural-networks\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): Y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Regularized Logistic Regression | 30 / 30 | Nice work!\n", + " One-vs-All Classifier Training | 20 / 20 | Nice work!\n", + " One-vs-All Classifier Prediction | 20 / 20 | Nice work!\n", + " Neural Network Prediction Function | 30 / 30 | Nice work!\n", + " --------------------------------\n", + " | 100 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[4] = predict\n", + "grader.grade()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..071a78e18 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/exercise3.ipynb b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/exercise3.ipynb index e37be91fd..32049b542 100644 --- a/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/exercise3.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/exercise3.ipynb @@ -33,7 +33,7 @@ "from matplotlib import pyplot\n", "\n", "# Optimization module in scipy\n", - "from scipy import optimize\n", + "from scipy import optimize as opt\n", "\n", "# will be used to load MATLAB mat datafile format\n", "from scipy.io import loadmat\n", @@ -42,7 +42,7 @@ "import utils\n", "\n", "# define the submission/grader object for this exercise\n", - "grader = utils.Grader()\n", + "#grader = utils.Grader()\n", "\n", "# tells matplotlib to embed plots within the notebook\n", "%matplotlib inline" @@ -348,7 +348,14 @@ " grad = np.zeros(theta.shape)\n", " \n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " hyp = utils.sigmoid(X@theta)\n", + " reg = (lambda_/(2*m)) * (theta[1:].T @ theta[1:])\n", + " J = (-1/m) * (y.T @ np.log(hyp) + (1-y.T) @ np.log(1 - hyp)) + reg\n", + " #J=J+reg\n", + " grad = (1/m)*(hyp-y)@X\n", + " temp = theta\n", + " temp[0] = 0\n", + " grad[1:] = grad[1:] + (lambda_/m)*temp[1:]\n", "\n", " \n", " # =============================================================\n", @@ -422,10 +429,10 @@ "outputs": [], "source": [ "# appends the implemented function in part 1 to the grader object\n", - "grader[1] = lrCostFunction\n", + "# grader[1] = lrCostFunction\n", "\n", "# send the added functions to coursera grader for getting a grade on this part\n", - "grader.grade()" + "# grader.grade()" ] }, { @@ -452,6 +459,16 @@ "metadata": {}, "outputs": [], "source": [ + "def GraDes(X,y,theta,alpha,num_iters,Lambda):\n", + " m=len(y)\n", + " J_his=[]\n", + " \n", + " for i in range(num_iters):\n", + " cost,grad = lrCostFunction(theta,X,y,Lambda)\n", + " theta = theta - (alpha*grad)\n", + " J_his.append(J)\n", + " return theta, J_history\n", + "\n", "def oneVsAll(X, y, num_labels, lambda_):\n", " \"\"\"\n", " Trains num_labels logistic regression classifiers and returns\n", @@ -526,7 +543,17 @@ " X = np.concatenate([np.ones((m, 1)), X], axis=1)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - " \n", + " Options = {'maxiter': 50}\n", + " for c in range(num_labels):\n", + " initial_theta = np.zeros((n+1,1))\n", + " res = opt.minimize(lrCostFunction, \n", + " initial_theta, \n", + " (X, (y == c),lambda_), \n", + " jac=True, \n", + " method='CG',\n", + " options=Options) \n", + " all_theta[c,:] = res[\"x\"]\n", + " \n", "\n", "\n", " # ============================================================\n", @@ -563,8 +590,8 @@ "metadata": {}, "outputs": [], "source": [ - "grader[2] = oneVsAll\n", - "grader.grade()" + "# grader[2] = oneVsAll\n", + "# grader.grade()" ] }, { @@ -625,7 +652,6 @@ " of the max for each row.\n", " \"\"\"\n", " m = X.shape[0];\n", - " num_labels = all_theta.shape[0]\n", "\n", " # You need to return the following variables correctly \n", " p = np.zeros(m)\n", @@ -634,9 +660,7 @@ " X = np.concatenate([np.ones((m, 1)), X], axis=1)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", - "\n", - " \n", + " p = np.argmax(utils.sigmoid( np.dot(X,all_theta.T) ), axis=1) \n", " # ============================================================\n", " return p" ] @@ -671,8 +695,8 @@ "metadata": {}, "outputs": [], "source": [ - "grader[3] = predictOneVsAll\n", - "grader.grade()" + "# grader[3] = predictOneVsAll\n", + "# grader.grade()" ] }, { @@ -828,13 +852,22 @@ " # useful variables\n", " m = X.shape[0]\n", " num_labels = Theta2.shape[0]\n", + " X = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + "\n", "\n", " # You need to return the following variables correctly \n", " p = np.zeros(X.shape[0])\n", "\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - "\n", + " a2 = utils.sigmoid(np.dot(X,Theta1.T))\n", + " \n", + " #Adding bias unit\n", + " a2 = np.column_stack((np.ones((a2.shape[0],1)), a2))\n", + " \n", + " a3 = utils.sigmoid(np.dot(a2,Theta2.T))\n", + " \n", + " p = np.argmax(a3, axis=1)\n", "\n", " # =============================================================\n", " return p" @@ -897,6 +930,13 @@ "grader[4] = predict\n", "grader.grade()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -915,7 +955,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/token.pkl b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/token.pkl new file mode 100644 index 000000000..a2dff91ab Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/token.pkl differ diff --git a/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/__pycache__/submission.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/__pycache__/submission.cpython-37.pyc new file mode 100644 index 000000000..7e44f90c4 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/__pycache__/submission.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/.ipynb_checkpoints/exercise4-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/.ipynb_checkpoints/exercise4-checkpoint.ipynb new file mode 100644 index 000000000..cd4a2a292 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/.ipynb_checkpoints/exercise4-checkpoint.ipynb @@ -0,0 +1,1250 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 4: Neural Networks Learning\n", + "\n", + "## Introduction\n", + "\n", + "In this exercise, you will implement the backpropagation algorithm for neural networks and apply it to the task of hand-written digit recognition. Before starting on the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.\n", + "\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, [`matplotlib`](https://matplotlib.org/) for plotting, and [`scipy`](https://docs.scipy.org/doc/scipy/reference/) for scientific and numerical computation functions and tools. You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "import pandas as pd\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize as opt\n", + "\n", + "# will be used to load MATLAB mat datafile format\n", + "from scipy.io import loadmat\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submission function | Points \n", + "| :- |:- | :- | :-: \n", + "| 1 | [Feedforward and Cost Function](#section1) | [`nnCostFunction`](#nnCostFunction) | 30 \n", + "| 2 | [Regularized Cost Function](#section2) | [`nnCostFunction`](#nnCostFunction) | 15 \n", + "| 3 | [Sigmoid Gradient](#section3) | [`sigmoidGradient`](#sigmoidGradient) | 5 \n", + "| 4 | [Neural Net Gradient Function (Backpropagation)](#section4) | [`nnCostFunction`](#nnCostFunction) | 40 \n", + "| 5 | [Regularized Gradient](#section5) | [`nnCostFunction`](#nnCostFunction) |10 \n", + "| | Total Points | | 100 \n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Neural Networks\n", + "\n", + "In the previous exercise, you implemented feedforward propagation for neural networks and used it to predict handwritten digits with the weights we provided. In this exercise, you will implement the backpropagation algorithm to learn the parameters for the neural network.\n", + "\n", + "We start the exercise by first loading the dataset. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# training data stored in arrays X, y\n", + "data = loadmat(os.path.join('Data', 'ex4data1.mat'))\n", + "X, y = data['X'], data['y'].ravel()\n", + "\n", + "# set the zero digit to 0, rather than its mapped 10 in this dataset\n", + "# This is an artifact due to the fact that this dataset was used in \n", + "# MATLAB where there is no index 0\n", + "y[y == 10] = 0\n", + "\n", + "# Number of training examples\n", + "m = y.size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Visualizing the data\n", + "\n", + "You will begin by visualizing a subset of the training set, using the function `displayData`, which is the same function we used in Exercise 3. It is provided in the `utils.py` file for this assignment as well. The dataset is also the same one you used in the previous exercise.\n", + "\n", + "There are 5000 training examples in `ex4data1.mat`, where each training example is a 20 pixel by 20 pixel grayscale image of the digit. Each pixel is represented by a floating point number indicating the grayscale intensity at that location. The 20 by 20 grid of pixels is “unrolled” into a 400-dimensional vector. Each\n", + "of these training examples becomes a single row in our data matrix $X$. This gives us a 5000 by 400 matrix $X$ where every row is a training example for a handwritten digit image.\n", + "\n", + "$$ X = \\begin{bmatrix} - \\left(x^{(1)} \\right)^T - \\\\\n", + "- \\left(x^{(2)} \\right)^T - \\\\\n", + "\\vdots \\\\\n", + "- \\left(x^{(m)} \\right)^T - \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "The second part of the training set is a 5000-dimensional vector `y` that contains labels for the training set. \n", + "The following cell randomly selects 100 images from the dataset and plots them." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MWPGAADefffd0OleXHrppRt8vjkl3nCu6hqfNGlSyHSJ//TTT1Ubky06xhhjjKlb/KBjjDHGmLqlJl1XNE3++OOPobv++utDZlaIZvJkQZqbSk1wH3zwQchDhgwJmfUDVlllldB179495Pnmm6/B99eKO6Cp6Pjbt28PIOnOUzPtBhtsUL2BTYWafW+66aaQ6Q4FCuujmQBHHXVUyHRpvfHGG6EbMWJEyEOHDgWQNEEzkytrirlzbrnllpD79+8PIOnOuvfee0Omy4ouHgA499xzKz/YCqL774knngAA/PLLL6H79ddfQ2YGSL9+/ULHa8rU31XL6PmlboAtt9wSAHDCCSeErlevXiHXSlaP7lXWVgGAgw46CADQoUOH0F199dUhM5tOa69o1m2toOvz8ccfh7zbbrsBKGQfAcCaa64Z8r777gsAWGSRRUK30UYbhcxs0Vp1YXHezz77bOjojgSAFi1aAACWX3756o2par9kjDHGGFNlasaio0/3fPu95pprQqdPhHvuuSeA6gbY8e1Q3+z55ggUAlSBwtuF1g6Yc845Q+7RowcA4Mgjjwyd1gSqlTeuxqBvL/r2TJZccslqDqcous/45gQAK6+8cshrr702AKBNmzapnyO33XZbyEcccUTIv/32W2UGW0GefPLJkEeNGgUA6NOnT+h22mmnkPnGdfLJJ4dO9yoDe/O2fKRdMwBg/PjxAICdd945dBoYz3VfY401Uv+flq5afWMmOv933nkn5J9//hlA4ToJ1OZcdPxqkXr++ecBALvvvnvq50466SQAyXpIF198cci1Mle9juu94LPPPgOQtCJ+9NFHIet5R/Rc5T1I64DlPWe1Dv/+++8AgDvvvDN0uta06C+11FJVGp0tOsYYY4ypY/ygY4wxxpi6pWZcV2qGo+lSA9Dmn3/+kI855hgABRM7UDl3j47jm2++CZmuiVdeeSV0J554YshqJqcZ79tvvw3dgAEDQj7rrLMAAJ9++mnoLrvsspDpxsrbNVCKYi06Hn74YQCFVh0AMPfcc1dvYCmkmXY12FFdazzuxczBdNNpnR11o+perTY6Zg3QPProo0Oea665ACSb6ula8hzQwHt1Ry688MIVHHFlGDduXMiPP/44AOChhx4K3TLLLBMy53fttdeGjrWdAGCxxRYDkL87oBQ6Pq2DtOKKKwJIustrfS7q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wJSuDXUharBtqXLqWgeCDer69esXOg0W5Jq0a9cudFkfC553ajo/88wzQ77++utD5jEo1pSWwYC6vkqt1AnS9dU6Rxy/rsltt90WMk3fWttq//33D5mtI7SpcN5zVThvdWfo/uS61dKYS6Hj5/VRXRRak4v1W3TPpgXw5o26k7p06RIymwLTxQokmzrvsssuAJLuWA3srdZc01zvGqKhrkW9/3FdWA+pGOpa12vRuHHjACSfCTR0QJ8bprcNhi06xhhjjKlb/KBjjDHGmLqlYq6rtDx7de3ccMMNIdMMed5554VOI+hruftzhw4dQkcTI5A08zPbY6uttgqddm+d+juBZCdl/oaaO3fccceQtfUC3SRZUCyD56mnngKQrHOw6KKLhpx3thVRdxvdgNpxfZlllgl53nnnbfB5XR/WfgKAF198EUDBxAqkr281a7OkdSRXWV1adBOw3sXU8uDBgwEk9/oxxxwTsrqn80SvE+rGWX311QEAP/30U+huv/32kFmzZd999w2dZrDQpXDTTTeFTs/FWtnfek527do1ZLpMa2WcjSWtBU4t3hNKodcPXQuefzo/PVe5ruwCDiTnv8ACCzT4fBbo+HnOa1smDaHQFhZ0WalrK82NmnZMgMK1aM011wyd1pRryr6ujSuWMcYYY0wGlGXRSQv81HoBp556asj6RsmKjtp0r9bfPmipatu2bej0LVHh07ken1I1OdLqu3Ts2DF02kBNn/Srddy0siXrj2g9ILUI1AoaIMdgU63XtNpqq4WsFkVaqnTO2lSQ9ZHUytajR4+Qad2pZjB2mkVH58pGgUDB0sF6HkCy5gytX1dccUXotOYVLSKHHXZY6LQibJZBsMUC5NXixqakRx55ZOjU+sH6V1tuuWXodP9edtllAJLBzGrd0bfPPCqTM3HhmmuuCd2xxx4bMhtL6jW3uaPXOe6B5lTNWsfKhJaxY8eGThN32Oxa1+9f//pXyJdeeimAZLBz1vcBjv/www8PndY+0vOA94e77747dFpTjntZrVRqXaeXQpsmF+sMML3YomOMMcaYusUPOsYYY4ypWyrmumJg5umnnx46rVNxyimnhMyaK2oCrnXXVRrFgjJpxmvqnPh5dX3MN998qX9brePG2iRAIXC6Ft1VxVwJW2yxBYBk2XwG3QLJFgB0E6o5dZNNNgm5W7duAIA999wzdFoCneuWRx0T3TNq+mVtGKDg8pl77rlDp+cyA3PXWmut0GkdJwYZqmuoWugxVXeZlpsfMWIEgGQdD23XsdlmmwFImv51fuussw4A4Jtvvgld3m4SNd2PHj0aQHL91I3QHAN3S6GuZd5X1F25+OKLV3tITYbXCnWtq5ucaIC51sFi4kfe98xirUY4bnW3lSItcLuSLaBs0THGGGNM3eIHHWOMMcbULTNNyyT0zz//TNNelJYBobnz6tqZc845Q6bLKi/T28wzzzwTAEyePLn51EhvBC1atJgJAKZMmVKx+ek+0QwWwkyPajDLLLM0en7ci7onNXtNM3hYE0JrI6mZOa0EeyX3Muc3adKkstavWDsMUsw0nPa3v//+e8icf1MzrVq2bFnx/akuu7/++gtAch7qZqXJvdiY07ImG+MOasr+LIW6rt5//30AwHPPPRc6zYbJ2s3G+U2YMCHT66fOQzOQzjjjDADJe41myJVL69atK35/0OsOzyXtBM41BQo1Y84///zQqRu6XNck7w/1fv9TbNExxhhjTN3iBx1jjDHG1C1lua4SX/R/ZsZimUilCuZVE7uuyiNtjavphizHNVDMrJ/m5im2T6nPah9XynVVLnpMdM3LzSrMwnXVVDddFmThulLSCublcf5l7boqRqnzs1yycF2l0ZhWKpVcX7uujDHGGGPqiIo19Uyr/WLqk7zrN5RDKSuNKaDHpNbP62pabPIma4tirVMv827O19Hmhi06xhhjjKlb/KBjjDHGmLplmsHIxhhjjDHNGVt0jDHGGFO3TDMYOe/01qxgemu9p9dlld6aN1mn7+YN51fv+9PzKw+tlqwy0WDXSjb6nFHW7++//67L+c0666wzxPoptugYY4wxpm6pWHp5KRpT0GtaOmOqRS0VoTPlkVbwsLmuGa03o0ePDt0TTzwRMi056667bui6du0aMo9Frc4/rSCi4rTs5kGx62ce558tOsYYY4ypWypu0dEnN/Ubq55dZ9VvrN2F2Slan/j8FG+qBd94tbv5vffeG/KDDz4IADj33HND16lTp5Br9U15RkPX4bfffguZ3cv1mpN1x+9yUYvUG2+8AQDYZ599QvfZZ581+NsFFlggdGeffXbI++67L4D0t+y80PlNnDgRAPDvf/87dLPMMkvIc845J4D8x9wYSlmHFd43tUhnc7z/TZ48OeTx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jx4NAPj0009D16VLlwqPOB295he7pnH/qE5di9Trnk2T8zi3ioUjNOZzvC6mzRnI5l5ni44xxhhj6pZczQT6lKpvH3x71mDP0047rcHnauVtcWo4vq+++ip0+sYxePBgAMCUKVNCp/LAgQMBJC1ayy+/fMjVmnexp3e+Kekb12OPPRbypEmTACSDVf/++++Q+/fvDwBo165d6NQ6UK2aLPoW0aZNm5D5RtujR4/QrbvuuiF//vnnAIBnnnkmdE899VTIa6yxBoDmVVsm7Y3r9NNPD50GdvItv1evXqErFsxaK/zxxx8h67nWFOacc86Qq2Vp1fV59913ASQD4J944omQOb+FF144dGuvvXbIffr0AQA8/fTToTv22GNDfuedd0LmuVrNOjRLL700AODcc88NnV4fOK/vv/8+dGodmG+++QAAXbt2DV21LG9ff/11yGoRnThxYsjPPfccgOQ18c033wx5+PDhAIDNN988dIsvvnjIm222GYCCZRzIfn34/XpN0/Gn/T7vA0DSoj906FAASYu4fi8Dz4855phyhx3YomOMMcaYusUPOsYYY4ypW3JxXdHMpcF0aianOZhBx0AyyKsWXQI6vjFjxgAAdtpppwY6oGDmX3PNNUPHsuUA8NdffwEAFllkkdDlEfSoc1LXzJFHHgkgGYC8xRZbhEw321ZbbRW68ePHh3zqqacCAP78888Kj7hx6DFdcsklQ77hhhsAJNdE3azffvstgMI6Ac2zxLzOSd05dGncfvvtoaO7CgBuvfVWAMA666wTOnUd5EGam1Vdv9dff33INLk3plGkXqsOPvjgkI8++mgA2bjrdHzfffddyPvuuy8A4KOPPgrd7rvvHjJdryuvvHLo1PXBz91///2hUxccXetA4RqmbpQs0HORwex77bVX6PT4cv3UdafHh8HyOues14fupj333DN0WntLf58uHdXpd7EmkK6Dnl933nknAOCll14KHd11QOXuFXpO8fqt4Qp04euYgcL9+ccffwzdxx9/HPI222wDILmnOCcAuPnmmwEAhxxySOi0nUdT5meLjjHGGGPqFj/oGGOMMaZuqZrrKs20//DDD4esrpELLrgAANCxY8fQ1WImh85J61SceeaZAJLuKpYlBwquG9azAJLR+q1atQKQrEdSLdeVuqs0E+6www4LmWbMW265JXRqhmzZsiWA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47hnnXXW0FWrXHtT4THruWVhOSA5ln///ReA3+yLSlo7gbRO4NUquGeahl6TOmdpljjdXzhvrXXOONYsi2Pa/aU1rVUev46v2m1ZbNExxhhjTGHxg44xxhhjCkuuris1XamZ8rvvvgMAvPPOO6HTTrzzzTcfgPoMdgVKY3n00UdDd8wxx4S84IILAgC23Xbb0G299dYhL7nkkgDqa3xpZtRx48aFvPvuu4f8448/AgD69esXOh0re/FUe0x6zBMnTgQAnHfeeaFbZpllQl5++eVDXm655QAkXVvVNq3WkjTXY1rgfGs1jZOsZADuL08//XTofvvtt5BXWWUVAECXLl1CV9S1UI/QdfPLL7+EbtSoUSFz/tSdtfTSS4fcqVMnAMk50zWbtxudZN3/fv75ZwClffS/f/v1118DAOadd97Q6V5W72uVe7HO7/zzz1/V37RFxxhjjDGFxQ86xhhjjCksNXNdpZnp1Bz++uuvh3z66acDAF566aXQqevjwgsvBFB9c1dzUNPj77//DgAYNGhQ6GhuBYAffvgBAPDiiy+G7uWXXw75+uuvBwDMNttsocszUwkAJk+eHPL5558PALjnnntC97///S/k7t27AwDOPffc0M0zzzwhd+3aFUApu6la6Jw8//zzAJJzombdueaaK+Ttt98eAHDGGWeETo+/3rPi0kjL6nvrrbdC9/jjj4dMl/EWW2wRuv3337/Bd9WrCystw+6xxx4LecCAAQCATz75JHS6FmaYYQYAyTGfcMIJIc8yyywhl3MO9PpqLBMsTa7X899UslyLI0eOBACceuqpodN7AfdXXdMMZwCABx98EEByz9L9l/sTALRr1w5Abc9lmmt46NChIV9xxRUAgAkTJoRu7rnnDpluqrFjx4auR48eIR900EFT/a1KkeXa5rzo/DBcAQCeeOIJAMDNN98cujvvvLPix6fYomOMMcaYwlJVi44+pevT3+effw4AuOCCC0L37rvvhvzHH38ASL45DR8+POSNNtoIAHDyySeHbp999gm52paCxuDb2UorrRS6jz76KGQGu/LNEQCeeuqpkPmm3a1bt6oeZ2PoE7keHy1OZ599dug0WJyBvfpGpoFnWfUhKo2uuUUWWQQA0KdPn9B98803IevbPd80vvzyy9ANGTIkZFp/6t2yk1Wn4tJLLwUA3HjjjaHT87LnnnsCAK699trQrbzyyiGvs846AOpr/GoR+eeffwAkLXJcswDQsWNHAMBpp50WugUWWCDk8ePHAwDuv//+0L3//vsh33HHHSGzFlZTgz51TnicAPDpp58CAGacccbQ6f43++yzh9y+fXsA2UGnXPf1GIiqZFmMBw8eDCBphVt77bVDZuKGnh8G8ALAKaecAgD47LPPQqeJEx9//HHIiy22GIDarmVaN2677bbQHXLIISHTkrjLLruETtfnwgsvDAD48MMPQ8drFgC23HLLkBdddFEAlbPo6D2B1wkA7LDDDiEPHDgQQOk+/V/o0dB7/t9//x0yr6lKWqFs0THGGGNMYfGDjjHGGGMKS81cV2r63XnnnQEAc8wxR+huvfXWkJ988kkAQP/+/UO30EILhTxmzBgAyQCzvFEzMU2qRxxxROi22WabkFmnQ03jGoz87bffAkia7rLcgLVCawLRtKruQj2+9957D0BpngDg8MMPD7lWZmKdE7oLL7nkktCpi/OLL74I+ZxzzgGQHLMGztHMrK7HenQTqDvnpptuCpnrjkGbQLIOCedSr68HHnggZLqu8l6TakZXNxD3DXXNbbzxxiFzDeiekpYssdlmm4WOAepAKbAdSF7XTUHnRINJ11prrcRvA8kAeU28WGGFFQAk3Tlc30CpThddHEAyGJRrNe9gZj3nr732Wsh0DfI+AZSuSQBYfPHFASTPJfccALj99tsBJGsj6V6siQW1OgdpdeIuu+yy0GkYAPcXnTOFY7388stDR3cmkBx3Nfnggw9C1rVM13DW/Yvz1rZt29ClNYWuJLboGGOMMaaw+EHHGGOMMYWlZq6rZ555JmSWttZMFi3BP+eccwIo1VsBSpkiADBlyhQAyUjzPFwHam5Lq1OitQ80m+K6664DkDSt6+d//fVXAPmblhXttJ5m+tY6OmyzoHVY1PSeR7YOj1nNwZq1ollFzPpQzjrrrJA5lj322CN0ebtx0o5DM920phGzHbVsvGa98Dt0zjWrrpq1ORpDrxO95o866qiQWZOjV69eoWMmCAB06NABQGkf+S80ravrZ9lllw35lltuCbm5rit1ly611FIh052h1wbrxQDAww8/HDJdF6wnBgCTJk0KmeeFLh4A2HfffUPecccdASRdr3mjoQ0ci+7vbIuj/3/33XeHTjM8eX+54YYbQqd12GrVNTsru5TZ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rbXWApC/a6456JyWey3pWDnX1Ri/HrNmLV5xxRUAgO7du4dulVVWqckxVRKdh19++SXks846CwBw6623hk6vta+//hoAMN9884VuhhlmSP3beqal109aVpOGUbz88ssh77zzzg3+thpoOMnYsWMBJPeM4cOHh7zgggsCAJ588snQvf322yF//vnnAIDddtstdIsvvnjITd2fFVt0jDHGGFNYambR+eqrr0J+6KGHACSfMmeZZZaQ//zzTwDAMsssEzpacYDqvqlkPSUfccQRAIDnnnsudLS8AMD6668f8vLLLw8gGcCpgXXdunUDAMw555ypv1srqv1GrlY8nUtasurJSqXHMmrUKADAZ599Frp55pknZFoadX71jfvRRx8FABx11FGhu/baa0PeaaedQtbg9kqjb7a77757yHyjevbZZ1P/dty4cQCARx55JHTff/99yLTE6jVZT8GwnMssi/Lvv//e4P8bQ68Prek177zzAqhcgoS+raqV4+STTw75+uuvBwDcdtttodO3eO6lrcmi8+GHH4bMffWjjz4K3ZVXXhnyHXfcAQDYY489QnfZZZeFTOtOvY6fe31a0DDQ+HFzjYwYMSJ0Bx98cMhqieW52HHHHcs44nT0+LlnAMCBBx4IoLSPAsC5554bMq8Z3lMB4J9//gmZFiEdH+ccAGaeeeaQmzrHtugYY4wxprD4QccYY4wxhaVmBWnUtP/XX38BAHbZZZfQqZtg5MiRAIAOHTqErtpuFn6/Hud+++0XMuv8LLHEEqG7/PLLQ1522WVDpulYawOk1QSopWmV49MAWa1dQRNnS91J+jmaId99993Q6Xmjyydv07K6GzSYfKuttgIAfPnll6GbbbbZQl5ppZUAlFyU//38K6+8AgDYYostQrfOOuuEXKtgST2/6nrbddddAQA9e/YMnbqWzz//fADJ+dtmm21Cbt++fYPvzxtdf3QHPvjgg6G79NJLQ+ZcZdUhSRuX6tRlOXToUADJ+W0J/H11Yegx010FlPaVDTfcsIFOv6veg8X1mIYNGxYyrzUGXQMldwcArLvuugCA+++/P3Snn356yEzsyHvMaW0tgFJiC0M4gKRrKa01ju5V7733HoCkO7p3794hH3LIISGzZlY1zoXeS84777wGx6d18rbeeuuQef9fYYUVQrfkkkuGfMYZZwAoHXslsEXHGGOM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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Randomly select 100 data points to display\n", + "rand_indices = np.random.choice(m, 100, replace=False)\n", + "sel = X[rand_indices, :]\n", + "\n", + "utils.displayData(sel)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Model representation\n", + "\n", + "Our neural network is shown in the following figure.\n", + "\n", + "![](Figures/neural_network.png)\n", + "\n", + "It has 3 layers - an input layer, a hidden layer and an output layer. Recall that our inputs are pixel values\n", + "of digit images. Since the images are of size $20 \\times 20$, this gives us 400 input layer units (not counting the extra bias unit which always outputs +1). The training data was loaded into the variables `X` and `y` above.\n", + "\n", + "You have been provided with a set of network parameters ($\\Theta^{(1)}, \\Theta^{(2)}$) already trained by us. These are stored in `ex4weights.mat` and will be loaded in the next cell of this notebook into `Theta1` and `Theta2`. The parameters have dimensions that are sized for a neural network with 25 units in the second layer and 10 output units (corresponding to the 10 digit classes)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup the parameters you will use for this exercise\n", + "input_layer_size = 400 # 20x20 Input Images of Digits\n", + "hidden_layer_size = 25 # 25 hidden units\n", + "num_labels = 10 # 10 labels, from 0 to 9\n", + "\n", + "# Load the weights into variables Theta1 and Theta2\n", + "weights = loadmat(os.path.join('Data', 'ex4weights.mat'))\n", + "\n", + "# Theta1 has size 25 x 401\n", + "# Theta2 has size 10 x 26\n", + "Theta1, Theta2 = weights['Theta1'], weights['Theta2']\n", + "\n", + "# swap first and last columns of Theta2, due to legacy from MATLAB indexing, \n", + "# since the weight file ex3weights.mat was saved based on MATLAB indexing\n", + "Theta2 = np.roll(Theta2, 1, axis=0)\n", + "\n", + "# Unroll parameters \n", + "nn_params = np.concatenate([Theta1.ravel(), Theta2.ravel()])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.3 Feedforward and cost function\n", + "\n", + "Now you will implement the cost function and gradient for the neural network. First, complete the code for the function `nnCostFunction` in the next cell to return the cost.\n", + "\n", + "Recall that the cost function for the neural network (without regularization) is:\n", + "\n", + "$$ J(\\theta) = \\frac{1}{m} \\sum_{i=1}^{m}\\sum_{k=1}^{K} \\left[ - y_k^{(i)} \\log \\left( \\left( h_\\theta \\left( x^{(i)} \\right) \\right)_k \\right) - \\left( 1 - y_k^{(i)} \\right) \\log \\left( 1 - \\left( h_\\theta \\left( x^{(i)} \\right) \\right)_k \\right) \\right]$$\n", + "\n", + "where $h_\\theta \\left( x^{(i)} \\right)$ is computed as shown in the neural network figure above, and K = 10 is the total number of possible labels. Note that $h_\\theta(x^{(i)})_k = a_k^{(3)}$ is the activation (output\n", + "value) of the $k^{th}$ output unit. Also, recall that whereas the original labels (in the variable y) were 0, 1, ..., 9, for the purpose of training a neural network, we need to encode the labels as vectors containing only values 0 or 1, so that\n", + "\n", + "$$ y = \n", + "\\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\\\\\vdots \\\\ 0 \\end{bmatrix}, \\quad\n", + "\\begin{bmatrix} 0 \\\\ 1 \\\\ 0 \\\\ \\vdots \\\\ 0 \\end{bmatrix}, \\quad \\cdots \\quad \\text{or} \\qquad\n", + "\\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ \\vdots \\\\ 1 \\end{bmatrix}.\n", + "$$\n", + "\n", + "For example, if $x^{(i)}$ is an image of the digit 5, then the corresponding $y^{(i)}$ (that you should use with the cost function) should be a 10-dimensional vector with $y_5 = 1$, and the other elements equal to 0.\n", + "\n", + "You should implement the feedforward computation that computes $h_\\theta(x^{(i)})$ for every example $i$ and sum the cost over all examples. **Your code should also work for a dataset of any size, with any number of labels** (you can assume that there are always at least $K \\ge 3$ labels).\n", + "\n", + "
\n", + "**Implementation Note:** The matrix $X$ contains the examples in rows (i.e., X[i,:] is the i-th training example $x^{(i)}$, expressed as a $n \\times 1$ vector.) When you complete the code in `nnCostFunction`, you will need to add the column of 1’s to the X matrix. The parameters for each unit in the neural network is represented in Theta1 and Theta2 as one row. Specifically, the first row of Theta1 corresponds to the first hidden unit in the second layer. You can use a for-loop over the examples to compute the cost.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def sigmoidGradient(z):\n", + " g = np.zeros(z.shape)\n", + " A = utils.sigmoid(z)\n", + " g = A*(1-A)\n", + " return g\n", + "\n", + "\n", + "\n", + "\n", + "def nnCostFunction(nn_params,\n", + " input_layer_size,\n", + " hidden_layer_size,\n", + " num_labels,\n", + " X, y, lambda_=0.0):\n", + " \"\"\"\n", + " Implements the neural network cost function and gradient for a two layer neural \n", + " network which performs classification. \n", + " \n", + " Parameters\n", + " ----------\n", + " nn_params : array_like\n", + " The parameters for the neural network which are \"unrolled\" into \n", + " a vector. This needs to be converted back into the weight matrices Theta1\n", + " and Theta2.\n", + " \n", + " input_layer_size : int\n", + " Number of features for the input layer. \n", + " \n", + " hidden_layer_size : int\n", + " Number of hidden units in the second layer.\n", + " \n", + " num_labels : int\n", + " Total number of labels, or equivalently number of units in output layer. \n", + " \n", + " X : array_like\n", + " Input dataset. A matrix of shape (m x input_layer_size).\n", + " \n", + " y : array_like\n", + " Dataset labels. A vector of shape (m,).\n", + " \n", + " lambda_ : float, optional\n", + " Regularization parameter.\n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The computed value for the cost function at the current weight values.\n", + " \n", + " grad : array_like\n", + " An \"unrolled\" vector of the partial derivatives of the concatenatation of\n", + " neural network weights Theta1 and Theta2.\n", + " \n", + " Instructions\n", + " ------------\n", + " You should complete the code by working through the following parts.\n", + " \n", + " - Part 1: Feedforward the neural network and return the cost in the \n", + " variable J. After implementing Part 1, you can verify that your\n", + " cost function computation is correct by verifying the cost\n", + " computed in the following cell.\n", + " \n", + " - Part 2: Implement the backpropagation algorithm to compute the gradients\n", + " Theta1_grad and Theta2_grad. You should return the partial derivatives of\n", + " the cost function with respect to Theta1 and Theta2 in Theta1_grad and\n", + " Theta2_grad, respectively. After implementing Part 2, you can check\n", + " that your implementation is correct by running checkNNGradients provided\n", + " in the utils.py module.\n", + " \n", + " Note: The vector y passed into the function is a vector of labels\n", + " containing values from 0..K-1. You need to map this vector into a \n", + " binary vector of 1's and 0's to be used with the neural network\n", + " cost function.\n", + " \n", + " Hint: We recommend implementing backpropagation using a for-loop\n", + " over the training examples if you are implementing it for the \n", + " first time.\n", + " \n", + " - Part 3: Implement regularization with the cost function and gradients.\n", + " \n", + " Hint: You can implement this around the code for\n", + " backpropagation. That is, you can compute the gradients for\n", + " the regularization separately and then add them to Theta1_grad\n", + " and Theta2_grad from Part 2.\n", + " \n", + " Note \n", + " ----\n", + " We have provided an implementation for the sigmoid function in the file \n", + " `utils.py` accompanying this assignment.\n", + " \"\"\"\n", + " # Reshape nn_params back into the parameters Theta1 and Theta2, the weight matrices\n", + " # for our 2 layer neural network\n", + " Theta1 = np.reshape(nn_params[:hidden_layer_size * (input_layer_size + 1)],\n", + " (hidden_layer_size, (input_layer_size + 1)))\n", + "\n", + " Theta2 = np.reshape(nn_params[(hidden_layer_size * (input_layer_size + 1)):],\n", + " (num_labels, (hidden_layer_size + 1)))\n", + "\n", + " # Setup some useful variables\n", + " m = y.size\n", + " \n", + " # You need to return the following variables correctly \n", + " J = 0\n", + " Theta1_grad = np.zeros(Theta1.shape)\n", + " Theta2_grad = np.zeros(Theta2.shape)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " \n", + " a1 = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + " \n", + " a2 = utils.sigmoid(a1.dot(Theta1.T))\n", + " a2 = np.concatenate([np.ones((a2.shape[0], 1)), a2], axis=1)\n", + " \n", + " a3 = utils.sigmoid(a2.dot(Theta2.T))\n", + " \n", + " y_matrix = y.reshape(-1)\n", + " y_matrix = np.eye(num_labels)[y_matrix]\n", + " \n", + " temp1 = Theta1\n", + " temp2 = Theta2\n", + " \n", + " # Add regularization term\n", + " \n", + " reg_term = (lambda_ / (2 * m)) * (np.sum(np.square(temp1[:, 1:])) + np.sum(np.square(temp2[:, 1:])))\n", + " \n", + " J = (-1 / m) * np.sum((np.log(a3) * y_matrix) + np.log(1 - a3) * (1 - y_matrix)) + reg_term\n", + " \n", + " # Backpropogation\n", + " \n", + " delta_3 = a3 - y_matrix\n", + " delta_2 = delta_3.dot(Theta2)[:, 1:] * sigmoidGradient(a1.dot(Theta1.T))\n", + "\n", + " Delta1 = delta_2.T.dot(a1)\n", + " Delta2 = delta_3.T.dot(a2)\n", + " \n", + " #Regularised Gradient\n", + " \n", + " Theta1_grad = (1 / m) * Delta1\n", + " Theta1_grad[:, 1:] = Theta1_grad[:, 1:] + (lambda_ / m) * Theta1[:, 1:]\n", + " \n", + " Theta2_grad = (1 / m) * Delta2\n", + " Theta2_grad[:, 1:] = Theta2_grad[:, 1:] + (lambda_ / m) * Theta2[:, 1:]\n", + " \n", + " \n", + " \n", + " # ================================================================\n", + " # Unroll gradients\n", + " # grad = np.concatenate([Theta1_grad.ravel(order=order), Theta2_grad.ravel(order=order)])\n", + " grad = np.concatenate([Theta1_grad.ravel(), Theta2_grad.ravel()])\n", + " \n", + " return J, grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Use the following links to go back to the different parts of this exercise that require to modify the function `nnCostFunction`.
\n", + "\n", + "Back to:\n", + "- [Feedforward and cost function](#section1)\n", + "- [Regularized cost](#section2)\n", + "- [Neural Network Gradient (Backpropagation)](#section4)\n", + "- [Regularized Gradient](#section5)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you are done, call your `nnCostFunction` using the loaded set of parameters for `Theta1` and `Theta2`. You should see that the cost is about 0.287629." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at parameters (loaded from ex4weights): 0.287629 \n", + "The cost should be about : 0.287629.\n" + ] + } + ], + "source": [ + "lambda_ = 0\n", + "J, _ = nnCostFunction(nn_params, input_layer_size, hidden_layer_size,\n", + " num_labels, X, y, lambda_)\n", + "print('Cost at parameters (loaded from ex4weights): %.6f ' % J)\n", + "print('The cost should be about : 0.287629.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): Y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 0 / 15 | \n", + " Sigmoid Gradient | 0 / 5 | \n", + " Neural Network Gradient (Backpropagation) | 0 / 40 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader = utils.Grader()\n", + "grader[1] = nnCostFunction\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.4 Regularized cost function\n", + "\n", + "The cost function for neural networks with regularization is given by:\n", + "\n", + "\n", + "$$ J(\\theta) = \\frac{1}{m} \\sum_{i=1}^{m}\\sum_{k=1}^{K} \\left[ - y_k^{(i)} \\log \\left( \\left( h_\\theta \\left( x^{(i)} \\right) \\right)_k \\right) - \\left( 1 - y_k^{(i)} \\right) \\log \\left( 1 - \\left( h_\\theta \\left( x^{(i)} \\right) \\right)_k \\right) \\right] + \\frac{\\lambda}{2 m} \\left[ \\sum_{j=1}^{25} \\sum_{k=1}^{400} \\left( \\Theta_{j,k}^{(1)} \\right)^2 + \\sum_{j=1}^{10} \\sum_{k=1}^{25} \\left( \\Theta_{j,k}^{(2)} \\right)^2 \\right] $$\n", + "\n", + "You can assume that the neural network will only have 3 layers - an input layer, a hidden layer and an output layer. However, your code should work for any number of input units, hidden units and outputs units. While we\n", + "have explicitly listed the indices above for $\\Theta^{(1)}$ and $\\Theta^{(2)}$ for clarity, do note that your code should in general work with $\\Theta^{(1)}$ and $\\Theta^{(2)}$ of any size. Note that you should not be regularizing the terms that correspond to the bias. For the matrices `Theta1` and `Theta2`, this corresponds to the first column of each matrix. You should now add regularization to your cost function. Notice that you can first compute the unregularized cost function $J$ using your existing `nnCostFunction` and then later add the cost for the regularization terms.\n", + "\n", + "[Click here to go back to `nnCostFunction` for editing.](#nnCostFunction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you are done, the next cell will call your `nnCostFunction` using the loaded set of parameters for `Theta1` and `Theta2`, and $\\lambda = 1$. You should see that the cost is about 0.383770." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at parameters (loaded from ex4weights): 0.289087\n", + "This value should be about : 0.383770.\n" + ] + } + ], + "source": [ + "# Weight regularization parameter (we set this to 1 here).\n", + "lambda_ = 1\n", + "J, _ = nnCostFunction(nn_params, input_layer_size, hidden_layer_size,\n", + " num_labels, X, y, lambda_)\n", + "\n", + "print('Cost at parameters (loaded from ex4weights): %.6f' % J)\n", + "print('This value should be about : 0.383770.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 0 / 15 | \n", + " Sigmoid Gradient | 0 / 5 | \n", + " Neural Network Gradient (Backpropagation) | 0 / 40 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[2] = nnCostFunction\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Backpropagation\n", + "\n", + "In this part of the exercise, you will implement the backpropagation algorithm to compute the gradient for the neural network cost function. You will need to update the function `nnCostFunction` so that it returns an appropriate value for `grad`. Once you have computed the gradient, you will be able to train the neural network by minimizing the cost function $J(\\theta)$ using an advanced optimizer such as `scipy`'s `optimize.minimize`.\n", + "You will first implement the backpropagation algorithm to compute the gradients for the parameters for the (unregularized) neural network. After you have verified that your gradient computation for the unregularized case is correct, you will implement the gradient for the regularized neural network." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.1 Sigmoid Gradient\n", + "\n", + "To help you get started with this part of the exercise, you will first implement\n", + "the sigmoid gradient function. The gradient for the sigmoid function can be\n", + "computed as\n", + "\n", + "$$ g'(z) = \\frac{d}{dz} g(z) = g(z)\\left(1-g(z)\\right) $$\n", + "\n", + "where\n", + "\n", + "$$ \\text{sigmoid}(z) = g(z) = \\frac{1}{1 + e^{-z}} $$\n", + "\n", + "Now complete the implementation of `sigmoidGradient` in the next cell.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def sigmoidGradient(z):\n", + " \"\"\"\n", + " Computes the gradient of the sigmoid function evaluated at z. \n", + " This should work regardless if z is a matrix or a vector. \n", + " In particular, if z is a vector or matrix, you should return\n", + " the gradient for each element.\n", + " \n", + " Parameters\n", + " ----------\n", + " z : array_like\n", + " A vector or matrix as input to the sigmoid function. \n", + " \n", + " Returns\n", + " --------\n", + " g : array_like\n", + " Gradient of the sigmoid function. Has the same shape as z. \n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the gradient of the sigmoid function evaluated at\n", + " each value of z (z can be a matrix, vector or scalar).\n", + " \n", + " Note\n", + " ----\n", + " We have provided an implementation of the sigmoid function \n", + " in `utils.py` file accompanying this assignment.\n", + " \"\"\"\n", + "\n", + " g = np.zeros(z.shape)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " A = utils.sigmoid(z)\n", + " g = A * (1-A)\n", + " \n", + "\n", + " # =============================================================\n", + " return g" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When you are done, the following cell call `sigmoidGradient` on a given vector `z`. Try testing a few values by calling `sigmoidGradient(z)`. For large values (both positive and negative) of z, the gradient should be close to 0. When $z = 0$, the gradient should be exactly 0.25. Your code should also work with vectors and matrices. For a matrix, your function should perform the sigmoid gradient function on every element." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sigmoid gradient evaluated at [-1 -0.5 0 0.5 1]:\n", + " \n", + "[0.19661193 0.23500371 0.25 0.23500371 0.19661193]\n" + ] + } + ], + "source": [ + "z = np.array([-1, -0.5, 0, 0.5, 1])\n", + "g = sigmoidGradient(z)\n", + "print('Sigmoid gradient evaluated at [-1 -0.5 0 0.5 1]:\\n ')\n", + "print(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 0 / 15 | \n", + " Sigmoid Gradient | 5 / 5 | Nice work!\n", + " Neural Network Gradient (Backpropagation) | 0 / 40 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 35 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[3] = sigmoidGradient\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2 Random Initialization\n", + "\n", + "When training neural networks, it is important to randomly initialize the parameters for symmetry breaking. One effective strategy for random initialization is to randomly select values for $\\Theta^{(l)}$ uniformly in the range $[-\\epsilon_{init}, \\epsilon_{init}]$. You should use $\\epsilon_{init} = 0.12$. This range of values ensures that the parameters are kept small and makes the learning more efficient.\n", + "\n", + "
\n", + "One effective strategy for choosing $\\epsilon_{init}$ is to base it on the number of units in the network. A good choice of $\\epsilon_{init}$ is $\\epsilon_{init} = \\frac{\\sqrt{6}}{\\sqrt{L_{in} + L_{out}}}$ where $L_{in} = s_l$ and $L_{out} = s_{l+1}$ are the number of units in the layers adjacent to $\\Theta^{l}$.\n", + "
\n", + "\n", + "Your job is to complete the function `randInitializeWeights` to initialize the weights for $\\Theta$. Modify the function by filling in the following code:\n", + "\n", + "```python\n", + "# Randomly initialize the weights to small values\n", + "W = np.random.rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init\n", + "```\n", + "Note that we give the function an argument for $\\epsilon$ with default value `epsilon_init = 0.12`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def randInitializeWeights(L_in, L_out, epsilon_init=0.12):\n", + " \"\"\"\n", + " Randomly initialize the weights of a layer in a neural network.\n", + " \n", + " Parameters\n", + " ----------\n", + " L_in : int\n", + " Number of incomming connections.\n", + " \n", + " L_out : int\n", + " Number of outgoing connections. \n", + " \n", + " epsilon_init : float, optional\n", + " Range of values which the weight can take from a uniform \n", + " distribution.\n", + " \n", + " Returns\n", + " -------\n", + " W : array_like\n", + " The weight initialiatized to random values. Note that W should\n", + " be set to a matrix of size(L_out, 1 + L_in) as\n", + " the first column of W handles the \"bias\" terms.\n", + " \n", + " Instructions\n", + " ------------\n", + " Initialize W randomly so that we break the symmetry while training\n", + " the neural network. Note that the first column of W corresponds \n", + " to the parameters for the bias unit.\n", + " \"\"\"\n", + "\n", + " # You need to return the following variables correctly \n", + " W = np.zeros((L_out, 1 + L_in))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " W = np.random.rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init\n", + "\n", + " # ============================================================\n", + " return W" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You do not need to submit any code for this part of the exercise.*\n", + "\n", + "Execute the following cell to initialize the weights for the 2 layers in the neural network using the `randInitializeWeights` function." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initializing Neural Network Parameters ...\n" + ] + } + ], + "source": [ + "print('Initializing Neural Network Parameters ...')\n", + "\n", + "initial_Theta1 = randInitializeWeights(input_layer_size, hidden_layer_size)\n", + "initial_Theta2 = randInitializeWeights(hidden_layer_size, num_labels)\n", + "\n", + "# Unroll parameters\n", + "initial_nn_params = np.concatenate([initial_Theta1.ravel(), initial_Theta2.ravel()], axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.4 Backpropagation\n", + "\n", + "![](Figures/ex4-backpropagation.png)\n", + "\n", + "Now, you will implement the backpropagation algorithm. Recall that the intuition behind the backpropagation algorithm is as follows. Given a training example $(x^{(t)}, y^{(t)})$, we will first run a “forward pass” to compute all the activations throughout the network, including the output value of the hypothesis $h_\\theta(x)$. Then, for each node $j$ in layer $l$, we would like to compute an “error term” $\\delta_j^{(l)}$ that measures how much that node was “responsible” for any errors in our output.\n", + "\n", + "For an output node, we can directly measure the difference between the network’s activation and the true target value, and use that to define $\\delta_j^{(3)}$ (since layer 3 is the output layer). For the hidden units, you will compute $\\delta_j^{(l)}$ based on a weighted average of the error terms of the nodes in layer $(l+1)$. In detail, here is the backpropagation algorithm (also depicted in the figure above). You should implement steps 1 to 4 in a loop that processes one example at a time. Concretely, you should implement a for-loop `for t in range(m)` and place steps 1-4 below inside the for-loop, with the $t^{th}$ iteration performing the calculation on the $t^{th}$ training example $(x^{(t)}, y^{(t)})$. Step 5 will divide the accumulated gradients by $m$ to obtain the gradients for the neural network cost function.\n", + "\n", + "1. Set the input layer’s values $(a^{(1)})$ to the $t^{th }$training example $x^{(t)}$. Perform a feedforward pass, computing the activations $(z^{(2)}, a^{(2)}, z^{(3)}, a^{(3)})$ for layers 2 and 3. Note that you need to add a `+1` term to ensure that the vectors of activations for layers $a^{(1)}$ and $a^{(2)}$ also include the bias unit. In `numpy`, if a 1 is a column matrix, adding one corresponds to `a_1 = np.concatenate([np.ones((m, 1)), a_1], axis=1)`.\n", + "\n", + "1. For each output unit $k$ in layer 3 (the output layer), set \n", + "$$\\delta_k^{(3)} = \\left(a_k^{(3)} - y_k \\right)$$\n", + "where $y_k \\in \\{0, 1\\}$ indicates whether the current training example belongs to class $k$ $(y_k = 1)$, or if it belongs to a different class $(y_k = 0)$. You may find logical arrays helpful for this task (explained in the previous programming exercise).\n", + "\n", + "1. For the hidden layer $l = 2$, set \n", + "$$ \\delta^{(2)} = \\left( \\Theta^{(2)} \\right)^T \\delta^{(3)} * g'\\left(z^{(2)} \\right)$$\n", + "Note that the symbol $*$ performs element wise multiplication in `numpy`.\n", + "\n", + "1. Accumulate the gradient from this example using the following formula. Note that you should skip or remove $\\delta_0^{(2)}$. In `numpy`, removing $\\delta_0^{(2)}$ corresponds to `delta_2 = delta_2[1:]`.\n", + "\n", + "1. Obtain the (unregularized) gradient for the neural network cost function by dividing the accumulated gradients by $\\frac{1}{m}$:\n", + "$$ \\frac{\\partial}{\\partial \\Theta_{ij}^{(l)}} J(\\Theta) = D_{ij}^{(l)} = \\frac{1}{m} \\Delta_{ij}^{(l)}$$\n", + "\n", + "
\n", + "**Python/Numpy tip**: You should implement the backpropagation algorithm only after you have successfully completed the feedforward and cost functions. While implementing the backpropagation alogrithm, it is often useful to use the `shape` function to print out the shapes of the variables you are working with if you run into dimension mismatch errors.\n", + "
\n", + "\n", + "[Click here to go back and update the function `nnCostFunction` with the backpropagation algorithm](#nnCostFunction)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you have implemented the backpropagation algorithm, we will proceed to run gradient checking on your implementation. The gradient check will allow you to increase your confidence that your code is\n", + "computing the gradients correctly.\n", + "\n", + "### 2.4 Gradient checking \n", + "\n", + "In your neural network, you are minimizing the cost function $J(\\Theta)$. To perform gradient checking on your parameters, you can imagine “unrolling” the parameters $\\Theta^{(1)}$, $\\Theta^{(2)}$ into a long vector $\\theta$. By doing so, you can think of the cost function being $J(\\Theta)$ instead and use the following gradient checking procedure.\n", + "\n", + "Suppose you have a function $f_i(\\theta)$ that purportedly computes $\\frac{\\partial}{\\partial \\theta_i} J(\\theta)$; you’d like to check if $f_i$ is outputting correct derivative values.\n", + "\n", + "$$\n", + "\\text{Let } \\theta^{(i+)} = \\theta + \\begin{bmatrix} 0 \\\\ 0 \\\\ \\vdots \\\\ \\epsilon \\\\ \\vdots \\\\ 0 \\end{bmatrix}\n", + "\\quad \\text{and} \\quad \\theta^{(i-)} = \\theta - \\begin{bmatrix} 0 \\\\ 0 \\\\ \\vdots \\\\ \\epsilon \\\\ \\vdots \\\\ 0 \\end{bmatrix}\n", + "$$\n", + "\n", + "So, $\\theta^{(i+)}$ is the same as $\\theta$, except its $i^{th}$ element has been incremented by $\\epsilon$. Similarly, $\\theta^{(i−)}$ is the corresponding vector with the $i^{th}$ element decreased by $\\epsilon$. You can now numerically verify $f_i(\\theta)$’s correctness by checking, for each $i$, that:\n", + "\n", + "$$ f_i\\left( \\theta \\right) \\approx \\frac{J\\left( \\theta^{(i+)}\\right) - J\\left( \\theta^{(i-)} \\right)}{2\\epsilon} $$\n", + "\n", + "The degree to which these two values should approximate each other will depend on the details of $J$. But assuming $\\epsilon = 10^{-4}$, you’ll usually find that the left- and right-hand sides of the above will agree to at least 4 significant digits (and often many more).\n", + "\n", + "We have implemented the function to compute the numerical gradient for you in `computeNumericalGradient` (within the file `utils.py`). While you are not required to modify the file, we highly encourage you to take a look at the code to understand how it works.\n", + "\n", + "In the next cell we will run the provided function `checkNNGradients` which will create a small neural network and dataset that will be used for checking your gradients. If your backpropagation implementation is correct,\n", + "you should see a relative difference that is less than 1e-9.\n", + "\n", + "
\n", + "**Practical Tip**: When performing gradient checking, it is much more efficient to use a small neural network with a relatively small number of input units and hidden units, thus having a relatively small number\n", + "of parameters. Each dimension of $\\theta$ requires two evaluations of the cost function and this can be expensive. In the function `checkNNGradients`, our code creates a small random model and dataset which is used with `computeNumericalGradient` for gradient checking. Furthermore, after you are confident that your gradient computations are correct, you should turn off gradient checking before running your learning algorithm.\n", + "
\n", + "\n", + "
\n", + "**Practical Tip:** Gradient checking works for any function where you are computing the cost and the gradient. Concretely, you can use the same `computeNumericalGradient` function to check if your gradient implementations for the other exercises are correct too (e.g., logistic regression’s cost function).\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-9.27825235e-03 -9.27825236e-03]\n", + " [-3.04978709e-06 -3.04978914e-06]\n", + " [-1.75060084e-04 -1.75060082e-04]\n", + " [-9.62660640e-05 -9.62660620e-05]\n", + " [ 8.89911959e-03 8.89911960e-03]\n", + " [ 1.42869450e-05 1.42869443e-05]\n", + " [ 2.33146358e-04 2.33146357e-04]\n", + " [ 1.17982666e-04 1.17982666e-04]\n", + " [-8.36010761e-03 -8.36010762e-03]\n", + " [-2.59383093e-05 -2.59383100e-05]\n", + " [-2.87468729e-04 -2.87468729e-04]\n", + " [-1.37149709e-04 -1.37149706e-04]\n", + " [ 7.62813550e-03 7.62813551e-03]\n", + " [ 3.69883257e-05 3.69883234e-05]\n", + " [ 3.35320351e-04 3.35320347e-04]\n", + " [ 1.53247082e-04 1.53247082e-04]\n", + " [-6.74798369e-03 -6.74798370e-03]\n", + " [-4.68759764e-05 -4.68759769e-05]\n", + " [-3.76215583e-04 -3.76215587e-04]\n", + " [-1.66560294e-04 -1.66560294e-04]\n", + " [ 3.14544970e-01 3.14544970e-01]\n", + " [ 1.64090819e-01 1.64090819e-01]\n", + " [ 1.64567932e-01 1.64567932e-01]\n", + " [ 1.58339334e-01 1.58339334e-01]\n", + " [ 1.51127527e-01 1.51127527e-01]\n", + " [ 1.49568335e-01 1.49568335e-01]\n", + " [ 1.11056588e-01 1.11056588e-01]\n", + " [ 5.75736494e-02 5.75736493e-02]\n", + " [ 5.77867378e-02 5.77867378e-02]\n", + " [ 5.59235296e-02 5.59235296e-02]\n", + " [ 5.36967009e-02 5.36967009e-02]\n", + " [ 5.31542052e-02 5.31542052e-02]\n", + " [ 9.74006970e-02 9.74006970e-02]\n", + " [ 5.04575855e-02 5.04575855e-02]\n", + " [ 5.07530173e-02 5.07530173e-02]\n", + " [ 4.91620841e-02 4.91620841e-02]\n", + " [ 4.71456249e-02 4.71456249e-02]\n", + " [ 4.65597186e-02 4.65597186e-02]]\n", + "The above two columns you get should be very similar.\n", + "(Left-Your Numerical Gradient, Right-Analytical Gradient)\n", + "\n", + "If your backpropagation implementation is correct, then \n", + "the relative difference will be small (less than 1e-9). \n", + "Relative Difference: 2.41486e-11\n" + ] + } + ], + "source": [ + "utils.checkNNGradients(nnCostFunction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Once your cost function passes the gradient check for the (unregularized) neural network cost function, you should submit the neural network gradient function (backpropagation).*" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 0 / 15 | \n", + " Sigmoid Gradient | 5 / 5 | Nice work!\n", + " Neural Network Gradient (Backpropagation) | 40 / 40 | Nice work!\n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 75 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[4] = nnCostFunction\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.5 Regularized Neural Network\n", + "\n", + "After you have successfully implemented the backpropagation algorithm, you will add regularization to the gradient. To account for regularization, it turns out that you can add this as an additional term *after* computing the gradients using backpropagation.\n", + "\n", + "Specifically, after you have computed $\\Delta_{ij}^{(l)}$ using backpropagation, you should add regularization using\n", + "\n", + "$$ \\begin{align} \n", + "& \\frac{\\partial}{\\partial \\Theta_{ij}^{(l)}} J(\\Theta) = D_{ij}^{(l)} = \\frac{1}{m} \\Delta_{ij}^{(l)} & \\qquad \\text{for } j = 0 \\\\\n", + "& \\frac{\\partial}{\\partial \\Theta_{ij}^{(l)}} J(\\Theta) = D_{ij}^{(l)} = \\frac{1}{m} \\Delta_{ij}^{(l)} + \\frac{\\lambda}{m} \\Theta_{ij}^{(l)} & \\qquad \\text{for } j \\ge 1\n", + "\\end{align}\n", + "$$\n", + "\n", + "Note that you should *not* be regularizing the first column of $\\Theta^{(l)}$ which is used for the bias term. Furthermore, in the parameters $\\Theta_{ij}^{(l)}$, $i$ is indexed starting from 1, and $j$ is indexed starting from 0. Thus, \n", + "\n", + "$$\n", + "\\Theta^{(l)} = \\begin{bmatrix}\n", + "\\Theta_{1,0}^{(i)} & \\Theta_{1,1}^{(l)} & \\cdots \\\\\n", + "\\Theta_{2,0}^{(i)} & \\Theta_{2,1}^{(l)} & \\cdots \\\\\n", + "\\vdots & ~ & \\ddots\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "[Now modify your code that computes grad in `nnCostFunction` to account for regularization.](#nnCostFunction)\n", + "\n", + "After you are done, the following cell runs gradient checking on your implementation. If your code is correct, you should expect to see a relative difference that is less than 1e-9." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-9.27825235e-03 -9.27825236e-03]\n", + " [-1.67679797e-02 -1.67679797e-02]\n", + " [-1.75060084e-04 -6.01744725e-02]\n", + " [-9.62660640e-05 -1.73704651e-02]\n", + " [ 8.89911959e-03 8.89911960e-03]\n", + " [ 3.94334829e-02 3.94334829e-02]\n", + " [ 2.33146358e-04 -3.19612287e-02]\n", + " [ 1.17982666e-04 -5.75658668e-02]\n", + " [-8.36010761e-03 -8.36010762e-03]\n", + " [ 5.93355565e-02 5.93355565e-02]\n", + " [-2.87468729e-04 2.49225535e-02]\n", + " [-1.37149709e-04 -4.51963845e-02]\n", + " [ 7.62813550e-03 7.62813551e-03]\n", + " [ 2.47640974e-02 2.47640974e-02]\n", + " [ 3.35320351e-04 5.97717617e-02]\n", + " [ 1.53247082e-04 9.14587966e-03]\n", + " [-6.74798369e-03 -6.74798370e-03]\n", + " [-3.26881426e-02 -3.26881426e-02]\n", + " [-3.76215583e-04 3.86410548e-02]\n", + " [-1.66560294e-04 5.46101547e-02]\n", + " [ 3.14544970e-01 3.14544970e-01]\n", + " [ 1.18682669e-01 1.18682669e-01]\n", + " [ 1.64567932e-01 2.03987128e-01]\n", + " [ 1.58339334e-01 1.25698067e-01]\n", + " [ 1.51127527e-01 1.76337550e-01]\n", + " [ 1.49568335e-01 1.32294136e-01]\n", + " [ 1.11056588e-01 1.11056588e-01]\n", + " [ 3.81928711e-05 3.81928696e-05]\n", + " [ 5.77867378e-02 1.17148233e-01]\n", + " [ 5.59235296e-02 -4.07588279e-03]\n", + " [ 5.36967009e-02 1.13133142e-01]\n", + " [ 5.31542052e-02 -4.52964427e-03]\n", + " [ 9.74006970e-02 9.74006970e-02]\n", + " [ 3.36926556e-02 3.36926556e-02]\n", + " [ 5.07530173e-02 7.54801264e-02]\n", + " [ 4.91620841e-02 1.69677090e-02]\n", + " [ 4.71456249e-02 8.61628953e-02]\n", + " [ 4.65597186e-02 1.50048382e-03]]\n", + "The above two columns you get should be very similar.\n", + "(Left-Your Numerical Gradient, Right-Analytical Gradient)\n", + "\n", + "If your backpropagation implementation is correct, then \n", + "the relative difference will be small (less than 1e-9). \n", + "Relative Difference: 0.194982\n", + "\n", + "\n", + "Cost at (fixed) debugging parameters (w/ lambda = 3.000000): 0.292002 \n", + "(for lambda = 3, this value should be about 0.576051)\n" + ] + } + ], + "source": [ + "# Check gradients by running checkNNGradients\n", + "lambda_ = 3\n", + "utils.checkNNGradients(nnCostFunction, lambda_)\n", + "\n", + "# Also output the costFunction debugging values\n", + "debug_J, _ = nnCostFunction(nn_params, input_layer_size,\n", + " hidden_layer_size, num_labels, X, y, lambda_)\n", + "\n", + "print('\\n\\nCost at (fixed) debugging parameters (w/ lambda = %f): %f ' % (lambda_, debug_J))\n", + "print('(for lambda = 3, this value should be about 0.576051)')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 0 / 15 | \n", + " Sigmoid Gradient | 5 / 5 | Nice work!\n", + " Neural Network Gradient (Backpropagation) | 40 / 40 | Nice work!\n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 75 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[5] = nnCostFunction\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.6 Learning parameters using `scipy.optimize.minimize`\n", + "\n", + "After you have successfully implemented the neural network cost function\n", + "and gradient computation, the next step we will use `scipy`'s minimization to learn a good set parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# After you have completed the assignment, change the maxiter to a larger\n", + "# value to see how more training helps.\n", + "options= {'maxiter': 100}\n", + "\n", + "# You should also try different values of lambda\n", + "lambda_ = 1\n", + "\n", + "# Create \"short hand\" for the cost function to be minimized\n", + "costFunction = lambda p: nnCostFunction(p, input_layer_size,\n", + " hidden_layer_size,\n", + " num_labels, X, y, lambda_)\n", + "\n", + "# Now, costFunction is a function that takes in only one argument\n", + "# (the neural network parameters)\n", + "res = opt.minimize(costFunction,\n", + " initial_nn_params,\n", + " jac=True,\n", + " method='TNC',\n", + " options=options)\n", + "\n", + "# get the solution of the optimization\n", + "nn_params = res.x\n", + " \n", + "# Obtain Theta1 and Theta2 back from nn_params\n", + "Theta1 = np.reshape(nn_params[:hidden_layer_size * (input_layer_size + 1)],\n", + " (hidden_layer_size, (input_layer_size + 1)))\n", + "\n", + "Theta2 = np.reshape(nn_params[(hidden_layer_size * (input_layer_size + 1)):],\n", + " (num_labels, (hidden_layer_size + 1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the training completes, we will proceed to report the training accuracy of your classifier by computing the percentage of examples it got correct. If your implementation is correct, you should see a reported\n", + "training accuracy of about 95.3% (this may vary by about 1% due to the random initialization). It is possible to get higher training accuracies by training the neural network for more iterations. We encourage you to try\n", + "training the neural network for more iterations (e.g., set `maxiter` to 400) and also vary the regularization parameter $\\lambda$. With the right learning settings, it is possible to get the neural network to perfectly fit the training set." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Set Accuracy: 95.920000\n" + ] + } + ], + "source": [ + "pred = utils.predict(Theta1, Theta2, X)\n", + "print('Training Set Accuracy: %f' % (np.mean(pred == y) * 100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 Visualizing the Hidden Layer\n", + "\n", + "One way to understand what your neural network is learning is to visualize what the representations captured by the hidden units. Informally, given a particular hidden unit, one way to visualize what it computes is to find an input $x$ that will cause it to activate (that is, to have an activation value \n", + "($a_i^{(l)}$) close to 1). For the neural network you trained, notice that the $i^{th}$ row of $\\Theta^{(1)}$ is a 401-dimensional vector that represents the parameter for the $i^{th}$ hidden unit. If we discard the bias term, we get a 400 dimensional vector that represents the weights from each input pixel to the hidden unit.\n", + "\n", + "Thus, one way to visualize the “representation” captured by the hidden unit is to reshape this 400 dimensional vector into a 20 × 20 image and display it (It turns out that this is equivalent to finding the input that gives the highest activation for the hidden unit, given a “norm” constraint on the input (i.e., $||x||_2 \\le 1$)). \n", + "\n", + "The next cell does this by using the `displayData` function and it will show you an image with 25 units,\n", + "each corresponding to one hidden unit in the network. In your trained network, you should find that the hidden units corresponds roughly to detectors that look for strokes and other patterns in the input." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "utils.displayData(Theta1[:, 1:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 Optional (ungraded) exercise\n", + "\n", + "In this part of the exercise, you will get to try out different learning settings for the neural network to see how the performance of the neural network varies with the regularization parameter $\\lambda$ and number of training steps (the `maxiter` option when using `scipy.optimize.minimize`). Neural networks are very powerful models that can form highly complex decision boundaries. Without regularization, it is possible for a neural network to “overfit” a training set so that it obtains close to 100% accuracy on the training set but does not as well on new examples that it has not seen before. You can set the regularization $\\lambda$ to a smaller value and the `maxiter` parameter to a higher number of iterations to see this for youself." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..2ae58e451 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/exercise4.ipynb b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/exercise4.ipynb index d8ebee0cf..46565e261 100644 --- a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/exercise4.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/exercise4.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -27,12 +27,12 @@ "\n", "# Scientific and vector computation for python\n", "import numpy as np\n", - "\n", + "import pandas as pd\n", "# Plotting library\n", "from matplotlib import pyplot\n", "\n", "# Optimization module in scipy\n", - "from scipy import optimize\n", + "from scipy import optimize as opt\n", "\n", "# will be used to load MATLAB mat datafile format\n", "from scipy.io import loadmat\n", @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -128,9 +128,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAItCAYAAAAwm9DjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd5wVxbb9F+9KUFFMmEExYM45YA6YFUVUzApiQFEx52vOCb2iIIqKWVEx53BVxCyiYs45XwXE997vj/db+6yWPgwzc/p0T7u+/7A/xcyZqq6qPt1r79q71f/+7//CGGOMMaaM/FfeHTDGGGOMyQo/6BhjjDGmtPhBxxhjjDGlxQ86xhhjjCktftAxxhhjTGmZbmr/OWnSpFIeyWrbtm0rAPjjjz9KOb42bdq0AoCJEyeWcnzt2rX7W4zP+69lwv3n8bVM/i7jmzx5cinH17p161Z/bbOiY4wxxpjSMlVFp0i0atVqCltzADkfkKk1uuYaav+f//mfrLuTK2lj9p4zxlTjv/6roqPk/V1tRccYY4wxpaXmio4+xelb4H//939P88+yXX/nzz//DPvXX38FAEw//fTR1qZNm+Z025jgH//4BwBg8uTJ0aZrceLEiVP8zkwzzTTF76et+ZaE7k+9FrR1zzVG/WrppL2p5q1ucc2preuvJa7FtO8EtautLa7PvOfk785//vOfsNu2bRv2dNP932NHPefHio4xxhhjSosfdIwxxhhTWmrmuqKM+OWXX0bbpEmTwu7SpcsUP/vzzz9H27fffhv2559/DgAYO3ZstL333nthjxgxAgDQr1+/aDvppJPCLntgaFFIk5OBiiRZdLlcpW+V/r/44gsAwKBBg6KNaxIAnnvuOQBJ6XXHHXcM+4ADDgAAzD333NHWkmR0Xot333032i677LKwP/jgAwDAEkssEW3qxjrqqKPCnmGGGQDkM/5qro1p7Uu19fH7779P8TN5uM61f59++mnYzz//PABgpZVWirYFF1ww7KKvxbR50/F99NFHACr7FEi6jtddd10AlbUHFOs7geNr6P6pfS5S/9PQ/fH1118DAHbZZZdou/DCC8NeZpllANh1ZYwxxhhTE/ygY4wxxpjSUjPXFd0Uhx12WLS9+eabYe+5555hU7q7//77o41yJFCRvhidDSRl8lVWWQUAMOecc9ag57VBpccsKJJ0SZlS5/fqq68Oe+ONNwYAbLLJJlP9HJWo6zU+nacff/wx7FNPPTXsxx57DADwzTffRNtaa60V9jnnnAMg6ZpT1w755z//WYMeZ4deCz3V+MwzzwAA+vfvH23vvPNO2HSDPPXUU9H222+/hX3QQQeFPeOMMwKos0z9/8elY9L11bp166n2ib+vJ83uuuuusEeNGhU2r9Hyyy/f3G5PM9w36kLbZ599wub6PfbYY6NN12IRXcp6L+Cp2osvvjjabr311rDpkpowYUK00Z0KAH369AEAnHXWWdHGOQfqtxar5ZH56quvAABPP/10tHHOAGCeeeYBAOy6667RtvDCC4ddpO8CovP39ttvAwBee+21aNP7Qx4nMa3oGGOMMaa01DwYea655oq2u+++O2x9o+AT6WKLLRZtq6++eth8et15552jTYPpNPDpr5/ZXKo9hRN9GtX/1yfWWr0xaF/atWtXk89sKtoXvnHtv//+0cYASKDyJP/4449H27zzzht2hw4dAABrrLFGtC200EKpf6tW8DNfffXVaNtpp53C1sB4jkuViVlmmWWKz9K3xI4dO4a9++67AwAGDhwYbXPMMUfY1fJD1QuuYSqnAHD++eeHPXjwYADAOuusE20amL3CCisAqAR9AkDnzp3D1sDQPN6emefo8MMPj7ZZZ501bN6L0rKtA8APP/wAANhmm22iTQ9ZPPHEE2FzXev9J+3+lAWq6PAtGqisVe1TEQOQdc5Unenbty+ApMpx6KGHhn3wwQcDSO4/VRepZL388svRpveaLBSttGz96qW4+eabw+ZhGt1/f/zxxxSf+cgjj4StihbXXB73jmlB54V8/PHHYa+55pr17A4AKzrGGGOMKTF+0DHGGGNMaamZ64qBw9tvv320XXnllWG3b98+7COOOAJAMthqttlmC5s5KaqlMM9ShtV8PgykBCpynOYGYtAmAFx//fVhNyQppsmcCiVdDcbWwMIll1xymv9Wc6gWLMzAXQYdA8lgZF6j77//Pto08Jdz+csvv0Rb1tI6A0uPPvroaNPcHA888EDY66+/fuJ3gPQAujR3B1DJuaOur8UXXzzsFVdcMezu3bsDyH782lcGbjLfD5AMjGQwpwZozz777GEzj5AGgO61115ha2mWLAMn1fWh6eaPP/54AMDw4cOj7fbbbw+b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C94TPvzww2jbZJNNwm7dunXYnLfZZpst2uaee+6wF110UQBJxVXvRcxZpnPGt2wgfxWO8/f9999H24MPPhj2kCFDACSvT7du3cKmoqMqf5Hg9aXaAgCPPfZY2FQ6GDQPAB9//HHY3Ks656r463WpporVmrRg4mOOOSbaqCICwMiRIwEkD9jo/1M913247bbbht2U70IrOsYYY4wpLX7QMcYYY0xpqVswcloejoZQiUp/hzLv+PHjo01lzllmmaXxnW0C1XJTMOfKddddF23quuLvab4DyrEAsPfeewNI5vnIOy29jpX9Pvvss6ON7o6//mxLhP3XAE5FgyBbCro+04Kt77777rAvvfRSAMk5PfTQQ8OmS0sPExQJjlXHpCVm6LqiCxwAttpqq7AZ7FtPFw77d/PNN0eb5kbRPTXHHHMASJbFGTt2bNi8/+j9Y9NNNw27d+/eU7Sl5TmpJ/r98MYbbwAABgwYEG1LLbVU2Aycvvfee6Ntjz32CJv7s4jufqDSry+//DLa3nzzzbDpetxss82iTd2stBdeeOFom3/++cPW+xPnUg9LaE675lAtTw7djAxRAZKuNYah6J68/PLLw+Z9R/fCWmutFbb233l0jDHGGPO3xw86xhhjjCktNdfgVYJUaVuj/vkzaXJ6NfT/eQKBpRKA5AksjWanvJuFjKljfe2118Km9H/BBRdEW9qpCc1j8cknn4StUfNFQefqrbfeApA8lVMtJ0JLhPOj60hdh3rapcikuQOASgkWlYb11ANPq+hJSS238uKLLwJIL9tSBDh/elJTJe40uXudddYJm65vdR1lgd7T6Ea86aabUv9fr+8hhxwCANhtt92iTU9A0rWs459nnnnCpvTf0DXJGr2n6P1v//33BwAceOCB0bbjjjuGzWuhJyG1hAfJ+/SYonPJE8LqzlE3aloJhDR3U7WyCGlhDrUKJ6jmrtJTw/379weQdE3xOxGouF4ffvjhaLvtttvC5lxvvvnm0VatHIRdV8YYY4z52+MHHWOMMcaUlpq5rigtqbuKEiQAPProo5U/mhIVn5YwUBMKNpRi//777w9byynoyYNakHb6CACOO+64sPfbbz8AyVTq2n+O7+KLL4627bbbLmxK53mfGtCxqgx59dVXA0jOdUs8iaSojE4ZWeXkJZZYIuwiuWkI+6/rTPu/zz77hE3JX08n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+safdn/NGu6pZ555Jtp69eoVtvaF9wpVTPSwDdXFddZZJ9pWX331sLfbbjsA2aiMep966623wt5ll12m+FlVtFW9Ynu1AxpUv/UAS1ofXnzxxWi75ZZbwl5ooYXCnlavhxUdY4wxxpQWP+gYY4wxprQUxnWVFnhGFwGQlMkGDBgAAJh33nmjLe/A3bTAt++//z7all122bAZhKzSpeakee655wAk5bp6uT707zDoD0jOBWXWs846K9p69uwZ9rTK3Xm4BjSQTaXZ/fffP2wGIy+22GLRpmPiteA6BJLlMA4++GAAwFdffRVtzL0D5F9AM62Eh0rn9Sr9oH+T+1eDumt5bdJych111FHRpoG7e++9N4BilcDQvjAIdMSIEdGma61Hjx4AgLPPPjvaVO7nfUfXdJHGyvWp90ctGky23XbbsPfdd9+w6dKp597i3/riiy+iTYN1s0a4pgAAIABJREFUjz322LB5r9T+ac6uyy+/HEAl3xGQPAzB0ADNc5XFWNUdxbWiIRaae2m55ZYLm+N7/fXXo23RRRedwtYA8jFjxoTNg0carK2udf0su66MMcYY87fHDzrGGGOMKS25uq7Scs8AwIknngggmfZ7o402msIu0qkIHQtl5M8++yzaNKdOWp4HleAYuV9PaZl90XwPJ510Utiap4Onknbfffdo07mYPHkygGTZC7YBwMwzzwwgeWora3cO50cj/Q844ICwN9lkk7B5WkrnJC31+ZxzzhltO+ywQ9idOnUCkDx1sfnmm4et+TFUnq8X7L+6O9RlxNOCWe8vXR/c/5pbqrnuaN2TKrOfeuqpAJKn5tS1fPTRRwPIv6yH7pknnngibJbA0eunbhy6lPXUlebJKTqcNz1VpvuW+0tPmum9JI8wBvaZ5W8AYIYZZghbT/ixxIaW2tD739ChQwEk19yBBx4YNk+AZrEm9dqttNJKYdPNrSeh77rrrrDXW2+9sHmvU9e05t/htdL9qWEot99++xT/39yyElZ0jDHGGFNa/KBjjDHGmNKSi+sqLa04I80B4OqrrwaQjCrXhF5MXZ6H7F8NldYouXbv3j3aVAbk+JlWG0ieoLjqqqsAJFOc67Wq5lJpDryWTAYIAC+99FLYdFcBwF577QUgKe1//PHHYZ933nkAgBdeeCHaVJpdZpllAACLL754tKkbbI455gi7VvIs/75G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AHTq1AkA8M0334RP00DaLmP22Wdv9rErGmLUYuLjjjsubKY2qIcElOYUAOaZZx4AJb0OIBlav+OOOwAkw/SVknjPSlddddVVYV9++eUAksWgmno9/PDDAQDzzTdf+BguB0rniiFoIBmaLRc6VywAP+WUU8L3yiuvhJ2WGlTZfS3G3WyzzQAA559/fviobQEAp59+euLvgORarlTqSmXjuSaBUupJtbn0WJnS02vykEMOCbtt27YAir/P6Fj1Omca7rTTTgufpra4LrhpA0henywGLXp8Wamr+o6LqWMtQNfU66RJkwAAK620UviKbOuRhY5fU6tMver63nTTTcPmfafoAmSdM21RwfvGFltsEb6//vorbH5/3XLLLeHT1HMe43NExxhjjDE1i3/oGGOMMaZmqVgLCE0DDBkyBEBS56FaNAE0HKey6typobtX9Jg1NHfBBRcASIbmVOdi+eWXB5DUseBOCqAUutTUA8PNAHDkkUeGzZBmc8PQaW0beBxAUrPi0UcfBZDUNtLUDtFdMVOnTg2bu5Eq2ZGY49IQ9sCBA8NWzSamCc8777zw7b777mEzNaKhZU3zvfvuuwCS4y+Xpo6es48//jjsfffdFwDw3nvvhW/ZZZcNW9OMnLe11lorfLprZYEFFgBQSkECyV1le+65JwDgqaeeCt+aa64Zdp7Xr5473TXFYwaAddZZB0AyHan/f8899wBIprv22GOPOu9bn3ZSJdF7zZdffgkAeOCBB8Kn64Lnn/choJQOB0rjKqJ7uX4md+cAyXut7pZKg8eqY1YdnSJ2yzUFPc5Ro0aFzfur6gHpDjO+rppSV5999lnYw4YNAwDce++94dP7C+9Rp556avg0dZymY9ZcHNExxhhjTM3iHzrGGGOMqVlyTV1paEvTMEQloIveAUD0ODR0T7I6sp911llhcweE/m3v3r3DPuywwwAAK664Yvj0XFHIbb311gvf4osvHramIcoFP1+r5xkiB5K7PthVVkXIvvrqq7AZehw7dmz4VHzvoYceApDcNZR3GJZzocKGGvrX83/ggQcCSO7UGTNmTNjcraPCbBq65fzqTqbmrm8e/48//hi+I444ImymAXQdHnTQQWHr+kkL7acdn/o0ZcvXp10feaPHpCmOrbbaKuzbbrsNQDJdrmPm/3P3DlDZtdgUNIzP3UQquHbttdeGzXPE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7965HktT4FzpPPXv3z/syy+/POxNNtkEQLIjvV5rn332GQDg2GOPDd8TTzwR9sILLwygsukSftZZZ50VvmuvvTbspZZaKuxu3boBAO67777wcacZUFqfU6dODd9mm20W9h133AEAWGCBBep8fjnRdClTi3feeWf4ll566bAff/zxsHn+BwwYEL7WrVvneqxFkLbTCCh9l+k9hfckoPS9Mnny5PDp9a3XBdO3zf1+TLv+eJ8DkqUZ9elYcax6n3nzzTfDZkpTvzOcujLGGGOMyaBZEZ206I3+2v7555/D/v3338O+9dZbAQAPPfRQ+LQIj+gTx7777hv2DjvsAABYffXVw6efW8Qvfo1evf/++wCAL7/8MnxdunQJuxr1IdLUcocNGxa2Fnvy17dGefTpme+hT2H6vieddBIA4JhjjgnfHHPMEXae0Tlds/o5d999d9innHIKgGzND86fPpEp/H99ItHojz5ps+By3XXXbcQoGo+Olce9/PLLh48FykDp+sk6V0UyYsSIsLXY/8wzzwyb86dPvOuvv37YnJ/x48eH76233gqbOld530f0mnjnnXcAJCMejEwBwM033xz2csstBwA4//zzG/xZafOf9/g0SnHUUUcBAI488sjw6TWvT/dDhgwBABx++OHhW2eddXI7zkqQFr0ZN25c+AYOHBg2I+ZfffVV+H744Yew+V2pUWKdS41u3nTTTQDKd/3q+6iaf1qRclZ2h+NjhwAAOPfcc8NedNFFAZR3fTqiY4wxxpiaxT90jDHGGFOzNDp1lbafHwDGjh0LIFnUN3r06LA1tcHCS9Xx0DQV0dBev379wn7ggQcAALvsskv4dtttt7BXXnnlsOvTdCkXGqZlSH3jjTcO37zzzpvr5zeFtHAjQ50AcOGFF4atoVMWhmvqo2/fvmGvsMIKAJKNTJ9++umwdS7TXq/rqlxw3WpbDtVRufHGG8PmXGqBsIbO27ZtCwBo165d+JZZZpk6r9c512LSxRZbLGxqoVQyncmQsKZztAiWqbWiW5SkFTCedtpp4VNtmBNOOCFshtRVh4UFvEApPdTcFgvlhGkcTZf27NkzbL2n8W+yGgGnzVUR86efucgiiwDITmdoAe0zzzwDILmB46mnngp77rnnrvP+1YiOT4ttBw8eDCC52UFTx7zuuGkFADbffPOwWbqh3y9KHoXbPNe6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9fHV+vr8999/a3J8s84660xRbK04omOMMcaYmmWGEZ1ykiUuRNLEq1w/ZKqRhopfef2aIuD6zFqneQtCGjM9Df3Oz+3zc313Y4wxxpgCyTWik9YiAgB++OEHAMnuwvPOO2/Yc889d53Xz0xPIWndk2em8Vcj9XXH1rXK+VMRxWqK7vBY00QegZL4YS2tOR2r2jNC50wFIavlvGRFyf/66y8Aye702r2b99c02X5jyoVeZyoe3LdvXwDJ9XvppZeGvcACCwAo7z3TER1jjDHG1Cz+oWOMMcaYmiXX1JWGRu+8886wDzzwQABA+/btw7fiiiuGvemmmwIADj744PC1bt067HL2FapG3nnnHQDJ/mALL7xw2NWSBslKfaTREtNwaekAALj++usBAKNGjQqfnotlllkGAHDyySeHj+FYoJj50+ObMmUKAGDcuHHh++abb8Jea621AACLLrpo+KplzTUEzltW6Hzs2LEASucBSE/dzTPPPOHjPQkA5pprrrCLXMvaP27MmDFhDxgwAAAwdOjQ8K288sph77vvvgCA/fbbL3wLLbRQ2NUy1/XdU6rlOE0SXn/ff/99+HbdddewuW4HDx4cvgUXXDDsPK4pR3SMMcYYU7P4h44xxhhjapYZ9rpqrrKnho4333zzsLkbQEOrGka+8sorAQDjx48P33XXXRc2UzpNTWHloeypaQ6GXOs7Pn2Npg66desGADj66KPDd8ABB4Rd3/s2RxlZw8VZuzoYehwyZEj43n333bA577PNNlv4unbtGnbbtm0BAK1atQpfY+Yyb2VdHv/EiRPDd+KJJ4b93HPPAQD+/PPP8Om54rhHjhwZvnbt2oVd31ibsz6z5k/HcuaZZwJIpis0XMw03cCBA/WYwm5uyqBc85eV2vj4448BJEPjzz//fNhvv/02gOxdcxwfd88BwBFHHBH2hRdeGDbnWs9JHsrIenxcn2+99Vb4dtppp7CZMuDuqulfz3Wra7p///5h1ze/M1qfaXopM/ITXX/8fE3NKRx/1vyXa302RRk5SxtG7bTUakO1ubI+qzHpnjyUkfX4p02bBgA4/vjjw/fwww+HfffddwMAttpqq/CVsxzFysjGGGOMmanItRhZf3Hqr1f+etNf+SussELYF1xwAQDgkEMOCZ9GNPjrcI455ghfEUWBevxa7Pj3338DAJZbbrnwpf16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fuq0qHYLywGA6h8f54X3efUBwL777lvnNdWYptTvt7R0rv6/fn/xu2DPPfcM30svvRT2Tz/9BKC0O2n698oTXTN6f9e56tWrF4CktpF+VzB1rvfPnXfeOew85tIRHWOMMcbULP6hY4wxxpiapZD22PWF2Rgem3/++cPHnT5Aqau5piG0wrvoMCbDrNqd9oorrgibLS403M62FgAw77zzJv6ukugxjR8/PmwdC9MUWeeZfg1NMt0FlHbNfffdd+Fr7vwxnD9y5Mjw9evXL2yKc2mKSsPFGpJlSkAFAVUQsW3btgCSabJBgwbVOZallloqfM1NzdUH19znn38ePu5eAJJhZgqtaVsEvSa5m0Il2lUQkTsoVfZd5zrP6y9LJE3XEtenpgt0XTP0r21XdF1wN099InRFwbGoBL92au/Tpw+A7OOvr8VJEej8/PHHHwCSgpu665ZCo0Wkg5tKfec6bddgVukDd7Pq/alSpKXwgaR449577w0g2eJo8803D5tj0destNJKYeeRhnNExxhjjDE1S64RnSxtmIY+SegTNxsJqr9an0go933qqaeG77HHHqvzt/rE2aZNm7CLeHrk/OivaerdAMmIBPWPso6T49OmihoRyLNwnO1FgFJRJlB6ytenEI0Y6vpaeeWVAZSeTID06Ayb1wFJnRo+ie26667hy7vdBZ9uzz333PAts8wyYV966aVh80lf51qvz08++QRAKXIKJJt6smmrFiVXqhhSI0dqsy0HUIoIaLEmC6yBUjGkFlDq9UudD24aAIDll18+7CKvT6C0MeDyyy8Pnz7da2FnGtVy38zSC2OzTr0+tcVHS2/nwbWWpQnFTRK6PjUizrnW12v0R8kz6qXXAbMQAHD99dcDKLUyAoCHH3447DvvvBMAsN1224Uv7zl1RMcYY4wxNYt/6BhjjDGmZil76krDoiqhrxLllNvP6p7LlIOGK9955506f5vVQqFSoVk9ftWZOf300wEkw3WarmEa47TTTgufFrsWUWTHsai2jMpyr7jiimGzWLW+ED61awBg8uTJYTN1Us4UFud8tdVWC99hhx0WNtsWqF6MpmZU5ylNZ0XHyjCxdlRWGMZVifo8SGsxouFuXV+axuJa1TGpTg51MLTYWgu7mVKoZAohbX71/vDZZ5+FTf2nYcOGhU/TyEwt6zWnnaSpWaLnUothi0DX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AIBp06alvo7X2jzzzBO+al/L9V2fuj6L2B7LY9F0wDXXXBP2qFGjwn7llVcAAD/99FP4tHCXx63pngMOOCDsY489FkByzRZ9ferx8/rbbrvtwtenT5+wu3XrBqA615yex8ZsYEj727Q5BdLvJU0pUG8KekzvvPNO2MOHDw97v/32q+gxNQRHdIwxxhhTs/iHjjHGGGNqlkJSVwxpaWj8gQceCPuuu+4CAGy00Ubh404DoLTr6sEHHwzfQQcdFHYeIU0es4bu9HO+//77sEeMGAEAePHFF8P3xx9/hL3ZZpsBSB4zd0JM/77VSJrOkYZT00L/1bhTIit1cf/99wNIplPPPPPMsJk6/eqrr8J33HHHhX3yyScDAO69997wZYWhK0Va6uaTTz4J3w033BA2Q9K6ZpXFF18cAHD44YeHb6uttqrz/kAxY01bn3r/4Ly+++674Vt44YXD7tKlCwBgwQUXDJ+evzyuT54nPXYeBwCss846YTP1lKU3xmN96qmnwnfttdeGPeus//+2f9FFF9V5TVHoOmFqdKGFFgofr0mglLqqRrLWiaYkW7VqBaA0D1m8/PLLYfOaA4CVVloJQPHX1kcffRT2P//8Ezavm6LToYojOsYYY4ypWQqJ6PCJ/7TTTgvf/vvvH3b79u0BJH8ltm7dOux1110XQDKKkvcTCZ8Ix44dG77HH388bNX5WWuttQAAa665ZvhU84K/eN96663wrbjiinX+v+hfxHpONSLz448/AkgWg3/++edhf/jhhwCSEY9jjjkmbBabzz777OHTp588C3ezojjDhg0L+6STTgIA7LnnnuFjlAYoFXnqU5au37PPPhtAMoqgOjuVIktZ9tZbbwUAnHvuueGr71rSsZDXX3897EceeSTsjTfeOOxKRSf16fiXX34BANx0003hu/vuu8MeN24cgOQ1qRHVJZdcEkByzrt37x62FmGX+xrVcay33npNeg9eqxoF0ugdI3aNKZzNGz0W3utXXnnl8H333Xepf1st8Jh0Hen9/T//+U/YjK5ts802dV4PAL///jsA4MADDwxfu3btwr7zzjsBVHYDDteHfifrd6GuH0ZHs44pTXk+b+VuR3SMMcYYU7P4h44xxhhjapZCU1eLLLJI+Nq2bRt2mn6Hpk4YslNfHuEuff8nn3wSANC7d+/wHX/88WFrGk6bmaXBlIJqWzAdBAC33HILgGQxXqXCtVnFdFoMOHDgQADJRm5du3YNe9lllwWQLKa77bbbwt52220BAC+99FL4VltttbCXWGKJsMudxtJ0DlMYQLKwlqmL888/P3xzzDFH2Ex56PrQ88bUic5ppcLMekwqoX/zzTeHfdZZZwFIzq+mhunXMPyJJ54Y9pdffgmgpBcEJNNEmjJh4WW5xpylTaWFxaeeeiqAZGq1U6dOYbPwWlOrjz76aNjcLPDMM8+E77777gtbU35Ms+eRbtX3bExqifo6F198cfg0zcDrN+/7Z1PhsUyaNCl8mmZM2xhSdNNSHtOUKVPC9/zzz4et19eGG24IIHmcmhLivfLbb78NH8sh9LMqCT9T7ymffvpp2Gmpt6WWWqrO64GSThL/DgDmnXfesBdYYAEA5b2mHNExxhhjTM3iHzrGGGOMqVkKSV0xZMrdLUD9EtgMdwElfRqtys8jnKfhRO4w0XTTCSecELaG7hq604R6LECy0ytTKpray3v3CudEQ69XX3112Bqu5w4C6hkBydDjBRdcACCZgtIdTJdddhmApI6Hpgb22GOPsLPaEDQVXVNvvPFG2BpavvLKKwEAiy22WPjSQudZ71sE/Pyvv/46fHp96a4ozpUes+6q4lrr0KFD+DQ1yzSI7jrU1OaFF14YNtOvzU0ncH2qto+m47imgFKaUFNrmlrl+HVODz744Dqv1zD9PvvsE7aei2effbaxQ5khOieaGrjjjjvCZkg/K808evRoAMnj13YSnTt3BlBd6SodC9eiHv9OO+1U5/8HDRoUPtUkY6f2So6P63PixInhGzBgQNi661T1mYim8fv27Qsgee/bYIMNwub6rGRbGZ5LTeEvs8wyYb/22mth8ztEU6O664+aY9pCYumllw6bmmXbb799+Jo7Vkd0jDHGGFOz+IeOMcYYY2qWQruXZ7UFYJhM/19DgtxVoMJk5QrjZX0mUwLcsaDH2ZDP19Dsn3/+CSCZutGdKgwJ5h161TA5UwLnnXde+C6//PKwzznnnLC5A0d35WgaiFXzmvrSNAMFr3R8+l55oumKHXfcMWyV26fgVX1zqv+vncyZBstbJFDXKtendlx///33w9YdfGyxomlKFSfj9aXpEE1tUehR149K3Dd1t9D06Gv/+usvAMlWHNq2giKUQGlXmYpw6jFxDej7c82qX7t/a4sITWmWGz2n48ePD1uvJU2pp72OMAULAFtuuWXYvO6qKXWlx//NN98AKO3uA5LielzrmrrSXXVM8xTRSkfnRndK9erVK2xeK9qi48gjjwx71VVXBZAcv6aJeN3r+PLeiZWWutLSBE2z8Vr77LPPwqdpqN9++w1A8jtF20mwPERLIzT13JR164iOMcYYY2qWskd0srRF9Ncnn6j0iVJ/0VMGXV+jxaqUY097Siknevx8ilX59/qe+PVc6C9eao7oL3p9oq5PQrs56Jj0mPr16wcg+ZSkEZ2ePXuGzbnS+VG5euoIHXXUUeFTOXQ+FayyyirhY1uP6d+33Og51Sd2jb7UN69phb963jiXGgUo11zqmmLkBShF2dh+A0gWszOKA5SiVxrdeuKJJ8JmJGHMmDHh41O2/q3qYKywwgpha2uPco2bhc96nrXAk203gNJc6vjSyNJe4TnWKN3HH38cNnV6pn9dOdC1r8XgWuyZhkZMOdcaMdY52XvvvZt9nOVG70uMDusGFG238t577wFIbiDQKFuRkSq9d+j1P3ny5LCvu+46AMlGq6effnrYm266KYBSUTJQKiAH0iOSlULPrUZ0NJJF/akJEyaET++V1HfS7weNCLPdxxlnnBE+3ayjOnUNzeQ4omOMMcaYmsU/dIwxxhhTs5QtdcWQ1ttvvx0+ldjXMNfQoUMBJEPDqo/BMLiGa1944YWwKdev4WSVm9aURGPRUJiGSxkO189UbQMNOTO1oeF+DS0zJLvGGmuEb6ONNgqbYeb6Qu9NQcOdqjPCYkfVflBtkTTpfT0+TcMxjaIFvto6g4V3WgysOgp5jDuNxsjGp6VhNZ2qa5mdzLUTdR5jevXVV8OmTo62mmCIHEiGftmignojQEmWHiita+24rJouLBLUc6LFls1pd6GpOS3GZRi7Y8eO4WPRMZC85ptyrtPSAJru07lcfvnlG/3+DUXPl6bJ9V6RBrWrAGDfffcFkNT7oXYJAKy++uoAkunmIgp3da6Ay6shAAAKA0lEQVQ1TUXNH11/uqZ4r9ECeU3TFpm60hT4qFGjwlbNN97r2OoHSGqHUSeOrWiA5Pcn56qI1JV+P2qxtaaTqKOl16G2kOG9QtecplZ5Xeu1Tm0oANhuu+1Sj2dGOKJjjDHGmJrFP3SMMcYYU7M0K3WlIUKmPjRFo3vn99prr7B79OgBILlTg9oyQCn189xzz4VPQ+s77LADgFIIHkhW4Gsaq7HS/DomDaexU7nu7lDZcQ2d8zNVWyYtTaU7kbR7dx6hVx6TnjOVze/WrRuAZIsLPXdq//DDDwCS4XJNXZ188skAkjvJtEUA0zy77757+CopZ06yOmGn+fT4mEbV88d0AVDSwSjnPPJYdKecdofn8e23337hU+0RTQMxZaDh5rTUq4753nvvDZu7KXRN77rrrnXef/r3bQhZsvHciaE7iTSd0ZR0VVb3a3Y91/nVnVbsyD796xpL2vrTc67vXd/49LwxJaXdy3nPBErrRrW7KoWec9WJ0fNLTRXVUdHShhEjRgBIarrksdOvMXCd6+4v3SGo3wWcCz3/1JYBgPPPPx9AaXfx9BSRsiK6PpkCBYDNNtssbJamaOr1sMMOCzttV7W+L1tk6K5s3WHaFBzRMcYYY0zN0uiIjj45aIEin34effTR8LVv336G76W/4vTXOYs8GTkASr8SAaBt27YAkr8I09RCm4se30orrQQgWVT78MMPh62FY4yOrL322uHTiI+Oi2hTzDyfSDTipr+YqYis86DaBiyQA0rnQIuxNaLDYjstFlQVWxYpa4Fe3hEdPgXp+tWnZF0/LKJ/6KGHwqfRkw8++ABAsgD5wQcfDJtP/FoMqsrETZlfHr82Orz11lvDbteuHQCgf//+dY4DSEZP056o9Emb/htvvDF8WqTOtXr00UeHT9d/uQpbNcrL49dCxMZ8Tlp0Ut9/yJAhYXN9ayNJboAAkoXJzVm32hSVx6IFuHrMjfkcnhdVhtaNFUUW6+qYNGJH7RWgFLXU6F1aU2dtFFw0aWr+W2+9ddhbbbVV2DwHGpl59913w2YRs96rqwVdO/qdpcrOw4YNq/M6jUTzPfT+pBEtNpDWtaKbVayMbIwxxhgj+IeOMcYYY2qWRqeuNGyksvEsNtZ0VVZhXVoa4YEHHgibRVwammfqCEimVKZ/z7zg8ev4VIeiPjTMnhZ6q1Qxrp7T5ZZbLmxKlGvRqaZr1M+UjEp4a1NOjk9TY1999VXYLMLLe87SiolV22nw4MFha+sEFkN+//334dPQKs8bi66BZDqShfmaZmLbD6D+tTCjsehr9f1ZmJtVKJvWNFVDwzrWK664os4xa7sHpjm1cD3v9ctiaj1OTcelNRLV8bMpKFCaXy2mHz58eNi8l1111VXh0/PanLHqMbGVAVBKDeqcctMG0LjWM5xXTferppcW7lYaTRdvscUWYatmGouNNXWj3xVM02o6WK/1IlJzaWsuC86fHrOWBrD1hzaaraYGrETvRap5Qx0xvX9oypnF1tri5LHHHgubReiq/aQ6YE1JjTuiY4wxxpiaxT90jDHGGFOzNEtHRyuhqZNCvQsgW5abu3FUp2LixIlhU85eJeqLkChPo6lh6yK1D5SNN944bN01xnC9hs61Y67+LTWNsvRSGDr/8ccfw6fromvXrom/A/JJfej7v/nmmwCS2ke6PlXnaeeddwaQ7J6rndYpUa+pS921RZ0M3enSlHRVGlnriCkBTQ3o/Cjc4aOpDd1VRc0P3UmlO8gOPfRQAOXbfaTo+2hqiqm5yy+/PHxHHHFE6uu4Q+fZZ58N38iRI8Nm6kpTOJrS5fosV7pK0TWpu9bYWkbD9ZoO1TQx9Y/0vXT98XU6p7oWNt98cwDFp3v0mPT6oq3aTDo+Xpc6P9Vyf23IcfBvVBtId3jyvqvXVzWmrvSYVMeOWnOq3aVlELx/6Pe76rutv/76AIA+ffqEr7n3Gkd0jDHGGFOzNDqio7+mVLmRmgjUuAGANm3ahK1PJ3wSUW0KVZHkr8Mi1HIrQVpTTNWcyePphL++L7300vCpmi+bxqnej86fFrNyXup7yrjjjjvCVhVQ/mLPA33KVZ0UPh2ocqlqp2jEiSqeqvypT/yMBGVpN2mRHWluRJLnWnWONOL20ksvAUhqd+j1qeeCWlfUAwKSxa6nn346AOCEE04IX5rOUx7Xp54nbRpIbQ2NsmlTVV2LXAP6xKjvxaaDjNwByfGTPManx6nK1JdccgmA5PzSBwB33nln2IwE6cYIbUDKwmotINdIGO/R1XR/Tbs+tNhY7498+teNBZMmTQp70UUXBVBd40uDG0AA4P333w+b0TuNOFaq0XFT0fnjPZaZGSCpE8TsgG5Q0aalvO/oNdnc+6cjOsYYY4ypWfxDxxhjjDE1S7OKkTXFwqZsO+64Y/hGjx4dtobe2NRSWyTkXZhajagstup85AFD5houZysG/X9F56EpoUMtxtXUJTVpVCciD1RviZ+pqTlt20DtG6CUplEdDy1cru9c5FE4z7mYa665wterV6+wx4wZAyDZPJBS8kDy+mJKQFt4aEqTRdZp6cq8SUtBAaUGseuuu274vvjii7A1NcfWB5qm/H/t3c2NwjAQhuFB4udOAxSCRDMcOHKiFxqhHhqgAX4Oexrz7coJ4MQx8b7PKYp2BYOcEGbs8Wq1CsdeEmjaVHAo+vpeJvYeRmbP+6SZ2fF4DMeHw8HMfr9n3eDUJxvvdrtwTnvWjIV+Z+hkVC8Na+8VvZeORVPp30uOWq6L9cH6Vj4utQyrfXDW63Xr//t10ed9lIwOAACoFg86AACgWpO2lTPX6/XjxfuaYtTUs/LUVqmZ5IvFYmJmdrvdBmtOoGU+3/Va+7DoahJfjZa6I/t8Ph88PuWxXi6XcE5Xfez3ezP7Xdr6pHTQFl9s2wezZ88KHXM69vWz9tU6WuYasrTh8T0ej9b4NLXrK6i8H8tfuoLDV+ssl8twTkti/rnk6t0xnU4/Hp+xbWP0/emx/42e66uP0Tu6XH96z9T3qf2tXm2B4+NWSweqa/xt4zMXjc+vVb1mm2JN4ePzfr9nic9j0ZWem80mHPu9SncB15Jt13vRbDYr+v2Qm49PRUYHAABUiwcdAABQrd5LV2NQunTlK6y0CZ2mLn01Wuqs89KlK6cxx9rNp6bQ340v9vpNbe9j50ut/nu3NND0+aYYMtaU0tUrpbczUDmuv6ZpADG5S48lSlcqNtb7jDV36cppHOfzORyfTiczM9tut+Gclua6xkrpCgAAoCJkdApq6lPiE2ZTf6V/S0Ynl/8SX6lfzLnlyOh8E8bnuOXO6MS+c3WSvR/rZOum7HMKMjoAAAAV4UEHAABUq7V0BQAAMGZkdAAAQLV40AEAANXiQQcAAFSLBx0AAFAtHnQAAEC1eNABAADV+gEAUkmuGKQu1gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Randomly select 100 data points to display\n", "rand_indices = np.random.choice(m, 100, replace=False)\n", @@ -157,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -215,10 +228,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ + "def sigmoidGradient(z):\n", + " g = np.zeros(z.shape)\n", + " A = utils.sigmoid(z)\n", + " g = A*(1-A)\n", + " return g\n", + "\n", + "\n", + "\n", + "\n", "def nnCostFunction(nn_params,\n", " input_layer_size,\n", " hidden_layer_size,\n", @@ -316,14 +338,49 @@ " Theta2_grad = np.zeros(Theta2.shape)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", + " \n", + " a1 = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + " \n", + " a2 = utils.sigmoid(a1.dot(Theta1.T))\n", + " a2 = np.concatenate([np.ones((a2.shape[0], 1)), a2], axis=1)\n", + " \n", + " a3 = utils.sigmoid(a2.dot(Theta2.T))\n", + " \n", + " y_matrix = y.reshape(-1)\n", + " y_matrix = np.eye(num_labels)[y_matrix]\n", + " \n", + " temp1 = Theta1\n", + " temp2 = Theta2\n", + " \n", + " # Add regularization term\n", + " \n", + " reg_term = (lambda_ / (2 * m)) * (np.sum(np.square(temp1[:, 1:])) + np.sum(np.square(temp2[:, 1:])))\n", + " \n", + " J = (-1 / m) * np.sum((np.log(a3) * y_matrix) + np.log(1 - a3) * (1 - y_matrix)) + reg_term\n", + " \n", + " # Backpropogation\n", + " \n", + " delta_3 = a3 - y_matrix\n", + " delta_2 = delta_3.dot(Theta2)[:, 1:] * sigmoidGradient(a1.dot(Theta1.T))\n", "\n", + " Delta1 = delta_2.T.dot(a1)\n", + " Delta2 = delta_3.T.dot(a2)\n", + " \n", + " #Regularised Gradient\n", + " \n", + " Theta1_grad = (1 / m) * Delta1\n", + " Theta1_grad[:, 1:] = Theta1_grad[:, 1:] + (lambda_ / m) * Theta1[:, 1:]\n", + " \n", + " Theta2_grad = (1 / m) * Delta2\n", + " Theta2_grad[:, 1:] = Theta2_grad[:, 1:] + (lambda_ / m) * Theta2[:, 1:]\n", + " \n", " \n", " \n", " # ================================================================\n", " # Unroll gradients\n", " # grad = np.concatenate([Theta1_grad.ravel(order=order), Theta2_grad.ravel(order=order)])\n", " grad = np.concatenate([Theta1_grad.ravel(), Theta2_grad.ravel()])\n", - "\n", + " \n", " return J, grad" ] }, @@ -351,9 +408,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at parameters (loaded from ex4weights): 0.287629 \n", + "The cost should be about : 0.287629.\n" + ] + } + ], "source": [ "lambda_ = 0\n", "J, _ = nnCostFunction(nn_params, input_layer_size, hidden_layer_size,\n", @@ -371,9 +437,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 0 / 15 | \n", + " Sigmoid Gradient | 0 / 5 | \n", + " Neural Network Gradient (Backpropagation) | 0 / 40 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader = utils.Grader()\n", "grader[1] = nnCostFunction\n", @@ -407,9 +494,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at parameters (loaded from ex4weights): 0.383770\n", + "This value should be about : 0.383770.\n" + ] + } + ], "source": [ "# Weight regularization parameter (we set this to 1 here).\n", "lambda_ = 1\n", @@ -429,9 +525,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise neural-network-learning\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Feedforward and Cost Function | 30 / 30 | Nice work!\n", + " Regularized Cost Function | 15 / 15 | Nice work!\n", + " Sigmoid Gradient | 0 / 5 | \n", + " Neural Network Gradient (Backpropagation) | 0 / 40 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 45 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[2] = nnCostFunction\n", "grader.grade()" @@ -505,8 +622,9 @@ " g = np.zeros(z.shape)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", - "\n", + " A = utils.sigmoid(z)\n", + " g = A * (1-A)\n", + " \n", "\n", " # =============================================================\n", " return g" @@ -610,7 +728,7 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - "\n", + " W = np.random.rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init\n", "\n", " # ============================================================\n", " return W" @@ -830,7 +948,7 @@ "\n", "# Now, costFunction is a function that takes in only one argument\n", "# (the neural network parameters)\n", - "res = optimize.minimize(costFunction,\n", + "res = opt.minimize(costFunction,\n", " initial_nn_params,\n", " jac=True,\n", " method='TNC',\n", @@ -916,7 +1034,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/token.pkl b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/token.pkl new file mode 100644 index 000000000..0998c2ced Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/token.pkl differ diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/.ipynb_checkpoints/exercise5-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/.ipynb_checkpoints/exercise5-checkpoint.ipynb new file mode 100644 index 000000000..d48b7d90a --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/.ipynb_checkpoints/exercise5-checkpoint.ipynb @@ -0,0 +1,927 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 5:\n", + "# Regularized Linear Regression and Bias vs Variance\n", + "\n", + "## Introduction\n", + "\n", + "In this exercise, you will implement regularized linear regression and use it to study models with different bias-variance properties. Before starting on the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, [`matplotlib`](https://matplotlib.org/) for plotting, and [`scipy`](https://docs.scipy.org/doc/scipy/reference/) for scientific and numerical computation functions and tools. You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize\n", + "\n", + "# will be used to load MATLAB mat datafile format\n", + "from scipy.io import loadmat\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submitted Function | Points |\n", + "| :- |:- |:- | :-: |\n", + "| 1 | [Regularized Linear Regression Cost Function](#section1) | [`linearRegCostFunction`](#linearRegCostFunction) | 25 |\n", + "| 2 | [Regularized Linear Regression Gradient](#section2) | [`linearRegCostFunction`](#linearRegCostFunction) |25 |\n", + "| 3 | [Learning Curve](#section3) | [`learningCurve`](#func2) | 20 |\n", + "| 4 | [Polynomial Feature Mapping](#section4) | [`polyFeatures`](#polyFeatures) | 10 |\n", + "| 5 | [Cross Validation Curve](#section5) | [`validationCurve`](#validationCurve) | 20 |\n", + "| | Total Points | |100 |\n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## 1 Regularized Linear Regression\n", + "\n", + "In the first half of the exercise, you will implement regularized linear regression to predict the amount of water flowing out of a dam using the change of water level in a reservoir. In the next half, you will go through some diagnostics of debugging learning algorithms and examine the effects of bias v.s.\n", + "variance. \n", + "\n", + "### 1.1 Visualizing the dataset\n", + "\n", + "We will begin by visualizing the dataset containing historical records on the change in the water level, $x$, and the amount of water flowing out of the dam, $y$. This dataset is divided into three parts:\n", + "\n", + "- A **training** set that your model will learn on: `X`, `y`\n", + "- A **cross validation** set for determining the regularization parameter: `Xval`, `yval`\n", + "- A **test** set for evaluating performance. These are “unseen” examples which your model did not see during training: `Xtest`, `ytest`\n", + "\n", + "Run the next cell to plot the training data. In the following parts, you will implement linear regression and use that to fit a straight line to the data and plot learning curves. Following that, you will implement polynomial regression to find a better fit to the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load from ex5data1.mat, where all variables will be store in a dictionary\n", + "data = loadmat(os.path.join('Data', 'ex5data1.mat'))\n", + "\n", + "# Extract train, test, validation data from dictionary\n", + "# and also convert y's form 2-D matrix (MATLAB format) to a numpy vector\n", + "X, y = data['X'], data['y'][:, 0]\n", + "Xtest, ytest = data['Xtest'], data['ytest'][:, 0]\n", + "Xval, yval = data['Xval'], data['yval'][:, 0]\n", + "\n", + "# m = Number of examples\n", + "m = y.size\n", + "\n", + "# Plot training data\n", + "pyplot.plot(X, y, 'ro', ms=10, mec='k', mew=1)\n", + "pyplot.xlabel('Change in water level (x)')\n", + "pyplot.ylabel('Water flowing out of the dam (y)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Regularized linear regression cost function\n", + "\n", + "Recall that regularized linear regression has the following cost function:\n", + "\n", + "$$ J(\\theta) = \\frac{1}{2m} \\left( \\sum_{i=1}^m \\left( h_\\theta\\left( x^{(i)} \\right) - y^{(i)} \\right)^2 \\right) + \\frac{\\lambda}{2m} \\left( \\sum_{j=1}^n \\theta_j^2 \\right)$$\n", + "\n", + "where $\\lambda$ is a regularization parameter which controls the degree of regularization (thus, help preventing overfitting). The regularization term puts a penalty on the overall cost J. As the magnitudes of the model parameters $\\theta_j$ increase, the penalty increases as well. Note that you should not regularize\n", + "the $\\theta_0$ term.\n", + "\n", + "You should now complete the code in the function `linearRegCostFunction` in the next cell. Your task is to calculate the regularized linear regression cost function. If possible, try to vectorize your code and avoid writing loops.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def linearRegCostFunction(X, y, theta, lambda_=0.0):\n", + " \"\"\"\n", + " Compute cost and gradient for regularized linear regression \n", + " with multiple variables. Computes the cost of using theta as\n", + " the parameter for linear regression to fit the data points in X and y. \n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset. Matrix with shape (m x n + 1) where m is the \n", + " total number of examples, and n is the number of features \n", + " before adding the bias term.\n", + " \n", + " y : array_like\n", + " The functions values at each datapoint. A vector of\n", + " shape (m, ).\n", + " \n", + " theta : array_like\n", + " The parameters for linear regression. A vector of shape (n+1,).\n", + " \n", + " lambda_ : float, optional\n", + " The regularization parameter.\n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The computed cost function. \n", + " \n", + " grad : array_like\n", + " The value of the cost function gradient w.r.t theta. \n", + " A vector of shape (n+1, ).\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost and gradient of regularized linear regression for\n", + " a particular choice of theta.\n", + " You should set J to the cost and grad to the gradient.\n", + " \"\"\"\n", + " # Initialize some useful values\n", + " m = y.size # number of training examples\n", + "\n", + " # You need to return the following variables correctly \n", + " J = 0\n", + " grad = np.zeros(theta.shape)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + "\n", + "\n", + " # ============================================================\n", + " return J, grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When you are finished, the next cell will run your cost function using `theta` initialized at `[1, 1]`. You should expect to see an output of 303.993." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "theta = np.array([1, 1])\n", + "J, _ = linearRegCostFunction(np.concatenate([np.ones((m, 1)), X], axis=1), y, theta, 1)\n", + "\n", + "print('Cost at theta = [1, 1]:\\t %f ' % J)\n", + "print('This value should be about 303.993192)\\n' % J)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After completing a part of the exercise, you can submit your solutions for grading by first adding the function you modified to the submission object, and then sending your function to Coursera for grading. \n", + "\n", + "The submission script will prompt you for your login e-mail and submission token. You can obtain a submission token from the web page for the assignment. You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "*Execute the following cell to grade your solution to the first part of this exercise.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[1] = linearRegCostFunction\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.3 Regularized linear regression gradient\n", + "\n", + "Correspondingly, the partial derivative of the cost function for regularized linear regression is defined as:\n", + "\n", + "$$\n", + "\\begin{align}\n", + "& \\frac{\\partial J(\\theta)}{\\partial \\theta_0} = \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta \\left(x^{(i)} \\right) - y^{(i)} \\right) x_j^{(i)} & \\qquad \\text{for } j = 0 \\\\\n", + "& \\frac{\\partial J(\\theta)}{\\partial \\theta_j} = \\left( \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta \\left( x^{(i)} \\right) - y^{(i)} \\right) x_j^{(i)} \\right) + \\frac{\\lambda}{m} \\theta_j & \\qquad \\text{for } j \\ge 1\n", + "\\end{align}\n", + "$$\n", + "\n", + "In the function [`linearRegCostFunction`](#linearRegCostFunction) above, add code to calculate the gradient, returning it in the variable `grad`. Do not forget to re-execute the cell containing this function to update the function's definition.\n", + "\n", + "\n", + "When you are finished, use the next cell to run your gradient function using theta initialized at `[1, 1]`. You should expect to see a gradient of `[-15.30, 598.250]`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "theta = np.array([1, 1])\n", + "J, grad = linearRegCostFunction(np.concatenate([np.ones((m, 1)), X], axis=1), y, theta, 1)\n", + "\n", + "print('Gradient at theta = [1, 1]: [{:.6f}, {:.6f}] '.format(*grad))\n", + "print(' (this value should be about [-15.303016, 598.250744])\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[2] = linearRegCostFunction\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fitting linear regression\n", + "\n", + "Once your cost function and gradient are working correctly, the next cell will run the code in `trainLinearReg` (found in the module `utils.py`) to compute the optimal values of $\\theta$. This training function uses `scipy`'s optimization module to minimize the cost function.\n", + "\n", + "In this part, we set regularization parameter $\\lambda$ to zero. Because our current implementation of linear regression is trying to fit a 2-dimensional $\\theta$, regularization will not be incredibly helpful for a $\\theta$ of such low dimension. In the later parts of the exercise, you will be using polynomial regression with regularization.\n", + "\n", + "Finally, the code in the next cell should also plot the best fit line, which should look like the figure below. \n", + "\n", + "![](Figures/linear_fit.png)\n", + "\n", + "The best fit line tells us that the model is not a good fit to the data because the data has a non-linear pattern. While visualizing the best fit as shown is one possible way to debug your learning algorithm, it is not always easy to visualize the data and model. In the next section, you will implement a function to generate learning curves that can help you debug your learning algorithm even if it is not easy to visualize the\n", + "data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# add a columns of ones for the y-intercept\n", + "X_aug = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + "theta = utils.trainLinearReg(linearRegCostFunction, X_aug, y, lambda_=0)\n", + "\n", + "# Plot fit over the data\n", + "pyplot.plot(X, y, 'ro', ms=10, mec='k', mew=1.5)\n", + "pyplot.xlabel('Change in water level (x)')\n", + "pyplot.ylabel('Water flowing out of the dam (y)')\n", + "pyplot.plot(X, np.dot(X_aug, theta), '--', lw=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## 2 Bias-variance\n", + "\n", + "An important concept in machine learning is the bias-variance tradeoff. Models with high bias are not complex enough for the data and tend to underfit, while models with high variance overfit to the training data.\n", + "\n", + "In this part of the exercise, you will plot training and test errors on a learning curve to diagnose bias-variance problems.\n", + "\n", + "### 2.1 Learning Curves\n", + "\n", + "You will now implement code to generate the learning curves that will be useful in debugging learning algorithms. Recall that a learning curve plots training and cross validation error as a function of training set size. Your job is to fill in the function `learningCurve` in the next cell, so that it returns a vector of errors for the training set and cross validation set.\n", + "\n", + "To plot the learning curve, we need a training and cross validation set error for different training set sizes. To obtain different training set sizes, you should use different subsets of the original training set `X`. Specifically, for a training set size of $i$, you should use the first $i$ examples (i.e., `X[:i, :]`\n", + "and `y[:i]`).\n", + "\n", + "You can use the `trainLinearReg` function (by calling `utils.trainLinearReg(...)`) to find the $\\theta$ parameters. Note that the `lambda_` is passed as a parameter to the `learningCurve` function.\n", + "After learning the $\\theta$ parameters, you should compute the error on the training and cross validation sets. Recall that the training error for a dataset is defined as\n", + "\n", + "$$ J_{\\text{train}} = \\frac{1}{2m} \\left[ \\sum_{i=1}^m \\left(h_\\theta \\left( x^{(i)} \\right) - y^{(i)} \\right)^2 \\right] $$\n", + "\n", + "In particular, note that the training error does not include the regularization term. One way to compute the training error is to use your existing cost function and set $\\lambda$ to 0 only when using it to compute the training error and cross validation error. When you are computing the training set error, make sure you compute it on the training subset (i.e., `X[:n,:]` and `y[:n]`) instead of the entire training set. However, for the cross validation error, you should compute it over the entire cross validation set. You should store\n", + "the computed errors in the vectors error train and error val.\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def learningCurve(X, y, Xval, yval, lambda_=0):\n", + " \"\"\"\n", + " Generates the train and cross validation set errors needed to plot a learning curve\n", + " returns the train and cross validation set errors for a learning curve. \n", + " \n", + " In this function, you will compute the train and test errors for\n", + " dataset sizes from 1 up to m. In practice, when working with larger\n", + " datasets, you might want to do this in larger intervals.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The training dataset. Matrix with shape (m x n + 1) where m is the \n", + " total number of examples, and n is the number of features \n", + " before adding the bias term.\n", + " \n", + " y : array_like\n", + " The functions values at each training datapoint. A vector of\n", + " shape (m, ).\n", + " \n", + " Xval : array_like\n", + " The validation dataset. Matrix with shape (m_val x n + 1) where m is the \n", + " total number of examples, and n is the number of features \n", + " before adding the bias term.\n", + " \n", + " yval : array_like\n", + " The functions values at each validation datapoint. A vector of\n", + " shape (m_val, ).\n", + " \n", + " lambda_ : float, optional\n", + " The regularization parameter.\n", + " \n", + " Returns\n", + " -------\n", + " error_train : array_like\n", + " A vector of shape m. error_train[i] contains the training error for\n", + " i examples.\n", + " error_val : array_like\n", + " A vecotr of shape m. error_val[i] contains the validation error for\n", + " i training examples.\n", + " \n", + " Instructions\n", + " ------------\n", + " Fill in this function to return training errors in error_train and the\n", + " cross validation errors in error_val. i.e., error_train[i] and \n", + " error_val[i] should give you the errors obtained after training on i examples.\n", + " \n", + " Notes\n", + " -----\n", + " - You should evaluate the training error on the first i training\n", + " examples (i.e., X[:i, :] and y[:i]).\n", + " \n", + " For the cross-validation error, you should instead evaluate on\n", + " the _entire_ cross validation set (Xval and yval).\n", + " \n", + " - If you are using your cost function (linearRegCostFunction) to compute\n", + " the training and cross validation error, you should call the function with\n", + " the lambda argument set to 0. Do note that you will still need to use\n", + " lambda when running the training to obtain the theta parameters.\n", + " \n", + " Hint\n", + " ----\n", + " You can loop over the examples with the following:\n", + " \n", + " for i in range(1, m+1):\n", + " # Compute train/cross validation errors using training examples \n", + " # X[:i, :] and y[:i], storing the result in \n", + " # error_train[i-1] and error_val[i-1]\n", + " .... \n", + " \"\"\"\n", + " # Number of training examples\n", + " m = y.size\n", + "\n", + " # You need to return these values correctly\n", + " error_train = np.zeros(m)\n", + " error_val = np.zeros(m)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " \n", + "\n", + " \n", + " # =============================================================\n", + " return error_train, error_val" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When you are finished implementing the function `learningCurve`, executing the next cell prints the learning curves and produce a plot similar to the figure below. \n", + "\n", + "![](Figures/learning_curve.png)\n", + "\n", + "In the learning curve figure, you can observe that both the train error and cross validation error are high when the number of training examples is increased. This reflects a high bias problem in the model - the linear regression model is too simple and is unable to fit our dataset well. In the next section, you will implement polynomial regression to fit a better model for this dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X_aug = np.concatenate([np.ones((m, 1)), X], axis=1)\n", + "Xval_aug = np.concatenate([np.ones((yval.size, 1)), Xval], axis=1)\n", + "error_train, error_val = learningCurve(X_aug, y, Xval_aug, yval, lambda_=0)\n", + "\n", + "pyplot.plot(np.arange(1, m+1), error_train, np.arange(1, m+1), error_val, lw=2)\n", + "pyplot.title('Learning curve for linear regression')\n", + "pyplot.legend(['Train', 'Cross Validation'])\n", + "pyplot.xlabel('Number of training examples')\n", + "pyplot.ylabel('Error')\n", + "pyplot.axis([0, 13, 0, 150])\n", + "\n", + "print('# Training Examples\\tTrain Error\\tCross Validation Error')\n", + "for i in range(m):\n", + " print(' \\t%d\\t\\t%f\\t%f' % (i+1, error_train[i], error_val[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[3] = learningCurve\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "## 3 Polynomial regression\n", + "\n", + "The problem with our linear model was that it was too simple for the data\n", + "and resulted in underfitting (high bias). In this part of the exercise, you will address this problem by adding more features. For polynomial regression, our hypothesis has the form:\n", + "\n", + "$$\n", + "\\begin{align}\n", + "h_\\theta(x) &= \\theta_0 + \\theta_1 \\times (\\text{waterLevel}) + \\theta_2 \\times (\\text{waterLevel})^2 + \\cdots + \\theta_p \\times (\\text{waterLevel})^p \\\\\n", + "& = \\theta_0 + \\theta_1 x_1 + \\theta_2 x_2 + \\cdots + \\theta_p x_p\n", + "\\end{align}\n", + "$$\n", + "\n", + "Notice that by defining $x_1 = (\\text{waterLevel})$, $x_2 = (\\text{waterLevel})^2$ , $\\cdots$, $x_p =\n", + "(\\text{waterLevel})^p$, we obtain a linear regression model where the features are the various powers of the original value (waterLevel).\n", + "\n", + "Now, you will add more features using the higher powers of the existing feature $x$ in the dataset. Your task in this part is to complete the code in the function `polyFeatures` in the next cell. The function should map the original training set $X$ of size $m \\times 1$ into its higher powers. Specifically, when a training set $X$ of size $m \\times 1$ is passed into the function, the function should return a $m \\times p$ matrix `X_poly`, where column 1 holds the original values of X, column 2 holds the values of $X^2$, column 3 holds the values of $X^3$, and so on. Note that you don’t have to account for the zero-eth power in this function.\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def polyFeatures(X, p):\n", + " \"\"\"\n", + " Maps X (1D vector) into the p-th power.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " A data vector of size m, where m is the number of examples.\n", + " \n", + " p : int\n", + " The polynomial power to map the features. \n", + " \n", + " Returns \n", + " -------\n", + " X_poly : array_like\n", + " A matrix of shape (m x p) where p is the polynomial \n", + " power and m is the number of examples. That is:\n", + " \n", + " X_poly[i, :] = [X[i], X[i]**2, X[i]**3 ... X[i]**p]\n", + " \n", + " Instructions\n", + " ------------\n", + " Given a vector X, return a matrix X_poly where the p-th column of\n", + " X contains the values of X to the p-th power.\n", + " \"\"\"\n", + " # You need to return the following variables correctly.\n", + " X_poly = np.zeros((X.shape[0], p))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + "\n", + "\n", + " # ============================================================\n", + " return X_poly" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now you have a function that will map features to a higher dimension. The next cell will apply it to the training set, the test set, and the cross validation set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "p = 8\n", + "\n", + "# Map X onto Polynomial Features and Normalize\n", + "X_poly = polyFeatures(X, p)\n", + "X_poly, mu, sigma = utils.featureNormalize(X_poly)\n", + "X_poly = np.concatenate([np.ones((m, 1)), X_poly], axis=1)\n", + "\n", + "# Map X_poly_test and normalize (using mu and sigma)\n", + "X_poly_test = polyFeatures(Xtest, p)\n", + "X_poly_test -= mu\n", + "X_poly_test /= sigma\n", + "X_poly_test = np.concatenate([np.ones((ytest.size, 1)), X_poly_test], axis=1)\n", + "\n", + "# Map X_poly_val and normalize (using mu and sigma)\n", + "X_poly_val = polyFeatures(Xval, p)\n", + "X_poly_val -= mu\n", + "X_poly_val /= sigma\n", + "X_poly_val = np.concatenate([np.ones((yval.size, 1)), X_poly_val], axis=1)\n", + "\n", + "print('Normalized Training Example 1:')\n", + "X_poly[0, :]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[4] = polyFeatures\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1 Learning Polynomial Regression\n", + "\n", + "After you have completed the function `polyFeatures`, we will proceed to train polynomial regression using your linear regression cost function.\n", + "\n", + "Keep in mind that even though we have polynomial terms in our feature vector, we are still solving a linear regression optimization problem. The polynomial terms have simply turned into features that we can use for linear regression. We are using the same cost function and gradient that you wrote for the earlier part of this exercise.\n", + "\n", + "For this part of the exercise, you will be using a polynomial of degree 8. It turns out that if we run the training directly on the projected data, will not work well as the features would be badly scaled (e.g., an example with $x = 40$ will now have a feature $x_8 = 40^8 = 6.5 \\times 10^{12}$). Therefore, you will\n", + "need to use feature normalization.\n", + "\n", + "Before learning the parameters $\\theta$ for the polynomial regression, we first call `featureNormalize` and normalize the features of the training set, storing the mu, sigma parameters separately. We have already implemented this function for you (in `utils.py` module) and it is the same function from the first exercise.\n", + "\n", + "After learning the parameters $\\theta$, you should see two plots generated for polynomial regression with $\\lambda = 0$, which should be similar to the ones here:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "You should see that the polynomial fit is able to follow the datapoints very well, thus, obtaining a low training error. The figure on the right shows that the training error essentially stays zero for all numbers of training samples. However, the polynomial fit is very complex and even drops off at the extremes. This is an indicator that the polynomial regression model is overfitting the training data and will not generalize well.\n", + "\n", + "To better understand the problems with the unregularized ($\\lambda = 0$) model, you can see that the learning curve shows the same effect where the training error is low, but the cross validation error is high. There is a gap between the training and cross validation errors, indicating a high variance problem." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lambda_ = 100\n", + "theta = utils.trainLinearReg(linearRegCostFunction, X_poly, y,\n", + " lambda_=lambda_, maxiter=55)\n", + "\n", + "# Plot training data and fit\n", + "pyplot.plot(X, y, 'ro', ms=10, mew=1.5, mec='k')\n", + "\n", + "utils.plotFit(polyFeatures, np.min(X), np.max(X), mu, sigma, theta, p)\n", + "\n", + "pyplot.xlabel('Change in water level (x)')\n", + "pyplot.ylabel('Water flowing out of the dam (y)')\n", + "pyplot.title('Polynomial Regression Fit (lambda = %f)' % lambda_)\n", + "pyplot.ylim([-20, 50])\n", + "\n", + "pyplot.figure()\n", + "error_train, error_val = learningCurve(X_poly, y, X_poly_val, yval, lambda_)\n", + "pyplot.plot(np.arange(1, 1+m), error_train, np.arange(1, 1+m), error_val)\n", + "\n", + "pyplot.title('Polynomial Regression Learning Curve (lambda = %f)' % lambda_)\n", + "pyplot.xlabel('Number of training examples')\n", + "pyplot.ylabel('Error')\n", + "pyplot.axis([0, 13, 0, 100])\n", + "pyplot.legend(['Train', 'Cross Validation'])\n", + "\n", + "print('Polynomial Regression (lambda = %f)\\n' % lambda_)\n", + "print('# Training Examples\\tTrain Error\\tCross Validation Error')\n", + "for i in range(m):\n", + " print(' \\t%d\\t\\t%f\\t%f' % (i+1, error_train[i], error_val[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One way to combat the overfitting (high-variance) problem is to add regularization to the model. In the next section, you will get to try different $\\lambda$ parameters to see how regularization can lead to a better model.\n", + "\n", + "### 3.2 Optional (ungraded) exercise: Adjusting the regularization parameter\n", + "\n", + "In this section, you will get to observe how the regularization parameter affects the bias-variance of regularized polynomial regression. You should now modify the the lambda parameter and try $\\lambda = 1, 100$. For each of these values, the script should generate a polynomial fit to the data and also a learning curve.\n", + "\n", + "For $\\lambda = 1$, the generated plots should look like the the figure below. You should see a polynomial fit that follows the data trend well (left) and a learning curve (right) showing that both the cross validation and training error converge to a relatively low value. This shows the $\\lambda = 1$ regularized polynomial regression model does not have the high-bias or high-variance problems. In effect, it achieves a good trade-off between bias and variance.\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "For $\\lambda = 100$, you should see a polynomial fit (figure below) that does not follow the data well. In this case, there is too much regularization and the model is unable to fit the training data.\n", + "\n", + "![](Figures/polynomial_regression_reg_100.png)\n", + "\n", + "*You do not need to submit any solutions for this optional (ungraded) exercise.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 3.3 Selecting $\\lambda$ using a cross validation set\n", + "\n", + "From the previous parts of the exercise, you observed that the value of $\\lambda$ can significantly affect the results of regularized polynomial regression on the training and cross validation set. In particular, a model without regularization ($\\lambda = 0$) fits the training set well, but does not generalize. Conversely, a model with too much regularization ($\\lambda = 100$) does not fit the training set and testing set well. A good choice of $\\lambda$ (e.g., $\\lambda = 1$) can provide a good fit to the data.\n", + "\n", + "In this section, you will implement an automated method to select the $\\lambda$ parameter. Concretely, you will use a cross validation set to evaluate how good each $\\lambda$ value is. After selecting the best $\\lambda$ value using the cross validation set, we can then evaluate the model on the test set to estimate\n", + "how well the model will perform on actual unseen data. \n", + "\n", + "Your task is to complete the code in the function `validationCurve`. Specifically, you should should use the `utils.trainLinearReg` function to train the model using different values of $\\lambda$ and compute the training error and cross validation error. You should try $\\lambda$ in the following range: {0, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10}.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def validationCurve(X, y, Xval, yval):\n", + " \"\"\"\n", + " Generate the train and validation errors needed to plot a validation\n", + " curve that we can use to select lambda_.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The training dataset. Matrix with shape (m x n) where m is the \n", + " total number of training examples, and n is the number of features \n", + " including any polynomial features.\n", + " \n", + " y : array_like\n", + " The functions values at each training datapoint. A vector of\n", + " shape (m, ).\n", + " \n", + " Xval : array_like\n", + " The validation dataset. Matrix with shape (m_val x n) where m is the \n", + " total number of validation examples, and n is the number of features \n", + " including any polynomial features.\n", + " \n", + " yval : array_like\n", + " The functions values at each validation datapoint. A vector of\n", + " shape (m_val, ).\n", + " \n", + " Returns\n", + " -------\n", + " lambda_vec : list\n", + " The values of the regularization parameters which were used in \n", + " cross validation.\n", + " \n", + " error_train : list\n", + " The training error computed at each value for the regularization\n", + " parameter.\n", + " \n", + " error_val : list\n", + " The validation error computed at each value for the regularization\n", + " parameter.\n", + " \n", + " Instructions\n", + " ------------\n", + " Fill in this function to return training errors in `error_train` and\n", + " the validation errors in `error_val`. The vector `lambda_vec` contains\n", + " the different lambda parameters to use for each calculation of the\n", + " errors, i.e, `error_train[i]`, and `error_val[i]` should give you the\n", + " errors obtained after training with `lambda_ = lambda_vec[i]`.\n", + "\n", + " Note\n", + " ----\n", + " You can loop over lambda_vec with the following:\n", + " \n", + " for i in range(len(lambda_vec))\n", + " lambda = lambda_vec[i]\n", + " # Compute train / val errors when training linear \n", + " # regression with regularization parameter lambda_\n", + " # You should store the result in error_train[i]\n", + " # and error_val[i]\n", + " ....\n", + " \"\"\"\n", + " # Selected values of lambda (you should not change this)\n", + " lambda_vec = [0, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10]\n", + "\n", + " # You need to return these variables correctly.\n", + " error_train = np.zeros(len(lambda_vec))\n", + " error_val = np.zeros(len(lambda_vec))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + "\n", + "\n", + " # ============================================================\n", + " return lambda_vec, error_train, error_val" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you have completed the code, the next cell will run your function and plot a cross validation curve of error v.s. $\\lambda$ that allows you select which $\\lambda$ parameter to use. You should see a plot similar to the figure below. \n", + "\n", + "![](Figures/cross_validation.png)\n", + "\n", + "In this figure, we can see that the best value of $\\lambda$ is around 3. Due to randomness\n", + "in the training and validation splits of the dataset, the cross validation error can sometimes be lower than the training error." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lambda_vec, error_train, error_val = validationCurve(X_poly, y, X_poly_val, yval)\n", + "\n", + "pyplot.plot(lambda_vec, error_train, '-o', lambda_vec, error_val, '-o', lw=2)\n", + "pyplot.legend(['Train', 'Cross Validation'])\n", + "pyplot.xlabel('lambda')\n", + "pyplot.ylabel('Error')\n", + "\n", + "print('lambda\\t\\tTrain Error\\tValidation Error')\n", + "for i in range(len(lambda_vec)):\n", + " print(' %f\\t%f\\t%f' % (lambda_vec[i], error_train[i], error_val[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[5] = validationCurve\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.4 Optional (ungraded) exercise: Computing test set error\n", + "\n", + "In the previous part of the exercise, you implemented code to compute the cross validation error for various values of the regularization parameter $\\lambda$. However, to get a better indication of the model’s performance in the real world, it is important to evaluate the “final” model on a test set that was not used in any part of training (that is, it was neither used to select the $\\lambda$ parameters, nor to learn the model parameters $\\theta$). For this optional (ungraded) exercise, you should compute the test error using the best value of $\\lambda$ you found. In our cross validation, we obtained a test error of 3.8599 for $\\lambda = 3$.\n", + "\n", + "*You do not need to submit any solutions for this optional (ungraded) exercise.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.5 Optional (ungraded) exercise: Plotting learning curves with randomly selected examples\n", + "\n", + "In practice, especially for small training sets, when you plot learning curves to debug your algorithms, it is often helpful to average across multiple sets of randomly selected examples to determine the training error and cross validation error.\n", + "\n", + "Concretely, to determine the training error and cross validation error for $i$ examples, you should first randomly select $i$ examples from the training set and $i$ examples from the cross validation set. You will then learn the parameters $\\theta$ using the randomly chosen training set and evaluate the parameters $\\theta$ on the randomly chosen training set and cross validation set. The above steps should then be repeated multiple times (say 50) and the averaged error should be used to determine the training error and cross validation error for $i$ examples.\n", + "\n", + "For this optional (ungraded) exercise, you should implement the above strategy for computing the learning curves. For reference, the figure below shows the learning curve we obtained for polynomial regression with $\\lambda = 0.01$. Your figure may differ slightly due to the random selection of examples.\n", + "\n", + "![](Figures/learning_curve_random.png)\n", + "\n", + "*You do not need to submit any solutions for this optional (ungraded) exercise.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..6e06e245b Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/exercise5.ipynb b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/exercise5.ipynb index 66c4500ee..27f405eb4 100644 --- a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/exercise5.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/exercise5.ipynb @@ -18,10 +18,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 1, + "metadata": {}, "outputs": [], "source": [ "# used for manipulating directory paths\n", @@ -99,9 +97,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load from ex5data1.mat, where all variables will be store in a dictionary\n", "data = loadmat(os.path.join('Data', 'ex5data1.mat'))\n", @@ -140,10 +151,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 3, + "metadata": {}, "outputs": [], "source": [ "def linearRegCostFunction(X, y, theta, lambda_=0.0):\n", @@ -192,7 +201,12 @@ " grad = np.zeros(theta.shape)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " h = X.dot(theta)\n", + " J = (1 / (2 * m)) * np.sum(np.square(h - y)) + (lambda_ / (2 * m)) * np.sum(np.square(theta[1:]))\n", + " \n", + " grad = (1 / m) * (h - y).dot(X)\n", + " \n", + " grad[1:] = grad[1:] + (lambda_ / m) * theta[1:]\n", "\n", "\n", " # ============================================================\n", @@ -208,9 +222,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at theta = [1, 1]:\t 303.993192 \n", + "This value should be about 303.993192)\n", + "\n" + ] + } + ], "source": [ "theta = np.array([1, 1])\n", "J, _ = linearRegCostFunction(np.concatenate([np.ones((m, 1)), X], axis=1), y, theta, 1)\n", @@ -232,9 +256,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise regularized-linear-regression-and-bias-variance\n", + "\n", + "Login (email address): tanmayss2109@gmail.com\n", + "Token: TPAqT4uQU3N14kab\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + "Regularized Linear Regression Cost Function | 25 / 25 | Nice work!\n", + " Regularized Linear Regression Gradient | 0 / 25 | \n", + " Learning Curve | 0 / 20 | \n", + " Polynomial Feature Mapping | 0 / 10 | \n", + " Validation Curve | 0 / 20 | \n", + " --------------------------------\n", + " | 25 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[1] = linearRegCostFunction\n", "grader.grade()" @@ -264,9 +310,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gradient at theta = [1, 1]: [-15.303016, 598.250744] \n", + " (this value should be about [-15.303016, 598.250744])\n", + "\n" + ] + } + ], "source": [ "theta = np.array([1, 1])\n", "J, grad = linearRegCostFunction(np.concatenate([np.ones((m, 1)), X], axis=1), y, theta, 1)\n", @@ -284,9 +340,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise regularized-linear-regression-and-bias-variance\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + "Regularized Linear Regression Cost Function | 25 / 25 | Nice work!\n", + " Regularized Linear Regression Gradient | 25 / 25 | Nice work!\n", + " Learning Curve | 0 / 20 | \n", + " Polynomial Feature Mapping | 0 / 10 | \n", + " Validation Curve | 0 / 20 | \n", + " --------------------------------\n", + " | 50 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[2] = linearRegCostFunction\n", "grader.grade()" @@ -312,9 +389,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# add a columns of ones for the y-intercept\n", "X_aug = np.concatenate([np.ones((m, 1)), X], axis=1)\n", @@ -442,7 +532,10 @@ " error_val = np.zeros(m)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - " \n", + " for i in range(1, m + 1):\n", + " theta_t = utils.trainLinearReg(linearRegCostFunction, X[:i], y[:i], lambda_ = lambda_)\n", + " error_train[i - 1], _ = linearRegCostFunction(X[:i], y[:i], theta_t, lambda_ = 0)\n", + " error_val[i - 1], _ = linearRegCostFunction(Xval, yval, theta_t, lambda_ = 0) \n", "\n", " \n", " # =============================================================\n", @@ -562,6 +655,8 @@ " X_poly = np.zeros((X.shape[0], p))\n", "\n", " # ====================== YOUR CODE HERE ======================\n", + " for i in range(p):\n", + " X_poly[:, i] = X[:, 0] ** (i + 1)\n", "\n", "\n", "\n", @@ -804,6 +899,11 @@ " error_val = np.zeros(len(lambda_vec))\n", "\n", " # ====================== YOUR CODE HERE ======================\n", + " for i in range(len(lambda_vec)):\n", + " lambda_try = lambda_vec[i]\n", + " theta_t = utils.trainLinearReg(linearRegCostFunction, X, y, lambda_ = lambda_try)\n", + " error_train[i], _ = linearRegCostFunction(X, y, theta_t, lambda_ = 0)\n", + " error_val[i], _ = linearRegCostFunction(Xval, yval, theta_t, lambda_ = 0)\n", "\n", "\n", "\n", @@ -919,7 +1019,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/token.pkl b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/token.pkl new file mode 100644 index 000000000..9d93677f2 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/token.pkl differ diff --git a/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/__pycache__/submission.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/__pycache__/submission.cpython-37.pyc new file mode 100644 index 000000000..7e44f90c4 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/__pycache__/submission.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/.ipynb_checkpoints/exercise6-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/.ipynb_checkpoints/exercise6-checkpoint.ipynb new file mode 100644 index 000000000..148c1897e --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/.ipynb_checkpoints/exercise6-checkpoint.ipynb @@ -0,0 +1,1044 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 6:\n", + "# Support Vector Machines\n", + "\n", + "## Introduction\n", + "\n", + "In this exercise, you will be using support vector machines (SVMs) to build a spam classifier. Before starting on the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, [`matplotlib`](https://matplotlib.org/) for plotting, and [`scipy`](https://docs.scipy.org/doc/scipy/reference/) for scientific and numerical computation functions and tools. You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Import regular expressions to process emails\n", + "import re\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize\n", + "\n", + "# will be used to load MATLAB mat datafile format\n", + "from scipy.io import loadmat\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submitted Function | Points |\n", + "| :- |:- |:- | :-: |\n", + "| 1 | [Gaussian Kernel](#section1) | [`gaussianKernel`](#gaussianKernel) | 25 |\n", + "| 2 | [Parameters (C, $\\sigma$) for Dataset 3](#section2)| [`dataset3Params`](#dataset3Params) | 25 |\n", + "| 3 | [Email Preprocessing](#section3) | [`processEmail`](#processEmail) | 25 |\n", + "| 4 | [Email Feature Extraction](#section4) | [`emailFeatures`](#emailFeatures) | 25 |\n", + "| | Total Points | |100 |\n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 Support Vector Machines\n", + "\n", + "In the first half of this exercise, you will be using support vector machines (SVMs) with various example 2D datasets. Experimenting with these datasets will help you gain an intuition of how SVMs work and how to use a Gaussian kernel with SVMs. In the next half of the exercise, you will be using support\n", + "vector machines to build a spam classifier." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Example Dataset 1\n", + "\n", + "We will begin by with a 2D example dataset which can be separated by a linear boundary. The following cell plots the training data, which should look like this:\n", + "\n", + "![Dataset 1 training data](Figures/dataset1.png)\n", + "\n", + "In this dataset, the positions of the positive examples (indicated with `x`) and the negative examples (indicated with `o`) suggest a natural separation indicated by the gap. However, notice that there is an outlier positive example `x` on the far left at about (0.1, 4.1). As part of this exercise, you will also see how this outlier affects the SVM decision boundary." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load from ex6data1\n", + "# You will have X, y as keys in the dict data\n", + "data = loadmat(os.path.join('Data', 'ex6data1.mat'))\n", + "X, y = data['X'], data['y'][:, 0]\n", + "\n", + "# Plot training data\n", + "utils.plotData(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this part of the exercise, you will try using different values of the $C$ parameter with SVMs. Informally, the $C$ parameter is a positive value that controls the penalty for misclassified training examples. A large $C$ parameter tells the SVM to try to classify all the examples correctly. $C$ plays a role similar to $1/\\lambda$, where $\\lambda$ is the regularization parameter that we were using previously for logistic regression.\n", + "\n", + "\n", + "The following cell will run the SVM training (with $C=1$) using SVM software that we have included with the starter code (function `svmTrain` within the `utils` module of this exercise). When $C=1$, you should find that the SVM puts the decision boundary in the gap between the two datasets and *misclassifies* the data point on the far left, as shown in the figure (left) below.\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVM Decision boundary for example dataset 1
C=1C=100
\n", + "\n", + "
\n", + "In order to minimize the dependency of this assignment on external libraries, we have included this implementation of an SVM learning algorithm in utils.svmTrain. However, this particular implementation is not very efficient (it was originally chosen to maximize compatibility between Octave/MATLAB for the first version of this assignment set). If you are training an SVM on a real problem, especially if you need to scale to a larger dataset, we strongly recommend instead using a highly optimized SVM toolbox such as [LIBSVM](https://www.csie.ntu.edu.tw/~cjlin/libsvm/). The python machine learning library [scikit-learn](http://scikit-learn.org/stable/index.html) provides wrappers for the LIBSVM library.\n", + "
\n", + "
\n", + "
\n", + "**Implementation Note:** Most SVM software packages (including the function `utils.svmTrain`) automatically add the extra feature $x_0$ = 1 for you and automatically take care of learning the intercept term $\\theta_0$. So when passing your training data to the SVM software, there is no need to add this extra feature $x_0 = 1$ yourself. In particular, in python your code should be working with training examples $x \\in \\mathcal{R}^n$ (rather than $x \\in \\mathcal{R}^{n+1}$); for example, in the first example dataset $x \\in \\mathcal{R}^2$.\n", + "
\n", + "\n", + "Your task is to try different values of $C$ on this dataset. Specifically, you should change the value of $C$ in the next cell to $C = 100$ and run the SVM training again. When $C = 100$, you should find that the SVM now classifies every single example correctly, but has a decision boundary that does not\n", + "appear to be a natural fit for the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You should try to change the C value below and see how the decision\n", + "# boundary varies (e.g., try C = 1000)\n", + "C = 1\n", + "\n", + "model = utils.svmTrain(X, y, C, utils.linearKernel, 1e-3, 20)\n", + "utils.visualizeBoundaryLinear(X, y, model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.2 SVM with Gaussian Kernels\n", + "\n", + "In this part of the exercise, you will be using SVMs to do non-linear classification. In particular, you will be using SVMs with Gaussian kernels on datasets that are not linearly separable.\n", + "\n", + "#### 1.2.1 Gaussian Kernel\n", + "\n", + "To find non-linear decision boundaries with the SVM, we need to first implement a Gaussian kernel. You can think of the Gaussian kernel as a similarity function that measures the “distance” between a pair of examples,\n", + "($x^{(i)}$, $x^{(j)}$). The Gaussian kernel is also parameterized by a bandwidth parameter, $\\sigma$, which determines how fast the similarity metric decreases (to 0) as the examples are further apart.\n", + "You should now complete the code in `gaussianKernel` to compute the Gaussian kernel between two examples, ($x^{(i)}$, $x^{(j)}$). The Gaussian kernel function is defined as:\n", + "\n", + "$$ K_{\\text{gaussian}} \\left( x^{(i)}, x^{(j)} \\right) = \\exp \\left( - \\frac{\\left\\lvert\\left\\lvert x^{(i)} - x^{(j)}\\right\\lvert\\right\\lvert^2}{2\\sigma^2} \\right) = \\exp \\left( -\\frac{\\sum_{k=1}^n \\left( x_k^{(i)} - x_k^{(j)}\\right)^2}{2\\sigma^2} \\right)$$\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def gaussianKernel(x1, x2, sigma):\n", + " \"\"\"\n", + " Computes the radial basis function\n", + " Returns a radial basis function kernel between x1 and x2.\n", + " \n", + " Parameters\n", + " ----------\n", + " x1 : numpy ndarray\n", + " A vector of size (n, ), representing the first datapoint.\n", + " \n", + " x2 : numpy ndarray\n", + " A vector of size (n, ), representing the second datapoint.\n", + " \n", + " sigma : float\n", + " The bandwidth parameter for the Gaussian kernel.\n", + "\n", + " Returns\n", + " -------\n", + " sim : float\n", + " The computed RBF between the two provided data points.\n", + " \n", + " Instructions\n", + " ------------\n", + " Fill in this function to return the similarity between `x1` and `x2`\n", + " computed using a Gaussian kernel with bandwidth `sigma`.\n", + " \"\"\"\n", + " sim = 0\n", + " # ====================== YOUR CODE HERE ======================\n", + " sim = np.exp(-np.sum((x1 - x2) ** 2) / (2 * (sigma ** 2)))\n", + "\n", + "\n", + " # =============================================================\n", + " return sim" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the function `gaussianKernel` the following cell will test your kernel function on two provided examples and you should expect to see a value of 0.324652." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x1 = np.array([1, 2, 1])\n", + "x2 = np.array([0, 4, -1])\n", + "sigma = 2\n", + "\n", + "sim = gaussianKernel(x1, x2, sigma)\n", + "\n", + "print('Gaussian Kernel between x1 = [1, 2, 1], x2 = [0, 4, -1], sigma = %0.2f:'\n", + " '\\n\\t%f\\n(for sigma = 2, this value should be about 0.324652)\\n' % (sigma, sim))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[1] = gaussianKernel\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2.2 Example Dataset 2\n", + "\n", + "The next part in this notebook will load and plot dataset 2, as shown in the figure below. \n", + "\n", + "![Dataset 2](Figures/dataset2.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load from ex6data2\n", + "# You will have X, y as keys in the dict data\n", + "data = loadmat(os.path.join('Data', 'ex6data2.mat'))\n", + "X, y = data['X'], data['y'][:, 0]\n", + "\n", + "# Plot training data\n", + "utils.plotData(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the figure, you can obserse that there is no linear decision boundary that separates the positive and negative examples for this dataset. However, by using the Gaussian kernel with the SVM, you will be able to learn a non-linear decision boundary that can perform reasonably well for the dataset. If you have correctly implemented the Gaussian kernel function, the following cell will proceed to train the SVM with the Gaussian kernel on this dataset.\n", + "\n", + "You should get a decision boundary as shown in the figure below, as computed by the SVM with a Gaussian kernel. The decision boundary is able to separate most of the positive and negative examples correctly and follows the contours of the dataset well.\n", + "\n", + "![Dataset 2 decision boundary](Figures/svm_dataset2.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# SVM Parameters\n", + "C = 1\n", + "sigma = 0.1\n", + "\n", + "model= utils.svmTrain(X, y, C, gaussianKernel, args=(sigma,))\n", + "utils.visualizeBoundary(X, y, model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 1.2.3 Example Dataset 3\n", + "\n", + "In this part of the exercise, you will gain more practical skills on how to use a SVM with a Gaussian kernel. The next cell will load and display a third dataset, which should look like the figure below.\n", + "\n", + "![Dataset 3](Figures/dataset3.png)\n", + "\n", + "You will be using the SVM with the Gaussian kernel with this dataset. In the provided dataset, `ex6data3.mat`, you are given the variables `X`, `y`, `Xval`, `yval`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load from ex6data3\n", + "# You will have X, y, Xval, yval as keys in the dict data\n", + "data = loadmat(os.path.join('Data', 'ex6data3.mat'))\n", + "X, y, Xval, yval = data['X'], data['y'][:, 0], data['Xval'], data['yval'][:, 0]\n", + "\n", + "# Plot training data\n", + "utils.plotData(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Your task is to use the cross validation set `Xval`, `yval` to determine the best $C$ and $\\sigma$ parameter to use. You should write any additional code necessary to help you search over the parameters $C$ and $\\sigma$. For both $C$ and $\\sigma$, we suggest trying values in multiplicative steps (e.g., 0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30).\n", + "Note that you should try all possible pairs of values for $C$ and $\\sigma$ (e.g., $C = 0.3$ and $\\sigma = 0.1$). For example, if you try each of the 8 values listed above for $C$ and for $\\sigma^2$, you would end up training and evaluating (on the cross validation set) a total of $8^2 = 64$ different models. After you have determined the best $C$ and $\\sigma$ parameters to use, you should modify the code in `dataset3Params`, filling in the best parameters you found. For our best parameters, the SVM returned a decision boundary shown in the figure below. \n", + "\n", + "![](Figures/svm_dataset3_best.png)\n", + "\n", + "
\n", + "**Implementation Tip:** When implementing cross validation to select the best $C$ and $\\sigma$ parameter to use, you need to evaluate the error on the cross validation set. Recall that for classification, the error is defined as the fraction of the cross validation examples that were classified incorrectly. In `numpy`, you can compute this error using `np.mean(predictions != yval)`, where `predictions` is a vector containing all the predictions from the SVM, and `yval` are the true labels from the cross validation set. You can use the `utils.svmPredict` function to generate the predictions for the cross validation set.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def dataset3Params(X, y, Xval, yval):\n", + " \"\"\"\n", + " Returns your choice of C and sigma for Part 3 of the exercise \n", + " where you select the optimal (C, sigma) learning parameters to use for SVM\n", + " with RBF kernel.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " (m x n) matrix of training data where m is number of training examples, and \n", + " n is the number of features.\n", + " \n", + " y : array_like\n", + " (m, ) vector of labels for ther training data.\n", + " \n", + " Xval : array_like\n", + " (mv x n) matrix of validation data where mv is the number of validation examples\n", + " and n is the number of features\n", + " \n", + " yval : array_like\n", + " (mv, ) vector of labels for the validation data.\n", + " \n", + " Returns\n", + " -------\n", + " C, sigma : float, float\n", + " The best performing values for the regularization parameter C and \n", + " RBF parameter sigma.\n", + " \n", + " Instructions\n", + " ------------\n", + " Fill in this function to return the optimal C and sigma learning \n", + " parameters found using the cross validation set.\n", + " You can use `svmPredict` to predict the labels on the cross\n", + " validation set. For example, \n", + " \n", + " predictions = svmPredict(model, Xval)\n", + "\n", + " will return the predictions on the cross validation set.\n", + " \n", + " Note\n", + " ----\n", + " You can compute the prediction error using \n", + " \n", + " np.mean(predictions != yval)\n", + " \"\"\"\n", + " # You need to return the following variables correctly.\n", + " C = 1\n", + " sigma = 0.3\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " C_array = np.array([0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30])\n", + " sigma_array = np.array([0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30])\n", + "\n", + " my_array = np.zeros([C_array.size, sigma_array.size])\n", + " \n", + " for i in np.arange(C_array.size):\n", + " for j in np.arange(sigma_array.size):\n", + " model= utils.svmTrain(X, y, C_array[i], gaussianKernel, args=(sigma_array[j],))\n", + " predictions = utils.svmPredict(model, Xval)\n", + " pred_error = np.mean(predictions != yval)\n", + " \n", + " err_array[i, j] = pred_error\n", + " \n", + " ind = np.unravel_index(np.argmin(err_array, axis = None), err_array.shape)\n", + " C = C_array[ind[0]]\n", + " sigma = sigma_array[ind[1]]\n", + " \n", + " \n", + " # ============================================================\n", + " return C, sigma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The provided code in the next cell trains the SVM classifier using the training set $(X, y)$ using parameters loaded from `dataset3Params`. Note that this might take a few minutes to execute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Try different SVM Parameters here\n", + "C, sigma = dataset3Params(X, y, Xval, yval)\n", + "\n", + "# Train the SVM\n", + "# model = utils.svmTrain(X, y, C, lambda x1, x2: gaussianKernel(x1, x2, sigma))\n", + "model = utils.svmTrain(X, y, C, gaussianKernel, args=(sigma,))\n", + "utils.visualizeBoundary(X, y, model)\n", + "print(C, sigma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One you have computed the values `C` and `sigma` in the cell above, we will submit those values for grading.\n", + "\n", + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[2] = lambda : (C, sigma)\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## 2 Spam Classification\n", + "\n", + "Many email services today provide spam filters that are able to classify emails into spam and non-spam email with high accuracy. In this part of the exercise, you will use SVMs to build your own spam filter.\n", + "\n", + "You will be training a classifier to classify whether a given email, $x$, is spam ($y = 1$) or non-spam ($y = 0$). In particular, you need to convert each email into a feature vector $x \\in \\mathbb{R}^n$ . The following parts of the exercise will walk you through how such a feature vector can be constructed from an email.\n", + "\n", + "The dataset included for this exercise is based on a a subset of the [SpamAssassin Public Corpus](http://spamassassin.apache.org/old/publiccorpus/). For the purpose of this exercise, you will only be using the body of the email (excluding the email headers)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Preprocessing Emails\n", + "\n", + "Before starting on a machine learning task, it is usually insightful to take a look at examples from the dataset. The figure below shows a sample email that contains a URL, an email address (at the end), numbers, and dollar\n", + "amounts.\n", + "\n", + "\n", + "\n", + "While many emails would contain similar types of entities (e.g., numbers, other URLs, or other email addresses), the specific entities (e.g., the specific URL or specific dollar amount) will be different in almost every\n", + "email. Therefore, one method often employed in processing emails is to “normalize” these values, so that all URLs are treated the same, all numbers are treated the same, etc. For example, we could replace each URL in the\n", + "email with the unique string “httpaddr” to indicate that a URL was present.\n", + "\n", + "This has the effect of letting the spam classifier make a classification decision based on whether any URL was present, rather than whether a specific URL was present. This typically improves the performance of a spam classifier, since spammers often randomize the URLs, and thus the odds of seeing any particular URL again in a new piece of spam is very small. \n", + "\n", + "In the function `processEmail` below, we have implemented the following email preprocessing and normalization steps:\n", + "\n", + "- **Lower-casing**: The entire email is converted into lower case, so that captialization is ignored (e.g., IndIcaTE is treated the same as Indicate).\n", + "\n", + "- **Stripping HTML**: All HTML tags are removed from the emails. Many emails often come with HTML formatting; we remove all the HTML tags, so that only the content remains.\n", + "\n", + "- **Normalizing URLs**: All URLs are replaced with the text “httpaddr”.\n", + "\n", + "- **Normalizing Email Addresses**: All email addresses are replaced with the text “emailaddr”.\n", + "\n", + "- **Normalizing Numbers**: All numbers are replaced with the text “number”.\n", + "\n", + "- **Normalizing Dollars**: All dollar signs ($) are replaced with the text “dollar”.\n", + "\n", + "- **Word Stemming**: Words are reduced to their stemmed form. For example, “discount”, “discounts”, “discounted” and “discounting” are all replaced with “discount”. Sometimes, the Stemmer actually strips off additional characters from the end, so “include”, “includes”, “included”, and “including” are all replaced with “includ”.\n", + "\n", + "- **Removal of non-words**: Non-words and punctuation have been removed. All white spaces (tabs, newlines, spaces) have all been trimmed to a single space character.\n", + "\n", + "The result of these preprocessing steps is shown in the figure below. \n", + "\n", + "\"email\n", + "\n", + "While preprocessing has left word fragments and non-words, this form turns out to be much easier to work with for performing feature extraction." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1.1 Vocabulary List\n", + "\n", + "After preprocessing the emails, we have a list of words for each email. The next step is to choose which words we would like to use in our classifier and which we would want to leave out.\n", + "\n", + "For this exercise, we have chosen only the most frequently occuring words as our set of words considered (the vocabulary list). Since words that occur rarely in the training set are only in a few emails, they might cause the\n", + "model to overfit our training set. The complete vocabulary list is in the file `vocab.txt` (inside the `Data` directory for this exercise) and also shown in the figure below.\n", + "\n", + "\"Vocab\"\n", + "\n", + "Our vocabulary list was selected by choosing all words which occur at least a 100 times in the spam corpus,\n", + "resulting in a list of 1899 words. In practice, a vocabulary list with about 10,000 to 50,000 words is often used.\n", + "Given the vocabulary list, we can now map each word in the preprocessed emails into a list of word indices that contains the index of the word in the vocabulary dictionary. The figure below shows the mapping for the sample email. Specifically, in the sample email, the word “anyone” was first normalized to “anyon” and then mapped onto the index 86 in the vocabulary list.\n", + "\n", + "\"word\n", + "\n", + "Your task now is to complete the code in the function `processEmail` to perform this mapping. In the code, you are given a string `word` which is a single word from the processed email. You should look up the word in the vocabulary list `vocabList`. If the word exists in the list, you should add the index of the word into the `word_indices` variable. If the word does not exist, and is therefore not in the vocabulary, you can skip the word.\n", + "\n", + "
\n", + "**python tip**: In python, you can find the index of the first occurence of an item in `list` using the `index` attribute. In the provided code for `processEmail`, `vocabList` is a python list containing the words in the vocabulary. To find the index of a word, we can use `vocabList.index(word)` which would return a number indicating the index of the word within the list. If the word does not exist in the list, a `ValueError` exception is raised. In python, we can use the `try/except` statement to catch exceptions which we do not want to stop the program from running. You can think of the `try/except` statement to be the same as an `if/else` statement, but it asks for forgiveness rather than permission.\n", + "\n", + "An example would be:\n", + "
\n", + "\n", + "```\n", + "try:\n", + " do stuff here\n", + "except ValueError:\n", + " pass\n", + " # do nothing (forgive me) if a ValueError exception occured within the try statement\n", + "```\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def processEmail(email_contents, verbose=True):\n", + " \"\"\"\n", + " Preprocesses the body of an email and returns a list of indices \n", + " of the words contained in the email. \n", + " \n", + " Parameters\n", + " ----------\n", + " email_contents : str\n", + " A string containing one email. \n", + " \n", + " verbose : bool\n", + " If True, print the resulting email after processing.\n", + " \n", + " Returns\n", + " -------\n", + " word_indices : list\n", + " A list of integers containing the index of each word in the \n", + " email which is also present in the vocabulary.\n", + " \n", + " Instructions\n", + " ------------\n", + " Fill in this function to add the index of word to word_indices \n", + " if it is in the vocabulary. At this point of the code, you have \n", + " a stemmed word from the email in the variable word.\n", + " You should look up word in the vocabulary list (vocabList). \n", + " If a match exists, you should add the index of the word to the word_indices\n", + " list. Concretely, if word = 'action', then you should\n", + " look up the vocabulary list to find where in vocabList\n", + " 'action' appears. For example, if vocabList[18] =\n", + " 'action', then, you should add 18 to the word_indices \n", + " vector (e.g., word_indices.append(18)).\n", + " \n", + " Notes\n", + " -----\n", + " - vocabList[idx] returns a the word with index idx in the vocabulary list.\n", + " \n", + " - vocabList.index(word) return index of word `word` in the vocabulary list.\n", + " (A ValueError exception is raised if the word does not exist.)\n", + " \"\"\"\n", + " # Load Vocabulary\n", + " vocabList = utils.getVocabList()\n", + "\n", + " # Init return value\n", + " word_indices = []\n", + "\n", + " # ========================== Preprocess Email ===========================\n", + " # Find the Headers ( \\n\\n and remove )\n", + " # Uncomment the following lines if you are working with raw emails with the\n", + " # full headers\n", + " # hdrstart = email_contents.find(chr(10) + chr(10))\n", + " # email_contents = email_contents[hdrstart:]\n", + "\n", + " # Lower case\n", + " email_contents = email_contents.lower()\n", + " \n", + " # Strip all HTML\n", + " # Looks for any expression that starts with < and ends with > and replace\n", + " # and does not have any < or > in the tag it with a space\n", + " email_contents =re.compile('<[^<>]+>').sub(' ', email_contents)\n", + "\n", + " # Handle Numbers\n", + " # Look for one or more characters between 0-9\n", + " email_contents = re.compile('[0-9]+').sub(' number ', email_contents)\n", + "\n", + " # Handle URLS\n", + " # Look for strings starting with http:// or https://\n", + " email_contents = re.compile('(http|https)://[^\\s]*').sub(' httpaddr ', email_contents)\n", + "\n", + " # Handle Email Addresses\n", + " # Look for strings with @ in the middle\n", + " email_contents = re.compile('[^\\s]+@[^\\s]+').sub(' emailaddr ', email_contents)\n", + " \n", + " # Handle $ sign\n", + " email_contents = re.compile('[$]+').sub(' dollar ', email_contents)\n", + " \n", + " # get rid of any punctuation\n", + " email_contents = re.split('[ @$/#.-:&*+=\\[\\]?!(){},''\">_<;%\\n\\r]', email_contents)\n", + "\n", + " # remove any empty word string\n", + " email_contents = [word for word in email_contents if len(word) > 0]\n", + " \n", + " # Stem the email contents word by word\n", + " stemmer = utils.PorterStemmer()\n", + " processed_email = []\n", + " for word in email_contents:\n", + " # Remove any remaining non alphanumeric characters in word\n", + " word = re.compile('[^a-zA-Z0-9]').sub('', word).strip()\n", + " word = stemmer.stem(word)\n", + " processed_email.append(word)\n", + "\n", + " if len(word) < 1:\n", + " continue\n", + "\n", + " # Look up the word in the dictionary and add to word_indices if found\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " \n", + "\n", + " # =============================================================\n", + "\n", + " if verbose:\n", + " print('----------------')\n", + " print('Processed email:')\n", + " print('----------------')\n", + " print(' '.join(processed_email))\n", + " return word_indices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have implemented `processEmail`, the following cell will run your code on the email sample and you should see an output of the processed email and the indices list mapping." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# To use an SVM to classify emails into Spam v.s. Non-Spam, you first need\n", + "# to convert each email into a vector of features. In this part, you will\n", + "# implement the preprocessing steps for each email. You should\n", + "# complete the code in processEmail.m to produce a word indices vector\n", + "# for a given email.\n", + "\n", + "# Extract Features\n", + "with open(os.path.join('Data', 'emailSample1.txt')) as fid:\n", + " file_contents = fid.read()\n", + "\n", + "word_indices = processEmail(file_contents)\n", + "\n", + "#Print Stats\n", + "print('-------------')\n", + "print('Word Indices:')\n", + "print('-------------')\n", + "print(word_indices)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[3] = processEmail\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.2 Extracting Features from Emails\n", + "\n", + "You will now implement the feature extraction that converts each email into a vector in $\\mathbb{R}^n$. For this exercise, you will be using n = # words in vocabulary list. Specifically, the feature $x_i \\in \\{0, 1\\}$ for an email corresponds to whether the $i^{th}$ word in the dictionary occurs in the email. That is, $x_i = 1$ if the $i^{th}$ word is in the email and $x_i = 0$ if the $i^{th}$ word is not present in the email.\n", + "\n", + "Thus, for a typical email, this feature would look like:\n", + "\n", + "$$ x = \\begin{bmatrix} \n", + "0 & \\dots & 1 & 0 & \\dots & 1 & 0 & \\dots & 0 \n", + "\\end{bmatrix}^T \\in \\mathbb{R}^n\n", + "$$\n", + "\n", + "You should now complete the code in the function `emailFeatures` to generate a feature vector for an email, given the `word_indices`.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def emailFeatures(word_indices):\n", + " \"\"\"\n", + " Takes in a word_indices vector and produces a feature vector from the word indices. \n", + " \n", + " Parameters\n", + " ----------\n", + " word_indices : list\n", + " A list of word indices from the vocabulary list.\n", + " \n", + " Returns\n", + " -------\n", + " x : list \n", + " The computed feature vector.\n", + " \n", + " Instructions\n", + " ------------\n", + " Fill in this function to return a feature vector for the\n", + " given email (word_indices). To help make it easier to process \n", + " the emails, we have have already pre-processed each email and converted\n", + " each word in the email into an index in a fixed dictionary (of 1899 words).\n", + " The variable `word_indices` contains the list of indices of the words \n", + " which occur in one email.\n", + " \n", + " Concretely, if an email has the text:\n", + "\n", + " The quick brown fox jumped over the lazy dog.\n", + "\n", + " Then, the word_indices vector for this text might look like:\n", + " \n", + " 60 100 33 44 10 53 60 58 5\n", + "\n", + " where, we have mapped each word onto a number, for example:\n", + "\n", + " the -- 60\n", + " quick -- 100\n", + " ...\n", + "\n", + " Note\n", + " ----\n", + " The above numbers are just an example and are not the actual mappings.\n", + "\n", + " Your task is take one such `word_indices` vector and construct\n", + " a binary feature vector that indicates whether a particular\n", + " word occurs in the email. That is, x[i] = 1 when word i\n", + " is present in the email. Concretely, if the word 'the' (say,\n", + " index 60) appears in the email, then x[60] = 1. The feature\n", + " vector should look like:\n", + " x = [ 0 0 0 0 1 0 0 0 ... 0 0 0 0 1 ... 0 0 0 1 0 ..]\n", + " \"\"\"\n", + " # Total number of words in the dictionary\n", + " n = 1899\n", + "\n", + " # You need to return the following variables correctly.\n", + " x = np.zeros(n)\n", + "\n", + " # ===================== YOUR CODE HERE ======================\n", + "\n", + " \n", + " \n", + " # ===========================================================\n", + " \n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have implemented `emailFeatures`, the next cell will run your code on the email sample. You should see that the feature vector had length 1899 and 45 non-zero entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Extract Features\n", + "with open(os.path.join('Data', 'emailSample1.txt')) as fid:\n", + " file_contents = fid.read()\n", + "\n", + "word_indices = processEmail(file_contents)\n", + "features = emailFeatures(word_indices)\n", + "\n", + "# Print Stats\n", + "print('\\nLength of feature vector: %d' % len(features))\n", + "print('Number of non-zero entries: %d' % sum(features > 0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[4] = emailFeatures\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Training SVM for Spam Classification\n", + "\n", + "In the following section we will load a preprocessed training dataset that will be used to train a SVM classifier. The file `spamTrain.mat` (within the `Data` folder for this exercise) contains 4000 training examples of spam and non-spam email, while `spamTest.mat` contains 1000 test examples. Each\n", + "original email was processed using the `processEmail` and `emailFeatures` functions and converted into a vector $x^{(i)} \\in \\mathbb{R}^{1899}$.\n", + "\n", + "After loading the dataset, the next cell proceed to train a linear SVM to classify between spam ($y = 1$) and non-spam ($y = 0$) emails. Once the training completes, you should see that the classifier gets a training accuracy of about 99.8% and a test accuracy of about 98.5%." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the Spam Email dataset\n", + "# You will have X, y in your environment\n", + "data = loadmat(os.path.join('Data', 'spamTrain.mat'))\n", + "X, y= data['X'].astype(float), data['y'][:, 0]\n", + "\n", + "print('Training Linear SVM (Spam Classification)')\n", + "print('This may take 1 to 2 minutes ...\\n')\n", + "\n", + "C = 0.1\n", + "model = utils.svmTrain(X, y, C, utils.linearKernel)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Compute the training accuracy\n", + "p = utils.svmPredict(model, X)\n", + "\n", + "print('Training Accuracy: %.2f' % (np.mean(p == y) * 100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Execute the following cell to load the test set and compute the test accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the test dataset\n", + "# You will have Xtest, ytest in your environment\n", + "data = loadmat(os.path.join('Data', 'spamTest.mat'))\n", + "Xtest, ytest = data['Xtest'].astype(float), data['ytest'][:, 0]\n", + "\n", + "print('Evaluating the trained Linear SVM on a test set ...')\n", + "p = utils.svmPredict(model, Xtest)\n", + "\n", + "print('Test Accuracy: %.2f' % (np.mean(p == ytest) * 100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Top Predictors for Spam\n", + "\n", + "To better understand how the spam classifier works, we can inspect the parameters to see which words the classifier thinks are the most predictive of spam. The next cell finds the parameters with the largest positive values in the classifier and displays the corresponding words similar to the ones shown in the figure below.\n", + "\n", + "
\n", + "our click remov guarante visit basenumb dollar pleas price will nbsp most lo ga hour\n", + "
\n", + "\n", + "Thus, if an email contains words such as “guarantee”, “remove”, “dollar”, and “price” (the top predictors shown in the figure), it is likely to be classified as spam.\n", + "\n", + "Since the model we are training is a linear SVM, we can inspect the weights learned by the model to understand better how it is determining whether an email is spam or not. The following code finds the words with the highest weights in the classifier. Informally, the classifier 'thinks' that these words are the most likely indicators of spam." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Sort the weights and obtin the vocabulary list\n", + "# NOTE some words have the same weights, \n", + "# so their order might be different than in the text above\n", + "idx = np.argsort(model['w'])\n", + "top_idx = idx[-15:][::-1]\n", + "vocabList = utils.getVocabList()\n", + "\n", + "print('Top predictors of spam:')\n", + "print('%-15s %-15s' % ('word', 'weight'))\n", + "print('----' + ' '*12 + '------')\n", + "for word, w in zip(np.array(vocabList)[top_idx], model['w'][top_idx]):\n", + " print('%-15s %0.2f' % (word, w))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.5 Optional (ungraded) exercise: Try your own emails\n", + "\n", + "Now that you have trained a spam classifier, you can start trying it out on your own emails. In the starter code, we have included two email examples (`emailSample1.txt` and `emailSample2.txt`) and two spam examples (`spamSample1.txt` and `spamSample2.txt`). The next cell runs the spam classifier over the first spam example and classifies it using the learned SVM. You should now try the other examples we have provided and see if the classifier gets them right. You can also try your own emails by replacing the examples (plain text files) with your own emails.\n", + "\n", + "*You do not need to submit any solutions for this optional (ungraded) exercise.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "filename = os.path.join('Data', 'emailSample1.txt')\n", + "\n", + "with open(filename) as fid:\n", + " file_contents = fid.read()\n", + "\n", + "word_indices = processEmail(file_contents, verbose=False)\n", + "x = emailFeatures(word_indices)\n", + "p = utils.svmPredict(model, x)\n", + "\n", + "print('\\nProcessed %s\\nSpam Classification: %s' % (filename, 'spam' if p else 'not spam'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.6 Optional (ungraded) exercise: Build your own dataset\n", + "\n", + "In this exercise, we provided a preprocessed training set and test set. These datasets were created using the same functions (`processEmail` and `emailFeatures`) that you now have completed. For this optional (ungraded) exercise, you will build your own dataset using the original emails from the SpamAssassin Public Corpus.\n", + "\n", + "Your task in this optional (ungraded) exercise is to download the original\n", + "files from the public corpus and extract them. After extracting them, you should run the `processEmail` and `emailFeatures` functions on each email to extract a feature vector from each email. This will allow you to build a dataset `X`, `y` of examples. You should then randomly divide up the dataset into a training set, a cross validation set and a test set.\n", + "\n", + "While you are building your own dataset, we also encourage you to try building your own vocabulary list (by selecting the high frequency words that occur in the dataset) and adding any additional features that you think\n", + "might be useful. Finally, we also suggest trying to use highly optimized SVM toolboxes such as [`LIBSVM`](https://www.csie.ntu.edu.tw/~cjlin/libsvm/) or [`scikit-learn`](http://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm).\n", + "\n", + "*You do not need to submit any solutions for this optional (ungraded) exercise.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..9ced8b9cb Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/exercise6.ipynb b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/exercise6.ipynb index cdc43975f..7dbfd0910 100644 --- a/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/exercise6.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/exercise6.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -40,6 +40,8 @@ "# will be used to load MATLAB mat datafile format\n", "from scipy.io import loadmat\n", "\n", + "from nltk.stem import PorterStemmer\n", + "\n", "# library written for this exercise providing additional functions for assignment submission, and others\n", "import utils\n", "\n", @@ -101,9 +103,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load from ex6data1\n", "# You will have X, y as keys in the dict data\n", @@ -147,9 +162,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# You should try to change the C value below and see how the decision\n", "# boundary varies (e.g., try C = 1000)\n", @@ -180,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -212,7 +240,7 @@ " \"\"\"\n", " sim = 0\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " sim = np.exp(-np.sum((x1 - x2) ** 2) / (2 * (sigma ** 2)))\n", "\n", "\n", " # =============================================================\n", @@ -228,9 +256,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gaussian Kernel between x1 = [1, 2, 1], x2 = [0, 4, -1], sigma = 2.00:\n", + "\t0.324652\n", + "(for sigma = 2, this value should be about 0.324652)\n", + "\n" + ] + } + ], "source": [ "x1 = np.array([1, 2, 1])\n", "x2 = np.array([0, 4, -1])\n", @@ -251,9 +290,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise support-vector-machines\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Gaussian Kernel | 25 / 25 | Nice work!\n", + " Parameters (C, sigma) for Dataset 3 | 0 / 25 | \n", + " Email Processing | 0 / 25 | \n", + " Email Feature Extraction | 0 / 25 | \n", + " --------------------------------\n", + " | 25 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[1] = gaussianKernel\n", "grader.grade()" @@ -272,9 +331,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load from ex6data2\n", "# You will have X, y as keys in the dict data\n", @@ -298,9 +370,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# SVM Parameters\n", "C = 1\n", @@ -326,9 +411,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load from ex6data3\n", "# You will have X, y, Xval, yval as keys in the dict data\n", @@ -356,7 +454,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -410,7 +508,22 @@ " sigma = 0.3\n", "\n", " # ====================== YOUR CODE HERE ======================\n", + " C_array = np.array([0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30])\n", + " sigma_array = np.array([0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30])\n", "\n", + " my_array = np.zeros([C_array.size, sigma_array.size])\n", + " \n", + " for i in np.arange(C_array.size):\n", + " for j in np.arange(sigma_array.size):\n", + " model= utils.svmTrain(X, y, C_array[i], gaussianKernel, args=(sigma_array[j],))\n", + " predictions = utils.svmPredict(model, Xval)\n", + " pred_error = np.mean(predictions != yval)\n", + " \n", + " my_array[i, j] = pred_error\n", + " \n", + " ind = np.unravel_index(np.argmin(my_array, axis = None), my_array.shape)\n", + " C = C_array[ind[0]]\n", + " sigma = sigma_array[ind[1]]\n", " \n", " \n", " # ============================================================\n", @@ -426,9 +539,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 0.1\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Try different SVM Parameters here\n", "C, sigma = dataset3Params(X, y, Xval, yval)\n", @@ -451,9 +584,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise support-vector-machines\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Gaussian Kernel | 25 / 25 | Nice work!\n", + " Parameters (C, sigma) for Dataset 3 | 25 / 25 | Nice work!\n", + " Email Processing | 0 / 25 | \n", + " Email Feature Extraction | 0 / 25 | \n", + " --------------------------------\n", + " | 50 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[2] = lambda : (C, sigma)\n", "grader.grade()" @@ -555,7 +708,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -655,7 +808,8 @@ " # Look up the word in the dictionary and add to word_indices if found\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - " \n", + " if word in vocabList:\n", + " word_indices.append(vocabList.index(word))\n", "\n", " # =============================================================\n", "\n", @@ -676,9 +830,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------------\n", + "Processed email:\n", + "----------------\n", + "anyon know how much it cost to host a web portal well it depend on how mani visitor your expect thi can be anywher from less than number buck a month to a coupl of dollar number you should checkout httpaddr or perhap amazon ec number if your run someth big to unsubscrib yourself from thi mail list send an email to emailaddr\n", + "-------------\n", + "Word Indices:\n", + "-------------\n", + "[85, 915, 793, 1076, 882, 369, 1698, 789, 1821, 1830, 882, 430, 1170, 793, 1001, 1894, 591, 1675, 237, 161, 88, 687, 944, 1662, 1119, 1061, 1698, 374, 1161, 476, 1119, 1892, 1509, 798, 1181, 1236, 511, 1119, 809, 1894, 1439, 1546, 180, 1698, 1757, 1895, 687, 1675, 991, 960, 1476, 70, 529, 1698, 530]\n" + ] + } + ], "source": [ "# To use an SVM to classify emails into Spam v.s. Non-Spam, you first need\n", "# to convert each email into a vector of features. In this part, you will\n", @@ -708,9 +877,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise support-vector-machines\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Gaussian Kernel | 25 / 25 | Nice work!\n", + " Parameters (C, sigma) for Dataset 3 | 25 / 25 | Nice work!\n", + " Email Processing | 25 / 25 | Nice work!\n", + " Email Feature Extraction | 0 / 25 | \n", + " --------------------------------\n", + " | 75 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[3] = processEmail\n", "grader.grade()" @@ -738,7 +927,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -798,7 +987,8 @@ " x = np.zeros(n)\n", "\n", " # ===================== YOUR CODE HERE ======================\n", - "\n", + " for i in word_indices:\n", + " x[i] =1\n", " \n", " \n", " # ===========================================================\n", @@ -815,9 +1005,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------------\n", + "Processed email:\n", + "----------------\n", + "anyon know how much it cost to host a web portal well it depend on how mani visitor your expect thi can be anywher from less than number buck a month to a coupl of dollar number you should checkout httpaddr or perhap amazon ec number if your run someth big to unsubscrib yourself from thi mail list send an email to emailaddr\n", + "\n", + "Length of feature vector: 1899\n", + "Number of non-zero entries: 45\n" + ] + } + ], "source": [ "# Extract Features\n", "with open(os.path.join('Data', 'emailSample1.txt')) as fid:\n", @@ -842,7 +1046,17 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise support-vector-machines\n", + "\n" + ] + } + ], "source": [ "grader[4] = emailFeatures\n", "grader.grade()" @@ -1021,7 +1235,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/token.pkl b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/token.pkl new file mode 100644 index 000000000..7724349de Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/token.pkl differ diff --git a/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/__pycache__/submission.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/__pycache__/submission.cpython-37.pyc new file mode 100644 index 000000000..29aaeff86 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/__pycache__/submission.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/.ipynb_checkpoints/exercise7-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/.ipynb_checkpoints/exercise7-checkpoint.ipynb new file mode 100644 index 000000000..f74f4b92f --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/.ipynb_checkpoints/exercise7-checkpoint.ipynb @@ -0,0 +1,1198 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 7:\n", + "# K-means Clustering and Principal Component Analysis\n", + "\n", + "## Introduction\n", + "\n", + "In this exercise, you will implement the K-means clustering algorithm and apply it to compress an image. In the second part, you will use principal component analysis to find a low-dimensional representation of face images. Before starting on the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, [`matplotlib`](https://matplotlib.org/) for plotting, and [`scipy`](https://docs.scipy.org/doc/scipy/reference/) for scientific and numerical computation functions and tools. You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Import regular expressions to process emails\n", + "import re\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "import matplotlib as mpl\n", + "\n", + "from IPython.display import HTML, display, clear_output\n", + "\n", + "try:\n", + " pyplot.rcParams[\"animation.html\"] = \"jshtml\"\n", + "except ValueError:\n", + " pyplot.rcParams[\"animation.html\"] = \"html5\"\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize\n", + "\n", + "# will be used to load MATLAB mat datafile format\n", + "from scipy.io import loadmat\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "%load_ext autoreload \n", + "%autoreload 2\n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submitted Function | Points |\n", + "| :- |:- |:- | :-: |\n", + "| 1 | [Find Closest Centroids](#section1) | [`findClosestCentroids`](#findClosestCentroids) | 30 |\n", + "| 2 | [Computed Centroid Means](#section2) | [`computeCentroids`](#computeCentroids) | 30 |\n", + "| 3 | [PCA](#section3) | [`pca`](#pca) | 20 |\n", + "| 4 | [Project Data](#section4) | [`projectData`](#projectData) | 10 |\n", + "| 5 | [Recover Data](#section5) | [`recoverData`](#recoverData) | 10 |\n", + "| | Total Points | |100 |\n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 K-means Clustering\n", + "\n", + "In this exercise, you will implement K-means algorithm and use it for image compression. You will first start on an example 2D dataset that will help you gain an intuition of how the K-means algorithm works. After\n", + "that, you wil use the K-means algorithm for image compression by reducing the number of colors that occur in an image to only those that are most common in that image.\n", + "\n", + "### 1.1 Implementing K-means\n", + "\n", + "The K-means algorithm is a method to automatically cluster similar data examples together. Concretely, you are given a training set $\\{x^{(1)} , \\cdots, x^{(m)}\\}$ (where $x^{(i)} \\in \\mathbb{R}^n$), and want to group the data into a few cohesive “clusters”. The intuition behind K-means is an iterative procedure that starts by guessing the initial centroids, and then refines this guess by repeatedly assigning examples to their closest centroids and then recomputing the centroids based on the assignments.\n", + "\n", + "The K-means algorithm is as follows:\n", + "\n", + "```python\n", + "centroids = kMeansInitCentroids(X, K)\n", + "for i in range(iterations):\n", + " # Cluster assignment step: Assign each data point to the\n", + " # closest centroid. idx[i] corresponds to cˆ(i), the index\n", + " # of the centroid assigned to example i\n", + " idx = findClosestCentroids(X, centroids)\n", + " \n", + " # Move centroid step: Compute means based on centroid\n", + " # assignments\n", + " centroids = computeMeans(X, idx, K)\n", + "```\n", + "\n", + "The inner-loop of the algorithm repeatedly carries out two steps: (1) Assigning each training example $x^{(i)}$ to its closest centroid, and (2) Recomputing the mean of each centroid using the points assigned to it. The K-means algorithm will always converge to some final set of means for the centroids. Note that the converged solution may not always be ideal and depends on the initial setting of the centroids. Therefore, in practice the K-means algorithm is usually run a few times with different random initializations. One way to choose between these different solutions from different random initializations is to choose the one with the lowest cost function value (distortion). You will implement the two phases of the K-means algorithm separately\n", + "in the next sections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 1.1.1 Finding closest centroids\n", + "\n", + "In the “cluster assignment” phase of the K-means algorithm, the algorithm assigns every training example $x^{(i)}$ to its closest centroid, given the current positions of centroids. Specifically, for every example $i$ we set\n", + "\n", + "$$c^{(i)} := j \\quad \\text{that minimizes} \\quad \\lvert\\rvert x^{(i)} - \\mu_j \\lvert\\rvert^2, $$\n", + "\n", + "where $c^{(i)}$ is the index of the centroid that is closest to $x^{(i)}$, and $\\mu_j$ is the position (value) of the $j^{th}$ centroid. Note that $c^{(i)}$ corresponds to `idx[i]` in the starter code.\n", + "\n", + "Your task is to complete the code in the function `findClosestCentroids`. This function takes the data matrix `X` and the locations of all centroids inside `centroids` and should output a one-dimensional array `idx` that holds the index (a value in $\\{1, ..., K\\}$, where $K$ is total number of centroids) of the closest centroid to every training example.\n", + "\n", + "You can implement this using a loop over every training example and every centroid.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def findClosestCentroids(X, centroids):\n", + " \"\"\"\n", + " Computes the centroid memberships for every example.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset of size (m, n) where each row is a single example. \n", + " That is, we have m examples each of n dimensions.\n", + " \n", + " centroids : array_like\n", + " The k-means centroids of size (K, n). K is the number\n", + " of clusters, and n is the the data dimension.\n", + " \n", + " Returns\n", + " -------\n", + " idx : array_like\n", + " A vector of size (m, ) which holds the centroids assignment for each\n", + " example (row) in the dataset X.\n", + " \n", + " Instructions\n", + " ------------\n", + " Go over every example, find its closest centroid, and store\n", + " the index inside `idx` at the appropriate location.\n", + " Concretely, idx[i] should contain the index of the centroid\n", + " closest to example i. Hence, it should be a value in the \n", + " range 0..K-1\n", + "\n", + " Note\n", + " ----\n", + " You can use a for-loop over the examples to compute this.\n", + " \"\"\"\n", + " # Set K\n", + " K = centroids.shape[0]\n", + "\n", + " # You need to return the following variables correctly.\n", + " idx = np.zeros(X.shape[0], dtype=int)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " for i in np.arange(idx.size):\n", + " \n", + " J = np.sqrt(np.sum(np.square(X[i] - centroids), axis = 1))\n", + " \n", + " idx[i] = np.argmin(J)\n", + " \n", + " \n", + " # =============================================================\n", + " return idx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the code in `findClosestCentroids`, the following cell will run your code and you should see the output `[0 2 1]` corresponding to the centroid assignments for the first 3 examples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load an example dataset that we will be using\n", + "data = loadmat(os.path.join('Data', 'ex7data2.mat'))\n", + "X = data['X']\n", + "\n", + "# Select an initial set of centroids\n", + "K = 3 # 3 Centroids\n", + "initial_centroids = np.array([[3, 3], [6, 2], [8, 5]])\n", + "\n", + "# Find the closest centroids for the examples using the initial_centroids\n", + "idx = findClosestCentroids(X, initial_centroids)\n", + "\n", + "print('Closest centroids for the first 3 examples:')\n", + "print(idx[:3])\n", + "print('(the closest centroids should be 0, 2, 1 respectively)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[1] = findClosestCentroids\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.1.2 Computing centroid means\n", + "\n", + "Given assignments of every point to a centroid, the second phase of the algorithm recomputes, for each centroid, the mean of the points that were assigned to it. Specifically, for every centroid $k$ we set\n", + "\n", + "$$ \\mu_k := \\frac{1}{\\left| C_k\\right|} \\sum_{i \\in C_k} x^{(i)}$$\n", + "\n", + "where $C_k$ is the set of examples that are assigned to centroid $k$. Concretely, if two examples say $x^{(3)}$ and $x^{(5)}$ are assigned to centroid $k = 2$, then you should update $\\mu_2 = \\frac{1}{2} \\left( x^{(3)} + x^{(5)} \\right)$.\n", + "\n", + "You should now complete the code in the function `computeCentroids`. You can implement this function using a loop over the centroids. You can also use a loop over the examples; but if you can use a vectorized implementation that does not use such a loop, your code may run faster.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def computeCentroids(X, idx, K):\n", + " \"\"\"\n", + " Returns the new centroids by computing the means of the data points\n", + " assigned to each centroid.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The datset where each row is a single data point. That is, it \n", + " is a matrix of size (m, n) where there are m datapoints each\n", + " having n dimensions. \n", + " \n", + " idx : array_like \n", + " A vector (size m) of centroid assignments (i.e. each entry in range [0 ... K-1])\n", + " for each example.\n", + " \n", + " K : int\n", + " Number of clusters\n", + " \n", + " Returns\n", + " -------\n", + " centroids : array_like\n", + " A matrix of size (K, n) where each row is the mean of the data \n", + " points assigned to it.\n", + " \n", + " Instructions\n", + " ------------\n", + " Go over every centroid and compute mean of all points that\n", + " belong to it. Concretely, the row vector centroids[i, :]\n", + " should contain the mean of the data points assigned to\n", + " cluster i.\n", + "\n", + " Note:\n", + " -----\n", + " You can use a for-loop over the centroids to compute this.\n", + " \"\"\"\n", + " # Useful variables\n", + " m, n = X.shape\n", + " # You need to return the following variables correctly.\n", + " centroids = np.zeros((K, n))\n", + "\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " \n", + " \n", + " # =============================================================\n", + " return centroids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the code in `computeCentroids`, the following cell will run your code and output the centroids after the first step of K-means." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Compute means based on the closest centroids found in the previous part.\n", + "centroids = computeCentroids(X, idx, K)\n", + "\n", + "print('Centroids computed after initial finding of closest centroids:')\n", + "print(centroids)\n", + "print('\\nThe centroids should be')\n", + "print(' [ 2.428301 3.157924 ]')\n", + "print(' [ 5.813503 2.633656 ]')\n", + "print(' [ 7.119387 3.616684 ]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[2] = computeCentroids\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 K-means on example dataset \n", + "\n", + "After you have completed the two functions (`findClosestCentroids` and `computeCentroids`), you have all the necessary pieces to run the K-means algorithm. The next cell will run the K-means algorithm on a toy 2D dataset to help you understand how K-means works. Your functions are called from inside the `runKmeans` function (in this assignment's `utils.py` module). We encourage you to take a look at the function to understand how it works. Notice that the code calls the two functions you implemented in a loop.\n", + "\n", + "When you run the next step, the K-means code will produce an animation that steps you through the progress of the algorithm at each iteration. At the end, your figure should look as the one displayed below.\n", + "\n", + "![](Figures/kmeans_result.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# Load an example dataset\n", + "data = loadmat(os.path.join('Data', 'ex7data2.mat'))\n", + "\n", + "# Settings for running K-Means\n", + "K = 3\n", + "max_iters = 10\n", + "\n", + "# For consistency, here we set centroids to specific values\n", + "# but in practice you want to generate them automatically, such as by\n", + "# settings them to be random examples (as can be seen in\n", + "# kMeansInitCentroids).\n", + "initial_centroids = np.array([[3, 3], [6, 2], [8, 5]])\n", + "\n", + "\n", + "# Run K-Means algorithm. The 'true' at the end tells our function to plot\n", + "# the progress of K-Means\n", + "centroids, idx, anim = utils.runkMeans(X, initial_centroids,\n", + " findClosestCentroids, computeCentroids, max_iters, True)\n", + "anim" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 Random initialization \n", + "\n", + "The initial assignments of centroids for the example dataset in the previous cell were designed so that you will see the same figure as that shown in the cell above. In practice, a\n", + "good strategy for initializing the centroids is to select random examples from the training set.\n", + "\n", + "In this part of the exercise, you should complete the function `kMeansInitCentroids` with the following code:\n", + "\n", + "```python\n", + "# Initialize the centroids to be random examples\n", + "\n", + "# Randomly reorder the indices of examples\n", + "randidx = np.random.permutation(X.shape[0])\n", + "# Take the first K examples as centroids\n", + "centroids = X[randidx[:K], :]\n", + "```\n", + "\n", + "The code above first randomly permutes the indices of the examples (using `permute` within the `numpy.random` module). Then, it selects the first $K$ examples based on the random permutation of the indices. This allows the examples to be selected at random without the risk of selecting the same example twice.\n", + "\n", + "*You do not need to make any submission for this part of the exercise*\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def kMeansInitCentroids(X, K):\n", + " \"\"\"\n", + " This function initializes K centroids that are to be used in K-means on the dataset x.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like \n", + " The dataset of size (m x n).\n", + " \n", + " K : int\n", + " The number of clusters.\n", + " \n", + " Returns\n", + " -------\n", + " centroids : array_like\n", + " Centroids of the clusters. This is a matrix of size (K x n).\n", + " \n", + " Instructions\n", + " ------------\n", + " You should set centroids to randomly chosen examples from the dataset X.\n", + " \"\"\"\n", + " m, n = X.shape\n", + " \n", + " # You should return this values correctly\n", + " centroids = np.zeros((K, n))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + "\n", + " \n", + " # =============================================================\n", + " return centroids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4 Image compression with K-means\n", + "\n", + "In this exercise, you will apply K-means to image compression. We will use the image below as an example (property of Frank Wouters with permission to this class).\n", + "\n", + "![](Data/bird_small.png)\n", + "\n", + "In a straightforward 24-bit color representation of an image, each pixel is represented as three 8-bit unsigned integers (ranging from 0 to 255) that specify the red, green and blue intensity values. This encoding is often referred to as the RGB encoding. Our image contains thousands of colors, and in this part of the exercise, you will reduce the number of colors to 16 colors.\n", + "\n", + "By making this reduction, it is possible to represent (compress) the photo in an efficient way. Specifically, you only need to store the RGB values of the 16 selected colors, and for each pixel in the image you now need to only store the index of the color at that location (where only 4 bits are necessary to represent 16 possibilities).\n", + "\n", + "In this exercise, you will use the K-means algorithm to select the 16 colors that will be used to represent the compressed image. Concretely, you will treat every pixel in the original image as a data example and use the K-means algorithm to find the 16 colors that best group (cluster) the pixels in the 3-dimensional RGB space. Once you have computed the cluster centroids on the image, you will then use the 16 colors to replace the pixels in the original image.\n", + "\n", + "#### 1.4.1 K-means on pixels\n", + "\n", + "In python, images can be read in as follows:\n", + "\n", + "```python\n", + "# Load 128x128 color image (bird_small.png)\n", + "img = mpl.image.imread(os.path.join('Data', 'bird_small.png'))\n", + "\n", + "# We have already imported matplotlib as mpl at the beginning of this notebook.\n", + "```\n", + "This creates a three-dimensional matrix `A` whose first two indices identify a pixel position and whose last index represents red, green, or blue. For example, A[50, 33, 2] gives the blue intensity of the pixel at row 51 and column 34.\n", + "\n", + "The code in the following cell first loads the image, and then reshapes it to create an m x 3 matrix of pixel colors (where m = 16384 = 128 x 128), and calls your K-means function on it.\n", + "\n", + "After finding the top K = 16 colors to represent the image, you can now assign each pixel position to its closest centroid using the `findClosestCentroids` function. This allows you to represent the original image using the centroid assignments of each pixel. Notice that you have significantly reduced the number of bits that are required to describe the image. The original image required 24 bits for each one of the 128 x 128 pixel locations, resulting in total size of 128 x 128 x 24 = 393,216 bits. The new representation requires some overhead storage in form of a dictionary of 16 colors, each of which require 24 bits, but the image itself then only requires 4 bits per pixel location. The final number of bits used is therefore 16 x 24 + 128 x 128 x 4 = 65,920 bits, which corresponds to compressing the original image by about a factor of 6.\n", + "\n", + "Finally, you can view the effects of the compression by reconstructing the image based only on the centroid assignments. Specifically, you can replace each pixel location with the mean of the centroid assigned to it. The figure below shows the reconstruction we obtained. \n", + "\n", + "![](Figures/bird_compression.png)\n", + "\n", + "Even though the resulting image retains most of the characteristics of the original, we also see some compression artifacts.\n", + "\n", + "Run the following cell to compute the centroids and the centroid allocation of each pixel in the image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ======= Experiment with these parameters ================\n", + "# You should try different values for those parameters\n", + "K = 16\n", + "max_iters = 10\n", + "\n", + "# Load an image of a bird\n", + "# Change the file name and path to experiment with your own images\n", + "A = mpl.image.imread(os.path.join('Data', 'bird_small.png'))\n", + "# ==========================================================\n", + "\n", + "# Divide by 255 so that all values are in the range 0 - 1\n", + "A /= 255\n", + "\n", + "# Reshape the image into an Nx3 matrix where N = number of pixels.\n", + "# Each row will contain the Red, Green and Blue pixel values\n", + "# This gives us our dataset matrix X that we will use K-Means on.\n", + "X = A.reshape(-1, 3)\n", + "\n", + "# When using K-Means, it is important to randomly initialize centroids\n", + "# You should complete the code in kMeansInitCentroids above before proceeding\n", + "initial_centroids = kMeansInitCentroids(X, K)\n", + "\n", + "# Run K-Means\n", + "centroids, idx = utils.runkMeans(X, initial_centroids,\n", + " findClosestCentroids,\n", + " computeCentroids,\n", + " max_iters)\n", + "\n", + "# We can now recover the image from the indices (idx) by mapping each pixel\n", + "# (specified by its index in idx) to the centroid value\n", + "# Reshape the recovered image into proper dimensions\n", + "X_recovered = centroids[idx, :].reshape(A.shape)\n", + "\n", + "# Display the original image, rescale back by 255\n", + "fig, ax = pyplot.subplots(1, 2, figsize=(8, 4))\n", + "ax[0].imshow(A*255)\n", + "ax[0].set_title('Original')\n", + "ax[0].grid(False)\n", + "\n", + "# Display compressed image, rescale back by 255\n", + "ax[1].imshow(X_recovered*255)\n", + "ax[1].set_title('Compressed, with %d colors' % K)\n", + "ax[1].grid(False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You do not need to make any submissions for this part of the exercise.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.5 Optional (ungraded) exercise: Use your own image\n", + "\n", + "In this exercise, modify the code we have supplied in the previous cell to run on one of your own images. Note that if your image is very large, then K-means can take a long time to run. Therefore, we recommend that you resize your images to\n", + "manageable sizes before running the code. You can also try to vary $K$ to see the effects on the compression." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Principal Component Analysis\n", + "\n", + "In this exercise, you will use principal component analysis (PCA) to perform dimensionality reduction. You will first experiment with an example 2D dataset to get intuition on how PCA works, and then use it on a bigger dataset of 5000 face image dataset.\n", + "\n", + "### 2.1 Example Dataset\n", + "\n", + "To help you understand how PCA works, you will first start with a 2D dataset which has one direction of large variation and one of smaller variation. The cell below will plot the training data, also shown in here:\n", + "\n", + "In this part of the exercise, you will visualize what happens when you use PCA to reduce the data from 2D to 1D. In practice, you might want to reduce data from 256 to 50 dimensions, say; but using lower dimensional data in this example allows us to visualize the algorithms better." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the dataset into the variable X \n", + "data = loadmat(os.path.join('Data', 'ex7data1.mat'))\n", + "X = data['X']\n", + "\n", + "# Visualize the example dataset\n", + "pyplot.plot(X[:, 0], X[:, 1], 'bo', ms=10, mec='k', mew=1)\n", + "pyplot.axis([0.5, 6.5, 2, 8])\n", + "pyplot.gca().set_aspect('equal')\n", + "pyplot.grid(False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.2 Implementing PCA\n", + "\n", + "In this part of the exercise, you will implement PCA. PCA consists of two computational steps: \n", + "\n", + "1. Compute the covariance matrix of the data.\n", + "2. Use SVD (in python we use numpy's implementation `np.linalg.svd`) to compute the eigenvectors $U_1$, $U_2$, $\\dots$, $U_n$. These will correspond to the principal components of variation in the data.\n", + "\n", + "First, you should compute the covariance matrix of the data, which is given by:\n", + "\n", + "$$ \\Sigma = \\frac{1}{m} X^T X$$\n", + "\n", + "where $X$ is the data matrix with examples in rows, and $m$ is the number of examples. Note that $\\Sigma$ is a $n \\times n$ matrix and not the summation operator. \n", + "\n", + "After computing the covariance matrix, you can run SVD on it to compute the principal components. In python and `numpy` (or `scipy`), you can run SVD with the following command: `U, S, V = np.linalg.svd(Sigma)`, where `U` will contain the principal components and `S` will contain a diagonal matrix. Note that the `scipy` library also has a similar function to compute SVD `scipy.linalg.svd`. The functions in the two libraries use the same C-based library (LAPACK) for the SVD computation, but the `scipy` version provides more options and arguments to control SVD computation. In this exercise, we will stick with the `numpy` implementation of SVD.\n", + "\n", + "Complete the code in the following cell to implemente PCA.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def pca(X):\n", + " \"\"\"\n", + " Run principal component analysis.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset to be used for computing PCA. It has dimensions (m x n)\n", + " where m is the number of examples (observations) and n is \n", + " the number of features.\n", + " \n", + " Returns\n", + " -------\n", + " U : array_like\n", + " The eigenvectors, representing the computed principal components\n", + " of X. U has dimensions (n x n) where each column is a single \n", + " principal component.\n", + " \n", + " S : array_like\n", + " A vector of size n, contaning the singular values for each\n", + " principal component. Note this is the diagonal of the matrix we \n", + " mentioned in class.\n", + " \n", + " Instructions\n", + " ------------\n", + " You should first compute the covariance matrix. Then, you\n", + " should use the \"svd\" function to compute the eigenvectors\n", + " and eigenvalues of the covariance matrix. \n", + "\n", + " Notes\n", + " -----\n", + " When computing the covariance matrix, remember to divide by m (the\n", + " number of examples).\n", + " \"\"\"\n", + " # Useful values\n", + " m, n = X.shape\n", + "\n", + " # You need to return the following variables correctly.\n", + " U = np.zeros(n)\n", + " S = np.zeros(n)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " \n", + " \n", + " # ============================================================\n", + " return U, S" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before using PCA, it is important to first normalize the data by subtracting the mean value of each feature from the dataset, and scaling each dimension so that they are in the same range.\n", + "\n", + "In the next cell, this normalization will be performed for you using the `utils.featureNormalize` function.\n", + "After normalizing the data, you can run PCA to compute the principal components. Your task is to complete the code in the function `pca` to compute the principal components of the dataset. \n", + "\n", + "Once you have completed the function `pca`, the following cell will run PCA on the example dataset and plot the corresponding principal components found similar to the figure below. \n", + "\n", + "![](Figures/pca_components.png)\n", + "\n", + "\n", + "The following cell will also output the top principal component (eigenvector) found, and you should expect to see an output of about `[-0.707 -0.707]`. (It is possible that `numpy` may instead output the negative of this, since $U_1$ and $-U_1$ are equally valid choices for the first principal component.)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Before running PCA, it is important to first normalize X\n", + "X_norm, mu, sigma = utils.featureNormalize(X)\n", + "\n", + "# Run PCA\n", + "U, S = pca(X_norm)\n", + "\n", + "# Draw the eigenvectors centered at mean of data. These lines show the\n", + "# directions of maximum variations in the dataset.\n", + "fig, ax = pyplot.subplots()\n", + "ax.plot(X[:, 0], X[:, 1], 'bo', ms=10, mec='k', mew=0.25)\n", + "\n", + "for i in range(2):\n", + " ax.arrow(mu[0], mu[1], 1.5 * S[i]*U[0, i], 1.5 * S[i]*U[1, i],\n", + " head_width=0.25, head_length=0.2, fc='k', ec='k', lw=2, zorder=1000)\n", + "\n", + "ax.axis([0.5, 6.5, 2, 8])\n", + "ax.set_aspect('equal')\n", + "ax.grid(False)\n", + "\n", + "print('Top eigenvector: U[:, 0] = [{:.6f} {:.6f}]'.format(U[0, 0], U[1, 0]))\n", + "print(' (you should expect to see [-0.707107 -0.707107])')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[3] = pca\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Dimensionality Reduction with PCA\n", + "\n", + "After computing the principal components, you can use them to reduce the feature dimension of your dataset by projecting each example onto a lower dimensional space, $x^{(i)} \\rightarrow z^{(i)}$ (e.g., projecting the data from 2D to 1D). In this part of the exercise, you will use the eigenvectors returned by PCA and\n", + "project the example dataset into a 1-dimensional space. In practice, if you were using a learning algorithm such as linear regression or perhaps neural networks, you could now use the projected data instead of the original data. By using the projected data, you can train your model faster as there are less dimensions in the input.\n", + "\n", + "\n", + "\n", + "#### 2.3.1 Projecting the data onto the principal components\n", + "\n", + "You should now complete the code in the function `projectData`. Specifically, you are given a dataset `X`, the principal components `U`, and the desired number of dimensions to reduce to `K`. You should project each example in `X` onto the top `K` components in `U`. Note that the top `K` components in `U` are given by\n", + "the first `K` columns of `U`, that is `Ureduce = U[:, :K]`.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def projectData(X, U, K):\n", + " \"\"\"\n", + " Computes the reduced data representation when projecting only \n", + " on to the top K eigenvectors.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The input dataset of shape (m x n). The dataset is assumed to be \n", + " normalized.\n", + " \n", + " U : array_like\n", + " The computed eigenvectors using PCA. This is a matrix of \n", + " shape (n x n). Each column in the matrix represents a single\n", + " eigenvector (or a single principal component).\n", + " \n", + " K : int\n", + " Number of dimensions to project onto. Must be smaller than n.\n", + " \n", + " Returns\n", + " -------\n", + " Z : array_like\n", + " The projects of the dataset onto the top K eigenvectors. \n", + " This will be a matrix of shape (m x k).\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the projection of the data using only the top K \n", + " eigenvectors in U (first K columns). \n", + " For the i-th example X[i,:], the projection on to the k-th \n", + " eigenvector is given as follows:\n", + " \n", + " x = X[i, :]\n", + " projection_k = np.dot(x, U[:, k])\n", + "\n", + " \"\"\"\n", + " # You need to return the following variables correctly.\n", + " Z = np.zeros((X.shape[0], K))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + "\n", + " \n", + " # =============================================================\n", + " return Z" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the code in `projectData`, the following cell will project the first example onto the first dimension and you should see a value of about 1.481 (or possibly -1.481, if you got $-U_1$ instead of $U_1$)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Project the data onto K = 1 dimension\n", + "K = 1\n", + "Z = projectData(X_norm, U, K)\n", + "print('Projection of the first example: {:.6f}'.format(Z[0, 0]))\n", + "print('(this value should be about : 1.481274)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[4] = projectData\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 2.3.2 Reconstructing an approximation of the data\n", + "\n", + "After projecting the data onto the lower dimensional space, you can approximately recover the data by projecting them back onto the original high dimensional space. Your task is to complete the function `recoverData` to project each example in `Z` back onto the original space and return the recovered approximation in `Xrec`.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def recoverData(Z, U, K):\n", + " \"\"\"\n", + " Recovers an approximation of the original data when using the \n", + " projected data.\n", + " \n", + " Parameters\n", + " ----------\n", + " Z : array_like\n", + " The reduced data after applying PCA. This is a matrix\n", + " of shape (m x K).\n", + " \n", + " U : array_like\n", + " The eigenvectors (principal components) computed by PCA.\n", + " This is a matrix of shape (n x n) where each column represents\n", + " a single eigenvector.\n", + " \n", + " K : int\n", + " The number of principal components retained\n", + " (should be less than n).\n", + " \n", + " Returns\n", + " -------\n", + " X_rec : array_like\n", + " The recovered data after transformation back to the original \n", + " dataset space. This is a matrix of shape (m x n), where m is \n", + " the number of examples and n is the dimensions (number of\n", + " features) of original datatset.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the approximation of the data by projecting back\n", + " onto the original space using the top K eigenvectors in U.\n", + " For the i-th example Z[i,:], the (approximate)\n", + " recovered data for dimension j is given as follows:\n", + "\n", + " v = Z[i, :]\n", + " recovered_j = np.dot(v, U[j, :K])\n", + "\n", + " Notice that U[j, :K] is a vector of size K.\n", + " \"\"\"\n", + " # You need to return the following variables correctly.\n", + " X_rec = np.zeros((Z.shape[0], U.shape[0]))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " \n", + "\n", + " # =============================================================\n", + " return X_rec" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the code in `recoverData`, the following cell will recover an approximation of the first example and you should see a value of about `[-1.047 -1.047]`. The code will then plot the data in this reduced dimension space. This will show you what the data looks like when using only the corresponding eigenvectors to reconstruct it. An example of what you should get for PCA projection is shown in this figure: \n", + "\n", + "![](Figures/pca_reconstruction.png)\n", + "\n", + "In the figure above, the original data points are indicated with the blue circles, while the projected data points are indicated with the red circles. The projection effectively only retains the information in the direction given by $U_1$. The dotted lines show the distance from the data points in original space to the projected space. Those dotted lines represent the error measure due to PCA projection." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X_rec = recoverData(Z, U, K)\n", + "print('Approximation of the first example: [{:.6f} {:.6f}]'.format(X_rec[0, 0], X_rec[0, 1]))\n", + "print(' (this value should be about [-1.047419 -1.047419])')\n", + "\n", + "# Plot the normalized dataset (returned from featureNormalize)\n", + "fig, ax = pyplot.subplots(figsize=(5, 5))\n", + "ax.plot(X_norm[:, 0], X_norm[:, 1], 'bo', ms=8, mec='b', mew=0.5)\n", + "ax.set_aspect('equal')\n", + "ax.grid(False)\n", + "pyplot.axis([-3, 2.75, -3, 2.75])\n", + "\n", + "# Draw lines connecting the projected points to the original points\n", + "ax.plot(X_rec[:, 0], X_rec[:, 1], 'ro', mec='r', mew=2, mfc='none')\n", + "for xnorm, xrec in zip(X_norm, X_rec):\n", + " ax.plot([xnorm[0], xrec[0]], [xnorm[1], xrec[1]], '--k', lw=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grader[5] = recoverData\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Face Image Dataset\n", + "\n", + "In this part of the exercise, you will run PCA on face images to see how it can be used in practice for dimension reduction. The dataset `ex7faces.mat` contains a dataset `X` of face images, each $32 \\times 32$ in grayscale. This dataset was based on a [cropped version](http://conradsanderson.id.au/lfwcrop/) of the [labeled faces in the wild](http://vis-www.cs.umass.edu/lfw/) dataset. Each row of `X` corresponds to one face image (a row vector of length 1024). \n", + "\n", + "The next cell will load and visualize the first 100 of these face images similar to what is shown in this figure:\n", + "\n", + "![Faces](Figures/faces.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load Face dataset\n", + "data = loadmat(os.path.join('Data', 'ex7faces.mat'))\n", + "X = data['X']\n", + "\n", + "# Display the first 100 faces in the dataset\n", + "utils.displayData(X[:100, :], figsize=(8, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.4.1 PCA on Faces\n", + "\n", + "To run PCA on the face dataset, we first normalize the dataset by subtracting the mean of each feature from the data matrix `X`. After running PCA, you will obtain the principal components of the dataset. Notice that each principal component in `U` (each column) is a vector of length $n$ (where for the face dataset, $n = 1024$). It turns out that we can visualize these principal components by reshaping each of them into a $32 \\times 32$ matrix that corresponds to the pixels in the original dataset. \n", + "\n", + "The following cell will first normalize the dataset for you and then run your PCA code. Then, the first 36 principal components (conveniently called eigenfaces) that describe the largest variations are displayed. If you want, you can also change the code to display more principal components to see how they capture more and more details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# normalize X by subtracting the mean value from each feature\n", + "X_norm, mu, sigma = utils.featureNormalize(X)\n", + "\n", + "# Run PCA\n", + "U, S = pca(X_norm)\n", + "\n", + "# Visualize the top 36 eigenvectors found\n", + "utils.displayData(U[:, :36].T, figsize=(8, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.4.2 Dimensionality Reduction\n", + "\n", + "Now that you have computed the principal components for the face dataset, you can use it to reduce the dimension of the face dataset. This allows you to use your learning algorithm with a smaller input size (e.g., 100 dimensions) instead of the original 1024 dimensions. This can help speed up your learning algorithm.\n", + "\n", + "The next cell will project the face dataset onto only the first 100 principal components. Concretely, each face image is now described by a vector $z^{(i)} \\in \\mathbb{R}^{100}$. To understand what is lost in the dimension reduction, you can recover the data using only the projected dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Project images to the eigen space using the top k eigenvectors \n", + "# If you are applying a machine learning algorithm \n", + "K = 100\n", + "Z = projectData(X_norm, U, K)\n", + "\n", + "print('The projected data Z has a shape of: ', Z.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next cell, an approximate recovery of the data is performed and the original and projected face images\n", + "are displayed similar to what is shown here:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "From the reconstruction, you can observe that the general structure and appearance of the face are kept while the fine details are lost. This is a remarkable reduction (more than 10x) in the dataset size that can help speed up your learning algorithm significantly. For example, if you were training a neural network to perform person recognition (given a face image, predict the identity of the person), you can use the dimension reduced input of only a 100 dimensions instead of the original pixels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Project images to the eigen space using the top K eigen vectors and \n", + "# visualize only using those K dimensions\n", + "# Compare to the original input, which is also displayed\n", + "K = 100\n", + "X_rec = recoverData(Z, U, K)\n", + "\n", + "# Display normalized data\n", + "utils.displayData(X_norm[:100, :], figsize=(6, 6))\n", + "pyplot.gcf().suptitle('Original faces')\n", + "\n", + "# Display reconstructed data from only k eigenfaces\n", + "utils.displayData(X_rec[:100, :], figsize=(6, 6))\n", + "pyplot.gcf().suptitle('Recovered faces')\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.5 Optional (ungraded) exercise: PCA for visualization\n", + "\n", + "In the earlier K-means image compression exercise, you used the K-means algorithm in the 3-dimensional RGB space. We reduced each pixel of the RGB image to be represented by 16 clusters. In the next cell, we have provided code to visualize the final pixel assignments in this 3D space. Each data point is colored according to the cluster it has been assigned to. You can drag your mouse on the figure to rotate and inspect this data in 3 dimensions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# this allows to have interactive plot to rotate the 3-D plot\n", + "# The double identical statement is on purpose\n", + "# see: https://stackoverflow.com/questions/43545050/using-matplotlib-notebook-after-matplotlib-inline-in-jupyter-notebook-doesnt\n", + "%matplotlib notebook\n", + "%matplotlib notebook\n", + "from matplotlib import pyplot\n", + "\n", + "\n", + "A = mpl.image.imread(os.path.join('Data', 'bird_small.png'))\n", + "A /= 255\n", + "X = A.reshape(-1, 3)\n", + "\n", + "# perform the K-means clustering again here\n", + "K = 16\n", + "max_iters = 10\n", + "initial_centroids = kMeansInitCentroids(X, K)\n", + "centroids, idx = utils.runkMeans(X, initial_centroids,\n", + " findClosestCentroids,\n", + " computeCentroids, max_iters)\n", + "\n", + "# Sample 1000 random indexes (since working with all the data is\n", + "# too expensive. If you have a fast computer, you may increase this.\n", + "sel = np.random.choice(X.shape[0], size=1000)\n", + "\n", + "fig = pyplot.figure(figsize=(6, 6))\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "\n", + "ax.scatter(X[sel, 0], X[sel, 1], X[sel, 2], cmap='rainbow', c=idx[sel], s=8**2)\n", + "ax.set_title('Pixel dataset plotted in 3D.\\nColor shows centroid memberships')\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It turns out that visualizing datasets in 3 dimensions or greater can be cumbersome. Therefore, it is often desirable to only display the data in 2D even at the cost of losing some information. In practice, PCA is often used to reduce the dimensionality of data for visualization purposes. \n", + "\n", + "In the next cell,we will apply your implementation of PCA to the 3-dimensional data to reduce it to 2 dimensions and visualize the result in a 2D scatter plot. The PCA projection can be thought of as a rotation that selects the view that maximizes the spread of the data, which often corresponds to the “best” view." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Subtract the mean to use PCA\n", + "X_norm, mu, sigma = utils.featureNormalize(X)\n", + "\n", + "# PCA and project the data to 2D\n", + "U, S = pca(X_norm)\n", + "Z = projectData(X_norm, U, 2)\n", + "\n", + "# Reset matplotlib to non-interactive\n", + "%matplotlib inline\n", + "\n", + "fig = pyplot.figure(figsize=(6, 6))\n", + "ax = fig.add_subplot(111)\n", + "\n", + "ax.scatter(Z[sel, 0], Z[sel, 1], cmap='rainbow', c=idx[sel], s=64)\n", + "ax.set_title('Pixel dataset plotted in 2D, using PCA for dimensionality reduction')\n", + "ax.grid(False)\n", + "pass" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..c64d6bef9 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/exercise7.ipynb b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/exercise7.ipynb index 066811220..9ae1c72a5 100644 --- a/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/exercise7.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/exercise7.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ "# library written for this exercise providing additional functions for assignment submission, and others\n", "import utils\n", "\n", - "%load_ext autoreload \n", + "%load_ext autoreload\n", "%autoreload 2\n", "\n", "# define the submission/grader object for this exercise\n", @@ -142,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -185,7 +185,11 @@ " idx = np.zeros(X.shape[0], dtype=int)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " for i in np.arange(idx.size):\n", + " \n", + " J = np.sqrt(np.sum(np.square(X[i] - centroids), axis = 1))\n", + " \n", + " idx[i] = np.argmin(J)\n", " \n", " \n", " # =============================================================\n", @@ -201,9 +205,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Closest centroids for the first 3 examples:\n", + "[0 2 1]\n", + "(the closest centroids should be 0, 2, 1 respectively)\n" + ] + } + ], "source": [ "# Load an example dataset that we will be using\n", "data = loadmat(os.path.join('Data', 'ex7data2.mat'))\n", @@ -230,9 +244,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise k-means-clustering-and-pca\n", + "\n", + "Login (email address): tanmayss2109@gmail.com\n", + "Token: XoRHvFI3nIPcxISp\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Find Closest Centroids (k-Means) | 30 / 30 | Nice work!\n", + " Compute Centroid Means (k-Means) | 0 / 30 | \n", + " PCA | 0 / 20 | \n", + " Project Data (PCA) | 0 / 10 | \n", + " Recover Data (PCA) | 0 / 10 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[1] = findClosestCentroids\n", "grader.grade()" @@ -257,7 +293,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -305,7 +341,8 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - " \n", + " for i in np.arange(K):\n", + " centroids[i] = np.mean(X[idx == i], axis = 0)\n", " \n", " # =============================================================\n", " return centroids" @@ -320,9 +357,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Centroids computed after initial finding of closest centroids:\n", + "[[2.42830111 3.15792418]\n", + " [5.81350331 2.63365645]\n", + " [7.11938687 3.6166844 ]]\n", + "\n", + "The centroids should be\n", + " [ 2.428301 3.157924 ]\n", + " [ 5.813503 2.633656 ]\n", + " [ 7.119387 3.616684 ]\n" + ] + } + ], "source": [ "# Compute means based on the closest centroids found in the previous part.\n", "centroids = computeCentroids(X, idx, K)\n", @@ -344,9 +397,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise k-means-clustering-and-pca\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Find Closest Centroids (k-Means) | 30 / 30 | Nice work!\n", + " Compute Centroid Means (k-Means) | 30 / 30 | Nice work!\n", + " PCA | 0 / 20 | \n", + " Project Data (PCA) | 0 / 10 | \n", + " Recover Data (PCA) | 0 / 10 | \n", + " --------------------------------\n", + " | 60 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[2] = computeCentroids\n", "grader.grade()" @@ -367,11 +441,4390 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + " \n", + "
\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load an example dataset\n", "data = loadmat(os.path.join('Data', 'ex7data2.mat'))\n", @@ -422,7 +4875,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -454,7 +4907,9 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - "\n", + " randidx = np.random.permutation(X.shape[0])\n", + " # Take the first K examples as centroids\n", + " centroids = X[randidx[:K], :]\n", " \n", " # =============================================================\n", " return centroids" @@ -503,9 +4958,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# ======= Experiment with these parameters ================\n", "# You should try different values for those parameters\n", @@ -586,9 +5054,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load the dataset into the variable X \n", "data = loadmat(os.path.join('Data', 'ex7data1.mat'))\n", @@ -627,7 +5108,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -673,7 +5154,9 @@ " S = np.zeros(n)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " \n", + " Sigma = (1 / m) * (X.T.dot(X))\n", + " U, S, V = np.linalg.svd(Sigma)\n", " \n", " \n", " # ============================================================\n", @@ -699,9 +5182,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Top eigenvector: U[:, 0] = [-0.707107 -0.707107]\n", + " (you should expect to see [-0.707107 -0.707107])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Before running PCA, it is important to first normalize X\n", "X_norm, mu, sigma = utils.featureNormalize(X)\n", @@ -735,9 +5239,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise k-means-clustering-and-pca\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Find Closest Centroids (k-Means) | 30 / 30 | Nice work!\n", + " Compute Centroid Means (k-Means) | 30 / 30 | Nice work!\n", + " PCA | 20 / 20 | Nice work!\n", + " Project Data (PCA) | 0 / 10 | \n", + " Recover Data (PCA) | 0 / 10 | \n", + " --------------------------------\n", + " | 80 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[3] = pca\n", "grader.grade()" @@ -763,7 +5288,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -808,7 +5333,7 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - "\n", + " Z = np.dot(X, U[:, :K])\n", " \n", " # =============================================================\n", " return Z" @@ -823,9 +5348,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Projection of the first example: 1.481274\n", + "(this value should be about : 1.481274)\n" + ] + } + ], "source": [ "# Project the data onto K = 1 dimension\n", "K = 1\n", @@ -845,7 +5379,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise k-means-clustering-and-pca\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n" + ] + } + ], "source": [ "grader[4] = projectData\n", "grader.grade()" @@ -913,7 +5458,7 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", "\n", - " \n", + " X_rec = Z.dot(U[:, :K].T)\n", "\n", " # =============================================================\n", " return X_rec" @@ -1186,7 +5731,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/token.pkl b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/token.pkl new file mode 100644 index 000000000..b028a2890 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/token.pkl differ diff --git a/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/__pycache__/submission.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/__pycache__/submission.cpython-37.pyc new file mode 100644 index 000000000..fc86be8a1 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/__pycache__/submission.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 8/Exercise8/.ipynb_checkpoints/exercise8-checkpoint.ipynb b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/.ipynb_checkpoints/exercise8-checkpoint.ipynb new file mode 100644 index 000000000..8748a9866 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/.ipynb_checkpoints/exercise8-checkpoint.ipynb @@ -0,0 +1,1433 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 8:\n", + "# Anomaly Detection and Recommender Systems\n", + "\n", + "\n", + "## Introduction \n", + "\n", + "In this exercise, you will implement the anomaly detection algorithm and\n", + "apply it to detect failing servers on a network. In the second part, you will\n", + "use collaborative filtering to build a recommender system for movies. Before\n", + "starting on the programming exercise, we strongly recommend watching the\n", + "video lectures and completing the review questions for the associated topics.\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, [`matplotlib`](https://matplotlib.org/) for plotting, and [`scipy`](https://docs.scipy.org/doc/scipy/reference/) for scientific and numerical computation functions and tools. You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot\n", + "import matplotlib as mpl\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize\n", + "\n", + "# will be used to load MATLAB mat datafile format\n", + "from scipy.io import loadmat\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "# define the submission/grader object for this exercise\n", + "grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submitted Function | Points |\n", + "| :- |:- |:- | :-: |\n", + "| 1 | [Estimate Gaussian Parameters](#section1) | [`estimateGaussian`](#estimateGaussian) | 15 |\n", + "| 2 | [Select Threshold](#section2) | [`selectThreshold`](#selectThreshold) | 15 |\n", + "| 3 | [Collaborative Filtering Cost](#section3) | [`cofiCostFunc`](#cofiCostFunc) | 20 |\n", + "| 4 | [Collaborative Filtering Gradient](#section4) | [`cofiCostFunc`](#cofiCostFunc) | 30 |\n", + "| 5 | [Regularized Cost](#section5) | [`cofiCostFunc`](#cofiCostFunc) | 10 |\n", + "| 6 | [Gradient with regularization](#section6) | [`cofiCostFunc`](#cofiCostFunc) | 10 |\n", + "| | Total Points | |100 |\n", + "\n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 Anomaly Detection \n", + "\n", + "In this exercise, you will implement an anomaly detection algorithm to detect anomalous behavior in server computers. The features measure the throughput (mb/s) and latency (ms) of response of each server. While your servers were operating, you collected $m = 307$ examples of how they were behaving, and thus have an unlabeled dataset $\\{x^{(1)}, \\dots, x^{(m)}\\}$. You suspect that the vast majority of these examples are “normal” (non-anomalous) examples of the servers operating normally, but there might also be some examples of servers acting anomalously within this dataset.\n", + "\n", + "You will use a Gaussian model to detect anomalous examples in your dataset. You will first start on a 2D dataset that will allow you to visualize what the algorithm is doing. On that dataset you will fit a Gaussian distribution and then find values that have very low probability and hence can be considered anomalies. After that, you will apply the anomaly detection algorithm to a larger dataset with many dimensions.\n", + "\n", + "We start this exercise by using a small dataset that is easy to visualize. Our example case consists of 2 network server statistics across several machines: the latency and throughput of each machine. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# The following command loads the dataset.\n", + "data = loadmat(os.path.join('Data', 'ex8data1.mat'))\n", + "X, Xval, yval = data['X'], data['Xval'], data['yval'][:, 0]\n", + "\n", + "# Visualize the example dataset\n", + "pyplot.plot(X[:, 0], X[:, 1], 'bx', mew=2, mec='k', ms=6)\n", + "pyplot.axis([0, 30, 0, 30])\n", + "pyplot.xlabel('Latency (ms)')\n", + "pyplot.ylabel('Throughput (mb/s)')\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Gaussian distribution\n", + "\n", + "To perform anomaly detection, you will first need to fit a model to the data's distribution. Given a training set $\\{x^{(1)}, \\dots, x^{(m)} \\}$ (where $x^{(i)} \\in \\mathbb{R}^n$ ), you want to estimate the Gaussian distribution for each of the features $x_i$ . For each feature $i = 1 \\dots n$, you need to find parameters $\\mu_i$ and $\\sigma_i^2$ that fit the data in the $i^{th}$ dimension $\\{ x_i^{(1)}, \\dots, x_i^{(m)} \\}$ (the $i^{th}$ dimension of each example).\n", + "\n", + "The Gaussian distribution is given by\n", + "\n", + "$$ p\\left( x; \\mu, \\sigma^2 \\right) = \\frac{1}{\\sqrt{2\\pi\\sigma^2}} e^{-\\frac{\\left(x-\\mu\\right)^2}{2\\sigma^2}},$$\n", + "where $\\mu$ is the mean and $\\sigma^2$ is the variance.\n", + "\n", + "\n", + "### 1.2 Estimating parameters for a Gaussian \n", + "\n", + "You can estimate the parameters $\\left( \\mu_i, \\sigma_i^2 \\right)$, of the $i^{th}$ feature by using the following equations. To estimate the mean, you will use: \n", + "\n", + "$$ \\mu_i = \\frac{1}{m} \\sum_{j=1}^m x_i^{(j)},$$\n", + "\n", + "and for the variance you will use:\n", + "\n", + "$$ \\sigma_i^2 = \\frac{1}{m} \\sum_{j=1}^m \\left( x_i^{(j)} - \\mu_i \\right)^2.$$\n", + "\n", + "Your task is to complete the code in the function `estimateGaussian`. This function takes as input the data matrix `X` and should output an n-dimension vector `mu` that holds the mean for each of the $n$ features and another n-dimension vector `sigma2` that holds the variances of each of the features. You can implement this\n", + "using a for-loop over every feature and every training example (though a vectorized implementation might be more efficient; feel free to use a vectorized implementation if you prefer). \n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def estimateGaussian(X):\n", + " \"\"\"\n", + " This function estimates the parameters of a Gaussian distribution\n", + " using a provided dataset.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " The dataset of shape (m x n) with each n-dimensional \n", + " data point in one row, and each total of m data points.\n", + " \n", + " Returns\n", + " -------\n", + " mu : array_like \n", + " A vector of shape (n,) containing the means of each dimension.\n", + " \n", + " sigma2 : array_like\n", + " A vector of shape (n,) containing the computed\n", + " variances of each dimension.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the mean of the data and the variances\n", + " In particular, mu[i] should contain the mean of\n", + " the data for the i-th feature and sigma2[i]\n", + " should contain variance of the i-th feature.\n", + " \"\"\"\n", + " # Useful variables\n", + " m, n = X.shape\n", + "\n", + " # You should return these values correctly\n", + " mu = np.zeros(n)\n", + " sigma2 = np.zeros(n)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " mu = (1 / m) * np.sum(X, axis = 0)\n", + " sigma2 = (1 / m) * np.sum((X - mu) ** 2, axis = 0)\n", + " \n", + " # =============================================================\n", + " return mu, sigma2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the code in `estimateGaussian`, the next cell will visualize the contours of the fitted Gaussian distribution. You should get a plot similar to the figure below.\n", + "\n", + "![](Figures/gaussian_fit.png)\n", + "\n", + "From your plot, you can see that most of the examples are in the region with the highest probability, while\n", + "the anomalous examples are in the regions with lower probabilities.\n", + "\n", + "To do the visualization of the Gaussian fit, we first estimate the parameters of our assumed Gaussian distribution, then compute the probabilities for each of the points and then visualize both the overall distribution and where each of the points falls in terms of that distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Estimate my and sigma2\n", + "mu, sigma2 = estimateGaussian(X)\n", + "\n", + "# Returns the density of the multivariate normal at each data point (row) \n", + "# of X\n", + "p = utils.multivariateGaussian(X, mu, sigma2)\n", + "\n", + "# Visualize the fit\n", + "utils.visualizeFit(X, mu, sigma2)\n", + "pyplot.xlabel('Latency (ms)')\n", + "pyplot.ylabel('Throughput (mb/s)')\n", + "pyplot.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Login (email address): tanmayss2109@gmail.com\n", + "Token: 9nfZTKeNcx3luLPi\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 0 / 15 | \n", + " Collaborative Filtering Cost | 0 / 20 | \n", + " Collaborative Filtering Gradient | 0 / 30 | \n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 15 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[1] = estimateGaussian\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.3 Selecting the threshold, $\\varepsilon$\n", + "\n", + "Now that you have estimated the Gaussian parameters, you can investigate which examples have a very high probability given this distribution and which examples have a very low probability. The low probability examples are more likely to be the anomalies in our dataset. One way to determine which examples are anomalies is to select a threshold based on a cross validation set. In this part of the exercise, you will implement an algorithm to select the threshold $\\varepsilon$ using the $F_1$ score on a cross validation set.\n", + "\n", + "\n", + "You should now complete the code for the function `selectThreshold`. For this, we will use a cross validation set $\\{ (x_{cv}^{(1)}, y_{cv}^{(1)}), \\dots, (x_{cv}^{(m_{cv})}, y_{cv}^{(m_{cv})})\\}$, where the label $y = 1$ corresponds to an anomalous example, and $y = 0$ corresponds to a normal example. For each cross validation example, we will compute $p\\left( x_{cv}^{(i)}\\right)$. The vector of all of these probabilities $p\\left( x_{cv}^{(1)}\\right), \\dots, p\\left( x_{cv}^{(m_{cv})}\\right)$ is passed to `selectThreshold` in the vector `pval`. The corresponding labels $y_{cv}^{(1)} , \\dots , y_{cv}^{(m_{cv})}$ are passed to the same function in the vector `yval`.\n", + "\n", + "The function `selectThreshold` should return two values; the first is the selected threshold $\\varepsilon$. If an example $x$ has a low probability $p(x) < \\varepsilon$, then it is considered to be an anomaly. The function should also return the $F_1$ score, which tells you how well you are doing on finding the ground truth\n", + "anomalies given a certain threshold. For many different values of $\\varepsilon$, you will compute the resulting $F_1$ score by computing how many examples the current threshold classifies correctly and incorrectly.\n", + "\n", + "The $F_1$ score is computed using precision ($prec$) and recall ($rec$):\n", + "\n", + "$$ F_1 = \\frac{2 \\cdot prec \\cdot rec}{prec + rec}, $$\n", + "\n", + "You compute precision and recall by: \n", + "\n", + "$$ prec = \\frac{tp}{tp + fp} $$ \n", + "\n", + "$$ rec = \\frac{tp}{tp + fn} $$\n", + "\n", + "where: \n", + "\n", + "- $tp$ is the number of true positives: the ground truth label says it’s an anomaly and our algorithm correctly classified it as an anomaly.\n", + "\n", + "- $fp$ is the number of false positives: the ground truth label says it’s not an anomaly, but our algorithm incorrectly classified it as an anomaly.\n", + "- $fn$ is the number of false negatives: the ground truth label says it’s an anomaly, but our algorithm incorrectly classified it as not being anomalous.\n", + "\n", + "In the provided code `selectThreshold`, there is already a loop that will try many different values of $\\varepsilon$ and select the best $\\varepsilon$ based on the $F_1$ score. You should now complete the code in `selectThreshold`. You can implement the computation of the $F_1$ score using a for-loop over all the cross\n", + "validation examples (to compute the values $tp$, $fp$, $fn$). You should see a value for `epsilon` of about 8.99e-05.\n", + "\n", + "
\n", + "**Implementation Note:** In order to compute $tp$, $fp$ and $fn$, you may be able to use a vectorized implementation rather than loop over all the examples. This can be implemented by numpy's equality test\n", + "between a vector and a single number. If you have several binary values in an n-dimensional binary vector $v \\in \\{0, 1\\}^n$, you can find out how many values in this vector are 0 by using: np.sum(v == 0). You can also\n", + "apply a logical and operator to such binary vectors. For instance, let `cvPredictions` be a binary vector of size equal to the number of cross validation set, where the $i^{th}$ element is 1 if your algorithm considers\n", + "$x_{cv}^{(i)}$ an anomaly, and 0 otherwise. You can then, for example, compute the number of false positives using: `fp = np.sum((cvPredictions == 1) & (yval == 0))`.\n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def selectThreshold(yval, pval):\n", + " \"\"\"\n", + " Find the best threshold (epsilon) to use for selecting outliers based\n", + " on the results from a validation set and the ground truth.\n", + " \n", + " Parameters\n", + " ----------\n", + " yval : array_like\n", + " The ground truth labels of shape (m, ).\n", + " \n", + " pval : array_like\n", + " The precomputed vector of probabilities based on mu and sigma2 parameters. It's shape is also (m, ).\n", + " \n", + " Returns\n", + " -------\n", + " bestEpsilon : array_like\n", + " A vector of shape (n,) corresponding to the threshold value.\n", + " \n", + " bestF1 : float\n", + " The value for the best F1 score.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the F1 score of choosing epsilon as the threshold and place the\n", + " value in F1. The code at the end of the loop will compare the\n", + " F1 score for this choice of epsilon and set it to be the best epsilon if\n", + " it is better than the current choice of epsilon.\n", + " \n", + " Notes\n", + " -----\n", + " You can use predictions = (pval < epsilon) to get a binary vector\n", + " of 0's and 1's of the outlier predictions\n", + " \"\"\"\n", + " bestEpsilon = 0\n", + " bestF1 = 0\n", + " F1 = 0\n", + " \n", + " for epsilon in np.linspace(1.01*min(pval), max(pval), 1000):\n", + " # ====================== YOUR CODE HERE =======================\n", + " predictions = (pval < epsilon)\n", + " tp = np.sum((predictions == yval) & (yval == 1))\n", + " fp = np.sum((predictions == 1) & (yval == 0))\n", + " fn = np.sum((predictions == 0) & (yval == 1))\n", + " \n", + " prec = tp / (tp + fp)\n", + " rec = tp / (tp + fn)\n", + " \n", + " F1 = 2 * prec * rec / (prec + rec)\n", + "\n", + " \n", + " \n", + "\n", + " # =============================================================\n", + " if F1 > bestF1:\n", + " bestF1 = F1\n", + " bestEpsilon = epsilon\n", + "\n", + " return bestEpsilon, bestF1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you have completed the code in `selectThreshold`, the next cell will run your anomaly detection code and circle the anomalies in the plot." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best epsilon found using cross-validation: 9.00e-05\n", + "Best F1 on Cross Validation Set: 0.875000\n", + " (you should see a value epsilon of about 8.99e-05)\n", + " (you should see a Best F1 value of 0.875000)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pval = utils.multivariateGaussian(Xval, mu, sigma2)\n", + "\n", + "epsilon, F1 = selectThreshold(yval, pval)\n", + "print('Best epsilon found using cross-validation: %.2e' % epsilon)\n", + "print('Best F1 on Cross Validation Set: %f' % F1)\n", + "print(' (you should see a value epsilon of about 8.99e-05)')\n", + "print(' (you should see a Best F1 value of 0.875000)')\n", + "\n", + "# Find the outliers in the training set and plot the\n", + "outliers = p < epsilon\n", + "\n", + "# Visualize the fit\n", + "utils.visualizeFit(X, mu, sigma2)\n", + "pyplot.xlabel('Latency (ms)')\n", + "pyplot.ylabel('Throughput (mb/s)')\n", + "pyplot.tight_layout()\n", + "\n", + "# Draw a red circle around those outliers\n", + "pyplot.plot(X[outliers, 0], X[outliers, 1], 'ro', ms=10, mfc='None', mew=2)\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 0 / 20 | \n", + " Collaborative Filtering Gradient | 0 / 30 | \n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[2] = selectThreshold\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4 High dimensional dataset\n", + "\n", + "The next cell will run the anomaly detection algorithm you implemented on a more realistic and much harder dataset. In this dataset, each example is described by 11 features, capturing many more properties of your compute servers, but only some features indicate whether a point is an outlier. The script will use your code to estimate the Gaussian parameters ($\\mu_i$ and $\\sigma_i^2$), evaluate the probabilities for both the training data `X` from which you estimated the Gaussian parameters, and do so for the the cross-validation set `Xval`. Finally, it will use `selectThreshold` to find the best threshold $\\varepsilon$. You should see a value epsilon of about 1.38e-18, and 117 anomalies found." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best epsilon found using cross-validation: 1.38e-18\n", + "Best F1 on Cross Validation Set : 0.615385\n", + "\n", + " (you should see a value epsilon of about 1.38e-18)\n", + " (you should see a Best F1 value of 0.615385)\n", + "\n", + "# Outliers found: 117\n" + ] + } + ], + "source": [ + "# Loads the second dataset. You should now have the\n", + "# variables X, Xval, yval in your environment\n", + "data = loadmat(os.path.join('Data', 'ex8data2.mat'))\n", + "X, Xval, yval = data['X'], data['Xval'], data['yval'][:, 0]\n", + "\n", + "# Apply the same steps to the larger dataset\n", + "mu, sigma2 = estimateGaussian(X)\n", + "\n", + "# Training set \n", + "p = utils.multivariateGaussian(X, mu, sigma2)\n", + "\n", + "# Cross-validation set\n", + "pval = utils.multivariateGaussian(Xval, mu, sigma2)\n", + "\n", + "# Find the best threshold\n", + "epsilon, F1 = selectThreshold(yval, pval)\n", + "\n", + "print('Best epsilon found using cross-validation: %.2e' % epsilon)\n", + "print('Best F1 on Cross Validation Set : %f\\n' % F1)\n", + "print(' (you should see a value epsilon of about 1.38e-18)')\n", + "print(' (you should see a Best F1 value of 0.615385)')\n", + "print('\\n# Outliers found: %d' % np.sum(p < epsilon))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Recommender Systems\n", + "\n", + "In this part of the exercise, you will implement the collaborative filtering learning algorithm and apply it to a dataset of movie ratings ([MovieLens 100k Dataset](https://grouplens.org/datasets/movielens/) from GroupLens Research). This dataset consists of ratings on a scale of 1 to 5. The dataset has $n_u = 943$ users, and $n_m = 1682$ movies. \n", + "\n", + "In the next parts of this exercise, you will implement the function `cofiCostFunc` that computes the collaborative filtering objective function and gradient. After implementing the cost function and gradient, you will use `scipy.optimize.minimize` to learn the parameters for collaborative filtering.\n", + "\n", + "### 2.1 Movie ratings dataset\n", + "\n", + "The next cell will load the dataset `ex8_movies.mat`, providing the variables `Y` and `R`.\n", + "The matrix `Y` (a `num_movies` $\\times$ `num_users` matrix) stores the ratings $y^{(i,j)}$ (from 1 to 5). The matrix `R` is an binary-valued indicator matrix, where $R(i, j) = 1$ if user $j$ gave a rating to movie $i$, and $R(i, j) = 0$ otherwise. The objective of collaborative filtering is to predict movie ratings for the movies that users have not yet rated, that is, the entries with $R(i, j) = 0$. This will allow us to recommend the movies with the highest predicted ratings to the user.\n", + "\n", + "To help you understand the matrix `Y`, the following cell will compute the average movie rating for the first movie (Toy Story) and print its average rating." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average rating for movie 1 (Toy Story): 3.878319 / 5\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Load data\n", + "data = loadmat(os.path.join('Data', 'ex8_movies.mat'))\n", + "Y, R = data['Y'], data['R']\n", + "\n", + "# Y is a 1682x943 matrix, containing ratings (1-5) of \n", + "# 1682 movies on 943 users\n", + "\n", + "# R is a 1682x943 matrix, where R(i,j) = 1 \n", + "# if and only if user j gave a rating to movie i\n", + "\n", + "# From the matrix, we can compute statistics like average rating.\n", + "print('Average rating for movie 1 (Toy Story): %f / 5' %\n", + " np.mean(Y[0, R[0, :] == 1]))\n", + "\n", + "# We can \"visualize\" the ratings matrix by plotting it with imshow\n", + "pyplot.figure(figsize=(8, 8))\n", + "pyplot.imshow(Y)\n", + "pyplot.ylabel('Movies')\n", + "pyplot.xlabel('Users')\n", + "pyplot.grid(False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Throughout this part of the exercise, you will also be working with the matrices, `X` and `Theta`:\n", + "\n", + "$$ \\text{X} = \n", + "\\begin{bmatrix}\n", + "- \\left(x^{(1)}\\right)^T - \\\\\n", + "- \\left(x^{(2)}\\right)^T - \\\\\n", + "\\vdots \\\\\n", + "- \\left(x^{(n_m)}\\right)^T - \\\\\n", + "\\end{bmatrix}, \\quad\n", + "\\text{Theta} = \n", + "\\begin{bmatrix}\n", + "- \\left(\\theta^{(1)}\\right)^T - \\\\\n", + "- \\left(\\theta^{(2)}\\right)^T - \\\\\n", + "\\vdots \\\\\n", + "- \\left(\\theta^{(n_u)}\\right)^T - \\\\\n", + "\\end{bmatrix}.\n", + "$$\n", + "\n", + "The $i^{th}$ row of `X` corresponds to the feature vector $x^{(i)}$ for the $i^{th}$ movie, and the $j^{th}$ row of `Theta` corresponds to one parameter vector $\\theta^{(j)}$, for the $j^{th}$ user. Both $x^{(i)}$ and $\\theta^{(j)}$ are n-dimensional vectors. For the purposes of this exercise, you will use $n = 100$, and therefore, $x^{(i)} \\in \\mathbb{R}^{100}$ and $\\theta^{(j)} \\in \\mathbb{R}^{100}$. Correspondingly, `X` is a $n_m \\times 100$ matrix and `Theta` is a $n_u \\times 100$ matrix.\n", + "\n", + "\n", + "### 2.2 Collaborative filtering learning algorithm\n", + "\n", + "Now, you will start implementing the collaborative filtering learning algorithm. You will start by implementing the cost function (without regularization).\n", + "\n", + "The collaborative filtering algorithm in the setting of movie recommendations considers a set of n-dimensional parameter vectors $x^{(1)}, \\dots, x^{(n_m)}$ and $\\theta^{(1)} , \\dots, \\theta^{(n_u)}$, where the model predicts the rating for movie $i$ by user $j$ as $y^{(i,j)} = \\left( \\theta^{(j)} \\right)^T x^{(i)}$. Given a dataset that consists of a set of ratings produced by some users on some movies, you wish to learn the parameter vectors $x^{(1)}, \\dots, x^{(n_m)}, \\theta^{(1)}, \\dots, \\theta^{(n_u)}$ that produce the best fit (minimizes the squared error).\n", + "\n", + "You will complete the code in `cofiCostFunc` to compute the cost function and gradient for collaborative filtering. Note that the parameters to the function (i.e., the values that you are trying to learn) are `X` and `Theta`. In order to use an off-the-shelf minimizer such as `scipy`'s `minimize` function, the cost function has been set up to unroll the parameters into a single vector called `params`. You had previously used the same vector unrolling method in the neural networks programming exercise.\n", + "\n", + "#### 2.2.1 Collaborative filtering cost function\n", + "\n", + "The collaborative filtering cost function (without regularization) is given by\n", + "\n", + "$$\n", + "J(x^{(1)}, \\dots, x^{(n_m)}, \\theta^{(1)}, \\dots,\\theta^{(n_u)}) = \\frac{1}{2} \\sum_{(i,j):r(i,j)=1} \\left( \\left(\\theta^{(j)}\\right)^T x^{(i)} - y^{(i,j)} \\right)^2\n", + "$$\n", + "\n", + "You should now modify the function `cofiCostFunc` to return this cost in the variable `J`. Note that you should be accumulating the cost for user $j$ and movie $i$ only if `R[i,j] = 1`.\n", + "\n", + "
\n", + "**Implementation Note**: We strongly encourage you to use a vectorized implementation to compute $J$, since it will later by called many times by `scipy`'s optimization package. As usual, it might be easiest to first write a non-vectorized implementation (to make sure you have the right answer), and the modify it to become a vectorized implementation (checking that the vectorization steps do not change your algorithm’s output). To come up with a vectorized implementation, the following tip might be helpful: You can use the $R$ matrix to set selected entries to 0. For example, `R * M` will do an element-wise multiplication between `M`\n", + "and `R`; since `R` only has elements with values either 0 or 1, this has the effect of setting the elements of M to 0 only when the corresponding value in R is 0. Hence, `np.sum( R * M)` is the sum of all the elements of `M` for which the corresponding element in `R` equals 1.\n", + "
\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def cofiCostFunc(params, Y, R, num_users, num_movies,\n", + " num_features, lambda_=0.0):\n", + " \"\"\"\n", + " Collaborative filtering cost function.\n", + " \n", + " Parameters\n", + " ----------\n", + " params : array_like\n", + " The parameters which will be optimized. This is a one\n", + " dimensional vector of shape (num_movies x num_users, 1). It is the \n", + " concatenation of the feature vectors X and parameters Theta.\n", + " \n", + " Y : array_like\n", + " A matrix of shape (num_movies x num_users) of user ratings of movies.\n", + " \n", + " R : array_like\n", + " A (num_movies x num_users) matrix, where R[i, j] = 1 if the \n", + " i-th movie was rated by the j-th user.\n", + " \n", + " num_users : int\n", + " Total number of users.\n", + " \n", + " num_movies : int\n", + " Total number of movies.\n", + " \n", + " num_features : int\n", + " Number of features to learn.\n", + " \n", + " lambda_ : float, optional\n", + " The regularization coefficient.\n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The value of the cost function at the given params.\n", + " \n", + " grad : array_like\n", + " The gradient vector of the cost function at the given params.\n", + " grad has a shape (num_movies x num_users, 1)\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost function and gradient for collaborative filtering.\n", + " Concretely, you should first implement the cost function (without\n", + " regularization) and make sure it is matches our costs. After that,\n", + " you should implement thegradient and use the checkCostFunction routine \n", + " to check that the gradient is correct. Finally, you should implement\n", + " regularization.\n", + " \n", + " Notes\n", + " -----\n", + " - The input params will be unraveled into the two matrices:\n", + " X : (num_movies x num_features) matrix of movie features\n", + " Theta : (num_users x num_features) matrix of user features\n", + "\n", + " - You should set the following variables correctly:\n", + "\n", + " X_grad : (num_movies x num_features) matrix, containing the \n", + " partial derivatives w.r.t. to each element of X\n", + " Theta_grad : (num_users x num_features) matrix, containing the \n", + " partial derivatives w.r.t. to each element of Theta\n", + "\n", + " - The returned gradient will be the concatenation of the raveled \n", + " gradients X_grad and Theta_grad.\n", + " \"\"\"\n", + " # Unfold the U and W matrices from params\n", + " X = params[:num_movies*num_features].reshape(num_movies, num_features)\n", + " Theta = params[num_movies*num_features:].reshape(num_users, num_features)\n", + "\n", + " # You need to return the following values correctly\n", + " J = 0\n", + " X_grad = np.zeros(X.shape)\n", + " Theta_grad = np.zeros(Theta.shape)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " J = (1 / 2) * np.sum(np.square((X.dot(Theta.T) - Y) * R)) + (lambda_ / 2) * np.sum(np.square(X)) + \\\n", + " (lambda_ / 2) * np.sum(np.square(Theta))\n", + " \n", + " for i in range(R.shape[0]):\n", + " \n", + " idx = np.where(R[i, :] == 1)[0]\n", + " Theta_temp = Theta[idx, :]\n", + " Y_temp = Y[i, idx]\n", + " X_grad[i, :] = np.dot(np.dot(X[i, :], Theta_temp.T) - Y_temp, Theta_temp) + lambda_ * X[i, :]\n", + " \n", + " for j in range(R.shape[1]):\n", + " \n", + " idx = np.where(R[:, j] == 1)[0]\n", + " X_temp = X[idx, :]\n", + " Y_temp = Y[idx, j]\n", + " Theta_grad[j, :] = np.dot(np.dot(X_temp, Theta[j, :]) - Y_temp, X_temp) + lambda_ * Theta[j, :]\n", + " \n", + " \n", + " \n", + " # =============================================================\n", + " \n", + " grad = np.concatenate([X_grad.ravel(), Theta_grad.ravel()])\n", + " return J, grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you have completed the function, the next cell will run your cost function. To help you debug your cost function, we have included set of weights that we trained on that. You should expect to see an output of 22.22." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at loaded parameters: 22.22 \n", + "(this value should be about 22.22)\n" + ] + } + ], + "source": [ + "# Load pre-trained weights (X, Theta, num_users, num_movies, num_features)\n", + "data = loadmat(os.path.join('Data', 'ex8_movieParams.mat'))\n", + "X, Theta, num_users, num_movies, num_features = data['X'],\\\n", + " data['Theta'], data['num_users'], data['num_movies'], data['num_features']\n", + "\n", + "# Reduce the data set size so that this runs faster\n", + "num_users = 4\n", + "num_movies = 5\n", + "num_features = 3\n", + "\n", + "X = X[:num_movies, :num_features]\n", + "Theta = Theta[:num_users, :num_features]\n", + "Y = Y[:num_movies, 0:num_users]\n", + "R = R[:num_movies, 0:num_users]\n", + "\n", + "# Evaluate cost function\n", + "J, _ = cofiCostFunc(np.concatenate([X.ravel(), Theta.ravel()]),\n", + " Y, R, num_users, num_movies, num_features)\n", + " \n", + "print('Cost at loaded parameters: %.2f \\n(this value should be about 22.22)' % J)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 0 / 30 | \n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 50 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[3] = cofiCostFunc\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 2.2.2 Collaborative filtering gradient\n", + "\n", + "Now you should implement the gradient (without regularization). Specifically, you should complete the code in `cofiCostFunc` to return the variables `X_grad` and `Theta_grad`. Note that `X_grad` should be a matrix of the same size as `X` and similarly, `Theta_grad` is a matrix of the same size as\n", + "`Theta`. The gradients of the cost function is given by:\n", + "\n", + "$$ \\frac{\\partial J}{\\partial x_k^{(i)}} = \\sum_{j:r(i,j)=1} \\left( \\left(\\theta^{(j)}\\right)^T x^{(i)} - y^{(i,j)} \\right) \\theta_k^{(j)} $$\n", + "\n", + "$$ \\frac{\\partial J}{\\partial \\theta_k^{(j)}} = \\sum_{i:r(i,j)=1} \\left( \\left(\\theta^{(j)}\\right)^T x^{(i)}- y^{(i,j)} \\right) x_k^{(j)} $$\n", + "\n", + "Note that the function returns the gradient for both sets of variables by unrolling them into a single vector. After you have completed the code to compute the gradients, the next cell run a gradient check\n", + "(available in `utils.checkCostFunction`) to numerically check the implementation of your gradients (this is similar to the numerical check that you used in the neural networks exercise. If your implementation is correct, you should find that the analytical and numerical gradients match up closely.\n", + "\n", + "
\n", + "**Implementation Note:** You can get full credit for this assignment without using a vectorized implementation, but your code will run much more slowly (a small number of hours), and so we recommend that you try to vectorize your implementation. To get started, you can implement the gradient with a for-loop over movies\n", + "(for computing $\\frac{\\partial J}{\\partial x^{(i)}_k}$) and a for-loop over users (for computing $\\frac{\\partial J}{\\theta_k^{(j)}}$). When you first implement the gradient, you might start with an unvectorized version, by implementing another inner for-loop that computes each element in the summation. After you have completed the gradient computation this way, you should try to vectorize your implementation (vectorize the inner for-loops), so that you are left with only two for-loops (one for looping over movies to compute $\\frac{\\partial J}{\\partial x_k^{(i)}}$ for each movie, and one for looping over users to compute $\\frac{\\partial J}{\\partial \\theta_k^{(j)}}$ for each user).\n", + "
\n", + "\n", + "
\n", + "**Implementation Tip:** To perform the vectorization, you might find this helpful: You should come up with a way to compute all the derivatives associated with $x_1^{(i)} , x_2^{(i)}, \\dots , x_n^{(i)}$ (i.e., the derivative terms associated with the feature vector $x^{(i)}$) at the same time. Let us define the derivatives for the feature vector of the $i^{th}$ movie as:\n", + "\n", + "$$ \\left(X_{\\text{grad}} \\left(i, :\\right)\\right)^T = \n", + "\\begin{bmatrix}\n", + "\\frac{\\partial J}{\\partial x_1^{(i)}} \\\\\n", + "\\frac{\\partial J}{\\partial x_2^{(i)}} \\\\\n", + "\\vdots \\\\\n", + "\\frac{\\partial J}{\\partial x_n^{(i)}}\n", + "\\end{bmatrix} = \\quad\n", + "\\sum_{j:r(i,j)=1} \\left( \\left( \\theta^{(j)} \\right)^T x^{(i)} - y^{(i,j)} \\right) \\theta^{(j)}\n", + "$$\n", + "\n", + "To vectorize the above expression, you can start by indexing into `Theta` and `Y` to select only the elements of interests (that is, those with `r[i, j] = 1`). Intuitively, when you consider the features for the $i^{th}$ movie, you only need to be concerned about the users who had given ratings to the movie, and this allows you to remove all the other users from `Theta` and `Y`.

\n", + "\n", + "\n", + "Concretely, you can set `idx = np.where(R[i, :] == 1)[0]` to be a list of all the users that have rated movie $i$. This will allow you to create the temporary matrices `Theta_temp = Theta[idx, :]` and `Y_temp = Y[i, idx]` that index into `Theta` and `Y` to give you only the set of users which have rated the $i^{th}$ movie. This will allow you to write the derivatives as:
\n", + "\n", + "`X_grad[i, :] = np.dot(np.dot(X[i, :], Theta_temp.T) - Y_temp, Theta_temp)`\n", + "\n", + "

\n", + "Note that the vectorized computation above returns a row-vector instead. After you have vectorized the computations of the derivatives with respect to $x^{(i)}$, you should use a similar method to vectorize the derivatives with respect to $θ^{(j)}$ as well.\n", + "
\n", + "\n", + "[Click here to go back to the function `cofiCostFunc` to update it](#cofiCostFunc). \n", + "\n", + " Do not forget to re-execute the cell containg the function `cofiCostFunc` so that it is updated with your implementation of the gradient computation." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.46660851 0.46660851]\n", + " [-1.11522931 -1.11522931]\n", + " [-2.93605559 -2.93605559]\n", + " [-0.54310538 -0.54310538]\n", + " [-7.09376845 -7.09376845]\n", + " [-8.86613311 -8.86613311]\n", + " [ 0.08789442 0.08789442]\n", + " [-0.13815802 -0.13815802]\n", + " [ 0.01326013 0.01326013]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [-0.75793651 -0.75793651]\n", + " [ 0.50622184 0.50622184]\n", + " [ 1.22902557 1.22902557]\n", + " [-0.32099776 -0.32099776]\n", + " [ 0.22352602 0.22352602]\n", + " [ 0.76455842 0.76455842]\n", + " [-1.25906737 -1.25906737]\n", + " [ 0.74762981 0.74762981]\n", + " [ 2.57050722 2.57050722]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [-1.93903986 -1.93903986]\n", + " [ 1.25368512 1.25368512]\n", + " [ 3.37886598 3.37886598]]\n", + "\n", + "The above two columns you get should be very similar.(Left-Your Numerical Gradient, Right-Analytical Gradient)\n", + "If your cost function implementation is correct, then the relative difference will be small (less than 1e-9).\n", + "\n", + "Relative Difference: 1.01587e-12\n" + ] + } + ], + "source": [ + "# Check gradients by running checkcostFunction\n", + "utils.checkCostFunction(cofiCostFunc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions*" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 30 / 30 | Nice work!\n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 80 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[4] = cofiCostFunc\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 2.2.3 Regularized cost function\n", + "\n", + "The cost function for collaborative filtering with regularization is given by\n", + "\n", + "$$ J(x^{(1)}, \\dots, x^{(n_m)}, \\theta^{(1)}, \\dots, \\theta^{(n_u)}) = \\frac{1}{2} \\sum_{(i,j):r(i,j)=1} \\left( \\left( \\theta^{(j)} \\right)^T x^{(i)} - y^{(i,j)} \\right)^2 + \\left( \\frac{\\lambda}{2} \\sum_{j=1}^{n_u} \\sum_{k=1}^{n} \\left( \\theta_k^{(j)} \\right)^2 \\right) + \\left( \\frac{\\lambda}{2} \\sum_{i=1}^{n_m} \\sum_{k=1}^n \\left(x_k^{(i)} \\right)^2 \\right) $$\n", + "\n", + "You should now add regularization to your original computations of the cost function, $J$. After you are done, the next cell will run your regularized cost function, and you should expect to see a cost of about 31.34.\n", + "\n", + "[Click here to go back to the function `cofiCostFunc` to update it](#cofiCostFunc)\n", + " Do not forget to re-execute the cell containing the function `cofiCostFunc` so that it is updated with your implementation of regularized cost function." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at loaded parameters (lambda = 1.5): 31.34\n", + " (this value should be about 31.34)\n" + ] + } + ], + "source": [ + "# Evaluate cost function\n", + "J, _ = cofiCostFunc(np.concatenate([X.ravel(), Theta.ravel()]),\n", + " Y, R, num_users, num_movies, num_features, 1.5)\n", + " \n", + "print('Cost at loaded parameters (lambda = 1.5): %.2f' % J)\n", + "print(' (this value should be about 31.34)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 30 / 30 | Nice work!\n", + " Regularized Cost | 10 / 10 | Nice work!\n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 90 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[5] = cofiCostFunc\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 2.2.4 Regularized gradient\n", + "\n", + "Now that you have implemented the regularized cost function, you should proceed to implement regularization for the gradient. You should add to your implementation in `cofiCostFunc` to return the regularized gradient\n", + "by adding the contributions from the regularization terms. Note that the gradients for the regularized cost function is given by:\n", + "\n", + "$$ \\frac{\\partial J}{\\partial x_k^{(i)}} = \\sum_{j:r(i,j)=1} \\left( \\left(\\theta^{(j)}\\right)^T x^{(i)} - y^{(i,j)} \\right) \\theta_k^{(j)} + \\lambda x_k^{(i)} $$\n", + "\n", + "$$ \\frac{\\partial J}{\\partial \\theta_k^{(j)}} = \\sum_{i:r(i,j)=1} \\left( \\left(\\theta^{(j)}\\right)^T x^{(i)}- y^{(i,j)} \\right) x_k^{(j)} + \\lambda \\theta_k^{(j)} $$\n", + "\n", + "This means that you just need to add $\\lambda x^{(i)}$ to the `X_grad[i,:]` variable described earlier, and add $\\lambda \\theta^{(j)}$ to the `Theta_grad[j, :]` variable described earlier.\n", + "\n", + "[Click here to go back to the function `cofiCostFunc` to update it](#cofiCostFunc)\n", + " Do not forget to re-execute the cell containing the function `cofiCostFunc` so that it is updated with your implementation of the gradient for the regularized cost function.\n", + "\n", + "After you have completed the code to compute the gradients, the following cell will run another gradient check (`utils.checkCostFunction`) to numerically check the implementation of your gradients." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-2.10413092 -2.10413092]\n", + " [ 4.88435471 4.88435471]\n", + " [-5.14676934 -5.14676934]\n", + " [ 2.10807904 2.10807904]\n", + " [-0.69618007 -0.69618007]\n", + " [ 6.10717258 6.10717258]\n", + " [-0.98375746 -0.98375746]\n", + " [-1.62145317 -1.62145317]\n", + " [-3.64294105 -3.64294105]\n", + " [ 1.86940783 1.86940783]\n", + " [ 0.97383575 0.97383575]\n", + " [ 3.67349576 3.67349576]\n", + " [-0.81407458 -0.81407458]\n", + " [ 3.7746785 3.7746785 ]\n", + " [ 2.48789327 2.48789327]\n", + " [-1.81152765 -1.81152765]\n", + " [-1.36691463 -1.36691463]\n", + " [-3.72595908 -3.72595908]\n", + " [ 0.38573866 0.38573866]\n", + " [ 0.97208917 0.97208917]\n", + " [ 0.24478964 0.24478964]\n", + " [ 2.57555678 2.57555678]\n", + " [-4.32021577 -4.32021577]\n", + " [ 5.33165654 5.33165654]\n", + " [-1.51004106 -1.51004106]\n", + " [-1.77104474 -1.77104474]\n", + " [ 0.50360741 0.50360741]]\n", + "\n", + "The above two columns you get should be very similar.(Left-Your Numerical Gradient, Right-Analytical Gradient)\n", + "If your cost function implementation is correct, then the relative difference will be small (less than 1e-9).\n", + "\n", + "Relative Difference: 2.53851e-12\n" + ] + } + ], + "source": [ + "# Check gradients by running checkCostFunction\n", + "utils.checkCostFunction(cofiCostFunc, 1.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 30 / 30 | Nice work!\n", + " Regularized Cost | 10 / 10 | Nice work!\n", + " Regularized Gradient | 10 / 10 | Nice work!\n", + " --------------------------------\n", + " | 100 / 100 | \n", + "\n" + ] + } + ], + "source": [ + "grader[6] = cofiCostFunc\n", + "grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Learning movie recommendations \n", + "\n", + "After you have finished implementing the collaborative filtering cost function and gradient, you can now start training your algorithm to make movie recommendations for yourself. In the next cell, you can enter your own movie preferences, so that later when the algorithm runs, you can get your own movie recommendations! We have filled out some values according to our own preferences, but you should change this according to your own tastes. The list of all movies and their number in the dataset can be found listed in the file `Data/movie_idx.txt`." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New user ratings:\n", + "-----------------\n", + "Rated 4 stars: Toy Story (1995)\n", + "Rated 3 stars: Twelve Monkeys (1995)\n", + "Rated 5 stars: Usual Suspects, The (1995)\n", + "Rated 4 stars: Outbreak (1995)\n", + "Rated 5 stars: Shawshank Redemption, The (1994)\n", + "Rated 3 stars: While You Were Sleeping (1995)\n", + "Rated 5 stars: Forrest Gump (1994)\n", + "Rated 2 stars: Silence of the Lambs, The (1991)\n", + "Rated 4 stars: Alien (1979)\n", + "Rated 5 stars: Die Hard 2 (1990)\n", + "Rated 5 stars: Sphere (1998)\n" + ] + } + ], + "source": [ + "# Before we will train the collaborative filtering model, we will first\n", + "# add ratings that correspond to a new user that we just observed. This\n", + "# part of the code will also allow you to put in your own ratings for the\n", + "# movies in our dataset!\n", + "movieList = utils.loadMovieList()\n", + "n_m = len(movieList)\n", + "\n", + "# Initialize my ratings\n", + "my_ratings = np.zeros(n_m)\n", + "\n", + "# Check the file movie_idx.txt for id of each movie in our dataset\n", + "# For example, Toy Story (1995) has ID 1, so to rate it \"4\", you can set\n", + "# Note that the index here is ID-1, since we start index from 0.\n", + "my_ratings[0] = 4\n", + "\n", + "# Or suppose did not enjoy Silence of the Lambs (1991), you can set\n", + "my_ratings[97] = 2\n", + "\n", + "# We have selected a few movies we liked / did not like and the ratings we\n", + "# gave are as follows:\n", + "my_ratings[6] = 3\n", + "my_ratings[11]= 5\n", + "my_ratings[53] = 4\n", + "my_ratings[63] = 5\n", + "my_ratings[65] = 3\n", + "my_ratings[68] = 5\n", + "my_ratings[182] = 4\n", + "my_ratings[225] = 5\n", + "my_ratings[354] = 5\n", + "\n", + "print('New user ratings:')\n", + "print('-----------------')\n", + "for i in range(len(my_ratings)):\n", + " if my_ratings[i] > 0:\n", + " print('Rated %d stars: %s' % (my_ratings[i], movieList[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.3.1 Recommendations\n", + "\n", + "After the additional ratings have been added to the dataset, the script\n", + "will proceed to train the collaborative filtering model. This will learn the\n", + "parameters X and Theta. To predict the rating of movie i for user j, you need to compute (θ (j) ) T x (i) . The next part of the script computes the ratings for\n", + "all the movies and users and displays the movies that it recommends (Figure\n", + "4), according to ratings that were entered earlier in the script. Note that\n", + "you might obtain a different set of the predictions due to different random\n", + "initializations." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Recommender system learning completed.\n" + ] + } + ], + "source": [ + "# Now, you will train the collaborative filtering model on a movie rating \n", + "# dataset of 1682 movies and 943 users\n", + "\n", + "# Load data\n", + "data = loadmat(os.path.join('Data', 'ex8_movies.mat'))\n", + "Y, R = data['Y'], data['R']\n", + "\n", + "# Y is a 1682x943 matrix, containing ratings (1-5) of 1682 movies by \n", + "# 943 users\n", + "\n", + "# R is a 1682x943 matrix, where R(i,j) = 1 if and only if user j gave a\n", + "# rating to movie i\n", + "\n", + "# Add our own ratings to the data matrix\n", + "Y = np.hstack([my_ratings[:, None], Y])\n", + "R = np.hstack([(my_ratings > 0)[:, None], R])\n", + "\n", + "# Normalize Ratings\n", + "Ynorm, Ymean = utils.normalizeRatings(Y, R)\n", + "\n", + "# Useful Values\n", + "num_movies, num_users = Y.shape\n", + "num_features = 10\n", + "\n", + "# Set Initial Parameters (Theta, X)\n", + "X = np.random.randn(num_movies, num_features)\n", + "Theta = np.random.randn(num_users, num_features)\n", + "\n", + "initial_parameters = np.concatenate([X.ravel(), Theta.ravel()])\n", + "\n", + "# Set options for scipy.optimize.minimize\n", + "options = {'maxiter': 100}\n", + "\n", + "# Set Regularization\n", + "lambda_ = 10\n", + "res = optimize.minimize(lambda x: cofiCostFunc(x, Ynorm, R, num_users,\n", + " num_movies, num_features, lambda_),\n", + " initial_parameters,\n", + " method='TNC',\n", + " jac=True,\n", + " options=options)\n", + "theta = res.x\n", + "\n", + "# Unfold the returned theta back into U and W\n", + "X = theta[:num_movies*num_features].reshape(num_movies, num_features)\n", + "Theta = theta[num_movies*num_features:].reshape(num_users, num_features)\n", + "\n", + "print('Recommender system learning completed.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After training the model, you can now make recommendations by computing the predictions matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Top recommendations for you:\n", + "----------------------------\n", + "Predicting rating 5.0 for movie Aiqing wansui (1994)\n", + "Predicting rating 5.0 for movie Great Day in Harlem, A (1994)\n", + "Predicting rating 5.0 for movie Someone Else's America (1995)\n", + "Predicting rating 5.0 for movie Entertaining Angels: The Dorothy Day Story (1996)\n", + "Predicting rating 5.0 for movie Santa with Muscles (1996)\n", + "Predicting rating 5.0 for movie They Made Me a Criminal (1939)\n", + "Predicting rating 5.0 for movie Star Kid (1997)\n", + "Predicting rating 5.0 for movie Marlene Dietrich: Shadow and Light (1996)\n", + "Predicting rating 5.0 for movie Saint of Fort Washington, The (1993)\n", + "Predicting rating 5.0 for movie Prefontaine (1997)\n", + "\n", + "Original ratings provided:\n", + "--------------------------\n", + "Rated 4 for Toy Story (1995)\n", + "Rated 3 for Twelve Monkeys (1995)\n", + "Rated 5 for Usual Suspects, The (1995)\n", + "Rated 4 for Outbreak (1995)\n", + "Rated 5 for Shawshank Redemption, The (1994)\n", + "Rated 3 for While You Were Sleeping (1995)\n", + "Rated 5 for Forrest Gump (1994)\n", + "Rated 2 for Silence of the Lambs, The (1991)\n", + "Rated 4 for Alien (1979)\n", + "Rated 5 for Die Hard 2 (1990)\n", + "Rated 5 for Sphere (1998)\n" + ] + } + ], + "source": [ + "p = np.dot(X, Theta.T)\n", + "my_predictions = p[:, 0] + Ymean\n", + "\n", + "movieList = utils.loadMovieList()\n", + "\n", + "ix = np.argsort(my_predictions)[::-1]\n", + "\n", + "print('Top recommendations for you:')\n", + "print('----------------------------')\n", + "for i in range(10):\n", + " j = ix[i]\n", + " print('Predicting rating %.1f for movie %s' % (my_predictions[j], movieList[j]))\n", + "\n", + "print('\\nOriginal ratings provided:')\n", + "print('--------------------------')\n", + "for i in range(len(my_ratings)):\n", + " if my_ratings[i] > 0:\n", + " print('Rated %d for %s' % (my_ratings[i], movieList[i]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week 8/Exercise8/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..e1fc8a943 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week 8/Exercise8/exercise8.ipynb b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/exercise8.ipynb index f0643da9c..8748a9866 100644 --- a/Phase 3 - 2020 (Summer)/Week 8/Exercise8/exercise8.ipynb +++ b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/exercise8.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -97,9 +97,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# The following command loads the dataset.\n", "data = loadmat(os.path.join('Data', 'ex8data1.mat'))\n", @@ -144,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -183,7 +196,8 @@ " sigma2 = np.zeros(n)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " mu = (1 / m) * np.sum(X, axis = 0)\n", + " sigma2 = (1 / m) * np.sum((X - mu) ** 2, axis = 0)\n", " \n", " # =============================================================\n", " return mu, sigma2" @@ -205,9 +219,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Estimate my and sigma2\n", "mu, sigma2 = estimateGaussian(X)\n", @@ -232,9 +259,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Login (email address): tanmayss2109@gmail.com\n", + "Token: 9nfZTKeNcx3luLPi\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 0 / 15 | \n", + " Collaborative Filtering Cost | 0 / 20 | \n", + " Collaborative Filtering Gradient | 0 / 30 | \n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 15 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[1] = estimateGaussian\n", "grader.grade()" @@ -286,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -329,6 +379,15 @@ " \n", " for epsilon in np.linspace(1.01*min(pval), max(pval), 1000):\n", " # ====================== YOUR CODE HERE =======================\n", + " predictions = (pval < epsilon)\n", + " tp = np.sum((predictions == yval) & (yval == 1))\n", + " fp = np.sum((predictions == 1) & (yval == 0))\n", + " fn = np.sum((predictions == 0) & (yval == 1))\n", + " \n", + " prec = tp / (tp + fp)\n", + " rec = tp / (tp + fn)\n", + " \n", + " F1 = 2 * prec * rec / (prec + rec)\n", "\n", " \n", " \n", @@ -350,9 +409,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best epsilon found using cross-validation: 9.00e-05\n", + "Best F1 on Cross Validation Set: 0.875000\n", + " (you should see a value epsilon of about 8.99e-05)\n", + " (you should see a Best F1 value of 0.875000)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOyddXxUx9eHnxsPEJJAEgLB3YprcQhatAR3LVpKnZZCFagXqFKKu7sVintwCK4hIe6yycp5/9iQ0r607G4SCL/O8/kMm9y9M3Pukr3fOzNnztFEBIVCoVAocht2z9oAhUKhUCgehxIohUKhUORKlEApFAqFIleiBEqhUCgUuRIlUAqFQqHIlSiBUigUCkWuJMcEStM0F03TTmiadk7TtEuapn2UcXyBpmm3NU07m1Fq5JQNCoVCoXh+ccjBttOAliKSpGmaI3BI07TtGe+9JSJrcrBvhUKhUDzn5JhAiXkHcFLGr44ZRe0KVigUCoVFaDkZSULTNHvgFFAW+EFE3tE0bQHQEPMIaw/wroikPabuSGAkQN68eWtXrFgxx+xUKBQKRc5y6tSpKBHxtqZOjgpUZiea5gGsB8YD0UAY4ATMAW6KyMf/Vr9OnToSGBiY43YqFAqFImfQNO2UiNSxps5T8eITkThgH9BORB6ImTRgPlDvadigUCgUiueLnPTi884YOaFpmivgD1zRNK1wxjEN6ApczCkbFAqFQvH8kpNefIWBhRnrUHbAKhHZomnaH5qmeQMacBYYlYM2KBQKheI5JSe9+M4DNR9zvGVO9alQKBSK/x1UJAmFQqFQ5EqUQCkUCoUiV6IESqFQKBS5EiVQCoVCociVKIFSKBQKRa5ECZRCoVAociVKoBQKhUKRK1ECpVAoFIpciRIohUKhUORKlEApFAqFIleiBEqhUCgUuRIlUAqFQqHIlSiBUigUCkWuRAmUQqFQKHIlSqAUCoVCkStRAqVQKBSKXIkSKIVCoVDkSpRAKRQKhSJXogRKoVAoFLkSJVAKhUKhyJUogVIoFApFrkQJlEKhUChyJUqgFAqFQpErUQKlUCgUilxJjgmUpmkumqad0DTtnKZplzRN+yjjeClN045rmnZd07SVmqY55ZQNCoVCoXh+yckRVBrQUkSqAzWAdpqmNQA+B74VkXJALDAsB21QKBQKxXNKjgmUmEnK+NUxowjQEliTcXwh0DWnbFAoFArF80uOrkFpmmavadpZIAL4HbgJxImIIeOU+4DfP9QdqWlaoKZpgZGRkTlppkKhUChyITkqUCJiFJEaQFGgHlDpcaf9Q905IlJHROp4e3vnpJkKhUKhyIU8FS8+EYkD9gENAA9N0xwy3ioKhD4NGxQKhULxfJGTXnzemqZ5ZPzsCvgDl4G9QEDGaYOAjTllg0KhUCieXxyefIrNFAYWappmj1kIV4nIFk3TgoAVmqZ9CpwBfstBGxQKhULxnJJjAiUi54Gajzl+C/N6lEKhUCgU/4iKJKFQKBSKXIkSKIVCoVDkSpRAKRQKhSJXogRKoVAoFLkSJVAKhUKhyJUogVIoFApFrkQJlEKhUChyJUqgFAqFQpErUQKlUCgUilyJEiiFQqFQ5EpyMhafQvFMMegN6NMNmAxGjAYTRoMRo9GEmARNAzQNOzsNTdOws7fDwckBJxdHHBwd0DTtWZuvUPznUQKleG5ITdZx+/xd7l97QGx4PLHhccRFxhMbHk98ZAKpSTp0yWnoknWkpaRjNBht7svR2REnF0fy5HfFzTMfeT3ykM8jL/k881KgkAdFyvjiW7oQRcoUwrtoQewd7LPxShUKBSiBUuRSjAYjQUevEXT0GjfO3ubmmdvcv/YAkT/zWzq7OuFZyB2PQh54Fy2Iq5sLLnlccMnrjHMeZ1zyOOPo7IC9gz32DvbY2dth72CHpmmICCKYX02CyWhCn25An6YnXZeOPs1Aui6dlMRUkuOSSYxNJvxuJDfP3iHmQSwG/Z/iZ+9gT9HyhanlX4267WtSvVllnFycnsXHplD8T6E9+oXPrdSpU0cCAwOftRmKLCAipCSkEBMWR3xkArqUdNJT00nLKHpdOvp0A0a9kVsX7nJ862kSY5IA8CnuRdmapShboxRlapSkRJWiFPD1wDWf6zO5FqPRSHRIDKE3w3lwy1yun77F+f1BpOv0OLs6Ub1FFaq8WBGXvM44Ojng4OSAg6P51TWfC3nd85DXPQ/5PMyvrm6u2NmpJWHF/y6app0SkTrW1FEjKEW2k5aaxtm9lzi+5RQ3z98lNiyOmAexpKWmW1TfrUA+6r9Ui4ad6lCjRVXyF3TLYYutw97eHp/i3vgU96ZGi6qZx3UpaZzfH8TJ7Wc4ufMsJ7adsbhNl7zOlKxSjJJVi1O6WglKvVCc0tVLkL9A7rp2heJpokZQimwhNjyOo5tPcWxLIGd2X0CXkoZLXmcq1C1LwSKeFPD1pEBhTwr4euDhkx/nPM44uzrh5OpkfnVxzBxlOOdxwt7++V/TSU3WYUg3YEg3ZI4O09P06JJ0JMenkBSXnPGaQmRwFLcv3uP2+bvERyUCYGen0ahbPV6e8BJVGlVUjhuK5xo1glI8FUQEXUoaKQmphN2OYPNPO9m38ghGgxGf4l60GdycBp3qUL15FZycHZ+1uc8M17wukNe6OiJCbHgct87f48yeC2yfu5uDa49TrnZpXp7wEi80qUT+gvlwyeuiBEvxP48aQSn+EX26nhtn7hB8JcRcroZw70ooD26G/cVJwDWfCx2Gt6LtkBaUrFr8mdw4DXoDKYmppCbqMl5TSU3SoU8zYNAbzG7mGa8mk8m83qOBnZ0dmp2Gvb0dji6OOLk4/WVkl88zL/kLuj0zoU1N1rFnyUHWzdxK8JWQzONOLo64e+fHwzs/7t75KVO9JC36NKZ0tRJKuBS5EltGUEqgFP+P9DQ9O+fvZfn0dUQGRwPg4GhPkbK+FKvoh1/ZwuQv6Jbhgp2Xuu1qkNfdyqGCDcRHJXDpyFVuX7hH1P1ookJizOV+NHGRCTnadx43V/J7ueHu5YZ3MS9KVCpK8Up+FK9clGIViuDs6pyj/ZtMJs7vD+LBrXASopOIj4wnLiqBuIgE4iLiuXXuLkaDkZJVitGybxNa9m1MoRLeOWqTQmENSqAUWSI9Tc/OeX+wfPp6Iu9HU7lheV6e8BJlapTEt5QPDo5Pd0b4wa1wzu27xKXDV7h05CrBV0Mz38tf0A2vogXw8iuAt19BChYpkOEN50IeN1dc3VxxzeeCk4sj9o5mN3MHR3vzNWiAmG/6IiAmE0aDiXSd2bMwXac3exempJEYm0xCVCIJ0YnERyeQEJVI2O0IQm6EYTKaANA0jaLlC1O7TXXqdaj1TNzM46MSOLD6KHuWHeTS4asAVGtWmX7vd6dmqxfUqErxzFECpbAIESE6NIZ7V0L/Mn1369xd4iITqNywPAM/7Ekt/2rZdmNLT9MTeiOM4CshPLgVTnJ8CikJqSQnpJCSkEJyQirpOr3ZoSBNT2piKmF3IgGzV1+VFyuYS6OKlKtdGpc8OTtisfR67gbd597l+1w+fp1zey9mupkXKumNg5MDzhlThc55nHFydcIljzP5C+QzO4xklIKFPfAp4W1es8oGwu5EsHf5YTb/vJPI4GiKVfTDt5QPBQt74lPMi8Yv16PUCyWypS+FwlKUQCn+lbTUNDbM3sHqrzZmeoqBefqqWMUiFCnrS9vBLbJFmBJjk9gxby/n91/i3pUQwm6FYzL9+bdmZ6eRJ795D1Ce/K7kye+Ks6sTDk4OODo74ujsSKV65ajdtjrFKhR5LvYIpaWmcW5fECd3nCEmLC5j06+etJS0zBFZWko68VEJ6JLT/lLXwdGeF5pWpl77mtRtX5PiFf2y/H+QnqZnx29/cHLnGaJDY4kOjSU2LA4RoUqjCnQe3ZbG3Rv8px1ZFE8PJVCKx2I0GNm1cB+LPlxFVEgM9TrUpH6H2hSrWIRiFf0oWNgz20ZKty/cZcPs7exZepC01HRKVC5KiSrFKFahCMUr+lG8UlEKlylEHjfX//S0U0piKjEPYol+EEvMgzhunL7Fie1nuHMpGADfkt7Uf6k2HUe1oWSVYtnWb0J0IjsX7GPLzzsJvRmOh3d+2g5pQZdx7fEuWjDb+lEo/o4SKEUmIsK1U7c4t/ciOxfs5d7lECo1KMfwGf2p1rRyltpOiksmJiyOuIj4jGJeqD+3/xLn9wfh7OpEy75N6DKuHWWql8yeC/qPEH43khPbz3ByxxlO7TpHuk5P7TbVqdKwAm4F8uFWIB9+5XwpWbV4lqY5TSYTp3dfYMvPOzm6KRAHJwfaD2tF5YblMx8oVLgmRXaSqwRK07RiwCLAFzABc0RkpqZpHwIjgMiMU98TkW3/1pYSKMvQp+s5ty+IIxtOcHRzIFEhMQCUrFKMwZ/05sUudW0etUSFRHNg9TH2rTrM5WPXH3tOkTKFeGlka9oNa6kiIGQD8VEJbJ2zmy2/7Mr0pnyIpmn4lfOlVLUSlH6hBHXaVqdivXI29RN2J4IFU1awb8WRzAC7dnYaFeuXY+i0vlRvViXL16JQ5DaBKgwUFpHTmqa5AaeArkBPIElEvrK0LSVQ/05sRDyLP1zFnmUHSUlIxSWPM7XbVqdRl3rUbV8DD293m9pNjE1i34rD7F15mIsHryAilKlRksbd6lOkrC8ePu54+uTHw8ed/AXdnmlEbxEhMSaJyPvRRN2PJvK+2f08OSGFtJR00lLTSEtJQ5cR5fzR4LH2DvY4Ojng5mkeoeQv6GYuXm74lfWlcJlCzzyyhdFgJCkumbjIBIKvhHD7/D1uXbjLrXN3CL0ZDkDtNtUZMKUHVV6sYFMf6Wl6Qq4/4O6lYO5cDGbXon1EBkfTqFs9RnzeH7+yhbPzkhT/MXKVQP2/jjRtI/A90Ij/mkDduwebNkFcHHh4QJcuUCzr6woJMYns+O0Pln62lrSUdFr2a0zT7g2p2aqqzftydClphN+JYN/KI6ybuZWUhFSKV/Kjea9GNO/1IsUq+GXZbktJT9OjS9aRrtNnOhzo0/To0wwYDUbCbkdw9eQNrp26xa2zd9Cl/NXxQNM0s/NFHmdc8pg96ZzzOGNnb4fJaMJkzMgRZTCiTzOQGJNEUmzSX5w5wJx6o1jFIpSsUowSlYtRpkZJ3Arkw8HRLGz2jg44OpuDwLrkdcHZ1emprq8lxyezdc5uVn+1ibjIBGr5v0DAG50pW7MUnj62PZyA2elj7bdbWTFjPfo0PV3GtqP7653UWpXCJnKtQGmaVhI4AFQFXgcGAwlAIPCGiMT+W/3nVaDmTw+jz5FxuGxbDyZT5nGxs+NmtW6U3f49+Ppa1WZCdCKrvtzIyZ1nuX3+HiJCg461GfnlAJvEQ0Q4u/ci677bytWTN4gNj898r1G3evR972XK1Sqd7Tfc1GQdwVdCzG7aQfcJvhpCXGQCSbHm1BZJsUmk6/RPbMcljzNla5WibM1SFC5VyLw3qmhBvIsWpICvh9WjOpPJRHJ8innfU2QCwVdDzSOKoPvcvRRMxL2oJ7ahaRqu+VxwdXOhgK8HXkUL4uVX0Lxnq2hBytcpTfFKRXPkM93y8++s+nIjcRHm/8dCJbypWL8sleqXp1KDcpStWcrqtaWYsFgWfLCSHfP+QESo16EmAa93okaLqv9pRxeFdeRKgdI0LR+wH/hMRNZpmlYIiAIE+ATzNODQx9QbCYwEKF68eO27d+/mqJ3ZzfzpYTR9rxFluIU4OqJ17gwVKqA7fxX7LRtxxEC8V2ncLx6BQoWe2J7RYGTrnN0s+GA5yQmpVG9ehWpNK1O7TXUq1bd+7cFoNHJo3QlWfbmRa4E38SzkTv0OtfAtXYjCpXwoU7MUJSoVteXS/5F7V0LY9utuDm84QfidyMzcTg+jVBTw9SCfZz7yeeTFzTMveT3yZmy2NQeTfZhE0MHJnOOpYBFPilfye6rTb8kJKdw+f5eURB0GvTkQrEFvJF1nHu3pktPQJenQJZsDwkaHxWVGvXiYPgTMKUTqtqtJvfY1qdmqaramDnkYVf3e5ftcOXGdK8dvEH7XvOTr6OxIh+Gt6PdBgNWjq+CrIfyx7BBbft5FXGQCpauXIGBiJ5r3fhFHJ+Wqrvh3cp1AaZrmCGwBdorIN495vySwRUSq/v29R3keR1C6TgG4bFnLKWrxVrmNrDhkvtm3aAHxQffZ6dKFKrrT0L07rFnzr22d23eJHybM4/aFe9RoWZUx3w2hVNXiNtmlT9ezY95eVn+1iQe3wvErV5ieb3bGf0DTHPHaStelc3DtcbbO+Z0LBy/j4GhP3fY1KV+7DCUqF6V45aL4lfV96lEqngW6lDQi7kVx4YB5r9Tp3RdITdLh4GhPTf9qdHylNfVfqpUjghv9IJYrx69zbMspdi3ch7OrEz3e6Ez31zuSx806cUzXpbNn6UHWfruFu0H3KVDYk/6Tu9NhpP8zX6tT5F5ylUBp5rH/QiBGRF575HhhEXmQ8fNEoL6I9P63tp47gbp3D0qVQuztaVXyFnuvF8U7IyxaZCRUrgz7lwTjVa+0eervzp3Hrkmd23eJxR+v5ty+S/gU92LU14No/HJ9q6ZVkuKSuRZ4k6snb3L15HWCjl4jNjyeivXK0vPtrrzYpU6WbyqpSakE7jxHyI0wc+6nsFhiMnJARd2PQZeSRpGyvrw0wp/Wg5pnaV3kfwl9up5Lh69ycvsZ/lh+iKiQGPJ55MXT1wN3Lzc8C7lTskpxytY0J2r0Ke6VLVNqwVdDmP/BCg6uOUZe9zxUqFeWJi83oO2Q5laNhESEwF3nWD59HRcOXKZYhSK0GdScVv2bqnUqxf8jtwlUY+AgcAGzmznAe0AfoAbmKb47wCsPBeufeO4E6vvvYfx46N6diB/XULWqWZgAvL3h4kXw8QECAmDtWvP5Y8dmVo8KjeHXtxfzx7JD+BT3otOoNnR9tYNV+17C70Yyd9JS9q88kjmV5leuMBXqlsG/f1PqtK2RpZtdarKOE9vOsH/1EU5sPZ2ZjNA1n0tm3qcChT0o4OvJi13qUq1Z5eciGsSzwqA3cHRTIKd3nychJomEqASiQmIIuR6W+f/n5pmXMjVK0qJPE1oPbJrlabXLx6+z7dfdXD52jbtB9ylUwpt+k7vTemAzq0a0IsLBtcdYP2sbFw9dQdM0arSsSucxbWnUtZ5ap1IAuSwflIgcwhyW8+/8656n/wni4syvFZ7g7lu+vPk11uwjYtAb2DB7O4s/Wo0+3UD/DwLo/W5XqzzyUhJTWT59PWu/3YKdnUaPNzpRq3U1ytcpg5tnPluu5i9cPn6ddTO3cmxTILqUNDwLudN2SAua9mhI+dqln1ka9ucdB0cHmnRvQJPuDf5yPDVZx52Lwdw4c5ubZ+9w6fAVvh35M0s+Xk2PNzvTfngrmzfsVqpfjkr1y5lHQjvPsmDKSr4Z8TMrZqyn/5QetOzb2KLRtaZpNA1oSNOAhoTeDGPPkoP8vng/H3X/ilqtqzF+9jCKli9ik42K/zb/OoLSNM0F6Ag0AYoAqcBFYKuIXHoqFvL8jqB0HbtT+9YagoL4f1N8e/eCz5g/R1CnKzblp4nzuXMxmLrtazJ25hCr9p2E3gxj7/LDbPxhO7Hh8bTq14Sh0/riU8zL5ssw6A3cPHeXkOsPCLn+gAsHL3NmzwXcCuSjWY+GNO/ViKpNKj7zdQcRISUxlbSUNNJ1Znd0c1TydAx6458u5RmviICmoWkamgZoGnZ2WmZGXwcnBxydzK8ueZ0zoqO7PPPrfHitgbvOsXzaOi4cvIyHjzvNejSkdLUSVGlcMUsx/ESEo5sDWTh1JbfO3aVE5aJ0GduOhl3q4lWkgFVtGY1GNv+0i/mTl6PX6ek+sSM93uqsNnD/h8nWKb6MiA+dgH2YN9lGAC5AeaBFxs9viMh52022jOdOoO7dQ0qVwmCypxS3cK9clL17zW+1aAFBQdCyXDC7b5cm1ujIz50ns3fTGXxL+TD6m8E07FzH4ptMckIKyz5dy7qZWzHojVRrVpkRn/e3OaoAmJ/at8/dw5qvNxN53xzBQNM0fEv50PGV1nQa3eapjZRMJhNRITEZEddDuX81lPC7kSTEJJEYnUhiTBIJMUmZqS9yEpc8zri6ueDunR/vDNdx76IFKehXgMKlfahYv1y2RSS3hAsHL7N8xnouHrxMapIOAHcvN6o2rkiVRpWo3boapatZH7XcZDJxaN1xFn24irtB9wGoWL8cjbrWo/HL9SlazvIHp5iwWH59Zwl7lhzENZ8L3SZ0oNc7XZ/q56TIHWS3QL0kIlv/pTMfoLiI5LhyPHcCBdyoGUDZs2u55FKLQkc24FXT7AQREQF9Ggcz43pXQolnnmMN9HaO9Jn0Mr3e6WKxJ53JZGLPkoPMfXcJMWFxtB3cgkEf98rS4nRibBIbv9/B+lnbSIhO5IUmleg0ui0lqxajSJlCOZ6U7yFhdyI4tO44hzec4Mbp23/ZgJvHzRXf0j64e+U3x6bzzEf+gubXhyktnFwczVlxXRyxd3TA3t4Ou0eKppkHUWL+JzMnlEFvRJ9uwJjxqk/To0tOIzUxlZTEVFISzJl646ISMqNVPIwODmBnb0f52qWp2rgSLzSpRNXGFclfMOdHDCKSOcK9ePgKFw9ezowu8WKXugz5tI9NAWdFhHuX73No/QmObDzJtcCbALQe1Izh0/tRwNfT4rZuX7zHkk/WcGD1UQqV8Gb898Oo/1Jtq21SPL/kuJOEpml2QD4Rydn0pX/jeRQowsKIf6ER7lG3wMHBHD2ifHm4do1rG/Yx01ida1oBajWtwPg5Y6yao798/Do/TZzP5WPXqVivLGNnDbV5xPTw5rZz/l42/rCD1CQd9V+qRe93u1G1UUWb2rS0X12yjrhIcxLA+KhEbpy5zaF1x7h++jYApauVoFqzyhSvZM5aW7RCkWyNvJ4dGPQGYh7EcjfovlkgDl3hyokb6NP0aJrGC00r0bzni/iVL0I+jzy4eeajQGGPHBf7qNAYdi3Yx8ovNpCaqMN/YFO6jGlHmRolbXbpjwiOYvOPO1nzzWacXJ0YOLUnHUe1tupaLhy8zMzRc7gbdJ8m3eszZuZQq6cPFc8nOSJQmqYtA0YBRsxTfe7ANyLypa2GWstzKVAAYWEwbhysN0eSSMWeRVRhnVYOd2cY/d0Qmo/sYPENN+JeJL++s4R9K4/gWcidYdP70XpgM6u94+5evs+ZPRe4cPAyFw4EERsej6ZpNOvZkN7vdsv2CORJcclcOXGDy8euceXEdW6fv0dcZAL6tP8fKaJSg3I07lafRt3qPbex39J16VwLvMnp3RfYt/LwXzIBP8TLrwCFyxSiSGlzrL/ydcpQy/+FbF/nSohOZMWM9Wz4fgf6ND0ueZ3pPLotfd57mXweeW1q8/61UH58bT4nd5wlf0E3Oozwp/vElyyO+ahP17Pm6y0s+WQ1Ti5OjJs9jJZ9G+eqBw9F9pNTAnVWRGpomtYPqA28A5wSkWq2m2odz61APSQ4mBPT5zNrxRXC4/S81K8hw2e/YvENIjVZx8rPN7D6q00A9HyrCz3e7Gz1BsvQm2H8+s4SDq07DoB3sYJUa1aZak0qU7PVCxQu/eSIFpYSERzFxtnbObb1FPcuhwDmdawSlYtStlYpCvh64u7lRn6v/Lh7ueHu5Uahkuasr/9LPByhxobHkxibZA5oGxxN6K0wHtwMJ/RmODEPzF6cPsW9aD+sFe2Gtcz2UUVsRDzn913i6OZA/lh2CLcC+RgwtQcdX2lt04hKRDi/P4j1s7ZyZGMg+TzyMHRaPzqMaGXxA1PIjQd8MfgHgo5cpUGn2oz/fniWnHoUuZucEqhLmPctLQO+F5H9mqadE5HqtptqHc+zQMWGx/HT6wvYu/wwxSv5MfGXV6jauJJFdUWEP5YdYu67S4gKiaF570aMmNEPn+LeVtmQHJ/M0k/XsmH2duwd7On5dhdaD2yGb0kfWy7pX7kaeJO1325m/6qjAJm5jCo1KEeFumXI627bU/v/MqnJOgJ3nGXLnN85/ft57OztaNi5Dh1faUPt1lnPbvx3rp++xZy3FnF27yWKVSjC8M/707CT5Y45f+duUDCzx/3GuX2XqFivLBN+GknZmqUsqms0Gln33TYWTlmBnb0dQ6f1pdPoNrnCY1KRveSUQL2KedR0DngJKA4sEZEmthpqLc+jQIkI+1cdYfa430hNTKXPey/T652uFqfXDr4awnej5nB+fxDlapdmzHdDrF4TunnuDmu/3cLhDSdITdTRZlBzBn/aO9uezlOTdQQducq5fZe4cPAy9y6HkBCdSB43VzqM8Kfr+PYUKmGdmP7XCbnxgG2/7mHXgr3ERSaQ1z0PxSoUwa98YYqV96NohSLUaVudvPnzZKkfEeHYllP8+vZigq+GUrpaCdoOaUGrfk1w98pvU3t7lh7klzcXkRCVQMdRbRj8SW+L9949uB3OzNG/cmrXOeq0rc6UNW8qT7//MbLbi68hcEz+dkJGCCN7ETHYbKmVPG8CFRUaw6wxv3J0UyDl65Th7QVjKVHZMi8qfbqelZ9vZNlna3HO48yILwbQbmgLq9aZEmISWfDBSrb+sgtXN1cad6tPl3HtKFertK2XlElEcBTbft3N2b0XuXriBga9ETt7OyrULUPpaiUpU70ELfs1yfIN9L9OepqeQ2uPcfHwVe5fM7vXP3T5d/PMS/fXO9F1fPssf84GvYFdC/ax9dfdXAu8iYOjPQ271KXdkJbUblPN6pFMUlwy8ycvZ8vPu8jvlZ/R3w6mRe9GFo3ORIStc3Yze+yvVKhXlk+3TFL7pv6HyG6B+hmoB1wDdgA7RCQsy1bawPMiUCLC9t/+YM5bi9Cn6Rn8SR9entDB4pQPQUev8u3IX7hzKZjmvV5k9LeDrXLlNRqN7PjtD+a9v5yk2CQ6jW7LoI97ZUsEiegHsayYvp6tc37HaDRRvk4ZqjerTPUWVanaqIKKIPEUSE3WceP0bVZ9uZFjW05lq1AB3L5wl53z97J7yQHioxIpXLoQo78dTMNOVt1TALhx9jYzR83hyokb1GlbnY99lzsAACAASURBVFd/HEHhUpatcR7ecILPen+Lp68Hr/3yCnXb1rC6f0XuI6em+CoC7YG2mD349mIWrMMiYrTRVqt4HgQqNSmVD7t/xenfz1OtWWVe/3WUxV5oqUmp/DZpGZt+3IlX0QJM+HGE1XtETv1+jt8mLeX66du80LQS42YNs2mT5qMkRCdydHMg5w8EsX/lEfTpBtoMak7/DwJyzdSd0WA0526KSkSXrCMtJR1dijl7blpKOga9AaPhr8kJMwJJmCNJ2JkjStjZ22VGj3B0dsTR2fyaN78red3zmEtG+o/cEFPwauBNlny8OlOoWvZtQp22NajevHKWHxb06XqObT7FwqkruRt0n7rtazJsWl+rvTuNRiObf9zFvPeXYTKaGPnlQDqNbmPRaOry8et8NfQH7l0O4aWRrXn1x+G54nNX2M7T2AflijmKRHugobWd2UpuF6igY9f4auiPhFwLZeysYXQc1driL9P5A0F8NfRHwm5H0GVsO4Z81scq77yokGh+en1h5gbIYdP70bzXi1laWE9LTWP9zG2s+HwDyfEpuHnmpUHnOvR7v/szcf1OiE7k1vm73L5wj1vn7xJy4wFxEQnERyaQGJOENX/DWUXTNDwLuVOopDeFSvrgW9IH35LeFKvoR6UG5Z56XqSrgTdZPn0dgTvOkpaajoOjPVUbV6R2mxo07FTb4qnlx2HQG1g/azvLPltLUlwyTQIaMOjDnla3GREcxXej5nBy+xnaDWnBmJlDLBLRdF06Cz5YweqvN9NlbDvGzhqqXNGfY3JMoDRNqwU0xhyB/LCInLbNRNvIrQKVrktn4dRVrPl6EwX9CvDmb2Oo5W+Z970uJY157y1j/axtFC5diDfnjaFa08oW9200GNn4ww4WTlmJPt1Av/e70+OtzhY7YTy2TaOR3YsPsHDKSiLvR9OgU20GTOlB2ZqlnurTa2pSKse3nubAmqMEHb1GdOifCZfdvdwoVtEPT18PPLzy4+HjjoePO+5ebrjkc8EljzPOeZzMkSRcnXB0dsTO3g57B3vsHeywt7fjYSiJh9EkxCQYjSaMegP6NAPpaXoM6QbSdXpSE1NJiksmOT6F5PgUkuKSiQ6NJfxuJGG3I4i4F4XRYJ5IcMnrTI2WVanTpgZ129WgSBnrsiVnhXRdOhcPX+XUzrME7jrHrfPmBJ8t+zZm6Gd9szTiTYpLZs03m1k/cxu6ZB2dx7Rj8Ke9rZpWNJlMLJq6imXT1lGohBev/fIKtVtb5gj88xsLWfvtFoZ82oe+771s62UonjE5NcU3BegBrMs41BVYLSKf2mSlDeRGgbp++hbT+88i+EoIHYa3YuRXAy3+wl4+fp3PB84m5PoDuoxtx7AZ/azyWLpy4jrfjZrDzbN3qNuuBuNmD8vSzdBoNHJ8y2kWTFnB7Qv3qFC3DCO+GED1ZlVsbtPivg1Gwu9GEnIjjKj70ZzceTYzfUcBXw9q+r9AmWolKVWtBKWrFcezkEeueoo2GoxEh8Zw48wdAnee5eTOs4TdjgCgSFlfmvVoSLnaZfDyK4CXXwGb0tDbQvSD2MyoDyaT0O3VDnQd3z5LobASohNZOHUlm3/aRYHCHoydNYwmL9e3qo2Lhy7zzYifCb4aStvBLRg768mjKZPJxBeDvmfP0oNMnDOKDsNb2XwNimdHTgnUZaCmiOgyfncFTouIZZt5soHcJlDJ8ckMrTwROzuNN34bQ502lj0JGvQGlk9bz9LP1uLlV4A3542hRot/TSb8F1KTUlnwwUo2zN6Gp68HY74bQpPuDWy+YUeFRLN97h9s/20PkfejKVKmEEOn9aNpgO1t/hsiwrl9lzi6KZD710MJuR5G2O2IzBEIgIePO026N6B5rxep0qjCc7cfRkQIuRFG4M6zHNtyijO7z2My/fkds7PTKFm1ONWaVqZa8ypUa1rJJrduS4m8H838ycv5fdF+NE2jZquqDJjSw+K9eI/j0Qek1oOaMW7WMKumpdN16Sz+eA2rvthATf9qfLLpnSdOjerT9XzQ+XNO7TpHp9FtGfFFf+WG/pyRUwK1HegjInEZv3tg3gfV0WZLrSQ3CVRaahpfD/+JfSuOMPvYNCrULWtRvVvn7/LlkB+4ceY2Lfs2ZuysoVa50J7ceZaZo+YQfjeSTqPbMmx6X5s8tx6ma9jy8y6ObTmFyWiidpvqvDSyNQ071c6R1OuxEfH8vnAf2+buIeT6A1zyOONXvjBFyvriV7YwfuUK41fWFy+/AviU8HruROnfSIxNIvxuJFH3Y4gKiSEyOIorJ64TdORaZhDcklWLUb9DLbqMy9oI598IvRnG7sUH2DZ3N9GhsbTq14Thn/e3eU+cQW9gySdrWD5tHYVK+vD2grFWi96O+Xv5etiPtOrfhLcXjHviNHJaahrzJ69g3XdbKVymEG8vGEeVF5+Qc02Ra7BFoMxz8I8pwGxgFrABCAEWAPOB+8CKf6qXE6V27dqSG7gaeEOGVp4g/lqALPpolUV19Ol6Wfzxamnn1EsCCg2TQ+uPW9VnXGS8zBg4S/y1ABlSaYJcOBhki+kiInInKFje8v9I/LUACSg0TOa+u0RCb4bZ3N6/YTKZ5PyBIPm09zfSzqmX+GsB8lqTyfL74v2iS9HlSJ/PE+lp6XLx8BVZ+tlaebvNx9LGoae0dewlMwbOkhtnb4vJZMqRflOSUmXe+8ukvXNv6eTWX1Z8vkHSdOk2t3fhYJD0LzVa/LUAmTnmV0mKT7aq/pJP14i/FiDvtvtEIoKjLKpzdt9F6VdytLSx7yFzJy3Nkv2KpwcQKFbe+/9tH9SgJwjbQquUMAvkhhHUuX2XeLftJ3j4uFs8rSciTOv7HftWHqF570aMmzXUqumci4cu82nvb4mLSKD3u13p+97LFqfjeJSE6EQWf7SazT/vwiWvM4M/6c1LI/2z1eMsNVnH1RM3CDp6jcvHzCU+KhE3z7y0HticDiNaZcmj7H+dsDsRrPtuK9t/24MuOQ0PH3cq1i+Lf/9mvNilTrZ7B4beDOOn1xdwbPMpfEv5MGxaX5r1tM378+HU8/pZ2yhaoQhf7J5i8chMRNj80y5+fXsxTq5OzNg52aIN5ckJKfz8+kJ2zPsD/wFNeWfheKvtVjxdctzN/FnxrAXqwe1wxtWbhLt3fr479IlFU3Ox4XF8M/Jnjm0+xaCPetH/gwCL+9OlpDH//eWsn7WNQiW9mbr2TcrWsCy22aPo0/VsmL2DZZ+tJSUhhfbDWjHok954+lgWddoSkuKSWfP1ZtbN3JqZNK9YRT8qNyjPC00r0aznizanJP8vkhCTyP6VR7hy8gZn9lwgMjgaDx932g1pQYcR/tka0BfMU8e/TVqa6XAz/vvhNvdxdu9FpnT5nAKFPflyz1SrpiuDr4Ywqd1nJMUlM23be1RuaNnU3S9vLmLdd1uYtHQCzXs1ssluxdMhW6f4HhbMKd/PADFAApAIJFg7VMtKeZZTfCmJKTKy+hvS1XOQBF8LtajO4Q0nJMBnqLR36SNrvtksRqPR4v4uHLosg8qPz5wySUlMscnu8weCMqcjJ3X4TG5fvGdTO/9ESmKKLP1srXT1HCT+WoB80utrObb1lMRHJ2RrP/9lDAaDHNt6Sj7oMkPa2PeQ1nY95N12n8jZvRezvZ91M7dKJ7f+0sG1jyyfvk706Xqb2rp4+Ip0zj9ABpQZK+F3I6yqG343QgaVHy8d8/WTM39csKhOfHSCjG84Sfy1AJkxcJbVU4yKpwc2TPFZIlA3gGpkjLaeRXmWAjV9wExpY99DTuw4Y9H58ycvF38tQF6p+abVorDyiw3S2q6H9C81Wk7vOW+LuZKmS5fZ4+aKvxYg/UqOlmNbT9nUzj8Rfi9Sfn5joQT4DBV/LUAmd5ou18/cytY+FP+fiOAoWfThKunlN0L8tQB5s+VU+X3xfklJSs3WPj7s/qX4awEy/IWJcuPsbZvauXz8mnTxGCgBhYZZ/L15SPSDGBn+wkTp4NpHLhy6bFEdg94gC6eulDb2PaR/6TESGRJti9mKHCanBGovYGdtw9lZnoVAGfQGWTBlhfhrAfLLmwstqhN8NUTaOPSU6f1nSnqadQu3vy/eL/5agHzU4ytJTrBt1BQRHCXjGpifJn+YMC9bb15JcUky990l0sG1j7Rz6iWTO0+XS0evZlv7CstIS02TVV9tynRM6Jivn8wYOEsuHbmSbX0c2XRSehYZIe2cesmST9bYNJq6ffGeDH9horS26yELp64Ug8Fgcd34qATpW2KUdM4/QPYsPWBxvQuHLksH1z7yYfcvrbZXkfPYIlCWuJnXBT4B9gNpj0wNfmPVXGIWeNprUBHBUczoP4sLBy/TemAzXv1xhEXrKJ/1/Y5jmwJZdPN7PAt5WNRXckIKP742n10L9lG1cUU+3/WBTY4QZ/64wLS+M0lLSePNeWNoGtDQ6jYehz5dz5aff2fJJ2tIiE6kVb8mDP6kd47kkspu9Ol6EmOSSIr7MwpEclwy+jQDDg/j7mW8uuRxwqtoQbz8CuSIq312YzKZuHT4KrsX72f/6qMkx6fQok8jhs/ony1J/+Ii4/nh1XnsW3mEMjVK8ua8MVavg+pS0pg15ld+X7SfWq2rMWnJqxZn3Q27E8GMAbO4dPgq/gOaMm72MIu2Vaz4fAO/TVrK1LVv0ribdZuIFTlLTu2D2gUkARcA08PjIvKRLUbawtMUqMBd55jW9zv0aXpe/XEErQc0s6je1ZM3GFd/Er3f7cawaX0tqxN4k097fk3EvSj6THqZ/lMCrL45pqfpmfPmIjb+sINiFYowdd1blKhU1Ko2HoeIcGj9Cea+s5jQm+HUaFmVkV8MyJaUHVnFZDKRFJdMfGQCcREJxEUmkBCVQEqijoSoBO5dCeHe5fuE3gzHZDQ9ucFH0DSNgkU88SnhjU9xL4pX8CO/lxv5PPKSz8McMLaArwfexQo+9bh7/0Rqso5VX2xk1Zcb0TSNXm93JeCNjtkSYf7Q+uPMGvMrCdFJ9JnUjQFTe1gV9krEHOH/+/G/4e7lxofr36ZCnTIW1TUajCz7bB1LPllNoZI+fLjurScGQDboDYyt9y5xEQnMC/pWJcjMReSUQAVa22hGvWLAIsAXs7DNEZGZmqYVAFYCJYE7QE8Rif2nduDpCVR6mp4BpcbgViAfH65/m6LlLAuMun/1Ub4Z/hNOrk78FvStRV5+yfHJjHjhDTQ7jfeWvWbThsPkhBQ+fPlLzv5xka7j2zN0Wt9s2V1/48xtfnp9Aef3B1GySjFGfDGAuu1qPPUQQyJC+N1Ic6DY8/e4deEut8/fJfRm+F+iTzyKvYM9fuV8KV6pKMUr+lGwSIFMYXkoMg5ODhj0Rox6I/p0A4Z0A6lJOiKDo4i4F0VEcBQRGbH2wu5EPrYfOzuNgn4FzMFiS/lQrIIftVpXo1ytpxu38FHC7kQw5+3FHFxzDA/v/PR9vzudx7TNcmilhJhEfpq4gN2LD9BpVBvGfT/M6mu8ceY2U7t9gaZpzNj1gcXfLYCLh6/wccBXFK1QhG/2ffzE84OOXWPCi+/T+91uDP2sT64KjfVfJqcEagbwh4jsstKYwkBhETmtaZobcApzHL/BQIyIzNA07V3AU0Te+be2npZA/b54P18M+p7pOyZbtM8pXZfOL28uYtOPO6nUoBzvL59ocVDOb0f+zI55fzDzyGdUrFfOalujH8TyXofPuHvpPm/8Ntrikd6T2pz//nJ2LdxH/oL5GPRxbzoMb/VUYsc9yv1roexcsI/di/cTFRKTebxw6UKUrlacouWLUMDXE3fv/Hj45M8MFuvq5opLXudsjUSRnqYnOS45M2BsYmxGsNg7EZkBY8PuRBAZbE4m6O7lRq3W1ajbtia121SzKp9XdhF07Brz31/G2b2XKFOjJK/9PNKmv7FHERF+m7SUlV9spEaLKrw1fyw+xa0LQBt07BqTX5qGQW/k1R9H4N+/qcV1V36xkbnvLmHupW+fOEMgIkzp+jnHNp+i9aBmvPqDZVP0ipwlp9zMEzGPgFLJgps5sBFoDVzFLFwAhYGrT6r7NJwkTCaTjKr1lgytPMGiXfwhNx7I6NpvZTpRWLOQfOr3c+KvBcictxbZZOu9K/elf6nR0jFfP6u9pB6HPl0vy6evk475+kk7p17yy5sLJTE2KcvtWkNcZLxsm7tbJjR+X/y1AGlj30Pe7zhNNv+8Sy4dvWqz48jTIjYiTvYsPSAzBs6SgELDxF8LyHQLP7zhxFOPnmEymeTAmqPSs8gIaW3XQ2aPm5tlF2yTySTbf9sjndz6SxePgbJ7ieUODA8JvxshrzWZLP5agHw+aLbF/68x4XHSzqmX/DRxvkXnGwxmz77Wdj1kRLXX5d6V+1bbqsheyAkvvuwomKfz7gH5gbi/vRf7pPpPQ6AuHAwSfy1ANv2084nnmkwmGVhunHQrMEiObDppVT9XA29IzyIjZHCF8TbdtC4eviI9Cw+XAJ+hcuXkDavr/53Qm2Eytt474q8FyJSun8v965bt9coqyQkpcmxLoPz42nwZUe118dcCMsM5rfh8g0SFxjwVO3ICo9Eo10/fkgVTVmS6hbd17CWj67wts8b+Kmf+uJBjoYz+TlJcksweN9e8faH0GLkamD1/Mw8fJHbM/8Pq+o+6hX/c82uL633a+xtp79xb9q8+YnGdkzvPSnfvIdLLb4QKsfWMyVaBAkr+a0XQgKJP7ADyYZ7eeznjd4sEChgJBAKBxYsXz6nPTETMsb0CfIZKF4+BEhsR98Tzr5+5Jf5agGz/bY/FfZhMJtn88y5p79xb+hR/xeq9Q0ajUZZNWydtHHpK/9Jj5NaFu1bVfxx7VxySzu4DpIvHQKu+9LZi0Bvk98X75bUmk6Wtozk+X3uXPvJ2649k2bR1cvn4tad2435aGPQGOb7ttPz23lJ5s9WH0smtv/hrATK6ztuyd8UhMegtd7/OChcOXZY+xV6R9s69ZdVXm6xy+34cBoNBXm8+RTrnHyBhd6zbkPuQ+R+Y9wxaut8qKjQmc1PunLcWWfzZnd13Ufy1AFk/a5tNdiqyh+wWqNXAWmAgUAXwAYoDLTG7nR8BWv9r4+AI7ARef+RYrpniM5lMsn7WNmnr2EuGVHxV7l62bBpg0UerpLVdD4kJi7Xo/JSk1MyAr++2+0TiIuOtsjP6QYy83doc5PXT3t9IUlzWpt9Sk3Xy9fCfxF8LkFdffE8e3A7PUntP4qEwDa5gjpAxrMprMnfSUjm1+/x/7qk2LTVNtvyyK/Oz6F9qtKyftS1b96z9E3GR8TKl6+firwXIhMbvZ3m0HHorTDq59Zc3W061KlrKQxJiEqWLx0Cr9i2l6dJl5ug55s3KrT606IFSRGRi0w+kd9GRKrDsMyTbp/iAysBnwL4MYTkDLAP6Ay5PqKth9uL77m/HvwTezfj5XeCLJxmZUwL18AlucufpFt/0Lx6+Ip3dB8irjd636Hyj0Shj6r4jre16yKKPVln9RY4IjpIevsPkpTx9Zeuvu7M8wrh35X7mBsq5k5baHNLGEmLCYmX59HUysOxY8dcCZGSNN+TQ+uM23cz+1zAajXJo/XF5tZF5qqy79xBZMGVFjk9tmkwm2bVon3TxGCgv5emb5Ugj2+buFn8tQGaPm2vTaHDh1JXirwXIuf2XrKq3c8Fe6eDaR/qVHG3ROlbgrrNWz3oospdctQbFnynizwNnM0oHoCCwB7ie8VrgSW3lhEDFhMdJB9c+8kmvry2+YR7ZdFI6uPaRQeXHW/z0eXaveXphyy+7bLLz6+E/SXvn3jaHnXnIwwXujnn7SbeCg7PFueKf0KXoZOlna6Vjvn7irwXIxGYfyMF1x5Qw/QMXDl2WyZ2mS2u7HtLWsZdM6/edBB27lqN9Rt6PktG135KX8vSVi4dtj0JhMpnkhwnzMsMvWTqieUhCTKL0LTFKXsrTV/auOGRV3ePbTou/FiD7Vj15etpkMkkP32HyxZDvrepDkX3kKoHKzpITAjXv/WXS2q6Hxd492+buljYOPWVsvXes+hJ+Pfwn6eTWX1KTrZ/KCjp2Tdo49JTvX/3N6rqPkhibJJ/0+jrzJhJ537K8O9ZiMplk36oj0q+kOQzP1Je/UN5TVnD/eqj8+Np86ew+QPy1ABnXYJKcP2B7/q8nERMel+nsc+v8nSy1tXPBXmnv0kf6lhgl107dtM6OsNhMz765k5ZavD5mMBjkZa8hMr3/TIvOf7fdJ9LDd1i2rN8qrEcJlIUkJ6RIV89B8lGAZXPfq7/elLl+ZE108ZTEFOniMVBmDJxltY2/L94v7V3MUxiWrnU9jpvn7piTuzn0lGXT1mV5cfyfuH76lkxs+oF5Kq/6GxZHo1b8f5ITUmTD99ulT/FXxF8LkOkDZlo9MrGU0Fth0rPICOmYr5/8sdy6EczfuRp4Q/oUf0U6uPaRA2uOWlU3PS1dvh35c+aUu6VTz58Pni1dPQdZdP6Ns7elZ5ER0jn/ADm127ZgzArbUQJlISd3muejT/1+7onn6lJ00jFvP3m/4zSr1msSYhLl9eZTxF8LkLP7rEuPcGj9cWlj30PebDnVaoeKR0lN1smg8uOll9+IHAvsqkvRyZy3Fkkb+x4S4DNUtvyyK8dE8L/Go9lvX/YaInuWHcwRL8fI+1GZDxebftyRpbZiI+JkdJ23pWeREVavSZlMJln1lflh0FKv0r0rDllld0RwlAyvOlG6FRhkdToQRdbIEYEC9lhyLCdLdgvUpp92ir8WYFGK6WNbT4m/FmDVms2D2+EytPIEaefUy6pozCLm/VgdXPvIuAaTsuTZFRMWKxObmW86tqbueBLn9l+SgeXGib8WIN+M+Ompb+79T3D3rtx+b4aMKzpQ/LUA+aDN1BxJJ5GWmiaTO08Xfy1AVn25MUttHVp/XPy1AKv3CIqYp+36FHtFJnX4zKLzdSk6eaPFVPHXAmTlFxssEvD710Olc36zo1NOOgkp/kp2u5m7AAWAc4Bnxs8FMjbdXra2o6yU7Baon15fIO2de1u0aP/dqF+kY75+FrunXjt1U3oWHi5dPQdZnVjuzqV70tVzkAyuMD5LI6fLx69J76Ij5aU8fa0WSEtISUyRmWN+NbtJlx6TYwL4X2betAeS2rG7iJ2dCIgBZDXlpIPWTTo7dJfdP2zK9j716Xr5tPc34q8FyMKpK20erenT9dLDd5iMbzjJpugV8ycvlzb2PSx6gBQxu54/XGP9YcI8i77Xe5YdzFzzUjwdslugJgC3MafYuP1IOQeMs7ajrJTsFKjrp29JZ/cBMq7+uxadP6j8ePmgywyLzjUYDNK3xCjpW2KU3LlkfQbbN1pMlYBCwyT0VpjVdR/y4Ha4dHYfIP1Lj8mRRILh9yJlVK23pLVdj2zPOZXTfP+9SPhjtnyFh5vfyy3Mm/ZAblBaBMTk6CjSvbvIe+9Jasfucgt3eZXm4q8FyPyJc7N9ys9gMMiXQ34Qfy0gSy7oe5YdlLaOveTVF9+zOit0yI0H4q8FyLqZWy2uYzQa5cfX5ptdyedZFt3iyyE/SGu7HhL94PmNWvI8kVNTfOOtbTS7S3YJ1I2zt6VbwcHSp/grFolAbESctHHoKb+9Z9lT1sO9Fpa4vf6dhJhEaePQU+a9v8zqug8xGAzyWpPJ0tl9QI5svj22JVC6FRwsndz6y/Ftp7O9/Zzk++/Nf+2VK/9VpMLDzccg94hUasfuIiCB1JIW5YIlPPxPO/0IlvPOteRraom/FiA/vjY/20VKn66X/qVGy/AXJkp8VILN7RxYe0za2PeQt/w/krTUNKvq9in2ioys8YbER1vev8lkkpE13pChlSdYNIq6dPSq+GsBcmDtMatsU9hGTgnUwMcVazvKSskOgbp1/o687DVE+hR7RUJuPHji+dEPYmR4VXPqaUtj3k3r9510KzDI6i+jyJ+LvVnZk7Lk0zXirwXI74v329zG49Cn62XOW4syN9sGXw3J1vafBo8K0UORetyxZ87duyJ2dmJydJQW5YIFRLy9zeWhnZGn74nJ3kF+0GqIvxYgXw//KdsdU45tPSXtnXvL4ArjJfSm7SP6XQv3mdfOusywar3n2JZAae/cW0ZUe90qL9Y9Sw9YvP6VpkuX9i595Oc3LMuYrcgaOSVQsx8pvwK3gDXWdpSVklWBSklMkR6+w6SX3wiLNtim6dJlRLXXpWPefha7S6cm66SDax+ZOXqO1fYlxibJ8KoTpbv3EJtvNPeu3Je2jr3k0z7fZusTtdFolEkdPhN/LUC+G/WLTeKbW3hUkP5+088V4iQiMnu22aju3SU8/E8bH9qcaWf37mICmdfOHGh3Wr/vJD0te8P4XDgYJN0KDpYevsOyFOFi4w87bIref+r3c9Ixbz8Z/sJEi6/NoDdIv5Kj5c1WH1p0/mtNJlscFUaRNWwRqCdmHROR8Y+UEUBNwPqc5M+Qo5tPERsez7uLX8Wv7JMTpa3+chO3L9xj8sqJ1GhR1aI+7l8NJV2np0ZLy85/iC4ljcmdpnP/WijvLH7V5lxG2+fuQUQY/c2gbE3QtubrzZzcfoaxM4cy4aeRNqWjf1aIGBBjBKK/woZVR3GSrRz9YzFT35pLz06L6NJmJaMGb+DTD7bh7b4fMdxFxMAPP0BExP9vLyICfvghh42OizO/VnhCAsvy5dGAIY08GfJpH/5Ydoh3235KQkxitplStXElvt73EcnxKXw36peHD6xW03lMW5oENGDXwn0YjY9PNPk4avlXY9KyCdy5GMzmnyxLR2fvYE+DjrW5dvKmRfYWLlOIyOAoi21SPF2syy9uJgXIWvazp8y+lYfx8itAtWaVn3hu6M0wlk1bS7OeDan/Um2L+wi5/gAAPysyherT9Xzc42uCjlxj8sqJ1G1bw+K6j/L7ov2s/XYLTQIaZGuCC3QtLQAAIABJREFUvKuBN5k/eTmNX65Pl3Htsq3dnEJMcZB+BtGfgvTToL+A2ccHOjfFHHgLmPL6Y+pm5HQ2Gh1pWrUEZ/aVplHT0uT1rA9OdYmMdKJFCwgKMp83dmwOXYSHBwC681dp0QIiI8E7Iy9gZCS0aAF794LPtWvmg56e9B37MoVKePP1sB+Z8OL7fLJ5klUZa/+NUlWLM+TTPvzy5iJ2Lzlgc2LM5j1f5OCaY1w8eIXqzatYXK9hpzrUal2NJR+vxn9AU4uyVRevVJSUxFSiQmLwLlrwX8/18MpPQlT2iboie3niCErTtM2apm3KKFsxB43dmPOmZQ9Jccmc3H6GZj1ftChN9Q8T5uHg6MCobwZb3IfRaGTbb3twcLSnSFlfi+t9+8ovnNx+htd+HknTgIYW13uUPUsP8uWQH6jeoipvzsu+u+bFw1d4p/XHePp6MPGXV3Jl2mwRI2uWnyEp7GtMUS8hEfWQuFcgeR56fTrnrvdByz+VBG0mQ15fzAvNtlKi9lHylzlDhUbHKVnnAOUa7KaW/zbuxK9Ayz+DNPvBhEeVoFiR6zga5iKxQzCG1+f03ldpWncpndpfp0eAKecuqnNnxM4O+y2biA+6T+XKcPGiuVSubBbIPo2DkY0bwc4OOncGoFW/JnyxewoJ0Um82vA9bpy9nW0mdZvQgSqNKvDjhPnEhsfZ1Ebd9jVxdnXiwJqjVtXTNI1RXw0kOT6FZZ+utahO8Up+ANy7fP+J5+b3yk9aajqpyTqr7FI8JZ40Bwg0e6Q0woIcUNldsrIGdWr3eYujRsRFxou/FiALpqywqo+HzgnrZ1uebyb0ZliWsuqKmPPjdM7/f+ydd1xT1/vHPzcQ9l6C4sKNu+69ELWiFgngRtx71Lq1bq1Vq9ZV9957VOusC/dCQEWQKXtvEpI8vz8uQaRo7k2C4/vL+/U6LzCcc+4Jkvu55znPGExT28/XaNmKyNfvyd3Kh3xqTlS51o+mUbiIy+X5JM+7TLL0WZQV3pJkcTVIHF2b8uIGkzxrM8nFDykhPvcjzzxPT6IzZ4j09dnXGIbI0pL9vjDMiJydiQID2f4rVhDVrElkaJhLA0TXaefauRT5tC3J4mqwLbELybP3UUJ8dpl4/oU0Yr34Ag1+oKRnH8IVEhKIOteIoif4oeicqiQxoXHkaT+c8xkMV8JeRqidaWJW9yU0uvEvKo1dJFpF/RxHceobH5FILoyILu64prTvnVMPyIUR0aHlp1RalxbuoKxSHQGwB9AbQC8A9nwvom5TR6D+3naVXBgRpxutIgI+4A73BJ3+t4LIVceTlg9cx8s5QVFTKiEqifOYkiwbsJZ6GPTXaBXc1Pg0GuQ0jo3HUsN7S5Ns3EgkFIppwYxDJIkrFIr4JpQaMZUGeZ4nC/N0srcv3TOvVy/2e13dD+KkcDpQNBMT9qu9/YfXatUiMjb+8G8dHTl1bBdJw/ofoyh/T5LF1aC0t01oxdzfafdODVchjoujdBunDwv38CCaPZt1jFC8EScnovjS/38UuSPV8QgtiVwupwGVx3DOX1kaW6bupp5GA1Qqy3H6z4ucs7/kZuWSCyOiIyvPKO0rl8tpifcactXxpMeXX/BelxbulIlAARgBtlz7HgB7AUQAGMb3Quo0dQRqx6wD1F3Pm5N33Japu6mHQX/OWSPSEtPJu8JI8qk5kVNNGgVyuZx8ak6kXzov4DymJIqd4d4FR1WeoyR5Ofk0ocUs6mk0gN48CtHYvOogl8soPf4kRT7rRLK4GvT4ijelxt+ihHhJkRApdkbFPfPs7IjmziW6devDz0trurpEFhYf/l2tGnvv/1T/ypXZPi2bPKMjWyeR5H0tksTUptcPp5FcqkGhiotjhUmxxVM0gYB9/RPiRMTm8POw9aVZ3Zdobj3EBra6Ww9VuWyK39lH5MKIaMvU3aw7/YYNREuWsF+jPh/Y/uZRCK/SGv0rjaYhNSZQZmqW0v652Xk0ssHP5G7l8808lP0vUlYCFQzAuti/rcGhCq4mmzoCtXzgOhpcbTynvlPbz+flcrpj1gFy1fXinbEh6s17tWpEERHN6LqIBlQeo1HT3rFVZ8mFEZHfmUcam1Md5JI3JEv2IllcDcqPc6eRPrcIkH8kRPb2RFOmEFlbly4odnasSAmFnxadkgJUsSK3vjo6RJUdo2nVguWUFVafciKa0MlDl4rMkRox/0VFsRMtWcJ+VXIjV3D09zNq/42V5Or+W2yGiQtPVJ5jXOsNbH5IptxHv0y5QMCaNuNKj1GUiCXUTejNOWg+4O5r6ib0prWj/uLUPyY0jnqbD6al/f7g/F608EMVgVLuNQC8B1DczSULQLSqZ15fmuz0HJhYGnPqm/Q+BfZVbDn1JSLcOfUQjTrXQ/VGVXmtKep1DACgemN+4xRI8iUIvPsGbd1bQN9QX6U5SkJEuLL3Jpxb1UTrPs00Mqc6a6GcfaCUvoAsEoz5SuiVO4mlv7eHrS2DpCTWo83EBIiPB9at++CdDbC+AwoSE4Hu3QGplNu1IyOBaI5/3TIZEPneEdMXzUYH9wsIflcFP3WaBN28eWjeLA8TJmjALb1iRdZlcN489mvFipyGefzshmbdG2HjxJ0I9Huj5iJY2vZtgYq1K+CPkX8hLTGD9/jdK+Ix8d462FM2tqABZO4ewJw5yHfzgFQuQPUXJ5FRvw2QkPCfsUI9ISzLmSM1jpuTRr02tdFrjCsu7byO8MAopf3LV7NHlwHtcO/sY+Rk5vJ+b1rKBi4CFQPgIcMwCxmGWQDgAYBQhmF+ZhimFIfdb4ucjFwYmxsp7UdESIlNg015K07zRr56j5iQOLR1b8F7TdFvWIFyrFWe91gACLoXDEl+ARp3qa/S+NJ4+zQMEUHRcPXpqLE5VYHkGaD08aCspYB+GzA2F8EYupfqRaivD1SuzH6vCK8RCAB5CSe7vDz2Mb0seeZfCc27HcZvG0Zh+IDjuLC/L+rXeYOsr+TBrKOjg9kHJ8Ousi0Wi1Yj6X2K2nMaGOlj3pGpyErLwSrfTZCX/EUrof+9CaiNd+iCHITDHEdbjkTi5GVoEnYCVRGOIIMfYJ4c9kkffkt7C6Ty8CIc9KsIhqaG2D7zAKf+LoPbQ5JfgDsnH3K+hpayhYtAvQNwBkVRJDgLIA6AaWH7psnJyIWxmaHSfllp2SgQF8DKgVsc0YPzTwBApd3G+7dxsHKwhLGZcuEsDf+bQRDoCFC/fR2VxpfGv4fuQKgvRAev1hqbky8kzwKleAHiW2BMZ4Gx2ApGwD4wJCYCDRt+iAuytQVSUoD3JTyJed4zNYpUKsTc5b+ge79dsDTPxMNLIoz29ftq6zG1NMHiMzOQnyPG6uGbNTKnU4PKGLPGB48vPce1/be5D4yKgsHF0yChEPuqH0QaOWP77KOoV1eGV68Ac2dHlLt3BtDVBU6fLnUba2VvgdS4NM6XNLcxw8B5Ijy+9Byv7gcr7V+nZU2Ur26PW8e+3v+Zlo/hkkli0efal1ikOkjyC6BnqDz7QU4Gu63nag4MD4xCucq2sOYoaMVJT8qAtYMF73EKYkLjUa6yrcoCVxIiwvMbgajbuiZMLLi9f01DJAdlzABk0WAsd4IxHla0a1KIU3w8oKcHjBrFBquamn7YOX1LXL/TBl29z0FHvyrMMQ4kefLV1lLZuSK8Z/yEZ1dfIi78v6YzVeg11hUVa5XH5T3/ch907hwgl4Pp3RtH/Coiw6w7dCkLkuRQ2Nqy/582jSsCffqwTxnnzv1nChMLY+Rm5vFa648jOkMgYPD4nxdK+zIMgwbtnRH6PILXNbSUHVwCdWsyDLONYZgrDMPcULQvsThNUCAugFBfqLRffjYbqGdoYsBp3piQOFSoqVq0fmZKFkytTFQaCwCJUckoV9lG5fEl+ffwXYS9jEQHrzYam5M3OdsA8XUwpjPB6LcEgKKUQxMmsOIEABIJsGwZm1Fhw4avt1xlvA62xoELuwGBPShtJKgg4KutxWVwewDgt+P5DAzDoFP/tgi4/RqJXNMElUjhlC1ks0lYIfDjfjVrsl/T/rtTMjA2QF4WP4EyNjdGjSZOePFvoPLOACo7OyI9MQMZyZm8rqOlbOBi4jsO4DmAeQCmF2vfBVKJFEI95QKVx0OgiAjv38ZxyutXGlmp2eoJVGQSbCtpRqDysvPw17S9qNWsGnqM6KyROflC4tug7HWAQU/AaAgAVpwmTGB3TsePA3Z2H86bANbUN3ToV1kuJxgGaNHKBozVXkBgCUodBpIqP6wvC8pVtkWjTnVxbf8thSeu2nQe0BZEhFtH73EbUCKFU3yKGXJ1qqKc8GVRCqfERADFUjiVpFrDykhPyuQsNgoadaqHNw9DOGWLqFyXdUKJCPpu/MD+p+EiUFIi2kJEj4joqaKV+co0gFwuR36OGEI95SkHxXkSAOCUDFWcJ0FORi7sKn4+z1dpSPIlSH6fCks71Ux8RIT0xAxYlVPdRFgcRSLdkSsHq5yoVh2IJKDMRYBuNTBmy4rMep6ebGqf+HjWGSIxkb3pC5U/a3wTEAEeHkBSij0Yyz0gykPAw11fbT2tejVD7LsEpKvgfVcaFao7wLGmA149eMttQCkpnNwGVoe9WfRnUzgVp5tvJxibG+H6AX47wZpNq0FaIENsaLzSvg5V7QAAye9TeV1DS9nwSYFiGMaKYRgrAOcZhhnHMIyD4rXC1795Xt1/i7zsfNRpqTy3rbSAPczQ5SBm2WnZAAATS/67oEeXniM/V4yWvbgnoi1OTGg8pAUy2ChJgskVvzOPYGVvoVGHi8/xn0zhufsBWTQyZHOwecuHMzU7O/Zcwt4eELP5XhERARQUfJFlaoTgYGDXLiAptRJOX+qNqg6nsX2bZgSCL1XqaX5nUNnZkVO+OwBApUp418AdQhTgskEf3DoQjSq1bJGdmoVLF/LRuUY0fg/5CYxUCri7l+pOr2egh+Y/NsaDC095ZUW3rchaGxKjlJsjzaxZvy+tie/b4HM7qKcAngDwAWvSu1f4muL1b567Jx9AqKeLFm7KxUDGQ6Cy0nIAAKYcHSqKc/OoHyxszTiX8SjJjYN3wDAM2ro3V2l8ccR5Yjy6+Ayt+zTjlEhXXRRmO4U5h+RpoOwtkKA92nZu85+4oePH2R3UV9jYqY1esY14p07A4lVDYGyUh359jn+V9VRydgTAhkdoioq1KiA2NB7SAm5BZtUvbUSGjRPq5j+DTXMnlDtzkP3BmEG4Fu6EJngGODl9NnisVa9mSE/KRPCjUM7rtC20dCRFK3e1N7YwAsMwyEzRZjj/FvjkXYmIqhKRU+HXks1J2cQMw+xiGCaRYZjAYq8tZBgmhmGYF4XtR029kdJ4efsV6revw8nbTfEh09FVfqNWHNQacXBfL4n/v0Fo0bMJdHRVu+s+veqPOq1qwqaC+juody8ikJ8jRrMejdWeiwsKs92rV+xNOzPpCkCZGDDqZ7x6xf7M05Ptu2kTEBcHVKv2bXrqfQ49PdaZw8QE+OMP9v3KmNooQCMY6179KmuydrCEgZE+4sM048kHAA7V7CEtkCEllqPrt709zAP8WNunXA7rR6ypLuXKbTByOfv6vXtAuXKfnKKJawMAQOBd7sHHVvYWYBiGk4u6jo4OjMwMkZOuDdb9FlC6XWAYpm8pL2cACCCiUsq6FbEHwEYA+0q8vpaIVnNeoRokx6SiemOlWgoAIDl7eMxlJ1EgYcWMy26rOBJxAdKTMuHg9OkPoDISo5LR2EUzAbophVH5dhpyuFCGwmynqKt0eH8oBnkY4syF2nB2BgYPZvspdlrAx1khvhckEnbXl53NNoUbtVC/OiC+9VXWxDAMjMyNkJulubISivhChYMRJ+ztgRMngOho6P95AFjzDJKxE4DZvpyyZJhZmcLASB9pCdxNpQKBAHoGQkjyJZz6C/WFnHeFWsoWLh//4QB2ABhY2LYD+BmAH8Mwgz81iIhuA/hqJ40yqQzpiZmwLs8tTknh3cQIlNc9kknZaFBdIT+BUjzBcV3Tf68rQ2pcGuwcNSMoafGsQFnZa8bhojRKnjkpRMraGqji+A6v3laDjY0A1asDs2ez4tWxI7tzAr5u4K06lLbrY3QcAXkSiL5O7SFDEwON1j0yKPR45SVQCipWhN7gAQAASRdXzimcAMDCzgxpifzqUrECxe0AU1eoA6lEK1DfAlwESg6gDhF5EJEHAGewZUpbAJipwjUnMAzzstAEqLnyryXITMkCEcHc1oxTf4X3LZfCfDIpe/cR6PB7vFc89VnYmfMapyA9KRNyOXHOdqEMxUGw4mBY05Q8c1KQlMSGxThVjkJYREXk5bFxmfr67M7KywuoXr1MllRmmJn996xMkfFC4UadmVNYzFL2OcND2WFgrI98TQqUEZsHUpwrVmm8ngHrkslVOBSYWpvyroIrNNDjJ1DS78yu/D8KlztsFSIqbrhOBFCTiFIB8PWp2gKgGoBGYNMlrflUR4ZhRjEM84RhmCdJSUk8L4Oi/HtcI88VusQlTkRQuMsino/3JhbsmhRZK/iiGJ9V6EWoLoqzuVyewY9cKXnmlJgIBAUBTZqwO4yEJBs4lk9GdjYrTmLxB5G6fLlMllQmMAyQmfnxrsne/r+VcP/aUngGIii7HevnKBAXcAqj4IpEzH78uQTClwYfz9ni5GXl8T7/lRVIOV9HJpV/lZALLf+Fi0DdYRjmAsMwPgzD+IDNxXebYRhjALz22USUQEQyIpKDNRV+0hWNiLYRUVMiampryy3DeHH0DPRgYmHMOXeXYuekOIv6HArTnuIDxhXrwkS0KbGqWT71DfVhbmPKyRuJCxbl2J0cH3s+HxTmPMUN2tmZDbxVCFHdBk5o2ewdnJ0/vCYWf3hY+F4o+UxjZwf4+7Nfi/8ODIUxEEtMwQi47eo1TV52PgyNuWVK4UJ+DrtzMjBWLaP+h9hDfgKXnpgJC1t+VghJfgHn60gLpNAVagXqW4CLQI0H6/DQCEBjsE4P44koh4g68bkYwzDFUy+4AyXznGgWKwcLJHMUA8XZE5cMzTqFf7x8BcrI1BAGxvpqZZa2cbRGYhT/HWVpWBYKFJ8EnHxR3KAVyV1lMtYU9vQpYGlbDQKk4uaNpCKRMjIq+8zjmsKshM4oHrqnTmXftwLF76DXj9HQN6rw5RZYgrysfJXFpDQU6cFUnVNSKFD6HHJlFo0RFyA7PYeXmZyIIM6TcBcoibToM67l68IlWSwR0QkimkpEUwq/V3oLYRjmMID7AGoxDPOeYZjhAH5nGCaAYZiXADoBmKr2O/gMNX5wQsDt10VnRp9DcZ4klykXKMUHUpXD4RpNnPDs2kuVU87UblYdAXdea+Swu0q9ShAIGLy89UrtufhgYcEKFvTaAxDA2nAH/v0XmDv3Q1Du90B+sf8CHR1WfO3tgWHD/tvX1joFlR3uAXqqBWirS05GDrLTc4p28ZpAkYdP1TPR9CT+Z6AK93KnBpWV9PxAdnoO5DI5p+sQEXKz8mFkyj+ERIvm4ZIsNothmMzCls8wjIxhGKVh1kTUn4gciEhIRI5EtJOIBhNRfSJqQES9iShOM2+jdNq4t0BmShZe3lZ+A1akQ+KyKzItzCCRk57De00dvdog6nUMIjgUUSuNTgPaIj9HjPvn1I+VtrQzR902teF35pHac32KxET2/KlkmYxOnYCktBqAYV8g9wDSU6KwejV7k/8eXMsZhnUn19P7EKtlb88GFpd0CgEA5B0BUADG6JOOr2VKZGGRzMp1HTU2Z3RwDOwq2ahsNkwqzOzAJ8zhwfknEOoLeYVaKEziiowSnyM3Kw8yqazMHIe08IPLDsqUiMwKmwEAD7DxTd88zbo3glBPF08u+yvtq1N4riTjIFAfnBX4C1Q7jxYQCBjcOn6f91gAqN+uDhiG4Z5iRgltfmqO8IAoxIRq/llBUSZDcf5U0mmgYUMgNX8yCLoIfroKYjFBXx94+ZLdTX2LQmVoyIosEVu6SCIBRowANm5kz50U7+14sYQRRGJQ7mFArx0YXW5xeZomqjCDRGVnDQrUm1hUrK26yTIxKgkGRvqcEycTER5ceIrGXerxEsWkwp2eLYfcmYoMEqZagfom4H0LIKIzAL5O2mueGBjpw9jcCLkcSjjr6bMCxSWYz8jMCEJ9IdLi+Z/dWJazgF1lW8SHq+ZqLBAIYGplgvREzeQKa+fRAjq6Oji0/JRG5iuOokyGvj5w7NgHp4Fjx9jX4uOBcRPL4VHgGPR0uYxZkw/gl1/YsadPszFQCpH6Vhwn8vLYs6devYAXL1hhmjWLLQKrOGvauPFDUViiAlD6FECeCMZ4xFdb94ubgTCxMIZ9VTvlnTmQlZaN8JeRqMbD1FaS8MAolK9uzym0AwCeXH6BuLAEtPNoxfM6bP7B8tWUB8inxLBn1mUZG6iFO1xMfH2LNRHDML/hQ3Xdbx5dPV1OQXeKoEOFZ9LnYBgG5auVQwyH7MilYWploparuF0lGyS951iHR+lctvCc1gtX9txEwJ3XGplTwcaNH5K9enmxO6rERPZ7sZj92caNQMsuoxER2xmLZ6zAjcvP0Lr1h13Xv/+yKYO+BccJhRPEu3dsIlhb2/9WJ7ezKy5OMrYIo/g6GLMFYPT53Vg1RW5WHvxOPUIHr9Yac5++e+ohCiRStFexArMkX4LAu2/QsGNdzmMe/v0MRqaG6DKwLa9r+d8MRKU6FTh5/kUVmkIr1fl6zixaPsBlB9WrWOsGIAtAn7JclCYR6guLUhN9DkUdKK4xQRVqOCAmRDWzmKmVCbJS1ROoxEjNCBQADJwvgpWDJU6uu6CxOYEP7tYKs1e9emxTiI/CFZthBKja6HdAUB7Hd06CoX4SdHWBLVvY1GzZmgn7UhlDQ3adMtmHJLBv335sxisJkRyUOR/I/xuM6QwwRgO/zGJL4e6ph8jPFaPrkA4am/PG4buoUMMBNZuoZrJ8df8tJPkFaNyF+1lSbnYeTK1MONV3UyAtkBYKIbfkzBFB0TAw0v9i6b+0fB4uZ1C+xdpIIlqmJAffNwXXHFwKrx2ugb2ONcsjNjQe+SpE0ZtZm6plorOvYof48ESN5QszMNJH4y71EHT3DSePRz4UdzNPSvrgLPHvvx+7YjMCM+hab0Q520zcPjsA9esEoXNnYHVh1sbiD/5f6mxKYXnKywNGjmRFVSJhSxUVN+OVhOSpoPSxQN4JwHj8VzXt5Wbl4cjKMyhf3R7OrWpqZM6ge8Hw/zcInfu35WyeK8nNI37Q0dVBgw7OnMfkZuZxrnit4NHF58jPEaNxZ24C9fbpO1Rydvwi2f21KIeLic+RYZjThZnJExiGOckwjOZOWssYQ1NDTgkyzWxMIRAwRfnplNHEtSEKJFI8ufyC95oqVLNHQmRSUSQ+X5xb10J+rhhvn7xTaXxptPdohfSkTJXej6ZghLWhY70Ltrb58DvvhdFD9iMlhcAwH7I02NiwThR2mjlKKZWOHVkRio8vqlAOB4cP50tnz35GnMQPQMm9AfFdMKbzwJhMKruFKkEul+N3nw2ICYnDlL9GqSwmxclKy8byAetgX9UOHj+7qTRHeEAkLu28jl5jXDlVGlCQlpBRFFzOBZlUhh2zD6JCDQe06t1Uaf/4iEQE+QWjdZ9mnK+hpWzh8piwG8A5AOUBVABwvvC17wIjM0NOqYV0dHRgaW/BOctDg/Z1YGplopKLtmOt8pDL5Ih7p9oZVqNOrN3++Q3NxTk369EI5jamuLJPs9m2S3Mz/6jEdwk2b2+KGi3O4tqdNtiwfAnO7RuNihViYGnJilJyMrBo0YcKu+rwKZFLTAS2b2d/fvv2h91S8fOlkhBJIc9aB0rzARhjMNbHwRgP0YgoqMqhZafgd+YxRq8agsad1c+AT0RYO+ovpMSmYc6hybzEpfgcW37eC2NzIwxe6MlrbFp8Oi/nhYs7riP6TQxGrhzEKbHzjUN3AbDl7LV8G3ARKFsi2k1E0sK2BwD/3ENfCWNzI87xStblrZAUw02gdIW6aNmrCe6fe4LMVH6JKxWuuRFBqrmKm9uYwalhZTz8+6nKAb8lEeoJ0al/W9w/+xixKgpnSRTi9Ck389JEqmNHIDvHCr0Hb8XkefPQofUjBN76EVNHrYVEnAFnZ2DBAlYs1H3rimszDGBcWHtSkQtQsbbPiRLA3nBJ7AdK7QfkbAYM+4KxPgVGyN10VRY8vvwC+xYeQ5dB7eA+WTNl155de4k7Jx9i6JJ+qN1ceZXq0vj3iB+eXw/AkIXeMLPi7spNREiNS4MlxwwSaQnp2LfgKOq3q8NpR5SfK8bl3TdQr21tOFRVvRyOFs3CRaCSGYYZxDCMTmEbBEAzyeC+ANYOlkiOSeV0I69SryJCnoZxSncEAH0n9YQ4V4w1w7fwEoqq9SvB1NIY98895jymJD2Gd8HrByG4c/KBynOUpO+UnjA0NcTcnss1UlH0+PGPvfFK5qYrGS9U3MOPYRhs3DkE9TpcxIUrnTB3yha8e9gZF45uxuVL2aXuvooj5JHe7eZNICwMH+UELLm2krCxTSdBKb1Bab6ALA6M+R8QmK8AI+BfaVmTEBF2zDoAh2rlMHXraI3t4p5e8YdQTxc/Teyh0vjwgEj8MWILnFvXgtuYrrzGxoTGQ5wnQaU63E4Xlg9cj7zsfEzYMFzp+ycirBu9FXFhiRgw14PXurSUMUT02QagElgTXxLYTOZnAFRWNk6TrUmTJqQqJ9ddIBdGRGmJ6Ur7Xtp5nVwYEUUERXGffy07/6n1f/Na19rRW8nNeCDlZuXyGqdAWiCl0Y1/oX6Oo1SeozQC7ryiHvr9aGr7+STOl6g938aNRAkJ/309IYH9Wcm+AJG+PvtVR4f9ChDVr/OaTu8eQ7K4GpQe2oiObptIg0SnycoytahPyWZrW/rrJduKFR/W5OzKuFewAAAgAElEQVTMvubpWfr7kUvjSJ71J8kSWpIsrgbJktxInnOc5PJ8tX9XmuLeucfkwojo8p5/NTrv2CbTaVqnBSqP3z3/MLnqeFJqgvLPYkmu7LtJLoyIwgIilfaViCXkwoho19xDnOZWfIYPLD3Be11auAPgCfG89392B8UwjA4AD2LTEtkSkR0R/UREkWWsmxqjfDW2Bk/sO+Wlruu1qwMAeHmbezyQ++Qf0bJXE2yfsR/Bj0M5j3MZ1A75uWLcPqHaDkhHVweTNo1Ackwq9sw/qtIcpVGvbR1M3zMBAXdeY9XQjWp79SnObkpSmuls/Hi2RIdYDNSsyebsU/A+vjZGz9yClj2O48jpnmjd7Bn2bpiB+IBW+Pf0AEwfvw0NnF9DIPiwXisroFu3j69RrRqbpcK6lKQCxQNtjx1jXyN5Dij/CuQZ8yBPcgUltQdlbwCE9cBY7gZjfQ6MkQgMo7kkrOogERdg/+LjsK9qp9GzlMyULIQ+j0CjTty84UojOjgWDtXsOZvpivP6/lsYmRpyik/KTGHjEmwclWeOePv0HbZO34c27s3Rf7Y773VpKVs+K1BEJMN3FPNUGlXrVwIABHIIQq1Q3R4Va5XHqXUXOHvYMQyD6bvGw8rBEr/2Wcn5hu7cuhacGlbG5im7Efo8nNOY/8zRqhZ6je2GU+v/xsGlJ1WaozQ69WuDEb8Nws2j97DQYxVkpZWHLSOOHQNWrGDPhVJSPjhWpKUBlpZAX++GkBouxdYTt+Ex4gSWrx8Lc9MsLJ21Fs+v90FqcFMEP/TFnys2oGI5P7yPjIaxUQ4AQq1abFzV0qWsCa9mode1qWmhJUGWBFuLRxjnewTyzOWQp/qCEluA0icA+RcBXScwpjPB2PwDgeV2MPptvqoTREkyU7Iwy3UJQp6GwXdJP94Vnz/Hnl/ZhyBVPdxkMhkC77xGtUZVeI/NTMnCv0f80LhLPU6BxorURtYcktgG3H4NuUyOCRuGa13Lv0WUbbEALAObe68dgB8Uje9WTZ2mjomPiGhcs5k0tukMTn0fX37BbveX8NvuX9p1g1wYEb0PieU8JiEqifpXGk2icsN5jSuOVCql34b8SS6MiI6sPKPSHJ9CYR49/Ntpjc77OYqb2Zyd2X+XfC0w8MO/FWbAihViaJDoLG1csYCC7vQiaWxN1gRX2LLD65Ekrj3Jkn4iWbI3yZLcSRzXk1JCXEiW0J5k8Y0+6i+Lb0CypN4ky1hG8vx7JJerb+4sS6KDY2hIjQnUw6A/3Th8V6NzP78RQC6MiLb8vEflOV7efkUujEiltW2ctJNcdTwpPJCb6f3KXtYcGPXmvdK+O+ccJFddL5LL5bzXpYUfUMHEx+URS5HLZHFxXcN3ko8PADp6tca2GfsRExqHCtUdPtu3qWtDtPdshUPLT6LzgLZwcOLm0eNYo9CUGBqv9BoK7Cra4LfL8zG13XzMcl2CtXeXwoZnOQQdHR38smscstNycHjFKbhP6qGxqqnuk35E0L1g7Jl/BI271EetptU0Mu/nKM2xAmC/V3gELlrEflUUOLS1BfIl5XHgRG8cP98bYjGwZnU2/G76w9wkDjbWqajkmIZhQ1Oho5MKkBgQmEJXRw8WBvoAowcwRmB0qgC6TmwT2INhvo8n6pe3X2Gh++/Q0dXB6hsL4NyqlsbmzsvOw5oRW1C+uj2GLumn8jx3Tj6AUF+IFj1/4DXufUgczm+5gh7Du6BK3YqcxkS9fg8dXR1On93M5CyY25h+UzthLcXgq2hfo6m7g0qITCRXXS+a0XURifPESvsnvU+m3maDaUS9qZQan8bpGmmJ6eTCiGj/4uO81/fmUQj1Mh3EeZdXGk+vvSyTXVRmahb1rzSafrL0obunH2p07k+hzLEiIYHI3v7Tuyw7O6JatT44SiicJRR9/5d4etWf3IwHkm+dyRT7Ll6jc2ckZ9LktnOpq8CTXt5+pfI8ir/vBe4reY1Ljk2l4XWnUG+zwZw/h0REk1rPoZENfubUd/aPy2hUw2m81qVFNaDCDoqLiU8fwAAAcwD8qmh8L6ROU1egiIj+2X2Dugo8afaPyzh5pz2/EcB+8GtP4vzhmNphPg2tNVElc8HxNefIhRFR9FvVTH1yuZwWeqyi7nreFPoiXKU5PkVsWDyNazaTXBgRbZq8iyTir2vuUnj7lRSchASimjWpyDvvUybC/xWRenDhCfUw6E8jG/zM6wbOhdiweBpaayL1MOhPN4/6qTxPRFAUuVsPpUFVx1LS+2TO4+IjEmlI9fHkZjKQXvwbyHlc0L035MKI6OS6C0r7yuVycrceSquHbeI8vxbVKSuB+gfAUQAzAExTNL4XUqdpQqCIiP7edpVcGBHN672C001WYTc/tPwUp/kVbupB997wXlvsu3iV3NWLk56UQV4OI2hEvamcdop8EOdLaNPkXeTCiGh885m8bjZlwad2WStWfFq8FCJV0r39e+T2ifvUXc+bxjWbSRkpmRqff1qnBfSTpQ8F3H2t8hyxYfHkXWEkeTmMoJjQOF5jxzefSX0shlDQ/WBe4xZ6rCJ3Kx9OoRdRb96TCyOiizuu8bqGFtUoK4EK5DupppumBIqI6Oymf8iFEdHvvtzuUl4OI2ilzwZOfXMyc8nNeCDN6LqI8nL4x8X41p5EY5tMVyv+6NGlZ+TCiGiRaBXlZuepPM+nuHPqAfUyHUTeFUbSg7+fanx+TcAn9up7o0BSQPsXHydXXS+a1GYuZadna/waCicDLruQTxH5+j0NqjqW3K18KOxlBK+xmalZ1FXgSfsWHuM17v75J9RV4Ek75xzk1P/YqrO84x61qE5ZCdQ2APX5TqzJpkmBIiJaNmAt9bEYwqnvItEq6uc4irPZ7sLWK9RV4EkTWsziHZB486gfuTAiWuK9hmQyGa+xxTm+5hy56njSyAY/835y5ULI8zAaXncKuTAi+m3In5SRrPkneC3/5Z1/BI1tMp1cGBEtG7BWowHaCi7uuEZdBZ70S+cFau3CxzaZTiK7YfTmcSjvsee2XCYXRsRr7N/br5GrjieNazaTMlOzlPYPC4ikHw3706zuS7QefF8IjQoUgEAALwG8AlAAILjw3wEAXvK9kDpN0wJ1bDV73sPlD1nhPh7yPIzz/H5nHlFPowE0uNp4ig6O4be2wqc6dVx6iVh3eXfroeRuPZQSopLUmqs0xPkS2j3/MHUTepOo3HC6dfyexq+hhUUiltDeBUeLfte3T9xXPigykmjDBqIlS9ivUcp3Cac3XCQXRkSzeyyl/FzVM2O8ffqOXBgRnd5wUaXxE1rOphH1p3ISDrlcTvsWHitaNxfRzsvJpxH1ppKn/XCNn91p+TSaFqg0AJU/1fheSJ2maYG6c+oB5ye01Pg0cmFEtH3mfl7XePXgLYnshpG79VBeuxi5XE4bJ+0sisVS5+kuOjiG3EwG0tQO88vEFEREFPoivOipfl6vFSo7eWgpnUC/NzSi/lRyYUS0YtB6Sk/K+Gz/XcvjKM/Ng0ggoOL5nOQCAYU08iCK++/fokwmo/2Lj5MLI6Jff1qplolZJpPRikHrqYdBf04PgCVRODkcX3OOU39FjNaKQeupQFKgtL9UKqWVPhvIhRHRkysveK9Pi+poWqCe8Z2srJqmBSohKolcdb1o6y97OfVfJFpFLoyIjv7Oz4U78vV7ctX1om0z+ImbVCqlFYPWkwsjoqX9/uD0wfsUV/ffIlddLxpUdSzvA2euSAukdGzVWeptNpi663nTlp/3UFZa2Qji/xdiQuOKbqT9K46me+ceKx2za3kchcKJFSShkMjDg2jOHMpz8yAJdIkASrdxIor/4I4uzpfQvF4reN3kP0VOZi4t9GA/K1w/W8W5eeweuRkPpP4VRysVYgXbZuyn7nrelJ2Rw2l9c92Wkwsjon2L+J1vaVEfTQvUewA/f6rxvZA6TdMCRcSeQ/U2G8zpRirOl9AS7zXkwoho2/R9vHY1c3ouowGVx/A+U5LL5XRg6QlyYUR0dtM/vMaWJOjeGxpUdSy56nrRgaUnSCqVqjXfp0iJS6XVwzdTV4Enedj60rktl0laUDbX+l9ELpfT06v+NK/3Cuoq8KTuet60Y/ZBzmdNeW4eRAA9wQ/UqUb0Ry72FRBNgQY/sB95Dw8iYnc7S/v9wZrj/ryo1m79fUgsjag3lVx1POnEH+d5zSWTyWj3vMPkwohoUpu5lBKXynmsb53JNMN1Mae+K4duIFddLzq35TLn+bVoDk0LVFxhzNOC0hrfC6nTykKgQp6FkQsjooPLTnLqL5VK6c/x24s8ALk+aV47cJtcGJFKgY5yuZymtp9PXuVHqu2Rl52eTUv7ryUXRkTTOi3gdRPgS8izMJraYT65MCIaUn08HVx2kvMT8f9HxPkSurD1SpHjichuGO2ef5iSYlK4TxIZSSQQkFwopE41oksNUk56FkWkq0skEJAsIqLo7/nYqrNqrf/RP8/pJ0sfcrceSk+v+vMaKy2Q0gL3leTCiGj18M28zIvRwTFF4soFn5oTaaHHKl7r06I5vikTH4BdYMtzBBZ7zQrAVQAhhV8tucxVFgJFxO5uugm9OT89yuVy2rfoGC839dysXPrJ0oe8yo9USaQC7r6mrgLWIy/iVTTv8cWRy+X0z+4b1NNoAHk5jKDnNwLUmk/Zte6cekDTOi0gF0ZEbiYDacesA1qhKkZmahYdXnGKvMqPJBdGRGObTKcre2+q5j23YUPR7igh4eNSI7a2xdzuPTwoFsb0c43hKpviivP26TvqJvSmUQ2nUWwY/0wWijIah5af4rXrinz9nnzrTKbuet6UEJmotH/021jqKvDk/ECqRfNoWqCe852sxPj2YBPLFheo3wHMKvx+FoCVXOYqK4HKTs+m+X1+IxdGRCuHbuB8Y/jddyO5GQ/k3P+dfwT51JxIrrpedGzVWd6mlEeXnpHIbhi5GQ+kSzuvq+0W+84/gnxrTyJXHTbWpKxMfgoigqJo2YC11FXgSW4mA+mvaXvJ/1bQV89I8bWIDYunjZN2kpvJQHJhRDSz2xJ6etVfvf/XJUvYj/OcOZ8UKLlcTue7jyM3/ES9Dbzo0q4bal1TnCem4XWnkHeFkSoFC0ulUhpaayKNajiNlwn89skH1NtsMInshnHOMrF62Cb60bC/1mvvK6JpgbLiO1kpc1QpIVDBABwKv3cAEMxlnrISKCLW/q1wUx3ffCYn0Xn0z3NyYUS8AlWzM3JokedqcmFEtMB9JW8ngqSYFPqly8KiGJicTPViYHKzcouyoP/SeQE/c5KKRLyKpmUD1pKrjie7qzIeSLO6L6EjK89Q8JNQ1c+rVHCp/pLk5eST/60gOrLyDM11W06uOuz50kqfDfTOP0IzFyncQeW5eRRlzChu4qtbK5tmu7EODDPQjhIWr1b7klt/2UsujIgeXXqm0niF+ZuT2zyx5sDtM/eTCyOiCS1mUWI0t2wm8RGJ1E3oTRsn7lRpnVo0Q5kE6qrTShGo9BI/T+MyT1kKlIJzm9kME35nHyntK86XUC/TQTS++UzOHxIi9gn25NoL5KrrRXPdlvN+epVKpXRg6Qly1fGkKe3macRT7p/dN8jNeCD1tfGlSzuvqxUgzJWstGzyO/OINk7cWXTuojh72TJ1N+fMA6q4VH8p5HI5vXkUQquHbyY344FF73FI9fG0bcZ+zaeKiowkuUBAEgipAqI/ykPYuOITaoMx1IXxomOC2iRnBGqJuLRASvsWHqOuAk9aO3qrSnO8vP2KTctVfyrnv7mdcw6SCyOitaO3cj6rSo1Po6kd5rOmwDKIB9TCnf8pgQIwCsATAE8qVapUFr+vj5CIJeTlMIJm/7iMU//bJ+5TL9NB1NfGlx5e5PcEeeKP8+TCiOj6wduqLJVuHvWj7nqs3T85Vn1nh4hX0TSpzdyicxB1MlerQnJsKl0/eJsWidhkty6MiMY2nUFnNl6ihMjEUoVcFZfqsiY9KYNuHL5Lv/tuJO8KI4t2iauHb6YHF56U+flbSCPWiy/Q4AdKehZFSTEpRbv2Lvrj6SRaUXEvPlWIfhtLE1rMKnJL55vSSyplxc1Vx5OG1JjAeQcpzpdQXxtf+vUn7hnR/W8FkVf5kfSjYX+6uv8Wr3Vq0Tzfg0B9cya+4igcILhmf4gOjqFRDaeRCyOiHbMOcDZRSaVSmtByNvW18aW0RH7pkBQ8vvyC3EwG0iCncSoXOyyOXC6n64fuUP9Ko8mFEdFirzUqHXqrS3pSBp1a/zeNbvxL0a6jj8UQmtJuHq0fu43ObblMz28EUHAHD0qDHj3i6FKtKaRSKSW9T6aAu6/p2oHbdGDpCVozYguNazaTugpY06W7lQ8t8V5Dl3Ze/7LxYHFxlG7jRPkQ0FFBbeot9KAfhZ50sK4HiXWE7O/DSXXRfnjxGbkZDyR3Kx+VMpynJqQXeXeuGLyel5n6xuG75MKI6PFlbsG1J9exlgqfmhM1Z0bVohaqCBTDjisbGIapAuACEdUr/PcqAClE9BvDMLPAnnPNUDZP06ZN6cmTJ2W2TgVpCekYWHksWvZuitkHJkGoJ1Q6RpwnxpYpe/D39mto2LEuVl6ZDx1d5WWpI4KiMfaH6Wjs0gBzD02Gsbkx7/W+eRSCuT1XQKAjwOwDk/CDSwPec5QkP1eME2vO4+jKM5DJ5PCY0hP9Zv2k0vrUJexlJIL83iA8IAphAZEID4hCbmbeR30IDArIFHJdU8gYQ+QWWMDApgKmTzRCncVjYCvPhcmrFzCoVe2zRemICBnJmUiMSkZSdAoSo5IRH56I8MAoZCRlIjs9B9npOf+5PgBYljOHY63y+KFLAzRxbYiaTZ04lSbXNHK5HFc3nMPu2QeQks+gGcVhPF6gAnIAgQBwdwc2bQLKcSvCqYCIcOPQXawZsQVV6jpi8dmZsKlgzWuOvOw8LOy7CoF332DKX6PRdUgHzmOz0rIxq9tSZCZnYm/oRqWl2ZNjUjCg0lg0cW2AeUd/hrGZEa+1aikbGIZ5SkRNeY0pK4FiGOYwgI4AbAAkgI2fOgPgGIBKAKIAeBJRqrK5vpRAAcD+xcexb+Ex1GxaDXMOTeZcHffspn+wceJOTNs5Dt19O3Eac27zZWyatBO2FW0wc99E1G9Xh/d6o97EYKH774gOjkWvsd0w5g8f6OkrF1ZlJMekYOecQ7i2/zbMrE0xcK4H3Ma6amRuVSEiJEUn4/2qv5CxcRsyGrVAbGcRtm/JhCwvE7rIh7FuCowFcZAVyD4aK9ARwNjcCCYWxhDq60IqkUJaIINUIkWBRIr8HDEKxAUfjdE31EOVehVhXd4KxhZGMDE3homFMSzLmcO+qh3KVbGDXSUbGBjpf8lfQ6kE3QvG5im78fbJO9RpWQMjfnZFg4QgIC0NsLQEevcGKnKrSFuc5JgUrB+3HQ/OP4Vzq5pYcm4WzKxNec0RHRyDRR6rEf0mBlO2jkaP4V04jw248xorBq1Halw6ZuwZj84D2ikds3zgOtw9+RDbA//g/PnVUvZ8UwKlSb6kQAHA3dMP8ceILZBJ5Zi8ZSSnDwURYXzzWchKycLu4D+hK9TldK1XD95i5eA/EReWiMG/emLwAk/e6xXnibF73hGcXHsBtVvUwK/Hp8HWkd8T7qcIfR6OHbMP4ukVf9hXscXQJf3RqX8bpU+xZcrSpcD8+cCcOUicvAz16gFJSeyPbG2BF8+lkGUnIHb+70g5fh7Z3dyQ3aQlcjJykZORC4m4AHr6QugKdaEr1IGuni70DfVg42gNu0o2Rc3M+tsuBS4RF+DRxWe4svcm7p97Auvylhi5cjA6D2ir9rqJCJf33MRfP+9BgbgAvkv7w33yj7x3hndOPsDqYZuhZyDE7ENT8EOX+pzGyaQy7F98HIeXn4K9UznMOTgZtZpVVzru8eUXmNNjGQb/6okhC714rVVL2aKKQJXpGZSm2pc6gypOQmQiTWk3j1wYEf2z+wanMQ/+fqpSFufcrFxaMZjNvXdm4yVVlktEbHxIL9NBJCo3nHdEvzKeXvWnMT+wSWFHNZxGZzZeUivjtVoocakuKlbowToNfPdFoEoQ8Sqa1o/dRu5WPuTCiMjTfjjtnn9YY+U3UuJSi/LzTe0wX6UEwBKxpMgNfULL2by8XWUyGc3+cVlRQDzXs6rs9Gwa5DSOfGtPUivhrZayAd+ak4Sm2tcQKCLWnXZ041/Iw9aX4iOUR6vL5XKa2mE+dRV40paf9/DKCCCVSml2j6VFcU6q1liKeBVNvnUmF324NVmrSSaT0fVDd4ocQ7zKj6QzGy99+YDbz7hUKwSrc40okhem9fnW4qJUJfhJKP3uu5FcdTypp9EAWjZgLT269Exj+Q5lMhmd/+sK9bEYQj30+9HJdRdUCjvITs8u8gpdP247L7GQSqX0u+9GNgXTam4ZzYnYjCuKfJMvbnIvEa/ly6EVqDIgOjiG+lgMoTE/TOfkUpubnUfrx24jF0ZEI+pN5VVHqkBSQPsWHaNuQm/ytB9Od08/VGnNeTn5tGPWAeom9Ka+Nr50ZuMltbJUl4b/rSCa2p71yBpYZSxd2nVD42XmP0dJl2oFCQmsOD1B2XjxfWmyM3Lo3JbLRSVNehoNoM1Tdqvs/fkpwl5G0KTWc4oCt6PevFdpnqy0bJrQYhZ1E3rTv0fu8horLZDS8oHrirKNc4kTlMlktHv+YXLV8aRBTuMo6N4bldatpezRClQZ8eACW0p6xaD1nINrH158Rl4OI6i7njfvujOhL8KL3KxXDFqvsukm7GUE/dKZzYXnW2cy3Tv3WKPVQ+VyOT2+/ILGNZtJLoyIuut504SWs2nzlN1086hfmSakVbhUE8AmQPXwIJo9m8jDg905qelS/TWJfRdP1w/doVW+m4qCfEc1nEZnN/2jcbf1jORM+mvaXuom9CYPW1+6su+myn8jGSmZNLbpDOqu580p4L04BZICWuzFVgw4vOIU53F/b7/Gpirz2cCp5IaWr4dWoMqQA0vY0heLPFdzNptlJGfSiHpTqbfZYLq44xqvD36BpKAooNGn5kSVzRZyuZz8zj6iobUmkgsjolndl/Cu8svlGo8vv6BtM/bT1Pbz6UfD/uTCiMhV14uW9l9Lz28ElE1Z7bg4VphKZJIggYB9/TsSJ7lcTk+uvKAZrouL4r/cTAbSmhFb6PXDtxr//UkLpHR6w0X6ydKHugo8afXwzWqZg59ceUGDqo6lHvr96MGFJ7zGRr15TxNbzSYXRkQn/jjPedyNw3fpJ0sfGt98prZs+3eAKgKl9eLjiFwux7Hfz2LvgqMwszbFrAOT0Lizco+khMgkrPLdBP+bQWjWvRGmbhvDy8Pu+Y0A/DHyL8SHJ6LnSBeMWDkIJhb8Y5KkBVKc23QZexcehSRPgg7erdFzZFfUa1tb455q0gIp3r2IwL+H7+LynpvITs9B+er26DGsM1yHdoSVvaVGr4foaODcObVdqr80MpkM4QFReHnrFa7svYl3LyJgZW+Bnyb+iOY/NkZlZ0fO3qB8eHn7FTZN2oWwl5Fo3KU+xq4diqr1Kqk0V05mLrZM2YPLe/6FY00H/LJrPOq2rsV5fMCd15jdfSn0DPUwadMIdPRuo3RMZkoW/hy/HbeO3UftFjUw5+BkODjxi+3S8uXRupl/AUJfhGP5gPVIT0jHztfrYWlnrnSMXC7Huc2XsXPWQegIdTDmj6HoNrQjZ2HIy8nH/oXHcHLtBViUs8DEjcPR1r2FSutPjU/DwaUnce3AbeRm5qFi7QroOdIFXYd04B3fwgVxnhh3Tj7ExR3XEHD7NQQ6AjRxbYiq9SqhQnV7lK9ujwo1HGBd3vLruq6XMRJxAVJiU5EUnYLgR6F4efsVAu++QXZ6DgCgSr2K8Jjihs4D25VJrBkR4fWDtzi94RJuHvGDXSUbjFnjg7Z9W6j8gBJ0Lxi/Df4TiZFJ8JreB4MXeELPQI/z+IigaExtNx+W5cyx6sZCWDsof3B5ePEZ/hixBZkpWRi8wAveM/pwCozX8vXRCtQXIvJVNMY0no4GHeti9oFJsLBVLlIAEPsuHquHbUbAnddo27cFpm4dzUsU3j59hzUjtiDMPxJt3Jtj3Dpf2FW0Uek95OXk49ax+7i4/SpePwiBUF8IV5+OGLzAk9ONQhXev43FpZ03cP/8E8SHJaBAIi36mVBfCOvylmjQwRkdvVqjcZf6ZbJ7+FIkRifj4d/PcPOoHyKDopGRnPXRzx1rOqBBe2fUb++MBh2cVf5/VAYR4daxe9i74Cjev42DgZE+RNN6wXvmTyoHGOfninFwyQkcW3UWdpVtMWv/JF67JgDwvxWE3wb9Cbmc8Oe9ZShX2VbpmINLT2LPr0dQpV5FzNw3EdUbVVVp/Vq+DlqB+oL8ve0qNk3aBWNzI0zcNALtRa04jZPL5Ti++jx2zzsMc1szTNsxFs17NOZ8XWmBFCfWnMeBJSfACBgMWegN90k91LqZh72MxLnNl/HPrhsQ6unCY6obPKf3LtMUMTKZDMnvUxETEoeY0HjEvYtHfGQSnl7xR25mHkytTNCmTzM06FAXNZtVg2MNh2/6STkvJx8vb73C0yv+eHrVH1GvYwAAlZ0dUa9tHdg6WsO6ghVsKlihav1KZfYQUJyge8HY+stevH4Qgqr1K6HvFDe0F7WEkamhynM+uvQcGybsQHx4Irr7dsKYtUN5/Z3kZOZix8wDuLD1KspXK4cFJ6fDqUFlpeMu7riOtaP+QpeB7fDzjrFfNaOJFtXQCtQXJjwwCqt8NyHkaRg6eLXChA3DOe+mQp+HY6XPBkQERqPnSBeMXjMEhibcbxxx4QnYNGkXHv79DE4NKmPylpFwbsXvKbYkMaFx2D3vMG4duw8LWzMMnCdCz9EunHISagqJuABPr/jj1rF7eHL5RdHOQ6gvRGVnR1StX7dNQtQAACAASURBVAmONcvDws4cFrZmMFc0G1MYmhhofNcll8uRl52PnPScokwUKXHpSIhIRHxEEhIiE5EYmYyYkDgUSKTQMxCiQQdnNOnaEE1cG6JK3YpfLBuFJF+CQL9gPL3ij2fXXiL0eTisHCzhu6Qfuvp0UCs/4OuHIdjz6xE8u/oSFWtXwOQtI9GwQ11ec/jfCsLKIRuQEpMK98k9MXRJP067uIcXn+HXPivRpGsDLD4787veWf9/RitQXwFpgRRHfz+LA4uPw8zGDL9dnsf5wFmSL8HeX4/i+JrzsK9qh2k7x/L60BMR/M48wubJu5H0PgVdh3TA0MXesKuk3FzyOYIfh2L7zAPwvxkEy3LmaNDBGe08WqGdR4svek4kLZAiIjAa4QFRCA+IRHhgFMIDopASm/bJMTq6OtA30oO+oR70jfQh1NOFQEcAHV0d6OgKINARgBEIQHI5irxY5QS5XM7m5RNLUSAugFQihURcgLysfHzqM2JqaYxyVexQrootHGs4oHGX+qjfrg6vcxh1keRLcHnPTfideYSA268gyS+ArlAHzq1roWXPJnAb05XXg09JIl9FY8esg3hw4SnMbUzhPdMdfSZ057WDkcvlOLPhErZN3w8HJzvM2DsRdVrU4DTW/1YQ5vVcgYq1y2PNzUVqvRctXxetQH1FQl+EY3a3pcjJyMWAuR7oN+snzk96AXdeY5XvJsSFJaDH8C4Y+fsgmFqacL52XnYeDiw+gTMbL4FhGPSf3Reev/RS60ZJRHj8zwtcO3ALAbdfIzkmFVXrV4LPIm+07tPsq+aoE+eJkZGUibTETGQkFbbkTIhzJcjPFUOSJ4E4V4z8PDFkBTLIpDLIZXLIpHL2ezlBIGAAhoFAwIBhGDACBkJ9IYR6uhDq6UJXTxdCfSGMTA1hbGEMY3OjomZZzhz2VWy/SoZ3BZJ8CS7uuI4jv51GSmwaKtaugKau7K6tQfs6at/Is9NzcHDpSZz+8yIMTQzg+UtvuE/qwXveiKBorB29Fa/uBaOlWxPM2j+R0+8tLzsPu+YextmN/8ChWjmsvb1Y896fWr4oWoH6yqQlZmDzlN24ecQPTg0qY9rOsajZpBqnsfm5YuxbcBQn116Aua0Zxv85HO1FLXkJQUJkErb+shd3Tj6Eg1M5jPnDB616NVVbTGQyGW4du4/9i47h/ds4VGtUBW36NEeDDs6o07LGF90x/H+npDDVb1cHQxZ6oWHHuhr5f352LQBX992E3+lHKBBL0X1YZwxfMQDmNma813lw6UkcW3UWRmZGGLPGBy6D23NaY2JUEmZ1W4ro4Fj0Gd8dw5YPUOvcTMu3gVagvhHunXuM9WO3Iz0hHaJpveGzyIvzTTzkWRjWjvoLIc/C0dKtCSZuGsHbw+vZ9QBsmrQTUa9j0LhLfXQf1hlt3ZurLSQyqQzXD97BmQ0XEfo8AkQEob4QtVtUR4P2znBqUBk1fnDSxqRoiMyULAT6vcH74FhEB8ciJiQOEYFRyErL0agwvQ+Jw+VdN3DtwG0kx6TC1NIYnfq3xY8jXVCtYRXe8z38+yk2T9mN2HcJ6DqkA0avHsJZ4KLexGCW6xLkZuVh4anpaNSpHu/ra/k20QrUN0R2eg62Td+PSzuvo2LtCpi6dTTnek8yqQyn1l/EvgVHAQboN8sdop/doG/I3S1YWiDF2Y3/4Piac0iJTYN9FVuM+G0Q2nu20oh5ListG4F33+DlrVd4efsVQp+FQS5n/5ZaujWBx1Q3jdw8/7+hiFe6uP06bh71gzhPAgCwsDOHY00HONYsj07926Jx53pq/27TEtKxb+ExXNxxHQDQrHsjuPp0RMteTVXykkuITMLmKbtx7+xjVKxdARM2DOdeXkMmw9mN/2D3vMMwMDbAb5fnqSSOWr5dtAL1DfL48gv8OXYb4iOSeGeCiAtPwNZpe+F35jFsK1pj+PKBvGsxyeVyPL3ijx2zDiLsZSTqtqmFMWt8ULs5t0NqruRl5yEmJB73zz3Buc3/ID0pE9UbV0X3YZ3h3KomqtavpPW++gyZqVm4tv82Lu24joigaBgY66Nz/7bo6tMRlZ0deZ1JKkOcJ8bJtX/j6MozEOdJ0GuMK/rNdlfZ9b1AUoCTa//GwSUnAAAD54vgMbUnZ+/Pd/4RWDvqLwQ/fodmPRpjypaRajv6aPn20ArUN8pHmSDszDFu/TBe50v+t4KwddpehDwLR61m1TBmjQ/qteVXfVcmk+Hy7pvYM/8w0hIyULF2BTRoVwcNOrDBopoqcAiwN8DrB+/i5NrzRfFAegZCVP/BCXWaV0f1H5xgWc4c5jZmMLMxhbmNKa/d4fcIEUGcJ0F2WjYSo1MQH5aA2HcJiAtPQFxYAt48DEWBuAC1m1dHjxEu6OjdWuPnLpkpWbh//gn2LjiKpOgUtO7TDCNXDoJjzfIqzZefK8a1/bdxcu15vH8bhzY/NcPYtb6cgm4Bdpd/eMVpHFx6EqaWxhi7zhed+rXR7rr/R9EK1DdOyLMwrB29FSFPw9Ci5w8Y/+cwOFTldl4jl8tx/eAd7JpzCMkxqWjVuylGrx7Cu6R1blYe/t52DS/+DUDg3TfIzcwDAFStXwkD54nQtm9zteJlikNESIhMwpuHIXjzMASvH4Ui9FkYJPkF/+mrb6iHSs6OaOveAm37tkCl2hU0soavBREh7GUkbh69hzsnHyAxMumjzBkKbCpYwcGpXNFuk0vQKl/8bwZh9/zDCPILBgDUaOKE0auH8I5jUiCTynBh61XsXXAUWanZqN64KnwWeaOlWxPOcwQ/eYd1o7ci9Hk4ugxsh3HrfMsk1ZaWbwetQH0HyKQynNlwCXt+PQKSEwbNF8HjZzfO5pD8XDFOrfsbR347DalECtG0Xug/210lt2KZTIbwl2yy0gtbryA6OBYVajjAc1ovdB3SoUy886QFUsSExiMzOQuZKVnISM5CZnIm0pMy8ep+MF4/CAEAVKpTAW3dW8C5VU04NazyzefqK5AUIORZOILuvkGg3xsE+b1BRnIWBDoCNO5SH9UbVYGJpQlMLIxh62gFe6dysK9iW6Y7x5BnYdg19xCeXPaHraM1eo7uivrt6qBe29oq/y4D777Ghok7EeYfiUad62HIAi9eCYdzMnOxZ94RnNv8DyzszDFhw3C082ip0lq0fF9oBeo7IjE6GVum7sHdUw9R2dkRkzaPRIP2zpzHp8SlYcesA7i2/zZsKlhh5O+D1TKPyP6vvTuPj7K6Fz/++SaZ7HtC9oQskLCEVRYxgIBIEQVF0Iq1tbXWtj+3an+3t9ttvW297e1m7y1ee63WfaGCCKiIgCDKIvsWICzZ933PZJac+8czGaImLElIZsJ5v17zmsnkmWfO4Qnzneec83y/djs71+5l1e/XcXr/OcKiQ1j6yM3c/N35BIcP3Dfb6pIadr6zj0/f3kP2rtNY242zLV9/H+JGxpCYEUdMchTBEUEEhQcSFB5IcEQQgaEBzgt0vX29Mfma8PY1XfbZYEdHBzarHZvFhs1io63ZTGtTG21NbbQ2mWlraqO+qpGaklqqSmqoLqmlpqSWstwK55lh3IgYMmeOIjNrFNcunnJJCYX7Q2VhFcd35pC98xTZu3I4dzifoPBAVvzkdpb8vwW9CoadZ4I71+5l5zt7yT1awLDECL73p3uZtezSh6ltVhtbXv2EF//tDWrL6ln8/QXc9+SKQb2WTBtYOkC5oT3vHmDlw89TUVDF/K/P5v7f3XNZk9XZu3J4+pHnOXMwj+Sxicy7exZLH13U60SgSikObzvOP/+wjv2bjgAQHhtG/MgYUscNZ8mDCwds+K2loYUzB/OMJdanSyk6XUrx6TIq8quw2+yXtA8RwcPTyCDh6dmZSUJQHV2Lop0PTB32jkvar4eHEBYT6syxF5McxdjrMhiblTFgF5SaW9v54B8fcWjrMc4czKWqqAYAv0BfRl87kknzxrH4+wt6FQSa61v45x/Wse3NnZTnVSIiZM4cxcyl01n0wPxL/vtSSrF91S5e+PkblOVWkD4ljYdXfrvfF+lork8HKDfVmR16zVPvYvIx8Y0n7uTWhxZe8qo3u93O5pc+5sOXt3Nsx0mGJURw33/czby7Z/ZpWOzs4Tz2vn+IkrNllJwp4+zBPCxmK9ffOYMF984ZtIzjSinMLWaaaptprG2mqbaZ5roWzK3tWM1WLGYr7W0WLG0W7DY7dnsHHV1vHR14eHggAoiRScLDQ/Dy9sLLZGSRMB574hvgg3+QH35BfvgH+eIX5EdIZBBh0aGDlry2pbGVDf+ziTVPvUt9VSMJ6bGkTUwmM2s0Y7MySB0/vNdta65vYe1/vc+av7xLa2MbUxZOZObS6cxYcvlnggUni1n58PMc/ug4aROTnfNUehHE1UkHKDdXcraMpx99gX0bD5GcmcjDK++/rGE/MIrR/e2HL3HmQC6jpo3gvv+4m8yZo/ol4Wt9VQNr/vwu65/ZZGQcDwtgxq1Tmb3sWibNH68zTF8hSinK8yvJPVLAiV05vP/cVprrW5i6cCIrfnL7JV9fdyHN9S28/Zf3ePu/3qOloZWspdP4+i/uuOxrkZRSnD6Qy6YXtrHxuS34Bvhy35MrWPTA/H5bfKO5Jx2ghgClFLvW7eOZx16koqCKuSuyWP744ktOmQTGcNWWV3bwj5+9Tk1pHSYfEyMmJZMxZQQZ00aQddvUPuVqs7RbObj5KDtW72bXun20NLTiH+xH8thEwmJCCY8ONe5jQomMD2fivMwhv4y8P7Q0tnJo6zHqKxtprGmiprSWvGOF5B4toKWhFTCGFq+7bRorfrL0sv4mutPe1s6eDQfI3pXDhy9tp6WhlZm3T+eef1t+2YGpobqRjc9tZfMrH1N4sgSTj4kb7p7Jfb/92oDNwWmuTQeoIcTc2s6bv13LW39aj8Vs5YZ7ZnH/7+4hMi78kvfR1mJm73sHObX3LDn7z3Jmfy7m1nbCokNY9thibn5gfq/Kx3dltVg5tPU4u97ZS2luBXXl9dSW19NYc75AX1BYAPO/fj2LvjOf5LGuX4p9INltdnL2nWXzyx+z5dUdmFvanb/zD/YjOTOJtAnJpE0YTuqEZJIzE/EL8O3be9rtbH55By//chVVxTWYvL2Yfss1vQpMbS1mNj63lVf+/S2a61vInDmKG79+PbPvmNHnvy1taHGbACUi+UATYAdsF2v01RigOrU0trLqP99h9Z824Gny5Gs/X87tP7i5V8Npdrud7J05vPrr1Rzaegy/QF9u+vYNLH10ETHJUf3abqvFSl1FA4UnS9j04jY+XbMHm9XOmOsyWPCN6xl5TSqJo+L7/GHrjqqKa9i/6TD7Nh3m0JZjNNe3YPIxMXdFFgu/NY/YVGOVYn8v829rMXPgwyO89ItV5GcXkTE1jW/9ZgXjrx9z2UPAlYVVrHt6Exuf20JTXQuTbhjH95/65iWXmtGuPu4WoKYopaovZfurOUB1Kj1Xzt9++BK71+8nbkQMi+6fz4Q5Yxg5ObVXE+JnD+Wx+s8b2L5qF0opZi+/lqzbphGTEkVMShQhkcH9OpldX9XA5pd38P7fN1N8usz5fFRSJEmj40nMiCcsOpTAsAACQwMIDAsgKCwA3wBfTD5G6QtvX5OzJIanyXPQ5jSUUtistvPL0a12rO1WzC3ttDWbMbeYMTebaW0yU1tWR3VJLdWlxnL0qqJqyvOrAIiIC2PqVyYy5SsTmXzj+H5PZ1R6tpyTn50lZ+8ZTu07S/7xIjrsHSSkx/Kt36y4rGXiYAwdn9iVw9q/buTTtz8Dpci6fTq3P7KIsVmXfi2UdnXSAeoqsO+DQzz/09c5dzgfgLDoEL75q7v4yn1ze/WBXVVcwzv//T7vPrvZmVUCICE9lq/9fDlzV2T1ayBQSlF4qoTCE8UUniyh8JRxX5xTirm1/eI76CIxI470KWmkX5NG6oThxI2IISI2rF9X17U0tlJ4soSCE8UUniii4GQxOXvPOiv9XgpvXxOR8eHOku8jJ6cx5StXptpufnYRr/1mNTve2u1M3hsUFkDGtBFkTB3B6OkjuWbBhMtafamU4pM1e3jux69RlltBYGgAi+6/gSUPLrzktEaa5k4BKg+oAxTwv0qpZ7vZ5gHgAYCkpKRrCgoKBraRLq62vI5jO07yzsqNHP/0FKnjh3PPL+5gylcm9GrYrPMbd3l+FWXnKtj04jZyjxYQkxLFnDuvY/YdMxgxKeWKfktub2unub6V5rpm57251YLFbHFWurWYrcZ9m4W844Xk7Dv7uQq7IkJYdIgzGASGBeDja1TX9fX3wcffB08vD+y2DkcRQ6OgobXdSlNdC011zTTWNBlL2KubqC2vd+7b5GMiMSOOtEnJxKfFYvI5vyzd5OOFb4AvvgE++AWevw+LCSUoLPCKn13kHSvglV+v5pPVe5xDtxlT00ifOoL4ETG9fv9Te8/wtx++RPbOHFLHD2fZY7cwa3o8fls2QX09hIbCrbdCop5b1C7MnQJUnFKqVESigM3Aw0qpHT1tr8+geqaUYsfqPfz9R69QUVCFt6+JSTeMY8biKUy/5ZrLWlTRVUdHBzvX7uW9v2/h0NZjdNg7iEuLZvbyGWQtNYYCg8IDXWLpcHVpLQXZRVTkV1FdUktVcQ01pbVUl9TS2thmVNdtbae91dJt+fbOa6ACwwIJjjifnSIoLJD4ETEkjUlg+JgEYlKiXKK/LY2t5B8vIu9YIXnHCjh3JJ/snTn4B/lx28M3seyxW/qU166prpmC7CLe/d/NbH3tE+Ms/dcrKKsYzdf2PILv+2uh4/wFzcrDg3PjlzJi40qIiemPLmpDkNsEqM81QOQJoFkp9ceettEB6uJsVhtHd5xkz4b97N6wn/K8SgBSxw9n0g3j+Oq/3tbr5b4N1Y3sfGcfO1bvdgYrMD7YgyOCCBkWTMiwYFIyk1j8/QUMH+Oa36aVUlgtNuxWG55ennh6eRqZJVx47qTgZDHrn/6AghPFNNU201Dd+LkzRv8gP5IzE5k8fzxLH13Uq7RUSimjTMozm8g7VkhtmbF/k4+J5Y/fwl0/XsqqlQ3M/mkWaeSiTCZkyRLIyMB8NAfPd9dhwkZDZCohx3dBtC5YqX2ZWwQoEQkAPJRSTY7Hm4FfKaU+6Ok1OkBdHqUUBSeK2bNhP4e2HefwR8fx8fPmjh8uYdnjt/SpjENjTROHPjpOXXk99VUN1Fc20lDdSF1FPaf352JttzJxXia3PXQT1y6+xiXOONxNdWkt+zcdYcdbu9j3wWFMPiYypqY5cw/Gj4glZVwSKeOSiB4+rNcBtr2tnR1v7WH9M5s49dkZYlOjyZw1iuQxiQwfm0j6lDTnlxrz4uX4vruGA0zmX0au481PEwCYOxcaThSzyfdWxpoPwrJlsHp1v/1baEOHuwSoVGCt40cv4HWl1JMXeo0OUH1TlFPCCz9/g0/WfEZoVAhf+9kypi2aRHTysH4NIJ0Xa65/ZhNVRTVEDx/G9XfMIHF0AokZcSRmxOmSCl+glKK5voWzh/LY/8Fh9n94hNyjxnxrZHw4Nz9wI7d870ZCh/Xfxa752UW89+xmtryyg+b6FhLSY1n22GJu+va87heYFBZCSgrK05MbknPZdiaBYY61EVVVMGYMfPxqEZHTUo2hv/x8PSelfYlbBKje0AGqf5z87AzP/+Q1jmzPBsDk7UX8yFgSMuJISI8jfmQss5ZNJyDYv0/vY7fZ2bV+P+ufNhZw2KznE7sGRwQRlxZNYFgAfkF+BAT54R/sj3+wH96+3s4FBwEh/ky6YVyv59AGi81qI3tnDoWnSrBZbM6cgO2t7bS3WWhvs9BYYyy+qC2ro6683lknysvkSeas0UxZMJGpCyeSMi6pz8OPlYVV7N5wgOriGmrK6ig8WUzOvnOYvL2YuWw6N3/nRsZfP+bC77NyJTz8MCxbRuX/rCYz0whMAMOGwfHjEBUFLF8Oa9YY2z/4YJ/arQ09vQlQugb3VWT09JH8YesvOX0gl7yjBRTllFKUU0JBdhG71+/HbrPz7P9/iWWPLea2R27qdaDy9PJk1u3TmXX7dOw2O2V5lRTnlFKUU0pxTgnlBVU017dSWVhNa2ObcWtq63ZfSaPjGTdrDGNmpDNmRjrxI2Ndas7IYrZQcqaMU3vPsnfjIQ5uOfq55fqdTD4moxSInzfBEYGEx4aRkB5LeHSoI1t8LBPmjOlTCqquinJKWPvfG9n43BZsVjteJk/CY8OITIjggT98gwX3Xk9IZPCl7azesZIxI+PC26WnG/d1dRfeTtMukQ5QVxkRIWNKGhlTPp/HzWa1cfpALm/89m1e/MWbrHlqA7f/4BaWPnJTn2r2eHp5kjAyloSRsResuNrR0YHNYsNqMZaT15bVs3/TYQ59dIztq3by3rObAQgKD2Tk5BQiEyKIjAt3Xl8UERtGQIg/fkF+zmXefcnkbrfZaW+zGMvNa5ocN+NxRX4lhadKKDpVQnlepfN6o2EJEcy58zqmLZpMxtQ0vH2NgOTtaxqQYovl+ZVsX7WL7at2cu5wPp5eniy8bx53/ssSYlKiet+G0FAAzEdzmDvXOHvqOsQ3dy5s2wZRp08bT4YNTLkRbejTQ3zal5w+cI5Xf72a3ev3IyJEJw8jIT2WhPQ4EjPiiR8ZQ1B4IP7B/oREBvVrBoTudHR0UHiyhBO7T3Nydw55xwupKa2jtqzOGRy64xvgg8nHhJfJ07lqz9PkiYeHGK9Tynlvt3dgabM4S3VcqC6UycdEQnosSaPjSRqVQOKoeFLHJ5E0OuGKnt1ZzBZnnsOGKqMKcWN1E/WVDRz5ONtZjXj0tSOZ89UsZt8xo3+GSAsLUSkp2Do8SSGXkDEJbNtm/GruXDhxAuaNLGJLXiqi56C0Hug5KK1fnTmYy+71+41CgTmlFJ8u/VwyUzDOyLKWTmP544sZe91FhoD6md1up66igZqSWmrL651DheYuVXCtFht22/kLcu02oyiheIhxRiEYtaE8BB9f42zH21GV18fPm4DQAIIjjOuiQiKDCI4IIjgyaEBXJ1YUVLFu5Ubef26rM6t5Vx6eHqSMS2LOV7O4/s4ZxKb0/zLvs5OWM+LwGrJ9JxO96x0iJxkBqLISVsws4vdnbuMa9Co+rWc6QGlXlFKK6pJaSs+V09LQSmtjG3nHCp0JQ+NGxDB90WSmLZrM+Nmj+z3Z6dXEbrdzYtdp1v71fXa+/RmIMGvZdKYsmEhwZBAhkca1ZyGRRrn7Kz4vV15Ow7gsQqpzwcvLyB6Rng6nT6PWrUNsNkhNhV36OiitezpAaYOircXM1lc/Ydf6fRzZdhyL2Yqvvw+T5o9jzIwMImLDCI0OIdxRI2qgz0Bckd1up63JTEtDKy0NrVQV15B/vIj87ELyjxdReLIYi9lKUFgAi74znyUPLiQqMXJwG11eDg89BGs/n0kCDw9YuhSefloHJ61HOkBpg87c2s6R7dl89t5B9r5/kIqCqm63c65qcwyp+fh542nyxOTtRdqEZGYsmcqkG9yv0KHVYiV7Zw77PjhM9q5TmFvanYs/7FY7VovNOQTZnWEJESRnJpI8NpG0iSlcd9tU1ytJUlQE69cbq/XCwmDJEj3npF2UDlCay2lrbqO2vN5ZyLC2vJ7G6qbz1we1WbC0G49tVmPl3Kk9Z2htasPb10S6Y8Vh6oRk0iYmkzQ6vl/K1/cHpRQN1Y2U51Vy9lA++z44xKGtx2hrNuNl8iRj2giCI4LwMnni5W0klfXy8sIv0Bf/YD8CQvydt/DYMJLHJuoif9qQpa+D0lyOX6Af8SP8iB8Re8mvsVqsHNl+goObj3Dk4xNs+NuHWMxWwLiYNTYthvCYUEKjggmJDCY0KoTQYcH4BvoaGcX9vfEN8MXH3xuTtxcenh6fz73nIagOhVKOW4exms/abnXcbM7HrY1tNNe3GNnV61toqW+hpqyOstwKyvMqaWs2O9sdlRTJvLtnMe2mSUycl9mnlFKapukzKM0N2G12is+UkXukgNwj+RSfKTOWWVc2UF/ZQFNdy4C0w8PTg8DQAMJjQolJjSImOYrY1GhiUqJIGhXvchcRa5or0WdQ2pDk6eXJ8NEJDB+dwNy7sr70e6vFSmNNM+YWM+2tFsyt7Zhb2mlvbcdmtdPhXGLegd1u1IHy8BAQwcNDEBHEQ4xqvZ3Vex2P/YP9CQz1JyA0AF9/Hx2ANG0A6QCluT2Tt4mIWJ29QNOGmiuff0XTNE3TekEHKE3TNM0l6QClaZqmuSQdoDRN0zSXpAOUpmma5pJ0gNI0TdNckg5QmqZpmkvSAUrTNE1zSTpAaZqmaS5JByhN0zTNJekApWmaprkkHaA0TdM0lzQoAUpEFopIjoicFZEfD0YbNE3TNNc24AFKRDyBp4GbgDHAChEZM9Dt0DRN01zbYJxBTQPOKqVylVIW4E3g1kFoh6ZpmubCBqMeVDxQ1OXnYmD6FzcSkQeABxw/tovI8QFo20CKBKoHuxH9TPfJPQy1Pg21/sDQ7FPG5b5gMAJUdyVJv1R3Xin1LPAsgIjsv9xSwa5O98k96D65vqHWHxi6fbrc1wzGEF8xkNjl5wSgdBDaoWmaprmwwQhQ+4CRIpIiIt7AXcD6QWiHpmma5sIGfIhPKWUTkYeATYAn8A+lVPZFXvbslW/ZgNN9cg+6T65vqPUHdJ8AEKW+NP2jaZqmaYNOZ5LQNE3TXJIOUJqmaZpLcukANRRTIolIvogcE5HDvVl26SpE5B8iUtn1+jQRCReRzSJyxnEfNphtvBw99OcJESlxHKvDIrJoMNt4uUQkUUS2ichJEckWkUcdz7vzceqpT257rETEV0T2isgRR5/+3fF8ioh85jhOqxyLytzCBfr0oojkdTlOEy+4H1edg3KkRDoN3IixNH0fsEIpdWJQG9ZHIpIPTFFKYyuyZAAABiJJREFUufVFeCIyG2gGXlZKZTqe+z1Qq5T6neMLRZhS6l8Hs52Xqof+PAE0K6X+OJht6y0RiQVilVIHRSQIOADcBnwT9z1OPfXpTtz0WImIAAFKqWYRMQGfAo8CjwNvK6XeFJG/AUeUUs8MZlsv1QX69D3gXaXU6kvZjyufQemUSC5MKbUDqP3C07cCLzkev4TxweEWeuiPW1NKlSmlDjoeNwEnMTK5uPNx6qlPbksZmh0/mhw3BcwDOj/I3e049dSny+LKAaq7lEhu/YfooIAPReSAI53TUBKtlCoD44MEiBrk9vSHh0TkqGMI0G2Gwr5IRJKBScBnDJHj9IU+gRsfKxHxFJHDQCWwGTgH1CulbI5N3O7z74t9Ukp1HqcnHcfpKRHxudA+XDlAXVJKJDeUpZSajJHN/UHH0JLmmp4B0oCJQBnwp8FtTu+ISCCwBviBUqpxsNvTH7rpk1sfK6WUXSk1ESOzzjRgdHebDWyr+uaLfRKRTOAnwChgKhAOXHBo2ZUD1JBMiaSUKnXcVwJrMf4Yh4oKxxxB51xB5SC3p0+UUhWO/2QdwN9xw2PlGP9fA7ymlHrb8bRbH6fu+jQUjhWAUqoe2A5cC4SKSGcyBbf9/OvSp4WOIVqllGoHXuAix8mVA9SQS4kkIgGOiV1EJABYAAylLO3rgXsdj+8F1g1iW/qs80PcYSludqwcE9XPAyeVUn/u8iu3PU499cmdj5WIDBORUMdjP2A+xtzaNmC5YzN3O07d9elUly9GgjGndsHj5LKr+AAcS0X/wvmUSE8OcpP6RERSMc6awEgz9bq79klE3gDmYJQFqAB+CbwD/BNIAgqBO5RSbrHwoIf+zMEYMlJAPvDdzrkbdyAiM4FPgGNAh+Ppn2LM2bjrceqpTytw02MlIuMxFkF4Ypw0/FMp9SvH58WbGENhh4B7HGceLu8CffoIGIYxhXMY+F6XxRRf3o8rByhN0zTt6uXKQ3yapmnaVUwHKE3TNM0l6QClaZqmuSQdoDRN0zSXpAOUpmma5pJ0gNI0BxHpcblrN9vOEZHrrmR7LvL+PxCRb/TDft4UkZH90SZN6286QGla78wBBiVAObIL3Ae83g+7ewb4UT/sR9P6nQ5QmnYBIrLYUZPnkIhsEZFoR5LS7wGPOWrazHJcOb9GRPY5blmO1z/hSF66XURyReSRLvv+hiNp5hEReUVEghy1ckyO3weLUT/M9IVmzQMOdiYSdez7KRHZIUadpKki8rYYdYR+49gmQETec7zXcRH5qmNfnwDzu6TU0TSXof8oNe3CPgWuVUopEbkf+JFS6oeO+jzO+kMi8jrwlFLqUxFJAjZxPuHnKGAuEATkiMgzQDrwM4zkwdUiEq6UahKR7cDNGFk57gLWKKWsX2hTFkYdpK4sSqnZYhTwWwdcg1E+5JyIPIVxxleqlLrZ0d4QAKVUh4icBSZ0s09NG1Q6QGnahSUAqxw5xLyBvB62mw+MMVKMARDcmXcReM+RoqZdRCqBaBy1fjoLV3ZJNfQcxpDbO8C3gO90816xGLnauurMU3kMyO5M8yMiuRhJl48BfxSR/8QoGPdJl9dWAnHoAKW5GD3Ep2kX9ldgpVJqHPBdwLeH7TyAGUqpiY5bvKOgHkDX/Gl2jC+GQjflE5RSO4FkEbke8FRKdZdMs62bdnS+R8cX3q8D8FJKncY4qzoG/FZEftFlG1/HPjXNpegApWkXFgKUOB7f2+X5Jowhu04fAg91/iAiEy+y363AnSIS4dg+vMvvXgbewChH0J2TwIiLtrwLEYkDWpVSrwJ/BCZ3+XU6kH05+9O0gaADlKad5y8ixV1ujwNPAG+JyCdAdZdtNwBLOxdJAI8AUxyLHk5gLKLokVIqG3gS+FhEjgBdy2G8BoRhBKnubAQut9DlOGCvGBVOfwZ0Lp6IBtrcJfO3dnXR2cw1zcWIyHLgVqXU1y+wzVqMBRtn+vhejwGNSqnn+7IfTbsS9CIJTXMhIvJX4CZg0UU2/THGYok+BSigHnilj/vQtCtCn0FpmqZpLknPQWmapmkuSQcoTdM0zSXpAKVpmqa5JB2gNE3TNJekA5SmaZrmkv4Prcfje/owoMsAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "pval = utils.multivariateGaussian(Xval, mu, sigma2)\n", "\n", @@ -385,9 +467,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 0 / 20 | \n", + " Collaborative Filtering Gradient | 0 / 30 | \n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 30 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[2] = selectThreshold\n", "grader.grade()" @@ -404,9 +508,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best epsilon found using cross-validation: 1.38e-18\n", + "Best F1 on Cross Validation Set : 0.615385\n", + "\n", + " (you should see a value epsilon of about 1.38e-18)\n", + " (you should see a Best F1 value of 0.615385)\n", + "\n", + "# Outliers found: 117\n" + ] + } + ], "source": [ "# Loads the second dataset. You should now have the\n", "# variables X, Xval, yval in your environment\n", @@ -452,9 +570,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average rating for movie 1 (Toy Story): 3.878319 / 5\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Load data\n", "data = loadmat(os.path.join('Data', 'ex8_movies.mat'))\n", @@ -531,7 +669,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -610,7 +748,23 @@ " Theta_grad = np.zeros(Theta.shape)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " J = (1 / 2) * np.sum(np.square((X.dot(Theta.T) - Y) * R)) + (lambda_ / 2) * np.sum(np.square(X)) + \\\n", + " (lambda_ / 2) * np.sum(np.square(Theta))\n", + " \n", + " for i in range(R.shape[0]):\n", + " \n", + " idx = np.where(R[i, :] == 1)[0]\n", + " Theta_temp = Theta[idx, :]\n", + " Y_temp = Y[i, idx]\n", + " X_grad[i, :] = np.dot(np.dot(X[i, :], Theta_temp.T) - Y_temp, Theta_temp) + lambda_ * X[i, :]\n", + " \n", + " for j in range(R.shape[1]):\n", + " \n", + " idx = np.where(R[:, j] == 1)[0]\n", + " X_temp = X[idx, :]\n", + " Y_temp = Y[idx, j]\n", + " Theta_grad[j, :] = np.dot(np.dot(X_temp, Theta[j, :]) - Y_temp, X_temp) + lambda_ * Theta[j, :]\n", + " \n", " \n", " \n", " # =============================================================\n", @@ -628,9 +782,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at loaded parameters: 22.22 \n", + "(this value should be about 22.22)\n" + ] + } + ], "source": [ "# Load pre-trained weights (X, Theta, num_users, num_movies, num_features)\n", "data = loadmat(os.path.join('Data', 'ex8_movieParams.mat'))\n", @@ -663,9 +826,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 0 / 30 | \n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 50 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[3] = cofiCostFunc\n", "grader.grade()" @@ -724,9 +909,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.46660851 0.46660851]\n", + " [-1.11522931 -1.11522931]\n", + " [-2.93605559 -2.93605559]\n", + " [-0.54310538 -0.54310538]\n", + " [-7.09376845 -7.09376845]\n", + " [-8.86613311 -8.86613311]\n", + " [ 0.08789442 0.08789442]\n", + " [-0.13815802 -0.13815802]\n", + " [ 0.01326013 0.01326013]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [-0.75793651 -0.75793651]\n", + " [ 0.50622184 0.50622184]\n", + " [ 1.22902557 1.22902557]\n", + " [-0.32099776 -0.32099776]\n", + " [ 0.22352602 0.22352602]\n", + " [ 0.76455842 0.76455842]\n", + " [-1.25906737 -1.25906737]\n", + " [ 0.74762981 0.74762981]\n", + " [ 2.57050722 2.57050722]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [-1.93903986 -1.93903986]\n", + " [ 1.25368512 1.25368512]\n", + " [ 3.37886598 3.37886598]]\n", + "\n", + "The above two columns you get should be very similar.(Left-Your Numerical Gradient, Right-Analytical Gradient)\n", + "If your cost function implementation is correct, then the relative difference will be small (less than 1e-9).\n", + "\n", + "Relative Difference: 1.01587e-12\n" + ] + } + ], "source": [ "# Check gradients by running checkcostFunction\n", "utils.checkCostFunction(cofiCostFunc)" @@ -741,9 +965,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 30 / 30 | Nice work!\n", + " Regularized Cost | 0 / 10 | \n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 80 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[4] = cofiCostFunc\n", "grader.grade()" @@ -768,9 +1014,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at loaded parameters (lambda = 1.5): 31.34\n", + " (this value should be about 31.34)\n" + ] + } + ], "source": [ "# Evaluate cost function\n", "J, _ = cofiCostFunc(np.concatenate([X.ravel(), Theta.ravel()]),\n", @@ -789,9 +1044,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 30 / 30 | Nice work!\n", + " Regularized Cost | 10 / 10 | Nice work!\n", + " Regularized Gradient | 0 / 10 | \n", + " --------------------------------\n", + " | 90 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[5] = cofiCostFunc\n", "grader.grade()" @@ -821,9 +1098,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-2.10413092 -2.10413092]\n", + " [ 4.88435471 4.88435471]\n", + " [-5.14676934 -5.14676934]\n", + " [ 2.10807904 2.10807904]\n", + " [-0.69618007 -0.69618007]\n", + " [ 6.10717258 6.10717258]\n", + " [-0.98375746 -0.98375746]\n", + " [-1.62145317 -1.62145317]\n", + " [-3.64294105 -3.64294105]\n", + " [ 1.86940783 1.86940783]\n", + " [ 0.97383575 0.97383575]\n", + " [ 3.67349576 3.67349576]\n", + " [-0.81407458 -0.81407458]\n", + " [ 3.7746785 3.7746785 ]\n", + " [ 2.48789327 2.48789327]\n", + " [-1.81152765 -1.81152765]\n", + " [-1.36691463 -1.36691463]\n", + " [-3.72595908 -3.72595908]\n", + " [ 0.38573866 0.38573866]\n", + " [ 0.97208917 0.97208917]\n", + " [ 0.24478964 0.24478964]\n", + " [ 2.57555678 2.57555678]\n", + " [-4.32021577 -4.32021577]\n", + " [ 5.33165654 5.33165654]\n", + " [-1.51004106 -1.51004106]\n", + " [-1.77104474 -1.77104474]\n", + " [ 0.50360741 0.50360741]]\n", + "\n", + "The above two columns you get should be very similar.(Left-Your Numerical Gradient, Right-Analytical Gradient)\n", + "If your cost function implementation is correct, then the relative difference will be small (less than 1e-9).\n", + "\n", + "Relative Difference: 2.53851e-12\n" + ] + } + ], "source": [ "# Check gradients by running checkCostFunction\n", "utils.checkCostFunction(cofiCostFunc, 1.5)" @@ -838,9 +1154,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise anomaly-detection-and-recommender-systems\n", + "\n", + "Use token from last successful submission (tanmayss2109@gmail.com)? (Y/n): y\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Estimate Gaussian Parameters | 15 / 15 | Nice work!\n", + " Select Threshold | 15 / 15 | Nice work!\n", + " Collaborative Filtering Cost | 20 / 20 | Nice work!\n", + " Collaborative Filtering Gradient | 30 / 30 | Nice work!\n", + " Regularized Cost | 10 / 10 | Nice work!\n", + " Regularized Gradient | 10 / 10 | Nice work!\n", + " --------------------------------\n", + " | 100 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[6] = cofiCostFunc\n", "grader.grade()" @@ -857,9 +1195,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New user ratings:\n", + "-----------------\n", + "Rated 4 stars: Toy Story (1995)\n", + "Rated 3 stars: Twelve Monkeys (1995)\n", + "Rated 5 stars: Usual Suspects, The (1995)\n", + "Rated 4 stars: Outbreak (1995)\n", + "Rated 5 stars: Shawshank Redemption, The (1994)\n", + "Rated 3 stars: While You Were Sleeping (1995)\n", + "Rated 5 stars: Forrest Gump (1994)\n", + "Rated 2 stars: Silence of the Lambs, The (1991)\n", + "Rated 4 stars: Alien (1979)\n", + "Rated 5 stars: Die Hard 2 (1990)\n", + "Rated 5 stars: Sphere (1998)\n" + ] + } + ], "source": [ "# Before we will train the collaborative filtering model, we will first\n", "# add ratings that correspond to a new user that we just observed. This\n", @@ -915,9 +1273,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Recommender system learning completed.\n" + ] + } + ], "source": [ "# Now, you will train the collaborative filtering model on a movie rating \n", "# dataset of 1682 movies and 943 users\n", @@ -978,9 +1344,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Top recommendations for you:\n", + "----------------------------\n", + "Predicting rating 5.0 for movie Aiqing wansui (1994)\n", + "Predicting rating 5.0 for movie Great Day in Harlem, A (1994)\n", + "Predicting rating 5.0 for movie Someone Else's America (1995)\n", + "Predicting rating 5.0 for movie Entertaining Angels: The Dorothy Day Story (1996)\n", + "Predicting rating 5.0 for movie Santa with Muscles (1996)\n", + "Predicting rating 5.0 for movie They Made Me a Criminal (1939)\n", + "Predicting rating 5.0 for movie Star Kid (1997)\n", + "Predicting rating 5.0 for movie Marlene Dietrich: Shadow and Light (1996)\n", + "Predicting rating 5.0 for movie Saint of Fort Washington, The (1993)\n", + "Predicting rating 5.0 for movie Prefontaine (1997)\n", + "\n", + "Original ratings provided:\n", + "--------------------------\n", + "Rated 4 for Toy Story (1995)\n", + "Rated 3 for Twelve Monkeys (1995)\n", + "Rated 5 for Usual Suspects, The (1995)\n", + "Rated 4 for Outbreak (1995)\n", + "Rated 5 for Shawshank Redemption, The (1994)\n", + "Rated 3 for While You Were Sleeping (1995)\n", + "Rated 5 for Forrest Gump (1994)\n", + "Rated 2 for Silence of the Lambs, The (1991)\n", + "Rated 4 for Alien (1979)\n", + "Rated 5 for Die Hard 2 (1990)\n", + "Rated 5 for Sphere (1998)\n" + ] + } + ], "source": [ "p = np.dot(X, Theta.T)\n", "my_predictions = p[:, 0] + Ymean\n", @@ -1001,6 +1400,13 @@ " if my_ratings[i] > 0:\n", " print('Rated %d for %s' % (my_ratings[i], movieList[i]))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1019,7 +1425,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/Phase 3 - 2020 (Summer)/Week 8/Exercise8/token.pkl b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/token.pkl new file mode 100644 index 000000000..120de049e Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 8/Exercise8/token.pkl differ diff --git a/Phase 3 - 2020 (Summer)/Week 8/__pycache__/submission.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week 8/__pycache__/submission.cpython-37.pyc new file mode 100644 index 000000000..51a42da4c Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week 8/__pycache__/submission.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/Week_3.ipynb b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/Week_3.ipynb new file mode 100644 index 000000000..cd2adce89 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/Week_3.ipynb @@ -0,0 +1,1145 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Programming Exercise 2: Logistic Regression\n", + "\n", + "## Introduction\n", + "\n", + "In this exercise, you will implement logistic regression and apply it to two different datasets. Before starting on the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.\n", + "\n", + "All the information you need for solving this assignment is in this notebook, and all the code you will be implementing will take place within this notebook. The assignment can be promptly submitted to the coursera grader directly from this notebook (code and instructions are included below).\n", + "\n", + "Before we begin with the exercises, we need to import all libraries required for this programming exercise. Throughout the course, we will be using [`numpy`](http://www.numpy.org/) for all arrays and matrix operations, and [`matplotlib`](https://matplotlib.org/) for plotting. In this assignment, we will also use [`scipy`](https://docs.scipy.org/doc/scipy/reference/), which contains scientific and numerical computation functions and tools. \n", + "\n", + "You can find instructions on how to install required libraries in the README file in the [github repository](https://github.com/dibgerge/ml-coursera-python-assignments)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# used for manipulating directory paths\n", + "import os\n", + "\n", + "# Scientific and vector computation for python\n", + "import numpy as np\n", + "\n", + "# Plotting library\n", + "from matplotlib import pyplot as plt\n", + "\n", + "# Optimization module in scipy\n", + "from scipy import optimize\n", + "\n", + "# library written for this exercise providing additional functions for assignment submission, and others\n", + "import utils\n", + "\n", + "# define the submission/grader object for this exercise\n", + "#grader = utils.Grader()\n", + "\n", + "# tells matplotlib to embed plots within the notebook\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Submission and Grading\n", + "\n", + "\n", + "After completing each part of the assignment, be sure to submit your solutions to the grader. The following is a breakdown of how each part of this exercise is scored.\n", + "\n", + "\n", + "| Section | Part | Submission function | Points \n", + "| :- |:- | :- | :-:\n", + "| 1 | [Sigmoid Function](#section1) | [`sigmoid`](#sigmoid) | 5 \n", + "| 2 | [Compute cost for logistic regression](#section2) | [`costFunction`](#costFunction) | 30 \n", + "| 3 | [Gradient for logistic regression](#section2) | [`costFunction`](#costFunction) | 30 \n", + "| 4 | [Predict Function](#section4) | [`predict`](#predict) | 5 \n", + "| 5 | [Compute cost for regularized LR](#section5) | [`costFunctionReg`](#costFunctionReg) | 15 \n", + "| 6 | [Gradient for regularized LR](#section5) | [`costFunctionReg`](#costFunctionReg) | 15 \n", + "| | Total Points | | 100 \n", + "\n", + "\n", + "\n", + "You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "
\n", + "At the end of each section in this notebook, we have a cell which contains code for submitting the solutions thus far to the grader. Execute the cell to see your score up to the current section. For all your work to be submitted properly, you must execute those cells at least once. They must also be re-executed everytime the submitted function is updated.\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 Logistic Regression\n", + "\n", + "In this part of the exercise, you will build a logistic regression model to predict whether a student gets admitted into a university. Suppose that you are the administrator of a university department and\n", + "you want to determine each applicant’s chance of admission based on their results on two exams. You have historical data from previous applicants that you can use as a training set for logistic regression. For each training example, you have the applicant’s scores on two exams and the admissions\n", + "decision. Your task is to build a classification model that estimates an applicant’s probability of admission based the scores from those two exams. \n", + "\n", + "The following cell will load the data and corresponding labels:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Load data\n", + "# The first two columns contains the exam scores and the third column\n", + "# contains the label.\n", + "data = np.loadtxt(os.path.join('data1.txt'), delimiter=',')\n", + "X, y = data[:, 0:2], data[:, 2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Visualizing the data\n", + "\n", + "Before starting to implement any learning algorithm, it is always good to visualize the data if possible. We display the data on a 2-dimensional plot by calling the function `plotData`. You will now complete the code in `plotData` so that it displays a figure where the axes are the two exam scores, and the positive and negative examples are shown with different markers.\n", + "\n", + "To help you get more familiar with plotting, we have left `plotData` empty so you can try to implement it yourself. However, this is an optional (ungraded) exercise. We also provide our implementation below so you can\n", + "copy it or refer to it. If you choose to copy our example, make sure you learn\n", + "what each of its commands is doing by consulting the `matplotlib` and `numpy` documentation.\n", + "\n", + "```python\n", + "# Find Indices of Positive and Negative Examples\n", + "pos = y == 1\n", + "neg = y == 0\n", + "\n", + "# Plot Examples\n", + "pyplot.plot(X[pos, 0], X[pos, 1], 'k*', lw=2, ms=10)\n", + "pyplot.plot(X[neg, 0], X[neg, 1], 'ko', mfc='y', ms=8, mec='k', mew=1)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def plotData(X, y):\n", + " \"\"\"\n", + " Plots the data points X and y into a new figure. Plots the data \n", + " points with * for the positive examples and o for the negative examples.\n", + " \n", + " Parameters\n", + " ----------\n", + " X : array_like\n", + " An Mx2 matrix representing the dataset. \n", + " \n", + " y : array_like\n", + " Label values for the dataset. A vector of size (M, ).\n", + " \n", + " Instructions\n", + " ------------\n", + " Plot the positive and negative examples on a 2D plot, using the\n", + " option 'k*' for the positive examples and 'ko' for the negative examples. \n", + " \"\"\"\n", + " # Create New Figure\n", + " fig = plt.figure()\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " pos = y == 1\n", + " neg = y == 0\n", + " \n", + " plt.plot(X[pos,0], X[pos,1], 'k*', lw=2, ms=10)\n", + " plt.plot(X[neg,0], X[neg,1], 'ko', mfc='y', ms=8, mec='k', mew=1)\n", + " \n", + " # ============================================================" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we call the implemented function to display the loaded data:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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W+NqK1VdoKplqlpWUlJyzP4DBw6YQvARIkL//v0zOnLzg0tlqpiLc3v8YMJKl3TiPIJk7nR9pCAiPwAuAZqBCHA88BvgAuDjqtosImOB21X1gs7OFW+i+fXXX+eMM85ISabGxkYuv/xyFi9eTHFxcUrHGsmRzveSCD9N2hrpEzPBPPigNyasdEl1ktyPIwtfjRRU9d9VdZCqDgamAWtU9WJgLfA1522XAY+7JZNfi4sb8fHTpK2RPslmF/AbqU6S+yGCPBX8FKdwC9FJ578B/YFFbl04FsaeyXD23/zmN4gIf/nLX+Luv/zyy3nssceSPt/27dv52teiOvOFF17gySefbN23bt261iIkqTB48GB2796d8nFe42YksmF0JNVOSdDMnZ4qBVVdp6qTndd/V9VPq+pQVb1IVQ9m67puVHWqq6vj85//PEuXLs2IzAMHDmxVIplSCkElyPZoI/ik2ikJmvutn0YKrnHbbbe1y50eK6aRqaIaTU1NPP300yxatKhVKagqN954I2eeeSZf+tKX2NmmIMPgwYP5/ve/z9ixYykrK+P555/nggsu4NRTT+WnP/0pAFu2bOHss8/m0KFDzJ49m0ceeYRRo0Zx11138dOf/pR7772XUaNG8dRTT7Fr1y6++tWvcu6553Luuefy9NNPA7Bnzx6+8IUvMHr0aL71rW8R1BQnNmlreEmqnZLAmTsTlWQLQotXjvO1117rtAxdjGwUF49RW1ur//qv/6qqqmPHjtWNGzfqr371K504caI2NzfrO++8o8XFxfroo4+qquopp5yi999/v6qqzpgxQ4cPH64ffvih7ty5U0tKSlRVdfPmzXrWWWepqupDDz2kN9xwQ+v1qqurdd68ea3r06dP16eeekpVVd966y09/fTTVVX129/+ttbU1Kiq6hNPPKGA7tq1K+3PmQrJfi+GEQRipURLS0s0HA5paWlJwjKunZX2nTAhojU1s12Xn07KcXoSvOYHYkU1LrroonbukpkoqlFXV8eMGTMAmDZtGnV1dRw+fJjp06cTDocZOHAgEyZMaHfMl7/8ZQCGDx9OU1MTffr0oU+fPkQikZTzua9atYrXXnutdf3DDz9k3759bNiwgV//+tcAfOlLX+KEE05I+zMaRj4TmyRPJpaiquomli37FXPnxo9R8Zu5M2+VArQvqlFQUMDBgwe7XVRj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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plotData(X, y)\n", + "# add axes labels\n", + "plt.xlabel('Exam 1 score')\n", + "plt.ylabel('Exam 2 score')\n", + "plt.legend(['Admitted', 'Not admitted'])\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1.2 Implementation\n", + "\n", + "#### 1.2.1 Warmup exercise: sigmoid function\n", + "\n", + "Before you start with the actual cost function, recall that the logistic regression hypothesis is defined as:\n", + "\n", + "$$ h_\\theta(x) = g(\\theta^T x)$$\n", + "\n", + "where function $g$ is the sigmoid function. The sigmoid function is defined as: \n", + "\n", + "$$g(z) = \\frac{1}{1+e^{-z}}$$.\n", + "\n", + "Your first step is to implement this function `sigmoid` so it can be\n", + "called by the rest of your program. When you are finished, try testing a few\n", + "values by calling `sigmoid(x)` in a new cell. For large positive values of `x`, the sigmoid should be close to 1, while for large negative values, the sigmoid should be close to 0. Evaluating `sigmoid(0)` should give you exactly 0.5. Your code should also work with vectors and matrices. **For a matrix, your function should perform the sigmoid function on every element.**\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def sigmoid(z):\n", + " \"\"\"\n", + " Compute sigmoid function given the input z.\n", + " \n", + " Parameters\n", + " ----------\n", + " z : array_like\n", + " The input to the sigmoid function. This can be a 1-D vector \n", + " or a 2-D matrix. \n", + " \n", + " Returns\n", + " -------\n", + " g : array_like\n", + " The computed sigmoid function. g has the same shape as z, since\n", + " the sigmoid is computed element-wise on z.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the sigmoid of each value of z (z can be a matrix, vector or scalar).\n", + " \"\"\"\n", + " # convert input to a numpy array\n", + " z = np.array(z)\n", + " \n", + " # You need to return the following variables correctly \n", + " g = np.zeros(z.shape)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + "\n", + " g = 1/(1+np.exp(-z))\n", + "\n", + " # =============================================================\n", + " return g" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following cell evaluates the sigmoid function at `z=0`. You should get a value of 0.5. You can also try different values for `z` to experiment with the sigmoid function." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "g( 0 ) = 0.5\n" + ] + } + ], + "source": [ + "# Test the implementation of sigmoid function here\n", + "z = 0\n", + "g = sigmoid(z)\n", + "\n", + "print('g(', z, ') = ', g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After completing a part of the exercise, you can submit your solutions for grading by first adding the function you modified to the submission object, and then sending your function to Coursera for grading. \n", + "\n", + "The submission script will prompt you for your login e-mail and submission token. You can obtain a submission token from the web page for the assignment. You are allowed to submit your solutions multiple times, and we will take only the highest score into consideration.\n", + "\n", + "Execute the following cell to grade your solution to the first part of this exercise.\n", + "\n", + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# appends the implemented function in part 1 to the grader object\n", + "#grader[1] = sigmoid\n", + "\n", + "# send the added functions to coursera grader for getting a grade on this part\n", + "#grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 1.2.2 Cost function and gradient\n", + "\n", + "Now you will implement the cost function and gradient for logistic regression. Before proceeding we add the intercept term to X. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup the data matrix appropriately, and add ones for the intercept term\n", + "m, n = X.shape\n", + "\n", + "# Add intercept term to X\n", + "X = np.concatenate([np.ones((m, 1)), X], axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, complete the code for the function `costFunction` to return the cost and gradient. Recall that the cost function in logistic regression is\n", + "\n", + "$$ J(\\theta) = \\frac{1}{m} \\sum_{i=1}^{m} \\left[ -y^{(i)} \\log\\left(h_\\theta\\left( x^{(i)} \\right) \\right) - \\left( 1 - y^{(i)}\\right) \\log \\left( 1 - h_\\theta\\left( x^{(i)} \\right) \\right) \\right]$$\n", + "\n", + "and the gradient of the cost is a vector of the same length as $\\theta$ where the $j^{th}$\n", + "element (for $j = 0, 1, \\cdots , n$) is defined as follows:\n", + "\n", + "$$ \\frac{\\partial J(\\theta)}{\\partial \\theta_j} = \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta \\left( x^{(i)} \\right) - y^{(i)} \\right) x_j^{(i)} $$\n", + "\n", + "Note that while this gradient looks identical to the linear regression gradient, the formula is actually different because linear and logistic regression have different definitions of $h_\\theta(x)$.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def net_input(theta, x):\n", + " # Computes the weighted sum of inputs\n", + " return np.dot(x, theta)\n", + "\n", + "def probability(theta, x):\n", + " # Returns the probability after passing through sigmoid\n", + " return sigmoid(net_input(theta, x))\n", + "\n", + "\n", + "\n", + "def costFunction(theta, X, y):\n", + " \"\"\"\n", + " Compute cost and gradient for logistic regression. \n", + " \n", + " Parameters\n", + " ----------\n", + " theta : array_like\n", + " The parameters for logistic regression. This a vector\n", + " of shape (n+1, ).\n", + " \n", + " X : array_like\n", + " The input dataset of shape (m x n+1) where m is the total number\n", + " of data points and n is the number of features. We assume the \n", + " intercept has already been added to the input.\n", + " \n", + " y : arra_like\n", + " Labels for the input. This is a vector of shape (m, ).\n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The computed value for the cost function. \n", + " \n", + " grad : array_like\n", + " A vector of shape (n+1, ) which is the gradient of the cost\n", + " function with respect to theta, at the current values of theta.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost of a particular choice of theta. You should set J to \n", + " the cost. Compute the partial derivatives and set grad to the partial\n", + " derivatives of the cost w.r.t. each parameter in theta.\n", + " \"\"\"\n", + " # Initialize some useful values\n", + " m = y.size # number of training examples\n", + "\n", + " # You need to return the following variables correctly \n", + " J = 0\n", + " grad = np.zeros(theta.shape)\n", + " \n", + " J = -(1 / m) * np.sum(y * np.log(probability(theta, X)) + (1 - y) * np.log(1 - probability(theta, X)))\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " \n", + " \n", + " #ef J(self, theta, x, y):\n", + " # Computes the cost function for all the training samples\n", + " #m = x.shape[0]\n", + " \n", + "\n", + "\n", + " # def gradient(self, theta, x, y):\n", + " # Computes the gradient of the cost function at the point theta\n", + " # = x.shape[0]\n", + " grad = (1 / m) * np.dot(X.T, sigmoid(net_input(theta, X)) - y)\n", + " # return grad\n", + " \n", + " # =============================================================\n", + " return J, grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you are done call your `costFunction` using two test cases for $\\theta$ by executing the next cell." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at initial theta (zeros): 0.693\n", + "Expected cost (approx): 0.693\n", + "\n", + "Gradient at initial theta (zeros):\n", + "\t[-0.1000, -12.0092, -11.2628]\n", + "Expected gradients (approx):\n", + "\t[-0.1000, -12.0092, -11.2628]\n", + "\n", + "Cost at test theta: 0.218\n", + "Expected cost (approx): 0.218\n", + "\n", + "Gradient at test theta:\n", + "\t[0.043, 2.566, 2.647]\n", + "Expected gradients (approx):\n", + "\t[0.043, 2.566, 2.647]\n" + ] + } + ], + "source": [ + "# Initialize fitting parameters\n", + "initial_theta = np.zeros(n+1)\n", + "\n", + "cost, grad = costFunction(initial_theta, X, y)\n", + "\n", + "print('Cost at initial theta (zeros): {:.3f}'.format(cost))\n", + "print('Expected cost (approx): 0.693\\n')\n", + "\n", + "print('Gradient at initial theta (zeros):')\n", + "print('\\t[{:.4f}, {:.4f}, {:.4f}]'.format(*grad))\n", + "print('Expected gradients (approx):\\n\\t[-0.1000, -12.0092, -11.2628]\\n')\n", + "\n", + "# Compute and display cost and gradient with non-zero theta\n", + "test_theta = np.array([-24, 0.2, 0.2])\n", + "cost, grad = costFunction(test_theta, X, y)\n", + "\n", + "print('Cost at test theta: {:.3f}'.format(cost))\n", + "print('Expected cost (approx): 0.218\\n')\n", + "\n", + "print('Gradient at test theta:')\n", + "print('\\t[{:.3f}, {:.3f}, {:.3f}]'.format(*grad))\n", + "print('Expected gradients (approx):\\n\\t[0.043, 2.566, 2.647]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "#grader[2] = costFunction\n", + "#grader[3] = costFunction\n", + "#grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1.2.3 Learning parameters using `scipy.optimize`\n", + "\n", + "In the previous assignment, you found the optimal parameters of a linear regression model by implementing gradient descent. You wrote a cost function and calculated its gradient, then took a gradient descent step accordingly. This time, instead of taking gradient descent steps, you will use the [`scipy.optimize` module](https://docs.scipy.org/doc/scipy/reference/optimize.html). SciPy is a numerical computing library for `python`. It provides an optimization module for root finding and minimization. As of `scipy 1.0`, the function `scipy.optimize.minimize` is the method to use for optimization problems(both constrained and unconstrained).\n", + "\n", + "For logistic regression, you want to optimize the cost function $J(\\theta)$ with parameters $\\theta$.\n", + "Concretely, you are going to use `optimize.minimize` to find the best parameters $\\theta$ for the logistic regression cost function, given a fixed dataset (of X and y values). You will pass to `optimize.minimize` the following inputs:\n", + "- `costFunction`: A cost function that, when given the training set and a particular $\\theta$, computes the logistic regression cost and gradient with respect to $\\theta$ for the dataset (X, y). It is important to note that we only pass the name of the function without the parenthesis. This indicates that we are only providing a reference to this function, and not evaluating the result from this function.\n", + "- `initial_theta`: The initial values of the parameters we are trying to optimize.\n", + "- `(X, y)`: These are additional arguments to the cost function.\n", + "- `jac`: Indication if the cost function returns the Jacobian (gradient) along with cost value. (True)\n", + "- `method`: Optimization method/algorithm to use\n", + "- `options`: Additional options which might be specific to the specific optimization method. In the following, we only tell the algorithm the maximum number of iterations before it terminates.\n", + "\n", + "If you have completed the `costFunction` correctly, `optimize.minimize` will converge on the right optimization parameters and return the final values of the cost and $\\theta$ in a class object. Notice that by using `optimize.minimize`, you did not have to write any loops yourself, or set a learning rate like you did for gradient descent. This is all done by `optimize.minimize`: you only needed to provide a function calculating the cost and the gradient.\n", + "\n", + "In the following, we already have code written to call `optimize.minimize` with the correct arguments." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at theta found by optimize.minimize: 0.203\n", + "Expected cost (approx): 0.203\n", + "\n", + "theta:\n", + "\t[-25.161, 0.206, 0.201]\n", + "Expected theta (approx):\n", + "\t[-25.161, 0.206, 0.201]\n" + ] + } + ], + "source": [ + "# set options for optimize.minimize\n", + "options= {'maxiter': 400}\n", + "\n", + "# see documention for scipy's optimize.minimize for description about\n", + "# the different parameters\n", + "# The function returns an object `OptimizeResult`\n", + "# We use truncated Newton algorithm for optimization which is \n", + "# equivalent to MATLAB's fminunc\n", + "# See https://stackoverflow.com/questions/18801002/fminunc-alternate-in-numpy\n", + "res = optimize.minimize(costFunction,\n", + " initial_theta,\n", + " (X, y),\n", + " jac=True,\n", + " method='TNC',\n", + " options=options)\n", + "\n", + "# the fun property of `OptimizeResult` object returns\n", + "# the value of costFunction at optimized theta\n", + "cost = res.fun\n", + "\n", + "# the optimized theta is in the x property\n", + "theta = res.x\n", + "\n", + "# Print theta to screen\n", + "print('Cost at theta found by optimize.minimize: {:.3f}'.format(cost))\n", + "print('Expected cost (approx): 0.203\\n');\n", + "\n", + "print('theta:')\n", + "print('\\t[{:.3f}, {:.3f}, {:.3f}]'.format(*theta))\n", + "print('Expected theta (approx):\\n\\t[-25.161, 0.206, 0.201]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once `optimize.minimize` completes, we want to use the final value for $\\theta$ to visualize the decision boundary on the training data as shown in the figure below. \n", + "\n", + "![](Figures/decision_boundary1.png)\n", + "\n", + "To do so, we have written a function `plotDecisionBoundary` for plotting the decision boundary on top of training data. You do not need to write any code for plotting the decision boundary, but we also encourage you to look at the code in `plotDecisionBoundary` to see how to plot such a boundary using the $\\theta$ values. You can find this function in the `utils.py` file which comes with this assignment." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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evToIY0aNZL3339fREQOHTokLVu2lGvXrklwcLDUrFlTwsLC5LXXXpPatWtLYGCghIWFSVxcnCQmJsqDDz4oEREREhERIVu3bhURkXPnzkn37t0lPDxchgwZIvXr15ezZ8+W6zManbz/ByWxevVqsVgs+b57QEwmk1SuXFlMJpP4+PjIwoUL7Sixbdm4caN4e3vf9JkA8fb2ltjYWLtdu7D7abFYZPXq1Xa7pqZsAPFixdjrEhbAuXNnqV49f5gnwJgx/6By5T8X1mw9Q4qJieHuu++madOmVK9enR9//JEVK1awb98+du/ezZw5c0hISKBq1aq56wD169cnPj6ebt26MWjQIJYtW8b27dsZP358vnN7enoyefJk/vrXv5KQkMDYsWN56qmnGDlyJAkJCdx1110899xzjBw5kh07drB8+XIGDx4MwKRJk7jzzjv56aef6N27N0ePHi3X53M3CvrZcwgODi6128Vo2GoBuTzYYt1CY2xcQgFcv56Ol9fN2zt3juDzz2fe9OPIwVpTddGiRfTv3x+A/v37s2jRIuLi4njkkUeyF54DiY6OzndM7969AWjdujW33347vr6+BAQEYLFYyvzDWb9+PcOHDyc8PJzevXtz6dIlUlJSiIuLy41nv++++6hWrVq5Pp+7UdDPnuNeCQkJKbXbxYg4ayAuz7qFxrVwCQXg6enBtWuF77v99gimTXvd5jOk8+fPs3HjRgYPHkzDhg2ZPn06S5YsQUSKDU/0ytZUJpMp9++c1yUtThYkMzOT7777joSEBBISEjhx4kRuZFF5QyTdmYJ+9gsXLvDGG2/kJi+ZzWZGjx5NTEyMkyUtG84aiMuzbqFxLVxCAdSsGcCFC4qCVStE4MKFrIHQ1jOkZcuWMWDAAI4cOcLhw4c5duwYISEhVK9encWLF5ORkcGpU6eIjY0t9zV8fX1vyibO+7pHjx688847ua8TEhIA6Ny5M59++ikAX331FRcvXiy3DO5ETEwMo0aNyo3GctUBvyDOGojd9X5q/sQQCuDqjcJDJnMoKdt3+fL/2XyGtGjRIh544IF82x566CFOnz5NkyZNaN26NUOHDiUyMrLc14iKimLPnj2Eh4ezZMkS7r//flasWEF4eDhbtmzhrbfeIj4+njZt2nDLLbfwwQcfADBhwgTi4uJo164da9eupX79+uWWQWMcisr0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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot Boundary\n", + "utils.plotDecisionBoundary(plotData, theta, X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 1.2.4 Evaluating logistic regression\n", + "\n", + "After learning the parameters, you can use the model to predict whether a particular student will be admitted. For a student with an Exam 1 score of 45 and an Exam 2 score of 85, you should expect to see an admission\n", + "probability of 0.776. Another way to evaluate the quality of the parameters we have found is to see how well the learned model predicts on our training set. In this part, your task is to complete the code in function `predict`. The predict function will produce “1” or “0” predictions given a dataset and a learned parameter vector $\\theta$. \n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(theta, X):\n", + " \"\"\"\n", + " Predict whether the label is 0 or 1 using learned logistic regression.\n", + " Computes the predictions for X using a threshold at 0.5 \n", + " (i.e., if sigmoid(theta.T*x) >= 0.5, predict 1)\n", + " \n", + " Parameters\n", + " ----------\n", + " theta : array_like\n", + " Parameters for logistic regression. A vecotor of shape (n+1, ).\n", + " \n", + " X : array_like\n", + " The data to use for computing predictions. The rows is the number \n", + " of points to compute predictions, and columns is the number of\n", + " features.\n", + "\n", + " Returns\n", + " -------\n", + " p : array_like\n", + " Predictions and 0 or 1 for each row in X. \n", + " \n", + " Instructions\n", + " ------------\n", + " Complete the following code to make predictions using your learned \n", + " logistic regression parameters.You should set p to a vector of 0's and 1's \n", + " \"\"\"\n", + " m = X.shape[0] # Number of training examples\n", + "\n", + " # You need to return the following variables correctly\n", + " p = np.zeros(m)\n", + "\n", + " # ====================== YOUR CODE HERE ======================\n", + " p = []\n", + " for i in range(m):\n", + " if sigmoid(np.dot(theta.T,X[i,:])) >=0.5:\n", + " p.append(1)\n", + " else:\n", + " p.append(0)\n", + " \n", + " \n", + " \n", + " # ============================================================\n", + " return p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you have completed the code in `predict`, we proceed to report the training accuracy of your classifier by computing the percentage of examples it got correct." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "For a student with scores 45 and 85,we predict an admission probability of 0.776\n", + "Expected value: 0.775 +/- 0.002\n", + "\n", + "Train Accuracy: 89.00 %\n", + "Expected accuracy (approx): 89.00 %\n" + ] + } + ], + "source": [ + "# Predict probability for a student with score 45 on exam 1 \n", + "# and score 85 on exam 2 \n", + "prob = sigmoid(np.dot([1, 45, 85], theta))\n", + "print('For a student with scores 45 and 85,'\n", + " 'we predict an admission probability of {:.3f}'.format(prob))\n", + "print('Expected value: 0.775 +/- 0.002\\n')\n", + "\n", + "# Compute accuracy on our training set\n", + "p = predict(theta, X)\n", + "print('Train Accuracy: {:.2f} %'.format(np.mean(p == y) * 100))\n", + "print('Expected accuracy (approx): 89.00 %')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "#grader[4] = predict\n", + "#grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Regularized logistic regression\n", + "\n", + "In this part of the exercise, you will implement regularized logistic regression to predict whether microchips from a fabrication plant passes quality assurance (QA). During QA, each microchip goes through various tests to ensure it is functioning correctly.\n", + "Suppose you are the product manager of the factory and you have the test results for some microchips on two different tests. From these two tests, you would like to determine whether the microchips should be accepted or rejected. To help you make the decision, you have a dataset of test results on past microchips, from which you can build a logistic regression model.\n", + "\n", + "First, we load the data from a CSV file:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# Load Data\n", + "# The first two columns contains the X values and the third column\n", + "# contains the label (y).\n", + "data = np.loadtxt(os.path.join('data2.txt'), delimiter=',')\n", + "X = data[:, :2]\n", + "y = data[:, 2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Visualize the data\n", + "\n", + "Similar to the previous parts of this exercise, `plotData` is used to generate a figure, where the axes are the two test scores, and the positive (y = 1, accepted) and negative (y = 0, rejected) examples are shown with\n", + "different markers." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEGCAYAAABLgMOSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dfZgU5ZXof6cHZ8YRHRHGRDMYiLhrNBtBUGP2xmEAleSygrlqIGsiUdfE5NnokvVrYSGA2fUTMYlxLxBFyQ1wIYkiXiPggBqNWccofj4GhIQQjQI6ZJAMn+f+UdXQ03T3VHfXZ/f5Pc/7dHXVW1Wnq7vr1HnPec8RVcUwDMMwiiUVtQCGYRhGMjEFYhiGYZSEKRDDMAyjJEyBGIZhGCVhCsQwDMMoiV5RCxAm/fr10wEDBkQthmEYRqJ44YUXtqpqU/b6qlIgAwYMoL29PWoxDMMwEoWI/CHXehvCMgzDMErCFIhhGIZREqZADMMwjJKoKh+IYRiGF/bs2cPmzZvp6uqKWpRQqa+vp7m5mcMOO8xTf1MgRtWyY8cOZs26nblzf8Tbb2/j+OP78k//9E0mTbqO3r17Ry2eESGbN2/myCOPZMCAAYhI1OKEgqqybds2Nm/ezMCBAz3tYwrEqEp27NjB8OGfobHxLaZN62LgQNi4cSsLF97GsmU/Y82a50yJVDFdXV1VpTwARIS+ffuyZcsWz/uYD8SoSmbNup3GxreYMqWLQYOgpgYGDYIpU7pobHyLWbNuj1pEI2KqSXmkKfYzmwIxqpK5c3/EhAldZP9fRGD8+C7mzbs3GsECYseOHcyYMY3+/ZuoqUnRv38TM2ZMY8eOHVGLVjFs376dCy+8kO3bt0ctSmiYAjGqkrff3ka+Yd6BA53tlUJ6uO7JJ29j2rStrFihTJu2lSefvI3hwz9jSsQnli1bxkMPPcQjjzwStSg5eeqppzj99NPp1asXS5cu9eWYpkCMquT44/uycWPubRs3OtsrBRuuC4f77ruv22vcOOGEE5g/fz5f/vKXfTumKRCjKvmnf/omCxfWk12QUxUWLarnyiuvjkawAKi24bqwGDVqFCJyoD377LMAPPPMM93Wjxo1quhj//u//zt33333gfeTJ0/m+9//flnyDhgwgE9/+tOkUv7d9k2BGFXJpEnXsX37idx8cz3r1sHevbBuHdx8cz3bt5/IpEnXRS2ib1TTcF2YTJ48mYaGhgPvd+/e3e0VoKGhgSlTphR97CuuuIIHHngAgP3797No0SL+8R//8ZB+n/vc5xg8ePAhbdWqVUWfsxQsjNeoSnr37s2aNc8xa9btzJx574F5IFdeeXXFzQNxhuu2MmjQodsqbbguTFpbW1m+fDljxoxh586dh2xvaGjg0UcfZfjw4UUfe8CAAfTt25cXX3yRd999lyFDhtC376Hf09NPP12K6L5hCsSoWnr37s3UqdOZOnV61KIEijNcdxtTpnQfxqrE4bqwaW1tZfHixVx88cXdZq3X19ezePHikpRHmiuvvJL58+fz5z//mcsvvzxnn8997nN0dnYesv6OO+4oaeisWEyBGEaFM2nSdSxb9jNuvvktxo9PT5p0lEelDddFQUdHB7169SKVSlFXV8euXbvo1asXHR0dZR33wgsvZOrUqezZs4ef/vSnOftEbYGYD8QwKpz0cF1Ly/XMnNnE6NEpZs5soqXleptx7wM//vGP2blzJ6eddhoPP/wwp512Gjt37iw7Gqu2tpbW1lYuueQSampqypbz+eefp7m5mSVLlvD1r3+dU089texjmgKpUmxiWfEk+Zqlh+s2bXqPvXv3sWnTe0ydOt2Uhw80NjZy++23097ezrnnnsvzzz/PbbfdxlFHHVXWcffv389zzz3HFVdc4YucZ5xxBps3b+bDDz9k27ZtvPbaa+UfVFUja8B9wHvAq3m2C/B9YD3wMnB6xrbLgHVuu8zL+YYOHaqGamdnpw4deqqOGFGvc+eiq1ahc+eiI0bU69Chp2pnZ2fUIgZCZ2enTp8+VZub+2kqJdrc3E+nT5/q6fNW6zWrVl5//fVIz//aa6/pwIEDddKkSaGfO9dnB9o1xz01agtkPjC6wPbPAye57SrgXgAROQaYBpwFnAlME5E+gUpaQVTjxLJyZ2NX4zUzouOUU05hw4YN3HnnnVGLUpBIFYiqPgW8X6DLWOBBVwk+BxwtIscB5wMrVfV9Vf0AWElhRWRkENeJZUHmEipXAcT1mhlGlERtgfTEx4A/Zrzf7K7Lt/4QROQqEWkXkfZi0hRXMnGdWBZkLqFyFUBcr5lhREncFUiu3MJaYP2hK1XnqOowVR3W1NTkq3BJJa55oILMJVSuAojrNTOMKIm7AtkM9M943wy8XWC94YG45IEKMpdQNuUqgLhcM8OIE3FXIMuAr4rDZ4DtqvoO8Dhwnoj0cZ3n57nrDA/EJQ9UkLmEsilXAUR5zZIcPlwNJOX72bVrF1/60pcYNGgQZ511Fr///e/LP2iu0KywGrAQeAfYg2NVXAF8A/iGHgzjvQd4C3gFGJax7+U44b3rga95OZ+F8R4kHdLav3+T1tSktH//Js8hrdnHKCUsNk1bW5s2NDQozhBkt9bQ0KCrV68u4dPlljUdhjtnDrpyJTpnTnFhuF6vmR/XJZfcFj4cHl7DeJP0/dxzzz369a9/XVVVFy5cqJdccknOfsWE8UaqQMJupkD8w88/ziOPPKL19fXdlEd9fb0+8sgjvstcrtL0cg4/byjTp0/VESPqta0NXb36YGtrc445ffpU32Q3DuJVgQT1/UyZMkVnz5594P2//du/6d13313SsdKcd955+uyzz6qq6p49e7Rv3766f//+Q/olaR6IESJ+mtp+zovIzCV0+OGHk0qlfMkllE0Ys7H9ni9i4cPxJqjvJ4h07n/605/o399xHffq1YvGxka2bSsvetAUSJXgd1lTP/84QeUSigK/bygWPuyNqPwQQX0/mencV6xYUTCd+0svvXRIyxV4otkOQECyf6hFYgqkSvD7ydjPP05QuYSiwO8bioUP90yUNd+D/H7S6dzvv//+guncvVogzc3N/PGPzvS5vXv3sn37do455piS5QNTIFWD30/Gfv5xHnroISZNmnSg1GZNTQ3f+c53eOihh4qSKQ74fUOx8OGeiTLNTJDfz4UXXsgvf/lLnn/+ec4///ycfYqxQC644IIDw2JLly5lxIgRZoEY3vD7ydhubLnx+7rEJeQ6zkTpJwry+/E7nfsVV1zBtm3bGDRoELNmzeKWW24p+5iSa1ysUhk2bJi2t7dHLUYk9O/fxLRpucuarlsHM2c2sWnTe56Plx42aGzMXaSoWutMBHFdduzYwaxZtzNvXmWX3i2VmpoUK1Youe6xe/fC6NEp9u7dV9Qx33jjDT75yU966hvU97N//35OP/10lixZwkknnVTycYol12cXkRdUdVh2X7NAqgS/n4ytSFFugrguVsujMFH7iYL4fl5//XUGDRrEyJEjQ1UexWIWSJVgFoNRqcyYMY0nn8xd8/3mm+tpabm+6Lr3xVgglYZZIMYhmMVQHEGmlk8qcU3ZEZQfopoertMU+5nNAjGMHCxYsICvfvWrLFiwgEsvvTRqcSIn04KdMOGgBbtwYTwsWL/9EBs3buTII4+kb9++ZUcqJQVVZdu2bXR2djIwK+ImnwViCsSoKLZv387EiROZP38+jY2NJR+ntbWVNWvW0NraSltbm48SJpMghonizJ49e9i8eTNdXV1RixIq9fX1NDc3c9hhh3VbbwoEUyDVQKmWw6hRo3jiiScOvK+trWX37t0HXtOMHDky5yStSsfvKD4jWZgPxIgdQfgZSi1KFWZq+SRiKVWMXJgCMSLDjxK2fhWlam1tZfny5d2USCYNDQ08+uijDB8+vGRZwX9HdFiO7ahDZY14YgrEiAw/Stj6aTm0trayePFi6uvru62vr69n8eLFvigPP3M2hZkDyjIPGLkwBWKERhAlbP22HIJMLe93zqYwc0D5GSob13BgowRyFQmp1GYFpaKlUPVByqxC6FdRquHDh2sqldIhQ4boihUrdMiQIZpKpbS1tbVombJpbu6nc+d2LzyUbnPmoP37N0V6vJ7wq4plUir4GQchjgWlRGS0iLwpIutF5MYc2+8SkZfc9jsR6cjYti9j27JwJTdKIUg/g1+WQ5Cp5f12RIft2PYjZUeUmXMN/4lMgYhIDU69888DpwATROSUzD6q+i+qOlhVBwM/AH6esfmv6W2qekFoghtlEZSfwa+iVEGmlvfbEZ1Ex7afmXNtKCx6orRAzgTWq+oGVd0NLALGFug/AVgYimRGoAThZ0hCUSq/HdFJdGz7ZTVFWUTKOEiUCuRjwB8z3m921x2CiHwcGAhkTgmuF5F2EXlORMblO4mIXOX2a9+yZYsfchtlEkQJ2wceeICnn36azs5OIPqiVLnmuPidsymJtUL8sppsKCweRKlAciWYyTctfjywVFUzk/qfoM7MyC8Ds0XkxFw7quocVR2mqsOamprKkzgBBGnW+3XscqyFfJMP/ZhT4ie55PE7oaWfxwsreaRfVlOURaSMDHJ51sNowNnA4xnvbwJuytP3ReCzBY41H7iop3NWehRWkBEucYmeefDBBxXQBQsWdFs/fPhwBYqKluro6NBx48ZpR0eH32KWJE+U5LuufpP5O5ozB1250okYK/Z3lEqJrlqVOwJt5Uq0piYV6OeoNohhFNbzwEkiMlBEanGsjEOiqUTkb4E+wK8z1vURkTp3uR/w98DroUhdJkFaCEGa9XEZMkgPc337298ue06Jn1ZLEHNcwsSPSZ1pClkzfllNSQwgqEhyaZWwGvAF4HfAW8Bkd90M4IKMPt8Fbsna77PAK8Ba9/UKL+eL2gIJ+ik+yHkBYc85SDNy5Mhucztqa2sV0F69ehWcT4KHOSV+WglBznEJgnzXNf2abiNHjiz62GFYM9OnT9URI+q1ra37b7Gtzfk/TZ8+NbBzVyPksUAiVSBht6gVSNA/+iDN+qiGDLzcmL3erIO8afYka5yUh2qwCi+M4Tu/hsL8kGP69Kna3NxPUynR5uZ+RU+uTAL5FIilMgmRoB1/QZr1UQ0Z9DT5sK6ujtra2m7r8s0pCTrjbtC5tPzEz0mdUQzfxaHCpoUSWy6sUAl65nCpES5eInCinHNQ6Mb8rW99i9ra2gNV40Qk75ySMDLuBplLy2/8UnhRpcL3MjM+qT7HpGAKJESCfoovdV6AF2dy1HMO8t2YH3vsMXbu3MkRRxwBwBFHHFFwTknQVkIQc1yCxA+FF1Yq/GIJ2kKwUGJTIKES9FN8qWa9lwicqIcMsm/MDQ0N7NixgzfeeIP9+/d3e+rdv38/q1evzjtsEqSVkIQZ8Zn4pfDiOHwXtIVgRbYwJ3qYxMXxF7QzOQjGjh2rd955p+7bt09VVVeuXKmHHXZYSU7gIDPuxp1sp+9RR9Xq6NHn6vbt21VVde/evXrHHXfo2LFjiz72ggULtHfv3ppKpfTwww/XVCqlvXv3DnxuST6CjhyMKjIxCrAorOgViKo/KbHLnQCXtJDTfJQa9ZStjMq5aSaJoMPI46aYg44crKZQYlMgMVEgfuBHnH2SQk4L4VcdkGog6BteWIrZa+hs0BZCXEYUwiCfAjEfSALxY9ZwHMesSyFJUU9eCDInVU9O31mzbinrvEGmwk9TjGM8rj7HSsIUSAIIKs6+Em6+SYt66okgk0L25PT9y192xyYZZT6KcYyHETnoR5GtJGMKJAEEFWdfCTffpEU99YSfOamy6SmMvK4umPP6STGhs2YhhECuca1KbUn2gQThs6gGZ3KhgIMgs/F6JcyIuEI+kLPPRlOpeEfiqVoW3qjAfCDJJgifRRhj1lFTaEgoDjVEvFiXhx9+OF1dXWX7RfIN6UyeDC++CPv3Bz97vFwsC2+8MAUSAn6lU6gEn0XYFBoSCnK4yCteZnFfe+21PPPMM2UruuwhnfPPF665Bn7zG+jqOvS8Ucwe74kklvGtaHKZJZXaohjC8jP2Pm5x9nHE65BQoW1RDNsUCkf2kt221OG4pIVBV1PobJzAhrCiwc90CpXmMA4CL0NChbZFNWyTaV2mhxS7urr4h3/4B09Rd6UOxyXNqjXHeMzIpVUqtUVhgVRLuoM4OKTTFAo4qKur07q6uthNoMy0Lm+77TYVkaIyBZRag8OsWsMLmAUSDdWScC0ODuk0hQIOli5dytKlS2M3gTLTurzuuutYsWIFhx12WM6+DQ0NnHzyybS2tpY9N8is2vwEmQq+UsirQETkVBH5lYhsFJEfiUhjxrZf59uvGERktIi8KSLrReTGHNsnisgWEXnJbVdmbLtMRNa57TI/5AmCIKJG4vjDjoNDOpNCQzNxHLbJjogbNWoUP//5z/MqujvuuMOXuUFxjMQLcja+V6xYlDcKWSD/BdwCnAFsAn4lIuln6fq8e3lERGqAe4DPA6cAE0TklBxdF6vqYLfNc/c9BpgGnAWcCUwTkT7lyhQEfkeNxOWH7efs+CBuGIUmSSZlAmUhRRfXGhx+EAdr1opFeaOQAjlSVZer6lZVvQX4F2CFiJyBMw5bLmcC61V1g6ruBhYBYz3uez6wUlXfV9UPgJXAaB9k8h2/0ymU+8P262bt5+z4IG4YhYZmkjJs05Oiq5R8ZtnEwZq1YlEeyeUYcXwmvAwclbVuMLAO2JpvP68NuAiYl/H+K8APs/pMBN5xZVkK9HfX/yswJaPfvwP/muc8VwHtQPsJJ5zgq2PJK36kcE9TrlPej0y+afyaHV+qA7jS8ZIpIG41OEohjvVpbMZ7dyg2nbt7Qz87x/oBwP359vPagItzKJAfZPXpC9S5y98A2tzl63IokO/0dM4kpzJJU+4P2++bdSnzCOJ4w0gqlRBFFYf6NNlRhNUSPemVfAok7xCWqi5Q1UOc5ar6e1X9Wr79imAz0D/jfTPwdta5tqnqLvftXGCo130rlWKd8kFl8k1TikM6qOSQ1UhShuMKEQd/TvYwqs1490gurRJGA3oBG4CBQC2wFjg1q89xGcsXAs+5y8cAG4E+btsIHNPTOSvBAim2KFDQT3elPgFXSkErwz+inBWfbZnbjPfuEMeKhMAXgN8BbwGT3XUzgAvc5f8EXnOVy2rg5Ix9LwfWu+1rXs5XCQqklB92kDfrcjL6Ji2NhhEsYfpzvA6jnnjiQF98l0mnZAUCfMbLuiS0SlAgqqU55eN4s64EB7DhH2H6c+Lgd0kS+RSIl5noP8qx7h4P+xkBUUoVtDhOnkvKfIxs4jDRrRIJ058TB79LRZBLqzgKhzOBa4A/At/OaFOAl/PtF+dWKRZIKcQxWiepBa38DIU2oiWOlnkcoQQL5AigH46zuymj7cYJwTUSRByjdeKYRsMLcZjoZvhDHC3zRJFLq2Q24BMZywIc0dM+cW3VbIEYpWPzViqXOFrmcYQyfCDfFZGjRKQBJyJqo4hM8l+VGYY3wvZB2LyVyiWOlnmiyKVVMhvwovv6ZWA2zpwN84EYkRGFD8LmrRhBkI6obG7up6mUaHNzv1iGClOGBVIrIr1wEh0+pE7iw/1+KzLD8EoUPohKTVxoREdcMmuXgxcFMg8nnXsf4EkROQGI/yerIKo9bDTodCxeMYer4SeVkDK+RwWiqnep6vGqep5rymwGRgQvmpEmDvURoiQuPoikzlsx4kklpIzvUYGISJOI/G8RWe6uOhnHH2KERJLCRoOwluIy6cscroafVEK5ay9DWPOBJzmY/XYd8J2gBIoTUZWOjcuQTSkEZS3FwQeR1HkrRjwJotx12HhRIMeq6k9xHeequgfYF6hUMSBKB1dchmxKIUhryXwQRiVRCSnjvSiQD90a5M5MQqekbWegUsWAUhxcflkscRmy8UKY1pL5IIxKwu9y15GQK7Y3swHDgGeADpyhrPXA4J72i2MrZh5IsRXJMtOsz52LrlqFzp1bXv2AJOTpCTOraVJzZxlGPvwsdx0kFDsPREQ+4yqYdqAVaMFJrniKqr4UhDKLE8U6uIIIyUvCkE2Y1pL5IKqXuIaylzvqUEpm7ThRaAjrQBp3Vd2tqmtV9SV1JhJWPMU6uIIIyUvKkE0cHNxGZRPHUPZKmAhYLl58IFVJsQ6uIELykhQ2mgRryUgucQxlr4SJgOUimn2HTG8Q6QCeyrejql5Q9slFRgN3AzXAPFW9JWv7JOBKYC+wBbhcVf/gbtsHvOJ23eRFnmHDhml7e7sn2dJPF42NbzF+fBcDBzqWx6JFjoNrzZrnupmZ/fs3MW3aVgYNOvRY69bBzJlNbNr0nqdzJ5HW1laeeuopTjvtNG699VZuuOEG1q5dS0tLC21tbVGLZySMUaNG8cQTTxx4X1tby+7duw+8phk5ciSrVq2KQsSq+s+LyAuqOix7fSELZAtwZ4FWrkA1OJUNPw+cAkwQkVOyur0IDFPVTwNLgdsytv1VVQe7rWxllk3v3r1Zs+Y5WlquZ+bMJkaPTjFzZhMtLdcfojygMkLyyiFJ1pIRf5IQyl4JEwHLpZAF8ltVPT2wE4ucDXxXVc93398EoKr/maf/EOCHqvr37vsdqlqUp6kYC6RYirVYksL27duZOHEi8+fPp7GxMWpxjCpi9erVjBkzhp07dx6yLQ6h7GaBFLZAfh+cOAB8DKdcbprN7rp8XAE8lvG+XkTaReQ5ERkXhIDFUKzFEjalRrHE0XlpVAdxD86o9lEHKKBAVPWLAZ9bcqzLaQ6JyKU481EyvVInuBrxy8BsETkxz75XuYqmfcuWLeXKXJA4h+SVqgji6Lw0qoc4B2dUxETAMokyCmszB/NrATQDb2d3EpFRwGTgAlXdlV6vqm+7rxuANcCQXCdR1TmqOkxVhzU1NfknfcLwqgiSnIfLqDziHMoe91GHUMg1uzCMBvQCNgADcaocrgVOzeozBHgLOClrfR+gzl3uh5Pg8ZSezllNFQlLreMd5sxyw+gJyz4QD8gzE93rzf6LwCyc6KsLvezj8bhfAH7nKonJ7roZONYGwCrgXeAlty1z138WJ4R3rft6hZfzVZMCKUcRxL18a0dHh44bN047OjoilcMwqoWSFQjOjPQVwNfc9kvgnp72i2OrJgWiWp4iiHMerihqohvxxh4qgiWfAvHiA2kBzlfV+1X1ftdqGO5hPyNiyoliibPz0hz7RjYWLRgNXhTIm8AJGe/7Ay8HI47hN6Uqgjg5L82xb/SEPVREgxcF0hd4Q0TWiMga4HWgSUSWiciyQKUzyqZURRCnmeVJmJVshIs9VMSDvDPRD3QQaSm0XVWf9FWiAAlyJnpcGTduHOeccw7XXnstqVSKffv2MXv2bJ5++ulEpUGP+6xkI1wK/R7S2O/CP/LNRO9RgVQS1ahAKonly5dz8cUX09XVdWBdfX09S5YsYcyYMRFKZkSBPVSER9GpTETkV+5rp4j8JaN1ishfghTWMHIRZ8e+ET5xT3VSDRRKZfI/3NcjVfWojHakqlqKVSN04uTYN+KBPVTkp9xqiV7wlMpERGpE5HgROSHdfJPAMDwSJ8e+EQ/soSI3YVVL7FGBiMg/48wGXwk86rblvpzdMIrAaqIb2VTqQ0W51kNY1RK9RGGtB85S1cRXRzEnumEYcSezttCECQdrCy1c6L22kN+1SkqpB5Lmj0BxRSQMwzCMkvDDegirWmKhKKxJbk3yDcAaEbkpvc5dbxiGYfjM3Lk/YsKELiSrYpIIjB/fxbx59/Z4jOOP78vGjbm3bdzobPeDQhbIkW7bhOP/qM1Yd6QvZzcSS6kVDg3DKIwf1kNY1RILhfFOL9R8OXsVEkZoXRiUm7zOFJBh5MYP6yGsaoleorBWisjRGe/7iMjjvpy9yggrtC4Myk1eZ9lTDSM3flgPYVVL9OJEb1LVA7NyVPUD4Fhfzl5l+B1aF+ZTvN/J6yx7anVglmbx+GU99O7dm6lTp7Np03vs3buPTZveY+rU6b6W2vWiQPZlThwUkY/jFBgyisQP51gmYT7Fl5sR17KnVidmaXojc2i7sfEo/vznPwNnMn16v1jXWveiQCYDvxKRBSKyAHgKuClYsSoTv0PrwnyKb21tZfny5d2USCY9Ja+zlOzViVmaPZNraPu7390G/Dcf/ehH6OjYHoj14Ac9KhBV/SVwOrDYbUNV1RcfiIiMFpE3RWS9iNyYY3udiCx2t/9GRAZkbLvJXf+miJzvhzxBU65zLOqn+HKS15WrgMCGQ5JA1L/RJBLWrPEg8JQLC/gsThnb4cBn/DixiNQA9wCfB04BJojIKVndrgA+UNVBwF3Are6+pwDjgVOB0cCP3OPFmnKdY3F4ii8neV252VNtOCT+xOE3mjT8HtoOEy9RWLcA1+BUInwduEZE/tOHc58JrFfVDaq6G1gEjM3qMxZ4wF1eCowUEXHXL1LVXaq6EVjvHi/WlOsc8+MpvlzKTV5XjgKy4ZD4E8VvNOmh8WHNGg8EVS3YcOqfpzLe1wAv97Sfh+NeBMzLeP8V4IdZfV4FmjPevwX0A34IXJqx/sfARXnOcxXQDrSfcMIJGjWdnZ06ffpU7d+/SWtqUtq/f5NOnz5VOzs7PR/jkUce0fr6esUJZlBA6+vr9ZFHHglQcoexY8fqnXfeqfv27VNV1b179+odd9yhY8eO9bT/8OHDNZVK6ZAhQ3TFihU6ZMgQTaVS2traekjfkSNHdvuMtbW13V7TbeTIkb5+RqN8wvqNdnZ26tChp+qIEfU6dy66ahU6dy46YkS9Dh16alH/q6hobu6nc+eiq1cf2ubMQfv3b4paRAXaNcf91esQ1tEZy41F6KdCSI512dFd+fp42ddZqTpHVYep6rCmpqYiRfQfP0LroqyBUG5G3GKyp9pwSHIJ6zeaZP9BmrBmjQdCLq2i3Z/gJwB/AObjDCdtBMb3tJ+H454NPJ7x/ibgpqw+jwNnu8u9gK04yqNb38x+hdrQoUP9V80RUMxTfFxJW2LNzf00lRJtbu6X0xJra2vThoaGbk+y6dbQ0KCrV6+O5gMYBQnrN5qEp/eeyLSi5sxBV650ZI+TFUUpFojrb/gVjp22LbEAABs0SURBVOP85247W1UX+aC7ngdOEpGBIlKL4xRfltVnGXCZu3wR0OZ+mGXAeDdKayBwEvDfPsgUWzLHeZ98cg19+hzO2LFjOPvssxNXA6GYGflWtjSZhFWnI9H+A5ewZo0HgZd6IC+o6tBATi7yBWA2jl/lPlX9nojMwNF2y0SkHlgADAHex7F8Nrj7TgYuB/YC16rqYz2dL6n1QPyoDxAnZsyYxpNP3saUKd0jT1SdgIKWluuZOvVgurWf/OQnXH311ezcuZO6ujp27dpFQ0MD9957L5deemkEn8CIC37XvTByU049kOdE5IwAZEJV/5+q/o2qnqiq33PXTVXVZe5yl6perKqDVPXMtPJwt33P3e9vvSiPqPAjQqQSxnkzKTZs0cqWGvmIq/8g6ZFhXvFigbwO/A2OH+RDHB+EquqngxfPX8K2QPyyHCrtKaumJsWKFUpNjpk7e/fC6NEp9u7dd2DduHHjOOecc7j22mtJpVLs27eP2bNn8/TTT1s52yon8z82fvzB/9iiRdFZ55U2YgD5LRAvCuTjudar6h98ki00wlYgxQ7V5KPYG27cqTSFaETLjh07mDXrdubNu5e3397G8cf35corr2bSpOsiuVH79b+PE+UMYR0HvK+qf3CVxvvAR/0WsBLxa4ZpWNXFwiKuww5GMgkj62wxJHlmebF4USD3ApkDdx+664we8CtCpNJuuGEVuzGMKKiEyDCveFEgohnjXKq6H2dOhtEDflkOQd9ww3b4JTls0Yg/USfdrLQRg0J4USAbROTbInKY264BNvS4l+Gb5RDkDTeqKolxG3YwKoeok25W2ohBIbw40Y8Fvg+MwJkB/ATOvIvEeTmjjMKKS4RINpXo8IsT27dvZ+LEicyfP5/GRr+yABmFaG1tZc2aNbS2ttLW1hb6+ZPwvy+WfE70stKRJK1FkcrEj+SJQVIJqSDizIMPPqiALliwIGpRKpY4Jt2M+/++WMiTyiSvBSIi16vqbSLyA3IkKlTVb/ul3cIiqTPRg6TSQoTLxW+LIeqn4TgRlDW2evVqxowZw86dO/P28ZpG3izG3JQSxvuG+9oOvJCjGRVAFA6/qJ2chSh3/Nwq8uUnKN+EnzVIovafJI28CkRVH3FfH8jVwhPRCJIoHH5x/pOWW7TKUtDnJ8iCYH4l3bSiZcWRV4GIyLJCLUwhjeCIYk5GMX/SoK0Vvy2GOFSNjAthW2Ol1CAxi7FMcjlGXL/IFuC3wHXAOUBLZsu3X5xbnOuBeK2PEeS5g3L4lePkDNoJXajeSLqVUnckyqqRcSGoa5uPUmqQhC1jlP/zciCPE72QAqkBRuMUkXoRuBk4NV//JLS4KpBKKMtZiHL+pMOHD1cg0GJZQRStWrBggfbu3VtTqZQefvjhmkqltHfv3rGIxuro6NBx48ZpR0dH4OcKsyBYqeWWw5Ixyf/zohVIt05QB0x0rZJ/9rJPHFtcFcj06VN1xIh6bWvrHkbb1ub8uKZPnxq1iGXj9U8aVUim3xZDnKtGhh1anARrLAwZk/w/z6dAeqpIWCciXwR+AnwLZ0LhzwvtYxRPNSRf8+rkjMoJ7XcN77Aq8pVC2I7isOqjQ+k+szBkrMT/eSEn+gPAs8DpwHRVPUNVZ6rqn0KTrkqoluRrXv6kUTmh/S5a9dBDDzFp0iRSKecvVlNTw3e+851I6pdE7SgOsyBYqRF+YchYif/zQhbIV3AKSV0DPCsif3Fbp4j8pZyTisgxIrJSRNa5r31y9BksIr8WkddE5GUR+VLGtvkislFEXnLb4HLk8ZtikxMmLflaqckXvf5Jo6iDHmeLoVyiDi0O89qWal2FIWPS/ueeyDWuFXQDbgNudJdvBG7N0edvgJPc5eOBd4Cj3ffzgYuKPW8YPpBSHGVJGRvt6OjQMWPG6JAhnyzJEViMk9MvJ3SYDuM4E6YzO0zimMYkH0n5n+eCcpzofjfgTeA4d/k44E0P+6zNUCixVSCl/Egylc6cOejKlU4eqrhFZzz44IOaSqEtLYcF/ifwywltuagOkgRndrGEHYZbDkn5n+cinwLxks49CD6iqu8AuK/HFuosImcCtcBbGau/5w5t3SUidQX2vUpE2kWkfcuWLX7IXpBSHGVJqY9x3333UVsLl166J3BHoF9DCjaz+CBhOrPDIkkTN5PyPy+GHtO5l3xgkVXkLn07GXhAVY/O6PuBqh7iB3G3HQesAS5T1ecy1v0ZR6nMAd5S1Rk9yRRGMsVKSk44atQonnjiiQPva2tr2bNnNytXEtvPl0vm3bt3H3hNM3LkSFatWhWFiJHR2trKU089xWmnncatt97KDTfcwNq1a2lpaUl8osfly5dz8cUX09XVdWBdfX09S5YsYcyYMRFKVhmUUxO9JFR1lKp+Kkd7GHjXVQJpZZCztoiIHAU8CkxJKw/32O+4ltUu4H7gzKA+R7EkwVHm1Qmey/laV0esP1/UDuM4U8mBApVoXSWBqIawlgGXucuXAQ9ndxCRWuAXwIOquiRrW1r5CDAOeDVQaYsg7tXIiqlAmGt4YPduuO8+Yvv5kjSkETZxCi32mzBDhY2DRKVAbgHOFZF1wLnue0RkmIjMc/tcgpODa2KOcN3/IyKvAK8A/XDSrMSCKJITFsOsWbfT2PgWU6Z0MWiQMxQ1aBBMmdJFY+NbzJp1e7f+2SG1+/fDiy/C5MnE8vNBNGHARrRUsnUVa3J51iu1hZXKJM7VyEqpQJgdUisiWl9/mB577JGx+3xp4pyLyjCSBjGLwqpoevfuzdSp09m06T327t3Hpk3vMXXq9FhEWZQyGzZ7eGDw4MHs3r2PU08dFrvPl8aGNAwjeEyBVBmlOPmTODyQRJkNI2kEFsYbR6wmOsyYMY0nn7yNKVO6z1VRdfwYLS3XM3Xq9OgENAwjdoQexmvEk7g7+cul1DxdhuEH1fb7MwukCtmxYwezZt3OvHn38vbb2zj++L5ceeXVTJp0Xaz8GMWSDlFubHyLCRO6GDjQGZZbuNBRjkmd7Wskg0r+/ZkFYhwgzk7+cugpRPk//uPmQOqrB1233UgGxYbIVwKmQIyKoec8ZD8qqVZET5Rag8JvTJFFSyUWjOoJUyCGJ5IwtttTiPLWrZ2A/4kV45KwMS6KrFqpxIJRPWEKJGFEcSMvJv1JlPQUolzn5mwutxJf1BX+8hEXRZYmCQ8dfpKEPHh+YwokQUR1I0/K2G6hPGT33+/k8YLyEyvGJWFjXBUZJOehw0/ingcvCEyBJIiobuRJGdvNF6I8ebKTv2v//u79S02sGJeEjXFRZLlIykOHn1R6iHwuLIw3QfTv38S0aVsZNOjQbevWwcyZTWzalDMzflkkqcZJ9xDlrRx99OHs3r2Xzs7d1Nc7Vsj+/f7UiohDDYrVq1czZswYdu7ceci2KDMPR/VbjZpKDZG3MN4KIConXZLGdtMhyq+/voHBg0/htNP2M2vWblatgh/8AM46C+rrnVTm5daKiEMNirhmHq5GhzJUboh8PkyBJIiobuRJHNvNN4Tyve/B6acLXV0flu1sjkvCxjgosmyS9NBhlI4pkAQR1Y08iWO7hfw2EycqffocUXZixbgkbIyLIsskiQ8dRvGYDyRBZKZKGD/+YKqERYuCT5WQtLHdJPltymXcuHGcc845XHvttaRSKfbt28fs2bN5+umnI6s2GOVv1fCffD4QUyAJI2k38qioVidunLDfauUQKwUiIscAi4EBwO+BS1T1gxz99uGUrQXYpKoXuOsHAouAY4DfAl9R1d3Z+2dTCQrE8EYS09Zv376diRMnMn/+fBobG6MWxzAOELcorBuBJ1T1JOAJ930u/qqqg912Qcb6W4G73P0/AK4IVlwjaSTRb1PtqUgsl1fyiEqBjAUecJcfAMZ53VFEBBgBLC1lf6M66N27N2vWPEdLy/XMnNnE6NEpZs5soqXl+tiOv8ctFYlfeFUMQSrQIJVTtaVs6UauQulBN6Aj6/0HefrtBdqB54Bx7rp+wPqMPv2BV72cd+jQoaXWlDcM3xk5cqQCB1ptbW2313QbOXJk1KKWxYMPPqiALliwoGC/4cOHK6Ctra2RyVAsnZ2dOnToqTpiRL3OnYuuWoXOnYuOGFGvQ4eeqp2dnb6eLyqAds1xTw3MAhGRVSLyao42tojDnKDOuNuXgdkiciIgOfrldeSIyFUi0i4i7Vu2bCnyUxhGcMQ5FYmf5LOswszlFZR1V40pW7qRS6sE3YA3gePc5eOANz3sMx+4CEeBbAV6uevPBh73cl6zQIy40dbWpg0NDd0sjnRraGjQ1atXRy1iNzo6OnTcuHHa0dGRt49Xy+r000/P+9nLvQZhWXfNzf107lx09epD25w5aP/+TWUdPy4QtgXSA8uAy9zly4CHszuISB8RqXOX+wF/D7zufpjVOMok7/6GkQTimookH178FF4tqzvvvDOwpJRBWHe5fB3vvLOVj340d/9KTtmSJioFcgtwroisA8513yMiw0Rkntvnk0C7iKzFURi3qOrr7rYbgEkish7oC/w4VOkNw0fimIokH16GgorJVhyUAvU7Y3K+9PRnnQXXXAN//euh+1RDypZIFIiqblPVkap6kvv6vru+XVWvdJefVdW/U9XT3NcfZ+y/QVXPVNVBqnqxqu6K4nMYlUcUETWZqUgWLVrERz96LHv37uCrX/1K6BE92Z//qKNqqakp3k9RjGIISoH6qZzy+TpuvhmOOw6WLOnev1pStlguLMNwiaoIUjqn1po1a5gx4984+eQOfvADWLmSvOcPIiw11+efNWvPgQzGUNxQUE+KIa2svvnNy/nwwx00NAgXX/xFPvWpT/mWy8sv5VQot9pll8HPfkZi5hv5iSkQw3CJKqLmoYceYtKkScyefafn8wcxZ6JQBuMhQyCV425RaCioUJLHTGU1a9YeVq6Eu+7ax+bNP+Oww/Yxc+ZMX5JS+pVosqf09Dt2SGLmG/mJKRDDcIm68mIx5w8iLLXQ+b/2tYM15dP0NBRUKFtxT8p6795dviSC9Ctjck/p6T/2sX5VUwMkE0umaBguUWfw7en8553HgfTotbW17N69+8BrmpEjR7Jq1arAzi+Soq6ujl27dtHQ0MC9997LpZdeWvS5kpbsMom51fwkbrmwDCN2RF0EqafzZ/qCg5h02NP56+rwreZI0ioWJjG3WhiYAjFiSRTRUFEXQerp/OPHfyWQORNezv/AAymGDz/Xt+JZUSvrYklibrUwsCEsI3ZkFiOaMOFgMaKFC4MtRhR1ESQv51+zZg0XX3wxXV1dB/arr69nyZIljBkzJvDz+/X5q31IKGnYEJaRGKKKhor6KdPL+YOcdBjm57chocrALBAjdiTNwRomra2tPPXUU5x22mnceuut3HDDDaxdu5aWlhba2tqiFq8orGJhcohVRcKoMAWSDKKOhoozcax/blQ+pkAwBZIUzAIxjHhhPhAjMUQdDWUYhjdMgRixwxyshpEMTIEYsSPqaCjDMLxhPhDDMAyjIOYDMQzDMHzFFIhhGIkgivQ2RmFMgRhGCNjNrzyiKvZlFCYSBSIix4jIShFZ5772ydGnVUReymhdIjLO3TZfRDZmbBsc/qcwDG/Yza98okpvYxQmKgvkRuAJVT0JeMJ93w1VXa2qg1V1MDAC2AmsyOhyXXq7qr4UitSGUQJxuPkl3QKKutiXkZuoFMhY4AF3+QFgXA/9LwIeU9WdgUplGAEQ9c2vEiygpNUPqRaiUiAfUdV3ANzXY3voPx5YmLXueyLysojcJSJ1uXYCEJGrRKRdRNq3bNlSntSGUQJR3/ziYAGVS9Lqh1QLgSkQEVklIq/maGOLPM5xwN8Bj2esvgk4GTgDOAa4Id/+qjpHVYep6rCmpqYSPolhlEfUN7+oLSA/sPQ28SQwBaKqo1T1Uznaw8C7rmJIK4hCmfEuAX6hqnsyjv2OOuwC7gfODOpzGEa5RH3zi9oC8gNLbxNPohrCWgZc5i5fBjxcoO8EsoavMpSP4PhPXg1ARsPwhahvflFbQH5g6W3iSSSpTESkL/B/gROATcDFqvq+iAwDvqGqV7r9BgDPAP1VdX/G/m1AEyDAS+4+PXoCLZWJERVRFk+y8rFGuVg9EEyBGNVJ1LXejeRjubAMo0qx4R8jKMwCMQzDMApiFohhGIbhK6ZADMMwjJIwBWIYhmGUhCkQwzAMoySqyokuIluAP4R4yn7A1hDPVywmX3mYfOVh8pVHmPJ9XFUPyQVVVQokbESkPVfkQlww+crD5CsPk6884iCfDWEZhmEYJWEKxDAMwygJUyDBMidqAXrA5CsPk688TL7yiFw+84EYhmEYJWEWiGEYhlESpkAMwzCMkjAFUiYicoyIrBSRde5rnxx9WkXkpYzWJSLj3G3zRWRjxrbBYcvn9tuXIcOyjPUDReQ37v6LRaQ2bPlEZLCI/FpEXhORl0XkSxnbArl+IjJaRN4UkfUicmOO7XXu9VjvXp8BGdtucte/KSLn+yFPkbJNEpHX3Wv1hIh8PGNbzu85AhknisiWDFmuzNh2mft7WCcil2XvG5J8d2XI9jsR6cjYFug1FJH7ROQ9EclZKE8cvu/K/rKInJ6xLfBr1w1VtVZGA24DbnSXbwRu7aH/McD7QIP7fj5wUdTyATvyrP+/wHh3+b+Aq8OWD/gb4CR3+XjgHeDooK4fUAO8BXwCqAXWAqdk9fkm8F/u8nhgsbt8itu/DhjoHqcmZNlaM35fV6dlK/Q9R3D9JgI/zLHvMcAG97WPu9wnbPmy+v8zcF9Y1xA4BzgdeDXP9i8Aj+EU1PsM8Juwrl12MwukfMYCD7jLD+CU2C3ERcBjqrozUKkOUqx8BxARAUYAS0vZ3yM9yqeqv1PVde7y28B7OBUpg+JMYL2qblDV3cAiV85MMuVeCox0r9dYYJGq7lLVjcB693ihyaaqqzN+X88BzT6e3xcZC3A+sFJV31fVD4CVwOiI5TukrHaQqOpTOA+Z+RgLPKgOzwFHi1PmO4xr1w1TIOXzEVV9B8B9PbaH/uM59Mf4PdcUvUtE6iKSr15E2kXkufTwGtAX6FDVve77zcDHIpIPABE5E+ep8a2M1X5fv48Bf8x4n+tzH+jjXp/tONfLy75By5bJFThPq2lyfc9+41XG/+V+b0tFpH+R+4YhH+7w30CgLWN1GNewEPnkD+PadaNXkAevFERkFfDRHJsmF3mc44C/Ax7PWH0T8Gecm+Ic4AZgRgTynaCqb4vIJ4A2EXkF+EuOfkXHfft8/RYAl6nqfnd12dcv16lyrMv+3Pn6eNm3HDwfX0QuBYYBLRmrD/meVfWtXPsHLOMjwEJV3SUi38Cx5kZ43DcM+dKMB5aq6r6MdWFcw0JE9ds7BFMgHlDVUfm2ici7InKcqr7j3uDeK3CoS4BfqOqejGO/4y7uEpH7gX+NQj53aAhV3SAia4AhwM9wzONe7lN2M/B2FPKJyFHAo8AU12xPH7vs65eDzUD/jPe5Pne6z2YR6QU04gw7eNk3aNkQkVE4CrpFVXel1+f5nv2++fUoo6puy3g7F7g1Y9/hWfuuCVu+DMYD38pcEdI1LEQ++cO4dt2wIazyWQakox0uAx4u0PeQsVT3ppn2N4wDckZeBCmfiPRJD/2ISD/g74HX1fHMrcbx2+TdPwT5aoFf4Iz7LsnaFsT1ex44SZwItFqcm0h2tE2m3BcBbe71WgaMFydKayBwEvDfPsjkWTYRGQL8b+ACVX0vY33O79lH2YqR8biMtxcAb7jLjwPnubL2Ac6ju8UeinyujH+L44z+dca6sK5hIZYBX3WjsT4DbHcfpMK4dt0J0kNfDQ1n3PsJYJ37eoy7fhgwL6PfAOBPQCpr/zbgFZwb30+A3mHLB3zWlWGt+3pFxv6fwLkBrgeWAHURyHcpsAd4KaMNDvL64US6/A7nyXKyu24Gzk0ZoN69Huvd6/OJjH0nu/u9CXw+gN9cT7KtAt7NuFbLevqeI5DxP4HXXFlWAydn7Hu5e13XA1+LQj73/XeBW7L2C/wa4jxkvuP+5jfj+LG+AXzD3S7APa7srwDDwrx2mc1SmRiGYRglYUNYhmEYRkmYAjEMwzBKwhSIYRiGURKmQAzDMIySMAViGIZhlIQpEKMqEBEVkQUZ73uJkw12ufv+AsmRldXH839XRHJOchSRZ4s4zi/cLLDrRWS7HMwK+9ki5RnhziHIte1UcbIf7xKRa4s5rlFd2Ex0o1r4EPiUiByuqn8FzsWZlwOAqi4jx2SyXLiTFkUPplMpC1X1fPNX1QtdGYYD/6qqY0o87QhgK06yxWy24mSgvSjHNsM4gFkgRjXxGPA/3eVuWQHEqU/xQ3f5I+6T/lq3fVZEBojIGyLyI+C3QH8RmSAir4jIqyJya8axRovIb919n8g4/ykiskZENojItzP673Bfh4vIU+65XxeR/xIRz/9RETlDRJ4UkRdE5DER+Yi7/l/c460VkZ+IyInAlcB1uawXVX1XVduBvTlOYxgHMAvEqCYWAVPdYatPA/cBn8vR7/vAk6p6oYjUAL1xUlr8Lc7s3m+KyPE4+ZuGAh8AK8TJzPoMTm6nc1R1o4gck3Hck3FqdRwJvCki92pGXjSXM3FqivwB+CXwRQ6m08+Lm17jbpyZ1FtF5B+BmcBVwPXAx1V1t4gcraodIjIP2Kqqs3s6tmHkwxSIUTWo6sviVA6cAPy/Al1HAF9199kHbHdzC/1BDyZyPANYo6pbAETk/+AUAtoHPKVOLRBUNbOuw6PqJDbcJSLvAR/BSVWRyX+r6gb3mAuB/4EHBQJ8EjgVWOWMsFGTcezXgJ+IyMPAQx6OZRieMAViVBvLgDtwspb2LXLfDzOWc6XOTq/Plx9oV8byPnL//7L39ZprSICXVTWXRXU+Tkr3scAUEfmUx2MaRkHMB2JUG/cBM1T1lQJ9nsApBYuI1IiTSj6b3wAtItLPHeaaADyJk7m1xc3ES9YQlhfOdLPEpoAvAb/yuN/rwMfEKbiFiNS60VQ1QLOqtgHX4VRybAA6cYbSDKNkTIEYVYWqblbVu3vodg3QKk5RrRdwhoayj/MOTjGr1TiZWX+rqg+7Q1pXAT8XkbXA4iJF/DVwC0524Y04aex7xB0auwiY5Z73ReAsHCvnpyLyMo7z/1ZV7cRJm3+JiLyY7UQXkWYR2Qx8G/iuiGwWkYYiP4dRBVg2XsOICT6E5hpGqJgFYhiGYZSEWSCGYRhGSZgFYhiGYZSEKRDDMAyjJEyBGIZhGCVhCsQwDMMoCVMghmEYRkn8f2A5NCLw2QTLAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plotData(X, y)\n", + "# Labels and Legend\n", + "plt.xlabel('Microchip Test 1')\n", + "plt.ylabel('Microchip Test 2')\n", + "\n", + "# Specified in plot order\n", + "plt.legend(['y = 1', 'y = 0'], loc='upper right')\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above figure shows that our dataset cannot be separated into positive and negative examples by a straight-line through the plot. Therefore, a straight-forward application of logistic regression will not perform well on this dataset since logistic regression will only be able to find a linear decision boundary.\n", + "\n", + "### 2.2 Feature mapping\n", + "\n", + "One way to fit the data better is to create more features from each data point. In the function `mapFeature` defined in the file `utils.py`, we will map the features into all polynomial terms of $x_1$ and $x_2$ up to the sixth power.\n", + "\n", + "$$ \\text{mapFeature}(x) = \\begin{bmatrix} 1 & x_1 & x_2 & x_1^2 & x_1 x_2 & x_2^2 & x_1^3 & \\dots & x_1 x_2^5 & x_2^6 \\end{bmatrix}^T $$\n", + "\n", + "As a result of this mapping, our vector of two features (the scores on two QA tests) has been transformed into a 28-dimensional vector. A logistic regression classifier trained on this higher-dimension feature vector will have a more complex decision boundary and will appear nonlinear when drawn in our 2-dimensional plot.\n", + "While the feature mapping allows us to build a more expressive classifier, it also more susceptible to overfitting. In the next parts of the exercise, you will implement regularized logistic regression to fit the data and also see for yourself how regularization can help combat the overfitting problem.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Note that mapFeature also adds a column of ones for us, so the intercept\n", + "# term is handled\n", + "X = utils.mapFeature(X[:, 0], X[:, 1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 2.3 Cost function and gradient\n", + "\n", + "Now you will implement code to compute the cost function and gradient for regularized logistic regression. Complete the code for the function `costFunctionReg` below to return the cost and gradient.\n", + "\n", + "Recall that the regularized cost function in logistic regression is\n", + "\n", + "$$ J(\\theta) = \\frac{1}{m} \\sum_{i=1}^m \\left[ -y^{(i)}\\log \\left( h_\\theta \\left(x^{(i)} \\right) \\right) - \\left( 1 - y^{(i)} \\right) \\log \\left( 1 - h_\\theta \\left( x^{(i)} \\right) \\right) \\right] + \\frac{\\lambda}{2m} \\sum_{j=1}^n \\theta_j^2 $$\n", + "\n", + "Note that you should not regularize the parameters $\\theta_0$. The gradient of the cost function is a vector where the $j^{th}$ element is defined as follows:\n", + "\n", + "$$ \\frac{\\partial J(\\theta)}{\\partial \\theta_0} = \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta \\left(x^{(i)}\\right) - y^{(i)} \\right) x_j^{(i)} \\qquad \\text{for } j =0 $$\n", + "\n", + "$$ \\frac{\\partial J(\\theta)}{\\partial \\theta_j} = \\left( \\frac{1}{m} \\sum_{i=1}^m \\left( h_\\theta \\left(x^{(i)}\\right) - y^{(i)} \\right) x_j^{(i)} \\right) + \\frac{\\lambda}{m}\\theta_j \\qquad \\text{for } j \\ge 1 $$\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def costFunctionReg(theta, X, y, lambda_):\n", + " \"\"\"\n", + " Compute cost and gradient for logistic regression with regularization.\n", + " \n", + " Parameters\n", + " ----------\n", + " theta : array_like\n", + " Logistic regression parameters. A vector with shape (n, ). n is \n", + " the number of features including any intercept. If we have mapped\n", + " our initial features into polynomial features, then n is the total \n", + " number of polynomial features. \n", + " \n", + " X : array_like\n", + " The data set with shape (m x n). m is the number of examples, and\n", + " n is the number of features (after feature mapping).\n", + " \n", + " y : array_like\n", + " The data labels. A vector with shape (m, ).\n", + " \n", + " lambda_ : float\n", + " The regularization parameter. \n", + " \n", + " Returns\n", + " -------\n", + " J : float\n", + " The computed value for the regularized cost function. \n", + " \n", + " grad : array_like\n", + " A vector of shape (n, ) which is the gradient of the cost\n", + " function with respect to theta, at the current values of theta.\n", + " \n", + " Instructions\n", + " ------------\n", + " Compute the cost `J` of a particular choice of theta.\n", + " Compute the partial derivatives and set `grad` to the partial\n", + " derivatives of the cost w.r.t. each parameter in theta.\n", + " \"\"\"\n", + " # Initialize some useful values\n", + " m = y.size # number of training examples\n", + "\n", + " # You need to return the following variables correctly \n", + " J = 0\n", + " grad = np.zeros(theta.shape)\n", + "\n", + " # ===================== YOUR CODE HERE ======================\n", + " \n", + " J = (-1/m) * (y.T @ np.log(sigmoid(X @ theta)) + (1 - y.T) @ np.log(1 - sigmoid(X @ theta)))\n", + " reg = (lambda_/(2*m)) * (theta[1:].T @ theta[1:])\n", + " J = J + reg\n", + " \n", + " grad = (1/m) * X.T@(sigmoid(X@theta) - y)\n", + " grad[1:] = grad[1:] + ( (lambda_/m)*theta[1:] )\n", + " \n", + " \n", + " # =============================================================\n", + " return J, grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once you are done with the `costFunctionReg`, we call it below using the initial value of $\\theta$ (initialized to all zeros), and also another test case where $\\theta$ is all ones." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost at initial theta (zeros): 0.693\n", + "Expected cost (approx) : 0.693\n", + "\n", + "Gradient at initial theta (zeros) - first five values only:\n", + "\t[0.0085, 0.0188, 0.0001, 0.0503, 0.0115]\n", + "Expected gradients (approx) - first five values only:\n", + "\t[0.0085, 0.0188, 0.0001, 0.0503, 0.0115]\n", + "\n", + "------------------------------\n", + "\n", + "Cost at test theta : 3.16\n", + "Expected cost (approx): 3.16\n", + "\n", + "Gradient at initial theta (zeros) - first five values only:\n", + "\t[0.3460, 0.1614, 0.1948, 0.2269, 0.0922]\n", + "Expected gradients (approx) - first five values only:\n", + "\t[0.3460, 0.1614, 0.1948, 0.2269, 0.0922]\n" + ] + } + ], + "source": [ + "# Initialize fitting parameters\n", + "initial_theta = np.zeros(X.shape[1])\n", + "\n", + "# Set regularization parameter lambda to 1\n", + "# DO NOT use `lambda` as a variable name in python\n", + "# because it is a python keyword\n", + "lambda_ = 1\n", + "\n", + "# Compute and display initial cost and gradient for regularized logistic\n", + "# regression\n", + "cost, grad = costFunctionReg(initial_theta, X, y, lambda_)\n", + "\n", + "print('Cost at initial theta (zeros): {:.3f}'.format(cost))\n", + "print('Expected cost (approx) : 0.693\\n')\n", + "\n", + "print('Gradient at initial theta (zeros) - first five values only:')\n", + "print('\\t[{:.4f}, {:.4f}, {:.4f}, {:.4f}, {:.4f}]'.format(*grad[:5]))\n", + "print('Expected gradients (approx) - first five values only:')\n", + "print('\\t[0.0085, 0.0188, 0.0001, 0.0503, 0.0115]\\n')\n", + "\n", + "\n", + "# Compute and display cost and gradient\n", + "# with all-ones theta and lambda = 10\n", + "test_theta = np.ones(X.shape[1])\n", + "cost, grad = costFunctionReg(test_theta, X, y, 10)\n", + "\n", + "print('------------------------------\\n')\n", + "print('Cost at test theta : {:.2f}'.format(cost))\n", + "print('Expected cost (approx): 3.16\\n')\n", + "\n", + "print('Gradient at initial theta (zeros) - first five values only:')\n", + "print('\\t[{:.4f}, {:.4f}, {:.4f}, {:.4f}, {:.4f}]'.format(*grad[:5]))\n", + "print('Expected gradients (approx) - first five values only:')\n", + "print('\\t[0.3460, 0.1614, 0.1948, 0.2269, 0.0922]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You should now submit your solutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "#grader[5] = costFunctionReg\n", + "#grader[6] = costFunctionReg\n", + "#grader.grade()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.3.1 Learning parameters using `scipy.optimize.minimize`\n", + "\n", + "Similar to the previous parts, you will use `optimize.minimize` to learn the optimal parameters $\\theta$. If you have completed the cost and gradient for regularized logistic regression (`costFunctionReg`) correctly, you should be able to step through the next part of to learn the parameters $\\theta$ using `optimize.minimize`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Plotting the decision boundary\n", + "\n", + "To help you visualize the model learned by this classifier, we have provided the function `plotDecisionBoundary` which plots the (non-linear) decision boundary that separates the positive and negative examples. In `plotDecisionBoundary`, we plot the non-linear decision boundary by computing the classifier’s predictions on an evenly spaced grid and then and draw a contour plot where the predictions change from y = 0 to y = 1. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.5 Optional (ungraded) exercises\n", + "\n", + "In this part of the exercise, you will get to try out different regularization parameters for the dataset to understand how regularization prevents overfitting.\n", + "\n", + "Notice the changes in the decision boundary as you vary $\\lambda$. With a small\n", + "$\\lambda$, you should find that the classifier gets almost every training example correct, but draws a very complicated boundary, thus overfitting the data. See the following figures for the decision boundaries you should get for different values of $\\lambda$. \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " No regularization (overfitting)\n", + " \n", + " Decision boundary with regularization\n", + " \n", + " \n", + " Decision boundary with too much regularization\n", + " \n", + "
\n", + "\n", + "This is not a good decision boundary: for example, it predicts that a point at $x = (−0.25, 1.5)$ is accepted $(y = 1)$, which seems to be an incorrect decision given the training set.\n", + "With a larger $\\lambda$, you should see a plot that shows an simpler decision boundary which still separates the positives and negatives fairly well. However, if $\\lambda$ is set to too high a value, you will not get a good fit and the decision boundary will not follow the data so well, thus underfitting the data." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train Accuracy: 83.1 %\n", + "Expected accuracy (with lambda = 1): 83.1 % (approx)\n", + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Initialize fitting parameters\n", + "initial_theta = np.zeros(X.shape[1])\n", + "\n", + "# Set regularization parameter lambda to 1 (you should vary this)\n", + "lambda_ = 1\n", + "\n", + "# set options for optimize.minimize\n", + "options= {'maxiter': 100}\n", + "\n", + "res = optimize.minimize(costFunctionReg,\n", + " initial_theta,\n", + " (X, y, lambda_),\n", + " jac=True,\n", + " method='TNC',\n", + " options=options)\n", + "\n", + "# the fun property of OptimizeResult object returns\n", + "# the value of costFunction at optimized theta\n", + "cost = res.fun\n", + "\n", + "# the optimized theta is in the x property of the result\n", + "theta = res.x\n", + "\n", + "utils.plotDecisionBoundary(plotData, theta, X, y)\n", + "plt.xlabel('Microchip Test 1')\n", + "plt.ylabel('Microchip Test 2')\n", + "plt.legend(['y = 1', 'y = 0'])\n", + "plt.grid(False)\n", + "plt.title('lambda = %0.2f' % lambda_)\n", + "\n", + "# Compute accuracy on our training set\n", + "p = predict(theta, X)\n", + "\n", + "print('Train Accuracy: %.1f %%' % (np.mean(p == y) * 100))\n", + "print('Expected accuracy (with lambda = 1): 83.1 % (approx)\\n')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*You do not need to submit any solutions for these optional (ungraded) exercises.*" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/submission.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/submission.cpython-37.pyc new file mode 100644 index 000000000..d28b152ea Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/submission.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/utils.cpython-37.pyc b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..510b1e212 Binary files /dev/null and b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/utils.cpython-37.pyc differ diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data1.txt b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data1.txt new file mode 100644 index 000000000..092e4c0ae --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data1.txt @@ -0,0 +1,100 @@ +34.62365962451697,78.0246928153624,0 +30.28671076822607,43.89499752400101,0 +35.84740876993872,72.90219802708364,0 +60.18259938620976,86.30855209546826,1 +79.0327360507101,75.3443764369103,1 +45.08327747668339,56.3163717815305,0 +61.10666453684766,96.51142588489624,1 +75.02474556738889,46.55401354116538,1 +76.09878670226257,87.42056971926803,1 +84.43281996120035,43.53339331072109,1 +95.86155507093572,38.22527805795094,0 +75.01365838958247,30.60326323428011,0 +82.30705337399482,76.48196330235604,1 +69.36458875970939,97.71869196188608,1 +39.53833914367223,76.03681085115882,0 +53.9710521485623,89.20735013750205,1 +69.07014406283025,52.74046973016765,1 +67.94685547711617,46.67857410673128,0 +70.66150955499435,92.92713789364831,1 +76.97878372747498,47.57596364975532,1 +67.37202754570876,42.83843832029179,0 +89.67677575072079,65.79936592745237,1 +50.534788289883,48.85581152764205,0 +34.21206097786789,44.20952859866288,0 +77.9240914545704,68.9723599933059,1 +62.27101367004632,69.95445795447587,1 +80.1901807509566,44.82162893218353,1 +93.114388797442,38.80067033713209,0 +61.83020602312595,50.25610789244621,0 +38.78580379679423,64.99568095539578,0 +61.379289447425,72.80788731317097,1 +85.40451939411645,57.05198397627122,1 +52.10797973193984,63.12762376881715,0 +52.04540476831827,69.43286012045222,1 +40.23689373545111,71.16774802184875,0 +54.63510555424817,52.21388588061123,0 +33.91550010906887,98.86943574220611,0 +64.17698887494485,80.90806058670817,1 +74.78925295941542,41.57341522824434,0 +34.1836400264419,75.2377203360134,0 +83.90239366249155,56.30804621605327,1 +51.54772026906181,46.85629026349976,0 +94.44336776917852,65.56892160559052,1 +82.36875375713919,40.61825515970618,0 +51.04775177128865,45.82270145776001,0 +62.22267576120188,52.06099194836679,0 +77.19303492601364,70.45820000180959,1 +97.77159928000232,86.7278223300282,1 +62.07306379667647,96.76882412413983,1 +91.56497449807442,88.69629254546599,1 +79.94481794066932,74.16311935043758,1 +99.2725269292572,60.99903099844988,1 +90.54671411399852,43.39060180650027,1 +34.52451385320009,60.39634245837173,0 +50.2864961189907,49.80453881323059,0 +49.58667721632031,59.80895099453265,0 +97.64563396007767,68.86157272420604,1 +32.57720016809309,95.59854761387875,0 +74.24869136721598,69.82457122657193,1 +71.79646205863379,78.45356224515052,1 +75.3956114656803,85.75993667331619,1 +35.28611281526193,47.02051394723416,0 +56.25381749711624,39.26147251058019,0 +30.05882244669796,49.59297386723685,0 +44.66826172480893,66.45008614558913,0 +66.56089447242954,41.09209807936973,0 +40.45755098375164,97.53518548909936,1 +49.07256321908844,51.88321182073966,0 +80.27957401466998,92.11606081344084,1 +66.74671856944039,60.99139402740988,1 +32.72283304060323,43.30717306430063,0 +64.0393204150601,78.03168802018232,1 +72.34649422579923,96.22759296761404,1 +60.45788573918959,73.09499809758037,1 +58.84095621726802,75.85844831279042,1 +99.82785779692128,72.36925193383885,1 +47.26426910848174,88.47586499559782,1 +50.45815980285988,75.80985952982456,1 +60.45555629271532,42.50840943572217,0 +82.22666157785568,42.71987853716458,0 +88.9138964166533,69.80378889835472,1 +94.83450672430196,45.69430680250754,1 +67.31925746917527,66.58935317747915,1 +57.23870631569862,59.51428198012956,1 +80.36675600171273,90.96014789746954,1 +68.46852178591112,85.59430710452014,1 +42.0754545384731,78.84478600148043,0 +75.47770200533905,90.42453899753964,1 +78.63542434898018,96.64742716885644,1 +52.34800398794107,60.76950525602592,0 +94.09433112516793,77.15910509073893,1 +90.44855097096364,87.50879176484702,1 +55.48216114069585,35.57070347228866,0 +74.49269241843041,84.84513684930135,1 +89.84580670720979,45.35828361091658,1 +83.48916274498238,48.38028579728175,1 +42.2617008099817,87.10385094025457,1 +99.31500880510394,68.77540947206617,1 +55.34001756003703,64.9319380069486,1 +74.77589300092767,89.52981289513276,1 \ No newline at end of file diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data2.txt b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data2.txt new file mode 100644 index 000000000..cb43a15c2 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data2.txt @@ -0,0 +1,118 @@ +0.051267,0.69956,1 +-0.092742,0.68494,1 +-0.21371,0.69225,1 +-0.375,0.50219,1 +-0.51325,0.46564,1 +-0.52477,0.2098,1 +-0.39804,0.034357,1 +-0.30588,-0.19225,1 +0.016705,-0.40424,1 +0.13191,-0.51389,1 +0.38537,-0.56506,1 +0.52938,-0.5212,1 +0.63882,-0.24342,1 +0.73675,-0.18494,1 +0.54666,0.48757,1 +0.322,0.5826,1 +0.16647,0.53874,1 +-0.046659,0.81652,1 +-0.17339,0.69956,1 +-0.47869,0.63377,1 +-0.60541,0.59722,1 +-0.62846,0.33406,1 +-0.59389,0.005117,1 +-0.42108,-0.27266,1 +-0.11578,-0.39693,1 +0.20104,-0.60161,1 +0.46601,-0.53582,1 +0.67339,-0.53582,1 +-0.13882,0.54605,1 +-0.29435,0.77997,1 +-0.26555,0.96272,1 +-0.16187,0.8019,1 +-0.17339,0.64839,1 +-0.28283,0.47295,1 +-0.36348,0.31213,1 +-0.30012,0.027047,1 +-0.23675,-0.21418,1 +-0.06394,-0.18494,1 +0.062788,-0.16301,1 +0.22984,-0.41155,1 +0.2932,-0.2288,1 +0.48329,-0.18494,1 +0.64459,-0.14108,1 +0.46025,0.012427,1 +0.6273,0.15863,1 +0.57546,0.26827,1 +0.72523,0.44371,1 +0.22408,0.52412,1 +0.44297,0.67032,1 +0.322,0.69225,1 +0.13767,0.57529,1 +-0.0063364,0.39985,1 +-0.092742,0.55336,1 +-0.20795,0.35599,1 +-0.20795,0.17325,1 +-0.43836,0.21711,1 +-0.21947,-0.016813,1 +-0.13882,-0.27266,1 +0.18376,0.93348,0 +0.22408,0.77997,0 +0.29896,0.61915,0 +0.50634,0.75804,0 +0.61578,0.7288,0 +0.60426,0.59722,0 +0.76555,0.50219,0 +0.92684,0.3633,0 +0.82316,0.27558,0 +0.96141,0.085526,0 +0.93836,0.012427,0 +0.86348,-0.082602,0 +0.89804,-0.20687,0 +0.85196,-0.36769,0 +0.82892,-0.5212,0 +0.79435,-0.55775,0 +0.59274,-0.7405,0 +0.51786,-0.5943,0 +0.46601,-0.41886,0 +0.35081,-0.57968,0 +0.28744,-0.76974,0 +0.085829,-0.75512,0 +0.14919,-0.57968,0 +-0.13306,-0.4481,0 +-0.40956,-0.41155,0 +-0.39228,-0.25804,0 +-0.74366,-0.25804,0 +-0.69758,0.041667,0 +-0.75518,0.2902,0 +-0.69758,0.68494,0 +-0.4038,0.70687,0 +-0.38076,0.91886,0 +-0.50749,0.90424,0 +-0.54781,0.70687,0 +0.10311,0.77997,0 +0.057028,0.91886,0 +-0.10426,0.99196,0 +-0.081221,1.1089,0 +0.28744,1.087,0 +0.39689,0.82383,0 +0.63882,0.88962,0 +0.82316,0.66301,0 +0.67339,0.64108,0 +1.0709,0.10015,0 +-0.046659,-0.57968,0 +-0.23675,-0.63816,0 +-0.15035,-0.36769,0 +-0.49021,-0.3019,0 +-0.46717,-0.13377,0 +-0.28859,-0.060673,0 +-0.61118,-0.067982,0 +-0.66302,-0.21418,0 +-0.59965,-0.41886,0 +-0.72638,-0.082602,0 +-0.83007,0.31213,0 +-0.72062,0.53874,0 +-0.59389,0.49488,0 +-0.48445,0.99927,0 +-0.0063364,0.99927,0 +0.63265,-0.030612,0 \ No newline at end of file diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/submission.py b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/submission.py new file mode 100644 index 000000000..a3b338919 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/submission.py @@ -0,0 +1,105 @@ +from urllib.parse import urlencode +from urllib.request import urlopen +import pickle +import json +from collections import OrderedDict +import numpy as np +import os + + +class SubmissionBase: + + submit_url = 'https://www-origin.coursera.org/api/' \ + 'onDemandProgrammingImmediateFormSubmissions.v1' + save_file = 'token.pkl' + + def __init__(self, assignment_slug, part_names): + self.assignment_slug = assignment_slug + self.part_names = part_names + self.login = None + self.token = None + self.functions = OrderedDict() + self.args = dict() + + def grade(self): + print('\nSubmitting Solutions | Programming Exercise %s\n' % self.assignment_slug) + self.login_prompt() + + # Evaluate the different parts of exercise + parts = OrderedDict() + for part_id, result in self: + parts[str(part_id)] = {'output': sprintf('%0.5f ', result)} + result, response = self.request(parts) + response = json.loads(response.decode("utf-8")) + + # if an error was returned, print it and stop + if 'errorMessage' in response: + print(response['errorMessage']) + return + + # Print the grading table + print('%43s | %9s | %-s' % ('Part Name', 'Score', 'Feedback')) + print('%43s | %9s | %-s' % ('---------', '-----', '--------')) + for part in parts: + part_feedback = response['partFeedbacks'][part] + part_evaluation = response['partEvaluations'][part] + score = '%d / %3d' % (part_evaluation['score'], part_evaluation['maxScore']) + print('%43s | %9s | %-s' % (self.part_names[int(part) - 1], score, part_feedback)) + evaluation = response['evaluation'] + total_score = '%d / %d' % (evaluation['score'], evaluation['maxScore']) + print(' --------------------------------') + print('%43s | %9s | %-s\n' % (' ', total_score, ' ')) + + def login_prompt(self): + if os.path.isfile(self.save_file): + with open(self.save_file, 'rb') as f: + login, token = pickle.load(f) + reenter = input('Use token from last successful submission (%s)? (Y/n): ' % login) + + if reenter == '' or reenter[0] == 'Y' or reenter[0] == 'y': + self.login, self.token = login, token + return + else: + os.remove(self.save_file) + + self.login = input('Login (email address): ') + self.token = input('Token: ') + + # Save the entered credentials + if not os.path.isfile(self.save_file): + with open(self.save_file, 'wb') as f: + pickle.dump((self.login, self.token), f) + + def request(self, parts): + params = { + 'assignmentSlug': self.assignment_slug, + 'secret': self.token, + 'parts': parts, + 'submitterEmail': self.login} + + params = urlencode({'jsonBody': json.dumps(params)}).encode("utf-8") + f = urlopen(self.submit_url, params) + try: + return 0, f.read() + finally: + f.close() + + def __iter__(self): + for part_id in self.functions: + yield part_id + + def __setitem__(self, key, value): + self.functions[key] = value + + +def sprintf(fmt, arg): + """ Emulates (part of) Octave sprintf function. """ + if isinstance(arg, tuple): + # for multiple return values, only use the first one + arg = arg[0] + + if isinstance(arg, (np.ndarray, list)): + # concatenates all elements, column by column + return ' '.join(fmt % e for e in np.asarray(arg).ravel('F')) + else: + return fmt % arg \ No newline at end of file diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/utils.py b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/utils.py new file mode 100644 index 000000000..505cce7b3 --- /dev/null +++ b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/utils.py @@ -0,0 +1,147 @@ +import sys +import numpy as np +from matplotlib import pyplot + +sys.path.append('..') +from submission import SubmissionBase + + +def mapFeature(X1, X2, degree=6): + """ + Maps the two input features to quadratic features used in the regularization exercise. + + Returns a new feature array with more features, comprising of + X1, X2, X1.^2, X2.^2, X1*X2, X1*X2.^2, etc.. + + Parameters + ---------- + X1 : array_like + A vector of shape (m, 1), containing one feature for all examples. + + X2 : array_like + A vector of shape (m, 1), containing a second feature for all examples. + Inputs X1, X2 must be the same size. + + degree: int, optional + The polynomial degree. + + Returns + ------- + : array_like + A matrix of of m rows, and columns depend on the degree of polynomial. + """ + if X1.ndim > 0: + out = [np.ones(X1.shape[0])] + else: + out = [np.ones(1)] + + for i in range(1, degree + 1): + for j in range(i + 1): + out.append((X1 ** (i - j)) * (X2 ** j)) + + if X1.ndim > 0: + return np.stack(out, axis=1) + else: + return np.array(out) + + +def plotDecisionBoundary(plotData, theta, X, y): + """ + Plots the data points X and y into a new figure with the decision boundary defined by theta. + Plots the data points with * for the positive examples and o for the negative examples. + + Parameters + ---------- + plotData : func + A function reference for plotting the X, y data. + + theta : array_like + Parameters for logistic regression. A vector of shape (n+1, ). + + X : array_like + The input dataset. X is assumed to be a either: + 1) Mx3 matrix, where the first column is an all ones column for the intercept. + 2) MxN, N>3 matrix, where the first column is all ones. + + y : array_like + Vector of data labels of shape (m, ). + """ + # make sure theta is a numpy array + theta = np.array(theta) + + # Plot Data (remember first column in X is the intercept) + plotData(X[:, 1:3], y) + + if X.shape[1] <= 3: + # Only need 2 points to define a line, so choose two endpoints + plot_x = np.array([np.min(X[:, 1]) - 2, np.max(X[:, 1]) + 2]) + + # Calculate the decision boundary line + plot_y = (-1. / theta[2]) * (theta[1] * plot_x + theta[0]) + + # Plot, and adjust axes for better viewing + pyplot.plot(plot_x, plot_y) + + # Legend, specific for the exercise + pyplot.legend(['Admitted', 'Not admitted', 'Decision Boundary']) + pyplot.xlim([30, 100]) + pyplot.ylim([30, 100]) + else: + # Here is the grid range + u = np.linspace(-1, 1.5, 50) + v = np.linspace(-1, 1.5, 50) + + z = np.zeros((u.size, v.size)) + # Evaluate z = theta*x over the grid + for i, ui in enumerate(u): + for j, vj in enumerate(v): + z[i, j] = np.dot(mapFeature(ui, vj), theta) + + z = z.T # important to transpose z before calling contour + # print(z) + + # Plot z = 0 + pyplot.contour(u, v, z, levels=[0], linewidths=2, colors='g') + pyplot.contourf(u, v, z, levels=[np.min(z), 0, np.max(z)], cmap='Greens', alpha=0.4) + + +class Grader(SubmissionBase): + X = np.stack([np.ones(20), + np.exp(1) * np.sin(np.arange(1, 21)), + np.exp(0.5) * np.cos(np.arange(1, 21))], axis=1) + + y = (np.sin(X[:, 0] + X[:, 1]) > 0).astype(float) + + def __init__(self): + part_names = ['Sigmoid Function', + 'Logistic Regression Cost', + 'Logistic Regression Gradient', + 'Predict', + 'Regularized Logistic Regression Cost', + 'Regularized Logistic Regression Gradient'] + super().__init__('logistic-regression', part_names) + + def __iter__(self): + for part_id in range(1, 7): + try: + func = self.functions[part_id] + + # Each part has different expected arguments/different function + if part_id == 1: + res = func(self.X) + elif part_id == 2: + res = func(np.array([0.25, 0.5, -0.5]), self.X, self.y) + elif part_id == 3: + J, grad = func(np.array([0.25, 0.5, -0.5]), self.X, self.y) + res = grad + elif part_id == 4: + res = func(np.array([0.25, 0.5, -0.5]), self.X) + elif part_id == 5: + res = func(np.array([0.25, 0.5, -0.5]), self.X, self.y, 0.1) + elif part_id == 6: + res = func(np.array([0.25, 0.5, -0.5]), self.X, self.y, 0.1)[1] + else: + raise KeyError + yield part_id, res + except KeyError: + yield part_id, 0 \ No newline at end of file diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 000000000..f3d9922e4 --- /dev/null +++ b/ReadMe.md @@ -0,0 +1 @@ +The solutions are in the Phase 3(Summer) folder as Week_3 folder