From f18940a294eada346d61385721ab80bace66bc5c Mon Sep 17 00:00:00 2001 From: Tanny2109 <58669933+Tanny2109@users.noreply.github.com> Date: Sun, 12 Apr 2020 00:07:12 +0530 Subject: [PATCH 1/9] Week_2_Solutions --- .../Tanmay_190106065_Week_2/Week_2 (1).ipynb | 367 ++++++++++++++++++ .../Week_2_optional.ipynb | 270 +++++++++++++ .../Tanmay_190106065_Week_2/data1.txt | 97 +++++ .../Tanmay_190106065_Week_2/data2.txt | 47 +++ 4 files changed, 781 insertions(+) create mode 100644 Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2 (1).ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/Week_2_optional.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data1.txt create mode 100644 Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Tanmay_190106065_Week_2/data2.txt 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": "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\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 From 7d8a679ed06a786c96ee6c98a5e095474bb398ce Mon Sep 17 00:00:00 2001 From: Tanny2109 <58669933+Tanny2109@users.noreply.github.com> Date: Sun, 12 Apr 2020 00:08:42 +0530 Subject: [PATCH 2/9] Create ReadMe.md --- ReadMe.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 ReadMe.md diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 000000000..300058ec5 --- /dev/null +++ b/ReadMe.md @@ -0,0 +1 @@ +The solutions are in the Week_2 folder as a jupyter notebook From f5ebe47bec7be599841096ec6741992ea01c2741 Mon Sep 17 00:00:00 2001 From: Tanny2109 <58669933+Tanny2109@users.noreply.github.com> Date: Mon, 20 Apr 2020 02:11:04 +0530 Subject: [PATCH 3/9] Add files via upload --- .../__pycache__/submission.cpython-37.pyc | Bin 0 -> 3496 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 4298 bytes .../Week_3/Tanmay_190106065/data1.txt | 100 ++ .../Week_3/Tanmay_190106065/data2.txt | 118 ++ .../Week_3/Tanmay_190106065/exercise2.ipynb | 1145 +++++++++++++++++ .../Week_3/Tanmay_190106065/submission.py | 105 ++ .../Week_3/Tanmay_190106065/utils.py | 147 +++ 7 files changed, 1615 insertions(+) create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/submission.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data1.txt create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/data2.txt create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/exercise2.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/submission.py create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/utils.py 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 0000000000000000000000000000000000000000..d28b152eae8ee6f020ea614085b5ac5bd8145276 GIT binary patch literal 3496 zcmai1&2QYs73c7KxvRC}sQwDt5``6bgKFi%Nt+sm6F9O17m4CpPVF#CSbAqxp~WTF zGhACDxV=Ke{Z;w93e%ym^Y6z!#8i<{NBgjSy~DV zJpcIeyRZM<*Y>Zi%6FKPZ%$<0V zx0v&zj-Csm;A4Y3-2K+z?tvL~xySu)ji|@1Eo0F69(x!A)^uhv6Zxp%0xuq3imAvq z!FNBCTu8w;(os30#mA2c=0h~K0V0fuaU(K0i!5$JEsNXO#A!E<+{LCI@9+TQKJW4# z`VL>>ee?l82W6I<{?_d2BvmRc@;iwV)x&Sfa;k2wufKfxa;=c*PMQx##Y`$8lVKru z){|+vUgR5MlH~k>EOulvnWXv7{mDe|G%3ZsLQYO)s^N=YRh_cf75Q+wn~liQ^iWU7 z`3Oz@5~OCe5gWA$ierJAnp&lOKyOaz>fYl9)MlFlzd4sc>z#Ze@-kN0Y^MpPi7ewh znF!T5Spm%(NAE0cY|wPZvwT$IoT{-oOxxIr+))Fov6aZi(#0C-f&AT&z=!eb*B{;7 z{v5|v+mDiblI(A92(?=l)9p_`iSOTk^l_4IKNey)zOk)NOgNnGH+~$ad0NKtGNh;; zh{4>&&u7)eQ{#}qhsUc&j8@|5qLDJ%G;d?H1R!hU8M|N{0Ft$FXdW5ND6Ioy&i3A} zjSb_gpKY6Sa}FGoz(H*tm?^7S>D1-{yJbB8#bf%)t=SR7I%{s1-l1RHhaGMoVQg-5 zr?z)pS(Qc&{<7YO42_+Eqjq1-`z^osq-NOl!5rW5&Sj&yG{&cwKxS;QKeo0_e~4 zH|v1EdHkgY#mZ)NJhz* zdd#+ZpaEKst+1=i2Zh(Jobg&M=)`3m$m*bJm;D!*67G74SoX|1V)9R=O&n(j=3iIl zaLW@{gfl)yj`_Xu(0F2$9ye<^$^je_ZeZ=2>W}E{%g80K@$RlECE}!IQe5=Wkafsa z4}*3;IEcr+1B$0UIA3#}*ELfATxisRMpv{(U3?2!&pKlhVZvm_sb1Q-g3ZR1PpjV` zAci`ohGRe=%o0_GYBn0dQ^vCl>~S&)udS-V2jR6Z*7L#5urZ{@F8iWk`_;uyC^(1L zkVDceOgP77E3B%#N0cbA+Ss3D}YRDw|n(2^K&fubvgU@VkwMevf#eU;ZI2UJi=*F=UWm<|!9DfN>N@IytSI!vY zwPl-wE~!ohP#iZw98U^9%ZTsA@$*@dwKMX4h?8qXs6vrfi4fc+U4*s<`~FY;6~FJ>diDhLq%Z-AETSHQpt@isf}lKKGtQ9ZnI18pp~xEp z-trzd51l_7W2S3azckxGdFXNHh;1M+9_NMao4#}eP+eUR|p~di4R*aHN-5#DSYuG(1WP?QePG&x|mea z|9s5A^vz}SswruFu+;S6v03_b2(zKgC3TzrVrb!F+QH>IW?J{}j*2W3Z4uoje{$+I&Z8NmGcHL%% zFgk@phg(OCQNJA)yKdb@y}}({e9G!2?())8qh7va@G_ryYVaB19$57m&K?-m*<;8z zHmWRhdV^jVtD#w|p*8oQzugUzB#5IMej<(?a5XLBMWRL#`6hDm3lyo*!4h|Ec~P-L z6D^CgW#fpo*~p42MB`@O+P|%AZl-9THxA5O#`|xM?ERXuQ&2%+pj;dkQtPmg8mXNY zmW*>o%F@C)V-fP0@%Zi|)sR5RI$Xo zUb5r&gm<~S;;mL`O_B10NUtfHF4k*-*AGMN*zfj2k&I{GT>C%d`(7e29iM3Alu2l< zl-{O;N}v|fiP!BX%G<^f;usU`-b;evAU~0vSdvr{GINkR{jOfMTAd0(z zA9^|S%cu9E8g=~(6xj8Z4E9NZ_;)=S@8Lv!?4}uq{VuG4i=IFeW@ zZZDBE`#)Fiax=-WkBjIpF6Tf&P%N#S~IEBsiehDrA6y-fpW8{qtR@A%N&(P<^3z5 z6gA}%C^Mr9M$M@+X*sPNn9z@zx@jq$X_;4z=j`!3Q0{Y}oZFcnxvJ1Pn>uMRb-B~V z{`eU_|IDE^b{29vWLc>T4bjSMs7NRMH2j0X6{tCVDDAPZCRMjYMy(cpGnhDf#dkBz(Nr!RdQ_Z|aV;F^2xO2$Pq+ z6SPIMZ^#00<=CPErfjs4k^cUv#?j2Z&bxt9f)6VjvGV*$>+CHtw%QwGt3AGmVaJ?` ze%G;p`Eih|J=#(x98Mhgp&QcHEblJFc{HmEy9ZtRc0 zgN*ev_9SCNiRjbF%zhvjQK_3xI@)FA#Vgdes0EG{Inm=4^dy&17_XGA3+9};Zh2P4 znrCxt-kO7FSTGmhB`%qcy~N~I@HL5fl63HkM)ENVVbmGN)WYi60?{9b$H3R2xDnqX zvP)j$2<=5f_t?6p^l}ey&*X(?X1%OOl@SCx@Ha*BAY#(ep65Jyl;W;^I3p@YtUmjZ z(PBDOcI$I_pj7Gt0SGSu%AFD1+yR^&FOmbG_#IQZ8^ierLAx6V+`A0~Bgh&q-JQV8yHj}a zZpMike(kg#T5BL8RWII`f(K1Cyo7Oi01Ny$ZHN|j`G0Xu1P{+m@b2{!ysMfBOZq(l zTWmBCNvcKzBs&pdt6uK;QZ*vPYzcy$Qlrrffo6@yiH*tYq$J98X$)pge-0a-$+cgb z$en7Kv`gUzSyu9G=>0i^tJQj@=f!jOzBgin&+sHc5VCBH;A-(uG3A>nJyXmBdZ7Ff zGz+wPYAWl{9-j_^0^&d}99ZD`4Y-Qn`so*Q!Li$TycEDa1h)(B-<`&NV1i>493^o4 z`7{oim6s1}@Ld7l4ER3(Z+!IJ0N`QjZ&A1VeKGi+l(DQj@&*X?qPCL&kVpeF3$8R{?__ox7X9y_L{
YKhx$Gjc#~hRwbj<}6*#u56*^`z~JxexA=Gkau0gT)vP6A!|9TXvQQb9pmx_}K_F)JnA16I;Dpvg)GcqYI-^agr`6t^n^ z>@e7#cpG2sND@;oC)0<$Bv{gpM1!-I`ht#WJ$fOTdo|a`TZC)+db&_(#jLQ3RsOnr F^\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": "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\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/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 From b8ab6e0122c037801f267fe38ea58476180ba4bf Mon Sep 17 00:00:00 2001 From: Tanny2109 <58669933+Tanny2109@users.noreply.github.com> Date: Mon, 20 Apr 2020 02:12:15 +0530 Subject: [PATCH 4/9] Update ReadMe.md --- ReadMe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReadMe.md b/ReadMe.md index 300058ec5..f3d9922e4 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1 +1 @@ -The solutions are in the Week_2 folder as a jupyter notebook +The solutions are in the Phase 3(Summer) folder as Week_3 folder From ff811cd5e3981b8dee616ad7baaafda95310b2b8 Mon Sep 17 00:00:00 2001 From: Tanny2109 <58669933+Tanny2109@users.noreply.github.com> Date: Mon, 20 Apr 2020 02:37:08 +0530 Subject: [PATCH 5/9] Delete exercise2.ipynb --- .../Week_3/Tanmay_190106065/exercise2.ipynb | 1145 ----------------- 1 file changed, 1145 deletions(-) delete mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/exercise2.ipynb diff --git a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/exercise2.ipynb b/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/exercise2.ipynb deleted file mode 100644 index cd2adce89..000000000 --- a/Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/exercise2.ipynb +++ /dev/null @@ -1,1145 +0,0 @@ -{ - "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": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd3hUZdbAf+9MSIaQQgslJEAgNCkJEBVECQnNgoCFXVxXwF1EQVSKiN/K0m3gAnYFFJBVQGAJxUYLBESUoEEUQUB6Cy0hAQIkOd8fKSYhfdqdyft7nnkmc+/ce8/cybznPec9RYkIGo1Go6l4mJwtgEaj0Wicg1YAGo1GU0HRCkCj0WgqKFoBaDQaTQVFKwCNRqOpoGgFoNFoNBWUEhWAUupjpVSiUuqXPNuqK6XWKaX2Zz9Xy96ulFJvKaUOKKV+Vkq1s6fwGo1Goyk/pbEA5gN3F9j2IrBBRJoAG7JfA9wDNMl+DAHet42YGo1Go7E1JSoAEYkDLhTY3AdYkP33AqBvnu2fSBbbgapKqbq2Elaj0Wg0tsOjnMfVFpFTACJySilVK3t7PeBYnvcdz952quAJlFJDyLISqFKlSvvmzZuXUxTIzMzkzJnTnD17lhs30qlUyYOAgABq166DyaSXOTQajXuyc+fOcyISUN7jy6sAikIVsq3QWhMiMhuYDRARESHx8fHlumBqaipdunSgefOLTJqUTkgIHDqUzqJFF0lOrs6mTdvx8fEp17k1Go3GyCiljlhzfHmnx2dyXDvZz4nZ248DwXneFwScLL94JTNjxnT8/Q8yblwaoaFgNkNoKIwbl4a//0FmzJhuz8trNGUiOTmZBx54gOTkZGeLotGUWwGsAgZm/z0QWJln+4DsaKAOQHKOq8hezJnzHo88koYqYHsoBf37pzF3rmPWofUPW1MaVq1aRUxMDKtXr3a2KBpNqcJAFwHfAc2UUseVUv8EXgO6K6X2A92zXwN8CfwBHADmAMPsInUeTp48T0hI4ftCQrL2OwL9w9aUho8//jjfs0bjTJQRykEXtgZw48YNjh8/TlpaWrHHHj9+DH//TCpVunnfjRuQnGwiKCj45p025syZM6SlpWGxWKhdu7bdr1cRsFgsBAUFUamwL7cMJCcnM2jQIObPn4+/v7+NpCsd3bp1Y8OGDbmvPT09uX79eu5zDl27dmX9+vUOlU3j+iildopIRHmPt/UisM04fvw4vr6+NGzYEFXQv5MHf38/UlJOU7eu5HMDicCpU4qgoDoEBtazuXz79u0jJSUl97Wvry8+Pj4opbh8+XK+7c2aNbP59d0dEeH8+fMcP36ckKJMvCIoOODntc7+/ve/20niwnnppZf47rvvuHLlCkDuoJ938Pf29mbcuHEOlassOFOBauyLYWMk09LSqFGjRrGDP0Dt2nXIyLBw6pQiLS1r4E9Lyxr8MzIs1K5dxy7y1a1bN1+IaY4lldeiMplMBAYG2uX67o5Siho1apRoARZGQXecM90uUVFRrFmzBm9v70L3e3t788UXX9ClS5cSz+WsdSbt3nRfDKsAgBIHfwCz2UyzZs3x9a3DqVMe/P47nDrlga9vHZo1a47ZbLaLbH5+foSGhhaZZ2AymWjSpAm+vr52uX5FoDTff2E8++yzADz22GMopdi2bRsA3377LUqp3Ee3bt1sJmtxREVFsWTJEiwWS77tFouFJUuWlGrwB+cNxHrdwn0xtAIoLWazmcDAejRoEMLLL79MgwYhBAbWs9vgn4Ofnx+NGjW6aaBSStGoUSM9+DuIbt265RvYU1NT8+03gtslKSkJDw8PTCYTlStXxmQy4eHhQVJSUqnP4aiBuOD9dLYC1dgPl1EAGRkZnDx5gp9/TiA+Pp6ff07g5MkTZGRk5L7HHjOkFStWoJRi7969he4fOnRo7iJfjjWglMonV15OnjzJww8/DEBCQgJffvll7r5Nmzbl/tjKQsOGDTl37lyZj3MXXnrppXwulvT09GLfXxa3i6346KOPuHLlCmFhYaxcuZKwsDCuXLlS7GDurIG44P00ggLV2AeXUAAZGRns27c3e7E3naZNoW7ddFJSTrNv397cwdYeM6RFixZx5513snjx4kL3p6WlISJ4e3sTGhqKt7c3mZmZRQ7IgYGBLFu2DLCdAqjolORnz0tZ3S62wt/fn+nTpxMfH0/37t3ZsWMH06ZNw8/Pr8hjnDUQ23LdQmNwRMTpj/bt20tB9uzZk/v3iRPHZe/eeElO3iGXLv35iIy8VcgqNSGAeHp65nvOeXTt2vWm85eGlJQUCQwMlH379kmzZs1ERCQzM1OefvppadGihdx7770SGRkpc+bMkczMTGnQoIG8+OKL0r59e2nVqpXs3LlTevToIY0aNZL3339fREQOHTokLVu2lGvXrklwcLDUrFlTwsLC5LXXXpPatWtLYGCghIWFSVxcnCQmJsqDDz4oEREREhERIVu3bhURkXPnzkn37t0lPDxchgwZIvXr15ezZ8+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": "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\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 -} From e933b3d958d2e7ed5ae4a319687061e1ccfb15c5 Mon Sep 17 00:00:00 2001 From: Tanny2109 <58669933+Tanny2109@users.noreply.github.com> Date: Mon, 20 Apr 2020 02:38:55 +0530 Subject: [PATCH 6/9] Week_3 solution added --- .../Week_3/Tanmay_190106065/Week_3.ipynb | 1145 +++++++++++++++++ 1 file changed, 1145 insertions(+) create mode 100644 Phase 3 - 2020 (Summer)/Week_3/Tanmay_190106065/Week_3.ipynb 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": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2de3hU5bXwf2sGyBCDQSC1UqJQoV65SWyl7YGEYKVfOQXb2gO13o6XeuspDfVyKocYxK9VqLY+52gLUpG0X/Bo2wge28MdrNrWYL1bSy2ICMpFiaTIJWF9f8yekISZZGYysy8z6/c877Nn7z177zV7ZvZ63/Wui6gqhmEYhgEQ8loAwzAMwz+YUjAMwzBaMaVgGIZhtGJKwTAMw2jFlIJhGIbRSg+vBegOAwYM0MGDB3sthmEYRqDYuHHjblUtibcv0Eph8ODBNDQ0eC2GYRhGoBCRtxLtM/ORYRiG0YopBcMwDKOVrCkFEfm5iOwUkVfabOsnIitFZJOzPMHZLiJyn4j8TUReEpFzsiWXYRiGkZhsjhQWA5M6bLsVWK2qw4DVzjrAF4FhTrsGeCCLchmGYRgJyJpSUNUNwPsdNk8BHnZePwxMbbN9iUb5A9BXRE7KlmzdoampiTlzqiktLSEcDlFaWsKcOdU0NTV5LZphGEa3cdv76ERV3QGgqjtE5GPO9k8Ab7d53zZn246OJxCRa4iOJjj55JOzK20HmpqaKC8/j+LiN6muPsCQIbB5827q6u5m2bJfsW7dHygqKnJVJsMwjEzil4lmibMtbvpWVV2gqmWqWlZSEtfNNmvcc888iovfZNasAwwdCuEwDB0Ks2YdoLj4Te65Z56r8hiGYWQat5XCezGzkLPc6WzfBpS2ed8gYLvLsnXJwoX3M336AaSDChOBadMO8OCD2Z0KaWxs5MILL6SxsTGr1zH8hX3vhpu4rRSWAZc5ry8DHm+z/VLHC+k8oDFmZvIT27fvYciQ+PuGDInuzybLli2jvr6e5cuXZ/U6hr+w791wk2y6pNYBzwKnicg2EbkS+CFwvohsAs531gGeBP4O/A1YCFyfLbm6w8CB/dm8Of6+zZuj+7PJz3/+83ZLwx287qnb9264STa9j6ar6kmq2lNVB6nqIlXdo6qVqjrMWb7vvFdV9QZVPVVVh6uqL3NXXH319dTVRehYrE4Vli6NcNVV12X0ehMnTkREWtszzzwDwNNPP91u+8SJEzN63XynoxJwu6cetO/da6VpZBa/TDQHgqqqm2hsPJW5cyNs2gTNzbBpE8ydG6Gx8VSqqm7K6PVuu+02CgsLW9cPHTrUbglQWFjIrFmzMnrdfKejEnC7p56J793NB7WZt3IMVQ1sGzNmjLrNvn37tKZmtpaWlmg4HNLS0hKtqZmt+/bty8r11qxZo4WFhUrUG6tdKyws1LVr12bluvlM3759293nXr16tVvGWmVlZdZk6O73vmTJEgW0trY2azLGKC8vV0ArKiqyfi0jMwANmuC56vmDvTvNC6XgBcuXL9dIJNLuwRCJRHT58uVei5YTVFZWtru3PXr0iPswdlshd+d7z+aDuuP98kJpGt2jM6Vg5qME+Clyee/evfTo0YNQKETv3r0JhUL06NGDvXv3ui5LLtLRXNPc3Nzp+wsLC/mf//kfysvLsypXKt+7m/MQZtbMcRJpiyC0bI0U9u3bp2PGnKUTJkR04UJ01Sp04UJ0woSIjhlzVtZMRYkoLy/XUCiko0eP1hUrVujo0aM1FArZcD2DdGauwaMRWirfezLyZ3J0Y2bNYIONFFLDb5HLxcXFzJs3j4aGBs4//3yee+457r77bo4//nhX5chlKioqeOSRR4hEIsfs82qElsr3XlFRwRNPPNGuB9+WTI9uEt2vSCTCI488kvVRlJFFEmmLILRsjRQGDRqgCxeia9ce2xYsQEtLS7JyXcNbamtrtaioSEOhkPbu3bu153vKKacEZoTm5vxTx/sVCoW0qKjIlclto3tgI4XU8Dpy2fCGRYsWsX//fkaOHMnjjz/e2iMfMmRIYEZobs4/dbxfI0eOZP/+/RZkF3BMKcTB68hlwxs6mmvef/995s+fT3FxMQDhcJiZM2dSX1/vsaSJcfNBbWbN3ESiI4lgUlZWpg0NmQ9+njOnmvXr72bWrPbJ71SjgWrjx9/M7Nk1Gb+uYSRLY2Mjl19+OYsXL25VWgBTp05l3LhxzJgxg1AoREtLCz/+8Y956qmnfK3MDHcRkY2qWhZ3nymFY2lbN2HatFjdhGgqi8bGU61uguE5tbW1XHrppdTW1vLNb37Ta3GMgNGZUjDzURyKiopYt+4PjB9/M3fcUcKkSSHuuKOE8eNvNoVg+AJLkmdkCxspGEYAmDhxIqtXr25d79WrF4cOHWpdxqisrGTVqlVeiBiXRGYuw1tspGAYASeoUcSWLC94mFIwjADgdnBapjAzV/AwpWAYASEIUcSJcjCtW7fOl7UgjGMxpWAYAcLvyRETmbnazl360cxlHMWUgmEEiGwGp2WiME9QzVzGUUwpGEaAyGYUcaYmhe+88072798fd9/+/fupqKgwE5KPMZdUw8hj2rqMTp06lXXr1lFRUcGaNWvSPufatWuZNGlSO8+ojtiIwVt855IqIt8RkVdE5FURmeFs6yciK0Vkk7M8wQvZDH9gxeCzz8SJE+nbty/19fX07ds3Y4V5KioqOOOMMxLuN4Xgb1xXCiJyNnA18GlgJDBZRIYBtwKrVXUYsNpZN/IU82/PPrfddhuh0NFHQCZjHwYPHsyVV155jKdUKBTyjaeUER8vRgpnAH9Q1f2q2gysBy4EpgAPO+95GJjqgWxGB7zqsZt/e3Zo6zI6YcKEdkqhI93p0dfX11NeXn6Mp1RhYaFvPKVSIZ9Grl4ohVeAcSLSX0QKgf8DlAInquoOAGf5sXgHi8g1ItIgIg27du1yTeh8xa0eu5s1hvOZZOtR9+zZs9s9+lyqt5BPI1fXlYKqvg7cBawEfge8CHReKb398QtUtUxVy0pKSrIkpRHDrR57UNM4BI2uXEYBRISCgoJu9+hzqd5CXo1cE5Vkc6sB/xe4HngDOMnZdhLwRlfHZqscZz5TWVnZrpRjr1692i1jrbKyMuPXtmLw7hGvbKeI6Jw5c3T06NEqIjpgwADdu3ev16K6zt69e3XAgAGe/Q/cAL+V4xSRjznLk4GvAHXAMuAy5y2XAY97IVuQyYTd08seexDSOOQKbSOjQ6EQIsJxxx3HkCFDeO655/iXf/kXdu/enRfmko4sW7aM3bt306tXr9Zt+TRy9Sp47Vci8hqwHLhBVT8AfgicLyKbgPOddSMFMmH39Doi1e9pHHKFtvb+3/3ud4waNarV3h8Oh3n33XeBPDGXdCD2mc8880xP/geeT2onGkIEoZn5qD3l5eUKaEVFRbfPFc+8EIlEdPny5RmQNDHl5eUaCoV09OjRumLFCh09erSGQqGMfCbjKFOmTNEf/ehH2tLSoqqqEyZMyGlzSWckazJ163+wZMkSBbS2tjZr18Bv5iMjM2TTY8erHrsXk5Oe98w8oL6+nqqqqlaX1FmzZuXtRH8yJlOIFjZy43/g+aR2Im0RhJbvI4XOJmZjLd0J2nzqsbvRMwsCy5Yt03A4nJcT/V39l4YOHZq1/4EXzh10MlLw/MHenZbvSkE1ex47Hc0Lzc3NOn/+fJ0yZUoGpfcHmTS7ZYK9e/fq1KlTXff8iSnHnj17um429APxTKahUEivvPLKrP4Pstm5S4QphRzHK/t/UPHS7TYZvBq5xJRjOBzWUCikvXv31lAopEVFRXkxiqqtrdWioiJPPrvb7tidKQWbU8gBzGMnNfweKOeWTbm8vDzunFRLSwtHjhzho48+4siRIzQ1NeWFF5KXEdh+csc2pZAD5FI6ATfw2u22I16l+Bg7dmy79XiprgsLC7n22msDGYWcKl5HYPumc5doCBGEZuajKPlk/88kfjG7eWFTVj1qLgqFQnk5uew33HTuwOYUDONYvLQhd8QNm3KiuZQePXq47otvHIubnTtTCoYRB7+53WZ75JLMiASiOZDyZXI5X+lMKdicgpG3eG1D7ki2bcpdzaWICPPmzWuX8sLIQxJpiyA0GykYuYRbI5d4I5IePXro448/rqo2J5UPYCMFw/A/bo1c4o1IIpEIH374IQDhcJiZM2dSX1+f0esawUCiSiOYlJWVaUNDg9diGEagqKioYMOGDYwcOZK77rqLW265hRdffJHx48ezZs0ar8UzXEBENqpqWbx9NlIwjDzDb3Mphr+wkYJhGEaeYSMFw8gy+Zh+28hNTCkYRgbIRNU7w/ADphQMIwN4XhjFMDKEKQXDSAOvktgZRrYxpWAYaeD39NuGkS6eKAUR+a6IvCoir4hInYhERGSIiPxRRDaJyCMi0ssL2QwjGfyWftswMoXrSkFEPgH8G1CmqmcDYWAacBdwr6oOAz4ArnRbNsNIBT8VRjGMTOGV+agH0FtEegCFwA5gAvCYs/9hYKpHsgWKpqYm5sypprS0hHA4RGlpCXPmVNPU1OS1aHmBbwqjYG6xRmZwXSmo6jvAfGArUWXQCGwE9qpqs/O2bcAn4h0vIteISIOINOzatcsNkX1LU1MT5eXnsX793VRX72bFCqW6ejfr199Nefl5phhcwE9V78wt1sgEXpiPTgCmAEOAgcBxwBfjvDVuqLWqLlDVMlUtKykpyZ6gAeCee+ZRXPwms2YdYOhQCIdh6FCYNesAxcVvcs8987wWMeeJpYxYvXo1999/P6tWrfIsZYS5xRqZwAvz0URgs6ruUtXDwK+BzwJ9HXMSwCBguweypYTXppuFC+9n+vQDiLTfLgLTph3gwQcfcEWOfKa+vp6qqiqeeOIJ6uvrefLJJ13LMGpusUY28EIpbAXOE5FCERGgEngNWAt8zXnPZcDjHsiWNH4w3WzfvochQ+LvGzIkut9wBy966eYW60+CPrfjxZzCH4lOKD8PvOzIsAC4BagSkb8B/YFFbsuWCn4w3Qwc2J/Nm+Pv27w5ut/IDn7opZtbrD8J+tyOJ95Hqlqtqqer6tmqeomqHlTVv6vqp1V1qKpepKoHvZAtWfxgurn66uupq4vQMdGtKixdGuGqq67Lugz5il966bngFhv0nnVHgj63YxHNaeIH001V1U00Np7K3LkRNm2C5mbYtAnmzo3Q2HgqVVU3ZV2GfMVPvXQ/ucWmQ9B71n4YNWYSUwppkk3TTbIT2EVFRaxb9wfGj7+ZO+4oYdKkEHfcUcL48Tezbt0fKCoqSluG7uLH3l+mZfJLL91PbrHpEPSetV9GjZnClEKaZMt0k+oEdlFREbNn17B1606am1vYunUns2fXeKoQwJ+9v2zI5Ideul8qqSWrdHOtZ+2nUWNGUNXAtjFjxqhX7Nu3T8eMOUsnTIjoggXoypXoggXohAkRHTPmLN23b19a562pma0TJkR0zRp07dqjbc2a6LlramZn+JNkh/LycgW0oqLCa1FayYZM5eXlGgqFdPTo0bpixQodPXq0hkIhX31ut1iyZIkCWltb2+n71qxZo4WFhUo0FiluKyws1LVr17ojeIZYvny5RiKRdp8jEono8uXLvRbtGIAGTfBctZFCGjQ1NXHPPfN49913Wbv2ADNmCF/8ItTUDOi26cYPE9jp4Mfenxsy+aWX7geSNQPlXM/awQ+jxoyQSFsEoXkxUmg7Qli4EF21Cl24sPsjhBihkOiqVe1HCbG2ciUaDocy9Ekyix97f36UKZeorKxsdy979erVbhlrlZWVcY8PUs86GYI0asRGCpkj2/EJQY098GPvz48y5RLJTLCGw2FmzJgR9/ic6Vk75MqosUulICKfEpHVIvKKsz5CRIIxjZ4Fsm3eCXLsgV+8cfwuU67QldLt1asXLS0tCR/yQfea6kgs5UkoFH2shsNh11KeZJJkRgoLgX8HDgOo6ktE6x/kJdmOTwh67IEfe39+lClX6EzpfupTnwISzzHkSs8610hGKRSq6p86bGuO+848INvmHT/HHiSDH3t/ycjkx7iKoBBTum05cOAAf/nLX4DEE/u50rPONZJRCrtF5FScVNYi8jWidRDykmTMO93NnurX2INk8GPvLxmZOsYwmJJInpjSHTp0KAUFBa3bm5ujfcegBnHlLYlmoGMN+CSwCtgPvAP8Hjilq+PcaF57H8WLT9ixY0dWvZOM7NAxhiFZn3tDdcqUKfqjH/1IW1paOvX4Mk+vzLF3716dOnWq7t27N63j6cT7qCuFEAK+7rw+DujT2fvdbl4Fr+3bt09ramZraWmJhsMhLS0t0Zqa2a3bcyH4LNdJ1p3yhBNO8FrUwJFrrqZ+pLudls6UQqfmI1U9AtzovP6Hqu7LxOgk6HRm3glq8Fm+kYw7JcC+ffsCmXrBS2xiP/tkM19UMnMKK0XkeyJSKiL9Yi3jkuQIfsieanRNV+6UMWJ2cTB7eLL40dkg6LiZMSAZpfCvwA3ABmCj0xq6feUcJdPeSV6X/MxlErlTxsMC3ZLHj84GQcfNTKyiHd1oAkRZWZk2NPhLP82ZU8369Xcza1Z7E5JqNNZg/PibmT27JqlzxTKmFhe/yfTpBxgyJKpY6uqiMQtBcFH1O7/4xS+47rrr2L9/PwUFBRw8eJAjR460e08kEuHRRx9l8uTJHklpGLB27VomT57M/v37j9mXaqdFRDaqalm8fclENPcUkX8TkcecdqOI9EzqynlIJoPP/FDyM9fpaOooLS1t3Wf28PaYm663uBWdn4z56AFgDHC/08Y424w4ZDL4zCats09HU8fgwYNbt7e1hy9YsCCnHojpPOD9WCMjXYKq4FyZxE/klhRrwIvJbPOieVlPwQ2CmjG1K7rrY51N2vrcq6o2Nzfr/Pnz9ZxzzsmpuIV0XBr9WCMjXYIah5KpTKx0M0tqixPRDICIfBJoSVcJichpIvJCm/ahiMxwvJpWisgmZ3lCutfIFYKaMbUr/NzjTJR6ITZJmiseNMm4NPqxRkamCGoJUFcm8RNpi1gDKoGtwDpgPbAFqOjquGQaEAbeBU4B7gZudbbfCtzV1fG5PlLI1UC4IPQ4u1srwG+k83mSqUfRu3fvQEQpB+X77GwUnckRNulGNOvRh3cBMAIYCRQkc0yS5/0C8LTz+g3gJOf1ScAbXR2f60ohWyU/3SYof8i25FqBnnQ/T1fHff/73/fmA6VIUL7PzsxamTR5dUspEI1R6Ntm/QTg+q6OS6YBPwdudF7v7bDvgwTHXEM0TqLh5JNP7vbN8TudpdQICkH5Q3Yk1/L4pPt54qWtCIVCvh/tdSQI32dno+hMjrC7qxReiLPtz10dl8R5ewG7gRM1BaXQtuX6SCGXCMIfMh65lscnnc9TW1ur4XA47nfn59FePPz2fSY7is70CLszpZDMRHNI5KhTpIiEnQd6d/ki8LyqvuesvyciJznXOAnYmYFrGD4hqBXQci2PTzqfZ9GiRRw5cgTp6BtN8NJi++37TDYHV6J92bjnySiF/wX+W0QqRWQCUAf8LgPXnu6cK8Yy4DLn9WXA4xm4huEj/PaHTIZcy+OTzucpLi5m/vz5rFy5MvD1rv32fXaVg6ugoKBdjYq2ZO2eJxpC6FEzTgi4FngM+BXwLSDc1XFdnLMQ2AMUt9nWH1gNbHKW/bo6j5mPgkWmfKzdJFHcwpQpUzyWLD26+3n8Zn5JFb9+n53d12zcc7rrfaRHH9z9gBGpHJPNZkohWPj1D+klfg7ki0dtba0WFRVpKBTS3r17aygU0qKiosAFgfmNzu5rNu55t5QC0fiE4x2FsJVoltR7ujrOjWZKITVinkyDBg3QUEh00KABgfNkyjWCFlkbxNFeEOjsvmbjnnemFJKZUyhW1Q+BrwAPqeoYIHghjHlOLOPq+vV3U129mxUrlOrq3axffzfl5edZKm6PCFpkbS6mxfZDHqTO7qvr9zyRtog14GWiwWQrgHOdbS91dZwbzUYKyZOr0dFBI4iBfLlONkZrfjcL0s2RwhyiHkh/U9XnnNxHmzKrmoxsYxlX/YGbxVKM5MjGaM3P+b26okuloKqPquoIVb3eWf+7qn41+6LlD25UV8uVMqF+GOp3h65cEIPi2hlk3Ej0FzSzYFuSGSkYWcQtW3+uZFwNcg8sRlAD+XKFbIzWcimjrCkFj3GrutrVV19PXV2E6JTQUVRh6dIIV111XUauk22C3ANrSxAD+XKFbIzWcsosmGiyIQgtFyaaBw0aoAsXxi+ks2ABWlpakpHrBDXjaq5OzJprp/dkOigsSPm9SHeiWUROd9JbFHXYPimzqil/ccvWn8kyoW6SUz2wNuSia2fQyPRoLWfMgom0BfBvRGsc1BMtrDOlzb7nEx3nZrORQn4QpB6YERyyMVoLSsQ3aY4UrgbGqOpUoBz4DxH5jrPv2HSJRlrkiq0/GdL1ssqZHpjhK7IxWvNbwr10EO34NIrtEHlNVc9ss15ENCnea8AEVR3ljoiJKSsr04aGBq/F6BYx76Pi4jeZNu0AQ4ZEvYGWLo3Q2Hiqr007qdD2c06ffvRz1tUl9zl/8YtfcN1117F//34KCgo4ePAghYWFPPDAA3zzm9908ZMYRmKmTp3KuHHjmDFjBqFQiJaWFn784x/z1FNPUV9f77V4rYjIRlUti7sz0RACWAOM6rCtB7AEaEl0nJstF8xHqrlRXa0ruhtRbROzhpE56MR81NlIYRDQrKrvxtn3OVV9OiMqqxvkwkghXygtLaG6ejdDhx67b9MmuOOOErZuTVxXKSg9MMMIAp2NFBIqhSBgSiE4hMMhVqxQwuFj9zU3w6RJIZqbW9wXzDDykM6UggWvGa6QKxHVmSDoqToMb3Drd2NKwXCFfPKy6opcSNVhuI9bv5uklYKIHC8i/WItm0IZuUdV1U00Np7K3LkRXn4ZFi+Giy6Cykr4058Oc+jQobyp6ZArqToMd3Hrd9OlUhCRb4nIe8BLRKuubQTMkI872U1zhVhE9XnnzeC228L89a/wgx/AypVw770tPPvsj3O22E8uJUsz3MOr300yI4XvAWep6mBVHeK0T2ZUigBilcyipKIYi4qKKCjoxbnn9uTOO8lKAkA/2utzNVWHkV28+t0koxTeBPZn8qIi0ldEHhORv4jI6yIy1jFLrRSRTc7yhExeM9O4ld3Uz6SjGLNd7MeP9nqroWCkg1e/m2SUwr8Dz4jIz0Tkvljr5nV/AvxOVU8HRgKvA7cCq1V1GLDaWfctVsksPcWY7QSAfrXXW6oOIx28+N0koxR+RjS6+Q8cnVPYmO4FReR4YBywCEBVD6nqXmAK8LDztoeBqeleww1ypZJZd0hHMWbaNTVI9nqroWCkg9u/m2SUQrOqVqnqQ6r6cKx145qfBHYBD4nIn0XkQRE5DjhRVXcAOMuPxTtYRK4RkQYRadi1a1c3xOge5nefnmLMtGtqkOz1uZAszXAft383ySiFtc6D+KQMuaT2AM4BHlDV0cA/SMFUpKoLVLVMVctKSkq6IUb3ML/79BRjW9fUTZui0cybNsHcudHEeFVVN6UkQ5Ds9VZDwUgHt383Xaa5EJF4f3tN1wNJRD4O/EFVBzvr/0RUKQwFylV1h4icBKxT1dM6O5eXaS7yJbtpZ8yZU8369Xcza1Z7E5Jq9CE/fvzNzJ5dc8xxTU1N3HPPPB588AG2b9/DwIH9ueqq66iquinte/bEE09w0UUXceDAgdZtkUiERx99lMmTJ6d1TsPIVbqV5qKNG+qQTLikOgn23haR2AO/kmg67mXAZc62y4DH072GGwS1klkmSbfXX1RUxOzZNWzdupPm5ha2bt3J7Nk13bpnZq/PP/zofpwTJEqf2rYBZwNfBy6NtWSO6+R8o4gGwL1EtLLbCUB/ol5Hm5xlv67Okyups4OMX9J+W2rt/GPJkiUK+K6qWRAgndTZMUSkmmjltTOBJ4EvAr9X1a9lVj2ljmVJNWJYau3cpLGxkcsvv5zFixdTXFzcbl9FRQXr1q2joqKCNWvWeCRhMEmryI4e7dW/TNTM9KKzfiKwvKvj3Gg2UkiPWO9+0KABGgqJDho0IOeK+hi5QdvRQGVlZbv63L169Wq3jLXKykqvxfY9pFmjOcZHqnoEaHZiDHYSdSs1Aoil5zCCRNtgxCC5HweZZJRCg4j0BRYSDVp7HvhTVqUysoal5zD8TGfBiBMmTGD//sQZd/zkfhxkUqq8JiKDgeNV9aVsCZQKNqeQOt0ti2kY2WTt2rVMnjy504d/QUEBR44c4fDhw63bzP04NbrlkioiV8Zeq+oW4FVn8tkIIJaew/AzyQQjzpw5k4KCAnM/zhLJmI8qReRJJ6L5bKI5kPpkWS4jS1h6DsPvdJUE7plnnrF0IVkkmeC1bxBNUPcyUZfUGar6vWwLZmQHS89hBIHOghEtXUh2SSZOYRhHlcIZRKOPq1Q1ozUW0sHmFFLH0nMYQaCiooINGzYwcuRI7rrrLm655RZefPFFxo8fbzEJGaBbcwrAcuA/VPVbwHiiEcfPZVA+w0UsPYcRBGw04B3JjBSOV9UPO2wbpqqbsipZEthIwTAMI3XSGimIyM0AqvqhiFzUYfcVGZTPMIw4WMI3wws6Mx9Na/P63zvsm5QFWQzDaIMf600buU9nSkESvI63bhgZp6mpiTlzqiktLSEcDlFaWsKcOdV5k4rDr/WmjdymM6WgCV7HWzfyjGw/sP2So8lNxRSketNG7pJwollEWoiWyhSgNxBzQRUgoqo9XZGwE2yi2RvaurVOn37UrbWuLnNurelWdcskbnzOtiST4sHy+xiZIK2JZlUNq+rxqtpHVXs4r2PrnisEwzvcSKq3cOH9TJ/eXiEAiMC0aQd48MEHun2NrnA7eWCQ6k0buUsycQqG0Q43Hth+yNHkhWLqKsWDKQQj25hSMFLGjQe2H3I0eaWYrN604SWmFIyUceOB7XWOpqamJvr27e2JYlq0aJElfDM8w5SCkTKdPbDr6iIMG3ZGt711qqpuorHxVObOjbBpEzQ3R+s9zJ0bneStqropg5+oPbEJ5hNOOEhtLa4rJkvxYHhJSkV2Mi9dOXMAABtASURBVHZRkS3APqAFaFbVMhHpBzwCDAa2AF9X1Q86O0+q3kdNTU3cc888Fi68n+3b9zBwYH+uvvp6qqpuspw/KZAoqV5dXYQ//1kZMQIuueRgt711Yt/Xgw8+0Pp9XXXVdVn/vmKeTzNnHmDmTDjxRLj4Ylo/T21tD/bvP81yRRmBpTPvIy+VQpmq7m6z7W7gfVX9oYjcCpygqrd0dp5UlILb7oW5TrwH9rBhZ9Dc/Eduv/2gZ26kmaBtdbqPPoJHH4Xf/hZ27oT+/eHw4ULefvs9+70YgSUoSuENoFxVd4jIScA6VT2ts/OkohT84Pee63RV6nPOnAG8/fYu9wVLkXA4xIoVSjh87L7mZpg0KURzc4v7guURjY2NXH755SxevJji4mKvxck5ups6OxsosEJENorINc62E1V1B4Cz/Fi8A0XkGhFpEJGGXbuSf8D4we891+nKW+edd3YHIkWFHzyf8h3L++QdXimFz6nqOcAXgRtEZFyyB6rqAlUtU9WykpKSpC/oB7/3XKerh2mfPmQ84CsbeO35ZFjeJy/xRCmo6nZnuRP4DfBp4D3HbISz3JnJa1rvL/tcffX1PPRQfG+dX/4SKioIxIjMS88nv5LtNN6W98k/uK4UROQ4EekTew18AXgFWAZc5rztMuDxTF7Xen/Zp6rqJp5/HmpqaPcwramB996DK68MxojMqtMdS7bNObfddlu79B6HDh1qt4Romo9Zs2Zl5fpGG1TV1QZ8EnjRaa8Ctznb+wOriZb7XA306+pcY8aM0WTZt2+fjhlzlk6YENEFC9CVK9EFC9AJEyI6ZsxZum/fvqTPlej8NTWzddCgARoKiQ4aNEBramZ3+7xBY+DA/jplCvrxj6OhUHR5xRXok09G73dpaYnXIhppUF5eroBWVFRk7Rpr1qzRwsJCJTrn2K4VFhbq2rVrs3btfANo0ETP6EQ7gtBSUQqqRx/cpaUlGg6HtLS0JCMP7rYKZ+FCdNUqdOHCzCmcIFFTM1snTIjomjXo2rXR9uSTUcXQpw8qQt4qzER43aHYu3evTp06Vffu3du6rbKyst1DuVevXu2WsVZZWZlRWZYvX66RSKTdNSKRiC5fvjyj18l3TClkmXgPwrVr0TVrooqhpma21yK6RscR2bJl6Cc/iX7+8+S9woyHHzoUS5YsUUBra2tbt3XWa89m7722tlaLioo0FApp7969NRQKaVFRUTvZjO7TmVKwNBcZwNxdj9LRHv+Vr8DHPw5z5uBK+umg4XZ67njE8/TxKo13ruV9CmKdbVMKGcDcXdtTVFTE7Nk1vPba3ykq6s1f/woTJ8K0abBkSTRKOB8VZjy86FAk6+lz5513up7G26u8T9l6eAcx3sKUQgYwd9djiaUVOeOMj/jBD2DFCpg7F/7+d6iqiiqGfFSYHfGiQ5GKp4/babzr6+upqqoiFIo+msLhMDNnzqS+vj4r14uRrYd3EOMtTClkAHN3PZaYWeTOO9ubjaqrownmHn00fxVmW7zoUKRiGuquOSco5pNMPbxzId7ClEIGsGCnY+nMLHLxxdEEc/mqMNviVYci2Qpv3TXn+NV8kq2Hd07EWySagQ5C84v3kWr23F2DSigkumpVe2+sWFu5Muqaat5H2Y+f6Qw3PH3ciG9Ih2x6VwUh3gJzST1KJnzCvfYrDwKDBg3QhQvjK4UFC9D+/Qvtfjl41aEoLy/XUCiko0eP1hUrVujo0aM1FAp16wGerfiGeLEU3SWbD2+/x1uYUnDIhE+4H/zKg4DFbvifKVOm6I9+9CNtaWlRVdXm5madP3++TpkyJe1zZqsHHi+WIhMkenifd9553VJAfo+3MKXgkOqDKt6IYMKEcTpuXIE97LrAS7OI4S3Z6IFnywwV7+FdUFDQbQWUjVFYJulMKeTVRHMqPuExl8r16++muno3K1Yo1dW7OXBgA9u2HeTAga7Pkc9YUrnOaWpqYs6c6m7XsvYjyU5id4ZbXjzxvKsOHjwIdM8TKdB1thNpiyC0VEcKXU1+hsOh1vd2NqoYPz6ay6ercxj+x4v5oXwwQSZjPuns3ruVZmPKlCk6dOjQducNhUKu5HnyEmykECUVn/BkXCq7OofhbxKNBtevv5vy8vOy1mv3Q2qLbNNVfENX9/7cc891Jc1GfX09CxYsaHedI0eOAAFzI80geaUUUvEJ7yrSdGeHEkDxzmH4G68ezvmQK6sr80ky9z4TZqhk8CrPk1/JK6WQSpBZV6OKoiIsUC3gePVw9kOurGzPaXSVriLZe+9Wmg23FFAQyCulkMrkZ2ejirq6CGVl42wCNeB49XD2OleWV2aztiR7793Mmup2nie/kldKAY5m8Ny6dSfNzS1s3bqT2bNrjnmYdzaq+PDDU3n88f/p8hyGv3H74Rzrne/fv59rrmmfNRbcM0H6YU4j2XvvphdPrqXtTpe8UwrJYi6VuY+beYfa9s7vums/K1dGs8a++WY0a+zLL7tngvTDnMbVV1/P//t/iUfisXvvZtbUQLuRZhDRjt9KgCgrK9OGhgavxTACSuxBXVz8JtOmHWDIkGgvdenS6MM5k8p/zpxq1q+/m1mz2j+MVeG22+D11wv57ne/R1XVTVnvcITDIVasUMLhY/c1N8OkSSGam1uyKsO7777LGWcM5qyzDnLZZbTe+4cfhldfLeD117fw8Y9/PKsy5DMislFVy+Lts5GCkbe4ORrsrHd+xRXQp89xrpkgvZ7TAFiw4AFGjIBPfQpmz4YLLoguP/UpGDEiut/wBs9GCiISBhqAd1R1sogMAZYC/YDngUtU9VBn57CRghEU/NA7j9HZqGXu3Ajjx9/M7Nk1WZWhtLSE6urdDB167L5Nm+COO0rYunXnsTuNjODXkcJ3gNfbrN8F3Kuqw4APgCs9kcoIBEFLE+GH3nkMP9T/8INbrhGfHl5cVEQGAV8C7gSqRESACcA3nLc8DNwOpDyGPHz4MNu2beNAx+REhmdEIhEGDRpEz549M3K+tnMB1dWxuYDd1NXdzbJlv/KlI0B0Ujt+79ztoMeY2eyee+Zxxx0PsH37HgYO7M9VV13nypwGxJRk/JFCEDIDNDU1cc8981i48P7W+3f11de7dv+yiSfmIxF5DPgB0Af4HnA58AdVHersLwV+q6pnxzn2GuAagJNPPnnMW2+91W7/5s2b6dOnD/3790c6GnAN11FV9uzZw759+xiSqGuYIn4wf6SKm5PaQSCI32GMtt/l9OlHv8u6uuB8l74yH4nIZGCnqm5suznOW+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+uWWQWMcisr01QOxxl4YohicV90m8sqCNQyPDsXLIyt567fffqNFixa578nIyODMmdOcO3eW69fT8fT0oGbNrK5fDz30EJ07d2bEiBGYTCYyMjKYNWsWW7Zs0T8SF6fg/4E7s3DhQgYMGMDChQsdXrNI45pYWwzOEAqgTuOWYuk3jWa1fXmjXxitg/wr1A9fUzQV6f8gKiqKTZs2ERUVxcaNG50tjsYFsFYBGMIFFFStMh8PiiDp6nX6vvctb3yzDyMoJo3GnrhLyQXdDMl1MYQCAIhuXpu1IyN5oG093ok9QGLKNa5cL1vUjEbjSrhLyQVdLdR1MYwCAPCvXIk3+oUxb9CtZAocTLzM6eSrZGprQOOGuEvJBV0t1HUxlALIIap5LWr7eVHNuxKJKdc4cCZVWwMat8SZmb7lpaDr6ttvvwVg69atLuW60hhUAQCYlCKoujchNauQIcLBxFROJV8lM1NbAxr3wtVKLhR0Xd24cSPfM7iG60pjYAWQg6+lEk1r+1DN25OzKdfYn5jKlWv5rYHU1FQmT55AcHAAZrOJ4OAAJk+ecFNd+LKilGL06NG5r9944w0mTpxY7DExMTHs2bPHquuWtbzzqlWreO211wq9/vz58zl58mSZrn/48GFatWpVpmM05ccRmb62XKh1F9eVxgUUAIDZZMq1BjJFOHj2T2sgNTWVLl06sHnzNCZMOMfatcKECefYvHkaXbp0sEoJeHl58b///a9Mg7EtFEBZ6d27Ny+++GKh1y+PAtA4Fkdk+tpyobZbt25ER0fn9jkuyJUrV4iKitIuIBfAJRRADrnWQJU/rYHXpr2Ov/9Bxo1LIzQUzGYIDYVx49Lw9z/IjBnTy309Dw8PhgwZwsyZM2/ad+TIEbp27UqbNm3o2rUrR48eZdu2baxatYoxY8YQHh7OwYMH8x2zevVqbr/9dtq2bUu3bt04c+YMkFV3qEePHrRt25Ynn3wyNwT28OHDNG/enMGDB9OqVSseffRR1q9fT6dOnWjSpAk//PADkDXIDx8+/Kbrv/7668THx/Poo48SHh7O1atX2blzJ5GRkbRv356ePXty6tQpAHbu3ElYWBgdO3bk3XffLfc905QdR2T62nKhtqALqDC0C8hFsKaWNPAc8AvwKzAie1t1YB2wP/u5WknnKakfQGFcunpd9pxMlrqBNWTOHCQ29ubH7NlIcHBA6YtrF6BKlSqSnJwsDRo0kKSkJJk+fbpMmDBBRER69eol8+fPFxGRjz76SPr06SMiIgMHDpSlS5cWer4LFy5IZmamiIjMmTNHRo0aJSIizzzzjEyaNElERNasWSOAnD17Vg4dOiRms1l+/vlnycjIkHbt2snjjz8umZmZEhMTk3vNefPmydNPP13o9SMjI2XHjh0iInL9+nXp2LGjJCYmiojI4sWL5fHHHxcRkdatW8umTZtEROT555+Xli1blvu+2ZKy9APQ/ElkZKRde2Vs3LhRTCZToX0KTCaTXfsUaP4EZ/UDUEq1Ap4AbgPCgF5KqSbAi8AGEWkCbMh+bXNyrIEzpy8QElL4e0JC4OTJ81Zdx8/PjwEDBvDWW2/l2/7dd9/xt7/9DchqPr5169YSz3X8+HF69uxJ69atmT59Or/++itAseWdQ0JCaN26NSaTiZYtW9K1a1eUUrRu3ZrDhw+X6bPs27ePX375he7duxMeHs7UqVM5fvw4ycnJJCUl5dY1euyxx8p03hzS09M5cOBAmaueamxPx44d8722dY5BVFQUt956Kx4eHvm2e3h4cOutt2r/v4tgjQuoBbBdRK6ISDqwGXgA6AMsyH7PAqCvdSIWjdlkIjCwBocOFb7/0CEIDKxh9XVGjBjBRx99xOXLl4t8T2nKMz/zzDMMHz6c3bt38+GHH5KWllbi8QVLSuctN13WgVZEaNmyZW556d27d7N27doSS1yXlhxFojNCnc/27duBP/tUF8QWC7XDhw/HYrHki16yWCwMHz683Oc0EhUhw9kaBfAL0FkpVUMp5Q3cCwQDtUXkFED2c63CDlZKDVFKxSul4s+ePVtuIZ54YhiLFlkKLRW9eLGFwYOHlvvcOVSvXp2//OUvfPTRR7nb7rjjjtw+wZ9++il33nkncHNJ57wkJydTr149ABYsWJC73VblndPT08nMzMwXPphXnmbNmnH27Fm+++47ICts79dff6Vq1ar4+/vnWjE5spSVnMXyityg3lkUVVaiMAVgqxwDd28YUxEynMutAETkN+B1svz8XwO7gFJPSUVktohEiEhEQEBAecVg1KgxJCc3ZupUC/v3Q3o67N8Pk6dYOH8xhBEjni/3ufMyevTofAPbW2+9xbx582jTpg0LFy7kzTffBLI6h02fPp22bdvetAg8ceJE+vXrx1133UXNmjVzt9uqvHNycjKRkZH5rj9o0CCeeuopwsPDycjIYNmyZYwdO5awsDDCw8NzB4p58+bx9NNP07Fjx3ztFItj3759xMfH5z5yIq5SU1Pzbd+3b1+5Po+m9BRVVqKglaiUslmOgbs3jKkIGc42qwaqlHoFOE7WwnAXETmllKoLbBKRZsUdGxERIfHx8fm2laUKZGpqKjNmTGfu3Pc5efI8gYE1+Mujg3l40DCq+fsTVK0yVbw8Sj6Ri7Nv3z5SUlLw9fWlWbNib7lNuHTpEgcOHCAzM7PI95hMJpo0aZLbyaysVKRqoNYSGxtLr169Cg3PVEoxbdo0PvvsM3bt2kVkZKSuOFqAbt26sWHDhtzXnp6eXL9+Pfc5h65du7J+/XpniHgTTi0HrZSqJSKJSqn6wFqgI/Av4LyIvKaUehGoLiIvFHceaxVAUaSm3eD4xatcz8ikpo8XdfwsmEzu00oxZ8DPQSmV68/P+73aUyEUpwSsHfxBK4CysmbNGvr165dvfcnDw4Ply5fTu3dvMjIyePXVV3n33XfZu3dvbrvMikxycjKDBg3iH//4B/379y8yvwGMl+Tm7HLQy5VSe4DVwNMichF4DeiulNoPdM9+7RR8LJVoUtuXGlW8OJd6jf2JKVy+5rwIFVtHydStWzefjzdn0M87+JtMJgIDA21yvcLw8/OjUaNGNy0iK6Vo1KiRVYO/puwUVlbCYrFw6dIlICvHoEGDBpw+fdqtfdtlIcfXn5ycXOEynK1SACJyl4jcIiJhIrIhe9t5EekqIk2yny/YRtTyYTYp6lWrTKOaVRDg4NlUTiZdJcMJNYVsHSXj5+dHaGhokZEetpiBl4aMjIxcBZAji1KKjIziW31qbE9pFmYrgm+7LOS9H65YnM8aXCoT2Bp8LJVoUsuXGj5/WgOpDrYG7BElY4QZ+Llz58jMzMTb25vQ0FC8vb3JzMzU0UBOoLCF2UaNGhEbG+vyjWdsRUmNeO6///5cF5qji/M5OvS0wigAyLYGqlamUU0fAP6wszXgqCgZZ8/AzWYzQUFBtGjRAj8/P1q0aEFQUBBms9nu164IsdplobCyErNnz3aLxjO2ojSNeABCQ0MdHt7q6NDTCqUAcvCxeNCkli817WwNOMpH7+wZeGhoKHXq1MlVQkop6tSpQ2hoqN2vXRFita1FV+/MT0n3w2w2M3ToUPbt2+fw8FZHu+cqpAKALGsgsGplGgX8aQ2cKGANmM1mwsPDadmyJWFhYcyYMaPYkMeC5PXRf/DBB3z//ff59uf10X/wwQd88skn5fsseWbgFy5coH379gwaNIi+fftyxx13OCQO38fHx+7XKAyj+7ONYKEkJyfz1ltv8fHHH1cY33ZJFOfrj4mJ4b333rNrcb4cnN0XusIqgBx8vP60Bs7nWANpWdZA5cqVSUhI4Ndff2XdunV8+eWXTJo0qUznz/HRDx06lNtvvz13e0Ef/VNPPcWAAQPK9RkKzsAbN27ML7/8wm+//cbAgQN55ZVXynVeeyEiZVKkeXH2D6asGMFCyZFh06ZNLtV4xt4YoRGPs/tCV3gFAIVYA+eyrIG81KpVi9mzZ/POO+8gImRkZDBmzBhuvfVW2rRpw4cffpj73mnTptG6dWvCwsJ48cUXycjIYOLEiWzYsAGTycTbb79Nv3796NSpE88/n5WpPHHiRN544w0AEhIS6NChA23atOGBBx7ILQ3RpUsXxo4dy2233UbTpk3ZsmVLiZ/t0qVLucXl0tLSePzxx2ndujVt27YlNjYW+LOcdA69evVi06ZNQNbM/qWXXiIsLIwOHTrklrA+dOgQHTt25NZbb+Xf//537rGpqal07dqVdu3a0bp1a1auXAlklbZu0aIFw4YNo127dkyZMoWRI0fmHjdnzhxGjRpV4udx9g+mrDjDQilodeRce/HixW5duqGsGKGUhbPdcy6RHjtp9a/sOXnJpue8JdCPCfe3zLfNx8uDprV8OX0pjXOp1xDJSibzsVQCoFGjRmRmZpKYmMjKlSvx9/dnx44dXLt2jU6dOtGjRw/27t1LTEwM33//Pd7e3ly4cIGzZ88iInh6elK9enXi4uL4/PPP8fPzo3bt2jfJNmDAAN5++20iIyMZP348kyZNYtasWUBWLsEPP/yQa40UlpF48OBBwsPDSUlJ4cqVK7mup5w6/7t372bv3r306NGD33//vdj7dPnyZTp06MDLL7/MCy+8wJw5cxg3bhzPPfccQ4cOZcCAAfn6B1gsFlasWIGfnx/nzp2jQ4cO9O7dG8haFJ83bx7vvfcely9fpk2bNkybNo1KlSoxb968fEq0KHJ+MEVlvDrbn11YNin8aaHkYM9s0jvuuIM9e/ZQtWrVfDJcunSJzMxMfvrpJ3r06EF0dDTTpk0r1UTCHcmJmBoxYgQmk4no6GhmzZrl8PuR444qmMDnCPectgAKYMq2BhrnWgOXOXHxSu7aQM4C7tq1a/nkk08IDw/n9ttv5/z58+zfv5/169fz+OOP52r06tWrYzabqVKlCkFBQQQFBeHn58fMmTNZv379TZq/YGnmgQMHEhcXl7v/wQcfBKB9+/ZFloNu3LgxCQkJHDx4kFmzZjFkyBAgq2l3Tqnn5s2b06BBgxIVgKenJ7169brpmt9++y2PPPIIkL98tIjwr3/9izZt2tCtWzdOnDiRazU0aNCADh06AFClShWio6NZs2YNe/fu5caNG7Ru3bpYWXIwcqy2ESyUSpUq5Xudc+28bjdvb2/+/e9/28237Qo4ohFPaXGWO8olLICCM3VHUMXLA6XIjRRKSUvnRtIpzGYztWrVQkR4++236dmzZ77jvv7665ti8kNDQ6lcuXJuIa4ffviBDRs2sHjxYpYvX16mmiw55aDNZnOpMop79+7N448/DuSPPsqLh4dHvsEh7yykUqVKuZ+n4DULKyH96aefcvbsWXbu3EmlSpVo2LBh7vmqVKmS772DBw/mlVdeoXnz5rkylpa8PxgvLy+uXbtmCH+2MyyUoqyOonC2laS5mbzuqNdff52xY8eya9cuPv7449xeIfZAWwAlkGMNXDx/niFPDmXAP58kU6Bnz568//773LhxA4Dff/+dy5cv06NHDz7++OPcH/+FC/kToVNTU0lOTubee+9l1qxZJCQk5Nvv7+9PtWrVcs3QhQsX5loD5WHr1q00btwYyF92+vfff+fo0aM0a9aMhg0bkpCQQGZmJseOHcttNVkcnTp1ylcOO4fk5GRq1apFpUqViI2N5ciRI0We4/bbb+fYsWN89tlnudZEaTGC/7YoHG2hFGV1FIYRrCTNzTirsqpLWADO4urVq4SHh3Pjxg08PDzo83B/Hhz4JPvPpND/7wM5fPgw7dq1Q0QICAggJiaGu+++m4SEBCIiIvD09OTee+/NF4WTkpJCnz59SEtLQ0QK7Te8YMECnnrqKa5cuUKjRo2YN29emeTOWQPIWXeYO3cuAMOGDeOpp56idevWeHh4MH/+fLy8vOjUqVNu57FWrVrRrl27Eq/x5ptv8re//Y0333yThx56KHf7o48+yv33309ERATh4eE0b9682PP85S9/ISEhIV8XtNJgFP9tUTjSQinJ6oAsqyA9Pd0QVpLmZgq6nXLcUaNHj7bvha3pJ2mrR3l6AjuL1LQbsvfUJdl17KIcu3BZ0jMynC2SS3PffffJ+vXri9xv1P+DkujSpYuYTCZp27atrF27Vtq2bSsmk0mioqLsds3Vq1eLxWK5qUdvo0aNHCaDxrHgrJ7AFZUqXh40qeVDgK8XFy9fZ/+ZVFLSbjhbLJcjKSmJpk2bUrlyZbp27epscWyOM0z6gguJkDXznzBhgls2bNFYj80awliDvfoB2JvL19I5fvEq19IzqF7Fk7r+FsxFVObUlA9X+D8wClFRUcTFxd20kKibv7gvzu4HYFeMoJyKo6A18Lu2BmyK0b9/o+HuLRo1tsewFsChQ4fw9fWlRo0ahYYbGo0r19I5lmMNeHtSt6q2BqxBRDh//jwpKSmEhIQ4WxyNxpBYawEYNgooKCiI48ePc/bsWWeLUmpEhCtp6SSmpbPfpKjqXQlLJfuXRHZXLBYLQUFBzhZDo3FbDKsAKlWq5LIzv4RjSTy/dBcHElP5S0QQL913C/6VK5V8oEaj0TgQ7aOwA+HBVVnzzJ0M7dKYZTuP03NmHLH7Ep0tlqYUGKF8s0bjKLQCsBOWSmbG3t2cFcM64VfZg8fn7WDM0l0kX9WLxEbGCOWbNRpHoRWAnQkLrsrqZ+7k6ajG/O+nE/SYuZnYvdoaMCpGbzCj0dgSrQAcgJeHmTE9m7Ni2B1UrezJ4/N3MPrzXSRf0daAs3G1BjMajS2xSgEopUYqpX5VSv2ilFqklLIopUKUUt8rpfYrpZYopYovTViBaBNUlVXPdOKZ6FBiEk7QY9ZmNu4942yxKjRGKN+s0TiLcisApVQ94FkgQkRaAWagP/A6MFNEmgAXgX/aQlB3wcvDzOgezYgZ1olq3p78Y348oz5P0NaAk3B2RyaNxplY6wLyACorpTwAb+AUEA0sy96/AOhr5TXcktZB/qwafifPRoeyMuEk3WduZv0ebQ04AyM3mNFo7Em5FYCInADeAI6SNfAnAzuBJBHJ6RpyHKhX2PFKqSFKqXilVLwrJXuVldTUVCZPnkBwcABms4ng4AAmT55Aamoqnh4mRvVoxsqnO1G9iieDP4ln1JIEkq4UXc9dYx+M0CC8MHRYqsaeWOMCqgb0AUKAQKAKcE8hby201oSIzBaRCBGJCAgIKK8YhiY1NZUuXTqwefM0Jkw4x9q1woQJ59i8eRpdunQgNTUVgFb1sq2Brk1Ytesk3WfGsU5bAw7FqA1mdFiqxp5Y4wLqBhwSkbMicgP4H3AHUDXbJQQQBJy0UkaXZcaM6fj7H2TcuDRCQ8FshtBQGDcuDX//g8yYMT33vZ4eJkZ1b0rM052o6ePFE5/EM2LxT1y8rK0BR+Dv78/kyZOpX78+t912m2EKqemwVI09sUYBHAU6KKW8VVa1tq7AHiAWeDj7PQOBldaJWDaKc7k4mjlz3uORR9IoWMtOKejfP425c9+/6ZhW9fxZ+XQnRnRrwpqfT9F9Zhzf/LSCa+4AACAASURBVHraQRJXXGJiYqhfvz4rV65k9erVTmsQrsNSNY7EmjWA78la7P0R2J19rtnAWGCUUuoAUAP4yAZylorSulwcxcmT5ymqnFFISNb+wvD0MDGiW1NWDu9EgK8XTy7cybOLtDVgb4ww29Zhqa6LK67XWBUFJCITRKS5iLQSkcdE5JqI/CEit4lIqIj0E5FrthK2JMricnEEgYE1OHSo8H2HDmXtL46Wgf6sGt6Jkd2a8uXuU3SfuZmvf9HWgK0w4mxbh6W6Lq64XuNWmcDlcbnYkyeeGMaiRRYKtlwQgcWLLQwePLTEc1Qym3iuWxNWDb+T2n4WnvrvTp5Z9BMXtDVgNUadbbtjWKorzo7LihEsyLLiVgqgvC4XezFq1BiSkxszdaqF/fshPR3274epUy0kJzdm1KgxpT7XLYF+xDzdiVHdm/L1L6foMXMzX/9yyo7Suz9Gnm0bNSy1vLji7LgkjGhBlhW3UgDWulxsjY+PD5s2bScy8gWmTAng7rtNTJkSQGTkC2zatB0fH58yna+S2ZQVKjr8Tur4W3jqvz8y/LMfOZ/qMC+b07DXDNKos22jhqWWF1ecHZeEUS3IsuBWCsAWLpeSKGuUkY+PD+PHT+Lo0UTS0zM4ejSR8eMnlXnwz0uLun6sGNaJ53s05ZtfT9NjZhxf7rbOGjC6iW7PGaQRZ9uu3t/XHWbHJWFkC7LUiIjTH+3btxdbkJKSIu3bt5ToaIvMno2sW4fMno1ER1ukffuWkpKSYrPzz5mDrF+PzJlju/OXh72nLkmvt7ZIg7FrZNh/d8q5lLRyneeTTz4RQBYuXGhjCW1Dly5dBJCoqCi7nNtkMknbtm1l7dq10rZtWzGZTHa5liuTlJQkffv2laSkpBLfu3HjRvH29hayEkELfXh7e0tsbKz9Bbczq1evFovFku+zWSwWWb16td2vDcSLFWOv21gAqampzJgxndOnTxMbm8aIEYp77oFJk2qW2+VSEKNFGQE0q+PLimF3MKZnM9btOUP3mXF88XPZrQGjmeiOnEG6+mzbUZTFCnOL2XEpMaIFWWqs0R62elhrAThqZh4UVFPmzEFiY29+zJ6NBAcH2OQ65WXvqUty/9tZ1sDQ/8bL2WKsga5du+absXh6euZ7znl07drVgZ/gTyrSDNJVKI8V5szZsaNwpgWJtgAcNzM3WpRRQZrV8eV/Q+/ghbubsX5PIj1mxrF610mk4KIIxl/AqkgzSKNiCyvMpWfHpcSlLUhrtIetHtZaAI6amRvdAsjL76cvSe9sa+DJT+Il8dLN1kBxs2yjzK4rwgzSqJTGCjObzcV+F3p9xb6gLQDHzcwdEWVkK5rU9mX50DsYe3dzNu5NpMfMzawqYA0YNQQyLxVhBmlUSrLCPD09ycjIKPa7cOnZcQXALRSAo+L/bZnY5Qg8zCaGdmnMF8/eSf0aVXh20U889d+dJKak5b7H6AOsu8XDuxrFTRKaNm0KFB84EBMTw6hRozCZsoYaZxXZ0xSOWygAR83MbZ3Y5Sia1PZl+VMd+b97mhO77yw9ZsaxMuEEImL4Aba0M0ij5zG4MjmThLykpaWxd+9ewL1i+ysc1viPbPWwZRSQPeL/3Yn9Zy5Jn3e2SoOxa+SJBTvk3gf7y3/+8x/JyMgQEZH09HR54403pE+fPk6WtGwUzGMoS8y6pnhy/PihoaHi5eWlI7MMBFauATh98BcbKACRLCUwadJ4CQ4OELPZJMHBATJp0vjcwT9nf1BQTTGZlAQF1cy3vyKRnpEpH24+IE1e+lLaTPxGVvx4XDIzM50tllUUDFE0emKbK9GnT5/cSYIrBA5UBHImOMBPYsXYq6Sg38QJRERESHx8vN3On9MnwN//II88kkZISNbawKJFWb57I7tv7MmBxFReWLaLH48m0a1FbV55oBW1/CwlH2gAunXrxoYNG3Jfe3p6cv369dznHKpVq8aFCxecIaLbsmbNGvr160da2p9rSRaLhaVLl9KrVy8nSlZxWLhwIQMGDICsroyNynset1gDKAkjZvAagdBaPix96g7G3deCLfvP0n1mHCt+Oo4RJgUlUZo8BoCUlBTtn7YxRg8cqAjkWaOrac15KoQCMFqfACNhNikG39WIr567i9BaPoxcsosnPonnzKW0kg92IiWFKOaQnp6e+7fRKzO6CkYPHHBHikrKA6xyXVQIBWD0DF4j0CjAh8+f7JhtDZyj+4zNLN9pbGugqBDFwtCZw7ZDx/Y7nqIsXkAVekApqRAKwF55AkZqQG8LcqyBr0d0pmltX0Yv3cXgBca2BgpzRxTESIlt7oCO7Xc8pbV4y0qFUAD2yBMwWgN6WxJSswpLnuzI+F638O3BLGtgmUGtgYLuiODg4Nx92j9denQehfEpi8VbWiqEArBHBq+7LyybTYp/3BnCV891plkdX55fuot/zN/B6WRjWQMF3RENGzbM3a7906XHHVs2uiMFLV6rsSaG1FYPWzWEKY6S8gTKiisVhrOWjIxM+XjrH9Js3JfSasLXsmTHUcPmDeSNWRf5M7Ht3nvvrRCJYeVNgLNnwx0j4C6JgQWL6wGXxRmJYEAzICHP4xIwAqgOrAP2Zz9XK+lcjlAAtsZkUrJ+feEKYN06xGw2OVtEm5KUlCT39BsgD74TJw3GrpEBH30vJ5OuOFusUlNREsNK+zmN3g/C1rjL919wgoOzqoGKyD4RCReRcKA9cAVYAbwIbBCRJsCG7Nduh9Ea0NubVatW8dXST+jjd4SJ99/CD4cu0GNGHJ/vOGbItYGCGK3jmb0o7ec0ej8IW+Mu33/BBXhrsdUaQFfgoIgcAfoAC7K3LwD62ugahsKVSkPbgpwfzvx5HzOoUwhfj7iLWwL9eGH5zwyct4OTSVedLGF+KkJTcij/5ywpqsRsNrt05JSrfv8lLcbbfLHeGvMh5wF8DAzP/jupwL6LJR3vii4gdy9AVzoXgZL2/UdJ83FfScvxX8ui748YZm2gorSUtPZzFtZwp1KlSi7vLnHV778kV1XB/Ti7GBzgCZwDaksZFAAwBIgH4uvXr2+Le+dwbL2wbCTK8gM6cu6y/PXDbdJg7Br5+9ztcvyiMdYGKkrhMms+58KFC8XHx0dMJpNUrlxZTCaTmEwmt1gQdsXvv6TF+IL7jaAA+gBr87zeB9TN/rsusK+kc7iiBVARKMsPKCMjUz7Zdkha/DvLGvjMINZARWkpWd7PmTOgFPZwhwVho3//pV2ML26/WDF+22IN4BFgUZ7Xq4CB2X8PBFba4BoaJ1CWlpEmk+Kxjg35ZkRnWtfz5//+t5sBH//A8YtXHCx1fipK4bLyfk5/f3+GDh1aaEy5OywIG/37L21Rw9LuLzPWaA/AGzgP+OfZVoOs6J/92c/VSzqPtgCMS2EuAh8fn2L9wxkZmbLwu8NyS7Y18Ol251kDFaUpubWf0xXdJaXBFb7/ku79jBkzinPHZogzXUC2eGgFYFys+QEdPX9Z/jbnO2kwdo08Ome7HLtw2QES56eoxDBX63hWErb4nEZ3l5QHV/n+S7r3Re0H9otWABp7Ye0PKDMzU/67PcsauOXfX8nC7w4bYm3AHrh6tml5rD2NbSjp3he1H/hDtALQGJ1jFy7Lo3O2S4Oxa+SR2d/J0fOOtwbsjatnm7qCu8RdKeneF7UfuCRWjL0VohicK+FuJaZzCKrmzcJ/3sarD7bm5+PJ9JwVx8LtR8jMFGeLZjNcPdtU1/l3HiXd+6L2AxnWXLdC9AR2FSpK7+ITSVd5cfnPbNl/jo6NajDt4TYEV7dtnXNHUNq+xF27dmX9+vXOEFFTBMnJyQwaNIj58+fj7+9v+PMWhVJqp4hElPd4bQEYCHcvMZ1DvaqV+eQft/Hag63ZfSLLGvjku8MuZw1UtHo67oS9yl+7WlltrQAMhLv2Li6sfolSiv631eebkZ2JaFid8St/5ZE52zl63rl5A2WhpHo6ug2lcbGXu87V3IBaAZSAI33y7tq7uLhZUb2qlVnw+K28/lBr9py8RM9ZcSzY5jrWQFmS5TTOw17F4Vy16FwOWgEUg6PbPrpriemSZkVKKf56a5Y1cFtIdSas+pX+c7Zz5PxlR4pZboyebaqxn7vO1d2AWgEUg6N98u5SYrq8s6LAqpWZ//itTHu4Db+dvMTds7Yw79tDhrcGCvYl1m0ojYe93HUu7wa0JobUVg+j5gE4uu2ju5SYtkUp3pNJV2Tgx99Lg7FrpN/72+TQ2VTHfYAy4irZphr7ZTs7K4saZ3UEqwg42ifv4+PDpk3biYx8gSlTArj7bhNTpgQQGfmCS4WA2mJWVNe/MvMG3cr0h9vw2+lL3P1mHB9vNaY1ULBLk9lsZvTo0cTExDhZMk1B7OWuc1U3oFYAxeAMn7yPjw/jx0/i6NFE0tMzOHo0kfHjJ7nM4J+DLRZHlVL0iwhm3chI7mhck8lr9vDX2d9x6JxrrA1ojIe93HWu6gbUCqAY3MUnbw3WREHZalZUx9/CRwMj+E+/MPadTuGeN+P4aOshMgxoDWiMjb2ynV01i1pnAhdD3szc/v3/zMxdvNi9MnOLwtrM5KioKOLi4ggLC+P1119n7Nix7Nq1i8jISDZu3Fgumc5cSuNf/9vNhr2JRDSoxrSH29AowH2/A42mOHQmsB1xF598ebE2Csoes6LafhbmDoxgxl/C+P1MCve8uYW5W/7Q1oBGUw60BaApkuDgACZMOEdo6M379u+HKVMCOHo00fGCZZN4KY1/rdjN+t8SaVe/KtP7hdFYWwOaCoS2ADR2w+iZybX8LMwZEMGsv4Zz8Oxl7n1zC7PjDmprQKMpJVoBaIrEFTKTlVL0bVuPdSM7c1eTAF75ci8Pf7CNA4muXT5bo3EEWgFoisSVoqCyrIH2vNk/nEPnLnPvW1v4cLP9rYHCCt1pNPbAHv9rWgFoimTUqDEkJzdm4kQvZs2C/v0hOhr69IF9+3wYMsQ4CgCyrIE+4fVYO7IzXZoG8OpXe3no/W0cSEyx2zVdrfyvxnWxx/+a2ykAd+2o5Qx8fHxYs2Y9hw/7cfYsTJ0K69bBjBnQtGkqvXp1M+R9reVr4cPHsqyBw+cvc+9bW/lg80HSMzJtfi1XK/+rcV3s8b/mVlFAFaWjliOZPHkCmzdPY9y4/H0KRGDqVAuRkS8wfvwk5wlYAmdTrjEuZjff/HqGsOCqvPFwG5rU9i33+XQXMI2jKO3/moiowo4vDVZZAEqpqkqpZUqpvUqp35RSHZVS1ZVS65RS+7Ofq1lzjbJQUTpqWUNZLSRHNamxly89wNeLD/7enrcfacvR85e5762tvLfpQLmtAVcv/6txHUrzvwZYZdZa6wJ6E/haRJoDYcBvwIvABhFpAmzIfu0Q3LWjlq0oT38DR4WC2tOXrpTi/rBA1o6MJLp5LaZ9vY+H3t/G72fKvjbg8uV/NS5Daf7XgAPWXKPcCkAp5Qd0Bj4CEJHrIpIE9AEWZL9tAdDXGgHLgtHj1p1NeSwkR4WCOsKXHuDrxft/b8c7f2vLsYtX6fXWVt6NLbs1oLuAaRxFSf9rgFURDtZYAI2As8A8pdRPSqm5SqkqQG0ROQWQ/VzLGgHLgivErTuT8lhI9goFdVYrPaUUvdoEsnZkZ7rfUpvp3+zjwfe3se902X5Hrlr+V+N62PN/zRoF4AG0A94XkbbAZcrg7lFKDVFKxSul4s+ePWuFGH/iSnHrzqA8FlJOKOjUqRb274f09KwyEFOnZi2sjxo1plyyONuXXtPHi3cfbce7f2vHiYtXuf/tslkDrlr+V+N62PN/zRoFcBw4LiLfZ79eRpZCOKOUqguQ/VxosRgRmS0iESISERAQYIUYf2KvwcpdKI+FZK+CeEbxpd/Xpm6WNdAyyxp44L1t7D19qcTjXLX8r8b1sOf/mlVhoEqpLcBgEdmnlJoIVMnedV5EXlNKvQhUF5EXijuPLYvBpaamMmPGdObOfZ+TJ88TGFiDwYOHMmrUmAofAmrEkM41a9bQr18/0tLScrdZLBaWLl1Kr169HCrLl7tP8e+YX7iUdoNno5vwVJfGVDK7XaqMxo2wthictQogHJgLeAJ/AI+TZVV8DtQHjgL9RORCcefR1UAdgxH7G/z3v/9l6NChXLlyBS8vL65du4a3tzfvv/8+f//73x0qC8CFy9eZsOpXVu86SctAP97oF0aLunpWrzEmTq0GKiIJ2W6cNiLSV0Quish5EekqIk2yn4sd/DWOw4j9DYzmS69exZO3H2nLB39vx5lLafR+Zytvrt/PDTtkEWtKh663ZD/cKhNY43r07duXzp07M2LECEwmExkZGcyaNYstW7Y4van6hcvXmbjqV1btOsktdbOsgVsCtTXgaBYuXMiAAQNYuHChU6xCI+NUF5Ct0ApAY2S+/uU042J+IenKdYZHhzKsSyieHnptwJYkJyczaNAg5s+fj7+/f759UVFRbNq0iaioqHK3EnVXdEMYN0UXtTMOd7eqw7qRnbmvTV1mrd9Pn3e/5deT2h1hS/JmgjsrR6Qioi0AA6KL2hmXb349zUsrsqyBp6NCeTpKWwO2IO8s/9///je9evXiypUrRb5fl9zIQlsAboguamdcerasw/pRnbk/LJA3N+yn9ztb+eWEtgbKSnGz/OjoaD34OwitAAyILmpnbKp6ezLzr+HMGRDB+cvX6fvut8xYu4/r6TpSqLSUJhPcy8uLSpUq5TtO11uyLVoBGBBd1M416H5LbdaN7EzvsEDe2nhAWwNloDSZ4KNHj8bLy0vXW7IjWgEYEF3UznWo6u3JjL+GM3dABBcuX6fPu9/yn7X7uJae4WzRDE9JlS63bdtmqBwRd0QrAAOii9q5Ht1uqc26kZH0Da/H2xsP0Pvtb9l9XFsDJVFcpUtdb8n+6CggA2LEkg2a0rNx7xn+73+7OZd6naGRjXmmayheHmZni2VIoqKiiIuLIywsjNdff52xY8eya9cuIiMjdcx/KdBRQG6IEUs2aEpPdPParB0ZyQNt6/FO7AHuf3srPx/XfuvC0LN856ItAI3GjsTuTeT//rebs6nXeLJzI57r1kRbAxqboS0AjcbARDWvxTcjO/NQu3q8t+kgYWMWsfW3484WS6MBtALQaOyOf+VKTHs4jAH1U0i9ls5jCxJ47au9pN3QkUIa56IVgEbjILYs/ZCTHz2NT+IvfLD5IL3e3spPRy86WyxNBUYrAI1NMVoRO2fKU1i5A7l+hd8/ncCZz8ez98Ah+r6zhfCBE7U1oHEKehG4ApDTJnPOnPdy22Q+8cQwm7fJNFoRO2fLExsbW2xRM+XpTUCPJ6ncsiuNA6owvV8Y7epXs5s8GvdDLwJriiVnENy8eRoTJpxj7VphwoRzbN48jS5dOth0Jmy0InbOlqekcgeVPWDJ6N588o/buHo9g4ff38arX/6mrQGNw9AKwM1x5CBotCJ2RpCnpHIHXbp0oXPTAL4Z2Zm/3lqfD+P+4N63trDziF4b0NgfrQDcHEcOgkYrYmcUeYord5CDr6USrz7YmoX/vI1rNzJ5+INtvPzFHm0NaOyKVgBujiMHQaMVsTOKPGVpfH9XkwC+HnEXf7utPnO2HOLeN7ew88gFh8ipqXhoBeDmOHIQNFIRu9TUVJo2vYV583C6PGUtd+BrqcTLD7Tm08G3cy09k4c/+I6pa/Zw9bq2BjS2RUcBuTmTJ09g8+ZpjBuX3w0kAlOmWFDqNn7/fY9NooOMUsQuR44qVQ5w/Pg1goPh0UfJFwV06ZJrFNVLvZbOa1/9xn+3HyWkZhWmP9yGiIbVnS2WxiBYGwVklQJQSh0GUoAMIF1EIpRS1YElQEPgMPAXESl2RUspJUFBNe0SmljRKWpQXrTIwk8/CW3awGOPXbNZiGROyOncue/nKpXBg4c69HvNq/TS0mDpUvjqK0hMBB8fiIjozMqVX7jU/9m2A+d4YfnPnEi6yuN3hDCmZzMqe+qaQhUdIyiACBE5l2fbNOCCiLymlHoRqCYiY4s7T7NmSsaM0U3P7UVhg3KTJi1IT/+eiROv3WQZTJ1qITLyBcaPn+Q8oa0gODiACRPOERp68779+2HKlACOHk10vGBWcvlaOq99tZeF24/QsIY30x4O47YQbQ1UZIyoAPYBXUTklFKqLrBJRJoVd55mzZR8+KF7DD6uQkmD5OTJNTl27KzjBbMBZrOJtWsFcyET5PR0uPtuE+ku3LFr28FzjF3+M8cvXmXQHQ0Z07MZ3p4ezhZL4wScnQgmwFql1E6l1JDsbbVF5BRA9nOtwg5USg1RSsUrpeL/3KabnjuKkqKDTpw457TyDdZilOgfe3FH45p8/VxnBnRowLxvD3PPm1v4/g/X7BOdnJzMAw88QHKy7p7mDKxVAJ1EpB1wD/C0UqpzaQ8UkdkiElFQe+mm546hpEHS1xeHZ+7aCiNFI9mLKl4eTOrTikVPdEAE/jp7OxNX/cqV6+nOFq1MrFq1ipiYGFavXu1sUSokVikAETmZ/ZwIrABuA85ku37Ifi6Ts9UdZmiuwBNPDCsyRPLTTyEqCpe1xEaNGkNycmOmTrWwf3+W22f//iz3YnJyY0aNGuNsEW1Gx8Y1+HrEXQy6oyHztx3m7llb2F5Ga8CZs/CcXAjd6N05lFsBKKWqKKV8c/4GegC/AKuAgdlvGwisLO053WmGZnRGjRrDjz/CpEnkGyQnTYIzZ+Cf/3RdS6yitdT09vRgYu+WLB7SAYD+s7czYeUvXL5WOmvAkbPwwiqkAnz77bf5tnfr1s3usmisWARWSjUia9YP4AF8JiIvK6VqAJ8D9YGjQD8RKTaVsWnTrCgg3fTcsdSrV5Nbbz3P999nhUjWqgX33AP9+sHx464bLVORuXI9nWlf72P+tsMEV6/MtIfC6Ni4eIs6KiqKTZs2ERUVZfdG7CVVSAXw9vbmiy++oEuXLnaVxR2wdhEYEXH6A5Dg4ACZNGm8pKSkiK1ISUmRSZPGS1BQTTGZlAQF1bT5NVyZSZPGS3S0RTZuRGJj/3x88QXSuLFZqlf31vfNRdl+8Jzc+ep6aTB2jbywZKekpt3I3de1a1chK4BDAPH09Mz3nPPo2rWrXWTbuHGjeHt757tWzsPb21tiY2Ptcl13BIgXa8Zeaw621aN9+/Y2vzEpKSnSvn1LiY62yJw5yPr1yJw5SHS0Rdq3b6kHM8l/j2bPRtatQ956C6lRQ0mnTkrft3JgpEnH3PmfSLXowdJw7Grp9NoG+fbAWREpfgB21EC8evVqsVgs+a5psVhk9erVdrumO2KtAnDbWkDOrgXvChTmKx8/3puWLc1MmSL6vpURR/ZeKA3/nf8xFzfOpe6eJXiYFH+b8z3jYnZz2x13FdunwBEumNJUSNXYH7dVAEaoBe8K+Pj4MH78JI4eTSQ9PQMfH28eeyxd37dy4OxJR1ELrDu/+Zy4f93DpR0xLPzuMGEvfo5XcOsS+xTYk7JUSHVFXCW/wW0VgFFqwbsSqampnDp1jnHjoGtX6N8fPvkErl7N2q/vW/E4e9Lx0ksv5ZvVX79+PfdZ0q9xceNckpaNp2a1qvxt7vd8suc6HpV9nDILL2uFVFtj7wHaVfIb3FYBuHs2qK3JcV/cfjtMnQpr12Y9//EHjBqVpQT0fSseZ086SmpB6e3tzcqPZrLp/3ryxF0h/HDeE/+/vs4tUQ84fBYeExPDqFGjMJmyhiCz2czo0aOJiYmx+7XB/gO0q+Q3uK0CqAjZoLYkx30xdSr53BcTJkDt2lkVNfV9Kx4jTDpK04LSUsnMS/fdQpOjq6hZvRopEY+zMaUOG7d8V+ZZuKu4Ogpi6wHaVfMb3FYBVKRsUFtQnPvi0Udh+XL0fSsBo0w6SrvAum7RbLZP7M2Qzo1YsuMo9739Lbf1HlCmWbiruDrsPUAX537Lwdvbm3HjxlnxKeyANSFEtnrYIwxU5M+QvODgADGbTXbJNXAXTCYl69fnzwfIeaxbh5hMSt+3EigsrHb2bMeH0Hbp0kVMJpO0bdtW1q5dK23bthWTySRRUVFFHhN/+IJEvRErDcaukReX75JLV6+X+lpAsec2Ao4IfXVGfgM6DyALI8VfuyJBQTVlzpzCFcDs2VmJepqSMcKko0+fPvKf//xHMjIyREQkPT1d3njjDenTp0+xx129ni6vfLlHQl5cIx1fWS+b9iXe9B5nJ5FZgyMGaEfnN7iFAqhUycOqQVsnfVlPUVnBGzdm3cdJk8Y7W0SNg/jxyAWJzrYGXli6S5LzWAP2nkknJSVJ3759JSkpyUafJj9FDdCLFy+2yXUXLlwoPj4+YjKZpHLlymIymcTHx0cWLlxoo0+QH2sVgCHWAAID00uVNJOamsrkyRMIDg7AbDYRHBzA5MkTePXVl3XSl5XoNRNNDm3rV+OLZ+/iqcjGLN15jJ4z49i0L6smVGkijaxJIrP3mkJR6yOxsbE2ua7L5TdYoz1s9WjatOQZZ3GzfB8fs7z9tnZfWIsR3BcaY/HT0YvS9T+bpMHYNTJmaYIkXcmyBuzl6rD3mkJR6yNVq1a1yXXL634rL7iDCyivAihq0C7ORdGxIzJoUNELmGazyUa3W6O5GXdff7p6PV1e++o3CXlxjdz+8nrZuPdMqV0dJd0bR68p5AzQ0dHR+c6vlHKZtYy8WKsArOoJbCtyegLnUFjf1pJ62L70Enz+eeH7dFlj9yWn4f2cOe/lNrx/4olhjBo1xiElxXMS6Pz9D/LII2mEhGTF/C9a5H6lzXcdS+L5pbvYn5iKT+Ju9i5+hTbNQ3n99dcZO3Ysu3btIjIyMrekdGnuzY4dO5xSHtpdylI7uyewXSgsaaakLMtz5wrvbqWTl9wXIxRfc3b9H0cSFlyVNc/eydNRjUkNaEmzEZ8w/dMviyzlUJp7Y+81haJw1nWNhuEUQFGDdklZllWqmPUCZgXDCRIy3gAADcNJREFUCIOvs+v/OBovDzNjejZn1TN3ERRQnX8u2Mnoz3eRei3zplIOpb03pcletgfOuq6RMIQCuHat5EG7pCzL554bU2FaAGqyMMLg6+z6PwUpKlLO1tZQm6CqrHqmE89EhxKTcIIeszazce+ZfO8py71xVnnoil6W2hAK4ORJjxIH7ZLCFF988aV8ZY2PHk1k/PhJevB3Y5w1+OYdZEXkpqqpOTi6eJ6jXWJeHmZG92hGzLBOVPP25B/z4xn1eQLJV24AZauN5KzwSZcL27QxhlAAbdqElThoV7RG35qScUbxtYKD7Lp18Oqr+aumgnPWn5zlEmsd5M+q4XfybHQoKxNO0n3mZtbvOVOm2kjOKg/t7LLUzsYQUUARERESHx/vbDE0LsbkyRPYvHka48bldwOJZFmGkZEvMH78JIddc+LELMujU6esAc7RUUAlRco5IhrulxPJPL90F3tPp9CrVS22vTOMqt6/5IsCmj8fjh8P4Pvvf6ZOnTp2lcfdsTYKSCsAjcuSN8ywf/8/Bxh7Dr4lDbLPPgsBAQEMHjzUYaGoOZjNJtauFczmm/cVFlptL66nZ/JO7AHeiz2Av8VM4pdvcOm39aSmQq1acPvtcPGiF5cvh2rr3UqsVQAethRGo3EkOW7BGTOmM2XK+7l5APYcfEtad7hxw+S0nJMsl1jhysmR6xGeHiZGdW9Kj1tqM+CdbzB3GcE9j4Tx9xaz8fFMAUDkGlOnZrmlbG2laUqP1WsASimzUuonpdSa7NchSqnvlVL7lVJLlFKe1oup0RROwZ7G9l78N0LTl6IwSj+CHFrV8+fsZ8/Sufqn7Dh9F//a+h47z3QA3DdM1tWwxSLwc8BveV6/DswUkSbAReCfNriGxk1wVJiivTDaIJsXIxb0O3k8kYHtFzG+40j8vS7y9k/j+GDX86Re99U9pg2AVQpAKRUE3AfMzX6tgGhgWfZbFgB9rbmGxn0wQuautRhxkM3BiJFyORZTA79DTOg4kgdC/8uO03fyr63v8dXuji7XY9rVJzAFsWoRWCm1DHgV8AWeBwYB20UkNHt/MPCViLQq5NghwBCA+vXrtz9y5Ei55dC4Bs6I2rEHOfWH5s51zLqDK1PYd370Ughzdz/H0ZRQQsznWf6v/lSvYnxPsRHrPjmtFpBSqheQKCI7824u5K2FahgRmS0iESISERAQUF4xNC6EETJ3bYGj1x1cmcIspmtnDuER+xLeB9dyTGrSY+Zmvv7llLNFLZHy5lkY2WootwWglHoVeAxIByyAH7AC6AnUEZF0pVRHYKKI9CzuXDoMtGJglDBFjWMpzmI6lpLJmGW7+OXEJXq1qcuk3i2p4ePlbJELpTx5Fva2GpxmAYjI/4lIkIg0BPoDG0XkUSAWeDj7bQOBleW9hsa9MHIEjcZ+FGcxtajrx4phnXi+R1O++fU0PWbG8eVuY1oD5Sk9YoSChcVhj1IQY4FRSqkDQA3gIztcQ+OCGDmCRuM8KplNDI9uwupn7iSwamWGffojT3/6I+dTrzlbtHyUZwJjdLenTRSAiGwSkV7Zf/8hIreJSKiI9BMRY32LGqdh5AgajfNpXsePFcPuYEzPZqzbc4buM+P44mfjWAPlmcAYrVpsQQxRDE5TMTBimKLGWHiYTTwdFcrqZ+4kqFplnv7sR4Z9upNzBrAGyjOBMbrbU9cC0mg0hiQ9I5PZW/5g1rr9VPEyM7lPK3q1qYsq6E9xIGUNAbZ36LMuBqfRaNya/WdSeH7pLnYdT+bulnWY0rcVAb7GjBQqiL0LFrplT2CN+2DkGGiNa9Ckti/Lh97B2Lubs3FvIj1mbmbVrpMYYfJaEkZ3e2oLQGM3jJg5qXFt9p9J4fllP7PrWBI9W9ZmSt9W1PK1lHygm6ItAI1hMXoMtMb1aFLbl+VPdeT/7mlO7L6z9JgZx8qEEy5hDRgRrQA0dsPoMdAa18TDbOLJyMZ8+eydNKxRhecWJ/Dkwp0kpqQ5WzSXQysAjd0wegy0xrUJrZW1NvCve5uz6fezdJ8RR8xP2hooC1oBaOyG0WOgNa6P2aQY0rkxXz57F40DqjBiSQJPfLKTxEvaGigNWgFo7IYu/aBxFKG1fFj61B28dG8Ltuw/S/eZcaz46bi2BkpARwFp7IYzmrZrNAfPpvLCsp/ZeeQi3VrU4uUHWlPbzz0jhXQUkMawGD0GWuOeNA7w4fMnOzLuvhZs2X+O7jM2s3yntgYKQ1sAGo3GbTl07jJjlu4i/shFopvX4pUHWlPH332sAW0BaDQaTRGE1KzCkic7Mr7XLWw7eI7uMzezNP6Ytgay0QpAo9G4NWaT4h93hvDVc51pXseXMct+5h/zd3A6WUcKaQWg0WgqBCE1q7BkSEcm3H8L3/1xnu4zN/N5BbcGtALQaDQVBpNJ8XinEL5+rjMt6vrxwrKfGTRvB6eSrzpbNKegFYBGo6lwNKxZhcVPdGDi/bfww6EL9JgRx+c7Kp41oBWARqOpkJhMikGdQvh6xF3cEujHC8t/ZuC8HZxMqjjWgFYAGo2boXswlI0GNaqw6IkOTO7Tkh2HLtBjZhyLfzhaIawBnQeg0bgRugeDdRw9f4UXlu9i+x8XuKtJTV57qA31qlZ2tlhFovMANBpNLroHg3XUr+HNZ4M7MKVPS3YeuUjPmXEscmNroNwKQCllUUr9oJTapZT6VSk1KXt7iFLqe6XUfqXUEqWUp+3E1Wg0xaF7MFiPyaR4rGNDvhnRmdb1/Pm//+1mwMc/cPziFWeLZnOssQCuAdEiEgaEA3crpToArwMzRaQJcBH4p/ViajSa0qB7MNiO4OrefDr4dqb0bcXOIxe5e9YWPvvevayBcisAySJnValS9kOAaGBZ9vYFQF+rJNRoNKVG92CwLSaT4rEODfhmRGfaBPnzrxW7eeyjHzh2wT2sAasWgZVSZmAnEAq8C0wHtotIaPb+YOArEWlVyLFDgCHZL1sBv5RbEOdTEzjnbCGsQMvvPGwte2CVKtSpVw9VcMeJE8jly5wGTtrweq5878H15W8mIr7lPdjDmiuLSAYQrpSqCqwAWhT2tiKOnQ3MBlBKxVuzku1stPzOxZXld2XZQcvvbJRSVoVP2iQKSESSgE1AB6CqUipHsQRh29mGRqPRaGyENVFAAdkzf5RSlYFuwG9ALPBw9tsGAiutFVKj0Wg0tscaF1BdYEH2OoAJ+FxE1iil9gCLlVJTgZ+Aj0pxrtlWyGEEtPzOxZXld2XZQcvvbKyS3xCZwBqNRqNxPDoTWKPRaCooWgFoNBpNBcXhCsAdSkgopcxKqZ+UUmuyX7uS7IeVUruVUgk5IWRKqepKqXXZ8q9TSlVztpxFoZSqqpRappTaq5T6TSnV0VXkV0o1y77vOY9LSqkRriI//H875xNiVRXH8c+XBGGGjJxQJqcwQWoRNU1h/oGhNCpDDIJACdpEbYKsTRRR0L6FChGCVtDCQImQWVhim2hRpDT2rAYNRacmnyi5qI3mt8U5Dy+Pee81q/tO7/eBy73ncOfxeef+7vvNOffcA5Jey/dtQ9L+fD8XEf+SdmTvk5JezXV93faSPpTUlNSo1M3rrMRuSaclnZA00evz6+gB/B+WkNhBmvHUoiR3gEdtj1fmP78BHM3+R3O5X9kFHLZ9D3A/6ToU4W97Jrf7OPAg8Dfp/Zki/CWtAF4BHsovd94EbKOA+Jd0L/AisIYUN1skrab/2/5j4Mm2uk7Om4HVeXsJ6L3wk+3aNmAIOA48THobb1GuXwd8UadbF+ex3OgbgSlApbhnv7PAbW11M8BoPh4FZur27OC+BDhDnrxQmn+b8+PANyX5AyuA88BS0gzCKeCJEuIfeBbYWym/DbxeQtsDK4FGpTyvM7AH2D7feZ22Wp4B5CGUH4AmcAT4FfjT9rV8yiwp2PqRnaTAuZ7LI5TjDunN7C8lHcvLcQAstz0HkPfLarPrzirgIvBRHoLbK2mYcvyrbAP25+Mi/G3/BrwHnAPmgCukpWBKiP8GMClpRNIQ8BRwB4W0fRudnFsJukXPa1FLArD9j1M3eIzUJfvPS0jUiaQtQNP2sWr1PKf2nXuFDbYnSN3FlyVN1i20ABYBE8AHth8A/qL/uuw9yWPkW4EDdbsshDzW/DRwF3A7MEyKo3b6Lv5t/0waqjoCHAamgWtd/6g8FvxbVOssIJe3hMQGYKuks8CnpGGgnZThDoDt3/O+SRp/XgNckDQKkPfN+gy7MgvM2v42lw+SEkIp/i02A8dtX8jlUvwfA87Yvmj7KvAZsJ5C4t/2PtsTtieBy8Apymn7Kp2cZ0m9mhY9r0Uds4CKXULC9pu2x2yvJHXhv7L9HAW4A0galnRz65g0Dt0ADpG8oY/9bf8BnJd0d67aBPxEIf4VtnNj+AfK8T8HrJU0JEncaP9S4n9Z3t8JPEO6BqW0fZVOzoeA5/NsoLXAldZQUUdqeKBxH2mJiBOkH593cv0q4DvgNKlrvLjuhy89vscjwFRJ7tlzOm8ngbdy/QjpwfapvF9at2uX7zAOfJ/j53Pg1sL8h4BLwC2VupL83wV+yffuJ8DiguL/a1LCmgY2ldD2pCQ1B1wl/Yf/Qidn0hDQ+6Rnqj+SZmt1/fxYCiIIgmBAiTeBgyAIBpRIAEEQBANKJIAgCIIBJRJAEATBgBIJIAiCYECJBBAEQTCgRAIIgiAYUP4FKMs2FGsuVGcAAAAASUVORK5CYII=\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": "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\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 +} From 30cd16221fe43c7062863e9ab8a3694aef8e4f8a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 12 May 2020 01:45:02 +0530 Subject: [PATCH 7/9] Week 5 Done! --- .../exercise3-checkpoint.ipynb | 1120 +++++++++++++++++ .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 3002 bytes .../Exercise3/exercise3.ipynb | 273 +++- .../Exercise3/token.pkl | Bin 0 -> 58 bytes .../__pycache__/submission.cpython-37.pyc | Bin 0 -> 3458 bytes .../exercise4-checkpoint.ipynb | 967 ++++++++++++++ .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 7161 bytes .../Exercise4/exercise4.ipynb | 83 +- .../exercise5-checkpoint.ipynb | 927 ++++++++++++++ .../Exercise5/exercise5.ipynb | 2 +- .../__pycache__/submission.cpython-37.pyc | Bin 0 -> 3458 bytes 11 files changed, 3313 insertions(+), 59 deletions(-) create mode 100644 Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/.ipynb_checkpoints/exercise3-checkpoint.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/token.pkl create mode 100644 Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/__pycache__/submission.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/.ipynb_checkpoints/exercise4-checkpoint.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/.ipynb_checkpoints/exercise5-checkpoint.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/__pycache__/submission.cpython-37.pyc 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/epOOsNjxmvaep607vVXTTZa2jPPY/W3SMMcYYU1r8oGOMMcaY0jJd15WamGjuVhfL0KFDQ+7atSsAYKONNgpdVgZWQzU1+Lmnn346dGom3HfffQEAAwcODJ1G4DfHNMbf/PTTT0O3/fbbT3PMWaXK1aTHDDTNVFE3HfVZ3b8pqzmw1nBcWo/kzjvvDFndPCeffDKAZCaEmmaLVDNmeqjp+4orrgiZGWKaiXLzzTeHzKwzrkMgmdXEbJZ6ZbI0BjUjMzNE3SE673S5XXzxxaHTDMm99toLAHDjjTeGTt0MaTWzWkqaCyxrzdFlo7VJ1I3AbJw83KlZex/XF91KQDJM4IgjjgiZe52uX+2OTZdk3759Qzd27NiQuT4107Be61PdHXrMm2++ecjMdmT2JpBeUygPF6TOn7qz6S5kRhiQvCekfYd+1wYbbBDykCFDACTr9OQN7w+8twHA66+/HvIuu+wSMu91RWrxY4uOMcYYY0qLH3SMMcYYU1oaXTCQpkM1p+6///4hr7jiigCS5vrmln2nmUwj0bfeeuuQR4wYAQD48ssvQ6fFlVpiMtNMrqWXXjpkZkqp60oL+q222moh07S85ZZbhm6JJZYImcWfXnnlldBts802IWuhpXrBufrll19Cp1H/WpCLLrWsIolNyXqoN/rbesxakIvZdrqONNuH80YXHgAMGjQoZHZqV3dq3uj6++STTwAATzzxROi0+/Bll10GoFI4EEh2que1pvOfh5la509bdPTu3RtAssQ+3W1ApdBgVvZNvTqZ6zljJqkWnEvLpAIq7gMtEqjZPtw/2EUaAAYMGBAys7W0oF4trkk9j3QzqguUhR2BZLsDXot77rln6Lp37x5yWnfvWq+/tPOjhQcbamukpLmu0jKQ1U1UFPQ8a0FVZqI2l1q3uLBFxxhjjDGlpdEWHQbuae0QDfDjk141A/xYKnvq72UQbOfOnVP/vznw8/qUrsHOLJueZcXQz/HpXJsKKvwOfTrWJ3q+cdbrzVJ/SwPoNPBc31T4VrbqqquGTt8+OC9all+DCSnXImi1uWiw9ZlnngkgGWCs88PWAnr82ijw1FNPBZAduJ4Hap2hpZL1WKaG7T5oGQHSy7nnPWf6+1rin8etAdYaOM3xsREjkLxW6zUuvSbYAkCtMLQMAskWKrRkawsZDaan9UPbRqj1m9bxrKas1SLNenrYYYel/j/rsAHAH3/8AQA499xzQ6f3gvXWWw9A0uKl7TzqNX9Nuab1XDMIW9umqMWNngK1MtfzXpAGf//XX38NnVpMtQXEWmutlfl5oOEWSWkWr5bWZLNFxxhjjDGlxQ86xhhjjCktjXZdETUbVdMcr2YqBjn1798/9W8ZmKeBz9VCTWRaG6ShwNK0wMasADma7vT86Vg0SLBe8Fi1tkqvXr1Cvu6660Kma0a7H+tYaGZW15WWmGfNDHU9FsU0C1TalWiArpr2aVo+9thjQ3fMMceEnFYnKQ90TO+9917I3377LYBkMOE111wTMl1aWTVrioIe35prrhlymulcg8npHtpkk01Ct9VWW6V+b7XJCnree++9ASRL/WsdK/1buuY222yz0On+xL/V7tk6Vu4v9Qwg57jVhaoJHOpm5LrUYOX77rsvZNb/efbZZ0On7Uw4l3m3+shy1zz//PMAgMMPPzz1c3STn3XWWaHTMAEGrNfTHc75Uxev1jn6+OOPp/mMumb1WJnw8sEHH4SOCRL6t5pgpC2GtFZRY7FFxxhjjDGlxQ86xhhjjCktTXZd1Qo17T322GMAkuZKjbqnyTatdks1qbVpUOvoaM0emqHr6frgb2ltoOOOOy5kLUf++eefA0ialrUrMTO3tPu7dmVmuXut46J1eqp13pviDtOsqjPOOANAsk7UCy+8EPINN9wAIJkJo+0+SC5deuWa0O7pRx99dMicH3XNqhuL5J0p1lx43vVc9OzZM+RnnnkGQNK1o66repHmxmJGEZBsC6BwXrLCCOiaVNeNdgen6b/Wrp209a/HqfOj1w9lzaRTl96mm24KINn9XDvV8xxmZe3mgZ4LHp+6i+kuByotgDRTkHsOAFx66aUAal97RuH36z6tLuKXXnopZLpE1R2l9/Inn3wSADBy5MjQderUKeSVV14ZANCvX7/QaU06zcajK62h8duiY4wxxpjSUkiLDgOb1CKgwYasmJnW6K01wCdxtYLo2xtr8uQxJn3z0SrRZ599dsh8E9Tj0zo6DFLWpor69sz6PFoHpFpkWXHY6FEtN1ptVmGwptaM0sqsDIyj5QdINiVccsklAeRj0dHxDx48OOQvvvgiZDYl1WBADTZngz4Nim9N1xfR8697Bef9/fffr/sxZZGWwNDQOde51uuWSRysRwNUKtdP/bfVRvdxrbLOY9V6Yw0dh45fA19pEbnllltCpxa7H3/8EUCyGnjeFh0NtqbF6uCDD079W+6vmuyhFit6NDTAXKmld0Mtb0cddVTImrhC6+hXX30VOl0XPXr0AJC08muQOtFkD618zmQYoGKdtEXHGGOMMTMsftAxxhhjTGnJ1XWlplcNdmVpaTV3sS0CUAmYzbtOSXNhTRJtsaB1dGhmz8NdoHOi7SDOP//8kBmEtu2224ZOTcsvvvgigGRTUK3DwhYeWmenWnOpx6+mUx6/1q5g0NvUv5/WoE/NyHRN6f/TXA4kGzPWC45bTeRaVn+++eYLmfUpNAD+oosuCpnBggcccEBtDjYH1HXBdh9am6M1ovujuvkZGKquDW3XU0s3jl5/6s5+6qmnACTdNeo6Trv+VKeJD3Tt6FrXFiWNDVCtBeoifffdd0NW132fPn0AJPcJ3Ut4/FqbS2sqXX755QCS4Q76u7VE1w5dUEAyMJkNgNUdpS0uWD9N7y+aOHHHHXcASLYwYYsUIHmvaewc26JjjDHGmNLiBx1jjDHGlJZcXVdqelXTJLtDqxlUS2DTjdWaXFdp9U20jkBa2fq8UTMla+cAwNChQwEks3qY1QRUXFfq7jnkkENCphlSy9a31Jye1hGe9Xr0+9VdpetLTb9ppnPNUDr00EMBJN2tmk2SBxyLmsA160Y7IbO+iJZS32ijjUJm13ats1LrmlW1QI959OjRIbMmkprGWxOca52H4cOHhzxixAgAyRYmei5q6RLXY5prrrlCputF3aldu3YNWd0YzCp6++23Q6cZnMzW1Kyu3XffPWS6xPPItNJ9ROdk4MCBIfO8MLsRSGZ40g2n39WlS5eQ88yA1PnV/V1rrtFlN3bs2NT/576v7v4vv/wyZLYhUnff9ttvH7JmzjZ2jm3RMcYYY0xpydWik/VGQuuBBqtuscUWIfPtpIiNBrPQN6p33nkHADB+/PjQabBonm/M+tvawE0rU7J+jFqkNFicQWj6FL7vvvuGzCfyWryZ6FuQVtt8+OGHASQbxWptHD1+1nHSys0MsAMqx8+gQKASYA3k88aVVtl6kUUWCXnIkCEhf/fddwCSVU71c3y7bi2WGyC9yrBaCbQOFC1ZGgzamsZKdJ0NGjQoZFq/df3Xa3z6OxogzL3giiuuCB2vyam56qqrAFSCxoHk+mTihiZDaJIB94A8LDp6T9p1111D1sBszhWbkwLJuWLg+KhRo0KniRU77LADgPwbIev6U4/LG2+8AQD49ddfQ6eVkWmp0/u7WpSPOOIIAMnK7bqumjOvtugYY4wxprT4QccYY4wxpSUX11Va4CRrdyjrrrtuyCuttFLIrb0cPV1X6i5hAB5QnPHpMe+1114hM6BXW1houwgGzun49LtqMT5+v5pzd9xxx5CHDRsGAOjdu3fo1DSqDQAZxJsVDH/yyScDANZZZ51qHHpVSHNdae0JDeZkfRxtC/D444+HTJecBhvmXUI/jTR3lcra1kIDc+m+bEo7giLB8WkwrjYIvvLKKwEky/XXa0/ROVF3/UknnQQgmQyga1KvP6671VZbLXTzzz9/yHTzq+tR3ex5zqX+tjYl1XYx3Eufe+650J1++ukhsxmmuuG1wTDPpZ7fvNF557rT2nAnnnhiyGkut7T7QzXXbHHOlDHGGGNMlfGDjjHGGGNKS2GyrjSDh2jtDzVNFsW10xBZJdoZla6unSKa0bNqJnTr1g1A0rScZnrMYxz6m3p+me2hLihdc1rThyZndkkGgBVWWCFkmmbTytbnjV4b6prq27dvyBdeeCGAiokcSLqO2RqiKGPKQk3geqzsaq1j1hL0rFmlayXLDVZkNGtT5/2ff/4BkMw6q1eLACWte/zmm28eug033DDktHOue37a/+uYi7JnKnpMevxsgcBWMgCw8847p36O6F7G81LUrOO0OmR5z48tOsYYY4wpLX7QMcYYY0xpKUz3ci2Y9MMPPwAA9tlnn9AV3YzeEFr8iu0StAR/0c3lev6LajKdGjWX0jV11FFHtfh700yzRadnz56pchqtZXx6zej1xRYB2qJES+inja/oc2fFlwAAIABJREFU118a6m7VFgIPPvgggGSRz6wMyHqR9puaIZhGawlRaAxp+6euuYZayOhe1lr23yJhi44xxhhjSstM03u6nzJlSt0e/bWpJ9/IWAobSAbDtvSNpE2bNjMBwOTJk2s6Pn1i16dwBoNq0zs2igRaPr62bdvWZXx5wfFNmDChlOPr0KHDTAAwadKkUo6vXbt2MwEt31+yLDJpLUbSAo9rZcXh/jJx4sS6zZ+2GGD9Eq2jkxW43Rzat28/Q6zPsu+fZR+fYouOMcYYY0qLH3SMMcYYU1qm67oyxhhjjGnNTDfrqp4+5npCH3PZx2cfeuuEPuZaz19aXAtQm14zyowyf2XfX8o+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/++OM0upZii44xxhhjSosfdIwxxhhTWnJxXdE0p6YrNfPl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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": { + "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+j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9f2XN1y/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 0000000000000000000000000000000000000000..071a78e18cd989fea8e34eb495ce905c345317fc GIT binary patch literal 3002 zcmZ`*L2n#M6|So8>FMbiJBi~s8zO~f6;Ni8t;E>{Z9tpd*hv(THLD~`!f2q?nW`DL z-P1j(>e+a#o(m3I2`N7SPWFMr?vWcOE}RiZ)Z&2Pjd|i3}o{alTGCxIGv{Ck6C-+80)jGHm|(VWR&K` zzF1pBZ}IW?`7kji$+J7LQD2B-+N-XC^csQ)lXC z-?F0uqwj(fQ&(cVWYW3BrY!RdN4f|6XT0R2M}=G9EU5L;J>p0FfKPepmi#iC)~w98 zGMv@QJUiAXozlC^>`1)`cABME)=MF4uN~~bpEgQ=hin0BycV35j-Eix(f)HghF{3n|m~eeFlyMP@k5Jt)?4EtRfn_qCcBO@D!=+Z)EC%2RuV%8JU#`~CJ(lU7a|qp@N>WV+seChjPLMLynG-IG<<8hZ zS;wELv}&kqJXAU^u+?OUlfJC#TFw6(?HMX6)9dA_sT>%pdH*R%5HAAvpcdvak(&3HwAth%0y>|ERp3=RJ^F^^DmiP)^;`$xv_2?3*P)n|9J#iU~zvui^W>)Ee~7=q7gp0#Ii zcFv)t)3;=B?cZxPjsA+Ywm~tTmA{c zZqh4gg}1lVSjTC&rHYri-VNV~!h7Rvrn5F2r$w^bqaVyDe$$I-{%V}b)yyt|#x7wH zMr&p~LTvS;2>U3ah$5>|X}=SUVqHX8JX8iQ)QBRxXcWEiBKdxMt)R^LL53|epwp; zRnTxzYtlP#rw(LZiP6J4vZ0f8F{_SQSt+37qtYwFYGxlo)`096Ru+)_KuE+G%)1Ji z580QevZj?gbGcizDASitU;GF`>nVHDa#_*Z4fLNl`pBkS1~b`@A$x|3oJ!zmZdv5& z@8Y;~^pHSK? z;@)oM6?qB>R^r*P5);(o2I_j{|3FP_Dr~#@7Up#7_LdW*LRz?T0N4MHl?07K=_vXX z6HExg_*qs!L*i}=0@06VjNkpMQ z^#hPO4AcaQ#M6t_#P=yXwYjQ*HO(nh%Z|FYy7IXE-1bI|F6a05g`vn%eV8} zVoMY1@f>i>#8fpr8%C4aNrPcr&?_TNp3j~g?kFy{anjL9WwI0C=`nxEYKlZQaoQ|p iSN_U1(a!CbEC2g5(|$mxF^eER?xuykx11pK>;DFUpZzBQ literal 0 HcmV?d00001 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..0791cd41a 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 @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -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", @@ -99,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -132,9 +132,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAItCAYAAAAwm9DjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9dbxU5bv+f3HOh9KPgaKgoqCgomKCXWAHdoEdmKhYGIDdgYGNiomFrVgoFthSdis2KrbU55zz/eP3u+65FnstNnvvmVmzx+v91/26956Z51nPs+rOJv/3f/8HY4wxxphq5L/yHoAxxhhjTKnwg44xxhhjqhY/6BhjjDGmavGDjjHGGGOqFj/oGGOMMaZq+dec/jhz5syqTMlq1qxZEwCYNm1arvP7r/8qPGc2adIk5P/5n/9p0Pe2bNmyCQDMmjWrKtevadOm/4j5Vfv5V+3z8/5snHD9pk+fXpXza9GiRRMAmDFjRlXOr3nz5k1m19miY4wxxpiqZY4WHVMaaMmZPHly6D799NOQe/ToAQDQGkeud2SMMcbUHVt0jDHGGFO12KJTJjQGZ8aMGQCAQYMGhW633Xar8b//+7//W6bRpaNWpKZNm9bQ/+c//0n9nM7VVC7//d//narnvtN1TFvTrBgz3Rd572Fjism//lW4ZdZ2ndO9r3I1Wuf1WsLjknX94LHQWNRSHxNbdIwxxhhTtfhBxxhjjDFVS9lcVw11ZzRGc5/OWcc/YsQIAEkzaM+ePUNuaHp5sdDxjxkzJuT55psPANClS5fQNfb1STOt1ve7aMYtp2m2NtS0zLF8++23NXQAsOiiiwIouFgBYMqUKTW+87PPPgtZ/3fDDTcM+d///neN728I6i7Lcp2lob/Pdcl7TdJI20dZ1Hf83N+VOP9K58knnwz5jz/+CJl7sUWLFqFbbrnlQl5kkUVCXnDBBQFkJ5tQrsT1ydqfX3/9dch//vknAOCnn34K3ffffx9yp06dACTvH1n3ymJhi44xxhhjqhY/6BhjjDGmaima64qmOzUn1zfSnJ/LMlM3lkwOHfP48eNDPvroowEUXFhA6U139WH69Okh9+/fP+QLL7wQQGWOuTZ0zL/99lvIP/74Y8g0rdY2J11fmmsB4LLLLgMA9O3bN3StWrUKOY9j9dprr4X85ptvAgDuuuuu0KkZukOHDgCAv/76K3RffvllyMyq+uSTT0I3a9askAcPHhwyj0FD3bFctwkTJoTuvvvuC/mbb74JmcdXrxNt2rQJmeffkksuGbq8ryncS1OnTg3dTTfdFLK6SbguG2ywQejUdUh52rRpoVt66aVDXm+99QAUXNBA8eZfW6ae0pjqhHF93nvvvdANGDAgZO5vdV3pMV922WVD7tixY42/r7/++jV+a5lllgld8+bNQ84jK5dj0vN84sSJIZ922mkhf/jhhwCSe/b3338PuW3btgCAG2+8MXSsHQeUJnTDFh1jjDHGVC0NsujoGy3f/jUA6f333w9Zn/7S6q9oYO5HH30EAOjcuXPoDjnkkJAZ4Jj3W1gWfOLWJ1N9emXg8cYbbxy6Snmj0Tf7cePGhTzPPPOEvPrqqwPIfiPjvsj6e551dnSfvfDCCyEPHTo05JEjRwKofU10Hs8880zIV1xxBQDg0EMPTf3fUq61zu+dd94Jed999w35hx9+AJA8f3R8XHc9v/V7l1pqKQDAzjvvHLpVVlkl5O233z7khpyjOqavvvoKALDXXnuFTquJL7HEEiHzjVmvM2oJeuCBBwAAd999d+jWXHPNooy5oeg147HHHgv5jTfeCJlrcfvtt4du5syZIfNarGumczrhhBMAAKeeemroagt8ro20a56OieieatmyZerv1xYsnkewLo/fkUceGToNNuZa6XVAraAqM6BZj8X8888fMo/FqquuGrru3buHvO222wIoWJ5LRdo1i9bq2WW1/jPI+Oyzzw6dWnx+/vlnAMB3331X5BFnY4uOMcYYY6oWP+gYY4wxpmqps+sqrZUBAFxwwQUAkuZUDfZU18d2220HIGl6VNMl63tosC7dVQBw8MEH1xhLpbh+gIJJUl0jDz30UMg0c2pbhUqpnaPBZmra1zoQXAt1DehaMPBMA+iaNWtW/MHWgTTTurpWf/311zp/l85f13rzzTcHUKiXAZR+f3JMakLWc1GDpXfddVcAyWBcdTPQJK/Bknrc2rdvD6DgwgKSezmr9H1dUdP+ww8/DCBZ+6dXr14ha2Ao3Vh6zLWOB102RxxxROg0MJsugXK6sPhbrVu3Dt3w4cND1gbAaYkfv/zyS8isaaLB5Hp86KY97LDDQrfYYouFXJ+9yv13zTXXhO71118Pmdf3eeedN3TqmtFzZeWVVwZQqOcEJPcf/1ddX7XVoSlFHSe6kABgs802A5C8pmgYh17/GNCsruUnnngiZK7bq6++Grrnn38+ZLq+su6PpYDH/8EHHwydXmuOO+64kBnsr7V19H8Jg+LLgS06xhhjjKla/KBjjDHGmKqlzq4rNd2pGZlmNDWxst4KkMyaUpdGDEQyBJ566ikAwNixY0OnZrx99tkHQLbpMg/UdcP6FRppvtNOO4XMrKVKyhrjumq9g3fffTdk7a7OY617Qc3kzExYZ511Qqc1ZfKYN9dHazuoOVgzKGrLCkv7Ls2KoRtXa2pkdXovNuqCufnmm0PWOh1XXnklgKQ5XdeE56Kek3p+8X/1M6WeH39roYUWCh2zhwBgxRVXDJnuV13H5ZdfPuTevXsDAPbee+/QqUn+5JNPTvxmOdHj3K5du5DVTVjb5zhuZv8ByfVhfRZ1FzUUHmt1wWjW5t9//13jM3fccUfIGrpAl5WeP1oTiK4tPT6bbLJJyJtuuimAZJ2gUoQG6HfyXOG1XXWz/+9aa60FALj22mtDl3Z8dP/qtXaNNdYAkLz/lRr+/tNPPx06dUctvPDCIdONre4srVN20kknAShvHStbdIwxxhhTtfhBxxhjjDFVS4OyrtQcR1lNWFrkSM2kmtlD1DRH06SaqSslKykLNb3SzcZS2EDSjcdsNDWt6ufz7C6sJmLN5NC11LUianpkcSwtYZ6WIVfOwoH8LZ2fombWuW39oK4hzUBcYYUV5up7GkrauTh69OjQqbtCz58vvvgCQHJ91E3A/00r+JYXHJOauxdffPGQda61Zd0wQ4bZn0AyKyvt+pQHdcle06w3Xn/OOeec0Ok5y/nrmjd0r3J8dIsCyUy/SZMm1fiMZiU98sgjIbO4I+8DQDJDi7+lYRLMxAWAtddeGwBw+eWXh06L65XyXqLunM8++yxkLSTIkIznnnsudFn3VaLFR48//ngA2a7lYpFW5FXvWVrkUGG2J0NQgGS4Cgvlquu81NcaW3SMMcYYU7XU2aKjT3n6dMcnbs2N17Lw+paU9vSpT7Gs6aC1W/SNi0/N5QzGSiMtABkArrvuOgBJi4jWseD89Y1aZQbuLrDAAqErdbAW56KWCW0wyLYBQOFJXgPotBw/P/fBBx+EjiX8gUIQYd7BnmoxVOsArWtZdZ7YzFItOv369QuZVs1yzo/rx4Z5QHLMWueHLRr0XN1///1Dpl7fwvK2qNJioftIkyH0WpFmKUxr5qp1PjTZ4YADDgBQKGUPVFbiANH11blwL2odM23LQYtAMRsl81zR5pV6zLt27VpDp3uKtZ2AQn0fvf4wgBUotPjQe8r9998f8llnnQUgGaw+bNiwkLXBbrGbmeqYLr744pDvvffekHnf0vXTc23LLbcEUKjHBSStj/zfcu7JNCupjl+v9WeeeSaApJVGazYxSaVcCRqALTrGGGOMqWL8oGOMMcaYqqXOris1N6q5mN25tdWDmkbr0gmav6EBdmPGjAmZXU818DnP2ixAsuYMWzwMGTIkdFounJ97/PHHQzdo0KCQWdq+mHUuaoPro7+pNSHUjMogxqwAMpo0ta2CuvE0oLRccH5agl7XTwM3uRZq4lYz62233QagUModSAYbsuaQBuuVOliQ59rpp58eOnVNsYUCUBi31jxRmW4E/S4tx1+uc01/Z8899wSQDHDUTuZak4QtKjRYc+LEiSHTpaDnrO5lti5YaaWVGjaBEsF9q7WrzjvvvJDfeustAEl3+ODBg0PmOV7q2jK1oecf1wwouKHUHaJ1kHhf0HuNtgMZOXIkgGTbnZdffjnkHXbYIeRiBcHyXNQx9e/fP+Q333wz5G+++QZA8lh17tw5ZLZQ0BYsGrjLc70ULS7qi9ZsYpC5XjOOOeaYkHn/KKc73BYdY4wxxlQtftAxxhhjTNVSZ9dVFmndU+trTkvLmqgkMx3Rcdxwww0h77777gCAAw88MHTqhqNrR9sOaAZZWouMUkM3gWZ6XX311SGr6+2jjz4CkDQna9YZa2nonmBtGSCfDB7OTzMFmR0AFNpWAMBWW20FANhiiy1Cp643uk/0u/bdd9+Q6bIq5z7lb+k+0rYjPXv2DJnZSlrnQ+s8sTS/ut7OP//8Io+4dvT40U2t4zzooINC3nnnnWv8rx4LrWnF809dWwr/nlb7qRKg60LbVtx0000hc/yHH3546NSNVc5slzmhx1SvCXRtsNUBkHRj8n81NCKtXYKub7muqTonveapG5huRNazAoDx48eHvOOOOwIotIoAki1O6ObSti4axqHZUOWCmahAYX+dcsopoWvTpk3Itbm+uZZzc/7N7Xlpi44xxhhjqpYmc3oimjlzZtleY/QplG9f+haq9TPYQFGrZdalmmmzZs2aAMC0adPqPD99ytQ3Iw0m45sUmwMCyTcWBqNpo8z99tsv5D59+tT4rbq8UbZs2bIJAMyaNWuuP5T2/bomOhYG8GllVW0GyjcSrb3DaqfFoGnTpnWeXxpZdZBYsVRrb7z44oshM+DwnnvuCd2aa64ZclqwYF3g/Ip5/qW98abVBgIKQb4M+gcKAdgAsOGGGwKov2WO51995qfHVJuqXn/99SFzr+k1Q6vw0tKl59zAgQNDZmXvUaNGhU6D9GtbV86voftT0bVizSq1Yr3//vsh09KqtZOKWTumFPuzLqRVZtdgega+qkVFLV6tW7cOOW0Pc/2mT59etPnpnqF1WK+PWlGZ+06TWfT6ROuUzkM9CmrpSbPetWjRogkAzJgxo87zy7pm6L2allRtAMraeEBh/2VVxueYtaZblnWO36XryPVTbNExxhhjTNXiBx1jjDHGVC1FC0ZuKGrGomtHS5hrTQGakfMuy67mSDWz0bSmZj41rTLwVYNFDznkkBrfW84AyDQzYtbx5bzULKp1Hjp06AAgWZY+rUFc3uiYtP4FzbAagK0tEljmft111w2dHqs8A1ez3J1pgZ86Zg1WZTA2S+kDwEsvvRQym/LlEVSu81N3ktYs4by0zoy2K6HJX83h2kCS56o2mlQ3V7nWN8u1yrmqu0qTCFhTqDE1Ra6NNNe57km27QAK66rJBlrzLY9gbB0/x6LtWtQdx3Y0w4cPD526uTh+bZGhyS7lQt1tekx5/9Omq7p/mQSh4Q56r/z8888BJBvB6vppyAqDtNVNmYYtOsYYY4ypWvygY4wxxpiqpWJcV2oOpklMy3Oz4ylQqBmQd20LNRfuscceIV9++eUAgOeffz502h2Zrit2EQYqs05Qbeg41XVFN4jWiagUd1UW6sbhWNXdMXbs2JDp0lJzc96uAY45bR5Aes2YLHei1p9J+3ulkOVa5bpoHSB17fBzai7XTuXM4GT2HZB0jeTRAmPEiBEhs52HZlJdd911IfNamfeebChZdXKY7dO3b9/QaWsXZkuqO7JcxyKrho2uJetYaaZUp06dQman8ylTpqR+F1sraEf31VZbLeRSuuayus/rWjErUN39eq/k3/X6qtcnXn80nECzqvVzrM8zevTo0KkbPsaXOSNjjDHGmEZOrhadtAAzoFB5VgN8NdiI1oM8LB9Zb8EauMmnUz65AsnAxm7dugGonADWYsO3Gg0gT3v6r0QrAVAYvzZd1WA41pHJOxg+7fzRAEx9y916661D5vHXAEFt+slmiPpGpXJj2au1WUlVp2/ESyyxBIB8Kszqm63WKRkwYEDIfGOl5RhIri9pLOs0O9zX2hT4mmuuqSHrnrzkkktCZrC8Uupzldc3TcDQYHgNnGbl8bfffjt0utfo0dBrjlYBP/TQQwEk6+jksdZ6/UhDrThaRX6XXXap8XftEkCLZLt27UL3888/p8q01OqxSsMWHWOMMcZULX7QMcYYY0zVUjHByGrGWn311QEkTZNqhk8rAZ4HWXVYLr74YgDZgVs0ozZW03IaOpddd90VQLIppgaLbb755uUb2Fyia8XAN6191L1795BZzrySgj0ZgKhtC9h8FUg2w0wjLVhZy7r36tUr5LxddsVC57HUUkuFzP2ppvlS117h/tO2FnfeeWfIP/74Y8gXXHABgGSdp0raiw2Fbhy6eADgnHPOCZmujUsvvTR0q6yySsjlqkOm14w///wTALDNNtuETtdSa8Lx/qWtDDSAdtNNN63xXVo7hveaPM5D3We8TwPJdjis76Nz0vsjXW6awJIWxqHr1759+zmOq7ZjURlPDMYYY4wxJcAPOsYYY4ypWnJ1XalpSk3nNCOrTmtGpLUgyBudSyWNq1ykuQGOOOKI0Gk5eppuK8kFomZoZkuwFDkAHHjggWUfU22kuU7vuuuu0KkbS+fH+kZvvPFG6LQcPVuTqItR2y1Ui5skqw7UcccdBwDYbrvtQqcZeOoyKpZ7hJk22grmscceC3mHHXYImVk3lXT+FBMe044dO4ZOW3ywfo7uWd2T5QoJ0N9h7RfNvh0zZkzIrH0DFFrkLLnkkqHTOk4M09BwDl3rPNdd56zj69q1a8hpNb30c9RrpnWpsUXHGGOMMVWLH3SMMcYYU7U0mZOZb+bMmWVLC9KCSePGjQOQ7O6tGQgbbLABgPq7iJo1a9YEAKZNm1Y9aU9Cy5YtmwDArFmzyja/tEKKmh2XZrqsb8HApk2bFn1+Ohbuq5EjR4ZurbXWCpndhUtlQub86nP+FSMjkccibc2KAc+/cl5f6gLdSLwOAcmCgppBkgbnV5f9yWPNYqlA0nXfo0ePGvq8sjYbsj/rQlYLiLSsnGIeC67f9OnTy3b+lbMFUIsWLZoAwIwZMyry/GsozZs3r3FjsUXHGGOMMVVLxVh00t6ov/rqq9CxLDvQ8BYQtug0bkph0VG4F/WNOq0OUqko1xtzXlS6RSfNIlmXdi31seiQtHpGQGUlOPxT9md9LDqNAVt0jDHGGGOqCD/oGGOMMaZqmaPryhhjjDGmMWOLjjHGGGOqljlWRq72YLNqD8aqpGA6tRx+9913AICFF144dNrgrjYYTFft+7Pa51ftwfLFTHZIK99QGxrYnFa5vb7lHZjsUO3Xz2o//6p9footOsYYY4ypWnLtdWWqGy0C+e6774Z8+OGHAwCGDx8eOi0f4Lix8pNmMUgr0qZyfS0C5ULHlzbWSuwVldWzKS3tPMvKQ3no0KGh69SpU8jdu3cHUJnz/yeQdn6lUc4igtWOLTrGGGOMqVps0TFFh2+f2v17r732CrlXr14AgMUWWyx0fmMpP3rM09p1/P3336HTGKpitJkoBvpGrBYPxqCwlQMA/PnnnyGz6/ICCywQukrZf1ltUxTqs9ZhwoQJAIBjjjkmdGussUbIjz76KABg/vnnr/W38oDzyrLI8e+1FXFU61je6Php6dbza8aMGSHzXGNHdKBuBSvzJs3iW1sLj1JbhyvjimWMMcYYUwL8oGOMMcaYqsWuqwohzXSnpuksk3al9MDR8X3zzTcAgIMOOih06667bshHHXVUjc9UojlWx6eB1TzmlTjmuSHN9aFm/vvvvx9AMlj81ltvDXnBBRdMfE850TGr6V+D3d9++20AwNNPPx26J554IuSFFloIAHDHHXeEbv311w85zyDd2gKoVa9r9thjj4V87LHHAgBWXnnl0PXr1y/keeedF0D++zfNHQUUyk/8+uuvodO1/uSTTwAAHTp0CJ26Iema1L9nBdaXkqz1e+mllwAAF1xwQeh0fssuuyyApOuxc+fOIee9bmnUlsyga8n9l9XXrRTYomOMMcaYqsUPOsYYY4ypWirGdaWugYZGYKsZjWbovM19aVH3aiJXMzTNmI888kjoRo8eHbKapGnezMPcrmumptcTTjgBANCiRYvQnX/++SHPM888ACqrjkeay4AmcgAYNmxYyHQDLL744qFLm4vq9Pvznnfa+XXdddeFPGDAAABA7969QzfffPOFnMe5xDFPmzYtdBdeeGHI11xzTcgzZ84EAMyaNSt0Ov5ffvkFANCnT5/Q3XzzzSGvvfbaAPK/ZmRBN4+6q9RNvM022wAALrnkktAtssgiNb6nnFkvab/z22+/hXzllVeG/NRTTwEAfvjhh9D99ddfIf/0008AgLZt24aO1xSgcC3t27dv6A477LCQNYOw2GucdRzV9XvnnXcCAPbee+/QsbYRUHDd0YUMAIMGDarxG3nvz6ysTbr2x44dG7pLL7005CuuuAIAsMwyy4Su1BlytugYY4wxpmrJxaKTFqz0888/h8wn/bq8ZejTJYPRAKBNmzYAyhv4RHT8GjT89ddfA0i+kb3wwgshjxo1CgDQrFmz0K2yyiohb7jhhsUfbB3gvPQtSwPrvv32WwDAPffcEzoNFszbokGygr3HjBkDADj00ENDN3ny5JD5Rnn00UeHrlWrViHzTfStt94K3XLLLReyBr7SKlbqt7O0Krta50gtbrSadO3aNXR6TjW0V1J94HH64osvQqcWHYXWmwMPPDB0W2yxRcjnnnsuAODNN98M3ZAhQ0K+4YYbABSCJoH896zuz/feew9AMsB4tdVWC/myyy4DkLTipFVczqOytf6mWufUek2LtVo8dPxrrbUWgKTF+Pfffw/5+uuvBwCceOKJoVOLzyGHHBJysc67tHuaXtOffPLJkGndWXLJJUOndZ5effVVAMl7xmeffRYyg6zzCLDOsuKo9bR///4AkhadW265JWTOu5x1jmzRMcYYY0zV4gcdY4wxxlQtZfPnpLlxHnroodAxQAkAPv744xqfqc1Mpzo1OTPwa7311qv32OtKmhnz2muvDfmcc84BACy99NKh22CDDUKmG0Frz6y44oohp7kRSo3OhcGeGiCnwdIjR44EUHAbAumBuXkGtQKFoFQAePDBB0OmaVmDITXwkcGSWqdFTeM8PgwqBIA999wzZF1XDeguNllmZgaOcx8CwJQpU2r8r7pL8whcVWjmXmqppUKn1wy6S4HCubTxxhuHTsvpv/LKKwAKLgKgMhso6nFW18wZZ5wBIOn6ueqqq0Ju3bo1gOS1YW7q85QDvQ5oCxh1HTIId5999gmdtqvgd2TVVGLNJA1X0GD0UsBjqq0c7rvvvpBPOumkkNnAWNdHA7PpUtbry8svvxwy61tluSZLQZq7U39TXd8cv85f73X8XF2uKQ29/tiiY4wxxpiqxQ86xhhjjKlaSuq6yjJzMVvivPPOC53WNqDLQ83UK6ywQsjMv+/YsWPq92uGz6qrrlrj76Xuvsx5q2tOzXg002633Xah0wwCdU0RHX8ebR/095nVcPfdd4dOM8iYFUAXDpA0s/P46JxL7S5IcyfedNNNIZ922mkhsz6OZvXsvPPOITPbbPz48aGbNGlSje9deOGFUz+v2XSlzObJcvfefvvtAJKZLl26dAmZLTy0TlDecPxZ2TN6HNMyLNX1w8ytrBYfebp2srjrrrtCZvfxU045JXRpLQL0OKR1v87bHaljYiYVUNiLtZ0nmql79tlnh8wwgYMPPjh0eq0t5bVGr806fm1HwbnonBZddNGQ6ebSrDqtc3XjjTcCSGaVlSIDK8v1TS6++OKQec0ACq41dRemudayMqF5DPXvWRlec5tBaIuOMcYYY6oWP+gYY4wxpmopqetKzU0ssgYAZ555JoBC9DkAjBgxImSaLtWdVd/slHK1gFAz25dffgmg0EUYSBYvoxlVs8MqvSO5dodmOW92IQeSWWH838cffzx0LIIIFLIFNGtGsyrKlfWie1L32sknnwwAOOCAA0KnplF279aCXzpmdurt2bNn6DbddNPU/y0laZlyAPDOO+8AAM4666zQaQYSs2E0q6NSMpGyxpHWiV1dwB999FHI3JdqWt9kk01CzrNFia7Zjz/+GLK6UZlBqgUr9frIDJ73338/dO3btw+Z65rl7si7kCDPL3V3aAYjszrpggWAqVOnhnzbbbcBAHbaaafQ6f4o5V7W39FzTrt3q0s77XMc37///e/QqeubBS/1PpEW7tBQ0vaBhmOwcCUADB48OGSeV1ktcCh/+OGHoXv22WdDZtZWu3btQqdtj7Tg6twWArZFxxhjjDFVS9EtOllPzvp0utVWWwEolNoHkgFG/F/VlbNc9NyiT6naDoGBrVlN5wYOHAgAOPXUU0OnT/l5vj3r+umcWNYbKLQG0LfEPfbYI2TWQdJgPD0WtO5oAJsGkJdi/mnfqXU6dt1115D59pDWHBYoHCOtw6Mlzvn3rbfeOnT6xpVHuXZ986FFVYPBX3zxxZC5F0sdtF9M0uaqTVk1cJI1V9Qit+WWW4ZcKXWevv/++5C1PkuvXr0AJK8Zzz//fMi0/rBeEJA8V2np0HNaz9U80POLFje1Hrz22mshf/rppwCS9wetU0WLuVq5Sm2d417Rek2rr756yBdddFHIrDmjAfJvv/12yKxfpXWGtOksLdGltrzp9/M3aU0CkgHSOlauix5/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/AxQmjWxRccYY4wxVUsuFh0+sY0dOzZ0DHAEgKWWWgoAcNFFF4WuRYsWITcW64cGY+kTa23Bko0FfTNiAB0AfP311wCAXXbZpexjqi8azNm6dWsAwNtvvx26ZZddNmSuXyW+GStZwf5Dhw4FkAwgPOKII0I+99xzASRrk4wYMSJkvlFq7RbqgOSbZrEtOfp9n3/+ecga7M9gcgZFAsk33t9//x1A4ToDJN9Od9hhBwDJa1IeVoDa0DpPatF5+eWXAVTOOLPQY6rWt4EDBwIAbrzxxtDpXI8++mgAwDLLLBM6DZxnkOzFF18cunXXXTfkbt26hVyue4laVL/66isAwKOPPho6WjkAoGnTpgCABRdcMHT0cgCFfa86vT+Wct379OkTslpBW7VqVeN/9dheeumlIdOSdeihh4ZuhRVWCNkWHWOMMcaYOuAHHWOMMcZULWVzXanpjjUD1HSlgbl33nkngKTprrG4q4CCmZ0uHCBpmq1G11VauwsNUK5E1ETK2kwA0LNnTwDAMcccEzoNrKaZttJdA4ruP7rk5p9//tDpXKmfMGFC6M4+++yQ6ebRYGS6E4Bk4GuxgiS51xhIDSSTFTTYn25i3X/qrmDgpLq+dC7q5qtk9JxTN6se/0ojq+3K4MGDQ77pppsAJN0xdGcBBfeJ7l/dZ6zvpN+pwfS6F0rphta5qhv16quvBpB0V+nvM+RBA39VZuLOJptsEjoNVi7FvZLnn7oAs44Z500XXNbfy3kftEXHGGOMMVWLH3SMMcYYU7WU1MappilmOgCFOgfTpk0L3dNPPx0ya5aoCU6/iyazSnUdcFzqetOxVmrrijmRZmbUFgAaVc+sgkp3N+qaqJmVrqv77rsvdM8//3zIzCZrjPV0gIIbOcvF9MorrwBIZmKpmf2QQw4BkMzAKIW7Kq0jupad13o96uZg1td+++0XOs0KW2SRRQAkswLVtcA6OpXUNiANHZMeC81GqhS4lro3tO2KXj+4l9Q1vv3224fM9VXXl64Vs+Y0a+uNN94IWbtuazZssdH1ueSSS0K+6667AABrrbVW6LbeeuuQt9lmGwDJ2l2rr756yDyGuublcgPp+mWFLnBdeB0BknWQdt55ZwCFGluAW0AYY4wxxtQbP+gYY4wxpmopqetKTVuPPPJIyC+88AKAZKS4Fif74osvAGSbs1j6XKPuK8m0zLEstthiodOCZHTtaKZPpbt51DTKcuXsEgwA33zzTcj9+vUDACyxxBKhq6T1ITomnR/NyJqdwY7Q+nd1l1SiG0vnlJaVouZ+LV7GQmvzzjtv6PT8XWWVVQAkz+9Sz5+/pUXK9PfVDb733nsDAM4444zQqWvyrbfeAlAorAcAHTt2DHnTTTet8f2V6G7Wa4aOrxLPNR5LdQFrpttCCy1UQ//mm2+GTuWll156jr/FY6F7Uvd6KdHf4T4DksX92Jpj+PDhoWORUqAwbs3+UzcW5byzd7Xj+rBhw0J+6aWXABTu40AyA5kZ1j/99FPo9F5Yikw4W3SMMcYYU7UU3aKjb0H6xHfllVeGzHLe+kbVu3fvkPlEq090GnjWvn17AMBVV10VujZt2oRcKW80+kahb1yV+Pafhq7lPffcEzJLeGsjN11rzlXfotMCSyvpOOieadmyJQBg7bXXDt0DDzwQMttdcB8ClTUXonPSoMsNN9wQQKFeCQCcdtppIdNSdfnll4eua9euIfNNs9Rz1vFzL2qrjpVWWinkiRMnhvztt98CSAaT6+euuOIKAMm2AQywBgp1TCrVyspzSduuvPvuuyGz1omev3mgv//xxx8DSNZb0gBwDUbmvUAbOWsAcdq+0+vLq6++CgD4+++/Q7fyyiuHrO0kinWv4FzZkBNINiXVvXT88ccDSFqx0iyGOidtJ0RPQR77U8f07LPPhqzXCgaTa1A8EwCAQk2gZ555JnRHHnlkyEwi0HVqKLboGGOMMaZq8YOOMcYYY6qWoruu1BSopnEtUc7AKzX9H3TQQSGnlY5W1wndCGqubdu2beoYKgU1+eVtUp4TGkw3fvz4kNXkfMoppwAo1JsBki0EOFd2kQaSc2bgmbob80b3DGWtw6J1IGiy3X///UOXVucpb9LccUChjgXreQBJNwKTBDbbbLPQ5R2MS3eFmvC5D4FkTR8Ga3KeQLLmyOjRowEk284ceOCBIdPNV6muK55L2vbizz//DLl79+4Akqb/crW10PNcx8S1+uijj0K3zz77hKxuKq617lmV+Xc95zQYfdy4cQCSAb4bbLBB6hiLva/Vxf3UU0+FvOeee4bMdjK1uX71WqzJHh9++CGApDu5XOg1RdePtaeAwjFV15yuFZNxNPRB7y9TpkwBAAwaNKhYw7ZFxxhjjDHVix90jDHGGFO1FM11RTPbZ599Fjp2IQeS5Z5vvvlmAMnaAFoTJ821o1kVNPlVqmk5rTvrH3/8EfL3339f9jHVBzUHq8mS2W5ajl9N0jQZax0FNdOynLu6HvKuCaFwrura0DpPdBno/qsUd6QeR5X1/GH3Yx2/ugbeeecdAMnu31pTJw/XHH9T56RtAbRT9YABAwAkXeDMxAEKdYROOOGE0GlWSCVm0Ck8BmPHjg2dZqXmuRd1fTRcge0AVlxxxdDp+a9utrm9rqtrh5l2QGGva70dvf+UokUJ68RoppW6WdVNw3FnjYPfq261W2+9NWRm27HVxZy+q5To8deaabXRpUsXAMB5550XOs3A5vyy6pzVh8q4OhtjjDHGlICiWXT4xKV1BBh0BBQCsIBCHY+sADnqWUEZAC677LKQ11hjDQDA+uuvH7pKCQAFCmPRyrn6xPv555/X+EylBLPq29Saa64ZMgPggML66P9qMCebJWowb9paV5IVR+HxVytGp06dQmaQtlo81OKTx/qlNU3UOhcaLM4GgaxwDRSqWQMFi84vv/wSOj0WeZJ1bFkNGShYco499tjQaU0V/l0TIPRcLVfgbn3hMVCLq9Z8Wm211QCU1+KdVs1WkxkYYKrrpOdUXSwStCRk1eH59NNPASSbtmY1WG4IatGgxUWDhtVitdRSS4U8t0HI2uha69AdfPDBAJLByHlbIevSdJtjXXLJJUPHRq1z+lxDsEXHGGOMMVWLH3SMMcYYU7UUzXVFc5MGlc0333wh//777yEzYFlNqwxWAwoN3G655ZbQaeAVS7irOT1v010aatrUwNbGggY1tmrVKuS0YDkNvGOwmQa4siy4UknuxjTS2lYAhWZ0ee+5NHOxBkNef/31IWvgLcut65pozQu65KZOnRq6du3aFWvYRSOtRQQA7LbbbgCAhx9+OHTalJTHTcvWsyw/kB5Ymfde1WsJg/zvv//+0O2xxx4h81qTR+0jDYqeNGlSyNxrek/QNUtzs2XVHuO+1KagGqzL+l4nnnhi6udLcd6yZpAGW6trVNePc81y3dPld9hhh4VO2yn0798fQPL8zbsdhF4r6AbW63/auapuPnWTqxurWNiiY4wxxpiqxQ86xhhjjKlaiua6ojlw2WWXDZ2a7q655pqQaVpUc5tmaNEkp2b4Xr16hUyXVd6ug9pQ0/HkyZNDrpSaK3VBjzVNlpqdoplkdHPp+uZt+q8Pam7ebrvtQr7wwgsBJLtfq0m+lOje+fXXX0Omm2ro0KGhO/nkk0PWDDjWAdKsjhdffDHkjTbaCEChSzJQ+euna8WssZdeeil0bIsAFErLawl7NZ1fffXVAPKvHaToucR2ON99913oNt9885DzHKuug7ZgSKt9pq4PdcPwf/WaozW56LLSFibaYuGiiy4CkDwnS3Gv0LmwTpq6gLNqw6VlzT355JMh042qn9cWSGyhk4e7SvfWfffdF/KwYcNCZoY0QxiA5L3ik08+AQAMHDgwdLpv2LpFdQ1dv8Z3xzXGGGOMmUuKHoysT+asUKp/BwqVD9k8D0g2iGQdCM2z1ye6SrfkpNHYx5+GrukCCywQMqvM5v0WXF84bq2sqxYdvomoRUcrr5YSfQtmUDRQeKPS2j5amVzljz/+GECy6eI666wTMi1WlV4tOKv2FGs+qZVGmzryGOnfNZiyUuaq89M34g8++ABAMkC1W7duIecx/rTr/1prrRUyA1M1gFrrwGgVYzblHDNmTOhGjhwZMve91uQZMmRIyAxmLYXFI2tNuH/U8jRhwoSQaYUBgDfeeANAoUMAkEzGYTNdJt3M/vk8LDm0ruj8GBQNJJOQaN3SBqe67kwMUIubVjbnXi7mPrZFxxhjjDFVix90jDHGGFO1FM11RdTcpKapiy++eK4/RzNopTbtnFvU9dG7d++QtSZNY0bNuG3atMlxJKVB96TOj6ZVuoCApBm+lGSZzjlWLYuvzWM1MJ4tVLQsvgYGshZIYzr/dH507ag76/HHHw+ZiRE6/1NPPTVkuj7ydr1mNTWka1/r1EyfPj3kUtQhmVt0zAxqBwrtekaPHh06DQZXlxddqhqMuvzyy4fct29fAMARRxwROg0cL+W+1fmpu4aubW2rsvvuu6d+B2vKtW3bNnTa4JL3Cg0HyPtc5PVF3dlHH310yNddd13IbPGkx0rbfRx33HEAkvdE/btbQBhjjDHG1AE/6BhjjDGmamkyJzPRtGnTGmfaTC20bNmyCQDMmjWrpPNTc7Nmw1CvWWfFNNc1bdq0CQDMnDmzpPPTMWun7M6dOwOoW8feutCsWbOyr5/OlZ2wtTZGVrnz+jC366fmbJr71YWjrlMdE/edjl//t9R1nrh+M2bMaNCBymoRcO+99wIA9tprr9Bpd/kePXoASGa1tG/fPmTu1fquY/PmzUu6P+myVHeVum5KvX5zuz91fehS1doxc/M5om4izrVUbR24P6dPnz7X68dzUWs3cR/OPj66jrWtkbqxOP9SZc+1aNGi3vszqy2Ousy1DQjR9aNrNa0tRjHg/lRs0THGGGNM1eIHHWOMMcZULXZdlYm0EuClyuool+tKyXLzlIJyua4UnV+aab2YZub6rF993BW6TuXMMCqW60pRM/iUKVMAAMOHDw9dx44dQ95iiy0AJN2NxWxXUmrXFfef7sNyFglsyP7M6thdG2l7tVR7tj6uK1Jft2E5168hrqss6jLvUs/VritjjDHG/KOwRacKycOiU07ysOiUk3/K+hXToqPw7VJrs+h1jgHbpbIIlNqikzf/lP1ZH4tOY6AUFp1KwhYdY4wxxvyj8IOOMcYYY6qWObqujDHGGGMaM7boGGOMMaZqmWNTz2oPNqv2YOtqX79qD6ar9vWr9mDPUgVb5w2Drat9f3p+jRPOT7FFxxhjjDFVyxwtOsYYY4wxxYJFI9OK6AKlKShoi44xxhhjqhZbdEqIlqXXp9dSFywzpq5oaX4W2stqMaAd0k3lwWtNbWX5s9qasDs6kM81Kq3FhVLOdgnFQu8FKpPaWpA0xjkruhenT58OAPj9999DN99884XcokULAMXde7boGGOMMaZq8YOOMcYYY6qWinFdpZkpG5NrJ238kyZNCvnjjz8OeYMNNgAALLrooqFr7KZJnT9Ns1mmZ5ppK33Oxei0XMmoOfnvv/8Oedy4cQCAb775JnTLLrtsyKusskqNzzcmuK7qQtC92Fj2pe5PXYvffvsNAPDTTz+Fbtq0aSE3bdo08X+z/2+PHj1CbtasGYCG7+naxqzfT9eZutD0c2mujUo853TMn376acgTJ04EUDi2ALDGGmuEzPWZZ555QjfvvPOGrG6uSkbPL3VT9evXDwBw++23h27nnXcO+YYbbgAAzD///KFr6DnZOK9UxhhjjDFzgR90jDHGGFO15OK6SjN5qzmOZio1fakZME8z5dxkArz++usAgD59+oROTZdnnHEGAOD4448PHTNdgMo0wyppdRD++uuvkG+66SYAwCuvvBK65s2bh3zMMccAAFZdddXQlctdkGU6T8swynJnpI1Vv6sSXTppGTaffPJJ6AYNGhTyc889ByB7TZ588kkAQLdu3UJXLHN6ViZQffZH1pp8/vnnAIDLLrssdL169Qp53XXXBZC/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++OGQNdhw2223BQAcdthhoWOAKFC9J3k9Z1wf33//fejU8qfWKwZGN9RKRGvWaAM7tn7QOi21tg5wrJ07dw6dtrBQS4++SU39eaBy/tVKuvzyy4fM+k5Fqp2j1w/rOL388suhS7MSqk73JwZZ5zE+nQcmNQDJFgl8Uz722GNDp4HnbDGTFWzNIHm18tXLeqW/kzVWWsL1mtR7Beuo6f50wAEHhMy1kHcjZLUyaeA+LfYPPPBA6LQOF5s66/6v1iF+rmvXrqFbZ511Qta9lHtYLdvOAEnrNu/bP/zwQ+jWXXfdkFdffXUAyaa5arGqybFW/RuNMcYYYwqCH3SMMcYYU1pa5LpS0xXNxFpPRAPP1DRM856WyFbXFT+nplWaK4FKTQF1PWgdCa1/Uss6Omou3nnnnUNmMJa2FVDT5K677gqgEigGAIsvvnjIrFNSa3Oezg/NvY2pQcT5y6qZxK61l19+eejUHUU335prrpn6/9VCj58tGFjDAkjWntDA4zSXla51Bpbr/GrgMb83LcCy1qy//voha9uJYcOGhcxy9Oru0fljYOQzzzwTujPOOCNkruW82wqkuc6BShC1JjjoWuffatCmBnPmiY5Jg8HVNcokCLaqAICDDz445Oeeew5Acn/SmlisT3bggQdW67Abja457b6u5f65vu66667Q6f742GOPAUi6ZjVYm/uOuovq5TrW2mEnnHBCyNrup0ePHgCSwbrq5uH+qPuTHj9bZ2Ql2qibutrob+rv6P7A9cl6T0ByrHTNaYsdDVOphevRFh1jjDHGlBY/6BhjjDGmtLTIdaWmJWZ7aHT4Rx99FHLv3r1DpklSzZhp3aE16lx/iyZXrZOx6KKLph5jtV0+WXVoBgwYMM1vqmlfM11YR2iLLbZIPU5+rhbuKv1ONW2vvfbaAJL1Kpg9BiRbIDBbTOuQaKdampTVXK6d2NO6E9fCtKzfyfOv5lI9Fw2da/0umqG1TpCaqdk9uJ6uHR6/ti/o379/yJqhwutOXVt0dwDA+eefDyDpDtIMQ14DRXJdaZ0qrtusFip0aWidFrYoAPLNttJMHc3UVDc+u5Nr7abHH388ZLqBtAT/pZdeGjJdRjrOatcby0Kvo1lnnTVknQu6brLqULHm1d577x26XXbZJWReixoOUevx8VpQ17hmVfXs2TNkZmVqppm2O+K5UNeq1vkieWeVqWtYs555L9S9SK+vm266CUDSNaftWrhuXUfHGGOMMaYRtMiik1ZTRmuLsB4OkHxifemll6b5vAabMRhNa9NosOCqq64KIFmHRp/+alkFUq0U5557bsgabLb//vsDSL6F6ds1m5p269YtdPrEWy/0jZcBbtr8UAPA9e2IzUr1KVyD6Xj+2VAOAF5//fWQaSnI441E6/k0RFoAMlCZS7VSaTA6A1/zsHjoOdXaN/p2edpppwFI1mbRBop9+vQBAIwYMSJ0apHMu2Iw0f1Dx8eK15oAoJaSTTfdFEDSCqDBynladLSCrAaQa9NjBrNqU0edn1GjRgFIWtR1r+S+qus7j6azOiatk8a/ybp+OD9qxec5AYCxY8dW5VgbQs8frWS6DrVpNe8JQGVdarKJ1oRj4g4r7ANJ63oecKy6TrRptQbOs35Y1l5Li/cmm2wSuiFDhoR83HHHAaiuxd8WHWOMMcaUFj/oGGOMMaa0VK2pJ82J6oLRstQaLPf2228DADbffPPQabAcm0aq6VnNhPytprghWgp/nw3lgGSLi+233z5kmiH1+LWcPmsGqDtEm5bSTaelvGthWlYTPc3At99+e+i0NgfbbmShc3n00UcDADbccMPQabCy1lQoMnrO1XT8yiuvAEiam5dbbrmQ8w7SJXp9aJLADTfcAKBS7whImqEZDKhz1pymoLVAXUzqGqc7GKi0dshqN8AWH1kNJvOA16ImA2hNFm1XwTpdGgyqNWM4r/oZbc2jIQH1JqsRZFPchZw3dd1p02C22NH5rcU1qfck3t/UHaeBydoOiMei16feK5gkoveMPEhr0aEuUD2/aa7frABwXmtah0dd57XAFh1jjDHGlBY/6BhjjDGmtFTNdZVmptIMHprLgUpNAXapBZLddWn6UnNyUdwBWW0POnXqFDKzcfT4TznllJBZ/2L48OGh+/jjj0NeZZVVpvnOWrvpeKzaZXbo0KEhazbITz/9BCDZwkK7Zs8+++wAknOmspo5iwjnleMEkq1N6PrQEvp5uz4aQtcP3RzaQkCPn7KazrXre71qrij8TTV3a4aLthOgG0DHrHWEWNMr70wrhePTTBS24gCSGY6sw6V1yHT/ZAl+rV3GOllAZdx5rNm0EITG/K2uOc41W+kAlXMCVLJyaz2nev6YaaQuYK0jk1azSMen2cpjxowBUMmEzQs9vk8//RRApf0GAGyzzTYha4Zn2v6u+z/DALROlGYw87y6BYQxxhhjTCOoukVHm6uxHgcA9OrVK2RWhtTKmEWx2DRE1lOmPuky8EzrrGhgIOsI6LnKsn7Ui7RxaZ0Klfm3WW9nDT2Jc95rXRm5ufBNmRU8gWTgJ4MM06yQrQGe6ywrYVrNDA1Gzqo4XA/02mgoqF0rO3fv3j1kXpdpzVvzhtYIIFmHio2Mgco5YNIGABx55JEhsz6LBrimWezqCX9TLcPalFmDXLkvaLV83V9Zk0YtOtpgNw+LFas4a7XjP/74I2S917Gm0+effx46DVzm+HXN5oHuafQy6PxpHaq//vorZCY+aGXrX375JWTWedKmrRrEXZPA8ap/ozHGGGNMQfCDjjHGGGNKS4tcV+p6oLlJy1bTRQMk6zjQjNda3FVAxQyq9VI0AG7w4MEha4PHNOgaYVArkKyjw3YaeZ+fhn4/y13TULDq6NGjARTLXaXuGJqctfbTyiuvHPKOO+4IoLiut2qh7qqXX3455PXXXx9A0vVQa3h+9ZjUNa5NBV944QUAyUaKLKsP5H9dpcHx6ZraaKONQtYg5ak/A6S7jovoTlUXnNaWWX311UNm6wrWGwOSNZ/opjrooINCp6EB9boW9fxyrjSoVptOawPnzz77DEAyQUcbJLPdjrp+8pjLtDpU2upmgw02CFnDMNjsWMMd1M3Pdk8auF3r8dmiY4wxxpjS4gcdY4wxxpSWmaZn5ps0adJ0bYBqZmUGx9577x067X6t9Vnq2bohjXbt2s0ENDy+NHTMmrWh0faNNcOx9gKQLOHe0joCHN+UKVNy9aeoO+i6664LmRkGWkdB6/A0dP7atGlT9fHpsQ4YMABA0gWprkm2tqiVuZXja876rAY8FzRBA8lO55S1dkZTzkW11qfOmZaQZ/0fltIHkhlItTaT12J9FomWrE/NpNKsm4EDB4ZM96S6HtVlotmspJruKq7PyZMnN/pLGY7A9jBApZUPkMxKSgtd0L1m2223BVA7d1zbtm2rcv/T609rOvFvsjL9eP3VyoXM+VNs0THGGGNMafGDjjHGGGNKS4tcV2lkFRMrUgZAS1xXSlY7iOZQzfNTFNeVml7VpHvMMccAAO64447QsWM2UD/Xlc6Zuj5Y2rxHjx6h007ltS6Yl7frimSNs4iu1bRjzatInl1X2TRln8z621rfS5rjuuKxqjtG25I888wzITObSl1bmoFUixYISktcV60Bu66MMcYYM0NRdYtOa6BaFp2iUhSLjr6RaZ0IBuZ17NixWd9bizdmbRbJOh7LLrts6LLK6deColh0akVR1metsEWnddMci04aGqCrcloLlnpaHG3RMcYYY4wpEX7QMcYYY0xpma7ryhhjjDGmNWOLjjHGGGNKy3SbepY9mK6lwWZFhcFmZR/fhAkTSjm+Dh06zBDBgmXfXyZOnFjK8bVv336GWJ9l3z9rPb7//d/K44WWf2AKfq0qI3N8ii06xhhjjCkt07XoGDM9sgomNtTrxHFhxpiWonuO7ilNKUpYy72ooYKyWb/dGvfHtLl4+eWXQzdixIiQ2curU6dO0/18NbFFxxhjjDGlxRYd02RY/EqfvL/++uuQb7vtNgBJH+2JJ54YMltDFP3NpaFOvWkdeVVureOjXv9fx1cr37oxWaS1+NA1qQX5pkyZMo1u0qRJIet12a5du6ocH68V3fO0IOD48eNDZnd2PT49Dl5frWn/UPr37w8AOP/880O39tprh0zrzk033RS6WWedNWRbdIwxxhhjmoAfdIwxxhhTWnJ1XTUUNFZ0092MhJpZv//+ewDA/fffH7pLL7005D///BMAMNdcc4Vut912C3mppZYCUCwXSFrgoJrG2f8KAD7++GMASXP6MsssEzLHp/9fpLXMufznn39C980334T822+/AQB+/PHH0Gng4HLLLQcg2Z2+1uPj96e5EBtDQ67FpgSw5kFzjq9Ia64hdF7TupNPmDAh5OHDhwNIdgdnR3Cgcn3q/vP222+HvOmmm4a89957Z/5mU46ZvfI+/PDD0D377LMhq5tmhRVWAADMOeecoevZs2fIq6++OoDk9VXrju3NQcf/1ltvhXzSSScBSIYr7LzzziE/9thjAIC///47dOq6qgW26BhjjDGmtPhBxxhjjDGlpcmuq7To9+npiZre0trUKzRJZ5lrW5NJNo20rJa0DJe8x6lz+t1334V8yimnAAAeeuih0M0yyywhM4Ng+eWXD90888wTclHMsFm1G7766isASXPzgw8+OM3/6+fprgKAe++9F0DSnZX3XCo0/V9wwQWhU9cc3QSLLLJI6K666qqQeX3q+tBrmWZ8oJJh0lLXEH9T3WlnnHFGyBMnTpzmM5rJcvjhh4fcpUsXAA3vWXmg50ldc+rm5VpSnZ5/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", @@ -158,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -267,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -348,7 +361,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", @@ -389,9 +409,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "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", @@ -417,9 +451,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "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", @@ -448,10 +503,20 @@ }, { "cell_type": "code", - "execution_count": null, + "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", @@ -526,7 +591,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", @@ -542,7 +617,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -559,9 +634,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "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()" @@ -580,7 +675,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -625,7 +720,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 +728,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" ] @@ -650,9 +742,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "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))" @@ -667,9 +767,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "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()" @@ -690,9 +810,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAItCAYAAAAwm9DjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydZ5wUVbf1l+99QDAHzAgmVBQDKghixJwzJjAHDBhQMStizphQzIhgxBxARR8xJxTFrChgzgEQ8Ib3w71r9yqnmmZmurp62vX/wv7tYXrOqXPqdNWOc/zP//wPjDHGGGNqkf+X9wCMMcYYY7LCDzrGGGOMqVn8oGOMMcaYmsUPOsYYY4ypWfygY4wxxpia5V+z+uHMmTNrMiWrefPmcwC1P7+//vqrJufXrFmzOQBg+vTpuczvP/7jPwAA//pX4fb5r//6r5D/8z//s1Gf36JFi3/E+nl+TZNquf/mmGOO0DX2nlN8/zVtOD/FFh1jjDHG1CyztOhUkv/3/wrPXPqkTrTeD+VqrwGk81C5qYy/GJxL2joBTX9+ROfHt0gA+OSTTwAAw4YNC12XLl1C3myzzer8frVfC73/SNo9V63otU6bi/Lf//3fAKp/TvUh7V4sdn8SXoemgN5/b731FgDgxx9/DN2mm24aci2ta1Om2PdfHvvOFh1jjDHG1Cy5WnT0KW/mzJkhP/300wCA++67L3TXXHNNyC1atKjA6BoO5/Xrr7+G7uGHHw55iy22AAAsscQSoav2tyt9o5o+fToAYMqUKan/d+655wYAzDnnnKHL+4m+PtAioOMcOXJkyL179wZQmCdQWFP9/Wp/s9Tx6V7lvTj//POHrnnz5qm/Vy38+eefIU+dOnWW/3e++eYDAMw111yh++uvv7IZWAbovUimTZsWMuPFisWt8Pd1/1aj9VFj4N55552Q99hjDwDAoosuGrpNNtkk5FKWrGpErZBcH437q/YzU+H11/HPmDEjZO67Ss7JFh1jjDHG1Cx+0DHGGGNMzZKL6yrNtNWnT5+Q6eZRc9fkyZNDvuKKKwAAHTp0CF01mfY4v6+++ip0xx13XMjDhw8HACy99NKhU9ddtaAm7HHjxoV89dVXA0i645Rtt90WQCEoFwC23nrrkBdccEEA1bVm6g74448/ABTmCRT2HAC0atUKQNK12r59+5DLmeqaJXr9e/ToEfIzzzwDADjiiCNCd/7554dM03PeLg5ds5tvvjlk3mvqDtC57rPPPgCS89Ngcj2XqgWdC8/CJ554InQq8+fffvtt6mctsMACAICTTz45dLr+aa6xSsK5qrvqsMMOC3nSpEkAgM0337zO7wD578vZRV1sP//8c8hMdlh55ZVDR3crUP3z47w+/vjj0A0YMCDkoUOHAki6JrOeky06xhhjjKlZ/KBjjDHGmJolF9cVTaN33nln6B588MGQaTrWrJ033ngjZJpcb7/99tAttNBCIeftEqEZ9bHHHgtd27ZtQ15ppZUAVKeJXK+d1ok57bTTQv7pp58AFFxQQDJrhev6wAMPhI7uLAC49NJLAQCLLbZY6PIwxxbLBKMbpH///qFbb731Qr788ssBFNYRqM61LIXOv2XLlnXk2267LXRap2TnnXcGkL+LTvfMMsssE/I888wDAOjYsWPq740YMQJA0vVKdzIAbLnllgDyz0RSd8zYsWND3nfffQEk3d1du3YNmWul7o4ffvghZN7Xl1xySejUDaTZTJU6S9WNMX78eAAFFyNQcOcAhWxVXgcg/7WqD2l1yJhpDAAHHXQQgOSZe8opp4TcVM4aHef7778fMjM8dZ9lPSdbdIwxxhhTs2Rq0SlWz+Cll14CkHxjZm0WAOjcuTMAoG/fvqEbMmRIyE8++SQA4Ouvvw6dWnTyhvNm0ByQfLuiXE1vHnx7/P3330OntWPWX3/9kJdbbjkAwE477RQ6voUBhbcvtWg99NBDIfONe9CgQWUZe30oVq2TAXJA4U1q3XXXTf05g8j1bbea1rIUnLdaZNQ6kHbfarBktdQp0Wu+1VZbhfz2228DKASNA0mLwSOPPAIAOPTQQ0OnZ1GnTp0AAIssskjo8niL1vl9+OGHITOwU60wWhOI69OsWbPQsZowANx7770AgNatW6f+fqX2slqstI7TWWedBSA551122aXOz9WimrcVv7HQSg4UakIVCyZvKiy88MIhax2uPM4PW3SMMcYYU7P4QccYY4wxNUvFXFfqmrrqqqsAABMnTgzdhhtuGPJNN90EAGjTpk3oRo0aFTKD0RZffPEyj7i8qLlcqUY3B8ekJsbTTz89ZA32pOtNzfnq5qFJetlllw1dv379QmZguQZIamBaFtcnLQBQ95SOjyZXda3pXkxzY5RqRFtNcKzqbtRgwbQWGNXirlL0+qqbhq5VHbPW5KKbRNdRA+v5WXmvn/79PffcM+RSLUb48/feey90p556ash0U9IFBADzzjtvyJVy0+nfGTx4cMiPPvoogOSYjz322JDZmqSpu6t0/hqMzDNYW3Q0JXjfffnll6Er5RrPGlt0jDHGGFOz+EHHGGOMMTVLpq4rNa2qG4d1OFiKHEiWI6fL49NPPw2dZgCxzoVmWuVtZk5Dswq++eabkBlhn0e9imLw+mln+FVXXbXOz4HSnZ75f7Ws/B133BEyS7trHSU1TWfpuvr+++9Dd+6554asa8X6TDp/NTOnucHSxqyl9PX3896raddCs+3S5pd3W4A0dM10T9JN/uOPP4buyiuvDJkZnOr6prscKLhm874ni8H9o/NX1xxrkp100kmhY6YjUMg6Y3YZUDl3lX4PaCYYwxmAQuuDI488MnSaAce1Ltbio6mga6ZuZM5rr732qviYygH3p36/65mXR/0tW3SMMcYYU7P4QccYY4wxNUvFXFdqZtx9990BJF0baaYtLVE+YcKEkFnivJhroFpQM+3nn38e8gcffAAg6RrJG7op9JqWio5Xc3GarJksWs6dBSNZ2A3I1l2lPPvssyG/9tprIavrbOONNwaQnJNel19++QUA8Pjjj4dO3UD8u9o2Yo011gi5kl170+C9UqwgGX+uBfc22mijOj/PAz1HtIjhBRdcEDJbO7CLN5C8zhy/uo6bUgsBFpTTvayufRYEPPDAA0On7QToxqrkOvL6Tps2LXTXXHNNyJqVc+uttwJIZh1pBhnR9dOzhvOq1nXkHn7xxRdDpwUDedaou7EpwevO7GggGbrB+3LJJZcMnVtAGGOMMcY0kLJbdPSNS2V9uk570tY3qqeeegoAcP/994duhRVWCLmaLCGzQgMkGWAHFN7uq8kKxXYVbGgJJIM51aLBt69dd901dKuttlrIDPKcMmVK6J555pmQWaekmPUoizcxWmdoTQKSwXL77bdfnbHoOFjbAwCuvvpqAMDzzz8fOrXSMMhQa+/cddddIa+11lp1xpX126feiww81hYdGiDIsRxyyCGh07nkGfip86BlFACuvfbakHnfqUVAx8/zQ1sM7L333iEzGF0b8VZTsCuD+Hv37h063T+sf6VWHK0zlMe5w3VTy+eYMWNC1rVi4sK7774bui+++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+rZysFpkddtgBQLIelVp8DjjgAADpjWqbArR+NCUrjpLWIFqtw5oEQ7I+E23RMcYYY0zN4gcdY4wxxtQss20vTSuLr+Z+NtK78sorQ8fmiECyZseQIUMAJE2vGhg6ceJEAMk6PCwLDhTMmFm7PhoKx8KgWyBZE4LXbccddwxdpRo9qulcg2npbmJ7A6AQdAskXZYM9nz11VdDx0aCQGEubD4IJE2TbNCq66tB0FnMn6b7vn37ho71mgCgZ8+eIdONqiX21XXx/vvvA0g25bvuuutCZjAr9zmQvNZ5BENq4PhHH30EIOna0vVZeumlASTXPG/SAhyLwXGr64K1WYBCkKsGSGrT2SzqHHHcOg5tREnX/uzsfc6P5ySQbOBJl4Hu7yzccPWBf1Pbrpx66qkh854CCm4srZOjdapYk0vnxNpsQOHcqabvhFLoWOkar6b7ryHo+DWZJQ9s0THGGGNMzeIHHWOMMcbULPXOutJMk7feeqvOz8eNGxcy66kAydL7jLynuwQAzjrrrJBff/11AElzrJo5O3ToAADYbLPNQpd3bQSFY9Hu3urG4LXQTB0t114p1LR4wgknAEjW1tEWD9rCgW6gyZMnh27OOecMmXUwNOuOtS0AYPDgwQCSZnxm7QHlMznr59B1oLWBWM8IKJTNBwpZR4MGDQqdrh9dHj/99FPotKYLs3o23HDDkuOqFA899FDIdOmo60rXb9ttt62j0/u+UqibitmAxWpw6F7mvrziiitCp65zulG0NpL+X+7vcrp4OBftuK7ums033xxAsi2O/n0933juqhtW9/JFF10EINmWpVoy6HTvq2tf3eQ8i7766qvQ6flPNENU9wqvpbqjq+n7gWPVNWFbI6DwvaiuuTzuv8aiY540aVLIbgFhjDHGGFNG6m3R0acxDQbm2+1ll10WOn2Kbt++fcgDBgwAAGy//faFgcjTK9+09C3rnXfeCXnllVcGUP3BZnp9tH7LmDFjABTqrQAFKwdQqL+S9VuYXj8GGGujyvXWWy9ktXj8+uuvAJIBgr169Qq5U6dOAJKNMrWOAi19+kab9VryWmptB7U47bTTTiGPHDkSQLLOjo6Pc1GLndYE4d/Q38l7r2qdFd6X+hasiQFsupo3Oj4G3mo9J72matHhm74GG7dq1Srko48+GkAy2FyDZLN8+99///1DVosSx6T7SOenFlU2sFTrjyYDbLLJJgDyr8BdCv0u2WqrrUJm/apXXnkldLp/GWz87rvvhk7r6LCmF4N6gfwtOroWrGmlCQL6/cAg9WqxwpUDnUse87JFxxhjjDE1ix90jDHGGFOzzDErk+bMmTPr/FBNcGp6Y4BcMROVmhZppitlWlVztJo5aYZsqAmsefPmcwDp8ysnOj8te82AbXXnaDlzzruh5mbO76+//mrU/PSas9EqUHAJqLlfS7tzXfT3NRiNDVp333330Gkweql1bdas2RwAMH369EbNT9dHxzq7wXKlzLENXb8WLVqUZf2KNXClm+See+4JnbosDz/8cADZ1Xbi+pWan46fTYO1eSODboFkzSbuxR49eoRO3VSrrLIKgOxqy6TNj3PRVjfa4oDtcDTAXdluu+1CpmtKXccazJo15br/isH7r1TNpGLfH5Qbuqbluv8U3Ws8/xk0DSRrKjFxQ91Z5XS9ze7911DSau4de+yxIbMpLZvPAsnA5caeNZyfYouOMcYYY2oWP+gYY4wxpmapt+tKUddSqXLVanqjSTGvTIBKua6UtGul8y+n6a5crislrV2AmoZLjVnXn64vbYuhWT+lyNp0njdZmM51/ejm0Y7majpvrOu0FA0xnXP8uo+Y/Qck9yLHz0xCIJltx8/IY37qbtF7nmtRrF6KzoXZnPpZlcwq8v1Xf3StWKdL6yBpuxK24WH2LZC9azULdM7qsqVez/wsXOOKLTrGGGOMqVn8oGOMMcaYmqVRrqumSh6uq0qSheuqnNAN0dCCejadN460TuCVLG7YGNO5jrmYzPHnVbCxIVllpTKMqqz4pO+/RsC1LpbdmXVoR6VcV4rONe3+LCd2XRljjDHmH0W9W0AY01hqqbR5UyTrN6osqSbLRmOppbmY2YdrnXdbikqS95lvi44xxhhjahY/6BhjjDGmZpllMLIxxhhjTFPGFh1jjDHG1CyzDEZ2+nU+sLKrpuSxmubskEf6YCX5p8zvzz//rMn5tWzZcg4AmDFjRk3Ob8455/xHzG/atGmZzk/PP60sz+rRWXkj5pprroo3fU6rPK9o4HK5KufXenkAxRYdY4wxxtQsVZlenlbQLI2mnp6pT/Eqf/jhhwCAt99+O3S77rpr6v9tivPOk2JFutIodW2r8drXpwidknf6p5l9Sp2P1Bfbn9VeXoD36IQJE0I3evTokPfaay8AwNxzzx26ap1LGmnrNn78+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+j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9f2XN1y/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", @@ -735,7 +868,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -774,7 +907,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -828,13 +961,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" @@ -849,9 +991,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "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))" @@ -868,9 +1018,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "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", @@ -890,13 +1060,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "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": { @@ -915,7 +1112,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 0000000000000000000000000000000000000000..a2dff91ab999ec1764299bb52172824394c8daf0 GIT binary patch literal 58 zcmZo*ju2yDU?@q<%T25-E;ceWuyjbzP0Y;EOU}Eo0b~E6my^c=^C6o45=1h|GdATR=fsOlOs&u|yp`FZjWH{8LI=H_b*66U zuI9Y3Yv%mW{}q#t?0n5+XDPy-bfxz-3;WXAWy9{bID-v&)19j<$;X9E@Z#d7m?ilR z_}<4#CMuD4({VYb#V3yd^C6nP3zD#qOBM>rLrV&XWl0-{IPJkfu*qIn(cLZ@+l)VyjT;UYd`_#a!t`#iK&) zZO5~8yU6b*(>Rw8RI#Vx=`_vvKAKJwnZ{*uzfjY&J@x4M&#G=&>?iqXwx5kj)AUeJ z*ZC!y{wYY!YZkFufZ|%9!ceQUm-Ob89n-s#L2SM=^qLDXq~6P?NnS=eo9{LLELLTd z$J0bNPF6tj#xW-=8wWJq$vhvIxTkJx3Dq`stoHQKYHXck6V<^Q<%0Z^Dd2;>Tpx`- z*Qd%E%?=wciqbqSqi7xTx(~v5XZ7=Vb@}Ytq{`9B>M^I4czS4bjJfoi7%c&{nmy&0 z*b-o?*^xMAoR!v+E%?EkHM`5c_|fNLAr`Q32@BWOQlz}*rBjO~zs;Wgq@%?M00rVH;>$NXmKl##_dt;}%=^N#iC7>4U7TMewGN^-BAQ;>`NYpsh zNwBH?rc=zz*}SYen>R=AOoGapmy@k`!+xSvp?;fa9q%R8`sUlWG!VyGexM2*i3DJguSvT<18|&GcMYa3+6P$ zA(>nOtKR})e84@c19}Z@-ST*!+g2acN9*$qew}-u@Y;=YUTZcwby){{b&60ZdFqOA#z)8=zhe*CV^+FS)Nqs~91?C|?F;=!^!8O` ziC6f}zEBDg&=M5!JT&AJa@8ZhJr54zN_R<-(gWuiuKTJ)`d=%Fx{&Cak*J4nvDee? zL?BEE&d%gA&gJhkLOrQ|{we&%M9W|T2n1QI%RtY^V|dDBo`F3{6Tyv5J^UcJ@!57h zd@pF2GT7yxHT$04x_To&b2FKoFkAzJsQ(fe=sz{0i@j0KF~x!sot4W7Qkyfbpt-j45}~Lz#tyGWhre3^Yv* zK^hdv`S12ZlqP&1A!r}-lrQ;FM*=+65{8OB+mlc85stD1s`Abfi8_pL)W^&-1(=dK=!rv(4-&=t*D#5@|#~1VMGd zO9Vl6vF4H^%X2d#o}zr40N(1p6i3dV*@T-a)hk6CD34s}9P_&fjK_SJ{RO*Rf+=MO z=5(vA;NEnep`z5m4ayWjF&PFQk4wafV3nAHlag)}7=WuEK$!2KheW(ZVqOBN*%yNa zZ;vt9L5*pUV-zwJjTqf*IF;kpWLmabBHg^~-rh^{Gwyc%Nl;4N>o49X|BsSA15e9=QD&ekG}L=0A<_g(udYG~zR#=+G# zW?J{}jf*Tx+VZ$f{!Wg7aHxJwOWq\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": null, + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "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": null, + "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", + " X = np.column_stack((np.ones((X.shape[0],1)),X))\n", + " \n", + " a2 = utils.sigmoid(np.dot(X,Theta1.T))\n", + " \n", + " a2 = np.column_stack( (np.ones((a2.shape[0],1)),a2) )\n", + " a3 = utils.sigmoid(np.dot(a2,Theta2.T))\n", + " \n", + " Y = y.reshape(-1)\n", + " Y = np.eye(num_labels)[Y]\n", + " \n", + " temp1 = Theta1\n", + " temp2 = Theta2\n", + " \n", + " reg = (lambda_/(2*m)) * ( np.sum( (np.sum(np.square(Theta1[:,1]))) ) + np.sum( (np.sum(np.square(Theta2[:,1]))) ) )\n", + " \n", + " J = (-1/m) * np.sum( (np.log(a3) * Y) + (np.log(1-a3) * (1-Y)) ) + reg\n", + " \n", + " \n", + " #Back-Propagation\n", + " delta3 = a3 - Y\n", + " delta2 = delta3.dot(Theta2)[:,1:] * sigmoidGradient(X.dot(Theta1.T))\n", + " \n", + " Delta1 = delta2.T.dot(X)\n", + " Delta2 = delta3.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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "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": null, + "metadata": {}, + "outputs": [], + "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": null, + "metadata": {}, + "outputs": [], + "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 0000000000000000000000000000000000000000..2ae58e451b9d752ef52cf3443a3ebb74ed53f0f6 GIT binary patch literal 7161 zcmcIp&2t>bb)TM(-Py$lK?(s$Np{AN?7~_EBEpiY%rMjkXfl*3L`5+MwSlxAZ1?UC zFgvsCo+YrGSsx7A01vFvHOU1yBvn47Qk6=%a`GvaKOo0BrIJGml}nB(pYnS>vkQQt z6J0V})6>)a=5_b$_kQp7+mB{uss^rJ^w(ehqh}cZPA}ujM&$$C>Srjp!C7e3^CzpD zcsE0@$yqvuW*-Fo*MNkuktB8r}zS&;j`$O z=9l>eK8M;2zsN74Z}zUiU*Ypl4L&d2eXD+fv(Jp$l@rXtSg*0H)Eo4|I2oEND|nmz ztiRO_lnUbLBVUPMnJ2U!>7Zy@^a-vR+%E1l+^WP3BQ>_MnjKRvpvE@Mku|cT@99<( zt?!^_j%<$h)Zo@tV`M~bVsU$){hXz&_aLzotQU7VwU5~`+h-$|+9`X@7&*Gn)qRkM z?knlGN@}I0*9_fKPO95eX(=tICU>4&n1MU0r0(`Ky*tTlTG?l}jW2HCtLkVfo!Y*T8fo>au|1b!b|mTN7Ri~Lbhm9j{oEQ&r&C84 z`3&vQ!wECu(1$a_SE??pjVcx@T*75%}9 z2}zznkjDD(yZ54AKLMfY#Ql(aTf)2U#nM~#c+eFQZHyn%PL*3hTLnYW{>#76*ZVay zEA6VD-xOJ?lRw!V5IV8sLT1igDF#Z?D4?{PUB8!=#9ktzB(vgHt9B`~BaD$bs^j-W zW)t(QdN1N)??+O`GP44Zno%!vWZaK9C?3lsb6R1HPP-|BP|`v&SM|3@rBrrdTxziJ*v-$J-^!vMPoPMNk@{-WvrXA zs6IRH>4>1+Nuc(*%o{S^Ri|&wI8>PhLDgMA^HroWf5&aVtv1IOR0wHup% zs)SUV5B;d?4>oTLwUflX%}?$(?%jKM*AF)D3tvV-)LveTBNEu=ryUrF_XBU)TYY== zZExwbei!ShZEgs$8K{i!P_%`&T zf?23HQ5a5@O|vR1F`HFQ*Sx}9Yo1*)=h>{eU|up8*d-?40^P(ENhA|fe2SOUBvXWm zSt%=OcEXO#6vhK%vQWqSwu5JhOrm8Tv(#*xP;TqF2}3O(n=rr9@1QJAC|N;S1~)e? z=iiT<)PW(`!@t#f{VB9QXeM6L5nkwTiO`E%o*%&mNX6U16G6t1NI!^R9+BuvKg1*1 zjpdGJ@F)EQlu9$`<;*}hVfCosLHx&DcC|t%JyO9^vntpwJ?x0Yzkbcr&()gl(?%i7 z5MPbS@6e+nFX15A|1BlNT`fG%u2p&cm2JZ zo0al$is!0aBzA8QyDC(_p_hP9dYRd|j(b(BVqScosLI81=|#<=Fv?X{wW{p<_{}o; zL$ox>+UT-yPqg3$UJ~Po;Wjy=U&<~6qUVjv#xZuAn}AgldO~2V`#7K&kcKwwo#TH1 zwpuLrq96(U5HO%O;GATEZ$f&zLDKPBe$)V}1yM8Z!bUtuCKAmAK&7zRT=&P=Z`|z| z1WGeMOVwBOo$s}RJ#4SSRwkl7Siv3z3S)$!*AZdQ8^nF=eS&c@92Z;tb{pTVR5ic# zIH76!iMMeEI+aMkx9cY|*dvu7O!Jnmzm?DV+IVg?&(D>t6-bqM01+bI@H&`(DDnxD zk}YlpzFPD!g{~^b{nVF!SD+=QTAo~bRx}Q+{RXC-=oWGi&$6Q^E1{r@l6m5txy|N zn{?AK-uysL;Q`Z{riYzdm4!Vgd-0<-#6TTZy!JTOkk#v|2)ns41X}WMPD) z3PezK?N@^)a8#%yfZ_{MG3c)5K4$ohboXPZNvj_<&nZJQhJ8>g*|)db37VbULJ_C* z6|6UjPe%>_-KP_JVQ|a|q0w1QJU0*^^=!oB^&=UFp>`A6KX|=~;So@1gA!7&d_0f` z^Z+K2Jh|tenjgdw!+Yoc=M0-1NCYiAi~%G|agSE%hq;#+TkaD->;r0ITCdkaXeN3p z2q6us=i?EaVSNC!7dEUAJb~32yVMJ(HMFqAc$dCz#$0#-1wRP-UMfbf*%8eh&|V`Q z&@5zb@OtQ%$lbe_cmPD@{S=)fq(2M3_$e)9>5SfJMt-j+<2_Oz+U2-a(<~t>@&|xk z89YJP6Rlex=UxEeTMwvD?67jpC0K@c$bCKhA_BfBx#kHHAJmd|geVh##ajwi#LBhv z)5^nN%?GMQ!dyC?l?Vsld`g-}KCQ&Zl2`KWT$cm|wX%jIc@1^#^D~<}-t0LHK(h9Yq6&&Vuo*gf=U+j_hM2wW(|q9y$lc0Xr}ctONVN zIViQt+~&?xcT~bL%h8Be9^qJ~-^@`Z0hjG^ibEG7M2nZ6BZ_23g2PwwboCRl;!%aD zt^i#ra?IZ_7lx>$3i?V~T>xt0uv-N(PWivZfkp4&niNnQ!Z_9S5fYpa7fJ85L1-w!Jg~pB%q`*WTAOfB{SZY&aDbn4eSY`Kxh610(B)32aJB6-;5QM3jWzcU8$7f}8~Pm0356vm9zo(260D&>M9385nb&A5Xi=BXDwur$I!Z!3NcTS_!*_Lv#h-~(}wB)h8^)_SRpa zOHoYjvf-ju#`X2FeXEt5VGMg$w@}gYxmBDshVMRv1pTcTa7qe*Gi$$#(3zs$Hp17_ zJiyugUK!q4x-VME^5>+N6FBk4<6ZL}(7|~5!&AK;ch#!HXZKp?6?$walfBLNL_1I^ zf$P^u(<84+yDbHxa6-JV1*H@xq**K1WB ztmP>DhY+6p11i2n1%Y4Y^d#jS9F@SRvr-sfMQx-iV%e=t$@@h2V=CUD;s;c`gQ8xE zqJ~x}Rd-2$N!^j8KrOS$#^h~K5!km{xsv4CA@31~kEzgHHGkT3`3V*JY&Q4e-u^kd z@&o(@8%KBia8RpSvuxg4u&$Um(pwA6Wv=6ywkdxC>T`-r>b*uRNRcVD)M2SH1yH<< zU=fOJ4&Tf%@N9HgoJT3X8|Kzh1l<3HR8SFQi@hE)Ky3Iz7%i7E(%;dL`Uq+3_a@#a z7a12_>R(U@qt3WdH-)v0&{tST4(<{M(9?l(9vMpR0P+#Q6UCW+BolDpbn{+bdCjQ1 z#h2A%WYZR~O*ysxia1Uqr)Kfl{EK5&ucCjd;7a`$bpPC>e;R!=qIxuYY=~(p;eL?! zd~Vh+92hO8GoNmK4w=&h;U4hc) zyXHR26B!e%7}nPF)XRFFdYN>1OCOzgq_yGvS-xXL8D7qv@p6%5Sq_VQ84`_->LWtR z+y-(4LDFbY?oo-bRj*Pw*@$p>R#4GOqtOg~r5cS>WR+Wx#cxO`bZ|77S^P?Dcp=}s zl`+?eEJ<(am`BR2egil072ErDq9wX--p1P(e=}lVvBA$MQ=L+x%tVfta@Y4$N`K{Y zhclt{2(;bVFLQ^|X_RE@T0aRsB9cn6sO1c%tMsDwzUolyF>DL$s zhe#VKx)QSB4mY^_3mh(aqm2;~yAWkez27hiU5l z9KDZlBd1Q9KC_B!jB$o9r{ZFXeI+G1-n@&nYf%J>Y6 zBpj03kGh#T=;m2EO8V)H#HlBugnI6Nk~j?DLfjvVfli9oTuG{iV*qJ0vV%4;&MZV~ z@&as(K^pw#eJr3 z+UT1*XAqiK?G-XPvaUuWt2P>4M6yVvH?rwQ<8j{)^Pb%6dKghs+E8l$yGXTwift5` znOx5-_)Sz+PbDHdL_h{Adqg!;*l$yW;n;>X_%X?eh#aT<9L2A3D?(9P+#;s#;rFUJ z?dsl|xh@G#fx5Ty2kmriF0<4?Wey_k-XM2vRUA&~Plhnq%Kvq+dw$YEMyb~m5wBPA z&qMJ)mLy!2Z&5*6(>&a`LpAcm+V$zN&-h51dG71oo4Mp}(L5BX2K+dihEJcis^4)h Nxvy8>sJ`Qt{|65Mkuv}Q literal 0 HcmV?d00001 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..7ff0663b6 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 @@ -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", @@ -41,7 +41,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" @@ -219,6 +219,15 @@ "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,7 +325,40 @@ " Theta2_grad = np.zeros(Theta2.shape)\n", "\n", " # ====================== YOUR CODE HERE ======================\n", - "\n", + " \n", + " X = np.column_stack((np.ones((X.shape[0],1)),X))\n", + " \n", + " a2 = utils.sigmoid(np.dot(X,Theta1.T))\n", + " \n", + " a2 = np.column_stack( (np.ones((a2.shape[0],1)),a2) )\n", + " a3 = utils.sigmoid(np.dot(a2,Theta2.T))\n", + " \n", + " Y = y.reshape(-1)\n", + " Y = np.eye(num_labels)[Y]\n", + " \n", + " temp1 = Theta1\n", + " temp2 = Theta2\n", + " \n", + " reg = (lambda_/(2*m)) * ( np.sum( (np.sum(np.square(Theta1[:,1]))) ) + np.sum( (np.sum(np.square(Theta2[:,1]))) ) )\n", + " \n", + " J = (-1/m) * np.sum( (np.log(a3) * Y) + (np.log(1-a3) * (1-Y)) ) + reg\n", + " \n", + " \n", + " #Back-Propagation\n", + " delta3 = a3 - Y\n", + " delta2 = delta3.dot(Theta2)[:,1:] * sigmoidGradient(X.dot(Theta1.T))\n", + " \n", + " Delta1 = delta2.T.dot(X)\n", + " Delta2 = delta3.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", @@ -375,9 +417,9 @@ "metadata": {}, "outputs": [], "source": [ - "grader = utils.Grader()\n", - "grader[1] = nnCostFunction\n", - "grader.grade()" + "#grader = utils.Grader()\n", + "#grader[1] = nnCostFunction\n", + "#grader.grade()" ] }, { @@ -433,8 +475,8 @@ "metadata": {}, "outputs": [], "source": [ - "grader[2] = nnCostFunction\n", - "grader.grade()" + "#grader[2] = nnCostFunction\n", + "#grader.grade()" ] }, { @@ -505,8 +547,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" @@ -544,8 +587,8 @@ "metadata": {}, "outputs": [], "source": [ - "grader[3] = sigmoidGradient\n", - "grader.grade()" + "#grader[3] = sigmoidGradient\n", + "#grader.grade()" ] }, { @@ -610,7 +653,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" @@ -736,8 +779,8 @@ "metadata": {}, "outputs": [], "source": [ - "grader[4] = nnCostFunction\n", - "grader.grade()" + "#grader[4] = nnCostFunction\n", + "#grader.grade()" ] }, { @@ -796,8 +839,8 @@ "metadata": {}, "outputs": [], "source": [ - "grader[5] = nnCostFunction\n", - "grader.grade()" + "#grader[5] = nnCostFunction\n", + "#grader.grade()" ] }, { @@ -830,7 +873,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 +959,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/.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/exercise5.ipynb b/Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/exercise5.ipynb index 66c4500ee..d48b7d90a 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 @@ -919,7 +919,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)/__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 0000000000000000000000000000000000000000..7e44f90c4c28ca23f1ccecea85687a4ea02ce0ea GIT binary patch literal 3458 zcmai1&2QYs6`vWBOD=b{Rvgt|L0h7*0&h^QTsT3~z(@kuc9Ei0Tq~&^HVI4ba1~ly zay`SfC4$?_254`+_RxcL=%N2h4?Xh~pr`x`KK1v8E6EX3l#6-uI5V7i^WN`$?47kW zpW&J1|M>Eo0b~E6my^c=^C6o45=1h|GdATR=fsOlOs&u|yp`FZjWH{8LI=H_b*66U zuI9Y3Yv%mW{}q#t?0n5+XDPy-bfxz-3;WXAWy9{bID-v&)19j<$;X9E@Z#d7m?ilR z_}<4#CMuD4({VYb#V3yd^C6nP3zD#qOBM>rLrV&XWl0-{IPJkfu*qIn(cLZ@+l)VyjT;UYd`_#a!t`#iK&) zZO5~8yU6b*(>Rw8RI#Vx=`_vvKAKJwnZ{*uzfjY&J@x4M&#G=&>?iqXwx5kj)AUeJ z*ZC!y{wYY!YZkFufZ|%9!ceQUm-Ob89n-s#L2SM=^qLDXq~6P?NnS=eo9{LLELLTd z$J0bNPF6tj#xW-=8wWJq$vhvIxTkJx3Dq`stoHQKYHXck6V<^Q<%0Z^Dd2;>Tpx`- z*Qd%E%?=wciqbqSqi7xTx(~v5XZ7=Vb@}Ytq{`9B>M^I4czS4bjJfoi7%c&{nmy&0 z*b-o?*^xMAoR!v+E%?EkHM`5c_|fNLAr`Q32@BWOQlz}*rBjO~zs;Wgq@%?M00rVH;>$NXmKl##_dt;}%=^N#iC7>4U7TMewGN^-BAQ;>`NYpsh zNwBH?rc=zz*}SYen>R=AOoGapmy@k`!+xSvp?;fa9q%R8`sUlWG!VyGexM2*i3DJguSvT<18|&GcMYa3+6P$ zA(>nOtKR})e84@c19}Z@-ST*!+g2acN9*$qew}-u@Y;=YUTZcwby){{b&60ZdFqOA#z)8=zhe*CV^+FS)Nqs~91?C|?F;=!^!8O` ziC6f}zEBDg&=M5!JT&AJa@8ZhJr54zN_R<-(gWuiuKTJ)`d=%Fx{&Cak*J4nvDee? zL?BEE&d%gA&gJhkLOrQ|{we&%M9W|T2n1QI%RtY^V|dDBo`F3{6Tyv5J^UcJ@!57h zd@pF2GT7yxHT$04x_To&b2FKoFkAzJsQ(fe=sz{0i@j0KF~x!sot4W7Qkyfbpt-j45}~Lz#tyGWhre3^Yv* zK^hdv`S12ZlqP&1A!r}-lrQ;FM*=+65{8OB+mlc85stD1s`Abfi8_pL)W^&-1(=dK=!rv(4-&=t*D#5@|#~1VMGd zO9Vl6vF4H^%X2d#o}zr40N(1p6i3dV*@T-a)hk6CD34s}9P_&fjK_SJ{RO*Rf+=MO z=5(vA;NEnep`z5m4ayWjF&PFQk4wafV3nAHlag)}7=WuEK$!2KheW(ZVqOBN*%yNa zZ;vt9L5*pUV-zwJjTqf*IF;kpWLmabBHg^~-rh^{Gwyc%Nl;4N>o49X|BsSA15e9=QD&ekG}L=0A<_g(udYG~zR#=+G# zW?J{}jf*Tx+VZ$f{!Wg7aHxJwOWq Date: Fri, 24 Jul 2020 22:00:32 +0530 Subject: [PATCH 8/9] Added till excersice 5 --- .../exercise1-checkpoint.ipynb | 1302 +++++++++++++++++ .../Exercise1/exercise1.ipynb | 2 +- .../Exercise3/exercise3.ipynb | 229 +-- .../exercise4-checkpoint.ipynb | 413 +++++- .../Exercise4/exercise4.ipynb | 163 ++- .../Week 5(Apr 26-May 02)/Exercise4/token.pkl | Bin 0 -> 58 bytes .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 5125 bytes .../Exercise5/exercise5.ipynb | 144 +- .../Week 5(Apr 26-May 02)/Exercise5/token.pkl | Bin 0 -> 58 bytes .../exercise6-checkpoint.ipynb | 1044 +++++++++++++ .../Exercise6/exercise6.ipynb | 19 +- 11 files changed, 2989 insertions(+), 327 deletions(-) create mode 100644 Phase 3 - 2020 (Summer)/Week 2 (Apr 5 - Apr 11)/Exercise1/.ipynb_checkpoints/exercise1-checkpoint.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise4/token.pkl create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 5(Apr 26-May 02)/Exercise5/token.pkl create mode 100644 Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/.ipynb_checkpoints/exercise6-checkpoint.ipynb 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 4(Apr 19 - Apr 25)/Exercise3/exercise3.ipynb b/Phase 3 - 2020 (Summer)/Week 4(Apr 19 - Apr 25)/Exercise3/exercise3.ipynb index 0791cd41a..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 @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -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" @@ -99,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -132,22 +132,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "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/++OM0upZii44xxhhjSosfdIwxxhhTWnJxXdE0p6YrNfPl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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Randomly select 100 data points to display\n", "rand_indices = np.random.choice(m, 100, replace=False)\n", @@ -171,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -280,7 +267,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -409,23 +396,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ "J, grad = lrCostFunction(theta_t, X_t, y_t, lambda_t)\n", "\n", @@ -451,36 +424,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "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" - ] - } - ], + "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()" ] }, { @@ -503,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -617,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -634,32 +586,12 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ - "grader[2] = oneVsAll\n", - "grader.grade()" + "# grader[2] = oneVsAll\n", + "# grader.grade()" ] }, { @@ -675,7 +607,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -742,17 +674,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training Set Accuracy: 95.12%\n" - ] - } - ], + "outputs": [], "source": [ "pred = predictOneVsAll(all_theta, X)\n", "print('Training Set Accuracy: {:.2f}%'.format(np.mean(pred == y) * 100))" @@ -767,32 +691,12 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ - "grader[3] = predictOneVsAll\n", - "grader.grade()" + "# grader[3] = predictOneVsAll\n", + "# grader.grade()" ] }, { @@ -810,22 +714,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "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+j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9f2XN1y/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/XuOq9pMsuag4yPqulA4Ls1Q03t17rnnBtCYe7Ip1KomUz3hmLX2j2by6V6kG0ZdAyuvvHLI3L+6J9Zdd92QmRmr59daa60Vcq2yldLqrN10002h+/bbb0NW1wYzFHX/6mfRpTVhwoTQaRgFzyd1XdULvXaa9abX+vrrrweQ7q5S9PzQmmUMeTj66KNDl3XWEveBjkn3lLoemWHN7GMgmSHIfVluzPyOWoam2KJjjDHGmMLiBx1jjDHGFJZmu67UnDTXXHOFzOKALPYHAEOGDAmZRbwA4KCDDgJQypQB0osjrbTSSqH79NNPQ2ZBt+OOOy50WnyJBfn+Pd5q4Oeoi0YLwmnxKn7/5MmTQ6fR6swaGDlyZOhWWWWVmowzK1hEDiiZEe++++7QqUuIpsfNN988dJp1Vit0bVmk8JBDDkkd05577gmg5JYBkuZQzZqjmVXdUfpZLOil67fJJpuEnOZGyprmmHb5/2q7CHa0BkrzyztT5b8EXR7akfzee+8NWc/HmWeeGUDlgmvqDtGszu222w4A8MADD4SO9wcArLHGGiHXyn3Jz9H5qetez9W0fadZjXTpXX311aHr06dPyLxX8y4SqG467dS9+uqrAyjfgoSfoa477e7N1i2VMpmzQL9H3VgapkC0SKKuKc9NLWKp/77++usDSBbRrdYdbYuOMcYYYwpLsy065Z7o2DTuyy+/DN0rr7wS8q677hoyA0P1iU0tPrTOaG0ItY4cc8wxAJIWHX2iVOsOn46rfeLlG5O2CtCy1vr2z+9SK4AGezKwVwOs2QizkdBgaoVlwLV2zq+//hoyA+f0jVSD8Xgtql0TfQtYddVVAZRqGJWj3HfqGyXfHsrVdqBe90LadzSSRUTHzzdNbZGh1h3ea3pP5V1Ov+jwfHn22WdDpwG2aj1nEocGIFcK9td2Jvw7vSdZmwWofA9Vg45T60ypxSot8PXzzz8Pmee/BrjqZ9Ginvc+1WBrtb6kBePqWHn/qXdEz5K0mjR5oGNOOx91ffbff/+QmTiiLYL0rOX5pMkubAsCtMxLY4uOMcYYYwqLH3SMMcYYU1hqVkeHtQ+0i6p2ZGXtHKBUf0RLfNMcCZRcUlpnQKHpVoO1tGuzuslmmWWWqcZaDWo206DnBRdccKr/t5xpj2j360ZEg2ovvvjikNmpfOGFFw6dXpfhw4cDSAZrs3s4AGyzzTYAsnHttHSdm2MO5bi1NlLaGNR1mXdgpLoW2QJA3Rl6//H+1PU799xzUz/XtBw113N9brjhhtBpAC5rNwEll7+6e9LuJf18dSOwDYOer1nUJEtrsUIXM5BM4FB3GVtYaB2ak046KWTu20rzzxt1N/JMBEouGw1G1k7u/P1T17G2C+K8s66d0xzSAqtVp4Hv3NfqbtR2PQx9uP/++0NXbc0gn1jGGGOMKSx+0DHGGGNMYanKdaWkZZqoaVzNpOy0rLUBtI4MTXbl6gywjoS6yV544YWQ62XSa873pLku1BzdiKjpe9NNNw2Zc9E5qZmd66euPa2jk3c2REvQDBBmCD755JOh0zmxg3qXLl1Cl4eZWb+TrmWgNG5tN6B78c033wQA7LbbbqHTTtks/V7u/sybtGute7lRWkToOGi6HzNmTOjUhaSupfnmmw9AZXdNuXYE7Iq+5JJLhk4zuLKAc91rr71Cpy1UdK9169YNQDLr85xzzgmZIQvqWm0UN46uCevFAck6ZHQ96v3D2jpAKavqrbfeCp2GOZTL9qw3ur/UJck6R+ou1d8Hdq1nPSAA2H333af63Fq6I23RMcYYY0xhqZlFh+ib76mnnhqy5v7zTV+tPPpGXOmNjE/6fDMBklV4y31uvUlrageUnnQ33HDDuo+ppVR6Y9J/Z8Vk1WnNpNZi0dE3Fg2WO//88wEkK39q4GD//v0BJIO587Z+6FxYk6KcZYPWHVpOgWQwpDbzyxPdR3r9l1tuOQDJOevbZSPuP65FuUBv1Vd64+UZrBa78847L2TWOlOLulYMz8I6ws9kcgiQrCOmtc+4Vmq50MBe1hzT+6tnz54hM1g373tOkxG0Mj4tVlqHTf+d1ldN4BgwYEDIWl8nT9Tipl0MWLFa60AxwBwoWQ/139P2XC33oS06xhhjjCksftAxxhhjTGGpynWlpm+aCdVcqAGQaTVxKpmm9PPVJXbllVcCKAVNAqVGdUB6g7E8SHO3ASXTMevJtFbUnK7lvIcNGwYAWGuttUKngemN6DqoxOuvvx4yy+XrPLbYYouQ6RpqlADJf1Op5grROld6Lzfi+un46Vrr2rVr6LQmx/bbbw+gFNQL5FOHRa8j26LomF966aVp/r3OWe9Fth5Qd8ett94aMt1AumfrhV5nHb+2SKBer4/+rlCvc9bfl0YJNr/88stD1hZBt9xyC4Cku1CvC+WllloqdNoiiC149JplfdakXVOtg6RzZc0tBh0DybOEn/Xqq69O87v0/qz2zLFFxxhjjDGFxQ86xhhjjCkszXZdpbmrgFKLAM1EOfPMM0NOK9ddzvRK/V9//RU6NY3RJKuukZ122in1sxqlNLiOg9kQCyywQF7DqQquj66/tvtgOXtdf3UnNqpLh3B+WudDWyAwA0s70h988MEhM1uk0eepqGuY5eg1a2frrbcOuRHnpfcXW5Ooa0ZbCNx2220AgCOOOCJ0WuejXtk6ad3FtUvzyy+/HLLWVGGdEm2b8M4774TMcvmjRo0KnZ61hx9+OIBkHZ081rRSixylUtuRvN2pHN+ECRNCd80114SsWW/MsNIWRmmfpW1bdP66V+sFr6/uIz3T1TV35JFHAgCeeOKJ0C222GIh8zO0O7l+7iKLLAIA6NOnT+iq3Z+26BhjjDGmsFRl0dHaIvfeey+AZAVHDbZdaKGFQmYtBX0iHD9+fMhjx44FAJx88smhe/zxx0NmldAzzjgjdOUCu/JEn8LHjRsXMoNZtalZo5PWIFDrQGhTOr5xajBdI1oBysG5ap2HTz75ZKp/12rRyyyzTMh5v102lXJ1go4//ngAwB577BE6tV41yv1VDo5PrWxsZAmUquyq9TltLbWOS9Zryrf0nXfeOXTXXnttyGopYBVhDfBU6yPPYA1W1c9i5W5d/9ayZ8uRdwAyv3/y5Mmp/67WM/6/5SwztI6wuScA9OvXL2T+fuZ9pmrtI022YRB9WiNPoDR/XTOtiUTvjdYWqvbMsUXHGGOMMYXFDzrGGGOMKSzNdl2puUwbATKnXpuzadM1LYfNEtCqe+WVV0L+5ptvACTNWQx2BkousbzrYFRCITcENQAAIABJREFUTXNqWqYbK29zayXUtK1uHLY40GCym266KWSWY29N5vA015wGE6pploGjDLoDknu1EfeikmY61mB/JgEwaBVoXWvJsaprZ+DAgSEvvvjiAIBnn302dNriYujQoQCS1yfr+fPzO3XqFDp1vbH2ClBaH03W0D3Hcvzq+qe7Sr+rNa2pwt8gnbO6IfOYF8ekrSrWXnvtkLUp7mGHHQYg2fT3ww8/DJnB8ltuuWXo9Hc1T5eVXlutXaTtROhmHTx4cOguvfTSkBmEre5wbQfC/esWEMYYY4wxTcAPOsYYY4wpLNNNy8w3ZcqUadoA1bRL+fvvvw+dmv4fe+yxkBmZrvUqNM+eGRDakVyzqvhdLXURtG3bdjoAmDRpUqY2Ts0qGzFiRMjs5MpS7UDS5Fmt66Ndu3Ytnp+u6Q8//BCylvNmBsuQIUNCt8Yaa4SctWmV8/vnn39qtn6aFTBy5EgASXOzuh7ZQkBL7OtaV2s6b9OmzXQAMHny5JrNT9eV63fHHXeETmW2C+jRo0foaumOm3766acDgP/973918zHo/DkXzZDRf6drsqXr+H//938t3p/l6pRpVlza/aVjZbaYuhZq6c7h/sz6/FS0ztPw4cMBJN1x6ga68847ASRdI805k3i+VPr9S0PXb9KkSSGzbYP+P+3atQud7kWOVbOOdP7VrmXWv3+cn15zzcamXs9M7Wqf1gKkOXD9FFt0jDHGGFNY/KBjjDHGmMJSVS3ptBLemgmlBeVUrubzgfwLJTWVchHqLHjYiAW7dEzMfgOSGSArrLACAGDeeecNXWtZE6Wcmfm6664DkHQtLrfcciGfcsopAFpnphVQyirTTLKHHnoo5I4dOwJo/Dk1B72/uMe1IGC5/7fe6HerO1WL/zWV1nhPlkP34vLLLw+g5KICkp2w9V6uN7p+6ppKa/ej/29aBm5zWmQ0Emnd5eecc84m/c2/5Vphi44xxhhjCktVwcitlXoFI5cLLGRgmr6l1TLYrJpgZCWt0SpQelPM6y0ji2BkXZ/PPvtsKt2MM84YMtuZ6JrVkiyCkRWOW8evc83aEpBHMHI9qSYYuTWQRzByGmrx0rOKe7ml+7iaYOTWQL1+//LCwcjGGGOM+U/hBx1jjDHGFJZpuq6MMcYYY1oz08y6KroPveg+2KxiPPKGMR5FX7+iz+/vv/8u5Pw6dOgwHQBMnDgx1/mVi7GrNpuuffv2/4kYD5+frROeL4pdV8YYY4wpLFXV0cmbcnVoNNq+0TuEt0b0uqdRpPodROdcxPkVnbQ921rrlFSCc/36669D9/nnn4e87rrrAiju/I35N7boGGOMMaawtEqLDq00v/76a+jatm0bslakNLVB34jZ9PLyyy8PnVa+nn/++QG0/rdEtdzoXpt55pkBVLZsmXzROkFPPvlkyK+//jqAZLXvWWedNeTWuG/Vcs0GkSeddFLott1226n+X1smTa3Q/cf6RqpL87jo/sv6nvNJbYwxxpjC4gcdY4wxxhSWhnZdqTlLzdCjR48GAPTu3Tt0Z511Vsi77rpryFraPkt0fE0NfCxnOm4U07nOg9ccAPr37w8AePHFF0M3YcKEkG+88UYASXdAazKTp7lGu3TpEvLQoUMBAOuvv37oGnF+5UzHlQL0+e+VWoA0atNPms51z55wwgkhjxo1CgAw++yzh65fv34hN8r9V4ly63v33XcDSLZI6Nu3b8iNum4kbX/qXkw7X3VOjXgvFpFyTZFffvllAMDvv/8eunnmmSdkNjhliAOQbJCcxfrZomOMMcaYwuIHHWOMMcYUloZ0XdEMqybKKVOmhHzJJZcASJq7Vl555an+PmvUdPf222+HfPPNNwMA/v7779D16NEjZI61U6dOodOsMZqcy9UGyhKdk17ziy66KOQ333wTAHDiiSeGTl07WXX1rjc6jz/++CPkM888E0ByzzETC8jH9ZHmbqr0/5bbXz/88AMA4IUXXgiduik333xzAMAGG2yQ+vl5zF+/k1lVRx99dOjUjcX7Tt05rRFd63fffTfkQw89FEDJhQWUd3PliY4pTVZ3yDvvvBPytddeCwCYb775QnfIIYeETJdIo7voytXmopyWyaT/nuc5AwB//fVXyAxnAIAhQ4YASF7/GWecMeQ55pgDALDOOuuE7uyzzw55rrnmAlDb+dmiY4wxxpjC0pAWHT416tPjTTfdFPJdd90FABgwYEDoOnbsGHKWT/L6ZP3UU0+FvNtuu4WsQaxk2LBhIXfo0AFAMhhSrQN8O1liiSVCN9NMM4Wc5ZO8vmXccsstId9///0hH3fccQCAI488MnTt27cPOe2NRK0jHH+lOguNCi11eb8xpgUIf/fdd6H77LPPQl544YVDpnXqxx9/DN3zzz8f8oMPPggA+P7770On1j2u1XrrrRe6PGoK6Xfq2/8555wDAHjvvfdCN8MMM4R82WWXAQAWX3zx0P3zzz+ZjbPWcN11/1133XUh01K19tprh65RrDjl+O2330J+9tlnAQDXXHNN6N56662Q//zzz6n+/ttvvw158ODBAErnLNBYZwrXT+9V7kkAePXVVwEAW265Zeh22WWXkGebbTYA6Wdq1uiZ8/PPP4esv4UM7F9zzTVDN27cuJAZrKy/iSNGjAj5ggsuAFCq4A1Uv3626BhjjDGmsPhBxxhjjDGFpSFdVzTJPffcc6E7//zzQ6ZJVk179TLdqblczW3jx48PWU2mRE1vNL1qsLI24HvkkUcAJIN9DzvssJCzcJlwXmoW5jiApJuCrqty7gq6OTSAUINZOW8NYNbPZ7Aa0DgmZzUT77vvvgBKJmQg/8BA1qzYeeedQ6f7U11XNJmzVQCQdD3SDdyzZ8/QqWm6TZs2VY+9Fuj80/aarpkGS6666qoA6ldjq9bwvtNgcXUtP/zwwwCS65S3m5Xomvz0008h6/n20EMPAUi6S7XmCt38ur/vueeekBmE3q1bt9A1yjkClPbtl19+GTp1vbEOHINyAWC77bYLmb+FmuBSr/NHv0fPaW0HRJeTuov1XuX5qcHye+yxR8innHIKAOCBBx4IXbVnrS06xhhjjCksftAxxhhjTGFpGNeVZjOxDsZee+0VOjV9sZy7ZiLVyzSp2RlaNl7NpPfddx+ApLl43nnnDfnTTz8FUJonkCyXTZcCWykAyZofmo1VK5M0r+/7778fuldeeSVkZrIA6XVy1AzLOjPM3gGSLjG6SbQOUp8+fUJWMyg70efhGlLXotbsYP0Hdd01imuge/fuIWudC4Umb83023HHHUOmm4vZjUDSNcI1qdRKIgv0O/Wa6/7k/XP44YeHjrVl/v0ZJM0N24juDgCYOHEigJKJH0i68VdYYQUAjTV+nhmakarnp+4vnm+aNXbQQQeF/NJLLwEo1fMCKreIaCS4Luoa1vuWLp9ffvkldMcee2zIPJf1/q0Xeg5riMYmm2wSctr9pW5yuizfeOON0Om9zJpytXSRN/aOMMYYY4ypAj/oGGOMMaaw5Oq6UhMjy84DwMCBAwEk3TnqzqDJLg/TrJru1PWi5fDTSuOrOY/ZHtpx/eKLL57qO+gi+Pd3ZQFNh08//XTotO2Bluvmug0fPjx0xxxzTMg0Las5VgteMdtKs150/lrOfrXVVgNQX9cV5/fYY4+FTl2WjdLiQvc/O8WzPQqQNH3r/ptlllmm+bm81upOUNPyiiuuCCB5/+bhWlTXmhaUY9bYwQcfHDptscKxqmtPsyZ5fSpdp3qie44u708++SR0mpXK4nvq2te/r1cLgbSClkOHDg3dk08+GTL3LwAcddRRAJJFWNWNMXLkSADJOWmLAc6r0Ysk6vXRs5737WmnnRY6nf+mm24KoHwLiXoVlC3XvZzFAbVgqWZQMbRDf184JwA444wzAKSvaYvHXdVfG2OMMcY0MLlYdPhUqFYcDUxj6XaWggaALbbYIuRGeVLXcaQFo+rTr1oEWP9C35j1sxiMt99++4VO60jUOgBZP1OfwtUio8G4LFGuNVu0JsZOO+0EIGmx0vGnfb8+vWtrgjxKm/PtRK1bWtOjEeF1UitZOYsE17pcMPG9994LIGklWWONNULecMMNp/r7rK2rvJe0VcAdd9wx1b8DJeug7lmFQaznnXde6L766quQGQSrjWzzIC0AGQCuuuoqAEmLHRM0gNJe0BYXKvOs1f2R9fpxX95www2h03tqqaWWCpnW37RGlvr/ajDshAkTQqbVSBtFZt3UlNalcmezWp/S7js9P7k+ev5onaAll1wSAPDxxx+HTs/PueeeO/V7q4Fj/vDDD0OndXBUz3GNGTMmdPr7x3Xt2rVr6Ni2AyiNv5Z1rmzRMcYYY0xh8YOOMcYYYwpL3VxXakKjy0pdMxqAyk68vXv3Dl1ad+s86ng0BZrmtGaEmsmvvfZaAMkALi33fdtttwEAlllmmdBl7cKhGVnXoVxtBI5fO9Kee+65Ie+zzz4AkgF2aWZI3RMabK3tCvKA5mcty64m6UZxnVainDuCa6lrqp3Kb7rpJgBJ18Jaa60VMoNc80gG0ABiXR/da3POOSeA5P669dZbQ2awo7rO1fVF193xxx8/1WcC+bhT1TXAFg/a8TrtXn300UdDd9JJJ4W8ww47AEgGANcL3VPl2kHQTaOuK23xwflrba60dihZo/uALn+2rwCStWN0fbhXNZhcz0/uS20BpK4ptrjQtizqrmILCZVrda+yszyQTBDS0AS6jNlqBQDmmWeekLmW6hpX19z+++9fk7EqtugYY4wxprD4QccYY4wxhSVT15WagzVbgmY67U6urh12P1XToMqN6LJSMyzbIWgmBGsHAKXrot1fhwwZEnKnTp0AlJ9/FvCaaiYGs6sA4Oqrrw6ZrR204+zee+8dMt1Qai5NK8v+zDPPhKxmdJawB/LtCq61Vxq9rHxLUHcc3VVAqfv3KqusEjo1J9OlkIfrSrusa1uVBRZYIOTFFlsMQKnVCpDMAGSGjn6W7jO6HLTFgLoe8ugUTXcxUOpkrS1ytM4KzyLWEwKSc826JlcaHNP6668fOrroAeDnn38Oma5vnb/ei/ws3X+LLrpoyAcccACAbOo86TmvrqdtttkGALDmmmuGTuekrilmIGkmkq4fs8q0RZC6eRjSMGzYsNDp+anrW+t7VPcca5wBSddUWh2qtGeBjTfeOHQMVwFKNXX0nq52HsU7vY0xxhhj/j81t+joE682RdQqj3feeScAYNCgQaHTmixpb4yNYsXRcehcNQCOVUq1zoBWKd18880BACeffHLo9I2kXpU99fP5xqdv7ip/9NFHIS+77LIAkgGOOj9aCrT2x3fffRcyK19rsJ5Wds265kUa+sbx9ddfAwA++OCD0LGaMwAsuOCCABqraWIl9JpS1sDJ66+/PmQGPrJCLZB8O8ujgSn3gQZlLrTQQiHrWjCw/7XXXgudBrtqkCvRYHm+EXfu3LnaYTebtArqQLKK8IEHHgggGYCta8L9q8HUKjNYNOv9q/cu7y8GggPJuWoDY15/PVP0LOHnajLHVlttFTLrs2RRLVg/U+s0sSmxNkLWwGttxMyKz/RcAOnWi3J1xnh9ylmssvAE8HO0dpE2FU37znJ1cGaeeWYApaB4INl0lzWteM7WAlt0jDHGGFNY/KBjjDHGmMJSM9cVzWhavp/5/kCyQeLpp58OIJnvn9agrFHcVUBpfBpAxlYVQLLmAYN4NQBwxx13DJml5dX0XK+mbOXgtV5ppZVCp2XjaQ5XGJQMJOsoMNiTzT2BUoArACyyyCIAkgGwebtGFLo2dP9psB3NyI3eFkLHr/fX22+/DSC5ZzVZgC7JXr16hS5vNx3vCb2ndM+p64M1Z8aOHRu6NDO/3suzzTZbyDy3uE+B/BsIq5uXrgt1nev5ymamW265Zei0ZlkeTS95/dQdpS02dK+xVhJdHEBy/Kyfo+6e3XfffarvzGJ++pnqTmIyjbro9XzQwHm6f5ozvjTXUJ4uZKB5LRr0/qMbctSoUan/nkXihy06xhhjjCksftAxxhhjTGGpynWlJiaWrdZMnZEjR4asdXKYYZXmrgIax2Wl46O5VM39jzzySMjaPZd/x3oQQDJDiabnvF00Cq+/uqu0Y/Xtt98e8ujRowEAxxxzTOg0k4XZdj179gyd1hRi/QQtW573tdD9R5O4dlRW10HeY20q6trQ7txcCzWz090BlNwEuqaNMmc1l7N2CQDccsstIbPmjdZeUTcVP0PdkepG4d/n3epDa6tsv/32IQ8YMAAA8Pzzz4dOa65wLfv37x+6etbkmhblznlmogKlfat11nT9+Bn6N6yd9O/vyJK066jutHL/b6PcS80hrW1M2r8rOmdtt3LOOecASGZ6brbZZiGn1ZGrFlt0jDHGGFNYmm3RUSvH+PHjQ2YePBuuAcCFF14YslZU5JNao1txtDYO35Luuuuu0OmTuQZG3nzzzQCSFhF9O2stT/Rau2LJJZcM+Y477gCQbKrHatBAKUhPK+vOMMMMU31+o14H7k+1iGjg9eDBgwEA++67b+gaZf/qmLUBplrf3njjDQBAjx49QnfssceGzIDfRlwfPTO06e2ee+4ZMmsyaZ0V/X/79u0LIGnx0GD4PIJ1//3dQHJPaf0ZWto+//zz0On+7N69O4D8ExwqUc7Kwd8VrSasZxHrJLGeEJA8t/Pct3kH7WcFLdoaYK37U88aWoq1AeiVV14ZMpMEdtppp9DRygOUqjzX8lraomOMMcaYwuIHHWOMMcYUlma7rtRc9fHHH4f8wgsvAEi2ctBgMYUmy0Yx9wOlsag5dejQoSHfc889AIDll18+dBtssEHIq666ashrrbVW4jOBxnQDpKGuj0MOOST1/6EbS6+VXheipsdGN+mmNRDUYFetmcT6Knnv37S2DuPGjQudBs4/9dRTIbNW0jXXXBM6rW/S6GtFdJzqxmAQvCYI0J0DlILM0wJcGwndk1p6nyEB5c4XzqUR3VXl0HPn/fffB5Bs4aHrw5AADfxtTXNtLeiasAWJnhkajqHJDmPGjAGQTODQZq79+vUDkKyNpDWTsvittEXHGGOMMYXFDzrGGGOMKSzNdl2pWUm7l7LselqXVaAxTcNp6Pw0k2j22WcHANxwww2hY74/kF5ivjWZU9PciWruV5pT+rs1wrU84IADQqcuWTWzNgpcNy2rrm0R1LV4+eWXA0jWTNJ931r2rY5Ts6bWW289AMm9rOdPo7fuSKOlpfdbCzq/OeaYA0Dyt0TrsHTr1g1Ass5Ta9mzrQm9Z9ZZZx0Apd9BINnCh2sGlGrpaTiH1iTjc0E9Qzts0THGGGNMYfGDjjHGGGMKy3TTMvn973//m+ofyxW0orm/UUqNT4v/+7//mw4ApkyZMtUANdJcC3LRdLraaquFrlHn2rZt2+kAYPLkyY0zqBoy/fTTl12/rCjXriQLuH6V5peWdaWZRlrckqZnAOjSpQuA/NxVnN/ff/9dyP3ZoUOH6QBg4sSJhZxf+/btpwOASZMmZTI/3mvaAkLPYrqRtZN9Le/Jdu3a+fz8F5VaQFSinr+VPF8UW3SMMcYYU1iabdEpAtOy6Chq3eGTbGsIBLRFp3XTVItOGmp5KteUM++aTrbotG6ytugQ3b+6r1n/KCvLgC06rRtbdIwxxhjzn8IPOsYYY4wpLNN0XRljjDHGtGZs0THGGGNMYZlmZeSiBys52Kx1wvXLOhgyLxgMmfX6pQXbA9kH3HP9/vnnn0KuX5s2bTy/VgznV/Tfh6LPT7FFxxhjjDGFpdm9rkzT0ZRIpbX0/TLFhPtyxIgRofv1119DXnPNNes+pjxIK7gI+P40pmjYomOMMcaYwpKLRYdvT2rx0HgB0khFzpoDC1r99ttvodPiV7PNNttUf1Ok7LdKa9na4b7Vebam7tIc68CBA0P30Ucfhfzkk08CAGaaaabQtXYrh1psOP+///47dJMnTw6ZndB1fVv7/Ftr8VNjaoEtOsYYY4wpLH7QMcYYY0xhqZvrKq3r6VdffRXyW2+9FXKbNm0AAKusskro5p577pAb0YysrqlXX30VANC7d+/QzTnnnCFfeumlAIDNN988dOrGa41uLB3/6NGjASTdAZ07dw45z/m1NABV/1+6JF977bXQLbzwwiF37NgRQHnXVh7o+owbNw4A8O6774Zuiy22CJmum9bu2iiXMj9s2DAAwNVXXx06Dcw+8cQTAQD7779/6GacccaQ817LpqLz//LLL0Pm/tV7sqVdqc1/izQXcGvAFh1jjDHGFBY/6BhjjDGmsGTqulIzFzORAOCmm24CAFx11VWh0wwPujzmnXfe0A0ZMiTkmWeeGUBjurAUuuAAYMKECSHTJP7HH3+Ebtddd63fwGqErq+6qU4++WQAwLrrrhu6Ll26hJyHyZOuG60X880334S87LLLhpxmxlc31D333AMAOOigg0K30korhUzXyPzzzx+6vLPOdPyfffYZgOT8N95445Ab/b6qBNd6ypQpoTvttNNCvvzyywEAK6ywQuh23nnnkM866ywAwKeffhq6AQMGhNyuXbuQ67WXm+My4P+r8z/uuONCHj58OADggw8+CF1apmQt4ZqUcxera7El17Rcle/WCK9VpeugZ0o5l3yt4Fh0zRrJNV8JW3SMMcYYU1gytehoAOTjjz8e8lFHHQUAOOKII0J3yimnhDx+/HgAybfMp556KuRtt90WQGO9eepYFllkEQDAjjvuGLr55psv5GeffRYAcNJJJ4WuV69eIS+00EJTfWYjouvLNQOAsWPHAgC23nrruo9J0Tcb1ky54IILQnfbbbeFrMHwc801F4Dk9dfP+vHHHwEk5//LL7+ErG/SeaJj1jE9+uijAIBVV101dF27dg250d/O0tC1oHVR768rrrgiZJ4/xx57bOhmmGGGkGeffXYAyf3BAG4AWHTRRUPO0lJXLpiaiQ/l1inNovPFF1+E/Ndff03191kHmdJ6/f3334fulVdeCfnhhx9O1aeNibJa1nR9meTR6MH0ahHR/ctrpF6O9u3bh/zhhx8CSAbLM8EFAHr27BlyNddAx/T5558DSFpG9f7Q+6Alv1u6//i9tby3bNExxhhjTGHxg44xxhhjCkvd6uh8++23IdNMvOeee4aubdu2IdPNs/TSS4du1KhRIdM01kg5/Wpmo+tJS+yrmXKjjTYCkHRtvf/++yHT9dWaXFc6f7oONEA5D3R//PTTTwCAG2+8MXSTJk0KuTnXOi2wshGDIXUc6lpk/RgGjQPA9NNPHzLvpXLzyPteI7r/1E3DOjiDBg0K3dlnnx3y4YcfDiBZ+0rnyppCd9xxR+jo7vn3/1trdE7qbmICBwAceeSRAEpJGUD6mmiywyeffBLyrLPOWpOxplEuAYUuj5tvvjl0f/75Z8jqhurTpw+AZDC/uhb5/zKoHAAuu+yykFdffXUAJRckkM9ZWilA+OOPPw5ZXXf33XcfAGCxxRYLnYY+sEWLnl+auJPF/cnzjW5vIBl6cvzxx4fMmnGVxqF7Xe8vJgEss8wyU31/S7FFxxhjjDGFxQ86xhhjjCksdXNdpZme0iLpy/27mmEbkbT6EFpHR2FUvLa4eOedd0LeYIMNACRN63m7C9JMr8w+AoBLLrkkZNZnybt2jEIzqbpo1N2RZtou55qinPeaNIcxY8aEzBYAmnWle42ZGmoaV3gN85h/OdeIZm1ec801AIBDDjkkdAcffHDInKuuuZrR6RLS7ub1On90n7344oshn3POOSEvt9xyAIDtttsudJpdw2uk7ip1DdC1noXrv1wmF9uKqDtq7733Dlnb5TCrLe2eA4AffvgBQNINxqwgoLRWc8wxR8smUQU6Tr1/NNvsyiuvBJB0R2p9rwUWWAAA0KlTp9Cpa4/zUzcS1xTI5tzl/aFzuvPOO0N+/fXXQ+bv2pprrhm67t27h8wwlZdeeil0vGeBUgYss8uApGuuJW5IW3SMMcYYU1j8oGOMMcaYwpKp60rNmGq6YvEjNYOlmaTVdKzFk1oLlczB7HINJAsisrWAml7zdpPo+jz22GMAkq4Bzao77LDDAJRMsED+42eGRzmz5xNPPBHyPvvsk/gbIGl6pplc3T1qLs57rmmo64oF1bRIoGY1cn2fe+650KlJntmSm2yySejyaIVw9913h6wZjhdddBEA4MADD0z9u0puyo8++ghAKXsEyD6rha4BuhUB4MEHHwx5ttlmC5ntSipl/Wmmmc6ZrvGs2z7o/UHXoZ4ZmhVVKYxBP4sZlOru0eKkdI/VM9OKY2Z7GAC4/fbbQ+Y9BZTOig033DB0PHMAYL311gOQdK2r65VZd5qVnPVc+fnqLtasxCWWWCLkr7/+GgBw7733ho5FcoHSWapZuZ07dw6ZGaJaJLHae84WHWOMMcYUlrpZdBhAB5TqyFx//fWhO++880JmkJXWGTjmmGNC5ttPo5f4VjTYkddF22JonQQGnuVtGdAxa+AZ669oCf2vvvoqZK6LBmPr2yffaLJ+C9HvpHVCrYj6lqgl1Lnv1Iqje5EtLvTvV1555ZDZQiLv9VO0xQXrNKnFRt8Y+da2yy67hO73338PmXVo9I2ctUuAbIMhaW0Bki0edPwMcm1OsK3udQZB6v7VOi5Zrqu2P9BgU7WOst2IXosvv/wy5JEjRwJIBiNrnbLnn38eQDJAecYZZww5i8BktUiRSvtE10+tqwxcpWUHSJ6flVpk1Iq0psb9+/cPHc8BIGldW2uttQAkLTJa2+jnn38GABx99NGhU+u+BnFniV6/ueeeG0Dp7ACSFjUNhqZFTc9EPeu5lh06dAidttBhkovu2WqxRccYY4wxhcUPOsYYY4wpLHVzXWn9EgZTaR2Ifv36hfzyyy8DSJqm1TSep8sqrcvqv0lrUaFm1sGDBwMAhg8fHrp0JtsfAAAJkklEQVRy7TDqjQYovvvuuyEfeuihIbPcd9++fUNHdwZQmvcbb7wROr1WNG3OM888tRr2VN8NJN1Ub7/9NgBg4sSJoVN3hLqp2CJB95mOnyZX3d9qOs+zzkw51PVEl4i6jjUYki0U1N2g15IuEa0DojUzsnBd8Z7SYFZ1HbIjOVAKYmyOa0QDP+mmXHjhhUOnyRC1WlfdU7xXdB10fhMmTAiZweSKjp/7Vu9ldR2w3Yze32uvvXbIWaxfS66ZXh91bbzwwgsAkuekun7oes26LYvOiW5O/nYByWB2rYPDseiY1A3E30Kd8y233DLVZ2Xt+tf58Z5iIDuQdK0yHAVI/11UHWsq6f7m+QyU3LC1DJa3RccYY4wxhcUPOsYYY4wpLHVrAaHm0MUXXxxAsrbODTfcEDLNt9rdO+9O5TS9qYlRsx40Q4OR6WyFACQj6F977TUAJRcekHRd8bvydn2om0fHwq7B1157behGjx4dMk22mgmiZtbNNtsMQLLjba1My2nmZKB0rdUdRRM4kN4CQd2l+lk02ao5Wtth0E2krp+811LHR5O4uo7ZXRooufR0zHr/cl9opk4WqOma+0vvOe2+rm7QprqsdE9q9+uHHnoIQLIOiq51lq45dUFpzRLdt2mtOXT/UtZwgf333z9kZtDoNct7f1ZCrzmzxbT2yk477RQyXVr1rKPDM1uz45S0diOa9aZZgzw3hw0bFjo9S/JorcN7hu05AODGG28MWWvi0LVf7vpzr+m/ax023mvlQkNagi06xhhjjCksdbPo6NMZ6zxoIzANDGXgnb7FlGuQmSVqZWCwqtYw0GBiHR+bAmoAqAaW8U1UrTwaWJdnsLW+LWgdBK3JwTdN/X/32muvkFmldPfdd5/qb5QsAgTLwWqyV111Vei08nYauifVkse98Oabb4ZOAzvZdE/rzDQSfKPSYFu9P9OCJbW+C+ev1WizeHvW+4B1jtTKo5VlK+0l/TvOX/eCWodY84QVaoFsrThA6V6jNQkAPvvss5C7des21d+rFUbrkLFi9DLLLBO6U089NWRa4vTv62n9aCo6Pm0AyTpWvXr1Cp3WmclzLuUsY3p/0SLKCvhA0rr89NNPAyhZ3oDGaZC82267hbzCCiuErL9/layDaRZVrczOcymt9lxLsUXHGGOMMYXFDzrGGGOMKSyZuq7U9KQlvM8880wApVLX/4YN9DTALs8AZKDkmnjvvfdCp+NX0zkDP3X8GqTGIFBtWqbBXI2Czl+D4ThXdS2o6bhLly4AkvPTa0HquaY0k2qApgaYpqFrSnckUNqfak5uFNNyOVZbbbWQaRr/7rvvQqfNJHmthg4dGrqLL7445OOOOw5ANm0fdJ+oO5DNErfZZpvQLbjggiHrXuK66f7VxIBHHnkEQLJOl9bhYTPQcnVosoBj7dGjR+hUVtLuP3Wt8lro/HT/NvpeJTo/Dczluqy//vqhq6cbvKmkNaoGgHPOOQdAsimtNnBdaqmlADRWiyPufw1g10a3en9UOtf573p/LbbYYiEzGFs/p1o3li06xhhjjCksftAxxhhjTGHJ1HWlpjuaywFgxIgRAJJR25rBQpOkuhnyMOOpiZelr5944onQlaujQzMy680ApUwzoGT616wrrSnUiKhpkuuq5tgvvvgiZLq59Po1Sp0OHUelMalpVWtesOZDLes8ZM2uu+4aMmtWaZ0j7bo8ZswYAEl3z/nnnx/y9ttvDyCbNS1XFp+u3Y033jh06nrU2jLMpnv44YdDR3cBAIwbNw5AsnYQ3VVAPnVYSFO+k+49dec888wzIXNf9uzZM3SNcv81Be4BrSnETCuglEGpe0EzXHnfqus879AHXSv+Llx55ZWh0wyyRnJZ/ZvmnJ+V0HtdM0CZzay/H9Weta3npDbGGGOMaSZ1q6OjlQ9pCdDceQ3WXWmlleo1rCbDtwStxqmywrcyfUrXJ/pBgwYBALbaaqvQsZEiAOy7774AGt9ioE/0bNQGAHPNNddU/97aUesHmyKqFU+tW40yb7UO6BsT61dpAKRaBFiz5bbbbgsdq30DpTexLOapY9ZrSvm6664LnSYGPPfccyGzQSArsAPAfvvtF3KfPn0AAB07dqw4hkaE1+Kpp56aSgeUgsT/X3t3j5RKEIVh+BD4k1hlqlVugtgiNmABsgYM2I0lma7CmKJYgSwAEragkNzoa7+pCzooM9OM7xN1TXmVpodh7jk953hE45joujebzdIxr+Ol66b/j9+jINp43cTn0KPAHsX3KvDj8Tgiihvr/yJfn8VikcaK3h5yg3ne36QAAAC/wI0OAABordpSV57a0CZD32zW7/fTWKWvc6z3sE9Y++bmJo1Ho1Ea393dRUSxbLvaXkTkWRNiG3+dXl+hjXyzq1o8+GbY29vbNNa5nksKK6L4WpRaVIo0otj0Ufzzt0+djN/w3+0tSFTnxpv/+mbj+/v7NH58fIyIiF6vl455zR3NJfcUlfM0tmoezefzdMw/i2pge3FxkY4d01w1l9fX13TM64yp/pPP3+tENbnx2K/j3lbEP2u+ZUFyulZUbVsdqLe3tzTW9YmmngAAACVwowMAAFqr0tSVh0s9XKc6Fh66Gg6HaaynWY49nLcrXKw6EE9PT1t/NvfUldbFnzoaDAZprHYfuXbvLsvXpNvtpvHDw0NEFMOtHqa+vLz879/nROuXYwsLf8+8bYHeX6VlIopPGvnPbmvtkXNtkjL8Wqj5eZ0cb9Gip1Zzv47sonVdrVbpmJ8X19fXEfHZaiYHen1Km0Z8domPKJ63ejIr1+tD1XRe+naA6XSaxnoqku7lAAAAJXCjAwAAWqvzVUhovV4fLHfkYdRtu6n9dVQd0js9Pe1ERHx8fDSaG9sVWv5tmO7s7KwTcdj1+47PpeqUo9bv/f29kfltW7dDlkY/Pz+vff3qpPXbbDal56f3vMxnpumU98nJyd7z+4ldT6Vo/lW9D1XPTylxtRqJiJhMJmms4pBe8PGQqVfN77vvBz8X9SSmd1R/fn5OYy8u23QaVd8PTX3/6bz1tjqehn15eYmI4lOXnqb+juZX+Jv7v0wAAIDjUFtEJye5RHSq0kREp05NRHTqRETnuNUV0WlK1fNTpGS5XKZjHrFRO5KqNluXjeg4RWlU4yeiWLspp3Y+TUd0tG6+pt4C4urqKiJ+3pSViA4AAPhTuNEBAACt9WXqCgAA4JgR0QEAAK3FjQ4AAGgtbnQAAEBrcaMDAABaixsdAADQWtzoAACA1voHY9Bx06aoWGwAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# training data stored in arrays X, y\n", "data = loadmat(os.path.join('Data', 'ex3data1.mat'))\n", @@ -868,7 +759,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -907,7 +798,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -991,17 +882,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training Set Accuracy: 97.5%\n" - ] - } - ], + "outputs": [], "source": [ "pred = predict(Theta1, Theta2, X)\n", "print('Training Set Accuracy: {:.1f}%'.format(np.mean(pred == y) * 100))" @@ -1018,29 +901,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "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" - } - ], + "outputs": [], "source": [ "if indices.size > 0:\n", " i, indices = indices[0], indices[1:]\n", @@ -1060,29 +923,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ "grader[4] = predict\n", "grader.grade()" 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 index 7ff0663b6..cd4a2a292 100644 --- 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 @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -41,7 +41,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" @@ -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": "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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", @@ -157,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -215,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -326,38 +339,40 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", " \n", - " X = np.column_stack((np.ones((X.shape[0],1)),X))\n", + " a1 = np.concatenate([np.ones((m, 1)), X], axis=1)\n", " \n", - " a2 = utils.sigmoid(np.dot(X,Theta1.T))\n", + " a2 = utils.sigmoid(a1.dot(Theta1.T))\n", + " a2 = np.concatenate([np.ones((a2.shape[0], 1)), a2], axis=1)\n", " \n", - " a2 = np.column_stack( (np.ones((a2.shape[0],1)),a2) )\n", - " a3 = utils.sigmoid(np.dot(a2,Theta2.T))\n", + " a3 = utils.sigmoid(a2.dot(Theta2.T))\n", " \n", - " Y = y.reshape(-1)\n", - " Y = np.eye(num_labels)[Y]\n", + " y_matrix = y.reshape(-1)\n", + " y_matrix = np.eye(num_labels)[y_matrix]\n", " \n", " temp1 = Theta1\n", " temp2 = Theta2\n", " \n", - " reg = (lambda_/(2*m)) * ( np.sum( (np.sum(np.square(Theta1[:,1]))) ) + np.sum( (np.sum(np.square(Theta2[:,1]))) ) )\n", + " # Add regularization term\n", " \n", - " J = (-1/m) * np.sum( (np.log(a3) * Y) + (np.log(1-a3) * (1-Y)) ) + reg\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", - " #Back-Propagation\n", - " delta3 = a3 - Y\n", - " delta2 = delta3.dot(Theta2)[:,1:] * sigmoidGradient(X.dot(Theta1.T))\n", + " # Backpropogation\n", " \n", - " Delta1 = delta2.T.dot(X)\n", - " Delta2 = delta3.T.dot(a2)\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", + " 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", + " Theta2_grad = (1 / m) * Delta2\n", + " Theta2_grad[:, 1:] = Theta2_grad[:, 1:] + (lambda_ / m) * Theta2[:, 1:]\n", " \n", " \n", " \n", @@ -365,7 +380,7 @@ " # 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" ] }, @@ -393,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", @@ -413,13 +437,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "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", - "#grader.grade()" + "grader = utils.Grader()\n", + "grader[1] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -449,9 +494,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "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", @@ -471,12 +525,33 @@ }, { "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[2] = nnCostFunction\n", - "#grader.grade()" + "grader[2] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -512,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -564,9 +639,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "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", @@ -583,12 +668,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "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 | 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()" + "grader[3] = sigmoidGradient\n", + "grader.grade()" ] }, { @@ -614,7 +720,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -670,9 +776,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initializing Neural Network Parameters ...\n" + ] + } + ], "source": [ "print('Initializing Neural Network Parameters ...')\n", "\n", @@ -759,9 +873,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "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)" ] @@ -775,12 +940,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "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 | 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()" + "grader[4] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -817,9 +1003,64 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "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", @@ -835,12 +1076,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "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 | 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()" + "grader[5] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -855,7 +1117,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -901,9 +1163,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "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))" @@ -926,9 +1196,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "utils.displayData(Theta1[:, 1:])" ] 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 7ff0663b6..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": [ @@ -41,7 +41,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" @@ -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/3P3DlDZtdgUNIzP3UQquHbttdeGzXPEEgGgtJMMKIk/Fr0TSdOs2uJgxx13BAAsuOCC4avGOWkqXIu600rFV3kP5n0EAFZZZZWwq/Fc6L2A9tNPPx0+igADwEUXXQQA2GWXXcKnu4rzWJeO6BhjjDGmZqmYjo4+8fKpVIs5tViQEYEi2h5kwSdqldhXbRkt3OXTrzYyy5LLJzo+aupUUmeG51qf3PUpggVyQKkYVZ+49Pj4xEI9CyA5FkaEimh6yUJioFQUDiTbkQwePBgAcOutt4ZPi8m5VrMK6POYP56riRMnhm/kyJFhsy3DSSedFD4da2OekvhZWkD+4osvhs3Cz7XXXjt8RURk9TO1QP/1118HAPTs2TN8ulYZ/TrxxBPDt8IKK4Rd9L0mDT0mRrK0gF6vJbYrufTSS8On4+e4iy7a1WtC1yfnoiW1cGgMvG/oBgZtMEv9J/1+qUZ0TaomHpt2n3322eHjBg2gVOyvmz3yjqg6omOMMcaYmsU/dIwxxhhTs1Sse/lee+0VNkOrqg3TpUuXsKkNwxQJkJTbLyK0zNDqMcccEz5N5yy55JJhDxgwAACwzTbbhC9N50I7emthLFsQaBpp5513DrupKYkZwbnSOWM6BEjOD/VTtPu1yq2z6652z1adHdW8qBQ8T1ogrDorWhjP+dG2BlrMyZSNhl61GHS77bYDUN6O3jymdu3ahU+LvRnu1nPb1LXB0LrOn7YYYHdhTf0VnbpSnR9qcuy3337h03Ox0047AQCOPvro8GmxfdFFummktS7RY9a1yE0Oxx9/fPg0Dct7seosVeqeqp+jxbhajLrtttsCaNyaqsZ0o6JpbhYbX3jhheHTMg5uKKjGzTpZ6L2OmyA0HaeaW0OHDgWQvGbz1qxyRMcYY4wxNYt/6BhjjDGmZsk1daXhRJWzZlfvDz74IHzcKQGUwuTaEfq6664Lm1158w4xa7iYO4hUG6B9+/ZhaxqEXbs1HDdhwoSwKZGt2gnvv/9+2ExZaWhT2y3kGabV99Y0yMYbb1zH1vFpaPauu+4CUBonkEz5Mc1SRIpAQ8DUEwFK6UKgNO86prR2Jq+99lr4dIcINSP0Nao51Jzj1jlZddVV6/x/OdYG3+Phhx8On+46Y0pT05FFhNb1+tQ0iHYlJ5o65vzpMed9/Hx/Pea0XYcNacuQ1gJA1xpTdpouePzxx8Nm6x2V3c8bHp/uxHz11VfDVs0q3c03/evV1vFrOr+I1Hh96PGz3YPumlSdGbZ70PmvxtScjklbeHA3IL/ngeT98bnnngMAdO7cOXzlTPOnHmvZ39EYY4wxpkrINaKjT+yDBg0Km8VwWozMAmSgpImhOhGHHnpo2C+//DKA5K/EPH7x6i9qPtFmNSp94oknwqZi7ujRo8OnDQR/++03AMD8888fvrQGZ1qgV4TmjH6OziWPRZsqqk7C+eefDyAZ8VKV3rQnsiLQz6/v6VpVsI899lgAySeWM844I+w8I1Z5RSE04sGnbo2iqs4VG5xm6aBUCh3/p59+GjavS+o1ASW1a6AU0fjkk0/CpyrkeZAWhVEV8jnnnBNAtp5IWnQn64mfEWEtNtZzRR2zSkbheKwa2dTxa2E1Gxxro2Rda7wWNaKsOi5ci0UXlesxqyI7dYz0+LUwftFFFwXQ/ChwHuj3nyqL9+rVK2xurNECeF2r/H5Xhf/ddtstbCsjG2OMMcY0Av/QMcYYY0zNUvbUlYa2Pvroo7D/+OOPsFkEyhDl9LCwjCkCIFlMxwZw1PPICw3tsh2Cpmu++eabsC+++OKwGXrT0CPTGQBw2WWXAQA6dOgQPtUkSUvtVJOOAo9PG3lqsTFD0prOUR2kagzJphWBamiZjegA4L777gMAbLjhhuFTzRYWQxYdOq+PNG0WoBRy1rYtmlplmqeI1KPeX5gCBoADDjggbB43m8cCSU0rtnF5/vnnw5d36orHrZsu9t9//7CZztAUrxbVpp1rPRc6l19//TWAZIuBots98Ph1A4CmLh577LGwO3XqlHgNkLw+eX/R1BbbegClpqDaSFrvP3neS/U86/cb0/lAaeOJNuXlMQPVed9IuyeqtpZuXGDrFU1H6Tlns1nVftp+++3DZhqznPPkiI4xxhhjahb/0DHGGGNMzVL21JWGm1g9DiTbHTB1oZX2+jqGZLNSW5VCj4nHqiF81blRHQempHRX1b777hs2w+QaetZwZdG7kdLQHQQMGeuuON2BRE0aTe1UYzhW0ZAzx6o6JKrpxJSpdqfXFiDVPlai6091nm677TYASe0r1VxJ20FUKfSYdaeftqvgNaraLNR2AkqtW5giqSTcMQokW6j0798fQHJMGvrXdiRM3agOC9P5QGnd6v/rrjnqYFVyJyfnTXcvahpP01BMj2hHeW2HwN2cAwcODJ+2RuEOIG2hU6nUv65PvX/cdNNNYa+88soAkt3Ji97BWB8cF3fsAaVWR0AyNcy1rGUe+l3OeVUdJdXh4e8Gp66MMcYYYxpArhEdfYrQp4fDDz8cANC7d+/w6dMjn8623nrr8FFtWN+3iCdK1fNRbQ5Ff52n+Xjc1fjLXdE5mzp1atgXXHABAOCee+4Jn+ooaJElqaZiapJVoMknfi0W1Ogji8k1IlCNUbgs0jRN+BQGABMnTgQAXHnlleFTnZJqKSbXp2fVn2HETYvhNSLHiEiaAm9ecP3vs88+4VPlcEZ6VLvozjvvDFs1w3j+NQqiT8xci4wcAKVrFiip8FbymuQxaZRbz4VqkvFekqUjxrFq00htEKn6bKRSESuNrF199dVhq+bMKaecAiC5AaWl3D90nekGI91sw8LwL7/8Mny6lseMGQMAOO2008KnRep5nAtHdIwxxhhTs/iHjjHGGGNqlllmFNKbNm1as+J9WTodgwcPBgAMHTo0fBp6ZNOvrl27hk+LgJubumrVqtUsADB16tTqy6eUgdlnn70s49N026WXXho20xza4kHTWJTezyscy/E1d31q6kNDzizWVJ0kDbNyLeZVzJn3+mSaR5tf7rnnnmEzpaCNTnUtNHesnL9//vmn0W+kc6ah82233TZsLeglqv/BwmrdTKCpoeaOb7bZZsscnx6/FlBzLrSAeMSIEWFr4TLXnab7NY3KsVBqH0imsUhDGoimMaPxZVFfU9P6WrAoPIeq3aWFy+pvChzfv//+2+Dx8frQdGS3bt3C1tQwi5DzbmSZxayzztro+UvT0WGrByB5r2BrlbXWWit8q622WtjcJMBWUECycLlc15/iiI4xxhhjahb/0DHGGGNMzZJr6irxQSlhSu1em6aZoxX6WZ16m4JTVw1D0xUqUf70008DAM4888zw9e3bN+z6Qs/NpVypKx2f7nZhaFlDq/r/DLPmlZrLY32mtU7QdJV2V2ZKefHFFw9fOXcINid1peiYVI5+0KBBAJLpKJWbZ8pVd9KVc3wzSu3oNaHrj/c33Z2jtu565N+qdpeG/nleslpIpKWRGkNTUld5oLvONA2k56UpNCV1Rf7+++/U49MdyJz3onaiNiV1RbLS9TpWrlVdk7oWOT/6+nKeC6eujDHGGDNT4R86xhhjjKlZyi4YmEVamGrOOecMn4aZSbV2755Z0HOuOxm6dOkCAOjevXvq37ZExo4dGzYF2Q477LDw6VqtFsG8xqBpEna1fumll8J39913h82UVbULWuqaU5FK7WSeRpGCnfWl4DXtonZ9aaa06y8rtVp0J/NykfadARR7L9L7BIUrgdr5Lss6dh0r7ay/LaR1TMU/0RhjjDGmQlSsGLmacDFy49FiMj4R6hNxJZ+Oy1WMrE+2v/zyS9hsQLviiivqZ4ad9xNZ3sXI//vf/wCUWj0AwCqrrBI2CzvzLiYvupg1L6qlWDcvZpbxNaUYuSXQnGLkloCLkY0xxhgzU+EfOsYYY4ypWWaYujLGGGOMacnMcNfVlClTavJXUOvWrSteo6M1EtwBo31DyglrIGp9/mq9hqzWx1frNQKev5YJ56/W75+1Pn+KU1fGGGOMqVkqpqMzM6JRHHZ0BYAXX3wRQFL7o5K7eszMDXeb6fps6TofaS1m6uvOXYSex8xOVsdyxfNiyo0jOsYYY4ypWRzRyQE+qWijsx49eoTdtWtXAEltmpb4FG1aDvr0zAa61NMBkg10i2462FA0IqU6TmyGqcrCOlZed/PMM0/4qiWKoPOkjSqb+146viKUvTlXWpeojZx1LqkuXO3K3KZp8L6iau1qc33qmm2umrcjOsYYY4ypWfxDxxhjjDE1SyGpq+aGoao9pM4w3P333x8+TQ2ceuqpib8Dqid0noXOmYaZ03ycn/qaulXTPKaNL22cSn3Frll/q3alzoWutUmTJgFItri47LLLwj7uuOMAVGfzUp2TP/74I+zrrrsu7CeffBIAsNpqq4Xv0UcfDbtNmzYAgEGDBoVvo402CruIa5HrR8f02muvha2pNx6fpr7T0DTRqquuGvYaa6yR+My80Ln69ttvASTX2ahRo8LmnADADTfcAABYcMEFw1ft98c8yLrnMuWXdU405VmuOeb9qanvp/c3jkVb0Lz33nthb7HFFgCSDVKbe390RMcYY4wxNYt/6BhjjDGmZil76qq+FAdQqqbXqvq00FTWDgS+b1Y6oAj0WP/++28ApRA6APTq1Svs+eabD0B1pgaydC40DP7RRx8BKIWjgWRqYK211gJQCpEDwFxzzRX22muvDSC5K6aIHRZpO5EA4I033gCQHNNvv/0WNtffsssuG74ff/wx7D///BNAckxLLLFE2JtuumnYTJnoDqA80GPhcXfq1Cl8I0eODLt37965HktT4FzpPPXv3z/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/88WFrGk6bmaXBlIJq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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", @@ -157,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -215,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -326,38 +339,40 @@ "\n", " # ====================== YOUR CODE HERE ======================\n", " \n", - " X = np.column_stack((np.ones((X.shape[0],1)),X))\n", + " a1 = np.concatenate([np.ones((m, 1)), X], axis=1)\n", " \n", - " a2 = utils.sigmoid(np.dot(X,Theta1.T))\n", + " a2 = utils.sigmoid(a1.dot(Theta1.T))\n", + " a2 = np.concatenate([np.ones((a2.shape[0], 1)), a2], axis=1)\n", " \n", - " a2 = np.column_stack( (np.ones((a2.shape[0],1)),a2) )\n", - " a3 = utils.sigmoid(np.dot(a2,Theta2.T))\n", + " a3 = utils.sigmoid(a2.dot(Theta2.T))\n", " \n", - " Y = y.reshape(-1)\n", - " Y = np.eye(num_labels)[Y]\n", + " y_matrix = y.reshape(-1)\n", + " y_matrix = np.eye(num_labels)[y_matrix]\n", " \n", " temp1 = Theta1\n", " temp2 = Theta2\n", " \n", - " reg = (lambda_/(2*m)) * ( np.sum( (np.sum(np.square(Theta1[:,1]))) ) + np.sum( (np.sum(np.square(Theta2[:,1]))) ) )\n", + " # Add regularization term\n", " \n", - " J = (-1/m) * np.sum( (np.log(a3) * Y) + (np.log(1-a3) * (1-Y)) ) + reg\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", - " #Back-Propagation\n", - " delta3 = a3 - Y\n", - " delta2 = delta3.dot(Theta2)[:,1:] * sigmoidGradient(X.dot(Theta1.T))\n", + " # Backpropogation\n", " \n", - " Delta1 = delta2.T.dot(X)\n", - " Delta2 = delta3.T.dot(a2)\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", + " 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", + " Theta2_grad = (1 / m) * Delta2\n", + " Theta2_grad[:, 1:] = Theta2_grad[:, 1:] + (lambda_ / m) * Theta2[:, 1:]\n", " \n", " \n", " \n", @@ -365,7 +380,7 @@ " # 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" ] }, @@ -393,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", @@ -413,13 +437,34 @@ }, { "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", - "#grader.grade()" + "grader = utils.Grader()\n", + "grader[1] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -449,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", @@ -471,12 +525,33 @@ }, { "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()" + "grader[2] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -587,8 +662,8 @@ "metadata": {}, "outputs": [], "source": [ - "#grader[3] = sigmoidGradient\n", - "#grader.grade()" + "grader[3] = sigmoidGradient\n", + "grader.grade()" ] }, { @@ -779,8 +854,8 @@ "metadata": {}, "outputs": [], "source": [ - "#grader[4] = nnCostFunction\n", - "#grader.grade()" + "grader[4] = nnCostFunction\n", + "grader.grade()" ] }, { @@ -839,8 +914,8 @@ "metadata": {}, "outputs": [], "source": [ - "#grader[5] = nnCostFunction\n", - "#grader.grade()" + "grader[5] = nnCostFunction\n", + "grader.grade()" ] }, { 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 0000000000000000000000000000000000000000..0998c2cedd9f740801c8fd080b65f921b740dc5b GIT binary patch literal 58 zcmZo*ju2yDU?@q<%T25-E;ceWuyjbzP0Y;EOU}#gI5twGX<*lp?bK+j8i^XK3$+VsXLd!2 zUm0?3t+2XOF64{RT-%cbq=(#lY5#)u(o1hV73iVZUULb0X@74>u2z=peo)|$oPG0V z=6(F;_w>QcOx?g0hrj*#l@|=-Z}d@KHeP;!I|G}wk6)H@gVl2blY55z}M_2{k6bL5-$ora1;4=8bR0S zk7zm-{cadjc-C-RxRV=bQe&SzGB!-X&Kd`7r?O}4u|0Fo>e|8-)%=up%m=I;@G>!r=(sJ?ImJo||xJ4!D-;;$PchRng6(r;3%>Z`E$e& zm>p{9q9=v#H*hDjXdao5j7Qecc*J&X1Rq=a5>3X^rk$~stX7yfdm*3yW7%7blC*SO z#sv zCkyc)bKcKaclA{);Vaz6Hcu&IKGOMuwJyBxM;+HsuHr?<%GIn^_e2YBD0Xp+Imep*PsV$g<2PRC!0OGA(|=CuzF_BI&C@D^Gtmc zePjO;u#$flN$_1XsjrrCCVc0GaX&5h zQ-WmwPJ%?yf!{RMxA4epA);>6QlK~ZpiO30l8Pds zGc)LC)!g#H5ZaK=_q@^RJy(SOIK$q8rXs;-nPbi|hpF$NuS3()MVzCGdl7fCg@!oC zkO`zU654zbeCfd2H-#-K2j)%<311slcTHj!L+f2bKW(JC0|>A%)*jY2z(LL$qS7@F z*wE>j;3PGGg_Bk{YQq|2Xe_i5%M$g+#LA`t5DoXMlBe7SbE0!drxl1m9QlJV3IKnT zq^0YnJOVNxy5VgvNhv_OUJqE3A63`=1PO~gO^PgilK13d`D_$cC(K8a=oF8m2be0> zsZ;_?8Ra>gTnPFXxpqrQD4w1Cw5wYs_JMPNy^N#gy8hGzuIA4CiBeEl;|f+ zOu$`QF(0ozNz>~SidY@74*BVr8z57U3J1iqk=q6!Kc z_GDHAP!hS$rYAUaW=A22!HXECEHs%-bxCH4C~Z!)8k0fTsvscRTX>Mq6{jKRX-Gv| zDr2#tRknaZH0(+6sgdGaUixFmB*Z(6mtV5#Kpe+9Z>hKO-J#C%B6>ns@&`21Xfa{5 zOlj@gxGRDkFg&ZcYgFr?O0#s2bF`<2-i@hNeL@!KL$a-D^c~k#1L_>rHSQ^NH70aT z9RR~xGkZpt=~~c1&6n4Lr}hlnXw3n)X0z&t%7r&anzs?Ks#nnTaO3*=+UR9GMr3>K z%n>2=h;~0_S>#h1t_DiV+SUcs+hF4wEZRsXxJCT03RY$>+ zwnG%03BrA<-R}6P3)}6((@uR4mf9ne>0o1K@mFQrr*e-hlv>A@CM(mCN0FFZ#zFi! z+j=9__TDvb;Ol4ScG%z_Lt?ooy1`&^6mFX8hhVbAap{n=5uUkk5N4vfYwuX$?;ux$ z+}6=wckIJ)Lz`r&l!yF7$UBh#0`k=f8T?BEb2x(SRu0(y)B(w^Kz0hUf6nC)8;F5l znqBj(v0q16A}Yi*j$|ubfMf%bU!SaX7ys%gblU0kFW5aJLrF^j)BjM znXdUM-hOI?<_f;S-}U!rv-k4Yn_be#G$PtiAlC1%6)%6f*1Mvwzg#Qg|F757>kw4$ zpczp)pMtwGqYE4Ze;d=+G-m4 zIRDif(3d$sl7pK{MXFg*@1dhr(~;zf%qHFH98F5R=t=yd7(^-FZvP5DCX~Vkdmb@W zHyy?SV{_~b+E;L&ryIR<_?wJ1J-YcEMKc9%yPehB?I03;pWYko_Gf+9&wnY9`@Y_c zx`??z^}J9u^&6_Yj4e-C;0C(YO=>9U)oqfRDRQDCeZR~LGHa8m?~@SWjJk|wh&!Pg z(J>qBG&_e~<N" + ] + }, + "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", 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 0000000000000000000000000000000000000000..9d93677f2bf8412d3647c7eae59fd852aa5b1f7b GIT binary patch literal 58 zcmZo*ju2yDU?@q<%T25-E;ceWuyjbzP0Y;EOU}pF literal 0 HcmV?d00001 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/exercise6.ipynb b/Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/exercise6.ipynb index cdc43975f..148c1897e 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 @@ -212,7 +212,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", @@ -410,7 +410,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", + " 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", @@ -1021,7 +1036,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.6" } }, "nbformat": 4, From d1d1b859503ef37a1849f04cd6d4d0f22a5667b0 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 25 Jul 2020 00:00:57 +0530 Subject: [PATCH 9/9] Added till Week 8 --- .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 19897 bytes .../Exercise6/exercise6.ipynb | 267 +- .../Week 6(May 3 -May 9)/Exercise6/token.pkl | Bin 0 -> 58 bytes .../__pycache__/submission.cpython-37.pyc | Bin 0 -> 3458 bytes .../exercise7-checkpoint.ipynb | 1198 +++++ .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 7559 bytes .../Exercise7/exercise7.ipynb | 4615 ++++++++++++++++- .../Week 7(May 10-May 16)/Exercise7/token.pkl | Bin 0 -> 58 bytes .../__pycache__/submission.cpython-37.pyc | Bin 0 -> 3458 bytes .../exercise8-checkpoint.ipynb | 1433 +++++ .../__pycache__/utils.cpython-37.pyc | Bin 0 -> 9060 bytes .../Week 8/Exercise8/exercise8.ipynb | 492 +- .../Week 8/Exercise8/token.pkl | Bin 0 -> 58 bytes .../__pycache__/submission.cpython-37.pyc | Bin 0 -> 3458 bytes 14 files changed, 7893 insertions(+), 112 deletions(-) create mode 100644 Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/Exercise6/token.pkl create mode 100644 Phase 3 - 2020 (Summer)/Week 6(May 3 -May 9)/__pycache__/submission.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/.ipynb_checkpoints/exercise7-checkpoint.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/Exercise7/token.pkl create mode 100644 Phase 3 - 2020 (Summer)/Week 7(May 10-May 16)/__pycache__/submission.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 8/Exercise8/.ipynb_checkpoints/exercise8-checkpoint.ipynb create mode 100644 Phase 3 - 2020 (Summer)/Week 8/Exercise8/__pycache__/utils.cpython-37.pyc create mode 100644 Phase 3 - 2020 (Summer)/Week 8/Exercise8/token.pkl create mode 100644 Phase 3 - 2020 (Summer)/Week 8/__pycache__/submission.cpython-37.pyc 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 0000000000000000000000000000000000000000..9ced8b9cbd073e1bdb99fb35eb43475d3f3f86b3 GIT binary patch literal 19897 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 ZO5ZUaExuTsE}kg5#q#)fjPDp9{9oUAb3p(A literal 0 HcmV?d00001 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 148c1897e..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": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxU5fX48c9JDCAKCJICBYEaaXEDWYzw6/JFxZYg1drSqoDgglRBQUC/tS6o1LUChs36VbSEIhaL1IWSugDaWi0YVAIUhcSqFRcoKIuUSuD8/ngmEkOWSTJzn3tnzvv1mpfDzCVzvJozz33uec4jqooxxpjoy/AdgDHGmMSwhG6MMSnCEroxxqQIS+jGGJMiLKEbY0yKOMzXB7du3Vo7d+7s6+ONMSaSVq9e/W9Vza7qPW8JvXPnzhQVFfn6eGOMiSQRea+692zKxRhjUoQldGOMSRGW0I0xJkVYQjfGmBRhCd0YY1KEJXRjjEkRltCNMSZFRC6hf/IJTJwIW7f6jsQYY8Ilcgl9xQqYPh1ycuBXv4Ldu31HZIwx4RC5hH7BBbBuHZx1FkyaBMcdB/ffD/v2+Y7MGGP8ilxCB+jaFZ54Al59Fb71LRgzBk44ARYuhAMHfEdnjDF+RDKhl+vTB158Ef70Jzj8cDd6P+00WLbMd2TGGBO8SCd0ABEYOBDeeAMKCmDLFujfH37wA/eaMVG3YsUKjj+5O5s2barxNWMin9DLZWbC8OHw9tswdSoUFUHPnjBkCLzzju/oTFhELTmuWLGCH573EzZnfI0Lho3gwIEDVb5mDKRQQi/XpAlMmOCS+A03wJNPujn3sWPd6N2kr6glx/LYjhx4HS1/cDXvbN3NJZdeeshr9+VP9x2qCYmUS+jlWrSAO+6AkhK4+GJXCZOTA5MnW6ljOopichw99hoyOvWm8TEnIRmZNO1/FU8te4UjB15Hk47dkIxMMo/vz9QAYo7alU26ElX18sG9e/fWIDe4eOstuPFGWLwYvvY1V/J4+eXQqFFgIRiPjj+5O5sz2tBywNWIZLBv+2Y+L5xCk+9eQpOO3QDYvXYZjdYu5sP33/UbbMymTZs4f+hw3t22h8PPHENWq/ZfeX/ve8XsLryXJU8upl+/fkmLo/zLMKNTL7o0+ZzXXn2Zl1566ZDXMjJSdnwYKiKyWlV7V/Ve2vwXqFjq2LUrXHWVlTqmk6cXL+K4xrvYtegm9m3fTFar9hw19L4vk/ne94rZ+7e5LJg312ucFXXp0oXXXn2ZH363B58XTjnk/T3LZnP/jPxAknmUrmzSWdok9HIVSx2bNnWljrm5VuqY6sKQHOvjL3/5C088+TRNvnvJIe817j6Q6bMfSOq8f5imfUzt0i6hw1dLHefNc31h+veH738fXn/dd3QmWXwnx7qqODouv5KoqGmPQUkfHUfxyiadpWVCL5eZCRdd5Eodp01zybxXL7jwQigt9R2dSaQwJMe6qjg6Bpc8tz/ycz5f/RR6YL8bHZ+Q3NFxVK9s0lXcCV1EMkXkDRFZUsV7F4vIVhF5M/YYmdgwk6tJExg/3iXxG2+Ep55y8+xXX22ljqkiDMmxriqOjnevXcbuwnuZNeVOOu5cx64nbmb3umXsfXkujxb8NqlxRO3KJp3VZYQ+DthQw/sLVfWU2GNOA+PyokULuP12V+p42WXwm9+4UsfbboNdu3xHZxoiLMmxLspHxzeOuZhGaxez5MnFDB8+nFWv/NW9VryYZ/74BKeffnrSYojilU06i6tsUUQ6AAXAHcAEVR1U6f2Lgd6qelW8Hxx02WJ9vP023HQTLFpkpY6pYP/+/eRPn8HU/OksmDeXfv36feW1Rwt+m9TkGEWVyz33vlfMnmWzadx9IE17DEIyMtm9bhmNisNT7pnqaipbRFVrfQCLgF5AP2BJFe9fDHwEFMeOPaaanzMKKAKKOnbsqFHx97+r9uunCqrHHqv62GOq+/f7jsqY5Nu4caP2OLWPtjy2mx49cLwe0aKlFhQUaM/cvu61s91ry5cv9x1q2gCKtLpcXd0bejAJDwLujz2vLqEfDTSOPb8CWF7bz+3Vq1cw//YJcuCA6tKlqt26ubPWo4fqs8/6jsqY5CsrK9MpU6dpu2M66YoVKw55zZJ5sGpK6LVOuYjIXcBFQBnQBGgOLFbVYdUcnwlsV9UWNf3cKEy5VOXAAViwwE3FvPcenHkm3HOPq44xxphka9BKUVX9pap2UNXOwAW40fdXkrmItKvwx3Oo+eZppGVkwLBhbn49Px/efBN693YLlEpKfEdnjEln9a5DF5HJInJO7I9jRWS9iKwBxuLm1FNa48YwbpwrdbzpJnjmGTj+eNdS4JNPfEdnfLAGVsa3tGnOlWwffeQ2rX7wQVfXPnEiXHstNGvmOzITBGtgZYJizbkC0K6da9G7YYNrKzB5sqthnzkTvvjCd3QmmayBlQkLS+gJ1qULPP44rFoFJ53kNtY4/nh47DHr6piqrIGVCQtL6Ely6qmug+Of/+ymXYYMcTdPn3vOd2Qm0ayBlQkLS+hJJOI2q379dZg/Hz791P25f3+356lJDdbAKj520zj5LKEHICMDhg51uyZNnw5r1rgR/Pnng/1/nBqsgVXNorafa1RZQg9Q48ZuTr20FG6+2W2yccIJMGYMfPyx7+hMfVkDq5rZTePgWNmiRx9/fLDUsXFjV+o4cSI0b+47MlMX1sCqZlHczzXMrGwxpNq2hdmz4R//gLPPPljqOGMG/Pe/vqMz8Ypia94g2U3j4FhCD4EuXdxm1a+9Bt26uRWoxx/vesbYtGL4haFveZjZTePg2JRLyKjC88/DL37h+sSccgrcfbfb71TEd3TG1E9N9xk+X/0UHXeus5W0cbIplwgRccl79Wp49FHYsQMGDHBdHV97zXd0xtRdutw0DkNZpiX0kMrIcIuR3nrLzamvWwe5ufCzn1mpo4mWKO7nWldhKcu0hB5yjRq5zapLStwWeEuXuvn1K690DcGMCbtUv2kcprJMm0OPmE8+cdUwDz7okv2ECXDddVbqaMItlfdzDboss6Y59Mgk9BUrVjB67DU8vXgRXbp0qfa1dFFS4vqwL1wIrVu751dc4erZjTHB2bRpE+cPHc672/Zw+JljyGrV/ivv732vmN2F97LkycUJqeSJ/E3RsMxPhclxx8Hvf+96wnTvDtdcA127up4xaXYqjPEqTGWZoU/oYZqfCqNeveCFF1wXx5Yt4aKLoGdP1+XR08WXMWknLL18Qp/Qrdd0fM46y43WFyyAnTshLw/OOMP1ZTfGJE+YyjJDn9Bt2XD8MjLgwgsPljquXw+nnQY//Sls3Og7Oj/CUBscFnYukiNUZZmq6uXRq1cvjVdZWZkOHzFCW3Toop1+seQrj2bZ7bWgoCDun5VOdu5UveUW1SOPVM3MVL3iCtUPP/QdVXCWL1+uR7Roqc269deeuX11//79Vb6WDuxcJM/GjRu1x6l9tOWx3fTogeP1iBYttaCgQHvm9nWvne1eW758eUI+DyjSavJq6EfoEJ75qahp1gxuvdVVxFx5JcyZ426m3nSTW4Gayuzey0F2LpIrTL18Ql+2WNv8lB7Yz85FN3HTVZcwccL4ZISaMkpLXTL//e/h6KPhxhth9OjULHW0lq0H2blILZEuWwzV/FTE5eS4zaqLilwlzIQJ8K1vwe9+B/v3+44usezey0F2LtJH3AldRDJF5A0RWVLFe41FZKGIlIjIShHpnKgAU33ZsA+9erkyx+eecyP14cNdgl+6NHVKHcNUG+ybnYv0UZcR+jhgQzXvXQZ8qqrHAfcB9zQ0sHJhmp9KNWed5To4PvYYfP6522QjlUod7d7LQXYu0kNcCV1EOgBnA3OqOeRcoCD2fBFwpkjiundnZmYyccJ4Pnz/3S9HERVfs2RefxkZcMEFbtekmTPdP087DQYPhrff9h1d/YWpNtg3OxfpI94Rej7wv0B1X+HtgX8BqGoZsAM4uvJBIjJKRIpEpGjr1q31CNckS6NGcNVVriLm1lvh2WfhxBNdf5godnW0ey8H2blIH7UmdBEZBGxR1dU1HVbFa4fMxqrqg6raW1V7Z2dn1yFME5RmzeCWW1xFzOjR8Mgj7mbqjTdGq9TR7r0cFPVzYQui6qC6AvXyB3AX8AHwLvAxsAeYX+mYZ4G+seeHAf8mVhJZ3aMuC4uMP6WlqhdeqAqqrVqpTpumunev76jiU1ZWplOmTtN2x3TSFStWHPJaohZ6REFUz4UtiDoUNSwsqtPqTqAfsKSK18cAD8SeXwA8XtvPsoQeLatXq37/++7/mE6dVAsKVMvKfEdlUll54m5z4Z3a8bqn9KhvnKzDR4w45LUpU6fV++d3Pambbty4scbXwqamhF7vOnQRmSwi58T++DBwtIiUABOA6+v7c0049ezp5tWff971Xx8xAnr0gD/9KXVKHRPBpgcSJ5mN+VK1JXedErqqvqiqg2LPJ6nq07Hne1X1p6p6nKrmquo7yQjW+Ne/vytrXLgQ9uyBQYOgXz/4+999R+ZfqiYJX5K1ICqVWyGEfqWoCZ+MDLdZ9YYNMHu2K2/s2xd+/GPX6TEdpXKS8CVZC6JSuSW3JXRTb1lZrhKmpMTtc/r883DSSTBqFGze7Du6YKVykvApGQuiUrkVgiV002BHHgk33+xKHceMgblzoUsXuOEG+Owz39EFI5WThC/JWhCVyq0QLKGbhPna12D6dDcF8+Mfw113uRr2qVNh717f0SVXKicJX5K5ICpVWyFYQjcJ941vuM2qX38deveGa6+Fb34TCgpSr6tjRamaJHxJ1oKoVG6FYAndJE2PHq7UcdkyaNMGLr4YTjklNUsdUzlJ+JKsxnyp3Aoh9BtcmNSgCn/4g2shUFIC3/0u3HOPq45JBZU3kdj7XjF7ls2mcfeBNO0xCMnIZPe6ZTQqtk0kfNu0aRPnDx3Ou9v2kNH1TPb+bS73z8hn+uwH+Oe/Pyfj+DPZ+/Lc0HZxrWmDi0jsKWpSxxdfqN5/v2qbNm7V6XnnqW7Y4Duqhgt6X0nTMFFthaCawKX/iXxYQk9vu3ap/upXqs2aqWZkqI4cqfrBB76japgoJwkTHTUldJtyMV5t3Qp33AH33w+ZmXDNNfCLX8BRR/mOzJhwivSeoia1ZWdDfr4rdRw82M2rH3ssTJmS+qWOxiSaJXQTCt/4htus+vXX3Y5J113nSh1/+9vULnU0JpEsoZtQOeUUKCyE5cuhbVu49FLo3h2eeSb1Sh2NSTRL6CaUTj8dVq50pY779sE558D3vgevvOI7MmPCyxK6CS0RN6++bh088ICrX//2t+FHP3KbWRtjvsoSugm9rCz4+c9dQr/9djcdc/LJMHIkfPCB7+iMCQ9L6CYyjjjCrTR95x0YO9bdRO3SxZU5fvqp7+iM8c8Suomc1q3hvvtcqeNPfwr33utKHe+9F/7zH9/RpQ7bTi96LKGbyOrcGebNgzffdD1h/vd/rdQxUWw7vWiyhG4ir1s3WLoUVqyAr3/dlTp26wZPP22ljvVh2+lFlyV0E5fS0lLGjRtNdnZzMjMzyM5uzrhxoyktLfUd2pfKN6tetAjKyuDcc11Xx7/9zXdkyZXoqRHbTi+6LKGbWhUWFpKb241t2+aQn7+L555T8vN3sW3bHHJzu1FYWOg7xC+JwE9+crDU8Z134Dvfccl9/Xrf0SVeMqZGbDu96Ko1oYtIExFZJSJrRGS9iNxWxTEXi8hWEXkz9hiZnHBN0EpLSxk2bDCTJ+9h5Mh9tG/vmmi1bw8jR+5j8uQ9DBs2OFQjdThY6rhpk2v+9eKLbhrmssvgX//yHV1iJGtqxLbTi654Ruj/Bc5Q1e7AKcAAEelTxXELVfWU2GNOQqM03syYMZW8vH2ceGLV7594IuTl7WPmzPuCDSxORxzhNqsuLYVx49zWeF26uBuo27f7jq5hkjk1YtvpRVOtCT3Wgnd37I9ZsYfdakoTCxbMJy9vX43H5OXtY8GC3wUUUf20bg3TpsHGjXD++a6bY04O/PrX0S11TNbUiG2nF11xzaGLSKaIvAlsAZ5X1ZVVHPYTESkWkUUickw1P2eUiBSJSNHWrVsbELYJyvbtu2nbtuZj2rRxx0VBp05us+o334T/9//coqQuXeDhh92N1ChJ1tRIGPfcjEJNfBhijCuhq+p+VT0F6ADkishJlQ55Buisqt2AF4CCan7Og6raW1V7Z2dnNyRuE5BWrY7k449rPuaTT9xxUdKtm9us+sUXoUMH10agWzd46qlolTomY2qk4sh/99pl7C68l1lT7qTjznXseuJmdq9bxt6X5/JowW8T9a9RoyjUxIclxjpVuajqZ8CLwIBKr29T1f/G/vgQ0Csh0ZkaBVFKOGTIMAoLs2o8prAwiyFDLkrYZwbpf/4HXn0VnngCDhxwjb++8x14+WXfkdUuWVMj5SP/G8dcTKO1i1ny5GKGDx/Oqlf+6l4rXhzYBspRqIkPU4y1bkEnItnAPlX9TEQOB54D7lHVJRWOaaeqH8Wenwf8QlWrunH6JduCrmEKCwsZNmwweXn7yMvbR9u28PHHLrkWFmYxf/4i8vLyGvw5paWl5OZ2Y/LkPVXeGF2/HiZNasqqVcXk5OQ0+PN8Kitzq0xvuQU++gh++EO46y6qvSHs2/End2dzRhtaDrgakQz2vlfMnmWzadx9IE17DEIyMtm9bhmNihfz4fvv+g63Xir/O+7bvpnPC6fQ5LuXfPkltnvtMhqt9ffvGHSMDd2Crh2wQkSKgddwc+hLRGSyiJwTO2ZsrKRxDTAWuLjBUZtqBVlKmJOTw/z5i5g0qSlz5mSxebNLfJs3w5w5WUya1JT58xfVOZmHcaHSYYfB5Ze7ro533gl/+Yubhrn00nCWOoZtaiQZolATH6oYq9s9OtmPXr16NXz76zQ1duyVOnRolq5YQbWPoUOzdNy4MQn7zJKSEh03boxmZzfXzMwMzc5uruPGjdGSkpI6/6ylS5dqq1ZNdejQLJ0/H33hBXT+fBdzq1ZNdenSpQmLuyH+/W/ViRNVGzd2j2uvVd22zXdUX1VWVqZTpk7Tdsd00hUrVhzy2vLly/0GmABlZWU6fMQIbdGhi3b6xZKvPJplt9eCggLfIQYaI1Ck1eTVWqdcksWmXOovO7s5+fm7aN+++mM2b4bx45uzZcuO4AKLQxSncN57z03DzJsHLVrA9de79r2HH+47svRQ072Cz1c/Rced63jt1ZfJyPC38D3IGBs65WJCJsqlhFFcqNSpE8ydC2vWuB2Trr/elTrOmRO9UsdECqJMLwo18WGK0RJ6BEW5lDDKC5VOPhmWLIGXXoJjjnHz7SefDE8+Ga1Sx0QIqkwvjDXxYY7REnoERbmUMMpXF+XKN6tevNgl8vPOcyP3v/7Vd2TBCLJMLwo3fsMUoyX0CBo7diKFhVnVdg9cv94l9KuvHh9sYHGI8tVFRSIuka9bBw895ObZv/c9V+q4bp3v6JIryPa6YaqJj0KMdlM0oirXobdp4xJhouvQE23cuNFs2zaHkSOrn3aZMyeL1q1HkZ8/K8DIGmbPHpg+He65B3buhOHDYfJk6NjRd2SJt2nTJs4fOpx3t+3h8DPHkNXqq3fn975XzO7Ce1ny5GLryJgEdlM0BeXl5bFqVTGtW49i/PjmDBiQwfjxzWndehSrVhWHMplDtK8uatK0Kfzyl66r48SJ8Pvfu+3wrr0Wtm3zHV1iWXvd8LIRuglcVK8u6uL9912pY0EBNG9+sNSxaVPfkSVGFEoJU5WN0E2ohOXqIpmrVTt2dG0EiovdNni//KUrdXzooeiXOoapTM98lSV0c4ggluXn5OSQnz+LLVt2UFa2ny1bdpCfPyuwxURBbat30knwzDOujUCnTjBqlHvtj3+MbqljmMr0oiSQ9rrVLSFN9sOW/odTVJblN0RJSYm2atVUZ82qum3CrFloq1ZN69XWoCYHDqj+8Y+qXbuqgmqfPqovvZTQjwjExo0btcepfbTlsd306IHj9YgWLbWgoEB75vZ1r53tXkuFtgOJsnz5cj2iRUtt1q2/9sztq/v376/ytXhQw9J/G6GbL0V1/9C68rVaVcS151271q0yff9917530CD3WlSEqUwvCoKs27ebouZLqVpSWFlYeuHs2QMzZ8Ldd8OOHXDRRa7UsVOnpH2k8SDR7XXtpqiJS5SX5ddFWFarNm3qtsArLXXljQsXulLHiRNTr9QxDHxtERdke11L6OZLYUl0yRa21aqtWrnNqjdtgmHDID8fjj3W9WT//PNAQkh5PreIC7Ju3xK6+VLYEl2yhLUXzjHHuM2qi4uhXz+48UZX6vh//xf9UkefwrBFXDL2fq2KJXTzpaASne/disK+WvXEE91m1S+/7EbqV1zhXitvBhZmvqY1ahJk75mqBFm3bwndfCmIRBdU/XdNkrWtXqKVd3B86im3Pd5PfgJ9+7r2vWHkc1qjJr63iAu0br+6esZkP6wOPZwq16E//3zi6tB91X/XFE+ittVLtn37VB9+WLVDB1fDnpenumaN76gOKq+pbnPhndrxuqf0qG+crMNHjDjktSlTp3mJz+c2domu28e2oDN1UVpaysyZ97Fgwe/Yvn03rVodyZAhF3H11eMbNGpNl7LIZPrPf1yp4113uVLHYcNcqWPnzn7jSnRpXqL57j2zf/9+8qfPYGr+dBbMm0u/fv2+8tqjBb+Nu26/prJFS+gRUVpayowZU1mwYH6FJDuMsWMnep8aiFdY6r9Twaefuvr1GTPgwAEYMwZuuAFat/YTT5hb6tY2h60H9rNz0U3cdNUlTJwQ/i6fVoceEdXdLHzkkUe8zzsnQrqURQahZUvXe7281HH6dMjJgTvu8FPqGOaWuunUe8YSekhUd7Pw3XcfYsyYy1JiOX66lEUGqUMHV+q4di2cfjrcdBMcd5wrddxX8xqxhAuqNK+uwrRFXLLVmtBFpImIrBKRNSKyXkRuq+KYxiKyUERKRGSliHRORrCpqqYeKo0alXHeeQTedyQZwlr/nQpOOMFtVv3yy26kfsUVrqvjE08EU+oY5pa66dR7Jp4R+n+BM1S1O3AKMEBE+lQ65jLgU1U9DrgPuCexYaa2mppFLVsGZ59d89+PynL8sNd/J5qPevvyUsenn3aljoMHQ58+sGJF0j4SCP+0RmZmJhMnjOfD99/9ctqn4mupkMwhjoQeq5Qpn9TMij0qf+efCxTEni8CzhQRSViUKa6mHio7dpCUeWcfySYq9d+J4LPeXsRtVl1cDI88Ah9+CGecAXl5sGZNcj4znaY1wiyuOXQRyRSRN4EtwPOqurLSIe2BfwGoahmwAzi6ip8zSkSKRKRo69atDYs8hdR0s7BFCxI+7+wz2QS5W5GvFalhaUOcmQmXXAIbN8K998LKldCjh+vq+O67if2sdJrWCLM6lS2KyFHAH4GrVXVdhdfXAz9Q1Q9ify4FclW12p5xVrZ4UE3lfLNnQ6NGcPnl1f/9utRul5aWkpvbjcmT91Q5xbN+PUya1JRVq4ojPVKuvG9p27buizGIfUvDWm//6aeuMmb6dFfqOHq06xfjq9TR1E/CyhZV9TPgRWBApbc+AI6JfdhhQAtge50jTVM13Sz80Y/gT38iYfPOvjZ3CJLvEXKi2xAn6kqjZUtXu75pkxulz5jhesXcfrt1dUwV8VS5ZMdG5ojI4UB/4K1Khz0NjIg9HwwsV18rliKoppuF7dvDkCGuX/ZDDx3W4HnndOh57vtLK5H19smYHuvQwe2YtG4dnHkm3HyzK3V84IHgSx1NYsUzQm8HrBCRYuA13Bz6EhGZLCLnxI55GDhaREqACcD1yQk3NdV2s3DhwqbMnv0w2dk/b/C8czos7vH9pZWoevtkX2kcf7zbrPpvf3MJ/cor3ZfdH/4Q/q6OdRHGDpDJYkv/QyRZPVQqSofl95mZGTz3nJKZWf0xZWUwYEAGZWX7E/75iZpDD3IuXtVN7V1/vZvGO/VUN98e9XuY5fXxGZ160aXJ57z26su89NJLh7yWrB4uyWBL/yMiJyeH/PxZbNmyg7Ky/WzZsoP8/FkJvTmZDot7fK9ITVS9fZBXGiJus+o1a2DuXHcDOdmljskWho0tgmYJPc2kw+Ie319aiaq39zE9lpkJI0YcWuo4bBj8858J+5hA+N7YwgdL6GkmHRb3xPOltWjRPubNm5u0uvRE1Nv7vNJo0sTdiH/nHbeR9eLF8K1vwTXXQFSWkPje2MIHm0NPU0HM1/tUuQ69TRuX/J55BgoL3Vxxx47B1KXXV5jq2Tdvhttuc43AjjgCrrsOJkxwz8Ns//79XHrZZTy17BWOGvrVqqbtj/ycWVPuZPjw4Z6iqx/rh27SUvmX1vz5BWzfvpvmzeGss1xtf8WbwmFdTBXGRWAbNri+608+6aZ7brkFRo6ErJpnuLzxvbFFMthNUZOWym8yDx16EUOGZPHkk24jiMoVPmFdTBXG6bHyUsdXXoFvftOtNj3hBHj88fCVOoa5A2SyWEI3Kc93XXpDBNn7pi7KN6tessTNt59/PuTmwvLlXsKpUtg7QCaDJXST8oKsFklGQ7AgylnrQ8S1dn7zTSgogC1b3MrTH/wA3njDa2hAenaAtIRuAuWjA2JQ1SI+u1j6lJkJw4fD22/D1KlQVAQ9e8LQoa5Kxpd07ABpN0UjKoqbRvvqgBhEtUgYb2D68tln8OtfQ36+m/O/8kq3NV52tu/IUoPdFE0xURwJ+uyAGMRiKt8NwcLkqKPgzjuhpMT1Y58923V1nDwZdke3RVAkWEKPGN+tYevLZ8ILolqkITdefW3EkWxf/7rbrHrdOvj+912JY06OS/BffOE7utRkCT1iojoS9F1pkuxqkfreePV5tRXUF0nXrm6z6ldfdWWPV13lSh0XLnQbbZjEsTn0iIlqt0TfHRCTrT7/XXzOu/u6n6F6cKXu2rXQq5fr6njmmQn/qJRlc+gpJKr9zH13QEy2+jQE83W15XPaTgQGDnRljQUFri9M//5uSub11xP+cWnHErpH9bnkjWpi9N0BMdnqc+PV1zRUGKbtKpY6TpvmknmvXm53Ln+JZ8oAAA7fSURBVJ+ljlFnCd2T+s6dRjUxpnrb3vrcePV1teX7fkZFTZrA+PFQWnqwR0zXrjB2rFuoZOrGEroHDbnkjWpiDGNfkkSr641XX1dbYZy2a9EC7rjDlTpeeincf7+riLntNti1K7AwIs8SugcNueSNcmIMa1+SRKrLMn1fV1thnrb7+tfdZtXr17sWArfe6vY7nTXLSh3jYVUuHiSiUiXV+5mnA19VLmHqs16blSvdBhsvveQWJ91xB/zsZxChbrcJZ/3QQybVS/hM/KrbiCOZ5YNRa1OgCn/+syt1LC52fWLuvtv1tk9HVrYYMmG+5DXB8jENFbVpOxG3WfUbb8C8ebBtmytz7N8fVq/2HV241DpCF5FjgHlAW+AA8KCqTq90TD/gKaB8G9nFqjq5pp+bziP0KF3ymtQV1Wm7//4XfvMbuP12l9zPP989P+4435EFo0FTLiLSDminqq+LSDNgNfAjVf1HhWP6Adeq6qB4g0rnhB61S15jwmjHDpgyxdWxf/EF/PzncPPNrkInlTVoykVVP1LV12PPdwEbgBpu55naRO2S15gwatECfvUrV+o4cqSrjsnJcU3A0rXUsU5z6CLSGegBrKzi7b4iskZECkWkyoI8ERklIkUiUrR169Y6B5tK0qGEz5ggtGvnpmD+8Q/XVmDyZJfYZ85Mw1JHVY3rARyJm275cRXvNQeOjD0fCGyq7ef16tVLjalOSUmJjh17pbZu3UwzMkRbt26mY8deqSUlJb5DMyG3cqVqv36qoHrssaoLFqju3+87qsQBirSavBrXCF1EsoAngEdVdXEVXwo7VXV37PlSIEtEWjf868akoyhu4GHCo3yz6sJCaNbM9Yfp3Ruef953ZMlXa0IXEQEeBjao6rRqjmkbOw4RyY393G2JDNSkh6hu4JFoqbrpRVBEYMAA1/Rr/nz49NODpY6pXIsRzwj928BFwBki8mbsMVBErhCRK2LHDAbWicgaYAZwQezSwJg6CUMnQN/sCiVxMjLcZtVvveX2OF2zBk491ZU6lpT4ji7xbKWoCZUgN/AI40bbVtKaXDt3ulLHqVPdDdNRo2DSpGiVOtpKUROXMFzmB9UJMKyjYLtCSa7mzV0VTGmpS+YPPniw1HHnTt/RNZwldAOEJ8EF0RYhzPP0YepVnsratnWbVVcudZwxw61EjSpL6CZUCS6IlrJhHgWHsVd5TcJwVdcQXbrA44/DqlXQrRuMG+c2sn700WhuYG0J3YQqwQWxgUeYR8FRatwWlqu6RDj1VHjhBdfVsUULGDbMbYn37LOu22NUWEI3oUpwQbRFCPMoOCpbDIbpqi5RRNymGqtXuxH6jh2u9LF/f3jtNd/RxccSugldgkt2W4Qwj4KjssVgmK7qEi0jwy1G2rDBzakXF7vFSj/7GWza5Du6mllCN6FMcHXZyq2uwjwKjkrjtjBd1SVL48Zw9dWuImbSJFi6FE44AUaPptbfF18soZtQJ7hkCPsoOAqN28J2VZdMzZu7zapLS12L3ocechUxkyaFr9TREroJfYJLtESOgpNV5ZHMK5RECONVXbK1aeM2q96wAQYNcq17c3Jg+vTwlDpaQjeRucxPpESMglOpyqOu0u2qrqLjjoOFC11PmO7d4ZproGvXcJQ62tJ/86WobknmQ7ov0U/3f/+KnnvObWD9xhsuwd99t6uWce0KE69BW9AliyV0E2W2L6y7Qhk2bDB5efvIy9tHmzZumqWwMIvCwizmz18Uivn+IBw44EbtN94I//wnnH66S+y5uYn/LOvlYkyCpUOVR22icPM2KBkZcOGFrqvjzJmwbh2cdhr89KewcWNwcdgI3Zh6yMzM4LnnlMzM6o8pK4MBAzIoK9sfXGAmFHbtch0dp0yBvXvh8stdVUy7dg3/2TZCNybB0rHKw8SvWTO49VZX6njllTBnjruZevPNyS11tIRuTD2kc5WHiV+bNm4K5q234Jxz4Pbb4dhjoaAgOZ9nCd2Yeki32n3TMDk58NhjrtSxZ8/kNfyyhG5SThAtXdOxdt80XK9ersxxxIjk/HxL6CalBLnYx6o8TH0lrUbdqlxMsgS9Z2cqLHYJ4z6nJlysysUEzsey+Ki3dE3nVgImMWyEbhLO10g5O7s5+fm7aN+++mM2b4bx45uzZcuOhH1uIqTC1YUJho3QTaB8jZSj3NI16lcXJhxqTegicoyIrBCRDSKyXkTGVXGMiMgMESkRkWIR6ZmccE0U+FoWH+XFPkGds6hv6mxqFs8IvQyYqKrHA32AMSJyQqVj8oAuscco4DcJjdJEiq+RcpQX+wRxzmyOPvXVmtBV9SNVfT32fBewAag8S3kuME+dvwNHiUgCuhaYKPI1Uo7yYp9kn7NU3NTZHKpOc+gi0hnoAays9FZ74F8V/vwBhyZ9RGSUiBSJSNHWrVvrFqmJDF8j5Sgv9kn2ObM5+vQQd0IXkSOBJ4BrVLVye5mqyuQPKZ9R1QdVtbeq9s7Ozq5bpCYyfI6Uo7rYJ9nnzNr9poe4yhZFJAtYAjyrqtOqeP//gBdV9bHYn98G+qnqR9X9TCtbTG22+UHdJfOcWbvf1NGgskUREeBhYENVyTzmaWB4rNqlD7CjpmRuUl9UR8o+JfOcRbkCyMSv1hG6iHwH+CuwFijfAvUGoCOAqj4QS/qzgAHAHuASVa1x+G0jdGOCY1vmpY6aRuiH1faXVfVlqp4jr3iMAmPqF54xJtnGjp1Ibm4BfftWfWO0fI5+1arwVQCZ+NWa0I0x0VdeAVTbHH0YK4BM/GzpvzFpwu5rpD5rzmWMMRFizbmMMSYNWEI3xpgUYQndGGNShCV0Y4xJEZbQjTEmRVhCN8aYFGEJ3RhjUoQldGOMSRGW0I0xJkVYQjfGmBRhCd2YKpSWljJu3Giys5uTmZlBdnZzxo0bbXtumlCzhG5MJYWFheTmdmPbtjnk5+/iueeU/PxdbNs2h9zcbhQWFvoO0ZgqWftcYyooLS1l2LDBTJ685yt9w9u3h5Ej99G37z6GDRvMqlXF1mrWhI6N0I2pYMaMqeTlVb0JBMCJJ7rNlGfOvC/YwIyJgyV0YypYsGA+eXnVb9MGLqEvWPC7gCIyJn6W0I2pYPv23bRtW/Mxbdq444wJG0voxlTQqtWRfPxxzcd88ok7zpiwsYRuTAVDhgyjsDCrxmMKC7MYMuSigCIyJn6W0I2pYOzYiRQWZrF+fdXvr1/vEvrVV48PNjBj4lBrQheRR0Rki4isq+b9fiKyQ0TejD0mJT5MY4KRk5PD/PmLmDSpKXPmZLF5M5SVwebNMGdOFpMmNWX+/EVWsmhCKZ4R+lxgQC3H/FVVT4k9Jjc8LGP8ycvLY9WqYlq3HsX48c0ZMCCD8eOb07r1KFatKiYvL893iMZUSVS19oNEOgNLVPWkKt7rB1yrqoPq8sG9e/fWoqKiuvwVY4xJeyKyWlV7V/VeoubQ+4rIGhEpFJFqlmSAiIwSkSIRKdq6dWuCPtoYYwwkJqG/DnRS1e7ATODJ6g5U1QdVtbeq9s7Ozk7ARxtjjCnX4ISuqjtVdXfs+VIgS0RaNzgyY4wxddLg5lwi0hb4RFVVRHJxXxLbavt7q1ev/reIvFfLYa2Bfzc0xiQIa1xgsdVXWGMLa1xgsdVXQ2PrVN0btSZ0EXkM6Ae0FpEPgFuALABVfQAYDFwpImXAf4ALNI47rapa65yLiBRVN/nvU1jjAoutvsIaW1jjAoutvpIZW60JXVUvrOX9WcCshEVkjDGmXmylqDHGpIiwJ/QHfQdQjbDGBRZbfYU1trDGBRZbfSUttrgWFhljjAm/sI/QjTHGxMkSujHGpAjvCV1EBojI2yJSIiLXV/F+YxFZGHt/ZayvTFhiu1hEtlboNDkyoLhq64ApIjIjFnexiPQMIq44Y/PSnVNEjhGRFSKyQUTWi8i4Ko7xct7ijM3XeWsiIqtirT3Wi8htVRzj5Xc0zti8/I7GPjtTRN4QkSVVvJecc6aq3h5AJlAKHAs0AtYAJ1Q6ZjTwQOz5BcDCEMV2MTDLw3n7HtATWFfN+wOBQkCAPsDKEMXWD9foLehz1g7oGXveDNhYxX9PL+ctzth8nTcBjow9zwJWAn0qHePrdzSe2Lz8jsY+ewKwoKr/bsk6Z75H6LlAiaq+o6pfAL8Hzq10zLlAQez5IuBMEZGQxOaFqv4F2F7DIecC89T5O3CUiLQLSWxeqOpHqvp67PkuYAPQvtJhXs5bnLF5ETsX5RuoZsUelSspvPyOxhmbFyLSATgbmFPNIUk5Z74TenvgXxX+/AGH/o/85TGqWgbsAI4OSWwAP4ldni8SkWMCiCse8cbuS1zdOZMldnnbAzeiq8j7eashNvB03mJTB28CW4DnVbXa8xbw72g8sYGf39F84H+BA9W8n5Rz5juhV/WNVPkbNp5jkiGez30G6Kyq3YAXOPiN65uvcxaPuLtzJoOIHAk8AVyjqjsrv13FXwnsvNUSm7fzpqr7VfUUoAOQKyKV90Xwdt7iiC3w31ERGQRsUdXVNR1WxWsNPme+E/oHQMVvzA7Ah9UdIyKHAS0I5pK+1thUdZuq/jf2x4eAXgHEFY94zqsX6rE7p4hk4RLmo6q6uIpDvJ232mLzed4qxPAZ8CKH7mDm63e01tg8/Y5+GzhHRN7FTdWeISLzKx2TlHPmO6G/BnQRkW+ISCPczYGnKx3zNDAi9nwwsFxjdxJ8x1ZpfvUc3NxnGDwNDI9VbfQBdqjqR76DAteds3yuUOrQnTMBnyvAw8AGVZ1WzWFezls8sXk8b9kiclTs+eFAf+CtSod5+R2NJzYfv6Oq+ktV7aCqnXF5Y7mqDqt0WFLOWYPb5zaEqpaJyFXAs7iqkkdUdb2ITAaKVPVp3P/ovxOREtw32AUhim2siJwDlMViuziI2KT2DphLcRUbJcAe4JIg4ooztnp150yAbwMXAWtjc64ANwAdK8Tm67zFE5uv89YOKBCRTNyXyOOquiQMv6Nxxubld7QqQZwzW/pvjDEpwveUizHGmASxhG6MMSnCEroxxqQIS+jGGJMiLKEbY0yKsIRujDEpwhK6McakiP8P3MIDqz3TzfAAAAAASUVORK5CYII=\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": [ @@ -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": [ @@ -421,9 +519,9 @@ " predictions = utils.svmPredict(model, Xval)\n", " pred_error = np.mean(predictions != yval)\n", " \n", - " err_array[i, j] = pred_error\n", + " my_array[i, j] = pred_error\n", " \n", - " ind = np.unravel_index(np.argmin(err_array, axis = None), err_array.shape)\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", @@ -441,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", @@ -466,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()" @@ -570,7 +708,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -670,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", @@ -691,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", @@ -723,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()" @@ -753,7 +927,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -813,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", @@ -830,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", @@ -857,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()" 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 0000000000000000000000000000000000000000..7724349de9128429c8988bfbdcb126e60008a979 GIT binary patch literal 58 zcmZo*ju2yDU?@q<%T25-E;ceWuyjbzP0Y;EOU}m%yXm+b)8dmyfcY3r-vvon$R!JfDu(LeWm0js$+><@o zN8gnza)92Ks}N?b8SKoTOjE7XBEJ*sqJdCekL3s77OR2XWN_94AFWykccWDuKg54~nJhSaomu-Z68F@NEuq@Rj@7OnT8*ufY@#|?qg;@`GX;FGS8Jou zm-F3}jxm>h2cspRRrkY;=A~1MLw<`rfBO-A)v5V0 z$2x0am+p~Q+eck#A7gA`OQ*K?I;tvJ4gQKbhg67@fspoG!+R~i|G4Hj^}zz)$?g?a z=fDD7&54X*B}_&+fURu z)k(0S{iajQ%h|lFIvY1e?@xltnU|Bz55j(;RH1&8XdUk+)!N2;H#K(I__?8*fJ4=N z02l?^fKlk|j0=^7-u)zzPvY?&&2FANm1DTdI~fR92!JPRb+}5e_g=)=JT}r+-i8de zf{mN9adf-!G~PEyd`l2%{N!|T<+f{Obtm}0&xrv4tFPWTe@*`t4~G55nW;1{4fLD7 z@tA0)is`IuJ;v2$e$rUFRE?{W=kr9vZ=UG_u9X$B)J;bw6vB+>G!}Ln_S6bp#-ZEm z#-%PwWz$iKo@Zs_p`XDClg6g0R%y{>so_>>(U~ID1#G6)LBd{HlyMdr)fpFU$*MUG zaY!bY!RmKG7$0!Y>VRHFTeCdg=eE@c_0jr#onPY~D7<$4oY$I-PF>c)UR^Zfvi|~8 z!d;ILrJh;GT>Y`MiIe))4IO8K^kKeL~>@h1{DQY;%AsiBJVC@P02lVz8 zWQo`K&Yn;T5zrD8@jNu-6LQrfzda8Q;!5|BBBck;GhFv|iS$305_KWbRU=Uk-(s(4 z-HAY$5S*RKWt_|3ZiISL{p@r2jfs}Q1P}c7yB44rvy|Qo`68t19<1NdUOoZvM1deYi_51?C)JZQ zOPa2ZUnG%XZAyeqXO@olFkutU8Yj)+%*ulW6xoB|G%a3WTF$4lq0?fHPtI0^z$;P% z+?}HN8C29IyuOd7uYwRz2K+MbivYbX`oibFMPt=l=Ya9Le~c-2(LgLX;+aA0cQT^OPU*qmBf6Fz#ZFhfof*RDEgJ)=~EuA$5m=^C=ZP28NLD zob90<4$ku34yC(}PR1%J)sJy%I574paou~Q`p_dEy;I18W!y7Hf@_*AM+$5eMb}Vo zfiw>35$@bpB+8;Ozuh!KZPM5(Av27#LMKDpsN0+jJH;pgw0e)WI;U#V@F!@RoR|rl z+gxy8K;7v3qPloa#mfkD>U|_0wK1A8*Zw-`7YWK=K*PU-hMs$b=e8!`ib}kpXr&9l zpA*PraOfzC9?_0uJO)|5FLRq!-zir}CC1EjNh(xeXyo8?hg&TYt-a)+aVVT8=VjO##WN0#SiL_9Cr z4$SFRo58*5JVQmPgX@$jf?_fZJ{^~c6Tvbu1t%rlC@=t5KY%dbK@W*|lf=9TQnRlH z3*H`Mu!9=YAjc?VC>k-k(Qqoqt;w`(wM4pk)xEWw9gVt}dk*-O7q_ zoax)6(`606PbI3K>NMA7oR1TfqVpNTnaF32o6A_K_yDmjHTkqasp`hM9ds0Km;uH2 za7<&NNNvUAW= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c64d6bef92b133dd720e8076242f48e3606226cc GIT binary patch literal 7559 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 WXYOOuXDNQNad+C+eC}UwfB3(aYg{t` literal 0 HcmV?d00001 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": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAEICAYAAAB25L6yAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd3jT1frAPycpHVBoGS0gUCibqlCWLNmogIp7L1xc98KL8ycX53Xv695bQdygKEWQKciQDZW9WlahpaU0Pb8/TkrTNuObNGnS8n6epw/JmW9C++bkPe9QWmsEQRCEyMUWbgEEQRAE74iiFgRBiHBEUQuCIEQ4oqgFQRAiHFHUgiAIEY4oakEQhAhHFLUQcSilcpVSrcMtR2VQSm1USg0LtxxCzUAUtVAGVwWjlBqtlPojxPvNUEpd59qmtY7XWv8Tyn2rO0qpR5RSfyulipRS/wm3PEJoEUUthAylVFS4ZajueHkP1wPjgB+rUBwhTIiiFtyilOoEvA70cZoi9jvbY5RSzyilNiuldimlXldKxTn7Bimltiql7lFK7QTeU0rVV0r9oJTKVkrtcz5u7hz/GNAfeMW5xyvOdq2Uaut8nKCU+tA5f5NS6kGllM3ZN1op9YdTnn1KqQ1KqRFeXtNGpdTdSqllSqkcpdQXSqlY17XKjXeV432l1P+UUlOcss5WSjVRSr3g3Hu1UqpruS17KqVWOvvfK9nLud4ZSqklSqn9Sqk5SqnO5eS8Rym1DMhzp6y11h9oracAB638fwrVG1HUglu01quAG4C5TlNEorPrSaA9kA60BZoBD7lMbQI0AFoCYzC/Y+85n6cA+cArzj0eAGYBtzj3uMWNKC8DCUBrYCBwJXC1S38vYA3QCHgKeEcppby8tAuB4UAq0BkY7eOtKD/3Qedeh4G5wF/O5xOB58qNvww4DWiDec8eBFBKdQPeBf4FNATeAL5TSsW4zL0EOB1I1FoX+SGjUAMRRS1YxqkArwfu1Frv1VofBB4HLnYZVgyM11of1lrna633aK0naa0POcc/hlG4VvazAxcB92mtD2qtNwLPAle4DNuktX5La+0APgCaAo29LPuS1nq71nov8D3mA8cqk7XWi7TWBcBkoEBr/aFz7y+A8ifqV7TWW5x7PYZRvmDewze01vO11g6t9QcYxd+7nJxbtNb5fsgn1FDEhij4QxJQG1jkcmhVgN1lTLZTkZlOpWoDz2NOsfWdzXWVUnangvNGIyAa2OTStglzii9hZ8kDrfUhp1zxXtbc6fL4EHCcDxlc2eXyON/N8/L7bnF5vMllr5bAVUqpW136o8vJ4jpXOMaRE7XgjfKpFXdjFNLxWutE50+C1jrey5yxQAegl9a6HjDA2a48jC+/3xGMYishBdjmx2uwSh7mQwgApVSTIKzZwuVxCrDd+XgL8JjLe5iota6ttf7MZbyktRSOIopa8MYuoLlSKhpAa10MvAU8r5RKBlBKNVNKneZljboY5b5fKdUAGO9mD7c+084T95fAY0qpukqplsBdwMeVeE2eWAocr5RKd176/ScIa96slGrufN33Y8wjYN7DG5RSvZShjlLqdKVUXasLK6VqOeW0AVFKqVinqUiogYiiFrwxHVgB7FRK7Xa23YNxDZunlDoA/Io5MXviBSAOczqeB0wt1/8icL7TM+IlN/NvxZx2/wH+AD7FXMQFFa31WuBhzOtZ59yrsnwK/IKR/R/gUedeCzF26leAfZj3c7Sfa7+F+QC8BHjA+fgKrzOEaouSwgGCIAiRjZyoBUEQIhxR1IIgCBGOKGpBEIQIRxS1IAhChBOSgJdGjRrpVq1ahWJpQRCEGsmiRYt2a62T3PWFRFG3atWKhQsXhmJpQRCEGolSapOnPjF9CIIgRDiiqAVBECIcS4paKZWolJrozLm7SinVJ9SCCYIgCAarNuoXgala6/OdeR9q+5ogCIIgBAefilopVZLxbDSA1roQKAytWIIgCEIJVkwfrYFsTFmlxUqpt5VSdcoPUkqNUUotVEotzM7ODrqggiAIxypWFHUU0A14TWvdFZPJ7N7yg7TWb2qte2iteyQluXUFFARBEALAiqLeCmzVWs93Pp+IUdyCUGk2zoSfboVZT4DDV70XQThG8Wmj1lrvVEptUUp10FqvAYYCK0MvmlCT2bEE3ukNjsOlbdPvh47nwkWTwieXIEQiVr0+bgU+cXp8/EPZKtBBZ9nHMPVOyN8DygYt+sEFX0B8MIojCWEnNxveLF8G1snqr+GrC+CCr6pWJkGIZCwpaq31EqBHiGUB4JMRsN6lBoh2wOaZ8GxTuGYutOjteW5VsnstfDoS9mU6GxS0HARXTAV7dDgli3wmXey9f+VEYwaxS2EpQQAiLDJx9XdllXR53h9YdbJ4Y8cSeLWDi5IG0LApA/6bAA5xXvTKpt99j1n4v9DLIQjVhYhS1D/e6L2/uBDW/VQ1snjjg0Ge+4oK4Itzq0yUaoku9j0md7vvMYJwrBBRijpvl+8xKyaGXg5v5GbD4RzvY9ZPqRpZPJGzDd7qDRNsMEHBY3Hw2wPhlcmV2ETfY064JPRyCEJ1ISRpTgPFFuXbRatu46qRxRM7/vQ9xsqJMdhsmA6rJpvL1wXlankXFcAfjxvb761rql628jRJh40ZXgYoOFJQZeIIQsQTUYq649mw4gvvY/o/FNja63+GrOXQ5hRo3DmwNQAadQp8bijYMg8+GGjNLr53LcyYAIPGh14uTzzTxMI3Jw3v9IIBD8HgCVUiliBENBFl+hj1njkReqLtSIiO82/NWU/Aw3b4ZDhMuxte7wKP1TYKLhDqp4I9xvsYX/3BImcbvNvHv8vLOU8FV4Y5z8JjdYyJZYKCJxLgr3fcj5082pp5q4SZDxtTkyAc60SUoo6Og1vXQ3Tdin3tR8FlP/q33pxnTRBFeVNEUb5RcLvXBiZnUx9xmY7DkLszsLX94asL/J9z5FBw9592NxS5rFl4AL6/zkQblufvT/zfY/KlgcsXKSx4zXyATVDm3uCl9rB9UbilEqoTEaWowZxY7zsANyyFk++HU5+FB4vgkm/9X+vXe7z3f3F2YDLuXOJ7TFVc3m2b73uMO3Ytq/zeezONzdsTf74C+eUuXXWR//vsWOz/nEji0zNhyk3mAwwADfvWwVs9TGCXIFghomzUrjTuXDlbcvYqEyzjjd2rAlu72ILCOfqHGUoCvLR8vYvzgYKYRBjyMJx0i39rTL7S95gfrqt8hGGUn6auSGLjTFj3g+f+yVdC58urTh6h+hJxJ+pgUSYYJcg0aOt7THpIg+wN0fUquYCGw/tgyq3wSpp/U/f943tMdrkPwkbH+7cHQN+x/s+JFL671scAbcxzguCLGquoW/T3PUYF+H3inI+899ujod3IwNb2hyGPBm+tPavg57utj6/dyPeYOuVcKS/62j+Z7LHQ+w7/5kQSB7f6HvPPtNDLIVR/aqyijkuA2snex3S+IrC1j+sOvW730KlgTAguilZOgqeTS70rnmpkXl+Lvh7EsEGteP/2+PNl62NHvOh7zJlvln3eqD1cOx+iLBRyi2sIN62EhW8YW251TIFqxWwTf1zo5RCqP0prHfRFe/TooRcuXBj0df0lZxu8mOI+AKVOE7h7R+XW37EEvr4c9q4Dmx06nA2j3vHfhdAXv4yDuU+77+t5CxzXE365C/L3maChDmfCiZfDl+f4v9d4P34dXmrr2cTUrDdcN9fz3Kzl8M+vkHS88W3PzYbZTxqPmfTr4MuzIGdT2TltR/rv+RNOZkyA3//jfcy4/eZQIQhKqUVaa7fJ72qcol74Bvx2vwnztkdD2sVwYAtsmm4Utj0Guv/L2okw2OzbYPKA7FoKaLBFQ/frYeQrnufk58BTPkKux2ZBfLmiOk8nw6EAfJD9UdQAHw+HzJ9dGhQcfyGc/7n/e5fweDwcyXPf17wPXDsn8LWrmsdqG3dQd7QaDFdNr1p5hMjFm6KuUaaP/50AP94ABXuNx0dRPix7D7bMhHtz4L6D0O50WPsDvNEVMqvQPrh9EbzUGnYtAZzKsLgQ/nwVHo2r6MpWwteX+V77GzceGIEo6cTWFdtmPQHPNjOmlo+HQ/7esv2XTzXuk9fOh07nQfIJcHCH+bYRCLOf8qykAbbOrRof9WDx7z1Qr0XF9o7nipIWrFNjTtQ/3w3zvNygxyS4T6ZUpwncubVs7uPvrocl75f6/Sa0hPO/hOYnBS6ft5NVCf3GwbAnS5/vXmvSqfoioRXcsaFs2wTlt4hcv9DY38GYIp5vBsVHKo4bOAEGuYTyz3sBfr6z4rj6baDnTcYEUHjQ2M1TB8P5X0BcA/cyPN0YDmV5lzPtQlNIojqRv9fcM8QmGiUtubaF8hwTpo9HYwLPA510PNy03Dx+oVVF22gJl3wP7c/wvd7KScblLS/bmF/aDjeVS6xw0bfQcZR57M0E4ErjLnCDywn2gyE+kh6VxwYXTS7dF+CJeka5eiI6AcbugJ1/wXsn+7EXgIKbV5vLxfJYec0tB8LoGX7uKQgRzjFh+qhMsv7sFVCYC78/4llJA3xu4XLu/cHw1fmQu8OcyIsOWVfSAD+MMf/uWGJNSQOc9kLp45/v9lNJA2nnllXSWxd4V9IAhTnwRG346DT/9gJAm8g8dySm+p7eanAAewpCNabGKOrKMud5Yx/1hi4yWfg8Mf9l2DSjcnKUJC1aafGrfe0kaNar9PmCAC5Jo8tdVi7ww02vyOKHSXkKD1YMiAHfPuoQ3ux/ghAOaoyiTmxVufm/PwRHcn2P83YBOT1I+T22LoDZz1gbeyjbnGxfTTPfKqyEt5fn1CfLPrfV8n+NQFj9TcW2punGBu2JM98OnTyCEKnUGEV9XhVdLiV5yUfty1xghdgGJhezvwmMdq8ynhl+Yy+92JvzrDFlFOz1PiVYJLjxhgBzUTjqPYit72xQUL+t8Szp5iss24mjEL44Dx6OMherD9eCSZdVz8AZQagxl4lgLvEmXlgxwKXdGd6T41hGwXgviZAm2DjqehcodVPg4ObA5yu772RUrpz6AtRp6EyyFPxfBa/467NtlcJceLKhcX8sT63acM8+qRQveCcrK4vt27eTnp7utS2YeLtMjNjseYGQdh485IC/v4B/fjHJk/qOM65QVqLEfHGyl7Sp2xdBvRQ44OUyEuC+w/BiC88uaJVR0mAUkC83QFd+CVMuje7/Ct3ab/dxr6TB5OP+cBhcPTN0+wvVm6ysLAYPHkxxcTGLFy8mNjbWbVtVUmNMH66ceBGc9Q70v6/UX3XQeBPwEtfQ//WUHQY/AkOfqNj3813mq/VbPXwr6eMvgeho6Had/zJYpagQOltIQRpOmvWFM14P3frZy733b54Fb/WE9wbC5tmhk0OofpQo5JUrV7J69WrGjx/vtq2qqVGmDytM/z+YZTHrXON0E5zhzt8XTGDMYouXW+3Pgkucl2cPR/lnnvCXsVnmA+qVNDjkR+mrqqRuczjtOTg+gCo13ijMhSfcVAjyRlwjGLtNzCHHOq4KuQ2wAcBmIzU1lczMzDJtc+bMoVevXt6W85tK+1ErpTYqpf5WSi1RSkWmBrbIwP9YH7triYmuc4fDYU1JN+0ODx6GM9+Cn26BT0aFVkkD/M954RksJd28D6QMMImWohO917W0ysGt5j5hgoL/JsILqbDorcqvaw8gIVb+bhPoJBy7lFfSc4CxQHFxMZmZmaQ52+5wto0ePZqCgoIqk8+fP7nBWut0Txq/umC3G48Cq2z0kI/hj8etzc9eAW/2hGeTTV6P9d9b37s8yga1m/oel7/HnPaDxdZ5sHkmbJsHhftNSP3wl4K3/uEcyNlogn0er2NOxYFit0O0n+ldwQQoufPrFo4Ntm/fTnGx8RTYADwD3A90BNKAkhiyqc5/bTYbeXkBBhEEQI20UXujMN8ka7d68lr1tXuXrr3rrc0vKoCsINQobDnYJJZKaGZtvFX5LFHOOrZ/g0mrmh4CW/uRQyZ9amU46/3A5v3+SOX2Faov6enpLF68mHHjxoHNxtNAH+AejJK2A4OBlUBaWhoZGRk0bBjAhVeAWFXUGvhFKbVIKTXG3QCl1Bil1EKl1MLs7ABSt1UBm2eb4JDln4LDomfEotfh0Sj44vyy7W1OCb58nlBRMHq6OSlarepijwmtTMVFxmQwbo/Jf1K/LTTvC62GVn7tvF2meG6gpJ0HZ33gfwUfT54iwrFBbGwsY8eOJTXV5DGwASOBZKAOpSVKR4wYQXKyj6okQcbSZaJS6jit9XalVDIwDbhVa+3RwSlSLxMftrsvImCVjufCRZOCt54/nHRbaQ5tS5nxFCH3i1ZR8JCb7HoAr5wAe1YEvnav22H4C77H+WLzbFOtfdE7sGel97FX/Q6tBlR+T6F64mqnLjF32DFKOhaYD/SFyL1M1Fpvd/6bBUwGKpHwMzzMfa7ySnV1OTPIeZVIju8vC16CVzqax9FWKoJoSO7ie1hl8BQ9+UqnyilpMEUVgkFKP+hzF1zmI+CpVp0aoqS/+gqSk8FmMz+dOsGyINjeajjlLxNLbNIDgG4YJd2LCL5MVErVUUrVLXkMnAr48FSNPJZ/Fpx15rgkbnKXED6U7FkDC14zmeuskLU0tPK4M6/sWgZ7Vld+7b7/rvwartRPhdOed99ni4Kb1wR3v7AwejRceCFkZ4PW5mf1aujSBT7+ONzSRTTlLxOfpNQmvQpzkh5LZF8mNgb+UEotBRYAP2qtp/qYU+Vsnm0qkHww1ISSlydYNtuD20sf/3Zv5ddrORhjprBIRpASPwUDd4E7Ey1UpPFFdL2KpcWsMv3/4JnGxuXv/SFlq8H0vsPY1NuONDlV6jQx7pr/d8T6JW3Esnw5fPCB5/4rIzwKKsyUv0x8jtKLw7Fjx1Zoq+rLxGof8FKYC8+lwOF9Zdvt0XDD3yZYxVu1En9xtWO+1RO2+3iZ0fWg8ID7vp63wMiX4YkEz2PKo0rs4lWcl6M8MYnw790VK5U8El3593ngIzDoQf/m5GyDl1q5zx446GEY+H+VkyniSU+HpT6+Qj3yCDzo5xt7DDJ//nxGjx6NzWYjIyOD5ORkt23BpkYXDniueUUlDSZ72v86GZvyy62Do6TtMWXtmB3O8j2nRAHbagFR5gKuQTu4Zq5R0q5jLMkQHRmJ88f8FbpyUv3v83/O/zp6TvE64yFT9bxGk2nBTWZaFRYJrcb06tWLxYsXM3PmzKMK2V1bVVKtFfWG6e7rIJagi03hVysBFA07QJerIWWg5zHXziv7fMCDWDZbFB8BiqD3nXDrWmjR29q88nS9Bi7/xWSBCycJKe7bK5sX/IRL/f8A2DLP9//xpMsDl6laUNvCL0RSgPakY5DY2NgKpg13bVVFtVbUGRZyo6yc6HtMVCzcshrOfheunuHMhdwAUMbU0GqIyZ/R1E12w0v9TJ8692ljigmU0140iuyeA9D+TEo/KBQ07hr4uv6Q2NqzMh1QCRND56vhvE/8n/fnq77H7Pbhmlftuesu32NeDKD8jxARVOs0p5YCFKzYcsudiruONj9W2PantXGufDgEbvrbPM7ZDFFx1lOTPhoFLfqbfYtdvYO0qfaiaoEOgpnHEyoKxrh5zQ4HvJYGe9b6v2ajTuY+IVBTipVkSiqAquzVinvugQkTIN/DL1K3btCsut+YHrtU6xP1iRa+zjbv63tMSy/mDm84HIHluM5eYWymT9SDF1r6lz8aYMusckraycGtoVPSygZtToN795VWhHHl7ZP8U9KpQ03hgPEabl5ZOXu3lRqKLQcFvn61ISsLjjuuYvugQbBoUZWLIwSPan2i7nUr/Hyn92x0l/0Az6dAgZsLxxIC+boNMNdiXcMKaHjtxADnVgEnXg6nPmcuZK24rRXmws6//NsjkMRJnkhIgYRWJrGTJ845FtyI4+Nh2zbYuRM+/BDq1oVrrzVJ0IVqTbU+UQNc/QceL/TOfNsohNs2eFYMF37t/oRohZ0hDigJB3GN4NyPjB+zVd/iuR4CSbwxzEfFd3+5dT3EuzlMKhtcNjVwv+xqSZMmMG4c3HijKOkaQrU+UYPxnniwAL4bA2u+MZ4eLfrCeZ+WKuC4BFPdZdVkmPmIyWjXdiQMe7JyX7mP6w4rghTxGFRslGaQ8ZP4Jv7PKfIzkjahpediDIFit5vk/zuWwK//hsJD0Olc6Ds2uPsIQjio9gEv4cThMJd7kUZsQ3OSzC/nXVK/Hexb533uWR9Aup9BbDmbja3dComt4Za1ofPBFoTqSo0OeAkndmctxUijYE+pklZRMOI1eLAIblvrPdlRVKz/ShqMjbhOY+9jUk+FOzbB7ZmipAXBX0RRV5IBDxq/61p1XBqVsfUGSmwDGLsDjutZafHQRTDlRhP4A3DbP8YdsDy16sDtlaiAftt6o+jdcdJtcOXPnoNkBEHwjpg+QoTDAc8kufc2qRVvMrYd3u9mooJb10EDZ63GzGnw+dlQdKh0iC3G3J86Dvsn07mfwImXmsfrfjKpXwH63RO8QghznoU5zxiXw6Tj4dyPTeY6QRC84830IYo6xPwyzkTOFeWbE2e3643rG8B318LfnzjzOitTRPaiSe4v9HI2m4uypumlJ9PcnSYp1GdnWpMlrhGMi8ziO4JwzCOKuoYzwYblbHrjw5x1TxAE98hlYg2ntlV7eE0PoxaEGooo6hrASAtJiQAadQytHIIghAZR1DWA4y+Azhbc6s6vwhqPgiAED1HUNYRzPoAbloLdnYucMh4fjTtXuViCIASBCIyrEwKlcWd4MN94g0y9A/Kyoc2pcPI94ZZMsIIDB7vJpRZ2GhDErFVCtUcUdQ0kvomYOaoTDhy8zzy2UepYr4DupDCSCE6zKFQZoqgFIcw8z3QOUbYKhgYWsplcCrmQ7uERTIgYxEZdjXA4rNV/FKoPi9lcQUm7spqd5HvpF44N5ERdDfj7U/j+ejjiEkbeuCtcP89aGSohcsnAd1mcqazkHNwU7BSOGeREHeEseA2+vqyskgbYtRj+m2BO2UL15TBFPsfk4GetNqHGIYo6wpl6i+e+ogKTL0SovsTj+yvRcSRUgSRCJGNZUSul7EqpxUqpH0IpkFDK2h9MxRpvLI/ECjOCZc7At3P7UDpUgSRCJOPPifp2YFWoBBEqsu1P32OKQ1R1XKgaUmlEcxI99g+iPXak0sKxjiVFrZRqDpwOvB1acQRXUk72PUYuE6s/19CPfrTB7pI1K5YoziOdAbQLo2RCpGDV6+MFYBxQ19MApdQYYAxASoqU8ggGbU4BZQft5cKw6zVVJ48QOobSkaFI1izBPT5P1EqpM4AsrfUib+O01m9qrXtorXskJSUFTcBjnXM+9NwXXQ+Gv1x1sgiCEB6smD76AaOUUhuBz4EhSqmPQyqVcJQTL4XLpkJcQ5dGBalDYdxeKRQrCMcCflV4UUoNAu7WWp/hbZxUeBEEQfAPqfAiCIJQjfErhFxrPQOYERJJBEEQBLfIiVoQBCHCEUUtCIIQ4YiiFgRBiHBEUQuCIEQ4oqgFQRAiHFHUgiAIEY4oakEQqj8OB6xdC9u2hVuSkCCKWhCE6s3QoRAVBR06QPPmoBQMGBBuqYKK1EwUBKH60qIFbN1asX3WLKOw16+HNm2qXq4gIydqQRAim9xcOPtsSEiAxES44gooLISvvnKvpF3pUDOq44iiFgQhqDhwMI1VfMafzGANDipRgfmLL6BuXfj2WzhwAHJy4OOPISYGLrvMgjAOeOGFwPePEPzKnmcVyZ4nCFWHAwf5FBFPjKXxa9nJIrZgQzGIdjSuRPHcLezje5ZygAJiqUUj6vAPeyqMG0R7/6vVFBYahVxZOnaEVZFfRdBb9jyxUQtCgGROM1XgDzi/fSe2hLM+gFZVdI+1mp18wxIK3ZxY25PMxfQs07aXXF5jFg5KKyavYRe1ieY2hhBtsTZjIQ52c5CfWcEW9pdpP0CB2zkzWEsCsXShhaU9ALj2WutjvRGCw2hVI4paEALgt/vgj/+Wbdu/ET4YCMOehH7jQrv/CrYxiSUe+9eSxXP8yl0MYxN7+InlZJPrduwhCnmR3/g3p5ZpX8AGFrMFgB60pC3JvM1s8jgckMxTWOGfop4+PaB9KnDJJcFZJ4yIohYEP8nfW1FJu/LrPdDzVoiOC50Mk1nqc0wuh3maX8jHd6n6fI6wmT2k0JBsDvI6M3E9h/7I8kpIa3B38vdKVBDUk80G48dXfp0wI5eJguAnk6/0PeaHMaHbfxc5FGPt67wVJV1CBmsBKijpsHH99ZWbrxTMnRscWcKMnKgFwU92+j7Msj0Ed+nb2c9adpEboOnBF0UUM5N1IVXSjzOFIqeNvA7RnEUXmpHIz6wkh3yaU59BtMOOHR58ECZMgKIi/zZp0QIuvBCefLLGFBUVRS0IfhJTFw76GBNbL3j7bWEfHzHvqIILFSdwHAvYENI9XF9DHoV8yp9l+jexl9lkMoyO9KWNCQvv1AkOW/xwuvxy+OijYIocEYjpQxD8ZMhjvsec+lxw9tpHHu8xJ+RKGqAXqZFh8gB+ZTVr2QmpqVBQABMnwuDBJlx86FD3k3r3tqakc3Kgb19jv1bK/Nu/vwmsiVBEUQuCn3Q6B+Iaee6v2xxS+gVnry+p2niEjjSp0v288R1/lz457zzjBfLrr+YnKwuGD4d27YySXbPGmj06OxsaNjRjS9z2tIY//oD69Y0Sj0BEUQtCAIzdCQ3bV2xP7gK3bwzePrs8uNSFgnwKGUrkhFwfotBzZ1ISTJliTCMzZ0J7N/8Z7jj5ZBOt6I6iIqP0IxCxUQshIysri+3bt5Oenu61LVJxOOCXu2DDdIiuC8P+WxrMYrfDLWsgPwcWvw02O3T7V+Vc8hw4+JD5bGFfcF6An0Rjx46dq+jNB8wLiwwhZ+1a7/1//+29P0yIohZCQlZWFoMHD6a4uJjFixcTGxvrti1SWfIhfHtV2bYPBkKdxnDntlJngrgE6Du28vs5cPAkv1SJLdodCljIZnqRSksa8gDD+YVV/MmmsMgDYA/2F35PJ+lqgJg+hKBTopBXrlzJ6tWrGT9+vNu2SGVvZkUlXULeLlHDrOgAACAASURBVHi5bXD2ySWfv9nGLnKYxJKwKWkADfzMSh7hR3aTix07IziBVBqGTaa+tA7ugtXYVU+SMglBxVUh16cN+9mAskFqaiqZmZll2ubMmUOvXr3CLXIF3ugBOxd5HzN2B8QHeO+WzUHeZQ6H8dM/uIpQwP9xOmCiG5/j17DJMbTETc9JDvlMZgn7yCOOaE4jjVS83OyWp1Ej2FMxadRRmjSBHTsCF7oSeEvK5PNErZSKVUotUEotVUqtUEpNCL6IQk2gvJK+ljn0YSzFxcVkZmaSRBrXMofe3EFxcTGjR4+moMB9Ep9wsstCQMvspwJbO4d8XmNmxCppMKfrJ5jCerKIJ4ZzCM99gsa46c1mPQBfs5gXmc5m9nKQw2RxkI+Yz8tkWF/022+99//wQ+AChxArpo/DwBCtdRcgHRiulOodWrGE6sj27dspLjZf3/ezgTk8Q3/upxEdSSKNq5x/UOuZCoDNZiMvLy9s8nrEwpdMh/XI7DJ8US7AI1I5QjGf8ifz2cCJNOMBhpNOcxKJoxF1OJPOPMBwOtEEGyqkskxnDQvYwHK2u+3fxyE+wmKoeL9+kJEBdeqUba9b17jode9eSWlDg1+mD6VUbeAP4Eat9XxP48T0cexSUFDA+PHjeeaZZyguLqYRHenHPbRjJDbsvMcAsllJWloaGRkZJCcnh1XejTNh4oXG9gyAgqjaUOTj8+PW9dDAzwpPs1h3NJ9GdeIBhpuQbicOHLzDbHaWi89sSj12cCAkMthROHx8gpaXszz5FLKErURhoxstsGfvhRUr4PjjjbtfmKl0PmqllB1YBLQFXnWnpJVSY4AxACkpKYFLK1RrYmNjGTt2LJMmTSIzMxOFjXaMJJ5kjlCAdl6YjRgxIuxKevV38MVZ5Rq1byVdO9l/JZ3BGmY5v8IHk3Sa8zfbfCqxyjCdNZxC2tHnz/IrBW5MN6FS0oCl17edA7SgPgCb2cM+DtGKRsQTzSvMIMclV/YUVtA8KZFrBg0KlchBxd8TdSIwGbhVa+0x76GcqI9dXO3UJeYOG3ZqUYdaxLKV+bxD34i4THwkGor9NGHUqg1374LoeP/mPcyP/k2wwEV0owNNmchfrCS0F2B9SOUkUlnLLqawIqR7Bcp19GM92fzOWssfW0nU4UYGhVIsywStwovWer9SagYwHIKQoFaoUZS/TCyxSb/HADSas3mP5vSiN3cwt/g5Ro8eHTZ/6s2zfStpFQXthsO2hUZBn3wvdC+XeXMF2/iNNRRSRAPqkEw9DpBPQ+owjI44gDl+nqRrU4ubGUQOh3iT2R7H/cQK2pLMKLqEXFHPZQNzLSZsSiSO/eQHbe+SyjO+8lmvYZff31qyyWM3uTTCz0/eKsanolZKJQFHnEo6DhgGPBlyyYRqR/nLxNk8yXqmks1KAN6hL725o8JlYjgU9UYLjgK6CC753n2fAwfP8VuZfM+H2M9WZ2mq9WQzn40ByVaPWKKx85YXJQ1wkMO8RAZ3MoxhdORXVge0X7BJII54Yo6+F5XlGvqyjRy+Z5nHMR1oHLBpaSoruJzIcxN1xYrXR1MgQym1DPgTmKa1jkwfFiGspKens3jxYsaNG4eywVyeO3pxOHbs2AptGRkZNGxYNQEV+Tmwaxk4nOkjjuvpfXwJG2e6b3+TP/xKyu8PZ9KFaay29PX9IIfJ5iB9acMlWHxRIaaAIxypTOVxJ02oy+0MIZl6dKUF3byU8dpF4MmUQvX/GEwk4EUICfPnz2f06NHYbLaj3h3u2kLNiq/gm6ugyOWbeN3jYMwieLap7/kp/eHqcsq6EAf/dX4rCAXdaMFqdnLIogJxLWTrwMFjIZStqriB/iRTmtQ7VJexAL1oxWkcH5K1/UGqkAtVTq9evVi8eDF5eXlHT83u2rzx0y2w6M1SW3L9dnDRRGjc2ZoMyz6GyVdUbD+4HZ5r5nTDO+R9jSI3ptbVIbYH/8UWYvz40ywJPf+Jv1nI5lCJVWU0oHYZJb2YLSFT0gDD6BiytYOF5PoQQkZsbGwFheyuzR0vtIY/Xy174bdvHbzexWSzs8K313ru08UQFeN7jbQLKrapEAd4ADSkju9BTrrQnO9ZVm2UdCxR3MUQEqmYavA4EriFwWXafg6hl8kIjvfqex0pyIlaiDhmPgo5XhwMPh4O/+clVTFA9ioo9jGmwEc2UWWDfuMqtqfRhMnep1aaHqSUTZzvhcks8TmmFjYupgd1iOEtZuMIYwKo42lKPHHcxpCjQSh2FN1Jcas0/a5e7oZYorBhO5rjuj61OZd0mjn9riMdUdRCxPGHD5+i4iOwYQakDvI8Jsui8+iIl2HKre77rpjmvt2OnVY0YCN7rW0SAGk0wYHmxyB5wTrQpGKi7x5gREj8uq3SiLpHH8cRTZ8gZslrSj00+mjUpA1FN1IYyQlB2yMciKIWIo4jFtJ/ZE7xrqibW/C2UnY46RbocA5Muhh2LDSn6NanwrkfeQ9quZI+vMbvZAdQgaULzVjKNo/99Ykjmmi605IONGEyi9nCvkqlQS0u50OSRB2yCU+elR74F7mssJR+BYAL6UGCG5NKdUcUtRBx2KJ8B6M07OS9PyHFKNpCL3q0gzN8PKEZXDPLPxkBbmQgu8llCss5RCEx1GI3BzlMEdHYqUss2eQeVTL1qc1FdCeZemSTy3Y3LmVR2PgXA48+jyeGKyjNgRaox0n5y8kx9A+Ld0hvUv22CXelBX+xxdK4mqikQRS1EIF0PAtWTvQyQEHX0b7XueI3eMfDybpWbTj/y0CkK0sj4ssoUqtcx8msZAdTWcEhConCRk9aMYh2XhXZ/gBPwYMoW1PQjp3+tGEWmQGt5y8KGEh7BtDO77ln0Jmt7CPLw7eXaGycxgl09eJnXd0RRS1EHGd9CKsmg/Zwh9TnbmvrND8JbloJn50J+0r0kYLWp8ClP4W/4EcaTUnDgjO3C4l+eIO40ovUCm2D6cg/7GZbJYJFfHE5J1Gf2tQPUO4SbmAga9nJFFaQRyGx1GIwHWq0cnZFFLUQcUTHwb+z4H8nQq5LCmJlg/4PwmA/SlckdYLbQueCW2X8wkoWsLGCrbmyXMvJfMYC1pEd1HVL2MAeWhOcFKLtaUJ7AiyrU80RRS1EJHENYOw2E/q96Xdjc24a+YXLQ8JrzKjUxZ87f2VXLuEkXuS3MmlAy9OOJPaQx158RAiV4082sIQtNKAOZ9Ol0ifrSGAfeUzkL3ZyAA3UJpqRnOD3tyN/kIAXIaKJS4COo45dJb2ITZX2zrCSA+QWBpFAxeRYChhNby7hJIbh4wbXDYUUk0chW9jHy8zgOyzUOYtg1pPFy8xgh1NJAxyikIn8xST+Ctm+cqIWhAjmNwsZ8c6mM7WJ4SsWccTFhS+GKK6kN0kufsuesGPndoaym1x+ZRVHcJBGU7rT8uiYjjQhhqhK1XtcwlZa0oAu1dS2/JmXUmor2EFP9pASgsrtoqgFIYKxohQ3spdRdOE+RpDLYfaSSxJ1iSPa7/0aEX80wZM77mQYr5BBLof9XruEqayslop6MVt83hB8x7IKIfDBQBS1IEQwdmw+A13qU/vo43hiiMdCEpMAicbOXQxjH3nMcbr2pVCfDNZxwGnj9nXhGckV2L2xhp0+x+QEsWCCK6KoBSGC6Uwzn8EefYMYgm2V+tThdErTGJ7oPCGvYidfsajK5akKalv4hmIP0bWfKGpBiGBGcDxL2OrxlBpHrZBnfyvEwUQWkUk2GnPB2JEmnEt6hb3bW3DFqxOASSYSOIVOLGGr1zGdaR6SvcXrQxAiAAcOfmM1X7GI+S61Ce3YqevFlJHPEUsXjoGSTyFP8TPrnUoaTN6NVezkSX7BUS6znR07qTTwuuYoLCYUjzDiiKYZiR77FXBaAJ4xVhBFLQhh5geW8RhTmU0mq9jJz6zkYX5kARsoxOHVvxlgnsWis4HwLnM8nuaLKOYD5ldov4I+JHkoFjuI9rSjcVBlrEqupR8t3XwQxRDFnQwL2bcbMX0IQhj5jdUebdBTWUkePpJqQ0hzS+/x4cO9FfdJvW9kINkcZIozl0kT6nEmJ1aLJP2+uIo+OHAwjw0UUEQXmoe8irkoakEII3N8JEVaEGAl82CQb+FDwhtJ1OXKABJWVQfs2OlH2yrbT0wfghAmcsj36ZdrxZWtnpuIwmAQXQNOvzUFUdSCECYKLJ5YfSXaP4fA4+uzsrJYsmSJ2zY7dp/K2orLmlB5xPQhCGHCil1ToRjJiRRQxHK2V+g/i860DDBkOSsri8GDB1NcXMzixYuJjY2t0HZ2bDpfevGLvpBuAe0t+IecqAUhTNix09hHHo5uTr/cc+nKAwynN6l0ogkjOJ6HOD3gUOwShbxy5UpWr17N+PHj3bZ1pAnnkI6tXOV1OzYupWdI8loIFVFaBze/LUCPHj30woULg76uINQ0HDh4mmluK203og43MSjoe7oq5AZtmrJvwy4UkJqaSmZmZpm2OXPm0KuXKZOzgxy2s58W1CeZekGX61hHKbVIa93DXZ/PE7VSqoVSKkMptUoptUIpdXvwRRSEYxM7du5lOINoTwxR2FDUJpqz6VIlSvraOU/Td+zZFBcXk5mZSVJaCtfOeZred4yiuLiY0aNHU1Bg/LibkkB3WoqSDgNWbNRFwFit9V9KqbrAIqXUNK31yhDLJgjHDANoF1A9QX/Zvn07xcXG73rfhl3MeeZr+t9/IWu+X4Cy2Rid8TgA66ea3Mo2m428vDxiY0PjWSJYw+eJWmu9Q2v9l/PxQWAV0CzUggmCEHzS09NZvHgx48aNQwGzn/6at/vczcn3nM/ojMex2W28P/h+slduJi0tjYyMDBo2FDt0uPHrMlEp1QroChXjRpVSY5RSC5VSC7OzQ1N/TRCEyhMbG8vYsWNJTTUFb5XNRruRPYhPTqRWnVi088Q9YsQIkpOTwymq4MSyolZKxQOTgDu01gfK92ut39Ra99Ba90hKCk4xS0EQgk+JnbrEJl1ykj5SUEit2GjOef9OlM3G888/z/z5FXN5CFWPJUWtlKqFUdKfaK2/Dq1IgiCEivKXiSU26XcH3Msb3W5n6/w1NO/Vwe1lohA+fF4mKqUU8A6wSmv9XOhFEo5FcnfC7rXQuIspaCuEhvKXiX88OZH1U/8ie+VmAN7u+2963zFKLhMjDJ9+1Eqpk4FZwN9wNE3X/VrrnzzNET9qwSorvoJvroQil0NbXCO4ZjY0ah8+uWoyBQUFjB8/nmeeeeao0k5LS2PEiBE8//zzZdoyMjLETl1FePOjloAXIWys+AomXuihU8EdGyHBe5oLoRLMnz+f0aNHY7PZjipkd21C1SCKWohIHo0DhxfzZ3IXuHGJ536h8hQUFJCXl1fGBc9dmxB6vClqScokhIWcbd6VNEDW0qqR5VgmNja2gv3ZXZsQXkRRC2Fh75rA5+5YAp+PggMuhVGa9YYrp0N0XOVlE4RIQ7LnCVVGYT44nLmHmnS3MEFVbNoyD97sWlZJA2ybB08lgqNyRUkEISKRE7UQUhwO+GAwbJlV2maPgVOehtgGULDX89w2p1Vs+/gUL3sVwmdnweVTApdXECIROVELIeXppLJKGsBxGKbeBsdf4HleVBxc8m3ZtpxtUJjrfb/MXwKTUxAiGVHUQsiYMQEOuy9SDcCiN+DWfyDpBJdGBW2Gw737wV6uytMOz4VGSgldQW5BCBti+hBCxlwLcayrvoKb/ra2XuMTrY3LzymNbnQ4YMGLsHOpuXA86UZrawhCJCGKWgCMWWHbPEhKg6RO1uctfAOyV0Lb06DdyLJ9Rw75nr/TDxe8+qkQFVs2itEdTyWaf+s0hrxdpe3LPoQpN8PwF6HXrdb3FYRwI4r6GGfXMni3PxS65EO0RcOZb0H6lZ7n/Xw3zHu29PmCl0BFwcWTof0Zpi06Hg7v977/ii9hzzo4/zNo0Ma3vOd9AV+c5XsclFXSR9HGPh7fxLuNXBAiCbFRH8PszYTXu5RV0gDFhfDtVbDsY/fzMsaXVdIl6CL47EzY7rQlD3jQtwy6CHb8CS+3hUdjYNJl3l3sOo6CS3+EaO81YX3y/fWVmy8IVYko6gjEUQg/3ABv9TTuZjnbQrPPp2d47//OgzKb9aj3eV85T6p9x0J0onV5HIWw/FN4NBa2LvA8rt1IuO8APFgEI1+3vr4rh3MCmycI4UBMHxHGjAnw+3/Ktq39DlL6w9UzPc9zOGDGg7D8S1AKTrwMBk+oOGbPKoipZ5Id7VntXRZHgUk/Gt+ktC1rOWgfnhX7N5h/X+sMhT5MH27R8G5feKjI+zC7HfauC2B9QahmiKKOIFZOqqikS9g8CyZeDOd/XrFvyzyj2HDJrzXzYXPyvX4RJJ8I7/aB7X+W9iuL36X2ZpZV1Acsnu5/GQdZFr053KEdsOA1914aDod5n3avglrxga1v9fULQiQgijqC+OEG7/0rvqioqB2Oikq6BF0Mb/WAmISKEYC+TsUlNOlS9nlKP99zbLWMS1xlmfZv6D7GnJxLmHoHzA/C2u1HlT524MCO3fNgQQgzoqgjiPzdvsdsmQctepc+n/EgbpV0CdrhPUzbG3ENjeeGK9HxkNAScjZ5ntd9DPz5amB7ulKUB881g3/vNM9nPREcJV27CYyYnM9LzGU/+aXtRHMZJ9EUKTEjRBbyBbCaUVTON3n5l6HbK38PTFDm52E7fHm+OcH/a6k5NbsjsTWMfCV4MhzaZQoMAMwYH5w1U0cV8iLTyyhpgEMU8hZ/sJ1ADOuCEDpEUQeB/L0m9WZlM7fVqu17zPT/M1noqhpdDKsmwbONTdTf/bnQ+UqTYAll3OWGPQm3Z5rx9YJYmeXXcSbHR/GR4Ky3YuZhvNXLeJvZPMKPPMnPzCEzOJsKQiWQCi+VYNnHxh/XNVKuXgu4fkHZCzirzHkWpt3te5ytFtyTY3IvZ4w3F4dVSc9bYOTL3sdsng3vnRy8PZM6Q/ayIC3W4SBqtRcXmnLUJYY7GRakzQXBPd4qvMiJOkD+egcmX1ExnPnAFmNXzQ/AT7fvWGhvIequ+Ehpus9wRNf99Vbp45L80uVJ6QfnuvFQCZSgKWmAVAux7S4c5DBf8VcQBRAE/5DLxAD50YuHhi6GL86B0dO9r5G9Cr4dDfs3mou7lJMhc6q1/bfMNv9unW9tfDBxHIZnm0Hu9tK2hJZwVYbJx1HCiRfB1xdXvXw+iffhoO2GVewIgSCCYA1R1AGwYwkU+/hb3zTDe/9nZ8Nal3zLeVnGL9hfmlqplOIJG9RuBIey/J/qqqTBeIG81AZuyyyrrCOSn5PReXZUHQ9fBzywnf0chx+hloIQJMT0EQA7rVTG9mL6/+PJsko6UPL3wvyXcFuyyhLFeJXTbzR8OAz2bYB3+sET9YK4djA5GAXL6qLz/Pv1/4gwfH0RBERRB0TL/r7HKC/xE79P8NxnFXsMPNUQlr5HpZTtIQu+2/6w/x94qTVsnQOFB4O7tiUs/UYrGNQbJrRDb4tBWzxYH6aIx5hCPlKYUahaRFEHQIM2vl3p0s733FcUBPc6x+HKrwEEfhqPUFJOhrrNLQwstMPTbaH5MLpcfzo9sOZP6KCYl8monJCC4Cc+FbVS6l2lVJZSanlVCFRduOI3z33R8XDOJ1UnS3nqtbQ2rnZyJW3cEcgpT5cND/dFdF2Te3sYaZbnFFBEFgd8DxSEIGHlRP0+MDzEclQ7WvSGG5aaSLyjKGg7EsbtL5ufojzRlbDdWgmKObgF+t3re9yNS+GCLwKXJdKIPw6anwRL37c2vvUwGLfP/F9FY6ceMZb3+pONAckoCIHgU1FrrWcCAWaLqNk07mwi8cZr508xXPajdyUNcJqFWoLusEVBt3/5Hqe1d9NLCfs3Gw+N87+k2ptAElvDHZvNYyumpQ73HeC4aatZbTfpABexiQNYtydJEiehKgmae55SagwwBiAlJYjxwzWQbteaElgLXnLTqSh7OajMKTp9NJz2IuzLhPnPe1+/TjL8dJNvOabcDNf/aYJmWg+Fl9pDwR7rr6MqUHbABrpc+Lg9FtoON3m1+99XNhI0Kq5iTpQyxDhYc81C1jpzfUzCihtPWU6mte9BghAkgqaotdZvAm+CCSEP1ro1lREvwtDH4LvrTHHY+KZwxuu+fZAbtYfY+lCwz/OY01+DXyyEoh9yKuX8vfB0Mpa9H6qS/g/ArMcqtjsKYM03MGZxxXD9Hje6LxVm0JB2ENU28BvdRGoTT1zA8wXBX8TrI4xEx5v80jcugyt+th4ocvMaU0jWHcdfAp3OgYbtfa9TMuaj0yJTSfe8Bdb+6F22D4e6mXdziXtk+fOC83lSYcCvty4x3MyAwCYLQoBIZGII2DjTFIfd78zZXK85jHoH2pwSnPXjk+CBAvjlLljynsnal5ACZ39Ymqv67A/h2WTv6xx2+jnviID8WQ06QqdRsHMpJKXBsP+CPdqkWPVGwV6TTTDaecCdeCms+AygGGoBR1wXcD7+owE81hYeWm9ZvvrU5jy6SmSiEBZ8Kmql1GfAIKCRUmorMF5r/U6oBauuzH4Kfr2nbNuBLfDxqXDyvTD0ieDsY7cb88kID4n0V1hIiLR1jim1VRkSW8OBraZyuRUSWkLOZkoPu8q4013yTeAy7FtnLnbnPFuipIH6RXDAw6/3oSh4vjX6vkxULWtWuuvoRxzRgQspCJXAitfHJVrrplrrWlrr5qKkPVOYX1FJu/LHf409uCr47X5r4769pnL7nHyvdSUNcPkvMOQxl+rk2oTTP2w3dRZdsZp3u77zXi/j/1waD9vA4eXX+4iCzdbszAnEiZIWworYqIOIt4x6JXx9ReDrf34OTLCVVl15rLYpAOuOI7nW1jy4DZoEGPRiqwXdr/djfDS82gGm31+xOrkuhrlPw48u3ipvdvW9ZkxCabmwMm55vg7KDgWxvg3V0di5hYG+BRGEECKKOohsW+B7zK4A8yo/n2K8HFwVUFE+TLkJfnsgsDUB9v1jTBf+YouCm1c5zRgWsXLyXviayXHtKIQ9a3yPv/RHDx35dojxoohTD6GalfpN21BcQx8aU5do7MQTzXDSuJfh4jMthB25TAwisRYiDmPq+r/uwjeMndsTfzwOgx4uG2gTUx8Oe3HhO4o2dQmt0LADKJtxf+t1q2nbMs/aXH9Y8CI062VtrGtV9Fq14chR/2kFWoGtGIrLnUfiHPDY6qNPo7ARhY1prOZiepIQoOtdPoV8w1L+YTcaTTLxnEs3GhHve7IgeEFO1EHkVAsRh0Pc+AT7oozt1QPly3GdHsQCswAdzoZbVsPNK0uVNEDjLsHdB2Dveqid5P+8Cu9toQ1qFxsTR70jUPcI1C+k1t0bue+cLkQ7T8pFFFNAEVvYx4tMZwr+p7XZQDZPM411ZOGgmGI0OznI//idWazz/8UIgguiqINISj9TM9ETcQ2Nj7O/FFgo67VradnnJ14Kff7t/17uqN8GLp7svi86DhJaBWefEtoMN4E93lLFgsnt4UrvO6DzVeUG5UZBgZ1a8ZoO1x9m3GY79z/chteYRSHuTSN/sol1WPya4eRjPNu9MlhLLmGoSCzUGKS4bZBxOODN7pBVTnE2bA83rvSdB8QdTyVBvo+80f0fhCGPVGwvzIXvxkDW3ya0fKOP8mAA9dtB3i5T/WXEi9D+DO/j83PgmUa+q95YQdnhIec6vz1gzDqeuDIDUgdVbM/Nhm+uNCfz+MYm4jP5BNO3iE38yioOe1DSJcQTw13OgrbfsIS/2Xb0eiAaOyM5gc6YfKpz+YdpeC/P04qGXElvr2OEYxtvxW3FRh1k7Ha4cYlxLfvrDSh2QNfrIC4h8DUHPWwuDb0x8D/u26Pj4fxPS5/7CiABc0no6wMlfy9syIDEVnBcd7jnAHx7Jaz+pnIK+2IXf+qhj5lQ+YXlPFuUDUa9515JgwkIunxKxfZXmcEe8izJketM0PQKGeylbOKQQhx8w1L2k88A2lmqp7iDAKodC4ITUdQhIjrOfBUPBifdCLMerVinsIR+46yf1KPivGeXs8d4XytnG7zZrWydRWUzHxQXfGWeP9nQRAz6Q/12cMGX0DS9bPvp/4PhL5uT9d710HKASWpVRqbN8M90aNSxNDKzPD/xt2UlXcIytlZQ0q7MYC39aE0tC39G9uqenlAIK6Koqwljt8GnZ8C6nzjqohcVC8OeKnu5l58Dky6Cf341OTLsMdDzptLUqqc8BVNurbD8UQY/7LmvMBdeTDE+z67oYpjxkHGpG/II9LnT2gUomBP/HVs9f+PYtwF2/Q3pV5kweVd2r4W3T4LDLodVZYMhj8PJ5QKPFuHFbcYNDant05wBMIv1DKUDb+PdNtXVYgUZQXCH2KirIQ6H+1Nvzjb3ihQgrhF0PNuYYnQxLPug4piet8DIlz3v+8npsP4nL4Ipk5Mb4PE6rq5y5WRpCC36wcn3eT4Br/sJvjy/7Om/Vh249CdoNcC81hda4DGwZeh/yyrrh/HkcO2eWKI4ggOHj8iZdiRzCT15jmnkeqilqID7xR9b8IHYqGsYnkwTb3Z3r6TBXEYufrv0eWx9k2lv31polAanPm2SIHkj82cfgmlYOQnSzoO7d8NrJ5hit66kXei7qsyG6fDp6RXbj+TBBwPh2vnObwVedOj0Byqeqv2hgCKisHnfBGhIHQBuZwgvMYODFJTpr4WdmxgYsJJ24GAb+3GgSaG+KPtjFFHUNYT8HOuBK2Au6Za+Bw94S7BfDiupQXc7rQXRcab6TX4OrPkWYhOh3enWbOlf+KhO8/lZxivFl6ybZ5cGxNQhmjy/q4f7/rY5lA6AqfhyJ0PZRx6/s44jFHMSLWlJQz/3LOULFrKmnJtgC+pzNX0DXlOonogfdQ1hyyz/5xTle84VEihtR5R9HpcA6VdCx1GelfTsp+DVNPjfCTD3e37Z3AAAB/5JREFUOd8RlXk7saJD2eMSZ3Iu6Z4HeqAYqO0lGVN3WlQ44danDmeTzgV0q5SSfotZFZQ0wBb28QJeKisLNRJR1DWExFaBzZv7jLVx3rIClmCPNa56VslaDg9HmbV3r4LsFfDLWGtzbRaS2bUeUvo4lSTOpLNfvhfR2LmTIbSkQdm9UQymPafT2Y/VrLObXHZ4qXJ+gALWk+WxX6h5iOmjhpB8ggkW8bdySVGB7zEAc1/wPaa4GB6JhnrN4Iw3fRdKeD098MoyXa+GRW947o+uV9FLpCst6EoLFrOZf8hmBTu97jGQ9tixcxV9AJPLw479aOh5qPjJQgj7NFbRFh+VIYQag5yoA6QwH94bWDbt6Ktpxp0sXAz1EsXnieYWg+WsZL7ThVB8BPZvNIUSPvcSLj/z0cCVdJNuJtqwThMPAxRc5yVZVFdSOI/u9KetxzHxRNOLsrXR4ogOuZIGyLNQDf2Q3/Z2oTojijoACvPhyUTYPJMyttLdq+ClNsa/Nxz0GweDHzG+xFY5x42bXrBY8w38/an7viUB7murBVf/bh7fvQO6/8u0AaCgaU+4YwskdfK91mA60J82FdrbkcxdBKluWgAk4TvFYn2nt4lwbCCmjwD4ZLiXE6aG906Gf4fJhDjgQfOz7idjAy7WMP1e92OHv1SadN8X0fWg0LPZ1CNTbjcJogIhKs5pmtGAgtZD4aLvSusjgjlZn/F6YOt/xV9uw7+3sg8HjrC5wo3iBFb6CEs/hxCkLRQiFjlRB8BmHx4Wh7Ktl5EKFe1GmhN2/3tM5F/KAHPytEUZ08HNa8pGNPpihJdAGG/k73HffsLFvuf2v98E0IzX5t8rppVV0pVhARs85ujI5whvMzs4GwVANNH0xnNJ+hM4Tk7Uxxhyog4EK65hayrmrQgXCc1KzQWBkn6leU3estm5Q3lwsxj4H7OWpwAdZTPfDELFdLyXj9nFwbCeqk8ljaYkMIXlFGCyXNXCzlA6cJIXJS7UTERRh4jEGvi3NPQxGDQept4BO5dCveNg5UTvc447yX273Q7XzIV3+1RU1soG11koa1YZPOWidmUd2XTE041l6DmRZpxIs7DtL0QOoqgDoFGn0gg8d9SqU7m0ppGMPdpktCvhkxGwfqrn8ed5uEwEaH4SPFBoEjot/wxQxp498D+B5e0ONrUkXFuIEMRGHQCXTwVvkRMXfFllooSdy6ZAq8EV25UdrvwN6vv4ZmG3m5P67f+YkPMhj1SNkvYWcVhCq3KBLoIQLuREHQAJKXDzauPdcSi7tL1WHaOk240Mn2zh4KrpJgXqr/eaHBwdzwnc06OqGMWJfM4ij/0daCwJkISIQdKcVpLCfHPJlphac80dNZVZrCODik7vzUjkWvq5mSEIoaPSaU6VUsOBFwE78LbW+r9BlK9aEx0XOd4dgn/0px19ac1UVrCdA8QTw0hOIIEg+QAKQpDwqaiVUnbgVeAUYCvwp1LqO631ylALJwihxo49ZMmVBCFYWLlMPAlYr7X+R2tdCHwOnBVasQRBEIQSrCjqZlCm4NxWZ1sZlFJjlFILlVILs7Ozy3cLgiAIAWJFUbtzRKtwA6m1flNr3UNr3SMpKanykgmCIAiANUW9FWjh8rw5sD004giCIAjlsaKo/wTaKaVSlVLRwMXAd6EVSxAEQSjBp9eH1rpIKXUL8DPGPe9drfWKkEsmCIIgABb9qLXWPwE/hVgWQRAEwQ2S60MQBCHCCUkIuVIqG9gU9IXd0wjYXUV7VTfkvXGPvC/ukffFPVX1vrTUWrt1mQuJoq5KlFILPcXHH+vIe+MeeV/cI++LeyLhfRHThyAIQoQjiloQBCHCqQmK+s1wCxDByHvjHnlf3CPvi3vC/r5Uexu1IAhCTacmnKgFQRBqNKKoBUEQIpxqraiVUsOVUmuUUuuVUveGW55IQCnVQimVoZRapZRaoZS6PdwyRRJKKbtSarFS6odwyxIpKKUSlVITlVKrnb83fcItU6SglLrT+Xe0XCn1mVIqNhxyVFtF7VJ5ZgSQBlyilEoLr1QRQREwVmvdCegN3CzvSxluB1aFW4gI40Vgqta6I9AFeX8AUEo1A24DemitT8DkOro4HLJUW0WNVJ5xi9Z6h9b6L+fjg5g/ugqFHo5FlFLNgdOBt/+/vbtXrSKMojD8LjgWJiLYikW0sY6VGLAwluIVaOEFCKkEvQYROxvFxnQxF2Bhn8IfELRTiRHFNCrYKLgsZuwSON3ew1lPOdUqZhbzffOzq7N0Iek4cBF4BGD7t+3vtalamQFHJc2AJYp+8Tzlop5r8swik7QCrAI7tUnauA/cAv5WB2nkDLAPPB63hB5KWq4O1YHtz8BdYBf4Avyw/awiy5SLeq7JM4tK0jHgKbBh+2d1nmqSrgDfbL+oztLMDDgHPLC9CvwC8rwHkHSCYZV+GjgJLEu6VpFlykWdyTOHkHSEoaQ3bW9X52liDbgq6SPDNtklSU9qI7WwB+zZ/r/q2mIo7oDLwAfb+7b/ANvAhYogUy7qTJ45gCQx7De+s32vOk8Xtm/bPmV7heFceW675O6oE9tfgU+Szo6H1oG3hZE62QXOS1oar6t1ih60zjU4oKNMnjnUGnAdeCPp9Xjszjj8IeIgN4HN8YbnPXCjOE8LtnckbQEvGd6mekXR5+T5hDwiorkpb31ERCyEFHVERHMp6oiI5lLUERHNpagjIppLUUdENJeijoho7h82LdXymq/wSQAAAABJRU5ErkJggg==\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 0000000000000000000000000000000000000000..b028a2890fc9be8633ffc61b82b78c3cf1942614 GIT binary patch literal 58 zcmZo*ju2yDU?@q<%T25-E;ceWuyjbzP0Y;EOU}&{RhH!ALMC`|@lwo^ zd zq4u`pS-M^1cav$H%Ll61Q}J|~=6fGar-@ACGPz%<>Diuo^!z7Pw=DLPd^Fq7#-wR_ zsHf}v98Lciq~(tEl^>oRoY8>bIOkCUCAIe-x+$%g&0!r<BvW!CtP9 zMxX0b<&0*BjTc2}o|aLxj(Ob&VZ5{YdAz!Oc5PDS=w$Vn(@H!&G&;sy`b~_MfLhI- z@=I(9u+{8H95c>JYsnV;;LV!dWncW@bFmN$Sh$3RYilV|Uh~qa#ggA<&wliXzUtKc zm}8x_uuJ#ItL>w%w2v{iu%%Pm`yEx4tOkG8oI@(a$v{YZuHn6wKX_boocdsa?_~EX ztMSdE1KwZpuI$yW?BmUqYggGsTw)84cECOSvR6AxE(cc_=DoTzvD#gq{RMK`@&fki z%JsTyz6TOl-~0IfHPQh3i}Ll_m#?3EY0SN`Q{D89a?27>3wDcaZVVaJ!7C69?j0m* zoa!Xl)PB<`=H+Z&R-Mh8qjx4j<;=^;*1KUpQL0eCPPC5ql4^bP?OPhVZ2rv9Ex@7b zJ^+k@9l$7bcE^QELhpW($S3i5pJumCp2{&?<(&+KYXrcPwK}{&ulJtE**rGVR^Fxz zwu8-EvT<~~@iaa#M|?vNY5e4LapksaWpyX`zt4#P|EsTFJAY08B@c%E#+j)!FAemY zzVVo7ri$sTY(2)+W`5FGx>Sv;l4tWo!*8DI0&B%nN@degiJoU=;Qv7*i0k=GLML6RlWRKslhwL#cT`6if$`TFk>8#N2XUplq)6$3^9&`Hvp%aHL~B1eY#a*b$$1%i zQKXYHEt6>!{SI4cgC$;FJEx3SmhB9CBs!HgQPlWRG%e&jBfcL+&*pK~&Zu{>o!TNo z6^gn}gy62o5b8FO4~U$Z$#4`w6-7EypQcYeVdLj{-uJx?Z{XQx_7wCaFae1)q91~w zy5J>(pt@Ld$&ux`84*uWzD)pcbzh1j=Z|c{O_l1Eq79Tsu5^z1T?EEszRUiET`s|t zvIBFv)mCtCI?qs1>fi=tilCSbgOA50;zY1YOu

Hwp~E)%PIGx6nf(-XbwCfz<4a z!GgEP80?_NG{`Xu8Hz@XZZ@3CaceRyTP=}pUUqNqC3$i%Q}6H5UUYw(Ro7NhjBaPe zIL`F@qtj&#zfUEqpXxN%Wt@)_l%n$)!kNftjho9@srV4FEj9VHK&k4+x*c>BZkPeZ z_i#*Op-64T<7Pk^V^N}uNEGv*M)<-L>*BglG(KEw`taB+eKLaDP`8t~&0saOaxvrJ zY8x}H`}f90mL+X@+$Mh~M?g4KzoaE^5g~w>1HKDBjd#1n\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 0000000000000000000000000000000000000000..e1fc8a94384250eaebba6ebbfac90832f3f27f12 GIT binary patch literal 9060 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 QcFOhYboE>1SIe*bH-WU-=l}o! literal 0 HcmV?d00001 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": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3df5RcdX3/8ecrmwRiEswPZkkEU4Sa1XWpIFurUlvWSmtt8UfLYDnfKlXbtOe72/qjpy2657ToqWdta8Vjs6FfWoKYr0oZgQKVbxH5LkT8tuoGBSYbRUHaomFnBZElRZDk/f3j/nD29+xmZ2d28nqcc8/O3Ln3zvsyZN5zPz/eVxGBmZkZwIpGB2BmZs3DScHMzHJOCmZmlnNSMDOznJOCmZnlnBTMzCxXt6Qg6XhJX5F0j6T9kj6Qrn+BpC9L+pakf5K0ul4xmJnZ/NTzSuFp4DUR8VLgTOB1kl4B/BVwWUS8EPgB8M46xmBmZvNQt6QQiSfTp6vSJYDXAJ9N118NvKleMZiZ2fysrOfBJbUB+4CfBgaBB4DHI+LZdJOHgZNn2HcHsANg7dq1Z7/oRS+qZ6hmZi1n375934+Iwnz2qWtSiIjDwJmSNgA3AC+ebrMZ9r0CuAKgu7s7hoeH6xanmVkrkvQf891nSUYfRcTjwB3AK4ANkrJkdArwvaWIwczM5lbP0UeF9AoBSWuA1wIHgCHggnSzi4Eb6xWDmZnNTz2bj7YCV6f9CiuAayPiXySNANdI+kvga8CVdYzBzMzmoW5JISLuBc6aZv2DwMvr9b5mZrZwntFsZmY5JwUzM8s5KZiZWc5JwczMck4KZmaWc1IwM7Ock4KZmeWcFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHJOCmZmlnNSMDOznJOCmZnlnBTMzCznpGBmZjknBTMzyzkpmJlZzknBzMxyTgpmZpZzUjAzs5yTgpmZ5ZwUzMws56RgZmY5JwUzM8s5KZiZWa5uSUHS8yUNSTogab+kd6XrL5X0XUlfT5fX1ysGMzObn5V1PPazwB9HxN2S1gP7JN2WvnZZRHykju9tZmYLULekEBEHgYPp43FJB4CT6/V+ZmZ29JakT0HSqcBZwJfTVX2S7pW0W9LGpYjBzMzmVvekIGkdcB3w7oh4ArgcOB04k+RK4m9n2G+HpGFJw2NjY/UOc0kMDg5SqVTy55VKhcHBwQZGZGY2UV2TgqRVJAnhUxFxPUBEjEbE4Yg4AvwD8PLp9o2IKyKiOyK6C4VCPcNcEoODg/T19dHT00OlUqFSqdDT00NfX58Tg5k1jXqOPhJwJXAgIj5atX5r1WZvBsr1iqGZFItFOjs7GRkZoauri66uLkZGRujs7KRYLDY6PDMzoL6jj84B3grcJ+nr6br3AxdJOhMI4CHg9+sYQ9Nob29naGiIrq4usuawQqHA0NAQ7e3tDY7OzCxRz9FHdwGa5qVb6vWeZmZ2dDyjeYlkfQhjY2MUCgUKhQJjY2N5H4OZWTNwUlgipVIp70Mol8uUy+W8j6FUKjU6PDMzoL59Clalt7cXSDqcsz6EoaEhSqVS/pqZWaMpIhodw5y6u7tjeHi40WGYmS0rkvZFRPd89nHzkZmZ5ZwUzMws56RgZmY5JwUzM8s5KZiZWc5JwczMck4KZmaWc1IwM7Ock4KZmeWcFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHJOCmZmlnNSMDOznJOCmZnlnBTMzCznpGBmZrmVs70o6Xjg14FXA88DngLKwOciYn/9wzMzs6U0Y1KQdClwPnAH8GWgAhwPbAc+nCaMP46Ie+sfppmZLYXZrhS+GhGXzvDaRyW1A9sWPyQzM2uUGZNCRHxu8jpJK4B1EfFERFRIrh7MzKxFzNnRLOnTkk6QtBYYAb4p6U/qH5qZmS21WkYfdUbEE8CbgFtImozeOtdOkp4vaUjSAUn7Jb0rXb9J0m2SvpX+3XhUZ2BmZoumlqSwStIqkqRwY0T8GIga9nuWpCP6xcArgF5JncAlwO0R8ULg9vS5mZk1gVqSwv8CHgLWAnsl/RTwxFw7RcTBiLg7fTwOHABOBt4IXJ1udjVJsjEzsyYwY1KQ9EpJioiPR8TJEfH6iAjgP4Ge+byJpFOBs0iGtp4UEQchSRxA+wz77JA0LGl4bGxsPm9nZmYLNNuVwsXAPknXSPodSVsAIvFsrW8gaR1wHfDutG+iJhFxRUR0R0R3oVCodTczMzsKsw1J/QMASS8CfhX4hKTnAkPAvwJfiojDsx087Yu4DvhURFyfrh6VtDUiDkraioe1mpk1jTn7FCLiGxFxWUS8DngNcBdQJGkKmpEkAVcCByLio1Uv3URyFUL698aFBG5mZotv1tpHGUkvA36eZNTRlyLiD2vY7RySoav3Sfp6uu79wIeBayW9k6R/ojjvqM3MrC7mTAqS/pzkiztr/rlKUiki/nK2/SLiLkAzvPxL84rSzMyWRC1XChcBZ0XEjwAkfRi4G5g1KZiZ2fJTyzyFh0iqo2aOAx6oSzRmZtZQs5XO/juSPoSngf2Sbkufn0fS2WxmZi1mtuaj4fTvPuCGqvV31C0aMzNrqNnmKVw902tm1lwGBwcpFou0tycFAiqVCqVSid7e3gZHZstNLaWzf13S1yQ9JukJSeOSap6ZbGb1NTg4SF9fHz09PVQqFSqVCj09PfT19TE4ONjo8GyZqaWj+WMkk8w2R8QJEbE+Ik6oc1xmDTE4OEil8pNJ9pVKpem/WIvFIp2dnYyMjNDV1UVXVxcjIyN0dnZSLHoakM1PLUNS/wsop8XwzFpW9ot7165dDA0NAdDT08PIyAhA0zbFtLe3MzQ0RFdXF1nxyEKhwNDQUN6cZFarWpLCnwK3SLqTZCQSAJNKV5gte8VikV27duW/uAHGxsb8i9uOKbU0H30I+G+SuQrrqxazlpL94i4UCoyNjTE2NrYsfnFnfQhZvFn8WR+D2XzUkhQ2RcRvRMRfRMQHsqXukZktscHBQSbfu+Opp56adftm6H8olUp5H0K5XKZcLud9DKVSacnjsWUuImZdSArY/fJc29VzOfvss8Osnnbu3BlAHHfccQHE5s2bo62tLYDYsmVLjI6OTrt9Z2dnjI6OxujoaHR2dgYQO3fubEj81TGOjo42JA5rLsBwzPP7tpakMA4cAZ4iuQ3nOPDEfN/oaBYnBTsatXxhjo6OxpYtWwKItra22Lx584QkMd32WRIoFApRKBQmJAmzZlCXpNAMi5OC1WK6L/9isVjTL/pisRh33nlnrFu3LkjKucSqVauiXC7nx50uMWTJAIh169ZFuVye8Lp/rVsjLWpSAE6ddcekLPYp833DhSxOCjaX2ZpzsiuAmX7RZ4lj9erVsXHjxvxLHohf+ZVfmTGRDAwM5FcU2dLe3t4UzUlmEQtLCkr2m0pSiaQj+kaS+kdjJCOQfhroIbknwl9ExG0L682oXXd3dwwPD8+9oR2zshE4IyMjZPf0zoaTXnvttfnoHEjG8JfLZdrb2xkcHOSMM87gvPPO45lnnply3BUrVrBmzRoOHTpER0cHe/fupVQq8e1vf5uPfexjAKxZs4aI4Ec/+hEAq1atYvXq1fk+F1xwAVu3bm3aeQ7WuiTti4juee0zU1JID9gJ/A+Su6htJRmaegC4BfhspPdYqDcnBatFpVKZMoGrXC4DcPrpp/Pkk0/m68866ywkceutt9LZ2cnZZ5/Nnj17JhxvxYoVHDlyJH++fft2XvCCF3Drrbciidn+7QCsXLmSE044gcceewyA888/n1e96lVccsklebyuT2T1tJCk0PD+gloWNx9ZLSa38RcKhejv74/29va8A3nTpk0TmntOPPHECc/rtaxatSp/3N/fH/39/XmzlpuX5ubRVQuDO5rtWDXTaKBsWb16dQCxYsWKJUkCsy3VMUw33NUmarbhv8vJQpJCLZPXzJredBO4Ojo68tfb2toA8uag448/ftrjLIUshra2Nr7whS809WzpZuCCf0urltpHZk0va5cfHx8HkpIVe/fu5W1vext33XUXhw4dmrB91incSBs2bMg7xW1mLvi3tGq5n8Lttawza7Q777yT973vfbz0pS9l//79fPzjH+fWW2+dkhCaxaOPPur6RNZ0ZrtH8/HAc4ATJW0kmZcAcALwvCWIzWxW2d3GSqUS4+PjlEolVqxYwSOPPMIZZ5yBpLkP0kBtbW15fSKPQJrZ5IJ/QF7wz1cLdTBTZwPwLuA7JOWyv1O13AP0zbfz4mgWdzTbZFnnYzaC5/TTT887k5fTUiwWG/2fsum5o3nhqFPtoz+c70EXe3FSsMmqvxiywnXLaTnttNNiYGBgwvn4C25mHpK6MAtJCrNOXgOQ9Lbp1kfEJ2fdcRF58tqxYb43n69UKhMmpS03nZ2dU+7wtnPnTjcl2aJZyOS1WkYf/WzV4+NJylvcDSxZUrDWt5BbYe7evXvZJoSVK1f6Dm/WlOa8Upiyg/RcYE9EvGGO7XYDvw5UIqIrXXcp8HskdZQA3h8Rt8z1nr5SaH2z1S6arjOxUqnw6le/mvvvv78R4S6KdevWTSi9kdVjMlssC7lSWMjktf8GXljDdp8AXjfN+ssi4sx0mTMh2LFhvrfCLJVK3H///WzatKkB0R699vZ21qxZ0+gwzKaoZZ7CzZJuSpfPAd8kqZw6q4jYCzy2CDHaMS677WX2t1KpcOWVVwLwgx/8YFl9ua5YkfyTq1QqvqeyNae5eqKBX6xazmEe91AATgXKVc8vBR4C7gV2Axtn2XcHMAwMb9u2bbE75a0JVI8oGR0dje3btwdMrF2UDTnN/nZ0dOTbNetSfaOe6kXShOcdHR0eYml1Rb0K4gFbgDcA5wNbaj741KRwEtBGcoXyIWB3LcfxkNTWM3ns+cDAQP5lOTAwMO1NcqqHnjZDYbtal7a2tik373nDG97gIZZWd3VJCsDvAv9J0kdwNckv/XfUdPBJSaHW1yYvTgqtZ6aqptmv52yb7GpictXT5ZAYJMXatWunJLR169a5MqotiYUkhVo6mv8EOCsificiLgbOBv6shv2mkLS16umbgfJCjmPL30wdy3v37s07ltvb22cds199A5xm9JznPIdbbrmF4447jsOHD7Nu3ToKhQJPPvmk+w+sadWSFB4GxquejwP/NddOkj4D/BvQIelhSe8E/lrSfZLuJbml53sWELMdQ6rr3mTlr4Gmr2sEcOjQId7ylrfw9NNPs2XLFh544AHK5XJeBrpUKjU6RLMpapm89l3gy5JuJLn8fSPwFUnvBYiIj063U0RcNM3qKxcaqLWWWoucZfdJ2LJlC4888ggdHR1ERFPPT8hu45nFXCwW2blzZ35OQ0NDLoJnTauWK4UHgH8mSQiQDEc9CKxPF7N5m+6mONP9gu7t7WXnzp3cc8897Ny5k71793L99dezZcsWgAlXD81i48aNDAwM5DFfe+21E+ZazNUsZtZQ8+2EaMTijubWVCwWo1wu58/L5XJNVUOrRy6Vy+X8HszNsGQdytmoKrNGoh4dzZK2S7pC0ucl/d9sOcpcZMe4wcFBSqUSF154YT4h7cILL6RUKjE4ODjrfllzzNDQEDfffDOVSoXt27fT39/P2rVrl/Aspjp8+DDt7e3uM7Blq5Y+hRLw98A/AofrG44dK4rFIrt27ZpXUbjpiubt2bMHgLe//e2sX7+eQ4cOISkb9lx3Wf9Bf39/XnrjPe95D+vXr3cTkS1Pc11KAPvme/mx2Iubj1rT5PkHhUJh1iaX6rkNmzdvnjC3IZvwlk10q17WrFmz6M1EmzZtCkhu7pPdF8ET0KzZsJjNR5I2SdoE3Czpf0ramq1L15stqfb2dt761rcCyf2Nx8bG2Lx5MxHB+973Pvr6+njkkUc4/fTTWb16db7fU089tWgxtLW1US6XOXDgAJ2dnTzwwAOsX78+j89XB7bszZQtSG69+SATb8WZLQ/ON/sczeIrhdYz04zmuTpoy+XyhNnBWT2hbL9sBnS5XJ5Sa2jHjh3zviJYtWrVhOcbN26cMuParFlRr9pHjV6cFFrPQu67W71N9Rd+W1tb9Pf3T9i2v79/yhf8iSeemH+xr1y5cs6EUL1N9ftt377dI4tsWahLUgB+Y5rll4D2+b7ZQhcnhdY03/vuZokEpq97lO07XUKoTgzZlUQtiSFLAuVyOTo6Oqa8l1kzW0hSqGX00TuBVwJD6fNzgX8Htkv6YETsqeEYZlNMbn+fq02+t7eXgwcP8jd/8zc888wzE0YZHXfccZx77rkA3Hvvvfk+GzZsYMWKFTz2WHJrjxNPPJH29nZKpRLPPvssW7ZsQRIHDx6c9j27urq4/fbbaW9vZ+/evezevdsji6yl1ZIUjgAvjohRAEknAZcDPwfsBZwUbMls3bqVZ555hra2Ng4fTkZIt7W18fTTT3PHHXfwkpe8hJtuuokzzjiDcrnM448/DiTJ4cc//jHf+MY38nkQAwMDvOMd7wDgtNNO49ChQ6xbt441a9YwNjbG+vXr84QASdK65JJLGnDWZkunljIXp2YJIVUBtkfEY8CP6xOW2fR6e3sZGBhgw4YN+boNGzYwMDAw4df7NddcM6EExg9/+EMOHTpEZ2cn4+Pj9PX15XMcdu/ezaFDhwDo7+/PS26Mj497Apodc5Rdfs+4gbQL2EYyiQ3gN0kqp/4J8C8R0VPXCIHu7u4YHh6u99vYMpAV0hsZGZlQSK+zszMvpFe9TXUTU1tbG/fccw+FQmHaY3R0dOSluyuViovW2bInaV9EdM9nn1quFHpJbrBzJnAW8EmgNyIOLUVCMKtWSyG9bJuOjg42bfrJlJrDhw9z8803L8q9HMxa1Zx9CmkP9mfTxayhsi/qYrE4Yynq3t5exsfHueqqq3j00UcpFAocOXKERx99lD179uT9CGY2VS0F8cYlPZEuP5J0WNITSxGc2XR6e3vnLEW9fv167r///vyKIru6GBkZYffu3RPu5ZBdMfhuaGa1XSlMuGeCpDcBL69bRGaLYLYrCiBPEllhvayPwf0Idqybs6N52p2kf4+IV9Qhnmm5o9kWW1aCO0sY7li2VrSQjuZaRh/9RtXTFUA38IsR8cr5h7gwTgpmZvO3kKRQy+S186sePws8RHKfZjMzazG19Cm8fSkCMTOzxqtl9NEpkm6QVJE0Kuk6SacsRXBmZra0apm8dhVwE/A84GTg5nSdmZm1mFqSQiEiroqIZ9PlE0ChznGZ2RIYHBycMDejUqnkBQPt2FRLUvi+pN+W1JYuvw08Wu/AzKy+BgcH6evryyftZTWj+vr6nBiOYbUkhXcAFwKPAAeBC9J1ZraMFYvFfJZ3V1cXXV1d+aS+YrHY6PCsQWYdfSSpDfjNiHjDEsVjZkskKwzY1dXF2NgYAIVCIa82a8emWa8UIuIwC5yTIGl3OmKpXLVuk6TbJH0r/btxIcc2M7P6qKX56EuSdkp6taSXZUsN+30CeN2kdZcAt0fEC4Hb0+dm1gBZH4ILA1q1WpLCq4CXAB8E/jZdPjLXThGxF3hs0uo3Alenj68G3lRzpGa2qGq5N4Ude2qZ0byYN9I5KSIOpsc9KGnGhktJO4AdANu2bVvEEMwMars3hR17aimIdxzJLThPpSqJRMQH5zy4dCrJLTu70uePR8SGqtd/EBFz9iu4IJ4tlKuh2rGsXgXxbgR+COwDnl5IYFVGJW1NrxK2Am64tLrJxuHv2rVryn0TACcGs2nUkhROiYjJHcYLdRNwMfDh9O+Ni3RcsymKxSK7du3Kx+EDjI2NeRy+2Sxq6Wj+f5LOmO+BJX0G+DegQ9LDkt5JkgzOk/Qt4Lz0uVldZOPws1E12Sgbj8M3m9mMVwrp/IIj6TZvl/QgSfORgIiIn5ntwBFx0Qwv/dICYzUzszqbrfnoZODMpQrEbLFNHocP5OPwfbVgNr3Zmo++ExH/MdOyZBGaLZDH4ZvN32xXCu2S3jvTixHx0TrEY7ZoPA7fbP5mnKcg6SBwOUkfwhQR8YE6xjWB5ymYmc3fYs9TOFjLBDUzM2sds/UpTHuFYGZmrWu2pOCho2Zmx5gZk0JETK5wamZmLa6WGc1mZnaMcFIwM7Ock4KZmeWcFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHJOCmZmlnNSMDOznJOCmZnlnBTMzCznpGBmZjknBTMzyzkpmJlZzknBzMxyTgpmZpZzUjAzs5yTgpmZ5VY24k0lPQSMA4eBZyOiuxFxmJnZRA1JCqmeiPh+A9/fzMwmcfORmZnlGpUUAvi8pH2SdjQoBjMzm6RRzUfnRMT3JLUDt0n6RkTsrd4gTRY7ALZt29aIGM3MjjkNuVKIiO+lfyvADcDLp9nmiojojojuQqGw1CGamR2TljwpSForaX32GPhloLzUcZhZ/Q0ODlKpVPLnlUqFwcHBBkZkc2lE89FJwA2Ssvf/dET8awPiMLM6GhwcpK+vj127djE0NARAT08PIyMjAPT29jYyPJuBIqLRMcypu7s7hoeHGx2Gmc1DpVLJk0DWBDw2NkZnZydDQ0O0t7c3OMLWJ2nffOeBeUiqmdVFe3s7Q0NDFAoFxsbGGBsbo1AoOCE0OScFMzPLOSmYWV1kzUfZFUJ2xdDT0zOh89mai5OCmdVFqVRiZGSEzs5OyuUy5XKZzs5ORkZGKJVKjQ7PZtDI2kdm1sKy0UXFYjHvQxgaGqJUKnnkURPz6CMzsxbl0UdmZnZUnBTMzCznpGBmZjknBTMzyzkpmJlZzknBzMxyTgpmZpZzUjAzs5yTgpmZ5ZwUzMws56RgZmY5JwUzM8s5KZiZWc5JwczMck4KZmaWc1IwM7Ock4KZmeWcFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHINSQqSXifpm5K+LemSRsRgZmZTLXlSkNQGDAK/CnQCF0nqXOo4zMxsqkZcKbwc+HZEPBgRzwDXAG9sQBxmZjbJyga858nAf1U9fxj4uckbSdoB7EifPi2pvASxNcqJwPcbHUQdtfL5tfK5gc9vueuY7w6NSAqaZl1MWRFxBXAFgKThiOiud2CN4vNbvlr53MDnt9xJGp7vPo1oPnoYeH7V81OA7zUgDjMzm6QRSeGrwAslvUDSauC3gJsaEIeZmU2y5M1HEfGspD7gVqAN2B0R++fY7Yr6R9ZQPr/lq5XPDXx+y928z08RU5rzzczsGOUZzWZmlnNSMDOzXFMnhVYvhyHpIUn3Sfr6QoaONRtJuyVVqueUSNok6TZJ30r/bmxkjEdjhvO7VNJ308/w65Je38gYj4ak50saknRA0n5J70rXL/vPcJZza4nPT9Lxkr4i6Z70/D6Qrn+BpC+nn90/pYN7Zj9Ws/YppOUw7gfOIxnG+lXgoogYaWhgi0jSQ0B3RLTE5BlJvwA8CXwyIrrSdX8NPBYRH04T+8aI+LNGxrlQM5zfpcCTEfGRRsa2GCRtBbZGxN2S1gP7gDcBv8My/wxnObcLaYHPT5KAtRHxpKRVwF3Au4D3AtdHxDWS/h64JyIun+1YzXyl4HIYy0xE7AUem7T6jcDV6eOrSf4hLksznF/LiIiDEXF3+ngcOEBSgWDZf4aznFtLiMST6dNV6RLAa4DPputr+uyaOSlMVw6jZT7EVACfl7QvLevRik6KiIOQ/MME2hscTz30Sbo3bV5adk0r05F0KnAW8GVa7DOcdG7QIp+fpDZJXwcqwG3AA8DjEfFsuklN36HNnBRqKoexzJ0TES8jqRjbmzZP2PJyOXA6cCZwEPjbxoZz9CStA64D3h0RTzQ6nsU0zbm1zOcXEYcj4kySKhEvB1483WZzHaeZk0LLl8OIiO+lfyvADSQfZKsZTdtzs3bdSoPjWVQRMZr+YzwC/APL/DNM26OvAz4VEdenq1viM5zu3Frt8wOIiMeBO4BXABskZZOUa/oObeak0NLlMCStTTu8kLQW+GWgFSvB3gRcnD6+GLixgbEsuuzLMvVmlvFnmHZWXgkciIiPVr207D/Dmc6tVT4/SQVJG9LHa4DXkvSbDAEXpJvV9Nk17egjgHR42Mf4STmMDzU4pEUj6TSSqwNIyo18ermfn6TPAOeSlCMeBf4C+GfgWmAb8J9AMSKWZWftDOd3LknTQwAPAb+ftb8vN5J+HvgicB9wJF39fpK292X9Gc5ybhfRAp+fpJ8h6UhuI/mxf21EfDD9nrkG2AR8DfjtiHh61mM1c1IwM7Ol1czNR2ZmtsScFMzMLOekYGZmOScFMzPLOSmYmVnOScGWPUlPzr1Vvu25kl5Vz3jmeP93S3rbIhznGkkvXIyYzKo5Kdix5lygIUkhnVn6DuDTi3C4y4E/XYTjmE3gpGAtSdL5aR35r0n6gqST0kJofwC8J62d/+p0Juh1kr6aLuek+1+aFki7Q9KDkv6o6thvSwuo3SNpj6T1kr6TllFA0glK7pWxalJYrwHuzgqUpce+TNLetM7/z0q6Pq19/5fpNmslfS59r7Kkt6TH+iLw2qoSBmaLwv9DWau6C3hFRISk3wX+NCL+OK0pn9fPl/Rp4LKIuEvSNuBWflJI7EVAD7Ae+Kaky4HtQD9JMcPvS9oUEeOS7gB+jWQG928B10XEjyfFdA5JHf9qz0TELyi56cuNwNkk5bkfkHQZyZXN9yLi19J4nwsQEUckfRt46TTHNFswJwVrVacA/5TWtlkNfGeG7V4LdCalcQA4IatJBXwuLQnwtKQKcBJpffrsxkhV5R7+kaQ555+BtwO/N817bSWpR1Mtq+d1H7A/K7Eg6UGSgpD3AR+R9FfAv0TEF6v2rQDPw0nBFpGbj6xV/R2wMyLOAH4fOH6G7VYAr4yIM9Pl5PQmLADVNWIOk/yIEtOUH46ILwGnSvpFoC0ipius9tQ0cWTvcWTS+x0BVkbE/SRXD/cBA5L+vGqb49Njmi0aJwVrVc8Fvps+vrhq/ThJc1Dm80Bf9kTSmXMc93bgQkmb0+03Vb32SeAzwFUz7HsA+Ok5I68i6XnAf0fE/wY+Arys6uXtwP75HM9sLk4K1gqeI+nhquW9wKVASdIXgep7YN8MvDnraAb+COhOOwC0G0AAAACeSURBVI5HSDqiZxQR+4EPAXdKugeoLjH9KWAjSWKYzv8B5nsjpTOAr6R31OoHsg7ok4CnlmNFT2turpJqtkgkXQC8MSLeOss2N5B0en/rKN/rPcATEXHl0RzHbDJ3NJstAkl/R3Jb1dfPseklJB3OR5UUgMeBPUd5DLMpfKVgZmY59ymYmVnOScHMzHJOCmZmlnNSMDOznJOCmZnl/j82THhKb7ZEMgAAAABJRU5ErkJggg==\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 0000000000000000000000000000000000000000..120de049e453df6bfb1e23372d0c040d9dcb57fd GIT binary patch literal 58 zcmZo*ju2yDU?@q<%T25-E;ceWuyjbzP0Y;EOU}3d1ONa4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..51a42da4c98f2eb125500115b7a4776c2427984c GIT binary patch literal 3458 zcmai1PjB4D6`vWBOD=b{Rvgv;g0@6q1>T@qxp0D}f#C$M?IK01xK>g-Y*Loq;VQJa zKX73e8n!KeP-a3wiHigGb;9%qI#Z{GX8KYMp= z&1ZQ2vG!K2{IdOQvxyAF5(c#nWk;?|nR-CNho7{8_BZ zD37O!Zk()u{#vTq1D(r$tJ3UHOd9~J5#_1d$m3q zeW6d4GnySXUKFKyT1L@2=5-&0@y_b!@#^x~wMmtulhtEREAjNu=ooY9w=r4*YBhVt zFR>-SRmQHQ&cT`of8vIpr4yh0)10n6XhWA?j;7QGK>ca)TlijPV z#y5)&cz?yavRAvZk2hDYU1bw-i7hElWTx*e$ZTF=S8&uR$=le~_qg zs*_+-`%R~qm$P|UbvAE~-kSuKGcPAw?}zhJ=+-hUBi^VmpRd7CoW z4mNMe#?kG@)A+y~@eM(w@srcVmD{eB)!pF#J|_bFufBTY{5AboJQ(&HXQtA;G|+GQ z#$%$HDyFlt^%z&1`AK8xQZ=qhp3f5vzj>w$xK>ugQa2r$PzW=g(^%MT*i&nC8HaAK z8<)B$l}$$_dY+YyhkgbpOd6Y}TBSvkm4;iTMQ4go7qOYz0110#QN~$hRA*eYB^S(T zh(j{D0#?5R!uWuDRtNMN+PdZOKDVttsE^j?8~i%=K;g9;=e*Wzbn3DW_UfV;m;D!* z67G70DD})b=IW27O`POQ@t2JS-15{F;f#-wJ$}O;u_vr_rKsU3OE@Ilz}gr359sZy z$P%ydoqeGcBA_KG;(2JuC*-O}etRAq#Fg%nBBck;GhFv|iS$2L5_KWbH6u|E-(s(4 z-HAY$5S*RKWt_|3X@q)O{q!^Vjfs}Q1P}J&MY18W5On!HBOqtnUx0%D6$8^X|f{}@y5qK7gI31#r{DHv#) z8iF(^lJno}g(yw35$@bpB+8;Ozuh!KZPM5(Av27#LMKDpsN0+jJH;pgw0f7eI;U#V@W*JHoR|rl z+gxy8K;7v3qPlcW#j6N&>U|_0wK1A8*TDwq7YWK=K*PUSE0$N0#SiL_9k-k*>Ebyt;w`(wM4pk)xEu!9gVuC1gP-Oh?} zoasBG(`5~RKqac5>NMA7oR1TfqVpNTnaF32o6A_K_zONNvUAW