Files
004_comission/raymondyaaa/quotation1/lecture_notes/lab10/Lab10_solutions.ipynb
louiscklaw 63361c7658 update,
2025-01-31 21:17:06 +08:00

764 lines
191 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "xWLouqcZ4i8i"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DepNBAuA4i8l"
},
"source": [
"# 1. Linearly separable case"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "WIohIKsw4i8n"
},
"outputs": [],
"source": [
"nbpts1 = 50 # Number of points in first cluster (vary to explore effect of number of points)\n",
"mu1 = [-2,4] # the mean of the first cluster (this is a vector as we are in 2D) -- move it around\n",
"sigma1 = [[1.5,0],[0,1.9]] # the covariance matrix of the first cluster -- this one is not correlated\n",
"data1 = np.random.multivariate_normal(mu1,sigma1,nbpts1) #\n",
"\n",
"nbpts2 = 50 # Number of points in second cluster (vary to explore effect of number of points)\n",
"mu2 = [1,-3] # the mean of the second cluster (this is a vector as we are in 2D) -- move it around\n",
"sigma2 = [[1.2,0.2],[0.2,2.3]] # the covariance matrix of the second cluster -- this one is correlated\n",
"data2 = np.random.multivariate_normal(mu2,sigma2,nbpts2) #\n",
"\n",
"data = np.concatenate((data1,data2),axis=0) # Concatenate the data by row"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "-rgFEyss4i8o"
},
"outputs": [],
"source": [
"# Normalise - let's deal with pre-processing straight up here. In general you do it after you've received the data!\n",
"data= (data-np.mean(data,0))/np.std(data,0);\n",
"\n",
"# Assign class labels.\n",
"classes = np.concatenate([np.zeros(nbpts1,dtype=int),np.ones(nbpts2,dtype=int)]) #integers"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 430
},
"id": "qAAuvPqL4i8p",
"outputId": "fdc37e32-e5ea-40a7-fc9a-d16bb20b253d"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGdCAYAAADaPpOnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAys0lEQVR4nO3dfXBUVZrH8V93DE0YTRAJeRkDJuDCrjqJwMAGtgZYsga0XBgtVx12BEfRuEoJiA6xHFxmx83q4sSVoSrMuoKwOjpWKdaqiwNBtNCIigSUwZS8jLxI4ihDGjAEJrn7R2/aBDpJd6fv+/dT1dXm5l76nL5p79PPec65AcMwDAEAALhE0O4GAAAAJILgBQAAuArBCwAAcBWCFwAA4CoELwAAwFUIXgAAgKsQvAAAAFcheAEAAK5ynt0NSLX29nZ98cUXuuCCCxQIBOxuDgAAiINhGDp+/Ljy8/MVDPacW/Fc8PLFF1+ooKDA7mYAAIAkHDx4UBdffHGP+3gueLngggskRTqfmZlpc2sAAEA8wuGwCgoKotfxnngueOkYKsrMzCR4AQDAZeIp+aBgFwAAuArBCwAAcBWCFwAA4CoELwAAwFUIXgAAgKsQvAAAAFcheAEAAK5C8AIAAFyF4AUAALgKwQsAAHAVz90eAABiammRamqkffukoiKpokLKyLC7VQCSQPACwPtaWqSJE6UdO6S0NKmtTVq7VnrnHQIYwIUYNgL8oqVFqq6W5s2LPLe02N0i69TURAKX9nbpzJnI844dke0AXMfU4OXtt9/Wtddeq/z8fAUCAa1bt67H/Tdv3qxAIHDOo7Gx0cxmAt7XkXlYtEhauTLyPHGifwKYffsiGZfO0tIi2wG4jqnBy8mTJ1VcXKwVK1YkdFxDQ4OOHDkSfQwZMsSkFgI+4ffMQ1FRZKios7a2yHYArmNqzcv06dM1ffr0hI8bMmSIBg4cmPoGAX7VkXlob/92m58yDxUVkRqXzjUvJSWR7QBcx5EFuyUlJWptbdXll1+uf/7nf9bEiRO73be1tVWtra3Rn8PhsBVNBNzF75mHjIxIcS6zjQBPcFTwkpeXp5qaGo0dO1atra166qmnNHnyZG3dulWjR4+OeUxVVZWWLl1qcUsBlyHzEAlUFiywuxUAUiBgGIZhyQsFAnr55Zc1c+bMhI6bNGmShg4dqrVr18b8fazMS0FBgZqbm5WZmdmXJgPewjonABwsHA4rKysrruu3ozIvsYwbN05btmzp9vehUEihUMjCFgEu5dTMA0EVgAQ5Pnipr69XXl6e3c0AYAYWjwOQBFODlxMnTmjPnj3Rn/fv36/6+noNGjRIQ4cOVWVlpQ4fPqw1a9ZIkp544gkVFhbqsssu06lTp/TUU09p06ZN+t3vfmdmMwHYpfMU7o6ZUB1TuJ2YJQLgCKYGLx9++KGmTJkS/XnhwoWSpNmzZ2v16tU6cuSIDhw4EP396dOndd999+nw4cMaMGCAvve972njxo1d/g0AHhLvFG6GlgB0YlnBrlUSKfgBYLPq6shqv52Dl2BQWrbs28xLrKGl4mKGlgCPSeT6zb2NANinoiISiASDUnp65PnsKdx+Xx0YwDkcX7ALwMPiWTzO76sDAzgHwQsAe/U2hdvvqwMDOAfDRgCcLZ6hJQC+QuYFsAKzZZLHfYkAnIXgBTAbC7H1nVNXBwZgC4aNALMxWwYAUorgBTBbx2yZzpgtAwBJI3gBzMZsGQBIKYIXwGzMlgGAlKJgFzAbs2UAIKUIXmAvv0whZrYMAKQMwQvswxRiAEASqHmBfZhCDABIApkX2Icb7tnHL8N1ADyJ4AX28fMUYjuDB4brALgcw0awj1+nEHcED4sWSStXRp4nToxstwLDdQBcjswL7OPXKcSdg4eOIbOO4MGKGUkM15mDoTjAMgQvsJcfpxDbHTz4ebjOLAzFAZZi2Aiwmt3Bg1nDdS0tUnW1NG9e5NmqYTAnYCgOsBSZF8BqFRWRb+Wdv6VbWetjxnCd3zMPdmfTAJ8heEkFxrqRCCfU+qR6uM7uOh672Z1NA3yG4KWv/P6NE8nxWq2P3zMP3WXTZs+ODKHxxQZIKYKXvvL7N05AIvMQK5s2e7ZUVsYXG8AEBC995fdvnIBkfx2PE5ydTauu5osNYBKCl77y+zdOQHJGHY/T8MUGMA3BS1/xjdO9KLROrWTreLx6HvhiA5gmYBiGYXcjUikcDisrK0vNzc3KzMy05kW9+j9fL4tVaF1cTD2C1bx8HmL1raRE2rLF/X0DTJDI9ZvMSyp4beaIH1Bo7QxePg8MpQGmIXiBP6WyHoHMW/K8XhfCFxvAFAQv8KdU1SOwzk/fUBcCIAnc28jv/Ho/mlTd38ep97Rxy3k16z5LADyNzIuf+TlrkKp6BCcOe7jpvFIXAiAJBC9+5uViyXikoh7BicMebjuv1IUASBDDRn7WkTXozO6sgRVSOaTixGEPv55XAL5B5sVuds5UcWLWwGypHlJx4rCHH88rAF9hkTo72b1Alx8X0aqulhYt6lqjEgxKy5Z5Z+jCj+cVgOuxSJ1b2F2b4MSsgdmcWGCban48rwB8heDFTk64kPqtWLKgIDKlubMzZyLbvcRv5xWArxC82InaBOt1N0ral9FTVtgFAEuZOtvo7bff1rXXXqv8/HwFAgGtW7eu12M2b96s0aNHKxQKacSIEVq9erWZTbSXE2eqeN2hQ9J5Z8Xs550X2Z6MjvqSRYuklSsjzxMnOndROADwAFODl5MnT6q4uFgrVqyIa//9+/frmmuu0ZQpU1RfX6/58+fr9ttv1xtvvGFmM+3TUZuwbJl0552RZ4oqzVVU1HWYTor8nGy2y6kr7FrFLSv5AvAUU4eNpk+frunTp8e9f01NjQoLC/X4449Lkv7yL/9SW7ZsUXV1tcrLy81qpr2oTbBWRUVkavTZM3GSzXY5oW7JLm5ayReApzhqkbq6ujqVlZV12VZeXq66ujqbWgTPSXW2y891S37POgGwjaMKdhsbG5WTk9NlW05OjsLhsFpaWpQR4wLT2tqq1tbW6M/hcNj0dsLlUpntSnUmx038nHUCYCtHBS/JqKqq0tKlS+1uBvzK6jVVnDSzyc9ZJwC2clTwkpubq6ampi7bmpqalJmZGTPrIkmVlZVauHBh9OdwOKwCr63Z4RdOujAnIpWZnJ7eA6fVmPg56wTAVo4KXkpLS/X666932bZhwwaVlpZ2e0woFFIoFDK7aTCb0y7MdujtPbB7ReazOW0lX7cGvwASZmrwcuLECe3Zsyf68/79+1VfX69BgwZp6NChqqys1OHDh7VmzRpJUkVFhX71q1/pgQce0E9+8hNt2rRJv/3tb/Xaa6+Z2Uw4gdMuzHbo7T1wYo2JU2bLEfwCvmJq8PLhhx9qypQp0Z87hndmz56t1atX68iRIzpw4ED094WFhXrttde0YMEC/cd//IcuvvhiPfXUU96dJu1Xsb4hO/HCnAqJZAN6ew+oMekewS/gK6YGL5MnT1ZPN62OtXru5MmTtX37dhNbBVt19w35xhu9d2FONBvQW3BCjUn3vBr8AojJUeu8wAe6WxskEPDerRISXQelt9tFsCJz98hKAb7iqIJd+EB335APHnRW8WcqJJoNiKcA1ik1Jk5DVgrwFYIXWKunb8heuzAnkw3w2ntgFafNfAJgqoDRU1GKC4XDYWVlZam5uVmZmZl2Nwdni1UHUlLizeEPP/UVAPookes3mRdYy0/fkP3UVwCwEJkXIBEshAYApiDzApiBhdAAwBGYKg3EK9GpzwAAU5B5iRfDBdax673u7XVZCA0AHIHgJR4MF1jHrvc6ntdlITQAcASGjeLh5OGClhapulqaNy/y3NJid4v6xq73Op7X7W0FXACAJci8xMOpwwVezAjZ9V7H87pMfQYARyB4iYdThwu8eCfdnt5rM2th4j3HrIALALZj2CgeTh0u6MgWdOaEjFBfdPdez54dyTItWiStXBl5njgxdcNkTj3HXue1YU8AliDzEg+nDhc4NSPUF92912ZnmZx6jr3Mi8OeyWI2I5AQgpd4OXG4wKt30o31XltRC+PEc+xlXhz2TAZBHJAwghc381O2wItZJr9zaiG81QjigIQRvLidX7IFXs0y+RkBaQRBHJAwghe4g5+yTH7RU0DqpxoQgjggYdxVGv7itYui2/sTq/3SuTUgxcXerQGJVfNSUiJt2eLN/gLdSOT6TfAC/4h1kXDzRdFr/elQXR2ZCt95GCUYlJYt8+4QqduDUCAFErl+M2wE//BaYaTX+tPBjzUgfqldA1KE4AXulei3Va9dFL3Wnw7UgADoBcEL3CmZtTG8dlF0c396CjyZWQagF9S8wJ2SqYvwWmGkW/sTT60ONSCA71DzAu9LZsjEa9Ot3dqfeGp1qAEB0AOCF7hTskMmXrsourE/Xq3VAWAZ7ioNd+Iu0O7l5lodAI5AzQvci7oId3JrrQ4AU7FIHcELzEbg1De8fwDOQsEuYKZkpmmjKzfW6gBwDGpe4FwtLZEp0fPmRZ5bWuxuUUTn2TJnzkSeO2bLAABMR+YFzuTk7AazZQDAVmRe4ExOzm4wWwYAbEXwAmfqyG505pTsBtO0v+XUoT0AnsawEZzJydkNt65sm2pOHtoD4GlMlYYzJbMWCNNvrZXM/aUAoBtMlYb7JZrdIAtgPQqXAdiE4AXOlchaIPHc7A+p5eShPQCeRsEuvMHJBb5eReEyAJuQeYE3kAWwHoXLAGxiSeZlxYoVuuSSS9S/f3+NHz9e77//frf7rl69WoFAoMujf//+VjQTbkYWwB4dQ3vLl0eeCVwAWMD0zMsLL7yghQsXqqamRuPHj9cTTzyh8vJyNTQ0aMiQITGPyczMVENDQ/TnQCBgdjPhdmQBAMA3TA9efvnLX2ru3Lm69dZbJUk1NTV67bXX9PTTT2vx4sUxjwkEAsrNzTW7afAabvbnPkxvB5AEU4OX06dPa9u2baqsrIxuCwaDKisrU11dXbfHnThxQsOGDVN7e7tGjx6tf/3Xf9Vll10Wc9/W1la1trZGfw6Hw6nrAADzdExvr6+XAoHILLHHH5d27pQGDbK7dQAczNSal6+++kptbW3Kycnpsj0nJ0eNjY0xjxk5cqSefvppvfLKK/rv//5vtbe3a8KECTp06FDM/auqqpSVlRV9FBQUpLwfAExQUxMJXAzj2+nthw9L3/setxkA0CPHTZUuLS3VLbfcopKSEk2aNEkvvfSSsrOztXLlypj7V1ZWqrm5Ofo4ePCgxS0GkJR9+yIZl7MdPuyMG3ACcCxTh40GDx6stLQ0NTU1ddne1NQUd01Lenq6rrzySu3Zsyfm70OhkEKhUJ/bCsBiRUVdV+ftwPo8AHphaualX79+GjNmjGpra6Pb2tvbVVtbq9LS0rj+jba2Nn388cfKy8szq5kA7FBRIX33u+duNwzW5wHQI9OHjRYuXKj//M//1DPPPKPdu3frrrvu0smTJ6Ozj2655ZYuBb0///nP9bvf/U779u3TRx99pH/8x3/U559/rttvv93spgKwUkZGpDi3I4BJS2N9HgBxMX2q9I033qg//vGPWrJkiRobG1VSUqL169dHi3gPHDigYPDbGOpPf/qT5s6dq8bGRl144YUaM2aM3n33Xf3VX/2V2U0FYLVBg6TPPmO6NICEBAzDMOxuRColckttAADgDIlcvx032wgAAKAnBC8AAMBVCF4AAICrELwAAABXIXgBAACuYvpUacBRuIsxALgewQv8o+Muxjt2RBZEa2uT1q6V3nmHAAYAXIRhI/hHTU0kcGlvl86ciTzv2MFNAAHAZQhe4B/79kUyLp1xE0AAcB2CF/hHUVFkqKiztjZuAggALkPwAv+oqJCKiyM3/0tP5yaAAOBSFOzCPzIyIsW5zDYCAFcjeIG/ZGRICxbY3QoAQB8wbAQAAFyF4AUAALgKwQsAAHAVghcAAOAqBC8AAMBVCF4AAICrELwAAABXIXgBAACuQvACAABcheAFAAC4CsELAABwFYIXAADgKgQvAADAVQheAACAqxC8AAAAVyF4AQAArkLwAgAAXIXgBQAAuArBCwAAcBWCFwAA4CoELwAAwFUIXgAAgKsQvAAAAFcheAEAAK5C8AIAAFyF4AUAALgKwQsAAHAVghcAAOAqlgQvK1as0CWXXKL+/ftr/Pjxev/993vc/8UXX9SoUaPUv39/XXHFFXr99detaCYAAHAB04OXF154QQsXLtTDDz+sjz76SMXFxSovL9eXX34Zc/93331XN998s2677TZt375dM2fO1MyZM/XJJ5+Y3VQAAOACAcMwDDNfYPz48fr+97+vX/3qV5Kk9vZ2FRQUaN68eVq8ePE5+9944406efKkXn311ei2v/7rv1ZJSYlqamp6fb1wOKysrCw1NzcrMzMzdR0BAKAbLS1STY20b59UVCRVVEgZGXa3yl0SuX6fZ2ZDTp8+rW3btqmysjK6LRgMqqysTHV1dTGPqaur08KFC7tsKy8v17p162Lu39raqtbW1ujP4XC47w0HACBOLS3SxInSjh1SWprU1iatXSu98w4BjFlMHTb66quv1NbWppycnC7bc3Jy1NjYGPOYxsbGhPavqqpSVlZW9FFQUJCaxgMAEIeamkjg0t4unTkTed6xI7Id5nD9bKPKyko1NzdHHwcPHrS7SQAAH9m3L5Jx6SwtLbId5jB12Gjw4MFKS0tTU1NTl+1NTU3Kzc2NeUxubm5C+4dCIYVCodQ0GACABBUVRYaKOmtri2yHOUzNvPTr109jxoxRbW1tdFt7e7tqa2tVWloa85jS0tIu+0vShg0but0fAAA7VVRIxcVSMCilp0eeS0oi22EOUzMvkrRw4ULNnj1bY8eO1bhx4/TEE0/o5MmTuvXWWyVJt9xyi7773e+qqqpKknTvvfdq0qRJevzxx3XNNdfo+eef14cffqhf//rXZjcVAICEZWREinOZbWQd04OXG2+8UX/84x+1ZMkSNTY2qqSkROvXr48W5R44cEDB4LcJoAkTJui5557TQw89pAcffFCXXnqp1q1bp8svv9zspgIAkJSMDGnBArtb4R+mr/NiNdZ5AdAT1uMAnMkx67wAgJOwHgfgDa6fKg0A8WI9DsAbCF4A+AbrcQDeQPACwDdYjwPwBoIXAL7BehyAN1CwC8A3WI8D8AaCFwC+wnocgPsxbAQAAFyF4AUAALgKwQsAAHAVghcAAOAqBC8AAMBVCF4AAICrELwAAABXYZ0XuFtLCyuOAYDPELzAvVpapIkTI7cFTkuL3KRm7drIEqoEMADgWQwbwb1qaiKBS3u7dOZM5HnHjsh2AIBnEbzAvfbti2RcOktLi2wHAHgWwQvcq6goMlTUWVtbZDsAwLMIXuBeFRVScbEUDErp6ZHnkpLIdgBxaWmRqqulefMizy0tdrcI6B0Fu3CvjIxIcS6zjYCkUPMOtyJ4gbtlZEgLFtjdCsCVOte8t7dHtnXUvPOxgpMxbAQAPkXNO9yK4AUAfIqad7gVwQsA+BQ173Aral4AwKeoeTcHdy0xH8ELUoNPK+BK1LynFjO4rEHwgr7j0wrAgez4TsUMLmsQvKDv+LQCvuXUpKtd36k6ZnB1/K9QYgaXGQhe0Hd8WgFfcnLS1a7vVMzgsgazjdB3fFoBX3Lyjd3tWsOGGVzWIPOCvquoiHzd6vz1i08r4HlOTrra9Z2KGVzWIHhB3/FpBXzJyUlXs75TxVPjwwwu8wUMwzDsbkQqhcNhZWVlqbm5WZmZmXY3BwA8K1bNS0mJtGWLM767pLqYOFZ/i4udUePjBYlcv8m8AACS4vSka6ozIEysdA6CFwBA0vw0ROLkGh+/YbYRAABxcHKNj98QvAAAEAemQTsHw0YAAMTB6TU+fkLwAgBAnPxU4+NkBC8AIOfeo8duvC9wIlNrXo4ePapZs2YpMzNTAwcO1G233aYTJ070eMzkyZMVCAS6PCoYUARgoo71OxYtklaujDxPnBjZ7me8L3AqU4OXWbNmadeuXdqwYYNeffVVvf3227rjjjt6PW7u3Lk6cuRI9PHYY4+Z2UwAPufke/TYyYr3paVFqq6W5s2LPBMYIR6mDRvt3r1b69ev1wcffKCxY8dKkpYvX66rr75ay5YtU35+frfHDhgwQLm5uWY1DQC6YP2O2Mx+X5x8V2o4m2mZl7q6Og0cODAauEhSWVmZgsGgtm7d2uOxzz77rAYPHqzLL79clZWV+uabb7rdt7W1VeFwuMsDABKR6vU7vJJNMHtdEzJeSJZpmZfGxkYNGTKk64udd54GDRqkxsbGbo/70Y9+pGHDhik/P187d+7UT3/6UzU0NOill16KuX9VVZWWLl2a0rYD8JdU3sTPS9kEs28YT8YLyUo4eFm8eLEeffTRHvfZvXt30g3qXBNzxRVXKC8vT1OnTtXevXs1fPjwc/avrKzUwoULoz+Hw2EVFBQk/foA/CeV63d46f43Zq9rwoq1SFbCwct9992nOXPm9LhPUVGRcnNz9eWXX3bZ/uc//1lHjx5NqJ5l/PjxkqQ9e/bEDF5CoZBCoVDc/x4AxJKq9Tu8lk0wc10TszM78K6Eg5fs7GxlZ2f3ul9paamOHTumbdu2acyYMZKkTZs2qb29PRqQxKO+vl6SlJeXl2hTAUCStWuVkE2IHyvWIlkBwzAMs/7x6dOnq6mpSTU1NTpz5oxuvfVWjR07Vs8995wk6fDhw5o6darWrFmjcePGae/evXruued09dVX66KLLtLOnTu1YMECXXzxxXrrrbfies1wOKysrCw1NzcrMzPTrK4BcIlYNSjFxebVoMR6vZISacsWb16U7VjEjoXzvCmR67epK+w+++yzuueeezR16lQFg0Fdf/31evLJJ6O/P3PmjBoaGqKzifr166eNGzfqiSee0MmTJ1VQUKDrr79eDz30kJnNBOBhVteg+CmbYEdxciKvSZDjXaYGL4MGDYpmWWK55JJL1DnxU1BQEHeGBQDiYUcNil/uf2NHcXK8r+mlWV84F/c2AuBp1KCYJ1WBYSIZknhf00uzvpzEKdksghcAnsaMFvOkIjBMNEMS72t6bdaXEzgpm2XqvY0AwG4dNSjLlkl33hl59mrxrNUqKiLFz8GglJ4eeU40MEx0ld14X5OMW+o5aUVkMi8APM8vNShWS0VxcqIZknhfk4xb6jkpm0XwAgAuZncNQl8Dw2QyJPG8pp9mfVnFSdksU9d5sQPrvADwC6vXsDGD39bFcTOzz5Vj1nkBAJgn1TNq7MjikCFxDyedK4IXAHCpVNYg2DmThJok93DKuWK2EQC4VCprEJw0kwToDcELALhUKqYqd+jI4nTGuij+0dIiVVdL8+ZFnlta7G5Rzxg2AgCXSmUNgpNmktjN7hlcVnPS4nPxYrYRAIBZP//PCzO4ElVdLS1a1LV2KhiMLOhoZX0Ls40AAAlx0kwSO/nxnkhOWnwuXgQvAABJzplJYic3Xsj7yo1DhhTsAgAczcpiUjdeyPsqlYXfVqHmBQDgWFbXoPi19scJRcrUvAAAXKOnC6fVNSh+rf1x25AhwQsAwDa9TdO1owbFbRdyP6LmBQBgm95W9vVjDQp6R/ACALBNbyv7urGYFOZj2AgAYJveMit+rUFBz5htBACwjV9n9+BczDYCALgCmRUkg+AFAGArZvcgURTsAgAAVyF4AQAArkLwAgAAXIXgBQAAuArBCwAAcBWCFwAA4CoELwAAwFUIXgAAgKuwSB0AIKaWFla+hTMRvAAAzhHrnkNr10aW8ieAgd0YNgIAnKOmJhK4tLdLZ85EnnfsiGwH7EbwAgA4x759kYxLZ2lpke2A3QheAADnKCqKDBV11tYW2Q7YjeAFAHCOigqpuFgKBqX09MhzSUlkO2A3CnYBwGWsmAWUkREpzmW2EZyI4AUAXMTKWUAZGdKCBan9N3vC1GzEy7Rho0ceeUQTJkzQgAEDNHDgwLiOMQxDS5YsUV5enjIyMlRWVqbPPvvMrCYCgOt4dRZQR1C2aJG0cmXkeeLEyHbgbKYFL6dPn9YNN9ygu+66K+5jHnvsMT355JOqqanR1q1b9Z3vfEfl5eU6deqUWc0EgHO0tEjV1dK8eZFnJ11AvToLyE1BmZP/PvzCtGGjpUuXSpJWr14d1/6GYeiJJ57QQw89pBkzZkiS1qxZo5ycHK1bt0433XSTWU0FgCinL87m1VlAHUFZe/u32/oalJkxDOX0vw+/cMxso/3796uxsVFlZWXRbVlZWRo/frzq6uq6Pa61tVXhcLjLAwCS5fQMgB2zgKzINKQ6KDNrGMrpfx9+4ZiC3cbGRklSTk5Ol+05OTnR38VSVVUVzfIAQF+ZkQFIJatnAVmVaaioiPy7nV+nL0FZ5yCj41x2BBl9KUJ2+t+HXySUeVm8eLECgUCPj08//dSstsZUWVmp5ubm6OPgwYOWvj4Ab3HDsEzHLKDlyyPPZg5XWJVp6AjKli2T7rwz8rxlS/J9M6s2KBV/H9TM9F1CmZf77rtPc+bM6XGfoiQ/4bm5uZKkpqYm5eXlRbc3NTWppKSk2+NCoZBCoVBSrwkAZ0t1BsDtrMw0pHJqtllBaF//PqiZSY2Egpfs7GxlZ2eb0pDCwkLl5uaqtrY2GqyEw2Ft3bo1oRlLANAXLM7WlRsyUbGYFYT29e/DrOGseHhpHR3Tal4OHDigo0eP6sCBA2pra1N9fb0kacSIETr//PMlSaNGjVJVVZV++MMfKhAIaP78+frFL36hSy+9VIWFhfrZz36m/Px8zZw506xmAsA5rF6czcncmokyMwjty9+HXTUzXsv4mBa8LFmyRM8880z05yuvvFKS9Oabb2ry5MmSpIaGBjU3N0f3eeCBB3Ty5EndcccdOnbsmP7mb/5G69evV//+/c1qJgCgB27ORDkxCLUrk2VnxscMAcMwDLsbkUrhcFhZWVlqbm5WZmam3c0BACAqVgakpKRvxcnxmDcvMmX8zJlvt6WnR4qjly8373UTkcj12zFTpQEA8Dq7MllurV3qDpkXAAA8zq6MTyLIvAAAgCg31y7FQvACAIAPOLGAOVkELwAA1/PSGiboHcELAMDVvLaGCXrnmLtKAwBSyy/30OFOz/5D5gUAPMhP2Qju9Ow/ZF4AwIP8lI3w2hom6B3BCwB4UEc2ojOvZiMqKqTiYikYjKwaGwy64/5LSB7DRgBgIrtmwfgpG+G1NUzQO1bYBQCTxKo7KS62pu7EDSuqAp2xwi4AOICdd/I1MxvBmiqwG8ELAJjE7lkwZqyomupZTARCSAbBCwCYxIt1J6nMJvlpOjdSi9lGAGASL86CSeUsJj9N50ZqkXkBAJN4cRZMKrNJdg+rwb0IXgDARF66k68UCb7Wrj13FlMy2SQvDqvBGkyVBgAkJFVFtkznRmeJXL8JXgAAtmG2ETqwzgsAwBW8NqwGazDbCAAAuArBCwAAcBWCFwAA4CrUvAAA0A0Kip2J4AUAgBi4fYFzMWwEAEAM3L7AuQheAACIIZX3cUJqMWwEAPC9WLUt3L7AuQheAFjK6wWQ3fXP6/12s+5qWzZuTN19nJBaBC8ALOP1AsieLoJlZd7tt9t1rm3puMP1jh3SM894767gXkHwAsAy3V0kamq8sUR8d/37yU+83W+366ht6Tg30re1Ldy+wJkIXgBYpqeLhBf01D8v99vtUlnbwvCgNQheAFjG6wWQPfVv167Y22G/iorU1LZ4fVjUSZgqDcAyFRVScbEUDErp6ZFnLxVAdte/p5/2dr/dLiMjEmAsWybdeWfkecuWxAMO1oWxDpkXAJbpuEh4Na3eU/+83G8vSEVtC8OD1iF4AWAprxdAdtc/r/cb3h8WdRKGjQAASAGvD4s6CZkXAL7DjBCYgeFB6xC8APAVZoTATAwPWoNhIwC+wowQwP1MC14eeeQRTZgwQQMGDNDAgQPjOmbOnDkKBAJdHtOmTTOriQB8iDsFA+5n2rDR6dOndcMNN6i0tFT/9V//Ffdx06ZN06pVq6I/h0IhM5oHwKeYEQK4n2nBy9KlSyVJq1evTui4UCik3NxcE1oEAKlbTRWAfRxXsLt582YNGTJEF154of72b/9Wv/jFL3TRRRd1u39ra6taW1ujP4fDYSuaCcClmBECuJ+jgpdp06bpuuuuU2Fhofbu3asHH3xQ06dPV11dndLOHqT+f1VVVdEsDwBvMWtKMzNCAHcLGIZhxLvz4sWL9eijj/a4z+7duzVq1Kjoz6tXr9b8+fN17NixhBu3b98+DR8+XBs3btTUqVNj7hMr81JQUKDm5mZlZmYm/JoAnCHWlObiYqY0A14VDoeVlZUV1/U7oczLfffdpzlz5vS4T1EKq96Kioo0ePBg7dmzp9vgJRQKUdQLeFDnKc0d94rpmNJM1gTwt4SCl+zsbGVnZ5vVlnMcOnRIX3/9tfLy8ix7TQDOwE3uAHTHtHVeDhw4oPr6eh04cEBtbW2qr69XfX29Tpw4Ed1n1KhRevnllyVJJ06c0P3336/33ntPf/jDH1RbW6sZM2ZoxIgRKi8vN6uZAByKKc3maGmRqqulefMizy0tdrcISJxpBbtLlizRM888E/35yiuvlCS9+eabmjx5siSpoaFBzc3NkqS0tDTt3LlTzzzzjI4dO6b8/HxdddVV+pd/+ReGhQAfYkpz6nFrBHhFQgW7bpBIwQ8AZ+MGiqlVXS0tWtR1KC4YlJYto44I9jOtYBcArMSU5tSijgheQfACAD5BHZH3+SVbybARAPhErJqXkhJpyxZvXuD8xu1rIzFsBAA4B7dG8DY/rY1E8AIASXBrep46Iu/yU00TwQsAJIgpxxFuDeC8yk81TaYtUgcAXtU5PX/mTOS5Iz3vFx0B3KJF0sqVkeeJE1n0zk4VFZEal2BQSk+PPHt1bSQyLwCQID+l57vjp/oKt/BTTRPBCwAkyE/p+e4QwDmTX2qaGDYCgAT5KT3fHQI42Il1XgAgCX4vVmXNGKRaItdvghcAQFL8HsAhtVikDgBMxEU7wi/1FXAeghcASABrvAD2o2AXABLAGi+A/QheACABHVOEO2OKMGAtghcASABThAH7EbwAQAJY4wWwHwW7AJAAPy3BDjgVwQsAJIgpwoC9GDYCAACuQvACAABcheAFAAC4CsELAABwFYIXAADgKgQvAADAVQheAACAqxC8AAAAVyF4AQAArkLwAgAAXIXgBQAAuIrn7m1kGIYkKRwO29wSAAAQr47rdsd1vCeeC16OHz8uSSooKLC5JQAAIFHHjx9XVlZWj/sEjHhCHBdpb2/XF198oQsuuECBQMDu5kSFw2EVFBTo4MGDyszMtLs5KUf/3MvLfZPon9t5uX9e7puUeP8Mw9Dx48eVn5+vYLDnqhbPZV6CwaAuvvhiu5vRrczMTE/+kXagf+7l5b5J9M/tvNw/L/dNSqx/vWVcOlCwCwAAXIXgBQAAuArBi0VCoZAefvhhhUIhu5tiCvrnXl7um0T/3M7L/fNy3yRz++e5gl0AAOBtZF4AAICrELwAAABXIXgBAACuQvACAABcheDFJH/4wx902223qbCwUBkZGRo+fLgefvhhnT59usfjTp06pbvvvlsXXXSRzj//fF1//fVqamqyqNWJeeSRRzRhwgQNGDBAAwcOjOuYOXPmKBAIdHlMmzbN3IYmIZm+GYahJUuWKC8vTxkZGSorK9Nnn31mbkOTdPToUc2aNUuZmZkaOHCgbrvtNp04caLHYyZPnnzOuauoqLCoxT1bsWKFLrnkEvXv31/jx4/X+++/3+P+L774okaNGqX+/fvriiuu0Ouvv25RS5OTSP9Wr159znnq37+/ha2N39tvv61rr71W+fn5CgQCWrduXa/HbN68WaNHj1YoFNKIESO0evVq09uZrET7t3nz5nPOXSAQUGNjozUNTkBVVZW+//3v64ILLtCQIUM0c+ZMNTQ09Hpcqj57BC8m+fTTT9Xe3q6VK1dq165dqq6uVk1NjR588MEej1uwYIH+53/+Ry+++KLeeustffHFF7ruuussanViTp8+rRtuuEF33XVXQsdNmzZNR44ciT5+85vfmNTC5CXTt8cee0xPPvmkampqtHXrVn3nO99ReXm5Tp06ZWJLkzNr1izt2rVLGzZs0Kuvvqq3335bd9xxR6/HzZ07t8u5e+yxxyxobc9eeOEFLVy4UA8//LA++ugjFRcXq7y8XF9++WXM/d99913dfPPNuu2227R9+3bNnDlTM2fO1CeffGJxy+OTaP+kyIqmnc/T559/bmGL43fy5EkVFxdrxYoVce2/f/9+XXPNNZoyZYrq6+s1f/583X777XrjjTdMbmlyEu1fh4aGhi7nb8iQISa1MHlvvfWW7r77br333nvasGGDzpw5o6uuukonT57s9piUfvYMWOaxxx4zCgsLu/39sWPHjPT0dOPFF1+Mbtu9e7chyairq7OiiUlZtWqVkZWVFde+s2fPNmbMmGFqe1Ip3r61t7cbubm5xr//+79Htx07dswIhULGb37zGxNbmLjf//73hiTjgw8+iG773//9XyMQCBiHDx/u9rhJkyYZ9957rwUtTMy4ceOMu+++O/pzW1ubkZ+fb1RVVcXc/x/+4R+Ma665psu28ePHG3feeaep7UxWov1L5PPoJJKMl19+ucd9HnjgAeOyyy7rsu3GG280ysvLTWxZasTTvzfffNOQZPzpT3+ypE2p9OWXXxqSjLfeeqvbfVL52SPzYqHm5mYNGjSo299v27ZNZ86cUVlZWXTbqFGjNHToUNXV1VnRREts3rxZQ4YM0ciRI3XXXXfp66+/trtJfbZ//341NjZ2OXdZWVkaP368485dXV2dBg4cqLFjx0a3lZWVKRgMauvWrT0e++yzz2rw4MG6/PLLVVlZqW+++cbs5vbo9OnT2rZtW5f3PRgMqqysrNv3va6ursv+klReXu648yQl1z9JOnHihIYNG6aCggLNmDFDu3btsqK5pnPTueuLkpIS5eXl6e/+7u/0zjvv2N2cuDQ3N0tSj9e4VJ4/z92Y0an27Nmj5cuXa9myZd3u09jYqH79+p1TY5GTk+PIMc9kTJs2Tdddd50KCwu1d+9ePfjgg5o+fbrq6uqUlpZmd/OS1nF+cnJyumx34rlrbGw8Jw193nnnadCgQT229Uc/+pGGDRum/Px87dy5Uz/96U/V0NCgl156yewmd+urr75SW1tbzPf9008/jXlMY2OjK86TlFz/Ro4cqaefflrf+9731NzcrGXLlmnChAnatWuXo29aG4/uzl04HFZLS4syMjJsallq5OXlqaamRmPHjlVra6ueeuopTZ48WVu3btXo0aPtbl632tvbNX/+fE2cOFGXX355t/ul8rNH5iVBixcvjllQ1flx9v9UDh8+rGnTpumGG27Q3LlzbWp5fJLpXyJuuukm/f3f/72uuOIKzZw5U6+++qo++OADbd68OXWd6IbZfbOb2f274447VF5eriuuuEKzZs3SmjVr9PLLL2vv3r0p7AX6qrS0VLfccotKSko0adIkvfTSS8rOztbKlSvtbhp6MXLkSN15550aM2aMJkyYoKeffloTJkxQdXW13U3r0d13361PPvlEzz//vGWvSeYlQffdd5/mzJnT4z5FRUXR//7iiy80ZcoUTZgwQb/+9a97PC43N1enT5/WsWPHumRfmpqalJub25dmxy3R/vVVUVGRBg8erD179mjq1Kkp+3djMbNvHeenqalJeXl50e1NTU0qKSlJ6t9MVLz9y83NPafY889//rOOHj2a0N/Z+PHjJUWyisOHD0+4vakwePBgpaWlnTMjr6fPTG5ubkL72ymZ/p0tPT1dV155pfbs2WNGEy3V3bnLzMx0fdalO+PGjdOWLVvsbka37rnnnmjRf2+ZvVR+9gheEpSdna3s7Oy49j18+LCmTJmiMWPGaNWqVQoGe050jRkzRunp6aqtrdX1118vKVJ1fuDAAZWWlva57fFIpH+pcOjQIX399dddLvhmMbNvhYWFys3NVW1tbTRYCYfD2rp1a8KzsZIVb/9KS0t17Ngxbdu2TWPGjJEkbdq0Se3t7dGAJB719fWSZMm5606/fv00ZswY1dbWaubMmZIiKeza2lrdc889MY8pLS1VbW2t5s+fH922YcMGyz5jiUimf2dra2vTxx9/rKuvvtrEllqjtLT0nKm1Tj13qVJfX2/rZ6w7hmFo3rx5evnll7V582YVFhb2ekxKP3sJl/giLocOHTJGjBhhTJ061Th06JBx5MiR6KPzPiNHjjS2bt0a3VZRUWEMHTrU2LRpk/Hhhx8apaWlRmlpqR1d6NXnn39ubN++3Vi6dKlx/vnnG9u3bze2b99uHD9+PLrPyJEjjZdeeskwDMM4fvy4sWjRIqOurs7Yv3+/sXHjRmP06NHGpZdeapw6dcqubsSUaN8MwzD+7d/+zRg4cKDxyiuvGDt37jRmzJhhFBYWGi0tLXZ0oUfTpk0zrrzySmPr1q3Gli1bjEsvvdS4+eabo78/+29zz549xs9//nPjww8/NPbv32+88sorRlFRkfGDH/zAri5EPf/880YoFDJWr15t/P73vzfuuOMOY+DAgUZjY6NhGIbx4x//2Fi8eHF0/3feecc477zzjGXLlhm7d+82Hn74YSM9Pd34+OOP7epCjxLt39KlS4033njD2Lt3r7Ft2zbjpptuMvr372/s2rXLri506/jx49HPliTjl7/8pbF9+3bj888/NwzDMBYvXmz8+Mc/ju6/b98+Y8CAAcb9999v7N6921ixYoWRlpZmrF+/3q4u9CjR/lVXVxvr1q0zPvvsM+Pjjz827r33XiMYDBobN260qwvduuuuu4ysrCxj8+bNXa5v33zzTXQfMz97BC8mWbVqlSEp5qPD/v37DUnGm2++Gd3W0tJi/NM//ZNx4YUXGgMGDDB++MMfdgl4nGT27Nkx+9e5P5KMVatWGYZhGN98841x1VVXGdnZ2UZ6eroxbNgwY+7cudH/CTtJon0zjMh06Z/97GdGTk6OEQqFjKlTpxoNDQ3WNz4OX3/9tXHzzTcb559/vpGZmWnceuutXQKzs/82Dxw4YPzgBz8wBg0aZIRCIWPEiBHG/fffbzQ3N9vUg66WL19uDB061OjXr58xbtw447333ov+btKkScbs2bO77P/b3/7W+Iu/+AujX79+xmWXXWa89tprFrc4MYn0b/78+dF9c3JyjKuvvtr46KOPbGh17zqmBp/96OjP7NmzjUmTJp1zTElJidGvXz+jqKioy2fQaRLt36OPPmoMHz7c6N+/vzFo0CBj8uTJxqZNm+xpfC+6u751Ph9mfvYC/98IAAAAV2C2EQAAcBWCFwAA4CoELwAAwFUIXgAAgKsQvAAAAFcheAEAAK5C8AIAAFyF4AUAALgKwQsAAHAVghcAAOAqBC8AAMBVCF4AAICr/B83EKKie+AjGAAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"# Plot the data, different colours for each class\n",
"plt.figure(1)\n",
"\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)\n",
"axes = plt.gca()\n",
"(x_min,x_max) = axes.get_xlim()\n",
"(y_min,y_max) = axes.get_ylim()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fXex93FK4i8q"
},
"source": [
"Perceptron"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 75
},
"id": "_Kt3iZ0Z4i8q",
"outputId": "db40ff9a-4d50-44b0-a0aa-f112386adde8"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Perceptron()"
],
"text/html": [
"<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Perceptron()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">Perceptron</label><div class=\"sk-toggleable__content\"><pre>Perceptron()</pre></div></div></div></div></div>"
]
},
"metadata": {},
"execution_count": 5
}
],
"source": [
"from sklearn.linear_model import Perceptron\n",
"clf = Perceptron() # Default without option: This will return a warning on max_iter and tol -- adjust to your liking\n",
"# You should check what the defaults are. For example, alpha=0.0001 but alpha is regularisation which is not something we discussed in the context of Perceptron. The learning rate eta0 = 1.\n",
"\n",
"clf.fit(data,classes) # Learning."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 447
},
"id": "QFV90BJ44i8r",
"outputId": "9b294767-cfa1-426c-a505-2f02fdb432a8"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7b1ea322fcd0>"
]
},
"metadata": {},
"execution_count": 6
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGdCAYAAADaPpOnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDZUlEQVR4nO3dfXRU5bk28GtmnEwyhARCvmWCidCABMQEocEcAwkyROshRT1qWW1QCoWjXSq2FjwtFFsPqbXRNrhEj9HoqajlRdGUlg+D1JrGVDHzyljknZBIFBxEhBkIIcHMfv/AGRPJx8xkf+/rt1bWIpM9zLMzgX3lee7n3iZBEAQQERERaYRZ6QEQERERRYLhhYiIiDSF4YWIiIg0heGFiIiINIXhhYiIiDSF4YWIiIg0heGFiIiINIXhhYiIiDTlIqUHILZAIIAjR45g5MiRMJlMSg+HiIiIwiAIAk6dOoXMzEyYzYPPreguvBw5cgQOh0PpYRAREVEUPv74Y4wdO3bQY3QXXkaOHAkAePb3L8MeN0Lh0RAREVE4znR2oOKuhaHr+GB0F16CS0X2uBEML0RERBoTTskHC3aJiIhIUxheiIiISFMYXoiIiEhTGF6IiIhIUxheiIiISFMYXoiIiEhTGF6IiIhIUxheiIiISFMYXoiIiEhTGF6IiIhIU3R3ewAiov6Yu7uQVb8V9mNHcCYlE+2l5QjE2JQeFhFFgeGFyECMegE3d3eh8IEVSGj3QDBbYAr04OKGHWhc87ghzp9IbyRdNnrzzTdx/fXXIzMzEyaTCVu3bh30+D179sBkMl3w4fV6pRwmkSEEL+CTXtiArN2vYtILG1D4wAqYu7uUHprksuq3IqHdA5MgwNzzJUyCgIR2D7Lqtyo9NCKKgqThpaOjA5dffjkee+yxiJ534MABfPrpp6GP1NRUiUZIZBxGvoDbjx2BYLb0eUwwW2A/dkShERHRcEi6bFRWVoaysrKIn5eamopRo0aJPyAiAwtewE09X4YeM8oF/ExKJkyBnj6PmQI9OJOSqdCIiGg4VLnbaNq0acjIyMA111yDhoYGpYdDpAtGvoC3l5bDnzUBgsmEgOUiCCYT/FkT0F5arvTQiCgKqirYzcjIwMaNGzF9+nR0dXXhqaeewuzZs9HU1IT8/Px+n9PV1YWurq/X7P1+v1zDJdKU9tJyXNywo0/RqlEu4IEYGxrXPG7IYmUiLdjibsH+5MNhH28SBEGQcDxfv5DJhFdeeQXl5eURPa+4uBhZWVn43//9336//stf/hLr1q274PHNT+6APW5ENEMl0i2j7jYiIvXa4m5BTtlrGBETg3tmvQifz4eEhIRBn6OqmZf+zJgxA2+99daAX1+9ejVWrlwZ+tzv98PhcMgxNCLNCcTY8FHZzUoPg4gI1a1uAEBR2U4kJ8XDOaYI9+DFsJ6r+vDicrmQkZEx4NdtNhtsNv7mSKRVnA0iMp5KXxOcxQ1ITorHGHsq5qQV4ZT/TNjPlzS8nD59Gi0tLaHP29ra4HK5kJSUhKysLKxevRqHDx/Gc889BwB49NFHkZ2djcmTJ+Ps2bN46qmnsHv3buzcuVPKYRKRQtg8jsh4Kn1NcOY1YF7uJOTET4rq75A0vLz77ruYM2dO6PPg8k5FRQVqa2vx6aefor29PfT17u5u3HvvvTh8+DDsdjumTp2K119/vc/fQUT60bv3THALd7D3DJe3iPSlutUN+2VtcDo8wwougMThZfbs2RisHri2trbP5/fddx/uu+8+KYdERCoSSe8ZLi8RaVezowrFORaMHhmHG7MXDvvvU33NCxHpV7i9Z7i8RKQ9Lo8XB7tOI6fsNVisFiydukC0v1uVTeqIyBjCbR5n5FsbEGnRFncLhJJNmHzDdsTZY0QNLgBnXohIQeE2jzPyrQ2ItCbYtyU5KR43Zs+T5DUYXohIUeH0njHyrQ2ItMLl8eLvls9DfVukCi4AwwuRLFhsOjxGvrUBkRZU+prgLGlAsdWC8Wnn+7ZIieGFSGIsNh0+3puISJ1cHi+2px4adt+WSDG8EEmMvUzEwVsbEKlLTWwd8ks8uNZqQWmOfMEFYHghkhyLTYlIb5odVbjSasHSqcPv2RINbpUmkhiLTYlIT5odVaL3bYkUZ16IJMZiUyLSuuD2ZwCIs8egYtJ3FB0PwwuRxFhsSkRaJkfflkgxvBDJgMWmRKQ11a1uFBXvRI4DqgouAMMLKYz9T4iI1KfS1wRncQNyx0rfsyUaDC+kGPY/ISJSn0pfk+x9WyLF8EKKYf8T5XDGi4i+qSa2DvkpHjgdUHVwARheSEHsf6IMzngR0Tc1O6qQD2B5gTJ9WyLF8EKKMXr/E6VmPzjjRUTA+db+e6e8g/wUj+J9WyLF8EKKMXL/EyVnPzjjRUQujxdCySZcZY/BvznUvUTUH4YXUoyR+58oOfth9BkvqbCOiLRCjX1bIsXwQooyav8TJWc/jDzjJRXWEZEWVLe60TGmA86yBk0HF4DhhUgRSs5+SDnjZdTZB9YRkdr17tsyboT2lom+ieGFSAFKz35IMeNl5NkH1hGRWlX6mgBA9X1bIsXwIgKj/rZJ0dNjvY+RZx8GmknrHJ2KS/76km7eY9KWmtg6OB0e3cy29MbwMkxG/m2Thkdv9T5Gnn3odyZt7KXIfHsXEj4+yP8bSHZa69sSKYaXYTLyb5tEvRl5F1N/M2mmni8x8U8b+X8Dycbl8eLvls9RVLxTc31bIsXwMkxG/m2TqDel63iU9s2ZtMuee4T/N5Bsgn1brrHHYESstncShYPhZZiM/NsmUW96rOMZDv7fQHLY4m7BEftZFJXsRJw9BhWTvqP0kGTB8DJMRv9tU8tYaC2+aOt49Phe8P8Gklp1qxtFZTsxIykegP5nW3ozCYIgKD0IMfn9fiQmJmLzkztgjxshy2vq8T9eveuv0NqfNYHFlArQ83vB/xtIKpW+JjjzzvdtmZNWpPRwRHHKfwbZFy+Dz+dDQkLCoMdy5kUEets1YgQstFYPPb8X/L+BxLbF3QKP47ju+rZEiuGFDEnsQmv+hh09Fr0Thacmtg75ZR5M1ujNFMXE8GJwRr3oillMyV4/w8PCVqLBBW+kqOe+LZFieDEwI190xSymVOOyh5ZCKQtbifoX3P48IceCGKtxdhKFg+HFwNR40ZWLmNt61bbsobVQyi3WRBcKBhcjbX+OBMOLgantois3sYop1bbsocVQysJWovNcHi8Odp1GTtlrDC6DYHhRmJLT+2q76MpJzO+72pY9jB5KibSqutWNopKdmGC1YPRIY/VtiRTDi4KUnt5X20VXLmJ/39W27GHkUEqkRb3vSaSnvi1SYnhRkNLT+2q76MpFiu+7mpY9jBpKibSoJrYO+SUeFFstKM0x9vbnSDC8KEgN0/tquujKZYT3YwgwwYSvm0vraVnFqKGUSGtqYuuQn+Lh9ucoMLwoiNP78jN3dyG1uQEmIdDncb19340YSom0pNlRxb4tw8DwoiBO78svq34rYk8cg6nXYwKAs6OSo/6+a6mnChEpJ7j9GQAsVguWTl2g8Ii0yyzlX/7mm2/i+uuvR2ZmJkwmE7Zu3Trkc/bs2YP8/HzYbDaMHz8etbW1Ug5RUcHp/f233on2kgXYf+udqu3FoRf2Y0cgWPpmdsFkxmdXXBXV9z1Y/DvphQ3I2v0qJr2wAYUPrIC5u0usIRORDvTu27K8YCGDyzBJOvPS0dGByy+/HLfffjsWLhx6aqytrQ3XXXcdli9fjueffx719fX44Q9/iIyMDDidTimHqhhO78ur36U6COhId0T19ylddK00zjoRDS7Y2h8OsG+LiCQNL2VlZSgrKwv7+I0bNyI7Oxu/+93vAACTJk3CW2+9hUceeUS34YXkJfZSnRqKrpWi9FZ/IrWrbnWjqGwnkpPYs0Vsqqp5aWxsxNy5c/s85nQ6cffddw/4nK6uLnR1fT1F7/f7pRoe6YDYO3GMXHRt9FknosFUt7rZt0VCqgovXq8XaWlpfR5LS0uD3+9HZ2cn4uLiLnjO+vXrsW7dOrmGSDog5lKdkYuujTzrRDSQSl8TUtI+Q1Gxh8FFQqoKL9FYvXo1Vq5cGfrc7/fD4YiufoEoUnL3VFFTjYmRZ52I+lMTWwenw4N5uZMAsOGclFQVXtLT03H06NE+jx09ehQJCQn9zroAgM1mg83G9XU9UNOFORJizuQM9j1QW42JkWediHqria0DADack5GqwkthYSH+8pe/9Hls165dKCwsVGhEJBe1XZiVMNT3QG01Jmrr5KvV8EvaFdz+fKXVgtKcbyEnnsFFLpKGl9OnT6OlpSX0eVtbG1wuF5KSkpCVlYXVq1fj8OHDeO655wAAy5cvx4YNG3Dffffh9ttvx+7du/GnP/0J27Ztk3KYpAJquzArYajvgRprTNSy1Z/hl+TWu28Ltz/LT9Lw8u6772LOnDmhz4O1KRUVFaitrcWnn36K9vb20Nezs7Oxbds23HPPPfj973+PsWPH4qmnnuI2aZ3p7zdkNV6YxRDJbMBQ3wPWmAyM4ZfkssXdAo/jOJwlDQwuCpI0vMyePRuCIAz49f66586ePRvNzc0SjoqUNNBvyEdmluruwhzpbMBQ4YQ1JgPTa/gldQn2bZmRFI8xdu4kUpKqal5I/wb6DfnIt0vhz5qgqwtzpLMBQ4UTtdWYqAlnpUhK1a1udIzpgLO4gdufVYLhhWQ10G/IcV98prsLc6SzAeGEE7XUmKgNZ6VIKpW+plBoARhc1ILhhWQ12G/IerswRzMboLfvgVw4K0VS6N23hT1b1IXhhWRlpN+QjXSuasDgR2KpbnXDflkb+7aomEkYrKJWg/x+PxITE7H5yR2wx41QejjUDyP14zDSuRJpXXD7s8VqweiRcbyZosxO+c8g++Jl8Pl8SEhIGPRYzryQ7LT8G3KkYUTL50pkFFvc5/uR5ZS9xu3PGsHwQhQmNkIj0p8t7pZQaBkRG8/ZFo1geCEKExuhEelLsG9LchJDi9YwvISJtQvyUep7PdTrshEakT5scbfgiP0siop3sm+LRjG8hEHNywV6C1VKfa/DeV02QiPSvkpfE5xlDZhsj0FWEoOLVjG8hEGtywVqDlXRUup7Hc7rcuszkXa5PF7snfIO+7boBMNLGNS6XKDWUDUcSn2vw3ldNkIj0qZmRxUsORZcCWDpVPZt0QOGlzCodblAraFqOAb7Xku5RBbue8ytz0Ta0uyogsVqwdKpC5QeComI4SUMal0uUGuoGo6Bvtef/FuZpEtkan2P9U5vNVukDi6PFwAglGxi3xadYofdMKnxP9n+al78WRM0XfMC9P+9zqrfikkvbICp14+rYDJh/613ijYTosb3WM/0+vMbDf7siSfYt8VitSDGamFw0RB22JWAGpcL9FqD0d/3Wo4lMjW+x3qmx5qtaOix8F4p7NtiHAwvGmeUC64el8iMTo81W9FgiBu+Sl8TnHkNKHKAfVsMguGFNIE1KfrDQHoeQ9zwBIMLtz8bC8MLaYJel8iMbLBAaqQaEIa46NXE1rFvi0ExvJBmiLFEpreLopbPZ6BACsBQNSCcVYxcs6MKAJAPYHkB+7YYEcMLGYbeCiP1cD79BdJL/vqSoWpAOKsYGfZtIYDhhQxEb4WRejufICPWgBil8D5aW9wtODl9P/JTPAwuBIDhhTQs0iUTvV0U9XY+QawBod6CfVvOb3/mEhGdx/BCmhTNkoneLopaP5+BwidrQCiob3Bh3xb6GsMLaVI0SyZ6uyhq+XyGCp+sATG2Sl8TUtI+Q36Zh31bqF8ML6RJ0SyZ6O2iqOXzGSp8sgbEuHr3bQG4BZr6x/BCmhTtkoneLopaPR+91utQ9IKzLezbQuFgeCFN0vKSCWm/XofE1eyogjPU2p9FuTQ0hhfSJKWXTLTcHE4NGD4piH1bKBoML6RZSi2Z6KE5nNKUDp+kLJfHi+2ph+DMa2BwoagwvBBFSK/N4eSm1XodGp7g9udFSfEYY+dOIooOwwupllqXZlhsShS56lY3AKCobCf7ttCwMbyQKql5aYbFpkSRqfQ1wVncgGTOtpBIzEoPgKg/vZdmzD1fwiQIoaUZpbWXlsOfNQGCyYSA5SIIJhOLTYkG0Ltvy43Z8xhcSBSceSFVUvPSDItNv6bWpT1SXnWrGx1jOkLBhX1bSEwML6RK0SzNyHkhZbGpupf2SFnNjioUOcCbKZJkGF5IlSLtA8ILqfy464p6c3m8ONh1Gjllr3H7M0mO4YVUKdKlGV5I5afmpT2Sl8vjhVCyCZPtMQBiUDHpO0oPiXSO4YVUK5KlGV5I5cddVwR83bclzs7QQvLhbiPSBV5I5cddV8bm8nhDwSU5KZ7BhWTFmRfSBd4rR37cdWVc1a1uFJXsxASrBaNHsuEcyU+W8PLYY4/ht7/9LbxeLy6//HJUV1djxowZ/R5bW1uL2267rc9jNpsNZ8+elWOopFG8kCqDu66MJXRPomJufyZlSR5eXnrpJaxcuRIbN27EzJkz8eijj8LpdOLAgQNITU3t9zkJCQk4cOBA6HOTyST1MEkHeCElkk5NbB3ySzy41mpBaQ6DCylL8vBSVVWFpUuXhmZTNm7ciG3btuHpp5/GqlWr+n2OyWRCenq61EMjIhUwd3dh3I7/gzRXAwDg6BVX4dC8GzlrpiLNjirkA1hewJ4tpA6Shpfu7m7s3bsXq1evDj1mNpsxd+5cNDY2Dvi806dPY9y4cQgEAsjPz8d///d/Y/Lkyf0e29XVha6urtDnfr9fvBMgIkmZu7tQ+MsfIeHjltBjo//f+8hs3IXGtU8wwKhAs6OKfVtIdSTdbfT555+jp6cHaWlpfR5PS0uD1+vt9zm5ubl4+umn8eqrr+KPf/wjAoEAZs2ahU8++aTf49evX4/ExMTQh8PhEP08iEgaWfVbkfBxC0xAn4+E9hZV3MfKqFweL5odVQwupFqq221UWFiIwsLC0OezZs3CpEmT8MQTT+BXv/rVBcevXr0aK1euDH3u9/sZYIg0wn7sCGAyAYLQ9wsmE3v0KIR9W0gLJA0vycnJsFgsOHr0aJ/Hjx49GnZNi9VqxRVXXIGWlpZ+v26z2WCzcWqZSIvOpGReGFwAQBDYo0dm1a1uFBXvRE7onkTc/kzqJemyUUxMDAoKClBfXx96LBAIoL6+vs/symB6enqwb98+ZGRkSDVMIlJIe2k5/I7xEIA+H+zRI69gcMkdm4rlBQsZXEj1JF82WrlyJSoqKjB9+nTMmDEDjz76KDo6OkK7j37wgx/g4osvxvr16wEADzzwAL797W9j/PjxOHnyJH7729/i0KFD+OEPfyj1UIlIZoEYGxp/+QR3Gymo0tcEZ3EDcsemYk5akdLDIQqL5OHl5ptvxrFjx7BmzRp4vV5MmzYN27dvDxXxtre3w2z+egLoxIkTWLp0KbxeL0aPHo2CggL84x//wGWXXSb1UIlIAYEYG9quX4S26xcpPRRDqYmtQ36KB04H2HCONMckCP0tOGuX3+9HYmIiNj+5A/a4EUoPh4hIdYLBhX1bSE1O+c8g++Jl8Pl8SEhIGPRY1e02IiIi8bk8Xuyd8g7yUzy40mrB0qkMLqRdDC9ERDrn8nghlGzCVfYY/JuDS0SkfQwvREQ6xr4tpEcML0REOlTd6kbHmA44yxrYt4V0h+GFDMXc3YWs+q2wHzuCMymZaC8t55Zc0p3efVvGjeAyEekPwwsZhrm7C4UPrEBCuweC2QJToAcXN+xA45rHGWBIFyp9TQDAvi2kewwvZBhZ9VuR0O6BSRBg6vkSAJDQ7kFW/VZ8VHazwqMjGp6a2Do4HR7OtpAhMLyQYdiPHTk/4/JVcAEAwWzhDQBJ89i3hYyG4YUM40xKJkyBnj6PmQI9vAEgaZLL48XfLZ+jqHgn8gEGFzIUhhcyjPbSclzcsKNPzQtvAEhaFOzbco09BiNiuZOIjIfhhQwjEGND45rHuduINGuLuwVH7GdRVLKTfVvI0BheyFACMTYW55ImVbe6UVS2EzOS4gFwtoWMjeGFiEjlevdt4fZnIoYXIiLV2uJugcdxnH1biL6B4YWISIVqYuuQX+bBZN5MkegCDC9ERCqyxd2Ck9P3s28L0SAYXoiIVKLZUYUJORbEWC2omMTgQjQQhhciIoUF+7Zw+zNReBheiIgU4vJ4AYDBhShCDC9ERAqobnWjqGQnLFYLYqwMLkSRYHghIpJR73sScfszUXQYXoiIZFLpa4KzpAHFVgvGpzG4EEWL4YWISAY1sXVwOjyYl8ueLUTDxfBCRCSxmtg69m0hEhHDCxGRRJodVQCAfIDBhUhEDC9ERCIL9m2xWC1YOnWB0sMh0h2GFyIikWxxtyCn7DXAAfZtIZIQwwsRkQiCwSU5KR43Zs9TejhEusbwQkQ0TNWtbhSVsW8LkVwYXoiIolTpa0JK2mcoKvYwuBDJiOGFiCgKvfu2AOzdQiQnhhciogjUxNYBAPu2ECmI4YWIKEzNjipcabWgNOdbyIlncCFSCsMLEdEQ2LeFSF0YXoiIBrDF3QKP4zicJQ3s20KkIgwvRET9CPZtmZEUjzF27iQiUhOGFyKiXqpb3egY0wFnWQMbzhGpFMMLEdFXKn1NcBY3IHdsKgDOthCpFcMLERG+Ci55DZiXy54tRGrH8EJEhlbd6ob9sjY4HezbQqQVDC9EZFjNjioU51gwemQcbsxmcCHSCrMcL/LYY4/hkksuQWxsLGbOnIl//vOfgx6/efNmTJw4EbGxsZgyZQr+8pe/yDFMIjIAl8eLLe4WNDuqQn1bWJRLpC2Sh5eXXnoJK1euxNq1a/Hee+/h8ssvh9PpxGeffdbv8f/4xz9w6623YsmSJWhubkZ5eTnKy8vhdrulHioR6dwWdwuEkk2YfMN2JCfFs+EckUaZBEEQpHyBmTNn4sorr8SGDRsAAIFAAA6HAz/+8Y+xatWqC46/+eab0dHRgT//+c+hx7797W9j2rRp2Lhx45Cv5/f7kZiYiM1P7oA9boR4J0JEmhbs28LtzySVzk4Lamsm4NBH8Rh3yWksXuJBXFyP0sPSjFP+M8i+eBl8Ph8SEhIGPVbSmpfu7m7s3bsXq1evDj1mNpsxd+5cNDY29vucxsZGrFy5ss9jTqcTW7du7ff4rq4udHV1hT73+/3DHzgR6cYWdwuO2M+iqGwngwtJprPTguuumQf3vtGwWALo6TFj84vZ2LZrJwOMBCRdNvr888/R09ODtLS0Po+npaXB6/X2+xyv1xvR8evXr0diYmLow+FwiDN4ItK8Sl8TcspewzVle5A7NpXBhSRTWzMB7n2jEQiYcO6cBYGACe59o1FbM0HpoemS5ncbrV69us9Mjd/vZ4AhMjiXx4vtqYfYt4Vkc+ijeFgsAQQCltBjFksAhz6KV3BU+iVpeElOTobFYsHRo0f7PH706FGkp6f3+5z09PSIjrfZbLDZbOIMmIg0r9lRBTiAa60WlOYwuJA8xl1yGj09fRczenrMGHfJaYVGpG+SLhvFxMSgoKAA9fX1occCgQDq6+tRWFjY73MKCwv7HA8Au3btGvB4IqKg4Pbn5QULsXTqAgYXks3iJR7kTTkBs1mA1doDs1lA3pQTWLzEo/TQdEnyZaOVK1eioqIC06dPx4wZM/Doo4+io6MDt912GwDgBz/4AS6++GKsX78eAHDXXXehuLgYv/vd73DdddfhxRdfxLvvvosnn3xS6qESkQa5POfr4YSSTaG+LURyi4vrwbZdO7nbSCaSh5ebb74Zx44dw5o1a+D1ejFt2jRs3749VJTb3t4Os/nrCaBZs2Zh06ZN+PnPf477778fEyZMwNatW5GXlyf1UIlIY4Lbny1WC2KsMaiY9J2wnsctrSSFuLgerLjzQ6WHYQiS93mRG/u8EBlDtH1b+tvSmjflBLe0Eikskj4vstwegIhILNWtbjQ7qqJuOMctrUTap/mt0kRkHJW+JjiLG5A7NhVz0oqi+ju4pZVI+xheiEgTKn1NovRt4ZZWIu3jshERqVpNbB2aHVWiNZzjllYi7ePMCxGpVrOjCldaLVg6daFofye3tBJpH8MLEamKy+PF3invID/FI1nfFm5pJdI2hhciUo3g9uer7DGomCTebAsR6QvDCxGpQrR9W4jIeBheiEhR1a1u2C9rQ36Zh8GFiMLC8EJEiundt2XcCN4BmojCw/BCRLKr9DUBgGjbn4nIWBheiEhWNbF1cDo8nG0hoqgxvBCRbJodVcgHsLyAO4mIKHoML0QkKZfHi+2ph+DMa5CsbwsRGQvDC2maubsLWfVbYT92BGdSMtFeWo5AjE3pYdFXgtufy+0xyEqK/maKRES9MbyQZpm7u1D4wAoktHsgmC0wBXpwccMONK55nAFGYdWtbgBAUdlObn8mItExvJBmZdVvRUK7ByZBgKnnSwBAQrsHWfVb8VHZzQqPzriqW90oKj4fWgAGFyISH8MLaZb92JHzMy5fBRcAEMwW2I8dUXBUxta7bwuXiIhIKgwvpFlnUjJhCvS9E7Ap0IMzKZkKjci4trhb4HEcZ98WIpIFwwtpVntpOS5u2NGn5sWfNQHtpeVKD81QamLrkF/mwYykeOSnMLhoUWenBbU1E3Doo3iMu+Q0Fi/xIC6uZ+gnEimE4YU0KxBjQ+Oax7nbSCHBnUTs26JtnZ0WXHfNPLj3jYbFEkBPjxmbX8zGtl07GWBItRheSNMCMTYW58rM5fFCKNmEybkxAGJQMek7Sg+JhqG2ZgLc+0YjEDAhELAAANz7RqO2ZgJW3PmhwqMj6h/DCxGFLRhc4uwMLXpx6KN4WCyBUHABAIslgEMfxSs4KqLBMbwQ0ZBcHi8Odp1GTtlr7NuiM+MuOY2eHnOfx3p6zBh3yWmFRkQ0NPPQhxCRkVW3uiGUbMKEf9/G4KJDi5d4kDflBMxmAVZrD8xmAXlTTmDxEo/SQyMaEGdeiKhfoXsSsW+LrsXF9WDbrp3cbSQi7t6SHsMLiYb3GdKPmtg65Jd4cK3VgtIcbn/Wu7i4HhbnioS7t+TB8EKi4H2G9KMmtg75KR5ufyZdkHsWhLu35MHwQqLgfYb0odlRxb4tFBE1L5EoMQvC3VvyYHghUfA+Q9oV3P4MABarBUunLlB4RKQVal8iUWIWhLu35MHdRiQK3mdIm3r3bVlesJDBhSLSOxycO2dBIGAKhQM1CM6C9Cb1LAh3b8mDMy8kCt5nSFuCrf3hABvOUdTUvkQi1SzIYEtl3L0lD4YXEgXvM6Qd1a1uFJXt5PZnGja1L5EsXuLB5hez+yxrDXcWJJylMu7ekh7DC4mG9xlSv+pWN4qKGVxIHFKEAzFJMQvC3UTqwPBCZADB7c9FDmBeLvu2kDi0sEQi9iyI2pfKjILhhUjn2LeFpGS0JRK1L5UZBXcbEelUTWzd+b4tDC5EouFuInXgzAuRzgS3P1/J1v5EotPCUpkRMLwQ6Ujvvi3c/kwkDaMtlakRwwuRDmxxt8DjOA5nSQODC4lOzbcAIGOStObliy++wKJFi5CQkIBRo0ZhyZIlOH168KKm2bNnw2Qy9flYvny5lMMk0rTqVjdyyl7Doqv/L+blTmJwGYbOTgse3zARq34yHY9vmIjOTsvQT9K5YF+Ttf+Vj2efHo+1/5WP666Zx+8NKUrSmZdFixbh008/xa5du3Du3DncdtttWLZsGTZt2jTo85YuXYoHHngg9LndbpdymESaVOlrAgA4ixvYt0UEar9Pj1Lk6GvCmR2KlGThZf/+/di+fTveeecdTJ8+HQBQXV2Na6+9Fg8//DAyMwe+543dbkd6erpUQyPSvEpfE5x550MLwOAiBjYf65/UfU0YGikaki0bNTY2YtSoUaHgAgBz586F2WxGU1PToM99/vnnkZycjLy8PKxevRpnzpyRaphEmlMTWwdnXgOWFyzEnLQiBheRKHETPy2Quq+J2m/uSOok2cyL1+tFampq3xe76CIkJSXB6/UO+Lzvfe97GDduHDIzM/H+++/jZz/7GQ4cOICXX3653+O7urrQ1dUV+tzv94tzAkQqU93qhv2yNvZtkYjYF2m9LIVIfQsAdqylaEQcXlatWoXf/OY3gx6zf//+qAe0bNmy0J+nTJmCjIwMlJaW4uDBg7j00ksvOH79+vVYt25d1K9HpHbB7c/FORaMHhmHG7MZXKQg5kVaT0shUvc1YcdaioZJEAQhkiccO3YMx48fH/SYnJwc/PGPf8S9996LEydOhB7/8ssvERsbi82bN+O73/1uWK/X0dGB+Ph4bN++HU6n84Kv9zfz4nA4sPnJHbDHjQjzrIjUZ4u7BUfsZ1FUvJPbn2Ui1mzJ4xsmYu1/5SMQMIUeM5sFrHvwPUPXz/Snv6CXN+WEJoMeDc8p/xlkX7wMPp8PCQkJgx4b8cxLSkoKUlJShjyusLAQJ0+exN69e1FQUAAA2L17NwKBAGbOnBn267lcLgBARkZGv1+32Wyw2Wxh/31EWrDF3YKcstcwIykeQDxuzJ6n9JAMQazmY1wKCR871lI0JKt5mTRpEubPn4+lS5di48aNOHfuHO68807ccsstoZ1Ghw8fRmlpKZ577jnMmDEDBw8exKZNm3DttddizJgxeP/993HPPffg6quvxtSpU6UaKpGqVLe6UVS2E8lJDC1ikbv+hEshkWHHWoqUpH1enn/+edx5550oLS2F2WzGDTfcgD/84Q+hr587dw4HDhwI7SaKiYnB66+/jkcffRQdHR1wOBy44YYb8POf/1zKYRKpQu9lIvZtEY8S9SdSF7mqiRKFyXophqboRVzzonZ+vx+JiYmseSFNCfZtibPHICtpFIOLiJSqPzHCBVaJepVIX9MI74NeSFrzQkTi2eJuwcnp++F0cPuzVJSqPzHCUogSjf0ieU097fqivhheiBTS7KjChBwLYqwWVExicJEK60+kI2YwDHeGJJLXZNdkaahhNovhhUhmwb4tFqsFS6cuUHo4umek+hO5iRUMI5khieQ1uetLfGqZzZL0rtJE9DWXxxsKLnH2GAYXmQS34q578D1U3N6CdQ++x2UDkSxe4kHelBMwmwVYrT0wm4WogmEktwiI5DU56yY+tdzOgTMvRDII9m2xWC2IsbLhnNz0XH+i5BS+WD1aIpkhieQ1OesmPrXMZjG8EEnI5fHi75bP2beFJKGGKXwxgmGkMyThviYb4IlPLbNZDC9EEqn0NcFZ0oBiqwXj09i3hcSnl4JUKWdI9DzrpgS1zGYxvBBJINi3ZV7uJOTET1J6OKRTYk/hK7UExRkS7VDLe8XwQiSymtg6OB0eBheSnJhT+EovQXGGRDvU8F5xtxGRSJodVWh2VCE/5XzDOQYXkppYu30A9ewiIQoHZ16IRNDsqGLfFpKdmFP4atlFQspRQ/O5cDG8EEUpuP0ZAOLs3P5MyhBrCl8tu0jUQksXcjEovWwYKYYXoigEgwu3P5NeqGUXiRpo7UIuBq3tXGN4IYpQdaubfVtId9Syi0QNtHYhF4PWlg0ZXojCVOlrQkraZygq9iB3LPu2kP6oYReJGmjtQi4GrS0bMrwQhaF33xaAW6CJ5CR3/YnWLuRi0NqyIcML0SBqYusAgH1biBSiRP2J1i7kYtDasiHDC9EAmh1VuNJqQWnOt5ATv1Dp4RDp2kCzK0rUn2jtQi4WLS0bMrwQ9YN9W4jkM9jsilL1J1q6kBsRwwvRV7a4W+BxHIczr4HBhUhGg82uGLH+hIbG2wMQ4eu+LYuu/r/IHZvK4EIko+DsSm/B2RUxb4FA+sGZFzK06lY3OsZ0wFnWwL4tRAoZbHbFqPUnNDiGFzKsSl8TnMUNyB2bCoB9W4iUMtTuHtaf0DcxvJAh9e7bwu3PRMri7ApFiuGFDKW61Q37ZW3s20KkMpxdoUgwvJBhNDuqUOTAV7Ut7NtCRKRVDC+kay6PFwe7TiOn7DVufyYi0gmGF9Itl8cLoWQTJttjMCKWO4mIiPSC4YV0Kdi3hdufiYj0h+GFdGWLuwUAGFyIiHSM4YV0o9LXBGdZA+K4TEREpGsML6R5Lo8X21MPsW8LEZFBMLyQptXE1iG/xINrrRaU5jC4EBEZAcMLaVazowr5AJYXsGcLkVQ6Oy3sfEuqw/BCmhPcAs2+LUTS6uy04Lpr5vW559DmF7OxbddOBhhSlHnoQ4jUweXxotlRBbPzJQYXIhnU1kyAe99oBAImnDtnQSBggnvfaNTWTFB6aGRwnHkhTQj2bYmzx6Bi0neUHg6RIRz6KB4WSwCBgCX0mMUSwKGP4hUcFRHDC6lcdasbRcU7kRO6JxG3PxPJZdwlp9HT03eCvqfHjHGXnFZoRETnMbyQagWDS+7YVMxJK1J6OESqIkch7eIlHmx+MbtPzUvelBNYvMQj6usQRYrhhVSp0tcEZzH7thD1R65C2ri4HmzbtZO7jUh1GF5IVWpi65Cf4oHTAQYXogH0LqQN1qMEC2lX3PmhqK8VF9cj+t85EG7LpnBJFl4efPBBbNu2DS6XCzExMTh58uSQzxEEAWvXrsX//M//4OTJk7jqqqvw+OOPY8IEVrYbAfu2EIVHj4W03JZNkZBsq3R3dzduuukmrFixIuznPPTQQ/jDH/6AjRs3oqmpCSNGjIDT6cTZs2elGiYpzOXxoia2Ds2OKlisFgYXUoXOTgse3zARq34yHY9vmIjOTsvQT5KRHgtptbYtW+0/I3on2czLunXrAAC1tbVhHS8IAh599FH8/Oc/x4IF5/t3PPfcc0hLS8PWrVtxyy23SDVUUkiw2dxV9hhUTGJoIXXQwgyAHgtppZhNkmoZSgs/I3qnmpqXtrY2eL1ezJ07N/RYYmIiZs6cicbGxgHDS1dXF7q6ukKf+/1+ycdKw8e+LaRWctaTREuJQlqp61HEnk2SMmBo4WdE71QTXrxeLwAgLS2tz+NpaWmhr/Vn/fr1oVkeUr/qVjfsl7Uhv8zDvi2kSlqpJ5G7kFbqmQaxZ5OkDBha+RnRs4hqXlatWgWTyTTox4cfyps6V69eDZ/PF/r4+OOPZX19Cl+wb8utV/gwL3cSgwupkh7rSYZLjnqU4GzSugffQ8XtLVj34HvDCkfBgNGbWAFDjJ8R1swMT0QzL/feey8WL1486DE5OTlRDSQ9PR0AcPToUWRkZIQeP3r0KKZNmzbg82w2G2w2W1SvSfKo9DUBAJzFDWw4R6qnx3qS4ZJrpkHM2SQpQ+hwf0ZYMzN8EYWXlJQUpKSkSDKQ7OxspKeno76+PhRW/H4/mpqaItqxROpSE1sHp8OD3LGpGDeCfVtI/diY7UJanI2SMoQO92dEyZoZvfTSkazmpb29HV988QXa29vR09MDl8sFABg/fjzi48+n9YkTJ2L9+vX47ne/C5PJhLvvvhu//vWvMWHCBGRnZ+MXv/gFMjMzUV5eLtUwSULBhnPc/kxaI2c9iRZocTZK6hA6nJ8RpWpm9DTjI1l4WbNmDZ599tnQ51dccQUA4I033sDs2bMBAAcOHIDP5wsdc99996GjowPLli3DyZMnUVRUhO3btyM2NlaqYZLIXB4vtqcegjOvAVdaLVg6lcGFSOu0Ohul1hCq1EyWnnZJmQRBEJQehJj8fj8SExOx+ckdsMeNUHo4hhLs2xJnj0FW0ijWthAR9aO/GZC8KScknwFZ9ZPpePbp8Th37usZH6u1BxW3t6Dy4Xcle91wnfKfQfbFy+Dz+ZCQkDDosarZKk3atcXdgiP2sygq2cm+LUREQ1BqJkuLtUsDYXihYaludaOobCdmJMUDYN8WIqJwKLGkpcXapYEwvFDUgn1buP2ZiEj9tFq71B+GF4rYFncLPI7j7NtCRKQxai1ijhTDC0WkJrYO+WUezEiKR34K+7YQkXropYcJDY3hhcKyxd2Ck9P3s28LEamSnnqY0NAYXmhQwe3PE3IsiLFaUDGJwYVIK4w0E6GnHiY0NIYXGlDvvi3c/kykLUabieCdno0lortKkzG4PF4GFyKNk+NO0Gqipx4mNDSGF+qjutUNoWQTzM6XkJwUz+BCpFHBmYje9DwTsXiJB3lTTsBsFmC19sBsFjTbw4SGxmUjAnB+tuXvls/Zt4VIZErVnRhtJkJPPUxoaAwvhEpfE5wlDSi2WjA+jcGFSCxK1p3oqZtquPTSw4SGxvBicDWxdXA6PJiXy54tRGJTcgeM1DMRRtrJROrD8GJgNbF17NtCJCGld8BINRMh9owSgxBFiuHFgJodVQCAK60WLJ3K4EIkFb3WnYg5o2S0Ld0kDu42MhCXx4tmRxXi7DFYXrAQS6cuUHpIRLqm1x0wYu5kMtqWbhIHZ14MYIu7BTllrwEOsG8LkYz0ugNGzBklpZfWSJsYXnSuutWNorKdSE6Kx43Z85QeDpHh6HEHjJg7mfS6tEbSYnjRsepWN/u2EJHoxJxRMuKWbho+hhcdqvQ1wZnXgCIHGFyISBJizSjpdWmNpMXwojPs20JEWqPHpTWSFsOLTtTE1gEA+7YQEZHuMbzoQLOjCldaLSjN+RZy4hlciIhI3xheNMzl8UIo2QSL1cKeLUREZBgMLxq0xd0Cj+M4nCUN7NtCRCQx3r5AfRheNCbYcG5GUjzyU1iUS0QkJd6+QJ0YXjSi0tcEAHCWNXD7MxGRTJS8MzgNjOFFA4J9W3LHpgJgcCEikgtvX6BODC8qx74tRETSG6iuhbcvUCeGF5WqbnXDflkb+7aQLum5AHKwc9PzeWvZYHUtvH2BOjG8qFCzowrFORaMHhmHG7MZXEhf9FwAOdi5AdDteWvdUHUtvH2B+jC8qITL48XfLZ+jqHgn+7aQrum5AHKwcwv+WY/nrXVD1bXw9gXqw/CiAsHtz+VJ8QDicWP2PKWHRCQZPRdADnVuej1vrRO7roXLg9JjeFFYMLgkJzG0kDHouQByqHPT63lrnZh1LXpeFlUT89CHkBS2uFtQ3epmcCHDWbzEg7wpJ2A2C7Bae2A2C7opgBzs3PR83loXF9eDbbt2Yt2D76Hi9hase/C9qMNG76XDc+csCARMfZYOSRyceVFApa8JzrIGTLbHICuJfVvIWIIXCj1Oqw91bno9bz0Qq65Fz8uiasLwIqMt7hacnL6ffVvI8PRcADnYuen5vOk8PS+LqgnDi0yaHVXIceCrGyly+zMRkR6xL4w8GF5k0Oyo4vZnIpXhjhCSgp6XRdWE4UUiLo8XACCUbGJwIVIZ7gghKXF5UHrcbSSBLe4WCCWbYHa+hDh7DIMLkcpwRwiRtkkWXh588EHMmjULdrsdo0aNCus5ixcvhslk6vMxf/58qYYoOpfH26dvy9KpC1Ax6TtKD4uIviG4I6Q37ggh0g7Jlo26u7tx0003obCwEDU1NWE/b/78+XjmmWdCn9tsNimGJ7rqVjeKSnZigtWC0SPZt4VIzbgjhEjbJAsv69atAwDU1tZG9DybzYb09HQJRiSdSl8TnMUN3P5MpBHcEUKkbaor2N2zZw9SU1MxevRolJSU4Ne//jXGjBkz4PFdXV3o6uoKfe73++UYZkilrwnOPAYXIi3hjhAibVNVeJk/fz4WLlyI7OxsHDx4EPfffz/KysrQ2NgIi8XS73PWr18fmuWRU7OjCgDgdIDBhUgiUm5n5o4QIu2KKLysWrUKv/nNbwY9Zv/+/Zg4cWJUg7nllltCf54yZQqmTp2KSy+9FHv27EFpaWm/z1m9ejVWrlwZ+tzv98PhcET1+uFi3xYi6XE7MxENJKLwcu+992Lx4sWDHpOTkzOc8VzwdyUnJ6OlpWXA8GKz2WQp6nV5vBBKNgEAgwuRDHpvZw7eJya4nZkzJkTGFlF4SUlJQUpKilRjucAnn3yC48ePIyMjQ7bX7E9w+/P51v7c+kwkB97gjogGIlmfl/b2drhcLrS3t6OnpwculwsulwunT3+9FXHixIl45ZVXAACnT5/GT3/6U7z99tv46KOPUF9fjwULFmD8+PFwOp1SDXNIvfu2MLgQyYfbmaXT2WnB4xsmYtVPpuPxDRPR2dl/TSGRWklWsLtmzRo8++yzoc+vuOIKAMAbb7yB2bNnAwAOHDgAn88HALBYLHj//ffx7LPP4uTJk8jMzMS8efPwq1/9SpFeL9Wtbtgva0N+mQfJSezbQiQ3bmeWBmuJSA9MgiAISg9CTH6/H4mJidj85A7Y40ZE9XcEtz/njk3FuBFjuJOISCG8eaL4Ht8wEWv/Kx+BgCn0mNksYN2D77GWiBR1yn8G2Rcvg8/nQ0JCwqDHqmqrtNJqYusAAE6Hh9ufiVSA25nFx1oi0gOGl6/UxNYhP+V8aAEYXIhIn1hLpG9Gma1keMH5vi1XWi1YOnWh0kMhIpIUa4n0y0j1TIYNLy6PF9tTD8GZ18C+LURkGLw1gn4ZqTeSIcNLcPtzuT0GWUmpmJNWpPSQiEhjtDw9z1oifTJSPZOhwkt1qxsdYzrgLGvg9mciipqRpucHo+UAp0dGqmcyTHipbnWjqHgncsemAuBsCxFFz0jT8wNhgFMfI9UzGSK8VPqa4Cw+37eFoYWIhstI0/MDYYBTHyPVM+k6vISWifIa2LeFiERjpOn5gTDAqZNR6pl0G16es/0VRcXtSE6KR34KgwsRicdI0/MDYYAjJek2vORnfITlBTcqPQwi0iEjTc8PhAGOlKTbexu1HX4SIxPsSg+HiEi3uNuIxMR7GxERSYgX7fOMUl9B6sPwQkQUAW4RJlKeeehDiIgoqPcW4XPnLAgETKEtwkQkD4YXIqIIBLcI98YtwkTyYnghIooAtwgTKY/hhYgoAouXeJA35QTMZgFWaw/MZoFbhIlkxoJdIqIIsMcLkfIYXoiIIsQtwkTK4rIRERERaQrDCxEREWkKwwsRERFpCsMLERERaQrDCxEREWkKwwsRERFpCsMLERERaQrDCxEREWkKwwsRERFpCsMLERERaQrDCxEREWmK7u5tJAgCAODUqU6FR0JEREThCl63g9fxweguvJw6dQoAMHXiXQqPhIiIiCJ16tQpJCYmDnqMSQgn4mhIIBDAkSNHMHLkSJhMJqWHE+L3++FwOPDxxx8jISFB6eGIjuenbTw/7dLzuQE8P62L5PwEQcCpU6eQmZkJs3nwqhbdzbyYzWaMHTtW6WEMKCEhQZc/oEE8P23j+WmXns8N4PlpXbjnN9SMSxALdomIiEhTGF6IiIhIUxheZGKz2bB27VrYbDalhyIJnp+28fy0S8/nBvD8tE6q89NdwS4RERHpG2deiIiISFMYXoiIiEhTGF6IiIhIUxheiIiISFMYXiTy0UcfYcmSJcjOzkZcXBwuvfRSrF27Ft3d3YM+7+zZs7jjjjswZswYxMfH44YbbsDRo0dlGnVkHnzwQcyaNQt2ux2jRo0K6zmLFy+GyWTq8zF//nxpBxqlaM5PEASsWbMGGRkZiIuLw9y5c+HxeKQdaBS++OILLFq0CAkJCRg1ahSWLFmC06dPD/qc2bNnX/DeLV++XKYRD+2xxx7DJZdcgtjYWMycORP//Oc/Bz1+8+bNmDhxImJjYzFlyhT85S9/kWmkkYvk3Gpray94n2JjY2UcbWTefPNNXH/99cjMzITJZMLWrVuHfM6ePXuQn58Pm82G8ePHo7a2VvJxRivS89uzZ88F75/JZILX65VnwBFYv349rrzySowcORKpqakoLy/HgQMHhnyeGP/2GF4k8uGHHyIQCOCJJ57ABx98gEceeQQbN27E/fffP+jz7rnnHtTV1WHz5s3429/+hiNHjmDhwoUyjToy3d3duOmmm7BixYqInjd//nx8+umnoY8XXnhBohEOTzTn99BDD+EPf/gDNm7ciKamJowYMQJOpxNnz56VcKSRW7RoET744APs2rULf/7zn/Hmm29i2bJlQz5v6dKlfd67hx56SIbRDu2ll17CypUrsXbtWrz33nu4/PLL4XQ68dlnn/V7/D/+8Q/ceuutWLJkCZqbm1FeXo7y8nK43W6ZRz60SM8NON/NtPf7dOjQIRlHHJmOjg5cfvnleOyxx8I6vq2tDddddx3mzJkDl8uFu+++Gz/84Q+xY8cOiUcanUjPL+jAgQN93sPU1FSJRhi9v/3tb7jjjjvw9ttvY9euXTh37hzmzZuHjo6OAZ8j2r89gWTz0EMPCdnZ2QN+/eTJk4LVahU2b94cemz//v0CAKGxsVGOIUblmWeeERITE8M6tqKiQliwYIGk4xFbuOcXCASE9PR04be//W3osZMnTwo2m0144YUXJBxhZP71r38JAIR33nkn9Nhf//pXwWQyCYcPHx7wecXFxcJdd90lwwgjN2PGDOGOO+4Ifd7T0yNkZmYK69ev7/f4//iP/xCuu+66Po/NnDlT+NGPfiTpOKMR6blF8u9RbQAIr7zyyqDH3HfffcLkyZP7PHbzzTcLTqdTwpGJI5zze+ONNwQAwokTJ2QZk5g+++wzAYDwt7/9bcBjxPq3x5kXGfl8PiQlJQ349b179+LcuXOYO3du6LGJEyciKysLjY2NcgxRFnv27EFqaipyc3OxYsUKHD9+XOkhiaKtrQ1er7fP+5eYmIiZM2eq6v1rbGzEqFGjMH369NBjc+fOhdlsRlNT06DPff7555GcnIy8vDysXr0aZ86ckXq4Q+ru7sbevXv7fN/NZjPmzp074Pe9sbGxz/EA4HQ6VfU+AdGdGwCcPn0a48aNg8PhwIIFC/DBBx/IMVxZaOW9G65p06YhIyMD11xzDRoaGpQeTlh8Ph8ADHqdE+v9092NGdWqpaUF1dXVePjhhwc8xuv1IiYm5oL6irS0NFWud0Zj/vz5WLhwIbKzs3Hw4EHcf//9KCsrQ2NjIywWi9LDG5bge5SWltbncbW9f16v94Ip6IsuughJSUmDjvN73/sexo0bh8zMTLz//vv42c9+hgMHDuDll1+WesiD+vzzz9HT09Pv9/3DDz/s9zler1f17xMQ3bnl5ubi6aefxtSpU+Hz+fDwww9j1qxZ+OCDD1R909pwDfTe+f1+dHZ2Ii4uTqGRiSMjIwMbN27E9OnT0dXVhaeeegqzZ89GU1MT8vPzlR7egAKBAO6++25cddVVyMvLG/A4sf7tceYlQqtWreq3mKr3xzf/Uzl8+DDmz5+Pm266CUuXLlVo5OGJ5vwiccstt+Df//3fMWXKFJSXl+PPf/4z3nnnHezZs0e8kxiE1OenJKnPbdmyZXA6nZgyZQoWLVqE5557Dq+88goOHjwo4lnQcBUWFuIHP/gBpk2bhuLiYrz88stISUnBE088ofTQKAy5ubn40Y9+hIKCAsyaNQtPP/00Zs2ahUceeUTpoQ3qjjvugNvtxosvvijL63HmJUL33nsvFi9ePOgxOTk5oT8fOXIEc+bMwaxZs/Dkk08O+rz09HR0d3fj5MmTfWZfjh49ivT09OEMO2yRnt9w5eTkIDk5GS0tLSgtLRXt7x2IlOcXfI+OHj2KjIyM0ONHjx7FtGnTovo7IxHuuaWnp19Q7Pnll1/iiy++iOjnbObMmQDOzypeeumlEY9XLMnJybBYLBfsyhvs3016enpExyslmnP7JqvViiuuuAItLS1SDFF2A713CQkJmp91GciMGTPw1ltvKT2MAd15552hwv+hZvfE+rfH8BKhlJQUpKSkhHXs4cOHMWfOHBQUFOCZZ56B2Tz4RFdBQQGsVivq6+txww03ADhfcd7e3o7CwsJhjz0ckZyfGD755BMcP368z8VeSlKeX3Z2NtLT01FfXx8KK36/H01NTRHvyIpGuOdWWFiIkydPYu/evSgoKAAA7N69G4FAIBRIwuFyuQBAtvduIDExMSgoKEB9fT3Ky8sBnJ/Crq+vx5133tnvcwoLC1FfX4+777479NiuXbtk+3cWrmjO7Zt6enqwb98+XHvttRKOVD6FhYUXbK1V43snJpfLpfi/s/4IgoAf//jHeOWVV7Bnzx5kZ2cP+RzR/u1FU1FMQ/vkk0+E8ePHC6WlpcInn3wifPrpp6GP3sfk5uYKTU1NoceWL18uZGVlCbt37xbeffddobCwUCgsLFTiFIZ06NAhobm5WVi3bp0QHx8vNDc3C83NzcKpU6dCx+Tm5govv/yyIAiCcOrUKeEnP/mJ0NjYKLS1tQmvv/66kJ+fL0yYMEE4e/asUqcxoEjPTxAEobKyUhg1apTw6quvCu+//76wYMECITs7W+js7FTiFAY0f/584YorrhCampqEt956S5gwYYJw6623hr7+zZ/NlpYW4YEHHhDeffddoa2tTXj11VeFnJwc4eqrr1bqFPp48cUXBZvNJtTW1gr/+te/hGXLlgmjRo0SvF6vIAiC8P3vf19YtWpV6PiGhgbhoosuEh5++GFh//79wtq1awWr1Srs27dPqVMYUKTntm7dOmHHjh3CwYMHhb179wq33HKLEBsbK3zwwQdKncKgTp06Ffq3BUCoqqoSmpubhUOHDgmCIAirVq0Svv/974eOb21tFex2u/DTn/5U2L9/v/DYY48JFotF2L59u1KnMKhIz++RRx4Rtm7dKng8HmHfvn3CXXfdJZjNZuH1119X6hQGtGLFCiExMVHYs2dPn2vcmTNnQsdI9W+P4UUizzzzjACg34+gtrY2AYDwxhtvhB7r7OwU/vM//1MYPXq0YLfbhe9+97t9Ao+aVFRU9Ht+vc8HgPDMM88IgiAIZ86cEebNmyekpKQIVqtVGDdunLB06dLQf8JqE+n5CcL57dK/+MUvhLS0NMFmswmlpaXCgQMH5B/8EI4fPy7ceuutQnx8vJCQkCDcdtttfULZN38229vbhauvvlpISkoSbDabMH78eOGnP/2p4PP5FDqDC1VXVwtZWVlCTEyMMGPGDOHtt98Ofa24uFioqKjoc/yf/vQn4Vvf+pYQExMjTJ48Wdi2bZvMIw5fJOd29913h45NS0sTrr32WuG9995TYNThCW4N/uZH8JwqKiqE4uLiC54zbdo0ISYmRsjJyenzb1BtIj2/3/zmN8Kll14qxMbGCklJScLs2bOF3bt3KzP4IQx0jev9fkj1b8/01QCIiIiINIG7jYiIiEhTGF6IiIhIUxheiIiISFMYXoiIiEhTGF6IiIhIUxheiIiISFMYXoiIiEhTGF6IiIhIUxheiIiISFMYXoiIiEhTGF6IiIhIUxheiIiISFP+Px9AK85+HUcOAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
],
"source": [
"#Plotting decision regions\n",
"\n",
"# Generate a meshgrid over which to make predictions\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"plt.figure(2)\n",
"Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
"Z = Z.reshape(xx.shape)\n",
"plt.contourf(xx, yy, Z, alpha=0.4) # Will reveal decision boundary\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DGW5ajIx4i8r"
},
"source": [
"SVM"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "-1oO-ZHw4i8t"
},
"outputs": [],
"source": [
"from sklearn.svm import SVC"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "C116dfNg4i8t"
},
"outputs": [],
"source": [
"#clf=SVC(kernel='linear',C=np.inf)\n",
"\n",
"# If the above line gives you an error message (which it does in some versions of Python),\n",
"# then use the following line instead:\n",
"\n",
"clf=SVC(kernel='linear',C=1000000)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 75
},
"id": "OaZfTg854i8u",
"outputId": "0fe621f4-c6fd-409b-b39d-55164d25dfa2"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"SVC(C=1000000, kernel='linear')"
],
"text/html": [
"<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=1000000, kernel=&#x27;linear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(C=1000000, kernel=&#x27;linear&#x27;)</pre></div></div></div></div></div>"
]
},
"metadata": {},
"execution_count": 11
}
],
"source": [
"clf.fit(data,classes)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 447
},
"id": "h8TjMkbT4i8u",
"outputId": "cbfc7498-4282-4a17-ceb7-86c2b39aa31c"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7b1ea2e5eaa0>"
]
},
"metadata": {},
"execution_count": 12
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGdCAYAAADaPpOnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDQ0lEQVR4nO3df3ST9d0//mcSm7ShtFD6G1JshRWkILYIK3YWWiQUt5sO563OsxVlMLh1R4abA28Hw82b+mPoVj2it9XqPZmOTxVhOH5YZM6udorNkTjkm1KkCgQQaUJLKdi8v39gIpU2TdpcuX49H+f0HJpeIe+rKVzPvt+v1/syCCEEiIiIiFTCKPcAiIiIiMLB8EJERESqwvBCREREqsLwQkRERKrC8EJERESqwvBCREREqsLwQkRERKrC8EJERESqcpncA4g0n8+HI0eOYOjQoTAYDHIPh4iIiEIghMDp06eRmZkJozH43IrmwsuRI0dgs9nkHgYRERENwKeffopRo0YFPUZz4WXo0KEAgBf+8CqscUNkHg0RERGF4kxnByrunh+4jgejufDiXyqyxg1heCEiIlKZUEo+WLBLREREqsLwQkRERKrC8EJERESqwvBCREREqsLwQkRERKrC8EJERESqwvBCREREqsLwQkRERKrC8EJERESqwvBCREREqqK52wMQEfXGeK4LWXWbYD1xBGdSMtFaWg6f2SL3sIhoABheiHRErxdw47kuFD6wFAmtLgijCQZfN0bWb0fDqqd0cf5EWiPpstHbb7+N733ve8jMzITBYMCmTZuCHr97924YDIZLPtxut5TDJNIF/wV8/J+fQNau1zH+z0+g8IGlMJ7rkntoksuq24SEVhcMQsDY/SUMQiCh1YWsuk1yD42IvvL6v1tCPlbS8NLR0YGrrroKTz75ZFjP279/P44ePRr4SE1NlWiERPqh5wu49cQRCKOpx2PCaIL1xBGZRkREflUtTlR6GnH59W+E/BxJl43KyspQVlYW9vNSU1MxbNiwyA+ISMf8F3BD95eBx/RyAT+TkgmDr7vHYwZfN86kZMo0IiICgEpPI+zF9cgdlYozp1NCfp4iu40mT56MjIwMXH/99aivr5d7OESaoOcLeGtpObxZYyEMBvhMl0EYDPBmjUVrabncQyPSpUpP44XgkleP2bnjMTOtCNelfjvk5yuqYDcj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\n"
},
"metadata": {}
}
],
"source": [
"# Plotting decision regions\n",
"\n",
"# Generate a meshgrid over which to make predictions\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"plt.figure(2)\n",
"Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
"Z = Z.reshape(xx.shape)\n",
"plt.contourf(xx, yy, Z, alpha=0.4) # Will reveal decision boundary\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)\n",
"\n",
"#plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zsmD5_7K4i8v"
},
"source": [
"This plot looks much more like the optimal solution."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZLjqJVwV4i8v"
},
"source": [
"# 2. Non-linearly separable case 1"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vWr5EI7Z4i8v"
},
"source": [
"This is how the data were generated"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "N0CvxHQY4i8v"
},
"outputs": [],
"source": [
"nbpts1 = 50 # Number of points in first cluster (vary to explore effect of number of points)\n",
"mu1 = [-2,2] # the mean of the first cluster (this is a vector as we are in 2D) -- move it around\n",
"sigma1 = [[1.5,0],[0,1.9]] # the covariance matrix of the first cluster -- this one is not correlated\n",
"data1 = np.random.multivariate_normal(mu1,sigma1,nbpts1) #\n",
"\n",
"nbpts2 = 50 # Number of points in second cluster (vary to explore effect of number of points)\n",
"mu2 = [2,-2] # the mean of the second cluster (this is a vector as we are in 2D) -- move it around\n",
"sigma2 = [[1.2,0.2],[0.2,2.3]] # the covariance matrix of the second cluster -- this one is correlated\n",
"data2 = np.random.multivariate_normal(mu2,sigma2,nbpts2) #\n",
"\n",
"data = np.concatenate((data1,data2),axis=0) # Concatenate the data by row"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vp-O_tko4i8w"
},
"source": [
"Load the data you used"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "NP0znSEt4i8w"
},
"outputs": [],
"source": [
"data=np.load('data1.npy')\n",
"classes=np.load('classes1.npy')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 430
},
"id": "D7g4i5Bm4i8w",
"outputId": "d86e6c36-41e4-44d6-af3a-72e2b157ba37"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"# Plot the data, different colours for each class\n",
"plt.figure(1)\n",
"\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=14)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=14)\n",
"axes = plt.gca()\n",
"(x_min,x_max) = axes.get_xlim()\n",
"(y_min,y_max) = axes.get_ylim()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4g02cxAk4i8w"
},
"source": [
"## Prioritising large margin separating majority of data points:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 447
},
"id": "5xUNI-v74i8w",
"outputId": "0ce4de2b-8ffc-4478-eb09-5102c036ee7d"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7b1ea2c17970>"
]
},
"metadata": {},
"execution_count": 18
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"clf=SVC(kernel='linear',C=0.01)\n",
"clf.fit(data,classes)\n",
"\n",
"#Plotting decision regions\n",
"\n",
"# Generate a meshgrid over which to make predictions\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"plt.figure(2)\n",
"Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
"Z = Z.reshape(xx.shape)\n",
"plt.contourf(xx, yy, Z, alpha=0.4) # Will reveal decision boundary\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oPfYxRy74i8x"
},
"source": [
"Here the decision boundary is roughly midway between the two main clusters of points, but there are 4 points classified incorrectly and 5 points very close to the decision boundary."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ps4zuOzZ4i8x"
},
"source": [
"## Prioritising points being on correct side of margin:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 447
},
"id": "wu88ZJ6O4i8x",
"outputId": "b1973719-96b1-4d7e-b87e-aa2dd119909a"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7b1edc724580>"
]
},
"metadata": {},
"execution_count": 19
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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1Lp163TfffcN+bflNk8fehd0tm2rublZjz32mBYvXqxz586ZHhIy0NHRoZaWFm3fvt30UELr448/ViqV0owZM4Y8PmPGDJ05c8bQqDCWdDqtp556SnfddZcaGhpMDwfX2bNnj06cOKF33nmnqNdlRsQFGzdulGVZo36dOXNGLS0tunTpkjZt2mR6yKGU6fs02IULF3TvvffqwQcf1Nq1aw2NHPCndevWqb29XXv27DE9FFzn/PnzevLJJ/XP//zPKisrK+q1afHugp6eHv3mN78Z9Tl1dXX6+te/roMHD8qyrIHHU6mUotGoHn74Yb344otuDzXUMn2fSkpKJEldXV26++679Qd/8AfatWuXIhFyvCn9/f2qqKjQz372M61evXrg8UceeUS//e1v9corr5gbHIa1fv16vfLKK/rFL36h2tpa08PBdfbv36+vfe1rikajA4+lUilZlqVIJKJkMjnkzwqJIGJQZ2enEonEwPddXV1qamrSz372My1ZskSzZs0yODoMduHCBS1btky33XabfvKTn7j2DxKZW7Jkie644w61tLRIujbtX1NTo/Xr12vjxo2GRweHbdt64okn9PLLL+uNN95QfX296SFhGJcuXdIHH3ww5LFHH31U8+bN0/e+9z1Xl9KoETGopqZmyPcTJ06UJN1yyy2EEA+5cOGC7r77bs2ePVvbt29XT0/PwJ/NnDnT4MjCbcOGDXrkkUe0ePFi3XHHHXr22Wd1+fJlPfroo6aHhkHWrVun3bt365VXXtGkSZPU3d0tSZo8ebLKy8sNjw6OSZMm3RA2JkyYoJtuusn1eh6CCDCGI0eOqKOjQx0dHTcERCYUzXnooYfU09OjzZs3q7u7WwsXLtRrr712QwErzGptbZUk3X333UMef+GFF9Tc3Fz8AcFzWJoBAADGUG0HAACMIYgAAABjCCIAAMAYgggAADCGIAIAAIwhiAAAAGMIIgAAwBiCCAAAMIYgAgAAjCGIAAAAYwgiAADAGIIIAAAw5v8Dd1CsMqe1e+EAAAAASUVORK5CYII=\n"
},
"metadata": {}
}
],
"source": [
"clf=SVC(kernel='linear',C=100)\n",
"clf.fit(data,classes)\n",
"\n",
"#Plotting decision regions\n",
"\n",
"# Generate a meshgrid over which to make predictions\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"plt.figure(2)\n",
"Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
"Z = Z.reshape(xx.shape)\n",
"plt.contourf(xx, yy, Z, alpha=0.4) # Will reveal decision boundary\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aU3GIm1Q4i8y"
},
"source": [
"Here the decision boundary has ended up closer to the blue cluster, but only 2 points are classified incorrectly, and there are only really 3 points very close to the decision boundary."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wCMPgtl44i8y"
},
"source": [
"# 3. Non-linearly separable case 2\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "gAb1elWK4i8y"
},
"outputs": [],
"source": [
"def distance_feature(x1,x2): # this function computes the distance of a point from (x1,x2)=(5,5)\n",
" return np.sqrt((x1-5)**2+(x2-5)**2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "EWBG6Baw4i8y"
},
"outputs": [],
"source": [
"nbpts=100\n",
"\n",
"classes=np.zeros(nbpts)\n",
"data=np.random.uniform(low=0,high=10,size=(nbpts,2))\n",
"for i in range(nbpts):\n",
" d=distance_feature(data[i,0],data[i,1])\n",
" if d<3:\n",
" classes[i]=1\n",
" else:\n",
" classes[i]=0"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 430
},
"id": "w15OXk0k4i8z",
"outputId": "24f495c7-d1a1-4381-ff64-6f7aae3e03c9"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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rOPDsY6H6eNsXcEpAABwmzeZDwAAYAeCDwAAECuCDwAAECuCDwAAECtvgo+NGzdq+vTpKisr0+zZs3XgwAHTQ3JOS0uLrrvuOlVUVGjSpElauHChurq6TA/LeY8++qiKiorU1NRkeihO+uSTT3TnnXfqggsuUHl5ua688kodOnTI9LCc0tvbq9WrV6u2tlbl5eW6+OKL9fDDD49ojxDkt3v3bi1YsEDV1dUqKirSq6++mvP9IAi0Zs0aTZkyReXl5WpoaNDRo0cjH5cXwccrr7yi5uZmPfjggzp8+LDq6uo0d+5cnTx50vTQnLJr1y41NjZq37592rFjh7799lvdeuutOn36tOmhOevgwYN65plndNVVV5keipM+//xzzZkzR9/5zne0fft2/f3vf9fvf/97nX/++aaH5pT169dr06ZNeuqpp/SPf/xD69evV2trq5588knTQ0u806dPq66uThs3bhzy+62trXriiSf09NNPa//+/TrvvPM0d+5cff3119EOLPDArFmzgsbGxv6ve3t7g+rq6qClpcXgqNx38uTJQFKwa9cu00Nx0qlTp4JLLrkk2LFjR/CDH/wgWL58uekhOefXv/51cOONN5oehvPmz58f3H333TmP/ehHPwoWLVpkaERukhRs27at/+u+vr5g8uTJwWOPPdb/2BdffBGUlpYGf/zjHyMdi/OZj2+++Ubt7e1qaGjof2zcuHFqaGjQ3r17DY7Mfd3d3ZKkiRMnGh6JmxobGzV//vyc9zbC9frrryuVSun222/XpEmTdM011+jZZ581PSzn3HDDDdq5c6eOHDkiSers7NSePXs0b948wyNz20cffaTjx4/n/A2prKzU7NmzIz8/WrexXNg+++wz9fb2qqqqKufxqqoqvf/++4ZG5b6+vj41NTVpzpw5uuKKK0wPxzkvv/yyDh8+rIMHD5oeitM+/PBDbdq0Sc3NzfrNb36jgwcPatmyZRo/fryWLFlienjOWLlypdLptC699FIVFxert7dX69at06JFi0wPzWnHjx+XpCHPj9nvRcX54ANmNDY26r333tOePXtMD8U5x44d0/Lly7Vjxw6VlZWZHo7T+vr6lEql9Mgjj0iSrrnmGr333nt6+umnCT5CtHXrVr300kvasmWLZs6cqY6ODjU1Nam6uprj7Cjnp10uvPBCFRcX68SJEzmPnzhxQpMnTzY0Krfde++9euONN/TWW29p6tSppofjnPb2dp08eVLXXnutSkpKVFJSol27dumJJ55QSUmJent7TQ/RGVOmTNHll1+e89hll12mjz/+2NCI3PTAAw9o5cqVuuOOO3TllVfqZz/7me6//361tLSYHprTsudAE+dH54OP8ePHq76+Xjt37ux/rK+vTzt37tT1119vcGTuCYJA9957r7Zt26a//vWvqq2tNT0kJ91yyy1699131dHR0X9LpVJatGiROjo6VFxcbHqIzpgzZ86g5eJHjhzRRRddZGhEbvrqq680blzu6ai4uFh9fX2GRuSH2tpaTZ48Oef8mE6ntX///sjPj15MuzQ3N2vJkiVKpVKaNWuWNmzYoNOnT+uuu+4yPTSnNDY2asuWLXrttddUUVHRP2dYWVmp8vJyw6NzR0VFxaA6mvPOO08XXHAB9TUhu//++3XDDTfokUce0U9+8hMdOHBAmzdv1ubNm00PzSkLFizQunXrNG3aNM2cOVN/+9vf9Pjjj+vuu+82PbTE+/LLL/XBBx/0f/3RRx+po6NDEydO1LRp09TU1KS1a9fqkksuUW1trVavXq3q6motXLgw2oFFupbGIk8++WQwbdq0YPz48cGsWbOCffv2mR6ScyQNeXv++edND815LLWNzp/+9KfgiiuuCEpLS4NLL7002Lx5s+khOSedTgfLly8Ppk2bFpSVlQXf+973gt/+9rdBT0+P6aEl3ltvvTXk3+UlS5YEQZBZbrt69eqgqqoqKC0tDW655Zagq6sr8nEVBQEt5AAAQHycr/kAAAB2IfgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACxIvgAAACx+j+qvCOrMoFtDgAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"plt.figure(1)\n",
"\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=14)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=14)\n",
"axes = plt.gca()\n",
"(x_min,x_max) = axes.get_xlim()\n",
"(y_min,y_max) = axes.get_ylim()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "sU4k9qpk4i8z"
},
"outputs": [],
"source": [
"X=np.zeros((nbpts,3))\n",
"X[:,0:2]=data\n",
"X[:,2]=distance_feature(data[:,0],data[:,1])\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 447
},
"id": "xl2qGrjm4i8z",
"outputId": "1ed842f9-57cf-4ef4-a7b5-7698fb40e52b"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7b1ea2bd3df0>"
]
},
"metadata": {},
"execution_count": 24
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"clf=SVC(kernel='linear',C=100)\n",
"clf.fit(X,classes)\n",
"\n",
"#Plotting decision regions\n",
"\n",
"# Generate a meshgrid over which to make predictions\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"zz=distance_feature(xx.ravel(), yy.ravel())\n",
"plt.figure(2)\n",
"Z = clf.predict(np.c_[xx.ravel(), yy.ravel(), zz.ravel()])\n",
"Z = Z.reshape(xx.shape)\n",
"plt.contourf(xx, yy, Z, alpha=0.4) # Will reveal decision boundary\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 447
},
"id": "34HHaEAE4i8z",
"outputId": "626ef7ff-aa30-4eff-9fec-11893bcaa8a7"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7b1ea2a72e00>"
]
},
"metadata": {},
"execution_count": 25
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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gzVs2DDNnDlTe/fudXtYgbd48WIZhqF58+a5PZRA+utf/6qf/OQnOvPMM5WTk6PRo0fr/fffd3tYgZJIJLRgwQKVlpYqJydH3/zmN3X//ff36IwQdO3dd9/VjBkzVFRUJMMwtHbt2rS/N01TCxcu1Nlnn62cnBxNmTJFdXV1to8rFOFj9erVqqqq0i9+8Qvt3LlTF154oaZNm6ZDhw65PbRA2bRpk+bMmaM//OEPevvtt3X8+HFNnTpVR49ySKBdtm/frl/96le64IIL3B5KIH322WeaOHGi+vfvr3Xr1unPf/6z/vu//1tnnHGG20MLlIcffljLly/X448/rj179ujhhx/WI488omXLlrk9NN87evSoLrzwQj3xxBOd/v0jjzyixx57TCtWrNC2bduUm5uradOm6csvv7R3YGYIXHLJJeacOXPa/5xIJMyioiJz0aJFLo4q+A4dOmRKMjdt2uT2UALpiy++MMvLy823337b/M53vmPeeeedbg8pcH72s5+ZkyZNcnsYgXfllVeaN910U9pj11xzjTlr1iyXRhRMksxXXnml/c/JZNIsLCw0H3300fbHPv/8czM7O9t84YUXbB1L4Gc+WltbtWPHDk2ZMqX9sUgkoilTpmjr1q0ujiz4jhw5IkkaOnSoyyMJpjlz5ujKK69M+96GtV577TWNHz9e1113nYYNG6axY8fqySefdHtYgXPZZZepurpaH3zwgSTpj3/8ozZv3qzp06e7PLJg279/v5qamtJ+h+Tl5WnChAm2Xx89d7Cc1T755BMlEgkVFBSkPV5QUKC//OUvLo0q+JLJpObNm6eJEyeqoqLC7eEEzosvvqidO3dq+/btbg8l0Orr67V8+XJVVVXp5z//ubZv36477rhDWVlZmj17ttvDC4z58+crFotp5MiRikajSiQSevDBBzVr1iy3hxZoTU1NktTp9TH1d3YJfPiAO+bMmaPa2lpt3rzZ7aEETmNjo+688069/fbbGjBggNvDCbRkMqnx48froYcekiSNHTtWtbW1WrFiBeHDQr/+9a/1/PPPa9WqVTr//PO1a9cuzZs3T0VFRbzPARX4ZZezzjpL0WhUBw8eTHv84MGDKiwsdGlUwTZ37ly98cYb2rhxo4YPH+72cAJnx44dOnTokC666CL169dP/fr106ZNm/TYY4+pX79+SiQSbg8xMM4++2ydd955aY+NGjVKDQ0NLo0omO6++27Nnz9f119/vUaPHq1//ud/1l133aVFixa5PbRAS10D3bg+Bj58ZGVlady4caqurm5/LJlMqrq6WpdeeqmLIwse0zQ1d+5cvfLKK3rnnXdUWlrq9pACqbKyUrt379auXbvaP8aPH69Zs2Zp165dikajbg8xMCZOnHjadvEPPvhA55xzjksjCqZjx44pEkm/HEWjUSWTSZdGFA6lpaUqLCxMuz7GYjFt27bN9utjKJZdqqqqNHv2bI0fP16XXHKJli5dqqNHj+rGG290e2iBMmfOHK1atUqvvvqqBg8e3L5mmJeXp5ycHJdHFxyDBw8+rY4mNzdXZ555JvU1Frvrrrt02WWX6aGHHtIPfvADvffee1q5cqVWrlzp9tACZcaMGXrwwQdVUlKi888/XzU1NVqyZIluuukmt4fme83Nzdq3b1/7n/fv369du3Zp6NChKikp0bx58/TAAw+ovLxcpaWlWrBggYqKijRz5kx7B2brXhoPWbZsmVlSUmJmZWWZl1xyifmHP/zB7SEFjqROP55++mm3hxZ4bLW1z+uvv25WVFSY2dnZ5siRI82VK1e6PaTAicVi5p133mmWlJSYAwYMMMvKysz/+I//MOPxuNtD872NGzd2+nt59uzZpmm2bbddsGCBWVBQYGZnZ5uVlZXm3r17bR+XYZq0kAMAAM4JfM0HAADwFsIHAABwFOEDAAA4ivABAAAcRfgAAACOInwAAABHET4AAICjCB8AAMBRhA8AAOAowgcAAHAU4QMAADiK8AEAABz1/wFb5rFFOuLsfgAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"clf=SVC(kernel='linear',C=0.05)\n",
"clf.fit(X,classes)\n",
"\n",
"#Plotting decision regions\n",
"\n",
"# Generate a meshgrid over which to make predictions\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"zz=distance_feature(xx.ravel(), yy.ravel())\n",
"plt.figure(2)\n",
"Z = clf.predict(np.c_[xx.ravel(), yy.ravel(), zz.ravel()])\n",
"Z = Z.reshape(xx.shape)\n",
"plt.contourf(xx, yy, Z, alpha=0.4) # Will reveal decision boundary\n",
"plt.scatter(data[classes == 0, 0], data[classes ==0 , 1],c='red',s=12)\n",
"plt.scatter(data[classes == 1, 0], data[classes ==1 , 1],c='blue',s=12)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cmit_l2E4i80"
},
"source": [
"The decision boundary moves in towards the centre. There are more data points further out, so you get fewer points close to the boundary if it shrinks in towards the centre."
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "m057KFMW5Ge1"
},
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.13"
},
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 0
}