{ "cells": [ { "cell_type": "markdown", "id": "4d7f97d1-3b38-4d66-9611-325bccb86fdc", "metadata": { "tags": [] }, "source": [ "# Non-linear Support Vector Machine method" ] }, { "cell_type": "code", "execution_count": 26, "id": "0fd6d7d9-d082-4a1b-9072-da76ae203868", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "n = 10\n", "w = [ 0.02566958 0.0780341 0.03119186 -0.1597809 -0.02309605 -0.23775258\n", " -0.0033852 0.02248346 -0.02842173 -0.01496091]\n", " b = -2.6431891864587764\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPcAAAD8CAYAAACrSzKQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsnXd4VMXXgN/Zmh4IBJDei0joAoKKdEQEsYANFctPpSqfBZVeRJQiShXBhgVRQUSQbqNIB+kgvYaWttlsO98fN0CS3fRNAuG+z3OfJPfemTl3s+fOzJkz5ygRQUdHp/BhKGgBdHR08gZduXV0Cim6cuvoFFJ05dbRKaToyq2jU0jRlVtHp5CiK7eOTiFFV24dnUKKrtw6OoUUU0E0Wrx4calYsWJBNK2jc8OzefPm8yISmdl9BaLcFStWZNOmTQXRtI7ODY9S6mhW7tOH5To6hRRduXV0Cim6cuvoFFJ05dbRKaToyq2jU0jxi3IrpYoopeYrpfYqpfYopZr5o14dHZ2c46+lsA+BpSLykFLKAgT5qV4dHZ0ckmvlVkqFAXcBTwOIiANw5LZenZxzwXaBv479RdHAorQo3wKD0mdfNyP+6LkrA9HAHKVUXWAz0F9EEvxQt042GfvXWIavHoLF40bEQ7jBxPLW46jZ/JWCFk0nn/HHK90ENACmiUh9IAF4M+1NSqkXlFKblFKboqOj/dCsTlrWHFnDyDXDsHucxOIhTsFJj4v2K/4P2f5dQYunk8/4Q7lPACdEZEPy3/PRlD0VIjJTRBqJSKPIyEzdYnVywNSNU7G5k1KdEwUXxcM/ywYVkFQ6BUWulVtEzgDHlVI1kk+1Bnbntl6d7HMx8aLP8wYgNuFs/gqjU+D4y9LSF5irlNoB1APG+KlenWzwYK0HCUJ5nXcCTcPK579AOgWKX5RbRLYlD7mjRKSriFzyR7062eOZ+s9QI7wCwcl/GwSCBCYZQgltM7xAZdPJf/Q1kkJEgCmAVS9u5dEKraiizDTHyG/BFXmh6yyIeqSgxdPJZwpkP7dO3nA67jRNZjXhUkI08eLkLPBw4gk22M6jD8pvPvSeuxAxYOkATsedJN5tByBeQbTHxcvLXoEd8wpYOp38RlfuQsTP+3/GJZ5U59wKlnoceFboc+6bDV25CxHpuZkaABV7In+F0SlwdOUuRHSv3R1LmnNmga6YUOHlCkQmnYJDV+4CIMYew+QNk3l43sMMXjWYE37qVce3G0+10LKEorAIhApURDHFVBRaD/FLGzo3DkpE8r3RRo0ayc0a/fR03GkazmxITOJFbO4krAJmZWDF3SNo0vLtHNXpdDtxi5sAUwAe8bBsxTvs3jybGvY4OoRVxNhmqL4UVohQSm0WkUaZ3acvheWQw5cOcy7hHHVK1iHInPXt62+vepvohHO4xA1AkoIkPPT6fSi7IqplSwkv2C7w4txOLDy1AY9AY2Mgn9wzgg5tx9Chre4keLOjK3c2OW87zwOz72TzhX2YRXArxZiop+j3wJwslV+0f9FVxU7JQXFzYfkQimVRuUWEVjMasCf2GE4ABRvcibRY+ToHrEWIbPxcNp5KpzCiz7mzyYOz72LDhb0kIsQqSEAYtOMzli3P2pA6vV5eAGvc6SzL8ffxv/kv9rim2FfqUOAQYfbKnA3v/UGiM5Ejl4+w5fQWhqwewlsr32Lr6a0FJs/NjN5zZ4Ojl4/yz4W9qRQKwAaM3/Ah7dqOzrB8bFIsj9/2OJP+Hksi12wdZoF2mAjJhkX74MWDiAhp94kkKthlz3/Xfo94ePObrnx84BdcIjhVsmgCk/4ay4DqXRjz6E/5LtfNjK7c2SDaFo1FBLv3xitOuRLTLXcp8RJPfdGW385sQYlgUGABrKL12JUx8Fk2LdpRJaMQpYDUBtEggdsDimW5Hn8xcl4PphxYRCJcfeFI8u+JCJP2L6DHn+8Tdedr+S7bzYo+LM8GtSNr4/HhKGIR6Ggtmm65ez9pwm9nNuNASFKQiPbBDzMVZTnBbAurSfH7P86WMa3BLQ1oUvxWAlKcMwqEKgM9276b9YfyAyLChL0/YMvgHofAT3+9n28y6ejKnS0CzYG8X7dXqtCuFoEIZeD/2vhWqH/P/cuOSwe9Ika6BA4aoOmweNSru3K0VLX4hY30rdaZ4spIqMDD5jA2d5hCWMOns11XbnC4HcSncXtNiwEwJ8Xmj0A6gD4szzYvdv2E6qG3MH79RE46bXSwFmVgm7HpWqePXj6Kycfc2KVgvyN3X/ZAcyDjHvuZcbmqJfdYTVYqGMwclrTWiGuYgEdCM7cpuD1uTsSeoGhgUcKsYX6U8uZDV+4c0Kr1CFq1HpGle+uVqkeSj7lxgMDd1og8kK5g+LDJK3RfP46rlofkx7Wg9drvG0KpmonBce7OuQz45SVsjnjcIjxoDuOTjh8T1ODJPJS88KIPy/OYMmFl6FnhnlRDeZNAqFK81KbwOJp0bv8ev7YYwl3GIEqJoqXByiBTOB8SwMHQ6vTOJGDEmiNreGFhL8474rAl2yZ+dMbS85fn9e2qOUR3P80HPOJh2sLnmbzzK2LcTu41hzOizRjKNnmpoEW7bmj/ZXuW/bfM67xV4HhoDSIH7vVbWxcTLxKXFEf58PIo5WPp4zpHdz+9jjAoA727fkrvrp8WtCjXLUcuH/F53gqcjjuJP4JhX7Bd4InPW7Pq3A6MIkQYTHza7DXaF1JXXV25da4LWpRvwaGL+0nrmOsCPjabWDqxPEUDijKg6QCervd0lnrc87bzTFw3kd8O/UaZ0DLsP7WJQ/GnrrrrnhQX3da+y6bA4tRq8WoePFXBog/Lda4LDl86TP2ptxHnsnFlUS1IwKAgCQPO5LNBKJ6t3J7JTy7JsL5zCeeoO70ulxLOkyQuzcDn431gFHjWUpQZb/mO+X49ktVhuW5QKyBcHhcF8WK9XqlUtBKbXtpO97LNuUWZqC8G7jeH4VLGq4oNYEOY+d9SzvwzM8P6Bq8aTHT8OU2xwadigxaG6lAulySvV3TlzmcW719M1Q9KYRlppthwA2PGlsSz/duCFuu6oGpEVb5+9i9ODXGyZZibc+UaYfexg84qsHVN+stqc3fO5ZMtM3GTsWMNaEuS91jz3103P9CVOx9ZfXg1j8zrxqGEswhwScFo+zmGLHxWX+7xQeWilTH6GNy4gLI238PoS4mXeH5BL9IdE6W4YBIIVwZeymd33fzCb8qtlDIqpbYqpX7xV53XMzanjUuJ2dt9NXTNUGzu1I6oNgWTPDbsK4b5UbrCwYAmA7CmMZyZBW7FQJ3wCj7LLDu0DJPH5fOaQaAaitoYKCOK5yxF2dpxKhGNevld9usBf1rL+wN7gELtM3jBdoFnv+rAktObEIHqRiuz7xzC7S3fyrTsvgv7fJ4XIDr2BHoIw9TULlGb75u9wXPrxhEjHlxAfQzMMaa/g85oMIJ4vOfYApEo1pqKZ3uTzo2KX3pupVRZoBMwyx/1Xa+ICG1nNmLJ6U04AKeCXZ4kWv/+DsfXT820fJ0SdXyeNwAlw8r6V9hCwr3t3uV4l694xlIUA7BHeajvvkCPRc9j3/qV1/3tq7TH7WOZLBD4QYWkq9iHLx3m8R8fp+QHJan5cU1mbp55wxs8/TUsnwS8DulbMJRSLyilNimlNkVHR/up2fxl46mN7I856rXDyyHC9NVDMy0/8p6RBBpTBx8OEhhkCMbSZpjf5LzR2Hl2Jx9t+Ihv//0Wm9N74+hnHhtzPDbsCmLR4s4tdMbSb9ELXraKUGsoXzcZSCDaZ2sVCBToawii+QO+XWBPxZ2i4cyGfLvzG84lnGPfhX288suLDJx7Xx49cf6Qa+VWSt0HnBORzRndJyIzkzOBNoqM9Ie/Uf5z+NJhDD7e5g4Fe5MuZ1q+WblmLH58KfXDK2IGyorig4BbGNTl05timJgWj3jo+VNPmnzSiNeX9ueF+Y9SZkwoW/4Ym+q+9/5+D5s7KdU5u4IvPYkk+bBVdOnwPkfv/YTnLBFUwUBVo5Wwmp2Jqd7epxyT1k8iwRGHJ4W1zYYw7dCvnN944w5G/THnbg7cr5S6FwgAwpRSX4nIE36o+7qiXql6uHzs8AoUuCOL0U/uqXQPWwYczgPpbjy++/c7ftj1HYnJRkYtwo2H+1e/zbHwihjq9gA0TzNfeIC42BNYfVz73HmZWZ4EbMoDniQO7JnH7KNr2Npvv9dW0j+O/oHDhxHOKrB61XDK31KHWpG1brgtqLnuuUVkkIiUFZGKQA9gVWFUbIAaxWvQsXRjAlOcMwmEKQPPphOsQcc3TreTV355yWv1ACBGPGxLEXCyefnmPn1QSqAoFuZthoyxxzB45Vupens7wmnbWWYsetnr/urFqmPwMb2OA55MPEG7WU0pObYIQ7996Iaah+vr3Nnk215/8c6tPSirTESI4jFzOJs7TKFIo2cKWrQbire/e5Bzjhif1xTgjD979e/32rxHiCkA45Xros2npxrDUW28bR2bTm3C4vF2fkkEFu31DtI4sNlAAtIY4QzJ8e2SFMQq7eUwft8PzF3cL6uPWODovuU6+Y6IEDbCRHw69tcIUZwNq4Xp1V1Xzx28eJAxC59n/Ym1VHN7eCu4HE3aj/Vpq9h+ZjvNp9cjIU13rwQexsR3w7wjxixZNogX1o3jvHjwoDnKeHwMF+oYrOwYbM/O4/odfcunznWLICT4WovWLvKtMRxTmh65akRVZj+zOkv1R5WMoqLRyl53Eu4UbQQC/YN9exN0bPcux0rW4+yKIVyOO0UD4vEVzzbaxzTiekUfluvkOwZlIMroywwGIQpa3z8tV6sHSimWtJ1AbWUiSCBMIFhgoiGUO9qPTb9c3e6UGriP6kNjCDMYva4bBFqZbxyjmq7cOgVCn7pP+TzvBpae3Z7r+ss1fZntD8xlU0hVfiWYc2G1eMFHqKckVxKHLx1Otb5uUAamNO5PENpQHjS31zClGNlqZK5lyy/0YblOgRAXWRMzeGVvSQR+3/wJ97bzw+pD1CPUSmcEICKM+XMMY/8YhbiT8IjwsrUY7937Mca6PXiw43jKBBblvb/H8Z8zgbss4bzeahTlmnpb269XdOXWKRBKhZTCKpoLb0oCBUonxedZu0sOLGHyhsnsPb+XE7HHryVlVDAt6QKhC59jqDJA1CM0bfkOP7V8J89kyWt05c4j3G5ITEx9JKVwslJKO678bjJBYGDqw+g97Ss0dKnZhd7K4LXJwwg8HloxT9oc8fsIxv05hoQ03m5XsCmY4ElgyIrhqKhHcHlcfLD2Az7+52PiHHG0rdyW99u+T6WilfJEPn+jK3c2iI+HgwfhyBE4ehROn4bz57UjOvra73Fx4Ew/Pn+WMZkgKAjCwqBIkdTHypVamx9+CKVKQcmS2s9SpSA4OPdt5zVB5iDWtBrLA6sGcUbcKKAIiu9MRSjeNmsx4bPDedt53v1jFHZPxv+YeMAZewIL8MyCZ/hx97yrjjY/7fmB1QeXsrvfIUqGlPS7jP5GV24fiGjK+/ffsGMH7NqlHUeOpL7PbIbISCheXDvq14dixTRlTNsLBwaC1ar10iLacaUtEXC5rvXwdvu13202iI2Fy5e14+RJTZbTydl+e/f2lj8kBMqWhYoVoUKFaz+v/F6qFBiuA1Nq1J2vcTCsPPuWv4M7/gy1wspjaDM025Zyj3iIS4oj1BqKwUcuN4D1J9Zj8bjJbIW6AgpLeDmOxRxj/q7vUr0MPECCM4Epv/RmRI/52ZKxINCVO5n//oMlS+Cvv+DPPzUlAk2Ba9aEpk3h2We13ytV0hSlWLFrQ+uCwOnURgpnz8KZM9d+nj4Nx49rL6iNG+HChdTlLBYoXx5q1NCep2bNa78XL56/z6Tqdqdm3e45KisiTPixJ6P+/ZoE8RBqMDKiTk96PzD76j1/HP2Dt1a+xfaz27Gls8/7yrkggcnGcGg9hJ1nd2L18TJIAtYdXJojefObm1q5z5yBzz+Hb7+Fbdu0c2XKwJ13QosW0Lw51K6tKfj1iNkMt9yiHRkRHw/Hjl2bThw5AocPw/792vDenuIbHBEBt94K9epdO2rXhoCA9GovOD766RmG/PuVll1UwUVx8/qOOQSZrDzTeRprjqyh09xO2FzJy1xX9vykUHADEAHUFiPDg8txd/v3IOoRKkfvweHjZaAESrp8z9mvN25K99ONG2HcOPjpJ83w1bQpPPQQdO0KlSsXbG+c33g8muLv3Qv79sGePdqwf9s27aUAmmGvVi1N0W+/Xfu86tUr+JdeiREmon0EUCyvzBwd4qDxzMZsOu39PVMCoWjD7CmGMHp2/cTnVOCeUcGsddlwpPw+CAQoWHDHoAJLZpBV99ObSrkPHoQ+feC33yA8HF54QRtq16iR76Jc93g8Wu++bdu1Y8sWOHVKux4QAI0aaYrerBnccYc2l883+cSDcbjRpwurScA5TAgaHUSiy9uJ1CCwgiCahVUgoM2wdOf4cZs/p+4vvTjsowcvh4GjXb9G5XBKkRt05U6B2w2TJsHgwVpv8/bb8OKLmuFLJ3scPw7r18O6ddqxZQs4kt2ta9aEe+6BVq2gZUtt/p6XVBph4YiPtMG3GizsGpxEtcnVOHjpoNf1cIGLhGEY5ntXWkpuGVuEM0ne9wUIHAqtTumBvuPi5SV6UoJkTp3S5s7/93/Qpg3s3g2vv64rdk4pVw4efhgmTNCUOzZW+zlunGZo/OIL7XpkJNStC2+8oa06uL1Hz7nm/UZ9UmVPBQgCPmiipQYa2nIoQWm6XCVwN0ZUWFnWHV9Hp7mdqDK5Ct2/786/5/71aqNIqG+DhgcIiTvjh6fIOwp1z33woKbQFy7AjBnw6KM313y6IHA6YdMmWL0aVqzQVh5cLq0Xv+8+uP9+aNtWW67zB7/89gbv/PMhh9xJ1DAGMKbpq7RLkQf8tbmd+eBg6mjbgQIPF6vF/JhDV9ewDUCg0cofz66lwS0Nrt47Y9MMXl38ErYU0XcsAvdi4qfwGvCK9wshr7nph+XHj2sW74QEbY7dsGGeNqeTDjEx2uf/88+weLG2Vm+1akP3rl21Xr5o0bxrv+2XbVnx3wqv897BsjRaFr+V1b2v7SM/l3COB2ffxbqL+7AmB3BohJGfTREUKaAQyTf1sNzthscfh0uXYNkyXbELkvBweOQR+OorOHdO69F799aW4f73P80I99BDsHDhtbm7P9l5dqfP8+n1aRvP77n2+8mNVJ1Ukc3J2Uc9SnNyWRJWvcAUOzsUSuUeP14bDn78MTRokPn9OvmD2awZ2saPhwMHYPNmeOkl7X/VtSuULq2tZvzzT/rKl11qFM/eUkjxq56DQo+v7yPOlUhich9vB44oYXyZ2657xYZCqNynTmlW8W7d4MknC1oanfRQSnvxTpoEJ05oQ/Y2beDTT6FJE209/YsvUm+2yQnDWw4nMI1RLUigMQYC07xAggTeCNDW845cPsJpm3d8fTvw1f6FuRMqnyh0yj1pkmbA+eAD3Xh2o2A2w733ap6CZ87A1KmareSppzQ32cGDr7kDZ4SIsOrwKvov6c87q95h3/l9tKzYknlNX6MyBpRoy2CDsDBHhdBambEKhCYnLnjVEMyLHSdqMhnN6UY6Nbl95yK73ihUBjWbTZvDdeoE33zj9+p18hERzTX2o49g0SJth1yvXjBokObX732/8OgPj/LL3gUkuJMwCZiV4uP6/6PX/dNgxzycK4ZzIfYYXQwOdooTiwgOBX3EzNCwqgS3GZZquF13ZAA73UlIik4iSGBkQElefbPglsFuSoPaypXadstehTNp402FUtowfeFCbUnz+edhzhyoWlX7/XCavA6/Hvj1qmIDuBQkIvTeOp1Lm2ZD1COYX91Ft2Kl2SoOEhFilBb5ZYpy8ledrl7z6O9bjSVSGQhNTksULHC3stC3w4R8+hRyR6FS7l9+0dZP7767oCW5SXG5YO5c6NgRHnhA+4f4YWRYuTJMmQKHDmmehV9+CdWrQ9++cDE5Tfd3u77zGYTBLLBi1VDWHl9Lven1WHdxv1doJxswfsNkr7LVmw/g2P1fMCeoHOMIYHVIZX594EvM9R7L9TPlB4VqWB4Vpe1j/vVXv1d9c+BywezZMGuWtp741FPaepXVd6TSVHg8cN99uNb8jilR24WVaA7g1IOPUuWb2ZkUzh4nT8KoUTBzprbUNmIEbCv7IrO3zUg1hAYt8ulQAhhsMfhMMniFKDGwfVgeuNHlAfk2LFdKlVNKrVZK7VFK7VJK9c9tnTnB6dR2NkVFFUTrNyAxMZqWpHy5P/QQrv4DtG1zW7aQ+H+vc/6OuzXFzYzly1MpNkCg006Z+XNZvuBPv4pepgxMm6ZtZqlfX+vBV74+AcvhVl73CrDSZCIxA8W2Ctxrjchy+2fiz9Dzp54EjQ7CMNxA8OhgXln6SoYvj4LAH8NyFzBQRGoBTYHeSqlb/VBvtjhxQlPw6tXzu+UbjIsXOXNXGxzFimOvWJmzRUvy97RvYONGXL8tw2S/tosq0JlE4M7trJ2WBevkr79iSPT+cltcTqxvvXlt/6gfqVNHc3H96ScwuINI+mIlxsUfc/fBYD5dBJ8thDVHgvnXYvXpjQbasL24MjAwi7neYuwxNJjRgC93fEmiKxFBsLlsTN4wibbT62c7l9jRy0dZfXg1p+NOZ6tcVvBHIsDTIrIl+fc4YA9QJrf1ZpfzyYkgS5TI75ZvLC60bEvE379jcbsIcDkoGRNN/f7PcODj2Xh8BH4LdNo5+P3izCsuXhyn0Tv2hwGh6d71xNRrlDoqREpSxp1Kyb//art8+vTRXNt83KOU5gCzcycMGACejS9x/KvtVNncgp5b4bavHVQ4a/bpa6oEBmJm+70zKd74ucyfEZi1ZRbnE855nfcAWy/uZ/2a0d6FfJDoTOT+GY2o+WElHvi8FZUmlOHZz1rh9pHjLKf41aCmlKoI1Ac2+LPerHDpkvYzL/2Ub3h27SJo7y4sadLVWlxOYv5aj8PgrZxJJgv/ZSXLRs+eiI8sHQAW8WA6eoTN46anvpCQwOGHnsRuCcBjMLKtUhQr56/Srn38Ma5GjXF9MB7PlCnYOtzLsU4PpmugCwqCiS/tZ6W5HYKiFWsYy5uYnC6G/XjBpyNLPyy8G16dYo2fzfz5kllzZA1OHwEiANwC2/+ZmqV6BnzdmeVnNmNPttonIXx7dDUf/Ngzy7Jkht+UWykVAvwADBCRWB/XX1BKbVJKbYqO9vb8yS1XpoWFORxwrjl6FKfy/oBM4sHldOExmrxS83mUgX+a+k5an4oKFdjX/610h7/BriQu/vBzqnPR97TnlgXfEeByYECIOrKT25/ozMrvluMe+H+YkuyYxIMBCHLYKb5iCX/P+C59GZYs4Q75gx1E8QjzeIt36caP1DsSxPAdt1INIyo5vdD/YWG8qQi0HpL5s6WgWrFqPtP9grYZpVqi11ffC5fHxRdHVnnFZ7MBH+6ely15MsIvyq2UMqMp9lwR+dHXPSIyU0QaiUijyMhIfzTrkxsofbJ/OH1ai43kyoLXVL16WH0kmU80WthZoxGb5/zAyfCS2MxWEswBnAmJ4PnHRvFCt9uzJErdypE+h+YAbhSHAlIMq/79l9BtmwhwX5sKGACzy0mVl5/G4PBe1gpw2ome81X6AgQF4cZACAl8zWN8SD8W04mmbCD6ZAf2P/A1jrBbuUwYw8OrYbz/o2z7iPdu3Nsr3e8VHEBiUOaGOafbiTOdL2qMj/9PTvGHtVwBnwJ7RKTAVvevxOpOSCgoCfKZ6GiiG91BUvmKxNdtwOXwYmz44JOMy5Quzcmuj2AzX1vaciojNmsgZQa9yj092rF51Sae6zONB5/8gIcGfccj/XvQtX4mJpQDB+C99+CPP3CmMzR3KwOr7ux67cS2bSgfERwC3E7KXTzlMwGoRykuuDOI6dmt27VED0A/PmIlrTlPJJN3jWS7PILp1V2oYTHaPuwcbP6oElGFxS0G4+spRcEbkvkXMNAcSE0fiRCVwN0mP210B81tLzcH0ALNXLED2JZ83JtRmYYNG4q/2bFDs8rMm+f3qq9LLlepIW7UFVOUCIjNbJVVXy/NuKDbLVsHjZHDkeXkbHBR+blRB1mydGPOBZk4UVzWAHEYTOJQBvGkkOfK4QF59d4B8tOWE1oZl0ukVq1070177urzmazyVN/pGYqzdtJnkmC2SqwlUGItgWIzWeTpez6QYiVcEhYm8vffOX/UK7g9bmEYPg/TMLJUx58rh0vQMMQ4VCtnHoqEDVOy+8/xmZYFNkkWdDPXoY1F5C98Z1rOV0omJ4A47f8VheuPzz4j7NA+rw/d4nJgf388PJrBHNlgoN6YQTBmEACdU14T0QKkXbyoRT2MSDPEjI/Xoi2ULq1lNTh6FPcbb2J0JKXqyTyA3WxFUIhS9Ov8GqWfeOjaCGDxYpxHj5E2eGpGMyoBPrr7Cbo+c18Gd0Gz/k+xqFEz1k/7mpg4Owfq3cFLXRsyvJiRNm20DSqrV2vr4znFoAxEiiJaeUt8S1ovmmQOXjzIwGUDWX14NaHWUPrc3od/Wn/AxD9GscsRRxNLOK+2Gkl5PyYaLDRxyyMjNdfTQ4cKWpK8x/bGIK/YYQBGESKik8OTXr6sBY5bvlz7cPr21fbAOhzatqt//tFC1fTqpZmaDx4k4e5WcP48bhRWj4uDL71K7cnvQkICxx96gpLLF+NWCltAMAeHvkcTsw2Xx+M1RHUrAz/Wbs1Pte8hulYUr95bO/XQfsMGzDbv4asAToPJyy7gATaWvY3q7w/PfIoAdG5enc7Nh3mdX7FCe+T27bU95LmJejs4oCRv2s9gS7OpZGigd8y103GnafxJY2LtMXgQ4hxxjFr5NnvL3cnnb13KuRCZkZXu3d9HXgzLRUSiokQ6dcqTqv2DyyWybp3IX3+JOBw5qyM2VpzK4HPY6gGZ3vYZkX/+EbfRmGqIazea5XjbzuKyWK6e94DEm62y9Oe1EleuorjSDPMTzFb5c9q3crJle0k0WryGyAcee9brvIA4lZKPmj6S/jPMmCEJJqtXuThLoHxfu5UkmFNfSzRZ5PdZ83NPIP47AAAgAElEQVT2eaVh3z6RyEiR6tVFLl/OeT2ebd/KB8NDpMhQxDIUiRiq5OPhoSLbv/O6983lb4plhMlrCB8wDDm+fmq22yaLw/JCtXGkSpXruOdevx57iVIktGxNXKu2xIZH8PfUr7Nfj9WKOx2jlUcZKPdGP5wtW6Hc7lTDdqvbSZnlizA4HFfPKyDImUT1J7uhzpzGmGZgHOBMwjhhPMX+WkWAO3UMJKvLwYV/tvncM28U4fmNP/HvK4M19Vy9WhsPlyql7dfctQu3KfWymxuF3WRhSvfX2D3kfY4WL0uS0YQbhcHjpsn/ejC/WVcWbjya7Y8sJdWrww8/aOmjnnwya561vlB1uzOw66ecD7uVs4QRHVaL3l1n+TTSrT2xFocPK7hVYNcf7+VMgKyQlTeAv4+86rlfe03EYsl5p5hnxMSIIyjYq6dKMFvl12Vbsl3dLw3aSaLBlKouhzLI1LufEFm6VBwGY7o9e3rn07u2s0RlibUE+bx2OqSYbH1tpCQazT7L20xWOR/VSNyG1KMIh8EoF4uXkv3Fy4vdaBa70Sw7SlaR9i/PumZ0mzFD3Cr1SMINcjK0uOx/4gWRI0dy9S/56COt2vGZ269yxdHLRyVqapQw1Nv4FjgU2T80JNt1cjP23A0aaFPKf/M/2qxvtm7lYlRDJDwck485psHj4cCkmVmvTwRWruS20mFcCi5CktFErDWYJKOZn+q245YPRsPFi0g21/oVvi2iiSYraxq0xpyOR1axhEuUnT6R5U8PJMnonVsowJVE+I7NGDypRxFmjxtLzGV29niOh1+fS4uXZvPigJm8+FyHa3PqN97AkOZBDEDpuPNUnDsLW7WarP46RUI+j0eLhvnGG1qQtjMZB1Po3VsLs/z221oapcywO2zYVv0GP/6Yad1X2BO9hzrT6rD73C6vD9gq0Bwj1cIrZKmuHJGVN4C/j7zquQ8d0t7G0zNeLckfDh/22Vun7TGnNHko63W+8II4A4PEDeJGic1kkUU1mst9b32v9Xjr18vlytXSXWLKaJkpbe9uM5rlSJFSsu696ZJoDUq3rBPkcJFSkmDynntndvxav236z5qF8jajRVZ+t1wbqrVpI86gYHGDJBrNYjMHyF/Tvsnw4zx1SqRoUZEWLUQ8Ht/3RCdEy4ujbpPD4UiMBYm1IA6TUfb26pvpv6v9l+1FDfPusdVQpOdQk8SNjPQ5R88MsthzFyrl9nhEihcX6dUrT6rPHv37iyPN0DntEW8OkL7Pvp+1+jZuFGdAoFcdiSaLLJ+/WuTgQXEG+h4+e8i6ckvyiyPJaJIEszXLL4Ss1n3lSDKYZELzx9J/XoNvo2HadhNMVpFRo3x+NhcDQ2XBP0cy/FhnztRun+/DXufxeKTO+LKypzjiUqnrtptNsm7inAzrDhod5HMt3DAUSRxWJEeKLZJ15S5Uw3KltKiZG/J924oPtm3DnIErYYLZyuZytWn1co+s1bd4McpHKFCDx8Oe2d/CpEmIj+tC6mF3ZiN27X7B4nYR5EzKkgNDesP6jMsIprCQ9LeCtmqVqawKsLqSsE+YlGqr6hVMbhe/zPnFu2AKevWC227TRvNpN8WtPb4W66GTlI0BYxphrE4XasrHGdYdZvW94cYCmMWT5+GRC5Vyg5Ztcteua1tAC4xGjXD48LN2K8Xm0jWZ2KU/l779ga4NymatvpAQXD6s5C6DkbNOA/z9N2Yf2wVVmt89SuEwmIg3ByCkVnbxUcbfXGnT7HHTa8UXXC5ZluULfQRzmDMHR3hRXMqQSra0GAGJ8/2CUMAZW5oXrIgW//rCBa28EUaP1lZZfvgh9a2HLh0izC64k7XkUgA81RUC3wbLYHi9xV6OxRxL91n73t7XK1dZgEBPzBjDy6Vbzl8UOuVu00b7uWpVPjU4d662vhIUBI0ba8s+AP37owICUi33JJosrKhxB8d/WcE7379Hl8bZMKZ07474WHdSCPf/tx7Pzp2Z9nSgLVPNq9OGE+El0uah15Q/6xLliJS9fLDTTqgtlog+L7Jga5rYxWXLYj1+lH/fGMnvNZsh6bxy3MCe4uWxmQO8rsVbArlUvfa1Exs2EF+hCkkVKuIoWYptleqwdOlG7rsPqlXTwmKnpF6pemwprfl8exS0fBq+vQ3sZnAa4e/yCdw+LYp4h++XyxvN36B7+bsJQAupHCDQDhOTTEWzvRstR2Rl7O7vI6/m3CIiTqdIeLjI88/nWRPXmDrVa67ntAaI/P67dn3nTjnX6A5xGoxy2RosX9zVQxZs+C/HzW14d4rYTFaJS/abTjBbZW6DTpJkDUh3Tpr2nN1okgMlK2Y4j83oXHbn1lk5PCDby9cW+e23dJ/9UPenfTrvJBgt8nSfqXK04wNiM1nFbjRLnDlAYqxB8lCvSdeW1k6d8jJwOpVBjhUpJT9tOiaTJ2unt29P3W6HqXXliQeRX6oiIYO858/Bw5AZCzL+sp3aMF1WjqsgR4aGikyoneO59hW4GQ1qV+jaVaRSpTxtQsTlkqSwIj6/rOej8u75Fv2+W956bIi82HWQtB72i1yoXS9dhblsDpREdW3N251COdNT0iRlkPgUHmI2o1nOB4XLybBI2RNZQU4HF/W7cl9ty2yVjcMn+n7ww4dl4fNvyeEipcSllLhQcjishCy47R65XLWmSGSkxJSvLEvqtZH+nQZKq+G/XFNsEZGRI8Xuw6IfZwmUfs+Ok7NnNRveW2+lbtbutMvgb7pJ1VeVmAf73izSe3TRPPt/++KmVu6PP9aebN++PGzk/HlJMpp9fkmdyiBSurRI69Yif/6Zh0KISMOG6SqLAyWXIkrI2dBiEm/K3PJtM1pkZsMu8ma3N2Rbhdtke8mq8mHH/8n2VwaLVKwoEhYmUrlynvTeV46LgaHy08aj157v0CG5VL22JJosEm8OkHMhEfLck+/KEw+PEJsPa77NZJU9z/pYpnrqKZ/txZut8lrHfiIi0qaNSI0avj/mlf+tlJChPpR7KFJyKDJr8yzxpLee5meyqtyFbs4N0Dl5q9OCBXnYSHg4SekEJjCKRzParFyJvVUb1k6Zm3dyNGqUfvA/hPCL57A47VgspgwNZQJY3Q7KxJ4jqNv91D2yk6gzB+hXzcqt0z6AI0cgNhbPf4ev3p8VJMWRFQKcDj6fv1b7w+3G1qwFoQd2E+ByEOy0Exl/kQ+/Gca03yYR6MOaH+hKouLnM1j8+67UF+66C5vFe15uEOF09ToAdOigObScOuUtV8uKLalktGJJ+SACKDir4IVFz9FlZiM8ktdWi6xTKJW7fHlo1EhzJsozTCa+vSt14IMrpPzCBTiTKDXkTW+Dkb+oUCFDxVFAuD3Bp4dc2vsMQOv/NtH+rWQD14ULuKfPSLXMZEBwKSPRQUWypLQKLSDEybBIklLEaEuvnBIP+xzJ3m4rViAxMRgl9d0mjwtLfPrhjBxGE4u/Xp765KOP4ilRMtUKhs1kZW3lBjz4VEfgWjKLv//2rtOgDPzecSrdDQHasliyYl/BAyw6vYWaYyO4mHgxXdnyk0Kp3KBl+dywIWsJ5HJK5HujmN6iB7HWIFzKkO4XttLFE4xfsjv3DR49qm3dbNAAevSArVshKopEH5bilFxJNJ+V3tPqdlLn5D6OvzMS2rdHfERENYub+KBQevb7BLvJkmmdFnGzt/ytxEY1uGqNvyJTShJNFhbe2pKiJZLDMZ0+7XNnh8XjxpBBD2l2u/hXhaY+GRhIyPYtHOv+NOfCinOkyC3MbvsU8V9+c9XltXZtbZt6eu7LRRv14ou207ntLD7XC80eOJAUQ72JFbC70on0mo9c98r9w+4fqPZRNUwjTFSYVIHPt3+epXLdumk/83Jo3rVBWSqPH829QxZy2yvfcyHUd/ysGGswJ2JzmVl+/36IisIzfTps3Yp73jzsTZqx9tAFVNGimSquAdJdTkqLUdw8/9ts2LwZkw8lEqD8hZP0rmRi55iPSDRZMu/BbTYidm9P9YW7ouB2o5kko5lfa7RgdKc+vNY+eaN1s2Y+208wWYkJDPW5bOdUBraWroG7YiXvixERVJ37CSVioql46RR9fp1Bl9srXr0cGKjlItu5M4MHiS1F5UtGlI/GVXJvfsYRz9B5jxR4koLrWrkX7l1IzwU9OXjxIG5xcyzmGC8veIZPf34x07I1akCtWnk8NAe61i/DX2+1Ye/4bhQfOcSrF7WZrcy6/QFKFwnMXUNvvoknLg5DciBEowgBziQqDHmNpIjimaqtQxmY3/R+EkKLZKqIZo87VeDCtCi0iKmVBw/kVKuOLPt7LwvqtU13jdyN4lzpCth9fN0U8HfFejTu8yUTnnibEY80vLZ5pEYNzra7L9XUx240c6pISb4bPp3YgFASjZaroxI3it8rNWTAI0OuvSCySdWq2gApXYKD6b/ORGAa3xirE2onhzN3Kpi4fxElxoTwzeICScADXOeRWN5c+abX28+G8M7WT3i2YqtM3fe6dYOxYzVvteLF81LSZPr14+iuI1SYM1WbkonweYP7mH3Xo4zJ4ZftKmvWeO2SAigefxHbscwz1JvEQ+dNSzEp7xFlyumjw2DEKKIZBTMh1B7PZ/PXsuDd7vD1hzhr3+Y1XBbgfHARmhYzYXJ5vzCcGDhctDQ7JnWHs2e1jH+vr9PSifTrR/lF37N12ASCPp2B0W5nTf1WlBr2Fi+3qMHPzRuxafJnmM6d5XjRW/inzK2E3FKCt9rXyFLEFl9ERmbSczdrRu1LwXw9P4ne98GFQBAFXfbB6RSxDZ0KnAjPbppMwyKVqN58QI7kyRVZMan7+8jqUphlpMXnuqIaiiSNr5Vp+W3btBWPqdkPdpEz1q+XhJKlJcEcIDaTRY6FlZDuL3ycer01p9xyi8+lnESjWf4sHyVuH9eyGoDQg+bcciy8hCyp11rizL6dYtIedqNJbhswTyQmRqRSJXGl2X99pe60R9rrD704VeTAAZGiRcVl0daikwwmSbAEyuovFuX+s8sG/fuLhIZmfM/Kb5fJ+aBwsVkMsr8oEh2IvH1POgEThyKvjynmVxkpDEthlYr4mDcBJVCYYzO3lEVFaUaSuXm4EnWVS5dwtmpN0NlTBDntBLoclIs9x8zP38CYiaU6U776Cne0t7O8Qxn4L6IMDU/t9eqNPWTPR1xQhDrtBPbtk6XMDi4Uq6o0JqxkMZgxA9ep015W7SsjgrRHSuxGCxUvnoKBA/HExGB0aLYJi8dFkCORkq/1y7uVBh8YDNpbJyNadW/LX2u289bj77K3ZV0efVnx7l34tFi6FJxPyjxRQV5wXSv3mNZjvBzvgwSGY0FlwfFeKXj8cW1p47//8krKZL77DpfTexeY0eNmx6RZOa/X7Sapb3+MaYa0QvK89+JJAl3XQicJcDqkGBdCi2W5CYUWL7yILZbb+j7NV8NmcC4kIl1DmQAXg8MZ3GWgNrf98UdMSd7W4ay8XIzipkj0KVi1CoMPy3j1c0f58JcdWX4WROD332HCBM3g4sieITMzxdbuEcIjD3PLsxA77DV+fvwLtoVUwVei4xCBzkGlsiWDv7iulbtbrW7MbtyPihhQAqVFMZkA/mfOehqYJ5/U3sZz5uSxsKdPY3V6z30tLifG3KRPOnMGiffu+a+sS6c1fCnAFhxG5NBBJKZZg3ejOBZeihhrME5D2ohpV+R1sOvgGdau2cYrz44j0cdSl91kYdKdT7Bg+xd07dIM2bAhy04qaXEazZysVudaVok0uAwGjselb9xLRWIitGiBq+O9OF5/g/hHnyC6eGmWLV6fZXliY7Wc3+lhd9lp+XlLOn/VkbdXvMGLPz5B+UVPY2r6MgOqdyHlUwQLNFJmOrcfl+X2/cl1rdwA3e+dxOEHvsEddisnCePZ8CrQeXKW98KWLauFsv3sMy2ffJ5x553YLd4WcYfJzJGauQiSXaSINjPNBpGXz0K/fsQ2bobNbMVuNBNnCeRiUDj/e3wUE778gz1la/jsWQVF4qUYujYsx/Tp/dn3xkgcRhN2o4kkZSTRZOGPqrczYvUsSi9fBMePo8R7kc1D5uvqiSYLu0tVpd3/HoKXXsKe5mVkN5pZVOsuSkZkMQvHmDG4N2/GlGjD4nYR4kikaPwlIl56LstD+4sXM04mOWHdBDYeX0+8244LiFdwweOmx8o3GHvbY/xwxyC6mUJpL0amBJZhWZfPMNbN4p59f5OViXlmB9AB2AccBN7M7P689i1Py/ffa/abX3/Nw0bcbjnX6A6xpQjZm2C2yu9VGslPm4/nquqfG3XMlj/31op1tIIej6z+YpFMuK+3/K/rW3LXyKXXjHtffSUJFm/Dmc1kkbZDF2phmB99VJzWALGZrJJoNEusJVB6Pz5CLt4alakMiUazJBgtqeT2gLhALgSEyrHwkjKz9VOycN1BTR6HQ4637SyJJovEWIPEZrLKX+WjpMHrP2bdIFmmjE9Zkgwmef/+viLlyokYjZoD+c8/+6yiYUORDh3Sb6La5Go+DWcBQ5ETH1TP4n80d5BfG0fQ9ssfAiqjBZnYDtyaUZn8Vu6kJC380oMP5n1D214bIXtLV5UdJavIuC79ZcGGw7muduG6g7KrpPeGjSRl9NoGaTNZ5fc5CzKv1OGQcw2bSnyyZdypDGIzWWXIvX01ZZo5U5yBqbezulCyL7KCuLMQAmlrqWqyYt4KOXVnG4mxBsm5wDBZUPMu6Tjg8wyV9bdFa+W1niOl9bPT5I53V2ZvpSGdFQWnUqleukLy1tzFi1MV93hEihQRefnl9Juo8mGVdJX7+NBMzOx+Ij+VuxnwW4q/BwGDMiqT38otIvLKKyJms8i5c/netF/4aeNRWVSnldgNJomxBGqx06rcLv3vf032l6goMdYg2VqxTtYU+wpOp2wYO02WRd0jn9fvJE/1nX5NmRo08KkoNpNFYqwZB36MN1tl1IOv5c0HkREDBkiSMXXcOnfyi8uXnJerpV5OPXFCu/Thh+k3MWz1MAkYprx2htUaatD2aucDWVVupd2bc5RSDwEdROS55L+fBJqISJ/0yjRq1Eg2bdqUq3azy65dWqysCRPglVfytWm/smTZFpbMW8UWcwRSoSKv5cJhI0Nq14bd3v7wCeYA5tVpQ4+dywlMYUAUtJBPLoORZTVbIJ99RteGeR9KKBUxMcTWb4zx5AmCHYnYTFYcRhMhjkSfbqx2s5UAxzUr//z58PDDsG4dNG3quwmb00bLqVHsuXyIeIEgwIn2/AbgfnMYH7d9n5K3v5AXTwiAUmqziDTK7D5/eKj5tst4C/QC8AJA+fLl/dBs9qhdW/uHzZgB/ftrFvQbkY7tGtCxXYO8b+jRR7EPH0mAK/VSUrwliDkP9OHuqsUo/eM3OAwmLC4HayvUZXm1puyrXo+evTrmzQsnM8LDCdu3i38mzWb/olXsDopkY5N2zBv3BEXtcV63HwkvRc0Uf//xh2a0b9gw/SaCzEFMfOBz3v75eQ5fOMB5ceFGC8MEsMAZy+YlL7HPEoK53mN+fbzs4o+euxkwTETaJ/89CEBE3k2vTEH03ABffaUtjf32G7Rrl+/N31jExxPT4HZMRw4T7LRjN5pxG4y81H043V59nK71y7D4913Mn/8nW4xFCSkVmXejiFwy4f6+vLj0E4JSjDQSTVaGPvYO4z5/5+q5unW1bLHLlqVf15ytc+iz+EUS3Y50VwNCBWYHleWh14/76QlSk58990agmlKqEnAS6AEU7CsrHR5+GAYOhMmTdeXOlJAQwv/dxsbxn3D6x8UcCIjgjxadeeaRFlcVuNPdtel0d+1MKip4Kg97g3EueOmPuZRIuMTx8JJ80OZZWg145uo90dGaT/nDD6dfT6IzkX6LX8bmztgxJh7YY8uFb4Of8Ed+bpdSqg/wG5rlfLaI7MqkWIFgtcKLL8LIkXDwoLYDSCcDLBYaD+oNg3oDMLCAxckpXRuUhdFv0u23Bzh1yUbpokFeo4wFCzQrW+fO6dez9cxWDJkoNkAIUCso0g+S545cD8tzQkENy0ELoVOhAvTpAxMnFogIOtch7dtrL/yDB/GZuRS03F+NptyaKid3WkwC5ZSBfV2+zHTOHZ0Qzeg/R/Pzvp8Js4bRv0l/nq73NCo9AZLJ6rD8BjUr5ZzSpbWh1+zZ6Se70Lm5OHkSVqzQgttkpFe1ImtR1Wj1yj5iFG0IbBF4wBzGirYTmem4xIPzHuT15a/z3yXvjQ0x9hgazmzItI1TOHz5MNvPbqfPz8/S58sOfnuum065QYtUFBsLX3xR0JLoXA98+aUWzenppzO/95e2E6ihjAQLhImWaGCUIQTnA9+RNEyY9sp/tP5nIq8vG8iPe35k0t/vU2dyVVatTL0XYtaWWZxPOJsqb7cNYfbhZZzcMN0vz3VTKnfTploAxUmT8tjfXOe6x+mEqVOhZUst60hmlGv6Mv92ncufIZWZTxCnwmryZtdPr+51GPPnGE7FnsDm1izzTqUp7VN/jUa2f3e1nhWHV5DoY/5uEdj0+xi/PNt1HYklr1AKXn8dHnkEfvoJHnqooCXSKSi++w6OH4dp07JeRtXtTv263X1e+3HvjzjEe+vvRfFwZMVgKiWXq1ykMkYBd5ppgBsoY/NP9NSbsucGLQRT1arw3ntZ28OrU/gQgXHjNAenjh39U6fV6GtXt6a0QXFnrv7dt0lfrGkm+CaByhhoGFbBL7LctMptNGq996ZN+Zg0UOe6YtkybW37//4vdx6LdpedE7EnsDvtnI455u2fKVAfAyXDr3lm1ixekx/ueJNbMBAkYBVojpHlpghUm6E5FyYFN91SWEqSkqBSJe3NvXx55vfrFB5EtHTPx49rUXos6YRf94gHhfK5POXyuHj96y5MP7QEREhS6WRJFeiGkW+7fuG1PObZ/i3/rRhMaNxZTflbD8k0VkF+eqjdsFit2iaS11+HzZsz9inWKVwsWADr18OsWb4Ve+PJjbw8vwebL/9HkMDz1gjGdpiMtf7jV+8Z9M0DzDj0K4mQcUwpBT+Lm/Z/j2Z5VHeMKfKsG+r2oGoeBXO4qXtu0JbEypfX8nrPn1/Q0ujkBw6HFjzTYIAdO8CUpos7cOEA9afVIcF9zRc9UKCTwcr3Xb+AqEdwuB0UHRWALRsBpkJQfNVkIF06vJ8r+XUnliwSFgb9+sEPP2j/aJ3Cz/jxWsK/Dz7wVmyAD9Z9QJI7dTy8RAW/eJI4vnwwALFJsbiz2THGI/yyJRfBMrPJTa/coA3Nw8Nh2LCClkQnrzl8WNtb0K0b3Huv73t2nNmB92IWWIEDcVostojACMINmYeATolZINKRfymGdOVGC4j3yivamveWLQUtjU5eIaJ5JxoMmgNTejQs3RCzj/N2oEaottlk59mdNClRL/V9wjVLuY9O3QQ8E5J/sQx05U5mwAAt0KjeexdeFiyAxYth+HAol0GQmIHNBhJgSp3zLVDgIYOVMm1HMmT1EJrNup3FZzfjFs2WFizQyhBAf2MoT4qZgcZQSqAITXZTDRb4zBhGtXaj8/YhU3DTG9RSMno0vPMO/PMPNG5c0NLo+JPoaM2IVqKE5ttg9tU1p2D7me30n/8oay/sIVQUL1uLMaTjh+wvXZfGMxqQ6EntOhoA7Gz7IVXv6Hf1nHv7t6xf9hb2hHPcEVaewDbDshySOyOyalDTlTsFcXFQsSI0aQK//lrQ0uj4CxFtjv3rr9qLOypK8Ign1ZJUVjgRe4Kxf41lxsYpXnNyq8DogJIMfPOMz7L+RLeW54DQUG3Ne8kSLQWRTuHg00+1Ifmo0R5+2vswRUaYMI0wUXOkleUrtDBLx2OO8/C8h6kyuQqd5nZi3/l9V8tfSrxEm6l1qDaxPJ/8MwWXj/5QAWZ7TD49UdbQe+40JCRou4MqVIC1azPe36tz/bN3r7YDsEkTuO2pTsw6/Csp7dVBwOT6/+OFbZ/guRIhVQAFY25pzt8hRVjz3woS3Unp5h8HbevngdDqlB24L4O7/IM+LM8Fn34Kzz0H8+ZlHFNL5/omPl5T6nPn4K8NCdT7MhR7WjO2gFWBV5a3K7dl8HI3iDbX9gBTDaG0bf8eQ89u4reDv1EsqBivNn2VnnV7ZhpZJbvoyp0L3G6oX1/rxXfv1txUdW4sRLQMr99+q20QKVdvH40+rkl8eoG4c6B/pUQxDCtdQsuj7hzIbb+/zeXEi7iSRwDBKF6udh/jHvs5V8+SFn3OnQuMRs176b//YMqUgpZGJydMmQLffKM5rLRpA2XDyuL20YOqHCq2RaCHtSj/G5ZIqYH7+DDuCHH2y1cVGyAB4aMDi7iw8dNcPEnO0ZU7Hdq104LmjRypZX7UuXFYulTzW7jvPhg0SDsXbAnmlepdCEpzb6CCWiGls9eAQIiCN1pfC82/+shqkjzefm1WgR1rRmXzCfyDrtwZ8P772saSkSMLWhKdrLJzpxZh57bb4OuvU+/THtXjR0bX6cktyoRZoLEhgGV3DefPl3YQbrRc8zBL6WnmAwvwkbk4pVKkDKpatCoGH2UcQLmE8/55uGyiz7kz4fnntdzeO3ZArVoFLY1ORpw+rRnQ3G7YsEHLzZ4dvvy8A6uPrCZUhMk40x2uBwpsI4Tqw66lKNp6eistZjZMtUvMItAMI2vCa8Ir/+bkkXyiz7n9xOjREBKi+STr4ZiuXxIS4P77tSnUokXZV2yAJ59ayuyhSbwyYD/pxG6A5Igp1cNTh0Kqf0t9vm36GqUwEJgcWaUdJhaYIrQADAWArtyZUKIEjBoFK1fC998XtDQ6vnA4tKH4li2aEa1BLvMklg8vTzGDj72gArcAPxqL+lTYzu3f42TXuewOrcZpwlgUXoMi93/sF5fTnJCrYblS6n2gM9rU4hDwjIhczqzcjTQsB22Y17ixtl66d6/Wk+tcH7hcWjKBH37QMri+4HAC57gAABx9SURBVKfMuYuXvckj694jUUBSDM8DgW4RNfmyz26/r19nlfwali8HbhORKGA/MCiX9V2XGI3a0srJkzBiREFLo3MFjwd69dIUe+JE/yk2QKd2Y/ni9lcwpNHfRGDBxb1s+D3/dnfllFwpt4gsE7kapHk9kIOZzo1Bs2baF2nCBNi6taCl0RGBl1/WsoWMGqUtffmbI+Fl8LW1xCbw67oP/d+gn/HnnLsXsMSP9V13vP8+FC+uKbnTWdDS3LyIwKuvasPwQYPg7bfzpp0waxgmH7NWCxCedP0nmstUuZVSK5RS//o4uqS4523ABczNoJ4XlFKblFKboqMLPndxToiI0FLPbNumebDp5D9ut5aGedIkrbcenYej4wdvfdDnziED8Gho/kVUySm5XudWSj0FvAi0FpEsBYi60QxqaXn4YW25Zds2qFmzoKW5eXA64amnNIv4oEGaYue1TWv5ind48O8xqGQ9cQNfGcMp2nwAE89t43TcaTpV70Tf2/tSNLBo3gqTTL5sHFFKdQAmAHeLSJa74xtduc+c0RIZVKmi7fvOLKqHTu6x27XlrkWL4N134c0387HtrV+xcNkgNieeo2FgJOeqteXN3d9cTfYXgCIyMIJtffcTERiR5/Lkl7X8YyAUWK6U2qaU8k/u0eucUqW0+d7Gjbr1PD+Ij9f8xBct0lYt8lOxAT5xXOJpx1mmKxfPJ56k387Prio2gB3hXOIFPlzoR3O9H9DdT3PBM89oOb7/+AOaNy9oaQonp05B587aFGjOHOjZM2/aSXAkMH3TdObtmkdYQBi9G/emS40ubD+7neazmmDzkW43LQ0MAWwenJg3AqZATyeUD3z4Ifz+OzzxBGzfriU40PEfO3ZAp05w6RL8/LP2e15gd9m5Y/YdHDi/92rO7HX/reTlavfhiKiMPQuKDVDS7SvaecGhu5/mgrAw+OorOHZMW3PVfc/9x9Kl2mhIBP76K+8UG+Cbnd9w6Py+q4oN2l7syQcWcebExnST+6UkSODV4DJ5J2QO0JU7l9xxhxbrfO5cbR6ukztEtOXG++7TYtlt2AD16uVtm4sPLE6VF+wKSQLGU9sI8bE9TKHtDgsX7edoQwht2o/LW0Gzia7cfuDtt7Xk7f37a6FzdXKG3a7FruvdW/s8//gDyuRDZ1g6tDRGX6MuBQs8Nu4Jq0hwsoIbROul31dBbLGWZhHBnA2ryYCunxbYBpH00A1qfuLiRW03ksej7U4qXrygJbqxOHYMHnxQSxgweLA2GjLkU9ezO3o3dafW9pkfLFTg88ByWOo/xvyN0wl2JvJMSFkatnu34HZ76Qa1/CUiQtvAcMcdmpPLb7+ln9BdJzWrVkH37pCUpMUX79Il8zL+5NbIW7kjoiZ/XNzr83pS4nkeaDeWTu3G5q9guUQflvuRhg21ZO5r1mgukrqBLWOcTi19U5s2EBmp+Q3kt2Jf4bX27xPs47wTaHMDuJr6QlduP/Pkk9qwcs4cGHtjvej/v70zD4+i2Bb478xM9o0YFEFCWJQoIogIgiKKrAZF8D0V9fpwAzeugCJ6xQVBWV1RkU2veoHLIsqmiAYUuKAooAnbFRCDBFlCiNlIZpKZen/UEEjSISGZLbF/3zdfOj3d1aer53RVnTp1jk9JS4PrrtMupPfeq20ViYneuZZLuUjel8z0zdP57sB3GA1Fky5KokfDKylJ/+eOoybAzkZtvCOYlzG75V7gpZdg71549lmdTfJvf/O3RIHF/Pnw0EOntu+4w3vXOpp/lK7T23Ew7zBO5cIiQru4lqx6aCvhQadioVrEwrsDl9DijSaAqyR+WgHQd/cnpG/5kJj293pPUC9gttxeQAQ++AC6ddOt0vLl/pYoMDh+XHuY3Xmn9s3/+WfvKjbA4DlJ/Jr3B3m4KBA9f7058xdeXFj+wgt2LMAo7KlSisXJXlpX6kVM5fYSoaGwdKm2oN92GyQn+1si/7JkiVbof/8bXnhBT3M1a+bda9qL7aw8vKWcFbwQ+PDX8qEHMk9kYjfosjuA9QUZPJP8DNN+nEZWQZZX5PU0pnJ7kagonTE0MVE7ZXz5pb8l8j0ZGbqlHjBAL7j58Uc9bLF5YUBYWFzIvqx95DvyAT3WdlVg1CxyOcvt631hbyIM1pAWAwulmEkbJvHU54/RdHJ9flo3yZOiewVTub1MXJye6mnVSluClyzxt0S+weXSCRVbtdJThGPHaqOZN7zNlFKMXz+ecyfG0mbqhZw7PpIRE+II3rmUjtYwnTLoNKwK+trKLwS4tsm19GrYocRhBSBIgUUoiUd+QiBHuRj4zWhUygLP34wHMZW7ArILs5m6aSqDlgzi9e9e53hB9XMKxcXp0MiXX64dNaZN86CgAcjmzTrm3IMP6mAWW7fqGQRvrXuftXUWr6wdS56zkHwUBQIz7cd5cemDvH/xbdQTIfSkgiudlXOpM5d5nz9eqhwRYdGDG3m/w+PcaI3kZmUjzmKlXBsvcEA5OZD8vHduyEOYHmoGpP2ZRsdZHcm353DCaSdcQahY+b7na1x09bBql5ufr8PwrlgBo0bpoAO+8sLyBUePaiWeNUvHe58yRc8UeDtaSrM3m5GWnVZuf5SCP6NbkXXtCC764iGylKtUFpFwYOMNk2h77agKy058J5HdmbvL7Q9VsJcoLhiT44E7ODvMjCM1YNiXw8g8caxkQf4JgSzl5OGvn4LUhdUuNyICPvsMHnkEJk+GpCQ45p80Uh4lJ0e7i7Zoobviw4bBL7/oOX9fhPY+kn/EcP8JwJ6Tzs7zEimCcumB7AreW39mZ4QH2j1AWJkTRUEiFi6ICWznFlO5DVi1dxWuMlMiSuBbVYQr+aUalW2z6WgiM2bAN99oa/qmTTUq0m/Y7TpQYYsW2kjWpw9s365jiMfE+E6Oy883HsjHI4RGN+bYiWNYVPmFm06BPxy5BmeeYnin4XSufykRCMFK9wbORVhgM846EkiYym1AsNXYKdwGSE56jcsX0QH0N27UCQ+uvRbGj6894ZJzcnT01+bNYcQIaNtWG8sWLfJPwMjXe79OuDW4VPsaruBNazTS40Wujr8au0EXIkhBkoFh7XSCrcEkP5rKqq5jmBDagFmEsT/6YhL7TQu4VWBlMZXbgHva3ENIma5YsII7sCEx8R67Tvv22tjUv79eNtqunQ64GKgcOaK97po0gaee0oqcnKw/HTr4T65OjTux7v6NJDVox/lipZkSetkiUR0GU9z6VhpENuCG89qWO68YOOo8AakLUUqxbv86Xtv4Gp/s/AR78an13SLCNd1e4IlnDnPHmBOEPrEz4BUbTIOaIXmOPHrNuILU43tKHJYSsbDGFkeMlxK7LV8OQ4fqpY+DBuksGtXJVOlpXC4dSmrWLD2lVVSkLf6jRvlXoY1I3pdM/3k3Uex0YEcRiYXLzrmQNY+kcNHUi0jPLd/rilWQHnUxvc+pz08Hf6TIaSdEQYTFxoaer9O889/9cCdnxiehjatLoCs36LnTH9aOZ8emaVxckE3n6ASkx4tefWPn5cG4cXocK6JdNZ94wj9d3QMHdHSZ2bPh11+hXj1tIBs6FFq29L08leF0OTl/UizHyoyhw4EJlw1i5I55FLnKj3tEwXMEM9nqwu465ctmUdBBbHw/YG7AtdKmctdi0tL0NNlHH2mj1U036RhtPXt6x7PrJLt2aWv+Z5/puWqArl1h8GDdWoeFee/aNWXroa1cP7MDuQYRzzpYQsmMacS+rH3lvmuq4JBA+SBLeij2R1QicU8ar/P2F2awhlpM06bamj5unHZ4mTZNz43Xr68TzN90k1a6uLjqX0Mp2L1bBx/8z39g/XrdQgNcdZVernrrrTqOWW0gyBKEq8w89kmynXYOZh8otz9EQROxkWYYg0UX5cz9w8OS+g6z5fYCh3IPsevYLlrEtiChXkKNy3M4tHIvXqz/5rj9JhITdZf94ov1dkKC7j5HRWnnGJdLd/UzM/V8+r59einqnj26lc7M1OXUr68jjfbsqY17vohb5mmUUrQYF8JvrqLSjioKQkTIMljtdQlWfsWJYeBiBW2wkBJzCYzY7jW5q4NPu+UiMhKYApyrlKrULaOuKrfT5WTw8sHMS51DqMuJXbnoGRTJgqT3CGvnmUXdDofuMn/zDWzZop1F9uyp+jRaw4a6NW7ZEjp1gi5d9Laf8sh7lG3rX6XbmlE4lKIYbQu9XGx8X0HLHA44FBQb3buCbbY4WgfglJfPuuUiEg/0BH6vaVm1nUkbJrFg21zsriI9hhP4uiiP4cuHMMMa7JEfSXCwjtN29dWn9hUX63F6ejpkZ0Nuru52i0BkpI7vFhenW/bIyBqLELBcdu1IDkY2ZMXX/+DoiQy+CwpmsTPfaIk2ABcoC+HWIFJcpUfcoqCf2Eop9t7je0k5nELz2Oa0a9jO27fiETyR5fMTYBywFLjyr9xyN3qtEYfyDpXbH6ogL7oV1id2+EGqvyaHcg/R7M0E7AYWctDd9ZlhF5DY6TG6fTsah1I4RD+rCBE295pK085DKXIWcdfiu/j8l6UEuZw4lYvW1jC+vPFd6l15n4/vSuOTlltE+gEHlVIp4uF+3eKdi5mycQpH8o/Qq0Uvnu/6PI2jA2Di9wxk27MN9xcBjpx0AtjYXOvZlbGLEatGsHb/WiKDIrmh2Q2EuJyGVnCbgkmWSO6+8XVoczs7QmJ495sX2GnPplPIOTzU4xXqd3gQgMkbJvP5L8socBVRACDwk7OAwV88wqLgiIDrsp9OpS23iCQD5xt8NRp4FuillMoWkTTO0HKLyBBgCECTJk3a79+/v8Jrjl8/nvFrx5ZkgbABMcGRbBu6m4ZRDSu9KV+ilOK79O/Y8PsG5mybw7YjqeV6gZcqC9sD0DDjS3LsOezJ3EN8TDznRZzn0bIP5hzk0mmXkmPPLqn7EKBYaf/x07EoeAAbM2+t2vx149cbczD3YLn9wQqyoy/R3mo+xmMtt1KqRwUXuAxoBpxstRsDW0Wko1LqsEE5M4GZoLvlFV0v157Ly2tfKpW3qRjIdeTx2rLBvHr3ispE9hlFziL6/bsf69O+weG0E6T0AhMbWmar0j+yGbaYgF9kYERWQRarfl2FVaz0vrA30SFnn+lQKcWzq5/lze9eI9htZOwfFM2HSe8S6iEj49RNUykoyi/1UrWjjebWMgoeCgyLTKhyi5tflG+43wU4cg6eipYagFS7W66U2gaUvIIra7mrys6MnQQ5iymbCNUBrN4XWIHIZmyZwbq0NSXpXYsEUBAhcIkE01opRkYmkNjrlYDuvhkxd9tcBi+5H5urGJQLpwjzrnqSW/pMOatyZm6dydTv36DQVUQhgMDSohyGedDI+MPBH3C4ylvEI4F4LOxTLqxAOML71hgu7TW+ymX3adGHRTvmlwvYcDEWoj24zsAbBNzCkYZRDXEYLM8TBQnO8nGv/MnsrbPL520WKFLwcXgTZo1xkDhyT61T7N+zf2fwkvsocDnIxUWuO8zQnZteJePH2WdV1pQNU0olqgcoFPjYVYA9ecxZlbV632r6zu1L+xnteX7N8yXRcdo0aEOQQV+wGFhKOL9GtWQzkRyKvoSbb5lxVs9jcs/JnBMcVWIvCVYQqWC2rV7A98Y85qGmlGrqiXKaxDShiy2CdcX5OE7rToUBT0UE1pvSZfASArdnU165kUmtYf72+Tgr8MP+dM0LPOQ2NlWFzIJMw/0uID8nnZAqlvPOD+/w9FcjS14UOw7/xIc/TiPl8T0M7zScD354h6LTXE9DFVyHlQtjEmDEdhpVWeLSxMfE89/hacxaMZQNu5fTqsjBo1EJNOn5csC/tAOu5QZY1OdtelqCCXG/JWMVzLREc03vwErhMajtoHJROgDqIyRGnzlKR+qRVFbuWcnhAHwJ5DvyKTZoCZ1A/lmG9b0m/hojj1DOR4iNrtrLOt+Rz9NfPVmqB2BHkVF4nLeWDqFZbDPWXD+O9tgQpRV7EEEstsV5pHU9J+wcnr5tHstG5zJxjJ0mT+4OeMWGAFXuelfex4r+/yI9KpHNRHI0uhV3958VcBU6tONQ2scl6vzN7tSuUQoW2mL1CjIDMvIzuPKt5nSefjkD5ybR9LVGDJ+TZJjixl/cnHgzoQZTmxagb+TZTUdO7jmZSFsoVvf/4q6nadaYCuuoLD8f/hmbs/yY2g58sedzADpc9yybB8zFHt2KfKKZHtOS8H5vB9xvxpeYvuU1xKVcfJ38HP/ZPItG9jwGRjcltsdLFf6oeky7jLUZ20s5REYA717xKINuftcnMleFhz/qyZy01eQrpRPNA3+3hDOx/z/PWmH2Ht/LxGUP8d2BDbR0OvlHZDwde02scjl7MvfQ9u2WFJR93yi4CRvLx9SSEDYewlzyGYBk5GcQ/2oD7Ab+kJdbQvnp+bJzBKXZ8scWpm+ZzrH8Ywy4ZAADWw+sMCRUTVFK8e2aF5m36W2sjhPcE3GBHhb5qSXsOC6Mn5yFpfzAwxWsiGhKt6d+84tM/sJc8hmA5NhzsCpluCwxy2nkS3WK6Zun8+SXwyh0OnABX/+ylGlrx7H20e2E2Kpqlqo6IkK37mPp1n2sx8uuDst7v0W/lY+xTRUThB7/T7ZE0a134Gf+8BcBOeauqzSLbUaUxVpuf5CCfsGxFZ6XY8/hiZXDOOFWbNAJ7bZn7WXeyuFekrbmLPtlGW3fa0vMxBg6ze7Et2nfVrusBh2HsGnAXFKjLmQVERyNvoRH+8/+S4+pK8NUbh9iEQvvdxpJONpzCiBMQX2xMLrHhArP2/D7BoIMnDTygYUpc7wjbA2Zt20edy66jdSjqeTYc9h0cBNJc3qz5rc11S+0ze1c+OQeOo3JI7yWBCn0J6Zy+5i+vSayqfsU7guuR3dl5bmQ89jRdxYNOg6p8JyokChUBY49scVn7s77A6UUT30xtJyDT4HTwahlVZ8jN6kZ5pjbD7TuMpJZXUZW+fjOjTsTZbGR6youNV4PAx6OCLywKQXFBRwpNJ4P3/lnmm+F+Qtjtty1AKvFyqobJnC+WIhSEO121HjREknXADQohdpCiapgEqaxqgMhX2oJpnLXElp3GUl6/7ksjWjKh4RzICqRUf3fD8hxp0UsPB16HuFlFDxcwZiwwFqyW5cxu+W1CGvbgXRrO/Csz5uTOofn1jxHek46CfUSmNB9Ardf6t2XwtM3TsW59AEmufKxA1EIr1giuevG1716XZNTmC13HefjlI95aNkD7M/ej1M52Ze1j/s+u4dFOxZ59brS9g5G9/+ArOhWHCKKV0Ia8HJoMEFL76b1tNZ8ufdLr17fxPRQq/PET4ojvfB4uf0XRjRgz0jfLFp5a9NbPPv106UWfoRbg1l21xd0b97dJzLUJcz83Ca4lMtQsQF+qyCntadxupyMWT263JruE04Ho1c87BMZ/qqYyl2HsYiFRhVYpxN8ZLX+s/BPCopOGH63yyC9j4nnMJW7jvNyWENDq/X4sOqGLzg7YkJjCK1g6HdR4KxyrZOYyl3Hue/GN3jXEkVjJYiCJkqYaYnmDg9arR1OB2vT1rJu/zqKnKWXX9osNv5hMC0WpuDliMAOVV3bMafC6jptbude4N7VY1HZB5CYeB2dxGB+PKsgiwU7FnA0/yhdE7pyXcJ1VBaPPnlfMrfNvwVXUSFKubCJhU+7PMf13V8qOWbUjVMJXfogL7vyOYaiOcKr1mj69D67YIsmZ4dpLTcBYOOBjfT5uDvOYjsFShEuQpfz2rB8yI8EWYMMz8nIz6DZG/El8eVPEonwe9/ZxF55/6mdqQth9Vhc2QewnOEFY1I5prXcpMq4lIv/mduX3OJCTqBQopeUrj+awj9XPFbhefO3z8dVNvoreuHIotXPld7Z5nYYsR3LmGydnMFUbK9jKrcJKYdTyLPnlNt/AvjntoqXlGYVZlFo0POzQ0nYYRP/YSq3iR5XVxSmudgwezUAPZr3INxgTB4M9IwMvNVqfzVM5TahTYM2xFjK21YjFDwQ1qDC8zo37kzSBVcRcdo61AgFAyyhtO9VcfAJE99gKrcJFrGwuOsYohEilM6CGaGgmyWYQb1frfA8EWH+Axt4v8Pj3GiNJEnZ+DC8MR/fcvYRUk08jyfyc/8dGIrO3vK5UmpUZeeY1vLAJGfLhyxKHs3Rgkyui2hE514TkLZ3+FsskzL4Kj93N+AWoI1Syi4ins3NauJTotvfywPt7/W3GCYeoqbd8keAiUopO4BS6mjNRTIxMfEENVXulsC1IrJJRNaKSIeKDhSRISKyWUQ2Z2Rk1PCyJiYmlVFpt1xEkoHzDb4a7T4/FugEdAAWikhzZTCQV0rNBGaCHnPXRGgTE5PKqVS5lVI9KvpORB4BPnUr8w8i4gLqA2bTbGLiZ2raLV8C3AAgIi3R/gvHaiqUiYlJzanpqrAPgA9EZDvgAAYZdclNTEx8T42UWynlAP7mIVlMTEw8iOmhZmJSR/HLem4RyQD2V+PU+tSOMb0pp2cx5SxNglLq3MoO8otyVxcR2VwVtzt/Y8rpWUw5q4fZLTcxqaOYym1iUkepbco9098CVBFTTs9iylkNatWY28TEpOrUtpbbxMSkigS0covIGBE5KCI/uz9JFRzXR0R+EZG9IvKMH+ScIiL/FZFUEflMROpVcFyaiGxz34vPolVUVj8iEiIiC9zfbxKRpr6S7TQZ4kXkGxHZJSI7RGSYwTHXi0j2ab+HF/wg5xmfoWimuusyVUSu8LWMJSilAvYDjAFGVnKMFfgVaI72bU8BWvlYzl6Azb09CZhUwXFpQH0fy1Zp/QCPAtPd2wOBBX541g2BK9zbUcBuAzmvB1b4WrazeYZAErASEPRqyU3+kjWgW+4q0hHYq5Tap7Q77Hx0dBifoZT6SilV7P73eyCQ8uRUpX5uAT5yb38CdJfKUo14GKXUIaXUVvd2LrALqI0hVG8BPlaa74F6ItLQH4LUBuUe6u7efCAisQbfXwAcOO3/dPz7o7gf/eY2QgFficgWERniI3mqUj8lx7hfUtlAnE+kM8A9LGgHbDL4urOIpIjIShG51KeCaSp7hgHze/R7rrBKgkG8B4xDV+g44DW08pQqwuBcj08BnElOpdRS9zGj0YEi51ZQzDVKqT/csea+FpH/KqXWeVrWMlSlfnxSh1VBRCKBxcBwpVTZTAlb0a6XeW77yxLgIh+LWNkzDJi69LtyqzMEgzgdEZkFrDD4Kh2IP+3/xsAfHhCtFJXJKSKDgJuA7so9+DIo4w/336Mi8hm6y+xt5a5K/Zw8Jl1EbEAM4POUISIShFbsuUqpT8t+f7qyK6W+EJFpIlJfKeUzv/MqPEOf/B6rQkB3y8uMVQYA2w0O+xG4SESaiUgw2iC0zBfynURE+gBPA/2UUoaZ5kUkQkSiTm6jjXBG9+NpqlI/y4BB7u3/BdZU9ILyFu4x/vvALqWUYX5hETn/pC1ARDqif7+ZPpSxKs9wGfB/bqt5JyBbKXXIVzKWwp+WxypYJv8FbANS3ZXW0L2/EfBFGQvlbrRVeLQf5NyLHmf97P5MLysn2lqd4v7s8KWcRvUDjEW/jABCgUXu+/gBaO6HOuyC7r6mnlaPScDDwMPuY4a66y4Fbbi82scyGj7DMjIK8K67rrcBV/q6Lk9+TA81E5M6SkB3y01MTKqPqdwmJnUUU7lNTOoopnKbmNRRTOU2MamjmMptYlJHMZXbxKSOYiq3iUkd5f8BwbKR1xR3ENMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.optimize import minimize\n", "import numpy as np\n", "import itertools\n", "import random\n", "from math import sin, cos\n", "import matplotlib.pyplot as plt\n", "from skimage import measure\n", "\n", "%matplotlib inline\n", "plt.axes(aspect=\"equal\")\n", "\n", "def monomials(x, degree=1):\n", " m = [1.]\n", " for d in range(1, degree+1):\n", " for c in itertools.combinations_with_replacement(x, d):\n", " m.append(np.prod(c))\n", " return np.array(m)\n", "\n", "\n", "m1 = 100\n", "class1 = [ np.array([\n", " random.normalvariate(1., 1.5), random.normalvariate(1., 0.5)\n", "]) for i in range(m1) ]\n", "\n", "m2 = m1\n", "angle1 = -np.pi*2/3\n", "angle2 = np.pi*2/3\n", "ex = np.array([1., 0.]); ey = np.array([0., 1.])\n", "class2 = []\n", "for i in range(m2):\n", " phi = random.normalvariate(0., 1.)\n", " r = random.normalvariate(5., 0.5)\n", " p = ex*cos(phi)*r + ey*sin(phi)*r\n", " class2.append(p.copy())\n", " \n", "plt.scatter([c[0] for c in class1], [c[1] for c in class1])\n", "plt.scatter([c[0] for c in class2], [c[1] for c in class2])\n", "\n", "x = class1 + class2\n", "x = np.array(x)\n", "y = [1.]*len(class1) + [-1.]*len(class2)\n", "y = np.array(y)\n", "m = len(x)\n", "perm = np.random.permutation(m)\n", "x = x[perm]\n", "y = y[perm]\n", "\n", "plt.scatter(\n", " [c[0] for c in x], [c[1] for c in x],\n", " color=[ \"r\" if yy > 0. else \"g\" for yy in y ]\n", ")\n", "\n", "degree = 3\n", "xext = np.array([monomials(xx, degree) for xx in x])\n", "n = len(xext[0])\n", "print(\"n =\", n)\n", "C = 10. # Hyperparameter\n", "w = np.array([0.]*n)\n", "b = 0.\n", "\n", "def hingeLoss(c):\n", " return max(1. - c, 0.)\n", "\n", "def errorFunction(wb):\n", " w = wb[:-1]\n", " b = wb[-1]\n", " w2 = w @ w\n", " s = 0.\n", " m = len(xext)\n", " for i in range(m):\n", " c = y[i]*(w @ xext[i] - b)\n", " s += hingeLoss(c)\n", " return w2 + (C/m)*s\n", "\n", "def classifier(p):\n", " pext = monomials(p, degree)\n", " return w @ pext - b\n", "\n", "res = minimize(errorFunction, np.zeros(n + 1))\n", "w = res.x[:-1]\n", "b = res.x[-1]\n", "print(\"w =\", w)\n", "print(\" b =\", b)\n", "\n", "# Draw the separating line\n", "xmin = min([xx[0] for xx in x]) - 1.\n", "xmax = max([xx[0] for xx in x]) + 1.\n", "# print(\"xmin =\", xmin)\n", "# print(\"xmax =\", xmax)\n", "ymin = min([xx[1] for xx in x]) - 1.\n", "ymax = max([xx[1] for xx in x]) + 1.\n", "# print(\"ymin =\", xmin)\n", "# print(\"ymax =\", xmax)\n", "steps = 100\n", "\n", "def xcoord(j):\n", " dx = (xmax - xmin)/steps\n", " return xmin + j*dx\n", "def ycoord(i):\n", " dy = (ymax - ymin)/steps\n", " return ymin + i*dy\n", "\n", "# a is a matris of dimension (steps, steps)\n", "a = np.array([[0.]*steps for iy in range(steps)])\n", "for i in range(steps):\n", " for j in range(steps):\n", " xx = np.array([xcoord(j), ycoord(i)])\n", " a[i, j] = classifier(xx)\n", "nullContours = measure.find_contours(a, 0.)\n", "for c in nullContours:\n", " plt.plot(\n", " [xcoord(cc[1]) for cc in c], \n", " [ycoord(cc[0]) for cc in c],\n", " color=\"blue\"\n", " )" ] }, { "cell_type": "markdown", "id": "80baab8a-83ad-4ca8-a4aa-588ba9279388", "metadata": {}, "source": [ "# Drawing Isolines" ] }, { "cell_type": "code", "execution_count": 21, "id": "982ccac4-1c1a-4621-ba87-cb9533f6748a", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.axes(aspect=\"equal\")\n", "def f(x, y):\n", " return ((x - 2) + (y - 1))**2/4 + ((x - 2) - (y - 1))**2\n", "\n", "xmin = -5.; xmax = 10.\n", "ymin = -5.; ymax = 10.\n", "m = 100; n = 100\n", "\n", "def xcoordinate(j):\n", " dx = (xmax - xmin)/n\n", " x = xmin + j*dx\n", " return x\n", "\n", "def ycoordinate(i):\n", " dy = (ymax - ymin)/m\n", " y = ymin + i*dy\n", " return y\n", "\n", "a = np.array([[0.]*n for i in range(m)])\n", "for i in range(m):\n", " y = ycoordinate(i)\n", " for j in range(n):\n", " x = xcoordinate(j)\n", " a[i, j] = f(x, y)\n", " \n", "for l in range(20):\n", " level = 0.1*(2**l)\n", " contours = measure.find_contours(a, level)\n", " for c in contours:\n", " plt.plot(\n", " [ xcoordinate(cc[1]) for cc in c ],\n", " [ ycoordinate(cc[0]) for cc in c ]\n", " #, color=\"blue\"\n", " )\n", " \n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "2228b4d9-d36f-40d0-8c57-b0129d90c9b0", "metadata": { "tags": [] }, "outputs": [], "source": [] } ], "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.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }