From eb96bb533d7e41c2bb97a935df80ff999da1a7f3 Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Wed, 27 Oct 2021 15:41:34 +0530
Subject: [PATCH 01/11] Added all the 4 tasks
---
Classification_Task3_203174002.ipynb | 1 +
KNN_Task4 _203174002.ipynb | 1 +
Linear_Regression_Task2_203174002.ipynb | 1 +
3 files changed, 3 insertions(+)
create mode 100644 Classification_Task3_203174002.ipynb
create mode 100644 KNN_Task4 _203174002.ipynb
create mode 100644 Linear_Regression_Task2_203174002.ipynb
diff --git a/Classification_Task3_203174002.ipynb b/Classification_Task3_203174002.ipynb
new file mode 100644
index 0000000..1d8640a
--- /dev/null
+++ b/Classification_Task3_203174002.ipynb
@@ -0,0 +1 @@
+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Classification_Task3_203174002.ipynb","provenance":[],"collapsed_sections":[]},"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.8.8"}},"cells":[{"cell_type":"markdown","metadata":{"id":"7C5rAxwPGDQf"},"source":["# Importing useful libraries"]},{"cell_type":"code","metadata":{"id":"8qvrslgsF4Mn"},"source":["import numpy as np\n","import pandas as pd \n","from pandas import Series, DataFrame\n","\n","import seaborn as sns\n","import matplotlib.pyplot as plt\n","%matplotlib inline"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"6aYOLI2BHF6m"},"source":["## Loading the dataset.\n","The dataset can be found [here](https://github.com/shreedharmalpani/Intro-To-ML-Hello-FOSS/blob/main/iris.csv)"]},{"cell_type":"code","metadata":{"id":"_hccks2pF4Mq"},"source":["df = pd.read_csv(\"iris.csv\")"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"um0L09IOF4Ms","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635010648975,"user_tz":-330,"elapsed":513,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"5adfbd69-3916-4a7d-9b21-496cfc4ab498"},"source":["df.head()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
sepal_length
\n","
sepal_width
\n","
petal_length
\n","
petal_width
\n","
species
\n","
\n"," \n"," \n","
\n","
0
\n","
5.1
\n","
3.5
\n","
1.4
\n","
0.2
\n","
setosa
\n","
\n","
\n","
1
\n","
4.9
\n","
3.0
\n","
1.4
\n","
0.2
\n","
setosa
\n","
\n","
\n","
2
\n","
4.7
\n","
3.2
\n","
1.3
\n","
0.2
\n","
setosa
\n","
\n","
\n","
3
\n","
4.6
\n","
3.1
\n","
1.5
\n","
0.2
\n","
setosa
\n","
\n","
\n","
4
\n","
5.0
\n","
3.6
\n","
1.4
\n","
0.2
\n","
setosa
\n","
\n"," \n","
\n","
"],"text/plain":[" sepal_length sepal_width petal_length petal_width species\n","0 5.1 3.5 1.4 0.2 setosa\n","1 4.9 3.0 1.4 0.2 setosa\n","2 4.7 3.2 1.3 0.2 setosa\n","3 4.6 3.1 1.5 0.2 setosa\n","4 5.0 3.6 1.4 0.2 setosa"]},"metadata":{},"execution_count":5}]},{"cell_type":"code","metadata":{"id":"cbx8gP4zF4Mt","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635010651537,"user_tz":-330,"elapsed":11,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"6d8d789e-43c0-499a-9f8d-7f501f9b58bc"},"source":["df.info() "],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","RangeIndex: 150 entries, 0 to 149\n","Data columns (total 5 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 sepal_length 150 non-null float64\n"," 1 sepal_width 150 non-null float64\n"," 2 petal_length 150 non-null float64\n"," 3 petal_width 150 non-null float64\n"," 4 species 150 non-null object \n","dtypes: float64(4), object(1)\n","memory usage: 6.0+ KB\n"]}]},{"cell_type":"markdown","metadata":{"id":"vjH1pAqoJna2"},"source":["# Data Cleaning & Data Visualization"]},{"cell_type":"markdown","metadata":{"id":"PNfSyZF1F4Mu"},"source":["### 1) Remove unneeded columns\n","### 2) Check for duplicate rows \n","### 2) Check for rows with missing values\n"]},{"cell_type":"code","metadata":{"collapsed":true,"id":"HKFsVhubF4Mx"},"source":["df.isna().sum()"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"Rm7rlDcPR0aI"},"source":["df.isnull()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"L1cnZS5XF4M2"},"source":["### EDA (Exploratory Data Analysis) with Iris"]},{"cell_type":"code","metadata":{"id":"DjsnhAraF4M7","colab":{"base_uri":"https://localhost:8080/","height":458},"executionInfo":{"status":"ok","timestamp":1635011702579,"user_tz":-330,"elapsed":523,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"a7bf481b-9840-450b-b8f2-49a114bba973"},"source":["##Displaying a scatter plot to show the distribution of Sepal Length vs width the dataset\n","\n","fig = df[df.species == 'Iris-setosa'].plot(kind='scatter', x='petal_length', y='petal_width', color='orange', label='Setosa')\n","df[df.species == 'Iris-versicolor'].plot(kind='scatter', x='petal_length', y='petal_width', color='blue', label='Versicolor', ax=fig)\n","df[df.species == 'Iris-virginica'].plot(kind='scatter', x='petal_length', y='petal_width', color='green', label='Virginica', ax=fig)\n","\n","fig.set_xlabel('Petal Length')\n","fig.set_ylabel('Petal Width')\n","fig.set_title('Petal Length Vs Width')\n","\n","fig=plt.gcf()\n","fig.set_size_inches(10, 7)\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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1DVvkiSp49544w2WLl3KunXr6l3KTqFnz54MGjSI3XbbrU39DW+SJGm7LF26lD322IPBgwcTEfUup9Qyk5UrV7J06VKGDBnSpmU8bSpJkrbLunXr2HvvvQ1unSAi2HvvvbdrFNPwJkmStpvBrfNs79/S8CZJklQihjdJklQ63/jGNxg2bBgjR47k0EMP5eGHH26x7/Tp01m2bFkXVldb3rAgSZJK5aGHHuJXv/oV8+fPp0ePHrz44ousX7++xf7Tp09n+PDhDBw4sAurrB1H3iRJUu2tWwEr51a+O2j58uX079+fHj16ANC/f38GDhzIvHnzGD9+PIcddhgnn3wyy5cv59Zbb6WxsZGPf/zjHHrooaxdu5Y5c+YwatQoRowYwQUXXMDrr78OwNSpUxk6dCgjR47k85//PAB33HEHY8eOZdSoUZxwwgm88MILHa6/oyIz611Dl2loaEjfbSpJUsc8/vjjHHzwwW1fYMnN8PBkeMvu8OZ6GDsNBk9q9/ZXr17N0UcfzZo1azjhhBM4++yzef/738/48eO5/fbbGTBgALfccguzZ8/mhz/8Iccccwzf+ta3aGhoYN26dRx00EHMmTOH97znPXzyk59k9OjRnHvuubz//e/niSeeICJ45ZVX6NevHy+//DL9+vUjIrjxxht5/PHHueaaa9pde0ua+5tGxLzMbGja19OmkiSpdtatqAS3jWsrH6hMv+ME6DmgXavs06cP8+bN4/777+fee+/l7LPP5rLLLuPRRx/lxBNPBGDjxo3su+++Wy375JNPMmTIEN7znvcAcN5553H99dczZcoUevbsyeTJkznttNM47bTTgMoz7c4++2yWL1/O+vXr2/wstloyvEmSpNp5bUllxG1TcAN4y26V9naGN4Bu3bpxzDHHcMwxxzBixAiuv/56hg0bxkMPPdSu9XXv3p0//elPzJkzh1tvvZXvfe973HPPPVx00UVccsklnH766dx3331cfvnl7a65s3jNmyRJqp3egyunSqu9+UalvZ2efPJJnnrqqc3TCxYs4OCDD2bFihWbw9sbb7zBokWLANhjjz149dVXAXjve9/LkiVLWLx4MQA33XQT48ePZ/Xq1axatYpTTz2Vb3/72yxcuBCAVatWsd9++wEwY8aMdtfcmRx5kyRJtdNzQOUat4cnV0bc3nyjMt2BUbfVq1dz0UUX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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"O_eYByFvF4M5","colab":{"base_uri":"https://localhost:8080/","height":235},"executionInfo":{"status":"error","timestamp":1635011142444,"user_tz":-330,"elapsed":515,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"fa78777e-0d87-449b-d9b7-a3995609ba6a"},"source":["#Display a scatter plot to show the distribution of Sepal Length vs width the dataset (Like previous Petal lenght vs width scatter plot)\n","\n","\n","#code\n","\n","fig.set_xlabel('Sepal Length')\n","fig.set_ylabel('Sepal Width')\n","fig.set_title('Sepal Length Vs Width')\n","\n","\n","fig=plt.gcf()\n","fig.set_size_inches(10, 7)\n","plt.show()\n","#example plot"],"execution_count":null,"outputs":[{"output_type":"error","ename":"AttributeError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m#code\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_xlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Sepal Length'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_ylabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Sepal Width'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Sepal Length Vs Width'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mAttributeError\u001b[0m: 'Figure' object has no attribute 'set_xlabel'"]}]},{"cell_type":"code","metadata":{"id":"EIh_yKQAF4M6","outputId":"91706df0-4dd1-4a8b-92e7-41e04e6e602d"},"source":["#plot the FacetGrid plot using the seaborn library\n","\n","#sns.FacetGrid(...)\\\n","# .map(...)\\\n","# .add_legend()\n"],"execution_count":null,"outputs":[{"data":{"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAboAAAFgCAYAAADNUrzMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+cXHV97/HXzszubJKZ7O4kGxMSfod8pRF0A5VaUJAH\nKL1UsFJ+XGzVUq8Fr9dbKz4o/gJUqlyx2lZFhaJitSCtFhRbBREtaLGQyI8o3xBBICFxN/tzJrs7\nszOz949zdjPZPXNmdmbO/Mr7+XjkITPfPed85uy63z3f8z3vb8fs7CwiIiLtKtToAkRERIKkjk5E\nRNqaOjoREWlr6uhERKStqaMTEZG2Fml0AeUaGkrWfXpoX99yRkcn633YkpqxLtVUHtVUnlatqb8/\n3lGncmQJAu3ojDFrgEeBs621TxW8/x7g7cCQ+9ZfWGttkLVUIhIJN7oET81Yl2oqj2oqj2qSWgqs\nozPGdAJfBKY8mk8C3mKtfTSo44uIiECw9+huBL4AvOjRdhJwtTHmQWPM1QHWICIih7iOIJJRjDFv\nAzZYaz9mjHkAuHzB0OU1wOeACeDbwE3W2u/67TObzc1q6EBEmpzu0TWhoDq6nwCz7r9XADuA86y1\ne40xHcBKa+24+7XvBFZZaz/qt89GTEbp748zNJSs92FLasa6VFN5VFN5WrUmTUZpToHco7PWvmbu\nvwuu6Pa6b60EnjTGHA/sB84Ebg2iDhERkbo9XmCMuRSIWWu/ZIx5P/AjIA380Fr7vXrVISIih5bA\nOzpr7Rnufz5V8N7XgK8FfWwRERElo4iISFtTRyciIm1NHZ2IiLQ1dXTSMOmZHIOjk6Rnco0uRUTa\nWMuEOkv7yOXz3HH/TrbtGGJkIk1iZZSBTf1cfOZGwiH97SUitaWOTurujvt3ct8ju+ZfD0+k519f\netamRpUlIm1Kfz5LXaVncmzbMeTZtm3HPg1jikjNqaOTuhpPpRmZSHu2jSanGU95t4mIVEodndRV\nTyxKYmXUs60v3k1PzLtNRKRS6uikrqKdYQY29Xu2DWxaTbRTK1SISG1pMorU3cVnbgSce3KjyWn6\n4t0MbFo9/76ISC2po5O6C4dCXHrWJi44/VjGU2l6YlFdyYlIYNTRScNEO8Os6Vve6DJEpM3pHp2I\niLQ1dXQiItLW1NGJiEhbU0cnIiJtTR2diIi0NXV0IiLS1tTRiYhIW1NHJyIibU0dnYiItDV1dCIi\n0tbU0YmISFtTRyciIm1NHZ2IiLQ1dXRStfRMjj379pOeyTW6FBGRRbRMj1Qsl89zx/072bZjiJFk\nmkQ8ysCmfi4+cyPhkP6GEpHmoI5OKnbH/Tu575Fd86+HJ9Lzry89a1OjyhIROYj+7JaKpGdybNsx\n5Nm2bcc+DWOKSNNQRycVGU+lGZlIe7aNJqcZT3m3iYjUmzo6qUhPLEpiZdSzrS/eTU/Mu01EpN7U\n0UlFop1hBjb1e7YNbFpNtDNc54pERLxpMopU7OIzNwLOPbnR5DR98W4GNq2ef19EpBmoo5OKhUMh\nLj1rExecfizhrk5ymRldyYlI09HQpVQt2hlm3eoV6uREpCmpoxMRkbamju4QkZ7JMTg6qefbROSQ\no3t0be6gmK6JNImViukSkUOLOro2p5guETnU6U/6NqaYLhERdXRtTTFdIiLq6NqaYrpERNTRtTXF\ndImIaDJK21NMl4gc6tTRtbnCmK7xVJqeWFRXciJySFFHd4iIdoZZ07e80WWIiNSd7tGJiEhbU0cn\nIiJtTR2dNC3lc4pILQR6j84YswZ4FDjbWvtUwftvAD4MZIFbrbU3B1mHtBblc4pILQX2W8MY0wl8\nEZjyeP/TwOuA04F3GGNeElQd0nrm8jmHJ9LMciCf8477dza6NBFpQUH+eXwj8AXgxQXvHw/stNaO\nWmszwIPAawKsQ1qI8jlFpNYCGbo0xrwNGLLWft8Yc/WC5pXAeMHrJNBTap99fcuJROr//Fd/f7zu\nxyxHM9ZVi5r27NvPSLJ4Pme4q5P+1SvqWlOtqabyqCaplaDu0V0GzBpjzgJeAdxmjDnPWrsXmAAK\nf1riwFipHY6OTgZSqJ/+/jhDQ8m6H7eUZqyrVjXlZnIk4lGGPcKo++Ld5DIzZR+nnc9TLamm8pRT\nkzrC5hRIR2etnR+KNMY8AFzudnIAvwKOM8YkgBTOsOWNQdQhrWcun7NwDb05yucUkUrULRnFGHMp\nELPWfskY81fA93HuEd5qrd1drzqk+SmfU0RqKfCOzlp7hvufTxW89x3gO0EfW1qT8jlFpJaUdSlN\nS/mcIlILevpWRETamjo6KSk5meFXvxkhOZlpdCkiIkumoUspKpPNcv1tW9k9lCI/C6EOWN8f4wNv\n2UJXRD86ItIadEUnRV1/21ZeGHQ6OYD8LLwwmOL627Y2tjARkSVQRyeekpMZdg+lPNt2D6U0jCki\nLUMdnXjaVXAlt1B+1mkXEWkF6ujE04Y1MUId3m2hDqddRKQVqKMTT/HlXazv9+7M1vfHiC/vqnNF\nIiKVUUcnRX3gLVs4vODKLtQBh69xZl2KiLQKzRGXoroiEa677JUkJzPsGkyxYY2u5ESk9aijk5Li\ny7s4/qhEo8sQEamIhi5FRKStqaMTEZG2po6ujQyPT/HTJ/YwPD7V6FLKkp7JMTg6SXom1+hSpE3k\n02kyg4Pk04tXqA9yW2luukfXBqYyM1x1089ITWXn34sti3DDFa9iWVdnAyvzlsvnueP+nWzbMcTI\nRJrEyigDm/q5+MyNhEP620uWbjaXY+jO20lt20p2ZIRIIkFsYAv9F15CR9h/LcNqtpXWoN8qbWBh\nJweQmspy1U0/a1BF/u64fyf3PbKL4Yk0s8DwRJr7HtnFHffvbHRp0qKG7rydsfvuJTs8DLOzZIeH\nGbvvXobuvD3QbaU1qKNrccPjU4s6uTmpqWzTDWOmZ3Js2zHk2bZtxz4NY8qS5dNpUtu8g8ZT27b5\nDkVWs620DnV0Lc4+P1ZVe72Np9KMTHj/8hhNTjOe0i8WWZrs+DjZkRHvttERsuPjgWwrrUMdXYsz\nR/RW1V5vPbEoiZVRz7a+eDc9Me82kWIiPT1EEt7PeUb6EkR6egLZVlqHOroWt6pnGbFl3nOKYssi\nrOpZVueK/EU7wwxs6vdsG9i0mminbv7L0oSiUWID3rF0sYEBQtHifzxVs620Ds26bAM3XPGqorMu\nm9HFZ24EnHtyo8lp+uLdDGxaPf++yFL1X3gJ4NxXy46OEOlLEBsYmH8/qG2lNXTMzhZZdKzJDA0l\n615of3+coaFkvQ9bUrG6hsensM+PYY7orfuVXCXnKj2TYzyVpicWDeRKrhm/f6qpPJXWlE+nyY6P\nE+npWfLVWKlty6mpvz9eZHEraSRd0bWRVT3L+P0Tmmuo0k+0M8yavuWNLkPaSCgapWvNmrpvK81N\n9+hERKStqaNrI9VEavltq6guEWllGrpsA9VEavltCyiqS0Ranjq6NjAXqTVnLlIL4NKzNlW8LVDx\nfkVEmoX+LG9x1URq+W87xFY7WNF+RUSaiTq6FldNpJbftiPJNCPJTEX7FRFpJuroWlw1kVp+2ybi\nURLxror2KyLSTNTRtbhqIrX8t+1ni/F+pkhRXSLSSjQZpQ1UE6lVzraK6hKRVqYIMB/NGI0Exeuq\nJlLLb9ty9tuM50o1lUc1lUcRYK1LV3RtpJpILb9tFdUlIq1M9+hERKStqaMTEZG2po6uQo3Kf0zP\n5Nizb78e2JaGy6fTZAYHyaf1TKU0N92jW6JqciVrdtxkmkRcuZPSGLO5HEN33k5q21ayIyNEEgli\nA1vov/ASOsJ67ESajzq6JaomV7IVjyuy0NCdtzN2373zr7PDw/Ov11zy5kaVJVKULgWWoJpcyVY8\nrshC+XSa1Latnm2pbds0jClNSR3dElSTK9mKxxVZKDs+TnZkxLttdITs+HidKxIpTR3dElSTK9mK\nxxVZKNLTQySR8G7rSxDp6alzRSKlqaNbgmpyJVvxuCILhaJRYgNbPNtiAwOEovqjS5qPJqMsUTW5\nkq14XJGF+i+8BHDuyWVHR4j0JYgNDMy/L9JslHXpwy/brppcyWqkZ3KEuzrJZWaa6kquVbMJ662d\nasqn02THx4n09NT8Sq5Vz5OyLpuThi4rNJf/WO/OJtoZZt3qFU3VycmhKRSN0rVmjYYrpempoxMR\nkbamjq7FJCczPPb0EMnJjGfbr34z4tkWZGSZYslEpJlpMkqLyGSzXH/bVnYPpcjPQqgD1vfH+MBb\nnBlwxdrCoVBgkWWKJRORVhBYR2eMCQM3AwaYBS631j5Z0P4e4O3AXOTHX1hrbVD1tLrrb9vKC4Op\n+df5WXhhMMX1tzkpFcXazBG9gUWHKZZMRFpBkH92vwHAWnsq8EHg+gXtJwFvsdae4f5TJ1dEcjLD\n7qGUZ9vuodRBnVyhXYMpHrXBRIcplkxEWkVgV3TW2n8zxnzXfXkkMLbgS04CrjbGrAXusdZ+3G9/\nfX3LiUTqP9Owvz9e92Mu9OLTQ+SLPFxR7H1wLqPHksWjw8JdnfSvXlFRTXv27WckoH3XUjN8/xZS\nTeVRTVIrgd6js9ZmjTFfBf4I+OMFzbcDnwMmgG8bY/7QWvvdhfuYMzo6GVyhRTTLszzxrhChDu9O\nrdj7AB1AbzzKqEeH1BfvJpeZqfjz5WZyJOJRhj0yOKvdd600y/evkGoqT6vWpI6wOZU1dGmM+Utj\nzIgxJuf+yxtjyhqbsta+FdgE3GyMWeHurwP4jLV2n7U2A9wDDFT4GdpefHkX6/tjnm3r+2Mcvsa7\nbcOaGCeZYKLDFEsmIq2i3Cu6vwReYa19vtwdG2P+FNjgDklOAnn3H8BK4EljzPHAfuBM4Nayqz4E\nfeAtWyqedQnBRIcplkxEWkFZEWDGmO8Bf2StLXs9GPfq7cvAWqAT+ASwAohZa7/kdoTvBtLAD621\n1/jtr9kiwBolOZkhmckT7woRX961qG3XYIoNa2KL2oKMLFMsWflUU3latSZFgDWncq/o/h54whjz\nX0B27k1r7WXFNrDW7gcu8mn/GvC1Mo8vrvjyLo450vv/cPHlXRx/lPcSKnORZUGIdobpX72i6X4x\niYjA0jq6fwKeC7AWERGRmiu3o5u21n4k0EpEREQCUG5Hd58x5lPAvwPzQYrW2p8EUlULqOael9+9\ntHK2ffHpIc97dH41NareRsnkMuxNDZHLhegKL61mv+VnglyaRkSCUW5HNzf1v3Bp4Vmc2ZKHlIPy\nHZeYHemXV9kV8f9W+G3rl2cJNKTeRsnlc3xr5z08PrSd0fQYfdFeTuzfzJs2nks45N/Bz+ZyDN15\nO6ltW8mOjBBJJIgNbJlfULRYW0e4eSbgiMhiWnjVh9csq2/ct+OgfMc5Z528oWS+4zW3/twzruvw\nNTGuu+yVFW+7MM+ysCagLvU2yyy5O3fczQO7Hlz0/hkbTuPCTef5bjt4+9cZu+/eRe/3nnU2QNG2\nNZe8uez6muU8FVJN5dGsy9bl+ye9MabDGHOdMebMgve+aoy5LvjSmk81+Y6l8iq9ltYpZ1v/PMsh\nttrButfbKJlchseHtnu2PbFvO5lc8Zrz6TSpbVs921LbtpLc+miRtm3k02U/dSMiDVAqGeU64BXA\nUwXvfQzYYoz5cGBVNanxVJoRj8grcPIdx1PFf+HtGkz55lXuKhLMXGrbWfCM+AIYSaYZSXr/cg+y\n3kYZTycZTS+MVHWMTI8xni7+13h2fJzsyIh328gIuWJtoyNkx8eXXqyI1E2pju6NwEXW2hfn3rDW\nPg38T3yekWtXPbEoiZXeExD64t30xIpPTtiwJkaoyKBGqMNpr2TbDqAv7n3cRDxKIu49ESPIehul\nJxqnL9rr2Zbo7qUnWjyHMNLTQyTh/QxiJJEgXKytL0Gkp2fpxYpI3ZTq6HJeaSjW2hQwE0xJzaua\nfMdSeZV+sxn9tvXPs+xni1lT93obpSvcxYn9mz3bTli92Xf2ZSgaJTawxbMtNrCF+JaTirQNaPal\nSJMrNXVuvzHmWGvtrwvfNMZs5EBu5SGlmnzHUnmVlW5bTp5lvettlDdtPBdw7smNTo/R193LCas3\nz7/vZ252ZWrbNrKjI0T6EsQGBubfL9UmIs3Jd9alMeZcnFSUa4Gf44yUnQxcA3zAWvvNOtQINM+s\nyzmNfI6uWNZlI5+ja7ZZcplchnAsTy7VXM/RNdt5AtVULs26bF0lHy8wxpwDvB/nWbo88N/AJ621\n3w++vAOaraNrpGasSzWVRzWVp1VrUkfXnEo+9Wut/Q/gP+pQi4iISM2VFW9hjPld4EpgNc7wJQDW\n2kMuGaXR0jM59uzbT24mV9PhSSnP9FSSscEX6V1zGN3L6readDaZJL1rF9ENG4jEtYq1yFKUm+N0\nG/BZYDvOo1tSZwdFjyXTJOK1ifmS8mRnMjx8yw102+dYkcqyOxZh2hzJKW+/ikhncDNQ85kMz3/8\nY2R274J8HkIhutZv4IirP0ioq/lmvoo0o3I7uilr7ecCrUR83XH/zoOivIYn0ge9LtZWKuZLyvPw\nLTfQ/+iBycfxVJb4o7/mYW7g1Cs+FNhxn//4x8i88PyBN/J5Mi88z/Mf/xhHXaMFRUTK4dvRGWOO\ncP9zmzHmPcBdHLzw6vOeG0pN+UePDVFsQtG2Hfu44PRjNYxZpempJN3WeynGbvuc0x7AMGY2mXSu\n5Dxkdu8im0xqGFOkDKWu6H6MM1TZgbNSwbsL2maBYwKqSwr4RY+NJNMUmzg7F/MV1Mrih4qxwRdZ\nkcp6ti1PZRkbfJG1R5qaHze9yx2u9JLPk961i8jxx9f8uCLtxrejs9YeDWCMSVhrDwr7M8YcFWBd\nUmAuemzYo7NLxKPMzs56ZlqWivmS8vSuOYzdsQhxj85uMhbh6DWHBXLc6IYNEAp5d3ahkNMuIiWV\nGro8HOdq7nvGmD/gwIzLCPA94KXBlidwIHrMa7mduUgy7zb/mC8pT/eyONPmSOKP/npR27Q5MrDZ\nl5F4nK71Gw6+R+fqWq/ZlyLlKjV0eR3wWuAwoHA18Szw3aCKksXKiR6rJOZLynPK26/iYZxZl8tT\nWSYLZl0G6YirP1h01qWIF2NMGCfRahOwDNgBXOGVW7yEfd5mrX1LjUqsu7IWXjXGXGWtvaEO9RSl\nZBRHeiZHuKuTXGamqZ6ja8ZzFURN1T5HV2lNQT5Hd6h876rVKskobnTjudbad7qv/x/wjLX2C42t\nrHFKDV1+2Ou/51hrNb+5zqKdYfpXr/D8P1y0M6yJJwHrXhYPZOJJKZF4XBNPpFy7gdcYY84D7seJ\ncDzCGPNTIAWsAa631t5pjHk9TnbxLHC3tfYGY8xm4EtAJ86z038O/NJa+1JjzEnAp93j/MJa+25j\nzMXAX+KshvM1a+1n6/dRy1PqaeIO998pwAU4WZcZ4FzAez0UERFpGGvtL3CSrC4DngP+DViLcwvq\njcDpwEeNMSHgU8A5wGnAacaY44FPAu+x1r4S2AasK9j9Z4E3W2tfA4TdLOSLgPcBpwL7g/+ES1dq\n1uV1AMaYh4BXWWsn3defAX4UfHkiIrIUxpgTgG3W2jcaYyLAXwPXA48U/A4fA/qB9cDd7qa9wLHA\nUTjh/Vhr/979+vndA19zX8eAJ3A61fcDH6VJ526Umw/Vz8HRX52A95LLLSQ9k2NwdJL0TK6m2yYn\nM/zqNyMkJxdP+a/WXNZlJTW3k0wuw9DkMJlc7c9xpaankux9zjI95X0fJ59OM7VnL/l0xXMCiu43\nMzjouV+/NnDO497UUEXnsdS+pWHOxhmOxFqbBR4H0sDLjDERY0wvsBLYBzwDvN5aewbwRZyhyqeB\nVwAYYz5pjClcgPKXwAXu138SZ/m2y4D3W2tfC7zFGOO9YnMDlRsBdjPwiDHme0AYZ+jy7wKrKmAH\n5UYuMRvSb9tcPl90odKuSLmnuozjLsi6PJTyLHP5HN/aeQ+PD21nND1GX7SXE/udhVXDocY8SlEq\nB3M2l2PozttJbdtKdmSESCJBbGAL/RdeQke48pr99gv4HrOa8xjU55Ga+Szwd8aYX+AMJQ4BH8bJ\nLL4HWAW811qbM8ZcA/zQGNMFPInzu/4q4Cb3avCXOMOXc64EvuV+/W+BPwF+gfMIWgq411qbqseH\nXIqyZl0CuDchz8C5svuhtfaxAOtapJazLr9x3w7P587OOnnDQdmQXrOs/La1z4/xwuDi7/Hha2Jc\nd9kr61Jzo9RrltydO+7mgV0PLnr/jA2nceGm8xpS00M3ffSgHMw5Qycdy6lXfIjB27/O2H33Lmrv\nPets1lzy5oqP67dfwPeYSzmPSzluNZ+nkGZd1pYb8PEFa+05ja6lEXwvBYwxf+j+71twJp8M4Vzu\nvtx9r+X450bu8x0S9Nt2644hdnl0cgC7h1JVDWNWU3M7yeQyPD603bPtiX3bGzKMWSoHc3J8mNS2\nrZ7tqW3bKh72y6fTPvvdSnLro0WPOT2VrPg8+h+38s8jEqRSY14nu//7Wo9/ZwRXVnD8ciPnsiEr\n2nYiXXT9ovwsRTvBclRTczsZTycZTY95to1MjzGerv8VQMkczGeeJjsy4tmeHR0hOz5e0XGz4+PF\n9zsyQs7nmGODL1Z8Hn2PW8XnkWBZa39zqF7NQel7dM8aY9ZZa/+sLtXUgV9uZKlsSN9tV0aLdnah\nDtiwpvL7s9XU3E56onH6or2MpEcXtSW6e+mJ1j8Sq1QO5pHHHMd0IkF2eHhRe6QvQaSnp6LjRnp6\niBTbbyLB7OysZ2cX6UvQu+Yw+nZVdh59j1vF5xEJUqkrutcDPzfGPGmM+VtjzB8YY5bVo7CgzOVG\neimVDem37ZZN/UU7s/X9MeLLK18ks5qa20lXuIsT+70f3zxh9Wa6wvVfiHQuB9PLtDmS5T2riA1s\n8WyPDQwQilb2R0ooGvXZ7xbiW04qeszuZfGKz6P/cSv/PCJBKvUc3aUwfyPzNcCbgE8YY/YBP2h0\nLFilysmNrGRbv1mXjay5nbxp47mAcy9pZHqMRHcvJ6zePP9+I5TKwZybBZnato3s6AiRvgSxgYH5\n9ytVzn6LtRWex9HpMfqWcB6D+jwiQVnKrMtenCfqT8F5vGDaWntKgLUdJIisy1LZkH6zrPy2TU5m\n2DWYYsOa6q7kih23WNZlI9V7llwml2E8naQnGi96BVLvmkrlYObTaVaGs0zkIjW98smn02THx4n0\n9Czar18bOOcxHMuTS4WWfEVcat/VONRmXb7hvXctx0kg2fOdT50/Wck+pDjfjs4Y8yqc4ctzgNU4\nuWk/AO5fuD5d0BTqfEAz1qWayqOaytOqNS21o3vDe++K4Dx4/UbgcOAFnMiu933nU+d7z3IqgzsK\nd7u19vcK3jsHOMJa+6VK91vkWH8EPGytfbGW+62lUpNRHgK+D/xva633fGUREanUJ3ECkeccVfD6\nPbU8kLX2P2q5vwL/F7gcaNmO7jzgdcBtc/flcO7N/XfglTW5apbE8dt2eHwK+/wY5oheVvW09Lyf\nQ06QQ3kTqRH27NnJunUbWRkrP31vcnyYsWeepveY41jes6qmNUl13OHKNxZpPv8N773rA9UOYxpj\nHgAGcSIb/xk4DrgW+CbQAywHPmCt/cGC7d6Ek5Ayg9OBXQLEgX/ESVYBeDdwBE5c2G3GmNOA/+N+\nbRb4ibX2KmPMqTjh0TPAJPDHOIsF3IKTr3kY8Dlr7U3VfFY/pSajfBc3pNO9FH49cJUx5mU4SzQc\ncnefg4oPy2RzXHXTz0hNHRitiC2LcMMVr2JZV2fQH0uqEGQkVjo9xb03fYiXPDtCfH8euyLEb49O\ncPYVHyUaLf6H0Mz0FNs/chXRoQlCszDeAen+lWz+8A10dusPqCaxDme40svhbvviyJ2l+2dr7beN\nMW9zXx+LcyvqHJwle7yilf4n8Elr7b+44SArgatxUrFuMsYcB3zZWnuaGzV2OU7g80XA7+N0dP/q\nho6cjtOxfgbn4qnPPf7t1tpvGWMOA34MBNbRlRWSaIzpBo50i+vGWaqn7vfMmsEd9+/kvkd2Mew+\nMzc8kea+R3Zxx/07q9p2YScHkJrKctVNPwvmg0jNDN15O2P33es8WzY7S3Z4mLH77mXoztur3ve9\nN32ITU/uo2d/nhDQsz/Ppif3ce9NH/LdbvtHrmL54AThWedP5/AsLB+cYPtHgl0RXZZkD849OS8v\nuO21YA96Ye12nADnfwY+D4SMMacZYx5w/50L/BVwpjHmxzgdVx44AbjMvUq8mcXB/i8F/staO2Ot\nnQX+EydR629wrtp+iHM1N4OTk/lGY8w/AR/EWSggMKUiwD5jjPk5sAvng+8HrrbWnmit/Z9BFtaM\ngooPe/Sp3y7q5OakprIMj08tvVipiyAjsSZSI7zkWe85Xy95doSJlHfb5Pgw0aEJz7bo0AST44sf\n9pb6c4cl/61I8101nH2ZL3zhLuMTt9aeC7wV+Adr7YPW2jPcf/cA7wCutdaejvO30h8BTwGfdlcu\nuAj4p4L9h9z2U9wVEjpwHknbgRP8/BV3dYPt7r7fC/zMWvsnwJ3uMQJT6h7dIPAu4FFr7aERqOij\nnCiuYit8+26bmvE9rn1+jN8/QcNNzaicSKyuNWsq2veePTuJ7897tsX259mzZycrj1scFj72zNOE\nioy3hGad9uUDul/XJN7n/u/5HJh1eVfB+0F4GrjGGHMRTgf1YY+v+TnwXWNMEmdV8rnbWP9ojHkH\nzlDmte7X/hRnZYTX4QxRPuTu90GcjvyVwC3GmP04neI7cCbd/IMx5hJgDMgaY6LW2kDyDEt1dJ04\n47jnFCy8N89a+5EgimpWgcWHxTp9OztzRG9lBUvggozEWrduI3ZFiB6Pzi61IoRZ5x0W0HvMcYx3\nOMOVC+U7nHZpDu4jBO95w3vv+gA1fI7OWvsb4PcWvPeVgpd/XGL77wDf8WhaNHnGWvtBnOFHgL91\n/xV6eGEtwLPAy/xqqKVy7tF1+Pw7pAQVH3bSS19CbJn33xyxZRHNvmxiQUZirYwl+O3R3jMsf3t0\noujsy+UIXWLcAAAgAElEQVQ9q0j3r/RsS/ev1OzLJvSdT50/+Z1Pnf9rPSwejFKzLq/zet8dfz06\nkIqaXFDxYX/0mqOLzrqU5hZkJNbZV3x0ftZlbH+eVMGsSz+bP3zDQbMu8wWzLkUONWVFgBlj3oUz\nc2ZFwdvPWmvrFrTYbMkojXyOrlVTI+qt3jWV8xxdpTUF+RydvnflaeWFVw91pe7RzXkv8HLgeuD9\nOGvRnR1QTS0h2hkuOvGkmm1X9SzTxJMWFYpGK554UsrKWMJz4kkpy3tWaeKJHPLKeo4OGLTWPgs8\nDpzg3tRcPDtFRESkyZR7RbffGPNanI7ujcaY/8Z5ul1ERKp00R1XzK9e8M2Lb9KElBor94ru/+BE\nt/wHTs6ZBf4hqKJqKT2TY3B00vNhbr+2ICUnM/zqNyMkJzNLrik9k2PPvv11rTmTyzA0OUwmt7je\nUlKZFHZkJ6lMqqb7nZ5Ksvc5y/SU9z2TfDrN1J69ng9sl9o2KJnhYQYf+DEZj0cRSp0Lv5rz6TSZ\nwcGqHk73Umq/QR231WqqxkV3XBG56I4rPo3zILUFtl90xxWfvuiOK8q9CPFkjDnKGPNfC947x30G\nrq6MMX9tjFnSuLub0PLSWtVQ1sm01m43xrwPJ7zzOuBCa633k6wuY0wYJybG4MSFXW6tfbKg/Q04\nDypmgVuttTdX9hG8+eVKAhXnVVYjk80WXZg1HAr51nTQ50mmScSDrzmXz/Gtnffw+NB2RtNj9EV7\nObHfWZwzHPKfgJPJZrhx6+fZk9pLnjwhQqyLreXKLe8kHApXvN/sTIaHb3EWOV2RyrK7YJHTSGeX\nb+5kLp/z3TYouakpnr36feRTBzr7UCzG0R//JES7fM+F3+cNh8KBZGyWyu4MMtuzlWqqkXZYvaDU\ncT/RiOMWKnfW5dnAV3FSrMM4idMX+a1iYIx5I3CetfYyY8wZwHustee7bZ3Ar4DfxYkVewj4Q2vt\nb4vtb6mzLr9x3w7ue2TXovfPOnkDQNG2S886kG9a65lf19z6c14YXHxlc/iaGOaIXt+a/D5PYc21\ndOeOu3lg14OL3j9jw2lcuOm8g95beK7+5uefYXdq8aod62OHcVzvMWXvd6GHbvoo/Y8uzrkdOulY\nTr3iQwze/nXG7rt3UXvvWWfz9OgzvtsGZedfvuugTm5OKBZj2ztf53su/D7vcX3HFP2say55c9n1\nLfze+Z3DNZe8uWR7LbRCTUW+puxZl+5w5Xaczm2hZ4GXVTqMObceHTDNElcvKPj9/HJr7X5jzJVA\nDvgX4EvAMmAKJ+EkjPNg+TDwPZwUlbfiJKD8t7X23caYr7i1/Bj4Mk5uchdO6tYj7nvHuPv6W2vt\nHW6e5uXAXpyosZU4F2YftNbeb4x5EideLFPO4gLlXgp8GvgDa+3J1toB4EJKJE1ba//NPRG4H2ys\noPl4YKe1dtRam8GJinlNmbWU5JcrudUOVZxXWY3kZIbdQ4t/2QHsHkrx6FPeffy2HftITmbqXnMm\nl+Hxoe2ebU/s2+473JjKpNiT2uvZ9mJqD48NPVHRfqenknTb5zzbuu1zTI4PF82dTG59lO6nflN0\n26CGMTPDw56dHEA+leLpZ7d5tj2xbzsTqRHfzzux1XuJyGoyNktld2aTycCyPVupphopZ/WCWvhn\na+1ZOJ0VHFi94A04qxQcNLJnrZ0B/hW4wH3rUpyIrxuBv3ezLm8E5q7U1gKvs9b+P+DPgHdZa18F\n/MoYU7jvy4HfuG2XAKcAfwEMWWt/HzgL+JgxZnXBNh8E7rXWvgan3/lH9znuGPDRclfQKXccOG2t\nfWzuhbX2Efdgvqy1WWPMV3ECQQsjZ1YC4wWvkzh/XRTV17ecSKS8IYg9+/YzkiyWSVn8h340OU24\nq5P+1QceF+zvj5d1zFJefHqIfJFr0vxs8bzL0eQ0yUze5/MsrrkW9qaGGE2PebaNTo8RjuXpjx18\nbubO1d7fvkge75HtWWYZTY97thXb75wXfv0CK1Le4dfLU1lyw7uK5k7mRkdZUWT0YnkqCzNj9B9x\nmGd7NQa3e/8CnhN/YR8cs/hxktHpMVKp3UU/74pUljzFMzZXhrMs61/t2e5l7ns3tWe/b3bnstSw\nb/tSj9uqNdXI3OoFR3m0Bbp6gTFmbvWCTuDv3bXkPuZ+ySdx1oq7yRjzlLOJHXbDoN9vjLkKJxlr\n7pfWs+4FCzgd3ZXGmKOBn3FwgpYB/t2t4WngM8aYzwH3ue8ljTG/xOmI5xwPfN1t322MmcBZWmjR\n5/JTbkf3sDHmFpx7blmc3vg3xpjXuAX8pNiG1tq3uifmYWPM71hr9wMTOIv4zYlz8BXfIqOj5V/B\n52ZyJOLFMimjdHRQNK8yl5mZH56o5dBlvCtEqAPPzi7UAT0rvPMu++LdxLtCPp/n4JprJZcL0Rft\nZSQ9uviY3b3kUiGGCq6CCs9VLLuSECHPzq6DDnqjKz07O6/9HqSzl/2xCHGPX/6TsQjhVRuK5k6G\n+/pIpseJ71989TsZi0BnbyAPKM+sPdK3PXn4apzR+4P1dfcSi61nT5HPuz8WoadrJXmPX/CRvgQT\nuQipMj9P4fcun4v4ZndOxVb5ti/luK1ck9/XlOubF980edEdV/wbB9+jm3NXDWdfFl29wBizDvip\ntfZonOejC7+uAydcem707ingRmvtT92JIqd77P9/4czHmDbGfB9niZ85c7er7jLGHIPTsf4UeDXw\nbWNMHGcpoGcXbPNqYJsxZj3ObP+5b7TvPJFC5Q5dHo/Ty34C55L1ZJwx3+s4kGB9EGPMnxpjrnZf\nTrpFzRX2K+A4Y0zCGNOFM2xZs4XX/HIlt5j+ivMqqxFf3sX6/phn2/r+GCe99CVFa4ov76p7zV3h\nLk7s3+zZdsLqzXSFi0/eiHXFWBdb69l2WGwdL+8/oaL9di+LM228O45pcyTLe1YVzZ2MbzmJ6Zce\nVXTb7mU1/Ut9XteqVYRi3t/3UCzGcUcPeLadsHozK2MJ38+7cstJnm3VZGyWyu6MxOOBZXu2Uk01\n9D6cBUmfxbmIeNZ9HfTqBWcYY36Cs0SO1+oF4KwmPgD8yH19Jc6qBz/GGcp83GObJ4D/NMbcj3Nv\n8OGCti8CxxRs/7c49/xWGWMeBB4ArrPWDhZs8zc46+L9BGclhHdYa72HOXyUNRmlEsaYFTg3Gdfi\nXB5/AidCLGat/VLBrMsQzqzLz/ntb6mTUQ7MUvTOpCzWVjiDsdaTUcqbdeldk9/nCXrW5RP7tjMy\nPUaiu5cTVnvPjlx4rsqZdVnOfhcqnIW4PJVlsuisy8W5k4WzLr22DUo5sy6LnQu/z3tg1uXiz7qU\nmYYLv3d+5/DgGY7VHbfVayryNRVFgOk5umCVO+vySJwx26NwLiO/AVzmLgVRF5VmXfrlSpbKqwwq\nby85mWHXYIoNa2LElx/8C7ZUTemZHOGuTnKZmcCuPhfK5DKMp5P0RONFr7iKnatUJsXu1F7Wx9YS\n6zr4yqac/RYzPZVkbPBFetcc5nk1lk+nWRnOMpGLLPqLvtS2QckMD9O59zlm1h5J16qDY7lKnQu/\nmsvJ2PRT7HtXar/VHrddalrwNcq6bELldnT/gXOZeQOwBXg78KfuTJi6aLZQ50ZqxrpUU3lUU3la\ntSZ1dM2p3DGv1XPPWVhrZ92Hu70XvBIREWki5XZ0U8aYDTgJJ7hTUZv24ZRyNSoC7FDiF21VTQRY\nOcfdmxqq6Lh+7X4RU9V8niDPRSO0WhSXtLdyHy94D/Bd4FhjzC9wZlxeGFhVAfOLBwsyAuxQ4hcf\nBlQcARbkcf22Dc1SNGIq31H556kmZq0ZtXAUl7Sxkh2dMeYPgV/iPP/w18BrgXsA71iGFnDH/TsP\nitMankjPvw4qTutQ862d9xwUbTWSHj3odbG2UhFgQR7Xb9vTtyYPipjKDg/Pv/7xlnjFn8fvmNWe\ni0YYuvP2ouepVlFc7eih8y+Yn3V56l3/qlmXNeZ7+eJmnF0DdOM8S/fXODMul+E8T9dy/OLBgowA\nO5T4xYc9PvQkjw096dlWKgKsuuNu57HB4sdNZVJFt/3l3idIFosW27aV7XsqizSrJmatGZWK6tIw\n5mIPnX9B5KHzLzho9YKHzr/g0w+df0HTrV6wlFUISh3LGPM2Y0zd/pIrdTL/FHiVtXbSGPMJ4G5r\n7S3uE/O/DL682htPpRnxSBgBJ05rPJWueOVwcYynk0Xjw0aKvA8wMj3GeDpJ//LKVsT2O+5oeoxZ\nvCfujkyPsTu1t+i2mdERcsWixUZGmBkD4ouH5Up9Ht/zVOW5aITs+LhvFFd2fDywFdhbWMusXrCU\nVQhKHctdvLtuSnV0s9baucvo1wKfB2fmpTGtucB4TyxKYmXxOK2eWFOnKLSEnmi8aHxYItrLLHj+\ngk9099ITrfy5Nr/j9kV7mZ2dZTTjfdz1sbVFt+3qSxBOQM4rWiyRoLM3AbnFkWalPo/vearyXDRC\npKfHN4or0uMbZ3vIcYcr31ik+fyHzr/gA9UOY7qrANRq9YKX46xCsBa4DGdE8BqczvldwAiQAe5w\nd/VS4AvucV/ASdf6ubX2CmPMtTgrE3wRZ23TV+KsaHANznyQL3Ig2Ppua+0HqzkPpWZeZI0xve6M\nywHgB+6JOBInrqbl+MWDBRkBdijxiw87sf9lvLz/ZZ5tpSLAqjvuZl6+pvhxY12xotv+ztoTiBeL\nFhvYwuZ1lUWaVROz1oxKRXU1eRRXI7Ta6gWFRq21pwGPAVcBpwKvw0m/WmgT8Oc4ndn/MMYU5gO+\nEefxtVfiXEydjPPZ/8ta+3p3m8uX+oEXKnVF9wngF+7X3WKt3WOMuQgnf+y6ag/eKHMxYMXiwaR6\nc7McvaKt5vi11eK4o9Nj9C3huH41h9w8da+IqTd1VP55yjlPraT/QmfVFK/zJIu02uoFXvvcCPxy\nbuTPGPNTj+PvtNYm3fY9OHM+5hjcnGNr7SjwIWPMSuB3jTGvxVkAoOq/kEomoxhjDsPpcR93X/8P\nYNJa+0C1B1+KIJJRGhUBVq1mrKtYTX7RVtVEgJWSyWUIx/LkUqElH9ev3S9iqpqotCDPRSlB/DwF\nFUvWSEEko7gTUbxWL/jMqXf9a8X36BYsvHq5tfYpY8zbcIYTvw6cbq397ILVCxbu44c4w5E3uYud\nfoUDQ5cvtdb+tbt23IM4I35pnCV35q7+5oYub7fW/p67z//CWf3mbThDl3uAC621f2KM6cEZUr0H\nWG+tvcoYsxGnU41YayvuA0rO7LHWvoizsvjc6+9VerBmE+0Ma+JJwLrCXUUnVPi11eS4sbjnkj+l\njuvXHopGi06oqObzBHkuGsHvPMlB5lYpOB9nyO4F4C6CX73gGnd0LoT/6gUf4cDqBYtYa/cZY24A\n/hOnU1yGs05dZ5m13A2c5a5eEMEZKXwe+IYx5lU4nefTwGHA7jL3uUhgqxfUmrIuD2jGulRTeVRT\neVq1pkqzLlv1OTp3BfGrrLXXu7Pxf4IzuaXoGqWNUNWzGiIiUj23c/t1o+tYKmtt1hizwhizFWfG\n5cM4V3dNRR2dBMrvXo3fEj6ltq1GNcf1a8smk6R37SK6YQOR+OJHA+byN3O5xfcNq9HI+3uVCup7\nG+QyPeLNWvt+4P2NrsOPOjoJhF/m4cxsruiirF2RrsDyEv0Wgy11XCiedTmby/H8xz9GZvcuyOch\nFKJr/QaOuPqDhLq6AsuzbMWczKC+t8rYFD/ha6+9ttE1lGVyMnNtvY+5YkWUycnmi2FqxroW1jT0\nzX9m7L57yU9NAZCfmmL6mWfIT0/x2ekfszv14nxSySyzJDNJnhx+ilev/z3fbVe87MSKa7rhkX+o\n+LiTv3yyaNu+f/s2mReeh7n73bOz5CbGST3+GL1nvJZ/ffq7PLDrQaZy0wBM5ab5zcTzTGXTbF5V\nefBCrfZbz5+ncr+3S62pVj8zfsqpacWKaMs+dtXOFNUvNeeXeTixbStDY96PB+1J7WUiNRJIXmIq\nk2JPam9Fx01u3Upqa5Gatj5KZtcLnm2Z3buYHB8OJM+yFXMyg8rCVMamlKKOTmrOL/MwNzLCsqkZ\nz7Y8efbs2VkyL7ESu93hykqOmxsdITtarKbRA1dyi3acZ+yZp0vmWVainJzMZlNOFmYz7Vfahzo6\nqbm5zEMv4USCqWXej9iECLFu3cai21aTl7g+tpZQkR/3UscN9yWI9BWrqQ86iswoD4XoPeY4+qK9\nns3V5FnO5WTWer9B8vu5qOZ7G9R+pX2oo5Oa88s8XDmwhf5e7wi/dbG1rIwlAslLjHXFWBdb69lW\n6rjxLVuIbSlS05aT6NrgHVfYtX4Dy3tWBZJn2Yo5mUFlYSpjU0rRZBQfzTjpA5qzroU1LT9+M/np\nKbLjE+TT00QSq1h56qn0X3gJv7fuZJ4cfor9mf3MMkuIEIfF1nHllncSDoV9t+1YwgrwC2s65SVb\nKj7uis0vK9rWc+qrST3+GLlU0hnGDIXo2nA4R1z9QTrCYV7at5GpbJpkJkk6mybR3ccpa092MjQ7\nKv9bs3C/09k0qyrcbz1/nsr93i61plr9zPjRZJTWpWQUH82YzgDNWVexmhr5HF2xmhr5HF2x/M1q\nVPscXSN+nkp9byutKcjn6IJMRpFg6Tk6CZRf5mGsK4ZJFF8xIqi8xGqO69cWiceJHH980f365W9W\noxVzMoP63ipjU7zoHp2IiLQ1dXSHiEwuw9DkcN2fr6rmuOMje7E/v5fxEe/n30odd29qqOafN59O\nkxkc9Hw2y69NRBpHQ5dtrlExUdUcd3oyxWPXXsnKkWlCOGtEPZXo5uXX3kj38sX31Gp1XD+VxoMp\nfkqk8dTRtblv7byHB3Y9OP96JD06//rCTec15XEfu/ZK+kam51+Hgb6RaR679kpO+X9fCOy4fobu\nvJ2x++6df50dHj7odbG2NZe8ueJjikhtaOiyjTUqJqqa446P7GVlQSdXaOXotO8wZlCf1z9iaivJ\nrY8WaVP8lEgzUEfXxhoVE1XNcffufKLoD2Vo1mkP4rh+fCOmRkbIKX5KpKmpo2tjjYqJqua4azee\nUCSREvIdTnsQx/XjGzGVSBBW/JRIU1NH18YaFRNVzXF7EmuZSHR7tk30ddOT8I7xqva4fvwjprYQ\n33JSkTbFT4k0A01GaXNv2ngu4NyjGpkeI9HdywmrN8+/34zHffm1NzqzLkenCc06V3ITfc6sy6Uc\nd3R6jL4afd652ZWpbdvIjo4Q6UsQGxiYf79Um4g0jiLAfDRj1BZUVle1MVGV1lTNccdH9rJ35xOs\n3XiC75Wcl6DitiqNB5vTjD9Tqqk8igBrXbqiO0Q0KiaqmuP2JNbS88qldXAHHTeAuK1K48FEpHF0\nj05ERNqaOjoREWlr6uikapXmSpbKwQwqn1OZlO1L31vxont0UrFKcyVLbdeIvEplUrY2fW/Fjzo6\nqViluZKltmtEXqUyKVubvrfiR0OXUpFKcyVLbZfKpBqQV6lMylam762Uoo5OKlJprmSp7Xan9tY/\nr1KZlC1N31spRR2dVKTSXMlS262Pra1/XqUyKVuavrdSijo6qUiluZKltot1xRqQV6lMylam762U\noskoUrFKcyVL5WAGlc9ZTl6ltCZ9b8WPsi59NGPeHjRfXZXmSpbKwaw2n7PYeSonkzIozfa9g/aq\nKcjvrbIuW5eu6KRqleZKlsrBDCqfU5mU7UvfW/Gie3QiItLW1NE1mWoijIKKzCrnuMUiwPxqasW4\npumpJHufs0zXeFWEUlrxXIk0Cw1dNolqIoyCiswqxe+4QNG20CwtF9eUncnw8C030G2fY0Uqy+5Y\nhGlzJKe8/SoincGs1A6KthKphcA6OmNMJ3ArcBQQBT5mrb27oP09wNuBIfetv7DW2qDqaXbVRBgF\nFZlVit9xgaJtp29Ntlxc08O33ED/o7+efx1PZYk/+mse5gZOveJDgR1X0VYi1Qty6PJPgGFr7auB\nc4DPLmg/CXiLtfYM998h28lVE2FUaRRXtfyO+/jQdh4bfNKz7Zd7nyDZYnFN01NJuu1znm3d9rnA\nhjEVbSVSG0EOXd4J/Iv73x1AdkH7ScDVxpi1wD3W2o/77ayvbzmRSP2Havr7K0viWIqpPft9I4xW\nhrMs61/tWdfe1FDRyKzR6THCsTz9sdp/Bt/jpseYxftpkMzoCLklftZq1OL798KvX2BFauGPr2N5\nKgszY/QfcVjNa6rk56JS9fg5XyrVJLUSWEdnrU0BGGPiOB3eBxd8ye3A54AJ4NvGmD+01n632P5G\nRyeDKrWoej1flM9FiCQSZIeHF7VF+hJM5CKkCuoorCuXC9EX7WUkPbpo277uXnKp0JKn/ZfD97jR\nXmZnZxnNLO4Iu/oShBOQK/OzVqNm37/OXvbHIsQ9OrvJWAQ6e8s+zlJqWurPRaXa6Tm6IJX5HF2d\nqpGlCHTWpTHmcOBHwNestd8oeL8D+Iy1dp+1NgPcAwwEWUszqybCqNIormr5HffE/s28fM3LPNt+\nZ+0JxFssrql7WZxpc6Rn27Q5ku5lwfxyU7SVSG0EORnlJcAPgHdZa3+4oHkl8KQx5nhgP3AmzsSV\nQ1Y1EUZBRWYt5bjFIsC8agod67S1UlzTKW+/iodxZl0uT2WZLJh1GSRFW4lUL7AIMGPM3wEXA08V\nvH0zsMJa+yVjzJ8C7wbSwA+ttdf47e9QiQArJ8KoWF3VRmZVyi8CzK+moKO4gvj+TU8lGRt8kd41\nh1V0Jdeq0Vb11qo1KQKsOSnr0kcz/p8NmrMu1VQe1VSeVq1JHV1zUjKKiIi0NXV0IiLS1tTRNZlG\n5VVWI5VJ8cRvLalMqtGliIgsoqzLJtGovMpqZLIZbtz6efak9pInT4gQ62JruXLLO+mK1G8yjIiI\nH13RNYm53MiR9CizzM5nQ35r5z2NLq2oG7d+nt2pF8mTByBPnt2pF7lx6+cbXJmIyAHq6JpAo/Iq\nq5HKpNiT2uvZtie1V8OYItI01NE1gfF0smhu5Mj0GOPp5ppmDbDbHa704lzZeXeCIiL1po6uCfRE\n4/RFez3bEt299ESbLz9vfWwtoSI/PiFCrI+trXNFIiLe1NE1gUblVVYj1hVjXZHObF1sLbGuWJ0r\nEhHxpo6uSbxp47mcseE0VnX30UEHq7r7OGPDaYHnVVbjyi3vZH3ssPkrO+dK7jCu3PLOBlcmInKA\nHi9oEuFQmAs3ncf5x57TkLzKSnRFunj/K/+SVCZFKjJBLLtSV3Ii0nTU0TWZrnAX/ctXNbqMJYl1\nxTi6f13TZROKiICGLkVEpM2poysiPZNjz779pGdyjS7lIJlchr2poaZ6tq4ZawpKK0a0iRzqNHS5\nQC6f5477d7JtxxAjyTSJeJSBTf1cfOZGwqHG/V3QjBFhzVhTUA6lzyrSbtTRLXDH/Tu575Fd86+H\nJ9Lzry89a1OjypqPCJszFxEGcOGm81RTwA6lzyrSbjR0WSA9k2PbjiHPtm079jVsGLMZI8Kasaag\nHEqfVaQdqaMrMJ5KMzKR9mwbTU4znvJuC1ozRoQ1Y01BOZQ+q0g7UkdXoCcWJbEy6tnWF++mJ+bd\nFrRmjAhrxpqCcih9VpF2pI6uQLQzzMCmfs+2gU2riXY2ZtJBM0aENWNNQTmUPqtIO9JklAUuPnMj\n4NyTG01O0xfvZmDT6vn3G2UuCuyJfdsZnR6jr7uXE1ZvbmhEWDPWFJTCzzoyPUaijT+rSLvpmJ2d\nbXQNZRkaSta10PRMjnBXJ7nMTMOu5LxkchnCsTy5VKhpriSasSaA/v54zdNaMrlMVRFtQdRULdVU\nnnJq6u+Pd9SpHFkCDV0WEe0Ms271iqbq5MAZRlsb62+qDqUZawrKXETbofBZRdqFOjoREWlr6uhE\nRKStqaOTtjQ9leSFX/+S6aml3+dRnqVIe9GsS2kr2ZkMD99yA932OVaksuyPRZg2R3LK268i0ul/\nX015liLtSVd00lYevuUG+h/9NfFUlhAQT2Xpf/TXPHzLDSW3ncuzHEmPMsvsfJ7lt3beE3zhIhIY\ndXTSNqanknTb5zzbuu1zvsOYyrMUaV/q6KRtjA2+yIpU1rNteSrL2OCLRbdVnqVI+1JHJ22jd81h\n7I9533aejEXoXXNY0W2VZynSvtTRSdvoXhZn2hzp2TZtjqR7WfHOSnmWIu1LHZ20lVPefhVDJx1L\nMhYhByRjEYZOOpZT3n5VyW3ftPFczthwGqu6++igg1XdfZyx4TTlWYq0OD1eIG0l0tnFqVd8yJl4\nMjMGnb2+V3KFwqEwF246j/OPPaeqPEsRaS7q6KQtdS+L03/EYRUFA8/lWYpIe9DQpYiItDV1dCIi\n0tbU0YmISFtTRyciIm1NHZ2IiLQ1dXQiItLW1NGJiEhbU0cnIiJtTR2diIi0NXV0IiLS1tTRiYhI\nW1NHJyIibU0dnYiItDV1dC0mk8uwNzVEJpdpdCkiIi0hsGV6jDGdwK3AUUAU+Ji19u6C9jcAHway\nwK3W2puDqqUd5PI5vrXzHh4f2s5oeoy+aC8n9m/mTRvPJRwKN7o8EZGmFeQV3Z8Aw9baVwPnAJ+d\na3A7wU8DrwNOB95hjHlJgLW0vG/tvIcHdj3ISHqUWWYZSY/ywK4H+dbOexpdmohIUwuyo7sT+JD7\n3x04V25zjgd2WmtHrbUZ4EHgNQHW0tIyuQyPD233bHti33YNY4qI+Ahs6NJamwIwxsSBfwE+WNC8\nEhgveJ0Eevz219e3nEik/kN0/f3xuh9zob2pIUbTY55to9NjhGN5+mONr7MZztVCqqk8qqk8zViT\nlBZYRwdgjDkc+DbweWvtNwqaJoDCn5g44P2b3DU6Oln7Akvo748zNJSs+3EXyuVC9EV7GUmPLmrr\n6+4llwoxNNXYOpvlXBVSTeVRTeUppyZ1hM0psKFL957bD4CrrLW3Lmj+FXCcMSZhjOnCGbb8WVC1\ntIu0vYkAAAhCSURBVLqucBcn9m/2bDth9Wa6wl11rkhEpHUEeUX3fqAP+JAxZu5e3c3ACmvtl4wx\nfwV8H6ezvdVauzvAWlremzaeCzj35Eanx+jr7uWE1Zvn3xcREW8ds7Ozja6hLENDyboX2ozDJ5lc\nhnAsTy4VaqoruWY8V6qpPKqpPGUOXXbUqRxZAj0w3mK6wl2sjfU3VScnItLM1NGJiEhbU0cnIiJt\nTR2diIi0NXV0IiLS1tTRiYhIW1NHJyIibU0dnYiItDV1dCIi0tbU0YmISFtTRyciIm1NHZ2IiLS1\nlgl1FhERqYSu6EREpK2poxMRkbamjk5ERNqaOjoREWlr6uhERKStqaMTEZG2po5ORETaWqTRBTQT\nY8wa4FHgbGvtUwXvvwd4OzDkvvUX1lpbh3q2AhPuy2ettX9W0PYG4MNAFrjVWntz0PWUUVOjztPV\nwHlAF/B5a+0/FrQ16jz51VT382SMeRvwNvdlN/AKYK21dsxtr/t5KqOmRpynTuCrwFFADvhfC34X\nNOTnSaqjjs7l/oB/EZjyaD4JeIu19tE61tMNdFhrz/Bo6wQ+DfwusB94yBhzt7X2t42qydWI83QG\n8PvAqcBy4MqCtkadp6I1uep+nqy1XwG+4tb3OZxf0nMdSkPOk19NrrqfJ+B/ABFr7e8bY84Grgcu\ncGtsyHmS6mno8oAbgS8AL3q0nQRcbYx50P1LvR5eDiw3xvzAGHO/Meb3CtqOB3Zaa0ettRngQeA1\nDa4JGnOeXg88AXwb+A7w3YK2Rp0nv5qgMecJAGPMycBma+2XCt5u1Hnyqwkac552ABFjTAhYCcwU\ntDX0PEnl1NExP4QyZK39fpEvuR24HDgTOM0Y84d1KGsSp/N9vXvsrxtj5q7AVwLjBV+bBHoaXBM0\n5jytBk4GLiyoqcNta9R58qsJGnOe5rwfuG7Be406T3O8aoLGnKcUzrDlU8DNwN8XtDX6PEmF1NE5\nLgPONsY8gHOf4DZjzFoA9xfUZ6y1+9y/4u4BBupQ0w7gn6y1s9baHcAwsM5tmwDiBV8bB8YIXtGa\nGniehoHvW2sz7v2baaDfbWvUeSpaUwPPE8aYXsBYa3+0oKlR56loTQ08T+/B+d5twhnB+Ko7ZA8N\nPE9SHd2jA6y188MPbmd3ubV2r/vWSuBJY8zxOOPyZwK31qGsy4ATgHcaYw5z69jjtv0KOM4Yk8D5\nC/Q1OFdajaypUefpQeD/GmP+FqfTXYHT0UDjzpNfTY06T+B8/h96vN+o8+RXU6PO0ygHhitHgE4g\n7L5u5HmSKuiKrghjzKXGmHdYa8dxhlZ+BPwnsN1a+706lPCPQK8x5kHgDpxO5iK3phngr4DvAz/D\nuYm/u8E1NeQ8WWu/C2wDfo5zP+x/Axc38jyVqKlRP08ABnhm/sWBn/FG/Tz51dSo8/RpYIsx5j+B\n+90azm+C8yRV0DI9IiLS1nRFJyIibU0dnYiItDV1dCIi0tbU0YmISFtTRyciIm1Nz9FJ4Iwxfwxc\njfPzFgJus9Z+sob7vxbAWnutMWbWWttRYpNqjvUG4Dhr7d8WHtfj69YBn8R5yDkLvAC821r7zMKv\nFZFg6YpOAmWMWQ98CnidtfblwKuAS4wx5zW2soqdhPMwc1HGmBXAj4GfAC9zP/c/A/e6wcAiUke6\nopOgrcZJl1gODFtrU8aYtwLTxpjfxXlAdzmwD2cZlmfddJpfAafgLN/yl9baHxhjXgb8AxAD1gCf\nstb+/aIjejDGnAN8xK3lWZzlV4aNMb8BvoaT37kCNy3fPdZXcP4/8p/AH+Asu3O5u7/n3F2/0hjz\nU2A98GX36u4S4MXCkGJr7deNMWkgaox5M3Cuu80G4DPAETjpH8PAH1hrp8v5XCJSmq7oJFDW2seA\nu4BnjDE/N8bcgBOp9DxwC3CptXYLzlVf4dpeUff9S3HyBrtw1ib7mLX2d4HX4iyhUpIxph/4BPB6\na+0ATrLFDQVfMmytfSXO6hXvd9/7KvBha+0rcJI7ItbaX7pf8wVr7Zfdr3uJW8tJwPuMMXGc4cqH\nPc7Fv1hrU+7LVwLnAK92P/u/W2tPdNteX87nEpHyqKOTwFlrr8BJhL8JOBL4L+CvgWOBu40xv8Dp\neI4p2Oxmd9tf4ORpngi8F+h2l2y5HufKrhyn4Fwx/cg91ruA4wra/8P93yeBhJtleFRB5JRfxuK/\nW2vT1tp9OFelCSAPlLpP+JC1dsJaO3dlOJf3+BzQV86HEpHyaOhSAmWMOReIWWvvAL4MfNkY879w\nrtSeca+YMMaEca6O5mQL/jvkvv4mTujud3CWcLmkzDLCwIPW2vPcY3VzcAr93DDhLE4HlaN0R+VV\n59z2j3Bg5ex5xphbcIZqATKFbdba7MKvF5Ha0BWdBG0S+Lgx5iiYX37ld3Cu6hLGmFe7X3cZ8I2C\n7S5xv/5knCucJ4CzcYYT7wJOd9vDlPYw8CpjzCb39YdwZkR6cgOFdxpj/sB961KcTgycjq3UH4h3\nAkcZY/587g1jzJ8BZwA7y6hXRGpIV3QSKGvtj4wx1wHfLZhx+H3gGuBu4O/cK6wJ4K0Fmx5jjNnq\n/vfF1tqcO53/QWPMGGCB3wBHLzymMSZV8PI5a+1mY8xlwDfdjnEX8CclSn8rcKsx5nrgcWDKff8n\nOPcMf+vzmaeMMWcBnzbG/BVOJ/kMzszTtDGmxKFFpJa0eoE0HXfW5bXW2gcaWMOHgZuttXuMMW8C\n3mytvaBR9YhI5XRFJ+LteZzn3mZw7gv+eYmvF5EmpSs6ERFpa5qMIiIibU0dnYiItDV1dCIi0tbU\n0YmISFtTRyciIm3t/wNlY9GprCKBfAAAAABJRU5ErkJggg==\n","text/plain":[""]},"metadata":{},"output_type":"display_data"}]},{"cell_type":"code","metadata":{"id":"yadZQxoKF4M8","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1635011940282,"user_tz":-330,"elapsed":443,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"2f79fbfa-369f-48a0-8027-ae3f747a9adf"},"source":["#Plot the distritbution of the features using histgram\n","fig = plt.gcf()\n","fig.set_size_inches(12,6)\n","plt.show()"],"execution_count":48,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"xb-AFaG3PU0D"},"source":["## Importing alll the necessary packages to use the various classification algorithms\n"]},{"cell_type":"code","metadata":{"id":"cJVjbgAjF4M_"},"source":["from sklearn.linear_model import LogisticRegression # for Logistic Regression Algorithm\n","from sklearn import svm # for suport vector machine algorithm\n","from sklearn import metrics # for checking the model accuracy\n","from sklearn.tree import DecisionTreeClassifier # for using DTA"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"8LizCSuWF4NA"},"source":["df.shape"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"WW5Hp1fFF4NC"},"source":["Now, when we train any algorithm, the number of features and their correlation plays an important role. If there are features and many of the features are highly correlated, then training an algorithm with all the featues will reduce the accuracy. Thus features selection should be done carefully. This dataset has less featues but still we will see the correlation.\n"]},{"cell_type":"code","metadata":{"id":"YABeXMklF4ND","colab":{"base_uri":"https://localhost:8080/","height":270},"executionInfo":{"status":"ok","timestamp":1635011174157,"user_tz":-330,"elapsed":819,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"a9537d5f-a224-42a1-b4ae-f10891512872"},"source":["plt.figure(figsize=(8,4))\n","sns.heatmap(df.corr(), annot=True, cmap='cubehelix_r') # draws heatmap with input as correlation matrix calculated by df.corr() \n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"gsd6QaoaF4NE"},"source":["Observation--->\n","The Sepal Width and Length are not correlated The Petal Width and Length are highly correlated\n","We will use all the features for training the algorithm and check the accuracy.\n","\n","Then we will use 1 Petal Feature and 1 Sepal Feature to check the accuracy of the algorithm as we are using only 2 features that are not correlated. Thus we can have a variance in the dataset which may help in better accuracy. We will check it later.\n","\n","Steps To Be followed When Applying an Algorithm\n","\n","Split the dataset into training and testing dataset. The testing dataset is generally smaller than training one as it will help in training the model better.\n","\n","Select any algorithm based on the problem (classification or regression) whatever you feel may be good.\n","Then pass the training dataset to the algorithm to train it. We use the .fit() method\n","Then pass the testing data to the trained algorithm to predict the outcome. We use the .predict() method.\n","We then check the accuracy by passing the predicted outcome and the actual output to the model."]},{"cell_type":"markdown","metadata":{"id":"QAD_cNirF4NF"},"source":["# Splitting The Data into Training And Testing Dataset"]},{"cell_type":"code","metadata":{"id":"ZqSRd9GzF4NF","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635011177764,"user_tz":-330,"elapsed":6,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"58101a90-1ffd-45b9-8dbe-3ef9e5f914a2"},"source":["from sklearn.model_selection import train_test_split\n","train, test = train_test_split(df, test_size=0.3) # our main data split into train and test\n","# the attribute test_size=0.3 splits the data into 70% and 30% ratio. train=70% and test=30%\n","print(train.shape)\n","print(test.shape)"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["(105, 5)\n","(45, 5)\n"]}]},{"cell_type":"code","metadata":{"id":"yO2J2FpjF4NG"},"source":["train_X = train[['sepal_length','sepal_width','petal_length','petal_width']] # taking the training data features\n","train_y = train.species # output of the training data\n","\n","test_X = test[['sepal_length','sepal_width','petal_length','petal_width']] # taking test data feature\n","test_y = test.species # output value of the test data"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"yR9D2qgQF4NG","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635011258352,"user_tz":-330,"elapsed":749,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"f3bb7968-3684-416f-9a42-ab5fcbfff8f6"},"source":["train_X.head()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["
"],"text/plain":[" sepal_length sepal_width petal_length petal_width\n","3 4.6 3.1 1.5 0.2\n","45 4.8 3.0 1.4 0.3\n","140 6.7 3.1 5.6 2.4\n","46 5.1 3.8 1.6 0.2\n","53 5.5 2.3 4.0 1.3"]},"metadata":{},"execution_count":37}]},{"cell_type":"code","metadata":{"id":"5sFmts-IF4NI","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635011269110,"user_tz":-330,"elapsed":486,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"5892e853-6e9a-4f5e-e684-8c34c4822f55"},"source":["train_y.head()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["24 setosa\n","89 versicolor\n","13 setosa\n","64 versicolor\n","25 setosa\n","Name: species, dtype: object"]},"metadata":{},"execution_count":38}]},{"cell_type":"markdown","metadata":{"id":"S_w4Me2bF4NL"},"source":["## Logistic Regression "]},{"cell_type":"code","metadata":{"id":"gOQ5JrqrF4NL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635011271869,"user_tz":-330,"elapsed":7,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"73cfaedd-f9da-45c3-9bc3-32cfd91d6915"},"source":["model = LogisticRegression()\n","model.fit(train_X, train_y)\n","prediction = model.predict(test_X)\n","print('The accuracy of Logistic Regression is: ', metrics.accuracy_score(prediction, test_y))"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["The accuracy of Logistic Regression is: 0.9777777777777777\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.7/dist-packages/sklearn/linear_model/_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1):\n","STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n","\n","Increase the number of iterations (max_iter) or scale the data as shown in:\n"," https://scikit-learn.org/stable/modules/preprocessing.html\n","Please also refer to the documentation for alternative solver options:\n"," https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n"," extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n"]}]},{"cell_type":"markdown","metadata":{"id":"e1NNX-EGF4NJ"},"source":["## Support Vector Machine SVM"]},{"cell_type":"code","metadata":{"id":"zSJmVzqnF4NK","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635011282010,"user_tz":-330,"elapsed":517,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"37f4bbd2-9e91-4fd6-f53c-3aea85881b5b"},"source":["clf = svm.SVC(kernel='linear')\n","clf.fit(train_X, train_y)\n","\n","#Predict the response for test dataset\n","prediction = clf.predict(test_X)\n","\n","print('The accuracy of Support Vector Machine is: ', metrics.accuracy_score(prediction, test_y))"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["The accuracy of Support Vector Machine is: 1.0\n"]}]},{"cell_type":"markdown","metadata":{"id":"GWfemKzPF4NN"},"source":["## Decision Tree"]},{"cell_type":"code","metadata":{"id":"iRXy3EZIF4NN","outputId":"f470e075-fc92-4f3f-c343-7a8257e2c5d2"},"source":["#implementing using Decision Tree\n","#code\n","\n","print('The accuracy of Decision Tree is: ', metrics.accuracy_score(prediction, test_y))"],"execution_count":null,"outputs":[{"name":"stdout","output_type":"stream","text":["('The accuracy of Decision Tree is: ', 0.93333333333333335)\n"]}]},{"cell_type":"markdown","metadata":{"id":"uB2Co6f_F4NQ"},"source":["### We used all the features of iris in above models. Now we will use Petals and Sepals Seperately"]},{"cell_type":"markdown","metadata":{"id":"1_v6cAZMF4NQ"},"source":["### Creating Petals And Sepals Training Data"]},{"cell_type":"code","metadata":{"collapsed":true,"id":"e1Q-1b9YF4NQ"},"source":["petal = df[['PetalLengthCm','PetalWidthCm','Species']]\n","sepal = df[['SepalLengthCm','SepalWidthCm','Species']]"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Lv-nab5oF4NQ"},"source":["### For Iris Petal"]},{"cell_type":"code","metadata":{"collapsed":true,"id":"DuOqLUWZF4NQ"},"source":["train_p,test_p = train_test_split(petal, test_size=0.3, random_state=0) #petals\n","train_x_p = train_p[['PetalWidthCm','PetalLengthCm']] # taking the training data's Petal features\n","train_y_p = train_p.Species # output of the training data\n","\n","test_x_p = test_p[['PetalWidthCm','PetalLengthCm']] # taking the test data's Petal features\n","test_y_p = test_p.Species # output of the test data"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"bgNB8kaNF4NU"},"source":["### For Iris Sepal"]},{"cell_type":"code","metadata":{"id":"6hVj5MW3F4NU"},"source":["#Similarly define the split for sepals\n","#define the training and test data's Sepal features followed by the output of the training and test data\n","\n","#use naming- train_s,test_s ; train_x_s, train_y_s; test_x_s, test_y_s\n","\n","#code"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"y08e1O6aU9mx"},"source":["Implementing the algorithms just like we did on the complete dataset but separately on sepals and petals and calculating accuracy"]},{"cell_type":"markdown","metadata":{"id":"TeMWnQr6F4NV"},"source":["## SVM Algorithm"]},{"cell_type":"code","metadata":{"id":"jhlutJ78F4NV"},"source":["#code\n","print('The accuracy of the SVM using Petals is:',metrics.accuracy_score(prediction,test_y_p))\n","\n","#code\n","print('The accuracy of the SVM using Sepals is:',metrics.accuracy_score(prediction,test_y_s))"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Mli7zcq_F4NV"},"source":["## Logistic Regression"]},{"cell_type":"code","metadata":{"id":"2DqK_dFCF4NV"},"source":["#code\n","print('The accuracy of the Logistic Regression using Petals is:',metrics.accuracy_score(prediction,test_y_p))\n","\n","#code \n","print('The accuracy of the Logistic Regression using Sepals is:',metrics.accuracy_score(prediction,test_y_s))"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"aM-7Zx95F4NW"},"source":["## Decision Tree"]},{"cell_type":"code","metadata":{"id":"S8tXp-gMF4NW"},"source":["#code\n","print('The accuracy of the Decision Tree using Petals is:',metrics.accuracy_score(prediction,test_y_p))\n","\n","#code\n","print('The accuracy of the Decision Tree using Sepals is:',metrics.accuracy_score(prediction,test_y_s))"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"6ec0NUyJF4NW"},"source":["\n","\n","\n","### Question:\n","Does Using Petals over Sepals for training the data give a much better accuracy? Why?\n"]}]}
\ No newline at end of file
diff --git a/KNN_Task4 _203174002.ipynb b/KNN_Task4 _203174002.ipynb
new file mode 100644
index 0000000..5dc9eee
--- /dev/null
+++ b/KNN_Task4 _203174002.ipynb
@@ -0,0 +1 @@
+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"KNN_Task4 _203174002.ipynb","provenance":[]},"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.8.8"}},"cells":[{"cell_type":"markdown","metadata":{"id":"cPP7BfqFSgyH"},"source":["# K-Nearest Neighbors Algorithm\n"]},{"cell_type":"markdown","metadata":{"id":"Zd0p7ZUpSgyL"},"source":["![example 1.png](data:image/png;base64,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)In this Jupyter Notebook we will focus on $KNN-Algorithm$. KNN is a data classification algorithm that attempts to determine what group a data point is in by looking at the data points around it.\n","\n","An algorithm, looking at one point on a grid, trying to determine if a point is in group A or B, looks at the states of the points that are near it. The range is arbitrarily determined, but the point is to take a sample of the data. If the majority of the points are in group A, then it is likely that the data point in question will be A rather than B, and vice versa.\n"," \n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"TyGHDf4NSgyM"},"source":["# Imports"]},{"cell_type":"code","metadata":{"id":"iIEvA0xjSgyN","executionInfo":{"status":"ok","timestamp":1635250818719,"user_tz":-330,"elapsed":418,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["import numpy as np\n","from tqdm import tqdm_notebook"],"execution_count":5,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rc8ruF56SgyO"},"source":["# How it works?\n","\n","We have some labeled data set $X-train$, and a new set $X$ that we want to classify based on previous classifications\n","\n"]},{"cell_type":"markdown","metadata":{"id":"rGbvEXbvSgyO"},"source":["## Seps"]},{"cell_type":"markdown","metadata":{"id":"B-nf9G4ZSgyP"},"source":["### 1. Calculate distance to all neighbours\n","### 2. Sort neightbours (based on closest distance)\n","### 3. Count possibilities of each class for k nearest neighbours \n","### 4. The class with highest possibilty is Your prediction"]},{"cell_type":"markdown","metadata":{"id":"LuWwKdFrSgyP"},"source":["# 1. Calculate distance to all neighbours\n","\n","Depending on the problem You should use different type of count distance method.\n"," \n","For example we can use Euclidean distance. Euclidean distance is the \"ordinary\" straight-line distance between two points in D-Dimensional space\n","\n","#### Definiton\n","$d(p, q) = d(q, p) = \\sqrt{(q_1 - p_1)^2 + (q_2 - p_2)^2 + \\dots + (q_D - p_D)^2} = \\sum_{d=1}^{D} (p_d - q_d)^2$\n","\n","#### Example\n","Distance in $R^2$\n","\n","\n","\n","$p = (4,6)$\n"," \n","$q = (1,2)$\n"," \n","$d(p, q) = \\sqrt{(1-4)^2 + (2-6)^2} =\\sqrt{9 + 16} = \\sqrt{25} = 5 $\n","\n"]},{"cell_type":"markdown","metadata":{"id":"vlvNZqiJSgyQ"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"EvmQi6nsSgyR","executionInfo":{"status":"ok","timestamp":1635250723579,"user_tz":-330,"elapsed":1651,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["def get_euclidean_distance(A_matrix, B_matrix):\n"," \n"," C = [ [ 0 for i in range(np.size(B_matrix, 0)) ] for j in range(np.size(A_matrix, 0)) ]\n"," \n"," for i in range (0, np.size(A_matrix, 0)):\n"," row1 = A_matrix[i,:]\n"," for j in range (0, np.size(B_matrix, 0)):\n"," row2 = B_matrix[j,:]\n"," \n"," C[i][j] = np.sum(np.square(row1 - row2))\n"," \n"," ## Use the distance formula for the matrices using numpy functions\n"," ## C is the sum of the squares of the distances\n","\n"," return np.sqrt(C)\n"],"execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"GABzTa_0SgyS"},"source":["## Example Usage"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"W6b8yBSoSgyS","executionInfo":{"status":"ok","timestamp":1635250824471,"user_tz":-330,"elapsed":411,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"966f10e6-5429-4f7e-e70f-50df76e1b2ca"},"source":["X = np.array([[1,2,3] , [-4,5,-6]])\n","\n","X_train = np.array([[0,0,0], [1,2,3], [4,5,6], [-4, 4, -6]])\n","\n","print(\"X: {} Exaples in {} Dimensional space\".format(*X.shape))\n","print(\"X_train: {} Exaples in {} Dimensional space\".format(*X_train.shape))\n","\n","\n","print()\n","\n","print(\"X:\")\n","print(X)\n","\n","print()\n","\n","print(\"X_train\")\n","print(X_train)\n"],"execution_count":6,"outputs":[{"output_type":"stream","name":"stdout","text":["X: 2 Exaples in 3 Dimensional space\n","X_train: 4 Exaples in 3 Dimensional space\n","\n","X:\n","[[ 1 2 3]\n"," [-4 5 -6]]\n","\n","X_train\n","[[ 0 0 0]\n"," [ 1 2 3]\n"," [ 4 5 6]\n"," [-4 4 -6]]\n"]}]},{"cell_type":"code","metadata":{"id":"kB8IZcDpSgyT","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635250828586,"user_tz":-330,"elapsed":423,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"e48c7a0f-c233-44a7-baa1-66354fc59437"},"source":["## Initialize the distance matrix using the get_euclidean_matrix\n","\n","C = get_euclidean_distance(X, X_train)\n","\n","## Euclidean distance b/w row i of X and row j of X_train is available as C[i][j]\n","\n","\n","## Print Distance between first example from X and first form X_train\n","print(f\"Distance between first example from X and first form X_train {C[0,0]}\")"],"execution_count":7,"outputs":[{"output_type":"stream","name":"stdout","text":["Distance between first example from X and first form X_train 3.7416573867739413\n"]}]},{"cell_type":"markdown","metadata":{"id":"vbaJfBihSgyT"},"source":["# 2. Sort neightbours\n","\n","In order to find best fitting class for our observations we need to find to which classes belong observation neightbours and then to sort classes based on the closest distance\n"]},{"cell_type":"markdown","metadata":{"id":"b1VLHUj2SgyU"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"na0G1o_ASgyU"},"source":["def get_sorted_train_labels(distance_matrix, y):\n"," \"\"\"\n"," Function sorts y labels, based on probabilities from distances matrix\n"," Args:\n"," distance_matrix (numpy.ndarray): Distance Matrix, between points from X and X_train, size: N1:N2\n"," y (numpy.ndarray): vector of classes of X points, size: N1\n","\n"," Returns:\n"," numpy.ndarray: labels matrix sorted according to distances to nearest neightours, size N1:N2 \n","\n"," \"\"\"\n"," \n"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"U0I8eltDSgyV"},"source":["# 3. Count possibilities of each class for k nearest neighbours \n","\n","In order to find best class for our observation $x$ we need to calculate the probability of belonging to each class. In our case it is quite easy. We need just to count how many from k-nearest-neighbours of observation $x$ belong to each class and then devide it by k \n","
\n","$p(y=class \\space| x) = \\frac{\\sum_{1}^{k}(1 \\space if \\space N_i = class, \\space else \\space 0) }{k}$ Where $N_i$ is $i$ nearest neightbour\n","\n"]},{"cell_type":"markdown","metadata":{"id":"j0ZtOC38SgyV"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"y2aaG2GdSgyV"},"source":["def get_p_y_x_using_knn(y, k):\n"," \"\"\"\n"," The function determines the probability distribution p (y | x)\n"," for each of the labels for objects from the X\n"," using the KNN classification learned on the X_train\n","\n"," Args:\n"," y (numpy.ndarray): Sorted matrix of N2 nearest neighbours labels, size N1:N2\n"," k (int): number of nearest neighbours for KNN algorithm\n","\n"," Returns: numpy.ndarray: Matrix of probabilities for N1 points (from set X) of belonging to each class,\n"," size N1:C (where C is number of classes)\n"," \"\"\"\n","\n"," ## Write your code here\n","\n"," return probabilities_matrix\n"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ThEbAnXISgyW"},"source":["# 4. The class with highest possibilty is Your prediction"]},{"cell_type":"markdown","metadata":{"id":"_i7NTtN4SgyW"},"source":["At the end we combine all previous steps to get prediction"]},{"cell_type":"markdown","metadata":{"id":"OzK6rY8mSgyW"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"DaYqr_i6SgyW","executionInfo":{"status":"ok","timestamp":1635250858682,"user_tz":-330,"elapsed":471,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["def predict(X, X_train, y_train, k, distance_function):\n"," \"\"\"\n"," Function returns predictions for new set X based on labels of points from X_train\n"," Args:\n"," X (numpy.ndarray): set of observations (points) that we want to label\n"," X_train (numpy.ndarray): set of lalabeld bservations (points)\n"," y_train (numpy.ndarray): labels for X_train\n"," k (int): number of nearest neighbours for KNN algorithm\n","\n"," Returns:\n"," (numpy.ndarray): label predictions for points from set X\n"," \"\"\"\n"," ## Write your code here\n","\n"," return prediction"],"execution_count":9,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"i9kzyASWSgyX"},"source":["# Accuracy"]},{"cell_type":"markdown","metadata":{"id":"v8bNPTPZSgyX"},"source":["To find how good our knn model works we should count accuracy"]},{"cell_type":"markdown","metadata":{"id":"dgFCnJ14SgyX"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"2ySpyThlSgyX"},"source":["def count_accuracy(prediction, y_true):\n"," \"\"\"\n"," Returns:\n"," float: Predictions accuracy\n","\n"," \"\"\"\n"," N1 = prediction.shape[0]\n"," \n"," ## Use np.sum to count the number of elements where predicted value == actual value and assign the count to the variable accuracy\n","\n"," return accuracy"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"b5g7YFY2SgyX"},"source":["## Example usage"]},{"cell_type":"code","metadata":{"id":"uLqCqmJNSgyY","colab":{"base_uri":"https://localhost:8080/","height":235},"executionInfo":{"status":"error","timestamp":1635250842268,"user_tz":-330,"elapsed":449,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"dcf624ee-b959-4577-b370-464112163929"},"source":["y_true = np.array([[0, 2]])\n","\n","predicton = predict(X, X_train, y_train, 3, get_euclidean_distance)\n","\n","\n","print(\"True classes:{}, accuracy {}%\".format(y_true, count_accuracy(predicton, y_true) * 100))"],"execution_count":8,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0my_true\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpredicton\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_euclidean_distance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'predict' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"--WUpIcxSgyY"},"source":["# Find best k"]},{"cell_type":"markdown","metadata":{"id":"itkcD0DlSgyY"},"source":["Best k parameter is that one for which we have highest accuracy"]},{"cell_type":"markdown","metadata":{"id":"7GYEUBnnSgyY"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"Q6OhNBOoSgyY","executionInfo":{"status":"ok","timestamp":1635250862606,"user_tz":-330,"elapsed":413,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["def select_knn_model(X_validation, y_validation, X_train, y_train, k_values, distance_function):\n"," \"\"\"\n"," Function returns k parameter that best fit Xval points\n"," Args:\n"," Xval (numpy.ndarray): set of Validation Data, size N1:D\n"," Xtrain (numpy.ndarray): set of Training Data, size N2:D\n"," yval (numpy.ndarray): set of labels for Validation data, size N1:1\n"," ytrain (numpy.ndarray): set of labels for Training Data, size N2:1\n"," k_values (list): list of int values of k parameter that should be checked\n","\n"," Returns:\n"," int: k paprameter that best fit validation set\n"," \"\"\"\n","\n"," accuracies = []\n","\n"," for k in tqdm_notebook(k_values):\n"," prediction = predict(X_validation, X_train, y_train, k, distance_function)\n","\n"," accuracy = count_accuracy(prediction, y_validation)\n"," accuracies.append(accuracy)\n","\n"," best_k = k_values[accuracies.index(max(accuracies))]\n","\n"," return best_k, accuracies\n"],"execution_count":10,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"nGtIjD0WSgyY"},"source":["# Real World Example - Iris Dataset"]},{"cell_type":"markdown","metadata":{"id":"-o6MHMtKSgyZ"},"source":["\n","\n","\n","\n","This is perhaps the best known database to be found in the pattern recognition literature. The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant. One class is linearly separable from the other 2; the latter are NOT linearly separable from each other. \n","\n","Each example contains 4 attributes\n","1. sepal length in cm \n","2. sepal width in cm \n","3. petal length in cm \n","4. petal width in cm \n","\n","Predicted attribute: class of iris plant. \n","\n","\n","\n","\n","\n","\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"SY8oOngQSgyZ","executionInfo":{"status":"ok","timestamp":1635250867474,"user_tz":-330,"elapsed":414,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"270c2090-4cc4-43c8-dd20-5ed2670e0067"},"source":["from sklearn import datasets\n","import matplotlib.pyplot as plt\n","\n","iris = datasets.load_iris()\n","\n","iris_X = iris.data\n","iris_y = iris.target\n","\n","print(\"Iris: {} examples in {} dimensional space\".format(*iris_X.shape))\n","print(\"First example in dataset :\\n Speal lenght: {}cm \\n Speal width: {}cm \\n Petal length: {}cm \\n Petal width: {}cm\".format(*iris_X[0]))\n","\n","print(\"Avalible classes\", np.unique(iris_y))"],"execution_count":11,"outputs":[{"output_type":"stream","name":"stdout","text":["Iris: 150 examples in 4 dimensional space\n","First example in dataset :\n"," Speal lenght: 5.1cm \n"," Speal width: 3.5cm \n"," Petal length: 1.4cm \n"," Petal width: 0.2cm\n","Avalible classes [0 1 2]\n"]}]},{"cell_type":"markdown","metadata":{"id":"-IlKSX7hSgyZ"},"source":["## Prepare Data\n","\n","In our data set we have 150 examples (50 examples of each class), we have to divide it into 3 datasets.\n","1. Training data set, 90 examples. It will be used to find k - nearest neightbours\n","2. Validation data set, 30 examples. It will be used to find best k parameter, the one for which accuracy is highest\n","3. Test data set, 30 examples. It will be used to check how good our model performs\n","\n","Data has to be shuffled (mixed in random order), because originally it is stored 50 examples of class 0, 50 of 1 and 50 of 2.\n"]},{"cell_type":"code","metadata":{"id":"RA1Q7kCPSgyZ","executionInfo":{"status":"ok","timestamp":1635250871691,"user_tz":-330,"elapsed":418,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["from sklearn.utils import shuffle\n","\n","iris_X, iris_y = shuffle(iris_X, iris_y, random_state=134)\n","\n","\n","test_size = 30\n","validation_size = 30\n","training_size = 90\n","\n","## Initialize X_test\n","## Initialize X_validation \n","## Initialize X_train \n","\n","## Initialize y_test\n","## Initialize y_validation\n","## Initialize y_train"],"execution_count":12,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"r9xJVLzrSgyZ"},"source":["## Find best k parameter"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":235},"id":"hbvZBVNBSgya","executionInfo":{"status":"error","timestamp":1635250875803,"user_tz":-330,"elapsed":430,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"f62b15f9-7fca-4789-bac2-2db5cbbcd8c0"},"source":["k_values = [i for i in range(3,50)]\n","\n","best_k, accuracies = select_knn_model(X_validation, y_validation, X_train, y_train, k_values, distance_function=get_euclidean_distance)\n","\n","## Plot accuracy vs k values graph"],"execution_count":13,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mk_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m50\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mbest_k\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccuracies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mselect_knn_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_validation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_validation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk_values\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdistance_function\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mget_euclidean_distance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;31m## Plot accuracy vs k values graph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'X_validation' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"BjQBDWJMSgya"},"source":["## Count accuracy for training set"]},{"cell_type":"code","metadata":{"id":"_f-J5sSESgya","colab":{"base_uri":"https://localhost:8080/","height":201},"executionInfo":{"status":"error","timestamp":1635250882340,"user_tz":-330,"elapsed":434,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"d0dfb811-a65e-472c-bdc7-fad839ccc488"},"source":["prediction = predict(X_test, X_train, y_train, best_k, get_euclidean_distance)\n","\n","## Calculate Best accuracy using the best k value\n"],"execution_count":14,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprediction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbest_k\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_euclidean_distance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m## Calculate Best accuracy using the best k value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"72O5eXbCSgyc"},"source":["# Sources\n","\n","https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm - first visualisation image\n","\n","https://en.wikipedia.org/wiki/Euclidean_distance - euclidean distance visualisation\n","\n","https://rajritvikblog.wordpress.com/2017/06/29/iris-dataset-analysis-python/ - first iris image\n","\n","https://rpubs.com/wjholst/322258 - second iris image\n","\n"]}]}
\ No newline at end of file
diff --git a/Linear_Regression_Task2_203174002.ipynb b/Linear_Regression_Task2_203174002.ipynb
new file mode 100644
index 0000000..c7b98ce
--- /dev/null
+++ b/Linear_Regression_Task2_203174002.ipynb
@@ -0,0 +1 @@
+{"nbformat":4,"nbformat_minor":5,"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.8.8"},"colab":{"name":"Linear_Regression_Task2_203174002.ipynb","provenance":[],"collapsed_sections":[]}},"cells":[{"cell_type":"markdown","metadata":{"id":"89223f98"},"source":["\n","\n","```\n","Import libraries\n","```\n","\n","### Importing useful libraries \n"],"id":"89223f98"},{"cell_type":"code","metadata":{"id":"26f77ebe","executionInfo":{"status":"ok","timestamp":1635012283386,"user_tz":-330,"elapsed":1123,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["# This Python 3 environment comes with many helpful analytics libraries installed\n","# For example, here's several helpful packages to load in\n","import numpy as np # linear algebra\n","import matplotlib.pyplot as plt # data visualization\n","import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n","import seaborn as sns"],"id":"26f77ebe","execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"31c8220d"},"source":["### Loading the dataset \n","#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Room_price_data.csv)"],"id":"31c8220d"},{"cell_type":"code","metadata":{"id":"1c5d873a","executionInfo":{"status":"ok","timestamp":1635012317184,"user_tz":-330,"elapsed":552,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = pd.read_csv(\"Hostel_Linear-Dataset.csv\") #import text file \n"],"id":"1c5d873a","execution_count":3,"outputs":[]},{"cell_type":"code","metadata":{"id":"1ca9aba0","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635012321185,"user_tz":-330,"elapsed":524,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"50a85b1a-cfee-4f7b-9ac1-5134a16822e9"},"source":["df.head()"],"id":"1ca9aba0","execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Price
\n","
Hostel No.
\n","
Occupancy
\n","
Room Size
\n","
Floor
\n","
\n"," \n"," \n","
\n","
0
\n","
2540.0
\n","
3
\n","
1
\n","
686
\n","
8
\n","
\n","
\n","
1
\n","
2900.0
\n","
3
\n","
2
\n","
966
\n","
5
\n","
\n","
\n","
2
\n","
NaN
\n","
3
\n","
1
\n","
788
\n","
8
\n","
\n","
\n","
3
\n","
2362.0
\n","
3
\n","
2
\n","
924
\n","
2
\n","
\n","
\n","
4
\n","
NaN
\n","
3
\n","
2
\n","
1098
\n","
5
\n","
\n"," \n","
\n","
"],"text/plain":[" Price Hostel No. Occupancy Room Size Floor\n","0 2540.0 3 1 686 8\n","1 2900.0 3 2 966 5\n","2 NaN 3 1 788 8\n","3 2362.0 3 2 924 2\n","4 NaN 3 2 1098 5"]},"metadata":{},"execution_count":4}]},{"cell_type":"markdown","metadata":{"id":"af08f245"},"source":["# Visualizing and Cleaning the data\n","\n","We will now be removing the nan values and identical values from the dataset\n","\n","For seeing if there are nan values in the dataset we will use the isna() function and then to remove them we will use the dropna() function. We will need to set additional parameters like rows and columns in the dropna function depending on the number of nan values present for each column\n","\n","Using the sum() function with isna() function we can get to know the number of missing values in each column"],"id":"af08f245"},{"cell_type":"code","metadata":{"id":"2fd4babb","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635012323753,"user_tz":-330,"elapsed":428,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"dd94b5ef-188f-4c3a-aec4-fe91cdc6a86d"},"source":["df.isna().sum()"],"id":"2fd4babb","execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Price 1531\n","Hostel No. 0\n","Occupancy 0\n","Room Size 0\n","Floor 0\n","dtype: int64"]},"metadata":{},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"83ef03c3"},"source":["After this we will proceed to remove the nan values \n","\n","Since there are not many nan values in the column 'Price' as compared to the number of rows we will remove the rows which have nan values. \n","\n","Reseting the index after removing the nan values and dropping the old index will also be important"],"id":"83ef03c3"},{"cell_type":"code","metadata":{"id":"b65e4503","executionInfo":{"status":"ok","timestamp":1635012326744,"user_tz":-330,"elapsed":459,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = df.dropna(subset = ['Price'],how= 'any')\n","df = df.reset_index(drop = True)\n","## df.isna().sum()"],"id":"b65e4503","execution_count":6,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"40784889"},"source":["Now we can use the drop_duplicate function to remove the duplicate values\n","\n","This function has a parameter calle 'keep' where we specifiy to drop and which value to keep\n","\n","For this excercise we will keep the first values and drop the rest of the duplicates"],"id":"40784889"},{"cell_type":"code","metadata":{"id":"75fa3dc8","executionInfo":{"status":"ok","timestamp":1635012329999,"user_tz":-330,"elapsed":425,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = df.drop_duplicates(keep = 'first')\n","df = df.reset_index(drop = True)\n","## df.duplicated().sum()"],"id":"75fa3dc8","execution_count":7,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"a007a33f"},"source":["For visualizing the data we will first start with looking at the distribution of different columns to see if there are enough number for each category in every column and dropping them if the data is biased for one category more than the other"],"id":"a007a33f"},{"cell_type":"code","metadata":{"id":"b325df62","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1635012366549,"user_tz":-330,"elapsed":1239,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"cf878a76-66d3-4e68-f009-819d724a4eae"},"source":["columns = df.columns\n","for column in columns:\n"," if(column== 'Price' or column=='Room Size'): \n"," continue\n"," fig = plt.figure(figsize=(5,5))\n"," ax = fig.gca()\n"," counts = df[column].value_counts()\n"," counts.plot.bar(ax = ax, color='blue')\n"," ax.set_title('No of rooms '+ column)\n"," ax.set_xlabel(column)\n"," ax.set_ylabel(\"No of rooms\")\n"," plt.show()"],"id":"b325df62","execution_count":9,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"9811a731"},"source":["We can clearly notice that for the Occupancy column the (occupancy) = 4 has a really low set of data points as compared to others. Hence we can proceed in dropping those rows where the occupancy is 4"],"id":"9811a731"},{"cell_type":"code","metadata":{"id":"825783c0","executionInfo":{"status":"ok","timestamp":1635012377084,"user_tz":-330,"elapsed":615,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = df[df['Occupancy'] != 4]\n","df = df.reset_index(drop= True)"],"id":"825783c0","execution_count":10,"outputs":[]},{"cell_type":"code","metadata":{"id":"30c64310","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635012378828,"user_tz":-330,"elapsed":9,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"bbb5d4dc-f7e5-4b8e-a248-6ecbd09568da"},"source":["df.head()"],"id":"30c64310","execution_count":11,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Price
\n","
Hostel No.
\n","
Occupancy
\n","
Room Size
\n","
Floor
\n","
\n"," \n"," \n","
\n","
0
\n","
2540.0
\n","
3
\n","
1
\n","
686
\n","
8
\n","
\n","
\n","
1
\n","
2900.0
\n","
3
\n","
2
\n","
966
\n","
5
\n","
\n","
\n","
2
\n","
2362.0
\n","
3
\n","
2
\n","
924
\n","
2
\n","
\n","
\n","
3
\n","
1432.0
\n","
2
\n","
1
\n","
706
\n","
3
\n","
\n","
\n","
4
\n","
1702.0
\n","
2
\n","
2
\n","
1038
\n","
3
\n","
\n"," \n","
\n","
"],"text/plain":[" Price Hostel No. Occupancy Room Size Floor\n","0 2540.0 3 1 686 8\n","1 2900.0 3 2 966 5\n","2 2362.0 3 2 924 2\n","3 1432.0 2 1 706 3\n","4 1702.0 2 2 1038 3"]},"metadata":{},"execution_count":11}]},{"cell_type":"markdown","metadata":{"id":"f333875b"},"source":["We will now write the columns between categorical and numerical\n","\n","categorical = Hostel No, occupancy, floor\n","\n","Numerical = price, occupancy, roomsize, floor, hostel No.\n","\n","Remember that we can treat Hostel Number and occupancy as numerical or categorical. For this notebook we will treat them as categorical for data visualization and numerical for the regression"],"id":"f333875b"},{"cell_type":"markdown","metadata":{"id":"0f34ca6a"},"source":["We will also plot the scatter plots and the correlation map to analyse the relation ships between different numerical columns"],"id":"0f34ca6a"},{"cell_type":"code","metadata":{"scrolled":false,"id":"f4a3ab6e","executionInfo":{"status":"ok","timestamp":1635012383025,"user_tz":-330,"elapsed":517,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["categorical = ['Hostel No.', 'Occupancy', 'Floor']\n","numerical = [ 'Price', 'Room Size']"],"id":"f4a3ab6e","execution_count":12,"outputs":[]},{"cell_type":"code","metadata":{"id":"df2b588a","colab":{"base_uri":"https://localhost:8080/","height":791},"executionInfo":{"status":"ok","timestamp":1635012386787,"user_tz":-330,"elapsed":1202,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"c61015b6-8eb0-4d49-cf99-2e50e4e7bd51"},"source":["for column1 in numerical:\n"," for column2 in numerical:\n"," if(column1 != column2):\n"," fig = plt.figure(figsize=(6,6))\n"," ax = fig.gca()\n"," df.plot.scatter(x=column1,y=column2,ax = ax)\n"," ax.set_title('Scatter plot of '+ column1 + ' vs ' + column2)\n"," ax.set_xlabel(column1)\n"," ax.set_ylabel(column2)\n"," plt.show()"],"id":"df2b588a","execution_count":13,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAYsAAAGDCAYAAADaszzmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9e5xUdf34/3ydM5dll6uLostVXS8BASWFBJpimRpCn4+khWY37fIT6/tJkcrwxsdSSUvT6mNmRWmFWEGo9dHABBIUbUGW+ODmBVgUZbnusszsnPP+/XHOzM7lnJnZ3Znd2dn38/GYBzvn+j5n2dfr/X5dRSmFRqPRaDTZMHp6ABqNRqMpfbSy0Gg0Gk1OtLLQaDQaTU60stBoNBpNTrSy0Gg0Gk1OtLLQaDQaTU60stD0akREiUhtN9xHROQXIrJfRF4owPW+LSIPFWJsGhCRn4rIwp4eRzmjlUUfQESmi8g/ROSgiOwTkXUi8oEuXvNzIrI2bdsvReS/uzba4uA13g4yHfgoMEIp9UGf61si0iwih0SkTkRm+l1MKfVdpdRVXRhP0XAVcIv7LI0ico+ImCUwri+KyDYROSwie0TkSREZAKCU+opSalFPj7Gc0cqizBGRgcBK4EfAMcBw4FYg0pPj8kJEAj09hiyMBt5QSrVkOeZ5pVR/YDDwc2CpiAxJP6jEnzPORPdZPgxcBnyhJwcjIh8Gvgt8Wik1AHgP8PueHFOfQymlP2X8ASYDB3IcczXwL+AwsBV4v7v9m8C/k7b/h7v9PcBRwAKagQPAl4A2IOpu+7N7bA3wOPAu8DrwtaT73gIsA34DHAKu8hjbL4GfAk+74/g7MDppvwJq3Z8HAUvce70JfAdnQpQxXp/3UAOsAPYBDcDV7vYvpp1/q8e5nwPWJn2vcsc22es53W2/STp+OvAP913uBD7nbg8D3wd2AHvcd9HP4/5h99zxSduOBVqB44ChOJOGA+7zrQEMn/eQeKfu96XAA2n/Xxrc66wAapL2fQh4ETjo/vuhpH3PAv/tPmcz8GegGnjEfS8vAmN8xnQ98Kcs/4d/Cfy3+/Of3evHP3bS+zzd/b+0D/g/4NKe/hvtLZ8eH4D+FPkXDAOBJuBXwIXAkLT9nwQagQ8AAtTiCmN3X40rcC8DWoAT3H0pwtHdlviDdb8bwEvATUAIOAl4DfiYu/8WHAXzCfdYLyH4SxwlcbYrEO8lVSgnK4slwHJgADAG2A580W+8Hvd6DvgxUAFMwlE6M/I5P3k/EAC+7o57kNdzkqQscFYth4FPA0FXgE5y9/0ARyAf4z7Xn4Hv+YzhYeD2pO/XAH9xf/4ejqIJup+zAPG5TvI7PR14C/gv9/sMYC/wfvf38SPgOXffMcB+4DPuO/i0+73a3f8sjpI52X0vW93f0Ufc45cAv/AZ01k4iu9WYBoQzvZ/L2n7hcBuYCSOAt8JfN693/vcZxnb03+nveHT4wPQn274JTsz618Cu4CYK3yGufv+Cnw9z+vUAbPdnzOEZ/ofLDAF2JF2zLfiAsEVmM/luOcvgd8lfe+PM8Mf6X5XOArOxFnVjE069svAs37jTbvPSPe6A5K2fQ/4ZZ7nf859twdcAbQe+Ijfc5KqLL4F/NHjmoKjoE9O2jYVeN1nDB8B/p30fR1wpfvzbTiKtNbvGZLOUzgz/Rb359/GhTOOee2utN9HG45y/gzwQtq1nqd9Vv8scGPSvruBp5K+XwzUZRnXhTjK8gDOiuEewPT6v+duOxV4B5jufr8MWJN2zP8AN3fH32Fv/2ifRR9AKfUvpdTnlFIjgPE4q4UfurtH4piaMhCRK11H7QEROeCeO7QDtx4N1MTPd6/xbWBY0jE787hO4hilVDOOCaEm7ZihODPmN5O2vYnjo8mHGmCfUupwJ88HWK+UGqyUGqqUOlMp9UzSvmzP6fc7OBaoBF5Ken9/cbd7sRqoFJEpIjIGZ3X0R3ffYpxZ/f+KyGsi8s0cz/J+HEVwGY7Sr3K315D0jt3fRxPOe0rZ55L+Dvck/dzq8b2/34CUUk8ppS7GWcHMxlHQnkECIjIIRzl+RykVD2wYDUxJ+/94OXC83z017Whl0cdQSm3DmYWNdzftxDELpCAio4GfAfNwzAiDgS04s11wZpwZl0/7vhNnFjw46TNAKXVRlnO8GJk0rv44wmJ32jF7cWa4o5O2jcIxseVzn93AMfHoGo/zu0q2+3v+DnCeqRUYl/T+BinH8Zx5A6UsHP/Cp93PyrjyU0odVkpdp5Q6CZgFfENEzss6YIelOKuDm9zNu0l6xyJShWM2a0zf51LIdxgfl62U+huwivb/xwlExAAeBVYrpR5M2rUT+Hva/8f+SqmvFnJ85YpWFmWOiJwuIteJyAj3+0gcQbLePeQh4HoROcPNJah1FUXcQfuue97nSf3D3AOMEJFQ2raTkr6/ABwWkQUi0k9ETBEZ34mw3Yvc8N8QsAhnBp8yU08SlLeLyAD3Gb6B41T2G2/y+TtxHK/fE5EKEZmA49j+jdfxBeYR4CMicqmIBESkWkQmKaVsHIX9AxE5DkBEhovIx7Jc61Gc1cDl7s+45810f7eC43y2cBy/+XAHcLWIHI9jkvq8iEwSkTBOhNIGpdQbwJPAqSIy132Oy4CxOI71LiEis0XkUyIyxP1/+kGcSK31HoffjvP/9+tp21e64/uMiATdzwdE5D1dHV9fQCuL8ucwjhlhg4i04PxxbQGuA1BKPYbzx/Woe+yfgGOUUltxbMrP4wja9+LYwOOsAuqBt0Vkr7vt58BYd4n/J1eAz8Qxh7yOM1N+CMe52REeBW7GMT+dAVzhc9y1OHb214C17nkPZxlvOp/Gsb3vxjHf3JxmSioKSqkdwEU4v5N9OL6hie7uBTjmo/Uicgh4Bjgty7U24LyDGuCppF2nuOc24/xOf6yUWp3n+F7Bcf7Pd9/HQpwIt7dwVkSfco9rwvl9X4djmroBmKmU8nvfHWE/ThTWqzj+lN8Ai5VSj3gc+2ngTGC/myvSLCKXu6us893x7gbeBu7EcdRrciBK6eZHmtJFRH4J7FJKfaenx6LR9GX0ykKj0Wg0OdHKQqPRaDQ50WYojUaj0eREryw0Go1GkxOtLDQajUaTk95Q/bLDDB06VI0ZM6anh6HRaDS9ipdeemmvUsqzQkBZKosxY8awcePGnh6GRqPR9CpEJL1cSwJthtJoNBpNTrSy0Gg0Gk1OtLLQaDQaTU60stBoNBpNTrSy0Gg0Gk1OtLLQaDQaTU60stBoNBpNTrSy0Gg0Gk1OtLLQaDQaTU6KpixE5GEReUdEtnjsu05ElIgMdb+LiNwnIg0isllE3p907GdF5FX389lijbejNDVH2LTzAE3NEc/9DXsOs2zjThr2HO7mkWk0Gk3hKWa5j18C9wNLkje6PaDPB3Ykbb4Qp+3jKTgtQH8CTBGRY3DaaU7G6Qf9koisUErtL+K4fWlqjrBrfytbGg+y6ImtBA2DNtvmGx85lWOqQkwaOZjaYQO46U+vsGR9++NdOXUUt81+b8o1RgzpR3X/znVzLMQ1NBqNpiMUTVkopZ4TkTEeu36A05t3edK22cAS5TTXWC8ig0XkBOAc4Gml1D4AEXkauACnaXy3sryukQWPb8YAjrQ5fe6Puv3uv/vUtsRxF4wdxl+27kk5d8nzO5g1oYbGg0dZ8PjmhJK565IJzJo0POe9k5XD2oa9nbqGRqPRdIVuLSQoIrOBRqXUJhFJ3jUc2Jn0fZe7zW+717W/BHwJYNSoUQUctSOsFzy+maOukshGuqKIc9mD61EKbNqVzPxlm5lWOzRldZCsGAAe2bCDB1a/SsAwONpmYStnidV+jU0Z19BoNJpC023KQkQqgW/jmKAKjlLqQeBBgMmTJxe0/d+u/a2Yqcqtw1geI4rEbB7dsIO5U0YlzFu3rdyKaQhtlo1tq8R5ESzP60Ziikc37ODa807p0vg0Go0mG925sjgZOBGIrypGAC+LyAeBRmBk0rEj3G2NOKao5O3PdsNYUxgxpB9tVu5VRWf4wdPbuW/VdoKGcKStczruR6teZe6UUb6ri1LzcZTaeDQaTW66LXRWKfWKUuo4pdQYpdQYHJPS+5VSbwMrgCvdqKgzgYNKqbeAvwLni8gQERmCsyr5a3eNOU51/zA3XzyuKNe2gTaLTisKgKjlrC7iJEdqLa9rZNqdq7jioQ1Mu3MVK+oaCzDqzlNq49FoNPlRtJWFiPwWZ1UwVER2ATcrpX7uc/iTwEVAA3AE+DyAUmqfiCwCXnSPuy3u7O5OmpojjB8+iNmTTmB53Vvdffu8uH91A3OnjEpxgEctx8fRZqmEj+OGxzP9JN1Fsu+nFMaj0Wjyp5jRUJ/OsX9M0s8KuMbnuIeBhws6uA4Qj4IyRWiJevsNSoGQaVC/+2CGME4naBjs2t+aIpwb9hymbueBROhvsdi1v5WgYaSMzWs8Go2m9CjLtqqFoiNRUN1FwIAvn30SD619g0isfVxttg1IhjBOp822E5FWQNackEIzYkg/d5z+49FoNKWJLveRhfhMuJSI2fDLf7xBzLIJGDAgHKAiaHDXJRMYVzMwQxgHDAgHDAaEA4QDwjXn1Cb2New5nKIowMkJ6WjWea5s9jjV/cPcdckEKoJGyrj1qkKjKX30yiKN5Egdr5kwOAI4VoTFRsgUUIpojmu3xA9QcMWZo7jqrJMSAveuSyZwQ1rS3rTaoW6+RgMPPvcaDzzbwF2XTCDq8xB1Ow/kbY6Km+nyTRKcNWk402qH6mgojaaXIY67oLyYPHmy2rhxY4fP8xJ84Dhhla2IeCVLFJCQKSgUbT6uEQMyDEyhgMHz35zhm9hX3T9MU3OEaXeuSjGnVQQNfvOFDzLnf9Zn3OeZ/zo7L2Xhd911C2ZoJaDR9EJE5CWl1GSvfaVlY+lBkv0ThyMxjrbZiUidlfOmZ/ECFA7LVlw4/njf/V5jCJrCrv2tKduq+4eZOHJwQmB7mdOChkEwYHLl1NRs9yunjsp7VeF33fTxaDSa3o82Q7lki9T5+/Z3aSvyqgKcLO8Vm94mZArRPO8XsxQ797VwsLWNcTUDPWf0Xua0qOU4lm+b/V6uPHNMp6KhtMNao+k76JWFi5/gqwqZPLD61W4dS76KAiAas5n32zqufPgFPnj7M/zob69mOJrjjuWg2V6yxLJt1jXsBaB22ADmTB7Z4bBZ7bDWaPoOemXhEhd86c7hlqjlVO7rYYKmoJTKcKwnD81ScPfT27l/dQOL56Q6mqfVDsVIKm8VswuTEJfssK4KmbRELZqaI1phaDRlhlYWSXhF6jTsOVx0x3a+3HDB6dzz9HZMQ2iJ+CcIRmJ2hiLYtb+VkGkSicUSxxUqIa66f1iXTtdoyhytLNKo7h9OEZ4tUYuKoNHjiXltluL7f/0/rj//NJojMX723L9pjfkrMdMQ6ncfZFC/ECOG9KMqZNKaFmZ1NGYVxL+gy3hoNOWPVhY56AlnbdAUT4d61FJ896ltjuDPoigAWiIWn//Fi1SGArS2OauJDBNWgcKmdRkPjab80Q7uHCQ7cStDZtHvFzCEr804hbDp3z8juUZVtuMsBYcjMWK2dxJhv2AgEeYaz8Ju2HM45d9cWdnQe6Oi8s0812g0emWRF3Ffxupt7zB/2eai+rsNUUw96Rjufjr3XarCJvPPP43vPbUtpU5UvsQFejwZMZ54GF/ZhE1BDMnpf/ALDijlVUVHM881mr6OVhZ5Ut0/zKSRg4sfGKWcFqz5ELMUF0+s4ZiqEPOXbe6QwggHDBZ+fCz1uw9yw7JNRJLMWnETWMRSYKm8/A+9qYyH9rFoNB1HK4s8iJfP2LnvSNHvlasuVDIxy8mViAvqRzfs4EertuNVST1gOGanqGUx79xTOKYqxKIntmKIpCgKL/L1P6QHB/Qk2brxaR+LRtNxtLLIQlNzhIfWvMZDa18nHDA4kiVctSewFHxjaR3TaocCcPapx3Li0EpuePwVjqRpjNmThjN7Ug3jagYBZNR0ykZv8D8kk8vE1Ft9LBpNT6KVhQ/L6xq5/rFNCZNMm1VaiiJOzIaH1rzGL/7xhtsdz/asJvv4y42s3LybxXMmMrq6Kmvfi4AhxOxUn0VvmXHnY2LqjT4Wjaan0crCg6bmCDcs29wt9aAKwc/Xvk40qXWqH5GY439YOW+6Z+l1gMqgwW2zxzNp5GBaolbJ+x/SydfE1Jt8LBpNKaBDZz3Ytb8V0/APSS0lTMMpU54vQcOgJWqxcOZYp39GGjZw7unHUTtsQErl2t5CR0xM6dV5NRqNP1pZeDBiSD8suzRXFfHOd5Uhk5ApfOmskzjq1wDDgzbbZkvjQRat3ErQNDANMIWyKQSoixtqNMVBm6E8WNuwF8vHTNNThAMGImR0vvv1+jfz6tpXFTKxlGLhx8ey6ImtKc7tkClcd/6pTK8d2uHKs6WINjFpNIVHK4s04g7SYrRN7SwhA2xlc8vM8cyaNJym5gg/fraBSMwmEst+btAUbpk1jvE1gxgxpJ+nTT9qKe766/9xx1+2lU1yWimF8Wo05YBWFml4CdOeJp57cfOKLVww/nh27W8lkMOnEhD4zsyxXDyxJkVo7m+JEollmq3ioba5ktOy5S9oNJryRSuLNLwcpKVCzIbn/93Elt0Hac6R82GakqEo4vkHhiFgKYKG0Jbmm8mWnNaREhlaqWg05YVWFmkkx+AbCEc64DzuDv7r9//EK5dOaG+EZArcdPG4FCGdnH+QOEeEkJnamc8vcqgjJTJ03SWNpvzQ0VAezJo0nHULZnDXnAl5Hd+dQbZeiqIqZPKrL3yAr374JIIGVARNFq3cyoq6xsQxcfNaMuGAwbUzTskrcsjr/PgqJJlkpXI4EuNom9OISVd21Wh6N3pl4UN1/zAjj6nMq/FRdwTZBk3BNMRzLG22ojJo8ot/vEGbDW0e/ge//IO5U0Yxd8qonCajfPMXdN0ljaY80SuLLFSFTNpKICyqMmjyg0sn+R+gFJ96aAO2lTrW5Jl/tvyDfJLT8s1f0HWXNJryRK8sfFhe18gNyzZRChU/LGUz9eTqlHpGkZhFzFLYpPockonELKqSGjbF8w/qdx8EhHE1A7PeN91JnU/+gq67pNGUJ1Ko1pqlxOTJk9XGjRs7fX5Tc6RDVVmLzVc/fBILLnwP0C7An9ryFj/9+2uex4cMJ9w2ZAoisHjOxISDOV/nc1ed1DoaSqPpfYjIS0qpyV77tBnKAy9nbk/y8Lo3Es7quP/hF+ve8Dy2X9BMJBRGLUUkpvjG0jqamiN5O58L4aTWdZc0mvKidCRiCTFiSD+OeiSuhQMGn/vQKDpQt68gRGI21y/bTMOew4CjzEKm9yCilp2RThizoX73obwjmryS/ryO02g0fQetLHxIN8+ZAk9cO51bZr2Xey6dREXQoCps+pxdeKIxm4vuW8OKusbsiYO+ZkWVt/N5S2Nm0p92Ums0fRutLDzYtb+VfsFU339FyKQlatHUHGF0dRUr501n9sTuTTSLuv2wwSko6FVivCJkkr7oCJrCuJpBeUU0NTVHWPTE1ozrLpw5VpuUNJo+jI6G8mDEkH5E08JQWyIWj2x4gxWb3nLyCNpinglyhcIQ8KqSbohQv/sgsyYNZ+wJA7noR2tTOuPFLMVts8Zz28qtmIZg2YrFc9oVQvy8up0HmDRycEaVWa88iaqQyXi3HatGo+mbaGXhwdqGvcSsTE2wdKPjZC52kUED/6zwI1GLq371ItfOOJW5U0bx/TkTuC6p/atl2wyoCPCPb87wjEbqTH9qSyltgtJo+jjaDJVGPBKoJ/MrQgHJev+oBXc/vZ0P3bGKtQ17U9q/xmwSpqr0aKR8opx08yCNRuOFXlmkUQolyo/G8tNUkZjN0o27MrabhniW19D9qTUaTWfRyiKNUi5Rni9tlrfZqKP9qbWS0Gg0cbQZKo24GcYr0qi3cPPF3pFLfcnE1NQcYdPOA7rarUZTIPTKwoNZk4azryXKLX/ODCHtLKbTbygrghMF5XdcyISPvud4ntn2DiHTcVBfOnkESzfuwhShzbK5+eJxXDDueDbtPJBiQoqX35hWO5R1C7yd3+WC7qeh0RQerSx8mF47tGDXMgXu/dT7+H+//2fW3t4Bw7tfBcAFY4dx/cdOo3bYAJqaI9TvPgQoxtUM4uvnnZoQ/msb9vKhO/6GKQaWslk8ZyIKWPD45hSFcvmZowv2fKVER5o0aTSa/NHKwofaYQO4cuooljy/o8vXshQcbG1j7gdHsWS9//Wy5W2sadjLs6++y12XTEgI//SZc1NzhOuW1rkKycnA/q/f1xEwhUiS0/zGP22hJRJjyknVCX9Fuaw0dD8NjaY4aGWRhdtmv5cRgyu58y/buhxK+50/bSHUhaJSLW5Do+sf24SIEIllzpzrdx/KWLlYCoIeY//uU9uoCplEYhYiQkXALAuTje6nodEUB+3gzkJTc4R7ntlekJwLhRPq2lWilsoo/2Qawupt73Cotc3znDafelEtUYuY7URP5apC21ucxX3Jia/RdCd6ZZGFUsi58MKrFMnNK+qJ2XaixEecgCFcc87J3LuqIa9rp5tseqOzWOeJaDSFR68sslCqORemQCiQWvW2JWoRiSkERThgEHRLjBso/mfNa1w6eQShgEFlKHul3GSTTSH6WvQUup+GRlNYtLLIQrJJozLYfeXIk/FK97AUPPrFD3pWve0XDPDpD4ykzV1dRG042mbzx3828pO57+O3V5/J7Z8YnzDTBAynKq2XySbf/hde9CbTlUajyY02Q2UhuRz57oNHuXrJxgy/Q8gU3x7YhSAUMLBslXKPiqDBkTaLx1/emXH80bYYj76QGXHVZim+uOQlrpw6ittmv5cLxh+fMNOAdzRUZ53FvdF0pdFosqNXFj4sr2tk2p2ruOKhDcy8fy0HjkRZPGcCwbSpfjEVBThlysUzmVwImZmrHY9iuSkseX4HDXsOp5hpsplsrjmnlnAgf2dxbzZdaTQaf/TKwgO/xK6V86ZjdFMVEMGpPrt4zoTE/ZNn6uNqBnr6U2xyK7C1DXtpiVpZnb/JqwNQfOnsk5g7ZVROH4DOc9BoyhOtLDyo330Ig8we1HU7DxAyTSKxWJeuHw4YKJUZ1ZSMon2V4Bfdc9clE7j+sU0dXt1876ltiXIhXiaipuYINyzbnJLL8cCzDcydMirntXWeg0ZTnmgzVBrL6xq5eslGjrRl9qAeU13JkWjXFAU4+RbZFEWcmK2Yv2wzDXsOe/oUZk0azvXnn+Z7fmXQ5Lz3HJuyzTSchL5sJqJHNuzI8M3k69jWeQ4aTXmiVxZJxM1P6YIyHBAunTyCy3++odubIkViNh+79zkqgwGils28c2u5cPzxtEQtqkIm9zyz3fdcG8Vdl0xkf0uUup0HqAiafOsPr3A40q7w0k1ETc0RHlj9asa1olb+qwOd56DRlB9aWSThZW+vDJnc9PH3cNOK+qI7s/2wbBIC/u6nt3P309upCBqO89sjOztkGhgGLJw5NiGw50weSVNzhNa21JVRa1ssRQns2t/qaWqbd25th4S+7oeh0ZQXWlkk4Wlvt2wWrqhPaV1aChzNUnXQVjbXf+R0Fq3cmuIUn1Y7FBHB8Yg4SFqoldc7CAckL3+FRqMpX7TPIol0e7vjiFYlpyhyEbPhzr9sywhfrd99kHBaMcOKgJnii/DyOSyeM1GvEjSaPk7RVhYi8jAwE3hHKTXe3bYYuBiIAv8GPq+UOuDu+xbwRZza2l9TSv3V3X4BcC9gAg8ppe4o1pgh1d5+sLWNax55OcXG31tI12+mCH/71zs0R1Id91HL5mBrG03NkYRC0D4HjUaTjiifiqRdvrDI2UAzsCRJWZwPrFJKxUTkTgCl1AIRGQv8FvggUAM8A5zqXmo78FFgF/Ai8GmlVNYWdpMnT1YbN27s8jM0NUf40B2rClIttlQxBSpDgZyZ1vFOe1UhM2eORjbi19FKSKMpPUTkJaXUZK99RVtZKKWeE5Exadv+N+nremCO+/Ns4HdKqQjwuog04CgOgAal1GsAIvI799jC9TvNQnX/MOedfhxPbnm7O27XYT71gRH87sVdXbqGpdqd534d5ZbXNXLDss2J3JCwKYghHS7j0ZfKgGilqCk3etJn8QXgKffn4UByoaNd7ja/7RmIyJdEZKOIbHz33XcLMsCm5gh/2/ZOQa5VDFqOxjjzxCEFu55XLkXDnsNct3RTSm5IxFIdLuPRl8qAJJeKmXbnKlbUNfb0kDSaLtMjykJEbgRiwCOFuqZS6kGl1GSl1ORjjz029wl5UL/7EMUy0xWCP7/yNutf39/p89Mb96VnWi+va+TC+9YQs73fgWlIXol60LUKtr2JUlaKuhKwpit0e+isiHwOx/F9nmqXxI3AyKTDRrjbyLK9KMTNB1saD3Lbyq09lltRbEyBW2ePzwivjZtMGvYcZv6yzVkjwVoiFlsaDzJx5ODENj/zSyHKgPQG006p1sbqSyZATXHoVmXhRjbdAHxYKXUkadcK4FERuQfHwX0K8AJOPb1TROREHCXxKWBuscYX/4MyRRI9r8uVylCA8TWDWDlvOmsb3mVo/wqmnlwNOO9hfp41pxY9sZULxh9Pdf9wVoEUD8lNL4iYrwDtiLDrSaVSirWx/ApjevmnNBo/ihk6+1vgHGCoiOwCbga+BYSBp91ksPVKqa8opepFZCmO4zoGXKOUstzrzAP+ihM6+7BSqr4Y403+gyoXDHEaGwUMI0P5tdk2WxoPcsuf2xMOTYEvnX0SD697Pe8VVbIpKZdA6mxIbkeEXVdn0F1VNF1VisWgVFc7mt5FMaOhPu2x+edZjr8duN1j+5PAkwUcmiel2m+7K/zXR05l7pRRjllt98EUk9PCj4/ltpVbU8xMloKf/P21Dt2jzbapCpms3vYOpmRW6k0XSMld+JK/ZyNfYdfVGXShTDWllqdSiqsdTe9Dl/twKdV+213hxKGVAEwcOZiJIwdzwbj27nj1uw/S1dYc4YBw6RkjmHn/WgJGpunOSyB1RiDnK+y6MoMutKmmlGpjleJqR9P70MrCJfkPqolLm7EAACAASURBVFx8FvOXbUZBQiDHBZjjk6ijK4/YL2iyeM4Erl+2KcN0VxUysZTKEEidFcj5CruuzKDL3VRTaqsdTe9DK4sk4n9Qq7e9wy1/rs8ojdHbaHWF+Pxl7QK5qTnCdUvr6GpSuqUUA/sFMwRsVdjk1ovHce7px2UIpK4I5HyEXVdm0H3BVFNKqx1N70MrizSq+4c59/Tj+M7yLT09FACOqwryTktbl64Ridk8tOY1Lhh/Ajv3HemyogC4+eKxnq1dLVt5KgpwVhwRq/MCOR9hl6xU4qVJkuteZbu2NtVoNP5oZeFBiknKEFp6cIXRVUUR5yd/f40lz7+ZV4c+gJABUZ9Dv33R6Qn/x6yJJ7B0Y3vqy6WTR3gK2LivIt5/oyLotJa95pzajj9MDqr7h1nbsLfDvhFtqtFo/ClaIcGepCuFBJNDJwFWb3uHG//0CpFY+b0nPwT4yodP4qG1r2ck5VWFTL784ZP58bMNBAzJMNVVBA3WLZiR4auYdueqFN+GKU4GeDhgegrzjoSwph/rdT+vcWk0mlR6pJBgb8QrUmdMdWWfUhTgRDn9fO0bntnbMdvmgdUNvpV4vXwQXr4KS4FlKaJWZhHDjkRMeR07urqqrJ3VGk1PoJsfuXjV9PnG0jrmPrShp4fW7RyNKU9zVcgU5p17CmRZjXr5IPIJS44L847UVvI7tipkZtyvIz3Ei4Guy6Tp7Whl4eJV6C5mU7a1oTpKyDR48mtnceH444l4vJN+AaEiaHg6hTM7EApBMzXLI65kOlJw0O/YlqjFXZdMSLmHZdusa9jb4ecuBLoKraYc0GYol3JMyisk186opXbYADbtPEBF0MjIrWhTcOvFY33NRenO43UNe30jj1rbUjsTtrbFPFcF2aKrRgzph5Gkj2J2z9RD0nWZNOWCVhYu6aGTUcvCVvS6/tvFIGTC3CmjAHxNOTFLsWjlVi4Yd7yvEEwOffWLPNrfEsVxsbe/d5HMXHOv6CogoXQ27TxAyDSJxNoVT0/4Lco92U/Td9BmqCRmTRrOugUz+M1VU7hp5riS7mXRndgKHt2wI5GvcNclEwilN8Mg01yUy05f3T/MxJGDE0JzeV0jF3n0z0jvm5E8W4+bxGxbsXLe9MTKplSS7EplHBpNV9HKIo3q/mFGDOnHoie2FiR5rRyI2XD309v50B2OvX3WpOE8ee10Qh5+h6qQyaadB3hk/ZsdstPHFYCXj+hom3PdOF6+inDATCnRku4n8fOnFJtSGYdG01W0GcqD+t2HMLpcZq/7CJnC5NFD2PD6PoppNYvE7IS9vXbYAL7/yYkpfodZE2u46L41BE2hxc3oy9dOn63qrymkKIJ8Z+ulkmRXKuPQaLqCVhZpLK9r5IZlm33zCEqRqKV4eecB/vr/zuahNa/xu427inavZHv7rEnDGXvCQOp2HmDnviPcu6ohMZ5s53mRLcDAUqSsLLKV5khP0CuVekilMg6NprNoZZFE3BTSmxRFHNMQfvxsA3/45+6CXM8Qx1eRTtSyOdjaRlNzhL9seZtbV24l6FGePJ187PTXnFPLj1a9mqFsAgYZ1/earevWoRpN8dDKIgkvU0i/oEnUssizpFKP0RKxCqYowFtRBAzBsm2ueeRljkRjCZNXNMt1KgIGisxy5ckkC3mvoIKYnbqyiJM8W9chqhpNcdEO7iS8TCEKxYKPnd5DIyotYrYiZsPhSCwv30jAEEQEpZxzvGjYc5j5j21KZGF7dbWtCGa2hU0nn2Q+nUWt0XQerSyS8Itc+dKHT+b4AaGeHl5RCRbof0JlyCBoOhnaMVvR2mYRtRQ3/nELD/793ynHLq9r5ML71uSVJZ/LhJXL6V3uWdRaEWqKjTZDpeFlC9/4ehNvH85mbOndmEJBwoS/feHpTDmpmoOtUf6/R16mzUpdDXz3qW1UVQS4fMrorE2YAgaYhkHIzL+vRC6nd6maqDpSXdcP7avRdAdaWXiQHrny3Ks9U1OoIxjgEXSaH50JtxUgYAoh0yBq2Vw1/UQuOWNEQjj7rRZuXl7PBeOOp373IU9FETTg7ksndSrU1C9EtVSzqAsh5EtZEWrKC22GyoOzTxna00PIScDs3ryQUMDgqa+dxZc/fDKGwG/W70iYd6r7h7n54rGe58VsRf3ugySX80jmB5e9L9EvPDm7O1+8zivFLOqOVNfNRkcKL2o0XUErizw48dj+JZ+i193VcUOmwe6Drfz42QYiMZUh8C6fMprPTR3tc7YwrmZQRuXZoClMPbm64GMtxSzqQgn5UlSEmvJEK4scNDVHWL3tHc9aSL0NUyiY0nMElGQVeNeedwrpC56AAeNqBlLdP8zdn5xIOGBQGTIJBwzu/uTEognw5Lpf6xbM6HGbfqGEfCkqQk15on0WWYjblA3oNYl6BiAGnnkhn5k6miumjOaHz2znyS1ve+ZS+BEwBEMU4UAgYV8fVzMwq8Cr7h/mB5dNYv6yTZhiYCmbxXPaFcK02qH87MrJgGJczaCiC7hiZFF31kGdzSHfUXQ5EU13oHtw++DVx7k3YAA/u/IMvvLIy57l1VOLf+dHOCAsnjPRUyCtqGvMEHjps3YvgVoOETyFclBrIa8pFbL14NbKwodNOw9wxUMbfJPJSp2AQCFah39wzGCunHoiU0+u9hVmHRV4Xoq4ImiwbsGMXiMwy+EZNJp0sikLbYbyobd3ziuEogB44Y0DvPDGPwkYcOus8YwfPihDKeRj3klWKKUaytoRyuEZNJqOoJWFD9X9w1x6xgiWrN+R2NYZE065ELPhxj9toX/YJGarDplc0s01C2eO7ZRzt5RMNjoKSdPX6P0hPkWiqTnC0pdSS333VUWRTHPE4mibzfxlm3lu+7speQFeJSeamiPcsCw1n2DRyq0s/PjYDkXwZCvX0ROlLnQUkqavoVcWPuza34rqSLhQGZHPCioSs/nKr1/CdivKKvB09j6yYUdGJJlpCOGAwcp502mJWjlXCtmylNc27O0xR3lviUIqpRWZpveilYUPVSEz0d+5r2FIfiVAjrQ5tZ/mL9sECJFYqjAfe8JAHlj9asZ5LRGLm1fUYylH0UwcOTjrffz8A/W7D/V4qYtSb2pUDlFnmtJAm6F8aIlaVBSqFGsvIz2zOhe2rTCNtGxsw6Bu5wFCZmYfCnDeb74lLvz8A6B0qYssFKqkiEYDWln4MmJIP7JFFZd6+Y98MTwe5GgHQ6nabLDSTHZRy6LCbRyVDdOQnMLdzz8wrmaQdjJnQdeN0hQSrSx8qO4fZt65tb77y8FAdfYp1VQEvGf+HaEiaDDv3NqEMA8YTqe9b/3hFWzllPgYEA4QDhikV01piVhsaTyY8x5e5Tq0kzk7OmJLU0h0Ul4WGvYc5sL71nhmQvcVzDz8F/FkNID63Ye4esnGFKd2OGDwsysnUzOogsdf3sVP/v6a5/mdFfLagetPPhn2Gk0cnZTXCZLrQkHfzLEImYICrDRtEVcgcZ/OwpljE8J6UL8gIdNIURYh0/FffOnXDRiSaffqajJbqTuZe5LeErGlKX20svAg2TEYp68pCoAPjD6GjW/uS9kWNOB7/zmBSSMH0xJ1TEiLVm5tT7j7eGbCXdSyeWD1q0R8fCHaNFJctDLVFALts/DAyzHYF3nxzf0Z4cNtNkwaOZjaYQMYMaQfi57Ymppw98RWFs5MTbibd26tZ1RU0JBu9zPoXtUaTefQKwsPentdqELhdN+TlMZKFUGDlqgT4eSX/zC+ZhDrFsxImD4A7vfIt0Dg+3MmMvXk6m7xOxQq50D7SDR9Ea0sPIhH2XxjaZ1nn+hyxAACbj/tODEfz3ZcAXgp1UjMoipkZpg+5p17Cnc/vT3l2DZLccOyzUQtCxGhImAWzQlbqF7VXnWuxtdkFlfUaMoNbWvxYVrtUMwSN0VVBA3PPInOUBUOcO0MJ/w17rgWFLZSBE1xQ1+Fa85pDyeOK9VwQAi6AzEMYeb9a3lkw5sp5p65U0YR9ug2eKTNImY7iiNX4lhXTEiFyDnwSnK78Y9bmPuz9Rn1qjSackOvLHyo330wIyu51MjVmMk0JCNZLrEvLSS2zbaZO2UUF44/novuWwOQ8FeEA3DFmaN4eN0bPPjcazzwbENi9q8ApaDNvU98TDf+cQv9gga2gsVznNpRVp6mvWQhHjf3dLUGVCFyDrzMbkDCLNfdpUY0mu5EKwsPltc1Mv+xOqLZk49LmoAhzJ50Ao+/vNtzf7IOMQUWfnws1f3D7NrfSjhgErXamz4FDIOfr3uDaMxOhMTGaz8teHxzik8jmVZXcXxjaR2mYeRt0muzbbY0HuSyB58naDimMcu2idl02oRUiDamuXxZup+FppzRyiKNpuYI15WBryJmK/7koyggNRTYUnDbynoQGDmkH5FYqpZss2xCAYNoUtNAA2Ftw17PmXbmWCCYJVHcFMd8FfdZLJw5lkUrt6b4F9LpjGDuas5BssIxDaElkvaedAiwpozRyiKN+t2Her2iiNORhVEkprjxj1sIB1Kjn4KmcPPF41j0xNaU44+0WXzvqW3ErPxelt9hoYDBk9dOZ0hVKGsnvXQ6K5i7mnOQrHC2NB5k0RNbO71S0Wh6E1pZZNAX0+/aSU+cMwQuGH88AyoCzF+2KWV/ep8KgK+ecxIP/v21FH9IwICbZzmrBWUrIpZKONHvumQCtcMGAKQI2nRzT9AUDIGQafa4YI4rnIkjB3PB+ON7VRitDvvVdBatLNIYVzOIoCm9oh5UwBBiRW7QFDJN6ncfYnR1FXd/ciLfWLo5Jbw2nfNOO47KYID7/rYdEcFWiltnj+fyKaOZMuYY6nYeYEx1JcGA6SuwqvuHWfjxsdz653qCppHoe5GvCak7BWJvyo7WvS00XUEXEvRgRV0j85dtxhAn10BB0YVyqRIwwDQMQm4OhtdqIv34gGmkRGoFDJj7wVEsfWlXXoIqLtQChmMSu/nisVw+ZXRe49UC0Zum5gjT7lyV8nvpagFHTfmRrZBgaScS9BCzJg3nppljsWxFKGBQjgo1X5TbAe9wJJZTUYDjzE4P6Y3ZsGT9jrya8CTnMjRHLKIxp2d3PrkVutmPP7q3haaraGXhQVNzhEVPbCVqKVqiVl4tRssVvzyNruInqLoi1LRA9Ef3ttB0Fa0sPOjthQQ9qoCXHH6CqitCTQtEf3SjKE1X0Q5uD0YM6UdrWyz3gSVKT1nN4v4NEf/s8sqgiY3yFVRdSZ4rROJdORJ3+E+rHZpS4LGvvxdNx8ipLETkVOAnwDCl1HgRmQDMUkr9d9FH14OI9MV2Rx3DgJRMiPPHDeMbHzmNJ7e8zX3PbCe9fUU4YPDTz5zBuJqBWQVVZ5PnmpojjK6uYuW86bRELS0Q0Q5/TeHIZ2XxM2A+8D8ASqnNIvIoULbKYtf+Vieb2Oq9q4vuIH3t8OQre/jbv94lGrMz1GzAEK776KmcfeqxQPtstypkegr2joakegnFiSMHd/LJyoNCVdrVaCA/ZVGplHpBUg3hZS1F+1I/i5Ap2KpwocF+EVMxW/Hdp7ax68ARzhh9DAse3+yZoNfRWW9Tc4T63Ye4YdlmIjEtFJPx6zei61dpOkM+ymKviJyMa5MRkTnAW0UdVQ8Tt32nZyyXI35FANMJmxApQGHFJc/v4Hcv7Ey5b9y/kY+AT064i1eiNdzw3mS0UNQOf01hyUdZXAM8CJwuIo3A68AVuU4SkYeBmcA7Sqnx7rZjgN8DY4A3gEuVUvvFWbbcC1wEHAE+p5R62T3ns8B33Mv+t1LqV3k/XReI280f3bCDH/7t1aKFkPYGzjxxCHW7DvoXeOogfv6gZAHvlYWdbGpKrkTrhRaK2uGvKSx5Z3CLSBVgKKUO53n82UAzsCRJWdwF7FNK3SEi3wSGKKUWiMhFwLU4ymIKcK9SaoqrXDYCk3Gky0vAGUqp/dnu3dUM7nQa9hzmY/c+VyhZ2WGChtP7uqfuvf7bH+HeZ7azZP2OxHZDUsucJ/OR9xzLmlebQNmeq5GQKZ4rmnhGsVfvimm1QzMykL2oDJnYbnkQ7ch10PWgNPnSpQxuEbFE5A7gSFxRiMjLuc5TSj0H7EvbPBuIrwx+BXwiafsS5bAeGCwiJwAfA55WSu1zFcTTwAW57l1o6t86hOpBF4ai5xInKoIB6ncfYulLu1K2G1mSOda8upfZk2qwVOYxppDovhc2xb2HkYj7BzyzsOt3H8yZ+xIOCD+94v2sWzBDK4ok4kUPtaLQdIV8zFD1OErlf0XkMqXUPui09BqmlIr7O94Ghrk/Dwd2Jh23y93mtz0DEfkS8CWAUaNGdXJ4mcQjSnrS3d2Tdakcm7fKcJTGbEXAwNMMFIkplm7clbkDtzufgpCp+NlnP0DNoH4p0VCbdh7wdMqCZA06CBiweM5Ezj71uE4+qUajyUY+acoxpdQNwEPAGhE5gwIkICjH/lUwKaiUelApNVkpNfnYY48t1GV7fTZ3vvj1Jrp08gjG1QziaCzTntSVvh9RCzbtPEjtsAEps14/p+y4moGJDOSqUOZoTcNg7AkDO92jW6PRZCcfKSgASqnfA5cBvwBO6uT99rjmJdx/33G3NwIjk44b4W7z295t9JUw2i+cdSIhM3PB+PsXd7G/JYqdZXVTGeqcMr33b9szBHu2shSzJg1n3YIZ3DprHP3DqQpDBC68bw2f/tl6PnTHKlbUdet/E42m7Mnnr/yq+A9KqS3AWcDXOnm/FcBn3Z8/CyxP2n6lOJwJHHTNVX8FzheRISIyBDjf3datXHNOLR6T2bLiuAFhTCNTWSgFdTsP0M/nBfQLmtw2azy3f2I8FUGDymz9U9OI2VC/+2DG9rhS+M1VUzL8D9X9w5x7+nEZprmjbTZtluJI1CISs7nusU16haHRFBBfn4WIzFBKrQJGi0h6M4HmXBcWkd8C5wBDRWQXcDNwB7BURL4IvAlc6h7+JE4kVANO6OznAZRS+0RkEfCie9xtrs+kW0gO1eypSKju4o6/bPN8xqhlM6a60tdv0trmCOfLzxzNBeOPp373Ia5esjEl7yFgOOGyXg2lDrV653fmyuC+5pxa7l/dQMg0iMSsjOiqNktRv/ug9mFoNAUim4P7w8Aq4GKPfQr4Q7YLK6U+7bPrPI9jFU4+h9d1HgYeznavQuNkBR/kBjcpL1sv6HIhmzK8d9WriXh9y1YZQv+2lVsZeUwl42oGcvapx7J4TmZs/9qGvZ5O7+se24StVN7RS8kKHBRfOvskThxaxbzf/tPj6NSVkg4h1Wg6j+6Ul0ZcGBkiHIkWIGW5TPj2hadzyRkjWL3tHW5avoUjafkOIVMwDEnkNyQLZiBrjkS+Hdv8ur2tnDedC+59LsXhHjBgw7c/4pnQVy4F9bTy0xSaTuVZiMjFyeYnEblJRDaJyAoRObEYA+1pkguvaUWRyuL//T8Azj39OM9mUFFLpXSmq+4fZsSQfuza30r97kNZI8oMEU/fRTp+zY1aohb3XDqJcECoDJqETPj6eacmjinHDnrL6xqZducqrnhoA9PuLC+HflNzREe1lSDZHNy3A+8CiMhMnBIfX8BxRv+0+EPrfvpKmGxnCJrtpTjmnVvrf5xbsuOR9W8y9Y5VzP3Zeq761YscifrXnjwStbh6ycacAi9braNZk4bzj2+ex1fOORkRgwefey0hRL1+r6YhrN72Tq8USLmUX28WtuWsBHs72SSjUkodcX/+T+DnSqmXlFIPAYVLZCghRgzpR7TcPdmdxFYqYVKaO2UU4YB3XmabbbPhtSZu/NMWojGblqjjfE5ejQgQTAvTjcRUhsB7bvu7PLe9XaDn0+3tx882JHqGx4VoVcjMUDItEYubV9QXVCB1l5DO1j62NwvbclwBlhPZHNwiIv1xopPOA36ctK+iqKPqIeKz5ruf3t7TQyk5Lp08IiGUq/uHWTxnIjd4lBlfOHMst66oz3otBVzy/hoee6kxxbGubMWu/a2sbdjLdUvrEj6IoCnc/cmJzJo0PKMx0v6WKMs27mTSyMG0RC3P7O+WqJVw0JuG0OIWrGpxTY2FKGfenT4RvxVWVcjs1f0rdEn10iabsvghUAccAv6llNoIICLvo4xLlE896ZieHkJJsnTjLr5+3qmJP9pkoR1vYFQVMqnbeQCP3L4Mfvdi5ow3YinaYhY3LNuU4qxusxTzl7ULvfjnpj+9klLc8NLJw33NVBNHDmZa7VBWb3uHm1fUJxQFdF0gdXeTIb9qsn7KsrcIW11SvbTxVRZKqYdF5K/AccCmpF1v4+ZBlBvL6xqZv2xzxnbdYNVb6CTnQsRn1krR6R4gFUGDN5qOIB5v3DQk5f4New6nKAqApRsb+faFp3PPM9s9S3LHE/q+s3xLynldFUg9MSP2aj3b1Bzp1cJWl1QvbbIWElRKxUtuJG8ry1VFfHYY9Sh4ZAieEUDlTLq4ThY6DXsOU7fzAJNGDmZIVSilU11X2dcS5ajHdSxbpQi9up0HPM8/pirEugUzfENKiyGQempGnJ64WA7CtrP91zXFJ5+qs30Cr9khQNB0Sl70haVFOGBgK8X880/j+EEVnkIn3fQjOCU/sikKU5x3mE2VhAMGC2eOZdHKrRn7gqaweE6q0Jvk0197kluUMJuQKbRAKiUhXQ7CtqP91zXdg1YWLl6zw1DA4J5PTuBbf9jC4UhZtx0H2vtn3/PMdtYtmJExQ/cy/SjgSFv2nJSKoMlPrng/8fXKzn2tLHpiq9vxzmLeuacwd8ooT4VdETR48DOTOfvU1AC82mEDuHLqKJY83z6eK6eOonbYgLyetdACqZSEdK5n08l8ms6Ql7Jwi/iNTD4+3va0XPCbHU49eWifqDqbTNzeHi8d3rDnMKu3vcOeQ0c7db2YbTOuZlCKYLpg/PGeAsvrXY+rGeh53dtmv5crzxyTMInlqyiKRW+YEZdjJrume8ipLNxCfp8D/k27MUYBM4o3rJ7Bb3a4cOZYbvzjlhxnlw/J9vZ0s1NnsBWsa9ibUQZkYpopqTPmnCFVIU4ZNoAhVaEujbEv0N1RW5ryIp+VxaXAyUqpaLEHUwp4zQ7H1wxKhIeWO0FTEgLay+yUjgD9wwHPyq9x2izF9Y9t4u2DRzMildJntfmac5qaIzyyYQcPrH6VkGnqWXIe6DwGTVfIR1lsAQbT3qiozzFiSD/a+khmt7IVgyuDNDVHfCOO5p9/KsMGViSioeK5FunF/JKJWorvPrUNIOusNr0A4aadBzKUxvK6xpToq0gs5ns9TTs6j0HTFfJRFt8D/ikiW4BE3r1SalbRRlVirG3Y69mLoRyJKfjyr19CAd/46KmexwQDBnMmtzcwrO4fZnldIyIdy0hJn9Um29OPxixsW9EvZBKzVUo12wWPe4fp6llydkopakvT+8hHWfwKuBN4hezRj2VJU3OEG5Zt7guRswla3RLg9zy9ndkTT2D5ptTUmu//73ZmnHYctcMGuL0/nDyLZIVqChiGd8OjOMmzWi97OkBzJLUkh1+Ic/r1NN6UUtSWpneRj7I4opS6r+gjKVF27W/1bDfaFzBFOOuUY3nmX3toibYL52jM5qL71vCpD4xk6Uu7MJCMmX5lKMD3/vO9fOOxTRmJjpVBAxtSZrXZlAC0Z3D79UQPB0TPkvOkN0RtaUqPfOpxrxGR74nIVBF5f/xT9JGVCCOG9MPyaSla7rRZNpNGDvbtX7Fk/Q6n94dHnkWbbTP15Gq+P8epEhsvNBg2hZhyIsySndF+SqB9LCoxE06uPBsOGFz30VP5xzfP085tjaaI5OyUJyKrPTYrpVTJhs52pVOeFyvqGrnusU19xm8R5/ZPjOfyM0fzyIY3uWVFfV7PXxkysZVi4cfHMn74oERl2IvuW5MSLeXVHW+FW5vLyx9x+3+M5/Ip7a3gdWKZRlN4snXKy2mGUkqdW/ghlS5eQmjWpOGMPWEgP3zm/1j5yp4eHmHhCBrCbbPHsWjlvzJWB5e8r4YLxh/P8rpGFq3cSkCgLcf1Agbc8LHTiMRsFj2xlYAhRC3FF6eNIRwwiVrtWfBezui4Pf3RDTv40artmGIQUza3XJyqKKDzphStZDSazpFPUt4g4GbgbHfT34HblFK5+2D2MvyyW9NDNcuFW2aN4/xxx7NweWbC4V+37mHlK29j2XZGOGzIFESEaMxOcfzHbLjjya0cTbNK/eTvrxFIM3j6OaOr+4cZVV2JiIEYgmEbDKgoTFWaXNnLWpFoNP7k47N4GDiMk5x3KU5/i18Uc1A9gV+XroY9h31DNXszAUMIBwz2t0TdkNdUmiMWkVimogCnAu/dn5xI/3CmEE9XFHGUcooF+nW4i5McGnsk6oyhEN3ScnVhK2aHud7c5lSjiZPPlO1kpdQlSd9vFZG6Yg2op/DLbq3beSBrlE5vJWYrrl+2maApGB3Mj4g7/DtSMytkGiz+5ERGHlOZdeZerCzjbNcFilYGQ9di0pQL+awsWkVkevyLiEwDWos3pJ7BL7t10sjBZV1IsM1SWVdNflHDA/sFE1FJVWEz531aYzbXPbaJN5tasgrgYmUZZ7tutp7WXUH3lNaUE/koi68CD4jIGyLyJnA/8OXiDqv7SQ/JjJtKaocN4K5LJhBON7r3Ebyihk1xKsHOmjScdQtm8OhVZ/L1GbU5r5VuUvIyz/j9HgrVc8LrusVSUMVSQhpNT5BPNFQdMFFEBrrfDxV9VD2EX3brrEnD2frWIX7699d6eISlgWFIoopsPCppxJB+3L/631g5QrHjwnJtw15f80yxsoz9rlusMhi6FpOmnOhwNJSIlG00FHiHZDY1R/jFutd7aESlR5ulMmz6u/a3UhkyczaJilg2bTHL00cw9oSBtESthCAvRkSS33WLoaA6ooR0JJam1MnHwf0wTuXZS93vn8GJhvrPYg2q1Ni1v5WQaSaqm2qcUiDJQk5UPQAAIABJREFUTudcGdim28dclGLuz19APFYgF923hnCg58qNF0NB5aOEtBNc0xvIxxB/slLqZqXUa+7nVuCkYg+slMglCMuN3O5qaIlabHitKfE9PosOmd4e8XjydsRSRGM2kbRs8KNtNlFLlaUjuLp/ONF1MB3tBNf0FnQ0VB5k1iMSTI/chJ4kmCakg3kOz0u2e6VKeB333ae28cj6NxPfZ00azpNfO4tQHsEAFUGDkCkMCAcIBQzCaTcwEOp3p7rHyjFfQTvBNb2FfMxQXwV+5fouBNgHfLaooypB0s0JD615jZ/0sMM7HDD48tkncfYpQ7ni4RdSajeJIVSZRs7ufl7lnuImo5RthmB5HHzrn+u5YPzxiVlz7bABfH/OBK5/bJNv57w4T37tLFqiFlUhk5n3r0256ZE2i6uXbGTxnPYs+nI01WgnuKa3kHMKqJSqU0pNBCYA7wUmu//2OeLmBMAze7m7icRsZk2sYfKJ1Rkrny9OP5FYHqazsCmEAk6uRNAQPvqeY32rzHoRNDNnwdlWGFUhMyUseeLIwUnhyamri3iobTyLvhxNNcUKFdZoCo2vxHNDZa8BhgPLgWfc79cBm4FHumOApcbyukbmP1bnmX+QL14z984QMhzfQVNzhNHVVaycN50nt7zNA6sb+M36HdjKKe4XDpq0RLxXGGIIT8ybzt1Pb+epLW/z9L/e7dAYLKU8Z8HxFUZyJNDCmWMZXzPI09E7a9JwBlcG+cpvXuZI0mrIL4u+nLri6YZEmt5Atunxr4H9wPPA1cCNOGao/3BzL/oM8bDGqpDJ//tdXZe75hWs0rkIWxoPctmDzxM0DKKWha1Ss7LDAYOfXH4GO/cd4baV9di2os0m0V/irksmAPDUlrc7dOtwwCkmmG0W3FEhOK5mEHZalJRfFn25mWp0QyJNqZNNWZyklHovgIg8BLwFjFJKHe2WkZUIKX2h26ySaq/61Q+fzKIntma0Ik3G6fKn6F8RAIRgwMCwFdecU8vcKaOo7h9m2cadnueGAwa2Uti2ylBwSsET106ndtiArGPsiBD0y0uIm6l072iNpufIpiwS7QuUUpaI7OprisKvL3R3EzQd53LyCEKmMPKYypxFDo9ELa761YsoUvthP/BsA3OnjAJgkuuHSefuT05g6slDqd99iK/8+qWUnhfhgJnTed4ZsmXRa1ONRtNzZFMWE0UkHrsoQD/3u+B0yhtY9NH1MLn6QncHAUOwbZUxAsMQT/NMwABDDKJWUs9sC9KryioFq7e9w7mnH8eQqpAT7ZTkiDENYerJTob2uJqB2GSah4plBvJbjWhTjUbTc/hGQymlTKXUQPczQCkVSPq57BUFeIc1Fiq7Imj4V3RNHGM6x6SbgMIBx1cwpCrENefUEg4IVSGTkCn85/uGo1Ru5RaJ2dy0fAvT7lzFQ2tfyyiUWBk0E1FOHY3YKcd8CI2mr5OzB3dvpJA9uFfUNXLD45sBJ8s4bAoKxcUTavjjP3d3es0hOOal5JDUkOnM7gOGgcLmi9NP4pf/eJPWJPNPZcjkp1e8n/1H2tp9KTEL21ZUBAtnGgoHDH525WTG1QxMKIV86heVaz6ERtMXyNaDWyuLPGjYc5gL73uO5DbVAcMRqC3RwpmoDPEuCZ5MOCDc/clJXPdYHZFYcX53QVNQStEvGPAV+F6Ko6k5wrQ7V3G0rf2dVAQN1i2Yoc1HGk0vIJuy6PnMsl7Ak1veTlEU4PSbjhVQUQQE8pH9Mcup0FosRVERMLCUImaTqCCbXmHWb/VQrC53Go2m5+mbHX06QFNzhAdWNxT9Pvkm+VlKpSStdYZTj60iZOLZ4c5WKsN/kVyrKFvhOy8fT9Rqd4R3ly9D+0w0msKjlUUOnPLk2V9TIJenOg86u0ZJv3XAgNv/YzzXffRU/Or5bX+3hagFU088hts/MT7FcX3zxeOI2f6RT7v2t6LS9itbJVYPd10yIaWooWXbrGvYy/K6RqbduYorHtrAtDtXsaKusVPPm0sRFOo+Go0mFW2GykE+5cnThWt3kn5r0zC4YJxT2O/C8cfzsR8+55sx/sy2d/ngidWsnDedup0HGFNdSTBgsnDmWBat3OqZAFcVMjPKi0csRVXIWaVMqx2aosBiNsxftgkQIrHUZkfJpq18yOU898qL6cx9NBpNJlpZ5ME159Ry39+20+ajMwpV66kQhMx2H0H9W4cwfKrFxvneU9u4++ntiLRHe4khLPz4WMYPT63j1LDnMCs27SZkxnM3HCqC7dVtvRpFmWJkxBz7+TL8Iq7yUQTaZ6LRFA+tLLKQPJNVTi6i53G5BHJ3EjcZxYVrW45xKUjUkQJnlYClWPTE1pQoppv+9ApL1u/wvU7cTOW1ErOUDSpVW3gl9WVbOeSjCHS5b42meGifhQ/pjtxspqZSiD6uTCr9Xd0/TP3ugxhpDZp8mth5kuzUbthz2FNRVAaNjAQ9rwS+xXMmsnhO9qS+XB3j8lEEuty3RlM89MrCh3xKfcTzInrSZwFONnjUsrnhY6clGgXdsGxTRnhtMGAw76yTeODZBkKmEyIbr1KbTrIgrtt5wPO+V511Ep/90BjPcuNedZyy1XbKtXLwKzKY7701Gk3X0MrCh1yO7cs+MIKVm94qSjG9juL4UhTffXIbKLjnme0ZiiIcMBJmnSs/NCZRcv2pLW9z/+oGlFJELUXIFAzXZxFfWfgVGpw1scZXGHe0jlM+K4d8FUHyvfPJOtdoNLnRGdxZWFHX6NseNGiAQgq6qhCcpLioZXfaYR4woCJo0pzU7KgyaPLTz5zB2aceCzgC9JENO5z8EaVSoptMgXNPO5Y1DXsJmWZiBr/xzX0seb7dFHXl1FHcNjv/hon5lAGJl1YpVKkQXXpEo+kYutxHF3BKfazJMNVUhUw+OXkEv/zHmwW5T74EDMdHEjKFVo8s7n4BwUKIxrxLbviZqLIRP39/S5S6nQeY5LZCzRevMiBetafix/qtBDqyStClRzSajqPLfXSB2mEDuGXWOG7845aU7ZZSXDvjFDbvOsDLOw5223hitqOoopbtGbJrKfjE+2pYunFXYtulk0cA8Nz2dzqsKKDddzCxg0oijpc/IhKz+cqvX8JGpcz4081XcQWxpfEgi57Y6nYEtJl3bnvzpnzvqcNoNZrOo5VFHlw+ZTQouPXP9QRdx3C8HemW3Ye7fTzZ/CTXn38ad/11W8q236zfwe9f3IlpGJ2qKdXV8FM//0+8mZJf4lzcjGSKJJ45Lvzvfno7969+lcVzJnqalnQYrUZTWHTobJ5cfuZonv/WeTx69ZmsWzAjUTivUP0t8iG9ZlNF0CBkCpUhk6ApfPvC0zn9hIHE0uSyrSAS61xNqXjvDC+TkF/ZjfR9ySGtlaHMelTJYbrJ14iH0vopx0hMpYTXJqPDaDWawqJXFh0g3UTSFrNSEtrinHniEF54Y3/exQHzxeteX/3wyYlQ2Luf/j9mvveEvK5VGTRp9egpHjCgXzCQYuoB2LTzQMJXkM1x7LcvHslUv/sgVy/ZmLLC8Zrx59ulMJtpSYfRajSFQyuLTrK8rpHrl9Z57lv/+v6i3z9oCh8bO4x7VzkVcWOuyeXxf+7OeW44YLBw5nv4VpofBuB3V5/JkTYbUIyrGcTahr0pwj9eN8qr7AaQtSRHdf8wZ596HIvnTMyIeoJUhZRPTS7IbVrqaitWHXqr0ThoZdEJEqU0eq41N5alWL7prQ6dUxUyE/6WfS1Rz2P+8M9G/vDPxoQj2bJtYna7r+DWP28lmGa8TDYj5eNUTp/xr23Yy7Q7V2WsRtKT8BZ+fCz7WqLcv/rVlLDeYglxHXqr0bTTI8pCRP4LuAqnNNErwOeBE4DfAdXAS8BnlFJREQkDS4AzgCbgMqXUGz0x7jj5mkiKSb53rgwZ2AoWzhzL+JpBCeH83Se3eR6/7KVGopbt+2yWZRONpW5Lnt37OZXTZ+jxT7YCgX5mpLlTRhV9tq8r2Go0qXS7g1tEhgNfAyYrpcYDJvAp4E7gB0qpWmA/8EX3lC8C+93tP3CP61HyNZGUAtecU8u6BTO4fMpoqkImv3thh5to6D1+5VMsMY5XsuDCmWNTSnKkO5XjKwevHhNxxZtM8kqlun+YiSMHd7uAzjUujaav0VNmqADQT0TagErgLWAGMNfd/yvgFuAnwGz3Z4BlwP0iIqoHswnjQnF+J3IWupsf/u1VRh5TycY39mWtGhsnV5XadPoFhLBp0NQcofr/b+/M46Qo7/z/fqr6YAA5xIMbJSMxMxNBnQ0g6iqYBBUxuyKbiCGXcbMrxo13fgYR+eU0uj8Vcqi5TMghmMilZlVwIxpI0MyQmYnCROUYvCCIAsNMd9Xz+6Oqmuruqu7qY6aPed6vF9pTXV1dx8zzfZ7v8fkOjDKt9jge+HQjTswDSBTHec3Qs6W4pq5Iess1lOm8VBxD0RcpSQW3EOI64OtAJ/A/wHXAJnv1gBBiDPCElLJBCNECzJRS7rbf+zswWUq5N+WYVwNXA4wdO/bMHTt6vrJ638Euvr6ujd8GCCoXi4gmQEg+cfpofvtSR5LciCNsmPaZlP4TxWZgVCduSuY2juaRLbuTBvJxwwZw5UObE/28AY6JhvjFVZOZaGtO+cl8pBqGhRfXsWRdW69VZXudl4SSxDGUgVL0BmVVwS2EGIq1WjgZeBdYAcws9LhSygeAB8CS+yj0eEHY2L6XdX99sze+KoGBREjBoy/uTnMJ+aXqCjTyb9xqEdU1unxcV44OlaMd5awgrl/RzA/nncGReLKlOtwdzyoQ6BUzWLymlYhPf/CgkiG5kHpekHmV1FOoQLuiHChFUd4FwGtSyneklDHgt8A0YIgQwjFeowHHsd0BjAGw3x+MFeguKc5g5lX70JMYpiWJnou3SGYwFEGKCiM63D33NHSRWwli3JB84eEX01xbhoRvP5kcYE+NTbTueQ8t5exCmki736mps8Xu9Q0kzqsUcYxsfT4Uit6iFMZiJzBFCNFfCCGAGUAbsAGYY+/zGWCV/Xq1/TP2++tLGa9w2L2/E1niPhZB0AUsuqSBuY3eM1FdSzcAqZviJhw4EkeI4l3vI1t20/6Wt1TKqqYOvvjwloQciMPhmJn4he3n0XipWAOrn8EphYRItQbaMykAKMqTXjcWUsrNWIHql7DSZjUs99EtwPVCiHas9Nkf2R/5ETDM3n49cGtvn7MXAyJ6krR3uaIJWLSqhb3vdXsaBi+J9dQOe6a0jpG6sojqgkjoaObT/KljCeXQjm9j+ztp27Kt2Jx7bpqStQvOTnLHFGNgzWRwSiEhUo0aV8Va/Sl6l5JkQ0kpFwGLUja/CnzEY98jwOW9cV658HhL78Yq8sWJBa/flj4wexESlrsn1YjETYinpNUKTbBuwdkc6jYS8YHZp41kzg83BfquJWv/xrEDop4DvrvOIxrS0AR0Jkmc62maUcUYWHfv70wziu64SG9LiATtEFgpqPqVykVVcOfBvoNdLNuwvdSn4TmoF0pcghbQy7fw4ro0yfLGk4cxf+rYpEZJfhgSblqZPFB417BITJk8gHsZgWIMrC0dB9KMkFev794c2KpJ40pJx1cuyljkwe79nUR0na54PPvOPUjclJ49LQrFqzNgKv3CGg2jrDoKJ/toQMSa7V83YwLzp5zExva9fH1dW0ZZFF0TSQOF34APBDIChQys+w52sWRdW9r2hRfXlXwg620D1VNUo1utnOjJFGtlLPKgkiq4ewopJaOH1iTSOgGOxEyiukBolqz50AGRLPXgYJgybaCYPWkUdSMGpXXlC2oE8h1YvWa9A6J6wigqCqfa3GrlRE+nWCtjkSOO5XbUV4GkIrHeprdi7EJY7Vwd/u2fxgBHVWYdugwJhuSmlc2ASOut4SasC+6akz5Q+P3S9/Ts2msS4GXMqp2eLgCsJrdaudAbsSBlLHLA3bktZpjc+LEPMnn8MF57533+65GtRfuesEZG100pSA1j/ObPu7jgQ8N9BRVNUxLziadEdI175p7G1A+k/yKXKgCamATYVeJe8umOm62aB7jeKgCsFrdaudAbsSBlLALiHsQcvvHEywmJi2Jy6aRRrHwpt3TCmrBOV9woesMlP7rikj/+fa+vO87P2EVDGnfNsQyFWyzQwasYr6cDoGmyIikKvdO+vR5IdrMtvLiOhlGDq8pwqEylyqU3YkGqrWpAvFIqgaIbCl3AwGhuNjyiw2fPGpdWTNfT/Pj517n+oxMC768DD85vREIiz/6sbz3D/c9sZ9/BLt9ivJ4MgHrVVSxZ25b4vsTgaVu/LkNyJGZy22MtzHtoU8XUCQQpgqvWAsC+QG/UAKmVRUBGD60h5qONVEw0TfDzTbmJIN74sVO55+ltGeMDheKVdaVrgoiuJdwz2dB06B/WuGrlVrrjR2evdz+1jXuf3oYk/TsiOr49wFv3HAAE9SMH5f1HkWn57rz26+3haGKV++w7qGtJZSpVNj0dC1Iri4AMGxhl0SX1Pf49MSM33SeAV958P21GWGxCuiCaIuJ3uNvgG4//jSOxYJK2U8cP41MPbqLbw6rFpXewXnqoV61q6mDKN59h/o//zPwf/4nJ33g679l9pgHSqtLPboHLefadiwRKKSrUFcWlJ/u/qJVFDsybMg6E3VpUF8TiZqCahJ7m0b90FN3qa0BI1wiHBIYpXS1N25OkOLoNGdj99Yftues/xgyZNHPfd7CLm1duTRInjJtw08rmvGb3fqmcTu9xYUf2w7ogZkgiukh75uUy+/bKYso18KkylRR+KGORI/Mmj2Nm/XCWb97Jfz+1rdSnkyDT/FdA1nqHtM8IEgbxE6ePSmQImaaZNmBGdI0jPegDk6ZMDG6793d6alzpInkAtNxU7+E0Yco06GWSIncQwMp/n8ILr/6De5/ellgFhXVRFrNvP1dTPq4llamk8EIZizzYf6ib+9dvy3kALhW5nKeuWQUVhiQRh3CC+Ednp8lHlMi8pEd0YQkdZksT7jIkAyI6YLmNDI/vMeTRAXBVUwc3PNKUiOGEdcHdl0/MmALqHiCbd73roU+lczhm8L1n25PcZZqwigVLSbYspiBFcKq5kiIbyljkyKqmDm5auZWAbvqKQQAXf3g4MxtG8NXf/jWps10qUV0ghdVO1Rl8tuz4RyA9qMQxQoK75kxkWu1x3P5YC+tcwoypHf/6hbWE4Ro2MMpdc07jhhXNCVdUSIO75kx0uamak4L9MUOmaVBlwm82DiLNiER0veS6RtlcTdlcS325uZIyksFRxiIHnBmcV4C20pHA2r++ye/b3iJbu5BUtVmwZrJBiIY0FpxfyxWTxyb+OJddeSZfeet9mna9y0nD+nPlj/+UVhXv1VnPKxvKSnHWgGRrnqpBlQm/2Xj9yEFlmS0UxNXk51rqy7UVfdlI5oMyFjngNYOrNmKG5VLK5Lw69cRjGDogQu2J/m4bL3QBt8+qY2bD8LSCvFr7mG4plUxuk2EDo5w74YS07xg9tAZDpp9HrrId02qP44FPn0mqMSpHXaNC9Jb6qgpsXzaS+aKMRQ70FQFBXROENOEbtG7afYCp33yGa6efwoUNwznQ2U23kd0vZ0i4fVVLopd2tyFZdEldImFg2YbtRHTdqqLOs0LaclNN5PqUmIWXBpUfmWac5ZotlO959dXair5qJAtBlEGH0qLT2Ngot2zZ0iPHXt3Uwc2PbkXXBIe6qixwYRPRNaQ0A+tTRXSBKSVSQjik5SysGNJIKyjsF9Z4/pbpef/hLt+0gzvWtBLSrHO7a07mALfDvoNdaZlQhZ5LkO8spfFxfqf7kjumFM+5EhBCvCilbPR6T60scsSZwa1p7uCONX8r9en0CIZpEtI1ME1CQLauHe402nAe3+e1gClkluf0pYgZMhEET63V8Bucg8w4izm4l4PfvFxXSz2JkkrPHWUs8mDYwCjjjz8m+44ViiHBsEfwOHDSsBpe3xesQrlYcu1dcSORLusQdJDONOA7xXZ+g3M2t0wxB/dC/ebFNFp9sbaiLxrJQlByH3lSP3IQoT5y917f18nXLjoVPU+hwohuaUjlgqYJZi3dmJDxWNXUkRAfzCbe5yXTETNNBkT0rNIXmSQvcpHOCEIhwn253A+FPz0pj1FtqJVFngwbGOWeuZOsJj/SbvpTBfjlQf1l5/68Gy198iNjaBx3LDc/uhWBpDOWfqCakMCQVn1F3JSJFcrNj26lbsQg3xk4kDQzdGb+jkxHv7A1GH/nstM41G0ECmp6peY631PMoGi+wWWVyaMoBX1kblw83FLPsyeN4oVbZzD9QyeW+rSKQkRP7SRxlHUtb+V93Ee27KZuxCAe+HQjH68f7rnPpDFDeegzjdSEk11PYU2jyU7NTd2+fPPOpNn18s07EoOoY7xNU7J2wdk5S19sbN/L1T9/kWuWv5SYuRc7cyhf4T4lJa4oBWplkQNuf3W3YbLg/Fqmjj+WJ1zVx5WEwHL3OPIZhmkSCeeezeQmpFld9dyrkLhhctF9zxEN6RyJeYfLt+z4ByMHN3gOxpPGDKEz5XOHu+Mss0UNndn14jVthFN0o6IhPan6O6j0hdfMfe2Cs7nmvFqWulJ8Cw2K5uM376vprorSooxFQLwGkLuf2pa3H78cCGmWrpODIcHIwVA4165pgn4h3R7QBUZKOrYVK5d0G/55Vf3CIQ51G56D+dABEYRIdpBJSFK/ta5HpPUccQ+i+w52MW7YANa6qs+9Bmcvd5M0JRfdv5GorgGCq88dn1SFnkouwedcg8sqk0dRCpSxCIhf9XYlhyq87EJUt2IHQUQBnWsPCfjmvzZww4qtaQN48HOxBvWJY4akzbSbd72LrokkWXKv0zvcbTC3cRSrm99IapG6e38nT7a8mdZbe+KYIZ7n4jVzt9xaMiH1suzZdq6YPNbz872RDltoJk+pazsUlYcyFgHpK9Xb3YZXu6HMRHSdIzGTiK7lbCwGRHUMUybNjFNn2gMiemDX2OrmNxIrh5aOAyxZ24YuRMIVFSQgnDpz74obaJpIOge/wHZvBp/zTXcth9oOReWhAtwBcQaQSJn4nQRHM32KiSRzbwwvnLiClzGNhgTzp44l4pFnPCCis/iSep6/ZXrGwepQt0E04H0Pa1rCxbRkXRtHYqZny9dsAeHZk0bx/C3T+cVVk3n8y+ekve8XI2jdcwAtpVd7OQWfi53+q+g7KGORA7MnjeKhzzTmXDPQE2gitwK4b/5LAxd86Hh0AcW2MQsvrqP2xGOSMnuiIY0bPjqBF26dwZ2XfpjHrz07zdDGTZMTBgUL6IqA7ficQdwrY8hrv0w4Ofip1+aXtbSqqYMvPryFwynGqZyCzyqTSpEvyg2VI/UjB6OlK2AXDd2VnZSJXGMlt69qScQoihln6R/RaBg1GMjsR6898Ri+e/nEhGunMxbHlHDN8r9kdYU4q7obVzSntTSN6BoSk36hUFqg12ul4+X2SsXLn58tRuDM2LviyecXDZVXH+tiZ1L5xT5UTKT6UMYiD6z0yXZCmqA7bvCvZ47mL6/vZ9s7hwo67qTRg/hrx3tFOstkiqTCkcbhbpOWPQcSs3knSO3gHjSOFru9xxcf3kJX3CRmZ0hl8+vPnjSKuhGDuOj+jUn9RISAey6fxKCaSJKUuFfGUBAl20z+/EwxAq8EiP5hnR98+kzOnXB8Dne0ZylmJpXfvVIxkepEqc7mgPuP4HB3HCEEuibyzgCqFkKaQCAJ6zqGNBMKr36DRvOud7nyoc1J3fiOiYb4xVWTE4bGa2a672AXv9y8k6Ub2u2+3wZSSmrCId9BKZcZbiFKpJWmYlrozN/vetcuOJtZSzdWzH1QJKNUZ4uAV5YLUubcd7oace5BzLR8c9c/0pRRoiOIWN/NK7cmXHJ3zTkNCQnDI6XkY3UnsGbrG8RMEkbHa3WSS8ZQIXIelVb7UKhwoN+9avJohKX6RFQHylgEpC90ySsWcdOSy/AbNCaOGcLCWXVWxbUukmII+w52caOrvzbADSua0QR0xWXieI/+ZU/a93oNSrnMoAv15/clFVO/e+WVFVdOAX5F/pQ+radC6Ct1FsXi9b2HfAeNVU0ddttUQSxuxRIc91HrngNJhgKsVq+p6aheOMqyzbvepf2t97nvme2c9a1nAiuz5qvVlHqMvqBi6nevgmaOKSoPFbPIgeWbd3Db71qKftxqJKzB7IkjWbN1D1E7U2nhrDrGDO2fCG47OD5tgDXNe7hjTVv68XSRZkQc+kd0TCmZ2ziaR7bsRprSUwU4GhKsu/acjFIfoDJ5ckFlQ1UXKmZRJBpGDmZARPcs8srGjFOP45mX9/bAWZUnMfOoq+ijHzqOs2qPY8naNjTSEwIcBdnvPWtlmKUS0uCO2fXc/lhLWtpvNCT4wZVnMHJwTVpgNZWuuGTmvc9RE9YzZumUUyOgch90/e5VOd1DRXFQbqgcGD20Jk0kLyjry9xQaMKq8fAarN2cUzuMaI5dn9a1vMniNS0ciZkcjqUb2s6YpSB7JGZy0NXXvCakEQ0J7pk7iZn1w61Wryl8ftrJ1I8cnOhVkY24KSumcrk3Gxy5pfcVCi+UsQiIM8NbeHEd/cIauRZxl7uzz5SWsqrMcqZ/3rGfuy+fSE2OZeAiw6+aaVpuJjcDojpLPtHAC7fOYPakUeze3+lZOf/TF3Yw9Vvr2fzqPrqN3GJK5Vy57CfL0f7W+0Uf1FXXPUUQlBsqAMl9LAw+9U9j+fmmHaU+raJjJv7jT1jTGFQTytn4yQwHNkmXLjFMyfmnnpBwZfglGHTaK5VvPPEyF5x6Ak+//HbgcyrnLJ1sMunFKnbrSeHDcneh9RbVch/UyiILqTO8rrjkp3/cUdHS5IUQM03qRw7mO5edFtgdNX/qWL57+ST6hTX6R7w/I6UkGvLPoHFn3/RP6aZw+jo+AAAe40lEQVTn8L/b3yHi/VYaYV2UdZaOn0x6d7y4AoA9pRWlVisW1XQflLHIQjZBur6AJrDFAQXXnFcLYLeUnc68j3j3dADQNUvA8LoZE5hWexwPfPpMbv74qegecZFoSOfB+Y384qrJviq0jhLsDz59pqf6b0TXuHb6BPqFNQZksRqaINHDuyfJNxaQmpoa0UWaynAxBvWe6LqnlG0tqu0+KDdUFlR9BTxy9RReePUfLNvQzvf/9+8s3dDOXXMsF8j1H5vAihd34pUgZpiwZN3fWLiqBSEE0ZDV78JLKDFumknaTn4MGxjl3AnHs2h2fVoasyElV0weyxWTx7J7fyctew4kMrBSA+sRXS+4qjibe6FQjSR3kd+AiM6spRuT3i+GG60nKs8LqYSvJqrtPihjkQXnj+mmlc1piqK5oovK66ynCXhp57vcv357WlX1tNrj2Ni+F6tdkveFHZXrlsQM/5Tja6efEkh/yRmc500ex6GuON/5/StEdIEpSWugNHHMECafdCwb2/fyzSdeTkrZLXSgzWYIihULcKeg9pScSLErz1WPcItquw/KWATA+WNyROzyFQ7sTUOhawKkLPg7TWkFj1OJGZJf/2kn961v9y2WC0o0JHxblDqkDs5OAV5U14gZJosuqU+btbs/Y5gmYd3qFV7oQBvEEPTErLIn5USKWRdRaTpZPUW13QdlLAIybGCUa2ecwsQxQ/jSz1/0rBcoJ4L0xCiUe5/eTncB3xO1e1EsOP+UjPt5Dc4P/3Fn0j5L1rUxs2F4kkJt6meiIVg273TqRw7ucTfL6KE1dBv5NUHK5N6qlGK3vqSTlYlqug/KWORI/chBmCkul5AGmhBpjXmqnUIMBYApJTETlj3bzrJn2319+kFEHKUpkwZrr89EdJ3BNZFecbNsbN+L+/aENALNKoPEOSolFbNSDFtPUy33oW+n+eSBl4DaPXMn8fiXz+GyM0b2+vnoQlAeXcH96R/W+I9/Hk9EF/R3ZfTE7NH0SMzMmCkSJMmgy5BJGVB+A7ojNFhIRko2wUFnVeN2z+maljX7Kkj2TDWlYioqC7WyyIPUpeXG9r3MWroxkDJqsclXfqQ3iZmSq84Zz1XnjGfDy29zx5rWJFkPBz+ffqrvt8swMU0Td+ioX1hL0uzy8hfPPXM0s5ZuDJydlGkGn8m94L2qyR6vyObe6skCOoUiG8pY5ImztHT/ASu8cZSNhw2Mcv6pJ/C1Vd7KvZl8+l5ppPGUlUPqZ70+k22gdQxES8cBlqxry2hY/NwL+WbBZPtcT6ViVopbS1FalBsqT5xiq9Y97/X5or1s1IRDieKxYQOjLJxVRySkkVpXN7dxdMbBykmHzaVngvMZL6HB1KI2x8VzxYObuO2xlryLqfLti5Htcz2RiqncWoqgqJVFHiRrRZnEcxSwKwWnjTqGrR3vl+S7U1umLlnbRkhAd4oH7Td/3sUFHzoxULZSJjeQ10w520CbbYWY6ww+3yyYTJ8rdiqmcmspckEZixzYd7CL1j3vcfPKrXTFzYpqsRrEUGhYRXgF1h4mEXFpMGUbkLviki/94iVMKQNVO3u5gfyyibwG2oWz6hIri2wZV7nM4N3GauKYIYH2C9o3PJsRysWlVG0VxoqeRRmLgDiDkFfznmohpBc3/TekCX551WQaTx4GBEuBdSq+85nhZpspuwfalo4DdmtX23BcXOeZcTUgqif1CM9GUImPQqRA/IxJrsestgpjRc+inO0BcA9C5V6MVwh+hiKs55eeKwRc+eM/sXzTDpp3vcuAiO45IKcK5IFVgb7h5bdzSnENoqA6bGCU0UNrWLKuLSkmsWRdGwtn1SXFC77+iQZ+edUUX2HDVIIKx/WEwFw+xyxGz3FF30GtLAIQZEZcbYQ1S+oDYbmm8llvxAxJzJDc9lgLA6M6cVMye+JIHn1xd0KGJKTB5846iR8//3rSiu1Ql8Gi1a18bVVL4Fl30Jmyn/ulYeRgnr9let6ZQUFSX3fv7+RAZ6wo7h+3yylfl1I1VRgrehZlLALQF5VnTQlCCOKmTJMOEUDEVpBNpV9I44jHdqeu4pEtu5O2x034yQuvc/sldSxZ24auCQ7Z+x7ycEllk8IIEgDOZFQKqbbNdNzUpAijQPdPqstp4ax0N1rQY1ZLhbGiZ1FuqAAkNd7xad5TbRjS6lfthQTmfWSM53vXTq/NuUe3e1a/+JL6tF4Uzgw5SJqn0/MiU1+MnnK/+B0XSGmgZdqS7SKv7/dyOS1Z25Zo+atcSoqeoCQrCyHEEOAhoAFr7Pk88ArwG+Ak4HVgrpRyvxBCAPcCFwGHgc9KKV/q7XN2lusbXn6b2x5rqdogd1B+5tNW9sOjB3P7JXUsXtNGSIPD3dnvU2csnpjVexXtOTIdQdM8g8yU83G/BMk08jpu865301xE/UI6y+adzuCaSM7uH1832qjC3GgKRSZKNU2+F3hSSnkqMBH4G3Ar8IyU8hTgGftngAuBU+x/VwPf7/3TtXAGM4XV2CiVkAa7/tFpZxkJ4oZkbuNoq3Nd1L9znXSFz/1m50GK6nLtSucU7AXNcgpavJZ6XD/3VP3IwYG/3002N1o+x1QostHrKwshxGDgXOCzAFLKbqBbCHEpcJ6928+AZ4FbgEuBh6WlGbFJCDFECDFCSvlGL586YA0EC86v5e6ntpXi68uKfmGN7riZUFcVQrBodUuSZtPq5j2sXXA2h7oNWjoOcMeaFlITygxT0rrnAOdOsAyx1+x838Eu3wFy38Eulm/eybIN7UT0/LrSZaLQ4rViF9NVW58ERWVQCjfUycA7wE+EEBOBF4HrgBNdBuBN4ET79Shgl+vzu+1tScZCCHE11sqDsWMzN9IplCsmj2Xphu0Fd86rFATw1QtP5bv/80pSeq2UkrB+NNDt1QQprFkCfxPHDGHimCEMrgmx4FdNPt9ylFRXkt8AubF9Lze7uhg651LMSuRiFK8VO+tIZTEpeptSuKFCwBnA96WUpwOHOOpyAsBeReQ0EkspH5BSNkopG48//viinawXwwZGuWvOxCRXyeSThwb6bES32qsWS582pAkiOgyI6Oh2mqubsC6YP3VswhUUCWlcOnEEkZBG/4i/ayjpnEMal505mu9ennzNC84/hYie+VcoNSNn6geOIzX+HdKsPiHZSA1eT6s9jlse3epptFNdVIVQrOK1YruIlMtJ0ZuUYmWxG9gtpdxs/7wSy1i85biXhBAjgLft9zsAd+rNaHtbSfFSNM2ErglMU+KoaId1wWWnj+KYmjBTTj6W59r38tMXvIPGfoR1wd2XT0yaYT7Z8iZ3rGlBR2AgueOSeuZNGcd1MyYkzvVQt8G1009xuYZaM7ZGDemC3fs702az+w91c//67WnnpAmr0ZCXe2TYwCj3zJ3ETSub0YWGIU3umjMx8IDnXnF4BY4duo3iVSIrt49CUQJjIaV8UwixSwjxQSnlK8AMoM3+9xngW/b/V9kfWQ0sEEL8GpgMHChVvCIVZ+DKNGg5pNYqxAzJr+2agwefe435U8fy9U80cMeaVnQhPGsVUtEECVeL49e/c20rMQNi9sLM3W50Y/tebnl0K7oQib7VMxuGc+fa1ozfEzNkYuB1vishf6IJMCRRXYAQLDi/lgsbhnOo2/B1jxTLhZKp/sUwTZ5v31u0uIVy+yj6OqXKhroWWC6E2ApMAr6BZSQ+KoTYDlxg/wzwOPAq0A48CPxn759uZkYPraEzFi/oGA//cSeDa0I88eVz+M2/T+U//nl81s/oQqN1z3uJn5dv3pnmknHcMe1vvc9NK5o5EjM51G3QbVdWP/Tcq0T0zO6oRZfUpam6JgK+tiigIUFKkwf+8Cqzlm5kx75DgeTGgbw717kzp1KzreImBUtoeH2fcvso+iolqbOQUjYBjR5vzfDYVwLX9PhJ5YBXvr1VDlJYwPuGFVsRwurVfNU54/nRxtcyCvsdjhl88eEt3DXnNKbVHseyDe1p+3TF47R0HGDx2jbPY/1o42t4NfjrH9aIm5JFl9Qzb/K4pPe8Ar5OAV+3YRnNIAHmQsT0HNz1L4tWtyZ1y1MKqgpF8egb5chFxCvffvnmnRl9/kHpih/tRQ2waHZ9oM/c/OhWWve85xlsNqSVztqdwa214PxTkgX0/qWBX109lT9+dQbzpoxL2z+I/IlXgNldB1FMMT2n/iW1xWy+Cqq51msoFH0BpQ2VA1759jet3IpZZN2osGa5lxpGDub/XHQq3/39K4R1DUNKPjftJH72wo6ElLezP0jPATw1VpJKtyG5sGE4V0wem1bX4O5u58bpdnfb77zbo0L6QJ26irjmvNqi9lIoVhC6GKsdhaIaUcYiB7zcL7omQGqQpyLtf543ngf/8CrufkCdsThffHhLosDsxo9/kGP7R5g0ZghDB0T4yfOvJx3DqQb+zmWnceOK5px6UvQLW3UQtScezTJa1dTBzSnZSqkDZsPIwYnMKjf9I3qieZFzPC8ju3RDO6luu0J7KRQahFad4xQKf5SxyAEv94thSmQB0uVvHThC6thuSojHzUSB2Tcef5kBER1DShZeXMc159WyNKVa2WnuUzdiEBfdvzHJ7RS2m12HdS1pReK+Lod9B7u44ZEmuwrb2vf6R5rSBszRQ2vS3D7RkOAHV56R1hbVy8hGdI2rzx3Psmfbi5qOWoiCquocp1D4o4xFDjiujuQaAUtV9PrEAJsbj/1lT5qp8fIcOTN4pzcESK4+dzxXTB6bNIM/1G2waFYdS9ZZXeCOxA2klERDOjHDZG7jKFY3v+E7QLfueS/tOuKmtf3cCUeLHf3cPo5khxu/orYrJo9Nc3+VEtU5TtET5NLqtpxRxiJHrHHcLsGW1ozdcX+07nmPPfsP87XHWgL3sdZ1gZFjcNzpDbF0w3aumGxJm3j1NxgztIYvPryFLgPitrFZ3fxGQqvJ+5fX71zStwd1+2SLJ5TLH5AqvlMUm2qKgSljkQOOT9stT+72aZ874Xiad71LTSTE+13Z6y50TWDK/LOouuKSX27eyYUNw7lp5Va640d97UvWtvHApxuJ6Dpd8aPnognBngOdnisAgPqRgwnrIim7K6wL6kcO9tw/qNunUoraKuU8FeVPtcXAVOpsDgTp8Tx6aA3dXvrdHtx5aT2LL20o6JzuW7+dC+/9Q1pqrF+G1OFuqzbDLbHtThXd2L4XKZMNxd2XB5fjyESlFLVVynkqypsg40UloVYWORDEp72xfW9Sy0xd8+798Nmzxh0tdpNwx+oWdE3DlFYb06CeKb/6DneG1E0rk1dDXXGZmOE4EiDudp9uu+NIiigUityothiYWlnkQLZ2nM6y0z3YCp9Bf/qpJyZez5syjieuO5f/+4kGHv/yOdx5aQOp9XX9whrRkEhkNmUiEtKSMqQenN9I/3B6q9LWPe+ltftMDW5HdD2vmZAqbFP0dXqqfW+pUCuLHMnk0/ZKvYyGdWTMSFoppEpyu4NgTvZSTVinO27yhbNP5rIzRicC0s+3700EYLsNk5hhJmVP6Rr88gsfIRzSaX/rfQ51G5Z0h0d1M8isAoj5zISqKainUBRCNcXAlLHIA7+grmcdhpTc+YkG7lzTii404qbBtdMnsP9Qd0IyPDUIBkcznn7ywutcdc54ak+0vi9VGn3mvX9IMhamCZ98YBOaJug2ZCJY7SxI+oWtJct3LjuN+pGD0843m8R4NkoV1KuW9ERF9VFI7U85oYxFEfFLvZw9aRQz64cnWn8ue7adu5/aRkQXmICWISPKqyjMLY1eE07OvJJgpe3aSxknpuGsbAzD5L//7XSmfmAYwwZGmds4mof/uDPx+U99ZEyi90U+A2+uhW3FGOTVSkah6HmUsSgymZad33u2PSnQHESWw88NtO9gFwc6Y4Ezr44ez5rpm3Y1+CN2Tw2HR7bs5roZExLy4bmSS1Av0yC/72CXLb8u0yrC3fitZOpGDMrYU0OhUOSGMhY9gNey02vGncqAiE63YWKaVsW1Ib3dQMs37WDxmlZLXNA0fTOu/HAkPxavaSUS8k7ty3cVELSwLZO7amP7XpfkyNH0Xa/Vgt99vei+56yqdbXSUCiKgjIWBZBp8Gx/632adr3LpDFDqD3xmKz1FxFd8IWzT2ZANMQ9T21LqhB3s3zTDm57zFJ77TasQT9AghRhjSSxQrC0olJXN7muArzuQZCgnp+7qnXPe9y8sjkpKytmSG5a6R338FrJOA2Z/HprqPiGQpE7yljkSSYXyu2P/ZWHNx2NA8yfOpY7L/0wC86v5e6ntnker9uQPPiHv9OZohPiHuj2Hexi8dq2tM9m82ZFdLhn7iRuWJFcb2FIyaJL6liyti3jKqD9rffTKsRvfnQr7x+JJzSoUu9BtqCen7sKJLrQcEQMHXRNeK54UlcyXYaJkJIudwW6a7Wk4hsKRX4oY5EHmVwo+w91JxkKsFqmzj5tJBc2DOfep7f56kalGgpIHuh27+8kogu6c+zgakoYVBPh9kvqWLymjbAuMExLRnxa7XGMGVoDCOpHDkobjFc1dXCTh+y5rgkWr2ml25B5ZT35uavqRw7GkN59OfxSeFMzxGYt3ZhkQZ3VUrXJLyiqj3Je9SpjkQeZMn62v/W+52fm/nATCG9F2Uy43UKjh9Yk2pfmQtyEz/7kTwgsafDuuMEdlzQggWnfXu87y3YGV69AfMyQthsr/zamfu6qu+ZMTFLxDeuCu+ZkTuF1r2T8YibNu95VEuSKsqXcV73KWORBpoyfARHd8zMm5NyiO6wLFs6qS6qgvua8Wu5bvz3nNq6Ojem0R+CFj7UQDmlWK1dX178h/SOJgsENL7+N7tGgOxLSEu4rN/kU8Hm5q9wqvtmyobzwM0LVJr+gqB4qYdWrjEUeZMv4ubhhOOta3iz4ewxDcsfqVms1YJh2ZXcITQh0kawfFdZBE1pSTCITJqTt2xU3+dLPXyRmmokeGKmd8CK6SFSIL5yVPd6RL46KbyGfzxbfqGQJ8nJ2VyhypxIabyljkSdes1dnGRnSBCFhuc3zFyC3BnTTkMRcrh6nAE/XBBGNRHrowovruNMj+J0rh2NHvyvuMhQRDYQmmPGhE5j3o82JCu+FF9fRMOpoi9V9B7vK5pfbi2qQXyh3d4Uidyph1StkAf0UypXGxka5ZcuWXv3OfQe7mPbt9Ym0TQddQL9w+gy9GGjAVz46IdEtb3VTBzesaM7ZRRUNZV+RCEFCj8pNv7DGwovrfLOiFMXF6/esX1jj+VumV6ThUxxldVOHp/pDbyKEeFFK2ej1nlpZFInd+zsJaen+fU0TfP/KM9m1/zB3rmlFQ9BtmgjwbMOqC2u14J7h+2EC96/fxsQxg6kfOTgxa/7j3/ex92AXDSMHcThmpaPu+kdnInvJTTRkFbzdsKKJrgzt/aTEs05EF4LFa9vS0mrLyddaTVSCu0KRH+W+6lXGokhYRXfpg21E1xhcE+bcCeOYWT88kd558f3PeWY26ZrgO3NO44YVzYHiD90GfOkXL2FKKxVWgqs/hcHnp53M1A8cx8yG4cxsGM4vN+9k6YZ2IvrR2cusiSMxpUzMao7EjcCrk5hhEglpSem8avDqOSrBXaHIn3IWHVRuqCKyfPMObvtdS9I2PxfB6qYOvvKbprSCumOiIX5x1WR27DvEjR71DZmIhqzueF4rhJBmFeb5VV1DctD0yZY3E5IicdOSQU81INGQ4PZZ9SxZ16bcIr1IObgrFNWJckP1EvMmjwPJUd0me7bvNWjOnjSKuhGDuPDePyTJcDizxIljhlA3YhAX3b8xrWWqH7ombImQdBdW3ISbVjYn3ENe5+TePm/KOGY2DE8Yj9Q+GgvOr03ESo7pF6qKDKNKodzdFYrqRK0seoBc0hqzzRJXN3WktUX1I9PKAqB/WOdXV0/JW1E203WpVE6FovLJtLJQxqIMyDbQ7jvYZccatoOELkPSL6xhmDJRe+EYGrBWEF4GIxoSvHDrDDWYKxQKT5SxqBIco+LUNDhBzVRD4xgXd6W3O2ahUCgUXihj0UexGggdwE8kUKFQKNyoAHcfxZLMOKHUp6FQKKoALfsuCoVCoejrKGOhUCgUiqwoY6FQKBSKrChjoVAoFIqsKGOhUCgUiqwoY6FQKBSKrChjoVAoFIqsKGOhUCgUiqwoY6FQKBSKrChjoVAoFIqsVKU2lBDiHWCH/eNxwN4Snk6xqbbrAXVNlYK6psqgkGsaJ6U83uuNqjQWboQQW/yEsSqRarseUNdUKahrqgx66pqUG0qhUCgUWVHGQqFQKBRZ6QvG4oFSn0CRqbbrAXVNlYK6psqgR66p6mMWCoVCoSicvrCyUCgUCkWBVK2xEELMFEK8IoRoF0LcWurzyYQQYowQYoMQok0I0SqEuM7efqwQ4ikhxHb7/0Pt7UIIcZ99bVuFEGe4jvUZe//tQojPlOqa7HPRhRB/EUKstX8+WQix2T7v3wghIvb2qP1zu/3+Sa5jfNXe/ooQ4uOluZLEuQwRQqwUQrwshPibEGJqFTyjr9i/cy1CiF8JIfpV2nMSQvxYCPG2EKLFta1oz0UIcaYQ4q/2Z+4TQogSXdNd9u/eViHE74QQQ1zved5/v3HQ7xlnREpZdf8AHfg7MB6IAM1AXanPK8P5jgDOsF8fA2wD6oDvALfa228Fvm2/vgh4AhDAFGCzvf1Y4FX7/0Pt10NLeF3XA78E1to/PwJ80n79A+A/7Nf/CfzAfv1J4Df26zr72UWBk+1nqpfwen4GXGW/jgBDKvkZAaOA14Aa1/P5bKU9J+Bc4AygxbWtaM8F+JO9r7A/e2GJruljQMh+/W3XNXnefzKMg37POOM5leKXtBdu9FTg966fvwp8tdTnlcP5rwI+CrwCjLC3jQBesV//EPiUa/9X7Pc/BfzQtT1pv16+htHAM8B0YK39h7bX9cueeEbA74Gp9uuQvZ9IfW7u/UpwPYOxBlaRsr2Sn9EoYJc9QIbs5/TxSnxOwEkpA2tRnov93suu7Un79eY1pbz3L8By+7Xn/cdnHMz0t5jpX7W6oZw/Aofd9rayx17anw5sBk6UUr5hv/UmcKL92u/6yum6/x9wM2DaPw8D3pVSxu2f3eeWOG/7/QP2/uV0PScD7wA/sV1rDwkhBlDBz0hK2QF8F9gJvIF131+ksp+TQ7Geyyj7der2UvN5rFUO5H5Nmf4WfalWY1GRCCEGAo8C/yWlfM/9nrSmABWRuiaEmAW8LaV8sdTnUkRCWG6B70spTwcOYbk3ElTSMwKw/fiXYhnCkcAAYGZJT6oHqLTnkg0hxG1AHFjem99brcaiAxjj+nm0va1sEUKEsQzFcinlb+3NbwkhRtjvjwDetrf7XV+5XPc0YLYQ4nXg11iuqHuBIUKIkMe5Jc7bfn8wsI/yuR6wZl+7pZSb7Z9XYhmPSn1GABcAr0kp35FSxoDfYj27Sn5ODsV6Lh3269TtJUEI8VlgFjDPNoKQ+zXtw/8Z+1KtxuLPwCl2xD+CFYxbXeJz8sXOrvgR8Dcp5T2ut1YDTlbGZ7BiGc72+XZmxxTggL3k/j3wMSHEUHvW+DF7W68ipfyqlHK0lPIkrHu/Xko5D9gAzLF3S70e5zrn2PtLe/sn7Syck4FTsIKNvY6U8k1glxDig/amGUAbFfqMbHYCU4QQ/e3fQeeaKvY5uSjKc7Hfe08IMcW+R/Ndx+pVhBAzsVy7s6WUh11v+d1/z3HQfmZ+z9if3gxC9eY/rKyHbVjZALeV+nyynOvZWMvkrUCT/e8iLN/iM8B24GngWHt/ASyzr+2vQKPrWJ8H2u1/nyuDazuPo9lQ4+1f4nZgBRC1t/ezf2633x/v+vxt9nW+Qi9koWS5lknAFvs5PYaVNVPRzwhYDLwMtAA/x8qoqajnBPwKK+YSw1oBfqGYzwVotO/P34GlpCQ59OI1tWPFIJwx4gfZ7j8+46DfM870T1VwKxQKhSIr1eqGUigUCkURUcZCoVAoFFlRxkKhUCgUWVHGQqFQKBRZUcZCoVAoFFlRxkKhKAJCCEMI0SQs9dYVQoj+Pvu90NvnplAUA2UsFIri0CmlnCSlbAC6gS+533SqZaWUZ5Xi5BSKQlHGQqEoPs8BtUKI84QQzwkhVmNVRiOEOOjsJIS4xe6T0CyE+Ja97QNCiCeFEC/anz21NJegUCQTyr6LQqEIir2CuBB40t50BtAgpXwtZb8LsUT8JkspDwshjrXfegD4kpRyuxBiMvA9LG0thaKkKGOhUBSHGiFEk/36OSytr7OAP6UaCpsLgJ9IW+NHSvkPW3X4LGCFqxlbtGdPW6EIhjIWCkVx6JRSTnJvsAf8QzkcQ8PqMzAp654KRS+jYhYKRWl4CvickzUlhDhWWj1MXhNCXG5vE0KIiaU8SYXCQRkLhaIESCmfxJKW3mK7r26035oHfEEI0Qy0YsU1FIqSo1RnFQqFQpEVtbJQKBQKRVaUsVAoFApFVpSxUCgUCkVWlLFQKBQKRVaUsVAoFApFVpSxUCgUCkVWlLFQKBQKRVaUsVAoFApFVv4/LTeUj8Y8cZ4AAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"625b89a8"},"source":["We can notice that there are no linear relation present between the numerical columns. Hence no need to drop anything"],"id":"625b89a8"},{"cell_type":"markdown","metadata":{"id":"8a7f95fa"},"source":["Now we will plot box plots of categorical and numerical columns to get more information about the number of outliers and the distrubtion."],"id":"8a7f95fa"},{"cell_type":"code","metadata":{"id":"e73f0769","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1635012395663,"user_tz":-330,"elapsed":1890,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"ed580d37-65dc-4b57-867d-df02ac8fdeea"},"source":["for c in categorical:\n"," for n in numerical:\n"," sns.set_style(\"whitegrid\")\n"," sns.boxplot(x= c, y= n, data=df)\n"," plt.xlabel(c)\n"," plt.ylabel(n)\n"," plt.show()\n"," "],"id":"e73f0769","execution_count":14,"outputs":[{"output_type":"display_data","data":{"image/png":"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fEVExFgKERER8ZpCREREvKYQERERr5n67izptHjxYnbt2kVsbCzbtm0zuhzppePHj/PEE09w4sQJLBYLP/jBD8jJyTG6LOkBp9PJj370I9rb23G5XKSlpflliuO+THdnBYEPP/yQgQMH8uSTTypETKipqYm//OUvTJgwgTNnzjB37lz+/d//nZtuusno0uQa3G43Z8+e5frrr+f8+fPcf//9LFmyJKT6o+l0VhCYOnUqQ4YMMboM8VJcXBwTJkwAYNCgQYwZMwaHw2FwVdITFouF66+/HoCOjg46OjqwWCwGVxVYChGRPuTYsWPU1qr5A24AAAQISURBVNaSkJBgdCnSQy6Xizlz5nD77bdz++23h9y+U4iI9BFfffUVeXl5PP300wwaNMjocqSHwsPD2bJlC7t37+bQoUP8/ve/N7qkgFKIiPQB58+fJy8vD7vdTmpqqtHliBeioqKYNm0ae/bsMbqUgFKIiBjM7XazZMkSxowZQ25urtHlSC+cPHmStrY2AM6dO8d7773HmDFjDK4qsHR3VhBYtGgRH3zwAadOnSI2NpaFCxeSnZ1tdFnSQ7/73e/40Y9+xLhx4wgL6/xet2jRIqZPn25wZXItn3/+OU899RQulwu32016ejo//elPjS4roBQiIiLiNZ3OEhERrylERETEawoRERHxmkJERES8phARERGvKUREemDy5Mld2m+++SbLly/v9Xpqa2vZvXv3NR/3/vvv89BDD11x+V//9V+zc+dOz7KHHnqI999/v9e1iPiCQkQkgHoaIt2Jj4/nP/7jP3xUkci3oxAR+ZaOHTvGP/zDP2C328nJyeHPf/4zAG+99RazZ8/m3nvv9cw5sXbtWrZv386cOXPYvn07Z8+eZfHixcybN4/MzEzefvvta77ezTffzODBg3n33Xcv+9nevXvJzMzEbrezePFi2tvbfb69It+kSalEeuDcuXPMmTPH025tbSUlJQWAlStXkpWVRVZWFiUlJaxcuZKXX36Zl19+mf/6r//CarXS1tZG//79ycvL49NPP6WgoACAF198kdtuu43nn3+etrY2srOzuf32269Zz4IFC3jppZdISkryLHM6nTz11FOsX7+eG264gSeeeILf/OY3zJ8/37e/DJFv0JGISA9cd911bNmyxfPvm7PXHThwgNmzZwMwZ84c9u/fD3ReR3nqqafYuHEjLpfriuutqanhP//zP5kzZw4//vGPcTqdHD9+/Jr1TJ06FegcMuWiL7/8kpEjR3LDDTcAkJWV1eXnIv6gIxERP1m+fDkff/wxu3btYu7cubzxxhtXfNzatWsvG7Svubn5mutfsGABr7zyChERehuLcXQkIvItTZ48mbKyMgC2bt3KlClTADh69CgJCQk8+uijDB06lMbGRq6//nq++uorz3OTk5N57bXXuDiE3Weffdbj101OTqatrY0vvvgCgBtuuIE//elP/PGPfwRgy5YtniMWEX9RiIh8S0uXLuXNN9/EbrezZcsWlixZAsALL7yA3W5n9uzZTJ48mZtvvplp06ZRV1fnubD+8MMP09HRwb333ktGRgYvvfRSr157wYIFntNfkZGRPP/88zz66KPY7XYsFgs//OEPAViyZAmffPKJbzdcBI3iKyIi34KORERExGsKERER8ZpCREREvKYQERERrylERETEawoRERHxmkJERES89v8B5rP4Fh01M74AAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"a74d69fd"},"source":["Now that we have analysed our data we can proceed to normalixing our data and regression"],"id":"a74d69fd"},{"cell_type":"markdown","metadata":{"id":"77d8c6ba"},"source":["### Importing useful libraries \n"],"id":"77d8c6ba"},{"cell_type":"code","metadata":{"id":"fffac537","executionInfo":{"status":"ok","timestamp":1635012398317,"user_tz":-330,"elapsed":2,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["# This Python 3 environment comes with many helpful analytics libraries installed\n","# For example, here's several helpful packages to load in\n","import numpy as np # linear algebra\n","import matplotlib.pyplot as plt # data visualization\n","import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)"],"id":"fffac537","execution_count":15,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"04cd7e4e"},"source":["### Loading the dataset \n","#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Insti_data.csv)"],"id":"04cd7e4e"},{"cell_type":"code","metadata":{"id":"4ac8e74b","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635012403815,"user_tz":-330,"elapsed":517,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"19c614d4-a1b3-46ba-80e7-9500e5fde8c1"},"source":["data = np.array(df, dtype=float)\n","data"],"id":"4ac8e74b","execution_count":16,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[2.540e+03, 3.000e+00, 1.000e+00, 6.860e+02, 8.000e+00],\n"," [2.900e+03, 3.000e+00, 2.000e+00, 9.660e+02, 5.000e+00],\n"," [2.362e+03, 3.000e+00, 2.000e+00, 9.240e+02, 2.000e+00],\n"," ...,\n"," [1.020e+03, 3.000e+00, 2.000e+00, 1.006e+03, 3.000e+00],\n"," [2.400e+03, 2.000e+00, 2.000e+00, 9.380e+02, 1.000e+00],\n"," [9.500e+02, 3.000e+00, 2.000e+00, 1.053e+03, 2.000e+00]])"]},"metadata":{},"execution_count":16}]},{"cell_type":"markdown","metadata":{"id":"627a5a3a"},"source":["#### Since our dataset has four features i.e Hostel No. , Occupancy, Room Size and Floor ,our hypothesis function becomes\n","### hθ(x) = θ0 + θ1x1 + θ2x2 +θ3x3 + θ4x4\n","#### where x1 ,x2,x3 and x4 are the two features (i.e. size of house and number of rooms)"],"id":"627a5a3a"},{"cell_type":"markdown","metadata":{"id":"58fdf0fe"},"source":["### So Your task is to define hypothesis function having 4 features and a corresponding cost function "],"id":"58fdf0fe"},{"cell_type":"code","metadata":{"id":"34dc5643"},"source":[" # define and complete hypothesis function "],"id":"34dc5643","execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"6fae141b"},"source":["# define and complete cost function"],"id":"6fae141b","execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"178eb11f"},"source":["### Gradient Descent \n","#### So we have our hypothesis function and we have a way of measuring how well it fits into the data. Now we need to estimate the parameters in the hypothesis function. That's where gradient descent comes in.\n","### Your next task is to define gradient descent function having some specific value of learning rate and number of epochs.\n","#### Note that learning rate should be neither very high nor very low .Why?\n","#### Check out exact reason [here](https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-performance-in-deep-learning-d0d4059c1c10)\n","\n"],"id":"178eb11f"},{"cell_type":"code","metadata":{"id":"167b5bdc"},"source":["#define and complete Gradient Descent function "],"id":"167b5bdc","execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"724e407a"},"source":["### Now we want to visualize how our cost function varies with number of epochs .So your next task is to plot graph of updated costs vs number of epochs "],"id":"724e407a"},{"cell_type":"markdown","metadata":{"id":"e82f6ebf"},"source":["#### After plotting above graph you will notice that your cost function decreases with epochs.\n","#### Perfect! This is all what we wanted to seek by doing linear regression. \n","\n","#### Now it's time to test our model on some test data. \n","\n","#### For this you will define a test function that will take as input Hostel No. , Occupancy, Room Size , Floor and the final theta vector that was returned by our linear regression model and will give us the price of the house. Compute it for any set of features given and final value of theta as given by gradient descent function"],"id":"e82f6ebf"},{"cell_type":"code","metadata":{"id":"c522bca3"},"source":["# define and complete test function that will take required inputs .This function should return price of Room "],"id":"c522bca3","execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"947f35b1"},"source":["#### Now since we have defined all required functions , we can call functions one by one and get our final results .\n","#### Your final task is to use all functions defined above and predict the price of room for some input combinations to check how well your model works."],"id":"947f35b1"},{"cell_type":"markdown","metadata":{"id":"06e54ef5"},"source":["#### You can try playing with different values of alpha and epochs and see which combination gives most accurate results but do lookout for overfitting \n"],"id":"06e54ef5"},{"cell_type":"code","metadata":{"id":"3fc631fd"},"source":[""],"id":"3fc631fd","execution_count":null,"outputs":[]}]}
\ No newline at end of file
From ba19cd4344225e58169b9a23d9b627a6b66539fb Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Wed, 27 Oct 2021 15:44:45 +0530
Subject: [PATCH 02/11] Added quiz file and renamed it
---
MCQ's.md => MCQ's_203174002.md | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
rename MCQ's.md => MCQ's_203174002.md (85%)
diff --git a/MCQ's.md b/MCQ's_203174002.md
similarity index 85%
rename from MCQ's.md
rename to MCQ's_203174002.md
index b84bcd4..f450220 100644
--- a/MCQ's.md
+++ b/MCQ's_203174002.md
@@ -8,37 +8,37 @@ Change the markdown file for submission of the quiz
- Suppose you are working on weather prediction and use a learning algorithm to predict tomorrow's temperature . What kind of problem would that be?
- [ ] Classification
- - [ ] Regression
+ - [X] Regression
- Suppose that you have trained a logistic regression classifier, and it outputs on a new example x a prediction hθ (x) = 0.4. This means (check all that apply):
- - [ ] Our estimate for P(y = 0| x,θ) = 0.6
- - [ ] Our estimate for P(y = 1| x,θ) = 0.4
+ - [X] Our estimate for P(y = 0| x,θ) = 0.6
+ - [X] Our estimate for P(y = 1| x,θ) = 0.4
- [ ] Our estimate for P(y = 1| x,θ) = 0.6
- [ ] Our estimate for P(y = 0| x,θ) = 0.4
- Which of the following are reasons for using feature scaling?
- - [ ] It speeds up gradient descent by making it require fewer iterations to get to a good solution.
+ - [X] It speeds up gradient descent by making it require fewer iterations to get to a good solution.
- [ ] It speeds up solving for θ using the normal equation.
- [ ] It prevents the matrix XTX (used in the normal equation) from being non-invertable (singular/degenerate).
- [ ] It is necessary to prevent gradient descent from getting stuck in local optima.
- Which of the following statements are true? Check all that apply.
- - [ ] The cost function J(θ) for logistic regression trained with m≥1 examples is always greater than or equal to zero.
- - [ ] The sigmoid function g(z)=1/1+e^−z is never greater than one (>1).
+ - [X] The cost function J(θ) for logistic regression trained with m≥1 examples is always greater than or equal to zero.
+ - [X] The sigmoid function g(z)=1/1+e^−z is never greater than one (>1).
- [ ] For logistic regression, sometimes gradient descent will converge to a local minimum (and fail to find the global minimum).
- [ ] Linear regression always works well for classification if you classify by using a threshold on the prediction made by linear regression.
- KNN algorithm does more computation on test time rather than train time.
- - [ ] True
+ - [X] True
- [ ] False
- Which of the following distance metric can not be used in KNN?
- [ ] Manhattan
- [ ] Minkowski
- [ ] Euclidean
- - [ ] All of them can be used
+ - [X] All of them can be used
- Which of the following machine learning algorithm can be used for imputing missing values of both categorical and continuous variables?
- - [ ] KNN
+ - [X] KNN
- [ ] Logistic Regression
- [ ] Linear Regression
- Suppose, you have given the following data where x and y are the 2 input variables and Class is the dependent variable. You want to predict the class of new data point x=1 and y=1 using eucledian distance in 3-NN. In which class this data point belong to?
![image](https://user-images.githubusercontent.com/73156496/138315461-b7127e2a-aa76-48bc-9934-53ed4e6d4166.png)
- - [ ] + class
+ - [X] + class
- [ ] - class
- [ ] Can't Say
From 9f89066fe2a152788653888836f692afdc4f6188 Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Fri, 29 Oct 2021 00:11:04 +0530
Subject: [PATCH 03/11] Delete Linear_Regression_Task2_203174002.ipynb
---
Linear_Regression_Task2_203174002.ipynb | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 Linear_Regression_Task2_203174002.ipynb
diff --git a/Linear_Regression_Task2_203174002.ipynb b/Linear_Regression_Task2_203174002.ipynb
deleted file mode 100644
index c7b98ce..0000000
--- a/Linear_Regression_Task2_203174002.ipynb
+++ /dev/null
@@ -1 +0,0 @@
-{"nbformat":4,"nbformat_minor":5,"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.8.8"},"colab":{"name":"Linear_Regression_Task2_203174002.ipynb","provenance":[],"collapsed_sections":[]}},"cells":[{"cell_type":"markdown","metadata":{"id":"89223f98"},"source":["\n","\n","```\n","Import libraries\n","```\n","\n","### Importing useful libraries \n"],"id":"89223f98"},{"cell_type":"code","metadata":{"id":"26f77ebe","executionInfo":{"status":"ok","timestamp":1635012283386,"user_tz":-330,"elapsed":1123,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["# This Python 3 environment comes with many helpful analytics libraries installed\n","# For example, here's several helpful packages to load in\n","import numpy as np # linear algebra\n","import matplotlib.pyplot as plt # data visualization\n","import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n","import seaborn as sns"],"id":"26f77ebe","execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"31c8220d"},"source":["### Loading the dataset \n","#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Room_price_data.csv)"],"id":"31c8220d"},{"cell_type":"code","metadata":{"id":"1c5d873a","executionInfo":{"status":"ok","timestamp":1635012317184,"user_tz":-330,"elapsed":552,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = pd.read_csv(\"Hostel_Linear-Dataset.csv\") #import text file \n"],"id":"1c5d873a","execution_count":3,"outputs":[]},{"cell_type":"code","metadata":{"id":"1ca9aba0","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635012321185,"user_tz":-330,"elapsed":524,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"50a85b1a-cfee-4f7b-9ac1-5134a16822e9"},"source":["df.head()"],"id":"1ca9aba0","execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Price
\n","
Hostel No.
\n","
Occupancy
\n","
Room Size
\n","
Floor
\n","
\n"," \n"," \n","
\n","
0
\n","
2540.0
\n","
3
\n","
1
\n","
686
\n","
8
\n","
\n","
\n","
1
\n","
2900.0
\n","
3
\n","
2
\n","
966
\n","
5
\n","
\n","
\n","
2
\n","
NaN
\n","
3
\n","
1
\n","
788
\n","
8
\n","
\n","
\n","
3
\n","
2362.0
\n","
3
\n","
2
\n","
924
\n","
2
\n","
\n","
\n","
4
\n","
NaN
\n","
3
\n","
2
\n","
1098
\n","
5
\n","
\n"," \n","
\n","
"],"text/plain":[" Price Hostel No. Occupancy Room Size Floor\n","0 2540.0 3 1 686 8\n","1 2900.0 3 2 966 5\n","2 NaN 3 1 788 8\n","3 2362.0 3 2 924 2\n","4 NaN 3 2 1098 5"]},"metadata":{},"execution_count":4}]},{"cell_type":"markdown","metadata":{"id":"af08f245"},"source":["# Visualizing and Cleaning the data\n","\n","We will now be removing the nan values and identical values from the dataset\n","\n","For seeing if there are nan values in the dataset we will use the isna() function and then to remove them we will use the dropna() function. We will need to set additional parameters like rows and columns in the dropna function depending on the number of nan values present for each column\n","\n","Using the sum() function with isna() function we can get to know the number of missing values in each column"],"id":"af08f245"},{"cell_type":"code","metadata":{"id":"2fd4babb","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635012323753,"user_tz":-330,"elapsed":428,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"dd94b5ef-188f-4c3a-aec4-fe91cdc6a86d"},"source":["df.isna().sum()"],"id":"2fd4babb","execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Price 1531\n","Hostel No. 0\n","Occupancy 0\n","Room Size 0\n","Floor 0\n","dtype: int64"]},"metadata":{},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"83ef03c3"},"source":["After this we will proceed to remove the nan values \n","\n","Since there are not many nan values in the column 'Price' as compared to the number of rows we will remove the rows which have nan values. \n","\n","Reseting the index after removing the nan values and dropping the old index will also be important"],"id":"83ef03c3"},{"cell_type":"code","metadata":{"id":"b65e4503","executionInfo":{"status":"ok","timestamp":1635012326744,"user_tz":-330,"elapsed":459,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = df.dropna(subset = ['Price'],how= 'any')\n","df = df.reset_index(drop = True)\n","## df.isna().sum()"],"id":"b65e4503","execution_count":6,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"40784889"},"source":["Now we can use the drop_duplicate function to remove the duplicate values\n","\n","This function has a parameter calle 'keep' where we specifiy to drop and which value to keep\n","\n","For this excercise we will keep the first values and drop the rest of the duplicates"],"id":"40784889"},{"cell_type":"code","metadata":{"id":"75fa3dc8","executionInfo":{"status":"ok","timestamp":1635012329999,"user_tz":-330,"elapsed":425,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = df.drop_duplicates(keep = 'first')\n","df = df.reset_index(drop = True)\n","## df.duplicated().sum()"],"id":"75fa3dc8","execution_count":7,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"a007a33f"},"source":["For visualizing the data we will first start with looking at the distribution of different columns to see if there are enough number for each category in every column and dropping them if the data is biased for one category more than the other"],"id":"a007a33f"},{"cell_type":"code","metadata":{"id":"b325df62","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1635012366549,"user_tz":-330,"elapsed":1239,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"cf878a76-66d3-4e68-f009-819d724a4eae"},"source":["columns = df.columns\n","for column in columns:\n"," if(column== 'Price' or column=='Room Size'): \n"," continue\n"," fig = plt.figure(figsize=(5,5))\n"," ax = fig.gca()\n"," counts = df[column].value_counts()\n"," counts.plot.bar(ax = ax, color='blue')\n"," ax.set_title('No of rooms '+ column)\n"," ax.set_xlabel(column)\n"," ax.set_ylabel(\"No of rooms\")\n"," plt.show()"],"id":"b325df62","execution_count":9,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"9811a731"},"source":["We can clearly notice that for the Occupancy column the (occupancy) = 4 has a really low set of data points as compared to others. Hence we can proceed in dropping those rows where the occupancy is 4"],"id":"9811a731"},{"cell_type":"code","metadata":{"id":"825783c0","executionInfo":{"status":"ok","timestamp":1635012377084,"user_tz":-330,"elapsed":615,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["df = df[df['Occupancy'] != 4]\n","df = df.reset_index(drop= True)"],"id":"825783c0","execution_count":10,"outputs":[]},{"cell_type":"code","metadata":{"id":"30c64310","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635012378828,"user_tz":-330,"elapsed":9,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"bbb5d4dc-f7e5-4b8e-a248-6ecbd09568da"},"source":["df.head()"],"id":"30c64310","execution_count":11,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Price
\n","
Hostel No.
\n","
Occupancy
\n","
Room Size
\n","
Floor
\n","
\n"," \n"," \n","
\n","
0
\n","
2540.0
\n","
3
\n","
1
\n","
686
\n","
8
\n","
\n","
\n","
1
\n","
2900.0
\n","
3
\n","
2
\n","
966
\n","
5
\n","
\n","
\n","
2
\n","
2362.0
\n","
3
\n","
2
\n","
924
\n","
2
\n","
\n","
\n","
3
\n","
1432.0
\n","
2
\n","
1
\n","
706
\n","
3
\n","
\n","
\n","
4
\n","
1702.0
\n","
2
\n","
2
\n","
1038
\n","
3
\n","
\n"," \n","
\n","
"],"text/plain":[" Price Hostel No. Occupancy Room Size Floor\n","0 2540.0 3 1 686 8\n","1 2900.0 3 2 966 5\n","2 2362.0 3 2 924 2\n","3 1432.0 2 1 706 3\n","4 1702.0 2 2 1038 3"]},"metadata":{},"execution_count":11}]},{"cell_type":"markdown","metadata":{"id":"f333875b"},"source":["We will now write the columns between categorical and numerical\n","\n","categorical = Hostel No, occupancy, floor\n","\n","Numerical = price, occupancy, roomsize, floor, hostel No.\n","\n","Remember that we can treat Hostel Number and occupancy as numerical or categorical. For this notebook we will treat them as categorical for data visualization and numerical for the regression"],"id":"f333875b"},{"cell_type":"markdown","metadata":{"id":"0f34ca6a"},"source":["We will also plot the scatter plots and the correlation map to analyse the relation ships between different numerical columns"],"id":"0f34ca6a"},{"cell_type":"code","metadata":{"scrolled":false,"id":"f4a3ab6e","executionInfo":{"status":"ok","timestamp":1635012383025,"user_tz":-330,"elapsed":517,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["categorical = ['Hostel No.', 'Occupancy', 'Floor']\n","numerical = [ 'Price', 'Room Size']"],"id":"f4a3ab6e","execution_count":12,"outputs":[]},{"cell_type":"code","metadata":{"id":"df2b588a","colab":{"base_uri":"https://localhost:8080/","height":791},"executionInfo":{"status":"ok","timestamp":1635012386787,"user_tz":-330,"elapsed":1202,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"c61015b6-8eb0-4d49-cf99-2e50e4e7bd51"},"source":["for column1 in numerical:\n"," for column2 in numerical:\n"," if(column1 != column2):\n"," fig = plt.figure(figsize=(6,6))\n"," ax = fig.gca()\n"," df.plot.scatter(x=column1,y=column2,ax = ax)\n"," ax.set_title('Scatter plot of '+ column1 + ' vs ' + column2)\n"," ax.set_xlabel(column1)\n"," ax.set_ylabel(column2)\n"," plt.show()"],"id":"df2b588a","execution_count":13,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"625b89a8"},"source":["We can notice that there are no linear relation present between the numerical columns. Hence no need to drop anything"],"id":"625b89a8"},{"cell_type":"markdown","metadata":{"id":"8a7f95fa"},"source":["Now we will plot box plots of categorical and numerical columns to get more information about the number of outliers and the distrubtion."],"id":"8a7f95fa"},{"cell_type":"code","metadata":{"id":"e73f0769","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1635012395663,"user_tz":-330,"elapsed":1890,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"ed580d37-65dc-4b57-867d-df02ac8fdeea"},"source":["for c in categorical:\n"," for n in numerical:\n"," sns.set_style(\"whitegrid\")\n"," sns.boxplot(x= c, y= n, data=df)\n"," plt.xlabel(c)\n"," plt.ylabel(n)\n"," plt.show()\n"," "],"id":"e73f0769","execution_count":14,"outputs":[{"output_type":"display_data","data":{"image/png":"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fEVExFgKERER8ZpCREREvKYQERERr5n67izptHjxYnbt2kVsbCzbtm0zuhzppePHj/PEE09w4sQJLBYLP/jBD8jJyTG6LOkBp9PJj370I9rb23G5XKSlpflliuO+THdnBYEPP/yQgQMH8uSTTypETKipqYm//OUvTJgwgTNnzjB37lz+/d//nZtuusno0uQa3G43Z8+e5frrr+f8+fPcf//9LFmyJKT6o+l0VhCYOnUqQ4YMMboM8VJcXBwTJkwAYNCgQYwZMwaHw2FwVdITFouF66+/HoCOjg46OjqwWCwGVxVYChGRPuTYsWPU1qr5A24AAAQISURBVNaSkJBgdCnSQy6Xizlz5nD77bdz++23h9y+U4iI9BFfffUVeXl5PP300wwaNMjocqSHwsPD2bJlC7t37+bQoUP8/ve/N7qkgFKIiPQB58+fJy8vD7vdTmpqqtHliBeioqKYNm0ae/bsMbqUgFKIiBjM7XazZMkSxowZQ25urtHlSC+cPHmStrY2AM6dO8d7773HmDFjDK4qsHR3VhBYtGgRH3zwAadOnSI2NpaFCxeSnZ1tdFnSQ7/73e/40Y9+xLhx4wgL6/xet2jRIqZPn25wZXItn3/+OU899RQulwu32016ejo//elPjS4roBQiIiLiNZ3OEhERrylERETEawoRERHxmkJERES8phARERGvKUREemDy5Mld2m+++SbLly/v9Xpqa2vZvXv3NR/3/vvv89BDD11x+V//9V+zc+dOz7KHHnqI999/v9e1iPiCQkQkgHoaIt2Jj4/nP/7jP3xUkci3oxAR+ZaOHTvGP/zDP2C328nJyeHPf/4zAG+99RazZ8/m3nvv9cw5sXbtWrZv386cOXPYvn07Z8+eZfHixcybN4/MzEzefvvta77ezTffzODBg3n33Xcv+9nevXvJzMzEbrezePFi2tvbfb69It+kSalEeuDcuXPMmTPH025tbSUlJQWAlStXkpWVRVZWFiUlJaxcuZKXX36Zl19+mf/6r//CarXS1tZG//79ycvL49NPP6WgoACAF198kdtuu43nn3+etrY2srOzuf32269Zz4IFC3jppZdISkryLHM6nTz11FOsX7+eG264gSeeeILf/OY3zJ8/37e/DJFv0JGISA9cd911bNmyxfPvm7PXHThwgNmzZwMwZ84c9u/fD3ReR3nqqafYuHEjLpfriuutqanhP//zP5kzZw4//vGPcTqdHD9+/Jr1TJ06FegcMuWiL7/8kpEjR3LDDTcAkJWV1eXnIv6gIxERP1m+fDkff/wxu3btYu7cubzxxhtXfNzatWsvG7Svubn5mutfsGABr7zyChERehuLcXQkIvItTZ48mbKyMgC2bt3KlClTADh69CgJCQk8+uijDB06lMbGRq6//nq++uorz3OTk5N57bXXuDiE3Weffdbj101OTqatrY0vvvgCgBtuuIE//elP/PGPfwRgy5YtniMWEX9RiIh8S0uXLuXNN9/EbrezZcsWlixZAsALL7yA3W5n9uzZTJ48mZtvvplp06ZRV1fnubD+8MMP09HRwb333ktGRgYvvfRSr157wYIFntNfkZGRPP/88zz66KPY7XYsFgs//OEPAViyZAmffPKJbzdcBI3iKyIi34KORERExGsKERER8ZpCREREvKYQERERrylERETEawoRERHxmkJERES89v8B5rP4Fh01M74AAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"a74d69fd"},"source":["Now that we have analysed our data we can proceed to normalixing our data and regression"],"id":"a74d69fd"},{"cell_type":"markdown","metadata":{"id":"77d8c6ba"},"source":["### Importing useful libraries \n"],"id":"77d8c6ba"},{"cell_type":"code","metadata":{"id":"fffac537","executionInfo":{"status":"ok","timestamp":1635012398317,"user_tz":-330,"elapsed":2,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["# This Python 3 environment comes with many helpful analytics libraries installed\n","# For example, here's several helpful packages to load in\n","import numpy as np # linear algebra\n","import matplotlib.pyplot as plt # data visualization\n","import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)"],"id":"fffac537","execution_count":15,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"04cd7e4e"},"source":["### Loading the dataset \n","#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Insti_data.csv)"],"id":"04cd7e4e"},{"cell_type":"code","metadata":{"id":"4ac8e74b","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635012403815,"user_tz":-330,"elapsed":517,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"19c614d4-a1b3-46ba-80e7-9500e5fde8c1"},"source":["data = np.array(df, dtype=float)\n","data"],"id":"4ac8e74b","execution_count":16,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[2.540e+03, 3.000e+00, 1.000e+00, 6.860e+02, 8.000e+00],\n"," [2.900e+03, 3.000e+00, 2.000e+00, 9.660e+02, 5.000e+00],\n"," [2.362e+03, 3.000e+00, 2.000e+00, 9.240e+02, 2.000e+00],\n"," ...,\n"," [1.020e+03, 3.000e+00, 2.000e+00, 1.006e+03, 3.000e+00],\n"," [2.400e+03, 2.000e+00, 2.000e+00, 9.380e+02, 1.000e+00],\n"," [9.500e+02, 3.000e+00, 2.000e+00, 1.053e+03, 2.000e+00]])"]},"metadata":{},"execution_count":16}]},{"cell_type":"markdown","metadata":{"id":"627a5a3a"},"source":["#### Since our dataset has four features i.e Hostel No. , Occupancy, Room Size and Floor ,our hypothesis function becomes\n","### hθ(x) = θ0 + θ1x1 + θ2x2 +θ3x3 + θ4x4\n","#### where x1 ,x2,x3 and x4 are the two features (i.e. size of house and number of rooms)"],"id":"627a5a3a"},{"cell_type":"markdown","metadata":{"id":"58fdf0fe"},"source":["### So Your task is to define hypothesis function having 4 features and a corresponding cost function "],"id":"58fdf0fe"},{"cell_type":"code","metadata":{"id":"34dc5643"},"source":[" # define and complete hypothesis function "],"id":"34dc5643","execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"6fae141b"},"source":["# define and complete cost function"],"id":"6fae141b","execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"178eb11f"},"source":["### Gradient Descent \n","#### So we have our hypothesis function and we have a way of measuring how well it fits into the data. Now we need to estimate the parameters in the hypothesis function. That's where gradient descent comes in.\n","### Your next task is to define gradient descent function having some specific value of learning rate and number of epochs.\n","#### Note that learning rate should be neither very high nor very low .Why?\n","#### Check out exact reason [here](https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-performance-in-deep-learning-d0d4059c1c10)\n","\n"],"id":"178eb11f"},{"cell_type":"code","metadata":{"id":"167b5bdc"},"source":["#define and complete Gradient Descent function "],"id":"167b5bdc","execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"724e407a"},"source":["### Now we want to visualize how our cost function varies with number of epochs .So your next task is to plot graph of updated costs vs number of epochs "],"id":"724e407a"},{"cell_type":"markdown","metadata":{"id":"e82f6ebf"},"source":["#### After plotting above graph you will notice that your cost function decreases with epochs.\n","#### Perfect! This is all what we wanted to seek by doing linear regression. \n","\n","#### Now it's time to test our model on some test data. \n","\n","#### For this you will define a test function that will take as input Hostel No. , Occupancy, Room Size , Floor and the final theta vector that was returned by our linear regression model and will give us the price of the house. Compute it for any set of features given and final value of theta as given by gradient descent function"],"id":"e82f6ebf"},{"cell_type":"code","metadata":{"id":"c522bca3"},"source":["# define and complete test function that will take required inputs .This function should return price of Room "],"id":"c522bca3","execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"947f35b1"},"source":["#### Now since we have defined all required functions , we can call functions one by one and get our final results .\n","#### Your final task is to use all functions defined above and predict the price of room for some input combinations to check how well your model works."],"id":"947f35b1"},{"cell_type":"markdown","metadata":{"id":"06e54ef5"},"source":["#### You can try playing with different values of alpha and epochs and see which combination gives most accurate results but do lookout for overfitting \n"],"id":"06e54ef5"},{"cell_type":"code","metadata":{"id":"3fc631fd"},"source":[""],"id":"3fc631fd","execution_count":null,"outputs":[]}]}
\ No newline at end of file
From 8e8e0350effd10948ca7deef9795019ad65abf3c Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Fri, 29 Oct 2021 00:11:21 +0530
Subject: [PATCH 04/11] Delete KNN_Task4 _203174002.ipynb
---
KNN_Task4 _203174002.ipynb | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 KNN_Task4 _203174002.ipynb
diff --git a/KNN_Task4 _203174002.ipynb b/KNN_Task4 _203174002.ipynb
deleted file mode 100644
index 5dc9eee..0000000
--- a/KNN_Task4 _203174002.ipynb
+++ /dev/null
@@ -1 +0,0 @@
-{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"KNN_Task4 _203174002.ipynb","provenance":[]},"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.8.8"}},"cells":[{"cell_type":"markdown","metadata":{"id":"cPP7BfqFSgyH"},"source":["# K-Nearest Neighbors Algorithm\n"]},{"cell_type":"markdown","metadata":{"id":"Zd0p7ZUpSgyL"},"source":["![example 1.png](data:image/png;base64,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)In this Jupyter Notebook we will focus on $KNN-Algorithm$. KNN is a data classification algorithm that attempts to determine what group a data point is in by looking at the data points around it.\n","\n","An algorithm, looking at one point on a grid, trying to determine if a point is in group A or B, looks at the states of the points that are near it. The range is arbitrarily determined, but the point is to take a sample of the data. If the majority of the points are in group A, then it is likely that the data point in question will be A rather than B, and vice versa.\n"," \n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"TyGHDf4NSgyM"},"source":["# Imports"]},{"cell_type":"code","metadata":{"id":"iIEvA0xjSgyN","executionInfo":{"status":"ok","timestamp":1635250818719,"user_tz":-330,"elapsed":418,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["import numpy as np\n","from tqdm import tqdm_notebook"],"execution_count":5,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rc8ruF56SgyO"},"source":["# How it works?\n","\n","We have some labeled data set $X-train$, and a new set $X$ that we want to classify based on previous classifications\n","\n"]},{"cell_type":"markdown","metadata":{"id":"rGbvEXbvSgyO"},"source":["## Seps"]},{"cell_type":"markdown","metadata":{"id":"B-nf9G4ZSgyP"},"source":["### 1. Calculate distance to all neighbours\n","### 2. Sort neightbours (based on closest distance)\n","### 3. Count possibilities of each class for k nearest neighbours \n","### 4. The class with highest possibilty is Your prediction"]},{"cell_type":"markdown","metadata":{"id":"LuWwKdFrSgyP"},"source":["# 1. Calculate distance to all neighbours\n","\n","Depending on the problem You should use different type of count distance method.\n"," \n","For example we can use Euclidean distance. Euclidean distance is the \"ordinary\" straight-line distance between two points in D-Dimensional space\n","\n","#### Definiton\n","$d(p, q) = d(q, p) = \\sqrt{(q_1 - p_1)^2 + (q_2 - p_2)^2 + \\dots + (q_D - p_D)^2} = \\sum_{d=1}^{D} (p_d - q_d)^2$\n","\n","#### Example\n","Distance in $R^2$\n","\n","\n","\n","$p = (4,6)$\n"," \n","$q = (1,2)$\n"," \n","$d(p, q) = \\sqrt{(1-4)^2 + (2-6)^2} =\\sqrt{9 + 16} = \\sqrt{25} = 5 $\n","\n"]},{"cell_type":"markdown","metadata":{"id":"vlvNZqiJSgyQ"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"EvmQi6nsSgyR","executionInfo":{"status":"ok","timestamp":1635250723579,"user_tz":-330,"elapsed":1651,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["def get_euclidean_distance(A_matrix, B_matrix):\n"," \n"," C = [ [ 0 for i in range(np.size(B_matrix, 0)) ] for j in range(np.size(A_matrix, 0)) ]\n"," \n"," for i in range (0, np.size(A_matrix, 0)):\n"," row1 = A_matrix[i,:]\n"," for j in range (0, np.size(B_matrix, 0)):\n"," row2 = B_matrix[j,:]\n"," \n"," C[i][j] = np.sum(np.square(row1 - row2))\n"," \n"," ## Use the distance formula for the matrices using numpy functions\n"," ## C is the sum of the squares of the distances\n","\n"," return np.sqrt(C)\n"],"execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"GABzTa_0SgyS"},"source":["## Example Usage"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"W6b8yBSoSgyS","executionInfo":{"status":"ok","timestamp":1635250824471,"user_tz":-330,"elapsed":411,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"966f10e6-5429-4f7e-e70f-50df76e1b2ca"},"source":["X = np.array([[1,2,3] , [-4,5,-6]])\n","\n","X_train = np.array([[0,0,0], [1,2,3], [4,5,6], [-4, 4, -6]])\n","\n","print(\"X: {} Exaples in {} Dimensional space\".format(*X.shape))\n","print(\"X_train: {} Exaples in {} Dimensional space\".format(*X_train.shape))\n","\n","\n","print()\n","\n","print(\"X:\")\n","print(X)\n","\n","print()\n","\n","print(\"X_train\")\n","print(X_train)\n"],"execution_count":6,"outputs":[{"output_type":"stream","name":"stdout","text":["X: 2 Exaples in 3 Dimensional space\n","X_train: 4 Exaples in 3 Dimensional space\n","\n","X:\n","[[ 1 2 3]\n"," [-4 5 -6]]\n","\n","X_train\n","[[ 0 0 0]\n"," [ 1 2 3]\n"," [ 4 5 6]\n"," [-4 4 -6]]\n"]}]},{"cell_type":"code","metadata":{"id":"kB8IZcDpSgyT","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635250828586,"user_tz":-330,"elapsed":423,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"e48c7a0f-c233-44a7-baa1-66354fc59437"},"source":["## Initialize the distance matrix using the get_euclidean_matrix\n","\n","C = get_euclidean_distance(X, X_train)\n","\n","## Euclidean distance b/w row i of X and row j of X_train is available as C[i][j]\n","\n","\n","## Print Distance between first example from X and first form X_train\n","print(f\"Distance between first example from X and first form X_train {C[0,0]}\")"],"execution_count":7,"outputs":[{"output_type":"stream","name":"stdout","text":["Distance between first example from X and first form X_train 3.7416573867739413\n"]}]},{"cell_type":"markdown","metadata":{"id":"vbaJfBihSgyT"},"source":["# 2. Sort neightbours\n","\n","In order to find best fitting class for our observations we need to find to which classes belong observation neightbours and then to sort classes based on the closest distance\n"]},{"cell_type":"markdown","metadata":{"id":"b1VLHUj2SgyU"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"na0G1o_ASgyU"},"source":["def get_sorted_train_labels(distance_matrix, y):\n"," \"\"\"\n"," Function sorts y labels, based on probabilities from distances matrix\n"," Args:\n"," distance_matrix (numpy.ndarray): Distance Matrix, between points from X and X_train, size: N1:N2\n"," y (numpy.ndarray): vector of classes of X points, size: N1\n","\n"," Returns:\n"," numpy.ndarray: labels matrix sorted according to distances to nearest neightours, size N1:N2 \n","\n"," \"\"\"\n"," \n"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"U0I8eltDSgyV"},"source":["# 3. Count possibilities of each class for k nearest neighbours \n","\n","In order to find best class for our observation $x$ we need to calculate the probability of belonging to each class. In our case it is quite easy. We need just to count how many from k-nearest-neighbours of observation $x$ belong to each class and then devide it by k \n","
\n","$p(y=class \\space| x) = \\frac{\\sum_{1}^{k}(1 \\space if \\space N_i = class, \\space else \\space 0) }{k}$ Where $N_i$ is $i$ nearest neightbour\n","\n"]},{"cell_type":"markdown","metadata":{"id":"j0ZtOC38SgyV"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"y2aaG2GdSgyV"},"source":["def get_p_y_x_using_knn(y, k):\n"," \"\"\"\n"," The function determines the probability distribution p (y | x)\n"," for each of the labels for objects from the X\n"," using the KNN classification learned on the X_train\n","\n"," Args:\n"," y (numpy.ndarray): Sorted matrix of N2 nearest neighbours labels, size N1:N2\n"," k (int): number of nearest neighbours for KNN algorithm\n","\n"," Returns: numpy.ndarray: Matrix of probabilities for N1 points (from set X) of belonging to each class,\n"," size N1:C (where C is number of classes)\n"," \"\"\"\n","\n"," ## Write your code here\n","\n"," return probabilities_matrix\n"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ThEbAnXISgyW"},"source":["# 4. The class with highest possibilty is Your prediction"]},{"cell_type":"markdown","metadata":{"id":"_i7NTtN4SgyW"},"source":["At the end we combine all previous steps to get prediction"]},{"cell_type":"markdown","metadata":{"id":"OzK6rY8mSgyW"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"DaYqr_i6SgyW","executionInfo":{"status":"ok","timestamp":1635250858682,"user_tz":-330,"elapsed":471,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["def predict(X, X_train, y_train, k, distance_function):\n"," \"\"\"\n"," Function returns predictions for new set X based on labels of points from X_train\n"," Args:\n"," X (numpy.ndarray): set of observations (points) that we want to label\n"," X_train (numpy.ndarray): set of lalabeld bservations (points)\n"," y_train (numpy.ndarray): labels for X_train\n"," k (int): number of nearest neighbours for KNN algorithm\n","\n"," Returns:\n"," (numpy.ndarray): label predictions for points from set X\n"," \"\"\"\n"," ## Write your code here\n","\n"," return prediction"],"execution_count":9,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"i9kzyASWSgyX"},"source":["# Accuracy"]},{"cell_type":"markdown","metadata":{"id":"v8bNPTPZSgyX"},"source":["To find how good our knn model works we should count accuracy"]},{"cell_type":"markdown","metadata":{"id":"dgFCnJ14SgyX"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"2ySpyThlSgyX"},"source":["def count_accuracy(prediction, y_true):\n"," \"\"\"\n"," Returns:\n"," float: Predictions accuracy\n","\n"," \"\"\"\n"," N1 = prediction.shape[0]\n"," \n"," ## Use np.sum to count the number of elements where predicted value == actual value and assign the count to the variable accuracy\n","\n"," return accuracy"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"b5g7YFY2SgyX"},"source":["## Example usage"]},{"cell_type":"code","metadata":{"id":"uLqCqmJNSgyY","colab":{"base_uri":"https://localhost:8080/","height":235},"executionInfo":{"status":"error","timestamp":1635250842268,"user_tz":-330,"elapsed":449,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"dcf624ee-b959-4577-b370-464112163929"},"source":["y_true = np.array([[0, 2]])\n","\n","predicton = predict(X, X_train, y_train, 3, get_euclidean_distance)\n","\n","\n","print(\"True classes:{}, accuracy {}%\".format(y_true, count_accuracy(predicton, y_true) * 100))"],"execution_count":8,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0my_true\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpredicton\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_euclidean_distance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'predict' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"--WUpIcxSgyY"},"source":["# Find best k"]},{"cell_type":"markdown","metadata":{"id":"itkcD0DlSgyY"},"source":["Best k parameter is that one for which we have highest accuracy"]},{"cell_type":"markdown","metadata":{"id":"7GYEUBnnSgyY"},"source":["## Code"]},{"cell_type":"code","metadata":{"id":"Q6OhNBOoSgyY","executionInfo":{"status":"ok","timestamp":1635250862606,"user_tz":-330,"elapsed":413,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["def select_knn_model(X_validation, y_validation, X_train, y_train, k_values, distance_function):\n"," \"\"\"\n"," Function returns k parameter that best fit Xval points\n"," Args:\n"," Xval (numpy.ndarray): set of Validation Data, size N1:D\n"," Xtrain (numpy.ndarray): set of Training Data, size N2:D\n"," yval (numpy.ndarray): set of labels for Validation data, size N1:1\n"," ytrain (numpy.ndarray): set of labels for Training Data, size N2:1\n"," k_values (list): list of int values of k parameter that should be checked\n","\n"," Returns:\n"," int: k paprameter that best fit validation set\n"," \"\"\"\n","\n"," accuracies = []\n","\n"," for k in tqdm_notebook(k_values):\n"," prediction = predict(X_validation, X_train, y_train, k, distance_function)\n","\n"," accuracy = count_accuracy(prediction, y_validation)\n"," accuracies.append(accuracy)\n","\n"," best_k = k_values[accuracies.index(max(accuracies))]\n","\n"," return best_k, accuracies\n"],"execution_count":10,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"nGtIjD0WSgyY"},"source":["# Real World Example - Iris Dataset"]},{"cell_type":"markdown","metadata":{"id":"-o6MHMtKSgyZ"},"source":["\n","\n","\n","\n","This is perhaps the best known database to be found in the pattern recognition literature. The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant. One class is linearly separable from the other 2; the latter are NOT linearly separable from each other. \n","\n","Each example contains 4 attributes\n","1. sepal length in cm \n","2. sepal width in cm \n","3. petal length in cm \n","4. petal width in cm \n","\n","Predicted attribute: class of iris plant. \n","\n","\n","\n","\n","\n","\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"SY8oOngQSgyZ","executionInfo":{"status":"ok","timestamp":1635250867474,"user_tz":-330,"elapsed":414,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"270c2090-4cc4-43c8-dd20-5ed2670e0067"},"source":["from sklearn import datasets\n","import matplotlib.pyplot as plt\n","\n","iris = datasets.load_iris()\n","\n","iris_X = iris.data\n","iris_y = iris.target\n","\n","print(\"Iris: {} examples in {} dimensional space\".format(*iris_X.shape))\n","print(\"First example in dataset :\\n Speal lenght: {}cm \\n Speal width: {}cm \\n Petal length: {}cm \\n Petal width: {}cm\".format(*iris_X[0]))\n","\n","print(\"Avalible classes\", np.unique(iris_y))"],"execution_count":11,"outputs":[{"output_type":"stream","name":"stdout","text":["Iris: 150 examples in 4 dimensional space\n","First example in dataset :\n"," Speal lenght: 5.1cm \n"," Speal width: 3.5cm \n"," Petal length: 1.4cm \n"," Petal width: 0.2cm\n","Avalible classes [0 1 2]\n"]}]},{"cell_type":"markdown","metadata":{"id":"-IlKSX7hSgyZ"},"source":["## Prepare Data\n","\n","In our data set we have 150 examples (50 examples of each class), we have to divide it into 3 datasets.\n","1. Training data set, 90 examples. It will be used to find k - nearest neightbours\n","2. Validation data set, 30 examples. It will be used to find best k parameter, the one for which accuracy is highest\n","3. Test data set, 30 examples. It will be used to check how good our model performs\n","\n","Data has to be shuffled (mixed in random order), because originally it is stored 50 examples of class 0, 50 of 1 and 50 of 2.\n"]},{"cell_type":"code","metadata":{"id":"RA1Q7kCPSgyZ","executionInfo":{"status":"ok","timestamp":1635250871691,"user_tz":-330,"elapsed":418,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}}},"source":["from sklearn.utils import shuffle\n","\n","iris_X, iris_y = shuffle(iris_X, iris_y, random_state=134)\n","\n","\n","test_size = 30\n","validation_size = 30\n","training_size = 90\n","\n","## Initialize X_test\n","## Initialize X_validation \n","## Initialize X_train \n","\n","## Initialize y_test\n","## Initialize y_validation\n","## Initialize y_train"],"execution_count":12,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"r9xJVLzrSgyZ"},"source":["## Find best k parameter"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":235},"id":"hbvZBVNBSgya","executionInfo":{"status":"error","timestamp":1635250875803,"user_tz":-330,"elapsed":430,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"f62b15f9-7fca-4789-bac2-2db5cbbcd8c0"},"source":["k_values = [i for i in range(3,50)]\n","\n","best_k, accuracies = select_knn_model(X_validation, y_validation, X_train, y_train, k_values, distance_function=get_euclidean_distance)\n","\n","## Plot accuracy vs k values graph"],"execution_count":13,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mk_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m50\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mbest_k\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccuracies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mselect_knn_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_validation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_validation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk_values\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdistance_function\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mget_euclidean_distance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;31m## Plot accuracy vs k values graph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'X_validation' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"BjQBDWJMSgya"},"source":["## Count accuracy for training set"]},{"cell_type":"code","metadata":{"id":"_f-J5sSESgya","colab":{"base_uri":"https://localhost:8080/","height":201},"executionInfo":{"status":"error","timestamp":1635250882340,"user_tz":-330,"elapsed":434,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"d0dfb811-a65e-472c-bdc7-fad839ccc488"},"source":["prediction = predict(X_test, X_train, y_train, best_k, get_euclidean_distance)\n","\n","## Calculate Best accuracy using the best k value\n"],"execution_count":14,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprediction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbest_k\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_euclidean_distance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m## Calculate Best accuracy using the best k value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"72O5eXbCSgyc"},"source":["# Sources\n","\n","https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm - first visualisation image\n","\n","https://en.wikipedia.org/wiki/Euclidean_distance - euclidean distance visualisation\n","\n","https://rajritvikblog.wordpress.com/2017/06/29/iris-dataset-analysis-python/ - first iris image\n","\n","https://rpubs.com/wjholst/322258 - second iris image\n","\n"]}]}
\ No newline at end of file
From c2045dbcb1f52241082186a4de77d69394026e77 Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Fri, 29 Oct 2021 00:11:34 +0530
Subject: [PATCH 05/11] Delete Classification_Task3_203174002.ipynb
---
Classification_Task3_203174002.ipynb | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 Classification_Task3_203174002.ipynb
diff --git a/Classification_Task3_203174002.ipynb b/Classification_Task3_203174002.ipynb
deleted file mode 100644
index 1d8640a..0000000
--- a/Classification_Task3_203174002.ipynb
+++ /dev/null
@@ -1 +0,0 @@
-{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Classification_Task3_203174002.ipynb","provenance":[],"collapsed_sections":[]},"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.8.8"}},"cells":[{"cell_type":"markdown","metadata":{"id":"7C5rAxwPGDQf"},"source":["# Importing useful libraries"]},{"cell_type":"code","metadata":{"id":"8qvrslgsF4Mn"},"source":["import numpy as np\n","import pandas as pd \n","from pandas import Series, DataFrame\n","\n","import seaborn as sns\n","import matplotlib.pyplot as plt\n","%matplotlib inline"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"6aYOLI2BHF6m"},"source":["## Loading the dataset.\n","The dataset can be found [here](https://github.com/shreedharmalpani/Intro-To-ML-Hello-FOSS/blob/main/iris.csv)"]},{"cell_type":"code","metadata":{"id":"_hccks2pF4Mq"},"source":["df = pd.read_csv(\"iris.csv\")"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"um0L09IOF4Ms","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635010648975,"user_tz":-330,"elapsed":513,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"5adfbd69-3916-4a7d-9b21-496cfc4ab498"},"source":["df.head()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
sepal_length
\n","
sepal_width
\n","
petal_length
\n","
petal_width
\n","
species
\n","
\n"," \n"," \n","
\n","
0
\n","
5.1
\n","
3.5
\n","
1.4
\n","
0.2
\n","
setosa
\n","
\n","
\n","
1
\n","
4.9
\n","
3.0
\n","
1.4
\n","
0.2
\n","
setosa
\n","
\n","
\n","
2
\n","
4.7
\n","
3.2
\n","
1.3
\n","
0.2
\n","
setosa
\n","
\n","
\n","
3
\n","
4.6
\n","
3.1
\n","
1.5
\n","
0.2
\n","
setosa
\n","
\n","
\n","
4
\n","
5.0
\n","
3.6
\n","
1.4
\n","
0.2
\n","
setosa
\n","
\n"," \n","
\n","
"],"text/plain":[" sepal_length sepal_width petal_length petal_width species\n","0 5.1 3.5 1.4 0.2 setosa\n","1 4.9 3.0 1.4 0.2 setosa\n","2 4.7 3.2 1.3 0.2 setosa\n","3 4.6 3.1 1.5 0.2 setosa\n","4 5.0 3.6 1.4 0.2 setosa"]},"metadata":{},"execution_count":5}]},{"cell_type":"code","metadata":{"id":"cbx8gP4zF4Mt","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635010651537,"user_tz":-330,"elapsed":11,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"6d8d789e-43c0-499a-9f8d-7f501f9b58bc"},"source":["df.info() "],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","RangeIndex: 150 entries, 0 to 149\n","Data columns (total 5 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 sepal_length 150 non-null float64\n"," 1 sepal_width 150 non-null float64\n"," 2 petal_length 150 non-null float64\n"," 3 petal_width 150 non-null float64\n"," 4 species 150 non-null object \n","dtypes: float64(4), object(1)\n","memory usage: 6.0+ KB\n"]}]},{"cell_type":"markdown","metadata":{"id":"vjH1pAqoJna2"},"source":["# Data Cleaning & Data Visualization"]},{"cell_type":"markdown","metadata":{"id":"PNfSyZF1F4Mu"},"source":["### 1) Remove unneeded columns\n","### 2) Check for duplicate rows \n","### 2) Check for rows with missing values\n"]},{"cell_type":"code","metadata":{"collapsed":true,"id":"HKFsVhubF4Mx"},"source":["df.isna().sum()"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"Rm7rlDcPR0aI"},"source":["df.isnull()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"L1cnZS5XF4M2"},"source":["### EDA (Exploratory Data Analysis) with Iris"]},{"cell_type":"code","metadata":{"id":"DjsnhAraF4M7","colab":{"base_uri":"https://localhost:8080/","height":458},"executionInfo":{"status":"ok","timestamp":1635011702579,"user_tz":-330,"elapsed":523,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"a7bf481b-9840-450b-b8f2-49a114bba973"},"source":["##Displaying a scatter plot to show the distribution of Sepal Length vs width the dataset\n","\n","fig = df[df.species == 'Iris-setosa'].plot(kind='scatter', x='petal_length', y='petal_width', color='orange', label='Setosa')\n","df[df.species == 'Iris-versicolor'].plot(kind='scatter', x='petal_length', y='petal_width', color='blue', label='Versicolor', ax=fig)\n","df[df.species == 'Iris-virginica'].plot(kind='scatter', x='petal_length', y='petal_width', color='green', label='Virginica', ax=fig)\n","\n","fig.set_xlabel('Petal Length')\n","fig.set_ylabel('Petal Width')\n","fig.set_title('Petal Length Vs Width')\n","\n","fig=plt.gcf()\n","fig.set_size_inches(10, 7)\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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1DVvkiSp49544w2WLl3KunXr6l3KTqFnz54MGjSI3XbbrU39DW+SJGm7LF26lD322IPBgwcTEfUup9Qyk5UrV7J06VKGDBnSpmU8bSpJkrbLunXr2HvvvQ1unSAi2HvvvbdrFNPwJkmStpvBrfNs79/S8CZJklQihjdJklQ63/jGNxg2bBgjR47k0EMP5eGHH26x7/Tp01m2bFkXVldb3rAgSZJK5aGHHuJXv/oV8+fPp0ePHrz44ousX7++xf7Tp09n+PDhDBw4sAurrB1H3iRJUu2tWwEr51a+O2j58uX079+fHj16ANC/f38GDhzIvHnzGD9+PIcddhgnn3wyy5cv59Zbb6WxsZGPf/zjHHrooaxdu5Y5c+YwatQoRowYwQUXXMDrr78OwNSpUxk6dCgjR47k85//PAB33HEHY8eOZdSoUZxwwgm88MILHa6/oyIz611Dl2loaEjfbSpJUsc8/vjjHHzwwW1fYMnN8PBkeMvu8OZ6GDsNBk9q9/ZXr17N0UcfzZo1azjhhBM4++yzef/738/48eO5/fbbGTBgALfccguzZ8/mhz/8Iccccwzf+ta3aGhoYN26dRx00EHMmTOH97znPXzyk59k9OjRnHvuubz//e/niSeeICJ45ZVX6NevHy+//DL9+vUjIrjxxht5/PHHueaaa9pde0ua+5tGxLzMbGja19OmkiSpdtatqAS3jWsrH6hMv+ME6DmgXavs06cP8+bN4/777+fee+/l7LPP5rLLLuPRRx/lxBNPBGDjxo3su+++Wy375JNPMmTIEN7znvcAcN5553H99dczZcoUevbsyeTJkznttNM47bTTgMoz7c4++2yWL1/O+vXr2/wstloyvEmSpNp5bUllxG1TcAN4y26V9naGN4Bu3bpxzDHHcMwxxzBixAiuv/56hg0bxkMPPdSu9XXv3p0//elPzJkzh1tvvZXvfe973HPPPVx00UVccsklnH766dx3331cfvnl7a65s3jNmyRJqp3egyunSqu9+UalvZ2efPJJnnrqqc3TCxYs4OCDD2bFihWbw9sbb7zBokWLANhjjz149dVXAXjve9/LkiVLWLx4MQA33XQT48ePZ/Xq1axatYpTTz2Vb3/72yxcuBCAVatWsd9++wEwY8aMdtfcmRx5kyRJtdNzQOUat4cnV0bc3nyjMt2BUbfVq1dz0UUX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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"O_eYByFvF4M5","colab":{"base_uri":"https://localhost:8080/","height":235},"executionInfo":{"status":"error","timestamp":1635011142444,"user_tz":-330,"elapsed":515,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"fa78777e-0d87-449b-d9b7-a3995609ba6a"},"source":["#Display a scatter plot to show the distribution of Sepal Length vs width the dataset (Like previous Petal lenght vs width scatter plot)\n","\n","\n","#code\n","\n","fig.set_xlabel('Sepal Length')\n","fig.set_ylabel('Sepal Width')\n","fig.set_title('Sepal Length Vs Width')\n","\n","\n","fig=plt.gcf()\n","fig.set_size_inches(10, 7)\n","plt.show()\n","#example plot"],"execution_count":null,"outputs":[{"output_type":"error","ename":"AttributeError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m#code\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_xlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Sepal Length'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_ylabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Sepal Width'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Sepal Length Vs Width'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mAttributeError\u001b[0m: 'Figure' object has no attribute 'set_xlabel'"]}]},{"cell_type":"code","metadata":{"id":"EIh_yKQAF4M6","outputId":"91706df0-4dd1-4a8b-92e7-41e04e6e602d"},"source":["#plot the FacetGrid plot using the seaborn library\n","\n","#sns.FacetGrid(...)\\\n","# .map(...)\\\n","# .add_legend()\n"],"execution_count":null,"outputs":[{"data":{"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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\n","text/plain":[""]},"metadata":{},"output_type":"display_data"}]},{"cell_type":"code","metadata":{"id":"yadZQxoKF4M8","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1635011940282,"user_tz":-330,"elapsed":443,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"2f79fbfa-369f-48a0-8027-ae3f747a9adf"},"source":["#Plot the distritbution of the features using histgram\n","fig = plt.gcf()\n","fig.set_size_inches(12,6)\n","plt.show()"],"execution_count":48,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"xb-AFaG3PU0D"},"source":["## Importing alll the necessary packages to use the various classification algorithms\n"]},{"cell_type":"code","metadata":{"id":"cJVjbgAjF4M_"},"source":["from sklearn.linear_model import LogisticRegression # for Logistic Regression Algorithm\n","from sklearn import svm # for suport vector machine algorithm\n","from sklearn import metrics # for checking the model accuracy\n","from sklearn.tree import DecisionTreeClassifier # for using DTA"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"8LizCSuWF4NA"},"source":["df.shape"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"WW5Hp1fFF4NC"},"source":["Now, when we train any algorithm, the number of features and their correlation plays an important role. If there are features and many of the features are highly correlated, then training an algorithm with all the featues will reduce the accuracy. Thus features selection should be done carefully. This dataset has less featues but still we will see the correlation.\n"]},{"cell_type":"code","metadata":{"id":"YABeXMklF4ND","colab":{"base_uri":"https://localhost:8080/","height":270},"executionInfo":{"status":"ok","timestamp":1635011174157,"user_tz":-330,"elapsed":819,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"a9537d5f-a224-42a1-b4ae-f10891512872"},"source":["plt.figure(figsize=(8,4))\n","sns.heatmap(df.corr(), annot=True, cmap='cubehelix_r') # draws heatmap with input as correlation matrix calculated by df.corr() \n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"gsd6QaoaF4NE"},"source":["Observation--->\n","The Sepal Width and Length are not correlated The Petal Width and Length are highly correlated\n","We will use all the features for training the algorithm and check the accuracy.\n","\n","Then we will use 1 Petal Feature and 1 Sepal Feature to check the accuracy of the algorithm as we are using only 2 features that are not correlated. Thus we can have a variance in the dataset which may help in better accuracy. We will check it later.\n","\n","Steps To Be followed When Applying an Algorithm\n","\n","Split the dataset into training and testing dataset. The testing dataset is generally smaller than training one as it will help in training the model better.\n","\n","Select any algorithm based on the problem (classification or regression) whatever you feel may be good.\n","Then pass the training dataset to the algorithm to train it. We use the .fit() method\n","Then pass the testing data to the trained algorithm to predict the outcome. We use the .predict() method.\n","We then check the accuracy by passing the predicted outcome and the actual output to the model."]},{"cell_type":"markdown","metadata":{"id":"QAD_cNirF4NF"},"source":["# Splitting The Data into Training And Testing Dataset"]},{"cell_type":"code","metadata":{"id":"ZqSRd9GzF4NF","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1635011177764,"user_tz":-330,"elapsed":6,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"58101a90-1ffd-45b9-8dbe-3ef9e5f914a2"},"source":["from sklearn.model_selection import train_test_split\n","train, test = train_test_split(df, test_size=0.3) # our main data split into train and test\n","# the attribute test_size=0.3 splits the data into 70% and 30% ratio. train=70% and test=30%\n","print(train.shape)\n","print(test.shape)"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["(105, 5)\n","(45, 5)\n"]}]},{"cell_type":"code","metadata":{"id":"yO2J2FpjF4NG"},"source":["train_X = train[['sepal_length','sepal_width','petal_length','petal_width']] # taking the training data features\n","train_y = train.species # output of the training data\n","\n","test_X = test[['sepal_length','sepal_width','petal_length','petal_width']] # taking test data feature\n","test_y = test.species # output value of the test data"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"yR9D2qgQF4NG","colab":{"base_uri":"https://localhost:8080/","height":205},"executionInfo":{"status":"ok","timestamp":1635011258352,"user_tz":-330,"elapsed":749,"user":{"displayName":"Desu Venkata Manikanta","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"10818416874497828882"}},"outputId":"f3bb7968-3684-416f-9a42-ab5fcbfff8f6"},"source":["train_X.head()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "xb-AFaG3PU0D"
+ },
+ "source": [
+ "## Importing alll the necessary packages to use the various classification algorithms\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "cJVjbgAjF4M_"
+ },
+ "source": [
+ "from sklearn.linear_model import LogisticRegression # for Logistic Regression Algorithm\n",
+ "from sklearn import svm # for suport vector machine algorithm\n",
+ "from sklearn import metrics # for checking the model accuracy\n",
+ "from sklearn.tree import DecisionTreeClassifier # for using DTA"
+ ],
+ "execution_count": 21,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "8LizCSuWF4NA"
+ },
+ "source": [
+ "df.shape"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "WW5Hp1fFF4NC"
+ },
+ "source": [
+ "Now, when we train any algorithm, the number of features and their correlation plays an important role. If there are features and many of the features are highly correlated, then training an algorithm with all the featues will reduce the accuracy. Thus features selection should be done carefully. This dataset has less featues but still we will see the correlation.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "YABeXMklF4ND",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 270
+ },
+ "outputId": "a9537d5f-a224-42a1-b4ae-f10891512872"
+ },
+ "source": [
+ "plt.figure(figsize=(8,4))\n",
+ "sns.heatmap(df.corr(), annot=True, cmap='cubehelix_r') # draws heatmap with input as correlation matrix calculated by df.corr() \n",
+ "plt.show()"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "gsd6QaoaF4NE"
+ },
+ "source": [
+ "Observation--->\n",
+ "The Sepal Width and Length are not correlated The Petal Width and Length are highly correlated\n",
+ "We will use all the features for training the algorithm and check the accuracy.\n",
+ "\n",
+ "Then we will use 1 Petal Feature and 1 Sepal Feature to check the accuracy of the algorithm as we are using only 2 features that are not correlated. Thus we can have a variance in the dataset which may help in better accuracy. We will check it later.\n",
+ "\n",
+ "Steps To Be followed When Applying an Algorithm\n",
+ "\n",
+ "Split the dataset into training and testing dataset. The testing dataset is generally smaller than training one as it will help in training the model better.\n",
+ "\n",
+ "Select any algorithm based on the problem (classification or regression) whatever you feel may be good.\n",
+ "Then pass the training dataset to the algorithm to train it. We use the .fit() method\n",
+ "Then pass the testing data to the trained algorithm to predict the outcome. We use the .predict() method.\n",
+ "We then check the accuracy by passing the predicted outcome and the actual output to the model."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "QAD_cNirF4NF"
+ },
+ "source": [
+ "# Splitting The Data into Training And Testing Dataset"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "ZqSRd9GzF4NF",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "257d6b8c-654b-49d6-f840-d476bc46ae86"
+ },
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "train, test = train_test_split(df, test_size=0.3) # our main data split into train and test\n",
+ "# the attribute test_size=0.3 splits the data into 70% and 30% ratio. train=70% and test=30%\n",
+ "print(train.shape)\n",
+ "print(test.shape)"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(105, 5)\n",
+ "(45, 5)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "yO2J2FpjF4NG"
+ },
+ "source": [
+ "train_X = train[['sepal_length','sepal_width','petal_length','petal_width']] # taking the training data features\n",
+ "train_y = train.species # output of the training data\n",
+ "\n",
+ "test_X = test[['sepal_length','sepal_width','petal_length','petal_width']] # taking test data feature\n",
+ "test_y = test.species # output value of the test data"
+ ],
+ "execution_count": 17,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "yR9D2qgQF4NG",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 205
+ },
+ "outputId": "0c62edeb-9629-49d0-c18e-bc232bb75be1"
+ },
+ "source": [
+ "train_X.head()"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ " sepal_length sepal_width petal_length petal_width\n",
+ "3 4.6 3.1 1.5 0.2\n",
+ "45 4.8 3.0 1.4 0.3\n",
+ "140 6.7 3.1 5.6 2.4\n",
+ "46 5.1 3.8 1.6 0.2\n",
+ "53 5.5 2.3 4.0 1.3"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 37
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "5sFmts-IF4NI",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "3a0b4cfb-4665-4f28-9de2-0f6540a403e7"
+ },
+ "source": [
+ "train_y.head()"
+ ],
+ "execution_count": 19,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "11 setosa\n",
+ "27 setosa\n",
+ "143 virginica\n",
+ "12 setosa\n",
+ "3 setosa\n",
+ "Name: species, dtype: object"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "S_w4Me2bF4NL"
+ },
+ "source": [
+ "## Logistic Regression "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "gOQ5JrqrF4NL",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "f7c03398-1ca7-4a77-87de-3b3e3553b729"
+ },
+ "source": [
+ "model = LogisticRegression()\n",
+ "model.fit(train_X, train_y)\n",
+ "prediction = model.predict(test_X)\n",
+ "print('The accuracy of Logistic Regression is: ', metrics.accuracy_score(prediction, test_y))"
+ ],
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The accuracy of Logistic Regression is: 0.9777777777777777\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "e1NNX-EGF4NJ"
+ },
+ "source": [
+ "## Support Vector Machine SVM"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "zSJmVzqnF4NK",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c6618770-1391-4606-a015-64c020704bd8"
+ },
+ "source": [
+ "clf = svm.SVC(kernel='linear')\n",
+ "clf.fit(train_X, train_y)\n",
+ "\n",
+ "#Predict the response for test dataset\n",
+ "prediction = clf.predict(test_X)\n",
+ "\n",
+ "print('The accuracy of Support Vector Machine is: ', metrics.accuracy_score(prediction, test_y))"
+ ],
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The accuracy of Support Vector Machine is: 0.9777777777777777\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "GWfemKzPF4NN"
+ },
+ "source": [
+ "## Decision Tree"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "iRXy3EZIF4NN",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c95f9bbc-8021-4b16-b52a-ebb1d641e8a7"
+ },
+ "source": [
+ "#implementing using Decision Tree\n",
+ "#code\n",
+ "\n",
+ "print('The accuracy of Decision Tree is: ', metrics.accuracy_score(prediction, test_y))"
+ ],
+ "execution_count": 24,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The accuracy of Decision Tree is: 0.9777777777777777\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "uB2Co6f_F4NQ"
+ },
+ "source": [
+ "### We used all the features of iris in above models. Now we will use Petals and Sepals Seperately"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1_v6cAZMF4NQ"
+ },
+ "source": [
+ "### Creating Petals And Sepals Training Data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "collapsed": true,
+ "id": "e1Q-1b9YF4NQ"
+ },
+ "source": [
+ "petal = df[['petal_length','petal_width','species']]\n",
+ "sepal = df[['sepal_length','sepal_width','species']]"
+ ],
+ "execution_count": 28,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Lv-nab5oF4NQ"
+ },
+ "source": [
+ "### For Iris Petal"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "collapsed": true,
+ "id": "DuOqLUWZF4NQ"
+ },
+ "source": [
+ "train_p,test_p = train_test_split(petal, test_size=0.3, random_state=0) #petals\n",
+ "train_x_p = train_p[['petal_width','petal_length']] # taking the training data's Petal features\n",
+ "train_y_p = train_p.species # output of the training data\n",
+ "\n",
+ "test_x_p = test_p[['petal_width','petal_length']] # taking the test data's Petal features\n",
+ "test_y_p = test_p.species # output of the test data"
+ ],
+ "execution_count": 29,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "bgNB8kaNF4NU"
+ },
+ "source": [
+ "### For Iris Sepal"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "6hVj5MW3F4NU"
+ },
+ "source": [
+ "#Similarly define the split for sepals\n",
+ "#define the training and test data's Sepal features followed by the output of the training and test data\n",
+ "\n",
+ "#use naming- train_s,test_s ; train_x_s, train_y_s; test_x_s, test_y_s\n",
+ "train_s,test_s = train_test_split(sepal, test_size=0.3, random_state=0) #setals\n",
+ "train_x_s = train_s[['sepal_width','sepal_length']] # taking the training data's sepal features\n",
+ "train_y_s = train_s.species # output of the training data\n",
+ "\n",
+ "test_x_s = test_s[['sepal_width','sepal_length']] # taking the test data's sepal features\n",
+ "test_y_s = test_s.species # output of the test data\n",
+ "#code"
+ ],
+ "execution_count": 30,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "y08e1O6aU9mx"
+ },
+ "source": [
+ "Implementing the algorithms just like we did on the complete dataset but separately on sepals and petals and calculating accuracy"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "TeMWnQr6F4NV"
+ },
+ "source": [
+ "## SVM Algorithm"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "jhlutJ78F4NV",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "58709533-b2cf-45b3-98cf-34556938a806"
+ },
+ "source": [
+ "clf = svm.SVC(kernel='linear')\n",
+ "clf.fit(train_x_p, train_y_p)\n",
+ "\n",
+ "#Predict the response for test dataset\n",
+ "prediction = clf.predict(test_x_p)\n",
+ "print('The accuracy of the SVM using Petals is:',metrics.accuracy_score(prediction,test_y_p))\n",
+ "\n",
+ "clf = svm.SVC(kernel='linear')\n",
+ "clf.fit(train_x_s, train_y_s)\n",
+ "\n",
+ "#Predict the response for test dataset\n",
+ "prediction = clf.predict(test_x_s)\n",
+ "#code\n",
+ "print('The accuracy of the SVM using Sepals is:',metrics.accuracy_score(prediction,test_y_s))"
+ ],
+ "execution_count": 34,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The accuracy of the SVM using Petals is: 0.9777777777777777\n",
+ "The accuracy of the SVM using Sepals is: 0.8\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Mli7zcq_F4NV"
+ },
+ "source": [
+ "## Logistic Regression"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "2DqK_dFCF4NV",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "fba2975d-3919-44a5-caa9-bcecdac3646c"
+ },
+ "source": [
+ "model = LogisticRegression()\n",
+ "model.fit(train_x_p, train_y_p)\n",
+ "prediction = model.predict(test_x_p)\n",
+ "\n",
+ "print('The accuracy of the Logistic Regression using Petals is:',metrics.accuracy_score(prediction,test_y_p))\n",
+ "\n",
+ "model = LogisticRegression()\n",
+ "model.fit(train_x_s, train_y_s)\n",
+ "prediction = model.predict(test_x_s)\n",
+ "\n",
+ "print('The accuracy of the Logistic Regression using Sepals is:',metrics.accuracy_score(prediction,test_y_s))"
+ ],
+ "execution_count": 38,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The accuracy of the Logistic Regression using Petals is: 0.9777777777777777\n",
+ "The accuracy of the Logistic Regression using Sepals is: 0.8222222222222222\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "aM-7Zx95F4NW"
+ },
+ "source": [
+ "## Decision Tree"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "S8tXp-gMF4NW",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "7c084045-f710-4c98-dfbe-de4048897fe7"
+ },
+ "source": [
+ "clf = DecisionTreeClassifier()\n",
+ "clf.fit(train_x_p, train_y_p)\n",
+ "\n",
+ "#Predict the response for test dataset\n",
+ "prediction = clf.predict(test_x_p)\n",
+ "print('The accuracy of Decision Tree Classifier using Petals is:',metrics.accuracy_score(prediction,test_y_p))\n",
+ "\n",
+ "clf = DecisionTreeClassifier()\n",
+ "clf.fit(train_x_s, train_y_s)\n",
+ "\n",
+ "#Predict the response for test dataset\n",
+ "prediction = clf.predict(test_x_s)\n",
+ "#code\n",
+ "print('The accuracy of Decision Tree Classifier using Sepals is:',metrics.accuracy_score(prediction,test_y_s))"
+ ],
+ "execution_count": 40,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The accuracy of Decision Tree Classifier using Petals is: 0.9555555555555556\n",
+ "The accuracy of Decision Tree Classifier using Sepals is: 0.6444444444444445\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6ec0NUyJF4NW"
+ },
+ "source": [
+ "\n",
+ "\n",
+ "\n",
+ "### Question:\n",
+ "Does Using Petals over Sepals for training the data give a much better accuracy? Why?\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
From 458d3861eb4b7220b22d59fe6659339ff209b376 Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Fri, 29 Oct 2021 00:22:24 +0530
Subject: [PATCH 08/11] Rename Classification_Task3_203174002 (1).ipynb to
Classification_Task3_203174002.ipynb
---
..._203174002 (1).ipynb => Classification_Task3_203174002.ipynb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename Classification_Task3_203174002 (1).ipynb => Classification_Task3_203174002.ipynb (99%)
diff --git a/Classification_Task3_203174002 (1).ipynb b/Classification_Task3_203174002.ipynb
similarity index 99%
rename from Classification_Task3_203174002 (1).ipynb
rename to Classification_Task3_203174002.ipynb
index 926d289..f709133 100644
--- a/Classification_Task3_203174002 (1).ipynb
+++ b/Classification_Task3_203174002.ipynb
@@ -1326,4 +1326,4 @@
]
}
]
-}
\ No newline at end of file
+}
From ac77d68e03b22efe66b06ba5e6518839f690c32e Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Fri, 29 Oct 2021 00:23:52 +0530
Subject: [PATCH 09/11] Updated the code as per your comments
---
Linear_Regression_Task2_203174002 (1).ipynb | 1079 +++++++++++++++++++
1 file changed, 1079 insertions(+)
create mode 100644 Linear_Regression_Task2_203174002 (1).ipynb
diff --git a/Linear_Regression_Task2_203174002 (1).ipynb b/Linear_Regression_Task2_203174002 (1).ipynb
new file mode 100644
index 0000000..ed904a5
--- /dev/null
+++ b/Linear_Regression_Task2_203174002 (1).ipynb
@@ -0,0 +1,1079 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 5,
+ "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.8.8"
+ },
+ "colab": {
+ "name": "Linear_Regression_Task2_203174002.ipynb",
+ "provenance": [],
+ "collapsed_sections": []
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "89223f98"
+ },
+ "source": [
+ "\n",
+ "\n",
+ "```\n",
+ "Import libraries\n",
+ "```\n",
+ "\n",
+ "### Importing useful libraries \n"
+ ],
+ "id": "89223f98"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "26f77ebe"
+ },
+ "source": [
+ "# This Python 3 environment comes with many helpful analytics libraries installed\n",
+ "# For example, here's several helpful packages to load in\n",
+ "import numpy as np # linear algebra\n",
+ "import matplotlib.pyplot as plt # data visualization\n",
+ "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
+ "import seaborn as sns"
+ ],
+ "id": "26f77ebe",
+ "execution_count": 30,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "31c8220d"
+ },
+ "source": [
+ "### Loading the dataset \n",
+ "#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Room_price_data.csv)"
+ ],
+ "id": "31c8220d"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "1c5d873a"
+ },
+ "source": [
+ "df = pd.read_csv(\"Hostel_Linear-Dataset.csv\") #import text file \n"
+ ],
+ "id": "1c5d873a",
+ "execution_count": 10,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "1ca9aba0",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 205
+ },
+ "outputId": "3b129ba4-1b3a-4288-9b62-fd3344787414"
+ },
+ "source": [
+ "df.head()"
+ ],
+ "id": "1ca9aba0",
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Price
\n",
+ "
Hostel No.
\n",
+ "
Occupancy
\n",
+ "
Room Size
\n",
+ "
Floor
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
2540.0
\n",
+ "
3
\n",
+ "
1
\n",
+ "
686
\n",
+ "
8
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
2900.0
\n",
+ "
3
\n",
+ "
2
\n",
+ "
966
\n",
+ "
5
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
NaN
\n",
+ "
3
\n",
+ "
1
\n",
+ "
788
\n",
+ "
8
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
2362.0
\n",
+ "
3
\n",
+ "
2
\n",
+ "
924
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
NaN
\n",
+ "
3
\n",
+ "
2
\n",
+ "
1098
\n",
+ "
5
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Price Hostel No. Occupancy Room Size Floor\n",
+ "0 2540.0 3 1 686 8\n",
+ "1 2900.0 3 2 966 5\n",
+ "2 NaN 3 1 788 8\n",
+ "3 2362.0 3 2 924 2\n",
+ "4 NaN 3 2 1098 5"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "af08f245"
+ },
+ "source": [
+ "# Visualizing and Cleaning the data\n",
+ "\n",
+ "We will now be removing the nan values and identical values from the dataset\n",
+ "\n",
+ "For seeing if there are nan values in the dataset we will use the isna() function and then to remove them we will use the dropna() function. We will need to set additional parameters like rows and columns in the dropna function depending on the number of nan values present for each column\n",
+ "\n",
+ "Using the sum() function with isna() function we can get to know the number of missing values in each column"
+ ],
+ "id": "af08f245"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "2fd4babb",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "dd94b5ef-188f-4c3a-aec4-fe91cdc6a86d"
+ },
+ "source": [
+ "df.isna().sum()"
+ ],
+ "id": "2fd4babb",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Price 1531\n",
+ "Hostel No. 0\n",
+ "Occupancy 0\n",
+ "Room Size 0\n",
+ "Floor 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "83ef03c3"
+ },
+ "source": [
+ "After this we will proceed to remove the nan values \n",
+ "\n",
+ "Since there are not many nan values in the column 'Price' as compared to the number of rows we will remove the rows which have nan values. \n",
+ "\n",
+ "Reseting the index after removing the nan values and dropping the old index will also be important"
+ ],
+ "id": "83ef03c3"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "b65e4503"
+ },
+ "source": [
+ "df = df.dropna(subset = ['Price'],how= 'any')\n",
+ "df = df.reset_index(drop = True)\n",
+ "## df.isna().sum()"
+ ],
+ "id": "b65e4503",
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "40784889"
+ },
+ "source": [
+ "Now we can use the drop_duplicate function to remove the duplicate values\n",
+ "\n",
+ "This function has a parameter calle 'keep' where we specifiy to drop and which value to keep\n",
+ "\n",
+ "For this excercise we will keep the first values and drop the rest of the duplicates"
+ ],
+ "id": "40784889"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "75fa3dc8"
+ },
+ "source": [
+ "df = df.drop_duplicates(keep = 'first')\n",
+ "df = df.reset_index(drop = True)\n",
+ "## df.duplicated().sum()"
+ ],
+ "id": "75fa3dc8",
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "a007a33f"
+ },
+ "source": [
+ "For visualizing the data we will first start with looking at the distribution of different columns to see if there are enough number for each category in every column and dropping them if the data is biased for one category more than the other"
+ ],
+ "id": "a007a33f"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "b325df62",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "outputId": "cf878a76-66d3-4e68-f009-819d724a4eae"
+ },
+ "source": [
+ "columns = df.columns\n",
+ "for column in columns:\n",
+ " if(column== 'Price' or column=='Room Size'): \n",
+ " continue\n",
+ " fig = plt.figure(figsize=(5,5))\n",
+ " ax = fig.gca()\n",
+ " counts = df[column].value_counts()\n",
+ " counts.plot.bar(ax = ax, color='blue')\n",
+ " ax.set_title('No of rooms '+ column)\n",
+ " ax.set_xlabel(column)\n",
+ " ax.set_ylabel(\"No of rooms\")\n",
+ " plt.show()"
+ ],
+ "id": "b325df62",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "a74d69fd"
+ },
+ "source": [
+ "Now that we have analysed our data we can proceed to normalixing our data and regression"
+ ],
+ "id": "a74d69fd"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "77d8c6ba"
+ },
+ "source": [
+ "### Importing useful libraries \n"
+ ],
+ "id": "77d8c6ba"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "fffac537"
+ },
+ "source": [
+ "# This Python 3 environment comes with many helpful analytics libraries installed\n",
+ "# For example, here's several helpful packages to load in\n",
+ "import numpy as np # linear algebra\n",
+ "import matplotlib.pyplot as plt # data visualization\n",
+ "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)"
+ ],
+ "id": "fffac537",
+ "execution_count": 17,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "04cd7e4e"
+ },
+ "source": [
+ "### Loading the dataset \n",
+ "#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Insti_data.csv)"
+ ],
+ "id": "04cd7e4e"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "4ac8e74b",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "f8967616-b263-4127-bcc1-e4ce5d4799f4"
+ },
+ "source": [
+ "df['Room Size']=df['Room Size']/max(df['Room Size']) \n",
+ "\n",
+ "data = np.array(df, dtype=float)\n",
+ "data"
+ ],
+ "id": "4ac8e74b",
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[2.54000000e+03, 3.00000000e+00, 1.00000000e+00, 3.92448513e-01,\n",
+ " 8.00000000e+00],\n",
+ " [2.90000000e+03, 3.00000000e+00, 2.00000000e+00, 5.52631579e-01,\n",
+ " 5.00000000e+00],\n",
+ " [ nan, 3.00000000e+00, 1.00000000e+00, 4.50800915e-01,\n",
+ " 8.00000000e+00],\n",
+ " ...,\n",
+ " [1.02000000e+03, 3.00000000e+00, 2.00000000e+00, 5.75514874e-01,\n",
+ " 3.00000000e+00],\n",
+ " [2.40000000e+03, 2.00000000e+00, 2.00000000e+00, 5.36613272e-01,\n",
+ " 1.00000000e+00],\n",
+ " [9.50000000e+02, 3.00000000e+00, 2.00000000e+00, 6.02402746e-01,\n",
+ " 2.00000000e+00]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "627a5a3a"
+ },
+ "source": [
+ "#### Since our dataset has four features i.e Hostel No. , Occupancy, Room Size and Floor ,our hypothesis function becomes\n",
+ "### hθ(x) = θ0 + θ1x1 + θ2x2 +θ3x3 + θ4x4\n",
+ "#### where x1 ,x2,x3 and x4 are the two features (i.e. size of house and number of rooms)"
+ ],
+ "id": "627a5a3a"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "58fdf0fe"
+ },
+ "source": [
+ "### So Your task is to define hypothesis function having 4 features and a corresponding cost function "
+ ],
+ "id": "58fdf0fe"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "34dc5643"
+ },
+ "source": [
+ "def hypotheses_fn(theta,X):\n",
+ " return X.dot(theta)"
+ ],
+ "id": "34dc5643",
+ "execution_count": 12,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "6fae141b"
+ },
+ "source": [
+ "def cost(theta,X,Y):\n",
+ " pred=hypotheses_fn(theta,X)\n",
+ " return (1/(2*len(Y))) * np.sum(np.square(pred-Y))"
+ ],
+ "id": "6fae141b",
+ "execution_count": 14,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "178eb11f"
+ },
+ "source": [
+ "### Gradient Descent \n",
+ "#### So we have our hypothesis function and we have a way of measuring how well it fits into the data. Now we need to estimate the parameters in the hypothesis function. That's where gradient descent comes in.\n",
+ "### Your next task is to define gradient descent function having some specific value of learning rate and number of epochs.\n",
+ "#### Note that learning rate should be neither very high nor very low .Why?\n",
+ "#### Check out exact reason [here](https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-performance-in-deep-learning-d0d4059c1c10)\n",
+ "\n"
+ ],
+ "id": "178eb11f"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "167b5bdc"
+ },
+ "source": [
+ "\n",
+ "def gradient_descent(theta,X,Y,learning_rate,iterations):\n",
+ " len_y=len(Y)\n",
+ " costs=[]\n",
+ " for i in range(iterations):\n",
+ " pred=hypotheses_fn(theta,X)\n",
+ " theta-=(1/len_y)*learning_rate*(X.T.dot((pred-Y)))\n",
+ " costs.append(cost(theta,X,Y))\n",
+ " \n",
+ " plt.plot(costs)\n",
+ " plt.title(\"Costs changing with each epoch\")\n",
+ " plt.xlabel(\"Epoch\")\n",
+ " plt.ylabel(\"Cost\")\n",
+ " plt.show()\n",
+ " \n",
+ " return theta"
+ ],
+ "id": "167b5bdc",
+ "execution_count": 24,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "724e407a"
+ },
+ "source": [
+ "### Now we want to visualize how our cost function varies with number of epochs .So your next task is to plot graph of updated costs vs number of epochs "
+ ],
+ "id": "724e407a"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "e82f6ebf"
+ },
+ "source": [
+ "#### After plotting above graph you will notice that your cost function decreases with epochs.\n",
+ "#### Perfect! This is all what we wanted to seek by doing linear regression. \n",
+ "\n",
+ "#### Now it's time to test our model on some test data. \n",
+ "\n",
+ "#### For this you will define a test function that will take as input Hostel No. , Occupancy, Room Size , Floor and the final theta vector that was returned by our linear regression model and will give us the price of the house. Compute it for any set of features given and final value of theta as given by gradient descent function"
+ ],
+ "id": "e82f6ebf"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "c522bca3",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 295
+ },
+ "outputId": "2d0d53e2-9fab-4e5e-f4d1-6cbfd84647e0"
+ },
+ "source": [
+ "X=data[:,1:]\n",
+ "X=np.c_[np.ones((len(X),1)),X]\n",
+ "Y=data[:,0]\n",
+ "theta=np.zeros(5)\n",
+ "theta_ideal=gradient_descent(theta,X,Y,0.001,200)"
+ ],
+ "id": "c522bca3",
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEWCAYAAABIVsEJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAZV0lEQVR4nO3de5RlZX3m8e9DN6CI4doi0LStQpJpo1FTwZiYNSQiFxUhxniJia3RkBidmHiJEJJIgDUCxsAyYhxGMyFoRIfo2IbJEERxzHgtFC+ohBYxDXJpLhIICqK/+WO/rYfyVHf1W111uuzvZ62zau/9vmfv33tO9XnO3u+p06kqJEnaWjtNugBJ0tJkgEiSuhggkqQuBogkqYsBIknqYoBIkroYIFpykrwwyb9M6Nh3JXnEJI7djv/WJH+6mfaTk7xjMWsaU8PfJjltkjVsziR/f37UGCD6viS/nmS6vUjekOSfkjxpnvu8Nsnh26rGSauq3avqmgke/3er6lSAJIcluW5StUgGiABI8krgbOC/AvsBq4C3AMdOsi5J2y8DRCTZAzgFeFlVvbeq/qOqvlNVH6iq17Q+uyY5O8k32u3sJLu2tn2T/GOSbya5LclHk+yU5HyGIPpAO6v5oyQPSPKOJLe2/p9Ost8sdR2U5L1JNrb+b57R/hdJbk/ytSRHj2x/UZIvJ7kzyTVJfmek7bAk1yV5VZKb25nWi0ba90nygST/3mo7bfRyR5JKcnBb/tsk5yS5qB3rk0keOdL3iCRXJbkjyVuSfCTJS8aM8wFJvpVk37Z+UpL7kvxYWz81ydkjxzwtyYOAfwIOaI/tXUkOaLvcJcnftZquTDK1mef+J5Nc0p63q5I8e6TtaUk+2x6LDUlOnnHfJyX5WHseNyR54UjzXrM9LmNq+LmR/XwuyWEjbZcleX2ST7U63p9k75H2Z7QxfrP1/U8jbV2/P9oKVeVtB78BRwH3Acs30+cU4BPAQ4AVwMeAU1vb64G3Aju32y8CaW3XAoeP7Od3gA8AuwHLgJ8BfmzM8ZYBnwPOAh4EPAB4Umt7IfAd4Ldbv5cC3xg55tOARwIB/jNwN/D41nZYG+sprdantva9WvsF7bYbsAbYAPzLSF0FHNyW/xa4FTgUWA68E7igte0L/DvwzNb2ilbzS2Z5fP8v8Ktt+Z+BrwJHj7T9ysgxTxsZy3Uz9nMy8O02rmXtufnELMd8UBvfi1qNjwNuAdaM7P/RDG80HwPcBBzX2h4G3Ak8rz2O+wCP3dLjMqaGA1vfp7bjPKWtr2jtlwHXAz/V6v0H4B2t7ceB/2j32Rn4I2A9sAvz+P3xthWvHZMuwNvkb8DzgRu30OerwFNH1o8Erm3LpwDv3/TCOuN+13L/APkthvB5zBaO90RgI2NCrb0ArB9Z343hhf2hs+zrfwGvaMuHAd8a3S9wM/Bz7cXkO8BPjLSdxuYD5G0jbU8FvtKWXwB8fKQtDC/WswXIqcCb2gvujQyBc3p74fsWsM/IMbcUIB8cWV8DfGuWYz4H+OiMbf8NeN0s/c8GzmrLJwLvm6XfrI/LmL6vBc6fse1iYG1bvgw4fcZ47m3P1Z8C7xlp24khbA7blr8/3ma/eQlLMLzj2zfJ8s30OQD4+sj619s2gDcwvPP753bJ6ITN7Od8hheIC9qlsDOT7Dym30HA16vqvln2c+Omhaq6uy3uDpDk6CSfaJdlvsnwArbvyH1vnbHfu9t9VzC8gG8YaRtd3mwdI/uB4bH5/n1reKXa3IT3Rxhe+B4PfAG4hOHs6ecYXuxu3UIdm6vpAbM8tw8DntAu/3yzPVbPBx4KkOQJST7cLgHdAfwuP3gcD2J4UzHXGnafpd/DgF+bUcOTgP1H+ow+B19nONvYlxm/k1X1vdb3QObx+6O5M0AE8HHgHuC4zfT5BsM/9k1WtW1U1Z1V9aqqegTwDOCVSZ7c+t3v655rmFv586paA/w88HSGd+szbQBWbSHUfkiGeZl/AP4C2K+q9gT+N8MZwJZsZLi8tXJk20Fbc/wRN4zuJ0lm7HemjwE/AfwK8JGq+hLDY/xUhnAZZ75fpb2hHWvPkdvuVfXS1v73wDrgoKrag+EyZUbuO+u8xlbWcP6MGh5UVaeP9Bl9DlYxnCXewozfyfYYH8RwFtL1+6OtY4CIqroD+DPgnCTHJdktyc7tnfyZrdu7gD9JsqJN9v4Z8A6AJE9PcnD7B3wH8F3ge+1+NwHf/7uJJL+U5NFJljHMEXxnpO+oTzG8CJ+e5EFtovkX5jCcXYBdaWHQJkePmOPj8F3gvcDJ7TH4ScaH21xcBDy6PZ7LgZfR3tnPcuy7gctbv02B8TGGd/2zBchNwD4ZPgTR4x+BH0/ym+353jnJz45MRD8YuK2qvp3kUODXR+77TuDwJM9OsjzDhw8e21HDO4BjkhyZZFl7ng9LMhq2v5FkTZLdGC6XXtieq/cAT0vy5HYW+yqGN0Ifo//3R1vBABEAVfVG4JXAnzC8+G4AXs4wfwDDXMA08HmGSyyfadsADgE+CNzFcDbzlqr6cGt7PUPwfDPJqxleRC9kCI8vM7w4nj+mnu8CxwAHA//GcPnnOXMYx53A7zO8uNzO8KK3bo4PA23MezBc4jifITjv2Yr7b6rjFuDXgDMZLhGuYXj8NrevjzBcnvnUyPqDGSbRxx3jK62+a9rje8C4fpup8U6GcH0uw7v5G4EzGAIY4PeAU5LcyfCG4T0j9/03hrOjVwG3AVcAP701x2/72cDwUfE/5ge/d6/h/q9N5zPMq9zIMCf0++2+VwG/AfwVwxnJMcAxVXVv7++Pts6mT61IGiPJGQyTq2vnuZ+dGF7Enj8SrtqCJJcxfOrqbZOuRT/MMxBpRPu7iMdkcCjwYuB9nfs6MsmebV7mjxnmDz6xDcuVJsoJJun+HsxwWegAhjmGNzJ8RLnHExkmoncBvsTwNxTf2hZFStsDL2FJkrp4CUuS1GWHuoS177771urVqyddhiQtKZdffvktVbVi5vYdKkBWr17N9PT0pMuQpCUlydfHbfcSliSpiwEiSepigEiSuhggkqQuBogkqYsBIknqYoBIkroYIJKkLgaIJKmLASJJ6mKASJK6GCCSpC4GiCSpiwEiSepigEiSuhggkqQuBogkqYsBIknqYoBIkroYIJKkLgaIJKmLASJJ6mKASJK6GCCSpC4GiCSpy0QDJMlRSa5Ksj7JCWPad03y7tb+ySSrZ7SvSnJXklcvVs2SpMHEAiTJMuAc4GhgDfC8JGtmdHsxcHtVHQycBZwxo/0vgX9a6FolST9skmcghwLrq+qaqroXuAA4dkafY4Hz2vKFwJOTBCDJccDXgCsXqV5J0ohJBsiBwIaR9evatrF9quo+4A5gnyS7A68F/nxLB0lyfJLpJNMbN27cJoVLkpbuJPrJwFlVddeWOlbVuVU1VVVTK1asWPjKJGkHsXyCx74eOGhkfWXbNq7PdUmWA3sAtwJPAJ6V5ExgT+B7Sb5dVW9e+LIlSTDZAPk0cEiShzMExXOBX5/RZx2wFvg48CzgQ1VVwC9u6pDkZOAuw0OSFtfEAqSq7kvycuBiYBnwN1V1ZZJTgOmqWge8HTg/yXrgNoaQkSRtBzK8od8xTE1N1fT09KTLkKQlJcnlVTU1c/tSnUSXJE2YASJJ6mKASJK6GCCSpC4GiCSpiwEiSepigEiSuhggkqQuBogkqYsBIknqYoBIkroYIJKkLgaIJKmLASJJ6mKASJK6GCCSpC4GiCSpiwEiSepigEiSuhggkqQuBogkqYsBIknqYoBIkroYIJKkLgaIJKmLASJJ6mKASJK6GCCSpC4GiCSpiwEiSeoy0QBJclSSq5KsT3LCmPZdk7y7tX8yyeq2/SlJLk/yhfbzlxe7dkna0U0sQJIsA84BjgbWAM9LsmZGtxcDt1fVwcBZwBlt+y3AMVX1aGAtcP7iVC1J2mSSZyCHAuur6pqquhe4ADh2Rp9jgfPa8oXAk5Okqj5bVd9o268EHphk10WpWpIETDZADgQ2jKxf17aN7VNV9wF3APvM6POrwGeq6p4FqlOSNMbySRcwH0kexXBZ64jN9DkeOB5g1apVi1SZJP3om+QZyPXAQSPrK9u2sX2SLAf2AG5t6yuB9wEvqKqvznaQqjq3qqaqamrFihXbsHxJ2rFNMkA+DRyS5OFJdgGeC6yb0WcdwyQ5wLOAD1VVJdkTuAg4oar+36JVLEn6vokFSJvTeDlwMfBl4D1VdWWSU5I8o3V7O7BPkvXAK4FNH/V9OXAw8GdJrmi3hyzyECRph5aqmnQNi2Zqaqqmp6cnXYYkLSlJLq+qqZnb/Ut0SVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdTFAJEldDBBJUhcDRJLUxQCRJHUxQCRJXQwQSVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdTFAJEldDBBJUhcDRJLUxQCRJHUxQCRJXQwQSVIXA0SS1GVOAZLk/LlskyTtOOZ6BvKo0ZUky4Cf2fblSJKWis0GSJITk9wJPCbJv7fbncDNwPsXpUJJ0nZpswFSVa+vqgcDb6iqH2u3B1fVPlV14iLVKEnaDs31EtY/JnkQQJLfSPKXSR62gHVJkrZzcw2QvwbuTvLTwKuArwJ/N9+DJzkqyVVJ1ic5YUz7rkne3do/mWT1SNuJbftVSY6cby2SpK0z1wC5r6oKOBZ4c1WdAzx4PgduE/HnAEcDa4DnJVkzo9uLgdur6mDgLOCMdt81wHMZJvePAt7S9idJWiRzDZA7k5wI/CZwUZKdgJ3neexDgfVVdU1V3QtcwBBQo44FzmvLFwJPTpK2/YKquqeqvgasb/uTJC2SuQbIc4B7gN+qqhuBlcAb5nnsA4ENI+vXtW1j+1TVfcAdwD5zvC8ASY5PMp1keuPGjfMsWZK0yZwCpIXGO4E9kjwd+HZVzXsOZDFU1blVNVVVUytWrJh0OZL0I2Ouf4n+bOBTwK8BzwY+meRZ8zz29cBBI+sr27axfZIsB/YAbp3jfSVJC2iul7BOAn62qtZW1QsY5hv+dJ7H/jRwSJKHJ9mFYVJ83Yw+64C1bflZwIfaZP464LntU1oPBw5hCDhJ0iJZPsd+O1XVzSPrtzLPL2KsqvuSvBy4GFgG/E1VXZnkFGC6qtYBbwfOT7IeuI0hZGj93gN8CbgPeFlVfXc+9UiStk6GN/Rb6JS8AXgM8K626TnA56vqtQtY2zY3NTVV09PTky5DkpaUJJdX1dTM7Zs9A0lyMLBfVb0myTOBJ7WmjzNMqkuSdlBbuoR1NnAiQFW9F3gvQJJHt7ZjFrQ6SdJ2a0vzGPtV1RdmbmzbVi9IRZKkJWFLAbLnZtoeuC0LkSQtLVsKkOkkvz1zY5KXAJcvTEmSpKVgS3MgfwC8L8nz+UFgTAG7AL+ykIVJkrZvmw2QqroJ+PkkvwT8VNt8UVV9aMErkyRt1+b0h4RV9WHgwwtciyRpCZnXX5NLknZcBogkqYsBIknqYoBIkroYIJKkLgaIJKmLASJJ6mKASJK6GCCSpC4GiCSpiwEiSepigEiSuhggkqQuBogkqYsBIknqYoBIkroYIJKkLgaIJKmLASJJ6mKASJK6GCCSpC4GiCSpy0QCJMneSS5JcnX7udcs/da2PlcnWdu27ZbkoiRfSXJlktMXt3pJEkzuDOQE4NKqOgS4tK3fT5K9gdcBTwAOBV43EjR/UVU/CTwO+IUkRy9O2ZKkTSYVIMcC57Xl84DjxvQ5Erikqm6rqtuBS4CjquruqvowQFXdC3wGWLkINUuSRkwqQParqhva8o3AfmP6HAhsGFm/rm37viR7AscwnMVIkhbR8oXacZIPAg8d03TS6EpVVZLq2P9y4F3Am6rqms30Ox44HmDVqlVbexhJ0iwWLECq6vDZ2pLclGT/qrohyf7AzWO6XQ8cNrK+ErhsZP1c4OqqOnsLdZzb+jI1NbXVQSVJGm9Sl7DWAWvb8lrg/WP6XAwckWSvNnl+RNtGktOAPYA/WIRaJUljTCpATgeekuRq4PC2TpKpJG8DqKrbgFOBT7fbKVV1W5KVDJfB1gCfSXJFkpdMYhCStCNL1Y5zVWdqaqqmp6cnXYYkLSlJLq+qqZnb/Ut0SVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdTFAJEldDBBJUhcDRJLUxQCRJHUxQCRJXQwQSVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdTFAJEldDBBJUhcDRJLUxQCRJHUxQCRJXQwQSVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdZlIgCTZO8klSa5uP/eapd/a1ufqJGvHtK9L8sWFr1iSNNOkzkBOAC6tqkOAS9v6/STZG3gd8ATgUOB1o0GT5JnAXYtTriRppkkFyLHAeW35POC4MX2OBC6pqtuq6nbgEuAogCS7A68ETluEWiVJY0wqQParqhva8o3AfmP6HAhsGFm/rm0DOBV4I3D3lg6U5Pgk00mmN27cOI+SJUmjli/UjpN8EHjomKaTRleqqpLUVuz3scAjq+oPk6zeUv+qOhc4F2BqamrOx5Ekbd6CBUhVHT5bW5KbkuxfVTck2R+4eUy364HDRtZXApcBTwSmklzLUP9DklxWVYchSVo0k7qEtQ7Y9KmqtcD7x/S5GDgiyV5t8vwI4OKq+uuqOqCqVgNPAv7V8JCkxTepADkdeEqSq4HD2zpJppK8DaCqbmOY6/h0u53StkmStgOp2nGmBaampmp6enrSZUjSkpLk8qqamrndv0SXJHUxQCRJXQwQSVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdTFAJEldDBBJUhcDRJLUxQCRJHUxQCRJXQwQSVIXA0SS1MUAkSR1MUAkSV0MEElSFwNEktTFAJEkdTFAJEldDBBJUhcDRJLUJVU16RoWTZKNwNcnXcdW2he4ZdJFLDLHvGNwzEvHw6pqxcyNO1SALEVJpqtqatJ1LCbHvGNwzEufl7AkSV0MEElSFwNk+3fupAuYAMe8Y3DMS5xzIJKkLp6BSJK6GCCSpC4GyHYgyd5JLklydfu51yz91rY+VydZO6Z9XZIvLnzF8zefMSfZLclFSb6S5Mokpy9u9VsnyVFJrkqyPskJY9p3TfLu1v7JJKtH2k5s269KcuRi1j0fvWNO8pQklyf5Qvv5y4tde4/5PMetfVWSu5K8erFq3iaqytuEb8CZwAlt+QTgjDF99gauaT/3ast7jbQ/E/h74IuTHs9CjxnYDfil1mcX4KPA0ZMe0yzjXAZ8FXhEq/VzwJoZfX4PeGtbfi7w7ra8pvXfFXh428+ySY9pgcf8OOCAtvxTwPWTHs9Cjnek/ULgfwKvnvR4tubmGcj24VjgvLZ8HnDcmD5HApdU1W1VdTtwCXAUQJLdgVcCpy1CrdtK95ir6u6q+jBAVd0LfAZYuQg19zgUWF9V17RaL2AY+6jRx+JC4MlJ0rZfUFX3VNXXgPVtf9u77jFX1Wer6htt+5XAA5PsuihV95vPc0yS44CvMYx3STFAtg/7VdUNbflGYL8xfQ4ENoysX9e2AZwKvBG4e8Eq3PbmO2YAkuwJHANcuhBFbgNbHMNon6q6D7gD2GeO990ezWfMo34V+ExV3bNAdW4r3eNtb/5eC/z5ItS5zS2fdAE7iiQfBB46pumk0ZWqqiRz/mx1kscCj6yqP5x5XXXSFmrMI/tfDrwLeFNVXdNXpbZHSR4FnAEcMelaFtjJwFlVdVc7IVlSDJBFUlWHz9aW5KYk+1fVDUn2B24e0+164LCR9ZXAZcATgakk1zI8nw9JcllVHcaELeCYNzkXuLqqzt4G5S6U64GDRtZXtm3j+lzXQnEP4NY53nd7NJ8xk2Ql8D7gBVX11YUvd97mM94nAM9KciawJ/C9JN+uqjcvfNnbwKQnYbwVwBu4/4TymWP67M1wnXSvdvsasPeMPqtZOpPo8xozw3zPPwA7TXosWxjncobJ/4fzgwnWR83o8zLuP8H6nrb8KO4/iX4NS2MSfT5j3rP1f+akx7EY453R52SW2CT6xAvwVjBc+70UuBr44MiL5BTwtpF+v8UwkboeeNGY/SylAOkeM8M7vAK+DFzRbi+Z9Jg2M9anAv/K8Emdk9q2U4BntOUHMHwCZz3wKeARI/c9qd3vKrbTT5ptyzEDfwL8x8jzegXwkEmPZyGf45F9LLkA8atMJEld/BSWJKmLASJJ6mKASJK6GCCSpC4GiCSpiwEibUNJvpvkipHbD30z6zz2vXqpfNuydgz+Jbq0bX2rqh476SKkxeAZiLQIklyb5Mz2/1x8KsnBbfvqJB9K8vkklyZZ1bbvl+R9ST7Xbj/fdrUsyX9v/w/KPyd54MQGpR2eASJtWw+ccQnrOSNtd1TVo4E3A5u+v+uvgPOq6jHAO4E3te1vAj5SVT8NPJ4ffNX3IcA5VfUo4JsM31grTYR/iS5tQ0nuqqrdx2y/Fvjlqromyc7AjVW1T5JbgP2r6jtt+w1VtW+SjcDKGvkq8/Zty5dU1SFt/bXAzlW1lP4fGP0I8QxEWjw1y/LWGP2/Mb6L85iaIANEWjzPGfn58bb8MYZvZwV4PsN/zwvDF02+FCDJsiR7LFaR0lz57kXath6Y5IqR9f9TVZs+yrtXks8znEU8r237L8D/SPIaYCPworb9FcC5SV7McKbxUuAGpO2IcyDSImhzIFNVdcuka5G2FS9hSZK6eAYiSeriGYgkqYsBIknqYoBIkroYIJKkLgaIJKnL/wdh80zkG1AsGwAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "947f35b1"
+ },
+ "source": [
+ "#### Now since we have defined all required functions , we can call functions one by one and get our final results .\n",
+ "#### Your final task is to use all functions defined above and predict the price of room for some input combinations to check how well your model works."
+ ],
+ "id": "947f35b1"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "06e54ef5"
+ },
+ "source": [
+ "#### You can try playing with different values of alpha and epochs and see which combination gives most accurate results but do lookout for overfitting \n"
+ ],
+ "id": "06e54ef5"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "3fc631fd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 422
+ },
+ "outputId": "7fe60643-2144-4929-ad41-d79bacb907f4"
+ },
+ "source": [
+ "def test(X,Y):\n",
+ " display(pd.DataFrame({\"Predicted values\":X.dot(theta_ideal),\"Actual values\":Y}))\n",
+ "\n",
+ "test(X,Y)"
+ ],
+ "id": "3fc631fd",
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Predicted values
\n",
+ "
Actual values
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
2540.0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
NaN
\n",
+ "
2900.0
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
NaN
\n",
+ "
2362.0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
6533
\n",
+ "
NaN
\n",
+ "
1624.0
\n",
+ "
\n",
+ "
\n",
+ "
6534
\n",
+ "
NaN
\n",
+ "
1470.0
\n",
+ "
\n",
+ "
\n",
+ "
6535
\n",
+ "
NaN
\n",
+ "
1020.0
\n",
+ "
\n",
+ "
\n",
+ "
6536
\n",
+ "
NaN
\n",
+ "
2400.0
\n",
+ "
\n",
+ "
\n",
+ "
6537
\n",
+ "
NaN
\n",
+ "
950.0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
6538 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Predicted values Actual values\n",
+ "0 NaN 2540.0\n",
+ "1 NaN 2900.0\n",
+ "2 NaN NaN\n",
+ "3 NaN 2362.0\n",
+ "4 NaN NaN\n",
+ "... ... ...\n",
+ "6533 NaN 1624.0\n",
+ "6534 NaN 1470.0\n",
+ "6535 NaN 1020.0\n",
+ "6536 NaN 2400.0\n",
+ "6537 NaN 950.0\n",
+ "\n",
+ "[6538 rows x 2 columns]"
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From fc8aa85838412fbdcfba72737b9b3541bfa145c4 Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Fri, 29 Oct 2021 00:25:00 +0530
Subject: [PATCH 10/11] Rename Linear_Regression_Task2_203174002 (1).ipynb to
Linear_Regression_Task2_203174002.ipynb
Created one pull request for each question. Please merge the PR
---
...3174002 (1).ipynb => Linear_Regression_Task2_203174002.ipynb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename Linear_Regression_Task2_203174002 (1).ipynb => Linear_Regression_Task2_203174002.ipynb (99%)
diff --git a/Linear_Regression_Task2_203174002 (1).ipynb b/Linear_Regression_Task2_203174002.ipynb
similarity index 99%
rename from Linear_Regression_Task2_203174002 (1).ipynb
rename to Linear_Regression_Task2_203174002.ipynb
index ed904a5..c4373eb 100644
--- a/Linear_Regression_Task2_203174002 (1).ipynb
+++ b/Linear_Regression_Task2_203174002.ipynb
@@ -1076,4 +1076,4 @@
]
}
]
-}
\ No newline at end of file
+}
From 3d9bb16f2d7d870c658b08b57ad7d91e3ac45df2 Mon Sep 17 00:00:00 2001
From: Mani9550 <93199718+Mani9550@users.noreply.github.com>
Date: Mon, 1 Nov 2021 09:50:46 +0530
Subject: [PATCH 11/11] Add files via upload
Added separate PR for each task
---
Linear_Regression_Task2_203174002 (1).ipynb | 1079 +++++++++++++++++++
1 file changed, 1079 insertions(+)
create mode 100644 Linear_Regression_Task2_203174002 (1).ipynb
diff --git a/Linear_Regression_Task2_203174002 (1).ipynb b/Linear_Regression_Task2_203174002 (1).ipynb
new file mode 100644
index 0000000..ed904a5
--- /dev/null
+++ b/Linear_Regression_Task2_203174002 (1).ipynb
@@ -0,0 +1,1079 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 5,
+ "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.8.8"
+ },
+ "colab": {
+ "name": "Linear_Regression_Task2_203174002.ipynb",
+ "provenance": [],
+ "collapsed_sections": []
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "89223f98"
+ },
+ "source": [
+ "\n",
+ "\n",
+ "```\n",
+ "Import libraries\n",
+ "```\n",
+ "\n",
+ "### Importing useful libraries \n"
+ ],
+ "id": "89223f98"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "26f77ebe"
+ },
+ "source": [
+ "# This Python 3 environment comes with many helpful analytics libraries installed\n",
+ "# For example, here's several helpful packages to load in\n",
+ "import numpy as np # linear algebra\n",
+ "import matplotlib.pyplot as plt # data visualization\n",
+ "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
+ "import seaborn as sns"
+ ],
+ "id": "26f77ebe",
+ "execution_count": 30,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "31c8220d"
+ },
+ "source": [
+ "### Loading the dataset \n",
+ "#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Room_price_data.csv)"
+ ],
+ "id": "31c8220d"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "1c5d873a"
+ },
+ "source": [
+ "df = pd.read_csv(\"Hostel_Linear-Dataset.csv\") #import text file \n"
+ ],
+ "id": "1c5d873a",
+ "execution_count": 10,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "1ca9aba0",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 205
+ },
+ "outputId": "3b129ba4-1b3a-4288-9b62-fd3344787414"
+ },
+ "source": [
+ "df.head()"
+ ],
+ "id": "1ca9aba0",
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Price
\n",
+ "
Hostel No.
\n",
+ "
Occupancy
\n",
+ "
Room Size
\n",
+ "
Floor
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
2540.0
\n",
+ "
3
\n",
+ "
1
\n",
+ "
686
\n",
+ "
8
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
2900.0
\n",
+ "
3
\n",
+ "
2
\n",
+ "
966
\n",
+ "
5
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
NaN
\n",
+ "
3
\n",
+ "
1
\n",
+ "
788
\n",
+ "
8
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
2362.0
\n",
+ "
3
\n",
+ "
2
\n",
+ "
924
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
NaN
\n",
+ "
3
\n",
+ "
2
\n",
+ "
1098
\n",
+ "
5
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Price Hostel No. Occupancy Room Size Floor\n",
+ "0 2540.0 3 1 686 8\n",
+ "1 2900.0 3 2 966 5\n",
+ "2 NaN 3 1 788 8\n",
+ "3 2362.0 3 2 924 2\n",
+ "4 NaN 3 2 1098 5"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "af08f245"
+ },
+ "source": [
+ "# Visualizing and Cleaning the data\n",
+ "\n",
+ "We will now be removing the nan values and identical values from the dataset\n",
+ "\n",
+ "For seeing if there are nan values in the dataset we will use the isna() function and then to remove them we will use the dropna() function. We will need to set additional parameters like rows and columns in the dropna function depending on the number of nan values present for each column\n",
+ "\n",
+ "Using the sum() function with isna() function we can get to know the number of missing values in each column"
+ ],
+ "id": "af08f245"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "2fd4babb",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "dd94b5ef-188f-4c3a-aec4-fe91cdc6a86d"
+ },
+ "source": [
+ "df.isna().sum()"
+ ],
+ "id": "2fd4babb",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Price 1531\n",
+ "Hostel No. 0\n",
+ "Occupancy 0\n",
+ "Room Size 0\n",
+ "Floor 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "83ef03c3"
+ },
+ "source": [
+ "After this we will proceed to remove the nan values \n",
+ "\n",
+ "Since there are not many nan values in the column 'Price' as compared to the number of rows we will remove the rows which have nan values. \n",
+ "\n",
+ "Reseting the index after removing the nan values and dropping the old index will also be important"
+ ],
+ "id": "83ef03c3"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "b65e4503"
+ },
+ "source": [
+ "df = df.dropna(subset = ['Price'],how= 'any')\n",
+ "df = df.reset_index(drop = True)\n",
+ "## df.isna().sum()"
+ ],
+ "id": "b65e4503",
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "40784889"
+ },
+ "source": [
+ "Now we can use the drop_duplicate function to remove the duplicate values\n",
+ "\n",
+ "This function has a parameter calle 'keep' where we specifiy to drop and which value to keep\n",
+ "\n",
+ "For this excercise we will keep the first values and drop the rest of the duplicates"
+ ],
+ "id": "40784889"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "75fa3dc8"
+ },
+ "source": [
+ "df = df.drop_duplicates(keep = 'first')\n",
+ "df = df.reset_index(drop = True)\n",
+ "## df.duplicated().sum()"
+ ],
+ "id": "75fa3dc8",
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "a007a33f"
+ },
+ "source": [
+ "For visualizing the data we will first start with looking at the distribution of different columns to see if there are enough number for each category in every column and dropping them if the data is biased for one category more than the other"
+ ],
+ "id": "a007a33f"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "b325df62",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "outputId": "cf878a76-66d3-4e68-f009-819d724a4eae"
+ },
+ "source": [
+ "columns = df.columns\n",
+ "for column in columns:\n",
+ " if(column== 'Price' or column=='Room Size'): \n",
+ " continue\n",
+ " fig = plt.figure(figsize=(5,5))\n",
+ " ax = fig.gca()\n",
+ " counts = df[column].value_counts()\n",
+ " counts.plot.bar(ax = ax, color='blue')\n",
+ " ax.set_title('No of rooms '+ column)\n",
+ " ax.set_xlabel(column)\n",
+ " ax.set_ylabel(\"No of rooms\")\n",
+ " plt.show()"
+ ],
+ "id": "b325df62",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "a74d69fd"
+ },
+ "source": [
+ "Now that we have analysed our data we can proceed to normalixing our data and regression"
+ ],
+ "id": "a74d69fd"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "77d8c6ba"
+ },
+ "source": [
+ "### Importing useful libraries \n"
+ ],
+ "id": "77d8c6ba"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "fffac537"
+ },
+ "source": [
+ "# This Python 3 environment comes with many helpful analytics libraries installed\n",
+ "# For example, here's several helpful packages to load in\n",
+ "import numpy as np # linear algebra\n",
+ "import matplotlib.pyplot as plt # data visualization\n",
+ "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)"
+ ],
+ "id": "fffac537",
+ "execution_count": 17,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "04cd7e4e"
+ },
+ "source": [
+ "### Loading the dataset \n",
+ "#### For implementation we will be using house prediction dataset . The dataset can be found [here](https://github.com/vrinda01go/Hellofoss/blob/main/Insti_data.csv)"
+ ],
+ "id": "04cd7e4e"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "4ac8e74b",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "f8967616-b263-4127-bcc1-e4ce5d4799f4"
+ },
+ "source": [
+ "df['Room Size']=df['Room Size']/max(df['Room Size']) \n",
+ "\n",
+ "data = np.array(df, dtype=float)\n",
+ "data"
+ ],
+ "id": "4ac8e74b",
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[2.54000000e+03, 3.00000000e+00, 1.00000000e+00, 3.92448513e-01,\n",
+ " 8.00000000e+00],\n",
+ " [2.90000000e+03, 3.00000000e+00, 2.00000000e+00, 5.52631579e-01,\n",
+ " 5.00000000e+00],\n",
+ " [ nan, 3.00000000e+00, 1.00000000e+00, 4.50800915e-01,\n",
+ " 8.00000000e+00],\n",
+ " ...,\n",
+ " [1.02000000e+03, 3.00000000e+00, 2.00000000e+00, 5.75514874e-01,\n",
+ " 3.00000000e+00],\n",
+ " [2.40000000e+03, 2.00000000e+00, 2.00000000e+00, 5.36613272e-01,\n",
+ " 1.00000000e+00],\n",
+ " [9.50000000e+02, 3.00000000e+00, 2.00000000e+00, 6.02402746e-01,\n",
+ " 2.00000000e+00]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "627a5a3a"
+ },
+ "source": [
+ "#### Since our dataset has four features i.e Hostel No. , Occupancy, Room Size and Floor ,our hypothesis function becomes\n",
+ "### hθ(x) = θ0 + θ1x1 + θ2x2 +θ3x3 + θ4x4\n",
+ "#### where x1 ,x2,x3 and x4 are the two features (i.e. size of house and number of rooms)"
+ ],
+ "id": "627a5a3a"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "58fdf0fe"
+ },
+ "source": [
+ "### So Your task is to define hypothesis function having 4 features and a corresponding cost function "
+ ],
+ "id": "58fdf0fe"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "34dc5643"
+ },
+ "source": [
+ "def hypotheses_fn(theta,X):\n",
+ " return X.dot(theta)"
+ ],
+ "id": "34dc5643",
+ "execution_count": 12,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "6fae141b"
+ },
+ "source": [
+ "def cost(theta,X,Y):\n",
+ " pred=hypotheses_fn(theta,X)\n",
+ " return (1/(2*len(Y))) * np.sum(np.square(pred-Y))"
+ ],
+ "id": "6fae141b",
+ "execution_count": 14,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "178eb11f"
+ },
+ "source": [
+ "### Gradient Descent \n",
+ "#### So we have our hypothesis function and we have a way of measuring how well it fits into the data. Now we need to estimate the parameters in the hypothesis function. That's where gradient descent comes in.\n",
+ "### Your next task is to define gradient descent function having some specific value of learning rate and number of epochs.\n",
+ "#### Note that learning rate should be neither very high nor very low .Why?\n",
+ "#### Check out exact reason [here](https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-performance-in-deep-learning-d0d4059c1c10)\n",
+ "\n"
+ ],
+ "id": "178eb11f"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "167b5bdc"
+ },
+ "source": [
+ "\n",
+ "def gradient_descent(theta,X,Y,learning_rate,iterations):\n",
+ " len_y=len(Y)\n",
+ " costs=[]\n",
+ " for i in range(iterations):\n",
+ " pred=hypotheses_fn(theta,X)\n",
+ " theta-=(1/len_y)*learning_rate*(X.T.dot((pred-Y)))\n",
+ " costs.append(cost(theta,X,Y))\n",
+ " \n",
+ " plt.plot(costs)\n",
+ " plt.title(\"Costs changing with each epoch\")\n",
+ " plt.xlabel(\"Epoch\")\n",
+ " plt.ylabel(\"Cost\")\n",
+ " plt.show()\n",
+ " \n",
+ " return theta"
+ ],
+ "id": "167b5bdc",
+ "execution_count": 24,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "724e407a"
+ },
+ "source": [
+ "### Now we want to visualize how our cost function varies with number of epochs .So your next task is to plot graph of updated costs vs number of epochs "
+ ],
+ "id": "724e407a"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "e82f6ebf"
+ },
+ "source": [
+ "#### After plotting above graph you will notice that your cost function decreases with epochs.\n",
+ "#### Perfect! This is all what we wanted to seek by doing linear regression. \n",
+ "\n",
+ "#### Now it's time to test our model on some test data. \n",
+ "\n",
+ "#### For this you will define a test function that will take as input Hostel No. , Occupancy, Room Size , Floor and the final theta vector that was returned by our linear regression model and will give us the price of the house. Compute it for any set of features given and final value of theta as given by gradient descent function"
+ ],
+ "id": "e82f6ebf"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "c522bca3",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 295
+ },
+ "outputId": "2d0d53e2-9fab-4e5e-f4d1-6cbfd84647e0"
+ },
+ "source": [
+ "X=data[:,1:]\n",
+ "X=np.c_[np.ones((len(X),1)),X]\n",
+ "Y=data[:,0]\n",
+ "theta=np.zeros(5)\n",
+ "theta_ideal=gradient_descent(theta,X,Y,0.001,200)"
+ ],
+ "id": "c522bca3",
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "947f35b1"
+ },
+ "source": [
+ "#### Now since we have defined all required functions , we can call functions one by one and get our final results .\n",
+ "#### Your final task is to use all functions defined above and predict the price of room for some input combinations to check how well your model works."
+ ],
+ "id": "947f35b1"
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "06e54ef5"
+ },
+ "source": [
+ "#### You can try playing with different values of alpha and epochs and see which combination gives most accurate results but do lookout for overfitting \n"
+ ],
+ "id": "06e54ef5"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "3fc631fd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 422
+ },
+ "outputId": "7fe60643-2144-4929-ad41-d79bacb907f4"
+ },
+ "source": [
+ "def test(X,Y):\n",
+ " display(pd.DataFrame({\"Predicted values\":X.dot(theta_ideal),\"Actual values\":Y}))\n",
+ "\n",
+ "test(X,Y)"
+ ],
+ "id": "3fc631fd",
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Predicted values
\n",
+ "
Actual values
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
2540.0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
NaN
\n",
+ "
2900.0
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
NaN
\n",
+ "
2362.0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
6533
\n",
+ "
NaN
\n",
+ "
1624.0
\n",
+ "
\n",
+ "
\n",
+ "
6534
\n",
+ "
NaN
\n",
+ "
1470.0
\n",
+ "
\n",
+ "
\n",
+ "
6535
\n",
+ "
NaN
\n",
+ "
1020.0
\n",
+ "
\n",
+ "
\n",
+ "
6536
\n",
+ "
NaN
\n",
+ "
2400.0
\n",
+ "
\n",
+ "
\n",
+ "
6537
\n",
+ "
NaN
\n",
+ "
950.0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
6538 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Predicted values Actual values\n",
+ "0 NaN 2540.0\n",
+ "1 NaN 2900.0\n",
+ "2 NaN NaN\n",
+ "3 NaN 2362.0\n",
+ "4 NaN NaN\n",
+ "... ... ...\n",
+ "6533 NaN 1624.0\n",
+ "6534 NaN 1470.0\n",
+ "6535 NaN 1020.0\n",
+ "6536 NaN 2400.0\n",
+ "6537 NaN 950.0\n",
+ "\n",
+ "[6538 rows x 2 columns]"
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file