{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "**Perceptron**\n", "\n", "Let us try to understand the Perceptron algorithm using the following data as a motivating example." ], "metadata": { "id": "orCQMRG2tX19" } }, { "cell_type": "code", "source": [ "from sklearn import datasets\n", "X, y = datasets.make_blobs(n_samples=150,n_features=2,\n", " centers=2,cluster_std=1.05,\n", " random_state=2)\n", "#Plotting\n", "fig = plt.figure(figsize=(10,8))\n", "plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], 'r^')\n", "plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], 'bs')\n", "plt.xlabel(\"feature 1\")\n", "plt.ylabel(\"feature 2\")\n", "plt.title('Random Classification Data with 2 classes')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 530 }, "id": "QSySpCQFsybb", "outputId": "fd96ce44-efb6-4f86-f4c3-27367af63300" }, "execution_count": 4, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text(0.5, 1.0, 'Random Classification Data with 2 classes')" ] }, "metadata": {}, "execution_count": 4 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "source": [ "There are two classes, red and green, and we want to separate them by drawing a straight line between them. Or, more formally, we want to learn a set of parameters theta to find an optimal hyperplane(straight line for our data) that separates the two classes." ], "metadata": { "id": "bdR4KMFatiQN" } }, { "cell_type": "markdown", "source": [ "**Unit Step Function, which is defined as**\n", "\n", "![1_e1p4fPMT5fO5xgNi0pAvsg[1].webp](data:image/webp;base64,UklGRoIEAABXRUJQVlA4IHYEAADQGQCdASq6AC0APrVMoUwnJCMiJzIOiOAWiWUA1E/ZC1lFVJ/9Hv//6f+3VbqN6m/Rp30D1d7Wv8Z0UfsdIx9gPy/C/Kz4QfWvzSf9h6b95v4f6mP+Q9BX6H9FX0v+wvwIG8/gRrRqqS2oCQVQnMi8RMJQ6djC/EJaraiDoEA8TLGmHAl6OsvRpdmqLYC8yu1PXPxUNmI82OXXRgSU5HavBjZa7XCQO2KSrBWoSu8uPvQOYrjT/2CzKejiF+zP8tRNQKZJuXfpczxCTJn9h/d4QLIhFyI8AAD+9M398Nm7cTMFqPF123f3dPH7KUWCYjnPGSlG6HRFfbYMo5POLiFxNn2l7qlaeeTvcArhVwzlK9umg95DkbmL/50gaBBfWNpRsh7MS0KOvmLmBW4dmWu/4oaNQ+9CEuEsK9gDUtvd1/cV91PlFy9Qi3X9z+VMVhH31pWa/xzhz3uSd/QLa/sL6oHIdFWkiUe3aao+/J2L6inYzWjV9lLgTvNAAafvII/sjzJQZUimxYe6KX4e1MsTxlDqAfhPV5KPvKtVU5gE+J8cef00HA8W7sHbm6ypqvru3JVEN6AmU+IQYOLJHD3BHRPXMD7M9LEjwulzurgw2d+cGRmJOiyo919TScNq65Y/mEFA7E8CrvxPylR08Vm/I6QFxGTd1/I3mPdfyGXseFqbYrTKWl6rFRINoH/ZqGOn9Bea8dIx+ofvMLz1SdgvA0m+wy9bCgn6HBDOuFXw94FdKoIN+AkKilFMzJqv0PKMnH68ljsH7qdy9g9bhl1SRpFAVhOJClBac4JPIJrw0QT/Ly+loMSGRGFDDn6VU5cIYT7oFV1MmWpkwaQq7CXxnl6KbFz1TfPcoe7ZljnUqJ+UGiEn4IHhEbmJQHcBonQDLvINs8y8xRStYISlOzM8J76sn8Y0CxHJXuCkNdQjX5FS5XpREo8WRPyzm2fMKyAMq0NTv7ehocLuTWcKJyg5pNtbXuJ3c8cbLvNszTgAJHs+CQ9MaiIim8UEXYc0X8sQULmVVgRdpA7yF5HMktMDHVL6pZVsu7SLcyRxIn28wmusHK3Tj1E/1S88RRRGLuIWvssImf/aZJAgwmgQeyUXkaBT8lne1+wpoyLLTFHsvu23L7np6p/P3DgcksSIoDbOd7S9Dodie9UOT+54zouTiKyQe2b5dvR7Us5axJ23vxPDmBcgSr5jI6OWPSsew94QJ1QxVsDMT6PGQrL81figQZDuZKAXdrGLaiQt6jTI6o2wEymq81EHiHVjbplZ/tOLclwEGJt8zYljPL5uDIhpHKeUDYu8+h7fBxFgGNSOInR+bLwF/IA/LswXTfKH2Bgqw/bZT5AsQge6wUzUgoPdu8bY/aZpruxM7Xwzpy7QDngHPTvKLVCcUXconYtwBz1SxmlfJZyzh8DCMXmZkBfhPn6e9gPv4fdHqZYXpimZzlMLq5mqUjrXtCK21854CfpXmk8pwZ8BrqF9cdeoe6J7K2boAJ0EJKmI1QubZfdRHQ4aBQAAAA==)\n", "\n", "Where:\n", "\n", "![1_sSxVjxnTEvGQTSHASOD68Q[1].webp](data:image/webp;base64,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)\n", "\n", "This function says that if the output(theta.X) is greater than or equal to zero, then the model will classify 1(red for example)and if the output is less than zero, the model will classify as 0(green for example). And that is how the perception algorithm classifies.\n", "\n", "Let’s look at the Unit Step Function graphically:\n", "\n", "![0_cF7NmzL19MwQxBpO[1].webp](data:image/webp;base64,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)\n", "\n", "We can see for z≥0, g(z) = 1 and for z<0, g(z) = 0.\n", "\n", "Let’s code the step function." ], "metadata": { "id": "Yct5UWwht0KA" } }, { "cell_type": "code", "source": [ "def step_func(z):\n", " return 1.0 if (z > 0) else 0.0" ], "metadata": { "id": "er6zSV-Rs5jY" }, "execution_count": 5, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Perceptron Update Rule**\n", "\n", "The perception update rule is very similar to the Gradient Descent update rule. The following is the update rule:\n", "\n", "![1_E-GGbrUh1IQQGk9kmbG4OA[1].webp](data:image/webp;base64,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)" ], "metadata": { "id": "etAtAHYVuzK1" } }, { "cell_type": "code", "source": [ "def perceptron(X, y, lr, epochs):\n", " \n", " # X --> Inputs.\n", " # y --> labels/target.\n", " # lr --> learning rate.\n", " # epochs --> Number of iterations.\n", " \n", " # m-> number of training examples\n", " # n-> number of features \n", " m, n = X.shape\n", " \n", " # Initializing parapeters(theta) to zeros.\n", " # +1 in n+1 for the bias term.\n", " theta = np.zeros((n+1,1))\n", " \n", " # Empty list to store how many examples were \n", " # misclassified at every iteration.\n", " n_miss_list = []\n", " \n", " # Training.\n", " for epoch in range(epochs):\n", " \n", " # variable to store #misclassified.\n", " n_miss = 0\n", " \n", " # looping for every example.\n", " for idx, x_i in enumerate(X):\n", " \n", " # Insering 1 for bias, X0 = 1.\n", " x_i = np.insert(x_i, 0, 1).reshape(-1,1)\n", " \n", " # Calculating prediction/hypothesis.\n", " y_hat = step_func(np.dot(x_i.T, theta))\n", " \n", " # Updating if the example is misclassified.\n", " if (np.squeeze(y_hat) - y[idx]) != 0:\n", " theta += lr*((y[idx] - y_hat)*x_i)\n", " \n", " # Incrementing by 1.\n", " n_miss += 1\n", " \n", " # Appending number of misclassified examples\n", " # at every iteration.\n", " n_miss_list.append(n_miss)\n", " \n", " return theta, n_miss_list" ], "metadata": { "id": "DMhTVpVJs-9B" }, "execution_count": 6, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Plotting Decision Boundary**\n", "\n", "We know that the model makes a prediction of:\n", "\n", "y=1 when y_hat ≥ 0\n", "\n", "y=0 when y_hat < 0\n", "\n", "So, theta.X = 0 is going to be our Decision boundary." ], "metadata": { "id": "_pfdnansvFaY" } }, { "cell_type": "code", "source": [ "def plot_decision_boundary(X, theta):\n", " \n", " # X --> Inputs\n", " # theta --> parameters\n", " \n", " # The Line is y=mx+c\n", " # So, Equate mx+c = theta0.X0 + theta1.X1 + theta2.X2\n", " # Solving we find m and c\n", " x1 = [min(X[:,0]), max(X[:,0])]\n", " m = -theta[1]/theta[2]\n", " c = -theta[0]/theta[2]\n", " x2 = m*x1 + c\n", " \n", " # Plotting\n", " fig = plt.figure(figsize=(10,8))\n", " plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"r^\")\n", " plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\")\n", " plt.xlabel(\"feature 1\")\n", " plt.ylabel(\"feature 2\")\n", " plt.title(\"Perceptron Algorithm\")\n", " plt.plot(x1, x2, 'y-')" ], "metadata": { "id": "qrgabRyttD-E" }, "execution_count": 8, "outputs": [] }, { "cell_type": "code", "source": [ "theta, miss_l = perceptron(X, y, 0.5, 100)\n", "plot_decision_boundary(X, theta)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 513 }, "id": "jIvmhjwqtLdm", "outputId": "f82146c7-2342-41f5-b536-063a26ceddb8" }, "execution_count": 9, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmYAAAHwCAYAAAAM+6NJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3xddf3H8fcnq013S0domyZN907aNAkOUEHFiQsFRHEgAoKooDIUEARlqDhQQRH94V4oCKKgCKJkNmmbpCtt06ZN0ibdM02a7++Pe4tpm3GT3HvPufe+no9HHu0duedz70173/l8xzHnnAAAAOC9JK8LAAAAQADBDAAAwCcIZgAAAD5BMAMAAPAJghkAAIBPEMwAAAB8gmAGABFgZs7MZkbosf9qZpf1cvtPzeyrkTg2gMgimAHok5nVm9kRMztoZjuCH/wjvK7rBDO73cx+7sFxp5tZp5n9IJrHdc69xTn3s2ANHzGzl6J5fACRQzADEKp3OOdGSFoqKV/Sl/rzzRbgyf85ETz2hyXtkfQBMxsSgcc/iZevIYDo4B84gH5xzm2X9FdJCyXJzIrM7L9mttfMVprZ607c18z+ZWZ3mdl/JB2WlGNmC8zsWTPbHey+3Ry8b5KZ3WhmG81sl5n91szGBW/LDg4NXmFmjWbWZGY3BG87X9LNCoSjg2a2spdjv8rMysxsX/DPV51S651m9h8zO2Bmfzez8T29DmZmCgSzL0lql/SOXu57hpk9aWb7g8f9atcuVwh1nfo8/mVml5vZPEk/lHRW8Lnv7XLYsWb2VPC5lJjZjC6P6czsajPbELz9TjObEXwf9wdf+7Seng+AyCGYAegXM8uU9FZJlWY2RdJTkr4qaZykGyT9wcwmdPmWD0m6QtJISTskPSfpGUmTJc2U9I/g/a6V9C5J5wRv2yPpwVMO/3pJsyS9SdIXzew859wzku6W9Bvn3Ajn3JIejn0gWOt3JJ0h6ZuSnjKzM7rc/xJJH5U0UVJa8Pn05DWSpkr6taTfSupxzlfweRySlBG83yv3DYbPvurq+jy2nLjSObdG0pWSXg4+9zFdvuciSV+RNFZSnaS7TqnpzZKWSSqS9AVJD0u6VFKmAqH74l6eD4AIIZgBCNWfgh2ZlyS9oEAYulTS0865p51znc65ZyWVKxDcTvipc67GOdch6e2Smp1z33DOHXXOHXDOlQTvd6WkW5xz25xzbZJul/Q+M0vp8lhfcc4dcs6tlvSo+g4PXY/9JkkbnHOPOec6nHO/krRWJ3e6HnXOrXfOHVEgbOX28tiXSfqrc26PpF9KOt/MJp56JzNLlvReSbc55w4752ol/azLXd4WQl2vPA/nXHsfz/mEx51zpcHn/otunsu9zrn9zrkaSdWS/u6c2+Sc26dARzQvxOMACKOUvu8CAJKkdznnnut6hZllSbrQzLqGiFRJz3e53NDl75mSNvbw+FmSHjezzi7XHZc0qYfH2iJpUR81d73/ZHXpNnV5jCldLjd3+fthSd0ucDCzdEkXSrpckpxzL5vZVgU6bg+ccvcJCvxf27WW/tbVoP7r67ns6PL3I91czhjAMQEMEh0zAIPRIOkx59yYLl/DnXNf73Ifd8r9c3p5rLec8lhDg3PaTsjs8vdpkhq7OUZXXa9vVCD8dTVN0nb137sljZL0fTNrNrNmBYJUd8OZLZI6FBj2PKHr8wilrp6eX1+3AYgxBDMAg/FzSe8wszebWbKZDTWz15nZ1B7u/xdJZ5rZZ8xsiJmNNLPC4G0/lHRXsAsnM5tgZhec8v1fNrNhZrZAgblgvwlev0NSdh8rFp+WNNvMLjGzFDP7gKT5wZr66zJJP1GgY5cb/Hq1pCVmdlIXzzl3XNIfJd0erH2uAosGwlXXDklTmawPxAeCGYABc841SLpAgVWRLQp0vT6vHv5vcc4dkPRGBeZPNUvaoMCEfkn6tqQnJP3dzA5IKpZUeMpDvKDARPZ/SLrfOff34PW/C/65y8xW9HDsXQrMcbte0i4FJry/3TnX2o+nrOCCh3MlPeCca+7yVaHAoobuumbXSBodfM6PSfqVpLYw1fVPSTWSms2sX88FgP+Yc3TBAfibmWVL2iwpNTiZPaaZ2T2SMpxzva3kBJCA6JgBQISZ2VwzW2wBBZI+Lulxr+sC4D+sygSAyBupwPDlZAXmhH1D0p89rQiALzGUCQAA4BMMZQIAAPgEwQwAAMAn4mKO2fjx4112drbXZQAAAPSpoqKi1Tk3obvb4iKYZWdnq7y83OsyAAAA+mRmp56G7RUMZQIAAPgEwQwAAMAnCGYAAAA+QTADAADwCYIZAACATxDMAAAAfIJgBgAA4BMEMwAAAJ8gmAEAAPgEwQwAAMAnCGYAAAA+QTADAADwCYIZAACATxDMAAAAfIJgBgAA4BMEMwDoQUaGZHb6V0aG15UBiFcEMwDowY4d/bseAAaLYAYAAOATBDMAAACfIJgBAAD4BMEMAADAJwhmANCDSZP6dz0ADBbBDAB60NwsOXf6V3OzdzWxhQcQ3whmABBD2MIDiG8EMwAAAJ8gmAEhYggJABBpBDMgRAwh9Y3wCgCDQzADEDaEVwAYHIIZAMQQtvAA4luK1wUAAELn5VYdACKPjhkAAIBPEMyAEDGEBACINIYygRAxhNS3SZO6n+hPeAWA0BDMAIQN4RUABoehTAAAAJ8gmAHAILCpLoBwIpgBwCCwqS6AcCKYAQAA+ATBDAAAwCcIZgAAAD5BMAMAhA2LIYDBIZgBwCBwRoiTsRgCGBw2mAWAQWBTXQDh5NuOmZmdb2brzKzOzG70uh4AAIBI82UwM7NkSQ9Keouk+ZIuNrP53lYFoL+YbwQA/ePLYCapQFKdc26Tc+6YpF9LusDjmgD0E/ONAKB//BrMpkhq6HJ5W/A6AICPsRgCGBy/BrM+mdkVZlZuZuUtLS1elwPAhxhKjb7mZsm5079YJAGExq/BbLukzC6Xpwave4Vz7mHnXL5zLn/ChAlRLQ5AbGAoFUCs8WswK5M0y8ymm1mapIskPeFxTQAAABHly2DmnOuQdI2kv0laI+m3zrkab6sC0F/MNwKA/vHtBrPOuaclPe11HQAGjnlFANA/vuyYAQD6xuIGIP4QzADErXgfSmVxAxB/CGYABs2vnRu2bgAQawhmAAaNzg1O5dewDvgdwQwAEHaEdWBgCGYAACCh+anDSzADgBgV74sbgGjxU4eXYAYAHhrIb+onvufUD41Jk6K7uMFPXQYgXhDMAAwanZuBG8hv6uH47T4cocpPXQYgXvh2538AsYPtJ2JPpEPVpEndPxZhHegdwQwAoiwjI/67SoR1YGAYygSAKIulUMY8MiQCP03HoGMGAOgR88iQCPzU4aVjBgA+FMtzsWK5dsBrBDMA6ENvw3mRGurbsSOyw4bhHLrhXKRA+DCUCSBh9TQJf9Kkk8NFOLe0GIhIDBsSngB/omMGIGF5NX9qIF0pJt0DiYFgBgBR1tx8+vCfc6F9b7Qn3TNfDIgughkAxJiBzg8byHy4EyESQHQwxwwAYsxA54cNZuiWnfyB6KBjBiAuhXO1ZG8dqnCubvRzyOlp+DWUkMgmtUDo6JgBMS7UlYWJJpTuUKhdoGi9jl2PYxadY0YDm9QCoaNjBsQ4PvT670THRhp4FyjS/HSKmGiiu4ZERzADfIoPqMjzc3gdzNBhLOMXDSQ6ghngU3xAha67EIvTJWoXDoglzDEDEPMIq6GJ924bEA/omAEAIopOHRA6ghkQ4/jQiy2JOHcwUefLAQNBMANiHB96vestoHoRXpk72Dt+0UCiY44Z4FPstB4eBNTYwvuFREfHDAiTcA9R0QkLHV0WAPGCjhkQJgxReYewCiBe0DEDAADwCYIZAEQRw64AekMwA+JYIm7N4HfMHQTQG4IZEMf8OO+NsAgAPSOYAWHCEFVo/BgWIy0SYZSAC8QnVmUCYcJQFHoSiTCaiAEXSAR0zAAAAHyCYAYAAOATBDMgjjHvDQBiC8EMiGN+3JqBsJhYWKQA9A/BDEBU+TEshlN3QaQngwmjvX1vRoY3gai7Y7JIAegfghmAbsV6p8Or+nsLHOEMo719744d/Q9E4Xi9CFvA4BHMAHQr1jsd0ai/P90xv4v19xuIFwQzABET6123vhBaAIQbwQxAxPTVhYn34Ab/4WcOfkcwAxB2Jz78+sLwWeLyahUuP3PwO4IZgLDjQ+50kQgivW094sW2JL0dM15X4QLhxrkyAXRr0qTuA1as7Dfmdf3ORf4Y4Qw34Xi9CFvA4BHMAHQr1j9ko1G/1+EvnGL9/QbiBcEMQNTFYnDpDmEGQLgxxwxAVHWdX8TpmRBt/MzB73wXzMzsPjNba2arzOxxMxvjdU1AvIjWVgG9ffh1raHrMGDXCeKJ3IliO4fIivdTgiH2+S6YSXpW0kLn3GJJ6yXd5HE9QNyI1lYBXT/8uoa0gZwqKNHw+gCJzXfBzDn3d+dcR/BisaSpXtYDYHAIFImDbh8weL4LZqf4mKS/dneDmV1hZuVmVt7S0hLlsgAAp6LbBwyeJ6syzew5Sd39DnWLc+7PwfvcIqlD0i+6ewzn3MOSHpak/Pz8KOwYBAAAEFmeBDPn3Hm93W5mH5H0dknnOheNbRoBAAC857uhTDM7X9IXJL3TOXfY63qAeOLnrQJ6qiHe5y2d+vx6MtD3KN5fPyDe+C6YSfqepJGSnjWzKjP7odcFAfHCi60C+goUJ7bJ6KmGaM9binaQ6e15hOM9Yt4XEFt8t/O/c26m1zUACJ9Y2x+KIDNw8XSKKsArfuyYAUDcSKShRDZvBQaPYAYAEUQHDkB/EMwAAAB8gmAWoi1b7tLhw+u8LgNIOJFYSeqn4cVIr5T180pcAKcjmIXgyJHN2rLlLpWWzldt7aUENCCKIjFvqbfhxWgHmUjPy2Le18D4KbwjsRDMQpCePl1FRZuVmfk5tbY+HgxoH9ShQ2u9Lg1AmBFkupdoQYW5gfAKwSxEaWmTNGPGfcGAdr1aW/+ksrL5qq29RIcOrfG6PAA+FS9DiQQVIDoIZv2UljZRM2bcq6KiemVmfl6trU+orGyBamsv1qFDtV6XB8Bn6MAB6A+C2QClpU3QjBn3BDtoX1Br65MqK1uompqLdOhQjdflAQCAGEQwG6RAQPu6iorqNW3ajdq9+ymVlS1STc0HCGiAT8XL8CKA+EMwC5O0tPHKybk7GNBu0u7dTwcD2vt18GC11+UB6KK5ufsQtmNH/E5mR/8Q3uEVglmYpaaeoZycu4IB7Wbt3v2MyssXqabmQh08uNrr8gAEMZm9fxItqDA3EF4hmEVIIKB9VUVF9crK+pJ27/6byssXq7r6fTp4cJXX5QFAvxBUgOggmEVYauo4TZ9+ZzCgfVl79jyr8vIlqq5+rw4eXOl1eQB6EYm9uxJtPzAA/WPOOa9rGLT8/HxXXl7udRkhaW/fo23bHtC2bQ/o+PH9Gj/+3crKulUjR+Z6XRqQUMx6vu3Ef4uh3CcSxwUQ38yswjmX391tdMyiLDV1rKZP/0qwg3ab9uz5pyoq8lRd/W4dOFDpdXkAAMBDBDOPBALa7Soqqld29u3as+d5VVQs1erV7yKgAVEQjsnsDEsCCDeGMn2ivX2vtm//jrZt+5Y6OvbqjDPeqezs2zRy5FKvSwMSVl/DjgMZlmQoEwBDmTEgNXWMsrNvDXbQ7tC+fS+qomKZVq9+pw4cqPC6PAAAEAUEM59JSRmt7OwvBwPandq37yVVVORr9ep3aP/+2O4KArEmEnt3Jdp+YJHCMDLiFUOZPtfRsV/bt39XDQ3fUEfHHo0b9zZlZ9+mUaOWe10akPAYlvQOrz1iGUOZMSwlZZSysm5RUVG9pk+/S/v3v6wVKwq0atXbtH9/qdflAQCAMCKYxYhAQLs5GNDu1v79xVqxolCrVr1V+/eXeF0ekJD6MyzJ0BuAUDCUGaM6Og5o+/YH1dBwvzo6dmncuPOVlXWbRo8u8ro0AN1g6C28eD0RyxjKjEMpKSOVlXWjioo2Kyfn6zpwoFyVlWdp5crztW/fy16XBwAABoBgFuNSUkZq2rQvqrBws3Jy7tHBgxWqrHyVVq58s/bt+6/X5QFARLC6FfGKYBYnUlJGaNq0LwQD2r06eLBSlZWv1sqVb9K+ff/xujwACKvm5sCQ5alfzc1eVwYMDsEszgQC2ueDQ5z36eDBlaqsfI1Wrnyj9u59yevyAABALwhmcSo5ebimTbtBRUWbNGPG/Tp4cJWqql6rqqrztHfvv70uD0g4DL0BCAXBLM4lJw9XZub1KirarBkzvqFDh6pVVXW2qqrO1d69L3pdHpAwGHoDEAqCWYJITh6mzMzPBTto39ShQzWqqjpHVVWv1969L3hdHgAAEMEs4QQC2meDAe1bOnx4raqqXqfKytdpz55/eV0eAAAJjWCWoAIB7TMqLNykmTMf0JEj67Vy5euDAe15xcPGwwAAxBqCWYJLTk7X1KnXqbBwo2bO/HYwoL1BVVWv0549/ySgAQAQRQQzSDoR0D4d7KB9R0eO1GnlynNVVXWO9uz5BwENgC9xDlLEG4IZTpKcPFRTp14b7KB9V0eObNLKleepqups7d79HAENr+ADEX6wY0f/rgf8jmCGbgUC2jUqLKzTrFnf05Ejm7Vq1RtVWfla7d79LAENfCACQAQQzNCr5OShmjLlUyoq2qhZsx5UW9sWrVr1JlVWvka7d/+dgAYAQBgRzBCSpKQhmjLl6mAH7ftqa2vQqlVvVmXlq7V7998IaAAAhAHBDP0SCGhXqbBwg2bN+oHa2rZp1arzVVn5Ku3a9QwBDQCAQSCYYUACAe1KFRbWafbsh9TW1qjVq9+iFSvO0q5dfyWgAYgKzkGKeEMww6AkJaVp8uQrVFi4QbNnP6xjx5q1evVbtWJFkXbtepqAFsf4QIQfcA5SxBuCGcIiENA+ocLC9Zo9+0dqb9+p1avfphUrCrVr11MEtDjEByIAhB/BDGEVCGiXq6BgvebM+bHa21u0evXbtWJFgVpb/0JAAwCgFwQzRERSUqrOPPPjwYD2iNrbd6m6+h2qqFiu1tYnCWgAAHSDYIaICgS0j6mgYJ3mzPmJOjr2qLr6naqoyFdr6xMENAAAuiCYISoCAe2jKihYqzlzHlVHxz5VV1+gioplam39MwENAAARzBBlgYD2ERUUrNXcuT9VR8d+VVe/SxUVS9XS8icCGgAgoRHM4ImkpBRlZFwWDGg/0/HjB1VT826Vl+eppeVxOdfpdYkAAEQdwQyeCgS0D2v58jWaO/f/1Nl5WDU17wkGtD8S0AAACYVgBl8IBLQPafnyWs2d+5g6O4+qpua9Ki/PVUvLHwhoAICEQDCDrwQC2qUqKKjVvHk/V2dnm2pq3qfy8iXaufP3BDQAQFzzbTAzs+vNzJnZeK9rQfSZJWvSpA8GA9ov1NnZrtraC4MB7XcENABAXPJlMDOzTElvkrTV61rgrUBAu0QFBTWaN++Xcq5DtbXvV1nZYu3c+VsCGgAgrvgymEn6lqQvSGLvBEg6EdAu1vLl1Zo371eSOlVb+wGVlS3Szp2/kXPHvS4RAIBB810wM7MLJG13zq30uhb4TyCgXaTly1dr/vxfS5Jqay9SWdki7djxawIaACCmeRLMzOw5M6vu5usCSTdLujWEx7jCzMrNrLylpSXyRcNXzJI1ceIHggHtN5KStGbNxSorW6gdO35FQAMAxCTz007rZrZI0j8kHQ5eNVVSo6QC51xzT9+Xn5/vysvLo1Ah/Mq5TrW0/EFbttyhQ4eqNWzYXGVlfVkTJ35AZslelwcAwCvMrMI5l9/dbb4aynTOrXbOTXTOZTvnsiVtk7S0t1AGSJJZkiZOvFD5+Ss1f/7vZJaqNWs+qNLSBdqx4xd00AAAMcFXwQwYrEBAe5/y86u0YMHvlZQ0RGvWXKrS0vlqbv65Ojs7vC4RAIAe+TqYBTtnrV7XgdhjlqQJE96r/PxKLVjwByUlDdXatR9SWdl8NTc/RkADAPiSr4MZMFiBgPaeYED7o5KShmnt2g+rrGyempv/j4AGAPAVghkSQiCgvVv5+Su0YMHjSk4eobVrL1NZ2Tw1Nf2UgAYA8AWCGRJKIKC9S8uWrdDChX9ScvJIrVv3UZWWzlVT06Pq7Gz3ukQAQAIjmCEhmZnGj79Ay5ZVaOHCPyslZbTWrftYMKD9hIAGAPAEwQwJLRDQ3qlly8q1cOETSkkZq3XrPq7S0jlqanqEgAYAiCqCGaATAe0dWrasTAsXPqnU1DO0bt3lKi2drcbGHxPQAABRQTADuggEtLdr6dJSLVr0F6WmTtD69Z8IBrQfqbPzmNclAgDiGMEM6IaZ6Ywz3qalS0u0aNFTSk2dqPXrr1BJyWw1Nj5MQAMARATBDOhFIKC9VUuXFmvRoqeVlpah9es/qZKSWWpsfIiABgAIK4IZEIJAQHuLli59WYsW/VVDhkzW+vVXqqRklrZv/6E6O9u8LhEAEAcIZkA/BALa+crL+68WL/6bhgyZog0brgoGtB8Q0AAAg0IwAwbAzDRu3JuUl/cfLV78dw0ZkqkNG65WSclMbd/+fQIaAGBACGbAIAQC2huVl/eSFi9+VkOGZGnDhk8FA9qDOn78qNclAgBiCMEMCINAQDtPeXn/1pIlz2no0Gxt2HCNSkpmatu27xHQAAAhIZgBYWRmGjv2XOXmvqglS/6h9PQc1dVdq5KSGdq27bsENABArwhmQAQEAtoblJv7gpYs+afS02eqru7TwYD2HR0/fsTrEgEAPkQwAyIoENBer7y8F7RkyfNKT5+lurrrggHt2wQ0AMBJCGZAlIwd+zrl5f1LS5Y8r2HD5qiu7jMqKclRQ8MDBDQAgCSCGRB1Y8e+Trm5zys3918aNmyeNm78rIqLp6uh4Vs6fvyw1+UBADzUYzAzs2Qz+6SZ3Wlmrz7lti9FvjQgvo0Zc45yc/+p3NwXNHz4Am3c+DkVF+eooeGbBDQASFC9dcweknSOpF2SvmNm3+xy23siWhWQQMaMOVu5uf9Qbu6LGj58oTZuvD7YQfuGjh8/5HV5AIAo6i2YFTjnLnHOPSCpUNIIM/ujmQ2RZNEpD0gcY8a8Vrm5zyk3998aMWKxNm68QcXF07V16/0ENABIEL0Fs7QTf3HOdTjnrpBUJemfkkZEujAgUY0Z8xotWfKs8vJe0ogRudq06fPBgHYfAQ0A4lxvwazczM7veoVz7g5Jj0rKjmRRAKTRo1+tJUv+rry8/2jEiDxt2vQFFRdna+vWe9XRcdDr8gAAEWDOOa9rGLT8/HxXXl7udRlARO3b97Lq67+iPXv+ptTU8crMvEGTJ39KKSk0sAEglphZhXMuv7vb2C4DiBGjR5+lJUueUV7eyxo5Ml+bNt2o4uJsbdnydXV0HPC6PABAGBDMgBgzenSRFi/+q5YuLdaoUQXavPmmYED7GgENAGIcwQyIUaNGFWrx4qe1dGmJRo0q0ubNNwcD2t3q6NjvdXkAgAHoM5hZwKVmdmvw8jQzK4h8aQBCMWpUgRYvfkpLl5Zq1KiztHnzLcGAdhcBDQBiTCgds+9LOkvSxcHLByQ9GLGKAAzIqFHLtXjxX7R0aZlGj361Nm/+koqLs1Vf/1V1dOzzujwAQAhCCWaFzrlPSToqSc65PeqyxxkAfxk1Kl+LFj2pZcvKNXr0a1Rf/+VgQLuTgAYAPhdKMGs3s2RJTpLMbIKkzohWBWDQRo5cpkWLnggGtLNVX39rMKDdofb2vV6XBwDoRijB7DuSHpc00czukvSSpLsjWhWAsAkEtD9r2bIKjR59jurrbwsGtK8Q0ADAZ3rdYNbMkiQVSdot6VwFzpH5D+fcmuiUFxo2mAVCd+BApbZsuUOtrX9ScvJoTZ36GU2d+hmlpo7xujQASAi9bTDb587/ZlbpnMuLSGVhQjAD+u/AgapgQHtcycmjNHXqdZo69bNKTR3rdWkAENcGu/P/P8zsvWZmYa4LgIdGjszVwoV/VH5+lcaOPU9bttyp4uJsbd78ZbW37/a6PABISKF0zA5IGi6pQ4GVmSbJOedGRb680NAxAwbv4MFVqq+/Q62tf1By8khNmfJpZWZ+Tqmp47wuDQDiyqA6Zs65kc65JOdcmnNuVPCyb0IZgPAYMWKxFi78vfLzV2ncuDdr69a7VFycrU2bblF7+y6vywOAhBBKx+zs7q53zr0YkYoGgI4ZEH4HD67Wli13qqXl90pOHq4pU67V1KmfU1raeK9LA4CYNtjJ/092uThUUoGkCufcG8JX4uAQzIDIOXiwOhjQfhcMaNdo6tTrCWgAMECDCmbdPFimpAecc+8NR3HhQDADIu/QoRpt2fJV7dz5GyUlDdOUKdcoM/N6paVN8Lo0AIgpg12VeaptkuYNriQAsWb48AWaP/9XWr68WuPHv1MNDfequHi6Nm78oo4da/G6PACIC6EMZX5XwdMxKRDkciXVO+cujXBtIaNjBkTfoUNrgh20XykpKV1TpnxKmZk3KC1totelAYCvDXaO2WVdLnYoEMr+E8b6Bo1gBnjn0KG1XQLaUE2ZcrUyMz9PQAOAHgx2KHOMc+5nwa9fOOf+Y2bXhblGADFq+PC5mj//5yooqNWECe9RQ8M3VVw8XXV1N+jYsR1elwcAMSWUYHZZN9d9JMx1AIhxw4bN0bx5j6mgYI0mTHivtm37VjCgXa+2tmavywOAmNDjUKaZXSzpEkmvkfTvLjeNlNTpnDs38uWFhqFMwH8OH16vLVvu0o4dP1dS0hBNnnylMjO/oCFDMrwuDQA8NaA5ZmaWJWm6pK9JurHLTQckrXLOdYS70IEimAH+dfjwhi4BLbVLQDvT69IAwBNh3cfMjwhmgP8dPlynrVvvUnPzY0pKStWZZ35S06Z9kYAGIOEMavK/mRWZWZmZHTSzY2Z23Mz2h79MAPFs2LCZmjv3URUWrtPEiRdr+/bvqaQkRxs2XKe2tkavywMAXwhl8v/3JF0saYOkdEmXS3owkkUBiF/p6TM0d+5PggHtEm3f/qCKi3O0YcOn1da23evyAMBTIe3875yrk5TsnDvunHtU0vmRLRcwngEAACAASURBVAtAvAsEtEdUWLhekyZdqsbGH6i4eIY2bLiWgAYgYYUSzA6bWZqkKjO718w+G+L3DZiZXWtma82sxszujeSxAHgrPT1Hc+f+WAUF65WR8SE1Nv5QxcU5Wr/+Gh09us3r8gAgqkIJWB8K3u8aSYckZUqK2AnMzez1ki6QtMQ5t0DS/ZE6FgD/SE+frjlzfqSCgg3KyLhMTU0PqaRkhtav/5SOHm3wujwAiIqQVmWaWbqkac65dREvyOy3kh52zj0X6vewKhOIP0eO1Gvr1q+pufknkpJ05pkf17RpN2no0EyvSwOAQRnsqsx3SKqS9Ezwcq6ZPRHeEk8yW9JrzazEzF4ws+URPBYAn0pPz9acOQ+psLBOGRkfVVPTj4MdtKt09OhWr8sDgIgIZSjzdkkFkvZKknOuSoGNZwfMzJ4zs+puvi6QlCJpnKQiSZ+X9Fszs24e4wozKzez8paWlsGUA8DHhg7N0pw5P1RhYZ3OPPPjamp6RCUlM7Vu3ZU6enSL1+UBQFj1OZRpZsXOuSIzq3TO5QWvW+WcWxyRgsyekXSPc+754OWNkoqccz2mL4YygcRx9OhWbd36dTU1PSLJKSPjo8rKullDh2Z5XRoAhGRQQ5mSaszsEknJZjbLzL4r6b9hrfBkf5L0ekkys9mS0iS1RvB4AGLI0KHTNHv294MdtE+oufmnwQ7aFTpypN7r8gBgUEIJZtdKWiCpTdIvJe2T9JkI1vQTSTlmVi3p15Iuc/Fw3igAYTV0aKZmz35QhYUbdeaZn1Rz889UWjpL69Z9QkeObPa6PAAYkN5OYv6Yc+5DZnadc+7bUa6rXxjKBHD06DY1NNyjxsYfSTquSZMuU1bWzUpPz/G6NAA4yUCHMpeZ2WRJHzOzsWY2rutXZEoFgIEZOnSqZs36roqKNmry5Ku0Y8fPVVIyW2vXflxHjmzyujwACElvHbNPS7pKUo6k7ZK6rox0zjnf/BpKxwzAqdraGrV16z1qbHxIznUoI+PDysq6RenpM7wuDUCC661jFsqqzB84566KSGVhQjAD0JNAQLtXTU0PqbOzXRkZH9K0abdo2LCZXpcGIEENalWm30MZAPRmyJDJmjXrARUWbtLUqddq585fq7R0rtas+YgOH67zujwAOElET0YOAH4xZMiZmjnzWyos3KypUz+tlpbfqrR0jtasuUyHD2/wujwAkEQwA5BghgzJ0MyZ3wx20D6jlpbfBTtoH9bhw+u9Lg9AgiOYAUhIgYD2DRUVbdbUqZ9VS8vvVVo6T7W1l+rw4XVelwcgQRHMACS0tLRJmjnzfhUVbVZm5ufU2vq4Skvnq7b2gzp0aK3X5QFIMAQzAFAgoM2YcV8woF2v1tY/qaxsvmprL9GhQ2u8Lg9AgiCYAUAXaWkTNWPGvSoqqldm5ufV2vqEysoWqLb2Yh06VOt1eQDiHMEMALqRljZBM2bcE+ygfUGtrU+qrGyhamou0qFDNV6XByBOEcwAoBeBgPZ1FRXVa9q0G7V791MqK1ukmpoPENAAhB3BDABCkJY2Xjk5dwcD2k3avfvpYEB7vw4erPa6PABxgmAGAP2QmnqGcnLuCga0m7V79zMqL1+kmpoLdfDgaq/LAxDjCGYAMACBgPZVFRXVKyvrS9q9+28qL1+s6ur36eDBVV6XByBGEcyAgWpqks45R2pu9roSeCg1dZymT78zGNC+rD17nlV5+RJVV79XBw+u9Lo8ADGGYAYM1J13Si+9FPgTCS8Q0O4IBrRbtWfPcyovz1V19Xt04ECV1+UBiBHmnPO6hkHLz8935eXlXpeBRNLUJOXkSEePSunp0qZNUkaG11XBR9rb92jbtm9r27YHdPz4Po0f/y5lZd2mkSNzvS4NgMfMrMI5l9/dbXTMgIG4806pszPw9+PH6ZrhNKmpYzV9+u0qKqpXdvbt2rPneVVU5Gn16nfpwIFKr8sD4FN0zID+6totO4GuGfrQ3r5X27d/R9u2fUsdHXt1xhnvVHb2bRo5cqnXpQGIMjpmQDh17ZadQNcMfUhNHaPs7FuDHbQ7tG/fi6qoWKbVq9+pAwcqvC4PgE8QzID+evll6dixk687dkz673+9qQcxJSVltLKzvxwMaHdq376XVFGRr9Wr36H9++n8A4mOoUwA8FBHx35t3/5dNTR8Qx0dezRu3NuUnX2bRo1a7nVpACKEoUwA8KmUlFHKyrpFRUX1mj79Lu3f/7JWrCjQqlVv0/79pV6XByDKCGYA4AOBgHZzMKDdrf37i7ViRaFWrXqr9u8v8bo8AFFCMAMSGWcv8J2UlJHKyropGNC+pv37S7ViRZFWrXqL9u0r9ro8ABFGMAMSGWcv8K1AQLtRRUX1ysn5ug4cKFdl5VlaufJ87dv3stflAYgQghkwWLHadWpqkh59NLD1x6OPxl79CSIlZYSmTfuiCgs3KyfnHh08WKHKyldp5co3a98+VgID8YZgBgxWrHadOHtBTAkEtC8EA9q9OniwUpWVr9bKlW/Svn3/8bo8AGHCdhnAYMTqOTM5e0HMO378kLZv/4EaGu5Te/tOjR17nrKybtOYMa/xujQAfWC7DCBSYrXrxNkLYl5y8nBNm3aDioo2acaM+3Xw4CpVVb1WVVXnae/ef3tdHoABIpgBA3VijtaJswAcOxY7c7U4e0HcSE4erszM61VUtFkzZnxDhw5Vq6rqbFVVnau9e1/0ujwA/UQwAwYqlrtOlZWSc6d/VVZ6XRkGKDl5mDIzPxfsoH1Thw7VqKrqHFVVvUF7977gdXkAQkQwAwaKrhN8KBDQPhsMaN/S4cNrVFX1OlVVvV579vzL6/IA9IHJ/wAQx44fP6Kmpoe1des9OnasSaNHn6Ps7Ns1duzrvC4NSFhM/geABJWcnK6pU69TYeFGzZz5bR05sl4rV75elZXnaM+e5xUPv5wD8YRgBgAJIBDQPq3Cwk2aOfM7OnKkTitXvkFVVedoz55/EtAAnyCYAUACSU4eqqlTrw120L6rI0c2aeXKc1VVdbb27PkHAQ3wGMEMABJQIKBdo8LCOs2a9T0dObJZK1eep8rK12r37mcJaIBHCGYAkMCSk4dqypRPqahoo2bNelBtbVu0atWbVFn5Gu3e/XcCGhBlBDMAgJKShmjKlKuDHbTvq62tQatWvVmVla/W7t1/I6ABUUIwAwC8IhDQrlJh4QbNmvUDtbVt06pV56uy8lXatesZAhoQYQQzAMBpAgHtShUW1mn27IfU1tao1avfohUrztKuXX8loAERQjCLZ01N0jnnxMa5GwH4UlJSmiZPvkKFhRs0e/bDOnasWatXv1UrVhRp166nCWhAmBHM4tmdd0ovvRQb524E4GuBgPYJFRau1+zZP1J7+06tXv02rVhRqF27niKgAWFCMItXTU3So48GTrL96KN0zQCERSCgXa6CgvWaM+fHam9v0erVb9eKFQVqbf0LAQ0YJIJZvLrzzkAok6Tjx+maAQirpKRUnXnmx4MB7RG1t+9SdfU7VFGxXK2tTxLQgAEimMWjE92yY8cCl48do2sGICICAe1jKihYpzlzfqKOjj2qrn6nKiry1dr6BAEN6CeCWTzq2i07we9dMxYqADEtENA+qoKCtZoz51F1dOxTdfUFqqhYptbWPxPQgBARzOLRyy//r1t2wrFj0n//6009oWChAhAXAgHtIyooWKu5c3+qjo79qq5+lyoqlqml5U8ENKAPFg//SPLz8115ebnXZWCgmpqknBzp6FEpPV3atEnKyPC6KgBh0NnZoZ07f6ktW+7UkSN1GjEiV1lZt2r8+AtkRm8AicnMKpxz+d3dxr8KeI+FCkDcSkpKUUbGh7V8+RrNnft/On78kGpq3qPy8qVqafmjnOvs+0GABEIwg7dYqAAkhEBA+5CWL6/V3LmPqbPziGpq3qvy8jy1tPyBgAYE+S6YmVmumRWbWZWZlZtZgdc1IYJicaGCl1gkgRgXCGiXqqCgVvPm/VydnUdVU/M+lZfnaufO3xPQkPB8F8wk3SvpK865XEm3Bi8jXsXiQgUvsUgCccIsWZMmfTAY0H6hzs5jqq29UOXlS7Rz5+8IaEhYfgxmTtKo4N9HS2r0sBZEWmWl5NzpX5WVXlfmP/05mwOdNcSIQEC7RAUFNZo375dyrkO1te9XWdli7dz5WwIaEo4fg9lnJN1nZg2S7pd0U3d3MrMrgkOd5S0tLVEtEPBEfxZJ0FlDjAkEtIu1fHm15s37laRO1dZ+QGVli7Rz52/k3HGvSwSiwpPtMszsOUnd7Ydwi6RzJb3gnPuDmb1f0hXOufN6ezy2y0Dc67qlyAk9bS1y6vYjL78sffrT0m9+wzYkiBnOHVdLy+9VX3+HDh+u1bBh85SVdasmTrxQZslelwcMiu+2y3DOneecW9jN158lXSbpj8G7/k4Sk/+B/iySOLWz9sEPhr97dmKodOVKhkwREWbJmjjxA1q+fLXmz/+NpCStWXOxysoWaseOX9FBQ9zy41Bmo6Rzgn9/g6QNHtYC+EOoiyS6236kpia0eWn9cWKoNBKhLxTMoUsYZkmaOPH9Wr58lebP/63MUrRmzSXBgPZLAhrijh+D2SckfcPMVkq6W9IVHtcDeC/URRLdddZOCNc2JF0XIUQi9IWCOXQJJxDQLlR+/krNn/87maVqzZoPqrR0gXbs+AUBDXHDd8HMOfeSc26Zc26Jc67QOVfhdU1AxIS789NdZ+2EcG3e6/Xec/1ZnYq4Ewho71N+fpUWLPi9kpKGaM2aS1VaOl/NzT9XZ2eH1yUCg+K7YAYklHB3frp21q66SkpLO/n2wQaoU4dKT4jmGRs4hRcUCGgTJrxX+fmVWrDgD0pKGqq1az+ksrL5am5+jICGmEUwA7wS6c5PJDbvjcZQaW84hRdOEQho7wkGtD8qKWmY1q79sMrK5qm5+f8IaIg5BDPAK5Hu/ERi896+hkojfcYGr4dR4VuBgPZu5eev0IIFjys5eYTWrr0sGNB+RkBDzCCYJSpWtXkrVjs/PYW9aJ2xgVN4oQ+BgPYuLVu2QgsX/knJySO1du1HVFo6V01NPyWgwfcIZomKVW2R1VfwpfMzMJzCCyEyM40ff4GWLavQwoV/VkrKaK1b91GVls5RU9Oj6uxs97pEoFsEs0TEqrbI6yv40vlBovGoSx8IaO/UsmXlWrjwCaWkjNW6dR8LBrSfENDgOwSzRMSqtsgKJfjS+UGi8bhLHwho79CyZWVauPBJpaaeoXXrPh4MaI8Q0OAbBLNEE6tzm2IJwRc4mY+69IGA9nYtXVqqRYv+otTU8Vq37nKVls5WY+OP1dnZw+IWIEoIZomGuU2RRfAFTufDX1bMTGec8TYtXVqiRYueUmrqRK1f/wmVlMxWY+OPCGjwDMEs0YRjbhMrOntG8AVO5vNfVgIB7a1aurRYixY9rbS0DK1ff4VKSmapsfEhAhqijmCWaMIxtymWV3RGOlQyqR84WYz8shIIaG/R0qUva/HiZzRkyGStX3+lSkpmafv2H6qzs83rEpEgCGboHx/NFRmQSIdKJvUDJ4uxX1bMTOPGvVl5ef/V4sV/05AhU7Rhw1XBgPYDAhoijmCG/vHhXJGQhTtUMqQL9C1Gf1kJBLQ3KS/vP1q8+O8aMiRTGzZcrZKSmdq+/fsENEQMwQyh8/lckT6FO1QypAvEvUBAe6Py8l7S4sXPasiQLG3Y8KlgQHtQx48f9bpExBmCGUIXI3NFuhXuUJkoQ7oEOEDSiYB2nvLy/q0lS57T0KHZ2rDhGpWUzNS2bd8joCFsCGYIXYzNFTlJuENlogzpxnJXEIgAM9PYsecqN/dFLVnyD6Wn56iu7lqVlMzQtm3fJaBh0AhmCF2MzhWRFN5QmShDurHeFQQiKBDQ3qDc3Be0ZMk/lZ4+U3V1nw4GtO/o+PEjXpeIGEUwQ2IIZ6hMlCHdWO4KAlESCGivV17eC1qy5Hmlp89SXd11wYD2bQIa+o1gBn+JhTlNsTCk29PrGGqojPWuIOCBsWNfp7y8f2nJkuc1bNgc1dV9RiUlOWpoeICAhpARzOAvsTCnKdxDupEIoz29jqGGyljuCgIeGzv2dcrNfV65uf/SsGHztHHjZ4MB7Vs6fvyw1+XB5whm8I9ozWnyW1cu3GG0t9cx1FAZC11BwOfGjDlHubn/VG7uCxo2bL42bvyciotz1NDwTQIaekQwg39Ea06Tn7pykQij4XgdY3mhB+AzY8acrdzcfyg390UNH75QGzder+Li6Wpo+IaOHz/kdXnwGYIZ/CFac5r8ttIw3GGUuWHh57cOK2LWmDGvVW7uc8rN/bdGjFisjRtvUHFxjrZuvZ+AhlcQzOCtEx96N910+pymjg5p6dLwz70KRxAKx4d1JEIUc8PCz08dVsSFMWNeoyVLnlVe3ksaMWKJNm36vIqLp2vr1vsIaCCYwWMnPvSeeur0OU3t7YHwEu65V+EIQuH4sI5EiIrluWF+7Ez5rcOKuDJ69Ku1ZMnflZf3H40YkadNm74QDGj3qqPjoNflwSMEM3in64feoUOByyfmMjU2SkOHBu4XiblXJ/QUhHoLCeH6sI5EiIrluWF+7EyxlxuiYPToV2nJkr8pL++/GjFiqTZt+qJKSqZr69Z7CGgJiGAG7/T2oReJD8T+BKHeQkI4amtqkkaNOjmMxlKICjc/dqaYr4coGz36LC1Z8ozy8l7WyJH52rTpRhUXZ2vLlq+ro+OA1+UhSsw553UNg5afn+/Ky8u9LgP90dQk5eRIR7ucVy49Xdq0KRBOerotIyO6tZ163N7q7k9tV18tPfSQdOWV0oMPhrf+WHT11dIjjwTCT1qadPnl3r8uXWs6wS+1ISHs31+i+vqvaPfuvyolZZwyM2/QlCnXKCVlpNelYZDMrMI5l9/dbXTM4I3ehhW9nsAeaidvoLX5sTvkJb92pmJ5vh7iwqhRhVq8+GktXVqiUaOKtHnzzcEO2t3q6NjvdXmIEIIZvNHbh56XH4h9hYRw1Ma8pZN5HcR7Esvz9RBXRo0q0OLFT2np0lKNGnWWNm++JRjQ7iKgxSGGMoGuIj18Fa6h0HiSlydVVZ1+fW4uIQjoxv795dqy5SvatesvSkkZq6lTP6epU69VSspor0tDiBjKBEIV6W6dX7tDXqIzBfTLqFH5WrToSS1bVq7Ro1+j+vovq7g4W/X1d6qjY5/X5WGQCGZAV5EOCcxbAhAmI0cu06JFTwQD2tmqr781GNDuUHv7Xq/LwwARzCLFj5tlwnt+6A7xswnElUBA+7OWLavQ6NHnqL7+tmBA+woBLQYRzCLFj5tlxrNohI14CTT8bAJxaeTIpVq06E9atmyFxo59verrb1dxcbY2b76dgBZDCGaREOntEOIlIIRTNMJGPASa3n42+bkC4sLIkXlauPBxLVtWqbFj36AtW76i4uIsbd58m9rb93hdHvpAMIuESG+HEA8BIZy6CxvhDhnxsvdYX3u08XMFxI2RI3O1cOEflZ9fpbFjz9OWLXcEO2i3qr19t9floQdslxFukd4Oobdd6RNVd7vGOxfenfX9uDN9f/V1toXp06W2tsA5Sjdv5ucKiDMHD65Sff0dam39g5KTR2rq1Os0depnlZo6zuvSEg7bZURTpLdDYHPSk3W3IexPfhLe7pZfd6bvr77OttDeHrju2DF+roA4NGLEYi1c+Hvl56/SuHFv1pYtX1VxcbY2bfqS2tt3eV0egghm4RbJ7RDiJSCEU3dh49ix/71G4QivAwnbfpyv1dPP5gsvBMLsiefY2Rm47KfaAYTNiBGLtGDB74IB7Xxt3Xp3MKDdQkDzAYJZqEL9oI3kdghsTnq67sJGZ+f/XqdwhNeBhG0/ztfq6Wfz7LP/1y07ga4ZEPcCAe23Wr58tcaNe5u2bv1aMKDdrGPHWr0uL2ERzELlhw9aNic93alh46qrAnPAuhpseH36aamoSBoyJHA5PT0Q1HsK27G2UODFF08P/J2dgU4agLg3fPgCLVjway1fXq0zzni7tm79ejCg3URA8wDBLBR++aD1w+akp/JyyK67Y0civN55p1Rc/L+uUl9BL9bmAZ599ulhNi0t8NoCSBjDh8/X/Pm/0vLl1Ro//p3auvUeFRdna+PGL+rYsRavy0sYBLNQxNoHbTR52Uns7tjhDq9NTYH5VlJow6OxOA+QTiyALgIB7ZdavrxG48dfoIaG+4IB7Qs6dmyn1+XFPYJZX2LxgzZavOwkRuvYXVcrdnX0qHTTTd3f3w/zAPvTyfRjJxaA54YPn6f583+h5ctrNX78u9XQ8A0VF0/Xxo2fJ6BFEMGsL375oPUjLzuJ0Th21/B3KuekJ588/Xq/dJ/8MCcSQFwYPnyu5s//uQoKajVhwnvU0PBNFRdPV13dDTp2bIfX5cUdNpjtS16eVFV1+vW5uYndUYj0Rrp+OHbXTWVPSE0NBLXjx/27wS+bEAOIoMOH12vLlq9qx45fKClpiCZPvkqZmZ/XkCH8PxMqNpgdDIZ5uudlJzFax+6u+9XeHjhWpI4ZDok8J9KP+8cBcWbYsNmaN+//VFCwRhMmXKht2x5QSUmO6uo+p7Y2/u0NFsEMA+PlkF20jn1qKG9sDJyuqOsx/TbfMNHnRDKEC0RNIKD9TAUFazVhwvu1bdt3VFIyXXV1n1VbW5PX5cUsghkG5umnTw4pUmDY7K9/jfyxvepixsJ8Q7/WGI1Oll+2tQESzLBhszRv3k9VULBWEydepG3bvquSkhxt2PAZAtoAEMwwMH4NAJHkl4n9vfFrjdHoZIVzCJchUaDfhg2bqblzH1Vh4TpNnHixtm//XjCgXae2tkavy4sZTP7HwLAoAqGKxmKEcC8Iufpq6aGHpCuvlB58MHx1AgnkyJGN2rLlbjU3/0xmKZo8+QpNm/ZFDRkyxevSPOe7yf9mdqGZ1ZhZp5nln3LbTWZWZ2brzOzNXtSHELAoAqGKxmKEcHZwGRIFwiI9fYbmzn1EhYXrNWnSpWps/IGKi2dow4Zr1da23evyfMurocxqSe+R9GLXK81svqSLJC2QdL6k75tZcvTLA/ohlGGvRB0ai9ZihHAO4SbyqlYgAtLTczR37o9VULBeGRkfUmPjD1VcnKP166/R0aPbvC7PdzwJZs65Nc65dd3cdIGkXzvn2pxzmyXVSSqIbnVAP4UyfypRVwtGay5iuDq4ib6qFYig9PTpmjPnRyoo2KCMjMvU1PSQSkpmaP36T+no0Qavy/MNv03+nyKp67uzLXgdMDCR6lSdeNyVK/se9krkoTG/LkboSSIuagGiLD09W3PmPBwMaB9RU9PDKimZqfXrryagKYLBzMyeM7Pqbr4uCNPjX2Fm5WZW3tLCWe8TSn/CVqQ6VSce94Mf7HvYy69DY9EYXo21uYixFiSBGBYIaA+psLBOGRkfVVPTj4MdtKt09OhWr8vzjKerMs3sX5JucM6VBy/fJEnOua8FL/9N0u3OuZd7exxWZSaYUFfMRWo1YHcrAE849ThenrqqL6w8BOAjR49u1datX1NT0yOSpIyMjykr6yYNHZrlcWXh57tVmb14QtJFZjbEzKZLmiWp1OOa4Cf9GRaMVKequ+GuE049jl+HxhJ5eBWALw0dOk2zZ/9AhYV1OvPMy9Xc/KhKSmZp3bpP6ujRLV6XFzVebZfxbjPbJuksSU8FO2NyztVI+q2kWknPSPqUc+64FzXCp0INW5GaxH3q457q1GEvvw6N+XV4FUDCCwS07wcD2ifU3PxTlZTM1Lp1V+jIkXqvy4s4NphF7OjPsODVV0uPPHJyKEpLky6/fHDDdpF63Gjy8/AqAJzi6NFt2rr162pq+pGkTmVkfETTpt2s9PTpXpc2YLE0lAn0rD/DgpHqVPm1A9Yffh1eBYBuDB06VbNnf0+FhRs1efKVam5+TKWls7V27eU6cmST1+WFHR0zxA5OAxUevI4AYlhb23Zt3XqPGhsflnMdysi4TFlZtyg9Pcfr0kLWW8eMYAYAAGJOW1tjMKA9FAxoHw4GtBlel9YnhjIRkKinBcLJ+DkAEAeGDJmsWbO+raKiTZoy5Rrt3PkrlZTM0dq1H9Xhw3VelzdgBLNEkqinBcLJ+DkAEEcCAe0BFRZu0tSp12rnzl+rtHSu1qz5SEwGNIYyE0WkNluNhKYm6aKLpN/8xr81xqpY+jkAgAFoa2tWQ8O9amz8oTo72zRp0qXKyvqShg2b5XVpr2AoE7G1b1W4OzoM3f1PLP0cAMAADBmSoZkzvxnsoH1GLS2/C3bQPqzDh9d7XV6f6JglgljatyoSHZ14PfVQfzuLsfRzAABhcuzYDm3dep8aG78f7KBdEuygzfGsJjpmiS6W9q0Kd0cnnk891N/O4mB/Dug8AohBaWmTNHPm/Soq2qzMzM+ppeWPKi2dr9raS3Xo0FqvyzsNwSwRxMqmqJE4jVK8Dt0NJHAO9ueARQMAYlha2iTNmHFfMKBdr9bWx1VWNl+1tR/0VUBjKBP+Ee7THcXz0F3X1yoap4Ri0QCAOHPsWIsaGu7X9u0PqrPzsCZOvEhZWV/W8OHzIn5shjIRG8Ld2YulIdz+iNQJ2nsTr51HAAkrLW2CZsy4R0VF9Zo27YtqbX1CZWULtG7dJz2ti2AG/6islJw7/WugpwmKlSHcE0KdwxXtwOlFEASAKElLG6+cnK8FA9qNnp/aiWCG+BXuoBdpoc7hinbgjNfOIwB0EQhod2vatC96WgfBDInFrysL+zOZP9qBM9Y6jwAQwwhmSCx+XVno5zlcsdZ5BIAYRjBD4vDrnmbRnsPl164hAIBghgTi165UtOdw+bVrCAAgmCFB+HllYTTncPm1awgAkEQwQ6Lw88rCaM7h8mvXEAAgiWCGRDHYrlQ8zMvyc9cQACCJYIZEMdiuVDzMy/Jz1xAAIIlghkQxmI5Xq6K6NgAACHZJREFUvMzLYj8yAPA9ghkSw2A6XvEyL4v9yOJXPAy1A5BEMEMiGEzHi3lZiAXxMNQOQBLBDIlgMB0v5mXB7+JlqB2AJIIZ4t1gO17My4LfxctQOwBJBDPEu8F2vJiXBT9jqB2IOwQzxDc6XohnDLUDcSfF6wKAiKKzhXjGLx5A3CGYAUCs4hcPIO4wlAkAAOATBDMA3mFjVAA4CcEMgHfYGBUATkIwA+ANNkYFgNMQzIBYEy/Df2yMCgCnIZgBsSYehv/YGBUAukUwA2JJvAz/sTEqAHSLYAbEkngZ/mNjVADoljnnvK5h0PLz8115ebnXZQCR1dQk5eRIR4/+77r0dGnTJikjw7u6AAD9YmYVzrn87m6jYwbECob/ACDuEcyAWOHF8F+8rAAFgBhBMAPCKZJBprJScu70r0ieLzEeVoACQAwhmKFvdE1CF09BJl5WgAJADCGYoW/xFDYiKd6CTLysAAWAGEIwQ+/iLWxEUjwFGTaABQBPEMzQu3gKG5EUb0GGFaAA4AmCGXoWb2EjkuItyLABLAB4gmCGnsVb2IikeAsyXqwABQAoxesC4GPxFjYiicACAAgDghl6RtgAACCqGMoE4A/slwcA3gQzM7vQzGrMrNPM8rtc/0YzqzCz1cE/3+BFfQA8wH55AOBZx6xa0nskvXjK9a2S3uGcWyTpMkmPRbswAB5gvzwAkORRMHPOrXHOrevm+krnXGPwYo2kdDMbEt3qAEQd++UBgCR/zzF7r6QVzrk2rwsBEEHslwcAr4hYMDOz58ysupuvC0L43gWS7pH0yV7uc4WZlZtZeUtLSzhLBxBN7JcHAK+I2HYZzrnzBvJ9ZjZV0uOSPuyc29jL4z8s6WFJys/PdwMqEoD32C8PAF7hq33MzGyMpKck3eic+4/X9QCIAvbLA4BXeLVdxrvNbJuksyQ9ZWZ/C950jaSZkm41s6rg10QvagQAAIg2TzpmzrnHFRiuPPX6r0r6avQrAgAA8J6fV2UCAAAkFIIZAACATxDMAAAAfIJgBgAA4BMEMwAAAJ8gmAEAAPgEwQwAAMAnCGYAAAA+QTADAADwCYIZAACATxDMAAAAfIJgBgAA4BMEMwAAAJ8w55zXNQyambVI2uLBocdLavXguBgY3q/YwvsVW3i/Ygvvl7eynHMTurshLoKZV8ys3DmX73UdCA3vV2zh/YotvF+xhffLvxjKBAAA8AmCGQAAgE8QzAbnYa8LQL/wfsUW3q/YwvsVW3i/fIo5ZgAAAD5BxwwAAMAnCGZhYGbXm5kzs/Fe14Lemdl9ZrbWzFaZ2eNmNsbrmnAyMzvfzNaZWZ2Z3eh1PeidmWWa2fNmVmtmNWZ2ndc1oW9mlmxmlWb2F69rwckIZoNkZpmS3iRpq9e1ICTPSlronFssab2kmzyuB12YWbKkByW9RdJ8SReb2Xxvq0IfOiRd75ybL6lI0qd4z2LCdZL+v727C7GijOM4/v2VgmEvEBFFVtZFdBNqxUJJ9GYRJXlREJiRdBVhoRBR2UXQTRC9EBIFEggFERQEgWgvNxJkkrqCRhBlpFlGXWRBRPbvYmZxt13X3NSZPX4/sHBmdmae/9nDcn7neZ4zzxddF6HxDGb/34vAY4CT9aaBqtpYVX+1m58Cc7qsR+MMAV9V1ddV9SfwFrCk45o0iaraV1Vb28cHaN7sL+i2Kk0myRzgDmBt17VoPIPZ/5BkCbC3qoa7rkVT8gCwvusiNMYFwHejtvfgm/y0kWQusADY3G0lOoKXaDoU/u66EI03o+sC+i7Jh8B5E/xqNfAkzTCmemSy16yq3muPWU0zBPPmiaxNGlRJTgfeAVZW1a9d16OJJVkM7K+qz5Pc0HU9Gs9gdgRVtWii/UmuAC4BhpNAMyS2NclQVf1wAkvUvxzuNRuRZDmwGLi5vF9M3+wFLhy1Pafdpx5LMpMmlL1ZVe92XY8mtRC4M8ntwCzgzCRvVNWyjutSy/uYHSNJdgNXV5WLwvZYktuAF4Drq+qnruvRWElm0Hwp42aaQLYFWFpVOzstTIeV5pPpOuCXqlrZdT3679oes0eranHXtegQ55jpZLMGOAP4IMn2JK92XZAOab+YsQLYQDOJ/G1DWe8tBO4Dbmr/p7a3vTGSpsAeM0mSpJ6wx0ySJKknDGaSJEk9YTCTJEnqCYOZJElSTxjMJEmSesJgJmkgJHkkyRdJjno1hyRzkyw9HnW111+R5KskleSc49WOpOnPYCZpUDwE3FJV907h3LnAUQezJKf+x0M/ARYB3x5tG5JOLgYzSdNee6PgS4H1SVYlmZ3k9SSfJdmWZEl73Nwkm5JsbX+ubS/xLHBde3PUVUmWJ1kz6vrvj6wrmOS3JM8nGQauSbKsbWd7ktcmCmtVta2qdh/nP4OkAWAwkzTtVdWDwPfAjVX1IrAa+LiqhoAbgeeSzAb20/SqXQncA7zcXuJxYFNVzW/Pn8xsYHNVzQN+bq+zsKrmAweBqfTYSRLgIuaSBtOtNAs1P9puzwIuoglva5KMhKjLpnDtgzQLdkOzpudVwJZmyUhOowl/kjQlBjNJgyjAXVX15ZidydPAj8A8mhGDPw5z/l+MHVGYNerxH1V1cFQ766rqiWNRtCQ5lClpEG0AHk7bjZVkQbv/LGBfVf1Ns/D2yHywAzSL24/YDcxPckqSC4Ghw7TzEXB3knPbds5OcvExfSaSTioGM0mD6BlgJrAjyc52G+AV4P524v7lwO/t/h3AwSTDSVbRfIvyG2AXzTy0rRM1UlW7gKeAjUl2AB8A5//7uPZWHnuAOW1Na4/N05Q0aFJVXdcgSZIk7DGTJEnqDYOZJElSTxjMJEmSesJgJkmS1BMGM0mSpJ4wmEmSJPWEwUySJKknDGaSJEk98Q8+oOFEiP0MPAAAAABJRU5ErkJggg==\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "source": [ "Sepaseh Hakiminejad\n", "\n", "Computer Science _ Unipd\n", "\n", "Source:\n", "https://towardsdatascience.com/perceptron-algorithm-in-python-f3ac89d2e537" ], "metadata": { "id": "BbZ6lFrsvX-Q" } } ] }