{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# CSE474/574 - Introduction to Machine Learning\n", "\n", " - Python Demonstrations\n", " - Instructor - Varun Chandola\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/chandola/anaconda3/lib/python3.6/site-packages/sklearn/externals/six.py:31: DeprecationWarning: The module is deprecated in version 0.21 and will be removed in version 0.23 since we've dropped support for Python 2.7. Please rely on the official version of six (https://pypi.org/project/six/).\n", " \"(https://pypi.org/project/six/).\", DeprecationWarning)\n" ] } ], "source": [ "import numpy as np\n", "from scipy.io import loadmat\n", "import random\n", "import math\n", "\n", "\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn import linear_model as lm\n", "\n", "from sklearn.preprocessing import scale\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.model_selection import cross_validate\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.datasets import make_circles, load_boston, load_iris, load_digits\n", "\n", "import warnings\n", "warnings.simplefilter(action = \"ignore\", category = FutureWarning) \n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "import matplotlib.pyplot as plt\n", "from matplotlib.colors import ListedColormap\n", "sns.set(color_codes=True)\n", "sns.set_style('whitegrid')\n", "sns.set_context('paper',font_scale=2)\n", "from mpl_toolkits import mplot3d\n", "%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .02 # step size in the mesh\n", "\n", "\n", "ds = make_circles(noise=0.3, factor=0.6, random_state=1)\n", "\n", "# preprocess dataset, split into training and test part\n", "X, y = ds\n", "X = StandardScaler().fit_transform(X)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4)\n", "\n", "x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5\n", "y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", " np.arange(y_min, y_max, h))\n", "\n", "# just plot the dataset first\n", "cm = plt.cm.RdBu\n", "cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", "# Plot the training points\n", "plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], c='r',marker='^',s=48)\n", "plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], c='b',marker='o',s=48)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = .02 # step size in the mesh\n", "\n", "\n", "ds = make_circles(noise=0.3, factor=0.6, random_state=1)\n", "\n", "# preprocess dataset, split into training and test part\n", "X, y = ds\n", "X = StandardScaler().fit_transform(X)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4)\n", "\n", "x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5\n", "y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", " np.arange(y_min, y_max, h))\n", "\n", "# just plot the dataset first\n", "cm = plt.cm.RdBu\n", "cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", "# Plot the training points\n", "plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], c='r',marker='^',s=48)\n", "plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], c='b',marker='o',s=48)\n", "\n", "\n", "clf = LogisticRegression(C=1e5)\n", "clf.fit(X_train, y_train)\n", "score = clf.score(X_test, y_test)\n", "\n", "# Plot the decision boundary. For that, we will assign a color to each\n", "# point in the mesh [x_min, m_max]x[y_min, y_max].\n", "Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n", "\n", "# Put the result into a color plot\n", "Z = Z.reshape(xx.shape)\n", "plt.contourf(xx, yy, Z, cmap=cm, alpha=.8)\n", "\n", "# Plot also the training points\n", "plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], c='r',marker='^',s=48)\n", "plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], c='b',marker='o',s=48) \n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Non-linear logistic regression via polynomial expansion" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# non-linear (polynomial) expansion\n", "p = 5\n", "pf = PolynomialFeatures(degree=p,include_bias=False)\n", "\n", "pf = pf.fit(X_train)\n", "X_train_p = pf.transform(X_train)\n", "\n", "X_test = np.c_[xx.ravel(), yy.ravel()]\n", "pf = pf.fit(X_test)\n", "X_test_p = pf.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "clf = LogisticRegression()\n", "clf.fit(X_train_p, y_train)\n", "mZ = clf.predict(X_test_p)\n", "mZ = mZ.reshape(xx.shape)\n", "plt.contourf(xx, yy, mZ, cmap=cm, alpha=.8)\n", "\n", "# Plot also the training points\n", "plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], c='r',marker='^',s=48)\n", "plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], c='b',marker='o',s=48) \n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sigma = np.array([[0.2,0],[0,0.2]])\n", "n = 8\n", "mu1 = np.array([1,1])\n", "mu2 = np.array([1,5])\n", "mu3 = np.array([5,1])\n", "mu4 = np.array([5,5])\n", "x11 = np.random.multivariate_normal(mu1,sigma,n)\n", "x15 = np.random.multivariate_normal(mu2,sigma,n)\n", "x51 = np.random.multivariate_normal(mu3,sigma,n)\n", "x55 = np.random.multivariate_normal(mu4,sigma,n)\n", "\n", "X = np.vstack([x11,x15,x51,x55])\n", "y = np.ones([4*n,1])\n", "y[n:3*n] = 2\n", "plt.scatter(X[np.where(y == 1)[0],0],X[np.where(y == 1)[0],1],c='r',marker='+')\n", "plt.scatter(X[np.where(y == 2)[0],0],X[np.where(y == 2)[0],1],c='b',marker='o')\n" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEgCAYAAADVKCZpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3de3Bc5Znn8a8ubkmWMZYlW6KFjWXJfvEFE8eGYJuAbZyYDAkhITcym5pJpYIzmU3tblXYzWZhw4aQqakKU1OzNWQhS23VDJNhMsMOgSHgjcEGxg4QCQ++8mIJ2RZuJFmyfJWsFpL2j1abltwt9f2ct/X7VKUUutWth1Oif3rOed/nFI2OjiIiIuKaYq8LEBERSYcCTEREnKQAExERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJykABMREScpwERExEkKMBERcZICTEREnKQAExERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJykABMREScpwERExEkKMBERcZICTEREnKQAExERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJxU6nUBudLS0jLqdQ0iIi5as2ZNkdc1JKNgAwxg9bImr0vwvfb2dhoaGrwuwwk6VsnRcUqeH4/V3sOtXpeQNJ1CFBERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJykABMREScpwERExEkKMBERcZICTEREnKQAExERJynARETESQowERFxkgJMRESc5OsbWhpjlgMPAxuBEmAf8CNr7Ute1iUiIt7zbQdmjDHAHuAa4F7gG8Aw8IIx5iYvaxMREe/5uQN7BOgDbrHWngcwxuwA3gY+C7zuYW0iIuIxXwaYMWYOcDtwfzS8AKy1F4AmzwoTERHf8GWAAdcTuebVboz5K+CrwFygBbjPWvual8WJiIj3/HoNrHbs618Q6bi+CXyZSL0vGWPWeVWYiIj4g187sMDY1y7gc9baYQBjzC7gCPBj4FNTvUl7e3uu6isY4XBYxylJOlbJ0XFKno5VZvwaYGfHvv5LNLwArLWnjTG7gVuTeZOGhoZc1FZQ2tvbdZySpGOVHB2n5PnxWO093Op1CUnz6ylEO/a1PM5zZUB/HmsREREf8mWAWWst8C7wZWNMRfRxY0wtsAHY6VVtIiLiD349hQjwH4DngB3GmJ8RuS72wNhzD3pVlIiI+IMvOzAAa+2LwCZgAPhb4HHgKLDOWuvOSVoREckJP3dgWGv/FdjidR0iIuI/vu3AREREJqMAExERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJykABMREScpwERExEkKMBERcZICTEREnKQAExERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJykABMREScpwERExEkKMBERcZICTEREnKQAExERJynARETESQowERFxkgJMREScpAATEREnKcBERMRJCjAREXGSAkxERJykABMREScpwERExElOBJgx5jvGmFFjzEavaxEREX/wfYAZY64FHvG6DhER8RdfB5gxJgD8EujxuhYREfEXXwcY8FNgFvBjrwsRERF/KfW6gESMMVuA7wGfBBZ7XI6IiPiMLzswY0w18DfAw9baN72uR0RE/MevHdgTwFHg4UzepL29PSvFFLJwOKzjlCQdq+ToOCVPxyozvgswY8w2YAuwBigyxpTyUadYYowptdZ+mMx7NTQ05KjKwtHe3q7jlCQdq+ToOCXPj8dq7+FWr0tImu8CDLgHqATeifPcjrGvRfkrR0RE/MiPAbYNuGLCY58mcjrxO0BL3isSERHf8V2AWWvtxMeMMU0xTzfnuSQREfEhX65CFBERmYrvOrB4rLVPAU95XYeIiPiHOjAREXGSAkxERJzkxCnEdF14dcel/x+orWaGWe1hNeKSIbuXcFfvuMcCp05zoaPNo4rSU3HddRRX1XpdhkhOFHSAvbKrE4DKwT4WNVVR09Wr/6BlUiN9XQzs309o71GOnCkf99zpvj7mVF30qLLUzaObxT3nmb3iGv3xJgWpoANs4dc2AhBqPcHB5iPM69jH4p7zlNfMyvi91dH5S7yOKR0Xe85zoKWD0wsbafzMqnHPDbe3s9BnUxMm07ZzH/0tbSw6c15/vElBKugAiwo21UNTPaHWE7zRfAQ4n9H7qaPzj8k6pnSVbriRxqb6rLyXlxo3rSLUWj3ujzd1Y1JIpkWARUWDLFMTO7rZK67JQnXpKZkf9DRAR/q6GO4Oefbzzx48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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Use logistic regression with basis function expansion\n", "p = 6\n", "mX = np.zeros((X.shape[0],p))\n", "for i in range(p):\n", " mX[:,i] = np.sum(X**(i+1),axis=1)\n", "\n", "# Learn logistic regression\n", "lr = lm.LogisticRegression()\n", "w = lr.fit(mX,y.ravel())\n", "\n", "# evaluate on a grid\n", "x1 = np.linspace(-2,7,100)\n", "x2 = np.linspace(-2,7,100)\n", "xx1,xx2 = np.meshgrid(x1,x2)\n", "Xstar = np.zeros((x1.shape[0]*x2.shape[0],2))\n", "Xstar[:,0] = xx1.ravel()\n", "Xstar[:,1] = xx2.ravel()\n", "mXstar = np.zeros((Xstar.shape[0],p))\n", "for i in range(p):\n", " mXstar[:,i] = np.sum(Xstar**(i+1),axis=1)\n", "ystar = lr.predict(mXstar)\n", "\n", "# visualize the result\n", "plt.contourf(x1,x2,ystar.reshape((x1.shape[0],x2.shape[0])),alpha=0.2)\n", "plt.scatter(X[np.where(y == 1)[0],0],X[np.where(y == 1)[0],1],c='r',marker='+')\n", "plt.scatter(X[np.where(y == 2)[0],0],X[np.where(y == 2)[0],1],c='b',marker='o')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dealing with radial data" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEgCAYAAADVKCZpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXxU5dn/8c9k38MqiyCgwlHRggooSpVHsKK11q11edq6/2xdadVq1ba2arWttVqt2kdxwX0DXAD3fUHrAojgURFQVtmTQCDb/P64MmaSzEwmyWTmnJnv+/WaF2HWm5DMd+77XOe6A8FgEBEREb/JSvUAREREOkIBJiIivqQAExERX1KAiYiILynARETElxRgIiLiSwowERHxJQWYiIj4kgJMRER8SQEmIiK+pAATERFfUoCJiIgvKcBERMSXFGAiIuJLCjAREfElBZiIiPiSAkxERHxJASYiIr6kABMREV9SgImIiC8pwERExJcUYCIi4ksKMBER8SUFmIiI+JICTEREfEkBJiIivqQAExERX1KAiYiIL+WkegDROI5zLHAxsAewHfgI+L3ruh+kdGAiIuIJnpyBOY5zKvAksBT4OXA+0BN4x3GccakbmYiIeEUgGAymegytOI7zDeC6rjsx7LoyYAnwruu6R6ZscCIi4gmem4E5jlMCPA3cFn6967oVwNfAgFSMS0REvMWTM7BIHMcZBnwKPOi67qkpHo6IiKSY52ZgkTQuHz4E1ADXpXg4IiLiAZ6tQgxxHGdH4BlgT+B413XdeB734Ycf+mNqKSLiMfvuu28g1WOIh6cDzHGcA7BqxGLgKNd1n2vP4/fN7pJhZaQlS5YwZMiQVA8jLeh7mVj6fibWh/WpHkH8PLuE6DjOScAr2LLhuPaGl4iIpDdPBpjjOMcBDwDzgNGu685P8ZBERMRjPLeE6DhOD2AKsAW4GhjWWIEYstV13Y9SMjgREfEMzwUYMAkob/z6mQi3u8BuyRuOiIh4kecCzHXdh7CSeRERkag8eQxMRESkLQowERHxJQWYiIj4kgJMRER8SQEmIiK+pAATERFfUoCJiIgvKcBERMSXFGAiIuJLCjAREfElBZiIiPiSAkxERHxJASYiIr6kABMREV9SgImIiC8pwERExJcUYCIi4ksKMBER8SUFmIiI+JICTEREYNkieO+uVI+iXXJSPQAREUmxubOgdh4M3ZjqkbSLAkxEJFMtWwSr34b+a6E/0H88rEz1oOKnABMRyUShWdcooP8I6H2EXa8AExERTwqfdTm9od+BULh7qkfVIQowEZFMEW3W5VMKMBGRdLRsUfO/p8msK5wCTEQknYSWCHuHXZe7Nm1mXeEUYCIi6aLlEuF3+kPJkLSYdYVTgImI+F0aFWa0hwJMRMSvQsFV/DmM6p52S4RtUYCJiPhRePeMAcMyZtYVTgEmIuIn4bOuvbpb94wMmnWFU4CJSGu1NfDe+1BVBSO+B/36p3pEmWnZIti4pPl1GT7rCqcAE5Hm3nwDrrkGtm2Hmu1QXGIhdv1fITc31aPLHKElwr5Aj7Ca+AIyetYVTgEmIk2++Qau+hNs3tx03aZN8O4c+Ntf4YorUze2TNFqiXCElcCHy+BZVzgFmIg0ue8+qNjc+vqaGnjtNbjoYigoSPqwMoYKM9pFASYiTT53IRjltkAA1q2DAQOSOqSMoMKMDlGAiXRUZaW9qZeUpHokiTNwICxcFPm2hiB075bc8WQCzbo6TAEm0l5z58JfroWNjbvX9ugJV14Je+2V2nElwimnwJw5sLmi+fXZ2TBypBV0SGJo1tVpCjCR9li0CC76TfM3+I2bYPJk+M9/YNddUzc2gAUL4MEHYO06GDUKTjgBuneP//HDHDj7bPjP/1kJfX09lJVaGf2fruqyYae9UFiFy1qrWVcnKcBE2uOfN7aenYBV7Z1/HowbBz8+GoYPt+XFZLr1Vpj2JFRU2t8/+QSmT4Nb/w1Dh8b/PD89ASZOhNmz7d+1//6w9z7J//eki5ZLhKWhc+rSs8FuMvkiwBzHyQFeBz5xXfeXqR6PZLClS6PftnYdTJ8Br7wCY8bAX/4CgazkjOuLLyysQuEFNntavwEu/S08Oa19AdSjJ/zvzxI/zkyiJcIul6Tfro5zHKcYeBw4INVjEYkrkDZXwNvvwLMzu348IY89GnlmCBZqsYJXEm/uLPh2Bgz9HMYMg2FHK7y6gKdnYI7jHAHcCPRK9VhEABh/sM2yGhpi32/rVnjwQfjRj5Izrg0bo98WbLBzu+rr7FyuV1+zysljj7FjXpI4rbY1OVpLhF3IswHmOE434FngCeDXwPLUjkgEOO88eP99WLMGampj37cyyoyoKxx4gFUPbt/e+rZAFuzQB048Eb5dC1u22PUvvgATD4XLLtPxrURouZmkZlxdzrMBBmwFhruuuwjAcfRJUTooGIT/vg9PPAHV1TBhIhxxOOTlt/+5SstsZvXEEzBrti3N1dVFvu/OO3dq2O1yxA/h7ntg9erm1xcVwmGHWfHJsq+bzxw3V8Dzz8NB34cDxyVvrOlg7qzmf9++MuM2k/QCzwaY67o1QJQzKkXiFGyAiy+Bjz6Eyiq77uO5cN+9cM+90K0DJ+YWFcMvTrHLM0/DP260kvNw5WVwzjmdHX38Cgpgyl02m1oetlhx5JFw9i/tz0jLnlVVMHWqAixe4UuEzRrsrtWsKwU8G2CJsGTJkrbvJHHZXrPdl9/P4jffoOf775Fdva3pym3bCK5YwZYrrmDtxRd37gX23Iuyo35E+cyZUFcPgQDB3BzWn3461QWFEOF71qXfyz/8kaxNG8mqrKSuTx/IyyfL/Ywdgw1Rf9lrVq9mhQ//b0OS9bNZ/OXr5Gd/BiNhe6/dqM0Pb6k1mJqqXaDKv9/HJkPavotHpHWADRnin/8Ir1uyZIk/v5+//z2Eh1ejQEOQEtelZOBAyOnkr8FvLoJzzoVPF9h2I8OH0zc7+nN2/feyxXM31ENuXtR7540c6c//20Zd/v0Mzbp2WwvOrmm/RLhhXqpHEL+0DjCRmIUUAWy/q84GGNgS3r6jOv88XSErG046EabcbdWR4bp1gzPOSM24/ECFGZ6mABN/2FJlhROvvAoF+XD88TBhgr05xzJiBKxYGfm2/AIoLEr8WL3oF6fY+WBPP2UnOAey7Pt41VWw06BUj8575s5SYYYPKMDE+9atg9NOhfXrm0rXF31mgXbbbRBjuY7Tz4DnX7A37XAB4NCJmVM+HgjA+efDGadbP8fCQth99+R1CvGLSJtJatblWQow8b5rr7Hy8PB9qrZuhYUL4amn4Njjoj922VLIy4XqFgEWxFo+XXCh90NswQK44Qb45msLnF13hd9eAjvv0v7nKir27lJnKoRmWiFqsOsrvgkw13U9/i4jXaK+DuZ/EnmTxept8NjjsQNs2vSIRRyAheDy5bYHlhdt22ZB9e67zf/9H3xgHePvvAsGD07V6Pyt5RLhd3pDqWZdfuGbAJMMVVcHWTE+u2zd0sbj2+iWEe32YNA6Vdx3H2zaBIMGwa/OSe6eXxddBO+/Fzm8N26yk5Nv/lfyxpMOtESYVhRgklxfLbYOFrU11sZozz1jL+HlF9gmihs3tb4tgO15Fcthh8H8+ZFnYTk5FkyRXHMNvPhiU9Xemm/hswvg4out60VX++ZrcN3I4RWySOf5R7V8uW08WlQIBxxoVaLa+TjtKMAkOYJBuPrP8PobtscUwLPPwrBhcMutsUvZzz/PAqWyRbeLbt3grLNiv+6kSXD//a3bKJWVWl/DSFWMi7+0prctS84rKuGmm+DQQ2OeV5UQny5se3bp9WN3HdVQD++9B4u/gp0GWgDFe6pDXZ11I5k7Fyor7fhnWQ6ctB+MDGpbkzSjAJPkmD0LXnq5eShsroB58+E/d8C550V/7ISJVn146602cwsGoWcv+POfbKfgWPLyrWXUP2+EN96wGU33bnDBBfD9gyI/ZubMppBtqbYWPv4YxuwX+3U7q7zcxh6rYfDoMYl/3WAQFi20Ho/9+sHIvZMblMuXw7nn2M9GVRUUFUFJMdx8Mwwd1vbjb/yHHTMMNTXuVg97ACWvw67HwLCjNOtKIwowSY6p97ee0QDU1MAzz8YOMIDDD4dJh8HqNZCfZxsuxqukBH7/B/s6GGz7DTlSR/eQ+oa2u9AnwujRtuzVssdiSK9ecOEFiX3NdetsVrq2sWN9UaE1L/7XzTBocGJfK5Jg0Gbb4eftbd1qlwsugKefsU4n0SyeD6/PhuztUATsDOwN9AGW18H0Chil8EonOglEkqMiyowGbNknGOtgT6NAls0K2hNerZ4jjtnEhAm2xBhJXh6MHNnx149XTo6dPtC9G2SF/ZoGgNGj4MEHoPcOiXu9YNDC68svbfZZV2dLpitWWJusaB33E2nux9Fnvlu22LJuBHmrF8N7d8Hyx2FUHeyPXY4EugGfAR8Aixd3xaglhTQDk+To19/2ooqkuMhbx3P23geG7GxLaeGzreJiOPpom9Elw76j4OFH4NFH7MTtQTvBSSfDgAFtP7a9PltkM69IKistPCZOTPzrhlu+PPqMc2s1LI3QKHfuLEqq34CRDdB3CCwO2EZMAKux4AoZ2AXfN0kpBZgkx7nnWAVfRWXz64uL4dRTUzKkqAIBuP02uOUW2y+rIWjLeaecYi2skqlXr7aXVxNhyZKmjS5b2roVPne7PsAGDITSUjv+1VJRoX2oCAkvhx+ZBbuPt8KMklXw7gtQ22LGWFYGp57WpcOX5FOASXLss6+1MrrtNpvVBBusSOGYo+HoY1I9utby8uGii+1SXxe7XVU66NfPQqLlBwyw8E5Gv8SRI62yNFKAlZTAwQfb1y3K4auCgynv3Riul19uy55Ll9pyZE6OfUg680wYPrzr/w2SVGn+WymecsyxcMQR8OGHdkxl733sE7fXpXt4gVUblpZFDrDios7NvpYttQ8u8+dbEcbhR9isu7Cw+f0CAas0/dU5sHmTnTYxOB/65sAPx8NH9zWO5/Nm5fA14XuBFRTAlCm2tc2cOVBSaqc99OjR8fGLZ2XAb6Z4Sn6Bndcj3hIIWLXhOefaMa+tWy0Miovg73+3rzvC/cyKQ8JPRJ96nx1Tm3qf/TyE69cfpk+D56bByrdg1woYuwt0Cy/cieMk5OF72kXSmgJMukZ1Ndxxh7Vjqq+3woPJv05uKyZpn0GDrTnya6/ZMa+dBtnMq6PhBfDnq1t3Uamtg2++gekz4MQTWz9m3nPQ6wvYLw8GHKCOGRKVAkwSr7YGTjvNjkOEyq/Xb4DJF8LVV2sG5mU5ORZaiSjY2FIFa9ZEvq2mxvYmCw+wVn0Kx6tjhsSkAJPEmz0bVixvfe7Q5gr4619hxlPeKpuXrtEQtPPWognfoy185+NS9SmU+CjAJPGeeSb2FiarV7XdAkr8r7QUysojN2LOzYEf/KBp1qWdj6UD1IlDEk+zKwm57FIoL7OvixovxUC/bjC8O3w7A0athVEjYOczFV7SLpqBSeL96Ee21UekWVhREfTtl/wxSWqMHgM33gi3/wF6r7V2YAMGwoEHQNnnmnVJpyjAJPEmTYKHHoIlS5sfBysvg8t+pxlaJlm2CLZ9AFeMtbAqbbF0rCIN6QQFmCRebh7cfQ/cdRc8N9tCbKedYPJknZuTScILM7TzsXQBBZh0jcJCax11/vmpHokkmwozJEkUYCKSOJp1SRIpwCTxgg2wahXk59vOydEs+cq20Bi4EwwenLThJd4KYDuwExn7KxUKrr5o1iVJk6G/bdJlnn7KWkiFNqns2cu6bwwd2nSfdevgwgutS0PNduv83r8f3HRT5zarTLoFwO+BUAPcHOAs4LiUjSgpli2CjWENdLevDOueoVmXJI8CTBJn9iy48Z/NNyXcuMn2Arv/fujT10Lt7LNh2bKm+2yttu7jvzoHHnnEJ1WK3wCTgZYn6d4CFAJp+iYemmnt0bvpuoK16p4hKaEAk8QIBm3LjEg76m7caFWJv/udbaWycUOExwPr1sL8eTBiZJcPt+MqgbeBx2gdXgBVwB3A4cTuo+QzyVoirKyEZ5+1Zr977mk9GfPyEv86khYUYJIYVVWwLUr7qCDw/nv2tftZ5D2nwHolfvGlhwPsfuA+bM/6mhj32wpsw2ZiPteqwW4XLhG+/Tb88Y+2M3RtrbUku/VW2x170OCueU3xNQWYJEZ+ngVVNCUl9mefvlBYEL1LR+8YRR8p9R4wBZthtSUI5HbtcJKhxc7HXbpEWFFh4bUpbFZbXW2XyZNh2vTWS8tr18LUqfR/60071nriiXDIIZClDnmZQgEmiZGXD7vtZrvgtlRU2LRtxkHft6CKFmCe3WrlP8QXXgFgH3z9q5WKbU1mzrTtVyKpqIRPP7UlxZDFi+FXv4JNm8hvaIBvlsMXX8CsWXDDDQqxDKH/ZUmcP/4B+vSBvLDZR3ExfG8EHH64/T0vH66/Hnp0b7pfXp79/e9/ty3nPWl1HPfJB/oDl3fxWBJo2aLml7mzrMHu0M9hzDAYdnRyqgq/+cY2uoxk+3b49tvm1115JWzYAA0NTddt2WLHWN9+u+vGKZ7i44+J4jm9d4BHH4VpT8Irr9rM6yc/gfHjrYlryN772JLQM8/Al1/CsKFw5JFQXJKyobetJ/BtlNtyge8BhwJHAp3YwTiZQkuEPcMqCnuutQxO9maSw4dHX1ouKICdd276+/p1VvATyZYt9jP4/e93zTjFUxRgklglJfCLU+zS1v1OOik5Y0qIM4CraL2MWAD8DPhlsgfUca2WCMMb7PaHkiHJL4c/dKIVbLQMsKwsGDiw+YnuW6tjP1e0pUhJOwowkbiMB44HpgMVWKFGN2AkcGbqhtVeySzMaI+8fLjjdrhwspXSb9tm/TQHDoSbb25+3x37Q3aUt67cHDh4fJcPV7xBASYSt/OAnwAvY2X0BwE7x3xEZPXAS8AbQDlwTAefpx1SUZjRXoMGw/TpVrCxZg3sskvkFmNZ2XDGGfDvf7c+77B7DzguzTuhyHcUYCIRVQMzgQ+BHbHZV1+gD3ByJ553EzsO+A12EvTWxutmAj8GLuzE88bg1VlXJIGAVRvu2ca2Oz/5CeTkwJ13UrdtGzlZWRZ4f/oTlJYmZ6yScgowkVaWYse0KrEmvQFgGnABcHQnn/sqcnNW0fykuQpsaXIcsG8nnz+MH2ZdnXHMMfDjH7Ni3jwGOY6dhiEZRQEm0kwQ+DWwrsV1FVifw/2xmVhHbAUWEAhEOuO7Cuvy0R24DViIFYgcC5yAVTpubnyOHYDs5g9v2WAXwrY1GZ+awoyusno1vDcHcnLh++No6NZN4ZWhFGACDfV27synC60r/KGHQmGmviF8QVN3+ZYqsZnYOWHXfYuF2wDaLp+vIHZ/xK+B/0fzHou3Ak9gBSPLGx+fDfwcW8oMNO9T2COsJL53mm1r0tAAV/8Z3nzLOndkZ0FxCWU//CH8+tepHp2kgAIs061ebd3hN2+2A+L5+XDLLXDNNbDf/qkeXQqsB2qj3NYArGr8ejlwGc1PcD4KK/SI1h+gF7H7bW0EtrS4rq7xtZa3uP5OWLYKVndr3qewZEjTXdIluEKmToWXXrb2UmCBtmkT3aZPh7FjYf9M/HnNbAqwTHfhhbBiRdPft2+3y5VXwrRpUFqWurGlxK5E72NYgB2jqsL2/Wp5Mu3jWMhNDrtuETaL+goLxiqCwUg7xuTTOrximFsFtdNg1MHQ34HeP2t8jjT22GNN4RUme+tW+M9/FGAZSK2kMtkXX8D69ZFvq6qCp55O7ng8oTcwgsghVgZMAmZgx6NaqgaebfwT4E3gXKwR8FpsabAuynZnUdootbSs8el6AgfXwLC3offDWAeQO4k9w/OxhgaoibEDwJo1yRuLeIZmYJls9SrbETmS2jpYurT5dZ99Bk88YZtPfv/7MGmSnYCadq4FrgTmYsGSgx2DuhGbhc0h+nYqVcCLWKD8BTvuFY/6tu8yF5vEjcLaPfUGK+oIleM/gAXvqXG+po9kZdlJytH08uouBtKVPB1gjuOMxd4F9sV+dWcBl7iuG09nVWnLoEEWQJFa8+Tnw+67fffX7vfeA2+9ZXt2gXWdnzIFptydhm8eBcANWCXiV9h0Z5ew23vEeGwd8A/s2Fi0Y2nttKzx6foDDtCPKFuNbQEexlpbefpXu2OOORbun9qq3VR9YSHZZ52VokFJKnl2CdFxnJFYu4IAcArW4nsS8LLjOOn4sT/5dhoEAwdAVoQ1rZISOOKH9vWHH1D62utN4QX2JrJypR0rS1u9gDE0Dy+wsvZYJ8uGgqQDy3mhJcLwy7fYrGsU1rAj5j6ZDbQ+NpcmzjwDxh4A3brZ37OyoLycisMPV/PeDOXlj2lXAxuASa7rbgNwHOcj4H3gNGzfdumsm26C886DlavsuFdRoZ1Tc+ON1osO4P4HyN4SocAgiHWTr6zMsO4Hw7GKw8eJvpRYCbSzu374EmHLb2c/oDB0/lkQiHbMJ9j+1/WLrGz4299g2TJ4603IzYNDDmFTZSXdUz02SQlPBpjjOHnARGBKKLwAXNf9r+M4X2B9dxRgiVDeDe5/ANzPLIx694ZRo+zNImT9uuiPzwpAZUWGBRjYyc7rgedi3CcPC5M2uqPHvUS4GvuVzW987kjhuTOxZ4dpYNAgu4RURjtvT9KdJwMM+y0swGqQW3KxMjHpiNoa+PxzO/a1665N9dzObnYB+Gqx7am0bj3svx/stRdB1yXQEGVJrPcOyRm75/yE2AG2ATu7eBsRqwyXYad+tSrMiKWu8ZJN8xDLx7p4XB3n2H1oxQp47TX7mR0/vsU2MJKJvBpgjYvcEWuVK7AW3tJeDzwAU++D+gZ7E8jPt12Ux+zXdJ87/w8eeaR5sUZpKfXFxeRUtphJFBVZ52/P7qLc1b6HHUZuiHGfKPVGoeXCXbAmHlFnXdHUN75uXuODRwITiCMB/ScYtBPrX3sNKhrfEqZMgYkT4bLLUjo0SS2vBliouCTaUfBY7xjfWbJkSdt3yhAlr71Kj3vuIbtFxWHdpZey6k9/om7gTuQuXULfBx8iJ3yLisYTm+v79SVYVESguhoagpAVoGr8eDb+4AeQYd/nvPzFlJfPICdnNTk5eeRkR9hFOJrQcmExsBdxzrqiCQI1BIPLaAiuAGaRFainvqGIuro+bNxwMtu2fa+jT556NdvJW76Cwg8/pPyF58kOrz7cvJn6WTPZsENvto8bp9/1hBrS9l08wqsBtrHxz0gzrTIiz8xaGTLEP/8RXSoYtK4aEcrlcyqrGDhzJvz1b3Dffa33V2qUvWULOQ8+BFu32LbtQ4fSrbDou6lyZqgHbgKeouncqxiWtfh7aLlwKB2cdUUWCEB2oGmJMie7ipzsKvr1+yfwG6zgxEeCQeus8eQTltGbN9t1LWRXb6P3zFlUHTJBv+sJtGFeqkcQP68G2GLsV31YhNsc4NPkDsfnamtsh9toPl1of65to/x682bYbbfY90lbc4A/YoUbcQgtEfYMu64nNuNq16yrB1aWH+WE85iqsDZWhxO9PZYH3XMPPPQQbI3jQ0Kk6ljJGJ48D8x13RqsncHRjuN89xnVcZzR2OfXWakamy/l5sY+Jam8sd/hqFGxux3sNDChw/KPpVhnjjjCK3QeVw6wDzA27DIK+0jWriXDeuxYW0cP+9bhq897dXV2DDae8AIoy7RenRLOkwHW6I/YZ9WXHcc5znGcs7DgWghMSenI/CaQBQceYCd+tlRUCCc37jB8/HFQFuGNsrCALWMPgKLirh2nZ91J8y1OopiLnXQ8FDv/ORRW4Zd2LxluB04C7sKCLDv23SPyUX/ENWsiLhdGVFwMp5/eteMRT/NsgLmu+wHwA+y37wGsQd1sYEL4uWESp0t+C4MHWWCFlJbAfvvBEY279JaWwR23w+DB1u2gvMz+POIINpx+WkqGnXr1wCux79Jy1rU7cXTMiFcttoHlEGyjy91p34nKOdiJ1z5RWkLMwA0AOTn2c3n88XD44ckamXiQV4+BAeC67mvAgakeR1ooKYEHH4JXX4EXXoSCAjjuWBi5d/O9PYbsbA17ly61pr277GqPzdgqrzdo1mg3VEUYLouEF2Y0aaBp9lcA3AP8F1thbwDexY51RVpyK8E2yMxL5IC6Vlm5fYDaOLf1bSUlcOyxsPPOcMAB0CNWT0rJBJ4OMEmw3Fz4wWF2acvgwU1fV1dT8Ml82LQJvrcXZGfSj81MvjtrI1SYEQqrcKV00SlYQexk6dBeVwFsfXJM49/rsJB9H0vXJVjg9sR2jj6oKwbVta65Fs44AzZutNM4wDq9TJwI558faTM1yVCZ9E4kHXHnnfDoo/SuqYGcbOs/d8kl9maSEbISfO5WR8SaQeUAhzRe0kSfPvD44/DMM/DmG9bu7Kc/he/5+Jw26RIKMIlu+nTr3rFlS/MflOv+Ajv2h933SNXIkmduf6jNgaF1EZYIc2nqiBG/+oZ8srMCWIuptpThu/O4EqGw0ELrpz9N9UjEwzxbxCEecPeUyOfZbK6A229P/niSadkieO8uyFkO+5TD7jktCjPKsNL6wbSvqCKfiorDseNZbSnEtsLzURGGSBJpBiaR1de12jiwmcWLkzeWZJs7C2rnwdCNMGA36HcqFH4ATMOa5w4Azsd6Sk/CCilex9YYlwGfND5RJa13Wu7Dpo0n0L3bnBgDKMYqD0/GNl7QMR+RSBRgEllWduSNLkPK06Sf8rIWGx6sfhv6rwWnN5SOgN6NpxiwJ3Bq2B23YOX1tcBoYFzYbXXYRgoXYCEWbj3Fxe9gLZ6ujnB7X+AR0nZPL5EEUoBJZIEATJgAM2ZAbYutQIqK4Oe/SM24EmXZIgurrLXQM6wiY9Ra6B8eXJE8gp1YvA07/lWEnbJ4CY0nKgH30zqcALbQvfuj2Dn5ecDNNLX+3Ae4FIWXSHwUYBLdhZNh4UL4+msIbaVSXmbn4EyalNqxdUazJcJhUBq2r1TJgVC4e4wHf4DtpRre9LgGeBYLs92BQcCCqM8QyKrGZm7jGi+h/b20VBhVfR3M/8TK6ocPz8ANVNmsfREAABXxSURBVCUSBZhEV1AA994L771P5RNPUNq7Fxz1Y9g91hu8h4VmXRGXCON1G5F3WN4KPNn4dSnQuvN/czlRvpZW3nwTrr0WamqgocE6cfzoSLjgQp0TluH0myOxBbJg//1Z16cPpX7esiI06xpFHEuEsayKcVuoBVJFjPtkUb11b0pL9cYbl8VfwlVX2U4I4Z6cBt26wymnpGRY4g0qo5fOqa2BDetticeLQuXwPefBwb1h2NGdCC+w7U3ilUPzvlKFwE6s36AGtHG7867W4QXWrf7hh21GJhlLMzDpmOqtcN118M67Vq0YCMCPjoJzfmUVjF6QsFlXuNOAa4i8jNhSPVYKvxIr+DgMmEiwYXkCxpEhFi2Kflt9ffzbrkhaUoBJ+wWDcPbZ8PkXtn9TyKOPwPp18Merkj+mubNg+8rm14WOdfVrqzCjPSZgTRFn0/bG4CVYL+p9E/TaGahXL1ixIvJtwaAdp5WMpQCT9vvoQ1i+vHl4gZ34/OZbsG6dvfEkQ8vCjHAdKtJoSwC4GDgReAEr3phO5DArw0rjM9jGjdbXcNFCaxB9wonQt2/sx2ypglmz4etlsOee8OWXrTvCZGdbNWyO3sIymf73pf3efAsqIp3jBGzbBvPnwSETun4cXbJEGK8BQOhY1iHAr7Ewq8Y6aZQC/yKjS+PnzoVLLrZTMOrq4K234eln4LLL4NBDIz/mvffgyitgy1arOiwsBIK2lUpV47JtaQn07QeXXZq0f4p4kwJM2q+0xI57NUTYeDAnp/FNpwu1nHUldImwI/YAngFeBb7G9lsZR0b/etXXWVBtDNvJOhi0goy//tU2Ui0ra/6YLVUWXuGPqW48HWGHHax0fms1HHIIjB0beYdxySgZ/BsmHXbED+GhhyNXh+XnwahR9nWwAebMgddeh5JiOOooGDS4468bCq7iz2FU9xTMumLJw4o0BID33rfZeCRbtsALL9iOyuGee95mXpFs22Zb+IwYmdhxiq8pwKT9+vWDE0+Ahx5q6tAB1h/xsstsz7CtW+DMM2HVqqb7zJhhlYqTJ7f/NVt2z0j5rEti2rQpeoDV1sK337a+/ptvbNkwkm3bYPUa658s0kgBJh1z1v+zmdbdd8Oq1TBsqO2iu8uudvu1f4GvljQv9NhcAU/NgAPGwpj9oj93pAa7xZ/DXt2h/3gPzbokqt13t+NWmza1vq20BPaJUNyyxx62/FwdoYtJURHsvHPixym+pgCTjtt7H7glwhtRbY0djG9ZpQg2G7vnnsgBFq3B7tDPNevymyFDLHDmz2/+cxAIQM9eMGZM68f8z//AzTe3DrBAwGb9Q4d27ZjFdxRgknhbtsbeiiXS8lGsBrv016zLy4JB+OgjeOtNKCuHIw6HPn3hppvg8sthwQLrmJGVBTvtBH//e+QCjNxcuO02mHyhVblWV9vMq39/+Ne/kv/vEs9TgEnilZVaD8Vodtut6evwwgwtEfrP1q12Uvvy5VBZacH0wAPws5/BaadZiK1fb7f37WPBFsugQTBtuoXemjUwZHDTsrRICwowSbysbKswu3+qlT2HKy+34g5QYUY6uPZa+Pxza+sENtPavBmmTrXjXCNGQM+edolXIAB77WUXkRgUYNI1zjwTNm6AF160yrKcbDtH7Jhj4Yt5sOYlKPlSsy4/277NjnWGwitcZSXcew/886bkj0syhgJMukYgAL+91JaX5s+HRx6Fzz6Dl6bCN/WwbwPU5MKrZfD9gXByg05M9ZvNFbH341oZa+sZkc5TgEnXmTvL/nz9WVj1EQysg72BPti2Wh/UAuth4R3w6QK47vrUjVXar3v32LcPG5accUjG0kde6Zz6OmvYWlvbdF1oD66c12DIMug2D8bWwSSgG/AZ8EHYc1Rvg/f/C199ldShSyfl5sIRR0TuCF9eDqdr3zPpWpqBScfU18G/boHZjbOsYBAOHg+T9oLgwqbCjMAusD0Ptmy34Foa5fk2b4ZXX9HJqn5zwflWZThnjlUk5uZCfj787nd2Lli8amutUrG42PoeisRBASYdc8WV8NZbTe2CioAlT8Onr8HPJjQVZlRUwPJs2NjG8wWIXXov3pSdA9dcY+f2zZtn522NHg15efE9PhiEu6fYMVIam0P36g3XX9e5vpmSERRg0n4rV8AHHzSFVz+sIfvoBqivhtywJrtlZXbe15z37M0qmrJya9Yq/rTDDtG3SInlnntg6v3N9/vauAnO/qVtkFreLXFjlLSjj7zSfh99bGXSRcCe2CbFewALgNnb4d0W1WfXXGMnqJaURH6+oiIYP966NEjmqK2FRx5pvVklWA/Fxx5P/pjEVzQDk/YrLIAdA7bt1d7AOmwrLLCdckuKm9+/vBs89qhtaPjWW7asuPhL64tYXAy/+Dkc9ePk/hsk9VausC13Iqmrg3fegbPOSu6YxFcUYNK2ubMoX7MAvu1hfy+ohQkBKKF1YUZJCUyMsJSUlQ0HHWSXrtRQb0tQpSWQl9+1ryWdU1Ia+/ZuWj6U2BRgEl34zse7Z8N3p/3kwpAj4fqXbTYVUloKp5zSvrZBiRIMwl13wRNPWDujYNC2e7nyyuhLl5JaPXtC337Nd2AOKS2B//3f5I9JfEUBJpGF+hSOAvqPYHPV7vQIL4veGdjpOJhyl+37teOOcMbpqdsx94Yb4Omnm2/F8corsGQJPPyQzQDFe667Ds4604551TZuu1JaAodMgH33Te3YxPMUYNJc+KzL6d3UYLdqSev77rYb/P2G5I+xpYoKeP751vtINTRYR/O33u76pUvpmAED4NHH4Mkn4Z237XjpSSfCPvvGblMlggJMwrWYdfmmwe6CBc07gYSrqoLXX1eAxdJQD2++CTNmQH0D/PCHMGGCNV9OhrIy23rltNOS83qSNhRgYsG1fWXrWZdfFBVZ9WM0OgYWXW0t/PKX8OWXTeXsH38M994Ld98NhYUpHZ5ILAqwTLNsEWwMWw7cvjJsM0kfzbrCfW8vyI/S+aG8HI4+Ornj8ZMHHoBFi2zLm5Dqajt2eNu/4aKLUzc2kTboROZMMncWfDsDhq5suoxaC2OGwbCj/RleYAUav/9D67Lr0hI48sj29eTbts36+s2Z09RpJB0Fg/DRR/Dgg83DK6SuDl58KfnjEmkHzcAyQaQlwnB+Wi6M5oADrCJyyt2wcCH07g2nngr77Rf/czzyiD1HqBouNwdOPS39yrnXrIZzzoUNG6yjSjSRNqoU8RAFWDoLVRT6fYkwXoMGw5//3LHHvvEG/OcO6w4S7q47YcCO1mk/HQSDcN55sGxZ2/ft1RNmzoRp02yWNmECHH+8jimKZ/giwBzH+RtwlOu6u6V6LL4RqigMbWvit8KMZLv99tbhBXbd7Xf4I8AaGixo8vOjl6AvWADrN7T9XKUltox4/fVNpyd8+QU8+YQVePTslbBhi3SU5wPMcZzfAZcAbqrH4lmhJcJw3826xqf3rCtRNsR4U491mxdUV9uJ3G+8bn/PzbOOKD/9aesg+3pZ5Oa5IQUFFl5j9oOXXoLt25tuq62D1ast1Lxw/p9kPM8GmOM4w4EbgEOBzSkejje1XCIs7R12o2Zd7RJpV+GQfA/3VGxosIa3X35pM6aQ226zjSbPOaf5/XccYA2Uw1uAheTnw5lnWnPlE05oHl4hQWw3goYGyFINmKSWZwMMeBCoBcYB1wN9Uzscj9ESYWL95Cdwxx2tKw8LCuD441IzpnjMmWM7GYeHF9gsa/o0OPUUKArbHWDECCgvixxghYW2z9uDD8CmGJ8ZAwEr8FCASYp5OcBOcV13HoDjOKkei3e0KswYn7lLhN98A489BitXwsiRdr5XaRsdzqM5+ST48EPbVTj05l5WBnvtBT/7WeLGnGgvvmDdRiKprYNPFjSvxAwE4JZbbWZWUWGPLSyEgnzrwjFnTtuvWV4OubmJGb9IJyQ1wBzHibElLwDHuK47AyAUXhJGs64mTz4Bt90OFZttWeudd+yk3H//G3bdtf3Pl5UN//wnfPopzJpl1XpHHAHDh3u7J19BjE4ZWVmRlz8HDIAZ0+Hdd+GLL2HgAHh2prWTaktpKVx4YcfHK5JAyZ6BXdLG7QsS+WJLlkRoQOtDeasXU1jxEbndltIwtIztvfZgS+BgWA2QnH/j9prtnvl+Zq9dS/9bbiUnfOZRWwvr11N74YUsv+WWjodOUZGViocsXRr/uDZupHTmTAoWLqS+e3cqjjqK7RFWDxL5vcwdPZq+s2c3/140qs3OYnlJiXXViKT/jnYBBs6fH/XNIBiA+tIygnl5bPj5z9k6cGD050wBL/1spod2nPifYkkNMNd1k1q6NKQ9HRi8omWrJ4CceTB6IwzYJ2WzriVLlnjn+zl7dtRKutzt2xlSU2Od8pNp0SK49FLYvNkKHICSRYtsWbPFjCWh38shQ2zm9Morzb8nZWXkXn4FQ+KdjcZo3Bvo1p2cBx+E3r3p48HZqKd+NtPABh+tfXn5GFjmCS0R9gV6hFUUFpDZx7paWrPGlvgiqauDjRuTO55gEC67rPXrVlbCU09Zd/dYQbJqFfzrZvjwI5s5jhoFF5wPfeKsW/rDH2DcgXDfVCv5HzYMzj4b2nPseMxomP1c6+sDwIEHwg47xP9cIkmiAPOCSB0zSlp8oszUY12RjBoFr7wM1RF6FebkwNChyR3P4sXRz62qqLBCk8svj3z7ypW2jcj69U3XPf+8FZTcd298IRYIwISJdumo8y+ADz6EdWvtmCJYePXewTp3iHiQ6mBT7bsGu583b6pbuHvzizQ57Ae28WFLubmwzz7QK8ldIqqqYvcNjDUjvPnm5uEVsm4d3Hpr58cWrx12gPvvh6OPsT6SvXvDMcfC/VOT//0UiZNmYKmicviOy8uH//s/uOgimzHUN55UO2YMXHVV8sczdNfo+5EVFsC4cdEf+/HH0W97/7+dG1d79eoFV1yR3NcU6QRfBJjruuNTPYaECt/5uDTDy+E7qn9/ePhhO4l3/Tpr5NtyO5VkKS6BSZPseFeob2BIt25w+KTUjEskzfkiwNJGaNbl152PvWjAALt0VkM9vPe+dWkfOBDG7m/nhsXrN7+BvDx45hn7ezAIQwbDX66zGWM0I0daBWEkY0bH//oiGUgB1lVCYRUua63NutJ9WxO/+fprK1QIdaYoKbHLLbfEvxlmVhZccAH88mxYtdq6VcQzI5w82bp/tDwO1quXiidE2qAA6wrNlgjDG+xq1uU5DQ0WFCvDuvlXVdnlvPPg6acgux2/Jnn5MGhQ/Pfv39+2JwmV0QOMHt2+MnqRDKUASyQtEfrPf/8LlREa24KF2NvvwEEHde0Y+vWD667v2tcQSUMKsEQJn3VpidA/vvkm8kaWYOd2LV3a9QEmIh2iAOsszbr8beBA28AxUogVF8PgwUkfkojERwHWGZp1+d/o0VBaFjnASkrgwAOSPyYRiYsCLF7LFjV9vXGJBdcu2tbE97KyrOPFueda78KqKpt5haoQ21PAISJJpd/OtoSWCMOLCXuuhf6oe0a62GkneGqGnQe2dCnsNBDGjm3feWAiknQKsFhaLhF+p78129WsK31kZVtojR2b6pGISJwUYJGEgktLhCIinqUAC6cGuyIivqEACwnNuoZq1iUi4gcKMM26RER8KbMCbNkiK4EPp1mXiIgvZU6AhZYI+wI9wmriC9CsS0TEh9I/wFotEY6wEvhwmnWJiPhOegeYCjNERNJWegdYzmsqzBARSVPpHWBjNOsSEUlX6R1gO5+Z6hGIiEgXyUr1AERERDpCASYiIr6kABMREV9SgImIiC8pwERExJcUYCIi4ksKMBER8SUFmIiI+JICTEREfEkBJiIivqQAExERX1KAiYiILynARETElxRgIiLiSwowERHxJQWYiIj4kgJMRER8SQEmIiK+pAATERFfUoCJiIgv5aR6ANE4jjMS+DMwGigGPgP+4bruoykdmIiIeIInZ2CO4wwH3gb6A78GTgK+AB5xHOfSVI5NRES8waszsN8B1cAE13U3N14303GcPsDljuPc4LpufeqGJyIiqebVAPsU+DQsvEI+ASYApcCmpI9KREQ8w5MB5rrudS2vcxwnDzgSWOa6rsJLRCTDJTXAHMcJtnGXY1zXnRHhcQHgFmBX4OddMTYREfGXZM/ALmnj9gUtr2iced2FBddfXdd9IN4X+3Be+wYnsQxhg76fCaLvZWLp+5mpAsFgW5Oi1HEcpx8wHRgD/MF13WtSPCQREfEITx4DA3AcZy9gNtATONl13UdSPCQREfEQTwaY4zi7Aq8C9cBBruv+N8VDEhERj/HkEqLjOG8C44DJwIcR7vKe67q1yR2ViIh4iecCzHGc/sCKNu7Wz3Xd1ckYj4iIeJPnAkxERCQenuyFKCIi0hZPFnEkkrradx3Hcf4GHOW67m6pHosfOI4zFvgLsC9QC8wCLtFyeOc4jpMDvA584rruL1M9Hj9yHOdY4GJgD2A78BHwe9d1P0jpwNqQ1jMwdbXvOo7j/I62T0yXRo0fpF4CAsApwOXAJOBlx3HyUzk2P3Mcpxh4HDgg1WPxK8dxTgWeBJZiDSPOx05fesdxnHGpG1nb0n0Gpq72Cdb4oeAG4FCgZbNlie5qYAMwyXXdbQCO43wEvA+cBtyRwrH5kuM4RwA3Ar1SPRafuxp42XXdk0NXOI7zHLAEuAzrQetJaT0Dw7ra/yNKV/syrKu9tM+D2BvGOGBuisfiC43t0CYCT4XCC6Dx/MYvgB+namx+5ThON+BZYD4wIsXD8S3HcUqAp4Hbwq93XbcC+BoYkIpxxSutZ2Dqat8lTnFddx6A4zipHotf7AwUAIsi3OaiN+CO2AoMd113EehnsaNc160Czm15veM4w4A9sQ+snuXLAFNX+8Rqz/czFF7SLt0a/4y05FoBlCdxLGnBdd0aIn8gkE5yHKcMeAioAVpNArzElwFGkrvaZ4B2fz+lXUJL9dE+KDQkayAisTiOsyPwDDb7Ot51XTfFQ4rJlwHmuu4N7bl/i672v1dX++ba+/2UdtvY+GekmVYZKoYRD3Ac5wCsGrEYOz3muRQPqU2+DLD2UFd78YDF2HlfwyLc5mDFRiIp4zjOScA9wBrgMNd156d4SHFJ6yrEsK72uVhXe4WXJF3j8ZoXgaMdxykMXe84zmhgKHZCs0hKOI5zHPAAMA8Y7ZfwgvSfgd2DzbwmA/kRTspTV3tJlj8C72AnLv8D6IF15VgITEnlwCRzOY7TA/v524KdDzassQIxZKvruh+lZHBxSNsAa+xqHwqsm6LcrR+gNj7S5VzX/cBxnB8A12Kfdiuxpe3fhp8bJpJkk2g6NvtMhNtdwLOt4tSNXkREfCmtj4GJiEj6UoCJiIgvKcBERMSXFGAiIuJLCjAREfElBZiIiPiSAkxERHxJASYiIr6kABMREV9SgImIiC8pwERExJcUYCIi4ksKMBER8SUFmIiI+JICTEREfOn/A0mXdkPEQoRLAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.datasets.samples_generator import make_circles\n", "X, y = make_circles(100, factor=.1, noise=.1)\n", "lr = lm.LogisticRegression()\n", "w = lr.fit(X,y.ravel())\n", "\n", "plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')\n", "# evaluate on a grid\n", "x1 = np.linspace(-2,2,100)\n", "x2 = np.linspace(-2,2,100)\n", "xx1,xx2 = np.meshgrid(x1,x2)\n", "Xstar = np.zeros((x1.shape[0]*x2.shape[0],2))\n", "Xstar[:,0] = xx1.ravel()\n", "Xstar[:,1] = xx2.ravel()\n", "ystar = lr.predict(Xstar)\n", "\n", "# visualize the result\n", "plt.contourf(x1,x2,ystar.reshape((x1.shape[0],x2.shape[0])),cmap='autumn',alpha=0.2)\n" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "r = np.exp(-(X ** 2).sum(1))" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(projection='3d')\n", "ax.view_init(elev=30, azim=30)\n", "ax.scatter3D(X[:, 0], X[:, 1], r, c=y, s=50, cmap='autumn')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from mpl_toolkits import mplot3d\n", "\n", "def plot_3D(elev=30, azim=30, X=X, y=y,r=r):\n", " ax = plt.subplot(projection='3d')\n", " ax.view_init(elev=30, azim=30)\n", " ax.scatter3D(X[:, 0], X[:, 1], r, c=y, s=50, cmap='autumn')\n", " ax.view_init(elev=elev, azim=azim)\n", " ax.set_xlabel('x')\n", " ax.set_ylabel('y')\n", " ax.set_zlabel('r')\n", "plot_3D(X=X,y=y,r=r)\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.10" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": false, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 2 }