{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Майнор по Анализу Данных, Группа ИАД-2\n", "## 22/02/2017 Линейная классификация" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "\n", "plt.style.use('ggplot')\n", "plt.rcParams['figure.figsize'] = (12,8)\n", "\n", "# Для кириллицы на графиках\n", "font = {'family': 'Verdana',\n", " 'weight': 'normal'}\n", "plt.rc('font', **font)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "code_folding": [], "collapsed": false }, "outputs": [], "source": [ "try:\n", " from ipywidgets import interact, IntSlider, fixed\n", "except ImportError:\n", " print u'Так надо'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Задача классификации" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "На прошлом семинаре мы рассматривали модели регрессии - случай, в котором необходимо было предсказать вещественную переменную $y \\in \\mathbb{R}^n$ (Стоимость автомобиля, стоимость жилья, размер мозга, объемы продаж и тп.)\n", "\n", "В задаче классификации переменная $y$ - содержит метку принадлежности к классу, как, например, это было в задаче с наивным байесом - категорию текстов. Частный случай задачи классификации - бинарная классификация $y = \\{-1, 1\\}$. Например: является ли клиент банка кредитоспособным, доброкачественная ли опухоль, сообщение - SPAM или HAM?\n", "\n", "Спрашивается, почему бы нам не взять, да и построить обычную регрессию на метки класса $y$?
\n", "Загрузите [данные](https://www.dropbox.com/s/g3s1drtaxqwthw1/crx.data?dl=0) о кредитовании. Они достаточно сильно анонимизированны и еще не до конца подходят для применения, но сейчас это нам не помешает. Постройте график наблюдений в координатах `y` и `a15`" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15y
0b30.830.000ugwv1.25tt1fg202.001
1a58.674.460ugqh3.04tt6fg43.05601
2a24.500.500ugqh1.50tf0fg280.08241
3b27.831.540ugwv3.75tt5tg100.031
4b20.175.625ugwv1.71tf0fs120.001
\n", "
" ], "text/plain": [ " a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 y\n", "0 b 30.83 0.000 u g w v 1.25 t t 1 f g 202.0 0 1\n", "1 a 58.67 4.460 u g q h 3.04 t t 6 f g 43.0 560 1\n", "2 a 24.50 0.500 u g q h 1.50 t f 0 f g 280.0 824 1\n", "3 b 27.83 1.540 u g w v 3.75 t t 5 t g 100.0 3 1\n", "4 b 20.17 5.625 u g w v 1.71 t f 0 f s 120.0 0 1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv('crx.data',index_col=None) \n", "df.head()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nY+PGjXHBBRdUtr/88stx4YUXDnlcf39/1NUN/r2Vr7zySsyaNWvIY1pbW4f8AnV0dERPT88wV8/J\nqqmpKXbv3j3ay2AMMRNUMxNUMxNUMxMMZB4YqFQqRXNzcyxdunS0l1JR83eFuPTSS+OHP/xhPPfc\nc7F9+/b4wQ9+EK+++mq0tbVFRMS6devimmuuiZdeeqlyzLe//e146KGH4pVXXomtW7fGgw8+GBs2\nbIgrr7xytF4GAAAA1KSavmIhIuJjH/tY7N27N+67777o6OiIs846K26++eaYPn16RESUy+Xo7+8f\n9FaF973vffH444/Hk08+GQcOHIg5c+bEV77ylZg9e/ZovQwAAACoSYWyXw5w3Hbu3OmtEFS4VI1q\nZoJqZoJqZoJqZoKBzAMDHXorxFhS82+FAAAAAEaPsAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqw\nAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACk\nCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAA\nQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAA\nAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkL\nAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECa\nsAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAA\npAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAA\nAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAA\nAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJ\nCwAAAECasAAAAACkCQsAAABAmrAAAAAApAkLAAAAQJqwAAAAAKQJCwAAAECasAAAAACk1Y/2AkbC\n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\ncCoac2FhyZIlcdlllw35eF3dwXdvTJky5bC3L3R2dlYeG47p06dHRMTevXuH3Ke9vT3Wr18/aNu0\nadNi6dKlMWXKlCiXy8M6JyevUqkUTU1No70MxhAzQTUzQTUzQTUzwUDmgYEKhUJERKxatSp27Ngx\n6LGFCxdGa2vru76mMRcWGhoaoqGh4aj7zZkzJ5544olB2376059GU1NT5S0RR9Lf31+JE4f87Gc/\ni2Kx+I5XK7S2tg75Bero6Iienp6jrplTQ1NTU+zevXu0l8EYYiaoZiaoZiaoZiYYyDwwUKlUiubm\n5li6dOloL6WiZn95Y2tra3R0dMSqVati+/bt8fzzz8eaNWviwx/+8KD9rr766rjnnnsqH2/YsCHu\nuOOO2LBhQ2zfvj2effbZuO++++LjH/94TJw48d1+GQAAAFDTxtwVC8eqsbExbrnllnjggQfiySef\njEmTJkVbW1v89m//9qD9yuXyoLcptLS0RLFYjO9+97vR0dERp59+elx++eXxiU984t1+CQAAAFDz\nCmW/HOC47dy501shqHCpGtXMBNXMBNXMBNXMBAOZBwY69FaIsaRm3woBAAAAjD5hAQAAAEgTFgAA\nAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEB\nAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgT\nFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACA\nNGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAA\nAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYA\nAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRh\nAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABI\nExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAA\ngDRhAQAAAEgTFgAAAIA0YQEAAABIExYAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEA\nAABIExYsho0nAAAb0UlEQVQAAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIA0YQEAAABIExYA\nAACANGEBAAAASBMWAAAAgDRhAQAAAEgTFgAAAIC0+tFewPHq7OyM73znO1Eul+NLX/rSMR2zcePG\neOCBB2LLli0xadKkaGtri2uvvfYErxQAAABOPjUdFr761a/GCy+8EBERF1988TEd8+abb8bXvva1\n+MhHPhIrVqyI119/Pb7xjW/EhAkT4pOf/OSJXC4AAACcdGo6LCxbtiz2798fDz744DEf097eHlOn\nTq1codDS0hKf+tSn4tFHHxUWAAAAYJhqOixMnTo1IiImTJgQXV1dx3TMpk2bYu7cuYO2vfe9742/\n+7u/iz179sSkSZNGfJ2cGrrLhejqidi2dVdMHFeMUl3Evt5yFOsK0d3TH+NLdVGIiLpCRH1dRDki\nGuoi9vVF9PVH9JUjunv7Y9K4uphYH9HVG7G3pz8mlupi0tv/pu55e9uEUl0UCxH7+yL6y+Wof/sc\nE8dV7Xvg4Hn7+stRKhZiUn1EsVAerU8RAABwEqrpsJDR0dERM2bMGLRt8uTJERHx1ltvCQukdJcL\n8V8/3xd/uW5L7O8rR0OxEDe1zY4Jpbq4/anNlW1/dMnZMbFUjHH1hZg+cVz8d8eB6O4txxv7euPu\nZ7dV9vuTRbPj//1sd6zf0hENxUL8n4/OjY79/XHH0/9d2edLbbNj25v74oyJDfGtAccead/lC2bF\nv259Mz78P5ti/pnjxQUAAGDEjLmw8Mgjj8Tq1auHfLy5uTnuvvvu4zpHsVg8ruOhWldPVKJCRMT+\nvnL85botceulcwZt+6sfbY1bL50TB/rK0RcR3X3liEJUosKh/VY+syX+7DfnxPotHbG/rxz7esuV\nUHBonzvXbYlvfnJe/P4//mTQ9iPt+61nt8Wf/eac+Iu1m+O7V7433lN6lz9BAADASWvMhYUlS5bE\nZZddNuTjdXXHd4fMKVOmxJ49ewZt6+zsrDw2lPb29li/fv2gbdOmTYulS5fGlClTolz2N8Cnsm1b\nd1V+kD9kf185+qvGYuC2vQf6Kn8+0rEDt/SXj7xPd0//YduH2rd86Ji+iDnTmob1+jg+pVIpmpp8\nzvklM0E1M0E1M8FA5oGBCoVCRESsWrUqduzYMeixhQsXRmtr67u+pjEXFhoaGqKhoeGEPf+cOXPi\niSeeGLTtpz/9aTQ1NVXeEnEkra2tQ36BOjo6oqenZ0TXSW2ZOK4YDcXCoB/oG4qFqCsM3m/gtonj\nivFmd29le/WxAw+tKxx5n9NKdYdtH2rfwqFjihG7d+8+/hfNMWtqavI5ZxAzQTUzQTUzwUDmgYFK\npVI0NzfH0qVLR3spFcf31/+jrLu7O/bu3Ru9vb3R29sbXV1d0d3dPWifq6++Ou65557Kx62trdHR\n0RGrVq2K7du3x/PPPx9r1qyJD3/4w+/28jmJTChF3NQ2OxqKB3PAafV1cVPb7KiLGLTtjy45O6Ic\nMa5YiGJEnFYsRJQjViyYNWi/P1k0Ox77ya7Kx+PrC3HL4nMG7fOlttnRvvmNWF517JH2Xb5gVjz+\nk1/Eny6eXfnljgAAACOhUK7ha/hvv/32ePHFFwdtO//88+O2226rfHzVVVfFokWL4oYbbqhse+ml\nl+KBBx6IrVu3xqRJk6KtrS2uueaayiUlw7Vz505XLFC5K8TeAwfvznDorhD1dYXY9w53hejui+h9\n+64Q+3sPHnvorhBdb98BYuCdHrrefq7D7grRe+Q7SJxWXxf97goxqvwtA9XMBNXMBNXMBAOZBwY6\ndMXCWFLTYWGsEBYYyDd+qpkJqpkJqpkJqpkJBjIPDDQWw0JNvxUCAAAAGF3CAgAAAJAmLAAAAABp\nwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAA\nkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAA\nAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacIC\nAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAm\nLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAA\nacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAA\nAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwA\nAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnC\nAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQ\nJiwAAAAAacICAAAAkCYsAAAAAGnCAgAAAJAmLAAAAABpwgIAAACQJiwAAAAAacICAAAAkCYsAAAA\nAGnCAgAAAJBWP9oLOF6dnZ3xne98J8rlcnzpS186pmOWL18eu3btOmz7ypUrY/bs2SO9RAAAADhp\n1XRY+OpXvxovvPBCRERcfPHFwzr205/+dCxevHjQtsbGxhFbGwAAAJwKajosLFu2LPbv3x8PPvjg\nsI+dOHFinHHGGSdgVQAAAHDqqOmwMHXq1IiImDBhQnR1dQ3r2IceeigeeuihOP300+P9739//M7v\n/E5MmjTpRCwTAAAATlo1HRayrr/++njPe94T9fX1sW3btvj+978fr732Wtx6662jvTQAAACoKWMu\nLDzyyCOxevXqIR9vbm6Ou++++7jOcdFFF1X+fM4558TUqVPj9ttvj+3bt0dLS8uwn6++fsx9GhlF\nhUIhSqXSaC+DMcRMUM1MUM1MUM1MMJB5YKCx+PPnmFvRkiVL4rLLLhvy8bq6kb9D5vTp0yMiYu/e\nvUPu097eHuvXrx+07bzzzoslS5b4pY8cprm5ebSXwBhjJqhmJqhmJqhmJhjIPFBtzZo18dJLLw3a\ntnDhwmhtbX3X1zLmwkJDQ0M0NDScsOfv7+8/LE787Gc/i2Kx+I5XK7S2th7xC7RmzZpYsmTJiK+T\n2rVq1apYunTpaC+DMcRMUM1MUM1MUM1MMJB5oNqhn0PHys+iI//X/++i7u7u2Lt3b/T29kZvb290\ndXVFd3f3oH2uvvrquOeeeyofb9iwIe64447YsGFDbN++PZ599tm477774uMf/3hMnDhx2GuoLkSw\nY8eO0V4CY4yZoJqZoJqZoJqZYCDzQLWx9nPomLtiYTi+/vWvx4svvlj5+HOf+1ycf/75cdttt1W2\nlcvlKJfLlY9bWlqiWCzGd7/73ejo6IjTTz89Lr/88vjEJz7xrq4dAAAATgY1HRYGBoShPPzww4M+\nbmlpiZtuuulELQkAAABOKTX9VggAAABgdBX//M///M9HexG17uyzzx7tJTDGmAmqmQmqmQmqmQmq\nmQkGMg9UG0szUSgP/AUEAAAAAMPgrRAAAABAmrAAAAAApAkLAAAAQJqwAAAAAKTVj/YCRtubb74Z\n3/ve9+Lll1+O3bt3x5QpU+I3fuM34uqrr476+l9+ev7t3/4tHn744fj5z38ejY2N8dGPfjR+67d+\na9BzPfXUU7FmzZr4xS9+EWeeeWZceeWV0draOmif1atXx9q1a6OjoyNmzpwZ1113XcyfP7/yeG9v\nb3zve9+L9evXx759+2LOnDnxuc99LubOnXtiPxGMiKN9fRn7NmzYEP/0T/8Ur776auzbty/OOuus\nuPLKK+MDH/hARBzbv6NdXV1x//33x7//+79Hb29vnHfeefGFL3whzjzzzMo+u3fvjr/927+NF154\nIQqFQrz//e+P66+/PqZMmVLZ59VXX43777///7d37zFNnW8cwL8tlFKtFbCgVIbAYCIxU+KQqHNM\nYzAaM/EymY5FIJk6nXFO9hcx847G/eOmksyJik7logtiNuMNZROGt4w4LzApCqKA4KAtxULh/f3h\nzxMrqF0RBfv9JE0473l6enrOc972PD3nBaWlpVAqlYiMjER8fDzc3Nxe3QYhG/X19UhOTkZwcDCS\nkpIAMCecVUtLC3Jzc1FQUICamhooFAqkpqbC3d2dOeGEhBDIyclBXl4e6uvrMWDAAEyYMAExMTEA\n2E84CyEEbt26hXXr1uGLL76QvjsAPS8Hbty4gfT0dNy+fRtqtRpRUVGYN29eN28h5/O8nDhz5gzy\n8vJQVVUFq9WKIUOGYO7cuQgNDZVielNOOP2/m7x79y6uX7+O6dOnIyYmBm+//TYOHz4Mk8kknRA+\nToaYmBjMnz8ffn5+2LVrF3x9ffHWW28BAC5duoTU1FTMnz8fn3zyCfr27YuffvoJ7777LgYMGAAA\nOHbsGHJycrBw4ULMmjULzc3N2L17N8aPH4++ffsCAPbt24eLFy9i6dKlmDZtGqqqqpCZmYno6Gib\nQgf1PPbsX+r5fv/9d/j4+CAmJgZTpkyBxWLB7t27ERERAQ8PD7uO0e+//x41NTVYtmwZoqOjceXK\nFRw/fhzR0dGQyWQAgDVr1sDNzQ3Lli3DBx98gPz8fBQXF2P8+PEAHp20JCcnIyAgAEuWLEFERARy\nc3NRXV2NUaNGvbbt48yam5uxdu1aNDc3Q6vVYuzYsQDs67eZE2+W1tZWrF69GkajEbNnz8aMGTMQ\nGRkJb29vyGQy5oQT+uWXX3Ds2DEkJCRg5syZ0Ol02L9/P1xdXfHOO+8wJ5xAXV0dEhMTcfLkSbS0\ntGDcuHHQ6XTS/J6UAw0NDUhOTsbYsWOxYMEChIWF4cCBAxBC2JzUUte8KCdOnjyJoUOHIiYmBpMm\nTcK9e/dw8OBBTJgwAe7u7gB6WU4I6iArK0skJSVJ0zt37hQbNmywiUlLSxOrVq2Spjdu3Ch27Nhh\nE7Np0yaxbds2aXrFihUiJyfHJiYpKUlkZmYKIYRoa2sT8fHxorCwUJrf1tYmEhISRF5eXpffF3Wv\nF+1f6r2WLFkijh49atcx2tjYKGJjY8XNmzelGIPBIGJjY8XVq1eFEEKUlZWJ2NhY0dDQIMXo9Xox\nZ84cUVtbK4QQorCwUMTHxwur1SrFFBUVibi4OGGxWLrz7VInrFarWLt2rdi1a5fYtm2b2Lx5sxDC\nvn6bOfHmyczMFCkpKZ3OY044p5UrV4r09HSbttTUVLFp0ybmhJOwWq2iqqpKVFVViTlz5ogLFy5I\n83paDuTm5orly5fbrH9ubq5YvHjxS9oaJMTzc+JZ8XPnzhVFRUVCiN6XExxjoRONjY1Qq9XSdHl5\neYdbEUJDQ6HX66VpvV7/3JjW1lZUVlZ2iBk6dKgUU1NTA7PZjMDAQGm+XC5HSEiIzWtRz2PP/qXe\nqa2tDU1NTVCr1XYdo+Xl5RBC2MT069cPOp1OitHr9fD09ET//v2lmMDAQLi5udksx9/fHy4uLlJM\naGgoWlpacOfOnW59z9RRamoqVCoV4uPjbdqZE87p7NmzUKvVSE5ORmJiIpYuXYqMjAwIIZgTTiok\nJATnzp3D1atXATy67L2srAwjRoxgTjgJFxcX6HQ6m1+kH+tpOfCs85a6ujqYTKaubgr6v+flRGea\nmprQ1tYmnYfeunWrV+UEr61/SnV1NfLz8/H5559LbQaDASqVyiauX79+ePjwIVpaWuDm5gaDwYA+\nffrYxKjVajQ2NgIAjEYjAHS6nPLycul1nhXzeB71TPbsX+qdcnNzIZfLERERgcrKSgDPP0aNRiPc\n3Nwgl8s7xDzuDzrrLwDbPqOzfufxBw37g1fr8fg6nd05aE+/zZx4szx8+BD3799HSEgI5syZA09P\nT5SVlWHPnj0QQiA8PBwAc8LZfPrpp6irq8OaNWswePBgKJVKjBw5EpMnT0ZJSQkA5oQz62mfFQaD\nAb6+vh1eB+j4Ayu9OhkZGfD19cWwYcMAPNpPvSkn3tjCQlZWFrKzs58539vbG1u3brVpe/DgAVJS\nUhAZGdlh0MUnKzzP8vRO74w9y7Enhnom7rs3S0FBAQ4dOoRvvvnGptN+0X5+Wf2FPTHUvS5evIhz\n585h/fr1zx3nhjnhPMxmMwBg+vTpCAgIAAD4+/ujvr4ep06dkgoLzAnnkpeXh7q6OqSmpqKyshIn\nT57EiRMnMHz4cOleaeYE9aQc4HfWnuXIkSMoKCjA6tWrpbETgN6VE29sYeGjjz5CdHT0M+c/vXGr\nq6uRkpKCYcOGYeHChTbzNBoNmpqabNqMRiOUSqU0kmZnMSaTSRqN83HF5+lLSYxGozTvcWxTU5PN\nYH9GoxEDBw58/hum18qe/Uu9y+nTp5Geno4VK1ZIA7nac4xqNBpYLBa0t7fb9DNGo1F6fmf9BWDb\nZ2g0Gty9e7fD/CfXg7pfbW0t6urqsGjRIqmtra0NABAXF4cNGzYAYE44k8e/+jzd3w8aNAgGg0G6\nHJU54TxaW1uxZ88eJCUlwcvLC15eXhgxYgR2796NHTt2IDk5GQBzwpn1tO8PGo2m0++sT8bQq5Od\nnY1jx45h5cqV8Pf3l9p7W068sSVNpVKJ/v37P/Px5MleSUkJVq5ciTFjxmDRokU2VSLg0X0qN27c\nsGkrKSmxud+ls5jS0lIpRqFQwM/Pr0PMP//8I8UMHDgQffr0sYkRQuDmzZvSryLUM9mzf6n3OHjw\nIPbv34/k5GSMHDlSarfnGA0ICEB7e7t06SvwqPO+e/eulAtBQUGor69HXV2dFHPr1i20tLRIMYGB\ngdDr9WhtbZViSkpKpFyjV+PDDz/Ed999h82bN0uP9957D8OHD8fmzZuh0+mYE05GpVJh0KBBKC4u\ntmmvqKiATqeDj48Pc8LJWK1WWCwWWCwWm3YvLy+YTCZ+dlCPy4HAwECb1wEenbd4eXnxB7FXyGq1\nYvv27Th79izWrVvXYYyD3pYTTv/vJi9fvoyNGzdi6tSpmDhxIsxms/RwcXGBq6srPDw8kJGRATc3\nN2g0Gvz999/Izs7G7NmzMWTIEACAu7s7MjIyMGDAACiVShQVFeHXX39FQkICtFotAKC9vR2HDx+W\n/kXl8ePHUVRUhAULFkCtVkMmk8FgMOC3335DUFAQWlpakJmZiTt37mDBggVQKBSvbTvRi71o/1Lv\n8MMPP+DPP//EV199Ba1Wa9MnqNXqFx6jSqUSt2/fxh9//IGgoCAYjUbs3bsXQgjExcVBJpPB09MT\nly9fRnFxMYYMGYL6+nqkp6dj0KBBmDp1KgDAx8cHp0+fhl6vh5+fH6qqqpCeno7w8HBERka+5q3k\nPBQKBfr162fz+OuvvyCEwOTJkyGXy5kTTkipVCIzMxMqlQoqlQoXL17EoUOHEBcXB39/f+aEk1Eo\nFCgvL8fZs2eh1Wohl8tx5coVZGRkICoqCuHh4cwJJyCEQHNzM1paWpCTk4NRo0ZBq9VCJpPBxcWl\nR+WAj48PcnJy0NjYCB8fH5SVleHnn39GdHS0dH8/dd3zckIul2PVqlWoqqrCsmXLoFKppO+bFosF\nKpWq1+WETAghum1r9gLPG4th8eLFiIqKAgCcP38eBw8eRE1NDTw8PDBlyhRMmzbNJv7EiRM4cuQI\nHjx4AG9vb8yePbvDWA3Z2dk4deoUDAYDBg8ejLi4OOkya+BR5Wrv3r0oKChAc3MzAgMDkZCQ0KGC\nRT3Ti/Yv9XxLliyxqfo+KSMjw65j1Gw2Iy0tDZcuXYLVakVYWBgSExNtbmmqr6/Hzp07pRHEw8PD\nkZiYaHO5WWVlJdLS0nDz5k24ubkhMjIS8fHx0i1Y9Hps374dZrMZSUlJAOzrt5kTb578/HwcOXIE\nNTU10Gq1mDVrlvSZz5xwPg8fPkRWVhbOnz+PhoYGeHt7Y9KkSZgyZQpkMhlzwgncv38fX375ZYf2\nx+cTPS0Hrl+/jvT0dFRUVECtViMqKgpz587tcOU2Oe5FOREbG9vp854cC7A35YTTFxaIiIiIiIiI\nyHFv7BgLRERERERERNT9WFggIiIiIiIiIoexsEBEREREREREDmNhgYiIiIiIiIgcxsICERERERER\nETmMhQUiIiIiIiIichgLC0RERERERETkMBYWiIiIiIiIiMhhLCwQERERERERkcNYWCAiIiIiIiIi\nh7m+7hUgIiIi52M2m5GQkICvv/4akZGRHeafOXMGqampnT7X29sbW7du7e5VJCIiIjuxsEBERESv\nTENDA6qrq5GZmWlX/IwZM6DVam3a3N3du2PViIiIyEEsLBAREdErs2XLFly7ds3u+NGjRyMoKKgb\n14iIiIi6ioUFIiIi6rI7d+4gLS0N9+7dg8FggKurK4KDgzFr1iyEhYVJcfPmzYPRaERFRQUOHDjw\nGteYiIiIXhYWFoiIiKjLTCYT3N3dMWHCBGg0GlgsFpw/fx5r165FSkoKAgICAAAhISEA7L+dwWQy\n4d9//4VKpeItEERERD0UCwtERETUZaGhoQgNDZWm29vbMW7cOCxduhSFhYVSYeG/Wr9+vfS3TqfD\nxx9/jLFjx3Z1dYmIiOglYmGBiIiIXooLFy7g+PHj0Ov1MJlMUntjY+N/Xpafnx8+++wzeHp6wsXF\nBdXV1Th9+jS2bNkCmUyGMWPGvMxVJyIioi5gYYGIiIi6LDc3F/v27YOPjw8mTpwInU4HtVqNLVu2\noL29/T8vLzg4GMHBwTZtkyZNwvLly3H06FEWFoiIiHoQFhaIiIioS9rb23H48GEEBQVhzZo1UCgU\n0jy5XP7SXketVmPo0KG4cePGS1smERERdd3L+7QnIiIip2QwGGA2mxEREWFTVOgOZrMZffr06dbX\nICIiov+GhQUiIiLqEo1GAxcXF9TW1tq0X758Ga2trQ4ts7i4uMMtFBUVFbh+/TpGjhzp8LoSERHR\ny8dbIYiIiKhL5HI53n//feTn50OhUMDX1xelpaUoKiqCEMIm9tq1azAYDKisrAQAlJaWQggBjUaD\nsLAwKe7HH3+Eq6srIiIi4OXlhdraWuTn58PDwwMzZ858pe+PiIiIno+FBSIiIuqyxMREyOVynDt3\nDgAwbNgwrF+/HqtXr4ZMJpPisrKycO3aNWn66NGjAICwsDB8++23UvuMGTNQWFiIgoICNDY2Qq1W\nY/To0YiNjYWHh8creldERERkD5l4+qcEIiIiIiIiIiI7cYwFIiIiIiIiInIYCwtERERERERE5DAW\nFoiIiIiIiIjIYSwsEBEREREREZHDWFggIiIiIiIiIoexsEBEREREREREDmNhgYiIiIiIiIgcxsIC\nERERERERETmMhQUiIiIiIiIichgLC0RERERERETkMBYWiIiIiIiIiMhhLCwQERERERERkcNYWCAi\nIiIiIiIih/0PHlv6gX1UBJkAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.plot(x='a15', y='y', kind='scatter')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Почему бы не обучить по этим данным регрессию, предстказывающую значение $y$? Да потому что это ~~бред~~ не очень корректно!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Немного теории" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Нам надо найти уравнение прямой (гиперплоскости), которая бы могла разделить два класса ($H_2$ и $H_3$ подходят). В данном случае, уравнение прямой задаётся как: $$g(x) = w_0 + w_1x_1 + w_2x_2 = \\langle w, x \\rangle = w^\\top x$$\n", "\n", "* Если $g(x^*) > 0$, то $y^* = \\text{'черный'}$\n", "* Если $g(x^*) < 0$, то $y^* = \\text{'белый'}$\n", "* Если $g(x^*) = 0$, то мы находимся на линии\n", "* т.е. решающее правило: $y^* = sign(g(x^*))$\n", "\n", "Некоторые геометрические особенности\n", "* $\\frac{w_0}{||w||}$ - расстояние от начала координат то прямой\n", "* $\\frac{|g(x)|}{||w||}$ - степень \"уверенности\" в классификациий\n", "* Величину $M = y\\langle w, x \\rangle = y \\cdot g(x)$ называют **отступом**(margin)\n", "\n", "Если для какого-то объекта $M \\geq 0$, то его классификация выполнена успешно." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Отлично! Значит нам надо просто минимизировать ошибки классификации для всех объектов:\n", "\n", "$$L(w) = \\sum_i [y^{(i)} \\langle w, x^{(i)} \\rangle < 0] \\rightarrow \\min_w$$\n", "Проблема в том, что это будет комбинаторная оптимизация. Существуют различные аппроксимации этой функции ошибок:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Знакомьтесь - Линейная регрессия!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Перед тем как мы начнем, рассмотрим функцию $$\\sigma(z) = \\frac{1}{1 + exp{(-z)}},$$она называется **сигмойда**. Постройте данную фукнцию." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+AAAAKgCAYAAAAbCBelAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XuY3XV9L/r3by65QbgEQq6goBAQSEgGkEss2rJVepG6\nqyjgbtlVz7YeT217bLGPe3ef9uzaHraWc3p5bE/L3rifnopPYbc1KqggWGEGlEzCNUggCAnhEq6T\neyZZ3/PHhECAQGYyM7+1Zr1ezzNmZq31W+s9+vxceefz/X1XVUopAQAAAMZUR90BAAAAoB0o4AAA\nADAOFHAAAAAYBwo4AAAAjAMFHAAAAMaBAg4AAADjQAEHAACAcaCAAwAAwDhQwAEAAGAcKOAAAAAw\nDkZUwEspeeSRR/Lxj388d955534dc+211+Y3fuM3cumll+byyy/P3XffPZKXzq233jqi44Cx5/yE\n5uYchebl/ITmNlrn6LAL+DPPPJOPfvSj+fznP59Nmzbt1zE33HBDrr/++nziE5/Il770pSxatChX\nXHFFNmzYMOzAt91227CPAcaH8xOam3MUmpfzE5rbaJ2jwy7ghx9+eK688spceeWV+33MjTfemAsv\nvDA9PT2ZM2dOLrnkksyZMye33HLLcF8eAAAAWlLXcA/o7OzM3Llz9/vxg4ODWbt2bY477ri9bl+w\nYEHWrFkz3JcHAACAljTmm7Bt3LgxSTJ16tS9bp8+fXoGBgbG+uUBAACgKYzbLuidnZ2j8jwnnXTS\nqDwPMPpmzZpVdwTgDThHoXk5P6G5jVYPHfYS9OGaPn16krxmw7aNGzfuue/13Hrrra+50P2kk07K\nBz7wgdEPCYyKyy67rO4IwBtwjkLzcn5Cc/vABz6Qb3zjG1m1atVet5977rlZunTpfj/PmBfw7u7u\nzJ8/Pw888EBOOeWUPbevXr06S5Ys2edxS5cu3ecv8vzzz2fnzp2jnhU4MIcccohLS6CJOUeheY31\n+Vl27Up2bEu27/7ati3ZsS1l2+6fd+y+bff95ZU/7/l+a7JrGH8H7+hMOjuSjq6ks3Po546OpKvr\n5e87O5POrt2P2/2YzqGvas/3XS8/tuMVj+18xddLP7/i/qrzdR77ytfo6Bj6qqqhr+z+viNJ1ZFk\n9+0dr7x/930d1cv37/6qqmos/qejCXR1deXwww/PBz7wgQMeCA+7gJdSsnXr1pRSkiTbtm3Lli1b\nMmnSpHR1deUHP/hB/vqv/zp/8Ad/sGdMf/755+eaa67JW9/61sydOzd9fX1Zt25dfvu3f3tEoXfu\n3JnBwcERHQuMnVKKcxOamHMUmte+zs/SaAyV4K2bk61bh/7ctiXlFd9n6+6vbVtStu79855jdmzf\n94tXHcnUqcnUg5Ipu/+cOi3VS9/PmLn7vmnJ1KmpXnrctN23dU8aKtWdXbv/HCrNE7qQlt3/sbsT\nwf4adgF/5pln8pnPfGbPz3/xF3+RJPn0pz+d8847L6WUNBqNPQU9SS644IJs3rw5V111VQYGBjJv\n3rxcfvnlmT179ij8CgAA0FrK5k3Jk+tSnlqfPPV4Bl58LrteeC7ZtjXZsnnoz627/3wjU6buLsYv\nf1XTDk6OnPXyfdOmJVOmDRXnqS89/qCXS/ekyRO7LEMTqUppvX+22bBhg3/BhyY0Y8aMPPfcc3XH\nAPbBOQrjqwwOJhueSJ5an/Lk48lTj6c89Xjy5OPJplcsNz/8yHTPnZ/ByVNTvbJMv+L76lU/Z8q0\nZMrUVB3jtqcytK3u7u7MnDlzVJ5rzK8BBwCAiaqUkjz/7F7l+qWpdp55OimNoQdOmZrMmpdq9rzk\nHYuT2fNSzZqbHDU31ZSpOcw/kEFbUMABAOBNlK1bhkr27kn20FR7XfLU+pevr+7sTGbOHirai89O\nZs0dKtyz5iWHHGaZN6CAAwBAkpSdO5NnnnztkvGn1icvPv/yAw+dMVSujz0hOevdqWbNT2bNTY6c\nlarLX6+BffP/EAAAtI1SylCZfmp9ylPrXlG21w+V7127hh44ecpQyZ41Lznh1KEl47PnDS0Znzqt\n3l8CaFkKOAAAE07ZtjV5+hXl+smXptmPv7yzeEfH0G7hs+alOvX0vZeMHzbDknFg1CngAAC0vLLh\nyZTbbkx5aNVQ4X7h2ZfvnH7oUMk++tjk9HN3l+z5ycxZqbq66wsNtB0FHACAllQGB1NW3p7yw+8m\nq+4a+niud5yW6u0/9/KO47PmDn0uNkATUMABAGgpZf1jKT/8Xsrt3082bUze/o5U//63UvWcm2ry\n5LrjAeyTAg4AQNMr27el3Hnr0LT74QeSgw9Jdc7PpVr63lRz5tcdD2C/KOAAADSlUkry2MMp//rd\nlB/9INm+LTnptHT8h99LTnun67eBlqOAAwDQVMqWTSl3/GvKD7+TrH0kOeyIVOd/INW556c6clbd\n8QBGTAEHAKB2pZRk9f0pt343Zfltyc6dycIz0vHLH0tOXpKqs7PuiAAHTAEHAKA2ZeOLKb3fT7n1\nu8mTjyczZ6f6hY8MXd992Iy64wGMKgUcAIBxVRqNZNVdafzwO8nKHyVVUi05J9Uln0oWnJqqo6Pu\niABjQgEHAGBclOeeSem9MeXWG5Nnn07mHpPqQ5elOuvdqQ4+pO54AGNOAQcAYMyUnTuTe+5M44ff\nTe7tTyZNSnXGu1It/TfJcQtSVVXdEQHGjQIOAMCoK0+vT7n1eym9309efD556/GpPvYbQ+V76rS6\n4wHUQgEHAGBUlMEdKf19KT/8bvKTe5JpB6V657tTveu9qY4+tu54ALVTwAEAOCDl8UdTfvjdlNtv\nSTZvTE44OdXHf3toY7VJk+uOB9A0FHAAAIatbNua8uMfptz6vWTNT5Lph6Zaen6qpe9NNXte3fEA\nmpICDgDAfimlJD99KOWH30n50Q+THduSkxen41OfTxadkaqru+6IAE1NAQcA4A2VzZtS7rhl6Nru\ndT9NZhyZ6r0Xpjr3/FRHHFV3PICWoYADAPAapZTkwftSbv1uyvLepLErWXRmOv7tryUnn5aqo7Pu\niAAtRwEHAGCPsnMw5aZvpvzrd5Kn1ydHzU31gYtTnf2zqQ49vO54AC1NAQcAIMnQx4g1vvKnyf0r\nU51+bqpf/V+TE05JVVV1RwOYEBRwAABStm1N46/+OFnzQDp+8z+lesfiuiMBTDgKOABAmytbNqfx\n53+YPP5oOj77h6lOOLnuSAATkgIOANDGyqaBNP7v/yPZ8EQ6fuf/THXsCXVHApiwFHAAgDZVXnw+\njSv/IBl4IR2f+2Kqo4+tOxLAhKaAAwC0ofLchjT+7A+S7VvT8bt/kmrO/LojAUx4CjgAQJspG55M\n48v/MUnS8Xt/mmrm7JoTAbSHjroDAAAwfsoT69K44vNJV3c6fu9PlG+AcaSAAwC0ibL2kTT+6+8n\nB01Px+9+MdWMmXVHAmgrCjgAQBsojzyYxpe+kMyYmY7P/XGqQw+vOxJA23ENOADABFcevC+Nv/ij\nZN5b0vGb/znVtIPqjgTQlhRwAIAJrNy/Io2/+uPkuBPT8Zn/mGrylLojAbQtBRwAYIIqK+9I42/+\nr+Sk09LxqctTTZpcdySAtqaAAwBMQI0f/zDlqj9LTntnOj7xv6fq6q47EkDbU8ABACaYxm03pXz1\nL1K987xUl/1mqs7OuiMBEAUcAGBCadz87ZR/+OtUP/P+VJd+KlWHD70BaBYKOADABNH4zv9Mufbq\nVOdfmOqiX09VVXVHAuAVFHAAgBZXSklZ9rWUZdek+oWLUl14qfIN0IQUcACAFlZKSbn26pTv/lOq\nf/ur6bjgQ3VHAmAfFHAAgBZVGo2Ur/2/Kbd8O9VHP5mOn/uluiMB8AYUcACAFlQau1K++pcpfd9P\n9aufSce73lt3JADehAIOANBiys6dKVf9WUp/b6qP/0463nle3ZEA2A8KOABACymDO9L4myuSe/vT\n8R8uT7Xk7LojAbCfFHAAgBZRtm9L46/+OHloVTo+84VUp/TUHQmAYVDAAQBaQNm6JY0//6Nk7Zp0\nfPY/p1pwat2RABgmBRwAoMmVzRvTuPI/J08/kY7f/qNUbzux7kgAjIACDgDQxMrA82n82R8kLz6f\njs/9l1THvK3uSACMkAIOANCkynPPpHHlf0q2bk3H734x1dxj6o4EwAFQwAEAmlDZ8GQaf/afkkYj\nHb/3xVRHza07EgAHqKPuAAAA7K08uS6NK34/6ehIx+/9ifINMEEo4AAATaSse2SofE+dlo7f/ZNU\nRxxVdyQARokCDgDQJMpPV6fxX7+QHH7E0DXfh82oOxIAo8g14AAATaCsvj+NP//DZO4xQ5/zPe3g\nuiMBMMoUcACAmpX7V6bxV3+cHHtCOj7zhVRTptUdCYAxoIADANSo3PXjNP76T5MTT03Hb/x+qkmT\n644EwBhRwAEAalLuvDWNv/tysvCMdHzyd1N1d9cdCYAxpIADANSg0fv9lKv/PNUZ70r167+VqrOz\n7kgAjDEFHABgnDVuuT7l//tKqne9N9XHfiNVh/IN0A4UcACAcdT47j+n/ON/S/Vzv5TqI59IVVV1\nRwJgnCjgAADjoJSS8q2vp/zLP6S64EOpPvjvlG+ANqOAAwCMsVJKyv/8Hyk3XJfqlz+Wjl+4qO5I\nANRAAQcAGEOl0Ui55m9Tbv5Wqo98PB3nX1h3JABqooADAIyR0tiV8j/+KqX3plT/7tPp+Jn31x0J\ngBop4AAAY6Ds3Jny365MufO2VL/+W+k46z11RwKgZgo4AMAYKP/w1yn9fen4D7+XquecuuMA0AQ6\n6g4AADDRlCfWptz6vVQf/nXlG4A9FHAAgFFWvvn15LAjUv3M++qOAkATUcABAEZReWJtyo9/mOrn\nP5Squ7vuOAA0EQUcAGAUlWXXJIcfkercf1N3FACajAIOADBKyvrHUu68NdUFHzb9BuA1FHAAgFFS\nvvn13dPv8+uOAkATUsABAEaB6TcAb0YBBwAYBXum30tNvwF4fQo4AMABKo/vnn7//EWpuky/AXh9\nCjgAwAEq33rp2u+fqzsKAE1MAQcAOACm3wDsLwUcAOAADE2/jzT9BuBNKeAAACO0Z/r9Cx82/Qbg\nTSngAAAjVL55zdD0+xzTbwDenAIOADAC5fFHU5bfZvoNwH5TwAEARqB88+vJjJmm3wDsNwUcAGCY\n9ky/f970G4D9p4ADAAxTWXbN7un3z9YdBYAWooADAAyD6TcAI6WAAwAMQ1l2TXLEUabfAAybAg4A\nsJ9e3vn8ItNvAIZNAQcA2E+NZV8bmn6f/Z66owDQghRwAID9UNb9NFnea/oNwIgp4AAA+6Hxzd3X\nfp/t2m8ARkYBBwB4E3tPv7vqjgNAi1LAAQDehOk3AKNBAQcAeANl3SOm3wCMCgUcAOANNJZ93fQb\ngFGhgAMA7ENZ90jSb/oNwOhQwAEA9qGx7OvJkbNMvwEYFQo4AMDrKGtNvwEYXQo4AMDraHzzmqHp\n91nvqTsKABOEAg4A8CpD0+8+028ARpUCDgDwKo1vXpPMnG36DcCoUsABAF6hPLbG9BuAMaGAAwC8\nwp7p9zvfXXcUACYYBRwAYLfy2Jpkxe2m3wCMCQUcAGA3134DMJYUcACAvHL6/ZFUnZ11xwFgAlLA\nAQCSNJa9NP1+d91RAJigFHAAoO2Vxx5OVpp+AzC2FHAAoO01ln3d9BuAMaeAAwBtbc/0+xdNvwEY\nWwo4ANDW9lz77XO/ARhjI/qAy2uvvTY33XRTBgYGMn/+/Fx66aVZuHDhPh9fSsm//Mu/5Oabb86z\nzz6bI444Iu95z3vyy7/8yyMODgBwoIam33ek+vefNf0GYMwNu4DfcMMNuf766/PpT386c+fOzc03\n35wrrrgiV155ZWbOnPm6x/zTP/1TvvOd7+STn/xk5s6dmzVr1uTv/u7v0tXVlV/8xV884F8CAGAk\nGsuuSY6aY/oNwLgY9hL0G2+8MRdeeGF6enoyZ86cXHLJJZkzZ05uueWWfR6zcuXKLF26NKeffnrm\nzp2bpUuX5qyzzsr9999/INkBAEZsz/TbzucAjJNhFfDBwcGsXbs2xx133F63L1iwIGvWrNnncccf\nf3xuu+223HfffUmSnTt35uGHH86iRYtGEBkA4MC9PP0+r+4oALSJYS1B37hxY5Jk6tSpe90+ffr0\nPPLII/s87tJLL80zzzyTP/qjP8q8efMyefLknHbaaXnf+943gsgAAAemPPrStd+/ZfoNwLgZ0S7o\nncN8o7r55pvzzDPP5Ctf+Up+7dd+LUceeWS+973v5a677hrJywMAHJDGsq8lR801/QZgXA1rAj59\n+vQkyaZNm/a6fePGjXvue7XBwcF89atfzec+97nMmDEjM2bMyKJFi3L11Vfnb//2b/OXf/mXr3vc\nrbfemttuu22v22bNmpXLLrsshxxySEopw4kOjIPu7u7MmDGj7hjAPjhHhwyu+UleuOtHmf6//cdM\n2ccGsjDenJ/QvKqqSpJcffXVeeqpp/a679xzz83SpUv3+7mGVcC7u7szf/78PPDAAznllFP23L56\n9eosWbLkdY/ZuXNntm/fnu3bt+91+4wZM15T5F9p6dKl+/xFBgYGMjg4OJzowDiYMWNGnnvuubpj\nAPvgHB2y6+//Jjlqbjaf3JMt/vugSTg/oXl1d3dn5syZueyyyw74uYa9BP3888/PsmXLcuedd2b9\n+vW57rrrsm7dupx33tASrh/84Ae5+OKLs2rVqiRD14v39PTk6quvzh133JH169ent7c3y5Yty3ve\n854D/gUAAPZXefSh5K4fpfpFO58DMP6G/TngF1xwQTZv3pyrrroqAwMDmTdvXi6//PLMnj07SVJK\nSaPR2GuJ+G/+5m/mH//xH/P3f//3eeGFFzJz5sx88IMfzAUXXDB6vwkAwJsY2vl8bqozf6buKAC0\noaq04MXUGzZssAQdmpDlc9Dc2v0cLY8+lMZ/+Z1Uv/7b6TjbKjyaS7ufn9DMXlqCPhpGtAs6AECr\naSy7Jpk1z/QbgNoo4ADAhFd+unr3td8XufYbgNoo4ADAhLdn+n2G6TcA9VHAAYAJrfx0dXL3j02/\nAaidAg4ATGiu/QagWSjgAMCE9fL0+yOpOky/AaiXAg4ATFiNb3xt9/T7XXVHAQAFHACYmMojq5N7\n7jT9BqBpKOAAwITUWPa1ZLbpNwDNQwEHACacl6ffHzX9BqBpKOAAwISzZ/p9xtK6owDAHgo4ADCh\nlEceNP0GoCkp4ADAhNJYdk0ye77pNwBNRwEHACaMl6ffdj4HoPko4ADAhGH6DUAzU8ABgAmhrPmJ\n6TcATU0BBwAmhMaya5I5R5t+A9C0FHAAoOWVNT9J7l1u+g1AU1PAAYCWt2f6ffq5dUcBgH1SwAGA\nllYefsD0G4CWoIADAC2t8U3TbwBagwIOALSsoel3f6pf+qjpNwBNTwEHAFrWnul3zzl1RwGAN6WA\nAwAtyfQbgFajgAMALamx7Gum3wC0FAUcAGg55eEHkvtWpPqli02/AWgZCjgA0HJMvwFoRQo4ANBS\n9p5++6sMAK3DuxYA0FIa3zD9BqA1KeAAQMsoD61K7jf9BqA1eecCAFpGY9k1ydxjTL8BaEkKOADQ\nEl6afnf80kdNvwFoSd69AICW0Fj2tWTuMckS028AWpMCDgA0vfLQ/cn9K02/AWhp3sEAgKbXWHZN\nMu8tpt8AtDQFHABoaqbfAEwU3sUAgKa2Z/q9+Oy6owDAAVHAAYCmVR59eGj6/YsfMf0GoOV5JwMA\nmla589bk4Omm3wBMCAo4ANCUSikp/b2pTjsrVWdn3XEA4IAp4ABAc3r8p8nTT6Sy8zkAE4QCDgA0\npbK8L5l6UHLSwrqjAMCoUMABgKZU+ntTLTojVVd33VEAYFQo4ABA0ylPrkvWP2b5OQATigIOADSd\nsrw3mTwlOXlx3VEAYNQo4ABA0yn9valOPT3VpMl1RwGAUaOAAwBNpWx4MnlsTWL5OQATjAIOADSV\n0t+XdE9KdWpP3VEAYFQp4ABAUyn9vcnJi1NNmVp3FAAYVQo4ANA0ynPPJGt+YvdzACYkBRwAaBpl\nxe1JZ1eqRWfUHQUARp0CDgA0jdLfm5y0MNW0g+uOAgCjTgEHAJpCGXghWX2/5ecATFgKOADQFMrK\n25Mk1WnvrDkJAIwNBRwAaApleV9ywsmpph9adxQAGBMKOABQu7J5Y/KTu1P1nFt3FAAYMwo4AFC7\nsvJHSaORavFZdUcBgDGjgAMAtSv9vcnbTkx12Iy6owDAmFHAAYBala1bkvtX2P0cgAlPAQcAalXu\n/nGyc2eqJWfXHQUAxpQCDgDUqvT3JW95e6ojjqo7CgCMKQUcAKhN2b49uXd5qh7LzwGY+BRwAKA+\n9y1Pdmx3/TcAbUEBBwBqU5b3JfPekmrW3LqjAMCYU8ABgFqUwcGUe35s+g1A21DAAYB6rFqZbN2S\nqufcupMAwLhQwAGAWpTlvcnsecnco+uOAgDjQgEHAMZd2bkzZeUdqZack6qq6o4DAONCAQcAxt+D\n9yRbNrn+G4C2ooADAOOuLO9LjjgqOea4uqMAwLhRwAGAcVUau1JW9KXqsfwcgPaigAMA4+uhVcnG\nFy0/B6DtKOAAwLgq/X3JYTOSY0+oOwoAjCsFHAAYN6XRSOnvS7X47FQd/hoCQHvxzgcAjJ+frk6e\nfyZVj+XnALQfBRwAGDelvzeZfmhy/DvqjgIA404BBwDGRSll9/Lzs1J1dNYdBwDGnQIOAIyPtWuS\nDU/a/RyAtqWAAwDjoizvS6YdnCw4te4oAFALBRwAGBelvzfVojNTdXXVHQUAaqGAAwBjrqx/LHly\nnd3PAWhrCjgAMOZKf28yeWryjtPqjgIAtVHAAYAxV5b3pVp4eqruSXVHAYDaKOAAwJgqTz+RrHvE\n8nMA2p4CDgCMqdLfm0yalJzSU3cUAKiVAg4AjKnS35ecvCTV5Cl1RwGAWingAMCYKc9uSB55MNUS\ny88BQAEHAMZMWdGbdHWlWnhG3VEAoHYKOAAwZsryvuSk01JNO6juKABQOwUcABgT5cXnk4dX2f0c\nAHZTwAGAMVFW9CVVlWrRmXVHAYCmoIADAGOi9PclC05NdfAhdUcBgKaggAMAo65sGkh+co/dzwHg\nFRRwAGDUlZV3JKWkWnxW3VEAoGko4ADAqCv9fcnbT0p16OF1RwGApqGAAwCjqmzZnNy/0vJzAHgV\nBRwAGFXl7h8nu3amWnJ23VEAoKko4ADAqCr9vcmxJ6SaMbPuKADQVBRwAGDUlG1bk3v7U/VYfg4A\nr6aAAwCj597lyeAO138DwOtQwAGAUVP6+5Kjj001c3bdUQCg6SjgAMCoKIM7Uu6+0/QbAPZBAQcA\nRsd9K5LtW13/DQD7oIADAKOi9Pcmc45ONefouqMAQFNSwAGAA1Z2Dqbc9SOf/Q0Ab0ABBwAO3AP3\nJFs2u/4bAN6AAg4AHLDS35vMnJ0cfWzdUQCgaSngAMABKbt2pay8I9WSs1NVVd1xAKBpKeAAwIFZ\nfV+y8UXLzwHgTSjgAMABKf29yYwjk2NPqDsKADQ1BRwAGLHSaKT0355qseXnAPBmFHAAYOTW/CR5\n8TnLzwFgPyjgAMCIlf7e5JDDkrefWHcUAGh6XSM56Nprr81NN92UgYGBzJ8/P5deemkWLlz4hsfs\n2LEjy5YtS29vb5566ql0d3fnK1/5SqZMmTKi4ABAvUopKf19qRaflaqjs+44AND0hl3Ab7jhhlx/\n/fX59Kc/nblz5+bmm2/OFVdckSuvvDIzZ8583WMGBwfzh3/4hzn44IPzq7/6qznqqKOyadOmTJo0\n6YB/AQCgJo89nDz7tOXnALCfhl3Ab7zxxlx44YXp6elJklxyySVZsWJFbrnllnz4wx9+3WP++Z//\nOdOnT8/nP//5A0sLADSNsrw3OWh6csIpdUcBgJYwrAI+ODiYtWvX5rjjjtvr9gULFmTNmjX7PO4H\nP/hBTjzxxHzhC1/IE088kYMOOihLly7Nhz/84XR0uAwdAFrNnuXnp52ZqmtEV7QBQNsZ1jvmxo0b\nkyRTp07d6/bp06fnkUceed1jtm3blg0bNuT444/PRRddlMMPPzwPP/xwvvrVr6aUko9+9KMjjA4A\n1Gb9Y8lTj6e66NfrTgIALWNE/2Td2bn/G61s2bIlSXLhhRfmrW99a5LkmGOOybPPPpubbrpJAQeA\nFlSW9yZTpyUnnVZ3FABoGcMq4NOnT0+SbNq0aa/bN27cuOe+V3tpWv7qY2bPnp2BgYF9vtatt96a\n2267ba/bZs2alcsuuyyHHHJISinDiQ6Mg+7u7syYMaPuGMA+jOY5+txdd6Tr9HNzyKxZo/J80O68\nh0LzqqoqSXL11Vfnqaee2uu+c889N0uXLt3v5xpWAe/u7s78+fPzwAMP5JRTXt5wZfXq1VmyZMnr\nHjN16tTMnj07d911117HPPbYY5k7d+4+X2vp0qX7/EUGBgYyODg4nOjAOJgxY0aee+65umMA+zBa\n52h58vE0HluT8gsfcc7DKPEeCs2ru7s7M2fOzGWXXXbAzzXsHdDOP//8LFu2LHfeeWfWr1+f6667\nLuvWrct5552XZGjDtYsvvjirVq3ac8yFF16Yb3/72/n2t7+ddevW5fvf/36+853v5IMf/OAB/wIA\nwPgq/b3JpMnJya//j+8AwOsb9jXgF1xwQTZv3pyrrroqAwMDmTdvXi6//PLMnj07ydCuqI1GY68l\n4j/7sz+brq6ufOMb38jXvva1HHnkkfnkJz+Zc87xuaEA0GpKf19yak+qyZPrjgIALaUqLXgx9YYN\nGyxBhyZk+Rw0t9E4R8szT6Xx+59M9cnPpePMnxmlZID3UGheLy1BHw0+hBsA2G+lvy/p6k618PS6\nowBAy1HAAYD9Vvp7k5MXp5oyre4oANByFHAAYL+UF55NHn4g1ZKz644CAC1JAQcA9ktZcXvS2Zlq\n0TvrjgIALUkBBwD2S1nemyxYmOqgg+uOAgAtSQEHAN5U2fhi8uB9qXosPweAkVLAAYA3VVbcniSp\nTjur5iTdO+MmAAAgAElEQVQA0LoUcADgTZX+3uSEk1MdcljdUQCgZSngAMAbKps3JQ/cbfdzADhA\nCjgA8IbKXT9Kdu1KtVgBB4ADoYADAG+o9Pcmbzsx1eFH1B0FAFqaAg4A7FPZtiW5b4Xl5wAwChRw\nAGCfyj3Lk52Dlp8DwChQwAGAfVvemxzztlQzZ9edBABangIOALyusmN7yr3LLT8HgFGigAMAr+++\nFcn2bal6zqk7CQBMCAo4APC6yvLbkrnHpJo9v+4oADAhKOAAwGuUwcGUu3+caonpNwCMFgUcAHit\nB+5Ktm6x/BwARpECDgC8Rlnemxw1N5n3lrqjAMCEoYADAHspu3al3HVHqp6zU1VV3XEAYMJQwAGA\nvT14b7Jpo+u/AWCUKeAAwF5Kf29yxFHJW95edxQAmFAUcABgj9JopKy4PdViy88BYLQp4ADAyx5+\nIHnx+VQ9Z9edBAAmHAUcANij9Pcmh85Ijjux7igAMOEo4ABAkqSUktLfm2rxWak6/BUBAEabd1cA\nYMhPVyfPPZNqieXnADAWFHAAIElSlvcmB09PTjil7igAMCEp4ADAK5afn52qs7PuOAAwISngAECy\n7qfJhictPweAMaSAAwBDu59PPSg5cWHdUQBgwlLAAYCU5b2pFp2Zqqu77igAMGEp4ADQ5soT65In\n1qbqsfwcAMaSAg4Aba709yaTpyTvWFx3FACY0BRwAGhzpb831amnp5o0ue4oADChKeAA0MbKhieT\nx9YkS86pOwoATHgKOAC0sdLfm3RPSnVqT91RAGDCU8ABoI2V5b3JyYtTTZladxQAmPAUcABoU+W5\nZ5JHHkzVY/k5AIwHBRwA2lRZ0Zd0dqVaeEbdUQCgLSjgANCmSn9vctKiVNMOrjsKALQFBRwA2lAZ\neD5ZfX+qJWfXHQUA2oYCDgBtqKy4I6mqVKedVXcUAGgbCjgAtKHS35uccEqq6YfUHQUA2oYCDgBt\npmzemPzknlRL7H4OAONJAQeANlNW/ihpNFIttvwcAMaTAg4Abab09yZvOzHVYTPqjgIAbUUBB4A2\nUrZuSe5fYfk5ANRAAQeANlLu/nGyc6ePHwOAGijgANBGSn9v8tbjUx1xVN1RAKDtKOAA0CbKtq3J\nvcstPweAmijgANAmdqy4I9mxI1WP5ecAUAcFHADaxPbbb0nmvzXVUXPrjgIAbUkBB4A2UAYHs2N5\nr+XnAFAjBRwA2sH9K1O2blHAAaBGCjgAtIHS35vOucckc4+uOwoAtC0FHAAmuLJzZ8rKOzL5rPNS\nVVXdcQCgbSngADDR/eSeZMumTDr73XUnAYC2poADwARX+nuTI45K17En1B0FANqaAg4AE1hp7EpZ\ncXuqnnMsPweAmingADCRrV6VbHzR7ucA0AQUcACYwEp/b3LYEYnl5wBQOwUcACao0mik9PelWnJ2\nqg5v+QBQN+/GADBRPfJg8sKzlp8DQJNQwAFggir9fcn0Q5PjT6o7CgAQBRwAJqRSSkp/b6rFZ6Xq\n6Kw7DgAQBRwAJqa1a5JnnrL8HACaiAIOABNQWd6bTDs4WXBq3VEAgN0UcACYYPYsP190Zqqurrrj\nAAC7KeAAMNGsX5s8+XiqHsvPAaCZKOAAMMGU/t5k8tTkHafVHQUAeAUFHAAmmKHl52ek6p5UdxQA\n4BUUcACYQMrT65N1P7X7OQA0IQUcACaQsrwvmTQpOWVJ3VEAgFdRwAFgAin9vckpPakmT6k7CgDw\nKgo4AEwQ5dkNyU9XW34OAE1KAQeACaKs6E26ulItPKPuKADA61DAAWCCKMv7kpNOSzV1Wt1RAIDX\noYADwARQXngueXhVqh7LzwGgWSngADABlBW3J1WVatGZdUcBAPZBAQeACaD09yYLTk118CF1RwEA\n9kEBB4AWVzYOJA/em6rn3LqjAABvQAEHgBZXVt6elJJq8TvrjgIAvAEFHABaXOnvS45/R6pDDq87\nCgDwBhRwAGhhZcumZNVdqZbY/RwAmp0CDgAtrNz942TXzlSLz647CgDwJhRwAGhhZXlfcuwJqWYc\nWXcUAOBNKOAA0KLKtq3Jff2peiw/B4BWoIADQIsq9yxPBne4/hsAWoQCDgCtqr83OfrYVDNn150E\nANgPCjgAtKCyY3vKPXeafgNAC1HAAaAV3b8i2b7N9d8A0EIUcABoQWV5XzLn6FRzjq47CgCwnxRw\nAGgxZedgyl0/Mv0GgBajgANAq3ng7mTrZtd/A0CLUcABoMWU/r5k5uxk/lvrjgIADIMCDgAtpOza\nlbLi9lRLzklVVXXHAQCGQQEHgFay+r5k04DrvwGgBSngANBCSn9vMuPI5K3H1x0FABgmBRwAWkRp\nNFL6b0+1+GzLzwGgBSngANAq1jyQvPic3c8BoEUp4ADQIsryvuSQw5K3n1h3FABgBBRwAGgBpZSU\nFX2plpydqqOz7jgAwAgo4ADQCh59KHn2acvPAaCFKeAA0AJKf29y8PTkhFPqjgIAjJACDgBNrpSS\nsrwv1aJ3puq0/BwAWpUCDgDN7vFHk6fXp+qx/BwAWpkCDgBNrvT3JlOnJScuqjsKAHAAFHAAaHKl\nvy/VwjNSdXfXHQUAOAAKOAA0sfLkuuTxR+1+DgATgAIOAE2sLO9NJk1OTl5SdxQA4AAp4ADQxEp/\nX3JqT6rJk+uOAgAcoK6RHHTttdfmpptuysDAQObPn59LL700Cxcu3K9jn3322XzhC1/I29/+9nzu\nc58bycsDQFsoG55MHns41fs+WHcUAGAUDHsCfsMNN+T666/PJz7xiXzpS1/KokWLcsUVV2TDhg1v\neuzWrVvzp3/6p9m1a9eIwgJAOykr+pKu7lQLT687CgAwCoZdwG+88cZceOGF6enpyZw5c3LJJZdk\nzpw5ueWWW97wuF27duXLX/5yTj755CxevHikeQGgbZT+vuTkxammTKs7CgAwCoZVwAcHB7N27doc\nd9xxe92+YMGCrFmz5g2P/cpXvpKpU6fmsssuG3ZIAGg35flnk4cfsPs5AEwgwyrgGzduTJJMnTp1\nr9unT5+egYGBfR739a9/PU8++WQ++9nPjiAiALSfsqIv6exMtejMuqMAAKNkRLugd3Z27vdj77zz\nztx22225/PLL09U1oj3fAKDtlP6+5MSFqQ46uO4oAMAoGVYjnj59epJk06ZNe92+cePGPfe92tNP\nP51nnnkmn/rUp/bc9tImbB/72MfyxS9+Mcccc8xrjrv11ltz22237XXbrFmzctlll+WQQw5JKWU4\n0YFx0N3dnRkzZtQdA1pe48Xn8+zq+3Lw//K5TB3Fc8o5Cs3L+QnNq6qqJMnVV1+dp556aq/7zj33\n3CxdunS/n2tYBby7uzvz58/PAw88kFNOOWXP7atXr86SJUte95h3v/vdOe200/a67R/+4R+ybdu2\nfPzjH8/MmTNf97ilS5fu8xcZGBjI4ODgcKID42DGjBl57rnn6o4BLa/xrzckJdlywqnZOornlHMU\nmpfzE5pXd3d3Zs6cOSr7mQ17Cfr555+fZcuW5c4778z69etz3XXXZd26dTnvvPOSJD/4wQ9y8cUX\nZ9WqVUmSadOmZe7cuXt9TZs2LVOmTMmcOXMsSweAVynL+5ITTk41/dC6owAAo2jY7feCCy7I5s2b\nc9VVV2VgYCDz5s3L5ZdfntmzZydJSilpNBqWiAPACJTNm5Kf3J3qoo/XHQUAGGVVacGmvGHDBkvQ\noQlZPgcHrtF7U8p//3/SccV/T3X4EaP63M5RaF7OT2heLy1BHw0j2gUdABgbpb8veduJo16+AYD6\nKeAA0CTKti3JfStSLTmn7igAwBhQwAGgSZS770x2DqZacnbdUQCAMaCAA0CTKP29yVvenurIWXVH\nAQDGgAIOAE2gbN+e3LPc9BsAJjAFHACawX39yY7trv8GgAlMAQeAJlD6e5N5b0k1e17dUQCAMaKA\nA0DNyuBgyt0/tvwcACY4BRwA6rZqZbJ1i+XnADDBKeAAULPS35scNTeZ95a6owAAY0gBB4AalZ07\nU1b+KFXP2amqqu44AMAYUsABoE4P3pts3piq59y6kwAAY0wBB4Aalf7e5IijkmPeVncUAGCMKeAA\nUJPS2JWy4vZUSyw/B4B2oIADQF0eeiAZeMHu5wDQJhRwAKhJ6e9NDpuRHLeg7igAwDhQwAGgBqXR\nSOnvS7X4rFQd3o4BoB14xweAOvx0dfL8M5afA0AbUcABoAalvzc5+JDk+JPrjgIAjBMFHADGWSnl\n5eXnnZ11xwEAxokCDgDjbe0jyYYnUy05u+4kAMA4UsABYJyV/t5k2kHJiQvrjgIAjCMFHADGWenv\nS7XozFRd3XVHAQDGkQIOAOOoPLE2eWKt3c8BoA0p4AAwjsry3mTy1OTkxXVHAQDGmQIOAOOo9Pem\nWnh6qu5JdUcBAMaZAg4A46Q8/USy9hG7nwNAm1LAAWCclP7epHtSckpP3VEAgBoo4AAwTkp/X3Ly\nklRTptYdBQCogQIOAOOgPLcheeTBVD2WnwNAu1LAAWAclP6+pLMr1cIz6o4CANREAQeAcVD6e5OT\nFqWadnDdUQCAmijgADDGyovPJw+tStVzTt1RAIAaKeAAMMbKituTqkp12jvrjgIA1EgBB4AxVvp7\nkwWnpjr4kLqjAAA1UsABYAyVTQPJT+5JtcTu5wDQ7hRwABhD5a4fJaWkWqyAA0C7U8ABYAyV5b3J\n205KdejhdUcBAGqmgAPAGClbNif3r0zVY/oNACjgADBmyt0/TnbtTLXYx48BAAo4AIyZ0t+bvPX4\nVEfMrDsKANAEFHAAGANl+7bkvv5US0y/AYAhCjgAjIV7lyc7drj+GwDYQwEHgDFQlvcm849NddTc\nuqMAAE1CAQeAUVYGd6TcfafpNwCwFwUcAEbb/SuT7Vtd/w0A7EUBB4BRVpb3JrPnp5p7TN1RAIAm\nooADwCgqOwdT7rrD9BsAeA0FHABG0wP3JFs2u/4bAHgNBRwARlHp702OnJUcfVzdUQCAJqOAA8Ao\nKY1dKSuHlp9XVVV3HACgySjgADBaVt+fbHwx1RLLzwGA11LAAWCUlOW9yWFHJMeeUHcUAKAJKeAA\nMApKo5Gyoi9VzzmpOry9AgCv5W8IADAaHnkweeE5y88BgH1SwAFgFJT+3mT6ocnbT6o7CgDQpBRw\nADhApZSU5b2pFp+dqqOz7jgAQJNSwAHgQD22Jnn26VQ9lp8DAPumgAPAASrLb0umHZyccGrdUQCA\nJqaAA8ABKKWk9PelOu2dqbq66o4DADQxBRwADsT6x5KnHk+15Jy6kwAATU4BB4ADUJb3JlOmJu84\nre4oAECTU8AB4ACU/t5UC89I1d1ddxQAoMkp4AAwQuWp9cnjj1p+DgDsFwUcAEao9PcmkyYnp/TU\nHQUAaAEKOACMUFnem5zSk2ry5LqjAAAtQAEHgBEozz6dPPpQqiVn1x0FAGgRCjgAjEDp70u6ulIt\nPKPuKABAi1DAAWAESn9v8o7FqaZOqzsKANAiFHAAGKbywrPJQ6vsfg4ADIsCDgDDVFbcnnR2pjrt\nzLqjAAAtRAEHgGEqy3uTBaemOmh63VEAgBaigAPAMJSNLyYP3mf5OQAwbAo4AAxDWXlHkpJq8Tvr\njgIAtBgFHACGofT3JsefnOqQw+uOAgC0GAUcAPZT2bIpWXW35ecAwIgo4ACwn8ot1ydVUvUo4ADA\n8CngALAfyrYtKd/951RL35vqsBl1xwEAWpACDgD7oXz/W8n2raku+FDdUQCAFqWAA8Cb2DP9ftd7\nU804su44AECLUsAB4E2Um745NP1+v+k3ADByCjgAvIGydUvK9/7F9BsAOGAKOAC8gfJ9028AYHQo\n4ACwD6bfAMBoUsABYB/2TL8v+HDdUQCACUABB4DXUba+tPP5+1IdfkTdcQCACUABB4DXUb7/zWTH\nNp/7DQCMGgUcAF7F9BsAGAsKOAC8ytD0e7vpNwAwqhRwAHiFsmXz0PT7Z0y/AYDRpYADwCvsmX6/\n/1fqjgIATDAKOADsVrZsHvrcb9NvAGAMKOAAsNvL136bfgMAo08BB4C8NP3+51TnvT/VYabfAMDo\nU8ABIEn5/rJkx45U7/+3dUcBACYoBRyAtrfn2m/TbwBgDCngALS98v1lyeCg6TcAMKYUcADa2l47\nn5t+AwBjSAEHoK2Vm16aftv5HAAYWwo4AG2rbNmUcuNL0+8ZdccBACY4BRyAtlVu+qbpNwAwbhRw\nANrSnun3ee83/QYAxoUCDkBb2jP9fp+dzwGA8aGAA9B2ypZNr/jcb9NvAGB8KOAAtJ1y47Jkp+k3\nADC+FHAA2srQtd/fMP0GAMadAg5AW9kz/bbzOQAwzhRwANrGy9PvC1IdenjdcQCANqOAA9A2yo3f\n2D39du03ADD+FHAA2sLQ9HuZ6TcAUBsFHIC2UG78RrLL9BsAqI8CDsCEZ/oNADQDBRyACa98b/f0\n2+d+AwA16hrJQddee21uuummDAwMZP78+bn00kuzcOHCfT6+v78/3/rWt7Ju3bps3bo18+bNy6/8\nyq/k9NNPH3FwANgfZfOmlJvsfA4A1G/YE/Abbrgh119/fT7xiU/kS1/6UhYtWpQrrrgiGzZs2Ocx\nDz30UE466aT8zu/8Tr74xS9m4cKF+fKXv5xHH330gMIDwJsZuvZ7p2u/AYDaDbuA33jjjbnwwgvT\n09OTOXPm5JJLLsmcOXNyyy237POYiy66KB/60IeyYMGCzJ8/PxdffHGOOOKI3HvvvQeSHQDe0J7p\n97t/PtUhpt8AQL2GVcAHBwezdu3aHHfccXvdvmDBgqxZs2a/n2fXrl3ZvHlzDjrooOG8PAAMS7nx\nX4am3+/7YN1RAACGV8A3btyYJJk6depet0+fPj0DAwP7/TzLli1LR0dHzjzzzOG8PADst7J5Y8pN\ny0y/AYCmMaJd0Ds7O0f8gr29vbnuuuvy2c9+NtOmTRvx8wDAG9lz7bfpNwDQJIa1C/r06dOTJJs2\nbdrr9o3/f3t3Hl5VeeBx/PeemwUSErIQEpJYiS1FKYMFCjKSClRAsYh9WupU0RYcZx6WdurWYqvV\noa6lS/pUa5cZZ7Stgi3WirYIhK0EtFSxnbEaiw1MgUgMRr2XLGQ57/xxk8AFIgmE+97l+3mePLn3\nPfec+7s+HpJf3rOEQt3L3s/GjRv1s5/9TDfffPP7XjVdkqqqqrRt27aIscLCQs2fP1/Z2dmy1vYl\nOoAoSE1NVV5enusYgPxQUA0bn9XASz+jQcM/6DpOzGAfBWIX+ycQu4wxkqRHHnlEdXV1EcsmT56s\n8vLyXm+rTwU8NTVVpaWlqq6u1ujRo7vHd+3apXHjxr3vuitXrlRlZaVuu+02jRgx4qTvVV5e3uMH\nCQaDamtr60t0AFGQl5enhoYG1zEA+U8/JtvepsNTZqmV/ye7sY8CsYv9E4hdqampKigo0Pz58097\nW30+BH369Ol65pln9OKLL6q2tlZPPvmk9u3bpylTpkiStmzZoquuukqvvfZa9zoPPPCANmzYoBtu\nuEE5OTmqr6/v/gIAoD/ZxpBs5WqZqZ+Uyc5xHQcAAKBbn2bAJWnWrFlqbGzUww8/rGAwqJKSEi1d\nulRFRUWSJGutfN+POES8urpawWBQd91113Hbe+KJJ04jPgAAkez6pyXf59xvAAAQc4yNw5Op6+vr\nOQQdiEEcPgfXbGNI/q3Xy0y5VN7cBa7jxBz2USB2sX8CsavrEPT+cEpXQQcAIBZ1z37PZPYbAADE\nHgo4ACAhdN/3e9plnPsNAABiEgUcAJAQ7DpmvwEAQGyjgAMA4p49FJTdyOw3AACIbRRwAEDcs+tX\nd175/NOuowAAAPSIAg4AiGtHZr8/KZM12HUcAACAHlHAAQBxjft+AwCAeEEBBwDELXsoKLvhWWa/\nAQBAXKCAAwDill3/tCTL7DcAAIgLFHAAQFxi9hsAAMQbCjgAIC7Zdb+RZGVmfsp1FAAAgF6hgAMA\n4o4NBWU3/pbZbwAAEFco4ACAuGPXd81+c+43AACIHxRwAEBc6Z79/sQnZbKyXccBAADoNQo4ACCu\ndM9+z2D2GwAAxBcKOAAgbjD7DQAA4hkFHAAQN+z6pySJ2W8AABCXKOAAgLjA7DcAAIh3FHAAQFwI\nz34bmRnc9xsAAMQnCjgAIObZ0HvMfgMAgLhHAQcAxDy77jeSjMxMZr8BAED8ooADAGKaDb0nu+m3\nMhfPlhnE7DcAAIhfFHAAQEzrnv2ecYXrKAAAAKeFAg4AiFnMfgMAgERCAQcAxCy7tuvK58x+AwCA\n+EcBBwDEJGa/AQBAoqGAAwBikl37lOR5zH4DAICEQQEHAMSc7tnvT1zO7DcAAEgYFHAAQMyxa3/d\nOfs9x3UUAACAfkMBBwDEFBt8V3bT75j9BgAACYcCDgCIKXZd57nfMzn3GwAAJBYKOAAgZnTPfl98\nuUxmlus4AAAA/YoCDgCIGd2z31z5HAAAJCAKOAAgJjD7DQAAEh0FHAAQE+zap6RAgNlvAACQsCjg\nAADnbPBd2c2/ZfYbAAAkNAo4AMC58Ox3isx07vsNAAASFwUcAOCUDb7D7DcAAEgKFHAAgFNHZr85\n9xsAACQ2CjgAwJnw7PfvZC6eI5M5yHUcAACAM4oCDgBwhnO/AQBAMqGAAwCcYPYbAAAkGwo4AMAJ\n+9yvmf0GAABJhQIOAIg6+947slvWMPsNAACSCgUcABBV1lrZpx+TAqkyM5j9BgAAyYMCDgCIGmut\n7C8flt26TubTn5fJYPYbAAAkjxTXAQAAycH6HbK/+FG4fM9bKG/qLNeRAAAAoooCDgA442xHh+x/\nf192x1aZBV+Wd+HFriMBAABEHQUcAHBG2fY2+f/xHenPO2T+5RZ5E8pdRwIAAHCCAg4AOGNs62H5\nP7pfqv6zvEVfkzl/outIAAAAzlDAAQBnhG1plv/g3dLuv8r70h0yoz7qOhIAAIBTFHAAQL+zTYfk\n/+Cb0v7/k3fDMpkRo1xHAgAAcI4CDgDoVzYUlP/9O6WDdfJuulumbITrSAAAADGBAg4A6Df23Qb5\nFXdIoffkfeUemdIy15EAAABiBgUcANAv7Nv18r93u9TaKu8r98kMK3UdCQAAIKZQwAEAp82+9ab8\n794uGSPvq/fJFBS5jgQAABBzPNcBAADxzdb+Xf7yr0mpafK+ej/lGwAAoAcUcADAKbN/r5H/7a9L\ng7LkffVembwhriMBAADELAo4AOCU2JrX5X/3Nil/qLxb7pHJznUdCQAAIKZxDjgAoM/s66/If+Au\n6azh8r50h0xGputIAAAAMY8CDgDoE/vKTvk/ulf64Hnyltwmkz7AdSQAAIC4QAEHAPSa/dML8n+y\nXBo1Vt7CpTKpaa4jAQAAxA0KOACgV/w/bJH9rwqZsf8oc/1NMimpriMBAADEFQo4AOCk/Kr1sj97\nUGbSVJkv/JtMIOA6EgAAQNyhgAMA3pe/8VnZFT+VmXKpzNULZTxuoAEAAHAqKOAAgB75a56U/fWj\nMjM/JTN3gYwxriMBAADELQo4AOA41lrZ1Y/LPvuEzOzPycy5ivINAABwmijgAIAI1lrZX/2X7Pqn\nZT7zBXmXfsZ1JAAAgIRAAQcAdLO+L/v4j2W3PCdz1b/K+8Rs15EAAAASBgUcACBJsh0dso/+QPaF\nzTJf+JK88hmuIwEAACQUCjgAQLa9TfY/vyf78vMy/3yTvAumuI4EAACQcCjgAJDkbFur/B/dL732\nJ3mLbpX56CTXkQAAABISBRwAkpg93CL/h/dIb7wmb8ntMqPHuY4EAACQsCjgAJCkbFOj/Ae+Ke3d\nI+/L/y4zcrTrSAAAAAmNAg4AScgeCsr//r9L9W/Ku+mbMueMdB0JAAAg4VHAASDJ2OA78r93h/Te\nO/JuvkfmA+e4jgQAAJAUKOAAkERsw0H53/uG1NIs76v3yQw7y3UkAACApEEBB4AkYesPyP/u7ZIU\nLt9DhzlOBAAAkFwo4ACQBOyb+8Iz32lp8m66Wya/wHUkAACApOO5DgAAOLPsvt3yv/01KSNT3lfu\no3wDAAA4wgw4ACQwu3uX/O/fKQ0plHfDMpmsbNeRAAAAkhYFHAASlP3rX8L3+S45W96/3SGTMch1\nJAAAgKRGAQeABGRffVn+D++RykbK++LtMgMGuo4EAACQ9CjgAJBg7J93yP/x/dJ5H5W3cKlMWrrr\nSAAAABAFHAASiv/HKtmHvyudP1Hev9wik5LqOhIAAAA6UcABIEH42zfIPvKAzAUXycz/skwg4DoS\nAAAAjkIBB4AE4G/6nezjP5b5+EyZaxbLeNxlEgAAINZQwAEgzvlrn5Jd9d8yF18u80/XyxjjOhIA\nAABOgAIOAHHK+r7ss0/IPrNC5rIrZT41j/INAAAQwyjgABBnbMNB2e2VslWV0ttvyXzqGnmfvNJ1\nLAAAAJwEBRwA4oBtb5deeVH+79dJr+yUUlNlJpTLfPwSmQ+e6zoeAAAAeoECDgAxzL71pmzVetnt\nG6T33pHO/pDMvIUyEy+SGZjhOh4AAAD6gAIOADHGtrXK7nxetmq9VP0/0sBMmUlTZMpnyHzgg67j\nAQAA4BRRwAEgRtj9f5fdulb2hc1SY0gaMUrmuhtlxl0ok57uOh4AAABOEwUcAByyLc2yL1bJbl0n\n1bwuZQ2WmTxd5uMzZIpKXccDAABAP6KAA0CUWWulPW/IVq2T3fF76XCLNOqj8hYulc6fKJOS6joi\nAAAAzgAKOABEiW08JPuHzbJb10v7dku5Q2SmXyFTPl0mf6jreAAAADjDKOAAcAZZa6Vdf5Hduk72\npe1SR7t0/kR5n75W+shYGS/gOiIAAACihAIOAGeADb4j+/ym8Gx33X6poEjm8s/JXHixzOBc1/EA\nAADgAAUcAPqJ9TukV/8kf+t66c9/kIwXvoL5tYulER+R8TzXEQEAAOAQBRwATpNtqJetqpTdVik1\n1P111N8AAAyFSURBVEslZ8t89jqZSVNlMrNcxwMAAECMoIADwCmw7e3S//xR/tZ10l92SmnpMhMv\nkimfIZV9WMYY1xEBAAAQYyjgANAHtq5Wtmq97PYNUvDdcNm+donMhHKZARmu4wEAACCGUcAB4CRs\nW6vsS9tlq9ZLr/+vlJEpM2mazMdnyJSWuY4HAACAOEEBB4Ae2H17wrcPe2Gz1HRIGvkPMtffLDN2\nkkxauut4AAAAiDMUcAA4im1pkv1jlezWddLuv0rZOTIXXSJTPkOmsNh1PAAAAMQxCjiApGetlXb/\nNXxu947fS62t0uhx8hZ9TRozQSaFfyoBAABw+vitEkDSsB0d0tt10oH9snW1nd/3Swf2S+81SHkF\nMpd8WmbyxTJ5Ba7jAgAAIMFQwAEkFGutFHpXOlAbLtd1+2UP7JfqaqX6A1JHe/iFaWnS0GKZwhKp\n/DyZD42SRp0v4wXcfgAAAAAkLAo4gLhkDx+W3qrtLNfHFO3mxvCLjJHyh0qFxTIfGRv+XlgiFZZI\nufkynuf2QwAAACCpUMABxCzrd0hv10eU665ZbTUcPPLCQVlSYYlM8Qekcf8YvlhaYak0tEgmNc3d\nBwAAAACOQgEH4JwNBcMl++iZ7AP7pfo3pfbOQ8ZTUqXC4vAs9gVTw4W7qCT8fFC20/wAAABAb1DA\nAUSFbWuV3nozfOGzA/uOms2ulRpDR16YVxAu1ef+gzRlVng2u6hEyhvC+dkAAACIa6dUwFetWqUN\nGzYoGAyqtLRU8+bN05gxY/p9HQDxxfq+7NtvRR4y3nWOdkO9ZG34hRmZ4RnswpLwbb66SnZBsUx6\nutsPAQAAAJwhfS7gzz33nNasWaPFixeruLhYmzZt0vLly1VRUaGCghPftudU1gEQXdbvkFqapeZm\nqaUpfCGz5mbZ5sbO583hsZZmqalRtqWp+3F4vUYdbGqU2tvCGwykSEOHhWezP1YuFXUW7qISaVC2\njDFuPzAAAAAQZX0u4JWVlbriiis0fvx4SdLVV1+tl19+WZs3b9ZnP/vZflsHQO9Ya6XDLVJzU7go\ndxXilibZo8pxV7G2XY+7ynRzU/jrcHPPb2KMNGCgNDBDGpAR/j4wQyYzSxpS2P08c8hQNWVmh68y\nnj9UJsAh4wAAAECXPhXwtrY27d27V+ecc07E+MiRI1VTU9Nv6wDxzFordXSE7zfd0R5+3N7D4462\nI69tb+9+bFsPHynGXcW6uUn2qMdHxpsl6/ccKH1ARGnuKtEmN08amBm5bECGzDGvU0aGlDagV7fs\nGpiXp+aGhn78rwkAAAAkjj4V8FAofKGkgQMHRoxnZWVp9+7d/bYO3LFd5+haK8lKtvNx13Pfhsue\nPer7sWO+jVze2zHfP/Je7zt2fAbbU4buEnyyInykANvuUtwRPpz6BAX5ROtFjPeH1LTOWefMzjIc\nfmwKio4qzp3LBwyUyTh2LLwOs9AAAABAbDili7AFTuEX+lNZpyfmqZ/LO7D/yAWdutkTPuxh4KhF\nfVjWl9f2uNweFaerXEa8MPJ1J1zv2PezJ35dd6E+ettHj9mT5453XooU8KRA4MhjL9D5vPN7ICCl\npYXPWz5qufE6X5PS+f3Yx4GA5HlSSkrkWOe2TcALb9MLdG435cj7el7ntk6QLyVNJiX+blJgjFFq\naqrrGAB6wD4KxC72TyB2pfTj7+V92lJWVpYk6dChQxHjoVCoe1l/rCNJVVVV2rZtW8TYeeedpzlz\n5mjIv97Ul9gAoogLKwKxjX0UiF3sn0BsW716tV577bWIscmTJ6u8vLzX2+hTAU9NTVVpaamqq6s1\nevTo7vFdu3Zp3Lhx/baOJJWXl5/wg6xevVpz5szpS2wAUfLII49o/vz5rmMA6AH7KBC72D+B2NbV\nQ0+3i578qkrHmD59up555hm9+OKLqq2t1ZNPPql9+/ZpypQpkqQtW7boqquuivjLwMnW6Ytj/+IA\nIHbU1dW5jgDgfbCPArGL/ROIbf3VQ/t8MPusWbPU2Niohx9+WMFgUCUlJVq6dKmKiookhS/i5fv+\nkYt59WIdAAAAAAAS3SmdTT537lzNnTv3hMumTp2qqVOn9mkdAAAAAAASXZ8PQQcAAAAAAH0XdwV8\n8uTJriMA6AH7JxDb2EeB2MX+CcS2/tpHjbWJfhNoAAAAAADci7sZcAAAAAAA4hEFHAAAAACAKKCA\nAwAAAAAQBRRwAAAAAACi4JTuA+5KKBTST3/6U1lrdcsttxy3fMeOHXriiSd04MAB5ebm6tJLL9Xs\n2bMdJAWwZMkSHTx48Ljx5cuX6+yzz3aQCEheq1at0oYNGxQMBlVaWqp58+ZpzJgxrmMBSe/VV1/V\nsmXLjhsfPny4vvWtbzlIBMBaqz179ujuu+/WokWL9LGPfax7WXt7u37xi19o27Ztam5uVllZmRYs\nWKBzzjmn19uPmwJ+11136ZVXXpEkTZgw4bjle/bsUUVFha699lqNHTtWNTU1euihh5SXl6cLL7ww\n2nEBSJo7d66mTZsWMZabm+soDZCcnnvuOa1Zs0aLFy9WcXGxNm3apOXLl6uiokIFBQWu4wGQ9J3v\nfEcDBw7sfp6SEje/ogMJ5eDBg1qyZEmPyx9//HG99NJLuvHGGzV48GA9/fTTuvfee/Xggw9qwIAB\nvXqPuDkEffHixaqoqDhh+ZakjRs3asyYMbrssss0bNgwTZ48WdOnT9f69eujnBRAl8zMTA0ZMiTi\nKxAIuI4FJJXKykpdccUVGj9+vIYNG6arr75aw4YN0+bNm11HA9ApPz8/4mdlTk6O60hAUsrNzVVF\nRYUqKiqOW+b7vjZt2qR58+Zp1KhRKikp0cKFC+X7vl544YVev0fc/HktPz9fkpSRkaGmpqbjlu/e\nvVujR4+OGDv33HP5BQNwaMWKFVqxYoVycnI0duxYXXnllRo0aJDrWEDSaGtr0969e487NG7kyJGq\nqalxlArAsRYtWqRAIKDCwkLNnDnzuKPHAERHIBBQcXHxCZfV1dWpqalJZWVl3WOe52nEiBGqqanR\n1KlTe/UecVPATyYYDEYcuiNJWVlZamlpUWtrq9LS0hwlA5LTddddp8GDByslJUV79+7VL3/5S+3f\nv1/f+MY3XEcDkkYoFJKkE/583L17t4tIAI4ybNgw3XrrrcrLy9Phw4e1c+dO/eQnP1EgENBFF13k\nOh6AowSDQUkn/pnataw3nBbwX/3qV1q1alWPywsKCvTggw/2ensc2gqcWX3ZZ8ePH989Pnz4cOXn\n52vZsmWqra3t8S+LAM4Mfj4CsSk3Nzfi2igf/vCH1dDQoHXr1lHAgRh1uj9TnRbwOXPmaObMmT0u\n97zen6KenZ2txsbGiLFQKKT09HRmv4F+cjr7bFFRkSQdt58COHOysrIkSYcOHYoYD4VC3csAxJai\noiLt2rXLdQwAx8jOzpYU/l02MzOzezwUCqmwsLDX23FawNPT05Went4v2yorK1N1dXXE2Ouvvx5x\njD6A09Pbfdb3/ePK+BtvvPG+59UA6H+pqakqLS1VdXV1xHVSdu3apXHjxjlMBkA68c/Lv/3tbzrr\nrLMcJQLQk8LCQmVkZKi6ulpDhw6VFL5l2RtvvKELLrig19uJm3PAW1pa1NHRofb2drW3t6upqUme\n53Vf7n3atGn6+te/rtWrV2vChAnas2ePNm3apOuvv95xciD57Ny5U5WVlZo5c6aKioq0Z88ePfro\no7rssssi/mII4MybPn26Vq5cqeHDh6u4uFjPP/+89u3bpxtvvNF1NCDpPfTQQ8rPz9fEiROVmpqq\nqqoq7dy5U/fff7/raEBSstaqublZ1lpJ4Q7a1NSktLQ0paSkaNq0aVqxYoWGDBmiwYMHa82aNZKk\nSZMm9fo9jO3aeoxbtmyZXn311YixUaNG6c477+x+vmPHDq1cuVJ1dXXKycnRrFmzNHv27GhHBZJe\nbW2tHnvsMdXU1CgYDConJ0eXXHKJLr/8chljXMcDks6qVau0YcMGBYNBlZSU6JprrtGYMWNcxwKS\n3pYtW7R27VodOHBAra2tKisr0+c//3mNGDHCdTQgKdXX1+uLX/ziceOLFy/WlClT1N7erp///Ofa\nvn27mpubVVZWpgULFhx3t5H3EzcFHAAAAACAeNb7q5wBAAAAAIBTRgEHAAAAACAKKOAAAAAAAEQB\nBRwAAAAAgCiggAMAAAAAEAUUcAAAAAAAooACDgAAAABAFFDAAQAAAACIAgo4AAAAAABRQAEHAAAA\nACAKKOAAAAAAAEQBBRwAAAAAgCj4f+WlWUtyFBSfAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Your code here\n", "def sigmoid(z):\n", " return 1./(1+np.exp(-z))\n", "\n", "z = np.arange(-10, 10)\n", "s = sigmoid(z)\n", "\n", "plt.plot(z, s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Можно несколькими способами представить линейную регрессию. Один из самых простых - вот какой.\n", "\n", "Рассмотрим принадлежность к классу $y=\\pm1$ некого объекта $x$: $p(y=\\pm1 | x,w)$ и выразим её через **сигмойду** от **отступа**:\n", "$$p(y=\\pm1|x,w) = \\sigma(y \\langle w, x \\rangle) $$\n", "\n", "А ошибка, которую мы будем минимизировать - логарифмическая:\n", "\n", "$$L(w) = -\\sum_i \\log(\\sigma(y^{(i)} \\langle w, x^{(i)} \\rangle)) \\rightarrow \\min_w$$\n", "\n", "**История с регуляризацией, мультиколлинеарностью и шкалированием признаков здесь полностью повторяется!**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Пример" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Сгенерируем выборку и опробуем логистическую регрессию" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.seed(0)\n", "X = np.r_[np.random.randn(20, 2) + [2, 2],\n", " np.random.randn(20, 2) + [-2, -2]]\n", "y = [-1] * 20 + [1] * 20" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "fig, ax = plt.subplots(figsize=(7, 7))\n", "ax.scatter(X[:, 0],\n", " X[:, 1],\n", " c=y,\n", " cmap=plt.cm.Paired)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Обучите логистическую регрессию на этих данных и нарисуйте разделяющую гиперплоскость" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your Code Here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Как сделать нелинейную границу?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Рассмотрим набор данных, который в простонародье называют \"Бублик\"." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.datasets import make_circles" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X, y = make_circles(n_samples=100, shuffle=True, noise = 0.1, factor=0.1)\n", "X = X\n", "\n", "plt.scatter(X[:, 0],\n", " X[:, 1],\n", " c=y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Очевидно, что классы нельзя разделить линией. Но можно сделать это окружностью!
\n", "Т.е. разделяющся линия теперь будет задаваться не уравнением прямой $g(x) = w_0 + w_1x_1 + w_2x_2$, а уравнением окружности $c(x) = (x_1 - a)^2 + (x_2 - b)^2 - R^2$. \n", "\n", "Выполните преобразование матрицы X, чтобы в ней были столбцы для $x_1$, $x^2_1$, $x_2$, $x^2_2$ и обучите логистическую регрессию" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Задача на \"реальных\" данных" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Предобработка данных" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вновь [данные](https://www.dropbox.com/s/jeijgsga8w55c8w/crx.data?dl=0) по кредитованию.\n", "\n", "Столбец с классом называется `y`.
Значение $1$ соответствует классу клиентов банка, которым выдали кредит и они его успешно вернули.
Значение $-1$ соответствует клиентам, невыполнившим свои кредитные обязанности. \n", "\n", "В банке хотят уметь определять по признакам `a1-a15`, сможет ли новый клиент вернуть кредит или нет? То есть нам надо обучить классификатор! *Обычно, в банках используют скор-карты, но процесс их построения тесно связан с логистической регрессией*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Загрузите данные и преобразуйте признаки `a1`, `a9`, `a10` и `a12` из строковых в числовые. В них только 2 возможных значения. Для этого можно использовать функцию DataFrame.replace() в `pandas` или самое обычное присваивание на соответствующих строках." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В признаках `a6`, `a7` присутствуют \"редкие\" значение. Найдите их с помощью фунцкии `.value_counts()` и объедините, присвоив им одно и то же значение, например `'Other'`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выделите бинарные признаки `a1`, `a9`, `a10` и `a12` в матрицу `X_binary`\n", "\n", "Преобразуйте категориальные признаки `a5`, `a6`, `a7`, `a13` с помощью `DictVectorizer`. Вы должны получить матрицу `X_cat`.\n", "\n", "Нормализуйте количественные признаки `a2`, `a3`, `a8`, `a11`, `a14` и `a15` с помощью `StandartScaler` или вручную. Вы должны получить матрицу `X_real`.\n", "\n", "Матрица `X_cat` будет sparse-матрицой (разреженной). Преобразуте её в полную матрицу с помощью команд `X_cat = X_cat.toarray()` или `X_cat = X_cat.todence()`\n", "\n", "Используйте функцию np.concatinate(..) или np.c[..] чтобы сцепить матрицы `X_binary`, `X_cat` и `X_real`\n", "\n", "В результате вы должны получить матрицу с преобразованными призанками `X` и вектор ответов `y`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Исследование влияния регуляризации\n", "\n", "В случае с логистичесткой регресии, сложность модели выражается в значениях весов $w_j$ при признаках. Больший вес означает большее влияние признака на результат. В таком случае, давайте добавил штрафное слагаемое в функцию оптимизации для логистической регресии. Самый распространенные из них это:\n", "\n", "* Ridge regression\n", "$$L(w) = - \\left(\\sum_i \\log(\\sigma(y^{(i)} \\langle w, x^{(i)} \\rangle)) + \\frac{1}{C}\\sum_j w_j^2\\right) \\rightarrow \\min_w$$\n", "\n", "* Lasso regression\n", "$$L(w) = -\\left(\\sum_i \\log(\\sigma(y^{(i)} \\langle w, x^{(i)} \\rangle) + \\frac{1}{C}\\sum_j |w_j|\\right) \\rightarrow \\min_w$$\n", "\n", "$C$ - называется гиперпараметром регуляризации и он задается вручную. Выбирается он с помощью кросс-валидации. Чем больше $С$ - тем меньше влияние регуляризации.\n", "\n", "\n", "Разделите ваши даннные на обучающую и контрольную выборку в пропорции 70/30 соответственно.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lasso regression называется так, потому что она осуществляет \"отлов\" признаков - т.е. незначимые признаки будут иметь нулевые веса в модели, в то время как в Ridge regression - веса будут постепенно падать у всех признаков.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Давайте сравним работу регуляризаторов. \n", "\n", "1. Разбейте данные на обучающую и валидационную выборки в пропорции 70\\30.\n", "1. Для $C$ из набора np.logspace(-3, 3, 10) обучите LogisctigRegression c Lasso регуляризацией (`penalty='l1'`). На каждой итерации оцените качество (ROC-AUC) на контрольной выборке и запомните полученные коэффициенты модели\n", "1. На одном графике выведите значение качества в зависимости от параметра `C` \n", "1. На другом графике для каждого признака выведите значение коэффициента в модели в зависимости от параметра `C`\n", "1. Проделайте тоже самое для Ridge регуляризации (`penalty='l2'`)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": true }, "toc_position": { "height": "698px", "left": "0px", "right": "1219.33px", "top": "107px", "width": "210px" } }, "nbformat": 4, "nbformat_minor": 2 }