{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Maximum Margin Classifiers - The Support Vector Machine" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Given a labeled scatter plot, such as the one below, the best way to classify points of different classes is to find a hyper-plane (straight line in the 2-d case) that separates the two classes.</p>" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os\n", "import course_utils as bd\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "import imp\n", "imp.reload(bd)\n", "%matplotlib inline\n", "\n", "\n", "#For mac users\n", "cwd = os.getcwd()\n", "datadir = '/'.join(cwd.split('/')[0:-1]) + '/data/'\n", "#For window's users, hardcode the dir:\n", "#datadir = " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAegAAAHfCAYAAACbL0sZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGQpJREFUeJzt3X+M5Pdd3/HX27GjCliihohQHELbAIrujhChxpzU2FqS\ntnFQJSMqVUnaUFIhLLWB/JfQqsh7EhLkDySKUkBuXX60QlFFkGJaaEJpRnbEBYyaH9ydnTgBhcQJ\nQUBACxKSz3r3j9nLLZu729m9+fGZmcdDWu3M7HdnPl/feZ73/Xy/8/1WdwcAGMsdqx4AAPDlBBoA\nBiTQADAggQaAAQk0AAxIoAFgQMcGuqoeqaovVNXHbrHMT1XV01X1kap65XyHCADbZ5Yt6J9L8rqb\n/bCqXp/kZd39zUkeTPKzcxobAGytYwPd3R9M8sVbLPJAkl88WPa3k7ygql48n+EBwHaaxz7ou5N8\n5tD9Zw4eAwBO6c5lvlhVOa8oAFunu+ukvzOPLehnknzDofsvOXjshrp7a78eeuihlY/B+lt/6279\nrf9yv05r1kDXwdeNPJrke5Okqs4n+fPu/sKpRwQAHD/FXVW/lGQ3yddU1R8meSjJ85N0dz/c3b9W\nVd9VVZ9M8ldJ3rLIAQPANjg20N39phmWeet8hrPZdnd3Vz2ElbL+u6sewsps87on1n/b1/+06nbm\nx0/8YlW9zNcDgFWrqvSKDhIDAOZMoAFgQAINAAMSaAAYkEADwIAEGgAGJNAAMCCBBoABCTQADEig\nAWBAAg0AAxJoABiQQAPAgAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoABiTQ\nADAggQaAAQk0AAxIoAFgQAINAAMSaAAYkEADwIAEGgAGJNAAMCCBBoABCTQADEigAWBAAg0AAxJo\nABiQQAMrNZmsegQwJoEGVkqgV8N/9/EJNMAWEujx3bnqAQDbZzK5HogLF64/vrs7/QIEGliBoyHe\n21vRQLaMfxitF4EG2BL+YbRe7IMGVsqWG9yYQAMrJdCr4b/7+Kq7l/diVb3M1wOAVauqdHed9Pds\nQQPAgAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoABiTQADAggQaAAQk0AAxI\noAFgQAINAAMSaAAYkEADwIAEGuCUJpNVj4BNJtAApyTQLJJAA8CA7lz1AADWyWRyfcv5woXrj+/u\nTr9gXgQa4ASOhnhvb0UDYeOZ4gaAAQk0wCmZ0maRqruX92JVvczXA4BVq6p0d53092xBA7ARNu1j\nbwINwEYQaABg4XzMCoC1tcmfSxdoANbWJn8u3RQ3wIw2bR8nYxNogBkJ9NjWfUr7KIEGYCNsWqDt\ngwa4hU0+CImxzRToqro/yU9musX9SHe/88jPvzrJf0/y0iTPS/IT3f3z8x0qwPJt8kFIjO3YKe6q\nuiPJu5K8LsnZJG+sqpcfWezfJrnc3a9M8p1JfqKqbJ0Dc2HfL9toln3Q9yR5urs/3d3PJnl3kgeO\nLNNJdg5u7yT50+6+Or9hAttslECb0maZZgn03Uk+c+j+Zw8eO+xdSc5U1eeSfDTJ2+YzPIBxCDTL\nNK9p6Ncl+XB3v6aqXpbkN6rqFd39l3N6fmDLODiLbTdLoJ/J9OCva15y8Nhhb0nyY0nS3Z+qqj9I\n8vIkv3v0yfYOHWGxu7ubXf+nwUaZTOYTUAdnsa4mk0kmc9gvc+z1oKvqeUk+nuS1ST6f5HeSvLG7\nnzy0zH9K8sfdfaGqXpxpmL+tu//syHO5HjRsuL29+cd0Ec8Jy3La60EfuwXd3c9V1VuTvD/XP2b1\nZFU9OP1xP5zkR5P8fFV97ODX3n40zgCnZaKNbXTsFvRcX8wWNGyko/uLH3poetv+YljgFjTAcewv\nhvlzLm4AGJBAA3NlShvmwz5oAFig0+6DtgUNAAMSaAAYkEADwIAEGgAGJNAAMCCBBoABCTTAhprD\nBZVYIYGGRdjfTy5enH6HFRHo9SbQMG/7+8m99yb33Tf9LtLAKbhYBszbpUvJ5cvJ1avJlSvT2+fP\nr3pUbImjVxa7xpXF1o9Aw7ydO5ecPTuN85kz09uwJK4stjkEGuZtZyd5/PHplvPZs9P7ACck0LAI\nOzumtVk5U9rrzdWsAGCBXM0KADaIQAPAgAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBA\nA8CABBoABiTQADAggQaAAQk0bKnJZNUjuLFRxwXLJtCwpUYN4ajjgmUTaAAY0J2rHgCwPJPJ9S3U\nCxeuP767O/1alVHHBask0LBFjgZvb29FAzli1HHBKpniBoABCTRsqVGnjkcdFyxbdffyXqyql/l6\nALBqVZXurpP+ni1oABiQQAPAgAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoA\nBiTQADAggQaAAQk0AAxIoAFgQAINAAMSaAAYkEADwIAEGgAGJNDAVplMVj0CmI1AA1tFoFkXAg0A\nA7pz1QMAWLTJ5PqW84UL1x/f3Z1+wYgEGth4R0O8t7eigcAJmOIGgAEJNLBVTGmzLqq7l/diVb3M\n1wOAVauqdHed9PdsQQPAgAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoABiTQ\nADAggQaAAQk0AAxIoAFgQAINAAOaKdBVdX9VPVVVn6iqd9xkmd2q+nBVXaqqD8x3mACwXaq7b71A\n1R1JPpHktUk+l+SJJG/o7qcOLfOCJL+V5J909zNV9aLu/pMbPFcf93oAsEmqKt1dJ/29Wbag70ny\ndHd/urufTfLuJA8cWeZNSd7T3c8kyY3iDADMbpZA353kM4fuf/bgscO+JckLq+oDVfVEVb15XgME\ngG105xyf59uTvCbJVya5WFUXu/uTRxfc29v70u3d3d3s7u7OaQjAvEwmif814XQmk0kmk8ltP88s\n+6DPJ9nr7vsP7v9wku7udx5a5h1J/lZ3Xzi4/1+S/Hp3v+fIc9kHDWtgb2/6Bdy+Re6DfiLJN1XV\nN1bV85O8IcmjR5Z5b5JXV9XzquorknxHkidPOhgAYOrYKe7ufq6q3prk/ZkG/ZHufrKqHpz+uB/u\n7qeq6n1JPpbkuSQPd/eVhY4cmKvJZPqVJBcuXH98d9d09+2wu4DTOnaKe64vZoob1sJJprgF6Nbs\nLmCRU9wANzWHY2GAG5jXUdzABrFFfHvsLmAeBBr4MsdFRIBu7eh/B1PcnIZAAycmQLB49kEDLJAZ\nBU5LoIHbIkC35r8Pp+VjVgCwQD5mBQAbRKABYEACDQADEuhNt7+fXLw4/Q4bzlnN2CQCvcn295N7\n703uu2/6XaTZcALNJhHoTXbpUnL5cnL1anLlyvQ2AGvBmcQ22blzydmz0zifOTO9DRvGaUfZVD4H\nven296dbzmfPJjs7qx4NLJRLOzKi034O2hb0ptvZSc6fX/UoADgh+6CBjWFKm01iihsAFsipPgFg\ngwg0AAxIoAFgQAINwKk5e9viCDTAAm16wDZ9/VZJoAEWSMA4LScqAeBEnF51OQQa2BqTyXICsukB\nO7oeTq+6GAINbI1lBVrAmAf7oAE4tU2YERiVLWhYpP396XW5z51zNbEVWfV086YHbNPXb5WcixsW\nZX8/uffe65f7fPzxtY70sqaHF8nlKFkF5+KG0Vy6NI3z1avJlSvT22vMx4VguQQaFuXcuemW8113\nJWfOTG+zUus+A8B2sQ8aFmVnZzqtfW2Kew2nt1e9/3be1nHMbC/7oIGZ2H8Lp2MfNABsEIEGZmJ6\nGJbLFDcALJApbgDYIAINAAMSaAAYkEADwIAEGgAGJNAAMCCBBoABCTQADGi9Ar2/n1y8OP0OABts\nfQK9v5/ce29y333T7yINwAZbn0BfujS9bN/Vq8mVK9PbALCh1ifQ585Nr6l7113JmTPT2wCwodbr\nYhn7+9Mt57Nnk52d+Q0MABbktBfLWK9AA8CacTUrANggAg0AAxJoABiQQAPAgAQaAAYk0AAwIIEG\ngAEJNMvlgicAMxFolmeWC54IOEASgWaZjrvgiSuWAXyJQLM8x13wxBXLAL7EubhZrltd8OTaFvSV\nK9OAP/64i6IAa8/FMtgMrlgGbBiBBoABuZoVAGwQgQaAAQk0AAxIoAFgQAINAAMSaAAYkEADwIAE\nGgAGJNAAMCCBBoABCTQADEigAWBAAg0AAxJogAWYTFY9AtadQAMsgEBzu2YKdFXdX1VPVdUnquod\nt1juVVX1bFV9z/yGCADb587jFqiqO5K8K8lrk3wuyRNV9d7ufuoGy/14kvctYqAAo5tMrm85X7hw\n/fHd3ekXnMSxgU5yT5Knu/vTSVJV707yQJKnjiz3g0l+Ocmr5jpCgDVxNMR7eysaCBthlinuu5N8\n5tD9zx489iVV9fVJvru7fyZJzW94ALCdZtmCnsVPJjm8b/qmkd479E/K3d3d7Jr3ATaQt7btNZlM\nMpnDUYLV3bdeoOp8kr3uvv/g/g8n6e5+56Flfv/azSQvSvJXSX6gux898lx93OsBwCapqnT3iWeX\nZwn085J8PNODxD6f5HeSvLG7n7zJ8j+X5Fe7+1du8DOBBmCrnDbQx05xd/dzVfXWJO/PdJ/1I939\nZFU9OP1xP3z0V046CADgbzp2C3quL2YLGoAtc9otaGcSA4ABCTQADEigAWBAAg0AAxJoABiQQAPA\ngAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoABiTQADAggQaAAQk0AAxIoAFg\nQAINAAMSaAAYkEADwIAEetn295OLF6ffAeAmBHqZ9veTe+9N7rtv+l2kAbgJgV6mS5eSy5eTq1eT\nK1emt1k+sxjAGhDoZTp3Ljl7NrnrruTMmeltluu4WQzxBgYh0Mu0s5M8/njy2GPT7zs7qx7R9rnV\nLIZdEMBABHrZdnaS8+fF+ahlbbneahbDLghgINXdy3uxql7m67Emrm25Xr48DeaiZxf296+/1uHX\nuTaOK1em8TbLAcxBVaW768S/J9Ccyv7+dIvz3Lnbj9jFi9Np5atXp1u2jz02nWVYhZvFG+CUThto\nU9yc3Lz31Y508JxdEMAgbEFzcovY4rXlCmwoU9wsj321ADMTaJbLFi/ATAQaAAbkIDEA2CACDQAD\nEmgAGJBAA8CABBoABiTQADAggQaAAQk0AAxIoAFgQAINAAMSaFiE/f3pVb9u91KcwNYSaJi3eV8v\nG9hKAg3zdunS9EpfV69OL8l5+fKqRwSsIYGGeTt3bnoZzrvuml4v++zZVY8IWEMuNwmL4HrZwAHX\ngwaAAbkeNNvB0dHAlhBo1oejo4EtItCsD0dHA1tEoFkfjo4GtoiDxFgvjo4G1oyjuAFgQI7iBoAN\nItAAMCCBBoABCTQADEigAWBAAg2r5vSlwA0INKyS05cCNyHQsEpOXwrchEDDKjl9KXATziTG6e3v\nT7cAz51z2s3b4fSlsNGc6pPlurbv9FpYHn9cXABuwKk+WS77TgEWSqA5HftOARbKFDenZ98pwLHs\ngwaAAdkHDQAbRKABYEACDQADEmgAGJBAsxqu4ARwSwLN8rmCE8CxBJrlcxYygGMJNMvnLGQAx5op\n0FV1f1U9VVWfqKp33ODnb6qqjx58fbCqvnX+Q2Vj7OxML67x2GO3d5EN+7GBDXbsmcSq6o4kn0jy\n2iSfS/JEkjd091OHljmf5Mnu/ouquj/JXnefv8FzOZMY8+FqWsCaWOSZxO5J8nR3f7q7n03y7iQP\nHF6guz/U3X9xcPdDSe4+6UDgROzHBjbcLIG+O8lnDt3/bG4d4O9P8uu3Myg4lv3YwIa7c55PVlXf\nmeQtSV49z+eFL3NtP7araQEbapZAP5PkpYfuv+Tgsb+hql6R5OEk93f3F2/2ZHt7e1+6vbu7m93d\n3RmHCkfs7CTnv+xQB4CVmkwmmUwmt/08sxwk9rwkH8/0ILHPJ/mdJG/s7icPLfPSJL+Z5M3d/aFb\nPJeDxADYKqc9SOzYLejufq6q3prk/Znus36ku5+sqgenP+6Hk/xIkhcm+emqqiTPdvc9Jx0MADB1\n7Bb0XF/MFjQAW2aRH7MCAJZMoAFgQAINAAMSaAAYkECzflwkA9gCAs16uXaRjPvum34XaWBDCTTr\nxUUygC0h0KwXF8kAtoQTlbB+9vddJANYG6c9UYlAA8ACOZMYAGwQgQaAAQk0AAxIoAFgQAINAAMS\naBiNU5kCEWgYi1OZAgcEGkbiVKbAAYGGkTiVKXDAmcRgNE5lChvFqT4BYEBO9QkAG0SgAWBAAg0A\nAxJoABiQQAPAgAQaAAYk0AAwIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoABiTQADAggQaA\nAQk0AAxIoAFgQAINAAMSaAAYkEADwIAEGgAGJNAAMCCBZjvt7ycXL06/AwxIoNk++/vJvfcm9903\n/S7SwIAEmu1z6VJy+XJy9Wpy5cr0NsBgBJrtc+5ccvZsctddyZkz09sAg6nuXt6LVfUyXw9uan9/\nuuV89myys7Pq0QAbrKrS3XXi3xNoAFic0wbaFDcADEigAWBAAg0AAxJoABiQQAPAgAQaAAYk0AAw\nIIEGgAEJNAAMSKABYEACDQADEmgAGJBAA8CABBoABiTQADAggQaAAQk0AAxIoAFgQAINAAMSaAAY\nkEADwIAEGgAGJNAAMCCBBoABCTQADEigAWBAAg0AAxJoABiQQAPAgAQaAAYk0AAwoJkCXVX3V9VT\nVfWJqnrHTZb5qap6uqo+UlWvnO8wN8NkMln1EFbK+k9WPYSV2eZ1T6z/tq//aR0b6Kq6I8m7krwu\nydkkb6yqlx9Z5vVJXtbd35zkwSQ/u4Cxrr1t/0tq/SerHsLKbPO6J9Z/29f/tGbZgr4nydPd/enu\nfjbJu5M8cGSZB5L8YpJ0928neUFVvXiuIwWALTJLoO9O8plD9z978NitlnnmBssAADOq7r71AlX/\nLMnruvsHDu7/yyT3dPcPHVrmV5P8WHf/1sH9/5Pk7d39/448161fDAA2UHfXSX/nzhmWeSbJSw/d\nf8nBY0eX+YZjljnVAAFgG80yxf1Ekm+qqm+squcneUOSR48s82iS702Sqjqf5M+7+wtzHSkAbJFj\nt6C7+7mqemuS92ca9Ee6+8mqenD64364u3+tqr6rqj6Z5K+SvGWxwwaAzXbsPmgAYPkWeiaxqvrb\nVfX+qvp4Vb2vql5wg2VeUlX/t6ouV9XvVdUP3ei51sk2n9jluHWvqjdV1UcPvj5YVd+6inEuyix/\n9gfLvaqqnq2q71nm+BZtxr/7u1X14aq6VFUfWPYYF2mGv/9fXVWPHvx//3tV9X0rGOZCVNUjVfWF\nqvrYLZbZyPe95Pj1P9V7X3cv7CvJOzM9mjtJ3pHkx2+wzNcleeXB7a9K8vEkL1/kuBa8znck+WSS\nb0xyV5KPHF2fJK9P8r8Obn9Hkg+tetxLXPfzSV5wcPv+TVn3Wdf/0HK/meR/JvmeVY97yX/+L0hy\nOcndB/dftOpxL3n9/12mn3hJkhcl+dMkd6567HNa/1cneWWSj93k5xv5vneC9T/xe9+iz8X9QJJf\nOLj9C0m+++gC3f1H3f2Rg9t/meTJrPdnqLf5xC7Hrnt3f6i7/+Lg7oey3n/WR83yZ58kP5jkl5P8\n8TIHtwSzrP+bkrynu59Jku7+kyWPcZFmWf9OsnNweyfJn3b31SWOcWG6+4NJvniLRTb1fS/J8et/\nmve+RQf6a/vgaO7u/qMkX3urhavq72b6L5DfXvC4FmmbT+wyy7of9v1Jfn2hI1quY9e/qr4+yXd3\n988k2bSPHc7y5/8tSV5YVR+oqieq6s1LG93izbL+70pypqo+l+SjSd62pLGNYFPf905jpve+WT4H\nfUtV9RtJDv8rqDL9V+J/uMHiNz0iraq+KtOtircdbEmzwarqOzM92v/Vqx7Lkv1kprt7rtm0SB/n\nziTfnuQ1Sb4yycWqutjdn1ztsJbmdUk+3N2vqaqXJfmNqnqF97ztcZL3vtsOdHf/41sM5AtV9eLu\n/kJVfV1uMqVXVXdmGuf/1t3vvd0xrdjcTuyyhmZZ91TVK5I8nOT+7r7VlNi6mWX9/0GSd1dVZboP\n8vVV9Wx3Hz23wDqaZf0/m+RPuvuvk/x1VT2W5Nsy3Xe77mZZ/7ck+bEk6e5PVdUfJHl5kt9dyghX\na1Pf92Z20ve+RU9xP5rk+w5u/6skN4vvf01ypbv/44LHswzbfGKXY9e9ql6a5D1J3tzdn1rBGBfp\n2PXv7r9/8PX3Mv1H6b/ZkDgns/3df2+SV1fV86rqKzI9WOjJJY9zUWZZ/08n+UdJcrD/9VuS/P5S\nR7lYlZvPCm3q+95hN13/07z33fYW9DHemeR/VNW/zvQv5j9Pkqr6O0n+c3f/06r6h0n+RZLfq6oP\nZzoN/u+7+38veGwL0Vt8YpdZ1j3JjyR5YZKfPtiKfLa771ndqOdnxvX/G7+y9EEu0Ix/95+qqvcl\n+ViS55I83N1XVjjsuZnxz/9Hk/z8oY/ivL27/2xFQ56rqvqlJLtJvqaq/jDJQ0menw1/37vmuPXP\nKd77nKgEAAa06CluAOAUBBoABiTQADAggQaAAQk0AAxIoAFgQAINAAP6/+gb8MZyhnGoAAAAAElF\nTkSuQmCC\n", "text/plain": [ "<matplotlib.figure.Figure at 0x222b12498d0>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import os\n", "import course_utils as bd\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "import imp\n", "imp.reload(bd)\n", "%matplotlib inline\n", "\n", "\n", "#For mac users\n", "cwd = os.getcwd()\n", "datadir = '/'.join(cwd.split('/')[0:-1]) + '/data/'\n", "#For window's users, hardcode the dir:\n", "#datadir = \n", "\n", "\n", "\n", "#generate data\n", "m = [[0.25,0.25], [0.75,0.75]]; s = 0.025; n=20\n", "X1 = pd.DataFrame(np.random.multivariate_normal([m[0][0], m[0][1]], [[s,0],[0,s]], n), columns=['x1','x2'])\n", "X2 = pd.DataFrame(np.random.multivariate_normal([m[1][0], m[1][1]], [[s,0],[0,s]], n), columns=['x1','x2'])\n", "\n", "plt.figure(figsize = (8, 8))\n", "\n", "#Plot data and any hyper-plane that separates the data\n", "plt.plot(X1['x1'], X1['x2'],'r.')\n", "plt.plot(X2['x1'], X2['x2'],'b+');\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>The issue with looking for just any separating line is that an infinite number of lines might qualify, even if the space between classes is quite small. The following shows the same data above along with many qualifying lines.</p>" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0, 1)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAegAAAHfCAYAAACbL0sZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuU11W9//HXHkBQGFPAK4ElSApUaF6oIzReViJrHfFk\n2lHTzNXSs/BWnTyWlgwdrePpqGlWpj+PmZ6Tx7SDWlaYMoGGSqEYjCQXD3hBFEUdkNvM7N8f3/kM\n3/nO9/K5X5+PtWb5vezP/my+zsx73u+9P/tjrLUCAADp0pT0AAAAQH8EaAAAUogADQBAChGgAQBI\nIQI0AAApRIAGACCFGgZoY8wdxpgNxpjn67S52Riz0hjznDFmcrhDBACgeNxk0HdKOqnWm8aYkyWN\ntdYeIulCSbeGNDYAAAqrYYC21j4haVOdJjMl/byn7dOSPmCM2S+c4QEAUExhzEGPkvRy2fNXe14D\nAAA+DYzzZMYY9hUFABSOtdZ4PSaMDPpVSaPLnn+w57WqrLV8Rfg1e/bsxMfg58vr94fjD3/4Q7/X\n4vg+mz17tutzXXPNNZKka665xvO/r9o5vPwbo/o84vics/q9nKUvPuN4vvxyG6BNz1c1D0k6V5KM\nMVMkvWOt3eB7RCg0Y9z9kdnd3S1JOvHEE3tfC/KDEKWrrrpKkvStb30r4ZEAyJKGJW5jzH9LapE0\nwhizTtJsSbtJstba26y1jxhjZhhjVknaIulLUQ4Y+WStdR2cJfeBHACyqmGAttae5aLNxeEMB0G1\ntLQkPYTA/ATryuy52mthamlp0Zw5c2I5V1Hl4Xs57fiM083E+YvFGGP5RYZa7rnnHp1zzjmS3Jer\nnUBe3r7aa1Fxey6vY6r8A8Xvvy+qzyLOzxjIup4/4j2X/QjQSBW/gSxvAbr8GEl68803NXLkSM99\nEaCB5BGgkQvlQclLACpv77WPIOIK0OXHEqCBbPEboLlZBlLF6y/8au0JGtFygvNLL72U8EiAfCNA\nI7WGDx/uqf3DDz8c0UgaK+Kq8g996ENJDwHINUrcSCUvJVRrrZqamvq0T1uZO08lbsrbgDeUuFFY\n1bJXggeArCNAI5WmTZsmyXvpOE+l5rfffjvpIQBIECVupFbQS67iKnNHVeIuP678WErcQLZQ4kZu\n+c2K4wogs2bNklR/nLfffrsk6aKLLvJ9nieeeML3sQCyhwwaqeYnWyxvH1e2F+dCsSQz6B07dmjw\n4MGh9gnkHRk0cu3KK69s2MZNcEQwBGcgPmTQSD0/GeN9992n008/3fPxfhUlg2b+GfCODBrQrsBx\nxhlnJDyScJx99tlJDwFAQsigkXp+9+eOczX3Y489phNPPLHuOcJayU0GDWQLN8tArmVhsVijcxCg\ngWKixI1CcLPYi+ABIA8I0MiEsDPArLrllluSHgKAmBCgkTmLFy923TZvJdlLLrkksXM/9NBDiZ0b\nKCLmoJEZW7Zs0bBhwyQFWywW1ffgG2+8of3226/mOcKYgy4X9xx03v7YAeLCHDRyb+jQob6O+/nP\nf97neVRl7n333TeSfgmIQDGRQSNTwrrkKqrvw3r9Bzm331tqkkEDySODRiFkOTg88MADkqTzzz8/\n4ZEAyAIyaGSOlyy61jXEbo4NMratW7dqyJAhNd8PYx6aDBrIBjJoFIaXAFHZNurg0t3dLUnafffd\nIz0PgPwjQCPTNm/enPQQ+sj6ddYA0oMAjUx65plnJEnNzc0N2+6xxx6S+gfPLAXTpMvKBxxwgCTp\nC1/4QqLjAIqEOWhkVpA9qaOcT41rJXecc9DMPwP+MQeNwvKSCd9+++0RjqSvpUuXxnauWmbMmCFJ\n6uzsTHgkALwig0am+c2i41rNXdl33Bl00HOG2QdQVGTQKDSv88kEGgBpR4BGpoW1KxcApA0BGoVR\nK5hnJWC//vrrSQ8BQIwI0Mi8q666SlI6y9zXX399aH05d8oCUAwsEkMuuF3ENHbsWK1Zs6a3bdyX\nWwU9n5/FbWGds729XYcddpivPoAiY5EYoMZZ9OrVq30dF5a5c+dKkk455ZRYzhcmgjMQLzJo5Ibb\nTNFpd9NNN+nSSy+NLIuO+lKruDNofnYBf8iggR7Tp0+v+74TaC677LI4hoMItbUlPQIgOgRo5IYT\neH//+9/7Oj6qMvcnPvGJ0Po6++yzQ+srDwjQKJe37wcCNAqtp/QUSd9Ov0uWLAmtz3vuuSe0voC8\nyVuAHpj0AIAw7bbbbtqxY0fDwFu53Seyo61t1y/iOXN2vd7SUvoC8oIAjVzZvn17oMAbZUYdtjjG\n2tXVFWn/flQG4tbWhAaCVMjzH2wEaORWowB2xBFHaMmSJb3tyKj7Gziw9CsiK3+0oHjy/Acbc9DI\nHbfB5C9/+UvEI9mF4B+NrGdIQD0EaOSa20VV1113Xe/jMIMpmWe0CNAol7fvBzYqQS5Za9XU1NT7\nuJ5q94kO8/u0ss+4t/sMY2MUfm4B/9ioBChDSRlA1hGgkXtug3V5OwI8gKQRoJFbbsuy5e2iLOU6\nQX/hwoWSpMmTJ0d2LgDZxxw0cs3tfG2W5qErs3svc+xetLW16bjjjvN1LIBdmIMGqnAbWE488URJ\nlLnLEZyBZJFBI/ecQLtu3TqNHj26YbsosugsZtCs4AbCQQYN1PDKK69IksaMGeOq/dVXXx3lcADA\nFTJoFILbbLBaWTuM79kzzzxT9957b29/ZNBAcfjNoAnQKIQ0LBYLq28CNJAtlLiBOvwGJwBICgEa\nhVMv+FYL5ARrAEkgQKMwvGbRaS/tLl++XFI0f0AcfvjhkqSTTjop9L4BuEOARiF1dXXVfO8f/uEf\nJIUf+H7xi1+E2u+ECRNC6aea5557TpL0u9/9LrJzAKiPRWIolPvuu0+f//znJblbLFYujO9drwu8\n6vXhdrGZn8VeLBADwsMiMcCFM844w1P7f/7nf45oJABQHwEaheVmsdj1118fybmdEvKee+4ZSf/l\nTj31VElSZ2dn5OcCEB5K3CgkL6XhckG/f8O4FtpPH17PRYkbCA8lbsCHAQMGxHq+tWvXSgp/ARqX\nghVbW1vSI0AUCNAoJCcz7O7ubtgmTG73Awe8IEDnEwEa8CBtmWoU88rOv3Hx4sWh9w3AvYFJDwBI\nyowZM/TII48480NV23zxi1/UXXfdFfPI3IuyRH/kkUdG1jeCa2vblTnPmbPr9ZaW0heyj0ViKDQ/\ni8XCWijmtz8/95b2suiLBWLZ09pa+kI6sUgMCMBL6TpombveLmYA4CBAo9DcZIlhZ5JNTdH82J1w\nwgmR9Iv0o6SdTwRooMc3v/nNpIcQyOOPP570EJAQAnQ+MQcNqPG8a2VZe88999S7774b+Hz1ztno\n2Mo56Hp9MQcNJIc5aCBClcHqvffeS2gk0SIoA+lBgAbKxHWdc5iBMMy+nPlx9u0GkkeABuQuyF10\n0UV9nn/sYx8L5dxRLRoLIu4tUAH0xxw00MPLXG6jdmGdr95x5cc4r7322ms64IADXB3jtm8AwTAH\nDQSUh6B04IEHJj0ERIg9t4uFAA1UsXDhwqqvVwbx448/Po7hAJII0EVDgAbKvP/++5KkadOmuWo/\nf/583+fKQ8YOIDrcLAMos/vuuyc9BKAPbopRXK4CtDFmuqQfqJRx32Gtva7i/T0l3SNpjKQBkq63\n1v4s3KEC8ap1lytrbZ8FXqeddpoeeOCBOIcWifb29qSHgCoqAzE3xSiOhiVuY0yTpFsknSRpoqQz\njTGHVjS7SNJya+1kScdJut4YQ3aOTPJaev7Vr34V0UjcC6NcPnHixND6SjPmcZEVbuagj5a00lq7\n1lq7U9K9kmZWtLGSmnseN0t6y1rLTgfIvFobl4S9b/dJJ50UWl9xbbaSVVkO0JS0i8VNgB4l6eWy\n56/0vFbuFkkTjDGvSVoq6bJwhgcko1EW+d3vfrfP80suuSTQ+ebNmxfoeBQDAbpYwipDnyTpWWvt\n8caYsZIeNcZ8zFq7OaT+gcRs3rxZw4YNq9vmlltu0Q9/+MOYRgSvWGiFLHIToF9VafGX44M9r5X7\nkqTvSZK1drUx5iVJh0r6c2VnrWUrHFpaWtTCTwdS6umnn9Yxxxyj5uZmV4vF4F1bWzwBkoVWiFNb\nW5vaQphLabjVpzFmgKS/STpB0npJz0g601r7QlmbH0l6w1o7xxizn0qB+ePW2rcr+mKrT2SKl9tQ\nfutb39K//uu/+uq/3jncjqleX2628Exim8/W1viDZRLnRLFFttWntbZL0sWS5klaLulea+0LxpgL\njTEX9DS7RtKnjDHPS3pU0r9UBmcgy9xkytdcc43nfv/v//7P0zkQHEU7ZIWrOWhr7e8kfaTitZ+W\nPV6v0jw0kCuNythBy9wHHXSQ72PrqXUNdy2f+9znJEl77bVXJOMpl/R8MAEaWcHdrIAGGpWhy9//\n/ve/r69//euh9l+rfaOxVLvbVaNSfdw/n5SbUQTczQqISKOgde211/Y+vvzyy6MeDoCCIIMGXPCy\nWMzr93iRM+i4VnEDSSKDBiL07W9/W5K7hVx33XWX7/MUbaEYwRmojQwacCmqLLoyKLu49LFmu6xl\n0EARkEEDMclKlnvmmWf2Pj711FMlSZ2dbJEPZAUZNOCB2+z1gQce0Gc/+1lPfTrCyqAr27g5jp9P\nIHxk0ECMjjrqqH6vlQe30047Lc7hBOIE5zTcNhPALmTQgEd+5oDd9Dd58mQ999xzDY/1OxfeaItQ\nfjaBaJBBAylwww039D72egvJZ599NuzhAMgwMmjAo6FDh+r999+XFE4WXZ7BhnFTCzJo5FGWr5kn\ngwai0NEhLVpU+m+PLVu2hHqKN998U1I0q8Nff/310PsEkhDC3RszhwAN1NLRIU2dKk2bVvpvWZB2\nVAuq5ZnoM8880/A0I0eODDbOOg444IDI+gYQLVd3swIKadkyaflyqbNTam8vPZ4yRZL7u1gdc8wx\nnkrHt956q/7pn/7J892ogDxK+s5nSWMOGqjFyaDb26UJE6SFC6Xm5t63nQD9s5/9TF/84hf7HBrl\nPLSXOejydsxBI8uyfOcz5qCBsDU3l4LyggX9grMkdXd3S5LOO++8foeWB7u//vWvkQ6z0ujRo123\ndYLz9u3boxoOAJ/IoIEAwromOswMuta5qx1H9oysYBU3AF+qzUf/9Kc/TWAkQD5lNTgHQQYNBOQm\ni165cqXGjRvnqo8XX3xRH/nIRxr26TaDdtqSQQPJ8JtBE6CBgOqVst2WuSsDZdAbWxCggfSgxA0k\npF5wI/AB8IsADYTopZdeqvne+vXrYxwJgKwjQAMh2LBhgyTp4IMPrtnmwAMP9NyvcylXFNasWRNZ\n3wCCI0ADIdh3331rvuenzL1161ZJ0oABA3yN5+KLL27YZuzYsZIowwNpxSIxICRuFott3LhRI0aM\n6HfsW2+91bsnd1g7f9XaitTNQjQA4WGRGJCweoHuxz/+saTaN8aoFrQBFBsZNBAiN1m02x3CyKCB\nfCCDBlLATbDbe++9PfXJPZ2BYiJAAxHp6urq89xZ6f3OO++4Ot4J9tzTGSgmAjQQsrlz50qSBg7s\ne7v1eiu9AaASARoI2cyZMxu2qTU/HJdZs2Ylen4AjRGggQhVBuJ169bFdm4nk6/mJz/5iSRp/vx8\nLhBra0t6BEBwBGggArUWi40ePdpXfw899JDnY9xk8nkNZHn9d6FYCNBAxGqVs92UuZ1A7ybYAsiX\ngY2bAPCj/BaP5V588UWNHz8+gRGVlGeXc+bsetzSUvrKqra2Xf+2PP27UFxsVAJEqNFmI+Xvud2Y\nxMsGI9X+QCj/w2H2bKvW1obdZE5rq3L570I2sVEJkEKnnXaapORXbQPIHgI0EKH777+/6ut/+ctf\n+r22efNmSbWD+bnnnut7HLWy7byWfvP670KxUOIGIlZrf26/ZW4/Je5q8+H/+Z//qS996Uuu/x0A\n/PFb4iZAAzGoFlTjCNArV66suSCNn0UgHsxBAxlw6aWX9j5euHBh7+OoguUhhxwSSb8AokcGDcTE\nTRYddgZdeY5y/CwC8SCDBgqA1eBAcRCggZiVB9nf/va3VV+vFEa2297eHrgPAPGhxA3EqFGZ21Ht\n56SyndcSd+VKbn4WgXhQ4gYyhFI1gEYI0ECMqmWt//Vf/xX7ODo6OmI/JwBvKHEDMXOy5wULFmjq\n1Kl9XnOEWeLetm2bdt99d1/HAgiOjUqAjCgPmJUblDhq/Zz4nUP2G9wBBMccNJARQ4YM6ffarbfe\nGusYmAMH0o8MGkhAvW0+K19vdJzX8/k5HoB/ZNBAhhAcATRCgAYS5mS3//7v/96w7UEHHRT1cACk\nBCVuIEGVG5e4KWF73Yu7st9G/QMIFyVuIMPefffdfq+xkAsoNgI0kKClS5dKkvbaay9J0te+9rVI\nzlMtW77kkksiOReAcFDiBhJWr8zd1dWlpqamuu29nqccP49A9ChxAxlXLYAOGDDAU3sA+UGABhJG\nFptPbW1JjwBZR4AGUqRaVkymnE0EaARFgAZSgCwaQKWBSQ8AQPSuv/76qq9v2rRJe++9d8yjya+2\ntl2Z85w5u15vaSl9AV6wihtIie9973u68sora77v9c5X5aod43c1ONxpbS19AaziBjLum9/8ZtJD\nAJAiBGggI7q6upIeAjygpI2gKHEDKVNv1XZ5abr8Na99UuIG4kOJGwCAHCFAAylTntF++MMf7vNe\neSbc0dHR7zUA+UGABlJszZo1Nd8bNmxYoL4XL14siQAPpBUBGkixMIKn08e3v/3tPq8feeSRgfsG\nEB0WiQEpVB6Ym5qa1N3d3a+N24Ve5W2cx/Pnz1dLSwsLxYAYsEgMyKlqwbnSpk2bXPV1+umnS5KO\nO+64QGMCED0yaCCF3JS2K3cWq/WzVet+01xqBcSDDBoAgBwhQAMp5qa8HcS+++4riZXcQBpR4gZS\nqFoZuho3Zep6Je5qzwGEixI3kCPOvtteMts25z6HAHKBDBpIKTdZdKMs2Hl9/fr12n///au2JYMG\nokUGDRSQ2wzbCc7lrr/++rCHAyBEZNBAStXKdCvVm4eu9np5P1xqBUSPDBooqO3bt4fSz6WXXhpK\nPwDC4SpAG2OmG2NWGGNeNMZcUaNNizHmWWPMMmPM/HCHCeCNN97o8/yFF16QJA0ZMqT3tSuvvNJz\nv07m/MMf/jDA6ACErWGJ2xjTJOlFSSdIek3SYkn/aK1dUdbmA5L+JOkz1tpXjTEjrbUbq/RFiRtw\nqVF5ulytUrWbEnetdgDCEWWJ+2hJK621a621OyXdK2lmRZuzJD1grX1VkqoFZwDRYaMRIH/cBOhR\nkl4ue/5Kz2vlxksaboyZb4xZbIw5J6wBAtilMsOtl/Fu3rw56uEAiNDAEPs5QtLxkoZKWmSMWWSt\nXVXZsLW1tfdxS0uLWlpaQhoCUDz1Mufm5mZJ4ZSt29okflQBd9ra2kLZOMjNHPQUSa3W2uk9z78h\nyVprrytrc4WkIdbaOT3P/5+k31prH6joizlowKVGl07Vsscee2jLli2ujv+7v/s7PfHEE72vbd68\nWUOHDu3XZ2tr6QuAd1HOQS+WNM4Yc5AxZjdJ/yjpoYo2D0o61hgzwBizh6RjJL3gdTAAvKsMwO+/\n/77rY5988sk+fQwbNiy8gQEIpGGJ21rbZYy5WNI8lQL6HdbaF4wxF5betrdZa1cYY34v6XlJXZJu\ns9a2RzpyoCAa3TAjqgVibW2lL0maM2fX6y0tlLvzgGmL9GMnMSClrLVqamrqfeyoFpBXrlypQw45\npM+xbkvkbi61ClriJhikD9MW8WEnMSBnvGTG48aNi3AkwXGjLcC7sFZxA4hZeZZcGczDLnuT/eYD\n0xbZQoAGcqLRXHUQfn55EwzSp/Kzp8SdbgRoIMMaBWUvaz6eeeYZHX300c58WeCxEQyAYJiDBnLC\na/Y8c+bMPscdddRRoY8J6UUVI/0I0EDGnXfeeb2PvWS+c+fOjWA01REM0of/J+nHZVZAinm9Q1Vl\nybvaz1u1ttzVCogOl1kBkDFGa9euTXoYAEJABg2kmNsMuvL1epkwGTQQLzJoAJKkWbNm9T72e9kV\n95cGkkcGXamjQ1q2TJo0Seq5XR+QFD8ZdCWvmTZZdG1sWQo/yKDD0NEhTZ0qTZtW+m9HR9IjAiRJ\n3d3dDdsQUKPHlqWIEwG63LJl0vLlUmen1N5eegwkyAm6AwYM8N1HvXL1zTff3LANgGRQ4i7nZNDt\n7dKECdLChZS5kTgvC7nclLkb9UeJu6/KLUtnzy49ZstSuOW3xE2ArtTRUcqcJ04kOCMVvAbQakH6\n7bff1t577y1JOv3003X//fdr586dGjhwIAHaA27RCD+Ygw5Lc7M0ZQrBGbkyfPjw3se//OUvJUnN\nDb7HW4lEQKLIoIGUCyODrmzPSm5/WMUNPyhxAzkVVoCu1QcBGogWJW4ArMYGcoQADQBAChGggRzy\nUv5esmRJzfcAJIcADRTc4YcfXvO9LVu2xDgSIBvi2lGOAA0UzMaNGxu2cTLwYcOGRT0cJIRtS/0j\nQAMIpLLMvWbNGknSPvvsk8RwkDIE6PQbmPQAALizc+dODRo0yPfxBx98cIijAYqlcstXR5RbvhKg\ngZRzrlXebbfd6l6XvH379hhHhXrSuqFJEkEmLyo/ozg22iNAAzkxZMgQSX1L2+UbkSA+aQ3QSQQZ\n+MccNAAAHsT1xxcZNOBGR0fpfuGTJuXyRiobN27UyJEjnS0JJUmPP/64jj/++D6vobaslY/TOKas\niOuzYy9uoBHnPuHObUgTuE94o72zK9vUOr5So/233e7JndaSblK4LSXKsRc3EJVly0rBubNTam8v\nPc6J9evXh9IPl+wA4SNAA41MmlTKnAcNkiZMKD3OiQMPPDDpIeQS1QSEgTlooJHm5lJZ2ylxZ3AO\nOorV3Fmbc41T0f/9CAcBGnCjuVmaMiXpUdR03333+T7W7yIwLtkBokWJG8iBz3/+85IaL+byi2up\ngfgRoAH0UbnRiRuUdIHwcZkVkAGNLrNyezlUvUy4u7tbTU1NvvsGUB2XWQEFsGPHjsj6powNpAsB\nGsgAJ3sdPHhwZOdYu3ZtZH0D8I4SN5ARlRlu2CXuoH0DqI4SN4BI3XjjjUkPASgUMmggI2pl0MOH\nD9emTZt0+OGHa8mSJZ76qbWBiZd9vgHU5zeDJkADGVErQHsNngRoIF6UuAF4ZoxRd3d3v9c7OjoS\nGA2AcgRooOCqZdB77rlnAiMBUI4ADQBAChGggYKpNr/sdm45yo1SAPRFgAbQUBwbpQDoiwANQBIr\ntIG0IUADGeYs8HryySdD6afRawDiw3XQQEZUuw7a7/XJta593rRpk4YPH97ntcpj+BkGvGGjEqAA\nam0y4ufnqtHGJ5X9EqABf9ioBEAglLmBdCFAAwVXmRHXypAff/xxSQRtIC6UuIEMiaLEXa2f8vO8\n8MILOvTQQ/sdA8Ad5qCBAohyDrpav+WvlR/DzzHgHnPQQMGEGSQJuED6EKCBjGpqKv34VrsbVdiY\ndwbiR4DOq44OadGi0n+Ra2EHT4IxkA4E6Dzq6JCmTpWmTSv9102QJqAXnpcyN0EciB4BOo+WLZOW\nL5c6O6X29tLjevwEdORKrUVhlW2YqwbiQ4DOo0mTpIkTpUGDpAkTSo/r8RrQkXtkyEDyCNB51Nws\nLVwoLVhQ+m9zc/32XgM6cqtahlz+2vPPPx/ncIBC4zpolHR0lDLniRMbB3QkptZNLsLoq9omJc7r\nYZ4XKBqug0Ywzc3SlCkE55RLKih+5StfSeS8QJERoIEMCyNgr127VlL9XcJuvPHGfq/ddNNNgc8N\noDZK3EDG1LodpN9+Gu3FXav0HfT8QFFQ4gYQiQsuuEASwRiIGxk0kDFxZNC1zuPmemkAfZFBAwhs\n586ddd8nIAPxIUADUFdXlyRpt912S3gkABwEaAC9d8Yq5yZb7uzsjGI4AESABjJrjz32SOS85YF7\n0KBBiYwBKAICNJBRW7Zsie1c7M0NxI8ADaCPlStXNmzDYjEgegRoAJJ2Bd3x48f3vnbIIYc0PG7e\nvHmRjQkoMq6DBjLGKTevW7dOo0ePDtxPtWufG10PXe91AH35vQ6aAA1kTBQblbh5ze3rAPpioxIA\nsXrwwQd7H7OILDva2pIeAdwiQAPo584776z6+pAhQ3ofn3LKKXENByEiQGeHqwBtjJlujFlhjHnR\nGHNFnXZHGWN2GmM+G94QATjCzFSPPfbYfq85perzzz+/6jHbt2+v2R9ZNBCugY0aGGOaJN0i6QRJ\nr0labIx50Fq7okq7f5P0+ygGCiBcCxculDFG48aN06pVq5IeDiLU1rYrc54zZ9frLS2lL6RTwwAt\n6WhJK621ayXJGHOvpJmSVlS0u0TS/ZKOCnWEACK1evVqT+3HjBmjdevWVX3v7bff1vDhw8MYFkJU\nGYhbWxMaCDxxU+IeJenlsuev9LzWyxhzoKRTrbU/kUSdC8iRK6+8ss/zl19+uUZLacSIEVEPBygM\nNxm0Gz+QVD43XTNIt5b96dbS0qIW6itAKp1yyil66KGHdO211+q73/1u0sNBSPiVG722tja1hbAa\nr+F10MaYKZJarbXTe55/Q5K11l5X1maN81DSSElbJF1grX2ooi+ugwYCqFyIFfTnqdp1z9Verzzv\nxz/+cT333HNV3wtjXECeRLZRiTFmgKS/qbRIbL2kZySdaa19oUb7OyU9bK39VZX3CNBAAEkHaGtt\nw+AdxriAPPEboBuWuK21XcaYiyXNU2nO+g5r7QvGmAtLb9vbKg/xOggA2dfd3d17X+meX0gJjwjI\nNrb6BDIiikw1SAY9Y8YM/eY3v6n6XhhjA/KCvbiBnKsWoKO4YUblueqVtSvfKz+uu7ubzUsAsRc3\nUEhjxoyJpF8/f0jfddddfY5zyt0A/OEnCEBDc+fOldQ/iz/33HN7g/J5550X97CAXKPEDWRErXJx\n2LecrPWe2zL3sGHDtGXLllDGB+QBJW4AqbB58+akhwDkAgEaQF2NFnpdcskldd/ntpSAP5S4gQx4\n9tlndcRwpgm5AAAY9UlEQVQRR1R9L6oSd+X71drW2ziFS66AEi6zAnKs1qVMzmth9Ov2vPUCdGdn\npwYMGNDvPX7uUWTMQQNIzHe+8x1J0sCB1Tcn5HpowDsyaCAD0ppBl7epNh6yaIAMGkAE/v7v/15S\n6RfMiy++2PvYD7JowBsyaCADksqga53b7UKxUaNG6bXXXgtlrEBWkUEDSES9oPvqq6/2eX733XdH\nPRwgN8iggQyolsXut99+2rBhg9rb23XYYYcF7tfLuRvdXKPWe43OBeQRGTSQU5/+9Kervv76669L\nkiZMmBDncBoiIAPhIEADKbdgwQJJuwLdfvvtF+v5nbJ0vUVeXoIwi8UAdyhxAylXWVbef//9tWHD\nhrolZ799N2rnqHdzjWrvk1WjyChxAwUxevTopIfgWaOADaA/AjSQMUkG6K1bt0qqHmDJioFwEaCB\njEkyQA8ZMsT3sR/5yEf6PF+5cmXQ4QC5RoAGMiaJAL169WpJ7kvT1dqtWLGiz/Px48cHHxiQYwRo\nIGOSCNAHH3ywq3aUuYHwJBOgOzqkRYtK/wVQk5OJ3nXXXb2vZXGRmIPFYoB78Qfojg5p6lRp2rTS\nfwnSQEPnnntu7+OsBOinnnoq6SEAmRZ/gF62TFq+XOrslNrbS48BB9WVhsIM0GPHjg2tr0qf/OQn\nXbUjiwaqiz9AT5okTZwoDRokTZhQegxI3qorBHK9/PLLgftYtWqVJGncuHEN227btq3P887OTl/n\nZJ4acCf+AN3cLC1cKC1YUPpvc3PsQ0BKua2uME0iqRSgnQw4aDnZWaVdz+DBg/s8HzRoUMNjlrus\nkO3cudNVO6BIklkk1twsTZlCcE6DNGWibqsrTJNIKgVoJwN2W06OQ3mGPGnSpKptjj766D7Pd9tt\nt0jHBGQRl1kVWdoyUbfVFaZJJIVT4k7K008/nfQQgNQjQKdNnBltGjNRN9UVpkkyxcnyG2GxGNAX\nATpN4s5os5yJFmCaxAlYHTW+D5LIoP0s8DrkkENC6wsoEgJ0msSd0ZKJZsKwYcOqvp7lEnctw4cP\nT3oIQGoQoNMkiYy2AJloXmUpQL/yyiuu2m3atCnikQDZYeIsMxljLGWtBjo6SpnzxIkEzYJzStzV\nfmaMMdpvv/30+uuv120X9Dz12kvSunXrqm6c0tXVpYEDB/Z5rVb/lXPP/I5A3hhjZK31vMiCDDpt\nyGjh0oYNG5IegsaMGVP19QEDBnju67rrrpPEYjHAQQYNpFSjDNp5L+4MuvyYesdVBtqNGzdqxIgR\n/dp95jOf0aOPPtrnNX5PIE/8ZtAEaCCl8hKg33vvPe25556u2pbjdwXyghI3kCNZWgDWSLOH6Rqn\nzA2ADBpIpUZZbZYy6PIxvvfeezUDdmUW/dWvflU33HCD6zEBaUUGDRTUcccdJ0l68sknEx5JX3fd\ndZek0i+nN954Q5J6S931OAH/xhtvjG5wQAaQQQMp5CWDdtM+yLmCHOcl02ceGnlFBg0gEY899pin\n9lu3bq36enkw/tCHPiSJS65QbGTQQAplKYN2O85XX31VH/zgB123Dzq3DqQFGTSAVBs1alTDNqee\neqqkvsGfLBpFRQYNpFAeM+jy5zt37uy3FWi1Y8iikQdk0EAU4rw/d49Zs2bFdq4g/FyW5dwbetCg\nQQ2PmT17du/jxx9/3OPogOwjgwZqce7P7dy8JKZbcnpdHe32mCDnC3Ksn7E6bTo7O3szbX53IKvI\noIGwxX1/7oLp7u5u2MbPTTeAvCBAA7UkcX/uAnj++ecluQu+LBZDkVHiBupJ4P7cWSxx1zu+Wv9h\nb3ICpBl3swJyIksB2s3x9QJ0d3d3zcy4WoAOMk4gKcxBIx4JrGpGPvzqV7/qffz0009Lkpqaav8K\nOvfccyX1/nKLdnBACpFBw72EVjUXjZ8M+owzztAvf/lLPfLIIzr55JNDP1/Q48Msc7/55psaOXKk\nr7ECSSCDRvRY1Rw5Jwi1trZ6Ou6+++6TJM2YMSPsIaXC5Zdf3nuP7H322Sfh0QDxIIOGe04G3d5e\nWtVMBh06t9ms34w0yDkbHV+vj2rnePTRR/WZz3ym4blZLIasY5EY4pHAquYiKVKAdntuFosh6wjQ\nQA4QoBv3TxaNrGEOGoAvY8eOje1clUHVWdldbxOSRkEfyCsyaCBFksignWPHjh3bezMLP8fXO3dX\nV1fNPbXjvu4biBsZNIBAVq9eHbiPWllt0D21L7rooqr9E6CRZwRoAIm6++67JdUvWd9yyy19nv/v\n//6vpPobnQBZR4kbSAknQG3cuFEjRoxw1TbMErffY8uPr9dHvXN4KXNfeOGFuvXWWylzIzNYxQ2k\nTUdHaXOXSZNcXZLmJeAUMUBXtuOSK2QFc9BAmjibukybVvove5fX9YMf/ECSt5XZBGXkHQEaiEKB\nt0WtFWRvuummmu9fdtllgc5x/PHHezoeyAICNBCFSZNKu60NGlTaFnXixMhP6dz96Z577on8XJWm\nT5/esM2ll14a+DyVWbPzfP78+YH7BtKGOei08ThviRTzuC1q0Dlor32EcVy1Pur1U+883/nOdzR7\n9uyG4+CaaGQNc9B5wLxlvjQ3S1Om8IeWS1dffbWrdpdffrmkXYH5/PPP7/McyAsy6DRZtKgUnDs7\nS6XRBQtKv+CRexs3buy9jWIeMuju7u6qAbPRefzupEYWjTQjg86DBOYtkQ5egnMW+N1A5Gtf+5ok\n99nw2Wef3ec5WTTyhAw6bbidYyF5zQDTnkHX6ivoPHW9dmTRSCsy6Lxg3hI5FkfwvOOOOyI/BxAH\nAjSAVHHK1m7L1ZWZ85e//OVoBgbEjAANIBQ33HBDn+fvvvuur37cXsdNKRt5xxw0kAJ5mIMu78cR\n9MYYfueh3RwLxIU5aAC5cfLJJ0tqXOZubW3t046gjDwhQBdBR0fpGms2PkklZ/esopk7d27N9x55\n5BFXfdT77LjkCllHiTvvnN3JnEu3Fi5khXjK+Mn+slzidns+r2XumTNn9gZ9MmqkCSVuVFfguyoV\n0Te+8Q1Ju27fmLQ//elPvo895phjJDXOhJ0g/OCDD/Z7729/+5vv8wNJI4POOyeDbm8v7U5GBp06\nYWbQUfTnRXk/YYzRb7stW7Zo2LBhro4FohZpBm2MmW6MWWGMedEYc0WV988yxizt+XrCGPNRrwNB\nRJqbS0F5wYLogjNz3EgJJ1APHTo04ZEAwTUM0MaYJkm3SDpJ0kRJZxpjDq1otkbSNGvtxyVdI+n2\nsAeKAKLcnYw7cKHM4sWLJYW3QGvUqFGu+nMzlw1kjZsM+mhJK621a621OyXdK2lmeQNr7VPWWmdX\ngqckjQp3mEgt5rhR5sgjj/TUvlH5+ZVXXvE9FkrbyDo3AXqUpJfLnr+i+gH4y5J+G2RQyBDuwIUG\nrrnmmn6vbd++XZL/u15V8x//8R+SqmfMZNHIooaLxIwxp0k6yVp7Qc/zL0g62lp7aZW2x6lUDj/W\nWrupyvssEssj7sDlmxM4Zs2apR/96Eeej0vbIrHKvsIY5+67765t27a5alutTy65QtL8LhIb6KLN\nq5LGlD3/YM9rlQP4mKTbJE2vFpwdzs4/ktTS0qKWlhaXQ0VqOXPc8M1LcC6arVu3es6AjzvuOM2f\nP7/Pa9u2bdOQIUPCHBpQVVtbm9ra2gL34yaDHiDpb5JOkLRe0jOSzrTWvlDWZoykxySdY619qk5f\nZNBAmSg2FslbBh207dKlSzV58mTXxwNh85tBu7oO2hgzXdJNKs1Z32Gt/TdjzIWSrLX2NmPM7ZI+\nK2mtJCNpp7X26Cr9EKCBMgRob0HXTXvK3EibSAN0WAjQQF9FCdAf/ehH9fzzzwc6p9dNS8rbcpcr\nJImtPgGkwsaNGyX1/lKSJP31r3/t1+773/9+b7swVQvABGVkERk0kKC0ZNDjxo3T6tWrQwtkaS5z\nDxs2TB1sqIMYkUEDkCRdd911kqQbbrjB9TGrVq2SVArUaeXljwdnVXy1oL558+ZwBwZEhAwaSIgT\nPNatW6fRo0f7OjbI7RzDOMZNX2Fm+0FXfrNYDEkgg0b8uElGKLwG56wKc67ZS1+f+MQneh87VQV2\nFkMWkEHDH+cmGc4OYtzG0rMg2VyWMuh6fUc9TrJopAEZNOLFTTIQoiQyWrJopB0BGv5wkwy40ChL\nDZLFegmwXAeNLCJAw5/m5lJZe8ECytvop7u7W1K4d6tyeAmwjdp+5StfCTocIDLMQQMJyfMcdGV/\nY8eO1Zo1a6r2n8Q8tN/zAn4wBw1kiHP7xKJYvXp1JP26KXPfeeedrtsCaUIGDSQgaPaWtQy6Xv9R\n7Kbmpu1RRx2lP//5z77ODXhBBg0g0+bNmxf5OcaPH9/7ePHixZGfDwiCDBpIABl08HN7XZld75po\nr+cGvCCDBpBqra2tksKbCw4joBKUkWYEaCBuMWyNeuONN0qSrrjiisjP1Yhz56jZs2cnPJKSWn8g\nzJ8/P+aRAPVR4gbi1LNFqlm6VJJk33vP1zXkbkrCUd6Iwq24Foq5Pbbaebq7uzVgwABf5wfcoMQN\nZIGzRaqDLVIDCSOgRrGZChAGvjOBOE2apJ8fcMCu52yRGqv/+Z//kVS7zM210kgTStxAzHrLrD7L\n2336yFiJe9GiRfrUpz7V7zw7duzQ4MGDfZ0/jDJ3vdeBoPyWuAnQQMzCCARZDdD1zhPl1qfV2u67\n777asGFDv9f9jgGohTloAHDBCb5vvPFG1deBtCBAA8iNsOaQ33rrrVD6AYIgQAOI3IoVKyLtP+iO\nbI7XXntNkjRy5MjAYwKCYg4aiFmR5qCr9fvWW2/1BkA3c9N+z+O3PYvFEDbmoAFkwogRI6q+fuWV\nV0oKXqYOq8zNJVdIGgEaiJHzS3/q1KkJjyR9rr322kDHe814H3zwQUn9AzGZM9KCEjcQo7DKp1ku\ncdc7V9rK3EHGAjgocQPo45577pEknXPOOQmPpLYtW7ZE0q/X8rSzSYqDoIw0IIMGYhRnBu31fHFm\n0Nba3j2ww1wo5qePRll0d3c389EIhAwaQGZkIeD94Q9/kMTNNJAcvvMAxOLuu+923TaMAO61j8r2\nJ5xwQuAxAEFQ4gZiVMQSd62+o7wOmcViSBNK3AAyaenSpUkPoVdlECYoI0kEaCAmTja2ZMmShEdS\n3dixY2M9nxP8Jk+eHNk53Ja5582bJ6n+fPNpp50WypgAtyhxAzEJs4QcRYnbaT927FitWrUq2ABd\njsNL6Tusc/ppz/afCIL7QQMpl5UA7aW9W1kK0G7HCbjFHDSAXFm0aFEo/bgtc9cLvl//+tc99QWE\ngQwaiAkZdO3M9Kc//akuuOCC0MdBmRtpQAYNIPXKg7C0K9hdeOGFSQynpnqZMlk04kIGDcSkyBl0\nvb7jmIf20hdZNMJGBg2kWGdnZyLnffjhhyVJn/vc5xI5f9KCBNLu7u6a7915552++wXcIoMGYhB2\n5hXVDmF5y6D99LVw4UJNmzat5jFk0fCKDBpAprW0tETav9u546lTp0Y6DsAtAjTSqaNDWrSo9F/k\nmpOJ/vGPf+x9bfPmzZLCWZAVxp7e5Q477LCa7wFhosSN9OnokKZOlZYvlyZOlBYulJqbkx5VIJS4\nvS++SrLM3egYytzwghI38mPZslJw7uyU2ttLj4EQhJ31kkUjSgRopM+kSaXMedAgacKE0mNk3vjx\n4yVJu+++e+znDrvMTeaMOFDiRjp1dOwqcWe8vC1R4m7Uf7XrlZP8zNwc47y3evVqHXzwwSGMEHlF\niRv50twsTZmSi+DsXIuM2mJOFDwf09XV1e+1bdu2SYr/Np0oDgI0ELFTTjlFEmVRr66++mpJ4c3z\n+vn8n376aUnSwIED+703ePDgwGMC6qHEDUQsirJx3krctd7LSpnba58oFkrcAOCSn6ycxWKIGwEa\nQCoMGTJEUrSXLvkJqF5vsgGEhQAN5NxvfvMbSdKUKVMSHkl9W7duTXoIvpBFIyoEaCDnZsyYIWnX\ngqckXXXVVZLSkW2GVeYut2PHDr/DAfphkRgQsaQXiXlpH8cWll4WijnP99prL23atCmWMfg5ZvXq\n1Ro3bpznPlEMLBIDUsjZNcv55Q1vnGD3zjvvJDySXard25troREFAjQQIWczi5UrVyY8kmz46le/\nKim+EriX8zz33HOSpEGDBoXWJ1APJW4gQlGVjPNa4q72flo+QzfHcJcrVEOJGwBi0ihLPuGEE2Ia\nCfKMDBqIUFqyPzLo2ufx2jdZNLwigwaQa2FfJkYARdoRoAHE6te//rWk2mXiyvedQJq2jVZqjX/u\n3Ll13wfcosQNRIgSt7/zUOZGnlDiBlLG+SW9YMGChEeCWoIG0O3bt9d9nywaQZBBAxGJMosig45v\nLNWsWLFChx12WN3jyKLhIIMGUNOTTz4pSdp///3rtivyjlhest1DDz3Uddubb77Zz3AAMmggKmnL\n+rxk0dOmTdMf//hH/wMMOJb169frwAMP7G0TdTYa5POsdxxZNCT/GTQBGohIlgO01769cnOO8jZb\ntmzRsGHDIhuX338zi8XgBiVuALk1dOjQWM4T9qKuWbNmRdIvioEMGogIGXRtL7/8ssaMGVP3PHEu\nFPPbP2VuuEEGDaQIv4zrGz16tOu2O3bsiHAkwfgN5oAbBGggAk1NpR+t7u7uhEeSXV1dXZKkwYMH\nx3pev4F069atVV/njzX4RYAGIkTW5J/zR05c/AbSVatWSZL22GOPhm2feuopX+dAMRGgAWTCRRdd\nJCl9f/S4uXbcqaR88pOfjHo4yBEWiQERSPOCpjQsEnN7nqQWink9B4vFUA+LxADk1ksvvRTLefwG\nTzfH7bPPPpLSVwFAepFBAxEgg45mPGnZRMXvcWTRxUQGDSBTnFXPac0o/Y7LzXFp/TcjXQjQQMjS\nenvJ5cuXS0pPcBgyZEjSQ6gqyjI3mTO8cBWgjTHTjTErjDEvGmOuqNHmZmPMSmPMc8aYyeEOE261\ntbUlPYRCqPc5f/rTn5aUvl/GEyZMSHoIntT7jPfee+/4BuLD5s2bG7Z5++23YxhJffy+SLeGAdoY\n0yTpFkknSZoo6UxjzKEVbU6WNNZae4ikCyXdGsFY4QI/cPHgc45e5Wf8i1/8ovePnnfeeSeWMXit\nNqxbt06S1NzcXLONE5hHjBjhf2Ah4fs43dxk0EdLWmmtXWut3SnpXkkzK9rMlPRzSbLWPi3pA8aY\n/UIdKYBCcoLyWWedFfs5vXKzhWnas3+kh5sAPUrSy2XPX+l5rV6bV6u0AYDCYLEYgmp4mZUx5jRJ\nJ1lrL+h5/gVJR1trLy1r87Ck71lr/9Tz/A+S/sVau6Sir3RNygEAEAM/l1kNdNHmVUljyp5/sOe1\nyjajG7TxNUAAAIrITYl7saRxxpiDjDG7SfpHSQ9VtHlI0rmSZIyZIukda+2GUEcKAECBNMygrbVd\nxpiLJc1TKaDfYa19wRhzYelte5u19hFjzAxjzCpJWyR9KdphAwCQb7Fu9QkAANyJZCcxNjaJXqPP\n2BhzljFmac/XE8aYjyYxzixz833c0+4oY8xOY8xn4xxfXrj8fdFijHnWGLPMGDM/7jFmnYvfF3sa\nYx7q+X38V2PMeQkMM9OMMXcYYzYYY56v08Zb3LPWhvqlUtBfJekgSYMkPSfp0Io2J0v6Tc/jYyQ9\nFfY48vzl8jOeIukDPY+n8xmH/xmXtXtM0q8lfTbpcWfty+X38gckLZc0quf5yKTHnaUvl5/xN1W6\nEkeSRkp6S9LApMeepS9Jx0qaLOn5Gu97jntRZNBsbBK9hp+xtfYpa+27PU+fEtele+Xm+1iSLpF0\nv6Q34hxcjrj5nM+S9IC19lVJstZujHmMWefmM7aSnO3PmiW9Za3tjHGMmWetfULSpjpNPMe9KAI0\nG5tEz81nXO7Lkn4b6Yjyp+FnbIw5UNKp1tqfSOISQn/cfC+PlzTcGDPfGLPYGHNObKPLBzef8S2S\nJhhjXpO0VNJlMY2tSDzHPTfXQSPDjDHHqbSq/tikx5JDP5BUPp9HkI7GQElHSDpe0lBJi4wxi6y1\nq5IdVq6cJOlZa+3xxpixkh41xnzMWtv4rh+ITBQBOrSNTVCTm89YxpiPSbpN0nRrbb3SC/pz8xkf\nKeleU9qvcaSkk40xO621lfsEoDY3n/MrkjZaa7dJ2maMWSDp4yrNq6IxN5/xlyR9T5KstauNMS9J\nOlTSn2MZYTF4jntRlLjZ2CR6DT9jY8wYSQ9IOsdauzqBMWZdw8/YWntwz9eHVZqHnkVw9szN74sH\nJR1rjBlgjNlDpQU2L8Q8zixz8xmvlXSiJPXMi46XtCbWUeaDUe1Kmue4F3oGbdnYJHJuPmNJ35Y0\nXNKPezK8ndbao5Mbdba4/Iz7HBL7IHPA5e+LFcaY30t6XlKXpNuste0JDjtTXH4vXyPpZ2WXCP2L\ntTb5G1ZniDHmvyW1SBphjFknabak3RQg7rFRCQAAKRTJRiUAACAYAjQAAClEgAYAIIUI0AAApBAB\nGgCAFCJAAwCQQgRoAABS6P8DPAkZ14mdzeQAAAAASUVORK5CYII=\n", "text/plain": [ "<matplotlib.figure.Figure at 0x222b0eef9e8>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize = (8, 8))\n", "ax = fig.add_subplot(111)\n", "\n", "#Plot data and any hyper-plane that separates the data\n", "plt.plot(X1['x1'], X1['x2'],'r.')\n", "plt.plot(X2['x1'], X2['x2'],'b+')\n", "\n", "#We'll use a brute force search for this, but starting from an intelligent starting point\n", "#For this part of the code, we use the hyperplane with equation X1 * ws = t. This differs \n", "#from the implementation of bd.plot_dec_line by the sign of t.\n", "success = 0; ws = np.array([1, 1]); t = 1\n", "while (success < 10):\n", " #Randomly perturbate the starting point, check to see if it seprates the points\n", " w_i = ws + np.random.normal(0, 1, 2); t_i = t + np.random.normal(0, 1, 1)\n", " if not ((sum((X1.dot(w_i) - t_i)>0)) or (sum((X2.dot(w_i) - t_i)<0))):\n", " bd.plot_dec_line(X1['x1'].min(), X2['x1'].max(), w_i[0], w_i[1],-1*t_i, 'k-', 't')\n", " success += 1\n", "\n", "ax.set_xlim(0, 1)\n", "ax.set_ylim(0, 1)\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the Maximum Margin\n", "<p>With so many hyperplane options, we need a principled way to choose an optimal separating line. Intuitively, we want a line that is simultaneously as far away from the positive instances as it is from the negative instances. In a sense, we want it to be in the middle of the empty region separating the classes. We can formalize this by searching for a hyperplane that maximizes the margin between the positive and negative classes.<br><br>\n", "\n", "<b>Some Definitions</b>\n", "<ul>\n", " <li>$W=<W^1,...W^k>$ is a weight vector, $X=<X^1,...X^k>$ is a vector of features </li>\n", " <li>The separating hyperplane is defined by the line: $W \\cdot X+t=0$</li>\n", " <li>The vector $W$ is called the \"normal vector\" to the line, and is perpendicular to it.\n", " <li>The distance between any point $X_i$ and the line is given by: $\\frac{W \\cdot X_i+t}{\\|W\\|_2}$</li>\n", "</ul>\n", "<br>\n", "<i>(How did we get that formula for the line, you ask??</i><br><br>\n", "Let $Q$ be a point on the line $W \\cdot X+t=0$, and let $W$ originate from $Q$. The distance from $X_i$ to the line is equal to the projection of the vector $\\vec{QX_i}$ onto $W$. The distance $d$ is given then by the projection formula:<br>\n", "<center>$d = \\frac{W \\cdot \\vec{QX_i}}{\\|W\\|_2} = \\frac{W \\cdot X_i - W \\cdot Q}{\\|W\\|_2} = \\frac{W \\cdot X_i+t}{\\|W\\|_2}$ </center><br>\n", "\n", "The last bit comes from the fact that $W \\cdot Q = - t$ since $Q$ is on the line.<br><br>\n", "\n", "<b>Constraining the Problem</b><br><br>\n", "By adding contraints to the problem we make it easier to solve. Let $M^+$ and $M^-$ be the distances from the closest positive and negative point to the line. We are free to rescale $t$, $\\|W\\|_2$, $M^+$ and $M^-$ , so we do the following:<br><br>\n", "<center>$M^+ = M^- = m = 1$</center><br><br>\n", "With this constraint, the margin then becomes $\\frac{2}{\\|W\\|_2}$. Maximizing the margin then is equivalent to minimizing $\\|W\\|_2$, or more conveniently, $\\frac{1}{2}\\|W\\|_2$.\n", "</p>\n", "\n", "## Defining the Optimization Problem\n", "\n", "<p>\n", "\n", "With perfectly separable data, we then define the following objective function.<br><br>\n", "\n", "<center>$W^*,t^* = \\underset{W,t} {\\mathrm{argmin}}\\frac{1}{2}\\|W\\|_2^2$ $\\,\\,\\,\\,\\,$ subject to $y_i(W\\cdot X_i + t) \\geq 1$</center>\n", "<br>\n", "<br>\n", "We can transform this using the method of Langrange multipliers. For each constraint we introduce a multipler $\\alpha_i$, which results in the following Lagrange function:<br><br>\n", "<center>$\\Lambda(W,t,\\alpha_i,...\\alpha_n)=\\frac{1}{2}\\|W\\|_2^2-\\sum\\limits_{i=1}^n\\alpha_i(y_i(W\\cdot X_i+t)-1)$</center>\n", "<br>\n", "<br>\n", "The optimal hyper-plane is a saddle point of $\\Lambda(w,t,\\alpha_i,...\\alpha_n)$. An interesting consequence of this formula is that there is a \"dual-form,\" where we eliminate $W$ and $t$ and formulate the problem completely in terms of the Lagrange multipliers $\\alpha_i$. The dual-form is:<br><br>\n", "\n", "<center>$\\underset{\\alpha_1,...,\\alpha_n} {\\mathrm{argmax}}\\sum\\limits_{i=1}^n \\alpha_i - \\frac{1}{2} \\sum\\limits_{i=1}^n \\sum\\limits_{j=1}^n \\alpha_i \\alpha_j y_i y_j X_i\\cdot X_j$\n", "</center>\n", "<center>subject to $\\alpha_i\\geq 0$ and $\\sum\\limits_{i=1}^n \\alpha_i y_i = 0$</center>\n", "<br>\n", "<br>\n", "The significance of the dual form is that searching for the optimal plane is equivalent to searching for the <i>support vectors</i>, which are the points that lie on the margin planes, and mathematically, are the points with non-zero Langrange multipliers. The decision boundary can be found using:<br><br>\n", "<center>$W=\\sum\\limits_{X \\in SV} \\alpha_i y_i X_i$</center>\n", "<br>\n", "<br>\n", "\n", "Now let's stop beating around the bush and actually build one! (note one important tip, with SVM's we generally encode a binary outcome as $[-1, 1]$ and not $[0, 1]$).\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n0OnTpznvvPOcDkMFiejoaFJTU8nOzmbu3Lm8/PLL3HnnncyePZu4uDinw/O6s3/Jn+sXe11vsr66\nOWsSCFGPPvoo69evx+VyYVkWnTp1cjokFQRat27NAw88wAMPPMChQ4cCevlMb9XPl1ULlT091HRf\nwXZz9hUdMVxDRUVFfPLJJ9i2TVJSEm3btsWyLCzL4vLLL3c6PBXERIQ//vGPDB06lNjYWBo08P/f\nbt6cEE7XGaieP0wgF/TCw8O56aabePPNNzl06BAvvfQSGRkZREdHc8MNNzB9+nQOHDhQ/Y6UqqWC\nggJatWrF008/TWRkJPfffz9paWkBO3JZf7H7F30S8FBBQQFpaWnYts2CBQu48sorcblcxMfH06aN\nrpujvCsjIwO3243b7eayyy5j6dKlddpPYWEhhYWFtWrnqs0veG9OrRBs0zTUB79aXtJTgZYEKioo\nKCA1NRXbtlm0aBE9evTAsiwmTJhARESE0+GpIHPy5EmaNWtWq79JS0tj+vTpLF++HGMM7du35777\n7uPBBx+stmdSoFbLhEIS0eogP9GwYUNGjBjB+++/z+HDh3nyySfZsGED3bp1Y+DAgbz99ts6P73y\nmqoSwIsvvsgTTzzBxo0bqfiDatasWdx2222MGzeO48ePc/r0aWbPnk1qaiojRozg9OnTvgrdp4Jh\nVG990icBHzh9+jTLli3Dtm1SUlK47rrrcLlcjBs3jksuucTp8FSQSU9P58MPP8S2bQoKCrAsixtv\nvJG77rqLjRs30rFjR+CnX8jFxcUkJCTQvXt3nnvuuZ/tq7IpnTMzqx685Y98/QTjxJOHJ08CiIhf\nvUpCCl65ubmSmJgoCQkJ0rx5cxk2bJi8++678v333zsdmgoyxcXFsnnzZnn66aelRYsWct999/3s\n+8mTf3q/fft2ueyyy+TMmTNV7q+sfMW/81erV5fEOXmyCPz0fvXq+j+2E//7lN4363TP9UpfM2PM\nu8AtQLaI/GKdPmNMDLAQyCj9aJ6I/M0bxw40TZo0IT4+nvj4eE6ePMnixYtxu9089thjDBgwAMuy\nGDNmDBdeeKHToaoAZ4yhV69e9OrVi7Vr15KQkPCLMiKCMYZu3bpx/vnns2/fvqAYA6PTSdSctzoc\n/xt4HZhzjjIfichoLx0vKDRr1oyJEycyceJEcnJyWLRoEW63m4ceeoiBAwdiWRZxcXFccMEFToeq\nAlyDBg1Ke7L9vHpn//4DJCcnM2pUU3JzcwkPD6/072syeCsUGmCrEtBLZdb1EeLsFyVrCn9VxXcx\nQHIN9+PlB6XAc/z4cZk9e7aMHDlSmjdvLuPHj5f//Oc/cvLkSadDUwHqhRdekHvuuednn02eLFJU\nVCSffPKJWJYl4eHh0rNnT3n++edl7969Ve6rquoOf60m8kUVUEWBVh3ky95BfY0xW4wxS4wx3Xx4\n3IBz4YUXcscdd7BkyRL27t3LqFGj+Pe//01kZCSWZTF37lydo17Vyj333MOCBQtYu3btzz4PCwvj\nV7/6FQcOHGD69Om8/vrrHDp0iI8//tihSL3Pm7/Eg7Gnkdd6Bxlj2lPya7+yNoFmQLGInDLGjABm\niMiVVexHJpetKg3ExsYS6/fPU75x7Ngx5s+fj23bfPbZZ4wcORLLshg+fLhObqeqtWLFCiZNmsRv\nfvMbJk2aRHp6a/LyUpg+fTp9+/Zl1qxZhIWd+3fhiRMn+OKL5j+rAgqlBeFr0tPIF9ViaWlppFXI\nSFOnTnV+sNi5kkAlZfcC14rI95V8J96KKZgdPXqUuXPnYts2X375Jbfccgsul4shQ4YEzXTEyvv2\n7t3L22+/TXJyMqdPn+bqq6/m/vvvZ/jw4Rhz7nuIiNC9e3datGiBZVkkJCT8bFR8oA4mqw1/PUe/\nGDFsjOlASRK4upLvWotIdun7aMAtIh2q2I8mgVo6fPhweULYvn07Y8aMwbIsBg8eTMOGDZ0OTwWR\ngoICVq1ahW3bLFy4kO7duzNp0iTuu+8+v71BeioQnnYcTwLGmA+BWOBiIBuYDDSipLFipjHmQeB+\noADIAx4TkQ1V7EuTgAeysrJISkrCtm2++eYbxo0bh2VZDBw4MCBmn1SBIz8/n5UrV7Jt2zaeeuop\nn/YOcqonkr8mOseTgDdpEvCe/fv3k5iYiG3bZGZmMn78eCzLIiYmpsqugEp5y4EDBzj//PPrZVS8\nUzfjYEwCOndQEIuKiuLxxx9n48aNbNiwgcsvv5wnnniCNm3a8OCDD/LRRx9RXFzsdJgqSC1evJiO\nHTsyfPhw3nvvPX744QenQ/KYv1T/eJM+CYSgXbt2lU9HfOzYMeLj43G5XPTp06fa3iFK1UZubi6L\nFy/Gtm1SU1MZMGAAM2bMqNOo5ECom3eKVgepOktPTy9PCDk5OSQkJGBZFtHR0dX2FlGqNnJyckhO\nTmb48OFcdNFFHu3LX6tlnKJJQHnF9u3bcbvd2LZNfn4+CQkJuFwuevfurQlB1av8/HwWLlzIqFGj\naNq0abXlNQn8nLYJKK/o3r07U6dOJT09nQULFtCwYUNcLhedO3fmmWeeYcuWLWiCVvXh2LFjtRoV\nH+rVP96kTwLqnESEzZs3Y9s2brebRo0aYVkWLpeL7t276xOC8qrvvvuOefPm4Xa72bRpE3/5y194\n/PHHnQ7L72l1kPIJEWHTpk3lbQjNmjXD5XJhWRZXXXWV0+GpIHP06FGOHz/OlVdWOsOMqkCTgPK5\n4uJiPv30U9xuN4mJiVx88cXlTwidO3d2OjwV5N555x2ioqJ0VHwpbRNQPhcWFka/fv149dVXOXDg\nAG+++SbZ2dncdNNN9O7dmxdffJGMjIzqd6RUHYSFhfHXv/6ViIgI7r33XlauXElhYaHTYQUkfRJQ\nXlVUVMTHH3+MbdvMmzePqKgoXC4XCQkJtG/f3unwVJCpOCo+OzubPXv2hOT0KFodpPxSYWEhaWlp\nuN1u5s2bR6dOnXC5XMTHx9OuXTunw1NB5ttvv+XSSy91OgxHaBJQfq+goID//ve/2LbNggUL6Nat\nG5ZlER8fT2RkpNPhqSCWkpLCsmXLsCyLvn37BuWoeE0CKqCcOXOGlStXYts2ycnJ9OzZE5fLxYQJ\nE2jdurXT4akgk5mZyZw5c3C73fz444/lgyCDaVS8JgEVsE6fPs3y5ctxu90sWbKEa6+9FpfLxfjx\n4+tl9kkV2iqOip82bRpjxoxxOiSv0CSggkJeXh4pKSm43W6WLVvGDTfcgGVZjBs3zuO5ZpSqqHyR\n9SCpGnI8CRhj3gVuAbKrWl7SGPMaMALIBe4UkS1VlNMkoMjNzWXJkiW43W5WrlzJjTfeiMvlYsyY\nMbRo0cLp8FSQysnJYcCAAcTFxQXUqHh/GCfwb2BYVV+WLi7fUUQ6A78D/uWl46og1bRpUyzLIikp\niaysLG6//Xbmz59PVFQUcXFx/O///i8nTpxwOkwVZJo1a8asWbPIy8tj5MiRdO/enSlTprBjxw6n\nQ6s3Pllo3hjzL2C1iNil2+lAbNm6w2eV1ScBVaUff/yRRYsW4Xa7WbNmDYMGDcLlcnHLLbfQrFkz\np8NTQaS4uJgNGzbgdrsxxvDyyy87HVKVHK8OKg3iXEkgGfi7iKwr3U4FnhSRLyopq0lA1cgPP/zA\nwoULsW2bdevWMXToUCzLYtSoUTRp0sTp8FQIyM/Pp3Hjxk6H4RfVQUr5XMuWLbnzzjtJSUkhIyOD\nYcOGMWvWLCIjI7n11luZP38+p0+fdjpMFcTuvvturr/+el566SX27dvndDh14lR10A4gpqrqoMll\n68YBsbGxxOrk4aoWvv32W+bNm4dt22zevJlRo0bhcrkYOnSoX/xqU8Gj4qj4+fPn06lTJ5599llG\njBhRr8dNS0sjrWytTWDq1Kl+UR3UgZIkcHUl340EHhSRUcaYPsCrItKniv1odZDymiNHjjB37lzc\nbjdbt24t7/UxePBgGjVq5HR4KoiUjYq/5JJLuPbaa316bMfbBIwxHwKxwMVANjAZaASIiMwsLfMG\nMJySLqJ3VdYeUFpOk4CqF1lZWSQlJeF2u9mxYwdjx47FsixuvvlmnY5YBTTHk4A3aRJQvrB//36S\nkpKwbZuMjAzGjRuHy+UiJiYmJGehVIFNk4BSHsjMzCxfLe3AgQNMmDABl8tF//79CQ8Pdzo8paql\nSUApL9mzZ095QsjOziY+Ph7LsujXr1/QTDGggo8mAaXqwTfffFM+2dgPP/xQPvvkDTfcEBBTCajQ\noUlAqXr29ddflyeEU6dOlSeE6667ThOCcpwmAaV8RETYunVreUIoKirCsixcLhe9evXShKAcoUlA\nKQeICFu2bClPCA0aNMCyLCzL4uqrr9aEoHxGk4BSDhMRPv/8c2zbxu1206RJk/InhG7dujkdngpy\nmgSU8iMiwsaNG8sTQsuWLcufELp06eJ0eCoIaRJQyk8VFxezfv16bNsmKSmJVq1alSeETp06OR2e\nChKaBJQKAEVFRaxduxbbtpk7dy5t27bF5XKRkJDA5Zdf7nR4KoBpElAqwBQWFrJmzRrcbjfz5s3j\niiuuKH9CaNeundPhqQCjScAHCgoKWLFiBUOGDNHZJ5VXFRQUsHr1amzbZsGCBXTt2hXLskhISCAy\nMtLp8FQA0CTgAwcOHODXv/41X3/9NWPGjMHlcunsk8rrzpw5w6pVq7Btm0WLFtGjRw9cLhcTJkzg\nsssuczo85ac0CfjQwYMHSUxMxO12s3v3bp599lkeeughp8NSQSg/P58VK1bgdrtZvHgx11xzDZZl\nMX78eFq1auV0eMqPaBJwyL59+zhx4gRXX/2LdXSU8qrTp0+zbNkybNsmJSWF66+/vjwhXHzxxU6H\npxymScAPffDBB3To0IEbb7xRZ59UXnXq1CmWLl2KbdusWLGCfv36YVkWY8eOpWXLlk6Hpxzg+ELz\nxpjhxpgdxphvjDF/rOT7GGPMcWPMF6WvP3vjuP7s+++/58EHH6Rdu3Y8+uijrF+/nuLiYqfDUkGg\nSZMmxMfHk5iYSFZWFr/5zW9ITk6mQ4cO3HLLLXzwwQf8+OOPToepAoTHTwLGmDDgG2AQcAjYBEwU\nkR0VysQAj4vI6BrsLyieBMqkp6eTmJiIbducOXOG9PR0XblK1YsTJ06QnJyMbdusWbOGgQMH4nK5\niIuLo1mzZk6Hp+qRo9VBpQvHTxaREaXbT1GytvC0CmVigCdEJK4G+wuqJFDR/v37iYqKcjoMFQKO\nHz/OokWLsG2btWvXMmTIECzLYtSoUTRt2tTp8JSXOV0d1AY4UGH7YOlnZ+trjNlijFlijAnJGbWq\nSgCrVq3iT3/6E19++SXBmgCVb7Vo0YI77riDJUuWsHfvXkaOHMl7771HZGQkLpeLuXPnkpeX53SY\nyg/4qsXycyBKRHoBbwALfHTcgBAVFUVhYSFjxozhqquu4tlnn2X79u1Oh6WCxEUXXcTdd9/NsmXL\n2LNnD4MGDeKtt94iIiKCX//61yxcuJDTp087HaZyiLeqg6aIyPDS7V9UB1XyN3uBa0Xk+0q+k8mT\nJ5dvx8bGEhsb61GMgaLi7JOJiYm88cYbjBkzxumwVJDKzs5m3rx52LbNl19+SVxcHJZlMXToUB0V\n7+fS0tJIS0sr3546daqjbQLhwE5KGoYPAxuBW0UkvUKZ1iKSXfo+GnCLSIcq9he0bQK1UVxcTHFx\nsTYiK584fPgwSUlJuN3u8lHxlmUxaNAgHRUfABwfJ2CMGQ7MoKR66V0RedEY8ztKnghmGmMeBO4H\nCoA84DER2VDFvjQJnENubi5Dhw4t/9V2xRVXOB2SCjIHDx4kKSkJ27bZtWsX48aNw7IsBg4cqD9K\n/JTjScCbgjIJ5OTAtm3QowdccIFHuyoqKuKjjz7Ctm3mzZtHhw4dymef1J5Hytv27dtXPk1KZmYm\n48ePx+VycdNNNxEeHu50eKqUJgF/dugQxMTA3r0lSeDjjz1OBGUKCwtZvXo1breb8PBw/vWvf3ll\nv0pVJiMjA7fbjdvt5tChQ8THx2NZFv3799dR8Q7TJOCvcnKgd2/Yvbtku0GDkiTQp4/PQigqKtJf\nbMrrdu3aVZ4Qjh07Rnx8PC6Xiz59+mhCcIAmAX+1fj3cdBMUFpZsd+oEX3zhtSeBmpg0aRJZWVnl\n0xHr7JPK29LT03G73di2zcmTJ0lISMDlcnH99ddjTJ3uS6qWNAn4q5wcGDAAvv4a2reHNWvAx4uE\nlM0+6Xa7Wbp0Kddddx0ul4vbbruN888/36exqOC3bdu28oRw5swZLMvC5XJxzTXXaEKoR5oE/FlO\nDmzfDt27+/QJ4GfHL22UPhUeTkpKCgsWLGDWrFmcd955tdpVVlYW8+fP58SJE3Tq1IkxY8bQuHHj\negpcBTIR4auvvsK2bWzbJiwsrLwDQ8+ePTUheJkmgUDjxd5C1R5nwICfklA1jdJ5R49S9OWXNOvT\n52fl8vPzeeihh0hKSmLMmDG0bt2azz77jK1bt/L6669jWVb9nYMKeCLCF198Ud6G0Lhx4/KE0KNH\nD6fDCwqeJAFExK9eJSEFsRMnRH71K5EGDUr+PXGi/o61bl3JcUCkYUOR9evPGdeJK66QfJA9zZvL\nf2bNkh9//FFERG699VYZPXp0+XaZzz77TCIjIyU5Obn+zkEFleLiYtmwYYP84Q9/kLZt20q3bt1k\nypQpkp6e7nRoAa30vlm3e25d/7C+XkGfBGpzY/ZUWcJp2LD6hFMhrsLwcHmsb19p3ry53HzzzXLp\npZdKXl7eT/tct658X8uWLZOePXtKcXFx/Z2HCkpFRUXyySefyMMPPywRERFy9dVXy9/+9jf55ptv\nnA4t4HiSBLQvl6/16FFSNdOwIXTrVvK+vlxwQUkV0EcfnbsqKCcHcnOha1do2JDwHj14eflyMjMz\nadiwIXFxcSXtB2XVSzfdVPJvTg5Dhw4lNzeXL7/8sv7OQwWlsLAw+vXrx4wZMzh48CBvvvkmhw8f\nZsCAAfTu3Ztp06aRkZHhdJhBT5OAr9X0xuzN451Vx/8zZTf2ESNKtlNSyuNq2bIll156KTExMSXf\nbdtW0r5QWAhff82XH35Ifn4+V1xxBUeOHKnf81BBLSwsjAEDBvDGG2+QlZXF9OnTyczMpE+fPkRH\nR/PPf/6T/fv3Ox1mUNIkUFM5OSX9/nNyPN9XdTfm2vIktoo39p07oWnTn8UVERHBN998U7JR4SlG\nrrqKZ22biIgI1q1bx65du8jPz/fO+aiQFh4ezsCBA3n77bc5dOgQL7zwAjt37qR379707duXV155\nhYMHDzodZvCoaz1Sfb3wxzYBXzbm1pansVXTbrBt2zaJiIiQ3Nzcn8qvX19ebs6cOdK2bVsZMGCA\nXHTRRfJbOqZOAAARZUlEQVTYY49546yU+oUzZ85ISkqK3HXXXXLRRRdJ//795bXXXpNDhw45HZrj\n8KBNQLuI1kTFkb8NG5ZU5fhw6odz8kZsOTmwcSOIlLRT7Nv3s+6rd999N1lZWXz44YdcfPHF5X+2\ndu1a4uPjmTNnDkOHDiUrK4v09HQGDx7szTNU6hfOnDnDihUrcLvdJCcn86tf/QqXy8X48eNp3bq1\n0+H5nI4TqG8VR/526+abuvya8kZsZfvYtq0kkRQW/mxcQUFBAU8++STvv/8+w4YNo1WrVnz22Wcc\nPHiQN954g9GjR1d7iI8//piCggJiYmJ0LiPlVadPn2b58uXYts3SpUu59tpryxPCJZdc4nR4PqFJ\nwBecHvlbFkNlg8w8je3sOY6g0qeKY8eOsWjRIk6cOEHnzp0ZNmxYjeeXT0xMZNq0aRw8eJAJEyaU\nzz6pCUF506lTp0hJScHtdrNs2TL69OmDZVmMGzeOiy66yOnw6o0mASf56ejfOu+7QQMoKqq3J57d\nu3eXjxw9evQoa9asoXPnzl49hlJQsgDTkiVLsG2b1NRU+vfvj2VZjB07lgsvvNDp8LzK8SRQurLY\nq/y0stgv1hc2xrwGjABygTtFZEsV+wqcJODNG3N1yaS+2yXKniaiomD/fp888ezYsYNOnTrpalWq\n3uXk5JCcnIzb7ea///0vsbGxuFwu4uLiaN68udPheczRaSMoufHvBtoDDYEtQNezyowAlpS+vwH4\n9Bz780JbuY+sWycSHl4y+rdBg7qP/q1JD59z9eI5axRvoDt06JD8z//8j2zatElHIiuvO378uMyZ\nM0dGjRolzZs3l3Hjxsn//d//SU5OjtOh1RkOjxiOBnaJyD4RKQD+A4w5q8wYYE7pHX4DcKExJvCb\n8Nu3L/lVDiXVKHVd3vGsQVhs3/7LMlUNMqtkFG+gCwsLo2HDhkycOJFOnTrx9NNPs2XLlrIfCUp5\n5MILL+T2229n8eLFZGZmMnr0aGbPnk2bNm1ISEggKSmJU6dOOR2mz3gjCbQBDlTYPlj62bnKZFVS\nJvDs2/dTY2pRUUk1Sl3UdCqJygaZ1SSBBJjWrVvz/PPPs2vXLhITExERxo8fz9SpU50OTQWZli1b\ncuedd5KSkkJGRgbDhg3jnXfeITIykltvvZUFCxZw+vRpp8OsVx63CRhjJgDDROS3pdu3AdEi8nCF\nMsnA30VkXel2KvCkiHxRyf5k8uTJ5duxsbHExsZ6FGO9qWn3zMrq+8/+rK49fPy5+6oXiQh5eXk0\nadLE6VBUCDh69Cjz5s3Dtm22bNnCLbfcgmVZDB061C/W0EhLSyMtLa18e+rUqc41DBtj+gBTRGR4\n6fZTlNRPTatQ5l/AahGxS7d3ADEikl3J/iSgHvuru3lX1ngM3u3pU1kMvuq15AfuuusuOnbsiGVZ\nXHnllU6Ho4LMkSNHSEpKwu12s23bNkaPHo1lWQwePJhGjRo5HR7gcO8gY0w4sBMYBBwGNgK3ikh6\nhTIjgQdFZFRp0nhVRCrt2hJwSaA6lfXqEan/nj711Z3UD61duxbbtklKSuKyyy4rX7CkY8eOToem\ngkxWVlZ5QtixYwdjx47F5XIxcOBAGpa1DzrAX7qIzuCnLqIvGmN+R8kTwczSMm8AwynpInpXZVVB\npeWCKwlUVl0D9VuF48/TXNSjoqIiPv74Y9xuNxs3bmTTpk26jKGqN/v37ycpKQnbtsnIyGD8+PFY\nlkVMTIzPuz07ngS8KeiSAFRdXVNfI5BDpJ2gLkREE4Pyur1795KYmIht23z33Xfs3r3bp4lAk4D6\nJX+Y5sIPvfrqqyQmJuJyuYiPjycyMtLpkFSQyc7O9vkkdpoEVN2FUAMylMw+mZqaitvtZtGiRVx9\n9dW4XC4mTpwY1HPLqOCmSUDVTYg1IJ8tPz+fFStWYNs2f/jDH+jdu7fTISlVJ5oEVN2EaANybfz4\n449BN9mYCj6eJAFdXjKU+XLR+wB09OhRoqKiGDlyJO+//z7Hjx93OiSlvE6TQCjz9aL3AaZVq1Zk\nZWVx++23s3DhQtq3b09cXBzJyclOh6aU12h1kFI1dOLECRYtWoQxhkmTJjkdjlLltE1AKT+Qnp5O\nVFQUTZs2dToUFWK0TUApP/D6668TGRnJxIkTmTdvHnl5eU6HpFS19ElAKS/69ttvmTdvHm63my++\n+IJRo0Yxc+ZMnf1U1SutDlLKDx05coQVK1Zw++2361QVql5pElAqwGRmZrJz505uvvlmR2efVMFB\n2wSUCjCHDh1i8uTJREZG8tvf/pbU1FQKy1apU8qH9ElAKQdlZmaSmJiI2+1m3759vP/++4wcOdLp\nsFSA0eogpYLAnj17aNasmc9noFSBT6uDlAoCHTt2rDQBiAhTp05l/fr16A8k5W0eJQFjTEtjzApj\nzE5jzHJjTKUzbRljMo0xXxpjNhtjNnpyTKVCzZkzZwC455576NChA0888QSbNm3ShKC8wqPqIGPM\nNOA7EfmHMeaPQEsReaqSchnAtSLyQw32qdVBSlVCRNi+fTu2beN2u+natSsLFy50OizlBxxrEzDG\n7ABiRCTbGHMZkCYiXSsptxe4TkS+q8E+NQkoVQ0R4fvvv+fiiy92OhTlB5xMAt+LyEVVbVf4PAM4\nDhQBM0Vk1jn2qUlAKQ+8+uqr/PDDD1iWRXedHjwkeJIEql0J2RizEqjYWmUAAf5cSfGq7t43ishh\nY8ylwEpjTLqIrK3qmFOmTCl/HxsbS2xsbHVhKqVKxcTE8MEHHzBs2DBatGiBy+XCsiy6dOnidGjK\nS9LS0khLS/PKvjx9EkgHYitUB60Wkauq+ZvJQI6IvFzF9/okoJQXFBcXs379etxuN0lJSWzcuJE2\nbdo4HZaqB05WB00DvheRaVU1DBtjmgBhInLSGNMUWAFMFZEVVexTk4BSXlZcXExYmPYID1ZOjhOY\nBgwxxuwEBgEvlgYUYYxZXFqmNbDWGLMZ+BRIrioBKKXqR1UJYP369URHRzN9+nQOHDjg46iUP9AR\nw0qFsMLCQlavXo3b7Wb+/PlceeWVuFwuEhISiIyMdDo8VUM6bYRSymMFBQWkpqbidru58cYbuffe\ne50OSdWQJgGllE+cPn2a8847z+kw1Fl07iClVL0TEa655hqGDBnCrFmz+O67asd+qgCgSUApVSPG\nGD7//HPuu+8+Vq5cyRVXXMHw4cOZM2eO06EpD2h1kFKqTnJzc1m8eDHbt2/nueeeczqckKZtAkop\nv3PkyBGaNm3KBRdc4HQoQU/bBJRSficxMZG2bdsyYcIEbNsmNzfX6ZBUJTQJKKXqxUMPPcTevXsZ\nNWoU//73v4mMjMSyLDIyMpwOTVWg1UFKKZ84duwY8+fPZ9y4cVxyySVOhxNUtE1AKRXQCgoKWLFi\nBUOGDKFRo0ZOhxNwtE1AKRXQjhw5wrRp04iIiOCuu+5i2bJlFBQUOB1WSNAkoJRyXLt27fjoo4/4\n6quv6NWrF8899xwRERG8/vrrTocW9LQ6SCnll/bv38+JEyfo0aOH06H4PW0TUEqFlDlz5tChQwf6\n9++v6ySgbQJKqRBz/PhxHnroIdq1a8cjjzzCunXrKC4udjqsgKRPAkqpgLVjxw7cbje2bZOfn8+O\nHTto0KDapdODjpPLS8YDU4CrgOtF5Isqyg0HXqXkyeNdEZl2jn1qElBK1dqBAwdo166d02E4wsnq\noK3AOGBNVQWMMWHAG8AwoDtwqzGmq4fHVUqpn6kqAaSmpvLMM8+wZcsW9AfmL3mUBERkp4jsAs6V\ngaKBXSKyT0QKgP8AYzw5rlJK1VT79u0pKipi3LhxdO3alb/85S9s27bN6bD8hi8ahtsAFVewPlj6\nmVJK1bvOnTszbdo0MjIy+OCDD8jLy2PkyJEsWrTI6dD8QrUtKMaYlUDrih8BAvxJRJLrI6gpU6aU\nv4+NjSU2NrY+DqOUCiHGGKKjo4mOjuYf//hHQPcmSktLIy0tzSv78krvIGPMauDxyhqGjTF9gCki\nMrx0+ylAqmoc1oZhpZRTcnNzGTJkCKNHj8ayLK644gqnQ6oRfxknUFUAm4BOxpj2xphGwERAn8OU\nUn7nvPPO44UXXmD//v307duX6Oho/vnPf7Jv3z6nQ6s3nnYRHQu8DlwCHAe2iMgIY0wEMEtEbikt\nNxyYwU9dRF88xz71SUAp5bjCwkLWrFmDbduEh4fz9ttvOx1SlXTaCKWUckBRURHh4eFOh+E31UFK\nKRVS7rjjDmJiYnjrrbfIzs52Opw60SSglFJ19N577/H444/zySef0KVLFwYPHkxqaqrTYdWKVgcp\npZQX5OXlkZKSQkREBH379vXpsbVNQCmlQpi2CSillKoTTQJKKRXCNAkopVQI0ySglFIhTJOAUkqF\nME0CSikVwjQJKKVUCNMkoJRSIUyTgFJKhTBNAkopFcI0CSilVAjzKAkYY+KNMduMMUXGmN7nKJdp\njPnSGLPZGLPRk2MqpZTyHk+fBLYC44A11ZQrBmJF5BoRifbwmAHLWwtD+ys9v8Cm5xeaPEoCIrJT\nRHZR9frCZYynxwoGwf4foZ5fYNPzC02+ujELsNIYs8kY8//56JhKKaWq0aC6AsaYlUDrih9RclP/\nk4gk1/A4N4rIYWPMpZQkg3QRWVv7cJVSSnmTVxaVMcasBh4XkS9qUHYykCMiL1fxva4oo5RStVTX\nRWWqfRKohUoDMMY0AcJE5KQxpikwFJha1U7qeiJKKaVqz9MuomONMQeAPsBiY0xK6ecRxpjFpcVa\nA2uNMZuBT4FkEVnhyXGVUkp5h9+tMayUUsp3HO22aYxpaYxZYYzZaYxZboy5sIpyATXYzBgz3Biz\nwxjzjTHmj1WUec0Ys8sYs8UY08vXMXqiuvMzxsQYY44bY74off3ZiTjrwhjzrjEm2xjz1TnKBPK1\nO+f5Bfi1a2uM+a8xZrsxZqsx5uEqygXk9avJ+dXp+omIYy9gGvBk6fs/Ai9WUS4DaOlkrLU4pzBg\nN9AeaAhsAbqeVWYEsKT0/Q3Ap07H7eXziwEWOR1rHc+vP9AL+KqK7wP22tXw/AL52l0G9Cp93wzY\nGWT/36vJ+dX6+jk9gGsMMLv0/WxgbBXlAmmwWTSwS0T2iUgB8B9KzrOiMcAcABHZAFxojGlNYKjJ\n+UH1Awj9kpR0Xf7hHEUC+drV5PwgcK/dERHZUvr+JJAOtDmrWMBevxqeH9Ty+jl9Y20lItlQcoJA\nqyrKBdJgszbAgQrbB/nlhTq7TFYlZfxVTc4PoG/p4/YSY0w334TmE4F87Woq4K+dMaYDJU88G876\nKiiu3znOD2p5/bzZRbRS5xhsVlldVVWt1DrYLLB8DkSJyCljzAhgAXClwzGpmgn4a2eMaQYkAY+U\n/mIOKtWcX62vX70/CYjIEBHpWeF1dem/i4DsskcxY8xlwNEq9nG49N9vgfmUVEn4qywgqsJ229LP\nzi7Trpoy/qra8xORkyJyqvR9CtDQGHOR70KsV4F87aoV6NfOGNOAkhvkByKysJIiAX39qju/ulw/\np6uDFgF3lr7/DfCLkzLGNCnNfFQYbLbNVwHWwSagkzGmvTGmETCRkvOsaBFwB4Axpg9wvKxaLABU\ne34V61iNMdGUdEX+3rdhesRQdb1qIF+7MlWeXxBcu/eAr0VkRhXfB/r1O+f51eX61Xt1UDWmAW5j\nzN3APsCCksFmwCwRuYWSqqT5pdNJNAD+f/HjwWYiUmSM+T2wgpIk+66IpBtjflfytcwUkaXGmJHG\nmN1ALnCXkzHXRk3OD4g3xtwPFAB5gMu5iGvHGPMhEAtcbIzZD0wGGhEE1w6qPz8C+9rdCEwCtpYO\nThXgGUp6sgX89avJ+VGH66eDxZRSKoQ5XR2klFLKQZoElFIqhGkSUEqpEKZJQCmlQpgmAaWUCmGa\nBJRSKoRpElBKqRCmSUAppULY/wO+sTXdXsaaEgAAAABJRU5ErkJggg==\n", "text/plain": [ "<matplotlib.figure.Figure at 0x222b17c7c50>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn import svm\n", "import course_utils as bd\n", "import pandas as pd\n", "imp.reload(bd)\n", "\n", "m = [[0.25,0.25],[1.75,1.75]]; s = 0.05; n=20\n", "X1=pd.DataFrame(np.random.multivariate_normal([m[0][0],m[0][1]],[[s,0],[0,s]],n), columns=['x1','x2'])\n", "X2=pd.DataFrame(np.random.multivariate_normal([m[1][0],m[1][1]],[[s,0],[0,s]],n), columns=['x1','x2'])\n", "X1['Y'] = -1 * np.ones(X1.shape[0]); X2['Y'] = 1 * np.ones(X2.shape[0])\n", "dat = X1.append(X2, ignore_index=True)\n", "\n", "my_svm = svm.SVC(kernel='linear', C = 100)\n", "my_svm.fit(dat[['x1','x2']], dat['Y'])\n", "\n", "bd.plotSVM(dat[['x1','x2']], dat['Y'], my_svm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>In the above we plot the optimal linear hyper-plane $W$ and also the hyper-planes that define the margin. Circled are the support vectors.<br><br>\n", "\n", "Once we have found $W$ and $t$, classification of a point $X$ is defined as:<br><br>\n", "<center>$f(X) = sign(W\\cdot X + t)$</center><br><br>\n", "which is just the sign of the distance between $X$ and the optimal hyper-plane.<br><br>\n", "\n", "In the above scenarios we identified an optimal separating hyper-plane for data that is cleanly separated by a decision boundary. This is seldom the case in real data, so we need to adapt our formulation to allow for such cases.\n", "</p>\n", "\n", "## The Soft Margin Classifier\n", "\n", "<p>Let $\\xi_i = [\\xi_i]_+ = [1- y_i(W\\cdot X_i+t)]_+$ be the distance between a wrongly classified point $X$ and the optimal margin plane $y_i(W\\cdot X_i+t)=1$, where $[1-z]_+ = max(0,1-z)$. This last function is also known as the <i>hinge function</i>. We can then redefine our optimization problem to allow for some misclassification of our training points. Specifically,:<br><br>\n", "\n", "<center>$W^*,t^* = \\underset{W,t} {\\mathrm{argmin}}\\frac{1}{2}\\|W\\|_2^2 + C\\sum\\limits_{i=1}^n\\xi_i$</center> \n", "<center>subject to $y_i(W\\cdot X_i + t) \\geq 1 - \\xi_i$ and $\\xi_i\\geq 0$</center><br><br>\n", "\n", "It is often useful to write this as:\n", "<center>$W^*,t^* = \\underset{W,t} {\\mathrm{argmin}}\\;\\lambda\\|W\\|_2^2 + \\sum\\limits_{i=1}^n [1- y_i(W\\cdot X_i+t)]_+$</center><br><br>\n", "where $\\lambda = \\frac{1}{2C}$. When we view the optimization problem in the above light, we can connect this back to ERM. The second term defines the training error, or the <i>hinge loss</i> of the problem. Our goal is to minimize this loss function while minimizing $W$, which in turn maximizes the margin.\n", "\n", "\n", "</p>\n", "\n", "## Example Soft Margin\n", "\n", "<p>When we presented the soft margin version of the SVM, we also introduced a new term $C$ which controls the amount of error we can tolerate (or conversely, the size of the margin). $C$ is thus a free parameter that we must choose to get the right fit. One way to think about it is as $C$ increases we increase the size of the 2nd term in our optimization function. This means we become <i>less</i> tolerant of training errors (and we thus decrease the size of the margin).\n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n7gZgSBApFlUAriSeZ0h4Pob/lzEksAfQj9w/kTgxQF/E1sngceYx/J2MTSHuEABWmXjv4v9uUvwi\nSWWduMSJFcAiAAsN/68O/aCqMMOxHwTQJYVtsFjlyyJeuZHfU1jeF8CEl8xP8hnOhmPMh0R3/ADg\nnkIOjj/prwh9v9QKiZYfDf3o+kcAlgLIn2jeTgAfJ/p5dwrbbmaY1w/6LmKJY5sA/eDQlOJukolj\n3QhgfrJpDkjUAJSJbaZVrE7C87voPDb8LT1OND/huyet9z/Z+8hiNZ2v+NYrIqOjlHoN+s7zb2sd\nS04xdHc4D33r55cikqP35VP6hyj8AX3riKuI7MnJ/RGR6TL0zz8OfWNEdjwMwSgppZ5C32XEW0Tc\nc3hfdtCfPOWH/sEQKXaPoKRYrBIRERGR0bL0AVZEREREZMRYrBIRERGR0XrpQwGUUuwjQEQmTUTS\nun+v2WDOJiJTl1LOTvMJVuzTSkSmSimLqVMTMGcTkalKLWezGwARERERGS0Wq0RERERktFisEhER\nEZHRYrFKREREREaLxSoRERERGS0Wq0RERERktFisEhEREZHRYrFKREREREaLxSoRERERGS0Wq0RE\nRERktFisEhEREZHRYrFKREREREaLxSoRERERGS0Wq0RERERktFisEhEREZHRYrFKREREREaLxSoR\nERERGS0Wq0RERERktFiskkULCNA6AiIiSi/mbMvEYpUsGhMfEZHpYM62TCxWiYiIiMho5dM6AKLc\nFhDw/Ozc0/P59BYt9C8iIjIezNnEYpUsTvIE5+GhUSBERJQm5mxiNwAiIiIiMlosVsmi8RISEZHp\nYM62TEpEUp+plLxsPhGRMVNKQUSU1nHkFuZsIjJlqeVstqwSERERkdFisUpERERERovFKhEREREZ\nLRarRERERGS0WKwSERERkdFisUpERERERovFKhEREREZLRarRERERGS0WKwSERERkdFisUpERERE\nRovFKhEREREZLRarRERERGS0WKwSERERkdFisUpERERERovFKhEREREZLRarRERERGS0WKwSERER\nkdFisUpERERERovFKhEREREZLRarRERERGS0WKwSERERkdFisUpERERERovFKhEREREZLRarRERE\nRGS0WKwSERERkdFisUpERERERovFKhEREREZLRarRERERGS0WKwSERERkdFisUpERERERovFKhER\nEREZLRarRERERGS0WKwSERERkdFisUpERERERovFKhEREREZLRarRERERGS0WKwSERERkdFisUpE\nRERERovFKhEREREZLRarRERERGS0WKwSERERkdFisUpERERERovFKhEREREZLRarRERERGS0WKwS\nERERkdFisUpERERERovFKhEREREZLRarRERERGS0WKwSERERkdFisUpERERERovFKhEREREZLRar\nRERERGS0WKwSERERkdFisUpERERERovFKgEAAgK0joCIiNKLOZssCYtVM5AdSYuJj4godzBnE2UM\ni1UzwKRFRGQ6mLOJMiaf1gGQdgICnidNT8/n01u00L+IiMh4MGeTpWKxaqKyI2klX9bDIxsCIyKi\nFzBnE2Uei1UTxaRFRGQ6mLOJMo99VgkALyEREZkS5myyJCxWzUB2JC0mPiKi3MGcTZQxSkRSn6mU\nvGw+EZExU0pBRJTWceQW5mwiMmWp5Wy2rBIRERGR0WKxSkRERERGi8UqERERERktFqtERJRjDhw4\ngOvXr2sdBhGZMBarRESUYw4ePAgnJyeMHDkSt2/f1jocIjJBLFaJiCjHjB49GufOnUO+fPlQq1Yt\njB07FiEhIVqHRUQmhLeuIiKzxVtXGZdbt25h2rRpOHnyJPbu3at1OERkZFLL2SxWichssVg1TrGx\nsciXj0/7JqKkeJ9VIiIyCqkVqjqdLpcjISJTwGKViIg0FxMTA0dHR8yYMQNPnjzROhwiMiIsVsls\nBQRoHQERpVf+/Pmxfv16HD9+HHZ2dvjuu+/w9OlTrcOiXMScTalhsWoG+AFPGd8XItNSo0YNrFmz\nBjt27MD+/fthZ2eHDRs2aB1WtmNuShnfF0oNi1UzwA84EZmTOnXq4I8//oCPjw+qVq2qdTjZjjmb\nKGM4HJPMSkDA8y8CT8/n01u00L+IyHTUq1dP6xAohzFnU3qwWDVR/ICnLPnxe3hoFAgR5ZjQ0FD4\n+fmhX79+JnMLLObslDFnU3qYxqecXsAPOBFZqocPH2Lp0qWYOnUq3N3d0adPH+TNm1frsF6KOZso\n89hnlcyWJbdWEJkzBwcH7NmzBwsWLMD8+fPh6OiI33//nfdpNXHM2ZQaPsHKDAQE8ENOlBI+wcr8\niQj+/PNPuLu74+eff0bNmjW1DilNzNlEKePjVonI4rBYtRwiAqUs5ldNZJb4uFUiIjJbqRWqkZGR\nsNQCnshcsFglIiKzNWnSJDRv3hx79uzROhQiyiR2AyAis8VuABQbG4vVq1fD09MTlStXhpeXF5o2\nbap1WESUAvZZJSKLw2KV4sXExGDFihWYPHkyHB0dsWnTJuTJw4uLRMaExSoRWRwWq5RcdHQ0Dh48\nCGdnZ61DIaJkWKwSkcVhsUpEZDp4NwAiIqKXmDVrFs6ePat1GESUDItVIiKyeCICEUGLFi3w3nvv\nISgoSOuQiMiAxSoREVk8pRTGjx+PS5cuoXr16mjSpAkGDhyIK1euaB0akcVjn1UiMlvss0qZ9ejR\nI8ydOxdFihTBl19+qXU4RBaBA6yIyOKwWCUiMh0cYEVERJQNRAShoaFah0FkMVisEhERZcD58+dR\nrVo1jBs3Dvfu3dM6HCKzx2KVLFJAgNYREJGpqlGjBk6ePInw8HBUq1YNEydOxIMHD7QOy+wxb1su\nFqtkkZj0iCgrKlSogEWLFuHo0aMICQmBg4MDDh06pHVYZo1523KxWCUiIsqkKlWqYMmSJTh48CAc\nHR21DofILOXTOgCi3BIQ8PzM3NPz+fQWLfQvSr+AAL5nRInZ2tpqHYJZYt7OPqact1msksVIntw8\nPDQKxAyYctIjyk3r16/HjRs3MGTIEBQuXFjrcEwO83b2MeW8zW4AREREOaR69erYs2cP7Ozs8P33\n3yMqKkrrkIhMDltWySKZ6tmllng5jijj6tSpg02bNuHo0aNwd3fHrFmz8M033+Cjjz5Cvnz8Cs4I\n5pmMM5e8zSdYEVGGeXiYxuU4PsGKjM0///yDn3/+GQsXLkSePLy4SbnHFPJ2ajmbp3VERES5pFGj\nRmjUqJHWYRCZFJ7WEVGGmdLlIyJTcfHiReh0Oq3DIDNlynmb3QCIyGyxGwCZks6dO+Pq1avw9PRE\n9+7doZTF/OkSAUg9Z7NllYiIckRYWBj69u2Lo0ePah2KSdiyZQtmzJiBqVOn4o033sDWrVvBkw8i\nFqtERJRDChUqBGdnZ3Tp0gXdu3fHiRMntA7JqCml4OrqiiNHjsDNzQ0TJ07EiBEjtA6LSHPsBkBE\nZovdAIzDs2fPsHjxYsycORNvv/02PD09UbNmTa3DMno6nQ7379+HlZWV1qEQ5Qp2AyAiIk0ULlwY\no0ePxqVLl/Dmm2+iZcuW6N+/Py5evKh1aEYtT548LFSJwGKViIhyyauvvopx48bh0qVLqFmzJpo2\nbYoBAwbgypUrWodmUu7evYsuXbrgwIEDWodClCtYrBIRUa4qWrQoJk6ciEuXLqFKlSpo2LAhBg8e\njGvXrmkdmkkoWbIkOnfujL59+8LFxQVHjhzROiSiHMVilSxW/CPoiEgbxYsXh4eHBy5evAhra2vU\nr18fQ4cOxc2bN7UOzagVKFAAgwcPxsWLF9GpUyd069YN3bp1M/tuFczZlsvkilUvLy+sWLECISEh\nWodCJo6Jj8g4lCpVClOnTsX58+dRpEgRODo6YvTo0bhz547WoRm1ggULYujQoQgKCkLLli0RHR2t\ndUg5ijnbcplcsVqlShVs2bIFDg4OaNiwIdzd3XHw4EE+9YOIyMRZWVlh1qxZOHPmDACgZs2a+PLL\nLxEaGqpxZMatcOHCGDVqFGrXrq11KEQ5wmRvXRUdHY39+/fDx8cHBw8eREBAAPLkMbnam3JZQMDz\ns3NPT8DdXf//Fi1M+1F0lDLeusq03bx5E9OmTcOaNWvwySef4IsvvkDp0qW1DsukXL9+HVFRUbCz\ns9M6lExhzrYsqeVsky1W0+PevXu4ceMGnJyc+Ng6CxQQ8PJk5uGhf5H5YrFqHoKDgzFlyhRs2LAB\nw4YNw5gxY1CiRAmtwzIJmzZtwqBBg9CtWze4ubmhcuXKWoeUKuZsssj7rJ4/fx7vvPMOKlSogEGD\nBmHDhg14/Pix1mFRLmH/JiLzUKlSJfz44484dOgQgoODYWdnh8mTJzOfp0P8wCsbGxvUr18fn332\nGW7cuKF1WClizqbUmHWx+vbbb+PSpUvYvXs36tSpg8WLF+O1117DwoULtQ6NjAAvIRGZltdffx3L\nly/H/v37ceHCBdjZ2WHGjBl48uSJ1qEZtfgBbBcuXECxYsXQsGFDhIeHax1WhjFnWy6z7gaQkoiI\nCDx79gxlypR5YZ6IsLuAiWP/JkqM3QDM29mzZ+Hp6Yk9e/Zg3LhxGDJkCF555RWtwzJ6z549Q+HC\nhbUOAwBzNiVlkX1WM6p169YoUKAAXFxc0LFjR5PtkE567N+UVFr9wcwRi1XLcPLkSXh4eOCff/7B\nV199hcGDB6NQoUJah0UZxJydFHP2c2bdDSCjNmzYgEGDBuH48eNwdnaGg4MDRo8ejWfPnmkdGoH9\nmbKK7x+ZK0dHR2zYsAHbtm3D9u3bYW9vjx9++MHs7zua3fr37w83Nzc8fPgwW7bHnJM1fP+eY7Ga\nSPHixdGzZ08sW7YMN2/exJo1a1CpUiWeoRuJjH5wLe2MlMjS1a9fH1u3bsXvv/+OjRs3wsHBAcuW\nLUNMTIzWoZmEKVOm4NatW7C3t4eXl1eWB7AxZ1N2YTeATAoKCsLSpUvh4uKCJk2aIH/+/FqHZPZ4\niSjjLL0/GLsBWLa///4bkyZNQnBwMNzd3dGvXz/kzZtX67CMXlBQELy8vODv749JkyZh+PDhmdoO\nc3bGMWezz2q2unHjBpYsWQIfHx9cvnwZbdq0QceOHeHi4oKyZcumaxvh4eFYuXIlDhw4AKUUWrZs\niT59+hhNx3djYOkf3OxkiV8cLFYJAAICAuDm5obQ0FB4eHigd+/emXqITGxsLLZt24atW7ciKioK\nderUwcCBA2FtbZ0DUWvv3LlzOHfuHHr06JHudZizsw9zdqLpLFaz7u7du/jzzz/h6+uLBg0a4Msv\nv0xzne3bt6Nfv35o3rw5OnXqhLi4OGzcuBHHjh3Dxo0b0ahRo1yI3LRY4gc3O6X1/pljZ34WqxRP\nRLBz5064ubkhIiICHh4e6N69e7qL1itXrsDV1RUlS5ZE//79UaxYMezZswd//PEHZs2ahcGDB+fw\nEZge5uysYc5ORERSfelnU3Y4duyYhIaGiojI6dOnpUyZMhIYGJgwf/du/b/btm0Ta2truXbtmgZR\nGjd3d60jMG3xf2OpMcf315DDXprnzOnFnJ02nU4n27ZtkzfeeEPq1q0rmzdvFp1O99J1nj59KnZ2\nduLt7Z0wLf7zFBQUJBUrVpRt27blYNTGRafTyerVqyUqKuqly5ljTslNzNnPXxxglUtWrlwJW1tb\nNG7cGB988AF69+6NJk2aJMyPv2zi6uqK/v3788EFKTC3M8jcxvePSN9y4+rqisOHD8PDwwNubm5o\n2LAh/Pz84gv+F6xduxb29vYYMWJEwrT4nG1nZ4d58+Zh2rRpuRC9cQgLC8Mvv/wCBwcHLF26NNUB\nbMw5WcP37zmT6gYQFRUFpRQKFCigdSiZEhUVhb///hsuLi6oWLEinjx5grNnz6JUqVJJmvtPnTqF\nbt264fLly1qGSxbA3PuXsRsApUWn02HDhg1wd3dHsWLF4OXlhTZt2iR5QIyrqysGDBiAXr16JUxL\nnLNjY2NhY2ODU6dOoXz58rl7ABrat28f3N3dcfXqVUyaNAn9+vVDvnz5tA7LrFlqzjapv6pdu3ah\nX79+aNWqFVxdXdGxY0eTSgwFCxZEq1atEBMTgwsXLmD9+lB4e5cCoP+ji+fo+BrCwsI0ipIsSfIE\nx/5lZGny5MmDd955B927d8e6deswfPhw2NjYYPLkyWjevDkA/WBYa2vrFwqFeC1a5EOpUqVM8hGm\nWdG0aVPs3LkTe/bsgZubG3Q6HQYMGKB1WGbNUnO2SRWrLi4uuHjxIvz9/eHr64tx48ahYsWKcHFx\ngYuLCxo1amT0Z3VKKdjZ2eHw4cPo2zfpIKr4P7r//e9XhIeH49NPP4WLiwtat26NIkWK5H6wREQW\nIm/evHj33XfRq1cvrFq1Ch999BGqVKmCyZMnw97eHocPH8YXXzRPsVAICQlBaGioSTWeZKfmzZtj\nz549qXajIMoqk+uzam1tjffffx+rV6/G3bt38f3330MphREjRsDa2hp9+/bFihUrEBISonWoqfrk\nk08wa9asFD/YcXFx2LBhAzw8PFC9enXMnz8f5cqVQ9u2bfH7779rEC1ZCnO4hESUVfny5cMHH3yA\n8+fPo1+/fujXrx/Onj2LOXPm4MmTJymuM2/ePPTs2RNFixbN5WiNh1IqxTsrxMXFsYjNIZaUs02q\nz2pabt26hT///BM+Pj7YtWsXHBwcElpdGzRokKn76uWEiIgItGjRAvXr18fkyZMTLi/Z2d3AF198\ngdDQUPj5+SX0zQ0PD8euXbtQqFAhdOjQQdvgTZQ53uKD0sY+q5RV0dHRWLp0KcaNG4eCBQvixx9/\nRM+ePREQALzxRjj+97//4ccff8T+/ftRoUIFrcM1OuvXr8fMmTPh6ekJFxeXJH2BX4Y52zJZ3H1W\no6OjsW/fPvj6+sLHxwf37t1LuGl/u3btULJkSU3jCwsLw5dffon169ejTp06iIuLw7lz5/Dhhx9i\n2rRpGXowwOLFixEbGwsXFxdUrVo1B6M2Xbzfn2VisUrZ5enTp+jTpw98fX1RrFgx2Nvb49KlS2jZ\nsiXmzp2LSpUqaR2iUdLpdNi4cSPc3d1RpEgReHl5oW3btmkWrczZlsniitXkrl69Cj8/P/j6+mLP\nnj1wcnJKaHV1dHRM99lednv48CGOHz+OPHnyoH79+pm6jPTnn39i7dq18PPzQ8mSJROOy9nZ2WTv\nnJDdmPgsE4tVym6PHj3CN998g1WrVsHZ2RkzZ85E9erVtQ7L6MXFxWHdunXw9PSElZUV/vjjj5c+\n+Ys52zJZfLGaWGRkJAICAuDn5wcfHx88e/YsodW1TZs2KFasmNYhZopOp8OxY8fg4+MDPz8/bNy4\nEeXKldNRyAuxAAAgAElEQVQ6LM2Y+y0+KG0sVimnPHnyBPPnz8fcuXPRoUMHTJo0CXZ2dlqHZfRi\nY2OxefPmFJ8eFp+zHzx4gPnzS6F8+SUAgLffjsW0ae1ga2ub+wFTrmKx+hJBQUEJ3QUOHDiAhg0b\nJrROVq9eXbNW15wQExODgwcPmsSdE7ITz9ItE4tVymmPHz/GvHnz4O3tja5du+Kbb75hd6wsWLFi\nBcaOHQsHh1WYPftViAg2b96Mn376CfPmzcN7772ndYiUg1LL2cYx4khj9vb2GDVqFLZv3447d+5g\n9OjRuHTpEtq3b4/XX38dw4YNg4+PD54+fap1qFl2+/ZtjBw50mTunJDd4ltaiYiyQ7FixTBp0iQE\nBQWhfPnyaNCgAYYMGYLr169rHZrJmTVrFj7//HMEBgaibdu2aNKkCWJimmLWrFkIDAzEF198gaNH\nj2odJmmAxWoyr776Kjp37oxFixbh2rVr2Lp1KypXrozZs2fDxsYGHTt2xPz580326VKVKlXCsWPH\ncPr0abRt2xZbtmyBg4MDRo0apXVoOSr+sj+LVSLKCSVLlsTkyZNx4cIFlChRAk5OThgxYgRu3bql\ndWgmY+PGjYiJicHXX3+NihX137HxObtGjRoYO3YsvL29tQuQNMNuABnw6NEj7NixA35+fvDz80Ox\nYsUSugs0a9YMBQsW1DrETImJicG9e/dS7N8qImbVDYLdASwLuwGQVkJCQjBz5kwsX74cH374ISZM\nmAAbGxutw8pV4eHh2LJlC0JCQlChQgV07twZhQoVSnX5kiVL4tixY9i0aRNmzpyJ5s2bI3/+qfji\niyeoVKkSnj59inr16iE0NDQXj4JyE/usZjOdTocTJ04kDGY6ffo0WrRoARcXF3Ts2NFsbmMyZMgQ\nnD59OqEod3JyMrnilQOtLBeLVdLa7du3MX36dKxcuRKDBg3CuHHjUKZMGa3DylEighkzZmD27Nlw\ndnZGlSpVcP78efz777+YMmUKPvnkkxTXe/XVV3Hnzh0cPVoU3t4nsWPHDjx5MhbW1osQFhaGt956\nhqNHv0v14Qxk+lLN2SKS6ks/m9Lj3r17smrVKnnvvfekTJkyUrt2bRk3bpwEBARIdHS01uFl2rNn\nz+TPP/+UUaNGib29vZQrV04++ugjuX79utahZYq7u9YRUG4y5LCX5jlzejFnG6/r16/LkCFDpFSp\nUjJx4kS5f/++1iHlGC8vL6lXr55cu3YtyfSzZ8+Kra2tLFmyJMX1mjZtKhs3bpT58+dL1apVxc/P\nTyZN0omIyIMHD6RPnz5SoEABuXz5co4fA2kjtZzNltUcEBcXh8OHD8PX1xe+vr64fPky2rRpAxcX\nF3To0MGkbycVFBQEPz8/vP/++5o9WCErTzbx8GCLqiVhyyoZm6tXr2LKlCnYtGkTRowYgdGjR6N4\n8eJah5Vt7t+/Dzs7O5w5cwbly5cHkDRnnz59Gm3atEFwcPAL9wFftWoVZs2aheDgYBw7dgxVqlRJ\nyNmNGkWiadOmqFatGp4+fYqVK1eiSJEiuXlolAt4N4BclDdvXjRq1AheXl44cuQIzp07BxcXF/j5\n+aFmzZp444034ObmhgMHDiAuLk7rcDPE3t4eI0eOTLFQffbsGYYPH45t27YhIiIix2LIyiCpFi04\nyIqItFOlShUsXboUBw8exJUrV2BnZ4dp06aZzaXtdevWwcXFJaFQBZLm3Nq1a6NGjRrw8/N7Yd2+\nfftCp9OhYMGCuHXrFkQEzZsLVqwIRrt27VC9enUsXrwYe/fuhYODA4YNG4abN2/mwlGR1kyuWD1z\n5gyioqK0DiNDypYti4EDB2LdunUICQnB3LlzERMTg08//RQ2Njbo378/fvvtN9y7d0/rULMkNjYW\nVapUwXfffYeyZcuiQ4cO8Pb2Nqo7J7BFlYiMga2tLX755RcEBgbi9OnTsLW1xezZs03+Fom3b9+G\ng4PDS5dxcHBI8S4JefLkQa1atdCmTRt8+OGHsLa2Ru/e1ti8eTN69eqFFStWoGjRoqhbty68vb3x\nyiuvwNHREWPGjMGdO3dy6pDICJhcN4CuXbsiICDAbAYzXb9+PeExsLt370atWrUSBjPVrVv3hSd8\nmIqwsDDs3LkTvr6+KFiwIBYuXJil7WV1kBQHWVkmdgMgU3H69Gl4eHhg3759mDBhAj799NOXjpw3\nVgsWLMA///yDjz/+NdWcO2VKGwwbNgzdu3d/Yf1BgwbByckJtWoNg4+P/grdnDlFk6w/Zkw9LFy4\nEI0bN8adO3cwY8YM/Prrr/D29kb//v1z/Bgp55jVAKvQ0FD57bffEgYz1atXT2JiYrQOK8siIyNl\nx44dMmbMGKlWrZqULVtWBg4cKOvXr5dHjx5pHV62O3/+/Asd8NMjq4OkOMjKcoADrDS3bNky2bBh\ng+h0Oq1DMQn//vuvdOnSRV577TX5/vvvJTIyUuuQMiQkJESKFy8ud+/eTZiWOOeeO3dOrKys5Nmz\nZymuv3XrVnnzzTeTTEu8/smTJ6V8+fIvDFy+fv26XL16Navhk8ZSy9km2WxXpkwZ9OvXD7/++ivu\n3LmDlStXmsWjQwsWLIg2bdpgzpw5OH/+PP7++2/Uq1cPP/30EypWrIjmzZtj5syZOHXqVPwXk0nb\nuXMn3njjDdSpUwfjx4/Hnj17EBMTo3VYRJSNypcvDy8vL7zxxhvYtm2bWeSunFS3bl1s3rwZmzZt\ngq+vLxwcHLBkyRKTyY1WVlYYNmwYunTp8sKl+cuXL6Nbt27w8PBItdW4Y8eOiIyMxKxZs16Y9+jR\nIwwaNAhjx45F/vz5k8yrUKECKleunH0HQkbF5LoBZISvry/c3NwSLqs3bNgQefPmzfB2IiMjERER\ngeLFi2tWFD99+hQBAQHw8fGBr68v4uLiEo6rVatWJjsqMi4uDkeOHEm4c0JQUBB27tyJBg0apLpO\nVu4GkB3rk+lgNwDjoNPpsGnTJri7u+PVV1+Fl5cX2rVrl2P7i42NRVhYGIoUKWKyD2uJd+DAAUya\nNAmXL1/GpEmT8N577xl944xOp4OHhwe8vb3Rvn175M3bGhERPggMDIS7u3uaT0y8fv062rdvDxsb\nGwwYMAB37lRHVJQ/Fi9ejF69emHu3Lnpvt93UFAQ1q1bh5EjR6Jo0aLZcXiUgyzyoQAxMTE4cOBA\nQiF069YttG/fHkOGDIGzs3Oa6x85cgQzZsxI6HeZJ08eDBgwAOPHj4e1tXUuHEHKRAQXLlxIOK6D\nBw+icePGCcWrvb29yd24P97du3dRvHjxFM+6RczraVqU81isGhedTof169dj7969WLBgQbZv/+bN\nm5gxYwZWrlwJAIiOjkbXrl0xYcIEODo6Zvv+ctPevXvh5uaG27dvw93dHX379s1U40tuevDgAf74\n4w+EhoaiQoUK6NGjR7obVqKjo7Fx40asX78e4eHhsLe3x+DBg+Hk5JShGK5du4avvvoKu3btwtix\nYzFs2DC8+uqrmTkcygUWWawmFz+Yyc7ODq1atXrpsr6+vhgwYAAmTZqEDz74AMWKFcN///2HOXPm\nwNfXF3v37sVrr72WS5G/XHh4OHbt2pVQvBYqVCihcG3evDkKFy6sdYhZ9uTJE9jb26Nly5aws7PD\n2bNnceHCBRQsWBCdOnXCJ598kuRWKUQAi1VLcuXKFTRv3hx9+vTBqFGjULFiRTx8+BDLly/H9OnT\nsX79erQw8UsqIoK//voLbm5uePToETw8PPDOO+8Y/UDcy5cvY9GiRdi1axfi4uLQuHFjDB06NMOF\nZ1acOXMGnp6eCAwMxLhx4zBkyBCz+G40N2Y1wCqnfP/997Ju3Tq5efOmlC5dWg4cOJDich4eHtKt\nW7dcji59dDqdHD9+XKZPny7Ozs5StGhRcXV1lQULFsh///2ndXhZEhwcLG3btpXChQtLoUKFxNHR\nUUaNGiVDhw4VKysr2b17t9YhkpEBB1iZlKw8Ga9Vq1by3XffpThvx44dUq5cOYmKisr09o2JTqeT\nP//8U958801xdHSUjRs3Gu0AtrVr10qZMmVk3LhxcvDgQTl27JhMnjxZypYtK3Pnzs31eE6cOCHv\nvPOOyT6F0dyllrPNOvFl1LJly6Rjx45SqFAhKV26tMycOVNOnTolurAwkf37RR4/FhGRJ0+eSKlS\npSQ4OFjjiNP24MEDWbt2rXzwwQdibW0tNWrUkLFjx8quXbtMLnH/9NNP4uTkJA8ePJDIyEjZuXOn\n/PbbbyIi8tdff4mVlVWSEahELFZNR3R0tNjb24urq6scPXo0Q+ueO3dOypYtmzSnPX6cJG+3aNFC\n1qxZk50ha06n08mWLVukbt26Ur9+fdm2bZtRFa1nzpwRKysrOXHixAvzgoODpXLlyrJjxw4NIiNj\nlVrOtqhuAOk1aNAgFChQAEopHNq1C/8UKIC8584BtWoBgYFA0aIJl567dOmidbjpptPpcOzYMfj6\n+sLHxwcXLlxAq1atEu5XayzdGlIiInB0dMS8efPQunVr/cTwcOD0aaB2baBoUXz88cewt7fHhAkT\nsGXLloQnh9WuXZt9XS0UuwGYlqioKCxZsgTTp09Hw4YN4enpma6+pr/99hu2bduG1atX6yeEhwPO\nzsCZMwl5e8aCBXjw4EGKo8xNXUoD2Nq2bat53hs6dChsbGzgHn+T1GQ5e/ny5fj999/h4+OjaZzx\n7t69i9KlSxv9ADZzxsetZkDhwoVha2uLBQsW4PDy5fpCNTYWOHtWn/yg70N59+5dmNIXQ548edCg\nQQNMmjQJBw8exMWLF9G9e3fs2rULjo6OcHJywldffYXAwEDExsZqHW4St27dwp07d573NY7/MmrW\nTP9veDj69u2b8Ai/cuXK4caNG+jatSsqVaqETz/9FJs3b87Rx8ASUdYULFgQw4cPx6VLl9CsWTO0\na9cO8+fPT3O9fPnyITIy8vmE06f1uTpR3o6MjDTbIiRPnjzo0aMHTpw4gTFjxmDUqFFo1qwZdu/e\nrWlcfn5+6NOnj/6HFHJ2nz59sH37duh0Ok3jjDdv3jzUqFEDv/76q8k9Ct3spdTcKmZwSSkrtm7d\nKg0bNtT/8PixiJOTSP78+n8fP5Zbt25J0aJFpXz58mJraysjRowQPz8/efr0qbaBZ0FMTIz8/fff\nMnHiRKlXr56ULFlS+vTpI7/88otRXFr/77//pEKFCs8n7N8vki+fvidL/vwiBw5IYGCgNG7cOMl6\nOp1Ozp8/L9999520bt1aAgICcjly0hLYDcCkPXnyJF355+7du1KiRAl5+PChfkKyvK0LC5Pq1avL\nnj17cjhi4xAbGyu//vqr2NnZSYsWLWTv3r2axPHaa689v1F/Cjk7Li5O8ubNK7GxsZrEl5K//vpL\nmjZtKtWrV5fVq1dLXFyc1iFZlNRytkUlvvSKjY2VatWqyY8//qif8PixyIEDIo8fS3R0tPTs2VNG\njRqV4mCmOXPmaBt8Nrl586YsW7ZMevToIcWLF5c333xT3N3d5eDBg5p8eKOjo8XGxkbOnj2rn5DC\nSYSbm5sMHz48U9sPDAw06ZMNShmLVcsxcOBA+fDDD58XPony9rfffiv169c3qv6cuSEmJkaWL18u\nVatWlbZt26Y6aDindO3aVZYsWaL/IYWc7e/vL05OTrkaU3rodDrx9/eXhg0birOzs8X93WiJxWoG\nXbhwQSpVqiR9+/aVHTt2yJkzZ2TlypXSoEED6dixY4qPinvw4IFZjjCMioqSv/76S7744gupUaOG\nWFlZyfvvvy+rV6+W+/fv51oc33zzjfTq1et54kj0ZXTjxg2xtraWM2fOZHi70dHR0rx5cylatKi4\nuLjI999/L1euXMnm6EkLLFbN05kzZ2Tw4MFJHq8ZHh4uzZs3lyZNmsiaNWvkzJkz8ueff0qPHj3E\nzs7Ooh/FGRUVJYsXL5aKFSuKq6urHDlyJFf26+/vLw4ODs8fF54oZ0dFRcnbb78tixcvzpVYMkOn\n08mlS5e0DsOisFjNhIcPH8q8efOkUaNGUr16dXFxcZENGzZk6pJF7969pXv37rJkyRK5ceNGDkSb\ne/777z9ZuHChdOrUSYoWLSpNmzaVqVOnyr///pujZ6ARERHStGlT6d69u/z7778ioi80161bJ6+/\n/rrMnj07S9t/+PChrF27VgYMGCA2NjbStm3b7AibNMRi1Tzdv39fvv76aylVqpQMHTo0IadGR0fL\n2rVrpV27dlK9enVp0qSJLFiwQB4b7ghg6SIjI+X777+X8uXLS7du3VIcpZ+ddDqdjBw5UurWrSu+\nvr4SFxcnOp1OAgMDpUWLFtK9e3ej6gJA2kstZ/NuALkkNDQU/v7+8PX1hb+/PypWrAgXFxdMmDAB\nxYoV0zq8TIuMjMSePXsS7jDw7NkzdOzYES4uLmjTps0LxxYSEoJ169bh7t27KF++PPr06YNSpUql\ne39Pnz7FnDlzsHjxYkRERCAqKgoNGjTA2LFjs/XODDqdDjdv3kTFihVfmCfCJ2mZCt4NwLyFhoZi\n9uzZWLZsGd5//324ubmhdOnSWodl9J49e4bFixdj5syZcHZ2hoeHB2rWrJnqshs2bMCFCxdQpEgR\n9OjRA3Z2dunel4jg119/xbx58xAUFIS8efPC2toaw4YNw7Bhw0xy0JuIYMiQIejduzdatWrF74Ns\nxCdYGZHY2FgcPHgQ/v7+cHNzQ/78+bUOKdsEBQUlFK4HDhxAw4YN4eLigg4dOmDlypX44Ycf0KVL\nF9ja2iY8Mvbzzz/HN998k6EPvE6nw4MHD1CwYMFcf97zvHnzsHz58oSnhDVu3NgkE64lYLFqGe7c\nuYNZs2Zh3LhxKFu2rNbhmIyIiAgsWLAA3333Hdq0aQN3d3c4ODgkzF+zZg1GjBiBBg0aoFGjRggN\nDcW6devQqlUrLFu2LEOPLRURhIWFQafToWTJkiZd4Ol0OqxevRqenp4oX748vLy80KxZM63DMgss\nVk3InTt38MMPP8DFxQUNGjQw+kfppSYiIgJ//fUXfH19sWrVKkRFReHdd99Fz549kTdva3TsWBi3\nbt2Cq6sr+vTpgwkTJmgdcrrExcXh0KFD8PHxga+vL65evYq2bdtiwoQJqFevntbhUSIsVonSFh4e\nDm9vb8ybNw+urq5wc3PD+fPn8cknn2Dbtm0JeS0gAGjUKBKDBg3Co0ePsHXrVpMuOrMqNjYWK1eu\nhJeXF2xtbTFt2jS8+eabWodl0lismpBbt25h3rx58PX1RUhICDp06AAXFxe0a9cuQ5fMjcX9+/dh\na2uLzZs349ChQ/D19cW+fW3RqtVeuLi4wMnJCd27d0dwcDCKFCmidbgZduvWLfj5+aFJkyaoUaOG\n1uFQIixW6cqVKyhVqhRKlCihdShG79GjR5g3bx6+//57iAi+/fZbDBw4MGG+h4f+FRMTg5o1a2LF\nihVo3LixZvEai+joaPzyyy8oUqQI3n33Xa3DMWksVk3U1atX4efnB19fX9SoUcMkn76yePFi7Nmz\nB6tWrUqYNmFCJBo02JZwbOHh4XB2dsbnn3+OZs2aoWDBghpGnL3Gjx+PunXrol27duxPl8tYrNJ3\n332HGTNmYNSoURg1alSudxsyRfv370fHjh2RL18+9OnTB19//TUqVKiQUKwCwMyZM3Ht2jUsXLhQ\ny1DJzPAJViaqSpUq+Oyzz7B169ZUC9WgoCA8fvw4lyNLn4cPH+LUqVMoVaoUAgKen5nPnFkIp0+/\ng4oVl+G3326iU6dOyJMnD9zd3WFtbY2uXbti8eLFCA4O1vgIskZEULVqVaxevRpVq1ZF06ZNMXXq\nVPz7779ah0ZkEcaOHYt9+/bh/PnzsLW1xcyZM/kku5eIjIzExYsXYW9vjzNnzuDBA0fY2/+Gt97y\ng6fn8xz+9GlDhISEaB2u0YuJicHZs2e1DsPksVg1A0uWLEGFChXQqlUrfPvttzh79iy0bl25cuUK\n+vfvj6pVq2Ljxo1YsmQJJkxohAYNtsHDA3B3f570WrXKg3v37uGjjz7C/v37ceXKFfTp0weBgYGo\nX78+6tSpg/Hjx2PPnj2IiYnR9LgySimFIUOGYMuWLQgJCYG7uztCQ0MxceJErUMjshgODg5YuXIl\nAgICcOzYMbz11ltG84hPY/HkyRN8+eWXqFixIiZPnozjx4+jcePGaNQoEpcvv4/Gjf1RqNBMPHny\nBYYNC0WePHtRoUIFrcM2eufPn0fLli3Rr18/XLhwQetwTBa7AZiJiIgI7N69O2HQj1IKgYGBKd56\nKacFBQWhefPmGDZsGIYOHYp8+fKhcuXKmDFjBiZPngwPDw9cv/5xwuWk06dPo1WrVggODkahQoWS\nbCsuLg6HDx+Gr68v/Pz8cOnSJbRu3Rqurq7o0KEDypUrl+vHl5Nu3ryJsLAw1KhRw6IHLmQXdgOg\nlDx69Ih9WBOJiIhA69atYWdnBy8vL7z++utwdnZGu3bt4O/vj2rVqmHp0qUYOzYc0dFfY9WqVYiN\njcXWrVvRvHlzrcM3euHh4Zg/fz7mzp0LFxcXuLm5Zej2X5Yk1Zyd0s1X41+wkBtMmxudTienT5/W\n7JnGHTp0eOGxs3PnzpXq1auLr6+vFC9eXDZt0j/R5MSJE1K1atXnj+RLw507d2T58uXSu3dvKVGi\nhNSvX1+++eYb2b9/f6ZvLh0ZGSk7d+6UTZs2yblz5zK1jeyybds2qVSpklSuXFk+++wz2bp1qzx5\n8kTTmEwZ+FAAojRNmTJFevbsmeShLn///bdYWVnJH3/8IdWrVxd/f3/ZvVvk7t274uzsLA4ODlK6\ndGmZNGmSPHz4MFfj1el08s8//8jGjRtl//79mn3XZdSjR4/E09NTSpcuLYcPH9Y6HKOUWs5my6qF\n+e+//9C+ffuEe4Q2a9bshdbMl3n69CnWrl2LI0eOIH/+/Gjfvj3at2+fcHut//77Dw0bNsT169ef\nbzc8HDh9Gov37YPbrFnImzcvqlSpggIFCuDChQuYOnUqPv744wwfS0xMDA4cOAAfHx/4+fnh1q1b\naN++PVxdXdG+ffs0BzOJCGbPno3vvvsOtra2KFOmDI4cOQJ7e3t4e3vDyckpwzFlBxHBuXPn4Ovr\nC19fXxw+fBhLlixB3759NYnHlLFlldJLRNCtWzd07doVH3zwgdncO1mn08Hf3x/+/v6IiYnBG2+8\ngb59++KVV14BoD/uypUrY/Pmzc9vvWfI2Xvu38fgzz/H06dPkS9fPtSrVw+7d+/Gxx9/jJkzZyI4\nOBhTpkzB1q1bc20A25YtWzB+/HgA+u4dly5dQmxsLKZNm4aePXvm6L6zy8OHD1G8eHGTvS1lTmLL\nKomISFxcnBw7dkymTJkijRs3lmLFikmXLl3k999/T3NdPz8/sbKyEldXV/H29paZM2dK/fr1pUaN\nGnLx4kUR0bcMdujQ4flKjx+LODmJ5Msn4uQkz0JC5LPPPpMmTZrI5s2bJSoqKtuOLTg4WBYvXixd\nu3aVYsWKSaNGjcTLy0uOHDmS4pn3mDFjpGHDhnL+/PmEadHR0bJ06VKxsrKSkydPZltsWREWFpZq\ny0VOPt7WHIAtq5QBgYGB0qpVK7Gzs5MVK1aY/KNAL126JDVr1pT69evLzJkzxdvbWzp16iRlypQR\nX19fEdHnl1dfffX5SslydtyjR/Lzzz+LtbW1rFy5Uh48ePDCfi5evCjvvfeeWFtby4wZM3LsatD6\n9eulfPnysmPHjoTcp9PpJCAgQCpUqCArV67Mkf1S7kktZzPxWbh79+7JqlWrZPXq1S9d7ujRo2Jl\nZSX79u1LmLZ7tz5RLFq0SCpXriyPHj2Sv/76Sxo1avR8xf379UkPEMmfX+TAAZk9e7YMGzYsh45I\nLzIyUnbs2CFjxoyRatWqiY2NjQwYMEDWrVsnDx8+lLNnz4qNjU2qReCCBQukY8eOORpjdnBycpLO\nnTvLokWL5Nq1a+la5/bt2+Ll5SV169YVOzs7cXV1lS1btpjMpbSMYLFKmbF79255++23pVq1arJt\n2zatw8mUsLAwqVKliixYsCChsNu9Wz9v//79YmVlJYcPH5bIyEgpUKCAPH36NH7mCzn7n3/+EUdH\nxzT3efbsWendu7eULVtW5syZ83yb2SA6OlrKlSsnBw8eTHH+8ePHxcrKSp49e5Zt+8xt8+bNk88/\n/1zu3r2bZPrTp09lyZIl8vbbb4utra00adJEfvjhB7PsIsZilTJl7dq18tNPP0nnzp3lf//7X5J5\n7u7P/9+nTx/53//+J8+ePRMrK6uEltaEs/T8+UWcnEQXFiaOjo6yffv23DsI0bcweHt7S8eOHaVI\nkSJSoUIFadmypZw8eVKfyB8/1ifpx49FRJ8cSpcuLcHBwbkaZ0bFn2z0799fypQpI7Vq1ZJx48al\nWngeOnRIbGxs5JNPPpF9+/bJhQsX5OeffxYnJyfp3bu3xMTE5PIR5CwWq5RZOp1Otm/fbrLFqre3\nt/Tq1SvJtMQ5e/78+fLOO++IiEjHjh3l559/1s9IlrPl8WMZNmyYTJo0Kd37PnnypPTo0UPKly8v\n8+fPl8jIyKwejmzatEmcnZ2TTkyWt9u2bStr1qzJ8r60cvPmTRk+fLiUKlVKxo8fL6GhoRISEiJO\nTk7SsWNH2bZtm1y8eFF8fX3F1dVVateuLXfu3NE67GzFYpUyZdu2bfLOO+8IAHF0dJSJEyfKvn37\nJDY2Nkni27FjR0KL6uTJk8XZ2VnCw8P1Mx8/FjlwQHRhYTJlyhSpV6+epq14ERER0rhxY2nfvr1U\nqVJFqr/2mgSXLi2xefNKbO3aCYmvSZMmEhgYqFmcGRUbGysHDx6UBQsWpDg/IiJCypUrJ5s2bUqY\nFt/SEhkZKe3atRNPT89ciDT3sFglS9WkSRPx9/dPMi1xzg4LC5PChQvL06dPZdeuXfLaa69JUFCQ\nfrGXtU8AACAASURBVKYhZ8vjx7J9+3axsrKSGzduZDiGo0ePSqdOnaRixYqyaNGiLHX7mjNnjowc\nOfL5hGTdFeTxYxk/frxMmzYt0/swFteuXZNPP/1USpUqJXZ2dvLFF18k6fIVf1Vz4sSJ0qZNG+0C\nzQHmUawmO4ui3HHv3j0pXry47N27V959d7FYWy+UoUNDBNAnP3d3keXL/5Nq1aqJiL5f7ODBg6VS\npUoyffp02b59u6xYsUKaN28utWrVylTSy24DBw4Ub29v0el08t+qVRKbJ48IIJGAjHjzTZkzZ45U\nqFBBTpw4oXWo2eabb74ROzu7hJMNkaRfXufOnRMbG5ts7UesNRarGjPTnB0ZGSn+/v5G3We8Ro0a\ncurUKdm9+3meTpyzd+8WKVWqlISGhoqIyJIlS6RUqVIycuRI8fPzk40bN8q7774rVlZWsnfv3izF\n8s8//0j79u2lcuXKsnTpUomOjs7wNn766aekLcUpdFd4//33ZeHChVmK1Zjs2LFDihQp8kLLdHze\nju8acerUqdwPLoeYfrGawlkU5Y6YmBgpVaqUXLlyJcn0xIXOb7/9Ju3bt5djx44ltJoeOnRIBg8e\nLK1bt5YePXrImjVrjKYQ8vf3Fycnp+ddAAyXvWJr15Ztq1eLq6ur5MuXT15//XUZPny4+Pr6Zmv/\nKy24urpK586dxdHRUUqXLi39+vWT7t1PyL179xKWcXR0lEOHDmkYZfZisaohM87Zly5dkho1akjj\nxo1l586dRlm0uri4yK+//ppkWuKcffXqVSlZsmSSrj9Xr16Vr7/+Wtq2bSsdO3aUuXPnpjigKrPi\nB7DZ2tpmeABbfKNJSEiIfkKy7goPg4OlRIkScvv27WyLV2vz58+XTz755IXpiX+PQ4cOfeFWkabM\n9IvVFM6iTIKZtCx8/vnnMmLEiCTT4j8wMTEx0rBhQ/npp59SHMxkjOLi4qRx48YyduxYfXGd6LLX\nlStXpGrVqrJ69Wo5fvy4TJ8+XZydnaVo0aLi6uoqCxYseKFwNwU9e/aUtWvXyu7dImPGhEmnTkcE\nEOnc+WhCS0vDhg1l//79GkeafVisashUc7ZIuvJ2bGysrFy5Uuzt7aVZs2ayZ8+eXAxQLzo6Wk6f\nPi2nTp16ofVtw4YN0qBBgyTFaOIiZ9SoUTJ69OhcijSpxAPYVq9ene5uYWPHjpWWLVvK4/jfiyFv\nP7l9W9q3by/Dhw/Pwahz39y5cxO+d5O3kH/44X/y9dfR0qvXApk1a5aWYWYr0y9WU+j0bfTMqGXh\nzp07UqVKFZk8ebJERESIiP7Dc+fOHendu7e0a9cuISkmH8z02WefaRh56kJDQ6VZs2Zib28vkydP\nlkWLFsmHH34oxYsXl/nz57+w/IMHD2Tt2rXywQcfiLW1tdSoUUPGjh0ru3btMpoW45eZMWOGDBw4\nMMm0xF9et2/flhIlSsijR/oHNhw6dMhoTzbSi8WqhkwxZ4tkOG/HxMTIzz//LK+//nqu9XGPiYmR\nqVOnSvny5cXe3l6qV68uVlZW8tVXXyWMho+NjZUOHTpIr169Egbh7N6t77s+depUqVy5sqatkDqd\nTvz9/eWtt96SWrVqye+//55m0RoTEyNDhgyRMmXKyOeffy4//PCDfPnll2JtbS0fffRRproXGLN9\n+/aJvb39C+/LpEk6ee+996RcuXJiY2PzQt9kU2b6xapIktYvk2DKLQspuH79unTu3FlKly4tXbp0\nkXbt2kmJEiVk+PDhqV4ij4iIeN5p3wjpdDr5+++/ZcyYMTJ48GD59ttvn19meom4uDg5fPiweHp6\nyltvvSXFixeX7t27y5IlS4yiT25KQkJCpGTJkknuHxtfrOp0OhkyZIh8+umnCfMGDBggRYoUEWdn\nZ5k+fbqcOHHCKC93vgyLVY2ZWs4WyXTejo6OzpXPR2xsrPTs2VPatm2b5LN88eJF6dmzp7Rq1Sqh\nlfXZs2cyYsQIKVGihLRt21a6dOkipUuXlk6dOhnNnU50Op34+PjIG2+8IU5OTrJp06Y038egoCBx\nc3OTQYMGycSJE5PcK9uc6HQ6qVu3rixfvjzJ9Pi8PWXKlIS72yxcuNAkGk3SYh7Fqqkx1ZaFNFy9\nelU2bNggW7duzVLL29dffy1t2rSRuf9n797jar7/OIC/Pqlcc5uV5pIWCs2dYbTcyV1hw9jQXGMb\ndrOpMAzbzG025vIz94qhEFpCLjNzSxJyy51uLt0/vz9OJVYpnc73e855PR+P81DnfM/3vL5HfXqf\nz/fz+Xx/+klGREToXSGU3d27d+WaNWvk+++/LytWrCgbNGggv/rqK3ngwAFVLQe1fv16aWVlJZcu\nXSoTEhLkX39plpkZOHCgbNCgwX/+P588eSL9/f3luHHjpK2traxRo4ZeNYgsVqnAtNxua7td27hx\no2zWrFmOv4epqamyY8eO/zkzFBMTI7dv3y79/PxkVFSUVvNoS3p6uty6dausX7++bNq0qQwICNDr\nvwnacubMGVm5cmU5ZcoUGR0dLaWU0sfnvpw6daq0srKSJ0+elMeOHZNdunRR7VnMgmCxqhR961nQ\n4Rjb+Ph4uWXLFunu7i6rVKki7ezs5Lhx4+SVK1eK/LWLUkpKijx48KCcMmWKbNSokaxQoYIcMGCA\nXL169X8We1bCoUOHZJ8+fWTx4sVl6dKlZZUqVaSXl5eMi4vL83np6en5vvCAWrBYpVeixXZ79uzZ\nsm/fvlqbsd22bVu5efPmZ3e80Gb/9ddf0tHRUSuvpYS0tDS5efNmWbduXdmyZcvnrlZlrKKiouSY\nMWNk2bJlZZkyZaSFhYUcOXKkvHTp0nPbaWM9W6Xl1mYLzWO5XqNV5vU4GZiEBKBNGyAsDKhXDzhw\nACji6zxnklLizJkzCAgIwKBBg1CtWjWdvK4u3Lx5E7t27YK/vz/27duH2rVrw8XFBS4uLmjatKli\n14dOTk5GYmIiLCwsIMR/L8VsCHK9zrSBYputPk+ePMGSJUswd+5ctGvXDp6ennBwcHjl/VlaWuL0\n6dOoXLlyjm12asmSKF68OFJTU/X69zotLQ0bN26Et7c3KleujGnTpuHdd99VOpai0tLS8OjRI5Qp\nUwbFihXL9/OklHrzs5Bbm63MX0lSp7NnNY1eaipw7pzmax0RQqB+/fr48ssvcyxU09PT8fXXX2Pf\nvn1ITk7WWS5teOONNzBs2DD4+vri7t27mDNnDp48eYJhw4ahcuXKGDJkCDZs2ICHDx/qNJe5uTnK\nli2rN40YkT4qVaoUJk2ahEuXLqF+/fpwcnLCkCFDXrkdK1WqFGJjYzXf5NBmx8XFoUSJEnr/e12s\nWDEMHDgQYWFhGDZsGIYNG4YOHTogNDRU6WiKKVasGMqVK1egQjUqKgoNGzbEjh07ijBZ0WOxSs84\nOmo+nZuZAXXrar5WicTERJQoUQJTpkyBpaUl+vbti+XLlyM6OlrpaAVibm4OZ2dnzJkzB2fPnsXf\nf/+NVq1aYd26dahRowZat26NmTNn4uTJk2APGZHhKFOmDL766itcvHgRnTp1grm5+Svtp3fv3liz\nZo3mmxza7DVr1qB3795aTK4sU1NTDB06FOfPn8d7772H999/H127dsWxY8eUjqYXatSogdmzZyMu\nLk7pKIXCYQD0vISEZ6eUdDQEoKDu3buH3bt3IyAgAElJSfD19VU6klYkJiZi//79CAgIgL+/P54+\nfYquXbvCxcUFHTp0QNmyZZWOqHc4DIAMzcWLF9GyZUts3boV77zzznNt9umoKHTs2BH+/v5o2rSp\n0lGLRHJyMn7//Xd89913aNy4Mby9vdGoUSOlY5GW5NZms1glg3T9+nWYm5vDyspK6SivLDIyMqtw\nPXz4MJo1a5Y11rVOnTp6f5pPF1iskj7x8fFBq1at8MYbb+S5XWBgIAYOHAgXFxe4urqiWLFi2L59\nOzZv3oylS5eif//+OkqsnMTERCxbtgyzZs1Cy5Yt4e3tDUdHR6VjUSFxzCoZlZ07d8Le3h7NmjWD\np6cnjh07hvT0dKVjFUitWrUwYcIEBAYG4vbt2/j0009x6dIldO3aFba2thgzZgx27NiBx48fKx2V\niLTgxIkTcHR0xGeffYa7d+/mul2nTp0QERGBt956C7/99hsWL16MqlWrIiwszCgKVQAoUaIEPDw8\ncPHiRbRq1QodOnTAe++9h/PnzysdjYoAe1bJYCUnJyM0NBT+/v4ICAjAvXv34Ofnh9atWysdrVCk\nlDh37hwCAgIQEBCA48eP45133snqda1Zs6bSEVWDPaukb27evInZs2dj7dq1GDFiBCZPnoxKlSop\nHUv1Hj16hEWLFuHHH39Ely5dMHXqVLaFeojDAMjoXb16FRUqVDC4sZ9xcXHYs2cPdu7ciYCAAJQt\nWzarcHVyckLx4sWVjqgYFqukr65fv46ZM2dCCIElS5YoHUdvxMfH4+eff8aCBQvQs2dPfPPNN7C1\ntVU6FuUTi1WiXKSkpKB+/fpZvZP6PJkpPT0dp06dyhrrGhYWBmdn56yJWtWrV1c6ok6xWCV9p09r\nZKpJbGwsfvzxRyxevBj9+vXDlClTDGr9bkPFYlWtEhI0a+U5Oqp29r0xyJzMFBAQgNDQUDRr1gx9\n+/bFuHHjlI5WKA8ePEBgYCACAgKwa9cuWFlZZfW6vvPOOzAzM1M6YpFisUpap5I2Ozk5+ZWXvzIm\nDx48wNy5c7Fs2TIMHDgQX3311UsnsJFyWKyqkYJXjKLcPX78GH/99ReuXr2KsWPHKh1Ha9LS0nD8\n+PGsovzixYvo0KEDXFxc0KVLF1hbWysdUetYrJJWqaTNvnHjBpo3b47PPvsMY8aMQalSpXSeQd/c\nvXsX33//PVauXIkPP/wQX3zxhV6vFmOoWKyq0eHDgJOT5uojZmZASAjQooXSqegl9u/fj1OnTun9\nZKY7d+5g586d2LlzJwIDA/Hmm29m9bo2b968QFdJUSsWq6RVKmqzz549Cy8vL4SGhuKLL77AyJEj\nUaJECUWy6JNbt25h1qxZ+OOPP+Du7s4JbCrDpavUSMVXjKLclSpVCqdPn4aTkxNq166NTz75BIGB\ngUhMTFQ6WoFYWVnhww8/xMaNG3H37l3Mnz8fKSkpGDlyJKysrDBo0CCsXbsW9+/fVzoqkTqoqM12\ndHSEj48P/P39ERQUhJo1a+LgwYOK5dEX1tbWWLBgAU6dOoX4+HjY29vjm2++QUxMjNLRKA/sWVWa\nHlwxinImpcTJkyezJjNNnDgRrq6uSsfSiuvXr2PXrl0ICAhAUFAQ6tSpg27dusHFxQWNGjWCiYl+\nfM5lzyppnUrb7L///hs2NjawtLRUOopeuXLlCmbMmIGtW7di/PjxmDBhAsqVK6d0LKPFYQBECjl9\n+jTq1Kmjt5OZkpKScPDgwayxrjExMejfvz8WLFigdLSXYrFKRPlx8eJFTJ8+HTt37sSnn34KDw8P\nlClTRulYRofFKpECpJRwcnLCmTNnsiYzde3aVa8nM12+fBnnz5+Hi4uL0lFeisUqGbujR4/i0qVL\nGDBggEGMQy9qERER8Pb2xr59+zB58mROYNMxjlklUoAQAgcOHEBERAR69OiB3bt3o27dumjXrp3S\n0V5Z5kQsIlI/ExMTLF68GPXr18emTZv07rLTumZvb49169Zh3759OHr0KGrWrImff/5Z7+YkGBr2\nrBLpWGpqKiIjI1GnTh2loxg89qwSac7w7N69G1OnTkVSUhK8vb3Rq1cvXmwgH06dOgVPT08cP34c\nX3/9NYYPH27UVwUsahwGQKQHVq9ejaVLl2YtIaVPk5nUiMUq0TNSSuzYsQMLFizAli1bOCazAI4f\nPw5PT0+cPXsW33zzDT788EO9nYegZixWifRATpOZunTpAg8PDzRp0kTpeHqHxSoRadPhw4cxdepU\nXLp0CVOnTsXgwYNhamqqdCyDwWLVWKnk0oD0ai5fvoyAgAA0b94czZs3VzqO3mGxSnpJoXY7JiYG\nFSpU+M/9UkqEhITg7NmzKFmypN5PEtWGkJAQTJ06FTdv3oSnpyfee+89TmDTAharxiinSwMCLF4N\nyJw5c2Bvb4/27dvzlF4OWKyS3nmx3Q4IAK5e1Umb3atXLyQkJGDatGlo3bo1AODIkSMYNmwYhBBw\ncnJCXFwcdu7ciT59+mDx4sUoWbJkkWZSMykl/vrrL3z77bd4+PAhvLy80K9fPw7dKgQWq8boxUsD\n7twJTJyo+HWtSXsWLFiAbdu24ejRo2jRokXWWNfatWtz8gRYrJIeerHdtrEBrlzRSZudmpqKNWvW\nYNq0aahduzY++OADfPbZZ1i6dCn69OmT1abExcVh1KhRiIuLg7+/v9G3NVJKBAYG4ttvv0ViYiK8\nvb3Ru3dvo39fXgWLVWOU+Qn93DnNpQHnzQO6dlXFda1JuxISErBv3z7s3LkT//zzD44dO8ZP92Cx\nSnooe7ttYwNERQFpaTpts5OTk7Fy5Up8+umnaNq0KUJCQv6zTUpKCho3boyffvoJHTp0KPJM+iBz\nAtvUqVMhhMC0adPQrVs3Fq0FwGLVWGW/NCDwfPGqdM8qx9Pq1MOHDxEXFwdbW1ulo+gMi1XSS5nt\ndvXqgIuLIm32/fv3YWdnh6CgoGeTO19os5csWYJDhw5h7dq1OsmkL9LT07F161Z4enqiVKlSmDZt\nGjp16sSiNR94UQBjZWGh+SRuYaG5HTig+XSuhkK1TRvN6a42bTTfU5E6ceIEWrZsiTp16mDSpEkI\nCgpCcnKy0rGI6EWZ7fYbbyjWZt+5cwdvvPHG84XqC222g4MDoqOjdZZJX5iYmKBv3744deoUPvvs\nM3zyySdo06YNgoKClI6mt1isGpvsxWtBJSRoxlNpo7A8e1bTc5Caquk1CAsr/D4pTx06dMDNmzex\nZs0alC1bFl9//TUsLS2xevVqpaMRUW4UarMrVaqE27dvP7tyU7Y2W547h3kffYTDhw/Dysqq4LmM\nhImJCQYMGICzZ89i1KhRGDlyJNq2bYuDBw8qHU3v6H+xqs0CSpv70ha1ZNJ2T6ijo2ZogpmZ5vRW\n5jAFKlImJiZo2rQppk6diiNHjiAyMhKdO3dWOhYZE0NvswF15Cpkm21lZYW3334b69ev19yRrc1O\nd3BAep068PLywoMHD3Dp0qUiOADDUaxYMQwePBjh4eEYMmQIPvjgA3Tq1AlHjx5VOpre0O9iVZsF\nlBpPS6spk7Z7QtU0JMGIvf7666hcuXKOj3Xq1AkDBgzA6tWrcefOHR0nI4Nk6G02oJ5cWmizPT09\n8cUXXyA4OPi5Njs1KAhR9++jadOmaNmyJd5++224u7vj2rVr2j8OA2JqaoqPPvoIERERcHV1Rb9+\n/dC9e3f8888/SkdTPf0uVrVZQKnxtLSaMhVFT2hhTm9RkVu1ahU6d+6Mbdu2wd7eHs2aNYOnpyfH\nudKrM/Q2G1BPLi202S1btsQff/yBQYMGoU2bNvjm++/hsXYtbBwdcfPmTezatQvTp0/HhQsXYGlp\niXPnzhXBgRgec3NzjBw5EpGRkejatSt69uyJ3r1749SpU0pHUy39Xg3gxaWZCtNDp819aYvaMmVf\nWUDp94Z0Kjk5GaGhoThw4AC++eYbvZnVytUAVMbQ22y15dJSm52SkoIdO3bg7NmzKFGiBHr06AEH\nBwctBjVuT58+xa+//orvv/8erVu3hpeXF+oZ6dA4w126SpsFlBqLMTVmItITLFZVyNDbbEC9uRQQ\nHx+PpKQkvP7660pHUb3Hjx9jyZIlmDdvHjp06ICpU6fC3t5e6Vg6ZbjFKhFRLlisEinL398fQ4YM\nwccff4xJkybhtddeUzqS6iUkJGDBggWYP38+unXrhm+//RZ2dnZKx9IJrrNKREREOtWtWzf8+++/\nePjwIezt7eHp6YnY2FilY6mahYUFpkyZgosXL6JGjRpZE9iuXr2qdDTFsFglIiKiIlO9enX8+uuv\nOHbsGK5du4ZatWpxhZF8KFeuHLy8vLImsDVu3BhjxozBjRs3lI6mcxwGQEQGi8MAiNQnOjoaVapU\nUTqG3rl37x7mzJmD33//HR988AG+/PJLWFtbKx1LqzgMgNRFDYtmExFR/mixzWah+mpef/11zJ07\nF+fOnYOJiQnq1auHSZMm4d69e0pHK3IsVkn31LJoNhERvZyO2mxvb28sXLjw2SVeKUeVK1fGTz/9\nhDNnziAxMREODg746quv8ODBA6WjFRkWq6R7alk0m4iIXk5HbXaPHj0QGBiIWrVqYenSpbwAyUtU\nqVIFixYtMooJbCxWSfeK4mpYRERUNHTUZjdu3Bjbt2+Hj48Ptm7dCnt7e6xatapIXsuQ5DSBbcaM\nGYiPj1c6mtZwghUpg4tmkw5wghWRlijQZh88eBBHjx7FxIkTdfJ6huLChQuYNm0aAgMDMXHiRIwd\nOxZlypRROla+8KIARGR0WKwSkbEKDw+Hl5cX9u/fj8mTJ2Ps2LEoUaKE0rHyxNUAiIiIyCAcOXIE\n6enpSsdQtTp16mDjxo3Ys2cPzpw5g9TUVKUjvTL2rBKRwWLPKpHhSUxMRJs2bZCamgpvb2/06NED\nQhjNr7lB4zAAIjI6LFaJDJOUEtu2bcPUqVNhbm6OadOmoUuXLixa9RyLVSIyOixWiQxbeno6/Pz8\n4OnpCXd3d3zyySdKR6JCYLFKREaHxSqRcUhLS0NSUhJKlSqldBQqBBarRGR0WKwSEekPrgZARERE\nRiUkJAQuLi44fvy40lGoEFisEhERkUF6++230b17d/Tu3Ru9evXCyZMnlY5Er4DFqpokJACHD2v+\nJSIi9WO7rWrFixfHmDFjcPHiRbRr1w5du3aFq6srbt26pXQ0KgAWq2qRkAC0aQM4OWn+ZcNHRKRu\nbLf1RokSJTBhwgRcunQJbdq0gQUv861XOMFKLQ4f1jR4qamAmRkQEgK0aKF0KiK9xglWVKTYbhNp\nFSdYqZ2jI1CvnqbBq1tX8zUREakX222DcuzYMURFRSkdg3LAYlUtLCyAAwc0n8wPHNB8T0RE6sV2\n26D8+++/aNq0KUaNGoXr168rHYeyYbGqJhYWmlNIbPCIiPQD222DMXLkSFy4cAEVKlRAw4YN4eHh\ngZs3byodi8Axq0RkwDhmlYhexd27d/H999/j4MGDOHLkCIQwmmZEUbyCFREZHRarRFQYaWlpKFas\nmNIxjAYnWBEREREVQG6Fanp6uo6TGDcWq0RERET5lJaWhiZNmsDb2xtxcXFKxzEKLFaJiIiI8qlY\nsWLYvHkzLl++jFq1amHWrFl49OiR0rEMGotVIiIiogKoWbMmVq9ejZCQEJw+fRp2dnZYv3690rEM\nFidYEZHB4gQrItKFs2fP4unTp2jWrJnSUfQaVwMgIqPDYpWISH9wNQBjkZCguV51QoLSSYiI6GXY\nZhu02NhY/P7770hJSVE6il5jsWpIEhKANm0AJyfNv2z8iIjUi222wYuJicGGDRvg4OCAVatWITU1\nVelIeonFqiE5exYICwNSU4Fz5zRfExGROrHNNni2trbYs2cPVq5ciZUrV6Ju3bpYu3Yt0tLSlI6m\nV1isGhJHR6BePcDMDKhbV/M1ERGpE9tso+Hk5ITg4GD88ssvWLJkCU6ePKl0JL3CCVaGJiFB8+m8\nXj3AwkLpNESK4gQrUj222UZHSgkhjKZZKhCuBkBERofFKhHpi6dPn6JEiRJGXchyNQAiIiIilZoz\nZw5atmyJwMBA8EPn89izSkQGiz2rRKQv0tPTsXnzZnh5eaFSpUqYNm0a2rZtq3QsneIwANKuhATN\nTFZHR46zItVisUqUDdttvZCWlob169fD29sbtra2CAgIgKmpqdKxdILFKmlP5tqAmZMCDhxgw0eq\nxGKVKAPbbb2TmpqK0NBQODk5KR1FZzhmlbSHawMSEekXttt6x9TU1KgK1bywWFUjtV9+j2sDEhE9\no/Y2G2C7bWB++OEHnD59WukYOsNiVW304fJ7FhaaU0ghITyVRETGTR/abIDttgGRUsLU1BSdOnVC\n//79ce7cOaUjFTkWq2qjL6dqLCyAFi3Y4BGRcdOXNhtgu20ghBCYMGECLl26hKZNm8LZ2RmDBg3C\nhQsXlI5WZFisqg1P1RAR6Q+22aSQ0qVL4/PPP8elS5dQt25dbNq0SelIRYarAagRL79HpBVcDYB0\ngm02kVZw6SoiMjosVonI2N29exeWlpZKx8gXLl1FREREZESioqJQp04dzJs3T+kohWIcl0QgIiIi\nMjK2trYICwtDdHS00lEKhcMAiMhgcRgAEZH+4DAAIiIiItI7LFaJiIiISLVYrBIRERGRarFYJSIi\nIiLVYrFKRERERKrFYpWIiIiIVIvFKhERERGpFotVIiIiIlItFqtEREREpFosVomIiIhItVisEhER\nEZFqsVglIiIiItVisUpEREREqmX6sg2EELrIQUREWsA2m4gMjZBSKp2BiIiIiChHHAZARERERKrF\nYpWIiIiIVIvFKhERERGpFotVIiIiIlItFqtEREREpFosVomIiIhItVisEhEREZFqsVglIiIiItVi\nsUpEREREqsVilYiIiIhUi8UqEREREakWi1UiIiIiUi0Wq0RERESkWixWiYiIiEi1WKwSERERkWqx\nWCUiIiIi1WKxSkRERESqxWKViIiIiFSLxSoRERERqRaLVSIiIiJSLRarRERERKRaLFaJiIiISLVY\nrBIRERGRarFYJSIiIiLVYrFKRERERKrFYpWIiIiIVIvFKhERERGpFotVIiIiIlItFqtEREREpFos\nVomIiIhItVisEhEREZFqsVglIiIiItVisUpEREREqsVilYiIiIhUi8UqEREREakWi1UiIiIiUi0W\n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\njYrdAAAAAElFTkSuQmCC\n", "text/plain": [ "<matplotlib.figure.Figure at 0x222b12bf518>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn import svm\n", "import course_utils as bd\n", "import pandas as pd\n", "imp.reload(bd)\n", "\n", "\n", "#Generate noisier data than the last example\n", "m = [[0.25,0.25],[1.25,1.25]]; s = 0.35; n=20\n", "X1=pd.DataFrame(np.random.multivariate_normal([m[0][0], m[0][1]], [[s,0], [0,s]], n), columns=['x1','x2'])\n", "X2=pd.DataFrame(np.random.multivariate_normal([m[1][0] ,m[1][1]], [[s,0], [0,s]], n), columns=['x1','x2'])\n", "X1['Y'] = -1 * np.ones(X1.shape[0]); X2['Y'] = 1 * np.ones(X2.shape[0])\n", "dat = X1.append(X2, ignore_index=True)\n", "\n", "\n", "#Now plot for different levels of C\n", "\n", "fig = plt.figure(figsize = (12, 12))\n", "c_s = [ 1000, 1, 10e-2, 10e-4 ] \n", "for i,c in enumerate(c_s):\n", " my_svm = svm.SVC(kernel='linear', C=c)\n", " my_svm.fit(dat[['x1','x2']], dat['Y'])\n", " w = my_svm.coef_[0]\n", " t = my_svm.intercept_\n", " if t<0:\n", " sign = '-'\n", " else:\n", " sign = '+'\n", " ax = fig.add_subplot(2, 2, i+1)\n", " plt.title('C={} : f=<{},{}> X {} {}'.format(c, np.round(w[0],1), np.round(w[1],1), sign,np.abs(np.round(t,1))))\n", " bd.plotSVM(dat[['x1','x2']], dat['Y'], my_svm)\n", " ax.axes.get_xaxis().set_visible(False)\n", " ax.axes.get_yaxis().set_visible(False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>As we increase $C$, we can see that the norm of $W$ increases and the number of support vectors identified shrinks. \n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# SVM vs. Logistic Regression\n", "\n", "<p>Both SVM and Logistic Regression find linear separating hyper-planes of the form $class(X)=f(W\\cdot X+t)$.\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x222b1c615c0>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAHfCAYAAAB07SAnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4FFXWx/FvxUA0G5tGgci+74tGBQMBxaCEoMCwiwQS\n3EZlRMZ1BMRXZgQRXGZGJIDAJAEVJYCCIIQgoqBsAccRxC3ggiIQAoSt3j8KIoGQtburuvv3eZ48\n0N3VVadZcnJu3XuPYZomIiIi4jwBdgcgIiIihVOSFhERcSglaREREYdSkhYREXEoJWkRERGHUpIW\nERFxKJckacMwkg3D+NkwjG3nPDfWMIxswzA2nfnq7opriYiI+AtXVdKzgNhCnp9imma7M1/LXHQt\nERERv+CSJG2a5kfA74W8ZLji/CIiIv7I3fek/2wYxhbDMGYYhlHJzdcSERHxKYartgU1DKM2sNg0\nzVZnHl8B/GqapmkYxrNAddM0RxTyPu1LKiIifsc0zWJHm91WSZumuc/84yeA14FrizjWb7/Gjh1r\newz6/Pr8+uz6/Pr8nv0qKVcmaYNz7kEbhnHVOa/1Bra78FoiIiI+L9AVJzEMIwWIAaoZhvE9MBbo\nYhhGG+A08C1wtyuuJSIi4i9ckqRN0xxUyNOzXHFuXxcTE2N3CLbS54+xOwTb+PNnB31+f//8JeWy\niWNlDsAwTLtjEBER8STDMDBLMHHMJZW0iIi4Xp06dfjuu+/sDkPKoXbt2nz77bdlfr8qaRERhzpT\nbdkdhpTDxf4OS1pJq8GGiIiIQylJi4iIOJSStIiIiEMpSYuIiDiUkrSIiIhDKUmLiIhLjRkzhkaN\nGlGpUiWaNWvG3Llz7Q7Ja2mdtIiIuFRoaChLly6lYcOGbNiwge7du9OwYUOuv/56u0PzOqqkRUS8\nUU4OrF9v/WrDOXbv3k21atXYsmULAHv37iUiIoLMzEzGjh1Lw4YNAYiKiiI6Opr169eXPU4/piQt\nIuJtcnIgOho6dbJ+LUuiLuc56tWrx/PPP8+QIUM4evQoCQkJJCQk0KlTpwLHHT16lI0bN9K8efPS\nxyjacUxExKkuuuPY+vVWcj15EipUgMxMKO1QsivOAdx+++3s3r2bgIAANm7cSIUKFQq8ftddd/Hr\nr7+ydOnSUp/bF2jHMRERf9OiBTRvbiXXZs2s39txDiAxMZEdO3bwwAMPXJCgx4wZwxdffMH8+fPL\ndG5RJS0i4lhF7t2dkwM7dljJNSysbBco5zlyc3Np3bo1Xbt25f333ycrK4vKlSsDMHbsWN555x0y\nMzPzn/NH5a2klaRFRBzK6Q02RowYwdGjR0lJSeHuu+/mwIEDzJ8/n4kTJzJr1iw++ugjIiIi7A7T\nVkrSIiI+yslJOj09nfvvvz+/es7NzaVt27aMHz+ewYMHExQURIUKFTBNE8MweOKJJ3jsscfsDtvj\nlKRFRHyUk5O0lIwmjomIiPgoJWkRERGHUpIWERFxKCVpERERh1KSFhERcSglaREREYdSkhYREXEo\nJWkRERGHUpIWERFxKCVpERFxqTFjxtCoUSMqVapEs2bNmDt3rt0heS0laRERL5WR4YxznC80NJSl\nS5dy8OBBZs+ezUMPPcQnn3zi+gv5ASVpEREvZWeS3r17N9WqVWPLli0A7N27l4iICDIzMxk7diwN\nGzYEICoqiujoaNavX1/+YP2QkrSIiJRavXr1eP755xkyZAhHjx4lISGBhIQEOnXqVOC4o0ePsnHj\nRpo3b25TpN5NXbBERByqsA5KGRl/VL/jx8PYsdbvY2Ksr5JwxTnOuv3229m9ezcBAQFs3LiRChUq\nFHj9rrvu4tdff2Xp0qWlO7GPKG8XrEC3RCUiIm5xfiIdN86ec5yVmJhIr169mD59+gUJesyYMXzx\nxResXr267BfwcxruFhGRMsnNzWXUqFGMGDGCcePGceDAgfzXxo4dy/Lly1mxYgWhoaE2RundlKRF\nRLxUaYemXX2OBx98kKioKKZPn85tt93G3XffDcDEiRNJTU1l5cqVVK5cufxB+jHdkxYRcaiL3c90\ngvT0dO6//36ysrKoXLkyubm5tG3blvHjxzN48GCCgoKoUKECpmliGAZPPPEEjz32mN1he1x570kr\nSYuIOJSTk7SUTHmTtIa7RUREHEpJWkRExKF8OkmnZKXw1KqnNFwkIiJeyaeT9M31bmbpzqU8tOwh\nTpun7Q5HRESkVHx+4tiBYwfokdKDhlUbMiN+BoEB2r9FRLyDJo55P00cK0blSyvzwZAP2Juzl/5v\n9SfvZJ7dIYmIiJSIzydpgJCKISweuBjTNIlPiyf3eK7dIYmIiBTLL5I0QFBgEAv+tICrQq8idl4s\nB48dtDskERGRIvlNkgYIDAhkVq9ZtKveji5vdGFf7j67QxIRkWI88cQTvPTSS3aHUcDx48dp2rQp\nv/32m1uv41dJGiDACGBa92n0aNiDTrM7kX0o2+6QRES80kcffUTHjh2pXLkyl19+OdHR0Xz00UeE\nhoZy5MiRC45v164d//znP/nuu+8ICAigffv2BV7/7bffqFixIvXq1ct/7tdff2Xu3Ln5+4IDfPjh\nhzRt2pTQ0FBuuukmvv/++yLjTEtLo1mzZoSGhtKwYUPWrVsHQEpKCmFhYYSHhxMeHk5ISAgBAQFs\n3rwZgPHjx1OxYkXCw8Pzj/v2228BqFixIiNGjGDixIll+rMrMdM0bf2yQrDHpHWTzDpT65g7f9tp\nWwwiIhdj5/fH4hw6dMisXLmyOX/+fPP06dPmsWPHzBUrVpjbtm0zmzRpYr7xxhsFjs/KyjIvvfRS\n8/fffze//fZb0zAMs0mTJuaOHTvyj3nppZfMJk2amHXr1s1/btKkSebIkSPzH//6669mpUqVzLff\nftvMy8szx4wZY15//fUXjfODDz4w69SpY27YsME0TdPcu3evuXfv3kKPnT17ttmgQYP8x+PGjTPv\nvPPOi547OzvbvPzyy83jx49f9JiL/R2eeb7YHOl3lfS5HunwCI/f+Dgxs2PY/st2u8MREfEaX331\nFYZh0K9fPwzDICgoiJtvvpmWLVsydOhQ5syZU+D4uXPncttttxXoinXnnXcye/bs/Mdz5sxh6NCh\nBd73/vvv07lz5/zHCxcupEWLFvTu3ZuKFSsybtw4tm7dyldffVVonOPGjePpp5/m2muvBaB69epU\nr1690GPfeOONC65flJo1a1K1alU++eSTEr+ntPw6SQOMbD+SSd0mcfOcm9mwZ4Pd4YiIeIVGjRpx\nySWXMGzYMJYtW1agl/Sdd95JZmYme/bsAawR25SUFIYNG5Z/jGEYDBkyhLS0NEzT5IsvviA3N5eo\nqKgC18nKyqJx48b5j3fs2EHr1q3zHwcHB9OgQQN27NhxQYynT5/ms88+45dffqFhw4bUqlWLBx54\ngLy8C5fifvfdd6xdu/aCJL148WIuv/xyWrZsyb///e8L3tekSRO2bt1azJ9W2fl9kgYY2HIgM+Jn\nEJcSR8a3GXaHIyJSIobhmq+yCAsL46OPPiIgIICRI0cSERFBr1692LdvH5GRkXTu3Jm5c+cCsHLl\nSo4fP85tt91W4ByRkZE0adKEFStWMHfuXO68884LrnPgwAHCwsLyHx8+fJhKlSoVOCY8PJycnJwL\n3vvzzz9z4sQJ3n77bdatW8eWLVvYvHkzzz777AXHzpkzh+joaGrXrp3/XP/+/fnvf//Lvn37mD59\nOs888wzz58+/4M/h3B9QXE1J+oy4RnHM7zuffm/2Y8lXS+wOR0SkWKbpmq+yaty4MTNnzuT7779n\n+/bt7N27l1GjRgFw11135SfpefPmMWDAAC655JILznF2yDstLa3QJF2lSpUCCTg0NJRDhw4VOObg\nwYMFEvlZl112GQAPPvggERERVK1alYcffpj33nvvgmPnzp1boNIHq0q+6qqrMAyDG264gYceeoi3\n3nqrwDE5OTkFhvBdTUn6HF3qdmHJoCUkpieStj3N7nBERLxGo0aNGDZsGNu3W/N7evfuTXZ2NhkZ\nGSxcuJC77rqr0Pf16dOHpUuXUr9+fSIjIy94vVWrVgXuNzdv3pwtW7bkP87NzeXrr7+mefPmF7y3\ncuXKF5zTKGToYN26dfz444/06dOnyM9Y2Baf//3vfwsMv7uakvR5ompGsXLoSkZ/MJrpn0+3OxwR\nEUf63//+x5QpU/LvO//www+kpqZyww03ANa94j59+pCQkECdOnVo165dgfefTXbBwcGsXr2a119/\nvdDr3HbbbWRkZOQ/vuOOO9ixYwfvvPMOeXl5jB8/njZt2tCoUaNC35+QkMDLL7/Mvn37+P3333nx\nxRfp2bNngWPeeOMN+vTpQ0hISIHn09PT84eyN2zYwLRp07j99tvzX9+7dy+///47119/fXF/XGVX\nking7vzCoUsMdv6206wztY45ad0ku0MRET/l1O+Ppmmae/bsMfv162fWrFnTDA0NNSMjI817773X\nzMnJyT8mIyPDDAgIMCdNKvh99NtvvzUDAgLMU6dOXXDelStXFliC9euvv5pXX321eezYsfznPvzw\nQ7NJkyZmcHCw2aVLF/O7777Lf+25554zb7vttvzHJ06cMO+77z6zcuXKZvXq1c1Ro0aZeXl5+a8f\nO3bMrFKlirl69eoLYhk4cKBZrVo1MywszGzatKn5yiuvFHj9+eefN0ePHl3kn9PF/g4p4RIsn++C\nVR7Zh7LpNrcbfZv25ZkuzxQ6TCIi4i7qgmV56qmniIiI4MEHH7Q7lHzHjx+nTZs2ZGZmcvnll1/0\nuPJ2wVKSLsa+3H3Ezovlxlo3MrX7VAIM3SEQEc9QkvZ+alXpZleEXMGqu1ax6cdNjEgfwcnTJ+0O\nSURE/ISSdAlUvrQyy4csZ2/OXga8NUA9qUVExCOUpEsopGII6QPSAdSTWkREPEJJuhSCAoNI65tG\njbAaxM6L5cAx9+0yIyIioiRdSoEBgSTHJ9O+enu6vtFVPalFRMRtlKTLIMAIYGr3qcQ1ilNPahER\ncRsl6TIyDINnujzDiLYjiJ4Vza79u+wOSUREfIySdDmpJ7WISOkNGjSI9PR0u8Mo4JdffqFZs2ac\nOHHC7lDyKUm7gHpSi4g/qlu3LqtWrSrw3Jo1a7jkkksIDw+nUqVKNG3alNmzZxc4Jisri23bthEf\nH5//XEpKCnXq1CEsLIzevXsX2/5x2rRp1KtXj9DQUJo3b86uXdZo5sSJEwkLCyM8PJzw8HCCg4MJ\nDAxk//79AAwbNoygoCDCw8Pzjzu72UhERARdu3bltddeK+8fjcsoSbuIelKLiFhq1qzJoUOHOHjw\nIFOmTCEpKYmdO3fmv/7aa68xePDg/Mc7duzgnnvu4T//+Q8///wzl112Gffee+9Fzz9jxgxmzZrF\n+++/z+HDh1myZEn+1pyPP/44OTk5HDp0iEOHDvHoo48SExND1apVAetW5aOPPsqhQ4fyjzt3y+dB\ngwYpSfsq9aQWESno1ltvpWrVqmzbti3/uffff5/OnTvnP05JSSE+Pp6OHTsSHBzMhAkTWLhwIbm5\nF+5HYZomzzzzDC+++CKNGzcGrIr+Yj2d58yZc0Gf6KJcd9117N69mx9++KHE73EnJWkXU09qERGL\naZqkp6fz22+/0aBBAwCOHDnCN998k59gwaqkz+3JXK9ePYKCggr0kT4rOzub7OxssrKyqFWrFvXr\n12fcuHGFXj8zM5N9+/bRu3fvAs//85//5PLLL+faa69l4cKFBV675JJLaNCgAVu3bi3rx3apQLsD\n8EVne1LHzovlUN4hRrYfaXdIIuKDjPGu6cxnjnVtE489e/ZQtWpVjhw5wqlTp5gyZUp+Ej5w4ACG\nYRAWFpZ//OHDh6lUqVKBc4SHh5OTk3PBubOzrSWvK1asYMeOHezfv59bbrmFq6++mhEjRhQ4ds6c\nOfTt25fg4OD85x566CGmTJlCpUqVWL58Of3796d69er5fbABwsLCir0n7ilK0m7SIqIFa4atodvc\nbhzKO8QjHR6xOyQR8TGuTq6uUrNmTb7//ntOnDjBY489xqpVq/LbTJ4dls7JyaFatWoAhIaGcujQ\noQLnOHjwYIFEftZll10GwKOPPkpYWBhhYWHcfffdvPfeewWS9NGjR3nzzTdZvHhxgfe3adMm//e3\n3norgwcPZuHChQWSdE5OzkWHzz1Nw91u1KBqA9YmrCV5czJ/W/U3tZwTEb9SoUIF/v73v7Nt27b8\n5VbBwcHUr1+/wFB28+bNCwwvf/3115w4cYJGjRpdcM7GjRtTsWLFAs+dO/HrrIULF1KtWjU6depU\nZIznt5I8deoUu3btKjD8biclaTeLDI8kc1gmS3cu5aFlD3HaPG13SCIiLnP8+HHy8vLyv85fY1yh\nQgVGjx7N+PHj85+77bbbWLNmTf7jwYMHs3jxYtatW0dubi5PP/00ffr0ISQk5ILrXXbZZQwYMIDn\nn3+ew4cPk52dzfTp0+nZs2eB4+bMmcPQoUMveP/bb79Nbm4upmnywQcf8J///IdevXrlv75hwwbq\n1q3L1VdfXeY/E5cyTdPWLysE3/f70d/NjskdzWHvDjNPnDphdzgi4gWc/v2xTp06ZkBAQIGv6Oho\ns1atWgWOO3LkiHnFFVeYS5YsMU3TNLdv3242b968wDGpqalmrVq1zNDQUPOOO+4wf//99/zX7rnn\nHvPee+/Nf3zo0CFzwIABZlhYmFmrVi3z2WefLXCuPXv2mBUqVDC//vrrC2KOjo42K1eubFaqVMls\n06aNuWDBggKv33///ebLL79ctj+QQlzs7/DM88XmSMO0eQjWMAzT7hg8Jfd4Lr0X9Ca0YigpvVMI\nCgyyOyQRcbDzh2J9yZAhQ+jXr1+BDU3stm/fPmJiYti8efMFQ+pldbG/wzPPFzvzT0naw/JO5jFo\n4SAOHz/Mwn4LCal44XCOiAj4dpL2F+VN0ron7WFBgUHM7zuf6qHViZ0Xy8FjB+0OSUREHEpJ2gaB\nAYHM7DWTdtXb0eWNLupJLSIihVKStkmAEcC07tPo0bCHelKLiEihlKRtZBgGE7pOUE9qEREplEuS\ntGEYyYZh/GwYxrZznqtiGMYHhmH8zzCM5YZhVCrqHP7skQ6P8MSNT6gntYiIFOCqSnoWEHvec48B\nK03TbAysAh530bV8UlL7JCbfMlk9qUUkX+3atTEMQ19e/FW7du1y/Rtw2RIswzBqA4tN02x15vGX\nQGfTNH82DOMqIMM0zSaFvM+vlmAVZ+lXS0lYlMD8vvPpUreL3eGIiIgbOGEJVoRpmj8DmKb5ExDh\nxmv5jB6NerDgTwvo/1Z/Fv9vcfFvEBERn+XJiWMql0sopk4MSwYtIWlxEqlZqXaHIyIiNnFnq8qf\nDcO48pzh7l8uduC5DbtjYmKIiYlxY1je4dye1DnHc9STWkTEi2VkZJCRkVHq97nynnQdrHvSLc88\n/gew3zTNfxiG8ShQxTTNxwp5n+5JF2HX/l10m9uN+665jzEdx9gdjoiIuEBJ70m7JEkbhpECxADV\ngJ+BscC7wJvA1cB3QD/TNA8U8l4l6WJkH8qm29xu9GnahwldJmAU0jtVRES8h0eTdHkoSZfMvtx9\nxM6L5cZaNzK1+1QCDO1DIyLirZSkfdCBYweIS4mjQdUGzIifQWCAO6cUiIiIuyhJ+yj1pBYR8X5O\nWCctbhBSMYT0AekAxKfFk3s81+aIRETEXZSkvdD5PakPHLtgPp6IiPgAJWkvdX5P6l9yL7oMXURE\nvJSStBc725M6rmEcnWZ14oeDP9gdkoiIuJBPJ+nPPoMPPrA7CvcyzvSkTmyXSPSsaHb+ttPukERE\nxEV8OkkfPQpJSZCYCAcP2h2Nez3S4RGeiH6CmDdiyPo5y+5wRETEBXw6SUdHQ1YWVKgALVrAe+/Z\nHZF7jWw/ksndJnPzXPWkFhHxBX6zTnrVKquijo6GqVOhShW3X9I2S75awvBFw9WTWkTEobRO+jxd\nu8K2bRAeblXVixbZHZH7xDWKY37f+fR7q596UouIeDG/qaTPlZkJI0bAtdfCSy/B5Zd79PIes2HP\nBuJT43kx9kUGthxodzgiInKGKukidOoEW7fCVVdBy5bw1lt2R+QeZ3tSP7LiEaZ/Pt3ucEREpJT8\nspI+18cfw/DhVrJ+9VWIiLAtFLc525P6/mvv55EOj9gdjoiI31MlXUIdOsDmzVCvHrRqBamp4Gv9\nPhpUbcDahLUkb07mqVVPYfcPZiIiUjJ+X0mfa8MGSEiAhg3hX/+C6tXtjsi11JNaRMQZVEmXQVQU\nbNpkzf5u3RrmzPGtqvqKkCtYddcqNv24ieGLhnPy9Em7QxIRkSKokr6ITZusqjoyEqZPh5o17Y7I\nddSTWkTEXqqky6ldO9i40aqu27SB5GTfqarVk1pExDuoki6Bbdusqvryy+H116FWLbsjco2Tp0+S\nmJ7Irv27WDJoCZUvrWx3SCIifkGVtAu1agWffAKdO0P79vDaa75RVasntYiIs6mSLqUdO6x11aGh\nMGMG1K1rd0TlZ5omT69+mje/eJOVQ1cSGR5pd0giIj5NlbSbNG8O69ZB9+7W/epXXoHTp+2OqnzO\n70m9a/8uu0MSERFUSZfL//5nVdWBgdbEsgYN7I6o/KZ/Pp3xa8azbPAyWl7Z0u5wRER8kippD2jc\n2GrWcccdcMMNVgvMU6fsjqp81JNaRMQ5VEm7yK5dVmetkydh5kwrgXsz9aQWEXEfVdIe1qABrF4N\nAwdCx44waZJ3V9XqSS0iYj9V0m7wzTeQmAiHD8OsWdCsmd0RlZ16UouIuJ4qaRvVrQsrV1qTyjp3\nhuees4bBvZF6UouI2EeVtJt9/z0kJcGvv1pVdatWdkdUNmd7Ut93zX2M6TjG7nBERLyaKmmHqFUL\nli2D+++Hm2+G8ePh+HG7oyq9sz2pZ26ZqZ7UIiIeokrag/bsgbvvhuxsq6pu29buiEpPPalFRMpP\nlbQD1awJixfD6NHWjmVPPQV5eXZHVTrqSS0i4jlK0h5mGHDnnbBlC2zfbjXs2LjR7qhKp/KllVk+\nZDk/Hv6R/m/1J++kl/2kISLiJZSkbVK9OrzzjlVN9+wJjz0Gx47ZHVXJqSe1iIj7KUnbyDBgwACr\nX/Xu3dY96vXr7Y6q5IICg5jfdz41wmoQOy+WA8cO2B2SiIhPUZJ2gIgIWLAAnn0WeveGhx+GI0fs\njqpkAgMCSY5PVk9qERE3UJJ2kD59ICsLfvoJWreGtWvtjqhkAowApnWfRlzDODrN6kT2oWy7QxIR\n8QlaguVQixbBffdZiXviRAgJsTuikpn88WRe3fgqK+5cQYOqPtC7U0TEDbQEy8v16mVV1QcPQsuW\nVvMOb/BIh0d4/MbH6Ty7M1k/Z9kdjoiIV1Ml7QWWLoV77oG4OHj+eQgLszui4qVmpTJq+SgWD1xM\nVM0ou8MREXEUVdI+pEcPa031iRNWVf3BB3ZHVLyBLQeSHJ9Mj5QerP7GS4YBREQcRpW0l/ngA6th\nR7du8MILUKmS3REVLePbDPq92Y/k+GR6Nu5pdzgiIo6gStpH3XKLda+6QgVo0QLee8/uiIoWUyeG\nJYOWkLQ4idSsVLvDERHxKqqkvdiqVZCYCJ06wYsvQpUqdkd0cdt/2U7svFjGdh7LyPYj7Q5HRMRW\nqqT9QNeu1m5lYWHWver0dLsjurgWES1YM2wNEz+ayKR1k+wOR0TEK6iS9hGZmTBiBERFwUsvQbVq\ndkdUuOxD2XSb240+TfswocsEDKPYHyRFRHyOKmk/06kTbN0KV15pVdVvv213RIWLDI8kc1gm7+18\nj4eWPcRp87TdIYmIOJYqaR/08ccwfLiVrF991dob3GkOHDtAXEocDao2YEb8DAIDAu0OSUTEY1RJ\n+7EOHWDzZqhXD1q1gtRUcNrPQepJLSJSPFXSPm7DBkhIgIYN4V//svpYO0neyTwGLRzE4eOHWdhv\nISEVvWSTchGRclAlLYA1kWzTJmtNdevWMGeOs6rqsz2pq4dWV09qEZHzqJL2I5s2WVV1ZCRMnw41\na9od0R9Om6cZtWwUa79fy/Ihy4kIceCNdBERF1ElLRdo1w42brSq6zZtIDnZOVW1elKLiFxIlbSf\n2rrVqqqvuAJefx1q1bI7oj+oJ7WI+DpV0lKk1q3h00+t9dXt28NrrzmnqlZPahERiyppYccOq6oO\nC4MZM6BuXbsjsqRtT2PUslGkD0xXT2oR8SmqpKXEmje3NkCJjYVrr4VXXoHTDtgIbECLAcyIn0Fc\nSpx6UouIX1IlLQV8+aW1W1mFCtbEsgYOuCWsntQi4mtUSUuZNGkCa9fC7bfD9ddbLTBPnbI3JvWk\nFhF/pUpaLmrnTquz1qlTMHMmNG5sbzzbf9lO93ndebrz0+pJLSJeTZW0lFvDhpCRAQMHQseO8Pzz\ncPKkffGc7Un994/+rp7UIuIXVElLiXzzjVVVHz4Ms2ZZk83sop7UIuLtVEmLS9WtCytXWpPKYmLg\nuefgxAl7YlFPahHxF6qkpdS+/x6SkuDXX62qulUre+I4eOwgcalx1K9SXz2pRcSrqJIWt6lVC5Yt\ng/vvh5tugnHj4Phxz8dR6dJKLB+ynJ8O/6Se1CLik5SkpUwMwxr63rwZPvvM2gRl0ybPxxFcIZhF\nAxZhYBCfFk/u8VzPByEi4iZK0lIukZGweDGMHg3du8NTT0GehwvaoMAg0vqmUSOshnpSi4hPUZKW\ncjMMGDrU6qy1fbvVsGPjRs/GEBgQSHJ8Mu2rt6fLG134JfcXzwYgIuIGStLiMtWrwzvvwJNPQlwc\nPPooHDvmuesHGAFM7T41vyf1Dwd/8NzFRUTcQElaXMowrM1Ptm2D3buhTRtYv96T1zeY0HUCie0S\n6TS7E7v27/LcxUVEXExLsMSt3noLHngABg2CCRMgONhz157++XTGrxnPssHLaHllS89dWESkGFqC\nJY7Qty9kZcGPP0Lr1pCZ6blrj2w/ksndJnPz3JvZsGeD5y4sIuIiqqTFY959F+67z0rcEydCSIhn\nrrvkqyVzYXPNAAAgAElEQVQMXzSc+X3n06VuF89cVESkCKqkxXFuv92a/X3gALRsCatXe+a6cY3i\nmN93Pv3e6sfi/y32zEVFRFxAlbTYYulSuPtu6NnT6q4VFub+a27Ys4H41HhejH2RgS0Huv+CIiIX\noUpaHK1HD6uqPn7cqqo/+MD914yqGcXKoSt5ZMUjTP98uvsvKCJSTqqkxXbLl8PIkdCtG7zwAlSq\n5N7r7dq/i25zu3HfNfcxpuMY915MRKQQqqTFa8TGWjPAAwOhRQt47z33Xq9B1QasTVjLzC0zeWrV\nU+iHRBFxKlXS4igffmi1wYyOhqlToUoV911rX+4+YufFcmOtG5nafSoBhn5mFRHPUCUtXummm6zd\nysLDrao6Pd1917oi5ApW3bWKTT9uYvii4Zw8fdJ9FxMRKQO3V9KGYXwLHAROAydM04w673VV0lKo\nzEyrHeZ118FLL0G1au65Tu7xXHov6E1oxVBSeqcQFBjknguJiJzhpEr6NBBjmmbb8xO0SFE6dbKq\n6iuvtGaAv/22e64TUjGE9AFWya6e1CLiJJ6opL8BrjFN87eLvK5KWor18ceQkACtWsGrr0JEhOuv\ncfL0SRLTE9m5fydLBy2l8qWVXX8RERGcVUmbwArDMDYahpHkgeuJD+rQAbZsgbp1rUSdlgau/tku\nMCCQmb1mck31a9STWkQcwROVdHXTNH80DOMKYAXwZ9M0PzrndXPs2LH5x8fExBATE+PWmMS7ffqp\nda+6USP417/gqqtce37TNHl69dO8+cWbrBy6ksjwSNdeQET8TkZGBhkZGfmPx48fX6JK2qNLsAzD\nGAvkmKY55ZznNNwtpZaXZ7W+fP11mDwZhgyxelm70uSPJ/PqxldZcecKGlRt4NqTi4hfK+lwt1uT\ntGEYwUCAaZqHDcMIAT4Axpum+cE5xyhJS5lt2mTdq776anjtNahZ07XnV09qEXEHp9yTvhL4yDCM\nzcAnwOJzE7RIebVrBxs3wrXXQtu2MHOma+9Vqye1iNhJO46Jz9i61aqqIyJg+nSoVct151ZPahFx\nJadU0iIe07q1NamsUydo394a/nbVz3/qSS0idlAlLT5pxw6rqg4PhxkzoE4d15xXPalFxBVUSYtf\na97c2gDlllus+9WvvgqnT5f/vOpJLSKepEpafN6XX1rrqitWhORkqF+//OdUT2oRKQ9V0iJnNGkC\na9dCr15w/fVWC8xTp8p3znN7Uv9t1d/Uk1pE3EKVtPiVXbusqvrUKWu5VuPG5TufelKLSFmokhYp\nRIMGkJEBAwfCjTfCpEnlq6rP7Uk9In2EelKLiEupkha/9c03kJgIhw/DrFnQrFnZz6We1CJSGqqk\nRYpRty6sXGkNf3fuDM89ByfLWAif7UltYKgntYi4jJK0+DXDgLvvhs8/hzVr4LrrYNu2sp0rKDCI\ntL5p1AirQey8WA4cO+DaYEXE7yhJi2BtIbpsGdx/P9x8M4wfD8ePl/48gQGBJMcn0756e/WkFpFy\nU5IWOcMwrKHvzZutph1RUdbvSyvACGBq96n0bNSTTrM6kX0o2/XBiohfUJIWOU/NmrB4MTz8MMTG\nwlNPWf2rS8MwDJ7p8gxJ7ZKInhXNrv273BOsiPg0JWmRQhgGDB1qddbavt1q2LFxY+nPM7rDaJ64\n8Qk6z+5M1s9Zrg9URHyalmCJFMM0Yf58GDUKhg2DcePg0ktLd4607Wk8tOwh0gekc13kde4IU0S8\niJZgibiIYcCAAVZV/fXX0LYtrF9funMMaDGAmfEz6Znak9XfrHZPoCLic1RJi5TSW2/BAw/AoEEw\nYQIEB5f8vRnfZtDvzX4kxyfTs3FP9wUpIo6mSlrETfr2haws+PFHaNPGat5RUjF1YlgyaAlJi5NI\nzUp1X5Ai4hNUSYuUw7vvWmur+/a1diwLCSnZ+7b/sp3u87rzdOenGdl+pHuDFBHHUSUt4gG3325V\n1b//Dq1aweoS3m5uEdGCNcPW8PeP/s6kdZPcG6SIeC1V0iIusnQp3HMP9OwJ//gHhIUV/57sQ9l0\nm9uNPk37MKHLBAyj2B+sRcQHqJIW8bAePayqOi8PWraEFSuKf09keCSZwzJ5b+d7PPj+g5w2T7s/\nUBHxGqqkRdxg+XIYORJuuQUmT4ZKlYo+/uCxg8SlxlG/Sn1mxM8gMCDQM4GKiC1USYvYKDbWqqov\nuQRatID33iv6+EqXVmL5kOX8dPgn+r/Vn7yTpdyHVER8kippETdbtQoSEyE6GqZOhSpVLn5s3sk8\nBi8cTM7xHBb2W0hIxRJOFxcRr6JKWsQhuna1elSHh1v3qtPTL36selKLyLmUpEU8IDQUXn4ZUlJg\n9GgYPBh++63wY8/vSb0vd59ng/VTGRl2RyByISVpEQ/q1MnaA/zKK62q+u23Cz+uQE/q2epJ7QlK\n0uJEStIiHhYcDFOmWHuAP/kk/OlP8MsvFx53tid1YttE9aQW8VNa5yFikw4dYPNmq/Vlq1bw4otW\nt63z9zMZ3WE04UHhxMyO4f3B79Pyypa2xOuLMjL+qKDHj//j+ZgY60vEbprdLeIAGzZAQgI0agT/\n+hdcddWFx6RtT2PUslGkD0wnqmaU54P0cePGWV8inqDZ3SJeJCoKNm2CZs2gdWuYOxfO/9l1QIsB\nJMcnE5cSp57UIn5ClbSIw3z+uVVV16oFr70GNWsWfF09qd0jI0ND3OI5qqRFXMCOGb/t28Nnn8E1\n10DbtjBzZsGqWj2p3UMJumw0K969lKRFimDXN6CKFa37oytWwCuvwK23wvff//F6VM0oVg5dyZgV\nY5j++XR7ghRBSdrdlKTF6/jTN4XWreHTT60tRdu3t4a/z1bV6kkt4vu0BEu8jrvvHTptWU6FCtZ6\n6ttvt+5VL1gAM2ZA3bpQv2p9MhMy6Ta3GwfzDqontXiE0/6P+DIlaZHznP+NxinLcpo3h48/tjZC\nufZaK6777vujJ3XsvFgO5R1iavepBBgaJBP3cer/EV+kJC1eQT+5WwID4a9/hfh4q6p+801IToYG\nDa5g9V2riUuNY/ii4epJLeIjtARLvI4nN51w8rKcU6dg2jR47jlrOPzBByHv9BF6z+9NSMUQUnqn\nEBQYZHeY4uOc/H/EybQES8QFnPzN55JL4OGHYf16eOcdq3nHD7uDWTRgEQYG8Wnx5B7PtTtM8XFO\n/j/iC5Skxevom0JBDRta1cyAAdCxI7z0YhD/ucOFPalzcqyfBHJyXBKviJSchrtFfMju3ZCYCLm5\nkDzzNK9//xcyv89k+ZDlRIRElP6EOTnW+q8dO6yZa2vXQliY6wMX8TMa7hbxQ/XqwcqV1qSymM4B\nRGyaym31e9JpVhl7Um/fbiXokyfhiy+s34uIxyhJi/iYgAC45x5rD/A1awyWPfoMPaonla0ndYsW\nVgVdoYLV/aN5c/cELSKF0nC3iA8zTWvv78cegxv+/Dqfh45j2ZBlpetJnZPzx3C3hrpFXKKkw91K\n0iJ+IDsb7r4btpNGbvQo3rtTPalF7KR70iKSLzISliyBCf0HcOLtZLq8Hsfyr7yrJ7U/7dnuT59V\niqYkLeInDAOGDoUv03vQZucCeszqz5QlS+wOq8T8KXH502eVoilJi/iZ6tXho3kxjG24hDFrE4l/\nMo1jx+yOSkQKo819xffk5FhLh1q00ESnizAM+NvwKKL/u5Lb/tOdun0PsfDJkdxwg92RFeRPe7b7\n02eVktPEMXGsMu0JrM03Su3r/V/T4d/dOJp5L0nNxzBhAgQH2x3VhTy5Z7vd/Omz+itNHBOvV6b7\nctp8o9TqV63P53/O5KpbZ7Ls+FO0bmOydq3dUYkIKEmLr9HmG2USGR7JusRMglq8R+OHHqJf/9M8\n+KC1vahT+NOQrz99VimahrvFUc6/Lzd2rPX7Qu/LXezeszbfKLODxw4SlxpHZHB9Llk6g/XrApkx\nA7p0sTsyEd+izUzE6xV5X073nt3myIk/elIPuTSFB+8PIi4Onn9ef8SFUT9lKQvdkxbfpnvPbhNc\n4Y+e1P862JNPNuVy/Di0bAkrVtgdnfNoTbO4k5K0OFaR1YnuPbtVUGAQaX3TqBlek/6LY3nh1QP8\n+99WG8ykJDh40O4IRfyDhrvFe+nes9udNk/zl2V/9KS+9FQEf/0rLF0Kr70Gt91md4T2KNXcCR+i\noX3X0T1pESmXs9+QTdNkbMZYFuxYwMqhK4kMj+TDD62qulMnmDoVqlSxO1r7+NOaZn/6rO6me9Ii\nviInB9avt371oLOVomEYPNPlGRLbJeb3pL7pJsjKgvBw685DerpHQxPxG9oWVMTJHDSL/ZEOjxAe\nFE7n2Z1ZNtjqSf3yy9C3L4wYAfPnw0svQbVqno/NzmFYXx/+1Xal9lKSFnGywmaxX3+92y5X3Dfk\nke1HElYxjJvn3szigYuJqhlF586wbRs8+aRVVb/yCvTp47YQLxq3krR7nJ+MNdztWUrSIk52dhb7\nF1+4Zxb7eRvClOQb8sCWAwkLCqNHSg8W9F1Al7pdCA6GF5/JoW+T7xj+WDPmzw/glVcgIsK14Yr4\nGyVpEScLC7OGuN0xi70cQ+lxjeJ4809v0u/NfiTHJ9OzRgxER9Nxxw62NG3H2BpradWqItOmQb9+\nVtctV9MwrOfpz9XzNLtbxF+tX29Nzz550lpvnplZYCi9JEPIG/ZsID41nhfr3cvA/s8WONenxvUM\nHw6NG8M//wlXXeW+j6JZx+JtNLtbRIpWzIYwJamaompGsXLoSh7Z/RrTe1xV4FzXXQebNkHTptC6\nNcybB07+eVw7h4kTKUmLOIAtCeLsUHpmZrlmjbeIaMGa4ZlM7HwJk94YWeBcQUHwf/8Hzzxj7f0d\nHw979rjyQ1hcMQyrJC1OpCQt4gC2JYiwMGuIu5gEXVx8Dao2YO2Ij5i5/0Oe2vgPzr+F9eOP8Nln\n0L49tG0Ls2a5tqrWvVLxVZo4Ji6nrQN9T0n+TiPDI8kclknsvFgO5R1iavepBBh/1AEVK1r3je+4\nAxISrHXVr78OV1/tzsiLpsln4nRK0nJxF+vXXAwl6ZLxxQRxRcgVrL5rNXGpcdz22nCifppBAIEX\nfL5PP7WGv9u1s4bDk5LcMwO8OFoDLE6nJC2Fc9BOV77K6QmirD9EVLq0EsuHLKf3/N7saNaflN4p\nQNAFn+/JJ+H2262qesECmDED6tRx4QcQ8QFK0lK4Uu505YtVob8rzw8RZ3tSD144mPi0eNqzEAi5\n4LjmzeHjj2HKFLj2Wusa994LATbMltG/U3EirZOWwp2tpM/udFWKSlprVkvP6bcIyvp3evL0SZIW\nJ/HZ7p2svXcJlS+tfNFjv/wShg+37l0nJ0P9+mUOV8TxtE5aysdFy3OkZJycoKHs8QUGBJIcn0zX\nJu3p8kYXfsn95aLHNmli/VPr1csatJk6FU6dKtt1RXyFKmlxuQuqwjJOQBPfUVhP6qLs2mVV1adO\nwcyZ1q5lF+P0UYgy0f8Zn6dKWmxzQYKOjra2n4yO9nhPZHGGsz2pk9ol5fekLkqDBlbyHTgQbrwR\nJk26eFXtc5uQ6P9Mifnc330hlKTFvQqbgCZ+a3SH0Txx4xN0nt2ZrJ+zijw2IAD+/GfYsAHefx86\ndLD+Cfk8/Z8pMX9I0prd7W7+Pmzl7laL4nWS2icRFhRGt7ndSB+YTlTNqCKPr1sXVq6E6dOhc2d4\n+GGIirLuX4MPribQ/xk5h+5Ju5PWGltyctzTalG82tKvlpKwKIH5fefTpW6XEr3n++8hMRH277e2\nFm3Z0kdXE+j/zEWdv9xz7Fjr9972A1pJ70m7PUkbhtEdmIo1tJ5smuY/znvdd5N0Ma0ARfxdxrcZ\nf/SkbtyzRO8xTWsy2WOPwQMPwIkTMGGCmwMVR/LmH9AcMXHMMIwA4BUgFmgODDQMo4k7r+koxbQC\nFPF3MXViWDJoCUmLk0jNSi3RewwDRoyAzZut7UVTU63fi/gid08ciwJ2mqb5nWmaJ4A0oJebr+kc\nWmsscqGcHGuU6cys5fye1CseYfrn00t8mshIWLIEnn4aYmPhb3+DvDx3BV0C530ut79PvGp4u6zc\nnaRrAj+c8zj7zHP+o4StAEX8wkWWF7WIaMGaYWuY+NFEJq2bVOLTGQYMHQpbt0JWltUK87PP3BV8\nEcq6bErLrcrFH5K0I2Z3jzvnpkJMTAwx/vAnL+KPitgTvkHVBqxNWEu3ud04cOwAz3Z9FqOErbGq\nV4d33oG0NIiLg2HDrHuVl17qvo9SQCn3ui/3+8TrZGRkkFGGNWNunThmGMb1wDjTNLufefwYYJ47\necynJ46JOJGdywJLsCf8vtx9xM6LpePVHZl267QCPalL4uef4f77rXw3cybccIMrP8BFlHWv+3Ls\nkS/ezRGzuw3DuAT4H3AT8COwARhomuZ/zzlGSVrEU5ywLLAEy4sOHDtAXEocDao2YEb8DAIDSj/o\n9+ab8OCDMHiwNfv7ssvKG3gxyrpsSsut/JIjkvSZQLoD0/hjCdbfz3tdSdob+PumLL7Ci5YF5h7P\npfeC3oRWDCWldwpBgUGlPse+fVai/vxzq6q+8UY3BCpSBo5J0sUGoCTtfE6ovsQ17BpeLeMPeXkn\n8xi8cDA5x3NY2G8hIRUv7EldEu++C/fdB337wsSJEFK204i4jCPWSYuP0F7CvsOOZYHlmMEcFBhE\nWt80aoTVIHZeLAeOHShTCLffbv0zPnAAWrXyjz2fxTcoSUvxtCmLb/H0ssBy/pB3tid1++rF96Qu\nStWqMGcOTJsGd95pVdZa8SROpyQtxdOmLFIeLvghL8AIYGr3qfRs1JNOszqRfSi7zOHExVlrqvPy\nrL2/V6wo86lE3E73pEXE/Vw4g/mFj1/glY2vsOLOFTSo2qBc51q+HEaOhFtugcmToVKlsp0nI8M/\nNtYQ19E9aRFxDhcOsZemJ3VxYmOtqvqSS6yq+v33y3Ye3eMWd1GSFhGvk9Q+iRdueYFuc7uxYc+G\ncp0rPBz+/W+YPdvaBGXYMPj9d5eEKVJujtgWVER8j7uHgAe0GEBYxTDiUuJK1ZP6Yrp2hW3b4PHH\nrdvo//oXxMdf/Pjz+xqf5W19jcXZdE9aRNzCU71+y9KTujhr1ljtMK+7Dl56CapVK/p4b+5rLPbQ\nPWkRJ1E7QrcpS0/q4nTubFXVV15p3at++22XnFak1DTcLeJue/da3/W//dbnd2wrdAg4L4+YyF3E\nDK3lts99tid193ndyTmew8j2I8t9zuBgmDLF2qUsIQHmz4dXXoGIiAuP1fC2uIuGu0XcKScH2rWD\nXbusxw7fL9uVxo2DcaM9u6Xs1/u/ptvcbtx7zb2M6TjGZec9ehTGjrU2Q5k6Ffr3t3pZi5SVhrtF\nnGD7dvjmmz8e167tXzu2eXhL2fpV65OZkMnMLTN5atVTuKoAuOwyeP55WLTI6qjVuzf89JNLTi1S\nJCVpEXdq0cL6CgyEBg2sGUk+OtR9vpgYbNlSNjI8ksxhmby38z0eWvYQp83TLjv3ddfBpk3WR2nd\nGubOBQ0EijtpuFvE3fy9X7BNn//gsYP0SOlRrp7URfn8c+tede3a1jrrmjVdenrxcWpVKSJ+72xP\n6pAKIaT2SS1TT+qiHD8O//d/1prqf/zD2ghF96qlJJSkRUSwelIPWjiInLwc3un/Tpl7Uhdl61ar\nqo6IgOnToVYtl19CfIwmjomIYPWknt93PjXCanDLvFvK3JO6KK1bw6efwo03Qvv28NprulctruHb\nlXROjjW7tEUL/7wXKCL5Tpun+cuyv5D5fSbLhywnIqSQBc8usH27VVVXqgQzZkCdOm65jHg5VdI5\nZ9Zndupk/aqdnkT82tme1HEN4+g0qxM/HPzBLddp0cLaXK5bN7jmGnj1VTjtugnm4md8t5Jev95K\n0CdP+tUGEiJSvMkfT+bVja+6pCd1Ub78EoYPt74FJSdbq/BEQJW0LeszRcQ7PNLhEZf1pC5KkybW\nJmu9elk1wtSpcOqU2y4nPsh3K2nQ+lQRKVLa9jRGLRtF+sB0ompGufVaO3danbVOnYKZM6FxY7de\nThxOlTRYifn665WgRaRQA1oMIDk+mbiUOFZ/s9qt12rY0Go+MmAAdOwIkyapqpbi+XYlLSJSAmd7\nUs/sNZO4RnFuv97u3ZCYCLm5MGuWdUdO/IsqaRGREoqpE8PSQUtJTE90WU/qotSrBytXWku1OnWC\n556z5riKnE+VtIjIGdt/2U73ed15uvPTLulJXRLffQdJSfDbb1ZV3aqVRy4rNlMlLSJSSi0iWrBm\n2Br+/tHfmbRukkeuWbs2LF8O994LN90EzzwDJ0545NLiBVRJi4icJ/tQNt3mdqNP0z5M6DIBw0Nd\nM7KzYeRI2LvXqqrbtvXIZcUGqqRFRMrInT2pi7xuJCxdCn/5C8TGwt/+Bnl5Hrm0OJSStIhIIa4I\nuYLVd61m80+bGb5oOCdPe2Zml2HAXXfBli2wbZvVsGPjRo9cWhxISVpE5CIqXVqJ5UOW89Phn+j/\nVn/yTnqurK1RA959F554AuLi4LHH4Ngxj11eHEJJWkSkCMEVglk0YBEGBvFp8eQez/XYtQ0DBg2y\nKupdu6x71OvXe+zy4gBK0iIixQgKDCKtbxo1wmoQOy/WLT2pi3LllfDWW9bM7969YfRoOHLEoyGI\nTZSkRURKIDAgkOT4ZNpXb0+XN7rwS+4vHo/hT3+yquq9e6FNG6t5h/g2JWkRkRI625O6Z6Oebu1J\nXZQrroDUVPjHP6B/f3jwQWt7UfFNStIiIqVgGAbPdHmGxHaJRM+KZudvO22J4447YPt2OHDA2qVs\ntXv7g4hNtJmJiEgZTf98OuPXjGfZ4GW0vLKlbXEsWQL33APx8VaFrcZ/zqfNTERE3Gxk+5FM7jaZ\nm+fezKfZn9oWR1ycVVUfOwYtW8KKFbaFIi6mSlpEpJyWfLWEhEUJLOi7gC51u9gay7Jl1taisbEw\neTJUqmRrOHIRqqRFRDwkrlEcC/ouoN9b/Vj8v8W2xtK9u1VVBwRYVfX779sajpSTKmkRERfZsGcD\nPVN78mLsiwxqOcjucPjwQ0hMhM6d4cUXoUoVuyOSs1RJi4h4WFTNKD4c+iFjVozhtc9eszscbroJ\nsrIgNBRatID0dLsjktJSJS0i4mK79u+i29xu3HvNvfy141/tDgeANWtgxAi47jp46SWoVs3uiPyb\nKmkREZs0qNqAtQlrmbVlFk9++CROKEQ6d4atWyEiwqqqFy60OyIpCVXSIiJusi93H7HzYul4dUem\n3TqNAMMZddG6dTB8uLW16CuvWLuYiWepkhYRsdm5PakTFiV4rCd1cTp2tPpV16plzQCfPx9UKzmT\nKmkRETfLPZ5L7wW9CakQQmqfVIICg+wOKd+nn1pVdePG8M9/wlVX2R2Rf1AlLSLiECEVQ0gfkE6A\nEUDP1J4e7UldnOuug02boGlTaN0a5s1TVe0kqqRFRDzk5OmTJC1OYudvO1kyaAmVL61sd0gFfP45\nJCRA7drw739DzZp2R+S7VEmLiDiME3pSF6V9e/jsM+vXtm1h1ixV1XZTJS0i4mGmaTI2YywLdixg\n5dCVRIZH2h3SBbZsse5VR0TA66/D1VfbHZFvUSUtIuJQZ3tSJ7VLInpWNLv277I7pAu0aWNNKouO\nhnbtYPp0VdV2UCUtImKj1z9/nXFrxtnek7ooO3ZY96rDw2HGDKhTx+6IvJ8qaRERL5DUPokXbnmB\nbnO7sWHPBrvDKVTz5vDxx3DLLXDNNfDqq3D6tN1R+QdV0iIiDrD0q6UkLEpgft/5tvekLsqXX1r3\nqitWhORkqF/f7oi8kyppEREv0qNRDxb8aQH93+pve0/qojRpAmvXQq9ecP31MG2aqmp3UiUtIuIg\nG/ZsID41nimxUxzRk7ooO3danbVOn4aZM6FRI7sj8h6qpEVEvFBUzShWDl3pmJ7URWnYEDIyoH9/\n6NABJk+GU6fsjsq3qJIWEXEgJ/akLsru3ZCYCEeOWFV1s2Z2R+RsqqRFRLyYE3tSF6VePVi5EoYN\ns3pXT5wIJ53R9MurqZIWEXEwp/akLsp330FSEuzfb20t2tKZy79tpUpaRMQHXBFyBavuWuW4ntRF\nqV0bli+He+6Brl1hwgQ4ccLuqLyTKmkRES/g5J7URcnOhpEj4ccfraq6TRu7I3IGVdIiIj7kbE9q\nwzAc15O6KJGRsHQpjBpl7Vj29NNw/LjdUXkPJWkRES8RFBjE/L7zqRFWg1vm3cKBYwfsDqlEDAPu\nusvqrLV16x8tMaV4StIiIl4kMCCQmb1mOrYndVFq1IB334XHH4cePeCxx+DYMbujcjYlaRERLxNg\nBDCt+zR6NupJp1md+OHgD3aHVGKGAYMGwbZt1o5lbdvC+vV2R+VcmjgmIuLFXvj4BV7e8DIr7lxB\nw2oN7Q6nVEwT3nwTHnwQBg+2ZoEHB9sdlWeUdOKYkrSIiJfzhp7URdm3Dx54AL75Bj75xKq2fZ2S\ntIiIH0nbnsZDyx4ifUA610VeZ3c4ZZKdbc0G9wdK0iIifsZbelKL1kmLiPgdb+lJLSWnJC0i4kNi\n6sSwZNASkhYnkZqVanc4Uk6BdgcgIiKudbYndfd53ck5nsPI9iPtDknKSPekRUR81Nf7v87vST2m\n4xi7w5FzaOKYiIiQfSibbnO70adpHyZ0mYDhD+ubvICStIiIAH/0pL6x1o1M7T7VK3pS+zolaRER\nyXfw2EHiUuOoX6U+M+JnEBigKUl2UpIWEZECjpw4Qu/5vQmpGEJK7xSv6Unti7ROWkRECgiuEMyi\nAYswMIhPi/eantT+zG1J2jCMsYZhZBuGsenMV3d3XUtEREomKDCItL5p1AirQey8WK/pSe2v3F1J\nTzFNs92Zr2VuvpaIiJRAYEAgyfHJtKvezut6UvsbdydpzfUXEXGgsz2p4xrGeV1Pan/i7iT9Z8Mw\ntlJg+AEAAAj/SURBVBiGMcMwjEpuvpaIiJSCYRhM6DqBxHaJRM+KZudvO+0OSc5TrtndhmGsAK48\n9ynABJ4EPgF+NU3TNAzjWaC6aZojCjmHZneLiNhs+ufTGb9mvNf2pPY2JZ3dXa6FcqZpdivhoa8D\nF23JMm7cuPzfx8TEEBMTU56wRESklEa2H0lYxTBunnuzV/ekdqqMjAwyMjJK/T63rZM2DOMq0zR/\nOvP7vwDXmqY5qJDjVEmLiDjEkq+W5Pek7lq3q93h+CzbNzMxDGMO0AY4DXwL3G2a5s+FHKckLSLi\nIBnfZtDvzX4kxyfTs3FPu8PxSbYn6ZJSkhYRcZ4NezYQnxrPlNgpDGp5wSColJNH7kmLiIhvKtCT\nOi+Hu6+52+6Q/JIqaRERuaiv93/NzXNv5t5r7uWvHf9qdzg+Q8PdIiLiEupJ7XpK0iIi4jLqSe1a\nStIiIuJSZ3tS16tSj+T4ZPWkLgclaRERcbkjJ47QZ0EfgisEqyd1OaiftIiIuNzZntQBRoB6UnuA\nkrSIiJRKxUsqktonlZphNdWT2s2UpEVEpNQCAwKZET+Da2pco57UbqQkLSIiZRJgBPBi7IvEN4qn\n06xOZB/Ktjskn6MkLSIiZWYYBuO7jGdk+5FEz4pm1/5ddofkUzR/XkREyu3hGx4mPCiczrM7qye1\nCylJi4iISyS2SySsYhjd5nZj0YBF6kntAlonLSIiLrX0q6UMWzSMBX0X0KVuF7vDcSStkxYREVv0\naNSDN//0Jv3f6s/i/y22OxyvpiQtIiIuF1MnhiWDlpC0OImUrBS7w/FauictIiJuoZ7U5ad70iIi\n4lbqSX0hNdgQERHHONuTuneT3jzb9Vm/70mtJC0iIo5ytid1x6s7Mu3WaX7dk1pJWkREHEc9qS1K\n0iIi4khHThyh9/zeBFcIJrVPql/2pNY6aRERcaRze1L3TO2pntRFUJIWERGPCwoMIq1vGjXDa3LL\nvFvUk/oilKRFRMQWgQGBJMcnc0119aS+GN2TFhERW5mmydiMsby/630+TfzUL2Z9a+KYiIh4lR8O\n/sDVla62OwyPUJIWERFxKM3uFhER8XJK0iIiIg6lJC0iIuJQStIiIiIOpSQtIiLiUErSIiIiDqUk\nLSIi4lBK0iIiIg6lJC0iIuJQStIiIiIOpSQtIiLiUErSIiIiDqUkLSIi4lBK0iIiIg6lJC0iIuJQ\nStIiIiIOpSQtIiLiUErSIiIiDqUkLSIi4lBK0iIiIg6lJC0iIuJQStIiIiIOpSQtIiLiUErSIiIi\nDqUkLSIi4lBK0iIiIg6lJC0iIuJQStIiIiIOpSQtIiLiUErSIiIiDqUkLSIi4lBK0iIiIg6lJC0i\nIuJQStIiIiIOpSQtIiLiUErSIiIiDqUkLSIi4lBK0iIiIg6lJC0iIuJQStIiIiIOpSQtIiLiUErS\nIiIiDqUkLSIi4lBK0iIiIg6lJC0iIuJQStIiIiIOpSQtIiLiUErSIiIiDqUkLSIi4lBK0iIiIg6l\nJC0iIuJQStIiIiIOpSQtIiLiUOVK0oZh9DUMY7thGKcMw2h33muPG4ax0zCM/xqGcUv5wvRdGRkZ\ndodgK33+DLtDsI0/f3bQ5/f3z19S5a2ks4A7gDXnPmkYRlOgH9AUuBX4p2EYRjmv5ZP8/R+qPn+G\n3SHYxp8/O+jz+/vnL6lyJWnTNP9nmuZO4PwE3AtIM03zpGma3wI7gajyXEtERMTfuOuedE3gh3Me\n7znznIiIiJSQYZpm0QcYxgrgynOfAkzgSdM0F585ZjUw2jTNTWcevwysN00z5czjGcB7pmkuLOT8\nRQcgIiLig0zTLPY2cGAJTtKtDNfeA1x9zuPIM88Vdn7dqxYRESmEK4e7z022/9/evYTmUYVxGH+e\nIi3FqhsXCiFeCCJmYd14oSuLYqxYuqwKoi69FQQRL6iIC+lGRHHlBRSLiC4s2qqRuhGxFtrY0Fh0\nZVVoV4IUQap9XcwUYjD5PrU9Z5x5fxAyAxPyHz4y78w5Z97sBLaqq9VLgCngq9P4u1JKKaXe+6+v\nYG1RfwCuBT5QdwNExALwDrAA7ALujVHj6imllFL6i5Fz0imllFKqoxMdx9Rn1K/VA+pH6gW1M5Wk\nbm+bvsyp76nn1s5U0kpNcfpKnVEPq9+qj9TOU5L6qnpMPVg7Sw3qhLpHPaTOqw/WzlSSukbd217v\n59WnamcqTV2l7ld3jjq2E0Ua2B4RV0bEVcCHwNA+tE+A6YhYT/NO+aOV85T2t01x+kpdBbwE3ARM\nA7epl9dNVdTrNOc+VL8DD0XENHAdcN+QPv+I+A24vr3erwduVofWR2MbzXTwSJ0o0hFxfNHu2cDJ\nWllqiIhPI+LUOX9Jsxp+MFZoitNXVwPfRcT3EXECeJumAdAgRMTnwM+1c9QSEUcjYq7dPg58w8D6\nSETEr+3mGpq3jAYz76pOAJuAV8Y5vhNFGkB9Vj0C3A48WTtPRfcAu2uHSGfU0mY/PzKwi3RqqBfT\nPE3urZukrHa49wBwFJiNiH21MxX0PPAwY96YFCvS6qx6cNHXfPv9VoCIeCIiJoG3gAdK5Spl1Pm3\nxzwOnDjVBKZPxjn/lIZEXQe8C2xbMprYexFxsh3ungCuUa+onakE9RbgWDuSImOMHo5sZnK6/IOm\nKDtoXtt6+sylKW/U+at30QyBbCwSqLB/2RSnr34CJhftL9vsJ/WTehZNgX4zIt6vnaeWiPil7Vg5\nw5hztP9zG4DN6iZgLXCO+kZE3LncD3RiuFudWrS7hWaOZjDUGZrhj83tooohG8K89D5gSr1IXQ1s\npWkANCRjPUX02GvAQkS8UDtIaer56nnt9lrgRuBw3VRlRMRjETEZEZfS/N3vWalAQ0eKNPBcO/Q5\nB9xAs/JtSF4E1gGz7bL8l2sHKmm5pjh9FRF/APfTrOo/RPMf4wZzY6ruAL4ALlOPqHfXzlSSugG4\nA9jYvoa0v71RH4oLgc/a6/1e4OOI2FU5U2dlM5OUUkqpo7ryJJ1SSimlJbJIp5RSSh2VRTqllFLq\nqCzSKaWUUkdlkU4ppZQ6Kot0Siml1FFZpFNKKaWO+hO2aph7z4kEnQAAAABJRU5ErkJggg==\n", "text/plain": [ "<matplotlib.figure.Figure at 0x222b1a2d860>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn import svm, linear_model\n", "import course_utils as bd\n", "from sklearn.metrics import confusion_matrix\n", "import pandas as pd\n", "imp.reload(bd)\n", "\n", "#Generate training and testing data from the same distribution\n", "m = [[0.25,0.25],[1.25,1.25]]; s = 2; n=20\n", "\n", "def makeData(m, s, n):\n", " X1=pd.DataFrame(np.random.multivariate_normal([m[0][0],m[0][1]],[[s,0],[0,s]],n), columns=['x1','x2'])\n", " X2=pd.DataFrame(np.random.multivariate_normal([m[1][0],m[1][1]],[[s,0],[0,s]],n), columns=['x1','x2'])\n", " X1['Y'] = -1 * np.ones(X1.shape[0]) \n", " X2['Y'] = 1 * np.ones(X2.shape[0])\n", " return X1.append(X2, ignore_index=True)\n", "\n", "train = makeData(m, s, n)\n", "test = makeData(m, s, n)\n", "\n", "#Fit both types of models\n", "logreg = linear_model.LogisticRegression(C=1e30)\n", "logreg.fit(train[['x1','x2']], (train['Y']+1)/2)\n", "\n", "my_svm = svm.SVC(kernel='linear')\n", "my_svm.fit(train[['x1','x2']], train['Y'])\n", "\n", "#Get accuracy\n", "def getACC(X_t, Y_t, mod):\n", " cm=confusion_matrix(mod.predict(X_t),Y_t)\n", " return (cm[0][0]+cm[1][1])/float(np.sum(cm))\n", "\n", "acc_svm = getACC(test[['x1','x2']], test['Y'], my_svm)\n", "acc_lr = getACC(test[['x1','x2']], (test['Y']+1)/2, logreg)\n", "\n", "#Plot them\n", "w_svm = my_svm.coef_[0]; a_svm = -w_svm[0] / w_svm[1]; t_svm = my_svm.intercept_[0];\n", "w_lr = logreg.coef_[0]; a_lr = -w_lr[0] / w_lr[1]; t_lr = logreg.intercept_[0];\n", "\n", "xx = np.linspace(test[['x1','x2']].iloc[:,0].min(), test[['x1','x2']].iloc[:,0].max())\n", "\n", "yy_svm = a_svm * xx - (t_svm) / w_svm[1]\n", "yy_lr = a_lr * xx - (t_lr) / w_lr[1]\n", "\n", "fig = plt.figure(figsize = (8, 8))\n", "plt.plot(test[(test['Y']==-1)].iloc[:,0], test[(test['Y']==-1)].iloc[:,1],'r.')\n", "plt.plot(test[(test['Y']==1)].iloc[:,0], test[(test['Y']==1)].iloc[:,1],'b+')\n", "plt.plot(xx, yy_svm, label='SVM({})'.format(acc_svm))\n", "plt.plot(xx, yy_lr, label='LR({})'.format(acc_svm))\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see that the two classifiers behave very similarly when just looking for a linear decision boundary. The choice of which classifier to use is usually determined by comfort and familiarity as well as the need to exploit the specific properties of each.<br><br>\n", "\n", "<ul><b>SVM</b>\n", " <li>Intuitive geometric interpretation</li>\n", " <li>Extensibility to non-linear decision surfaces</li>\n", " <li>Strong learning guarantees</li>\n", "</ul>\n", "<ul><b>Logistic Regression</b>\n", " <li>Designed for estimating $P(Y|X)$</li>\n", " <li>Strong statistical properties</li>\n", " <li>Suited for ranking</li>\n", "</ul>\n", "</p>" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [py35]", "language": "python", "name": "Python [py35]" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }