Created
May 15, 2024 10:12
-
-
Save onidzelskyi/63d011150d0492f2053baa41c2b2f92b to your computer and use it in GitHub Desktop.
Simple linear regression example in Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"id": "NB9FR5fbcAQS" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"# Simple linear regression example in Python\n", | |
"\n", | |
"This article demonstrates methods of solving the regresison task.\n", | |
"\n", | |
"## Problem\n", | |
"\n", | |
"Suppose, you're regular in buying goods on E-commerce sites and all you have is an invoice with its total sum.\n", | |
"\n", | |
"\n", | |
"<img title=\"Cost and freight problem\" src=\"data:image/png;base64,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\"/>\n", | |
"\n", | |
"You wanna to know how much the shipment was cost and what is the price of one piece of goods.\n", | |
"\n", | |
"The simplest way is to ask the supplier, of course )\n", | |
"\n", | |
"But, not in our case because of we're mathematicians 🙄 !" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "emEXyMzJcAQY" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Input data\n", | |
"\n", | |
"Suppose we have past three invoices\n", | |
"\n", | |
"Raspberry PI, pcs | Cost and freight (CIF), $\n", | |
"---|---\n", | |
"1 | 5\n", | |
"2 | 8\n", | |
"3 | 11\n", | |
"\n", | |
"> Let's assume also that the freight itself is invariant (fixed priced) and doesn't depends on number of pieces in the package." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "fjV0QX40cAQZ" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Taks math formalization\n", | |
"\n", | |
"Firstly, we need to formulate the task in math manner to be able select appropriate model to solve it.\n", | |
"For each math problem exists one or more of models to solve it.\n", | |
"\n", | |
"Once we transmit it into the math plane we can choose the model that covers our `business needs` (***business diligence***).\n", | |
"\n", | |
"In this case our task mimics the simple linear quatation.\n", | |
"\n", | |
"Indeed,\n", | |
"\n", | |
"$$ {CIF = pieces \\cdot cost + freight} $$\n", | |
"\n", | |
"As we know (I hope you did) the basic 2D linear function looks like this\n", | |
"\n", | |
"$$ {\\large y = f(x) = k \\cdot x + b} \\tag{1.1} $$\n", | |
"\n", | |
"where\n", | |
" - k - slope\n", | |
" - b - offset on vertical axis (or ***bias***)\n", | |
"\n", | |
"Let us represent this equations in slightly different manner:\n", | |
"\n", | |
"$$ {\\large y = f(x) = k \\cdot x_1 + b \\cdot x_0 } \\tag{1.2} $$\n", | |
"\n", | |
"where\n", | |
" - $ { \\large x_0 } $ always equal 1 (e.g., bias). As we know from preliminary school, multiplication of variable by 1 don't change result.\n", | |
"\n", | |
"or, more formally,\n", | |
"\n", | |
"$$ {\\large y = f(x) = w_0 \\cdot x_0 + w_1 \\cdot x_1 } \\tag{1.3} $$\n", | |
"\n", | |
"where\n", | |
" - $ w_0, w_1 $ - weights (in terms of machine learning).\n", | |
"\n", | |
"or in matrix format\n", | |
"\n", | |
"$$ W = \\begin{bmatrix} w_0 & w_1 \\end{bmatrix} \\qquad X = \\begin{bmatrix} x_0 \\\\ x_1 \\end{bmatrix} \\qquad y = f(x) = W \\cdot X \\tag{1.4} $$\n", | |
"\n", | |
"Equation (1.3) is the simple linear regression equation.\n", | |
"\n", | |
"The task is to estimate parameters W.\n", | |
"\n", | |
"## Input data\n", | |
"\n", | |
"For given rule\n", | |
"\n", | |
"```\n", | |
"def f(x):\n", | |
" return 3 * x + 2\n", | |
"```\n", | |
"\n", | |
"Suppose, we have a 2D plot with sample points on it.\n", | |
"Based on it we want to estimate coefficients to be able plot other points\n", | |
"Suppose we have three points\n", | |
"\n", | |
"$$ {\\large \\begin{array} {|| r | r ||} \\hline x & y \\\\ \\hline 1 & 5 \\\\ \\hline 2 & 8 \\\\ \\hline 3 & 11 \\\\ \\hline \\end{array} } $$\n", | |
"\n", | |
"Or graphically" | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "2knYGKptcAQZ", | |
"outputId": "1cb5a3b3-c2f0-4866-df21-ae882787ff14", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 447 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"# import libraries for plotting and array initialization\n", | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"%matplotlib inline\n", | |
"\n", | |
"\n", | |
"# define data\n", | |
"X = np.arange(1, 4,dtype=np.float32) # create array from 1 to 3 inclusive (both 1 and 3 included) with step 1\n", | |
"\n", | |
"f = lambda x: 3 * x + 2\n", | |
"Y = f(X)\n", | |
"\n", | |
"\n", | |
"# Plot data\n", | |
"plt.plot(X, Y, 'ro')" | |
], | |
"execution_count": 38, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7b1ef258dbd0>]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 38 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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yikBAIAwcxljTKi++IgRIxQdHa1//vOfjY5p6JUPr9eriooKxcfHh2pqAADAQT6fTx6Pp0nP3yF72+WLL77Qhg0blJ+ff8Zxbrdbbrc7VNMAAAARJmRvuyxdulRdu3bVyJEjQ7ULAADQCoUkPmpqarR06VJNnjxZ7duH9JxWAADQyoQkPjZs2KBDhw7pzjvvDMWXBwAArVhIXpYYPny4QngeKwAAaMX43S4AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArApJfBw5ckS33367LrjgAsXGxqpv377avn17KHYFAABamfZOf8GvvvpK119/vbKysvTmm28qISFB+/fvV+fOnZ3eFQAAaIUcj4958+bJ6/Vq6dKlgW3p6elO7wYAALRSjr/t8o9//EPXXnutbrnlFnXt2lVXXXWVnn/++UbH+/1++Xy+oAsAAGi7HI+Pzz//XIsXL9all16q9evX65577tF9992nZcuWNTg+NzdXHo8ncPF6vU5PCQAARBCXMcY4+QWjo6N17bXX6v333w9su++++/Thhx+quLi43ni/3y+/3x+47vP55PV6VVFRofj4eCenBgAAQsTn88nj8TTp+dvxVz6Sk5N1+eWXB2277LLLdOjQoQbHu91uxcfHB10AAEDb5Xh8XH/99dq3b1/Qts8++0xpaWlO7woAALRCjsfH7373O23dulV/+tOfVFJSoldeeUXPPfecpk2b5vSuAABAK+R4fFx33XUqKCjQihUrdMUVV2jOnDlasGCBJk6c6PSuAABAK+T4CafnqjknrAAAgMgQ1hNOAQAAzoT4AAAAVhEfAADAKuIDAABYRXwAAACriA8AAGAV8QEAAKwiPgAAgFXEBwAAsIr4AAAAVhEfAADAKuIDAABYRXwAAACr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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "LbkloDIscAQa" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Task\n", | |
"\n", | |
"For given input samples estimate its coefficients for predicting output\n", | |
"\n", | |
"### Approach one. Normal equation\n", | |
"\n", | |
"Before to dwelve into computational methods, let's try to solve our task using by **analitical approach** called **[Normal equation](https://www.geeksforgeeks.org/ml-normal-equation-in-linear-regression/)**. The formula looks like this\n", | |
"\n", | |
"$$ {\\large W = (X^T X)^{-1} \\cdot X^T \\cdot Y} \\tag{2} $$\n", | |
"\n", | |
"But, before to using this formula, let's compose system of equations from input data above\n", | |
"\n", | |
"$$ {\\large \\begin{cases} 1 \\cdot w_0 + 1 \\cdot w_1 = 5 \\\\ 1 \\cdot w_0 + 2 \\cdot w_1 = 8 \\\\ 1 \\cdot w_0 + 3 \\cdot w_1 = 11 \\end{cases} } $$\n", | |
"\n", | |
"or in matrix format\n", | |
"\n", | |
"$$ X = \\begin{bmatrix} x_{11}&x_{12} \\\\ x_{21}&x_{22} \\\\ x_{13} & x_{23} \\end{bmatrix} = \\begin{bmatrix} 1 & 1 \\\\ 1 & 2 \\\\ 1 & 3 \\end{bmatrix} $$\n", | |
"\n", | |
"and\n", | |
"\n", | |
"$$ Y = \\begin{bmatrix} y_{1} \\\\ y_{2} \\\\ y_{3} \\end{bmatrix} = \\begin{bmatrix} 5 \\\\ 8 \\\\ 11 \\end{bmatrix} $$\n", | |
"\n", | |
"Python code below implements formula (2) and prints ground truth coefficients $ w_0 = 2 $ and $ w_1 = 3 $\n", | |
"\n", | |
"Tips: when define numpy arrays, it's commonly used to point ```dtype=np.float32```" | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "LkK7ZpxpcAQb", | |
"outputId": "fe1126a9-adc0-48cf-e4a0-9b0c253b42d4", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"# Basic math library in Python\n", | |
"import numpy as np\n", | |
"\n", | |
"\n", | |
"# Add bias column to the X values\n", | |
"X = np.c_[np.ones(X.shape[0]).T, X.T]\n", | |
"\n", | |
"# Formula (2) in action\n", | |
"W_true = np.linalg.pinv(X.T.dot(X)).dot(X.T).dot(Y)\n", | |
"\n", | |
"# Print out results\n", | |
"# Value, calculated by normal equation is ground truth\n", | |
"print(W_true)" | |
], | |
"execution_count": 39, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"[2. 3.]\n" | |
] | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "A4_PVAKecAQb" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Normal equations is straightforward method of solving system of equations and can be applied in regression task we try to solve now.\n", | |
"It has pros and cons.\n", | |
"\n", | |
"Pros\n", | |
" - no need to choose learning rate $ \\alpha $\n", | |
" - don't need to iterate\n", | |
"\n", | |
"Cons:\n", | |
" - computational expensive $ O(n^3) $\n", | |
" - slow if n very large\n", | |
"\n", | |
"Because of its cons, it can be used only for small tasks.\n", | |
"For other regressinon analysis used **gradient descent** algorithm\n", | |
"\n", | |
"### Gradient descent\n", | |
"\n", | |
"**[gradient descent](https://en.wikipedia.org/wiki/Gradient_descent)** is a technique to estimate parameters of the linear regression.\n", | |
"\n", | |
"This algorithm is iterative and approximation\n", | |
"\n", | |
"<img title=\"single layer perceptron\" src=\"data:image/png;base64,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\">\n" | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "giMYTUnFcAQc", | |
"outputId": "7dda9137-4853-4574-8716-dade6bbdd27a", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"# Firstly, let's define our weights we need to estimate\n", | |
"# and initialize it by zeros\n", | |
"# its dimentsion (# of weights) equals #features (second dimension of X)\n", | |
"W = np.zeros(shape=(X.shape[1], 1))\n", | |
"\n", | |
"# And set learning rate to 0.01\n", | |
"# (usually it vary form 0 to 1).\n", | |
"# The close to 0 means slowly learning\n", | |
"# close to 1 means faster learning\n", | |
"# Some algorithms automatically adjust learning rate\n", | |
"# starting from bigger value at the start of learning\n", | |
"# and slowly decreasing it when learning come to end\n", | |
"# You can play with its value to compare results\n", | |
"alpha = .01\n", | |
"\n", | |
"loss = []\n", | |
"\n", | |
"# We took 50 iterations\n", | |
"# #iterations can vary depending on task\n", | |
"# usually it lays between 50 - 1000 iterations\n", | |
"# depending on the network' complexity\n", | |
"# in our case we train simple linear regression\n", | |
"# so, 50 iterations enough\n", | |
"epochs = 50\n", | |
"\n", | |
"# Other approach is to choose convergence limit\n", | |
"# and stop iterate when estimated value is close enough to the ground true\n", | |
"for i in range(epochs):\n", | |
" # Firstly, calculate estimated value from formula (1.3)\n", | |
" Y_hat = X.dot(W).T\n", | |
" # Then, using MSE calc cost funciton, which estimate how accurately we calc predicted value\n", | |
" cost = 2 * np.sum((Y_hat - Y) ** 2) / len(X)\n", | |
" # Save our divergence for displaying our learning curve\n", | |
" loss.append(cost)\n", | |
" # Calc differential (most complicated and unloved part of this algorithm)\n", | |
" dw = np.expand_dims(2 * np.sum(((Y_hat - Y)).dot(X), axis=0) / len(X), axis=0)\n", | |
" # Adjust weights. Here we perform main task\n", | |
" W -= alpha * dw.T\n", | |
"\n", | |
"# Print estimated weights\n", | |
"print(f'Train loss: {cost}')\n", | |
"print(f'Weights: {W}')" | |
], | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Train loss: 0.0750150653171332\n", | |
"Weights: [[1.49063285]\n", | |
" [3.21321668]]\n" | |
] | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "5uGEjcNXcAQd" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"For visualization purposes to determine how well does learning process let's plot the learning curve" | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "TFV-Ej9_cAQd", | |
"outputId": "296eb1ed-edbc-48e9-a6e0-9d6d261607e5", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 447 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline\n", | |
"\n", | |
"\n", | |
"plt.plot(loss)" | |
], | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7b1f5f774850>]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 11 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "hAkMlCrGcAQd" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Learning curve used for evaluation of learning process.\n", | |
"If all ok, the curve should slowly decreases.\n", | |
"If it grows, it means smth goes wrong.\n", | |
"\n", | |
"\n", | |
"Some cases:\n", | |
"\n", | |
"- Learning rate too high. Try to decrease it, for examle, 0.01 => 0.001\n", | |
"- Semantic error in algorithm (e.g., adding to gradient instead of subtract).\n", | |
"\n", | |
"\n", | |
"As shown from results above the estimated weights are slightly differ from ground truth values $ w_0 = 2 $ and $ w_1 = 3 $.\n", | |
"\n", | |
"It was estimated intentionally to demonstrate how two approaches of solving the same task differs.\n", | |
"\n", | |
"Plot below demonstrates input data, ground truth line, and predicted line.\n", | |
"\n", | |
"To calculate weight more accurately, change learning rate $ \\alpha = 0.1 $ and increase #iterations to 100." | |
] | |
}, | |
{ | |
"metadata": { | |
"scrolled": false, | |
"trusted": true, | |
"id": "uk-0ta1GcAQd", | |
"outputId": "2bfd4fff-e5f8-4349-c7f2-464cb9d44421", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 447 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"# Our formula (1.3)\n", | |
"y = lambda x, w: X.dot(w).T.squeeze()\n", | |
"\n", | |
"plt.plot(X[:, 1], Y, 'ro', label='Samples')\n", | |
"plt.plot(X[:, 1], y(X, W), linestyle='solid', label='Predicted')\n", | |
"plt.plot(X[:, 1], y(X, W_true), linestyle='dashed', label='Ground truth')\n", | |
"plt.legend()" | |
], | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.legend.Legend at 0x7b1f5f7d3ac0>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 12 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABkBElEQVR4nO3dd3xO5//H8dedvRNBSIjYs0RQahVFUTVKKTrorlJUq6XfKqo1WtVapTrwa42iRotW0camRewZe2+Zsu77/P64KxozSZPcd5L38/HIQ865r3PO5+Tkzv12rnOuYzIMw0BEREQkhzjYugARERHJXxQ+REREJEcpfIiIiEiOUvgQERGRHKXwISIiIjlK4UNERERylMKHiIiI5CiFDxEREclRTrYu4FYWi4UzZ87g7e2NyWSydTkiIiKSDoZhEBMTQ1BQEA4O9z63YXfh48yZMwQHB9u6DBEREcmEkydPUrx48Xu2sbvw4e3tDViL9/HxsXE1IiIikh7R0dEEBwenfo7fi92FjxtdLT4+PgofIiIiuUx6LpnQBaciIiKSoxQ+REREJEcpfIiIiEiOsrtrPtLDMAxSUlIwm822LkXslKOjI05OTrpdW0TEDuW68JGUlMTZs2eJj4+3dSli5zw8PAgMDMTFxcXWpYiIyL/kqvBhsVg4evQojo6OBAUF4eLiov/Zym0MwyApKYmLFy9y9OhRypUrd98Bb0REJOfkqvCRlJSExWIhODgYDw8PW5cjdszd3R1nZ2eOHz9OUlISbm5uti5JRET+kSv/O6j/xUp66PdERMQ+6a+ziIiI5CiFDwGsI9ItWrTI1mWIiEg+kH/Dh9kM4eEwe7b13xy4bffixYv07NmTEiVK4OrqStGiRWnRogXr16/P9m2LiIjYi1x1wWmWWbAA+vaFU6duziteHMaNgw4dsm2zHTt2JCkpiRkzZlC6dGnOnz/PqlWruHz5crZtU0RExN7kvzMfCxbAk0+mDR4Ap09b5y9YkC2bvXbtGmvXrmX06NE0adKEkJAQateuzaBBg2jbti0AY8eOpWrVqnh6ehIcHMzrr79ObGxs6jqmT5+On58fS5YsoUKFCnh4ePDkk08SHx/PjBkzKFmyJAUKFKBPnz5pBmArWbIkw4cPp2vXrnh6elKsWDEmTZp0z3pPnjxJ586d8fPzw9/fn3bt2nHs2LHU18PDw6lduzaenp74+flRv359jh8/nrU/NBERyVJmi8HY3w8wftUhm9aRv8KH2Ww942EYt792Y16/ftnSBePl5YWXlxeLFi0iMTHxjm0cHBwYP348e/bsYcaMGfzxxx+88847adrEx8czfvx45syZw2+//UZ4eDhPPPEEy5YtY9myZXz//fd89dVXzJ8/P81yn376KaGhoURERDBw4ED69u3LihUr7lhHcnIyLVq0wNvbm7Vr17J+/Xq8vLxo2bIlSUlJpKSk0L59exo1asTOnTvZuHEjr7zyisZcERGxY+ejE+j29SbG/xHJFysPEnkh9v4LZRfDzkRFRRmAERUVddtr169fN/bu3Wtcv349cyv/80/DsMaMe3/9+ed/2oe7mT9/vlGgQAHDzc3NqFevnjFo0CBjx44dd20/b948o2DBgqnT06ZNMwAjMjIydd6rr75qeHh4GDExManzWrRoYbz66qup0yEhIUbLli3TrPupp54yWrVqlToNGAsXLjQMwzC+//57o0KFCobFYkl9PTEx0XB3dzeWL19uXL582QCM8PDwjP8QctB//n0REckjwg9cMMI+/N0IeXeJUXnwr8aiiFNZvo17fX7fKn+d+Th7NmvbZVDHjh05c+YMP//8My1btiQ8PJwaNWowffp0AFauXEnTpk0pVqwY3t7ePPvss1y+fDnNUPIeHh6UKVMmdbpIkSKULFkSLy+vNPMuXLiQZtt169a9bXrfvn13rHPHjh1ERkbi7e2desbG39+fhIQEDh8+jL+/Pz169KBFixa0adOGcePGcTabfmYiIpJ5KWYLo3/bT/fv/uJKXBKVA735pY4L7fatybGbLe4kw+FjzZo1tGnThqCgoDvenrlgwQIeffRRChYsiMlkYvv27VlUahYIDMzadpng5uZG8+bNGTx4MBs2bKBHjx4MGTKEY8eO8fjjj1OtWjV++ukntm7dmnpdRlJSUuryzs7OadZnMpnuOM9isWS6xtjYWGrWrMn27dvTfB08eJBu3boBMG3aNDZu3Ei9evX48ccfKV++PJs2bcr0NkVEJGuduXadLlM3MTn8MADPBphZMLY7pR9vCt26QZMmULJktl3reC8ZDh9xcXGEhobe9YLFuLg4GjRowOjRo/9zcVmuYUPrXS13uzbBZILgYGu7HFK5cmXi4uLYunUrFouFzz77jIceeojy5ctz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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "BDiRBV4ecAQd" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Optional Tensoflow and Keras\n", | |
"===\n", | |
"\n", | |
"At the end let's see how to solve this task by means of high-level machine learning frameworks like [Tensorflow](https://www.tensorflow.org) and [keras](https://keras.io/models/model/)" | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "RtkDM2TkcAQe", | |
"outputId": "223cb6ef-cc35-4b0e-85f3-2f51579f37a6", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 464 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"import tensorflow as tf\n", | |
"\n", | |
"model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])\n", | |
"model.compile(optimizer='sgd', loss='mean_squared_error')\n", | |
"\n", | |
"\n", | |
"history = model.fit(X[:, 1], Y, epochs=50, verbose=0)\n", | |
"plt.plot(history.history['loss'], label='keras SGD')\n", | |
"plt.plot(loss, label='manual gradient descent')\n", | |
"plt.legend()\n", | |
"print(f\"Train loss: {history.history['loss'][-1]}\")\n", | |
"print(f'Weights: {model.get_weights()}')" | |
], | |
"execution_count": 24, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Train loss: 0.006018795073032379\n", | |
"Weights: [array([[3.0699744]], dtype=float32), array([1.8100208], dtype=float32)]\n" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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rYwZM4a8PMeVhLvvvptVq1bx+uuvYxgGhmFw4MCBar/vhVJAqY5zqPEBT1YhIq5gmlBS4JlHHe/HOn/+fFq2bMmPP/7IQw89xIMPPshtt93GpZdeysaNGxk2bBh33nknp06dAsBut9OmTRs+/PBDduzYwbRp0/jTn/7EBx98UGm/K1asYP/+/axYsYL58+czb968SuGjNkJCQpg3bx47duzg9ddf5x//+AevvfZard+fkpLCrbfeyqhRo9iyZQv3338/Tz755FntTp06xYwZM3j33XfZvn07kZGR5OXlMW7cOL7//nvWrVtHx44duf76650/nna7nVtuuQVfX1+SkpKYM2cOjz/+eI31ZGdnc80119C3b182bNjA0qVLyczM5Pbbb6/Ubv78+QQFBZGUlMRLL73EX/7yF2f4Wb9+PQBz584lPT3d+fpM+fn53HjjjXTr1o3k5GSeffZZ/vCHP9SpnvT0dH79619z7733snPnTlauXMktt9xCxT1/33rrLSZOnMiECRPYunUrn376aaW7Qd92221kZWXx5ZdfkpycTL9+/Rg6dCgnTpxwttm/fz+LFy9myZIlLFmyhFWrVvHiiy8C8Prrr5OQkMB9991Heno66enpxMXF1XiML4jZCOXk5JiAmZOTU38f8vU003wm1DQ//2P9fYaI1IvCwkJzx44dZmFhoWNFcb7j77MnHsX5ta77qquuMi+//HLn67KyMjMoKMi88847nevS09NNwFy7dm21+5k4caI5evRo5+tx48aZ7dq1M8vKypzrbrvtNvOOO+5wvgbMRYsWVdqP1Wo1586dW+3nvPzyy2b//v2dr5955hmzd+/e1bZ//PHHzR49elRa9+STT5qAefLkSdM0TXPu3LkmYG7evLna/ZimadpsNjMkJMT87LPPTNM0za+++sr09vY2Dx8+7Gzz5ZdfVvpeKSkpJmBu2rTJNE3TfO6558xhw4ZV2m9aWpoJmLt37zZN8+z/JqZpmgMHDjQff/xx5+uqjt2Z3n77bTMiIuKXP5Omab711lt1qic5OdkEzAMHDlT5GbGxseaTTz5Z5bbvvvvODA0NNYuKiiqtv+iii8y3337bNE3Hf7/AwEAzNzfXuf2Pf/yjOXjwYOfrq666ynzkkUdq/K5n/f07TV1+v3Uhrjo6gyIiHtCrVy/nspeXFxEREfTs2dO5LioqCoCsrCznujfeeIN//etfpKamUlhYSElJyVmjabp3746Xl5fzdUxMDFu3bq1Tbe+//z6zZs1i//795OfnU1ZWRmhoaK3fv3v3bgYOHFhp3aBBg85q5+vrW+k4AGRmZvLUU0+xcuVKsrKysNlsnDp1itTUVAB27txJXFwcsbGxzvckJCTUWM+WLVtYsWIFwcHBZ23bv38/nTp1AjirlpiYmErHvzZ27txJr1698Pf3r7a+c9UzbNgwhg4dSs+ePRk+fDjDhg3j1ltvpUWLFmRlZXHkyBGGDh1a7XfNz88nIiKi0vrCwkL279/vfN2+fXtCQkIu6Lu6igJKddQHRaTp8AmEPx3x3GfXpbmPT6XXhmFUWmcYBoCz4+jChQv5wx/+wKuvvkpCQgIhISG8/PLLJCUlnXO/p3c+NQzDeamgwun9S9auXcvYsWP585//zPDhw7FarSxcuJBXX321Tt+vNgICApzfs8K4ceM4fvw4r7/+Ou3atcPPz4+EhARKSkrO+3Py8/O56aabmDFjxlnbYmJinMvnOnaucq56vLy8WLZsGWvWrOHrr79m9uzZPPnkkyQlJdGyZctz7jsmJoaVK1eetS0sLMy57K7vWhsKKNU5fbp703TcRFBEGifDAN8gT1dRL3744QcuvfRSfve73znXnf4v4tpq1aoV6enpztd79+519nMBWLNmDe3atavUZ+Tgwbr9A65z58588cUXldZV12fjTD/88ANvvvkm119/PQBpaWmVOo927dqVtLQ00tPTneFi3bp1Ne6zX79+/N///R/t27e/oJE9Pj4+2Gy2Gtt07dqV//znPxQVFTnPopxZX23qMQyDyy67jMsuu4xp06bRrl07Fi1axJQpU2jfvj3Lly/n6quvPut9/fr1IyMjA29v7xo78p6Lr6/vOb+rq6iTbHWscWBYoKwQ8j1zektE5Fw6duzIhg0b+Oqrr9izZw9PP/10rX/0T3fNNdfw97//nU2bNrFhwwYeeOCBSv+a7tixI6mpqSxcuJD9+/cza9YsFi1aVKfPuP/++9m1axePP/44e/bs4YMPPnB21D3zjElV3/M///kPO3fuJCkpibFjxxIQEODcnpiYSKdOnRg3bhxbtmzhu+++q7ID7ukmTpzIiRMn+PWvf8369evZv38/X331Fffcc0+dfoQrgkFGRgYnT56sss1vfvMbDMPgvvvuY8eOHXzxxRe88sordaonKSmJv/71r2zYsIHU1FQ+/vhjjh49SteuXQHHKJxXX32VWbNmsXfvXjZu3Mjs2bOdxychIYFRo0bx9ddfc+DAAdasWcOTTz7Jhg0b6vRdk5KSOHDgAMeOHavXsysKKNXx8oHQNo5l9UMRkQbq/vvv55ZbbuGOO+5g8ODBHD9+vNLZlNp69dVXiYuL44orruA3v/kNf/jDHwgM/OXy1K9+9SseffRRJk2aRJ8+fVizZg1PP/10nT4jPj6ejz76iI8//phevXrx1ltvOUOEn59fje/95z//ycmTJ+nXrx933nknDz/8MJGRkc7tFouFRYsWUVhYyKBBg/jtb3/LCy+8UOM+Y2Nj+eGHH7DZbAwbNoyePXsyefJkwsLCsFhq//P46quvsmzZMuLi4ujbt2+VbYKDg/nss8/YunUrffv25cknnzzrUs656gkNDWX16tVcf/31dOrUiaeeeopXX32VESNGAI7LYDNnzuTNN9+ke/fu3HjjjezduxdwBMAvvviCK6+8knvuuYdOnToxZswYDh486OzXVBt/+MMf8PLyolu3brRq1crZB6g+GOaZFx0bgdzcXKxWKzk5OXXqoFVn826EA9/BLf+AXrefu72INAhFRUWkpKQQHx9fqVOiNDwvvPACc+bMIS0tzdOliIvU9PevLr/f6oNSkxbtHAFFZ1BERFzizTffZODAgURERPDDDz/w8ssvV5pMTKSCAkpNwto7njXdvYiIS+zdu5fnn3+eEydO0LZtW37/+98zdepUT5clDZACSk10V2MREZd67bXX6jT7rDRf6iRbk4qhxpoLRURExK0UUGoSVn4GJecQlJ3/ZEAiIiJSNwooNQmOBO8AwIQc9TAXaWwa4SBFkUbPVX/vFFBqYhjqhyLSCFXcc+ZCpkEXkfNTMQPxmdPm15U6yZ5Li/ZwdJf6oYg0It7e3gQGBnL06FF8fHzqNOmWiJwf0zQ5deoUWVlZhIWFVbo55flQQDmXin4oGmos0mgYhkFMTAwpKSl1vl+MiFyYsLAwoqOjL3g/Cijn4rxp4AFPViEideTr60vHjh11mUfEjXx8fC74zEkFBZRzqeiDoks8Io2OxWLRVPcijZQuzJ6LzqCIiIi4nQLKuVT0QSk8CUU5nq1FRESkmVBAORe/YAhs6VhWR1kRERG3UECpDfVDERERcas6B5TVq1dz0003ERsbi2EYLF682LmttLSUxx9/nJ49exIUFERsbCx33XUXR44cqbSPEydOMHbsWEJDQwkLC2P8+PHk5+df8JepN+qHIiIi4lZ1DigFBQX07t2bN95446xtp06dYuPGjTz99NNs3LiRjz/+mN27d/OrX/2qUruxY8eyfft2li1bxpIlS1i9ejUTJkw4/29R3zQXioiIiFvVeZjxiBEjGDFiRJXbrFYry5Ytq7Tu73//O4MGDSI1NZW2bduyc+dOli5dyvr16xkwYAAAs2fP5vrrr+eVV14hNjb2PL5GPdN09yIiIm5V731QcnJyMAyDsLAwANauXUtYWJgznAAkJiZisVhISkqqch/FxcXk5uZWerhVxSUe9UERERFxi3oNKEVFRTz++OP8+te/JjQ0FICMjAwiIyMrtfP29iY8PJyMjIwq9zN9+nSsVqvzERcXV59ln+30Szx2u3s/W0REpBmqt4BSWlrK7bffjmmavPXWWxe0r6lTp5KTk+N8pKWluajKWrK2AcMLbMWQn+nezxYREWmG6mWq+4pwcvDgQb799lvn2ROA6OhosrKyKrUvKyvjxIkT1d5cyM/PDz8/v/ootXa8fMDaGrJTHf1QQmM8V4uIiEgz4PIzKBXhZO/evXzzzTdERERU2p6QkEB2djbJycnOdd9++y12u53Bgwe7uhzXUT8UERERt6nzGZT8/Hz27dvnfJ2SksLmzZsJDw8nJiaGW2+9lY0bN7JkyRJsNpuzX0l4eDi+vr507dqV6667jvvuu485c+ZQWlrKpEmTGDNmTMMcwVMhTCN5RERE3KXOAWXDhg1cffXVztdTpkwBYNy4cTz77LN8+umnAPTp06fS+1asWMGQIUMAWLBgAZMmTWLo0KFYLBZGjx7NrFmzzvMruIlzsjadQREREalvdQ4oQ4YMwTTNarfXtK1CeHg47733Xl0/2rM0m6yIiIjb6F48taU+KCIiIm6jgFJbFX1Qco9AWbFnaxEREWniFFBqK6gl+AQBJmS7eR4WERGRZkYBpbYMQ/fkERERcRMFlLpw9kM54MkqREREmjwFlLrQXCgiIiJuoYBSFy1Ou2mgiIiI1BsFlLrQUGMRERG3UECpC13iERERcQsFlLqouMRTlAOFJz1bi4iISBOmgFIXvkEQ1MqxrH4oIiIi9UYBpa7UD0VERKTeKaDUlfqhiIiI1DsFlLpy3tVYZ1BERETqiwJKXWm6exERkXqngFJXzjMoBzxZhYiISJOmgHKGwhIbx/OLq28QcbHj+eQBKKuhnYiIiJw3BZTTvPvdz3R7Zikzlu6qvlFIDPiFgmmD4/vdV5yIiEgzooBymhhrAKYJezLzq29kGNCqs2P56E73FCYiItLMKKCcpmNUMAD7svIxTbP6hq26OJ6P7nZDVSIiIs2PAspp2kcE4W0xyC8uIz2nqPqGzoBSw6UgEREROW8KKKfx9bYQ3zIIgD2ZedU3rAgoWQooIiIi9UEB5QwVl3n21tQPJbI8oJzYD2UlbqhKRESkeVFAOUPHyBAA9mbVcAYltDX4hoC9DE787KbKREREmg8FlDN0inIEFI3kERER8RwFlDNoJI+IiIjnKaCcofYjeSrOoKijrIiIiKspoJyh1iN5Irs6njWSR0RExOUUUKpQq5E8FWdQju8DW6kbqhIREWk+FFCqULuRPG3AJwjspXAixU2ViYiINA8KKFWo1Ugei0UjeUREROqJAkoVNJJHRETEsxRQqlDnkTxZOoMiIiLiSgooVajzSB6dQREREXEpBZRq1G0kz16wlbmhKhERkeZBAaUatRrJY20LPoFgK4GTGskjIiLiKgoo1aj1SJ6WnRzLmlFWRETEZeocUFavXs1NN91EbGwshmGwePHiSttN02TatGnExMQQEBBAYmIie/furdTmxIkTjB07ltDQUMLCwhg/fjz5+TUEAQ+o+0geBRQRERFXqXNAKSgooHfv3rzxxhtVbn/ppZeYNWsWc+bMISkpiaCgIIYPH05R0S+jYcaOHcv27dtZtmwZS5YsYfXq1UyYMOH8v0U9qPVInsjygKIp70VERFzGu65vGDFiBCNGjKhym2mazJw5k6eeeoqRI0cC8O9//5uoqCgWL17MmDFj2LlzJ0uXLmX9+vUMGDAAgNmzZ3P99dfzyiuvEBsbewFfx3UqRvLszcpnT2YesWEBVTfUXCgiIiIu59I+KCkpKWRkZJCYmOhcZ7VaGTx4MGvXrgVg7dq1hIWFOcMJQGJiIhaLhaSkpCr3W1xcTG5ubqWHO9RpJM+xPWC3uaEqERGRps+lASUjIwOAqKioSuujoqKc2zIyMoiMjKy03dvbm/DwcGebM02fPh2r1ep8xMXFubLsatVqJE9YO/AOAFsxnDzglrpERESaukYximfq1Knk5OQ4H2lpaW753NqN5PGClh0dy+ooKyIi4hIuDSjR0dEAZGZmVlqfmZnp3BYdHU1WVlal7WVlZZw4ccLZ5kx+fn6EhoZWeriDRvKIiIh4hksDSnx8PNHR0Sxfvty5Ljc3l6SkJBISEgBISEggOzub5ORkZ5tvv/0Wu93O4MGDXVnOBdNIHhEREc+o8yie/Px89u3b53ydkpLC5s2bCQ8Pp23btkyePJnnn3+ejh07Eh8fz9NPP01sbCyjRo0CoGvXrlx33XXcd999zJkzh9LSUiZNmsSYMWMazAieCnUfyaOAIiIi4gp1DigbNmzg6quvdr6eMmUKAOPGjWPevHk89thjFBQUMGHCBLKzs7n88stZunQp/v7+zvcsWLCASZMmMXToUCwWC6NHj2bWrFku+Dqu1zEqmL1Z+ezLymdI58iqG1UElIqRPBYv9xUoIiLSBBlmjZ0rGqbc3FysVis5OTn13h/ltWV7eH35Xm4f0IaXbu1ddSO7DV6IcYzkeXgThHeo15pEREQao7r8fjeKUTyeVPuRPBX35NGEbSIiIhdKAeUcaj2Sx9lRdqcbqhIREWnaFFDOodYjeSpmlNUZFBERkQumgHIOFSN5APZk1jCjrEbyiIiIuIwCSi2cfpmnWq26Op6P7QG73Q1ViYiINF0KKLVQcU+eGs+gtGgPXr5QegpyUt1TmIiISBOlgFILtRrJ4+UNERX35FE/FBERkQuhgFILGskjIiLiXgootVD7kTwVHWV1BkVERORCKKDUgq+3hfa1GslTMdRYI3lEREQuhAJKLXWqy0ieo7s1kkdEROQCKKDUUq1G8oTHg8UHSgsg95CbKhMREWl6FFBqqaKjbM0jeXygpUbyiIiIXCgFlFqqGGp8zpE8Ff1QNJJHRETkvCmg1JJG8oiIiLiPAkot1X4kj+7JIyIicqEUUOqgdiN5TjuDUtOlIBEREamWAkod1G4kTweweENJHuQedlNlIiIiTYsCSh3UaiSPty9EXOxYztJlHhERkfOhgFIHdR7Jo34oIiIi50UBpQ7qPpJHAUVEROR8KKDUgUbyiIiIuIcCSh1pJI+IiEj9U0Cpo1qN5Im42DGSpzgXctLcVJmIiEjToYBSR7UeyRPZzbF8ZJMbqhIREWlaFFDqqEu04wzK7ow8ymz26hu27u94PpzshqpERESaFgWUOopvGUywnzeFpTb2Ha3hLErrfo7nwxvdU5iIiEgTooBSR14Wg56trQBsScuuvmHFGZQjm8Fuq/e6REREmhIFlPPQOy4MgM1pOdU3atUFfIIcU94f2+uewkRERJoIBZTz0CeuFmdQLF4Q09uxfESXeUREROpCAeU8VJxB2Z2ZR2FJDZdvnP1Q1FFWRESkLhRQzkN0qD+RIX7Y7Cbbj9RwmUcdZUVERM6LAsp5MAzjtH4o2dU3rOgom7EVyorrvS4REZGmQgHlPPUpDyhbDtVwBiWsHQSEg70UMra5pzAREZEmQAHlPPVuEwaco6OsYZw23FiXeURERGpLAeU89WzjGMmTeuIUJwpKqm+oGWVFRETqTAHlPFkDfOjQKgiALYeyq2+ojrIiIiJ15vKAYrPZePrpp4mPjycgIICLLrqI5557DtM0nW1M02TatGnExMQQEBBAYmIie/c2vsnM+tTmMk9seUA5tgeKauivIiIiIk4uDygzZszgrbfe4u9//zs7d+5kxowZvPTSS8yePdvZ5qWXXmLWrFnMmTOHpKQkgoKCGD58OEVFRa4up15VjOSpMaAEtwJrW8B0THsvIiIi5+TygLJmzRpGjhzJDTfcQPv27bn11lsZNmwYP/74I+A4ezJz5kyeeuopRo4cSa9evfj3v//NkSNHWLx4savLqVe9TxvJc/oZorNUXOZRR1kREZFacXlAufTSS1m+fDl79uwBYMuWLXz//feMGDECgJSUFDIyMkhMTHS+x2q1MnjwYNauXVvlPouLi8nNza30aAi6xoTg42VwoqCEQycLq2+ojrIiIiJ14u3qHT7xxBPk5ubSpUsXvLy8sNlsvPDCC4wdOxaAjIwMAKKioiq9LyoqyrntTNOnT+fPf/6zq0u9YH7eXnSLCWXLoRw2p2UTFx5YdUNnR9lN7itORESkEXP5GZQPPviABQsW8N5777Fx40bmz5/PK6+8wvz58897n1OnTiUnJ8f5SEtLc2HFF6ZW/VBi+oBhgdxDkJfpjrJEREQaNZefQfnjH//IE088wZgxYwDo2bMnBw8eZPr06YwbN47o6GgAMjMziYmJcb4vMzOTPn36VLlPPz8//Pz8XF2qSzgmbDtY81Bjv2Bo2RmO7nT0Q+k8wk3ViYiINE4uP4Ny6tQpLJbKu/Xy8sJutwMQHx9PdHQ0y5cvd27Pzc0lKSmJhIQEV5dT7yrOoGw9nEOZzV59Q/VDERERqTWXB5SbbrqJF154gc8//5wDBw6waNEi/va3v3HzzTcDjhvtTZ48meeff55PP/2UrVu3ctdddxEbG8uoUaNcXU6969AyiBA/b4pK7ezJzK++Yeu+jmcFFBERkXNy+SWe2bNn8/TTT/O73/2OrKwsYmNjuf/++5k2bZqzzWOPPUZBQQETJkwgOzubyy+/nKVLl+Lv7+/qcuqdxWLQK87KD/uOs+VQNt1iQ6tu6DyDshFM03GfHhEREamSYdY4gUfDlJubi9VqJScnh9DQagKBG720dBdvrtzPmIFxvDi6V9WNykpgehuwFcNDGyHiIvcWKSIi4mF1+f3WvXhcoKIfyuaaRvJ4+0J0T8fyEQ03FhERqYkCigv0KQ8oezLzOFVSVn1DdZQVERGpFQUUF4gK9Sc61B+7CdsO1zDLre5sLCIiUisKKC7SO84KnGPCtoozKOlbwFZa/0WJiIg0UgooLuLsh1LThG3hF4FfKJQVQtZOt9QlIiLSGCmguEifNmHAOc6gWCwQWz4fiu5sLCIiUi0FFBfp0caKYcChk4Ucyy+uvqE6yoqIiJyTAoqLhPr7cFGrYAB+qukyj+5sLCIick4KKC7Uu/wyz+a0nOobVZxBydoBJafqvygREZFGSAHFhfrUZiRPaCwER4Npg4yf3FOYiIhII6OA4kIVI3m2HMqmxjsIqB+KiIhIjRRQXKhLdCi+XhayT5WSeqKGyze6s7GIiEiNFFBcyNfb4rybcY335Tn9zsYiIiJyFgUUF6u4L8+WmjrKVsyFcjIFTp2o/6JEREQaGQUUF3NOeV/TUOOAFo5ZZUETtomIiFRBAcXFKoYabzucQ6nNXn1DXeYRERGplgKKi7WPCCLU35viMju7M/Kqb+icsE0dZUVERM6kgOJiFotRabhxtU4/g1LTkGQREZFmSAGlHvSuzY0Do3uCxRsKsiDnkFvqEhERaSwUUOpB79qM5PEJgKjujuW0pPovSkREpBFRQKkHvds4RvLsycojr6i0+obtr3A8p6xyQ1UiIiKNhwJKPYgM9addRCCmCT+m1DDPSYchjuf9K9UPRURE5DQKKPXksotbAvD9vmPVN2qbABYfyEl1TNomIiIigAJKvbm8PKD8UFNA8QuGuEGO5Z9X1n9RIiIijYQCSj259KIIDAP2ZOaTmVtUfcOKyzw/qx+KiIhIBQWUehIW6EvP1o7OsjWeRYm/yvGcsgrsNcw8KyIi0owooNSjWvVDad0PfEOg8CRk/OSmykRERBo2BZR6VNEP5fu9xzCrG6Xj5QPtL3csqx+KiIgIoIBSr/q3a4Gft4WsvGL2ZeVX39DZD2WlO8oSERFp8BRQ6pG/jxeD4sOBc1zmqQgoqeugtIYOtSIiIs2EAko9u6w2w41bdYbgaCgrhEM/uqkyERGRhksBpZ5V9ENZ9/MJSm3VjNIxDOhQPppHl3lEREQUUOpbt5hQWgT6kF9cVvPdjdUPRURExEkBpZ5ZLAaX1ma4ccV8KEc2QWF2/RcmIiLSgCmguEGtpr23toaWncC0w4Hv3VSZiIhIw6SA4gYVAWVTajb5xWXVN4xXPxQRERFQQHGLuPBA2kUEUmY3Sfr5ePUN1Q9FREQEqKeAcvjwYf7f//t/REREEBAQQM+ePdmwYYNzu2maTJs2jZiYGAICAkhMTGTv3r31UUqDUatp79tfDoYFju+FnENuqkxERKThcXlAOXnyJJdddhk+Pj58+eWX7Nixg1dffZUWLVo427z00kvMmjWLOXPmkJSURFBQEMOHD6eoqOlOUlarfigBYRDbz7GsuxuLiEgz5u3qHc6YMYO4uDjmzp3rXBcfH+9cNk2TmTNn8tRTTzFy5EgA/v3vfxMVFcXixYsZM2aMq0tqEC69KALDgD2Z+WTmFhEV6l91ww5D4PAGx92N+451a40iIiINhcvPoHz66acMGDCA2267jcjISPr27cs//vEP5/aUlBQyMjJITEx0rrNarQwePJi1a9dWuc/i4mJyc3MrPRqbsEBfera2Auc4i3L6hG3V3WBQRESkiXN5QPn5559566236NixI1999RUPPvggDz/8MPPnzwcgIyMDgKioqErvi4qKcm470/Tp07Farc5HXFycq8t2i1r1Q2kzCLwDID8Tju5yU2UiIiINi8sDit1up1+/fvz1r3+lb9++TJgwgfvuu485c+ac9z6nTp1KTk6O85GWlubCit2noh/K93uPYVZ3dsTHH9olOJY1mkdERJoplweUmJgYunXrVmld165dSU1NBSA6OhqAzMzMSm0yMzOd287k5+dHaGhopUdj1L9dC/y8LWTlFbMvK7/6hs7hxuooKyIizZPLA8pll13G7t27K63bs2cP7dq1AxwdZqOjo1m+fLlze25uLklJSSQkJLi6nAbF38eLQfHhwDku81QElAPfg620/gsTERFpYFweUB599FHWrVvHX//6V/bt28d7773HO++8w8SJEwEwDIPJkyfz/PPP8+mnn7J161buuusuYmNjGTVqlKvLaXAuq81w46ieEBAOJXlweKObKhMREWk4XB5QBg4cyKJFi/jf//5Hjx49eO6555g5cyZjx/4yZPaxxx7joYceYsKECQwcOJD8/HyWLl2Kv381Q2+bkIp+KOt+PkGpzV51I4sF4q90LKsfioiINEOGWW1vzYYrNzcXq9VKTk5Oo+uPYreb9H9+GSdPlfLRAwkMaB9edcMNc2HJZGh7Kdz7pVtrFBERqQ91+f3WvXjczGIxuLQ2w40r+qEcWg/FNXSoFRERaYIUUDygVtPeh8dDWFuwl0Jq1RPYiYiINFUKKB5QEVA2pWaTX1xWfUPd3VhERJopBRQPiAsPpF1EIGV2k6Sfj1ffUAFFRESaKQUUD6nVtPfx5fflydwG+UfdUJWIiEjDoIDiIbXqhxLUEqJ7OpZTNKusiIg0HwooHpLQIQLDgD2Z+WTmFlXf8KJrHM+7v3BPYSIiIg2AAoqHtAjypVdrKwDLd2ZV37DrSMfz7qVQcsoNlYmIiHieAooHDe/huDni51uPVN+odT+wtoXSAti3zE2ViYiIeJYCigfd2DMWgLX7j3Msv7jqRoYB3Uc5lrcvdktdIiIinqaA4kFtIwLp1caK3YSl2zKqb9j9ZsfzHl3mERGR5kEBxcNu6BkDwJKfarjME9sXwtpB6SnY+7WbKhMREfEcBRQPu6GXI6AkpZwgK6+a0TyVLvMsck9hIiIiHqSA4mFtWgTSJy4M04Qvt9bmMs9XUFLgnuJEREQ8RAGlAbix/CzK5z+lV98opg+0aA9lhbrMIyIiTZ4CSgNwfXk/lPUHT5CRU9NlnvKzKLrMIyIiTZwCSgMQGxZA/3YtME34YmsNZ1G6jXI87/kaivPdUpuIiIgnKKA0EM7LPDUFlJje0CK+/DLPV26qTERExP0UUBqI63vGYBiQfPAkR7ILq25U6TLPYrfVJiIi4m4KKA1EVKg/A9uHA+e4zFMRUPbqMo+IiDRdCigNSMVlns9qGs0T3RPCO0BZkWNmWRERkSZIAaUBua5HNBYDtqRlk3aimintNZpHRESaAQWUBiQyxJ/B8RFALS/z7PsGivPcUJmIiIh7KaA0MBVT3y+p6TJPVA+IuLj8Mo9G84iISNOjgNLAjCi/zLP1cA4Hj1czpb1h/DInii7ziIhIE6SA0sBEBPtx6UUtgXOcRXGO5lkGRbluqExERMR9FFAaoFrdmyeqO0R0BFuxLvOIiEiTo4DSAA3vHo2XxWBHei4/H61mrhON5hERkSZMAaUBahHky2UXOy7z1HgWpfsox/M+XeYREZGmRQGlgarVvXkiu0HLTmArgd1fuqkyERGR+qeA0kAN7xaNj5fBrow89mVVM9fJ6Zd5dix2W20iIiL1TQGlgbIG+nBFx1ZALUfz7PsGinLcUJmIiEj9U0BpwG7oWYvRPJFdoWVnXeYREZEmRQGlAbu2exS+Xhb2ZuWzO6OGKe0rzqL89L57ChMREalnCigNWKi/D1d2clzm+XjToeob9h4DGLD/Wzi2zz3FiYiI1CMFlAbu9gFtAHh/fRpFpbaqG4XHQ6fhjuX1/3BTZSIiIvVHAaWBG9o1ijYtAsg+Vconmw9X33DQBMfz5vd0h2MREWn06j2gvPjiixiGweTJk53rioqKmDhxIhEREQQHBzN69GgyMzPru5RGycticOcl7QCYt+YgpmlW3bDD1Y47HBfnwpaFbqxQRETE9eo1oKxfv563336bXr16VVr/6KOP8tlnn/Hhhx+yatUqjhw5wi233FKfpTRqdwyMw9/Hws70XNYfOFl1I4vll7MoP/4DqgsyIiIijUC9BZT8/HzGjh3LP/7xD1q0aOFcn5OTwz//+U/+9re/cc0119C/f3/mzp3LmjVrWLduXX2V06iFBfpyc9/WAMxbk1J9w96/Bt9gOLYbUla5qToRERHXq7eAMnHiRG644QYSExMrrU9OTqa0tLTS+i5dutC2bVvWrl1b5b6Ki4vJzc2t9Ghuxl3aHoCvtmdyJLuw6kb+oY6QAo6zKCIiIo1UvQSUhQsXsnHjRqZPn37WtoyMDHx9fQkLC6u0PioqioyMjCr3N336dKxWq/MRFxdXH2U3aF2iQxkcH47NbrIg6WD1DQfd53je/QVkp7qnOBERERdzeUBJS0vjkUceYcGCBfj7+7tkn1OnTiUnJ8f5SEtLc8l+G5t7LmsPwP9+rGHIcavO0GEImHZY/0+31SYiIuJKLg8oycnJZGVl0a9fP7y9vfH29mbVqlXMmjULb29voqKiKCkpITs7u9L7MjMziY6OrnKffn5+hIaGVno0R4ldo4i1+nOioITPthypvmFFZ9mN86G0mstBIiIiDZjLA8rQoUPZunUrmzdvdj4GDBjA2LFjncs+Pj4sX77c+Z7du3eTmppKQkKCq8tpUry9LPy/BMeQ4/lrD1Q/5LjTdWBtC4UnYdv/ubFCERER1/B29Q5DQkLo0aNHpXVBQUFEREQ4148fP54pU6YQHh5OaGgoDz30EAkJCVxyySWuLqfJGTOwLa9/s5dth3PZmHqS/u3Cz25k8YKB4+GbZyDpbegzFgzD/cWKiIicJ4/MJPvaa69x4403Mnr0aK688kqio6P5+OOPPVFKoxMe5MvIPrEAzP3hQPUN+90F3v6Q8ROk/eie4kRERFzEMKu9TtBw5ebmYrVaycnJaZb9UbYfyeGGWd/jbTH44YlriAqtpjPyJxNh03+hx2i49V/uLVJEROQMdfn91r14GqHusVYGtm9Bmd1kwbqahhyXd5bd8QnkVT2EW0REpCFSQGmk7r40HoD3fkyluKyaIccxvSHuErCXwYa5bqxORETkwiigNFLDukcRHerPsfwSPv8pvfqGg8vPoiTPhbIS9xQnIiJygRRQGikfLwv/75K2AMxbU8OQ466/guBoyM+EnZ+6sUIREZHzp4DSiP16UFt8vS38dCiHTWnZVTfy8oEB9zqWf3zHbbWJiIhcCAWURiwi2I+bejmGHM9fc6D6hv3vBosPpCXBkc3uKE1EROSCKKA0cneX3+X4i63pZOUWVd0oJAq6j3Is6y7HIiLSCCigNHI921jp1zaMUpvJf5NquHtxxZDjn96HEynuKU5EROQ8KaA0Afde7hhyPPf7FE4WVDNSJ24QXHQN2EthxV/dWJ2IiEjdKaA0Adf3iKFrTCh5xWW8sWJf9Q0Tn3U8b/0A0n9yS20iIiLnQwGlCbBYDJ4Y0QWAf689SNqJU1U3jOntmPYeYPmf3VSdiIhI3SmgNBFXdmzJpRdFUGKz89qyPdU3vPpJsHjDvm8g5Tv3FSgiIlIHCihNhGH8chZl0ebD7DiSW3XDiIug/z2O5W+egcZ3r0gREWkGFFCakF5twrixVwymCS99tav6hlc9Bj5BcDhZs8uKiEiDpIDSxPxhWGe8LQYrdx9lzf5jVTcKjoSEiY7l5c+Brcx9BYqIiNSCAkoT075lEGMHO+7RM+PLXdXfo+fShyAwAo7vhc3/dWOFIiIi56aA0gQ9NLQjQb5ebDmUwxdbM6pu5B8KV/7RsbzyRSipZuSPiIiIByigNEEtg/2478oOALz81S5KbfaqGw64F8LaQl46/Pi2GysUERGpmQJKE3XfFR1oGezLgeOnWLg+repG3n6OYccA370Gp064r0AREZEaKKA0UUF+3jwytCMAr3+zl4LiajrC9rwNIrtDcQ58/5obKxQREameAkoTNmZQW9pHBHIsv5h3v6vmBoEWr1+mwP/xHcg57Lb6REREqqOA0oT5eFn443DH5G3vrN7Psfziqht2vBbaXQZlRbByuhsrFBERqZoCShN3fc9oerexUlBi4+/fVnMjQcOAxPJ782xeAFk1TPImIiLiBgooTZxhGDxePgX+gqSDHDxeUHXDuIHQ5UYw7fDtc26sUERE5GwKKM3ApRe15KpOrSi1mby0dHf1DYdOA8MCu5bAnq/cV6CIiMgZFFCaicev64LFgM+3pvPV9momb2vVGS75nWP504c07FhERDxGAaWZ6BYbyoQrLwLgTx9vrb7D7DVPQctOkJ8JX/zRjRWKiIj8QgGlGXn02o50iQ7heEEJTy7aWvV9enwCYNQcx6WebR/B9sVur1NEREQBpRnx8/bi1dt74+Nl8NX2TBZtqmbOkzb94fIpjuXPp0B+lvuKFBERQQGl2ekea3XOMPvMp9s5kl1YdcOrHoeoHnDqOCx5FKq7K7KIiEg9UEBphh646iL6xIWRV1TG4//3U9WXerx94eY5YPFxjOr56QP3FyoiIs2WAkoz5O1l4dXbe+PvY+G7vcf477qDVTeM7glDHncsf/FHTYMvIiJuo4DSTF3UKpjHr3NM4PbXL3Zx4Fg1E7hd9ijE9nPcTPDTh3SpR0RE3EIBpRkbl9CehA4RFJba+P2HW7DZqwgfXt6OSz1efrB/OWyc7/5CRUSk2VFAacYsFoOXb+tFsJ83yQdP8s7qn6tu2KqzY5ZZgK+ehJMH3FajiIg0TwoozVybFoFMu6kbAK8t28OujNyqG17yILS9FEryYfFEsNvdWKWIiDQ3CijCbf3bkNg1khKbnUff30JJWRXhw+IFo94An0A4+D38+I77CxURkWbD5QFl+vTpDBw4kJCQECIjIxk1ahS7d1e+QV1RURETJ04kIiKC4OBgRo8eTWZmpqtLkVoyDIO/3tKTFoE+7EzPZdbyvVU3DO8Aw8rvdPzNM5C53X1FiohIs+LygLJq1SomTpzIunXrWLZsGaWlpQwbNoyCgl9GiTz66KN89tlnfPjhh6xatYojR45wyy23uLoUqYPIEH+eH9UTgDdX7mP5zmoC44DxcNE1UFYE790BedXceFBEROQCGGaVs3S5ztGjR4mMjGTVqlVceeWV5OTk0KpVK9577z1uvfVWAHbt2kXXrl1Zu3Ytl1xyyTn3mZubi9VqJScnh9DQ0Posv9mZ+vFP/O/HNAJ9vfjg/gR6tLae3ejUCfjntXB8H8T2hbs/B98g9xcrIiKNSl1+v+u9D0pOTg4A4eHhACQnJ1NaWkpiYqKzTZcuXWjbti1r166tch/FxcXk5uZWekj9+MvIHlx+cUtOldi4d976qqfCDwyH33wAAeFwZBN8PAHsNvcXKyIiTVa9BhS73c7kyZO57LLL6NGjBwAZGRn4+voSFhZWqW1UVBQZGVVfLpg+fTpWq9X5iIuLq8+ymzUfLwtv/r9+dIoKJiuvmHvnrSevqPTshhEXwZj3wMvXMRX+smnuL1ZERJqseg0oEydOZNu2bSxcuPCC9jN16lRycnKcj7S0NBdVKFUJ9fdh7j2DaBXix66MPH63YCOltipG9rRLgFFvOZbX/h3Wv+veQkVEpMmqt4AyadIklixZwooVK2jTpo1zfXR0NCUlJWRnZ1dqn5mZSXR0dJX78vPzIzQ0tNJD6lfrsAD+NW4gAT5efLf3GNM+2Vb1TQV73gpXP+VY/uIx2PuNewsVEZEmyeUBxTRNJk2axKJFi/j222+Jj4+vtL1///74+PiwfPly57rdu3eTmppKQkKCq8uRC9CzjZXZv+6LxYD//ZjGnFXVzDR75R+g92/AtMGHd0PGNrfWKSIiTY/LA8rEiRP573//y3vvvUdISAgZGRlkZGRQWOjobGm1Whk/fjxTpkxhxYoVJCcnc88995CQkFCrETziXondoph2o2Om2RlLd/HZliNnNzIMuOl1aH8FlOTBe7dDbrqbKxURkabE5cOMDcOocv3cuXO5++67AcdEbb///e/53//+R3FxMcOHD+fNN9+s9hLPmTTM2P3+/Nl25v5wAF9vC+/9djAD2oef3ejUCfjnMDi+F2J6wz1favixiIg41eX3u97nQakPCijuZ7ObPPDfZJbtyKRFoA+LfncZ7VtWET5O/AzvJsKp49D5BrjjP45p8kVEpNlrUPOgSNPgZTF4fUwferWxcvJUKffMW09WXtHZDcM7lA8/9oPdn8Pi34GtimHKIiIiNVBAkVoL9PXm3XEDaB0WQMqxAm59ay0Hjxec3bDtJXDL22B4wU8L4f3/B6VVTPgmIiJSDQUUqZPIEH/eu28wbcMDST1xitFvrWX7kZyzG3a/GcYsAG9/2LMU/nMLFGa7vV4REWmcFFCkztpFBPHRAwl0jQnlWH4xY95ex7qfj5/dsPMIuHMR+IVC6hqYdyPk6a7VIiJybgoocl4iQ/1ZOOESBsWHk1dcxl3/+pGvt1dxq4J2lzpuJhgUCZlb4V/D4eQBt9crIiKNiwKKnDdrgA//vncQ13aLoqTMzgP/TeaD9VXchiCmF4z/CsLawckU+OdwyNzu/oJFRKTRUECRC+Lv48VbY/tx+4A22E147P9+4q2V+8+eFj+8A4z/GiK7Q34GzB0BqUmeKVpERBo8BRS5YN5eFmaM7sWDQy4CHDPOvvD5Tuz2M0JKSDTc8znEDYaiHPj3SNjztQcqFhGRhk4BRVzCMAwev64LT93QFYB3v0/h9x9uOfsuyAEt4M7FcPG1UFYIC38NG/8NjW++QBERqUcKKOJSv72iA3+7vTdeFoNFmw5z25y1pB4/VbmRbyD8+n/Q83awl8GnD8H//RaKcj1TtIiINDgKKOJyt/Rrw7vjBhDq783mtGyun/UdizcdrtzIywdufhuuedoxodu2j2DO5XAo2TNFi4hIg6KAIvXi6s6RfDn5Sga2b0F+cRmT39/MlA82k19c9ksjiwWu/APcuxSsbSH7IPxrGHw/E+z2avctIiJNnwKK1JvWYQH8775LmJzYEYsBH288zA2zvmNLWnblhnGD4IHvHLPP2svgm2fgvzdrUjcRkWZMAUXqlbeXhcmJnXj//gRahwVw8PgpRr+1hrdW7q88yicgDG6dC7+aDd4B8PNKeOtS2PuNp0oXEREPUkARtxjYPpwvHr6C63tGU2Y3mbF0F3f+K4nM3NPuiGwY0O8uuH8VRPWAU8dgwWj46kkoK/Fc8SIi4nYKKOI21kAf3vhNP168pScBPl78sO84I17/js+2HKk8sVurzvDb5TDofsfrtX+Hd66Cn1d5pnAREXE7wzxrys+GLzc3F6vVSk5ODqGhoZ4uR87Dvqx8Hv7fJnakO4YWD2zfgmk3dqdnG2vlhru+gE8mQuEJx+suN8Kw5yE83s0Vi4jIharL77cCinhMcZmNOSt/5q1V+ygqtWMYMLpfG/44vDNRof6/NDx1AlZOh/X/BNMGXr5wye8cI4D8Qjz3BUREpE4UUKRRSc8p5KWlu1lUPldKoK8XE6++mPGXx+Pv4/VLw6ydsHQq/LzC8TooEoZOgz5jHUOWRUSkQVNAkUZpU+pJ/rJkB5tSswHHMOWp13fhhp4xGIbhaGSasGcpfPUnOPGzY11MH7juRWiX4JG6RUSkdhRQpNEyTZNPtxzhxS93kZ7jGOEzsH0Lpl7flX5tW/zSsKwEfnwbVr0ExeVT5HcbCZdPgdg+7i9cRETOSQFFGr3CEhvvrP6ZOav2U1hqA2BQ+3B+e0U8iV2jsFjKz6jkH4Vvn3PccJDyP8rxV8KlD8PFiY6hyyIi0iAooEiTkZ5TyN++3sPizYcptTn+qHZoGcS9l8dza/82v/RRydgGP8yEbR87OtICRHaDhEnQ8zbw9vXMFxAREScFFGlyMnOLmLfmAAvWHSS3yHE/n/AgX+68pB13JrSjZbCfo2F2Gqx7CzbOh5J8x7qQGBj8APS/2zFjrYiIeIQCijRZBcVlfLAhjX9+n8Khk4UA+HpbGN2vNfdeFk/HqPJhx4XZkDwX1s2B/AzHOt9gx0y1fcZCdA/PfAERkWZMAUWavDKbna+2Z/LO6v1sOZTjXN+ztZVRfVtzU+8YIkP8HZ1pt34Ia2bD0Z2/7CCqB/S6HXrcCtbWHvgGIiLNjwKKNBumabL+wEne/e5nlu/KwlZ+A0KLAZdd3JJRfVozvEc0wb5esO8bSJ4He74Ce2n5HgyIvwJ63QFdfwX++vMkIlJfFFCkWTqeX8znW9NZtOmwcy4VAH8fC4ldo7i5b2uu7NQKn+Js2PEJ/PQBpK75ZQfe/tD5eseZlQ5Xg4//WZ8hIiLnTwFFmr0Dxwr4ZPMRPtl8mJ+PFTjXWwN8uLJTK4Z0asUVnVoSWZbpuAT00/twbM8vO/AOgPaXQ8drHcOVIy7ywLcQEWlaFFBEypmmyU+Hcli8+TCfbUnnWH5xpe3dY0MZ0rkVV3VsRV/fVHy2fQjbF0Hekco7Cu/gCCoXX+sILr6BbvwWIiJNgwKKSBXKbHY2pWWzavdRVu7JYtvh3ErbQ/y8uezillzVqSWXhWbR5vgaLPuWQeq60/qsAF5+jpDS/nKIGwyxfRVYRERqQQFFpBaO5hXz3d6jrNpzlNV7jnLyVGml7dYAH/q2DWNwrC9X+ezg4ty1+P78LeQeqrwjizdE94Q2gyBukCO0WNtoFlsRkTMooIjUkc1usvVwDqt2H+WHfcfYciib4jJ7pTaGAZ0jgxkelcPV3lvpULSdkKMbMfLSz95hSIwjrMT2dQxpjuwGobEKLSLSrCmgiFygUpudnem5bDx4ko2p2WxMPemcGO503hYYHFFIYvAB+ln2En9qGyHZOzEqpts/nX8YRHV3PCK7lQeXruAXXP9fSESkAVBAEakHWblFbEx1BJbNqdnszMglr3za/dP5U8wlfgdJDDlID69U2pamEFZ4EEtVoQXA2hbC4x0dcU9/tGivvi0i0qQooIi4gWmaHMkpYndGLrsy8thd/th/NN95Y8MKfpRwkXGELkYqffyO0NPnEB3sB7GWHa/5Q0Jifwkr1tYQWv6wtnZcMvIL1WUjEWk0FFBEPKikzE7KsQJ2ZeSScqyA1OOnOHC8gIPHT3G8oKRS23ByiTfSaW9k0s6SQXsjk4u8smhnZBBsFlTzCafxDS4PLbGO5+BICGpV/twSgiIdywEtwOJVT99YRKR2Gk1AeeONN3j55ZfJyMigd+/ezJ49m0GDBp3zfQoo0ljlFZVy8PgpDjpDSwGHswtJzykiPbuIwtKKy0AmYeQ7gouRQVsjixjjBNHGCWKM48QYJwgzahFgKvZmWCCwJQS1xAiMcNzVOaCF4+F/2nJAC8c2f6vj7IxfCHj51MOREJHmqFEElPfff5+77rqLOXPmMHjwYGbOnMmHH37I7t27iYyMrPG9CijSFJmmSW5hGem5jsCSkVNU/lxIRm4xx/OLOZZfzPH8EsrsJoEUEV0eWmKN40RxkpZGjuNBLhHly+FG/gXVZfPyw+YTjN03BHxDwC8Ewz8UL/9gLH7BWHyDHH1lfALBN8jxqFj2CXDMyuvjX/nZ28+xTWd1RJqVRhFQBg8ezMCBA/n73/8OgN1uJy4ujoceeognnniixvcqoEhzVhFkjuY7QsvxghKO5RdzLL+E3MJSsk+VkFNYSnZhKTmFpeQXFOFVdJww0xFYwsjHahRgpYAwI/+X10YBYeQTZuQTQiGBRvG5i7lANsObMosfNosvdufDB7uXH6aXL6bFF9PLF7wqnn1Oe/hiWHwwvH0xvE57tnhjeDueLV7eGF6+GF7eeHmVr/fyweLlhcXijWHxBovFMZeN4eV4tng5HoalfJ2X49mwnLbeUnm982Gc3c6wAEbl7eo3JM1UXX6/vd1UUyUlJSUkJyczdepU5zqLxUJiYiJr1649q31xcTHFxb/8zzI3N/esNiLNhWEYWAN9sAb6cHFk7YYom6ZJQYmN7FMl5BeXkV9URl75c35xGQdPe51XVMqpUhvFxSWYxbkYxflYSnLxKs3Hu6wAn7J8/GwFBFFEIMUEGsUElC8HGMUEUkyQUUQAxQRQgj8l+Bsl+FGKHyX4Gb+MfPIyy/CylYGt9permgo7BiYGJpbyZ8elOBMwcYQaOwZgYJYHmoq2AKZhlC873kv5/jDOeH1ae8c+TluHUbFYaf3pn1nBPG3bL/s7O2id2e70zz5zfaX3VdPG5BzvPWOVWeX+z1hXy4BY9b7Ox7n3c+bxPt/91FZtvltR/FC63zL1nO3qi0cCyrFjx7DZbERFRVVaHxUVxa5du85qP336dP785z+7qzyRJscwDIL9vAn2c81febvdpKjMRnGpnaIyG0WldorLn4tKbRSW2sgucyyX2kxKyuyUlNkosdkpLS3FVlKEWVqEvbQIyk5BWQlmWTGGrQTKisFWjGErxbAVY7GXYNhKsJhlWOylGPYyvMxSLGYZXvZSLGYpXqatfJ3NEXqwOZax4Y0NL+z4UIYXdrwNx2vH4/Tl014bdizl6yzYsWBWu2zBjpdR9xPRFVEETpsQsLrdNLqhDNIUJB2O9ejneySg1NXUqVOZMmWK83Vubi5xcXEerEikebNYDAJ9vQn09XQlNTNNE7vpmCnYbpqU2U3Hcvlrm2lit1P+XL7OblJqmpgmld7reG2WPzhrHXYTu90OZpljm90G9jJME7DbMXGsM00Tw7SVv8fuaIeJadodQcS0A3ZMuwkmmNjBtJe/D8Dm2Ibj8x2N7GCajhxjOs7NmKYJFVfwTROz/DxNpav6zu12cJ53wdnGKH9feSGUf9rZ+6kIWRWrTttm/LIS0/zltbP2Sm888z1nl1p5pf3MFVW0OeeKqp2x76pqquWOzt2iFruu9ee7sNdGy3ZdXbav8+GRgNKyZUu8vLzIzMystD4zM5Po6Oiz2vv5+eHn5+eu8kSkiTAMAy8DvCzq8yHS2Fg88aG+vr7079+f5cuXO9fZ7XaWL19OQkKCJ0oSERGRBsRjl3imTJnCuHHjGDBgAIMGDWLmzJkUFBRwzz33eKokERERaSA8FlDuuOMOjh49yrRp08jIyKBPnz4sXbr0rI6zIiIi0vxoqnsRERFxi7r8fnukD4qIiIhITRRQREREpMFRQBEREZEGRwFFREREGhwFFBEREWlwFFBERESkwVFAERERkQZHAUVEREQaHAUUERERaXA8NtX9haiY/DY3N9fDlYiIiEhtVfxu12YS+0YZUPLy8gCIi4vzcCUiIiJSV3l5eVit1hrbNMp78djtdo4cOUJISAiGYbh037m5ucTFxZGWlqb7/LiBjrd76Xi7l463e+l4u9f5HG/TNMnLyyM2NhaLpeZeJo3yDIrFYqFNmzb1+hmhoaH6A+5GOt7upePtXjre7qXj7V51Pd7nOnNSQZ1kRUREpMFRQBEREZEGRwHlDH5+fjzzzDP4+fl5upRmQcfbvXS83UvH2710vN2rvo93o+wkKyIiIk2bzqCIiIhIg6OAIiIiIg2OAoqIiIg0OAooIiIi0uAooJzmjTfeoH379vj7+zN48GB+/PFHT5fUJKxevZqbbrqJ2NhYDMNg8eLFlbabpsm0adOIiYkhICCAxMRE9u7d65lim4Dp06czcOBAQkJCiIyMZNSoUezevbtSm6KiIiZOnEhERATBwcGMHj2azMxMD1XcuL311lv06tXLOVlVQkICX375pXO7jnX9evHFFzEMg8mTJzvX6Zi7zrPPPothGJUeXbp0cW6vz2OtgFLu/fffZ8qUKTzzzDNs3LiR3r17M3z4cLKysjxdWqNXUFBA7969eeONN6rc/tJLLzFr1izmzJlDUlISQUFBDB8+nKKiIjdX2jSsWrWKiRMnsm7dOpYtW0ZpaSnDhg2joKDA2ebRRx/ls88+48MPP2TVqlUcOXKEW265xYNVN15t2rThxRdfJDk5mQ0bNnDNNdcwcuRItm/fDuhY16f169fz9ttv06tXr0rrdcxdq3v37qSnpzsf33//vXNbvR5rU0zTNM1BgwaZEydOdL622WxmbGysOX36dA9W1fQA5qJFi5yv7Xa7GR0dbb788svOddnZ2aafn5/5v//9zwMVNj1ZWVkmYK5atco0Tcfx9fHxMT/88ENnm507d5qAuXbtWk+V2aS0aNHCfPfdd3Ws61FeXp7ZsWNHc9myZeZVV11lPvLII6Zp6s+3qz3zzDNm7969q9xW38daZ1CAkpISkpOTSUxMdK6zWCwkJiaydu1aD1bW9KWkpJCRkVHp2FutVgYPHqxj7yI5OTkAhIeHA5CcnExpaWmlY96lSxfatm2rY36BbDYbCxcupKCggISEBB3rejRx4kRuuOGGSscW9Oe7Puzdu5fY2Fg6dOjA2LFjSU1NBer/WDfKmwW62rFjx7DZbERFRVVaHxUVxa5duzxUVfOQkZEBUOWxr9gm589utzN58mQuu+wyevToATiOua+vL2FhYZXa6pifv61bt5KQkEBRURHBwcEsWrSIbt26sXnzZh3rerBw4UI2btzI+vXrz9qmP9+uNXjwYObNm0fnzp1JT0/nz3/+M1dccQXbtm2r92OtgCLShE2cOJFt27ZVumYsrte5c2c2b95MTk4OH330EePGjWPVqlWeLqtJSktL45FHHmHZsmX4+/t7upwmb8SIEc7lXr16MXjwYNq1a8cHH3xAQEBAvX62LvEALVu2xMvL66yex5mZmURHR3uoquah4vjq2LvepEmTWLJkCStWrKBNmzbO9dHR0ZSUlJCdnV2pvY75+fP19eXiiy+mf//+TJ8+nd69e/P666/rWNeD5ORksrKy6NevH97e3nh7e7Nq1SpmzZqFt7c3UVFROub1KCwsjE6dOrFv3756//OtgILjfy79+/dn+fLlznV2u53ly5eTkJDgwcqavvj4eKKjoysd+9zcXJKSknTsz5NpmkyaNIlFixbx7bffEh8fX2l7//798fHxqXTMd+/eTWpqqo65i9jtdoqLi3Ws68HQoUPZunUrmzdvdj4GDBjA2LFjncs65vUnPz+f/fv3ExMTU/9/vi+4m20TsXDhQtPPz8+cN2+euWPHDnPChAlmWFiYmZGR4enSGr28vDxz06ZN5qZNm0zA/Nvf/mZu2rTJPHjwoGmapvniiy+aYWFh5ieffGL+9NNP5siRI834+HizsLDQw5U3Tg8++KBptVrNlStXmunp6c7HqVOnnG0eeOABs23btua3335rbtiwwUxISDATEhI8WHXj9cQTT5irVq0yU1JSzJ9++sl84oknTMMwzK+//to0TR1rdzh9FI9p6pi70u9//3tz5cqVZkpKivnDDz+YiYmJZsuWLc2srCzTNOv3WCugnGb27Nlm27ZtTV9fX3PQoEHmunXrPF1Sk7BixQoTOOsxbtw40zQdQ42ffvppMyoqyvTz8zOHDh1q7t6927NFN2JVHWvAnDt3rrNNYWGh+bvf/c5s0aKFGRgYaN58881menq654puxO69916zXbt2pq+vr9mqVStz6NChznBimjrW7nBmQNExd5077rjDjImJMX19fc3WrVubd9xxh7lv3z7n9vo81oZpmuaFn4cRERERcR31QREREZEGRwFFREREGhwFFBEREWlwFFBERESkwVFAERERkQZHAUVEREQaHAUUERERaXAUUERERKTBUUARERGRBkcBRURERBocBRQRERFpcBRQREREpMH5/0/Q0J7Jv/6ZAAAAAElFTkSuQmCC\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "8mFOCrKZcAQe" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Depending on initialization step result above may vary. Sometime we can see from plot above, keras [SGD](https://en.wikipedia.org/wiki/Stochastic_gradient_descent) (stochastic gradient descent) acts more accurately at the start of the training but after 20 epochs the error becomes general for both implementations.\n", | |
"\n", | |
"\n", | |
"# Normalization\n", | |
"\n", | |
"The examples above considered small set of real numbers\n", | |
"\n", | |
"$$ X \\in R^1 $$\n", | |
"\n", | |
"e.g, 1, 2, 3, and so on up to 16 for which algorithm converges.\n", | |
"\n", | |
"but if we take 17 numbers or more we'll get a situation when algorithm diverges instead of converge.\n", | |
"Examples below demonstrates this." | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "rs968yebcAQe", | |
"outputId": "5d7e90b0-3ab1-4e24-946e-c0e21d13c516", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 481 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"X = np.arange(1, 17, dtype=np.float32) # numbers from 1 to 16 inclusive\n", | |
"Y = f(X)\n", | |
"\n", | |
"model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])\n", | |
"model.compile(optimizer='sgd', loss='mean_squared_error')\n", | |
"history = model.fit(X, Y, epochs=50, verbose=0)\n", | |
"\n", | |
"print(f\"Train loss: {history.history['loss'][-1]}\")\n", | |
"print(f'Weights: {model.get_weights()}')\n", | |
"\n", | |
"plt.plot(history.history['loss'])" | |
], | |
"execution_count": 31, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Train loss: 0.47485244274139404\n", | |
"Weights: [array([[3.1256194]], dtype=float32), array([0.5653501], dtype=float32)]\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7b1ef203fb50>]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 31 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "D4KM3SXacAQe", | |
"outputId": "19fe54ad-d812-400f-c7f9-74adaea8c830", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 496 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"n = 18\n", | |
"X = np.arange(1, n, dtype=np.float32) # numbers from 1 to 17 inclusive\n", | |
"Y = f(X)\n", | |
"\n", | |
"model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])\n", | |
"model.compile(optimizer='sgd', loss='mean_squared_error')\n", | |
"history = model.fit(X, Y, epochs=50, verbose=0)\n", | |
"\n", | |
"print(f\"Train loss: {history.history['loss'][-1]}\")\n", | |
"print(f'Weights: {model.get_weights()}')\n", | |
"\n", | |
"plt.plot(history.history['loss'], )" | |
], | |
"execution_count": 33, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Train loss: 64721100.0\n", | |
"Weights: [array([[-866.23315]], dtype=float32), array([-74.01796], dtype=float32)]\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7b1ef0799780>]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 33 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "NhkfYGgNcAQf" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"**Normalization** solves this issue.\n", | |
"There are types of normalization\n", | |
"\n", | |
" - Mean normalization\n", | |
" - Min-max scaling\n", | |
" - Standartization" | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"id": "lGPvg99-cAQf", | |
"outputId": "f3e8b0ff-3cc5-4875-c4ea-5dc9137a4212", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 515 | |
} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"# #Samples, you can change this value to make sure it is not hurt model' convergence.\n", | |
"n = 18\n", | |
"\n", | |
"X = np.arange(1, n, dtype=np.float32) # numbers from 1 to (n-1) inclusive\n", | |
"\n", | |
"# Normalization / feature scaling\n", | |
"# Most effective normalization for SGD\n", | |
"X_norm = (X - np.mean(X)) / np.std(X)\n", | |
"\n", | |
"Y = f(X)\n", | |
"\n", | |
"model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])\n", | |
"model.compile(optimizer='sgd', loss='mean_squared_error')\n", | |
"# Train the model. For more accurate results try to increase #epochs, say to 500\n", | |
"history = model.fit(X_norm, Y, epochs=50, verbose=0)\n", | |
"\n", | |
"print(f\"Train loss: {history.history['loss'][-1]}\")\n", | |
"print(f'Weights: {model.get_weights()}')\n", | |
"\n", | |
"# Let's calc ground truth value for input value 19 using by f() lambda function\n", | |
"ground_truth = f(19)\n", | |
"\n", | |
"# In contrast of line above, for predicted value we must normalize input data firstly\n", | |
"predicted = model.predict([(19-np.mean(X))/np.std(X)])[0][0]\n", | |
"print('Ground truth: {}, predicted: {}'.format(ground_truth, predicted))\n", | |
"\n", | |
"plt.plot(history.history['loss'])" | |
], | |
"execution_count": 37, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Train loss: 151.15052795410156\n", | |
"Weights: [array([[8.897633]], dtype=float32), array([18.43908], dtype=float32)]\n", | |
"1/1 [==============================] - 0s 64ms/step\n", | |
"Ground truth: 59, predicted: 36.601295471191406\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7b1ef219c1c0>]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 37 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "kuVQOccbcAQf" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"# Summary\n", | |
"\n", | |
"Gradient descent is simple to implement and effective method of solving linear regression tasks (but not limited to), represented in formula (1.3).\n", | |
"Simple linear regression (2) can also be multivariate linear regression (e.g., #features > 1 )\n", | |
"\n", | |
"$$ {\\large y = f(x) = w_0 \\cdot x_0 + w_1 \\cdot x_1 + \\dots + w_n \\cdot x_n } \\tag{1.4} $$\n", | |
"\n", | |
"# Exercise\n", | |
"\n", | |
"Play with learning rate $ \\alpha $ and #iterations to estimate weights close enough to the ground truth (accuracy ~ 95%)." | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"language": "python", | |
"display_name": "Python 3", | |
"name": "python3" | |
}, | |
"language_info": { | |
"pygments_lexer": "ipython3", | |
"nbconvert_exporter": "python", | |
"version": "3.6.4", | |
"file_extension": ".py", | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"name": "python", | |
"mimetype": "text/x-python" | |
}, | |
"colab": { | |
"name": "Simple linear regression example in Python", | |
"provenance": [] | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment