diff --git "a/pkmn-classifier/nlp.ipynb" "b/pkmn-classifier/nlp.ipynb" new file mode 100644--- /dev/null +++ "b/pkmn-classifier/nlp.ipynb" @@ -0,0 +1,2106 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "id": "i-B5sPHELBBj" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis\n", + "from sklearn.dummy import DummyClassifier\n", + "from sklearn.ensemble import (\n", + " AdaBoostClassifier,\n", + " GradientBoostingClassifier,\n", + " RandomForestClassifier,\n", + ")\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.gaussian_process import GaussianProcessClassifier\n", + "from sklearn.gaussian_process.kernels import RBF\n", + "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n", + "from sklearn.model_selection import GridSearchCV, train_test_split\n", + "from sklearn.naive_bayes import GaussianNB, MultinomialNB\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.neural_network import MLPClassifier\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.svm import SVC, LinearSVC\n", + "from sklearn.tree import DecisionTreeClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "id": "uxhFjfeHLBBr" + }, + "outputs": [], + "source": [ + "# Read the pokedex we scraped in web_scrape.ipynb into a DataFrame\n", + "pkmn = pd.read_csv(\"pokemon.csv\")\n", + "pkmn.rename(columns={\"Unnamed: 0\": \"wiki_index\"}, inplace=True)\n", + "pkmn = pkmn[pkmn.primary_type != \"Bird\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 908 + }, + "id": "1HfxKWKEPpNU", + "outputId": "b3d9ab9d-7cd2-4010-f060-bb7ac2f843f1" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1AAAAN7CAYAAABLcHvEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZjld1Un/vfpLZ2NBEjMAD5jAB0ziCGGEAFRw6a4suggiCM4zK8HUGZxeEDn5yiOjgMzOqiIk+mfIuiAgigGmBFlSCKIsiQQlgCKJiCymITsnXQ63XV+f9Tt6qKrcutbSVV9b1W/Xs9zn7r3u91zqzuVOn3O53yruwMAAMDKto0dAAAAwGYhgQIAABhIAgUAADCQBAoAAGAgCRQAAMBAO8YOYBa95Mxnztxowl/6/LvGDmFTuO/xJ48dwrL23XnH2CEssWv77P3nf+DQwbFDWOKb73vW2CEscfG1Hxs7hGU94KTTxg5hiWtuu3HsEJbYf/DA2CFsCo86ffb+20uSD91w1dghLHHizuPGDmGJE3ceP3YIS9x4x61jh7Cs62/5VI0dwxB3XnfVzP1+vNjO0x60Yd9HFSgAAICBJFAAAAADSaAAAAAGmr1FEAAAwGyZOzR2BDNDBQoAAGAgCRQAAMBAWvgAAIDpem7sCGaGChQAAMBAEigAAICBtPABAADTzWnhO0wFCgAAYCAJFAAAwEASKAAAgIGsgQIAAKZqY8wXqEABAAAMJIECAAAYSAsfAAAwnTHmC1SgAAAABtp0CVRVHaqqK6rqw1X1wap69NgxAQAAx4bN2MJ3e3efkyRV9e1J/kuSbx03JAAA2MJM4Vuw6SpQR7lXkhuSpKouqKq3Hd5RVb9WVc+ZPP/OqvpkVV1eVb+6+DgAAIChNmMF6viquiLJ7iT3S/K4aQdX1e4k/zPJt3T31VX1uxsQIwAAsAVtxgrU7d19TnefleRJSX67qmrK8Wcluaq7r568XjaBqqo9VXVZVV12xS1/s8YhAwDAJjZ3aLYfG2gzJlALuvsvk5yW5PQkB/Pln2f3Kq+1t7vP6+7zzjn5q9cwSgAAYKvY1AlUVZ2VZHuSLyX5TJKHVNVxVXVqksdPDvurJA+qqjMnr39go+MEAAC2hs28BipJKsmzu/tQks9W1RuTfCzJ1Uk+lCTdfXtVvSDJ26tqX5IPjBE0AABsWqbwLdh0CVR3b5+y78VJXrzMrku6+6zJWqlXJblsveIDAAC2rk3dwrcK/8+kanVlklMyP5UPAABgVTZdBeru6O5XJHnF2HEAAACb2zGRQAEAAPfAnDVQhx0rLXwAAAD3mAQKAABgIC18AADAVG2M+QIVKAAAgIEkUAAAAANp4QMAAKYzhW+BChQAAMBAEigAAICBtPABAADTmcK3QAUKAABgIAkUAADAQFr4AACA6eYOjR3BzFCBAgAAGEgCBQAAMFB199gxzJwdux4wc9+UR51+1tghLPHXt35u7BCW+NLtt4wdwrLuddwJY4ewxIFDB8cOYVM4dfeJY4ewxLW33TR2CJvGoRm88ePuHbvGDmGJO+f8PBhq57bZW/2w/+CBsUNYYhb/ns/i9ylJDh74XI0dwxB3fOKSmfv9eLHj/uljN+z7qAIFAAAwkAQKAABgIAkUAADAQLPXyAsAAMyWGVxTOhYVKAAAgIEkUAAAAANp4QMAAKZrLXyHqUABAAAMJIECAAAYSAsfAAAwnSl8C1SgAAAABpJAAQAADKSFDwAAmKr70NghzAwVKAAAgIEkUAAAAANp4QMAAKZzI90FKlAAAAADSaAAAAAGmukEqqoOVdUVVXVlVX24qv59Va0q5qo6s6o+tl4xAgAAx45ZXwN1e3efkyRV9RVJXp/kXkl+ZsjJVTXrnw8AAGbfnDVQh810BWqx7r4myZ4kP1bzzqyqd1fVByePRydJVV0w2f6WJB9ffI2qelBVfaiqHjHCRwAAADa5TVWh6e6rqmp7kq9Ick2SJ3b3/qr6miS/m+S8yaHnJnlod19dVWcmSVV9bZLfS/Kc7v7whgcPAABsepsqgTrKziS/VlXnJDmU5J8s2vf+7r560evTk1yU5Gnd/WVVqcOqak/mK1yp7adk27YT1ydqAADYbIwxX7BpWviS+Ra8zCdL1yT5d0n+IcnDMl952rXo0H1HnXpTkr9L8pi7unZ37+3u87r7PMkTAACwnE2TQFXV6UkuTPJr3d1JTknyhe6eS/LPk2yfcvqBJE9N8sNV9YPrHiwAALAlzXoL3/FVdUXm2/UOJvmdJP99su/Xk/xBVf1wkrdnadXpy3T3vqr67iTvqKpbu/st6xg3AABsHXOHxo5gZsx0AtXdd1lV6u5PJTl70aaXTLZfmuTSRcd9OslDJ89vTGICHwAAcLdsmhY+AACAsc10BQoAAJgBpvAtUIECAAAYSAIFAAAwkBY+AABgujktfIepQAEAAAwkgQIAABhICx8AADCdKXwLVKAAAAAGkkABAAAMJIECAAAYyBooAABgOmPMF6hAAQAADCSBAgAAGEgLHwAAMJ0WvgUqUAAAAANJoAAAAAbSwrdJ/OW1nxw7hCWeeMbZY4ewxMV3fGzsEJZ18x23jR3CErt37Bo7hCXunDs4dghL3Hlo9mI6cefusUNY1iz+Pb/v8SePHcISN96xb+wQljikNWewnf7peZD9Bw+MHQJrrPvQ2CHMDD8GAAAABpJAAQAADKSFDwAAmE6r7wIVKAAAgIEkUAAAAANp4QMAAKZrLXyHqUABAAAMJIECAAAYSAIFAAAwkDVQAADAdMaYL1CBAgAAGEgCBQAAMJAWPgAAYDpjzBeoQAEAAFteVZ1aVW+qqk9W1Seq6lFVdZ+qekdVfWry9d4rXUcCBQAAHAt+Jcnbu/usJA9L8okkP5Hknd39NUneOXk9lRY+AABguk0+ha+qTknyLUmekyTdfSDJgap6cpILJoe9NsmlSV4y7VoqUAAAwKZWVXuq6rJFjz1HHfLAJNcm+a2q+lBV/UZVnZjkjO7+wuSYLyY5Y6X3UoECAAA2te7em2TvlEN2JDk3yQu7+31V9Ss5ql2vu7uqeqX32rAEqqoOJflokp1JDib57SSv6DbSAwAAZtrm/5X975P8fXe/b/L6TZlPoP6hqu7X3V+oqvsluWalC21kC9/t3X1Od39dkicm+Y4kP3P0QVWlKgYAAKyZ7v5iks9W1ddONj0+yceTvCXJsyfbnp3kopWuNUqy0t3XTPoSP1BVL818sE9LclKS7VX1XZkP/t6Zr1j9VHdflCRV9R+T/FDmexg/m+Ty7v7FqjonyYVJTkjyt0n+RXffUFWXJnlfkscmOTXJc7v73Rv2YQEAgFnwwiSvq6pdSa5K8iOZLyi9saqem+QzSZ6+0kVGq/Z091VVtT3JV0w2nZvk7O6+flKFemp331xVpyV5b1W9Jcl5Sb4v82MHdyb5YJLLJ+f/duZ7Gv+sqv5T5qtb/3ayb0d3n19V3znZ/oSN+IwAALAlbPIpfEnS3VdkPp842uNXc51Zapd7R3dfP3leSX6hqr4lyVySB2R+IsY3Jbmou/cn2V9Vb00WxhKe2t1/Njn/tUl+f9G1/3Dy9fIkZ67rpwAAALas0RKoqnpQkkM5slBr36Ldz0pyepKHd/edVfXpJLvvwdvdMfl6KHfxmScthXuSpLafkm3bTrwHbwcAAGxFo9wHqqpOz/x6pV/r7uVGBZ6S5JpJ8vTYJF812f6eJN9TVbur6qQk350k3X1Tkhuq6psnx/3zJH929EWn6e693X1ed58neQIAAJazkRWo46vqihwZY/47Sf77XRz7uiRvraqPJrksySeTpLs/MFkL9ZEk/5D5seg3Tc55dpILq+qEHFkUBgAA3FNbYA3UWtmwBKq7t0/Z95okr1n0+rokj7qLw3+xu186SZTelckQicmisEcuc+0LjrrumasOHgAAILM1RGKovVX1kMyviXptd39w7IAAAIBjw6ZLoLr7B8eOAQAAjimthe+wUYZIAAAAbEYSKAAAgIE2XQsfAACwwUzhW6ACBQAAMJAECgAAYCAtfAAAwHSm8C1QgQIAABhIAgUAADCQFj4AAGA6U/gWqEABAAAMJIECAAAYSAsfAAAwnSl8C1SgAAAABpJAAQAADCSBAgAAGMgaKAAAYDpjzBdIoDaJ7dtmr1h48bUfGzuEJf7PKY8eO4RlPfmW948dwhL7Dx4YO4QlZvHv+c7ts/dj8sY79o0dwrJm8c/vS7ffMnYIS+zesWvsEJbYOXt/dDNrFn92zqL7Hn/y2CEsMas/O9l8/MgEAAAYaPb+aRUAAJgtWvgWqEABAAAMJIECAAAYSAsfAAAwXffYEcwMFSgAAICBJFAAAAADaeEDAACmM4VvgQoUAADAQBIoAACAgbTwAQAA02nhW6ACBQAAMJAECgAAYCAJFAAAwEDWQAEAANO1NVCHqUABAAAMJIECAAAYSAsfAAAwnTHmCzasAlVVh6rqikWPn5hsv7Sqzrsb1zunqr5zyv7zqupX70nMAAAAi21kBer27j5nDa93TpLzkvyfo3dU1Y7uvizJZWv4fgAAwDFuplr4qurbkvxskuOS/G2SH+nuW6vqEUl+JcmJSe5I8sQk/ynJ8VX1mCT/Jck/TfLgJA9K8ndV9T+TvKi7v7uqTkryyswnXJ3kZ7v7Dzb20wEAwCbVPXYEM2Mjh0gcf1QL3w8s3llVpyX5qSRP6O5zM189+vGq2pXkDUn+TXc/LMkTkuxL8tNJ3tDd53T3GyaXecjk/Gce9d7/MclN3f313X12kovX7VMCAABb1iy18D0y8wnQe6oqSXYl+cskX5vkC939gSTp7puTZHLM0d7S3bcvs/0JSZ5x+EV333D0AVW1J8meJKntp2TbthMHfCQAAOBYMkstfJXkHUdXj6rq61dxjX139827e2+SvUmyY9cD1CgBAOAwU/gWzNJ9oN6b5Juq6quTpKpOrKp/kuSvktxvsg4qVXVyVe1IckuSkwde+x1JfvTwi6q695pGDgAAHBPGXAP1ssU7u/vaJM9J8rtV9ZHMt++d1d0HkvxAkldW1YcznwztTnJJkocst55qGT+f5N5V9bHJNR67th8NAAA4FmxYC193b7+L7Rcsen5xkkcsc8wHMr9G6mhLjl10zqVJLp08vzXJs1cTLwAAMKGFb8EstfABAADMNAkUAADAQLM0hQ8AAJhFrYXvMBUoAACAgSRQAAAAA0mgAAAABrIGCgAAmKrneuwQZoYKFAAAwEASKAAAgIG08AEAANPNGWN+mAoUAADAQBIoAACAgbTwAQAA07UWvsNUoAAAAAaSQAEAAAykhQ8AAJjOjXQXqEABAAAMpAK1SRwye3+Qb7/hz8cOYVnPu/9jxg5hiQs/P3vfq1n8e37bnXeMHcISs/h9Yrj9Bw+MHQKsuxvv2Dd2CEv42clakUABAADTSUAXaOEDAAAYSAIFAAAwkAQKAABgIGugAACA6ayBWqACBQAAMJAECgAAYCAtfAAAwHTdY0cwM1SgAAAABpJAAQAADKSFDwAAmM4UvgUqUAAAAANJoAAAAAbSwgcAAEw3ZwrfYSpQAAAAA0mgAAAABtLCBwAATNem8B2mAgUAADDQTCdQVXWoqq5Y9DhzyrF/sXGRAQAAx6JZb+G7vbvPGXJgdz/66G1VtaO7D659WAAAwLFo1hOoL1NVJyW5KMm9k+xM8lPdfdFk363dfVJVXZDk55LckOSsqvq9JNd39y9PjvvPSa7p7l8Z4zMAAMCmY4z5gllPoI6vqismz69O8s+SPLW7b66q05K8t6re0t1H/4mem+Sh3X31pO3vD5P8clVtS/KMJOdvTPgAAMBWMusJ1Je18FXVziS/UFXfkmQuyQOSnJHki0ed9/7uvjpJuvvTVfWlqvqGybEf6u4vHf1GVbUnyZ4kqe2nZNu2E9flAwEAAJvXrCdQR3tWktOTPLy776yqTyfZvcxx+456/RtJnpPkHyV59XIX7u69SfYmyY5dD1CjBACAiZ4zxvywmZ7Ct4xTMr9+6c6qemySrxp43puTPCnJI5L8yXoFBwAAbG2brQL1uiRvraqPJrksySeHnNTdB6rqkiQ3dveh9QwQAADYumY6geruk456fV2SR007trsvTXLp4n2T4RGPzPwQCgAAYDVM4Vuw2Vr4Vq2qHpLkb5K8s7s/NXY8AADA5jXTFai10N0fT/KgseMAAAA2vy2fQAEAAPdQm8J32JZv4QMAAFgrEigAAICBtPABAADTmcK3QAUKAABgIAkUAADAQFr4AACA6eZM4TtMBQoAAGAgCRQAAMBAEigAAICBrIECAACmM8Z8gQQKAADY8qrq00luSXIoycHuPq+q7pPkDUnOTPLpJE/v7humXUcLHwAAcKx4bHef093nTV7/RJJ3dvfXJHnn5PVUKlAAAMB0vWXHmD85yQWT569NcmmSl0w7QQUKAADY1KpqT1VdtuixZ5nDOsmfVtXli/af0d1fmDz/YpIzVnovFahNYveOXWOHsMT+gwfGDmHTuPDzfz52CEu85rTHjh3CEs+57pKxQ1hi3537xw5hie3bZvPfvg65yeIgs/jn589uOP8/Hmbntln8FfPg2AGwjrp7b5K9Kxz2mO7+XFV9RZJ3VNUnj7pGV9WK0zJm8W83AAAwS7bAFL7u/tzk6zVV9eYk5yf5h6q6X3d/oarul+Sala4ze/8MBgAAsIaq6sSqOvnw8yTfluRjSd6S5NmTw56d5KKVrqUCBQAAbHVnJHlzVSXzOdDru/vtVfWBJG+squcm+UySp690IQkUAAAwVW/ytZLdfVWShy2z/UtJHr+aa2nhAwAAGEgCBQAAMJAWPgAAYLotMIVvrahAAQAADCSBAgAAGEgCBQAAMJA1UAAAwHTWQC1QgQIAABhIAgUAADCQFj4AAGC6nhs7gpmhAgUAADCQBAoAAGAgLXwAAMB0pvAtUIECAAAYaF0TqKo6VFVXLHqcWVV/MeC8T1fVactsv6CqHr3o9fOq6ofXOm4AAIDlrHcL3+3dfc5R2x697JHDXJDk1iR/kSTdfeE9uBYAADBAa+FbsOFroKrq1u4+qaq2Jfm1JI9L8tkkdyZ5dXe/aXLoC6vqe5LsTPLPkuxP8rwkh6rqh5K8MMnjk9za3b9YVZcmeV+SxyY5Nclzu/vdVXVCktckeWiSv0py/yQ/2t2XbcgHBgAAtoz1TqCOr6orJs+v7u6nLtr3tCRnJnlIkq9I8okkr160/7ruPreqXpDkRd39L6vqwkwSpiSpqscf9X47uvv8qvrOJD+T5AlJXpDkhu5+SFU9NMkVAQAAuBvGaOE77DFJfr+755J8saouOWr/H06+Xp75ZGuIxeecueh9fiVJuvtjVfWRgdcCAAASU/gWmeUpfHdMvh7K8ETv7pyTJKmqPVV1WVVdNje3bzWnAgAAx4gxE6j3JPm+qtpWVWdkfkDESm5JcvLdeJ+nJ0lVPSTJ1y93UHfv7e7zuvu8bdtOXOVbAAAAx4Ixb6T7B5kfAvHxzA+R+GCSm1Y4561J3lRVT878EIkhfj3Ja6vq40k+meTKAe8DAAAcNjc3dgQzY10TqO4+6a62dfdcVb2ou2+tqvsmeX+Sj072nbno+MsyqU51918nOXvR5d696LgLFj2/LkfWQO1P8kPdvb+qHpzk/yb5zD3/dAAAwLFmzApUkrytqk5NsivJz3X3F9fhPU5IcklV7UxSSV7Q3QfW4X0AAIAtbtQEanHVaB3f45Yk5633+wAAAFvf2BUoAABg1hljvmCWx5gDAADMFAkUAADAQFr4AACA6bTwLVCBAgAAGEgCBQAAMJAWPgAAYKpuLXyHqUABAAAMJIECAAAYSAsfAAAwnSl8C1SgAAAABpJAAQAADKSFDwAAmE4L3wIVKAAAgIEkUAAAAANJoAAAAAayBmoZu3fsGjuEJe6cOzh2CEts3zZ7+fehubmxQ9g0fvrAlWOHsMT7zzhv7BCW+P7b/27sEJb43K3XjR3CpjGLP8/3HzwwdghL+D5tbrP4/+NZ/L2Fe6atgVowe//FAQAAzCgJFAAAwEBa+AAAgOm08C1QgQIAABhIAgUAADCQFj4AAGA6g44XqEABAAAMJIECAAAYSAsfAAAwlRvpHqECBQAAMJAECgAAYCAtfAAAwHRa+BaoQAEAAAwkgQIAABhIAgUAADCQNVAAAMB0c2MHMDtUoAAAAAaSQAEAAAy0KVv4qupQko8u2vSUJK/v7kePFBIAAGxZbYz5gk2ZQCW5vbvPOWrbkuSpqnZ098ENigkAANjitkwLX1XdOvl6QVW9u6rekuTjVbW9qv5bVX2gqj5SVf9q5FABAIBNarNWoI6vqismz6/u7qcetf/cJA/t7qurak+Sm7r7EVV1XJL3VNWfdvfVGxoxAABsVqbwLdisCdRyLXyLvX9RgvRtSc6uqu+fvD4lydck+bIEapJo7UmSXTvvm507Tl7jkAEAgM1usyZQK9m36HkleWF3/8m0E7p7b5K9SXLSCQ+0Sg4AAFhiqyZQi/1JkudX1cXdfWdV/ZMkn+vufSudCAAAmMK32LGQQP1GkjOTfLCqKsm1mR97DgAAsCqbMoHq7pPualt3X5rk0kXb55L8h8kDAADgbtuUCRQAALCBTOFbsGXuAwUAALDeJFAAAAADaeEDAACmai18C1SgAAAABpJAAQAADCSBAgAAGMgaKAAAYDproBaoQAEAAAwkgQIAABhICx8AADCVMeZHqEABAAAMJIECAAAYSAsfAAAwnRa+BSpQAAAAA0mgAAAABtLCBwAATGUK3xESqGXsP3hg7BA2hd07do0dwhKH5vzZDfV3N18zdghLnD+DMd3ruBPGDmGJQ3P+LzaUn+fD+D4N53s1zPZtmpzYuvztBgAAGEgFCgAAmEoL3xEqUAAAAANJoAAAAAaSQAEAAAxkDRQAADCVNVBHqEABAAAMJIECAAAYSAsfAAAwXdfYEcwMFSgAAICBJFAAAAADaeEDAACmMoXvCBUoAACAgSRQAAAAA2nhAwAApuo5U/gOU4ECAAAYSAIFAAAwkBY+AABgKlP4jpiJClRVHaqqKxY9zqyqC6rqbSuc97yq+uGNihMAADi2zUoF6vbuPmfxhqo6c6WTuvvC9QoIAADgaDNRgZqmqrZV1aeq6vRFr/+mqk6vqpdW1Ysm2y+tqpdX1fur6q+r6psn20+oqjdW1cer6s1V9b6qOm/MzwQAAJtJd830YyPNSgJ1/KL2vTcv3tHdc0n+V5JnTTY9IcmHu/vaZa6zo7vPT/Jvk/zMZNsLktzQ3Q9J8h+TPHxdPgEAALDlzUoCdXt3nzN5PHWZ/a9Ocnit079I8lt3cZ0/nHy9PMmZk+ePSfJ7SdLdH0vykeVOrKo9VXVZVV02N7fvbnwEAABgllXV9qr60OFZC1X1wEmH2t9U1RuqatdK15iVBGqq7v5skn+oqsclOT/JH9/FoXdMvh7KKtd3dffe7j6vu8/btu3Eux8sAAAwq/5Nkk8sev3yJK/o7q9OckOS5650gU2RQE38RuZb+X6/uw+t4rz3JHl6klTVQ5J8/TrEBgAAW1bPzfZjiKr6yiTflfm8IlVVSR6X5E2TQ16b5CkrXWczJVBvSXJS7rp97678epLTq+rjSX4+yZVJblrj2AAAgJEsXo4zeexZ5rBfTvLiJIdTrvsmubG7D05e/32SB6z0XjMxxry7T1pm26VJLl206WGZHx7xyUXHvHTR8wsWPb8uR9ZA7U/yQ929v6oenOT/JvnMmgUPAACMqrv3Jtl7V/ur6ruTXNPdl1fVBffkvWYigVpJVf1EkufnyCS+1TghySVVtTNJJXlBdx9Yy/gAAGAr67mNHRW+Dr4pyfdW1Xcm2Z3kXkl+JcmpVbVjUoX6yiSfW+lCm6KFr7tf1t1f1d1/fjfOvWUyHOJh3X12d9/VAAoAAGAL6u6f7O6v7O4zkzwjycXd/awklyT5/slhz05y0UrX2hQJFAAAwDp4SZIfr6q/yfyaqN9c6YRN0cIHAACMp3vsCNbO4lkL3X1V5m+TNJgKFAAAwEASKAAAgIG08AEAAFNtgSl8a0YFCgAAYCAJFAAAwEBa+AAAgKm08B2hAgUAADCQBAoAAGAgCRQAAMBA1kABAABTdY8dwexQgQIAABhIAgUAADCQFj4AAGAqY8yPkEBtEtu3zV6x8M65g2OHsGnM4p/fobm5sUNY4l7HnTB2CJvCE884e+wQlvXRfZ8dO4Qlbty/b+wQlth/8MDYIWwKs/rz4OY7bhs7hE1hFv8fA2tl9n6rAwAAmFEqUAAAwFTdWvgOU4ECAAAYSAIFAAAwkBY+AABgqjYXZIEKFAAAwEASKAAAgIG08AEAAFPNmcK3QAUKAABgIAkUAADAQBIoAACAgayBAgAApmproBaoQAEAAAwkgQIAABhICx8AADBVz2nhO2xwBarm/VBV/fTk9T+uqvPXLzQAAIDZspoWvl9P8qgkz5y8viXJq9Y8IgAAgBm1mha+b+zuc6vqQ0nS3TdU1a51igsAAJgR3WNHMDtWU4G6s6q2J+kkqarTk8ytVSBVdUZVvb6qrqqqy6vqL6vqqVX1nKr6tTW4/nOq6v5rESsAAHBsWk0C9atJ3pzkjKr6z0n+PMkvrEUQVVVJ/ijJu7r7Qd398CTPSPKVa3H9ieckkUABAAB32+AWvu5+XVVdnuTxk01P6e5PrFEcj0tyoLsvXPR+n0nyyqp6TpL7V9Xbkzw4yZu7+8VJUlXPTPIfklSS/93dL5lUyX4zyXmZr5a9OslnJ69fV1W3J3lUd9++RrEDAMCWZgrfEasdY35CksNtfMevYRxfl+SDU/afk+QbktyR5K+q6pVJDiV5eZKHJ7khyZ9W1VMynyw9oLsfmiRVdWp331hVP5bkRd192RrGDQAAHENWM8b8p5O8Nsl9kpyW5Leq6qfWI6iqelVVfbiqPjDZ9M7uvqm79yf5eJKvSvKIJJd297XdfTDJ65J8S5Krkjyoql5ZVU9KcvPA99xTVZdV1WVzc/vW/kMBAACb3moqUM9K8rBJEpOqelmSK5L8/BrEcWWS7zv8ort/tGnmckcAACAASURBVKpOS3K4WnTHomMPZUrck+mAD0vy7Umel+TpSf7FSgF0994ke5Nkx64HmDMCAAATc62F77DVDJH4fJLdi14fl+RzaxTHxUl2V9XzF207YYVz3p/kW6vqtMm6p2cm+bNJ4rWtu/8gyU8lOXdy/C1JTl6jeAEAgGPQaipQNyW5sqrekfk1UE9M8v6q+tUk6e5/fXeD6O6erF96RVW9OMm1SfYleUnuYq1Vd3+hqn4iySU5MkTiokn16beq6nBy+JOTr69JcqEhEgAAwN1VPfCuWFX17Gn7u/u1axLRDJjFFr7t21ZTLDx2HZpbs1uTralZ/PObxe/VvY5bqfBMknzjqV89dgjL+ui+z44dwhI37p+9Na37Dx4YO4RNYVZ/Htx8x21jh8AWc/DA5zZFb9xHH/g9M/f78WJff/VbN+z7uJoK1PWZr/LM3m9dAAAAG2A1/yz+A0k+VVX/tarOWq+AAAAAZtXgBKq7fyjz92L62ySvqaq/nIz+NpgBAAA4JqxqYUZ335zkTUl+L8n9kjw1yQer6oXrEBsAADADumf7sZFWcyPdJ1fVm5NcmmRnkvO7+zuSPCzJv1+f8AAAAGbHaoZIPC3JK7r7XYs3dvdtVfXctQ0LAABg9qwmgfri0clTVb28u1/S3e9c47gAAIAZMdebYtr6hljNGqgnLrPtO9YqEAAAgFm3YgWqqp6f5AVJHlxVH1m06+Qk71mvwAAAAGbNkBa+1yf54yT/JclPLNp+S3dff/hFVd27u29Y4/gAAICRtRa+BSsmUN19U5KbkjxzhUPfmeTctQgKAABgFq3qPlArkJYCAABb2mqm8K1kg29hBQAAbISNvlntLFvLChQAAMCWpoUPAABgoMEtfFX1S0le3d1X3sUhj1+bkAAAgFniRrpHrKYC9Ykke6vqfVX1vKo6ZfHOxSPNAQAAtqLBCVR3/0Z3f1OSH05yZpKPVNXrq+qx6xUcAADALFnVFL6q2p7krMnjuiQfTvLjVfWvuvsZ6xAfEyfu3D12CJvCzXfcNnYIyzr9hFNWPmiD3XbnHWOHsMQs/vk96JT7jR3CEhdf+7GxQ1jWF7/rwWOHsMQ/+t83jR3CErt37Bo7hCX2HzwwdghLfNO9v3bsEJb1nhv+auwQlpjFn533Ou6EsUNYYha/T2xOq1kD9Yok353k4iS/0N3vn+x6eVXN3k8TAABgTbQ1UAsGJVBVVUmuT3JOd+9b5pDz1zQqAACAGTRoDVR3d5Kn30XylO6evR4JAACANbaaNVAfrKpHdPcH1i0aAABg5hhjfsRqEqhvTPKsqvpMkn2Zv3Fud/fZ6xIZAADAjFlNAvXt6xYFAADAJjA4geruzyRJVX1FEjO1AQDgGNFjBzBDBt9It6q+t6o+leTqJH+W5NNJ/nid4gIAAJg5gxOoJD+X5JFJ/rq7H5jk8Uneuy5RAQAAzKDVrIG6s7u/VFXbqmpbd19SVb+8bpEBAAAzwRS+I1aTQN1YVScleVeS11XVNZmfxgcAAHBMWE0L35OT3J7k3yV5e5K/TfI96xEUAADALFrNFL59SVJV90ry1nWLCAAAmCmthW/B4ASqqv5Vkp9Nsj/JXCY30k3yoPUJDQAAYLasZg3Ui5I8tLuvW69gAAAAZtlqEqi/TXLbegUCAADMprmxA5ghq0mgfjLJX1TV+5LccXhjd//rNY8KAABgBq0mgfqfSS5O8tFIQgEAgGPQahKond394+sWSZKqOiPJK5I8MskNSQ4k+a/d/eb1fF8AAIAhVpNA/XFV7cn8CPPFLXzXr0UgVVVJ/ijJa7v7ByfbvirJ9x513I7uPrgW7wkAAKysY4z5YatJoJ45+fqTi7at5RjzxyU50N0XLly8+zNJXllVz0nytCQnJdleVd+V5KIk906yM8lPdfdFVXVikjcm+cok25P8XHe/oapelvlE7GCSP+3uF61RzAAAwDFkNTfSfeB6BpLk65J8cMr+c5Oc3d3XV9WOJE/t7pur6rQk762qtyR5UpLPd/d3JUlVnVJV903y1CRndXdX1anr/DkAAIAtasUEqqoe190XV9XTltvf3X+49mElVfWqJI/J/DqoVyV5x6J2wUryC1X1LZkfaPGAJGdkfsDFL1XVy5O8rbvfPUm29if5zap6W5K33cX77UmyJ0lq+ynZtu3E9fhYAACw6cz12BHMjiEVqG/N/PS971lmXydZqwTqyiTft3Dh7h+dVJcum2zat+jYZyU5PcnDu/vOqvp0kt3d/ddVdW6S70zy81X1zu7+T1V1fpLHJ/n+JD+W+XbBL/8g3XuT7E2SHbse4K8IAACwxIoJVHf/TFVtS/LH3f3GdYzl4sxXlZ7f3f9jsu2Euzj2lCTXTJKnxyb5qiSpqvsnub67/1dV3ZjkX1bVSUlO6O7/U1XvSXLVOn4GAABgCxu0Bqq756rqxZkf0LAuJuuTnpLkFZP3ujbzVaeXJDn+qMNfl+StVfXRzFeoPjnZ/vVJ/ltVzSW5M8nzk5yc5KKq2p351r91HcUOAABbzZwpfAtWM4Xv/1bVi5K8IYva6dZqjPnkWl9I8oy72P2aRcddl+RRyxzz6SR/ssz28+9pbAAAAKtJoH4g82ueXnDU9rUaYw4AADDTVpNAPSTzydNjMp9IvTvJhVPPAAAANj030j1iNQnUa5PcnORXJ69/cLLt6WsdFAAAwCxaTQL10O5+yKLXl1TVx9c6IAAAgFm1mgTqg1X1yO5+b5JU1TfmyD2aAACALWpu7ABmyGoSqIcn+Yuq+rvJ63+c5K8mo8S7u89e8+gAAABmyGoSqCetWxQAAACbwOAEqrs/s56BAAAAzLrVVKAAAIBjkDHmR2wbOwAAAIDNQgIFAAAwkBY+AABgKmPMj1CBAgAAGEgCBQAAMJAWPgAAYCotfEeoQAEAAAwkgQIAABhICx9324FDB8cOYYnt22bz3wS+eOsNY4fA3XTd/pvGDmGJE3fuHjuEZZ3+1k+NHcIS//z+jxw7hCV+5/PvHTuEJWbxZ+cff/FDY4ewrN07do0dwhL3Ou6EsUNYYt+d+8cOgTXmRrpHzN5PTAAAgBklgQIAABhICx8AADDVnA6+BSpQAAAAA0mgAACALa2qdlfV+6vqw1V1ZVX97GT7A6vqfVX1N1X1hqpacVKMBAoAANjq7kjyuO5+WJJzkjypqh6Z5OVJXtHdX53khiTPXelCEigAAGCqudRMP1bS826dvNw5eXSSxyV502T7a5M8ZaVrSaAAAIBNrar2VNVlix57ljlme1VdkeSaJO9I8rdJbuzuwzc3/fskD1jpvUzhAwAANrXu3ptk7wrHHEpyTlWdmuTNSc66O+8lgQIAAKbqsQNYQ919Y1VdkuRRSU6tqh2TKtRXJvncSudr4QMAALa0qjp9UnlKVR2f5IlJPpHkkiTfPzns2UkuWulaKlAAAMBWd78kr62q7ZkvIr2xu99WVR9P8ntV9fNJPpTkN1e6kAQKAACYam7sAO6h7v5Ikm9YZvtVSc5fzbW08AEAAAwkgQIAABhICx8AADDVXK18s9pjhQoUAADAQBIoAACAgTY0gaqqM6rq9VV1VVVdXlV/WVVP3cD3P7OqPrZR7wcAAFtBz/hjI21YAlVVleSPkryrux/U3Q9P8ozM3/F38XHWZQEAADNpIytQj0tyoLsvPLyhuz/T3a+squdU1Vuq6uIk76yq+1TVH1XVR6rqvVV1dpJU1Uur6kWHz6+qj02qSmdW1Seq6v+rqiur6k8ndxhOVT28qj5cVR9O8qMb+HkBAIAtZiMTqK9L8sEp+89N8v3d/a1JfjbJh7r77CT/IclvD7j+1yR5VXd/XZIbk3zfZPtvJXlhdz/sbkcOAADHsLkZf2yk0YZIVNWrJpWhD0w2vaO7r588f0yS30mS7r44yX2r6l4rXPLq7r5i8vzyJGdW1alJTu3ud022/86UePZU1WVVddnc3L679ZkAAICtbSMTqCszX2VKknT3jyZ5fJLTJ5uGZC0H8+Ux7170/I5Fzw9llfe46u693X1ed5+3bduJqzkVAAA4RmxkAnVxkt1V9fxF2064i2PfneRZSVJVFyS5rrtvTvLpTJKwqjo3yQOnvWF335jkxqp6zGTTs+5u8AAAABs28a67u6qekuQVVfXiJNdmvur0kiTHH3X4S5O8uqo+kuS2JM+ebP+DJD9cVVcmeV+Svx7w1j8yuVYn+dN7/EEAAOAYM1djRzA7NnRkeHd/IfOjy5fzmkXHXZ/kKcucf3uSb7uL8x+66LhfXPT88iSLB0i8eHjEAAAAR4w2RAIAAGCzcdNaAABgqrno4TtMBQoAAGAgCRQAAMBAWvgAAICpeuwAZogKFAAAwEASKAAAgIG08AEAAFO5ke4RKlAAAAADSaAAAAAG0sIHAABMNTd2ADNEBQoAAGAgCRQAAMBAEigAAICBrIECAACm6rEDmCEqUAAAAANJoAAAAAbSwreM3Tt2jR3CEjffcdvYIcAx6cChg2OHsMSdc7MX06y66EsfGTuEJZ5yv4ePHcISf/SFy8cOYdPYtX32fnXyO8Iw9zruhLFD2NTmauwIZocKFAAAwEASKAAAgIFmrw4NAADMlLmxA5ghKlAAAAADSaAAAAAG0sIHAABMpYXvCBUoAACAgSRQAAAAA2nhAwAApmo30l2gAgUAADCQBAoAAGAgLXwAAMBUpvAdoQIFAAAwkAQKAABgIAkUAADAQNZAAQAAU1kDdYQKFAAAwEASKAAAgIG2RAtfVd3a3SeNHQcAAGxFPXYAM0QFCgAAYKAtl0BV1Uuq6qNV9eGqetlk24Or6u1VdXlVvbuqzho7TgAAYPPZEi18h1XVdyR5cpJv7O7bquo+k117kzyvuz9VVd+Y5NeTPG6sOAEAYDOZq7EjmB1bKoFK8oQkv9XdtyVJd19fVScleXSS369a+JM/7ugTq2pPkj1JsmvnfbNzx8kbEzEAALBpbLUEajnbktzY3edMO6i792a+UpWTTnigdXIAAMASW20N1DuS/EhVnZAkVXWf7r45ydVV9c8m26qqHjZmkAAAsJnMzfhjI22pBKq7357kLUkuq6orkrxosutZSZ5bVR9OcmXm10kBAACsypZo4Vt8D6juflmSlx21/+okT9rouAAAgK1lSyRQAADA+tnoNrlZtqVa+AAAANaTBAoAAGAgCRQAAMBA1kABAABTuUnqESpQAAAAA0mgAAAABtLCBwAATDVXY0cwO1SgAAAABpJAAQAADKSFDwAAmGpu7ABmiAoUAADAQBIoAACAgbTwAQAAU7mR7hEqUAAAAANJoAAAAAbSwgcAAEw1p4lvgQRqGfsPHhg7hE1h+7bZK2AempvNIZv3Pf7ksUNY4s65Q2OHsMTNd9w2dghL/OJ9v2nsEJb4sX+4ZOwQlrV7x66xQ1hi3537xw5hiT/6wuVjh7DE7Z9/99ghLHH8/b957BCWtXPb9rFD4G6axZ8HbE6z9xswAADAjJJAAQAADKSFDwAAmGo2F0mMQwUKAABgIAkUAADAQFr4AACAqQwxP0IFCgAAYCAJFAAAwEBa+AAAgKlM4TtCBQoAAGAgCRQAAMBAWvgAAICp5mrsCGaHChQAAMBAEigAAICBtPABAABTzbmV7gIVKAAAgIEkUAAAAANp4QMAAKbSwHfEhlagqqqr6pcWvX5RVb10g2O4tKrO28j3BAAAtoaNbuG7I8nTquq0u3NyVamYAQAAo9nohORgkr1J/l2S/3fxjqo6M8mrk5yW5NokP9Ldf1dVr0myP8k3JHlPVd0n+f/bu/Nwycrq7vvfXzfNLDgRgqigKBhERAQjOOEYjThEcY6C+ogmxgF9YtSYmBhNHOLwBBO1RSYlRpCoqK8ioqKCgsyDihqUqCCKyDx2n/X+sffpLs45fbq67a57d/f3w3WurtpVu2pVnaLOXvte97q5qb/+B8BLgBcB+wCnV9VB/eN9CNgb2Az4dFW9de2+NEmSJEnruxZNJP4deEGSrWdsPxQ4qqp2B44B/m3ktrsD+1bV6/rrd6JLmA4BTgDeD9wfeECSPfr7/G1V7QXsDjwqye5r5dVIkiRJ67mpgf9M0sQTqKq6FjgaePWMm/YB/rO//HHg4SO3HVdVS0euf76qCrgAuKKqLqiqKeAiYMf+Ps9OcjZwDl1ytesafSGSJEmSNjit2ph/AHgpsMWY979hxvVb+n+nRi5PX98oyb2A/ws8th/R+iKw6XxPkOTgJGcmOXNqaubTSZIkSVKjBKqqrgKOpUuipp0GPLe//ALgW7/HU2xFl3Rdk2Rb4EljxLS4qvaqqr0WLBg3r5MkSZLWf1PUoH8mqeVCuu+laxgx7VXAi5OcD7wQeM3qPnBVnUdXuvdDurLAU3+POCVJkiQJmHAXvqracuTyFcDmI9cvBR4zxz4Hreh6Vf0M2G0Ft91uv5Ht+61y4JIkSZLE5NuYS5IkSVrHTLZIbthalvBJkiRJ0jrFBEqSJEmSxmQJnyRJkqR5TXqx2iFzBEqSJEmSxmQCJUmSJGm9luQeSb6e5PtJLkrymn77nZOclOTH/b93WtljmUBJkiRJmlfrhXLXwEK6S4DXV9WuwEOBVybZFXgjcHJV3Rc4ub8+LxMoSZIkSeu1qrq8qs7uL18H/ADYHngacFR/t6OAp6/ssUygJEmSJK3Tkhyc5MyRn4Pnue+OwIOA04Ftq+ry/qZfAduu7LnswidJkiRpnVZVi4HFK7tfki2B44HXVtW1SUYfo5KstB7QBEqSJEnSvMaaZTRwSRbRJU/HVNV/95uvSLJdVV2eZDvg1yt7HEv4JEmSJK3X0g01fQz4QVW9b+SmE4AD+8sHAp9b2WM5AiVJkiRpffcw4IXABUnO7be9GXgncGySlwKXAs9e2QOZQEmSJEma11TrAH5PVfVtICu4+bGr8liW8EmSJEnSmEygJEmSJGlMlvBJkiRJmletF3341gxHoCRJkiRpTI5AzWHhguHllVss2rR1COuEa2+5sXUIc/rtTde1DmGWrTbZvHUIs2y60catQ5jlzVef3jqEdcbNS25tHcIsQ/xMLZ0a3vu02d0e0TqEWZ693UNahzCnYy8/o3UIWk0eS2lNMYGSJEmSNK91vQvfmjS8oRZJkiRJGigTKEmSJEkakyV8kiRJkuY1ZRe+ZRyBkiRJkqQxmUBJkiRJ0pgs4ZMkSZI0Lwv4lnMESpIkSZLGZAIlSZIkSWMygZIkSZKkMTkHSpIkSdK8bGO+nCNQkiRJkjQmEyhJkiRJGpMlfJIkSZLmNdU6gAFxBEqSJEmSxmQCJUmSJEljsoRPkiRJ0rzKLnzLOAIlSZIkSWNqmkAlWZrk3CQXJjkuyebz3PepSd44yfgkSZIkaVTrEaibqmqPqtoNuBV4xYruWFUnVNU7JxeaJEmSJOi68A35Z5JaJ1CjvgXcJ8mdk3w2yflJvptkd4AkByX5YH/5Wf2o1XlJvtlv2zTJEUkuSHJOkkeP7PffSb6c5MdJ3t3sFUqSJElapw2iiUSSjYAnAV8G/hE4p6qenuQxwNHAHjN2+XvgT6rql0nu2G97JVBV9YAk9wO+kmTn/rY9gAcBtwAXJzm0qn6+ll+WJEmSpPVM6xGozZKcC5wJ/C/wMeDhwMcBquprwF2SbDVjv1OBI5O8DFjYb3s48Il+vx8ClwLTCdTJVXVNVd0MfB/YYWYgSQ5OcmaSM5cuvX5NvkZJkiRpnVYD/2+SWo9A3VRVtxtdSrLSnarqFUn+GHgycFaSB69kl1tGLi9ljtddVYuBxQCbbHoP+zRKkiRJmqX1CNRcvgW8ACDJfsCVVXXt6B2S7FRVp1fV3wO/Ae4xY7+dgXsCF08wbkmSJEnrudYjUHP5B+DwJOcDNwIHznGf9yS5LxDgZOA84IfAh5JcACwBDqqqW8YZ0ZIkSZKkcTRNoKpqyzm2XQU8fY7tRwJH9pefMcfD3Qy8eL79+uv7r2a4kiRJ0gZp0q3Ch2yIJXySJEmSNEgmUJIkSZI0piHOgZIkSZI0IFNlk+ppjkBJkiRJ0phMoCRJkiRpTJbwSZIkSZqXBXzLOQIlSZIkSWMygZIkSZKkMVnCJ0mSJGleUxbxLeMIlCRJkiSNyQRKkiRJksZkCZ8kSZKkeZUlfMs4AiVJkiRJYzKBkiRJkqQxmUBJkiRJ0picAyVJkiRpXlOtAxgQR6AkSZIkaUyOQM1h6dTwcuwbbru5dQj6Pdx76+1ahzDLpddd0TqEdcLdtrhL6xBmWbRgYesQ5nT1LTe0DmGWm5fc2jqEWRYu8NzlOI69/IzWIczpwh0f2DqEWXb72XmtQ5hl0402bh3CLNfecmPrELSeMIGSJEmSNK8p25gv42kwSZIkSRqTCZQkSZIkjckSPkmSJEnzKkv4lnEESpIkSZLGZAIlSZIkSWOyhE+SJEnSvIa3yE87jkBJkiRJ0phMoCRJkiRpTJbwSZIkSZpXlV34pjkCJUmSJEljMoGSJEmSpDFZwidJkiRpXlMupLuMI1CSJEmSNCYTKEmSJEkakwmUJEmSJI3JOVCSJEmS5jXVOoABcQRKkiRJksY0sQQqydIk5ya5MMlxSTZfQ497ZJID5th+tySfXhPPIUmSJEkw2RGom6pqj6raDbgVeMXafLKquqyqZiVWkiRJklZNDfy/SWpVwvct4D5JtkvyzZGRqUckeUmSD0zfMcnLkry/v/yiJOcnOS/Jx0ce75FJTktyyfRoVJIdk1zYX16Y5F/75zg/yasm+WIlSZIkrR8m3kQiyUbAk4AvA88HTqyqdyRZCGwOnAP8bZK/rqrbgBcDL09yf+AtwL5VdWWSO4887HbAw4H7AScAM0v3DgZ2BPaoqiUz9pUkSZKksUwygdosybn95W8BHwMeChyeZBHw2ao6FyDJ14D9k/wAWFRVF/SjRsdV1ZUAVXXVyGN/tqqmgO8n2XaO534c8OGqWjLHvvTPeTBdokUWbs2CBVusgZcsSZIkrfumJlwmN2STTKBuqqo9Zmz7ZpJHAk8Gjkzyvqo6GjgMeDPwQ+CIMR77lpHLWZ3gqmoxsBhgo4239xMiSZIkaZambcyT7ABcUVUfpUua9gSoqtOBe9CV+H2yv/vXgGcluUu/76qU4Z1EVwa40WrsK0mSJElA+4V09wP+OsltwPXAi0ZuO5ZuztLvAKrqoiTvAE5JspRurtRBYz7PYcDOwPn9c30U+OAaeQWSJEnSeq7KAq1pE0ugqmrLObYdBRy1gl0eDrx/ZfevqoPmep6q+hmwW395CfC6/keSJEmSVkvTEr65JLljkh/RzZk6uXU8kiRJkjStdQnfLFV1NV25nSRJkqQBmGodwIAMbgRKkiRJkobKBEqSJEmSxmQCJUmSJEljGtwcKEmSJEnDUtjGfJojUJIkSZI0JhMoSZIkSRqTJXySJEmS5jVlCd8yjkBJkiRJ0phMoCRJkiRpTJbwSZIkSZpXlSV80xyBkiRJkqQxmUBJkiRJ0pgs4ZMkSZI0L7vwLecIlCRJkiSNyQRKkiRJksZkCd8cNt1o49YhzHLb1JLWIcyyaMHwPj5Lp25tHcKcLrvht61DWCcM8TN1za3Xtw5hlt/edF3rEOY0xO/O7be8Y+sQZvn1jVe3DmGWm5cM77tz4YJhnuPd6xc/aB3CLI/fdvfWIcxy9rU/bR3CLH+w+fC+D9YlZQnfMsP8dpIkSZKkATKBkiRJkqQxDa9eRpIkSdKgTLmQ7jKOQEmSJEnSmEygJEmSJGlMJlCSJEmSNCbnQEmSJEmalzOglnMESpIkSZLGZAIlSZIkSWOyhE+SJEnSvKYs4lvGEShJkiRJGpMJlCRJkiSNyRI+SZIkSfOyhG85R6AkSZIkaUwmUJIkSZLWe0kOT/LrJBeObLtzkpOS/Lj/904rexwTKEmSJEnzqqpB/4zpSOCJM7a9ETi5qu4LnNxfn5cJlCRJkqT1XlV9E7hqxuanAUf1l48Cnr6yxzGBkiRJkrSh2raqLu8v/wrYdmU7DD6BSrI0yblJLkzy+SR3XI3H2C/JF9ZGfJIkSdL6booa9E+Sg5OcOfJz8Kq+xupqAVdaDzj4BAq4qar2qKrd6IbcXtk6IEmSJEnDUVWLq2qvkZ/FY+56RZLtAPp/f72yHdaFBGrUd4DtAZLskeS7Sc5P8pnpjhlJ7pPkq0nOS3J2kp1GHyDJ3knOmbldkiRJ0gbnBODA/vKBwOdWtsM6k0AlWQg8lu5FAhwN/E1V7Q5cALy1334M8O9V9UBgX+DykcfYF/gw8LSq+p9JxS5JkiSprSSfpBuQ2SXJL5K8FHgn8PgkPwYe11+f10ZrN8w1YrMk59KNPP0AOCnJ1sAdq+qU/j5HAccluQOwfVV9BqCqbgZIAvBHwGLgCVV12YRfgyRJkrTOqpVPDRq8qnreCm567Ko8zrowAnVTVe0B7ACE1Z8DdTlwM/CguW4cnXh225LrVvMpJEmSJK3P1oUECoCquhF4NfB64Abgd0ke0d/8QuCUqroO+EWSpwMk2STJ5v19rgaeDPxLkv3mePxlE88WbXSHtfxqJEmSJK2L1oUSvmWq6pwk5wPPo5vk9eE+QboEeHF/txcCH0nyNuA24Fkj+1+RZH/gS0leUlWnT/YVSJIkSeuersO3YB1IoKpqyxnXnzJy9aFz3P/HwGNmbL4E+EZ/+/8C91+zUUqSJEnaEKwzJXySJEmS1NrgR6AkSZIktTW1HnThW1McgZIkSZKkMZlASZIkSdKYLOGTJEmSNC+78C3nCJQkSZIkjckESpIkSZLGZAmfJEmSpHnZhW85R6AkSZIkaUwmUJIkSZI0JhMoSZIkSRqTc6AkSZIkzaucA7WMI1CSJEmSNCYTKEmSJEkakyV8kiRJkuY1VZbwTXMESpIkSZLGZAIlSZIkSWOyhE+SJEnSvOzCt5wJ1BxuXnJr6xDWCYscvxzbshcVzQAAIABJREFUxguH97/abVNLWocwi//vjWerTTZvHcKcrr3lxtYhzPLL669sHcIsS6emWoewThjq+7T9lndsHcIsp1/9k9YhzLLjltu2DmGW83/709YhaD3hIbAkSZIkjWl4p8UlSZIkDYpd+JZzBEqSJEmSxmQCJUmSJEljsoRPkiRJ0rzswrecI1CSJEmSNCYTKEmSJEkakyV8kiRJkuZlF77lHIGSJEmSpDGZQEmSJEnSmEygJEmSJGlMzoGSJEmSNC/bmC/nCJQkSZIkjckESpIkSZLGZAmfJEmSpHnZxnw5R6AkSZIkaUwmUJIkSZI0Jkv4JEmSJM3LLnzLDXoEKsnfJrkoyflJzk3yx0lem2Tz3+Mxj0xywJqMU5IkSdKGYbAjUEn2AfYH9qyqW5LcFdgY+BTwCeDGlvFJkiRJ2vAMeQRqO+DKqroFoKquBA4A7gZ8PcnXAZI8Icl3kpyd5LgkW/bbH5zklCRnJTkxyXatXogkSZK0LquaGvTPJA05gfoKcI8kP0ryH0keVVX/BlwGPLqqHt2PSr0FeFxV7QmcCbwuySLgUOCAqnowcDjwjkavQ5IkSdJ6YrAlfFV1fZIHA48AHg18KskbZ9ztocCuwKlJoCvx+w6wC7AbcFK/fSFw+XzPl+Rg4GCALNyaBQu2WHMvRpIkSdJ6YbAJFEBVLQW+AXwjyQXAgTPuEuCkqnre7TYmDwAuqqp9VuG5FgOLATbaeHvbjEiSJEm9KbvwLTPYEr4kuyS578imPYBLgeuAO/Tbvgs8LMl9+n22SLIzcDGwTd+IgiSLktx/ctFLkiRJWh8NeQRqS+DQJHcElgA/oSuxex7w5SSX9fOgDgI+mWSTfr+3VNWP+lbl/5Zka7rX+QHgoom/CkmSJEnrjcEmUFV1FrDvHDcd2v9M3+9rwN5z7H8u8Mg5th+05qKUJEmStCEZbAIlSZIkaRiqnAM1bbBzoCRJkiRpaEygJEmSJGlMlvBJkiRJmpdtzJdzBEqSJEmSxmQCJUmSJEljsoRPkiRJ0rzswrecI1CSJEmSNCYTKEmSJEkakyV8kiRJkuY1ZQnfMo5ASZIkSdKYTKAkSZIkaUyW8EmSJEmaV7mQ7jKOQEmSJEnSmEygJEmSJGlMlvBJkiRJmpcL6S7nCJQkSZIkjckRqDlsutHGrUOYZYtFm7QOYZbbppa2DmGdsWjBwtYhzLJowfD+9186dWvrEGa52xZ3aR3CLFfefE3rEOa01Sabtw5hlh233LZ1CLP88sYrW4cwy29vuq51CLMM8fMEcOvUba1DmGXzAR4jXPS7S1uHMMtNl32rdQhaTzgCJUmSJEljGt4paEmSJEmDMmUb82UcgZIkSZKkMZlASZIkSdKYLOGTJEmSNC/bmC/nCJQkSZIkjckESpIkSZLGZAmfJEmSpHlNWcK3jCNQkiRJkjQmEyhJkiRJGpMlfJIkSZLmZRe+5RyBkiRJkqQxmUBJkiRJ0pgs4ZMkSZI0ryks4ZvmCJQkSZIkjckESpIkSZLGZAIlSZIkSWNyDpQkSZKkednGfLlBjEAleX+S145cPzHJYSPX35vkdSvY96Akd5tEnJIkSZI2bINIoIBTgX0BkiwA7grcf+T2fYHTVrDvQcAqJVBJHHmTJEmStMqGkkCdBuzTX74/cCFwXZI7JdkE+CPgCUm+l+TCJIvTOQDYCzgmyblJNkvy4CSnJDmrH8naDiDJN5J8IMmZwGsavEZJkiRpnTRVNeifSRpEAlVVlwFLktyTbrTpO8DpdEnVXsAFwAerau+q2g3YDNi/qj4NnAm8oKr2AJYAhwIHVNWDgcOBd4w81cZVtVdVvXdSr02SJEnS+mNIpWyn0SVP+wLvA7bvL19DV+L36CRvADYH7gxcBHx+xmPsAuwGnJQEYCFw+cjtn1rRkyc5GDgYYONFd2HRRnf4/V+RJEmSpPXKkBKo6XlQD6Ar4fs58HrgWuAI4KPAXlX18yT/AGw6x2MEuKiq9pnjNoAbVvTkVbUYWAyw5eb3ss2IJEmS1Cs8PJ42iBK+3mnA/sBVVbW0qq4C7khXxjfdQOLKJFsCB4zsdx0wPVx0MbBNkn0AkixKMtqMQpIkSZJW25ASqAvouu99d8a2a6rqSroRqAuBE4HvjdznSODDSc6lK9k7AHhXkvOAc+m7+0mSJEnS72swJXxVtRTYasa2g0YuvwV4yxz7HQ8cP7LpXOCRc9xvvzUUqiRJkrRBmXSnuyEb0giUJEmSJA2aCZQkSZIkjWkwJXySJEmShqks4VvGEShJkiRJGpMJlCRJkiSNyQRKkiRJksbkHChJkiRJ8yqcAzXNEShJkiRJGpMJlCRJkiSNyRI+SZIkSfOyjflyjkBJkiRJ0phMoCRJkiRpTJbwSZIkSZqXJXzLOQIlSZIkSWMygZIkSZKkMZlASZIkSZpXDfxnHEmemOTiJD9J8sbVeydMoCRJkiSt55IsBP4deBKwK/C8JLuuzmOZQEmSJEla3z0E+ElVXVJVtwL/BTxtdR7ILnxzuP7Gn2ZNPVaSg6tq8Zp6vDXBmMYzxJhgmHEZ03iMaXxDjMuYxmNM4xtiXMY0niHGtLYtufWXa+z4eG1IcjBw8MimxTN+R9sDPx+5/gvgj1fnuRyBWvsOXvldJs6YxjPEmGCYcRnTeIxpfEOMy5jGY0zjG2JcxjSeIca0QauqxVW118jPWktwTaAkSZIkre9+Cdxj5Prd+22rzARKkiRJ0vrue8B9k9wrycbAc4ETVueBnAO19g2xPtaYxjPEmGCYcRnTeIxpfEOMy5jGY0zjG2JcxjSeIcakeVTVkiR/BZwILAQOr6qLVuexUjVu53RJkiRJ2rBZwidJkiRJYzKBkiRJkqQxmUBJkiRJ0phMoDYQSR48x7b9W8SiVZfkVUnu1DqOdUGSHZI8rr+8WZI7tI5paJJsMs42SRuGJPeaY9veLWIZqiQLkxzSOg4Ng00k1oIknwdmvrHXAGcCH6mqmxvEdDbwoqq6sL/+POC1VbVaKzCvoZgeBvwDsANdR8gAVVX3bhjTnwFfq6pr+ut3BParqs+2iqmP4+107TbPBg4HTqzG//Mm2XOOzdcAl1bVkknHA5DkZXSLG965qnZKcl/gw1X12Bbx9DEN8X06u6r2XNm2Ccf0buDtwE3Al4HdgUOq6hMNYrmA2d/hy1TV7hMMZ5YkOwMfAratqt2S7A48tare3iCWeT8zVXX2pGKZS5LtWf43BoCq+ma7iCDJK4Fjqurq/vqdgOdV1X80jOls4ClV9cv++qOAD1bVAxrE8oz5bq+q/55ULDMlOaOqHtLq+TUcJlBrQZL/B2wDfLLf9BzgWro/yFtV1QsbxHRv4NPA84FHAC8C9p9OFFpI8kPgEOAsYOn09qr6bcOYzq2qPWZsO6eqHtQqppE4AjwBeDGwF3As8LGq+p9G8XwX2BM4ny753Q24CNga+Iuq+kqDmM4FHgKcPv07S3JBi4OAkZgG8z4l+UNge+ATdN8F6W/aii7RvN+kYpkjtnOrao/+JMb+wOuAb1bVAxvEskN/8ZX9vx/v/30BQFW9cdIxjUpyCvDXdCfkpj/nF1bVbg1i+fo8N1dVPWZiwcyQ5F10f3+/z/K/MVVVT20VEwzz70w/2vQfwFPovq/+he4Y4ecNYjlinpurql4ysWBmSPJ+YBHwKeCGkaCanijQ5LkO1Nqxb1WNDn1/Psn3qmrvJKvVb/73VVWXJHku8Fngf4EnVNVNLWIZcU1VfalxDDPNVdY6iP9PqqqS/Ar4FbAEuBPw6SQnVdUbGoR0GfDS6TUUkuwKvA14A/DfwMQTKOCWqrq1yzUhyUbMM5IwIUN6n/4EOIhu9fX3sjyBug548wTjmMv0/2dPBo6rqmumf4+TVlWXAiR5/IyD2jf2Z+qbJlDA5lV1xoz3p8loZlU9usXzjunpwC5VdUvrQGZYmCTTVQRJFgIbtwyoqr6X5NV030c3A4+rqt80iuXFLZ53TNOJ79tGthXQ7ESB2hjEgeF6aMsk96yq/wVIck9gy/62WycZyBylKHemWzzs9CStS1G+nuQ9dAeRy/7ANT6Tc2aS9wH/3l9/Jd0IWVNJXkM3anglcBjw11V1W5IFwI/pDsYnbefRBeiq6vtJ7tcn6w3CAeCUJG8GNkvyeOAvgc+3CqY3mPepqo4CjkryzKo6fqJPvnJf6EelbwL+Isk2dAdyLSXJw6rq1P7Kvgxj7vCVSXai/25PcgBweduQIMluwK7AptPbqurodhFxCd1owdASqC8Dn0rykf76y/ttEzfHlIPN6UqMP9YfIzQbrUuyLfDPwN2q6kn9yad9qupjrWIa+AkDTZAlfGtBkj8FPgz8D90Z3nvRHch9A3hZVX1ggrHsMN/t02daW1hB6Ufrko8tgL8DHtdvOgl4e1XdsOK91r4k/wAcMdfvK8kfVdUPGsT0KeAq4L/6Tc8B7gq8EPj2jFHYScUU4P/QlTqGbrXxw1rOFxvo+/Qa4Ai6kaeP0pXsvLFF2eWMuO5MNzK9NMnmdCXPv2oYz4Pp5hxuTfd5+h3wktblOn1J9mJg3z6mnwJ/XlU/axjTW4H96BKo/w94Et3n+4CGMR0PPBA4mdufpHt1q5gA+hNfLwem52aeRPc9tXTFe621WB413+1VdcqkYpkpyZfovqf+tqoe2FcUnNO4JHtwSZ3aMIFaS/qOVtPzCS5u0ThiJJaFwEUt5zdo9Q3195dkM7oTAw/vN51KV0N/M12J0fUTjsf3afyYzusPSP4EeAXwFuDjjZtIPAv4clVdl+QtdEnd21snKwBJtgZoOWd0Lv0JnwVVdd0AYrmALlk5p/9sbQt8oqoe3zCmA+fa3o/EakS6LnyXTx+r9N9b2zZOyqenPiybHzbX/LEJxzS4pE5tWMK3FiR50YxND+yHwpuUMvRncy8eLSscgv6g5K3AI/tNpwBva3GQkuQDVfXaOcoZAJqWMQz199fPoXtv/zPTxJMC36dVMl07+KfA0VV1URrWXfb+rqqOS/JwuhHg99B1mmvZKXQT4JnAjsBG029RVb1tnt3WuiT/DLy7bt/F7fVV9ZaGYd1UVVNJliTZCvg1cI+G8VBVRyXZGNi533RxVd3WKp4kx1bVs+corQead3c8jm5Ec9rSflvLVuY3JLkLy0tVH0pXXtjSXavq2CRvAqiqJUkmPnKo9kyg1o7RL5xN6YbpzwZa1oLfCbgoyRncvnNMy25EhwMXAs/ur7+Q7szOvC1M15LpLlv/2uC5xzG4319mt6GfjqlZG3p8n8Z1VpKv0JUXvyndWllTDeOB5V3Sngwsrqovpmvf39Ln6A7YzmJY82ieVFXLmn5U1e/60vGWCdSZ6ZZ9+Cjd+3U98J2G8ZBkP+Ao4Gd0Jw3ukeTAatfG/DX9v0Ncg3Gjqlo2R7tvxtO0sQVdJ84TgJ2SnErX3bhZSWhviEmdGrCEbwL6Pyr/VVVPbBjDnHXOjeub52rl2mx4vi8BO7qqXtDi+ecz0N/fENvQ+z6NF9MCum5Sl1TV1f0BwfZVdX7DmL4A/BJ4PF353k3AGdWgjflITE1ag69MkvOBvae7y/XlVmdW1f3bRtZJsiPd/LVmn6c+jrOA51fVxf31nYFPVtWsheU3dElOAg6tqhP6608DXl0N19Dr49gI2IUuAW46gtjHsydwKN1yFBfSJXXPqqrzWsalyXMEajJuoDvT20zLA8h53JTk4VX1bVh2pr5Za/W+BGyHJBuPnokbgoH+/gbXht73aTx9qdXdgef3ZWmnVFXrboXPBp4I/Guf1G1Ht9ZRS6cleUBVXdA4jpmOAU7O8vVyXkw30tJUugV9d6Q/tkhyn2q46CmwaDp5AqiqHyVZ1DAeYNlCse8C/oAuMZheRH6rhmG9AjgmyXQH2p/TVYU00zeSeR2wQ1W9LMl9k+xSVV9oGNZFwKMYSeoYRmdOTZgjUGvBjHk0C+i6Eh1bDRdf7IeZDwX+iG69iYXADS2/sJPsQfdHf7rD1VXAQS3P5CQ5mu49OoHbl4C9r1E8366qhye5jtvXzDf/g5vknXSfo+Zt6H2fViumvekOxAGeB3xvtCyslSR/wO3bYDebz5bk+8B96Lrc3cLyz1PLuSoAJHkSI13cqurExvEcDuxOd4A5XQ5a1XbR08P7WD7Rb/pzuqYbzWICSPIT4CnVoHvqyiTZEqBFc5s5YvkU3cj9i6pqtz6hOq1xE4mzZzbbmWub1n8mUGvBjDKiJcClVfWLVvEAJDkTeC7dpNC96NYU2rmq3tQyLoB+wjFVde0AYnnrHJur9aTxIcqA2tAn2aEatuSfz5Dep2l9CdgeVTXVX19I10mqWWKQ5Kl0jTbuRteA4J7AD1uWpWUFy0AM9bPWUpLvV9WureMY1TcBeSXLO2B+C/iParywbpJTq+phLWOYaUhNnUZiOrOq9prRhe+8FmW9Sf4Q2J4uGX8+yxvxbAV8uAbW/VVrnyV8a8FoGVGSuwLN5jqMqqqfJFlY3VoTRyQ5B2iWQCV53Yzr0E/YrqpzmwQF36+q40Y3pGuvPAhDOjtfw1pQ8DN082ZIcnxVPbNxPMsM7H0adUe6UV/oRoFb+yfgocBXq+pBSR5NN2LQ0qDOMM4xwrrsJtqXgH0nya5V9f2GMdxOnyi9D3hfujXG7t4yeepL96BruPEp4LPcflS6ZbnjkJo6Tbu1n9833bBhJ9o1c/kT4CDg7nSfqWnXAc1H7jV5JlBrUF8m9066g5J/ouvsdldgQZIXVVWTlcZ7N/Yddc5N8m66Vetb1+3u1f9Mz73YHzgfeEWS46rq3Q1iehPdKN3Ktk3UHGfndwB+AEz87HySP6+qT8xMgKc1KnccbcHdsrvdMgN9n6b9C3BOPzoWurPOzUqMe7dV1W+TLEiyoKq+nmRii46vwBfpDt5Cd+LiXnRzHpqMilXVHVo875iOpkuifsVAyh2TfAN4Kt2xzlnAr5OcVlWHNArpKSOXb6Rb8Hta0ZX5trLTjBNP/5ik1YnMaf8AfJmue+IxwMPo5vtNXHVrhx2V5JlVdXyLGDQsJlBr1gfpzkRsDXyNrtXsd5PcD/gk3RdBKy+kS5j+iq4j2D3o1jdp6e7AntO11n353BfpDubOAiaWQPXzCf4U2D7Jv43ctBVdGWZrQzo7v0X/71wHc63O2NcKLrc03/vUVFV9sj+4nF5y4W+q6lcNQwK4up9/8U26yey/ZmQeYgs1Y3HMvgPXXzYKZ+g+Rvd35gLat8SftnVVXZvk/9B1WH1rX77aRFU1Ofgf06CaOgFU1Vf6TooPpUvIX1NVVzaO6fgkT6Y7iTJaDWKZ/wbGBGrN2qiqvgKQ5G1V9V2AqvphGq9RWVWXJtmmv/yPTYNZ7g+4/XD8bXQrn9+UZNLD9JcBZ9KdrTxrZPt1dAlna4M5O19VH+kvfrWqTh29rf+j28IDk1xL90d2s/4yNCxtGnmfPlgNW5bPYwFwJd3fgZ2T7Fzt1scBeBrdAdshwAvoTkQN6qCkqs5O0mxh34H7TfUtsAdko76b47OBv20dzLQkR9ElA6MLIb+3cXOLv6AbYRlt6nRgw3hIcnJ1bdS/OMe2VjF9GNgceDRwGN26VGe0ikftmECtWaNn3WaeuWlyVjxd5vZWupGnBf2mJXTrPbQ+ODkGOD3J5/rrTwH+M8kWwETr6PvOf+cl+Qxdd8KlsGxy/SaTjGUFBnd2nq6r48zOQ3NtW+uqauGkn3MVfLcvhTkC+FINoHNPkncBz2FGxzS6z1eLeBYCX+jni00xgJbcMGue5gK6z/ZljcIZunOS/CddSfZQ5vW8DTgR+HZVfS/JvYEfN4xn2u7TyRMsWwj5QS0D6ucdP3C6qRPd35fn0pXVT1SSTemSlLv2yeVow4btJx3PDPtW1e5Jzq+qf0zyXmBQy1RoMkyg1qz5zoJvuuLd1qpD6OqG966qnwL0f0Q+lOSQqnp/o7ioqn9K8mVg337TK6rqzP5yq8VsvwI8Dphu4bpZv23fFe6xFiW5Z98oYjBn55PsQ/d+bDPjAHMrunbdur2d6T5TLwH+LcmxwJFV9aOGMT0d2KV1N7Jp1a3BNpVk65Zdv+YwWn65hO5MuPMf5rYZXeI0mHk9fUOg40auX0L70nXo5kXfqap+B9A3uGhyPNYnTK+kS0w+B3y1v/56uuTpmBXvvda8HHgt3ZzfmRUhH2wQz6ib+39vTHI3uiZh2zWMR42YQK1BAz0L/kLg8aN1w1V1SZI/p0sMmiVQfSzfS3IpfYI5kjC0suno+hdVdX26tSda+SzdPLEbRrrLtT47vzGwJd33x+gB5rV05Qwa0Y84nQSc1M9d+wTwl0nOA95YVd9pENYlwCLadbSay/XABUlO4vZrsL26VUDT5c4Z0No4Q9SPIP62qv5v61gAkryhqt6d5FDmqP5o+ZnqvZeu4cZ0cvcs4B2NYvk48DvgO8DL6EodA/xZw264pwHHAgdU1aFJDqRLfH8G/GeLgJK8to/rhCR3pJujfTbd5+uwFjGpLROo9d+iuSZdVtVv0nhF9jk6y90T+CGNOlz1bkiyZ/WLnCZ5MG0n0g6uu1zfpv+UJEe6Hs7KJbkLXcOPFwJXAK+iW6h5D7qz4/eaYCzTB5Q30nXkPJnbl1u1PLD8b5aPVkwf9DadPJpkN7oDzDv3168EDqyqC1vGNTT9COKQ1jWaXqD2zHnv1UhVHZ1ubcbpteCe0bD9+72nm6UkOYyuQ+89q+rm+Xdbqz4CPK5Pnh5J1zX0VXTfmYtpc6Lu7sAHgD8CHg+cSpdwnjbQOa5ay0yg1n+3ruZtkzCkznLTXgscl+QyuoO3P6SbK9LKELvLTdskyWJgR0a+S6rhArED9R26g/Cn1+0X1D6zn5A8SdMHlGfRJXGjn6kmyUqSp9Gtz/Pv/fUzgG362P6mRUwjFgOvq6qvAyTZr9/WpKR34M5NcgLdSYHREcSJl/BV1ef7f4+C4Y0g9vNmPlZVrcvRoGveBCxLhH/ROHkCWFhV02vUPQdY3LcOP75Va/Xp0dV0y8HsRfcdcBDwkSRX18AWkdbaZwK1/puelzVTy3lZ0wbTWW5aX1J4P2CXftPFVXXbfPusZYPrLjfiOODDdOULSxvGMXS7rKhxRFW9a8KxXANsP7Bk5Q10k9WnbQw8mK5M9AjarsG2xXTyBFBV3+ib3Gi2Tenmg4yeQGk6B2rGCGKS/AZ4UVVd1Cqm3g+AjybZiO4z/smGc/8eOOPvymYjf3Na/Y1ZmGSjqloCPBY4eOS21setm9HN9926/7mMrnW/NjCtP4haywY6L2va4DrL9fOdXgfsUFUvS3LfJLtU1RdaxDPw39+SqvpQ6yCGKsnn6Ud45lrGoKqeOumYgL9meMnKxlX185Hr3+7PPl81gGTlkiR/R3cQDt0I+SUN4xmsGuYaR3ONIH6UxiOIVXUYcFiSXegWhj0/yanAR0cT9gnFMsS/MZ+kKxO/kq6E/lsASe5DdxJo4vpqi/vTNbI4nW4+1PumG4Fow2MCpZYG01luxBF05U379Nd/SXdQ2SSBGqK+YxTA55P8JfAZbj+P5qo5d9zw/GvrAOYwxGTlTqNXquqvRq5uM+FYZnoJ8I90oyhFdyDXcq2ewUpyd7plDKbnQn2Lbq2jX6x4r7VusCOIfeON+/U/VwLnAa9L8vKqeu68O6/nquod/fzM7YCvjIzgL6CbC9XCPemWNPkx3XHBL4Cr591D67UMYEkSbYD6Px5f7dd9GYwkZ1bVXknOqaoH9dvOq6oHto5tKJL8lO5gcq45M1VVg2h20doAOkrOkuQnVXWfFdz2P1W1U4OYjgG+UVUfnbH95cB+VfW8ScfUP/8gv6OGqu+e+J/cfrTuBVX1+IYxfYauU9poTA+uqj9rFRNAkvcD+wNfo5sLdcbIbRdX1S4r3FnNpCsluD/dCOa+wG50Cw5/p6re2jI2TZ4jUGpiwOu+3JpkM5aXXu3EsFo9N1dVE+sat477LP2iwiMt6Fs7PcnLVpCsnLGCfda2Q4DPJnk+3cEudGWFm9CtV9XEgL+jhmqbqjpi5PqRfevnloY6gng+8Jaqmqtk/SGTDkbj6UfCLkxyNV0p4TV0ifBDABOoDYwJlFoa3LovdF+CXwbu0Z8Zfxhdpx3NkOQZc2y+Brigqn496XgGaHAt6BlgstJ/VvZN8hiWL2Hwxar6Wot4Zhjid9RQ/bZfX/CT/fXn0TWVmLgkmwKvAO5DN8H/9Y2bAc20bBHt/j3bE/h/VXWpyfowJXk1y0eebqObA3UacDg2kdggWcKnZvrF8WaZbj3bSr9uz0PpDoC/O9c6WoIkX6SbKzY9x2A/uvlj9wLeVlUfX8GuG4QkZ1fVnjMvD8GMZOWigSQrgzPjO2rZ2lStv6OGKMkOdHOg9qF7r04DXt2ijDXJp+gOcr8FPAn4WVW1Hg1bJsn5wAOB3YEj6TqZPruqHtUyLq1YkvfRrf10WlVd3joetWcCpaaSbAPdwr6N45j34HZ6YV0tl+REupbAV/TXtwWOpjvz/M2q2q1lfK0lWUo3ahG61rc3Tt9E+xb0msfK1qaqqpat1bUSSS4YWRx2I+CMgZ3AOLuq9kzy98Avq+pjQzvJIml+lvBp4vqJmG8F/oquq06SLAEOrapWXfjeO89txe3XNlHnHtPJU+/X/barkgypXKaJgbYH1niGvDbVoPRJwIpUVf3TxIJZbnRx2CVzLSPQ2HVJ3kTX1OKRSRYAixrHJGkVmECphUPo5hbtXVU/BUhyb+BDSQ6pqvdPOiA7ba2WbyT5AssPJp/Zb9sC27tq3TbEdu9DNVcjhC2AlwJ3AVokUENcHHbUc4DnAy+tql8luSfwnsYxSVoFlvBp4pKcAzx+5tyivpzvK9Ptwycc0xuq6t395WeNlugk+eeqevOkYxq6fiTxmSxf9+VU4PjyS0XruCG2e18XJLnYu+tkAAAFTklEQVQD8Bq65OlY4L02lFlujuYWH6uqJW2jkrQ6FrQOQBukRXM1ZujnQbUqYxgt13nTjNueOMlA1hXV+XRVHdL/fNrkSeuJ05O8bObGxu3eByvJnZO8na4990bAnlX1NyZPsxwF7EWXPD2J+UvHJQ2YJXxq4dbVvG1tygouz3V9g5bk21X18CTXsbwzGQynPEb6fQ2u3ftQJXkP8AxgMfCAqrq+cUhDtutIc4uPYTIurbMs4dPEjXQnm3UTsGlVTXwUar6W03ZHur0kO1TVpa3jkNY2272vXJIpusXGl+AJlXn5t0Vaf5hASay05XSTpG6oZiSbx1fVM1vHJElDN+Pk4ejfGpNNaR1jCZ+ELadX0WhJ472bRSFJ6xD/zkjrD5tISFpVtYLLkiRJ6z1L+CStkpWUO1qGIkmS1msmUJIkSZI0Jkv4JEmSJGlMJlCSJEmSNCYTKEmSJEkakwmUJGlsSfZL8oW1+Ph7JPnTtfX4kiT9vkygJElrTZJVXW9wD8AESpI0WCZQkrQOSbJFki8mOS/JhUmek+TBSU5JclaSE5Ns19/3Pkm+2t/37CQ7pfOeft8Lkjynv+9+Sb6R5NNJfpjkmCTpb3tiv+1s4BkjsTwkyXeSnJPktCS79NsPSnJCkq8BJyc5OsnTR/Y7JsnT5nhtGwNvA56T5Nz+tf04yTb97QuS/CTJNkmOTPLhJGcm+VGS/fv7LOxf3/eSnJ/k5WvrdyFJ2jCt6plBSVJbTwQuq6onAyTZGvgS8LSq+k2fEL0DeAlwDPDOqvpMkk3pTpo9g26U54HAXYHvJflm/9gPAu4PXAacCjwsyZnAR4HHAD8BPjUSyw+BR1TVkiSPA/4ZeGZ/257A7lV1VZJHAYcAn+3j3Rc4cOYLq6pbk/w9sFdV/VX/+u4HvAD4APA44Lz+dQLsCDwE2An4epL7AC8CrqmqvZNsApya5CtV9dNVf6slSZrNBEqS1i0XAO9N8i7gC8DvgN2Ak/qkYiFweZI7ANtX1WcAqupmgCQPBz5ZVUuBK5KcAuwNXAucUVW/6O93Ll2Ccj3w06r6cb/9E8DBfSxbA0cluS9QwKKROE+qqqv65z4lyX/0I0nPBI6vqiVjvt7Dgc/RJVAvAY4Yue3YqpoCfpzkEuB+wBOA3ZMcMBLjfQETKEnSGmECJUnrkKr6UZI96eYJvR34GnBRVe0zer8+gVpVt4xcXsrK/0b8E/D1qvqzJDsC3xi57YYZ9z0a+HPgucCLxw2oqn6e5Iokj6EbbXrB6M0z7w4EeFVVnTjuc0iStCqcAyVJ65AkdwNurKpPAO8B/hjYJsk+/e2Lkty/qq4DfjE99yjJJkk2B75FN8doYT8i9EjgjHme8ofAjkl26q8/b+S2rYFf9pcPWknoRwKvBaiq789zv+uAmcnfYcAngOP6kbNpz+rnRe0E3Bu4GDgR+IskiwCS7Jxki5XEJknS2EygJGnd8gDgjL7E7q3A3wMHAO9Kch5wLt0cI4AXAq9Ocj5wGvCHwGeA84Hz6Eav3lBVv1rRk/WlfwcDX+ybSPx65OZ3A/+S5BxWMlpVVVcAP+D2JXhz+Tqw63QTiX7bCcCWc+z7v3TJ35eAV/SxHgZ8Hzg7yYXAR1YWmyRJqyJVMysgJElas/rRrwuAPavqmlXcdy/g/VX1iJFtRwJfqKpPr9FAJUlaCUegJElrVd+h7wfAoauRPL0ROB5409qITZKkVeUIlCRp4pL8CfCuGZt/WlV/1iIeSZLGZQIlSZIkSWOyhE+SJEmSxmQCJUmSJEljMoGSJEmSpDGZQEmSJEnSmP5/ltMFOz3PksYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pivot_table = pkmn[[\"primary_type\", \"secondary_type\"]].value_counts().unstack().fillna(0)\n", + "long_form = pkmn[[\"primary_type\", \"secondary_type\"]].value_counts()\n", + "\n", + "ax = sns.heatmap(pivot_table)\n", + "ax.figure.set_size_inches(15, 15)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RTUdYUv3LBBt", + "outputId": "1098fdc6-500c-4c9a-ade1-57b380a0ef84" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(935, 6229) (935,)\n" + ] + }, + { + "data": { + "text/plain": [ + "['000',\n", + " '01',\n", + " '02',\n", + " '03',\n", + " '04',\n", + " '05',\n", + " '10',\n", + " '100',\n", + " '1000',\n", + " '100x',\n", + " '101',\n", + " '108',\n", + " '11',\n", + " '12',\n", + " '120',\n", + " '13',\n", + " '14',\n", + " '148',\n", + " '15',\n", + " '150',\n", + " '16',\n", + " '17',\n", + " '18',\n", + " '180',\n", + " '19',\n", + " '1950s',\n", + " '1970s',\n", + " '1997',\n", + " '1px',\n", + " '20',\n", + " '200',\n", + " '2000',\n", + " '2003',\n", + " '2005',\n", + " '2007',\n", + " '2008',\n", + " '2009',\n", + " '2013',\n", + " '2014',\n", + " '2015',\n", + " '2016',\n", + " '2018',\n", + " '2019',\n", + " '2020',\n", + " '2021',\n", + " '20th',\n", + " '21',\n", + " '22',\n", + " '23',\n", + " '23rd',\n", + " '24',\n", + " '242',\n", + " '25',\n", + " '26',\n", + " '27',\n", + " '28',\n", + " '29',\n", + " '294',\n", + " '296',\n", + " '2nd',\n", + " '30',\n", + " '300',\n", + " '31',\n", + " '310',\n", + " '32',\n", + " '33',\n", + " '34',\n", + " '35',\n", + " '36',\n", + " '360',\n", + " '36th',\n", + " '37',\n", + " '370',\n", + " '38',\n", + " '39',\n", + " '390',\n", + " '3ds',\n", + " '3rd',\n", + " '40',\n", + " '400',\n", + " '41',\n", + " '42',\n", + " '43',\n", + " '44',\n", + " '440',\n", + " '45',\n", + " '46',\n", + " '47',\n", + " '48',\n", + " '49',\n", + " '4ever',\n", + " '50',\n", + " '500',\n", + " '5000',\n", + " '50th',\n", + " '51',\n", + " '52',\n", + " '53',\n", + " '54',\n", + " '55',\n", + " '56',\n", + " '57',\n", + " '58',\n", + " '59',\n", + " '60',\n", + " '600',\n", + " '61',\n", + " '610',\n", + " '62',\n", + " '63',\n", + " '630',\n", + " '64',\n", + " '65',\n", + " '650',\n", + " '66',\n", + " '67',\n", + " '68',\n", + " '69',\n", + " '69th',\n", + " '70',\n", + " '71',\n", + " '719',\n", + " '72',\n", + " '721',\n", + " '73',\n", + " '74',\n", + " '75',\n", + " '76',\n", + " '767',\n", + " '77',\n", + " '78',\n", + " '79',\n", + " '80',\n", + " '82',\n", + " '90',\n", + " '900',\n", + " '95',\n", + " '967',\n", + " 'abandoned',\n", + " 'abbreviation',\n", + " 'abilities',\n", + " 'ability',\n", + " 'able',\n", + " 'abnormalities',\n", + " 'abominable',\n", + " 'abra',\n", + " 'absence',\n", + " 'absolutely',\n", + " 'absorb',\n", + " 'absorbed',\n", + " 'absorbing',\n", + " 'absorbs',\n", + " 'absorption',\n", + " 'abundance',\n", + " 'abundantly',\n", + " 'acanthaster',\n", + " 'accelerate',\n", + " 'accelgor',\n", + " 'accept',\n", + " 'accepted',\n", + " 'accompanies',\n", + " 'according',\n", + " 'account',\n", + " 'accurately',\n", + " 'accustomed',\n", + " 'ace',\n", + " 'acerola',\n", + " 'achieve',\n", + " 'acid',\n", + " 'acknowledge',\n", + " 'acknowledged',\n", + " 'acquire',\n", + " 'acquires',\n", + " 'acrobatic',\n", + " 'act',\n", + " 'acting',\n", + " 'actions',\n", + " 'activate',\n", + " 'activated',\n", + " 'active',\n", + " 'actively',\n", + " 'actor',\n", + " 'acts',\n", + " 'actual',\n", + " 'actually',\n", + " 'added',\n", + " 'adding',\n", + " 'addition',\n", + " 'additional',\n", + " 'additionally',\n", + " 'adept',\n", + " 'adhesive',\n", + " 'adopted',\n", + " 'adorable',\n", + " 'adorn',\n", + " 'adorned',\n", + " 'adornment',\n", + " 'adult',\n", + " 'advance',\n", + " 'advanced',\n", + " 'advantage',\n", + " 'adventure',\n", + " 'aegislash',\n", + " 'aether',\n", + " 'affect',\n", + " 'affecting',\n", + " 'affection',\n", + " 'affects',\n", + " 'affinity',\n", + " 'afford',\n", + " 'aforementioned',\n", + " 'afro',\n", + " 'afterlife',\n", + " 'afterward',\n", + " 'agent',\n", + " 'ages',\n", + " 'aggressive',\n", + " 'aggressively',\n", + " 'agile',\n", + " 'agility',\n", + " 'agitated',\n", + " 'agitates',\n", + " 'ago',\n", + " 'agriculture',\n", + " 'aipom',\n", + " 'air',\n", + " 'airborne',\n", + " 'aircraft',\n", + " 'akala',\n", + " 'akin',\n", + " 'alakazam',\n", + " 'albeit',\n", + " 'alchemic',\n", + " 'alcremie',\n", + " 'alien',\n", + " 'aliens',\n", + " 'alike',\n", + " 'alive',\n", + " 'allies',\n", + " 'alligator',\n", + " 'alligators',\n", + " 'allow',\n", + " 'allowed',\n", + " 'allowing',\n", + " 'allows',\n", + " 'alloy',\n", + " 'alludes',\n", + " 'alola',\n", + " 'alolan',\n", + " 'alomomola',\n", + " 'alongside',\n", + " 'alpha',\n", + " 'alphabet',\n", + " 'alright',\n", + " 'altaria',\n", + " 'altered',\n", + " 'altering',\n", + " 'alternate',\n", + " 'alternative',\n", + " 'alternatively',\n", + " 'altitudes',\n", + " 'amargasaurus',\n", + " 'amazing',\n", + " 'amber',\n", + " 'america',\n", + " 'american',\n", + " 'ammonites',\n", + " 'amoeba',\n", + " 'amped',\n", + " 'amperage',\n", + " 'ampharos',\n", + " 'amphibian',\n", + " 'amusing',\n", + " 'anaconda',\n", + " 'ancestor',\n", + " 'anchor',\n", + " 'anchors',\n", + " 'ancient',\n", + " 'andrew',\n", + " 'angel',\n", + " 'anger',\n", + " 'angered',\n", + " 'anglerfish',\n", + " 'angles',\n", + " 'angry',\n", + " 'animal',\n", + " 'anime',\n", + " 'animon',\n", + " 'ankylosaurus',\n", + " 'announcement',\n", + " 'annoyance',\n", + " 'anomalocaris',\n", + " 'anorith',\n", + " 'answer',\n", + " 'answers',\n", + " 'antagonist',\n", + " 'antagonists',\n", + " 'anteater',\n", + " 'antenna',\n", + " 'antennae',\n", + " 'antimatter',\n", + " 'antique',\n", + " 'antlers',\n", + " 'antlion',\n", + " 'anymore',\n", + " 'aoki',\n", + " 'apart',\n", + " 'apocalypse',\n", + " 'apparent',\n", + " 'apparently',\n", + " 'appealing',\n", + " 'appear',\n", + " 'appearance',\n", + " 'appearances',\n", + " 'appeared',\n", + " 'appearing',\n", + " 'appears',\n", + " 'appendages',\n", + " 'apple',\n", + " 'apples',\n", + " 'appletun',\n", + " 'appliances',\n", + " 'applin',\n", + " 'appreciation',\n", + " 'approaches',\n", + " 'appropriation',\n", + " 'approximately',\n", + " 'april',\n", + " 'aqua',\n", + " 'aquatic',\n", + " 'aramis',\n", + " 'araquanid',\n", + " 'arbok',\n", + " 'arcanine',\n", + " 'arceus',\n", + " 'arch',\n", + " 'archaeopteryx',\n", + " 'archen',\n", + " 'archeops',\n", + " 'archie',\n", + " 'arctic',\n", + " 'arctovish',\n", + " 'arctozolts',\n", + " 'area',\n", + " 'areas',\n", + " 'aren',\n", + " 'aria',\n", + " 'ariados',\n", + " 'arid',\n", + " 'ariga',\n", + " 'arm',\n", + " 'armed',\n", + " 'armless',\n", + " 'armor',\n", + " 'armored',\n", + " 'armour',\n", + " 'arms',\n", + " 'aroma',\n", + " 'aromatisse',\n", + " 'aron',\n", + " 'arranges',\n", + " 'arrive',\n", + " 'arrives',\n", + " 'arrokuda',\n", + " 'arrow',\n", + " 'arrows',\n", + " 'art',\n", + " 'artagnan',\n", + " 'artillery',\n", + " 'artist',\n", + " 'arts',\n", + " 'artwork',\n", + " 'ascend',\n", + " 'ascended',\n", + " 'ash',\n", + " 'asia',\n", + " 'asian',\n", + " 'aside',\n", + " 'asking',\n", + " 'asleep',\n", + " 'aspects',\n", + " 'ass',\n", + " 'assault',\n", + " 'assembly',\n", + " 'assist',\n", + " 'assists',\n", + " 'associated',\n", + " 'association',\n", + " 'assume',\n", + " 'assuming',\n", + " 'astral',\n", + " 'ate',\n", + " 'athos',\n", + " 'atk',\n", + " 'atmosphere',\n", + " 'atop',\n", + " 'atrophied',\n", + " 'atsuko',\n", + " 'attach',\n", + " 'attached',\n", + " 'attaches',\n", + " 'attack',\n", + " 'attacked',\n", + " 'attackers',\n", + " 'attacking',\n", + " 'attacks',\n", + " 'attempt',\n", + " 'attempted',\n", + " 'attempts',\n", + " 'attention',\n", + " 'attitude',\n", + " 'attract',\n", + " 'attracted',\n", + " 'attractive',\n", + " 'attracts',\n", + " 'audience',\n", + " 'audiences',\n", + " 'audino',\n", + " 'augite',\n", + " 'augurite',\n", + " 'august',\n", + " 'aura',\n", + " 'auras',\n", + " 'aurorus',\n", + " 'australia',\n", + " 'authentic',\n", + " 'authenticity',\n", + " 'automatically',\n", + " 'available',\n", + " 'avoid',\n", + " 'avoiding',\n", + " 'avoids',\n", + " 'awaits',\n", + " 'awake',\n", + " 'away',\n", + " 'awe',\n", + " 'awesome',\n", + " 'awful',\n", + " 'awhile',\n", + " 'awkward',\n", + " 'awoken',\n", + " 'az',\n", + " 'azelf',\n", + " 'azumarill',\n", + " 'azure',\n", + " 'azurill',\n", + " 'babies',\n", + " 'baboon',\n", + " 'baby',\n", + " 'backfish',\n", + " 'backstory',\n", + " 'backwards',\n", + " 'bacteria',\n", + " 'bad',\n", + " 'bag',\n", + " 'bagon',\n", + " 'bags',\n", + " 'baile',\n", + " 'baku',\n", + " 'balance',\n", + " 'bald',\n", + " 'ball',\n", + " 'balloon',\n", + " 'balloons',\n", + " 'balls',\n", + " 'bamboo',\n", + " 'band',\n", + " 'bandai',\n", + " 'banette',\n", + " 'bangs',\n", + " 'banished',\n", + " 'banned',\n", + " 'bar',\n", + " 'baragon',\n", + " 'barb',\n", + " 'barbaracle',\n", + " 'barbed',\n", + " 'barboach',\n", + " 'bare',\n", + " 'barely',\n", + " 'bares',\n", + " 'bark',\n", + " 'barks',\n", + " 'barn',\n", + " 'barnacle',\n", + " 'barnacles',\n", + " 'barracuda',\n", + " 'barrage',\n", + " 'barraskewda',\n", + " 'barreled',\n", + " 'barriers',\n", + " 'basculegion',\n", + " 'basculin',\n", + " 'base',\n", + " 'based',\n", + " 'bash',\n", + " 'bashir',\n", + " 'basic',\n", + " 'basis',\n", + " 'basking',\n", + " 'basks',\n", + " 'bass',\n", + " 'bat',\n", + " 'bathed',\n", + " 'bathes',\n", + " 'battery',\n", + " 'battle',\n", + " 'battled',\n", + " 'battles',\n", + " 'battling',\n", + " 'bay',\n", + " 'bayleef',\n", + " 'beach',\n", + " 'beaches',\n", + " 'beady',\n", + " 'beak',\n", + " 'beaks',\n", + " 'beam',\n", + " 'beams',\n", + " 'bean',\n", + " 'beans',\n", + " 'bear',\n", + " 'beard',\n", + " 'bearing',\n", + " 'bears',\n", + " 'beast',\n", + " 'beasts',\n", + " 'beat',\n", + " 'beaten',\n", + " 'beats',\n", + " 'beautifly',\n", + " 'beautiful',\n", + " 'beauty',\n", + " 'beaver',\n", + " 'becalms',\n", + " 'bee',\n", + " 'beedrill',\n", + " 'beefy',\n", + " 'beehive',\n", + " 'bees',\n", + " 'beetle',\n", + " 'befriends',\n", + " 'befuddle',\n", + " 'began',\n", + " 'begging',\n", + " 'begin',\n", + " 'begins',\n", + " 'behavior',\n", + " 'behemoth',\n", + " 'beings',\n", + " 'belch',\n", + " 'beldum',\n", + " 'beldums',\n", + " 'belief',\n", + " 'believe',\n", + " 'believed',\n", + " 'bell',\n", + " 'belligerently',\n", + " 'bellossom',\n", + " 'bells',\n", + " 'bellsprout',\n", + " 'belly',\n", + " 'belonged',\n", + " 'belonging',\n", + " 'belongs',\n", + " 'belt',\n", + " 'belts',\n", + " 'bem',\n", + " 'ben',\n", + " 'beneath',\n", + " 'benefits',\n", + " 'berries',\n", + " 'berry',\n", + " 'berserk',\n", + " 'best',\n", + " 'bestowing',\n", + " 'beta',\n", + " 'betobebi',\n", + " 'betray',\n", + " 'better',\n", + " 'bewear',\n", + " 'bewitching',\n", + " 'bibarel',\n", + " 'bidoof',\n", + " 'big',\n", + " 'bigger',\n", + " 'billions',\n", + " 'binacle',\n", + " 'binnacle',\n", + " 'biped',\n", + " 'bipedal',\n", + " 'bird',\n", + " 'birds',\n", + " 'birthed',\n", + " 'bisharp',\n", + " 'bison',\n", + " 'bit',\n", + " 'bite',\n", + " 'bites',\n", + " 'biting',\n", + " 'bits',\n", + " 'bitterly',\n", + " 'bivalve',\n", + " 'blacephalon',\n", + " 'black',\n", + " 'blackened',\n", + " 'blackface',\n", + " 'blade',\n", + " 'blades',\n", + " 'blaine',\n", + " 'blast',\n", + " 'blaster',\n", + " 'blasting',\n", + " 'blastoise',\n", + " 'blasts',\n", + " 'blaze',\n", + " 'blaziken',\n", + " 'bleaching',\n", + " 'blend',\n", + " 'blessings',\n", + " 'blind',\n", + " 'blinding',\n", + " 'blipbug',\n", + " 'blissey',\n", + " 'blizzard',\n", + " 'blizzards',\n", + " 'blob',\n", + " 'block',\n", + " 'blocking',\n", + " 'blocks',\n", + " 'blocky',\n", + " 'blond',\n", + " 'blood',\n", + " 'bloom',\n", + " 'bloomed',\n", + " 'blooms',\n", + " 'blossom',\n", + " 'blossoms',\n", + " 'blow',\n", + " 'blowing',\n", + " 'blown',\n", + " 'blows',\n", + " 'blubber',\n", + " 'blue',\n", + " 'blueish',\n", + " 'boats',\n", + " 'bodied',\n", + " 'bodies',\n", + " 'bodily',\n", + " 'body',\n", + " 'boeing',\n", + " 'bogos',\n", + " 'boil',\n", + " 'bolts',\n", + " 'boltund',\n", + " 'bomb',\n", + " 'bombs',\n", + " 'bond',\n", + " 'bonded',\n", + " 'bone',\n", + " 'bonemurang',\n", + " 'bones',\n", + " 'bonnets',\n", + " 'bonsly',\n", + " 'bonus',\n", + " 'boomerang',\n", + " 'boost',\n", + " 'boosting',\n", + " 'boosts',\n", + " 'border',\n", + " 'bordering',\n", + " 'born',\n", + " 'borrows',\n", + " 'boss',\n", + " 'bother',\n", + " 'bothered',\n", + " 'bottle',\n", + " 'bottles',\n", + " 'bouffalant',\n", + " 'boulder',\n", + " 'boulders',\n", + " 'bounce',\n", + " 'bounces',\n", + " 'bouncing',\n", + " 'bouncy',\n", + " 'bounding',\n", + " 'bounsweet',\n", + " 'bountiful',\n", + " 'bow',\n", + " 'bowie',\n", + " 'bowl',\n", + " 'bows',\n", + " 'boxer',\n", + " 'boxers',\n", + " 'boxing',\n", + " 'boy',\n", + " 'bracelets',\n", + " 'braids',\n", + " 'brain',\n", + " 'brains',\n", + " 'brainwaves',\n", + " 'braise',\n", + " 'braixen',\n", + " 'bramble',\n", + " 'branch',\n", + " 'branches',\n", + " 'branching',\n", + " 'brass',\n", + " 'brave',\n", + " 'bravery',\n", + " 'brawl',\n", + " 'brawly',\n", + " 'break',\n", + " 'breaking',\n", + " 'breaks',\n", + " 'breath',\n", + " 'breathe',\n", + " 'breathing',\n", + " 'breeding',\n", + " 'bridge',\n", + " 'brief',\n", + " 'brigadier',\n", + " 'bright',\n", + " 'brighter',\n", + " 'brightly',\n", + " 'brightness',\n", + " 'brilliant',\n", + " 'briney',\n", + " 'bring',\n", + " 'bringer',\n", + " 'brings',\n", + " 'brionne',\n", + " 'british',\n", + " 'brittle',\n", + " 'broad',\n", + " 'brock',\n", + " 'broke',\n", + " 'broken',\n", + " 'broom',\n", + " 'bros',\n", + " 'brought',\n", + " 'brown',\n", + " 'browser',\n", + " 'bruce',\n", + " 'brush',\n", + " 'brutal',\n", + " 'bruxish',\n", + " 'bubble',\n", + " 'bubbles',\n", + " 'buck',\n", + " 'bucktoothed',\n", + " 'bud',\n", + " 'budew',\n", + " 'bug',\n", + " 'bugs',\n", + " 'build',\n", + " 'building',\n", + " 'buildings',\n", + " 'builds',\n", + " 'built',\n", + " 'bulb',\n", + " 'bulbasaur',\n", + " 'bulbous',\n", + " 'bulgasari',\n", + " 'bulge',\n", + " 'bulky',\n", + " 'bull',\n", + " 'bullied',\n", + " 'bullies',\n", + " 'bully',\n", + " 'bulu',\n", + " 'bumps',\n", + " 'bunch',\n", + " 'bunnelby',\n", + " 'burglars',\n", + " 'buried',\n", + " 'buries',\n", + " 'burmy',\n", + " 'burn',\n", + " 'burning',\n", + " 'burns',\n", + " 'burnt',\n", + " 'burrow',\n", + " 'burrows',\n", + " 'burst',\n", + " 'bursting',\n", + " 'bushes',\n", + " 'bushy',\n", + " 'busts',\n", + " 'butlers',\n", + " 'butt',\n", + " 'butterfly',\n", + " 'butterflyfish',\n", + " 'buzzwole',\n", + " 'bōzu',\n", + " 'cackles',\n", + " 'cacnea',\n", + " 'cactus',\n", + " 'cafe',\n", + " 'cafes',\n", + " 'cage',\n", + " 'cake',\n", + " 'calculated',\n", + " 'called',\n", + " 'calling',\n", + " 'calls',\n", + " 'calm',\n", + " 'calorie',\n", + " 'calyrex',\n", + " 'came',\n", + " 'camels',\n", + " 'cameo',\n", + " 'camerupt',\n", + " 'camouflage',\n", + " 'camouflaged',\n", + " 'camouflaging',\n", + " 'campers',\n", + " 'canceled',\n", + " 'cancelled',\n", + " 'candies',\n", + " 'candy',\n", + " 'cane',\n", + " 'cannon',\n", + " 'cannonball',\n", + " 'cannons',\n", + " 'canonically',\n", + " 'cantankerous',\n", + " 'canyon',\n", + " 'canyons',\n", + " 'cap',\n", + " 'capabilities',\n", + " 'capable',\n", + " 'caped',\n", + " 'capoeira',\n", + " 'caps',\n", + " 'capture',\n", + " 'captured',\n", + " 'carapace',\n", + " 'caravaggio',\n", + " 'carbink',\n", + " 'carcolh',\n", + " 'card',\n", + " 'cards',\n", + " 'care',\n", + " 'carefree',\n", + " 'careful',\n", + " 'carefully',\n", + " 'carelessly',\n", + " 'cares',\n", + " 'caring',\n", + " 'carkol',\n", + " 'carnotaur',\n", + " 'carp',\n", + " 'carracosta',\n", + " 'carried',\n", + " 'carriers',\n", + " 'carries',\n", + " 'carrot',\n", + " 'carrots',\n", + " 'carry',\n", + " 'carrying',\n", + " 'cars',\n", + " 'cartoonist',\n", + " 'carvanha',\n", + " 'cascoon',\n", + " 'case',\n", + " 'cast',\n", + " 'caste',\n", + " 'castform',\n", + " 'castle',\n", + " 'cat',\n", + " 'catch',\n", + " 'catcher',\n", + " 'catches',\n", + " 'category',\n", + " 'catfish',\n", + " 'caught',\n", + " 'cause',\n", + " 'caused',\n", + " 'causes',\n", + " 'causing',\n", + " 'cautionary',\n", + " 'cave',\n", + " 'cavernous',\n", + " 'caves',\n", + " 'ceilings',\n", + " 'celebi',\n", + " 'celebration',\n", + " 'celesteela',\n", + " 'cell',\n", + " 'cells',\n", + " 'celsius',\n", + " 'cemetery',\n", + " 'center',\n", + " 'centers',\n", + " 'centipede',\n", + " 'centiskorch',\n", + " 'central',\n", + " 'centres',\n", + " 'centrifugal',\n", + " 'ceo',\n", + " 'ceremonies',\n", + " 'certain',\n", + " 'chains',\n", + " 'challenge',\n", + " 'chameleon',\n", + " 'champion',\n", + " 'championship',\n", + " 'championships',\n", + " 'chan',\n", + " 'chance',\n", + " 'chandelure',\n", + " 'change',\n", + " 'changed',\n", + " 'changes',\n", + " 'changing',\n", + " 'chansey',\n", + " 'chaos',\n", + " 'chaplin',\n", + " 'char',\n", + " 'character',\n", + " 'characterized',\n", + " 'characters',\n", + " 'charge',\n", + " 'charged',\n", + " 'charges',\n", + " 'charging',\n", + " 'charizard',\n", + " 'charjabug',\n", + " 'charlie',\n", + " 'charm',\n", + " 'charmander',\n", + " 'charmeleon',\n", + " 'chase',\n", + " 'chases',\n", + " 'chatter',\n", + " 'check',\n", + " 'cheek',\n", + " 'cheeks',\n", + " 'cheer',\n", + " 'cheerful',\n", + " 'chefs',\n", + " 'chemical',\n", + " 'chemically',\n", + " 'cherish',\n", + " 'chesnaught',\n", + " 'chespin',\n", + " 'chess',\n", + " 'chest',\n", + " 'chestnut',\n", + " 'chewable',\n", + " 'chewing',\n", + " 'chewtle',\n", + " 'chick',\n", + " 'chickadee',\n", + " 'chicken',\n", + " 'chicks',\n", + " 'chief',\n", + " 'chikorita',\n", + " 'child',\n", + " 'children',\n", + " 'chilling',\n", + " 'chills',\n", + " 'chimchar',\n", + " 'chime',\n", + " 'chimera',\n", + " 'chimes',\n", + " 'chinchou',\n", + " 'chinese',\n", + " 'chipped',\n", + " 'chipping',\n", + " 'choice',\n", + " 'chomps',\n", + " 'choose',\n", + " 'chooses',\n", + " 'chop',\n", + " 'chose',\n", + " 'chosen',\n", + " 'church',\n", + " 'chōchin',\n", + " 'cicada',\n", + " 'cinccino',\n", + " 'cinderace',\n", + " 'cinders',\n", + " 'circle',\n", + " 'circles',\n", + " 'circulates',\n", + " 'circulating',\n", + " 'circumstances',\n", + " 'citation',\n", + " 'cited',\n", + " 'cites',\n", + " 'cities',\n", + " 'city',\n", + " 'civilization',\n", + " 'civilizations',\n", + " 'claim',\n", + " 'claimed',\n", + " 'claiming',\n", + " 'claims',\n", + " ...]" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a TF-IDF vectorizer to transform the text into a matrix of features\n", + "vectorizer = TfidfVectorizer(stop_words=\"english\")\n", + "X = vectorizer.fit_transform(pkmn[\"Notes\"]).toarray()\n", + "y = pkmn[\"primary_type\"]\n", + "print(X.shape, y.shape)\n", + "list(vectorizer.get_feature_names_out())" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "id": "ICefCkn6LBBv" + }, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GpuzXYA0LBBw", + "outputId": "2216c89a-d8f8-46e8-c1ee-442a6961aa29" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dummy : 0.12455516014234876\n", + "Nearest Neighbors : 0.3665480427046263\n", + "Linear SVM : 0.12455516014234876\n", + "RBF SVM : 0.17437722419928825\n", + "LinearSVC : 0.47330960854092524\n", + "Decision Tree : 0.16370106761565836\n", + "Random Forest : 0.13167259786476868\n", + "Neural Net : 0.298932384341637\n", + "Gradient Boosting : 0.33451957295373663\n", + "AdaBoost : 0.1494661921708185\n", + "Naive Bayes : 0.3701067615658363\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/sklearn/discriminant_analysis.py:878: UserWarning: Variables are collinear\n", + " warnings.warn(\"Variables are collinear\")\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QDA : 0.05693950177935943\n", + "Best classifier: LinearSVC with score: 0.47330960854092524\n" + ] + } + ], + "source": [ + "names = [\n", + " \"Dummy\",\n", + " \"Nearest Neighbors\",\n", + " \"Linear SVM\",\n", + " \"RBF SVM\",\n", + " \"LinearSVC\",\n", + " # \"Gaussian Process\",\n", + " \"Decision Tree\",\n", + " \"Random Forest\",\n", + " \"Neural Net\",\n", + " \"Gradient Boosting\",\n", + " \"AdaBoost\",\n", + " \"Naive Bayes\",\n", + " \"QDA\",\n", + "]\n", + "\n", + "classifiers = [\n", + " DummyClassifier(),\n", + " KNeighborsClassifier(3),\n", + " SVC(kernel=\"linear\", C=0.025),\n", + " SVC(gamma=2, C=1),\n", + " LinearSVC(),\n", + " # GaussianProcessClassifier(1.0 * RBF(1.0)),\n", + " DecisionTreeClassifier(max_depth=5),\n", + " RandomForestClassifier(max_depth=5, n_estimators=10, max_features=1),\n", + " MLPClassifier(alpha=1, max_iter=1000),\n", + " GradientBoostingClassifier(),\n", + " AdaBoostClassifier(),\n", + " GaussianNB(),\n", + " QuadraticDiscriminantAnalysis(),\n", + "]\n", + "\n", + "\n", + "max_so_far = 0\n", + "for name, clf in zip(names, classifiers):\n", + " clf.fit(X_train, y_train)\n", + " print(name, \": \", clf.score(X_test, y_test))\n", + "\n", + " if clf.score(X_test, y_test) > max_so_far:\n", + " max_so_far = clf.score(X_test, y_test)\n", + " best_clf = clf\n", + " best_clf_name = name\n", + "\n", + "clf = best_clf\n", + "print(\"Best classifier: \", best_clf_name, \" with score: \", max_so_far)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "w6v8QJ3xWLfw", + "outputId": "0aae6cf5-f26b-4e7c-b93e-cd5215225d93" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_validation.py:372: FitFailedWarning: \n", + "20 fits failed out of a total of 80.\n", + "The score on these train-test partitions for these parameters will be set to nan.\n", + "If these failures are not expected, you can try to debug them by setting error_score='raise'.\n", + "\n", + "Below are more details about the failures:\n", + "--------------------------------------------------------------------------------\n", + "20 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_validation.py\", line 680, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"/usr/local/lib/python3.7/dist-packages/sklearn/svm/_classes.py\", line 272, in fit\n", + " sample_weight=sample_weight,\n", + " File \"/usr/local/lib/python3.7/dist-packages/sklearn/svm/_base.py\", line 1185, in _fit_liblinear\n", + " solver_type = _get_liblinear_solver_type(multi_class, penalty, loss, dual)\n", + " File \"/usr/local/lib/python3.7/dist-packages/sklearn/svm/_base.py\", line 1026, in _get_liblinear_solver_type\n", + " % (error_string, penalty, loss, dual)\n", + "ValueError: Unsupported set of arguments: The combination of penalty='l1' and loss='squared_hinge' are not supported when dual=True, Parameters: penalty='l1', loss='squared_hinge', dual=True\n", + "\n", + " warnings.warn(some_fits_failed_message, FitFailedWarning)\n", + "/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [ nan 0.40510863 0.41276571 0.41276571 nan 0.40971227\n", + " 0.41276571 0.41276571 nan 0.40971227 0.41276571 0.41276571\n", + " nan 0.41122725 0.41276571 0.41276571]\n", + " category=UserWarning,\n", + "/usr/local/lib/python3.7/dist-packages/sklearn/svm/_base.py:1208: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", + " ConvergenceWarning,\n" + ] + }, + { + "data": { + "text/plain": [ + "0.41276570757486786" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parameters = {\n", + " \"penalty\": [\"l1\", \"l2\"],\n", + " \"C\": [1, 10, 100, 1000],\n", + " \"multi_class\": [\"ovr\", \"crammer_singer\"],\n", + "}\n", + "\n", + "gs_clf = GridSearchCV(clf, parameters, cv=5, n_jobs=-1)\n", + "gs_clf.fit(X_train, y_train)\n", + "gs_clf.best_score_" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ct1IDpeghQan", + "outputId": "1159ea06-a44d-4528-eb9e-4a158d71f05e" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'C': 1, 'multi_class': 'crammer_singer', 'penalty': 'l1'}" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gs_clf.best_params_" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "AUubKCsvhuC9", + "outputId": "36862862-bf28-4d05-f8f3-a57b21684c89" + }, + "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", + " \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", + " \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", + "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_Cparam_multi_classparam_penaltyparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoresplit4_test_scoremean_test_scorestd_test_scorerank_test_score
00.0225430.0045290.0000000.0000001ovrl1{'C': 1, 'multi_class': 'ovr', 'penalty': 'l1'}NaNNaNNaNNaNNaNNaNNaN13
10.0836520.0016970.0053570.0004841ovrl2{'C': 1, 'multi_class': 'ovr', 'penalty': 'l2'}0.4656490.4045800.4122140.3969470.3461540.4051090.03810012
20.1161120.0147200.0081720.0038831crammer_singerl1{'C': 1, 'multi_class': 'crammer_singer', 'pen...0.4732820.3969470.4198470.4122140.3615380.4127660.0362971
30.1202340.0121570.0072470.0031751crammer_singerl2{'C': 1, 'multi_class': 'crammer_singer', 'pen...0.4732820.3969470.4198470.4122140.3615380.4127660.0362971
40.0150910.0023330.0000000.00000010ovrl1{'C': 10, 'multi_class': 'ovr', 'penalty': 'l1'}NaNNaNNaNNaNNaNNaNNaN14
50.2464300.0180340.0052650.00030110ovrl2{'C': 10, 'multi_class': 'ovr', 'penalty': 'l2'}0.4809160.4122140.4045800.3893130.3615380.4097120.03959710
60.1326180.0054600.0050940.00008010crammer_singerl1{'C': 10, 'multi_class': 'crammer_singer', 'pe...0.4809160.4122140.4122140.3969470.3615380.4127660.0387801
70.1463670.0140930.0050400.00005310crammer_singerl2{'C': 10, 'multi_class': 'crammer_singer', 'pe...0.4809160.4122140.4122140.3969470.3615380.4127660.0387801
80.0141140.0010500.0000000.000000100ovrl1{'C': 100, 'multi_class': 'ovr', 'penalty': 'l1'}NaNNaNNaNNaNNaNNaNNaN15
90.8341560.0308550.0050860.000078100ovrl2{'C': 100, 'multi_class': 'ovr', 'penalty': 'l2'}0.4732820.4045800.4122140.3969470.3615380.4097120.03621410
100.5195920.0219080.0051760.000095100crammer_singerl1{'C': 100, 'multi_class': 'crammer_singer', 'p...0.4809160.4122140.4122140.3969470.3615380.4127660.0387801
110.5132600.0136590.0049890.000057100crammer_singerl2{'C': 100, 'multi_class': 'crammer_singer', 'p...0.4809160.4122140.4122140.3969470.3615380.4127660.0387801
120.0138910.0007940.0000000.0000001000ovrl1{'C': 1000, 'multi_class': 'ovr', 'penalty': '...NaNNaNNaNNaNNaNNaNNaN16
130.6260050.1065140.0050550.0000831000ovrl2{'C': 1000, 'multi_class': 'ovr', 'penalty': '...0.4732820.3969470.4274810.4045800.3538460.4112270.0391309
144.0005730.1463040.0050130.0000321000crammer_singerl1{'C': 1000, 'multi_class': 'crammer_singer', '...0.4809160.4122140.4122140.3969470.3615380.4127660.0387801
153.9543070.1848810.0047610.0006061000crammer_singerl2{'C': 1000, 'multi_class': 'crammer_singer', '...0.4809160.4122140.4122140.3969470.3615380.4127660.0387801
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ], + "text/plain": [ + " mean_fit_time std_fit_time mean_score_time std_score_time param_C \\\n", + "0 0.022543 0.004529 0.000000 0.000000 1 \n", + "1 0.083652 0.001697 0.005357 0.000484 1 \n", + "2 0.116112 0.014720 0.008172 0.003883 1 \n", + "3 0.120234 0.012157 0.007247 0.003175 1 \n", + "4 0.015091 0.002333 0.000000 0.000000 10 \n", + "5 0.246430 0.018034 0.005265 0.000301 10 \n", + "6 0.132618 0.005460 0.005094 0.000080 10 \n", + "7 0.146367 0.014093 0.005040 0.000053 10 \n", + "8 0.014114 0.001050 0.000000 0.000000 100 \n", + "9 0.834156 0.030855 0.005086 0.000078 100 \n", + "10 0.519592 0.021908 0.005176 0.000095 100 \n", + "11 0.513260 0.013659 0.004989 0.000057 100 \n", + "12 0.013891 0.000794 0.000000 0.000000 1000 \n", + "13 0.626005 0.106514 0.005055 0.000083 1000 \n", + "14 4.000573 0.146304 0.005013 0.000032 1000 \n", + "15 3.954307 0.184881 0.004761 0.000606 1000 \n", + "\n", + " param_multi_class param_penalty \\\n", + "0 ovr l1 \n", + "1 ovr l2 \n", + "2 crammer_singer l1 \n", + "3 crammer_singer l2 \n", + "4 ovr l1 \n", + "5 ovr l2 \n", + "6 crammer_singer l1 \n", + "7 crammer_singer l2 \n", + "8 ovr l1 \n", + "9 ovr l2 \n", + "10 crammer_singer l1 \n", + "11 crammer_singer l2 \n", + "12 ovr l1 \n", + "13 ovr l2 \n", + "14 crammer_singer l1 \n", + "15 crammer_singer l2 \n", + "\n", + " params split0_test_score \\\n", + "0 {'C': 1, 'multi_class': 'ovr', 'penalty': 'l1'} NaN \n", + "1 {'C': 1, 'multi_class': 'ovr', 'penalty': 'l2'} 0.465649 \n", + "2 {'C': 1, 'multi_class': 'crammer_singer', 'pen... 0.473282 \n", + "3 {'C': 1, 'multi_class': 'crammer_singer', 'pen... 0.473282 \n", + "4 {'C': 10, 'multi_class': 'ovr', 'penalty': 'l1'} NaN \n", + "5 {'C': 10, 'multi_class': 'ovr', 'penalty': 'l2'} 0.480916 \n", + "6 {'C': 10, 'multi_class': 'crammer_singer', 'pe... 0.480916 \n", + "7 {'C': 10, 'multi_class': 'crammer_singer', 'pe... 0.480916 \n", + "8 {'C': 100, 'multi_class': 'ovr', 'penalty': 'l1'} NaN \n", + "9 {'C': 100, 'multi_class': 'ovr', 'penalty': 'l2'} 0.473282 \n", + "10 {'C': 100, 'multi_class': 'crammer_singer', 'p... 0.480916 \n", + "11 {'C': 100, 'multi_class': 'crammer_singer', 'p... 0.480916 \n", + "12 {'C': 1000, 'multi_class': 'ovr', 'penalty': '... NaN \n", + "13 {'C': 1000, 'multi_class': 'ovr', 'penalty': '... 0.473282 \n", + "14 {'C': 1000, 'multi_class': 'crammer_singer', '... 0.480916 \n", + "15 {'C': 1000, 'multi_class': 'crammer_singer', '... 0.480916 \n", + "\n", + " split1_test_score split2_test_score split3_test_score \\\n", + "0 NaN NaN NaN \n", + "1 0.404580 0.412214 0.396947 \n", + "2 0.396947 0.419847 0.412214 \n", + "3 0.396947 0.419847 0.412214 \n", + "4 NaN NaN NaN \n", + "5 0.412214 0.404580 0.389313 \n", + "6 0.412214 0.412214 0.396947 \n", + "7 0.412214 0.412214 0.396947 \n", + "8 NaN NaN NaN \n", + "9 0.404580 0.412214 0.396947 \n", + "10 0.412214 0.412214 0.396947 \n", + "11 0.412214 0.412214 0.396947 \n", + "12 NaN NaN NaN \n", + "13 0.396947 0.427481 0.404580 \n", + "14 0.412214 0.412214 0.396947 \n", + "15 0.412214 0.412214 0.396947 \n", + "\n", + " split4_test_score mean_test_score std_test_score rank_test_score \n", + "0 NaN NaN NaN 13 \n", + "1 0.346154 0.405109 0.038100 12 \n", + "2 0.361538 0.412766 0.036297 1 \n", + "3 0.361538 0.412766 0.036297 1 \n", + "4 NaN NaN NaN 14 \n", + "5 0.361538 0.409712 0.039597 10 \n", + "6 0.361538 0.412766 0.038780 1 \n", + "7 0.361538 0.412766 0.038780 1 \n", + "8 NaN NaN NaN 15 \n", + "9 0.361538 0.409712 0.036214 10 \n", + "10 0.361538 0.412766 0.038780 1 \n", + "11 0.361538 0.412766 0.038780 1 \n", + "12 NaN NaN NaN 16 \n", + "13 0.353846 0.411227 0.039130 9 \n", + "14 0.361538 0.412766 0.038780 1 \n", + "15 0.361538 0.412766 0.038780 1 " + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(gs_clf.cv_results_)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KKBzq6-gLBBy", + "outputId": "45199ff5-8d74-4610-f782-ff61d30f05d3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'In the green springtime, this creature photosynthesizes under the sun.' => Grass\n", + "'This create is native to caves in the Arctic. They make friends with polar bears, and sometimes drink hot cocoa.' => Ice\n" + ] + } + ], + "source": [ + "docs_new = [\n", + " \"In the green springtime, this creature photosynthesizes under the sun.\",\n", + " \"This create is native to caves in the Arctic. They make friends with polar bears, and sometimes drink hot cocoa.\",\n", + "]\n", + "\n", + "X_new_counts = vectorizer.transform(docs_new)\n", + "predicted = clf.predict(X_new_counts.toarray())\n", + "\n", + "for doc, cat in zip(docs_new, predicted):\n", + " print(f\"{doc!r} => {cat}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "id": "aF8K0Ku5LBB1", + "outputId": "b2492636-9610-4606-f976-aff09b460b6d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(confusion_matrix(y_test, clf.predict(X_test)))" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "lUVDLT01LBB2", + "outputId": "d4fd1914-ceb1-4c39-d6c6-a8acc794fddf" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Accuracy: 0.47330960854092524\n", + "\n", + " Classification Report\n", + "==================================\n", + "\n", + " precision recall f1-score support\n", + "\n", + " Bug 0.57 0.64 0.60 25\n", + " Dark 1.00 0.27 0.42 15\n", + " Dragon 1.00 0.17 0.29 6\n", + " Electric 0.55 0.55 0.55 11\n", + " Fairy 1.00 0.14 0.25 7\n", + " Fighting 0.33 0.30 0.32 10\n", + " Fire 0.58 0.37 0.45 19\n", + " Flying 0.00 0.00 0.00 1\n", + " Ghost 0.38 0.30 0.33 10\n", + " Grass 0.49 0.53 0.51 32\n", + " Ground 0.57 0.31 0.40 13\n", + " Ice 0.80 0.40 0.53 10\n", + " Normal 0.23 0.46 0.31 28\n", + " Poison 0.80 0.50 0.62 8\n", + " Psychic 0.63 0.52 0.57 23\n", + " Rock 0.54 0.35 0.42 20\n", + " Steel 0.40 0.25 0.31 8\n", + " Water 0.47 0.83 0.60 35\n", + "\n", + " accuracy 0.47 281\n", + " macro avg 0.57 0.38 0.42 281\n", + "weighted avg 0.55 0.47 0.47 281\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py:1318: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py:1318: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py:1318: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n" + ] + } + ], + "source": [ + "print(\"\\n Accuracy: \", accuracy_score(y_test, clf.predict(X_test)))\n", + "print(\"\\n Classification Report\")\n", + "print(\"==================================\")\n", + "print(\"\\n\", classification_report(y_test, clf.predict(X_test)))" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XamB14MKPJs-", + "outputId": "f758f37c-7945-4139-e067-b19ef8656510" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Accuracy: 0.49466192170818507\n", + "\n", + " Classification Report\n", + "==================================\n", + "\n", + " precision recall f1-score support\n", + "\n", + " Bug 0.57 0.64 0.60 25\n", + " Dark 1.00 0.40 0.57 15\n", + " Dragon 0.50 0.17 0.25 6\n", + " Electric 0.50 0.55 0.52 11\n", + " Fairy 0.50 0.14 0.22 7\n", + " Fighting 0.50 0.30 0.37 10\n", + " Fire 0.41 0.37 0.39 19\n", + " Flying 0.00 0.00 0.00 1\n", + " Ghost 0.42 0.50 0.45 10\n", + " Grass 0.50 0.50 0.50 32\n", + " Ground 0.67 0.31 0.42 13\n", + " Ice 0.67 0.40 0.50 10\n", + " Normal 0.30 0.50 0.38 28\n", + " Poison 0.80 0.50 0.62 8\n", + " Psychic 0.67 0.61 0.64 23\n", + " Rock 0.47 0.35 0.40 20\n", + " Steel 0.33 0.25 0.29 8\n", + " Water 0.49 0.83 0.62 35\n", + "\n", + " accuracy 0.49 281\n", + " macro avg 0.52 0.41 0.43 281\n", + "weighted avg 0.53 0.49 0.49 281\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py:1318: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py:1318: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py:1318: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n" + ] + } + ], + "source": [ + "print(\"\\n Accuracy: \", accuracy_score(y_test, gs_clf.predict(X_test)))\n", + "print(\"\\n Classification Report\")\n", + "print(\"==================================\")\n", + "print(\"\\n\", classification_report(y_test, gs_clf.predict(X_test)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In summary, we can see the grid search classifier is better than the best classifier, however, an accuracy around 0.49 still can be improved.\n", + "We're going to pick this analysis up in the next notebook where we'll look at using HuggingFace Transformers to improve the result." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "colab": { + "name": "nlp.ipynb", + "provenance": [] + }, + "interpreter": { + "hash": "45e1260056979d5382785f386f12ee00f44622d9a136ee7663e9a61a67ca2a68" + }, + "kernelspec": { + "display_name": "Python 3.10.0 ('projects-vBrzsZbN-py3.10')", + "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.10.0" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 0 +}