Skip to content

Instantly share code, notes, and snippets.

@ravigurnatham
Last active December 30, 2020 03:21
Show Gist options
  • Save ravigurnatham/0f56c4064e057a83a9a56d25ff92a900 to your computer and use it in GitHub Desktop.
Save ravigurnatham/0f56c4064e057a83a9a56d25ff92a900 to your computer and use it in GitHub Desktop.
4.ML_models.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "4.ML_models.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"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.7.0"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/ravigurnatham/0f56c4064e057a83a9a56d25ff92a900/4-ml_models.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "6VXPfRp-tARR"
},
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import re\n",
"import time\n",
"import warnings\n",
"import sqlite3\n",
"from sqlalchemy import create_engine # database connection\n",
"import csv\n",
"import os\n",
"warnings.filterwarnings(\"ignore\")\n",
"import datetime as dt\n",
"import numpy as np\n",
"from nltk.corpus import stopwords\n",
"from sklearn.decomposition import TruncatedSVD\n",
"from sklearn.preprocessing import normalize\n",
"from sklearn.feature_extraction.text import CountVectorizer\n",
"from sklearn.manifold import TSNE\n",
"import seaborn as sns\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.metrics import confusion_matrix\n",
"from sklearn.metrics.classification import accuracy_score, log_loss\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from collections import Counter\n",
"from scipy.sparse import hstack\n",
"from sklearn.multiclass import OneVsRestClassifier\n",
"from sklearn.svm import SVC\n",
"#from sklearn.cross_validation import StratifiedKFold \n",
"from collections import Counter, defaultdict\n",
"from sklearn.calibration import CalibratedClassifierCV\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn.naive_bayes import GaussianNB\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.model_selection import GridSearchCV\n",
"import math\n",
"from sklearn.metrics import normalized_mutual_info_score\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"\n",
"\n",
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.linear_model import SGDClassifier\n",
"from mlxtend.classifier import StackingClassifier\n",
"\n",
"from sklearn import model_selection\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.metrics import precision_recall_curve, auc, roc_curve"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZihvUPvHtARd"
},
"source": [
"<h1>4. Machine Learning Models </h1>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CtN9VBPutARf"
},
"source": [
"<h2> 4.1 Reading data from file and storing into sql table </h2>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "owBQdjY1tARh"
},
"source": [
"data = pd.read_csv('final_features.csv')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ZkeBKktKtAR3"
},
"source": [
"# remove the first row \n",
"data.drop(data.index[0], inplace=True)\n",
"y_true = data['is_duplicate']\n",
"data.drop(['Unnamed: 0', 'id','index','is_duplicate'], axis=1, inplace=True)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "QKSenpsmtAR9",
"outputId": "81d890ce-df79-4402-9324-84817dbd5a7d"
},
"source": [
"data.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cwc_min</th>\n",
" <th>cwc_max</th>\n",
" <th>csc_min</th>\n",
" <th>csc_max</th>\n",
" <th>ctc_min</th>\n",
" <th>ctc_max</th>\n",
" <th>last_word_eq</th>\n",
" <th>first_word_eq</th>\n",
" <th>abs_len_diff</th>\n",
" <th>mean_len</th>\n",
" <th>...</th>\n",
" <th>374_y</th>\n",
" <th>375_y</th>\n",
" <th>376_y</th>\n",
" <th>377_y</th>\n",
" <th>378_y</th>\n",
" <th>379_y</th>\n",
" <th>380_y</th>\n",
" <th>381_y</th>\n",
" <th>382_y</th>\n",
" <th>383_y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.999950002499875</td>\n",
" <td>0.999950002499875</td>\n",
" <td>0.66664444518516</td>\n",
" <td>0.66664444518516</td>\n",
" <td>0.799984000319994</td>\n",
" <td>0.799984000319994</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>3.84576550126076</td>\n",
" <td>-5.51264235377312</td>\n",
" <td>-0.358024716377258</td>\n",
" <td>3.85422609373927</td>\n",
" <td>-2.07180884480476</td>\n",
" <td>1.17879109084606</td>\n",
" <td>-3.82259720901493</td>\n",
" <td>17.9294180870056</td>\n",
" <td>6.13758105784655</td>\n",
" <td>5.8633434176445</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.249993750156246</td>\n",
" <td>0.199996000079998</td>\n",
" <td>0.399992000159997</td>\n",
" <td>0.333327777870369</td>\n",
" <td>0.333329629670781</td>\n",
" <td>0.272724793410969</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>10.0</td>\n",
" <td>...</td>\n",
" <td>11.3517099916935</td>\n",
" <td>10.9447109103203</td>\n",
" <td>1.44936266541481</td>\n",
" <td>-10.5928235352039</td>\n",
" <td>9.33735802769661</td>\n",
" <td>8.19568392634392</td>\n",
" <td>-5.68045300245285</td>\n",
" <td>-0.61983310431242</td>\n",
" <td>7.05442875623703</td>\n",
" <td>13.1642249077559</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.999966667777741</td>\n",
" <td>0.599988000239995</td>\n",
" <td>0.33332222259258</td>\n",
" <td>0.199996000079998</td>\n",
" <td>0.666655555740738</td>\n",
" <td>0.39999600004</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>4.0</td>\n",
" <td>8.0</td>\n",
" <td>...</td>\n",
" <td>13.0323238372803</td>\n",
" <td>7.01980519294739</td>\n",
" <td>-8.40432769060135</td>\n",
" <td>-11.4352125823498</td>\n",
" <td>8.96106279455125</td>\n",
" <td>3.31969557423145</td>\n",
" <td>-18.8589900434017</td>\n",
" <td>15.4660622030497</td>\n",
" <td>12.6924749314785</td>\n",
" <td>-8.15571640431881</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.499991666805553</td>\n",
" <td>0.333329629670781</td>\n",
" <td>0.499987500312492</td>\n",
" <td>0.333327777870369</td>\n",
" <td>0.416663194473379</td>\n",
" <td>0.312498046887207</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>4.0</td>\n",
" <td>14.0</td>\n",
" <td>...</td>\n",
" <td>-27.867176130414</td>\n",
" <td>-9.19766622781754</td>\n",
" <td>14.6727953851223</td>\n",
" <td>-4.65406697243452</td>\n",
" <td>16.6825376152992</td>\n",
" <td>-0.962311714887619</td>\n",
" <td>-16.2765829637647</td>\n",
" <td>13.3052362054586</td>\n",
" <td>-6.86051099002361</td>\n",
" <td>-0.871146216988564</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0.599988000239995</td>\n",
" <td>0.333329629670781</td>\n",
" <td>0.33332222259258</td>\n",
" <td>0.33332222259258</td>\n",
" <td>0.499993750078124</td>\n",
" <td>0.307689940846609</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>5.0</td>\n",
" <td>10.5</td>\n",
" <td>...</td>\n",
" <td>-3.11328846216202</td>\n",
" <td>8.38540803641081</td>\n",
" <td>8.25216651335359</td>\n",
" <td>-4.29768052883446</td>\n",
" <td>7.62981984019279</td>\n",
" <td>-11.261333078146</td>\n",
" <td>1.8511117734015</td>\n",
" <td>5.46457130089402</td>\n",
" <td>6.80498712509871</td>\n",
" <td>-10.7007412612438</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 794 columns</p>\n",
"</div>"
],
"text/plain": [
" cwc_min cwc_max csc_min csc_max \\\n",
"1 0.999950002499875 0.999950002499875 0.66664444518516 0.66664444518516 \n",
"2 0.249993750156246 0.199996000079998 0.399992000159997 0.333327777870369 \n",
"3 0.999966667777741 0.599988000239995 0.33332222259258 0.199996000079998 \n",
"4 0.499991666805553 0.333329629670781 0.499987500312492 0.333327777870369 \n",
"5 0.599988000239995 0.333329629670781 0.33332222259258 0.33332222259258 \n",
"\n",
" ctc_min ctc_max last_word_eq first_word_eq \\\n",
"1 0.799984000319994 0.799984000319994 1.0 1.0 \n",
"2 0.333329629670781 0.272724793410969 0.0 1.0 \n",
"3 0.666655555740738 0.39999600004 1.0 0.0 \n",
"4 0.416663194473379 0.312498046887207 0.0 0.0 \n",
"5 0.499993750078124 0.307689940846609 0.0 0.0 \n",
"\n",
" abs_len_diff mean_len ... 374_y \\\n",
"1 0.0 5.0 ... 3.84576550126076 \n",
"2 2.0 10.0 ... 11.3517099916935 \n",
"3 4.0 8.0 ... 13.0323238372803 \n",
"4 4.0 14.0 ... -27.867176130414 \n",
"5 5.0 10.5 ... -3.11328846216202 \n",
"\n",
" 375_y 376_y 377_y \\\n",
"1 -5.51264235377312 -0.358024716377258 3.85422609373927 \n",
"2 10.9447109103203 1.44936266541481 -10.5928235352039 \n",
"3 7.01980519294739 -8.40432769060135 -11.4352125823498 \n",
"4 -9.19766622781754 14.6727953851223 -4.65406697243452 \n",
"5 8.38540803641081 8.25216651335359 -4.29768052883446 \n",
"\n",
" 378_y 379_y 380_y \\\n",
"1 -2.07180884480476 1.17879109084606 -3.82259720901493 \n",
"2 9.33735802769661 8.19568392634392 -5.68045300245285 \n",
"3 8.96106279455125 3.31969557423145 -18.8589900434017 \n",
"4 16.6825376152992 -0.962311714887619 -16.2765829637647 \n",
"5 7.62981984019279 -11.261333078146 1.8511117734015 \n",
"\n",
" 381_y 382_y 383_y \n",
"1 17.9294180870056 6.13758105784655 5.8633434176445 \n",
"2 -0.61983310431242 7.05442875623703 13.1642249077559 \n",
"3 15.4660622030497 12.6924749314785 -8.15571640431881 \n",
"4 13.3052362054586 -6.86051099002361 -0.871146216988564 \n",
"5 5.46457130089402 6.80498712509871 -10.7007412612438 \n",
"\n",
"[5 rows x 794 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 23
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CuMTqWGutASO"
},
"source": [
"<h2> 4.3 Random train test split( 70:30) </h2>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "3Rat2obGtASP"
},
"source": [
"X_train,X_test, y_train, y_test = train_test_split(data, y_true, stratify=y_true, test_size=0.3)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "1Iw9zCHqtASS",
"outputId": "910b684b-0876-4dd8-e0d9-457846236833"
},
"source": [
"print(\"Number of data points in train data :\",X_train.shape)\n",
"print(\"Number of data points in test data :\",X_test.shape)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Number of data points in train data : (70000, 794)\n",
"Number of data points in test data : (30000, 794)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "0oDV15LJtASY",
"outputId": "70a1e4eb-3f31-4f1e-a53b-ad972978505d"
},
"source": [
"print(\"-\"*10, \"Distribution of output variable in train data\", \"-\"*10)\n",
"train_distr = Counter(y_train)\n",
"train_len = len(y_train)\n",
"print(\"Class 0: \",int(train_distr[0])/train_len,\"Class 1: \", int(train_distr[1])/train_len)\n",
"print(\"-\"*10, \"Distribution of output variable in train data\", \"-\"*10)\n",
"test_distr = Counter(y_test)\n",
"test_len = len(y_test)\n",
"print(\"Class 0: \",int(test_distr[1])/test_len, \"Class 1: \",int(test_distr[1])/test_len)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"---------- Distribution of output variable in train data ----------\n",
"Class 0: 0.6307428571428572 Class 1: 0.36925714285714284\n",
"---------- Distribution of output variable in train data ----------\n",
"Class 0: 0.36923333333333336 Class 1: 0.36923333333333336\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "XfxcPT6jtASg"
},
"source": [
"# This function plots the confusion matrices given y_i, y_i_hat.\n",
"def plot_confusion_matrix(test_y, predict_y):\n",
" C = confusion_matrix(test_y, predict_y)\n",
" # C = 9,9 matrix, each cell (i,j) represents number of points of class i are predicted class j\n",
" \n",
" A =(((C.T)/(C.sum(axis=1))).T)\n",
" #divid each element of the confusion matrix with the sum of elements in that column\n",
" \n",
" # C = [[1, 2],\n",
" # [3, 4]]\n",
" # C.T = [[1, 3],\n",
" # [2, 4]]\n",
" # C.sum(axis = 1) axis=0 corresonds to columns and axis=1 corresponds to rows in two diamensional array\n",
" # C.sum(axix =1) = [[3, 7]]\n",
" # ((C.T)/(C.sum(axis=1))) = [[1/3, 3/7]\n",
" # [2/3, 4/7]]\n",
"\n",
" # ((C.T)/(C.sum(axis=1))).T = [[1/3, 2/3]\n",
" # [3/7, 4/7]]\n",
" # sum of row elements = 1\n",
" \n",
" B =(C/C.sum(axis=0))\n",
" #divid each element of the confusion matrix with the sum of elements in that row\n",
" # C = [[1, 2],\n",
" # [3, 4]]\n",
" # C.sum(axis = 0) axis=0 corresonds to columns and axis=1 corresponds to rows in two diamensional array\n",
" # C.sum(axix =0) = [[4, 6]]\n",
" # (C/C.sum(axis=0)) = [[1/4, 2/6],\n",
" # [3/4, 4/6]] \n",
" plt.figure(figsize=(20,4))\n",
" \n",
" labels = [1,2]\n",
" # representing A in heatmap format\n",
" cmap=sns.light_palette(\"blue\")\n",
" plt.subplot(1, 3, 1)\n",
" sns.heatmap(C, annot=True, cmap=cmap, fmt=\".3f\", xticklabels=labels, yticklabels=labels)\n",
" plt.xlabel('Predicted Class')\n",
" plt.ylabel('Original Class')\n",
" plt.title(\"Confusion matrix\")\n",
" \n",
" plt.subplot(1, 3, 2)\n",
" sns.heatmap(B, annot=True, cmap=cmap, fmt=\".3f\", xticklabels=labels, yticklabels=labels)\n",
" plt.xlabel('Predicted Class')\n",
" plt.ylabel('Original Class')\n",
" plt.title(\"Precision matrix\")\n",
" \n",
" plt.subplot(1, 3, 3)\n",
" # representing B in heatmap format\n",
" sns.heatmap(A, annot=True, cmap=cmap, fmt=\".3f\", xticklabels=labels, yticklabels=labels)\n",
" plt.xlabel('Predicted Class')\n",
" plt.ylabel('Original Class')\n",
" plt.title(\"Recall matrix\")\n",
" \n",
" plt.show()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "UStQJ5F_tASk"
},
"source": [
"<h2> 4.4 Building a random model (Finding worst-case log-loss) </h2>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "qwMDqcU7tASl",
"outputId": "c1e90d53-25ec-445b-e33a-299538520e32"
},
"source": [
"predicted_y = np.zeros((test_len,2))\n",
"for i in range(test_len):\n",
" rand_probs = np.random.rand(1,2)\n",
" predicted_y[i] = ((rand_probs/sum(sum(rand_probs)))[0])\n",
"print(\"Log loss on Test Data using Random Model\",log_loss(y_test, predicted_y, eps=1e-15))\n",
"\n",
"predicted_y =np.argmax(predicted_y, axis=1)\n",
"plot_confusion_matrix(y_test, predicted_y)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Log loss on Test Data using Random Model 0.8882889609999923\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAAEWCAYAAAATsZzkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3Xm4VVX5wPHvy0WcBRWHABOcpxzSNLXBNBU10dKKrNRCzXLIBjWz0jT7OVRm4URIaqlYlolDqWVaWiJoWoKoKBkgTgxOoDK8vz/2vnC43HvuBe65A/f7eZ7zcM7aa++ztu67333evfZakZlIkiRJkiSp6+nW3g2QJEmSJElS+zAxJEmSJEmS1EWZGJIkSZIkSeqiTAxJkiRJkiR1USaGJEmSJEmSuigTQ5IkSZIkSV2UiSEtk4hYNSJujYhXI+K3y7Gdz0bEXa3ZtvYSER+MiCfbux2S1JFFxLiI2KuZOu+OiDcioq6NmlVT5b5s0t7tkKQVTUTsFRFTKj7/NyI+2p5tqhQRV0TEd9u7HVJzTAyt4CLiiIgYW16UTouIP0bEB1ph04cDGwDrZuYnl3UjmXldZu7XCu2pqYjIiNisWp3M/HtmbtlWbZKk1lReTM8p48WLEXF1RKzR2t+Tmdtm5r3N1PlfZq6RmfNb+/tbU0TcGxHHNFev3Jdn26JNktReGsSRF2oVRzqCiDg6Iu5vrl5mHp+Z57ZFm6TlYWJoBRYRXwd+CvyQIonzbuAy4JBW2PzGwFOZOa8VttXpRUT39m6DJLWCgzNzDeC9wC7AdxpWiILXDy1gbJDUBdXHkR2BnYAz2rk97WZF6fWqrsELuxVURPQEzgFOyMzfZ+abmTk3M2/NzFPLOitHxE8j4vny9dOIWLlctldETImIb0TES2Vvoy+Uy74PfA/4dHlHYEhEnB0Rv674/v5lL5vu5eejI+LZiHg9IiZFxGcryu+vWG+PiBhTPqI2JiL2qFh2b0ScGxEPlNu5KyJ6N7H/9e0/raL9h0bEgRHxVETMiIhvV9TfNSL+GRGzyrpDI6JHuexvZbXHyv39dMX2T4+IF4BfVnZljYhNy+94b/m5T0S83NzjE5LUEWTmVOCPwHaw8Px7XkQ8AMwGNomInhFxVXnOnBoRP6i8CI6IYyPiifJ8Pb7ifLiwm3957h0bEa+VvZR+UpY3jCF9ImJUeV6dGBHHVnzP2RHxm4i4tvyucRGxS1P7Vm73KxHxdFn/3PKc/Y+yHb+pOP+vHRG3lefvmeX7fuWy84APAkPL2DC0YvsnRMTTwNMVZZtFRI+IeDQiTirL68qY9r1W+R8nSR1EZr4A3EmRIAIW/vb4UUT8rzznXxERq1YsP6Q8R74WEc9ExMCy/AsV8eTZiPjSsrQpih5Ml0XxBMUb5fl3wyh+A82MiAkRsVNF/W+V7aiPYx8vy7cGrgB2L7czq2L7l0fEHRHxJvCRsuwH5fLTI2J0RWz7chmzVlmW/ZFak4mhFdfuwCrAzVXqnAm8n+KEvQOwK4vfHd4Q6An0BYYAl0bE2pl5FkUvpBvL7vFXVWtIRKwO/Aw4IDPXBPYAHm2k3jrA7WXddYGfALdHxLoV1Y4AvgCsD/QAvlnlqzek+G/QlyKR9Qvgc8DOFBfz342IAWXd+cDXgN4U/+32Ab4CkJkfKuvsUO7vjRXbX4ei99RxlV+cmc8ApwO/jojVgF8C1zT3+IQkdQQRsRFwIPCviuLPU5zr1gSeA64G5gGbUdwV3g84plz/k8DZwJHAWsAgYHojX3UJcElmrgVsCvymiSaNBKYAfSgeZf5hROxdsXxQWacXMAoY2swu7k8RC94PnAYMo4gPG1Ekwz5T1utGcf7emKLX7Zz6bWfmmcDfgRPL2HBixfYPBXYDtqn80sx8p/yec8ofFt8C6oDzmmmvJHUqZRL9AGBiRfH5wBYUvz02Y9E1OhGxK3AtcCrFufxDwH/L9V4CPkYRT74AXFx/s2EZfIri905v4G3gn8Aj5eebKH5/1HuG4jdDT+D7FNf178rMJ4DjgX+W5/9eFescQXFOXxNo+KjZReV3ficiNqf4PfW5zHxrGfdFajUmhlZc6wKvNPOo12eBczLzpcx8meKE9/mK5XPL5XMz8w7gDWBZx9BZAGwXEatm5rTMHNdInYOApzPzV5k5LzNvACYAB1fU+WVmPpWZcyh+QOzYyHYq239eZs6l+MHQm+IHyOvl94+nSIiRmQ9n5oPl9/4XuBL4cAv26azMfLtsz2Iy8xcUwXA08C6KRJwkdWR/KO983g/cR3HRWu/qzBxXxpV1KBJHp5Q9Ul8CLgYGl3WPAS7MzDFZmJiZzzXyfXOBzSKid2a+kZkPNqxQJqn2BE7PzLcy81FgOEXSqd79mXlHOSbRryjP7VVcmJmvlbHgceCuzHw2M1+l6Cm1E0BmTs/M32Xm7Mx8neJiv7nYAPB/mTmjidjwOPAD4A8UNzc+39HHUpKkpfCHiHgdmEyR0DkLiseQKW4ufK08P75OEWPq48YQYERm3p2ZCzJzamZOAMjM2zPzmTKe3AfcRZGwWRY3l9f9b1HcQH8rM68tz8M3Up7/y+/9bWY+X7bnRopeoLs2s/1bMvOBcp3FEj6ZuYAidp1McRPjwsz8V2MbkdqaiaEV13Sgd1Qf36APxV3fes+VZQu30SCxNBtY6gHkMvNN4NMUmfVpEXF7RGzVgvbUt6lvxecXlqI90ysutusvzl+sWD6nfv2I2KJ8ROCFiHiNIlA1+phahZdbkOH/BcXd559n5tvN1JWk9nZoZvbKzI0z8ysNEhuTK95vDKxEcU6fVSaTrqTozQlFz5tnWvB9QyjuHk+I4vHhjzVSpw9Q/yOiXnOxYZVm4l/DWNBUbFgtIq6MiOfK2PA3oFc0P27E5GaWX0Px3/COzHy6mbqS1JkcWj4hsBewFYuup9cDVgMerogbfyrLoUrciIgDIuLBKB4nnkVxY6K56/SmtOj8X37vkeWjbfXt3a4F31v1/F/egP4r0B+4tOXNlmrLxNCK658UXRUPrVLneYoL03rvLsuWxZsUJ/t6G1YuzMw7M3Nfip4zEygSJs21p75NU5exTUvjcop2bV4+0vBtIJpZJ6stjGIWhp8CVwFnl4/KSVJnVXnOm0wRY3qXiaRemblWZm5bsXzTZjeY+XRmfoYioXQBcFP5+HGl54F1ImLNirK2ig3foOgpu1sZG+ofLa6PD03FgarxgWIiiNuA/aN1ZgqVpA6l7NlzNfCjsugVisTLthVxo2cWA1VDE3EjivFPf1duZ4Pysa07aP46fblExMYUv1dOpJiFuRdFD9PlOv9HxEEUw1b8heLRMqlDMDG0giq7w3+PYlygQ8u7niuVGfcLy2o3UDzjul4Ugzh/D/h1U9tsxqPAhyLi3VEMfL1wBoKI2KAcTG51ih8Sb1A8htXQHcAWEXFERHSPiE9TjM9w2zK2aWmsCbwGvFH2Zvpyg+UvApss5TYvAcZm5jEUYyddsdytlKQOIDOnUXTl/3FErBUR3aIYwLn+MavhwDcjYucobFZeZC8mIj4XEeuV3etnlcWLxYfMnAz8A/i/iFglIran6Gm0rPFqaaxJ8UNmVpncP6vB8qWODRHxeYrxjY6meJzgmlhBp3OW1OX9FNg3InYoz/O/oBgfaH2AiOgbEfuXda8CvhAR+5QxpW95Td4DWBl4GZgXEQdQjGlXa6tTJHleLtv6BcoJGUovAv2inKygJcrfW8MpHrc+Cjg4Ig5stRZLy8HE0AosM38MfJ1igLWXKTLxJ1KMawDFGAdjgX8D/6EYeO0Hy/hdd1M8l/tv4GEWT+Z0K9vxPDCDYnyGhokXMnM6xcBy36B4FO404GOZ+cqytGkpfZNisLjXKYLWjQ2Wn01x8T4rIj7V3MYi4hBgIIv28+vAe6OcjU2SVgBHUlywjwdmUgza+S4oxmWgGI/neorz6h8oxiVqaCAwLiLeoEimD25sXB6KwaD7U8SRmynGd/tza+5ME34KrEpxp/tBisceKl0CHB7FbDY/a25jEfHucptHlmMqXU8Rhy9u3WZLUvsrxzC9lnKAaYqJWSYCD5aP5/6ZcvzSzHyIcmBp4FWKce42Lh8jPplibNGZFNfro9qg7eOBH1M8hfEi8B7ggYoq9wDjgBcioqW/VYZRjEF0R/m7ZwgwvMFEO1K7iMzmejtLkiRJkiRpRWSPIUmSJEmSpC7KxJAkSZIkSVIXZWJIkiRJkiSpizIxJEmSJEmS1EV1b+8GNCUCR8WWtIRMYnnWX5pzy/J+l2rLOCGpMcYJ1TNOqN7Uqe3dAnUkffoYJxqyx5AkSZIkSVIXZWJIkiRJkiSpizIxJEmSJEmS1EWZGJIkSZIkSeqiTAxJkiRJkiR1USaGJEmSJEmSuigTQ5IkSZIkSV2UiSFJkiRJkqQuysSQJEmSJElSF2ViSJIkSZIkqYsyMSRJkiRJktRFmRiSJEmSJEnqokwMSZIkSZIkdVEmhiRJkiRJkrooE0OSJEmSJEldlIkhSZIkSZKkLsrEkCRJkiRJUhdlYkiSJEmSJKmLMjEkSZIkSZLURZkYkiRJkiRJ6qJMDEmSJEmSJLWxiBgYEU9GxMSI+FYjy4+OiJcj4tHydUzFsqMi4unydVRZtlpE3B4REyJiXESc35J2dG+9XZIkSZIkSVJzIqIOuBTYF5gCjImIUZk5vkHVGzPzxAbrrgOcBewCJPBwRIwC3gZ+lJl/jYgewF8i4oDM/GO1tthjSJIkSaqR5u4Gl3U+FRHjy7u711eUL3E3WJK0wtgVmJiZz2bmO8BI4JAWrrs/cHdmzsjMmcDdwMDMnJ2ZfwUot/kI0K+5jZkYkiRJkmqg4m7wAcA2wGciYpsGdTYHzgD2zMxtgVPK8vq7wbtR/Hg4KyLWbsPmS5KWU0QcFxFjK17HVSzuC0yu+DylLGvosIj4d0TcFBEbtXTdiOgFHAz8pbl2mhiSJEmSaqMld4OPBS4t7/iSmS+V5Y3eDW6jdkuSWkFmDsvMXSpew5ZyE7cC/TNze4o4cE1LVoqI7sANwM8y89nm6psYkiRJkpZBM3eCoWV3g7cAtoiIByLiwYgYuBTrSpI6r6nARhWf+5VlC2Xm9Mx8u/w4HNi5hesOA57OzJ+2pCEOPi1JkiQtg/LO79Le/W2oO7A5sBfFhf3fIuI9y7lNSVLHNwbYPCIGUCR1BgNHVFaIiHdl5rTy4yDgifL9ncAPKx4x3o/isWQi4gdAT+AYWsjEkCRJklQbzd4NpugJNDoz5wKTIuIpikTRVIpkUeW699aspZKkNpWZ8yLiRIokTx0wIjPHRcQ5wNjMHAWcHBGDgHnADODoct0ZEXEuRXIJ4JyyrB9wJjABeCQiAIZm5vBqbYnMbP09bAURdMyGSWpXmcTyrL8055bl/S7VlnFCUmM6Upwox3h4CtiHItEzBjgiM8dV1BkIfCYzj4qI3sC/gB0ppx8G3ltWfQTYOTNnLMXudGnGCdWb2jAdqy6tT5+OEyc6CnsMSZIkSTXQwrvBdwL7RcR4YD5wamZOB2jsbnDb74UkaUVnjyFJnUpHuhOs9mWckNQY44TqGSdUzx5DqmSPoSU5K5kkSZIkSVIXZWJIkiRJkiSpizIxJEmSJEmS1EWZGJIkSZIkSeqiTAxJ0nKIiK9FxLiIeDwiboiIVSJin4h4JCIejYj7I2Kzsu7KEXFjREyMiNER0b9iO2eU5U9GxP7ttT+SJEmSuhanq5fUpWy/fettKyL6AicD22TmnIj4DTAY+DZwSGY+ERFfAb4DHA0MAWZm5mYRMRi4APh0RGxTrrct0Af4c0RskZnzW6+1kqSWaM04IUla8ayIccIeQ5K0fLoDq0ZEd2A14HkggbXK5T3LMoBDgGvK9zcB+0RElOUjM/PtzJwETAR2baP2S5IkSerC7DEkSU2IiOOA4yqKhmXmsPoPmTk1In4E/A+YA9yVmXdFxDHAHRExB3gNeH+5Sl9gcrnuvIh4FVi3LH+w4numlGWSJEmSVFP2GJKkJmTmsMzcpeI1rHJ5RKxN0dtnAMUjYKtHxOeArwEHZmY/4JfAT9q67ZIkSZLUEiaGJGnZfRSYlJkvZ+Zc4PfAnsAOmTm6rHMjsEf5fiqwEUD56FlPYHplealfWSZJkiRJNWViSJKW3f+A90fEauVYQfsA44GeEbFFWWdf4Iny/SjgqPL94cA9mZll+eBy1rIBwObAQ221E5IkSZK6LscYkqRllJmjI+Im4BFgHvAvYBjFGEG/i4gFwEzgi+UqVwG/ioiJwAyKmcjIzHHljGbjy+2c4IxkkiRJktpCFDerO54IOmbDJLWrTGJ51t9hh5afWx57bPm+S7VlnJDUGOOE6hknVG+qD+irQp8+xomGfJRMkiRJkiSpizIxJEmSJEmS1EWZGJIkSZIkSeqiTAxJkiRJkiR1USaGJEmSJEmSuigTQ5IkSZIkSV2UiaFWcvLJ8J//wOOPw1e/WpSddRZMmQL/+lfxOuCAonyddeCee+D11+HnP198O+99L/z73/D003DJJU1/3yWXFHUeewx22mlR+ZFHwlNPFa8jj1z67Wr5NXYs1Pv61yET1l23+LzllvCPf8Bbb8E3vrGo3sorw+jR8OijxXbOPrvx7+rRA0aOLP6/PvggbLzxomXf+lZRPmEC7LffovL99y/Knn4aTj+9VXZZUitpyd/nJz8J48YV54brrivK3v1uePjhItY8/jh86UuL6v/gB/C//xUxR52Hx4KkxjR3bjjqKHjppUW/P4YMWbSsqd8Jf/zjomvOyy+Hbv5C7BQeeuhvHHnk/nz2s/ty/fXDmqx333138pGPbMmTT/4HgLlz3+GCC87gi188mCFDBvHoo6MBmD37DY455pCFr0MO2Y2hQ89rk31R++ve3g1YEWy7LRx7LOy6K7zzDvzpT3DbbcWyiy+GH/948fpvvQXf/S5st13xqnT55cW2Ro+GO+6AgQOL7VU64ADYfPPitdtuxTrvfz+svXaRjNpllyL58PDDMGoUzJrVsu1q+TV1LDzzDPTrVyRonntuUf0ZM4pE0qGHLr6dt9+GvfeGN9+E7t3h/vuLoD169OL1hgyBmTOLY+HTn4YLLoDBg2HrrYt/t90W+vSBP/8ZttiiWOfSS2HffYuk5ZgxxTHyxBO1/e8iqXndujX/97nZZnDGGbDnnsW5fb31ivJp02D33YvzzuqrFxf3o0YV5bfeCkOHFj8i1Dl4LEhqTEvODQA33ggnnbR4WbXfCZ/61KKE8U03FUnnG29sm33Sspk/fz6XXHIOF130S9ZbbwOOP/5w9thjb/r332yxerNnv8Hvf38tW2+9w8Ky2277LQAjRtzKzJnTOf30Y7niiptYbbU1GD78loX1jjvuE3zwg/uhrsF8cCvYeuviB/ucOTB/Ptx3H3ziE03Xnz0bHnigSBBV2nBDWGutRT/+r712yYQBwCGHFMugqNurV7Hu/vvD3XcXiYJZs4r3Awe2fLtaftWOhYsvhtNOK4JxvZdfhrFjYe7cJbf15pvFvyutVLwq16t3yCFwzTXF+5tugn32WVQ+cmTxw+C//4WJE4tk1a67Fu8nTSq+c+TIoq6k9teSv89jjy1+FMyaVXx++eXi37lzi793KHocVt7tHT0aXnih9u1X6/FYkNSY5bmOa+p3AixKCnXvXvRGb+yaUx3LhAn/pk+fjenTZyNWWqkHe+99EA888Jcl6o0YcQmDBx9Ljx4rLyx77rmJ7LTTbgCsvfa6rLHGmjz55OOLrTd58iRmzZrO9tvvUtsdUYfR5omhiPhCW39nrT3+OHzwg8UjYquuCgceCBttVCw78cTica+rrioSONX07Vtk/+tNmVKUNVZv8uQl61Urb8l2tfyaOhYGDYKpU4vH+VqqW7eiC/BLLxXB+6GHlqxT+f98/nx49dXiMbWlPUakjmRFjBMt0ZK/zy22KF733w///GdxoV+vX78i3kyeXPQenDatbdqt1uexIFVnnCg0dR132GHFOeC3vy3OBy1Z909/Kq45X3+9uNmoju2VV15k/fU3XPh5vfU24JVXXlyszlNPjeOll15g9933Wqx800234h//uIf58+cxbdrkst7igeKee27nIx85kIio2T6oY2mPHkPfb2pBRBwXEWMjYiw0/ZxkRzNhQnHhddddxUn10UeLH+mXXw6bbgo77lhclDV8pEwrnsaOhZVXhm9/G773vaXb1oIFxfhR/foVd4i23bY2bZY6oBUuTrSW7t2LR0f32gs+8xn4xS+gZ89i2ZQpsMMOxSNGRx0F66/frk1VjXksqIszTjTh1luhf//iHHD33Yt6ljdn4EB417uK69a9965pE9UGFixYwGWXnc9XvrLkQFQHHngY6623IV/60mEMHfpDtttuJ+rq6har89e/3sHeex/UVs1VB1CTxFBE/LuJ13+ADZpaLzOHZeYumbkLHFeLptXMiBHFM7sf/nDRRfOpp4qs+4IFRXfMX/yi+HFfzdSpi7L6ULyfOrXxevU9kirrVStvyXbVOhoeC+PGwYABxZ2bSZOK//6PPAIbNPmXsLhXX4W//nVRd99Klf/P6+qKHwXTpy/9MSK1ta4YJ5rTkr/PKVOKMSHmzSseE33qqSI5UGnatEW9F9U5eSxIxonGtOTcMGPGosdJhw+HnXdu+bpvvw233OIwA51B794b8NJLi54NfvnlF+nde9GfxezZbzJp0lOccsqRDB68N+PHP8qZZ36ZJ5/8D3V13TnhhG8zfPgtnHfe5bzxxuv069d/4boTJ05g/vz5bLllg8FwtUKrVY+hDYAjgYMbeU2v0Xe2q/pBHzfaqBhT5vrri7F96n3848XFWTUvvACvvVYMKA3FbAG33LJkvVGjFs0ksNtuReLghRfgzjuLwY179Spe++1XlLV0u2odDY+Fa64pkkADBhSvKVOKWeJefLHpbfTuvejO7yqrFIMMTpiwZL1Ro4q7wQCHH17MdldfPnhw8Zx4//7Fj4WHHioGKdx886JspZWKOqNGtdaeS0uly8WJ5rTk7/MPfyh6iEDx2OgWW8CzzxaPA6yySlHeqxd84APw5JNt2Xq1Jo8FCTBOLKEl54bK3x+DBi0amLqp3wmrr75onbo6OOigxq851bFstdV7mDr1v0ybNpm5c9/hnntuZ489FnX1WmONNbnlltGMHHkPI0fewzbb7Mh5513Ollu+h7femsOcObMBGDv2Aerq6hYbtPqee26zt1AXVKtZyW4D1sjMRxsuiIh7a/Sd7ep3vysuzObOhRNOKJI1P/958RhZZnE3r3LK2EmTigGhe/QoBoLeb7/ixP2Vr8DVVxfj0/zxj8ULFq175ZXFrGIHHlgMPjd7NnyhfMp65kw499wiaACcc05RBk1vV62vsWOhKRtsUAw+vdZaRe+yU06BbbYpuvJec00RoLt1g9/8Bm6/vVjn+98v1rn11mLsql/9qphhZsaM4gIBYPz4Yp3x44u7ySecUGwfinGv7ryz2PaIEUUdqR10uTjRnPnzG//7rPybr7+wHzeuqH/qqcXf/kc/WjyunAkR8KMfLboZccEFcMQRsNpqxfgSw4cX21TH5bEgAcaJJbTk3HDyyUVCaN684pxw9NHFuk39Tlh//SK5VD9Y/V//Cldc0W67qBaqq+vOySd/j9NOO4YFC+ZzwAGHMWDA5owYcQlbbrkde+65T5Przpo1ndNOG0JEN3r33oAzzrhwseX33vtHzj+/6z2G2dVFdtBh5yPomA2T1K4yWa5R8HbYoeXnlsceW77vUm0ZJyQ1xjihesYJ1XPoBFXq08c40ZDT1UuSJEmSJHVRJoYkSZIkSZK6KBNDkiRJkiRJXZSJIUmSJEmSpC7KxJAkSZJUIxExMCKejIiJEfGtRpYfHREvR8Sj5euYimXzK8pHNVxXktS5LWeMOCoini5fR1WUnxcRkyPijZa2o1bT1UuSJEldWkTUAZcC+wJTgDERMSozxzeoemNmntjIJuZk5o61bqckqe0tT4yIiHWAs4BdgAQeLtedCdwKDAWebmlb7DEkSZIk1cauwMTMfDYz3wFGAoe0c5skSR3D8sSI/YG7M3NGmQy6GxgIkJkPZua0pWmIiSFJkiSpNvoCkys+TynLGjosIv4dETdFxEYV5atExNiIeDAiDq1pSyVJrS4ijivP4/Wv4yoWL0+MaOm6LWJiSJIkSVoGzVzwt9StQP/M3J7iju81Fcs2zsxdgCOAn0bEpq3QbElSG8nMYZm5S8Vr2FJuolqMaDUmhiRJkqRl0IIL/qlAZQ+gfmVZ5TamZ+bb5cfhwM4Vy6aW/z4L3Avs1Mq7IElqP8sTI5pdd2mYGJIkSZJqYwyweUQMiIgewGBgsdnFIuJdFR8HAU+U5WtHxMrl+97AnkDDAUklSZ3XMscI4E5gvzJWrA3sV5YtE2clkyRJkmogM+dFxIkUF+t1wIjMHBcR5wBjM3MUcHJEDALmATOAo8vVtwaujIgFFDdzz29kphpJUie1PDEiM2dExLkUySWAczJzBkBEXEjxCPJqETEFGJ6ZZ1drS2Rmq+9ga4igYzZMUrvKJJZn/R12aPm55bHHlu+7VFvGCUmNMU6onnFC9aYu8wM2WhH16WOcaMgeQ5K6lO23b+8WSJI6MuOEJKmaFTFOOMaQJEmSJElSF2ViSJIkSZIkqYtqNjEUEatHRLfy/RYRMSgiVqp90yRJnYFxQpJUjXFCkjq2lvQY+huwSkT0Be4CPg9cXctGSZI6FeOEJKka44QkdWAtSQxFZs4GPgFclpmfBLatbbMkSZ2IcUKSVI1xQpI6sBYlhiJid+CzwO1lWV3tmiRJnUdEfC0ixkXE4xFxQ0SsEhEDImJ0REyMiBsjokdZd+Xy88Ryef+K7ZxRlj8ZEfu31/4sI+OEJKka44QkdWAtSQydApwB3JyZ4yJiE+CvtW2WJHV8ZZf4k4FdMnM7iovcwcAFwMWZuRkwExhSrjIEmFmWX1zWIyK2KdfbFhgIXBYRnemC2TghSarGOCFJHVj35ipk5n3AfQDloHGvZObJtW6YJHUS3YFVI2IusBowDdgbOKJcfg1wNnA5cEj5HuAmYGhERFlI6MfxAAAgAElEQVQ+MjPfBiZFxERgV+CfbbQPy8U4IUmqxjghSR1bS2Yluz4i1oqI1YHHgfERcWrtmyZJHVtmTgV+BPyPIiH0KvAwMCsz55XVpgB9y/d9gcnluvPK+utWljeyTodnnJAkVWOckKSOrSWPkm2Tma8BhwJ/BAZQzCQgSSu0iDguIsZWvI5rsHxtit4+A4A+wOoUj4J1NcYJSVI1xglJ6sCafZQMWCkiVqI4kQ/NzLkRkTVulyS1u8wcBgyrUuWjwKTMfBkgIn4P7An0iojuZa+gfsDUsv5UYCNgSkR0B3oC0yvK61Wu0xkYJyRJ1RgnJKkDa0mPoSuB/1LcCf9bRGwMvFbLRklSJ/E/4P0RsVo5VtA+wHiKATUPL+scBdxSvh9VfqZcfk9mZlk+uJy1bACwOfBQG+1DazBOSJKqMU5IUgfWksGnfwb8rKLouYj4SO2aJEmdQ2aOjoibgEeAecC/KHoY3Q6MjIgflGVXlatcBfyqHFx6BsVMZJQztPyGIqk0DzghM+e36c4sB+OEJKka44QkdWwteZSMiDiIYhrlVSqKz6lJiySpE8nMs4CzGhQ/SzGrWMO6bwGfbGI75wHntXoD24hxQpJUjXFCkjqulsxKdgXwaeAkICh+1Gxc43ZJkjoJ44QkqRrjhCR1bC0ZY2iPzDwSmJmZ3wd2B7aobbMkSZ2IcUKSVI1xQpI6sJYkhuaU/86OiD7AXOBdtWuSJKmTMU5IkqoxTkhSB9aSMYZui4hewEUUA6wmMLymrZIkdSbGCUlSNcYJSerAWjIr2bnl299FxG3AKpn5am2bJUnqLIwTkqRqjBOS1LE1mRiKiE9UWUZm/r42TZIkdQbGCUlSNcYJSeocqvUYOrjKsgQ8kUtS12ackCRVY5yQpE6gycRQZn6hLRsiSepcjBOSpGqME5LUOTQ5K1lEfD0ihjRSPiQiTqltsyRJHZ1xQpJUjXFCkjqHatPVfxa4tpHyXwFfrE1zJEmdiHFCklSNcUKSOoFqiaHumTm3YWFmvgNE7ZokSeokjBOSpGqME5LUCVRLDHWLiA0aFjZWJknqkowTkqRqjBOS1AlUSwxdBNweER+OiDXL117AbcCP2qR1kqSOzDghSarGOCFJnUC1WcmujYiXgXOA7SimlBwHfC8z/9hG7ZMkdVDGCUlSNcYJSeocmkwMAZQnbE/akqRGGSckSdUYJySp46v2KJkkSZIkSZJWYCaGJEmSJEmSuigTQ5IkSZIkSV1Uk2MMRcTXq62YmT9p/eZIkjoL44QkNS8iBgKXAHXA8Mw8v8Hyoylm75paFg3NzOHlsqOA75TlP8jMa9qk0a3EOCFJ1dUiRkTEzsDVwKrAHcBXMzOrtaPa4NNrLsX+SJK6HuOEJFUREXXApcC+wBRgTESMyszxDaremJknNlh3HeAsYBeK2bweLted2QZNby3GCUlqQg1jxOXAscBoisTQQJqZBKDadPXfX6q9kiR1KcYJSWrWrsDEzHwWICJGAocADS/6G7M/cHdmzijXvZvi4v6GGrW11RknJKmqVo8REXEvsFZmPliWXwscyrImhupFxCrAEGBbYJX68sz8Ygsau8ymTm2+jiSp/RknJHVVEXEccFxF0bDMHFbxuS8wueLzFGC3RjZ1WER8CHgK+FpmTm5i3b6t0vA21l5xQpLaWzNxohYxom/5vmF5Vc0mhoBfARMoMlLnAJ8FnmjBepLU4Wy/fXu3YIVknJC0wliaOFFe3A9rtmJ1twI3ZObbEfEl4Bpg7+XcZkdjnJC0wmjjONEmMaIls5JtlpnfBd4sBzM6iMazWJKkrsk4IUmNmwpsVPG5H4sGEAUgM6dn5tvlx+HAzi1dtxMxTkjSkmoRI6aW75vcZmNakhiaW/47KyK2A3oC67dgPUlS12CckKTGjQE2j4gBEdEDGAyMqqwQEe+q+DiIRT1p7gT2i4i1I2JtYL+yrDMyTkjSklo9RmTmNOC1iHh/RARwJHBLcw1pyaNkw8ov+m7ZyDWA77VgPUlS12CckKRGZOa8iDiR4gK+DhiRmeMi4hxgbGaOAk6OiEHAPGAGcHS57oyIOJfihwPAOfWDjHZCxglJaqCGMeIrLJqu/o80M/A0QDQznX27ef55OmbDJLWrPn2I5Vn/ootafm459dTl+y7VlnFCUmOME6oXYZxQwQkrVMk4saSWzEq2MnAY0L+yfmaeU7tmSZI6C+OEJKka44QkdWwteZTsFuBV4GHg7WbqSpK6HuOEJKka44QkdWAtSQz1y8yBNW+JJKmzMk5IkqoxTkhSB9aSWcn+ERHvqXlLJEmdlXFCklSNcUKSOrCW9Bj6AHB0REyi6PoZQGbm9jVtmSSpszBOSJKqMU5IUgfWksTQATVvhSSpMzNOSJKqMU5IUgfWZGIoItbKzNeA19uwPZKkTsI4IUmqxjghSZ1DtR5D1wMfo5g9ICm6fNZLYJMatkuS1PEZJyRJ1RgnJKkTaDIxlJkfK/8d0HbNkaTOIyK2BG6sKNoE+B7QFzgYeAd4BvhCZs4q1zkDGALMB07OzDvL8oHAJUAdMDwzz2+r/VhWxglJUjXGCUnqHJodYygi3ttI8avAc5k5r/WbJEmdQ2Y+CewIEBF1wFTgZmBL4IzMnBcRFwBnAKdHxDbAYGBboA/w54jYotzcpcC+wBRgTESMyszxbbpDy8g4IUmqxjghSR1bSwafvgx4L/Bviu6f7wEeB3pGxJcz864atk+SOot9gGcy8znguYryB4HDy/eHACMz821gUkRMBHYtl03MzGcBImJkWbdTJIYwTkiSqjNOSFIH1q0FdZ4HdsrMXTJzZ4q7489S3Nm+sJaNk6T2FBHHRcTYitdxVaoPBm5opPyLwB/L932ByRXLppRlTZV3FsYJSVI1xglJ6sBa0mNoi8wcV/8hM8dHxFaZ+WxEVFtPkjq1zBwGDGuuXkT0AAZRPDJWWX4mMA+4riYN7DiME5KkaowTktSBtSQxNC4iLgdGlp8/DYyPiJWBuTVrmSR1HgcAj2Tmi/UFEXE0xUws+2RmlsVTgY0q1utXllGlvDMwTkiSqjFOSFIH1pJHyY4GJgKnlK9ny7K5wEdq1TBJ6kQ+Q8VjZOUMY6cBgzJzdkW9UcDgiFg5IgYAmwMPAWOAzSNiQNn7aHBZt7M4GuOEJKlpR2OckKQOq9keQ5k5B/hx+WrojVZvkSR1IhGxOsUYCV+qKB4KrAzcXXaRfzAzj8/McRHxG4pBpecBJ2Tm/HI7JwJ3UkxXP6Kyy31HZ5yQJFVjnJCkjq3JxFBE/CYzPxUR/wGy4fLM3L6mLZOkTiAz3wTWbVC2WZX65wHnNVJ+B3BHqzewhowTkqRqjBOS1DlU6zH01fLfj7VFQyRJnY5xQpJUjXFCkjqBJhNDmTktIuqAqzPTZ38lSYsxTkiSqjFOSFLnUHXw6XLsiwUR0bON2iNJ6kSME5KkaowTktTxtWS6+jeA/0TE3cCb9YWZeXLNWiVJ6kyME5KkaowTktSBtSQx9PvyJUlSY4wTkqRqjBOS1IG1JDF0I1A/w87EzHyrhu2RJHU+xglJUjXGCUnqwJocYygiukfEhcAU4BrgWmByRFwYESu1VQMlSR2TcUKSVI1xQpI6h2qDT18ErAMMyMydM/O9wKZAL+BHbdE4SVKHZpyQJFVjnJCkTqBaYuhjwLGZ+Xp9QWa+BnwZOLDWDZMkdXjGCUlSNcYJSeoEqiWGMjOzkcL5wBLlkqQuxzghSarGOCFJnUC1xND4iDiyYWFEfA6YULsmSZI6CeOEJKka44QkdQLVZiU7Afh9RHwReLgs2wVYFfh4rRsmSerwjBOSpGqME5LUCTSZGMrMqcBuEbE3sG1ZfEdm/qVNWiZJ6tCME5KkaowTktQ5VOsxBEBm3gPc0wZtkSR1QsYJSVI1xglJ6tiaTQxJ0opk++3buwWSpI7MOCFJqmZFjBPVBp+WJEmStBwiYmBEPBkREyPiW1XqHRYRGRG7lJ/7R8SciHi0fF3Rdq2WJHUlJoYkSZKkGoiIOuBS4ABgG+AzEbFNI/XWBL4KjG6w6JnM3LF8HV/zBkuS2tRy3DzoERG/jIj/RMRjEbFXRd1PR8S/I2JcRFzQknaYGJIkSZJqY1dgYmY+m5nvACOBQxqpdy5wAfBWWzZOktR+lvPmwbEAmfkeYF/gxxHRLSLWBS4C9snMbYENI2Kf5tpiYkiSJEmqjb7A5IrPU8qyhSLivcBGmXl7I+sPiIh/RcR9EfHBGrZTktT2lufmwTaUg/pn5kvALGAXYBPg6cx8uaz3Z+Cw5hpiYkiSJElaBhFxXESMrXgdt5TrdwN+AnyjkcXTgHdn5k7A14HrI2Kt5W+1JKmtNBMnlufmwWPAoIjoHhEDgJ2BjYCJwJblOHXdgUPL8qqclUySJElaBpk5DBhWpcpUFr8g71eW1VsT2A64NyIANgRGRcSgzBwLvF1+z8MR8QywBTC29fZAklRLLYgTTaq4eXB0I4tHAFtTxITngH8A8zNzZkR8GbgRWFCWb9rcd5kYkiRJkmpjDLB5eTd3KjAYOKJ+YWa+CvSu/xwR9wLfzMyxEbEeMCMz50fEJsDmwLNt2XhJUk0t782Dr9VXjIh/AE8BZOatwK1l+XHA/OYa4qNkkiRJUg1k5jzgROBO4AngN5k5LiLOiYhBzaz+IeDfEfEocBNwfGbOqG2LJUltaOHNg4joQXHzYFT9wsx8NTN7Z2b/zOwPPAgMKm8erBYRqwNExL7AvMwcX35ev/x3beArwPDmGmKPIUmSJKlGMvMO4I4GZd9rou5eFe9/B/yupo2TJLWbzJwXEfU3D+qAEfU3D4CxmTmqyurrA3dGxAKKXkafr1h2SUTsUL4/JzOfaq4tJoYkSZIkSZLa2HLcPPgvsGUT9T6ztO3wUTJJkiRJkqQuysSQJEmSJElSF+WjZK1k8OC9WW211enWrRt1dXVceeXvufrqn3P77b+hZ891ADjmmK/z/vd/GIBnnpnAT35yFm+++QbdunXjiituokePlTnttCFMn/4y8+fPZ/vtd+arXz2Lurq6xb4rM/n5z89j9Oj7WGWVVTj99PPZYottAfjTn27m17++HIDPfe7LDBz4cQCefPJxLrjgDN5++y122+3DnHTSmZQjm6uVLc2x8OqrMzn77JOZMOFxBg78OF/96pK9Bs8883ief34Kv/zlbUss81iQViwPPfQ3hg49j/nzF3DQQZ/kiCOOW2z5qFE38Ic/XE+3bt1YddXV+MY3zqV//82ApuPKPffcwXXXXc78+QvYffe9+NKXTm2PXdNS8liQ1Jj994dLLoG6Ohg+HC64YPHlRx0FF10EU8t5jYYOhauuKt4feSR85zvF+x/8AK69FlZdFX77W9h0U5g/H269Fc44o+32R8uuuThR77777uTss0/miituYsst38Pcue/wk5+cxZNPPk5EcNJJZ7LjjrsB8Je/3MZ1111JBKy77vqceeZFC3+/aMVmYqgVXXzxNUv84Rx++NF8+tNDFiubP38eP/zhqZxxxkVsttlWvPrqTOrqiv8VZ511CauvvgaZyVlnncx99/2Jvfc+aLH1R4/+G1On/pdf//ounnjiMS6++Gwuv/y3vPbaLK69dihXXPE7IoIvfekT7Lnn3qy5Zk9++tOz+eY3z2XrrXfgW986loce+hu77fbh2v4H6cJaeiz06LEyX/ziV5k06WkmTXp6ie387W93scoqqzf5PR4L0opj/vz5XHLJOVx00S9Zb70NOP74w9ljj70X/tgH2Gefgxk0qHhs/IEH/sJll/0fF154VZNx5dVXZ3LllRdy5ZW/p1evdfi//zudhx/+JzvvvHt77aZawGNBUmO6dYNLL4V994UpU2DMGBg1Cp54YvF6N94IJ520eNnaa8NZZ8Euu0AmPPxwse7bb8OPfgT33gsrrQR/+QsMHAh/+lOb7ZaWQUviBMDs2W/w+99fy9Zb77Cw7LbbfgvAiBG3MnPmdE4//ViuuOImMhcwdOh5XH317fTsuQ5XXHEhN998HUcf3eBg0grJR8nawZgxD7DJJluy2WZbAdCz59oLewWtvvoaQJE8mjdvLrBkT44HHvgL++13KBHBNtvsyJtvvsb06S8xZsz97Lzznqy1Vi/WXLMnO++8Jw899HemT3+JN998g2222ZGIYL/9DuX++//SZvurpq266mq85z270KPHykssmzPnTX7721/y+c9/ucn1PRakFceECf+mT5+N6dNnI1ZaqQd7730QDzyw+N9nfYwAeOutOQt7+zUVV6ZNm0zfvhvTq1eRqN55593529/ubKM90rLyWJDUmF13hYkTYdIkmDsXRo6EQw5p2br77w933w0zZ8KsWcX7gQNhzpwiKQTFNh95BPr1q9kuqJW0JE4AjBhxCYMHH7vYb43nnpvITjsVPYTWXntd1lhjTZ588nEyk8xkzpw5ZCazZ7/Buuuu32b7pPZVs8RQRGwVEftExBoNygfW6jvbUwSceuoQjjvuE9x6640Ly2+++TqGDDmYCy44g9dffxWAKVMmERFl/Y9zww2/WGxbp546hI9/fA9WXXV1Pvzh/Zf4rldeeZH1199w4efevTfklVdeXKJ8vfU2WFi+3nqV5UV91cbSHAvVjBhxCZ/61BdZZZVVmqzjsaDOrKvFieY09Xfb0M03X8dnP/tRrrzyIk46qXgmoKm40rfvxkyePIkXXpjC/PnzuP/+v/Dyyy+0zQ5pmXksSAXjxOL69oXJkxd9njKlKGvosMPgsceKR8TqkzwtWbdnTzj44KLXkDq2lsSJp54ax0svvcDuu++1WPmmm27FP/5xD/Pnz2PatMllvWl0774SX/va2QwZcjCHH/5BnnvuGQ488PC22B11ADVJDEXEycAtwEnA4xFRmcv+YZX1jouIsREx9te/HlaLptXMz352A8OG3cwFF/yCP/zhOh57bAyDBn2G6667m1/84hbWXXd9LrvsfKDo+vef/zzMd75zET/72fXcf/+fefjhfy7c1kUXXcXvfnc/c+e+w7/+9WB77ZKW0dIcC02ZOPEJnn/+f3zwg/u2UaulttUV40Rr+fjHP8t11/2Z4477Jr/6VTGOWFNxZc01e/K1r53N97//NU4++bNsuGFfunWzs/CKwmNBK7LWiBPQ9eLErbdC//6www5Fr6BrrmnZenV1cMMN8LOfFT2S1LktWLCAyy47n6985fQllh144GGst96GfOlLhzF06A/ZbrudqKurY968udxyyw0MG/YHbrrp72yyyZZcf/2V7dB6tYdaXREcC+ycmYcCewHfjYivlsuaHOU2M4dl5i6ZucvnPtf44Fkd1XrrbQAU3fE++MF9mTDh36yzTm/q6uro1q0bH/vYJ5kw4T9l3Q3Zfvv30bPnOqyyyqrsttuHePrpcYttr0ePldlzz30a7RLYu/cGvPTSort8r7zyAr17b7BE+csvv7iwvPKu4MsvF/VVG0tzLDRl3Lh/8eSTjzN48N6cdNIRTJnyX0455fNL1PNYUCfW5eJEc5r6u21K0W38z0D1uLLHHntz+eW/5dJLb2SjjQbQr1//mu6Hlp/HggS0QpyAFStOTJ0KG2206HO/fosGma43Ywa8807xfvhw2Hnnlq07bBg8/XQxsLU6vubixOzZbzJp0lOccsqRDB68N+PHP8qZZ36ZJ5/8D3V13TnhhG8zfPgtnHfe5bzxxuv069efiROLwar69n03EcFeex3AuHH/avN9U/uoVWKoW2a+AZCZ/6U4mR8QET+hyom8s5ozZzazZ7+x8P3YsQ8wYMDmTJ/+0sI6f//7nxkwYHMA3ve+DzBp0lO89dYc5s+fx2OPjWHjjTdjzpw3F64zf/48HnzwXt797k2W+L499tibu+76A5nJ+PGPsvrqa7Luuuvzvvd9gLFj7+f111/l9ddfZezY+3nf+z7Auuuuz+qrr8H48Y+Smdx11x/Yc8992uC/TNeztMdCUw455Ahuuul+Ro68h5///Hr69evPT3/6qyXqeSyoE+tScaIlttrqPUyd+l+mTZvM3LnvcM89t7PHHnsvVmfKlP8ufP/gg/fSt+/GQNNxBWDmzOkAvP76q9xyy/UcdNAn22aHtMw8FiTAOLGEMWNg882LHkErrQSDBxcDSFfacNHTRQwatGhg6jvvhP32g169itd++xVlAOeeWzxGdsopbbIbagXNxYk11liTW24ZzciR9zBy5D1ss82OnHfe5Wy55Xt46605zJkzG4CxYx+grq6O/v03o3fvDXjuuWeYNWsGAA8//ADvfvem7bJ/anu1mpXsxYjYMTMfBcjMNyLiY8AI4D01+s52M3PmdL773ROAogv3Rz/6MXbd9UP88IenMnHiBCJgww378vWvnwPAmmv25JOfPJrjjz+ciGC33T7E7rvvxYwZr3DmmV9m7tx3WLAg2Wmn3Rg0aDBQTEsLMGjQZ3j/+z/M6NH38bnP7cvKK6/K6acXvWnXWqsXn//8Vzj++OJZ0COPPIG11uoFwCmnnMX555/BO++8xa67fojddvtQm/436iqW9liAYnr72bPfYO7cudx//5+56KIRS8woUMljoWOJiF7AcGA7IIEvZuY/y2XfAH4ErJeZr0QxOuwlwIHAbODozHykrHsUUE4iyw8ys4WdvzutLhUnWqKurjsnn/w9TjvtGBYsmM8BBxzGgAGbM2LEJWy55Xbsuec+3Hzzr3n44X/SvXt31lxzLb71rWKe4qbiCsDQoefxzDMTgOJcsNFGA9prF9VCHgsSYJxYwvz5cOKJRUKnrg5GjIDx4+H734exY4vHyE4+uUgIzZtX9B46+uhi3ZkziwTQmDHF53POKcr69i2msH/iiWLgaVh8int1TC2JE02ZNWs6p502hIhu9O69AWeccSFQ9EI66qgT+OpXP0v37t3ZYIO+nH76/7XVLqmdRWa2/kYj+gHzMnOJUQ0jYs/MfKC5bTz/PK3fMEmdXp8+y3eX8M47W35u2X//5r8rIq4B/p6ZwyOiB7BaZs6KiI0oEkZbUXSFfyUiDqQYK+FAYDfgkszcLSLWAcYCu1Aklx4u15m5tPvXWRgnJNVKR4sTWjatEScijBMqNHzkTl2bcWJJNXmULDOnNHYSL5c1exKXpM4gInoCHwKuAsjMdzJzVrn4YuA0WCxwHAJcm4UHgV4R8S5gf+DuzJxRJoPuBlboGVeME5KkaowTktR2nI5CkpbdAOBl4JcR8a+IGB4Rq5czp0zNzMca1O8LVEwWy5SyrKlySZIkSaopE0OS1ITKKW/LV8PpTboD7wUuz8ydgDeBs4FvA99r29ZKkiRJ0tKr1eDTktTpZeYwYFiVKlOAKZk5uvx8E0ViaADwWDHWNP2ARyJiV2AqUDFZLP3KsqkUs61Ult+73DsgSZIkSc2wx5AkLaNy7IPJEbFlWbQP8Ehmrp+Z/TOzP0Xy6L1l3VHAkVF4P/BqZk4D7gT2i4i1I2JtYL+yTJIkSZJqyh5DkrR8TgKuK2ckexb4QpW6d1DMSDaRYrr6LwBk5oyIOBcoJ5HlnMycUbsmS5IkSVLBxJAkLYfMfJRimvmmlveveJ/ACU3UGwGMaO32SZIkSVI1PkomSZIkSZLURZkYkiRJkiRJ6qJMDEmSJEmSJHVRJoYkSZIkSfr/9u492K7yrOP490dSegEs4yC00IwgDbQhUWopw1iLhJEA1ULV/gFOK4zVjAgWVDqFaafTi53SdmTGXrSGITq1F4pjcaJQsNgLSrkkpEAuBIxAJaCTMk5vlIYmPP6x3+3sHvY+Jyen5+xzsr6fmTXZ+9nvWutZmTXrSZ79rrWljrIxJEmSJEmS1FE2hiRJkiRJkjrKxpAkSZIkSVJHLR53ApI0l1asGHcGkqT5zDohSZrM/lgnnDEkSZIkSZLUUTaGJEmSJEmSOsrGkCRJkiRJUkfZGJIkSZIkSeooG0OSJEmSJEkdZWNIkiRJkiSpo2wMSZIkSbMkyVlJHkyyPckVk4z7rSSV5KSB2JVtvQeTnDk3GUuSumbxuBOQJEmS9kdJFgGfAM4AdgDrk6yrqq0Txh0CXArcNRBbBpwHnAAcCdya5Liq2jNX+UuSusEZQ5IkSdLsOBnYXlUPV9UzwHXAuUPGvR/4EPDDgdi5wHVVtauqHgG2t+1JkvYT+zqrNMmBSf4myaYk9yU5bWDs+S1+f5Kbkxw2VR42hiRJkqR9kGR1kg0Dy+oJQ44CHht4v6PFBrfxi8CSqrpxuutKkhaugVmlZwPLgPPbbNGJ454zqxT4fYCqWkFvVuqfJzkgyWLgL4CVVfXzwP3AJVPlYmNIkiRJ2gdVtaaqThpY1kxn/SQHAFcDfzo7GUqS5rGZzCpdBnwZoKp2At8GTgLSloOSBPgp4ImpErExJEmSJM2Ox4ElA+9f1mJ9hwDLga8meRQ4BVjXbhWYal1J0jw3xczSmcwqvQ84J8niJMcAr27jfgRcBGyi1xBaBlw7VZ4+fFqSJEmaHeuBpe0f7Y/Te5j0b/c/rKrvAP//7IckXwUur6oNSZ4GPpvkanoPn14K3D2HuUuSZqjNJJ3WbNK+gVmlFw75eC3wSmAD8E3g68CeJM+j1xh6FfAw8DHgSuDPJtuXjSFJkiRpFlTV7iSXALcAi4C1VbUlyfuADVW1bpJ1tyS5HtgK7AYu9hfJJGm/Mp1ZpQAvoTer9Jyq2gD8cX9gkq8DDwEnAlTVf7b49cDIh1r32RiSJEmSZklV3QTcNCH27hFjT5vw/gPAB2YtOUnSOM1kVumLgFTVU0nOAHZX1dYkRwLLkvxMVX2L3oOpH5gqERtDkiRJkiRJc2gms0qBw4FbkjxLr6n0lrbNJ5K8F7gtyY/o3WZ24VS52BiSJEmSJEmaY/s6q7SqHgWOHzHuk8Anp5OHv0omSZIkSZLUUTaGJEmSJEmSOsrGkCRJkpU8CIIAAAftSURBVCRJUkfZGJIkSZIkSeooG0OSJEmSJEkdZWNIkiRJkiSpo2wMSZIkSZIkdZSNIUmSJEmSpI6yMSRJkiRJktRRNoYkSZIkSZI6ysaQJM1AkkeTbEpyb5INA/E/SrItyZYkHx6IX5lke5IHk5w5ED+rxbYnuWKuj0OSJElSNy0edwKStB9YWVVP9t8kWQmcC/xCVe1KcniLLwPOA04AjgRuTXJcW+0TwBnADmB9knVVtXUuD0KSJElS99gYkqSfvIuAq6pqF0BV7Wzxc4HrWvyRJNuBk9tn26vqYYAk17WxNoYkSZIkzSpvJZOkEZKsTrJhYFk9ZFgB/5LknoHPjwNel+SuJF9L8poWPwp4bGDdHS02Ki5JkiRJs8oZQ5I0QlWtAdZMMeyXq+rxdrvYl5Jso3dt/WngFOA1wPVJfm52s5UkSZKk6bMxJEkzUFWPtz93JrmB3q1hO4AvVFUBdyd5FjgMeBxYMrD6y1qMSeKSJEmSNGu8lUyS9lGSg5Ic0n8NrAI2A/8IrGzx44ADgSeBdcB5SZ6f5BhgKXA3sB5YmuSYJAfSe0D1urk+HkmSJEnd44whSdp3RwA3JIHe9fSzVXVza+6sTbIZeAa4oM0e2pLkenoPld4NXFxVewCSXALcAiwC1lbVlrk/HEmSJEldk97/VTRfJVndnnOijvNckDSM1wb1eS5IGsZrg/o8FzSKt5LNf8N+BUnd5LkgaRivDerzXJA0jNcG9XkuaCgbQ5IkSZIkSR1lY0iSJEmSJKmjbAzNf94Dqj7PBUnDeG1Qn+eCpGG8NqjPc0FD+fBpSZIkSZKkjnLGkCRJkiRJUkfZGJIkSZIkSeooG0PzVJK1SXYm2TzuXDReSZYk+UqSrUm2JLl03DlJGj/rhPqsE5KGsU4IrBHaOz5jaJ5KcirwfeBTVbV83PlofJK8FHhpVW1McghwD/DGqto65tQkjZF1Qn3WCUnDWCcE1gjtHWcMzVNVdRvwv+POQ+NXVf9dVRvb6+8BDwBHjTcrSeNmnVCfdULSMNYJgTVCe8fGkLSAJDkaeBVw13gzkSTNR9YJSdIo1giNYmNIWiCSHAz8A3BZVX133PlIkuYX64QkaRRrhCZjY0haAJI8j96F/DNV9YVx5yNJml+sE5KkUawRmoqNIWmeSxLgWuCBqrp63PlIkuYX64QkaRRrhPaGjaF5KsnngDuA45PsSPLWceeksXkt8Bbg9CT3tuX1405K0nhZJzTAOiHpOawTaqwRmpI/Vy9JkiRJktRRzhiSJEmSJEnqKBtDkiRJkiRJHWVjSJIkSZIkqaNsDEmSJEmSJHWUjSFJkiRJkqSOsjGkH5NkT/sJw81J/j7Ji2awrdOS/HN7fU6SKyYZe2iSP9yHfbwnyeUjPvuddhybknyjPy7J3yZ503T3JUmyTkiSJmedkBYeG0Oa6OmqOrGqlgPPAH8w+GF6pn3eVNW6qrpqkiGHAtO+kI+S5GzgMmBVVa0ATgG+85PaviR1mHVCkjQZ64S0wNgY0mT+DXh5kqOTPJjkU8BmYEmSVUnuSLKxfRNwMECSs5JsS7IR+M3+hpJcmOTj7fURSW5Icl9bfgm4Cji2fbvwkTbu7UnWJ7k/yXsHtvXOJA8l+Xfg+BG5XwlcXlVPAFTVrqq6ZuKgJO9u+9icZE2StPjbkmxt+76uxX6l5Xdv+8bgkBn+/UrSQmedsE5I0mSsE9YJLQCLx52A5qcki4GzgZtbaClwQVXdmeQw4F3Ar1bVU0neAfxJkg8D1wCnA9uBz4/Y/EeBr1XVbyRZBBwMXAEsr6oT2/5XtX2eDARYl+RU4CngPOBEeufvRuCeIftYPiI+0cer6n1tn38H/DrwTy2fY6pqV5JD29jLgYur6vZWuH64F9uXpP2SdcI6IUmTsU5YJ7RwOGNIE70wyb3ABuC/gGtb/JtVdWd7fQqwDLi9jb0A+FngFcAjVfUfVVXAp0fs43TgrwCqak9VDZuSuaot36B3sX4FvQv764AbquoHVfVdYN2MjhZWJrkryaaW1wktfj/wmSRvBna32O3A1UneBhxaVbufuzlJ2u9ZJ3qsE5I0nHWixzqhBcMZQ5ro6X6Xva/NhnxqMAR8qarOnzDux9aboQAfrKq/nrCPy/Zy/S3Aq4Evj9xB8gLgL4GTquqxJO8BXtA+/jXgVOANwDuTrKiqq5LcCLyeXhE7s6q2TeegJGk/YJ3osU5I0nDWiR7rhBYMZwxpX9wJvDbJywGSHJTkOGAbcHSSY9u480es/6/ARW3dRUleDHwPGLzH9hbgdwfuNT4qyeHAbcAbk7yw3ZP7hhH7+CDwkSQvaesfmOT3JozpX7SfbPt5Uxt7ALCkqr4CvAN4MXBwkmOralNVfQhYT+9bB0nSc1knrBOSNBnrhHVC84gzhjRtVfWtJBcCn0vy/BZ+V1U9lGQ1cGOSH9B72NywB6pdCqxJ8lZgD3BRVd2R5PYkm4EvVtXbk7wSuKN9w/B94M1VtTHJ54H7gJ30LqjDcrwpyRHAreltoIC1E8Z8O8k19B6A9z8D21oEfLoVmAAfbWPfn2Ql8Cy9bxC+OM2/OknqBOuEdUKSJmOdsE5ofknv1k1JkiRJkiR1jbeSSZIkSZIkdZSNIUmSJEmSpI6yMSRJkiRJktRRNoYkSZIkSZI6ysaQJEmSJElSR9kYkiRJkiRJ6igbQ5IkSZIkSR31f1IegFv8F90DAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 1440x288 with 6 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YgY29g_qtASq"
},
"source": [
"<h2> 4.4 Logistic Regression with hyperparameter tuning </h2>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Wb2tOE3GtASr",
"outputId": "d7e4fc88-7d4e-4313-cda7-462a2409292e"
},
"source": [
"alpha = [10 ** x for x in range(-5, 2)] # hyperparam for SGD classifier.\n",
"\n",
"\n",
"\n",
"log_error_array=[]\n",
"for i in alpha:\n",
" clf = SGDClassifier(alpha=i, penalty='l2', loss='log', random_state=42)\n",
" clf.fit(X_train, y_train)\n",
" sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
" sig_clf.fit(X_train, y_train)\n",
" predict_y = sig_clf.predict_proba(X_test)\n",
" log_error_array.append(log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
" print('For values of alpha = ', i, \"The log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.plot(alpha, log_error_array,c='g')\n",
"for i, txt in enumerate(np.round(log_error_array,3)):\n",
" ax.annotate((alpha[i],np.round(txt,3)), (alpha[i],log_error_array[i]))\n",
"plt.grid()\n",
"plt.title(\"Cross Validation Error for each alpha\")\n",
"plt.xlabel(\"Alpha i's\")\n",
"plt.ylabel(\"Error measure\")\n",
"plt.show()\n",
"\n",
"\n",
"best_alpha = np.argmin(log_error_array)\n",
"clf = SGDClassifier(alpha=alpha[best_alpha], penalty='l2', loss='log', random_state=42)\n",
"clf.fit(X_train, y_train)\n",
"sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
"sig_clf.fit(X_train, y_train)\n",
"\n",
"predict_y = sig_clf.predict_proba(X_train)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The train log loss is:\",log_loss(y_train, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predict_y = sig_clf.predict_proba(X_test)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The test log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predicted_y =np.argmax(predict_y,axis=1)\n",
"print(\"Total number of data points :\", len(predicted_y))\n",
"plot_confusion_matrix(y_test, predicted_y)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"For values of alpha = 1e-05 The log loss is: 0.5629702491699433\n",
"For values of alpha = 0.0001 The log loss is: 0.5159174337821618\n",
"For values of alpha = 0.001 The log loss is: 0.5235977943949385\n",
"For values of alpha = 0.01 The log loss is: 0.5286590001463237\n",
"For values of alpha = 0.1 The log loss is: 0.5186153530165566\n",
"For values of alpha = 1 The log loss is: 0.5146862497267302\n",
"For values of alpha = 10 The log loss is: 0.5163922197940566\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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yPr16z1nWvfffz979+7lySefLFDm999/Jy8vD4DHH3+cESNGeLatW7eOjh07lhmzMcacaCpleHowyCOP/v37s3TpUgCioqJ44IEH6N69O927d2fixIlERTlzGI8cOZIVK1YAMG7cOD7++GPi4uL45JNPPMPXd+zYQUxMDNOmTeORRx4hJiaGffv2kZeXx4YNGzx1eXviiSeYNm0asbGxpKenc/311wOwYMECJk6cCMAXX3xBp06diI+PZ/DgwbzwwgtERUWRmprKo48+ys8//0yXLl2Ij49n+vTpACQnJ9OuXTvatm3Lzp07mTBhgucpWOQmAAAfN0lEQVSYS5YsYeDAgX56VY0xxo8CPYrkeD2OdRQik9CVK1fq0KFDK1SPr1avXq1jx4716zF8tWTJEj333HN1z549gQ6lUtjotNBgbS4fbBTiyaFLly707dvX00XnDx07dmTatGl+q788MjMzueOOO4iMjAx0KMYYU26+3E4lZKhqgetDJ7v69evTp0+fQIdhjDEVYmdgXg4dPVT2TsYYY04IlsC8ZBzJCHQIxhhjfGQJzEvGYUtgxhgTLCyBebEzMGOMCR6WwLzYGZgxxgQPS2Be7AzMGGOChyUwL3YGZowxwcMSmBc7AzPGmOBhCcyLnYEZY0zwsATmxc7AjDEmeFgC8/L7vt/p3bu3Zy7EmTNnEhcXR1xcnOeWKYXt2bOHxMRE4uLiSExMJCPDSYKqypgxY4iNjaVTp06sWrXKU2bAgAHUr1+fCy+80Ke4srKyuPLKK4mNjeXss89m8+bNxe7XsmVLzjjjDOLj4+nWrZtn/d1330379u3p1KkTl156KZmZmQXKbdmyhdq1azN16lQAsrOz6dWrl+feZMYYcyKyBOZl3cfruOyyywgLC2PPnj089NBDfPvttyxbtoyHHnrIk5y8TZ48mYSEBNavX09CQgKTJ08G4L///S/r169n/fr1vPTSS9x0002eMnfffTevv/66z3G9/PLLREZGsmHDBsaOHcu9995b4r5LliwhJSXFc7sXgMTERH788Ud++OEH2rZty+OPP16gzB133MH555/vWQ4PDychIYG33nrL5xiNMaayhXwCU9TzfMfXOzw3kVy0aBGJiYlERUURGRlJYmIiCxcuLFL+/fff59prrwXg2muvZf78+Z71w4YNQ0Q455xzyMzM9Ny5OSEh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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"For values of best alpha = 1 The train log loss is: 0.5104987544377447\n",
"For values of best alpha = 1 The test log loss is: 0.5146862497267302\n",
"Total number of data points : 30000\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1440x288 with 6 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ouQSEnr3tASy"
},
"source": [
"<h2> 4.5 Linear SVM with hyperparameter tuning </h2>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "AOFfZ5PLtAS0",
"outputId": "d31eb598-e275-48cb-c49b-98e9eb76d8ba"
},
"source": [
"alpha = [10 ** x for x in range(-5, 2)] # hyperparam for SGD classifier.\n",
"\n",
"\n",
"log_error_array=[]\n",
"for i in alpha:\n",
" clf = SGDClassifier(alpha=i, penalty='l1', loss='hinge', random_state=42)\n",
" clf.fit(X_train, y_train)\n",
" sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
" sig_clf.fit(X_train, y_train)\n",
" predict_y = sig_clf.predict_proba(X_test)\n",
" log_error_array.append(log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
" print('For values of alpha = ', i, \"The log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.plot(alpha, log_error_array,c='g')\n",
"for i, txt in enumerate(np.round(log_error_array,3)):\n",
" ax.annotate((alpha[i],np.round(txt,3)), (alpha[i],log_error_array[i]))\n",
"plt.grid()\n",
"plt.title(\"Cross Validation Error for each alpha\")\n",
"plt.xlabel(\"Alpha i's\")\n",
"plt.ylabel(\"Error measure\")\n",
"plt.show()\n",
"\n",
"\n",
"best_alpha = np.argmin(log_error_array)\n",
"clf = SGDClassifier(alpha=alpha[best_alpha], penalty='l1', loss='hinge', random_state=42)\n",
"clf.fit(X_train, y_train)\n",
"sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
"sig_clf.fit(X_train, y_train)\n",
"\n",
"predict_y = sig_clf.predict_proba(X_train)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The train log loss is:\",log_loss(y_train, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predict_y = sig_clf.predict_proba(X_test)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The test log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predicted_y =np.argmax(predict_y,axis=1)\n",
"print(\"Total number of data points :\", len(predicted_y))\n",
"plot_confusion_matrix(y_test, predicted_y)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"For values of alpha = 1e-05 The log loss is: 0.6585463892799677\n",
"For values of alpha = 0.0001 The log loss is: 0.48684052968367625\n",
"For values of alpha = 0.001 The log loss is: 0.5230157434507465\n",
"For values of alpha = 0.01 The log loss is: 0.5641409416989993\n",
"For values of alpha = 0.1 The log loss is: 0.5921410672880175\n",
"For values of alpha = 1 The log loss is: 0.6018847060148819\n",
"For values of alpha = 10 The log loss is: 0.6225945233526208\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbYAAAEWCAYAAAAKFbKeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3Xl8VNX5+PHPAzFsIiSBICUoSwIWEKKERSuyhACKBkpRcKlQRKRiVfyKQK0UbK1Y69K68xM0KooWK6BFQIFU3FiNC8hmQEhACFmQJZCF5/fHvRkn+xAyJJk879frvpx77jnnnjMT5+Gce+ZeUVWMMcaYQFGnqhtgjDHGVCYLbMYYYwKKBTZjjDEBxQKbMcaYgGKBzRhjTECxwGaMMSagWGAz1ZaI7BaRge7rP4rIS77krcB5+ojItoq2s7oTx8sikiki66q6PaURkUQRGX+266rM85rqwQJbABGRG0Vkg4gcFZH9IvKBiFxRRW2ZJiIfl5DeTERyRKTL6dSnqn9T1cr60lMRifSqe42qdqyMuoucp417rqNFtlGVfa5yXAHEARGq2vMsn9uYs84CW4AQkXuBp4C/AS2AC4DngGGl5A/yc5NeBy4XkbZF0kcD36jqt34+f3XSVFXP9dreKimTiNT1Ja0spXyuFwK7VfXY6dRVRn3GVGsW2AKAiDQBHgImqep/VPWYquaq6nuqOsXNM1NEForI6yLyEzBWROqJyFMiss/dnhKRem7+ZiLyvohkiUiGiKwRkTrusakikioiR0Rkm4jEFm2TqqYAq4DfFjl0C/CqW097EVklIukickhE5otI01L6OFNEXvfa/62I/OCWfaBI3p4i8rnb9v0i8oyIBLvHCkaRXxWMnkSkn4ikeJX/pTs9lSUim0Uk3uvYKyLyrIj81+3/WhFp78vnVEKfXhGR50VkqYgcA/qXktZERF4VkTS3z3/y+izGisinIvKkiKQDM4uc41bgJeAyt7+z3PTbRGSn+9kuEZFfeJVREZkkIjuAHaW0vbeIfOa+R1+JSD+vY78Tke/c9ydZRG4vUnaYiCSJyE8i8r2IDPE6fKHbnyMiskJEmpVy/hD37zNNnCnW90UkopS8Be/RMyJyWES2lvA3W+p5ReTfIvKjW/ZjEelc0nlMNaKqttXwDRgC5AFBZeSZCeQCw3H+QdMAJxh+AYQDzYHPgL+4+R8BXgDOcbc+gAAdgb3AL9x8bYD2pZzzJmCH135HIAdo7u5H4kyR1XPP/zHwlFf+3cBAr/a/7r7uBBwFrnTLPuH2vyBvd6A3EOS27zvgHq96FYj02u8HpLivzwF2An8EgoEBwBGgo3v8FSAd6OnWPx9YUEr/27jnKvFzces6DPzK/Uzql5L2KrAYaOzWuR241a1jrNv3P7jtaVDCecYCn3jtDwAOAZe679/TwMdF3p8PgdBS6mvlvgdXu22Mc/cLPtehQHv376UvcBy41D3W0+1fnFu2FXCReywR+B7ogPP3mQjMLuW9CwN+AzR035d/A4u8jicC44u8R5Pdz3eU24ZQX84LjHPPUQ9nViSpqv+ft63srcobYFslfIhOAPmxnDwzvb+83LTvgau99gfjTFmBE/QW4xUA3PRI4CAwEDinnHM2BH4CLnf3HwYWl5F/OPCl1/5uSg5sM/AKJkAjnIA5sJR67wHe9dovK7D1AX4E6ngdfxOY6b5+BXjJ69jVwNZSztvGPVdWke2XXnW9WqRMoTSgrtu3Tl5ptwOJ7uuxwJ5yPoexFA5sc4G/e+2fi/OPnjZe78+AMuqbCrxWJG05MKaU/IuAu93XLwJPlpIvEfiT1/4dwDIf/x+IBjKL1OUd2PYB4nV8HfDb0z0v0NR9f5r40i7bqmazqcjAkA40k/Kvh+wtsv8L4Aev/R/cNIDHcEYuK9zppGkAqroTJ1DMBA6KyALvaSxvqnoc51/St4iI4ATgVwuOi0gLt3yqONOjrwMlTj2V0G5PX9S5dpTuVW8Hd2rqR7fev/lYr6duVT3llfYDzsiiwI9er4/jBIayNFPVpl7bd17Hin4mRdOa4Ywyin5OrUrJ74tCn7uqHsV5/3yt80LgOncaMktEsnAWqLQEEJGrROQLd5ozCyf4F7z/rXH+QVUan95bEWkoIi+6U7M/4Yz2m0rp1yRT1Y1MLu+/9VLPKyJ1RWS2O2X6E84/tsD3vydTBSywBYbPgZM4I56yFH2Uwz6cL6kCF7hpqOoRVf0/VW0HxAP3FlyXUNU3VPUKt6wCj5ZxzgTgepypp8bAe17H/uaWv1hVzwNuxpm+Ks9+nC9IwPmSw5maKvA8sBWIcuv9o4/1gtP/1gXXsFwXAKk+lj9dJT1ewzvtEM5oqujnlFpKfl8U+txFpBHO++drnXtxRmzewbqRqs4W5xrtO8A/gBaq2hRYys/v/16cacoz9X84U9u93M/4yoLulJK/lfuPqwKev/Vy3IizAGsg0ARnFF7WeUw1YIEtAKjqYZzpuWdFZLj7r9lz3H85/72Mom8CfxKR5u7F8hk4oyZE5BoRiXS/DA4D+cApEekoIgPcL7ATQDZwqpT6AdbgTL/NwZk+zPE61hjnWtlhEWkFTPGxywuBa0TkCnEWhTxE4b/lxjhToEdF5CLg90XKHwDalVL3Wpx/sd/vvof9gGuBBT62rVKpaj7wNvCwiDQWkQuBe3E/pwp6E/idiES7n+PfgLWqutvH8q8D14rIYHdEU1+cBTgRONcl6wFpQJ6IXAUM8io71z13rIjUEZFW7md0uhrj/O1liUgo8Ody8ocDd7mf6XXAL3ECri/nOYkzom2I816Zas4CW4BQ1cdxvvD+hPOlshe4E+f6Rmn+CmwAvga+ATa5aQBRwEc4gedz4DlVXY3zpTUbZyTxI84XxvQy2qU4048X4jUN6ZqFs4DhMPBf4D8+9nUzMAl4A2f0lgmkeGW5D+df2keA/wcUXV4/E0hwp9GuL1J3Dk4gu8rt43PALaq61Ze2lSJLCv+O7d7TLP8H4BiQDHyC0+95FW2Mqn4EPIgzstqPM4IafRrl9+KMYv7Iz39rU3CuSx4B7sIJxpk4n8MSr7LrgN8BT+J87v+j8GjUV0/hLPQ4hLMAalk5+dfi/E0fwrnWO1JV08suAjh/sz/gjGa3uOcy1ZwUnnY2xpjAIiJjcRaSVMnNCszZZyM2Y4wxAcUCmzHGmIBiU5HGGGMCio3YjDHGBJRacYPTZs2aaZs2bSpU9tixYzRq1KhyG1TNWZ9rB+tz4DvT/m7cuPGQqjavxCadFbUisLVp04YNGzZUqGxiYiL9+vWr3AZVc9bn2sH6HPjOtL8i8kP5uaofm4o0xhgTUCywGWOMCSgW2HyQnZ1N3759yc/PB2DIkCE0bdqUa665pkL1LVu2jI4dOxIZGcns2bM96WPHjqVt27ZER0cTHR1NUlJSuXUlJCQQFRVFVFQUCQkJpeZ7+umnueiii+jcuTP3338/ALt376ZBgwae802cONGT/6233qJr16507tyZqVOnetKfeeYZ5s2r8E0vjDHG72rFNbYzNW/ePEaMGEHdus6Nw6dMmcLx48d58cUXT7uu/Px8Jk2axIcffkhERAQ9evQgPj6eTp06AfDYY48xcuRIn+rKyMhg1qxZbNiwARGhe/fuxMfHExISUijf6tWrWbx4MV999RX16tXj4MGDnmPt27cvFkAPHz7MlClT2LhxI82bN2fMmDGsXLmS2NhYxo0bx69+9SvGjRt32n03xpizwUZsPpg/fz7Dhg3z7MfGxtK4ceNi+TZu3Ejfvn3p3r07gwcPZv/+/cXyrFu3jsjISNq1a0dwcDCjR49m8eLFFWrX8uXLiYuLIzQ0lJCQEOLi4li2rPgt855//nmmTZtGvXr1AAgPDy+z3v379xMVFUXz5s5iqIEDB/LOO+8A0LBhQ9q0acO6desq1GZjjPE3C2zlyM3NJTk5mfJ+LpCbm8sf/vAHFi5cyMaNGxk3bhwPPPBAsXypqam0bu154goRERGkpv78tJAHHniArl27MnnyZE6ePFnmOcurq8D27dtZs2YNvXr1om/fvqxfv95zbNeuXVxyySX07duXNWvWANCqVSu2bdvG7t27ycvLY9GiRezd+/PjuWJiYjx5jTGmurGpyHIcPnyYpk2blptv27ZtfPvtt8TFxQHOlGPLli1P61yPPPII559/Pjk5OUyYMIFHH32UGTNmVKjd3vLy8sjIyOCLL75g/fr1XH/99SQnJ9OyZUv27NlDWFgYGzduZPjw4WzevJnGjRvz/PPPM2rUKOrUqcPll1/O99///GzI8PBwtm49k5vdG2OM/1hgK8PrX7/OZ5mfceLEiXLzqiqdO3fm888/L5S+d+9err32WgAmTpxIt27dCo1+UlJSaNXKeXBxQSCsV68ev/vd7/jHP/5R5jlbtWpFYmJiobpK+s1KREQEI0aMQETo2bMnderU4dChQzRv3twzPdm9e3fat2/P9u3bAbj22ms97Z4zZ47n+iLAiRMnaNCgQbnviTHGVAWbiizDm9++yaojq8jPzy83uHXs2JG0tDRPYMvNzWXz5s20bt2apKQkkpKSmDhxIj169GDHjh3s2rWLnJwcFixYQHx8PIDnmpyqsmjRIrp06QI41+VuueWWYuccPHgwK1asIDMzk8zMTFasWMHgwYOL5Rs+fDirV68GnGnJnJwcmjVrRlpammelZ3JyMjt27KBdO+f5mwULTDIzM3nuuecYP368p77t27d72maMMdWNjdh8MGjQID755BMGDhwIQJ8+fdi6dStHjx4lIiKCuXPnMnjwYBYuXMhdd93F4cOHycvL45577qFz586F6goKCuKZZ55h8ODB5OfnM27cOE+em266ibS0NFSV6OhoXnjhBQD27NlT4ggpNDSUBx98kB49egAwY8YMQkNDARg/fjwTJ04kJiaGcePGMW7cOLp06UJwcDAJCQmICB9//DEzZszgnHPOoU6dOrzwwgue8nfffTdfffWVp94OHTp4zvvpp58yc+bMSnyHjTGmEqlqwG/du3fXirh6/tXa8fGOunHjRr355psrVEdluO+++/Srr746a+dbvXp1qcc2bdpUpe+Fv5TV50BlfQ58Z9pfYINWg+/w091sxOaDSy+9lP79+5Ofn1/oWtPZ8thjj531c5bm0KFD/OUvf6nqZhhjTKkssPnIfpDsKFj1aYwx1ZUtHjHGGBNQLLAZY4wJKH4NbCIyRES2ichOEZlWSp7rRWSLiGwWkTe80vNFJMndlniltxWRtW6db4lIsD/7YIwxpmbxW2ATkbrAs8BVQCfgBhHpVCRPFDAd+JWqdgbu8TqcrarR7hbvlf4o8KSqRgKZwK3+6oMxxpiax58jtp7ATlVNVtUcYAEwrEie24BnVTUTQFUPUgYREWAAsNBNSgCGV2qrjTHG1Gj+XBXZCtjrtZ8C9CqSpwOAiHwK1AVmqmrB7enri8gGIA+YraqLgDAgS1XzvOpsVdLJRWQCMAGgRYsWhW495av09HTy8/MrVLYmO3r0qPW5FrA+B77a1t8CVb3cPwiIAvoBEcDHInKxqmYBF6pqqoi0A1aJyDfAYV8rVtU5wByAmJgYLekeiuUJ2xdG1o9ZJd5/MZAlJiZan2sB63Pgq239LeDPqchUoLXXfoSb5i0FWKKquaq6C9iOE+hQ1VT3v8lAInAJkA40FZGgMuo0xhhTi/kzsK0HotxVjMHAaGBJkTyLcEZriEgznKnJZBEJEZF6Xum/Ara4t3hZDRQ8YnoMULGndBpjjAlIfgts7nWwO4HlwHfA26q6WUQeEpGCVY7LgXQR2YITsKaoajrwS2CDiHzlps9W1S1umanAvSKyE+ea21x/9cEYY0zN49drbKq6FFhaJG2G12sF7nU37zyfAReXUmcyzopLY4wxphi784gxxpiAYoHNGGNMQLHAZowxJqBYYDPGGBNQLLAZY4wJKBbYjDHGBBQLbMYYYwKKBTZjjDEBxQKbMcaYgGKBzRhjTECxwGaMMSagWGAzxhgTUCywGWOMCSgW2IwxxgQUC2zGGGMCigU2Y4wxAcUCmzHGmIBigc0YY0xAscBmjDEmoFhgM8aYAJadnU3fvn3Jz88HYMiQITRt2pRrrrmmUL5du3bRq1cvIiMjGTVqFDk5OeXWLSLTRWSniGwTkcGl5BEReVhEtovIdyJyl5t+k4h8LSLfiMhnItLNTa8vIutE5CsR2Swis7zqWiAiUeW1y6+BTUSGuB3eKSLTSslzvYhscTvwhpsWLSKfu2lfi8gor/yviMguEUlyt2h/9sEYY2qyefPmMWLECOrWrQvAlClTeO2114rlmzp1KpMnT2bnzp2EhIQwd+7cMusVkU7AaKAzMAR4TkTqlpB1LNAauEhVfwkscNN3AX1V9WLgL8AcN/0kMEBVuwHRwBAR6e0eex64v7w++y2wuR18FrgK6ATc4L4R3nmigOnAr1S1M3CPe+g4cIubNgR4SkSaehWdoqrR7pbkrz4YY0xNN3/+fIYNG+bZj42NpXHjxoXyqCqrVq1i5MiRAIwZM4ZFixaVV/UwYIGqnlTVXcBOoGcJ+X4PPKSqp9xzHXT/+5mqZrp5vgAi3HRV1aNu+jnupu7+GmCgiASV1TB/jth6AjtVNVlVc3Ci9LAieW4Dni3onFeHt6vqDvf1PuAg0NyPbTXGmICTm5tLcnIybdq0KTNfeno6TZs2JSjIiRcRERGkpqaWV30rYK/XfoqbVlR7YJSIbBCRD0qZSrwV+KBgR0TqikgSznf/h6q6FsANjjuBbmU1rMyod4ZK6nSvInk6AIjIp0BdYKaqLvPOICI9gWDge6/kh0VkBrASmKaqJ4ueXEQmABMAWrRoQWJi4ml3ID09nfz8/AqVrcmOHj1qfa4FrM+Bb9++fQQHBxfrc1JSEunp6Z70w4cPk52d7dk/ePAgx44dq6xm1ANOqGqMiIwA5gF9Cg6KSH+cwHZFQZqq5gPR7kzduyLSRVW/dQ8fBH4BbCzthP4MbL4IAqKAfjjD0I9F5GJVzQIQkZbAa8CYgmEsztTljzjBbg4wFXioaMWqOsc9TkxMjPbr1++0Gxe2L4ysH7OoSNmaLDEx0fpcC1ifA9uxnGPsOLiDOnXqlNjnjz76yJOuqtx6661cccUVBAUF8fnnn9OhQwd2795d1ilSca6dFYhw04pKAf7jvn4XeLnggIh0BV4CrlLV9KIFVTVLRFbjXJIqCGz1geyyGubPwOZLp1OAtaqaC+wSke04gW69iJwH/Bd4QFW/KCigqvvdlydF5GXgPn91wBhjqov8U/mkZ6dz8NhBDhw9wMFjB53Xx35+7b1/PPc4AOfnns+JEyeoX79+qXWLCP3792fhwoWMHj2ahIQEhg0bxooVKxCRXwM9VXV6kWJLgDdE5AmcEVQUsK6E6hcB/XEXiwDb3XNegBPwfquq273a0hzIdYNaAyAOeNSrvg78HORK5M/Ath6IEpG2OAFtNHBjkTyLgBuAl0WkGU6Dk0UkGCeyv6qqC70LiEhLVd0vIgIMp5wOGmNMdXUs51i5AaogkB06fgj1rKH4WV2pS3ijcM8WFRZFeEPndUZKBqkDU/nkk08YOHAgAH369GHr1q0cPXqUiIgI5s6dy+DBg3n00UcZPXo0f/rTn7jkkku49dZbmTRpEjjXyH4qel5V3SwibwNbgDxgkjuFiIgsBca7ayRmA/NFZDJwFBjvVjEDCMNZTQmQp6oxQEsgwV2AWAd4W1Xfd+ttAWSr6o9lva9+C2yqmicidwLLca6fzXPfiIeADaq6xD02SES2APk4qx3TReRm4EogTETGulWOdVdAzncjugBJwER/9cEYY06H96iq6MiqWLA6dsAzqiqqcXBjWpzbgvBG4USGRnJ5xOWe/fBG4bRo9PPrkAYh1JGS1wEmJiZy3t3n8eSTT3oC25o1a0rM265dO9atK2nARTQwuaQDqvow8HAJ6Vd7vc4ChpaQZzw/Bznv9K+BS0pspDM4erGUYx5+vcamqkuBpUXSZni9VuBed/PO8zrweil1Dqj8lhpjTMmO5x4vN0AVvD50/BCnPMsBflZX6tK8UXNPQIoMjSwWoAoCV/OGzWlwToNKa/+ll15K//79yc/P9/yW7XSo6s2V1pgzl4Wz7qJMVb14xBhjzqr8U/lkZGcUn/orCF7HC+8fyy15dWDj4MaegFQwqvIOUN6jq7JGVWfDuHHjquzclUlVXy4/lwU2Y0wAOJ57vMTpv6LBKyUzhcMfHy5zVFUQkNq3bl/i1F/BVpmjKlO5LLAZY6qdglGVrwsryhtVhTcKp11IOy6seyHRkdHFpv/CG4UT2iC0SkdVpvJYYDPGnBXZudnFApInWB0vvJ92PK3EUVUdqUPzhs09AaldSLtio6mC/eaNmtPwnIaFytem37HVZhbYjDEVckpPOdeqfFxYcTTnaIn1nBt8ricgtQtpR++I3sWDlRvIbFRlfGGBzRjjkZ2bXfLU39EDnkUV3r+rynd+tlRIwaiqICC1C2nn+V1V0SXrJY2qjDlTFtiMCWAFo6qSpv++3PklT/34VKHRVXmjqvBG4bRt2pZerXqVurAirGGYjapMlbLAZkwNUzCq8mVhRdqxtFJHVU2CmhCRH0F4o3B6tupZ4m+qCjYbVZmaxAKbMVXslJ4iMzvT54UVR3KOlFhPo3MaeQJSm6Zt6PmLniX+pqrgWtWaj9fYQgoTkCywGeMHJ/JO+HRLpfJGVc0aNvMEpJ6tepY49dfi3BY0b9icRsGNqqCnxlQ/FtiM8UHBqKq031EVXVhR1qiqICAVjKpKu1tFaINQ6tY5/VsgGVPbWWAztVbBqOrgsYN8kf4Fu77cVep1q7TjaeSdyitWh/eoKrxROD1+0aPEqb+CzUZVxvifBTYTME7pKbJOZPn0rKqDxw7y08kiT+JwH4DU8JyGnoB0QZMLigcrr9FVWIMwG1UZU81YYDPV2om8E6QdSyt5YUWRm9WWNqoShGYNm3kCUswvYghvWDhApWxL4ao+V9moypgAYIGtGsvOzmbIkCGsWrWKunXrMmTIEL744guuuOIK3n///XLLnzx5kltuuYWNGzcSFhbGW2+9RZs2bYrly8rKYvz48Xz77beICHfeeSf9+vUjIyODUaNGsXv3btq0acPbb79NSEgI8+fP59FHH0VVady4Mc8//zzdunUjJyeHgQMHsmrVKoKCSv7TUlUyT2T6vLCi2KjK1SCoAS3ObUGLRi24oMkFTrAq5TEgvoyqEvcn0jakbbnvqTGm+rPAVo3NmzePESNGeJ6hNGXKFI4fP86LL5b7nD0A5s6dS0hICDt37mTBggVMnTqVt956q1i+u+++myFDhrBw4UJycnJYsWIFALNnzyY2NpZp06Yxe/ZsZs+ezaOPPkrbtm353//+R0hICB988AG33XYb73z4DgePHeSC6AuY9PdJtO/bvsSpwIPHDpY5qioISgWjqtIWVtioyhhTGgts1dj8+fN54403PPuxsbEkJib6XH7x4sXMnDkTgJEjR3LnnXeiqriPYQfg8OHDfPzxx7zyyisABAcH06hRIzKyM/j3f/7NE28+wcItCznV9RRzb5/LT31+coLVVndkdegAP239iQueusCpMBd42flvwagqvFE4EedF0L1l91IXVTRr2MyuVRljKoUFtmoqJyeH5OTkEqcOfZWamkrr1q0ByCefRo0bsWrzKnLq5XhGU99+/S1Hgo4QcWUEmT9kIi2FE3EnOPXxKUiBEUtHOJUpkAbvfPeOJxhd2vJSUr9KJfvKbG6/5nYnQDVoRvy/4/lh+g+cG3zumb8RxhhzmiywVVOHDh2iadOmpR5XVbJOZJX8myp3YcWurF30mdeHzOBMDp88DIdh4KsDwWsWL/hAMDnJOXS6rhOX3nEpyW8kI18J4x8YzwOPP8Di3y72jK4u+udFHJxy0FN29erV3PHpHXzyySeEhYV50uvXq4+eVAj2y1tjjDFl8mtgE5EhwD+BusBLqjq7hDzXAzNxxgRfqeqNbvoY4E9utr+qaoKb3h14BWgALAXuVlX1Zz/OtpN5J1l7YC2HfjrEY58+Vih4fb/pe/Ym76XeX+uReyq3WFlBCGsYRnijcOqF1KN93fZ06taJsHphPPbkY7z+u9edRRfuFOGR9CNctvQyNv9tMwBrItYwZcoU7ul9D8+3fJ7ODTrTskVL9u/fT3h4uOc8X3/9NePHj+eDDz4oFNTAWbRSv359/75JxhhTCr8FNhGpCzwLxAEpwHoRWaKqW7zyRAHTgV+paqaIhLvpocCfgRicgLfRLZsJPA/cBqzFCWxDgA/81Y+zaVfmLuZsnMPcL+eSdjwNjsH9H9xP/Qb1PaOmZo2acbLRSW667CbPwor3nnuPnj17cuN1NxLWMIygOs7H+qw+yzfffMO/HvgXCxYs4OpBVzP8l8MLnfPclufSunVrtm3bRseOHVm5cqVn+jM+Pp6EhASmTZtGQkICw4YNA2DPnj2MGDGC1157jQ4dOhSqLz09nWbNmnHOOef4/w0zxpgSlPtsCRHpICIrReRbd7+riPypvHJAT2Cnqiarag6wABhWJM9twLNuwEJVC+a5BgMfqmqGe+xDYIiItATOU9Uv3FHaq8BwarD8U/m8t+09rp5/Ne3/1Z6/f/Z3fnXBr3j/hvcZee1IFl++mON/PM7ue3ZT79V67HxhJ2nfpvHa2Nfo9FMnbrz4Ro7sPULvi3rT4twWnqAGcOutt5Kenk5kZCRPPPEEs2c7A+Z9+/Zx9dVXe/I9/fTT3HTTTXTt2pWkpCRuuukmAKZNm8aHH35IVFQUH330EdOmTQPgoYceIj09nTvuuIPo6GhiYmI8da1evZqhQ4eejbfOGGNK5MuI7f8BU4AXAVT1axF5A/hrOeVaAXu99lOAXkXydAAQkU9xpitnquqyUsq2creUEtJrnB+P/sjcTXOZs2kOew7voeW5LXnwyge5rfttRJwXAUDLe1vy5JNPEn91PABr1qwpsa7c3Fwuu+yyYun169fn3//+d7H0X/ziFyxdutSzHx0dzYYNGzz7BSsvw8LCWLlyZbHyL730Ei+99FKJbXmpLjGrAAAgAElEQVTjjTc8AdQYY6qCL4Gtoaqu814iDhT/IVLFzx8F9AMigI9F5OLKqFhEJgATAFq0aHFay+QLpKenk5+fX6GyJVFVkrKSWLx/MZ8c+oR8zad70+7c2ulWLg+7nCAJYuemnexkp6dMy5YtWblypee3bCWZPn16pbUR4OjRoxWqLzc3l44dO7Jv3z727dtXae05Gyra55rM+hz4alt/C/gS2A6JSHuca12IyEhgvw/lUoHWXvsRbpq3FGCtquYCu0RkO06gS8UJdt5lE930iHLqBEBV5wBzAGJiYrQiz50K2xdG1o9ZZ/zMqszsTBK+SuCFDS+wLX0bIfVDuLvX3dweczsdwjqUWbYqnpeVmJhY4fPGxcVVbmPOkjPpc01lfQ58ta2/BXx5fvsknGnIi0QkFbgHmOhDufVAlIi0FZFgYDSwpEieRbgBTESa4UxNJgPLgUEiEiIiIcAgYLmq7gd+EpHe4gwhbwEW+9CWSpOdnU3fvn3Jz3een5WQkEBUVBRRUVEkJCQUyrs+dT3jFo/j/HHnMzl+Mtvu2safI/9M6r2pPD748TKD2rJly+jYsSORkZGlTu298sorNG/enOjoaKKjowtND06dOpUuXbrQpUuXQncbuemmm+jYsSNdunRh3Lhx5OY6Kyvff/99ZsyYUeH3xRhjqosyA5uI1AFiVHUg0By4SFWvUNUfyqtYVfOAO3GC1HfA26q6WUQeEpF4N9tyIF1EtgCrgSmqmq6qGcBfcILjeuAhNw3gDuAlYCfwPWd5RaT3ba4yMjKYNWsWa9euZd26dcyaNYuUAynM3TSXmDkx9HypJ29vfpthfYbxn3f+Q98r+3JNx2tocE6DMs+Rn5/PpEmT+OCDD9iyZQtvvvkmW7ZsKTHvqFGjSEpKIikpifHjxwPw3//+l02bNpGUlMTatWv5xz/+wU8/OfdcvOmmm9i6dSvffPMN2dnZnmA4dOhQ3nvvPY4fP16J75Yxxpx9ZU5FquopEbkfJygdO93KVXUpzpJ877QZXq8VuNfdipadB8wrIX0D0OV021JZvG9ztXz5cuLi4ggNDWVL2hYaXtSQDnd3IPuX2XRu3plnrnqGm7veTJP6TQD4J//06Rzr1q0jMjKSdu3aATB69GgWL15Mp06dfCq/ZcsWrrzySoKCgggKCqJr164sW7aM66+/vtBqyJ49e5KS4qzFERH69evH+++/X+j3asYYU9P4MhX5kYjcJyKtRSS0YPN7y6qhore5+mHvD2QFZ9HvlX50fq4zW09u5aJ6F/Hx2I/55vffMKnnJE9QOx3et8ICiIiIIDW1xEuJvPPOO3Tt2pWRI0eyd6+zkLRbt24sW7aM48ePc+jQIVavXu05ViA3N5fXXnuNIUOGeNJiYmJKXXlpjDE1hS+LR0a5/53klaZAu8pvTvVWcJur3Vm7mbNxDk9//DRHjx+lbWRbZsfOJjMvk2ZNmtHnwj5npT3XXnstN9xwA/Xq1ePFF19kzJgxrFq1ikGDBrF+/Xouv/xymjdvzmWXXVZsVeUdd9zBlVdeSZ8+P7c1PDy8xq1mNMaYosoNbKpqD6nC+SH1mtQ17EnfQ7t/tkNEiG4bTYu0Frx/1/vUkTrc/trtdOvU7YzP1apVq0IjrJSUFFq1Kv5zPe9bWY0fP57777/fs//AAw/wwAMPAHDjjTcWukPIrFmzSEtLK/b4mxMnTtCgQdnX/4wxprrz5c4jt5S0nY3GVSeTl09m9NLRnMw9ydReU9l19y4+nPUh3639jsNZh8nMzGTFihUMHjzY5zpTU1OJjY0tlt6jRw927NjBrl27yMnJYcGCBcTHxxfLt3//z7+6WLJkCb/85S8BZ/FJeno64NzT8euvv2bQoEGA8+Pq5cuX8+abb1KnTuGPf/v27XTpUmWXL40xplL4MhXZw+t1fSAW2IRzO6taY3PaZi45/xK6jehGbFAsFzRxnj/24IMP0qOH8xbNmDGD0FDn8uP48eOZOHEiMTExvPvuu/zhD38gLS2NoUOHEh0dzfLly9m/f3+JT5oOCgrimWeeYfDgweTn5zNu3Dg6d+7sOUdMTAzx8fH861//YsmSJQQFBREaGup5plpubq5nivG8887j9ddf95xn4sSJXHjhhZ47lYwYMcKzzH/16tU88sgjnqBojDE1kqqe1gY0BZadbrmq3Lp3764VcfX8q7Xj4x1VVfXi5y7WYW8O040bN+rNN99cofqKevrpp3Xx4sWVUteZ+vHHH3XAgAGqqrp69eqqbUwVsD7XDrWtz2faX2CDVoPv8NPdKnJ3/2NArbvudvDYQXpH9ObSSy+lf//+5Ofnl3mbK1/ceeedldS6M7dnzx4ef/zxqm6GMcacsXIDm4i8h3s7LZxrcp2At/3ZqOrmlJ4i7Xga4Y2c33eNGzeuiltU+QqmU40xpqbzZcT2D6/XecAPqppSWuZAlJGdwSk95Qlsxhhjqi9fAtsGIFudu5B0AC4VkQPq3Li4Vkg7lgZA84bNq7glxhhjyuPLnUc+BuqLSCtgBfBb4BV/Nqq6OXjMef6pjdiMMab68yWwiaoeB0YAz6nqdUBn/zarerHAZowxNYdPgU1ELgNuAv7rpp3ZcsAaxgKbMcbUHL4EtruB6cC76jx2ph3OI2ZqjbTjaQhCWMOw8jMbY4ypUr7cK/JjnOtsBfvJwF3+bFR1c/DYQUIbhBJUpyI/+zPGGHM2+fI7tubA/TjX1eoXpKvqAD+2q1o5eOygTUMaY0wN4ctU5HxgK87dRmYBu3Geal1rWGAzxpiaw5fAFqaqc4FcVf2fqo4Das1oDSh01xFjjDHVmy8XjQp+iL1fRIYC+4Ba9QTtg8cO2o+zjTGmhvAlsP1VRJoA/wc8DZwHTPZrq6qRvFN5ZGRn2IjNGGNqiHKnIlX1fVU9rKrfqmp/Ve2uqkt8qVxEhojINhHZKSLTSjg+VkTSRCTJ3ca76f290pJE5ISIDHePvSIiu7yORZ9up0/H4dzDgP2GzRhjagpfVkV2AJ4HWqhqFxHpCsSr6l/LKVcXeBaIA1KA9SKyRFW3FMn6lqoWen6Lqq4Got16QoGdOLfzKjBFVReW1/bKYIHNGGNqFl8Wj/w/nB9o5wKo6tfAaB/K9QR2qmqyquYAC4BhFWjjSOAD97ZeZ12ue6/n5o3sGpsxxtQEvlxja6iq60TEOy3Ph3KtgL1e+ylArxLy/UZErgS2A5NVdW+R46OBJ4qkPSwiM4CVwDRVPVm0UhGZAEwAaNGiBYmJiT40ubD09HTP692bd3Nq16nTrqMmOnr0aIXer5rM+lw71LY+17b+FvAlsB0Skfa4DxsVkZHA/ko6/3vAm6p6UkRuBxLw+imBiLQELgaWe5WZDvwIBANzgKnAQ0UrVtU57nFiYmK0X79+p924sH1hkOG8vqb/NYQ2qB2LQRMTE6nI+1WTWZ9rh9rW59rW3wK+TEVOAl4ELhKRVOAe4Pc+lEsFWnvtR7hpHqqa7jXaegnoXqSO63HuUZnrVWa/Ok4CL+NMefpVUJ0gmtZv6u/TGGOMqQS+3CsyGRgoIo2AOqp6xMe61wNRItIWJ6CNBm70ziAiLVW1YPQXD3xXpI4bcEZoxcqIMzc6HPjWx/ZUWLOGzagjvvwbwBhjTFXzZVVkU+AWoA0QVHCtTVXLvBGyquaJyJ0404h1gXnu0wEeAja4Pxm4S0Tica7ZZQBjvc7bBmfE978iVc93718pQBIwsbw+nClbEWmMMTWHL9fYlgJfAN8Ap7V6QlWXuuW902Z4vZ5OkRGZ17HdOAtQiqaf9dt5WWAzxpiaw5f5tfqqeq+qvqyqCQWb31tWjYQGhdK3b1/y8/MBSEhIICoqiqioKBISSn4rMjIyiIuLIyoqiri4ODIzMwHYunUrl112GfXq1eMf//iHT+fftWsXvXr1IjIyklGjRpGTk1Msz+7du2nQoAHR0dFER0czceLPA9mcnBwmTJhAhw4duOiii3jnnXcKlX3nnXcQETZs2ABAcnIyY8eO9altxhhT3fgS2F4TkdtEpKWIhBZsfm9ZNZL2SRojRoygbt26ZGRkMGvWLNauXcu6deuYNWuWJ2h5mz17NrGxsezYsYPY2Fhmz54NQGhoKP/617+47777fD7/1KlTmTx5Mjt37iQkJIS5c+eWmK99+/YkJSWRlJTECy+84El/+OGHCQ8PZ/v27WzZsoW+fft6jh05coR//vOf9Or18y8x2rVrR0pKCnv27PG5jcYYU134EthygMeAz4GN7rbBn42qLrJzswH4/n/fM2yY89vy5cuXExcXR2hoKCEhIcTFxbFs2bJiZRcvXsyYMWMAGDNmDIsWLQIgPDycHj16cM455/jUBlVl1apVjBw5slhdvpo3bx7TpzszvnXq1KFZs2aeYw8++CBTp06lfv36hcpce+21LFiw4LTOY4wx1YEvge3/gEhVbaOqbd2tnb8bVh2kHU+DPMj6MYs2bdoAkJqaSuvWP/+KISIigtTU1GJlDxw4QMuWLQE4//zzOXDgQIXakJ6eTtOmTQkKCirzfOBMWV5yySX07duXNWvWAJCVlQU4AezSSy/luuuu87Rl06ZN7N27l6FDhxarKyYmxlOHMcbUJL4Etp1AldzOqqodPHYQjkPj8xqfUT0iQpE7t1S6li1bsmfPHr788kueeOIJbrzxRn766Sfy8vJISUnh8ssvZ9OmTVx22WXcd999nDp1invvvZfHH3+8xPrCw8PZt2+fX9tsjDH+4EtgOwYkiciLIvKvgs3fDasO0o6lwTmQn5vvSWvVqhV79/5816+UlBRatSq2eJMWLVqwf7/zE739+/cTHl6xlZVhYWFkZWWRl5dX5vnq1atHWFgYAN27d6d9+/Zs376dsLAwGjZsyIgRIwC47rrr2LRpE0eOHOHbb7+lX79+tGnThi+++IL4+HjPApITJ07QoEGDCrXZGGOqki+BbRHwMPAZP19j2+jPRlUXikID4JTzRQ8wePBgVqxYQWZmJpmZmaxYsYLBgwcXKxsfH+9ZMZmQkOC5RleW2NjYYtOMIkL//v1ZuHBhmXWlpaV5Vm0mJyezY8cO2rVrh4hw7bXXeu4Xt3LlSjp16kSTJk04dOgQu3fvZvfu3fTu3ZslS5YQExMDwPbt2+nSpYtvb5QxxlQnqhrwW/fu3bUimIkyE73htzfohx9+6EmfO3eutm/fXtu3b6/z5s3zpN966626fv16VVU9dOiQDhgwQCMjIzU2NlbT09NVVXX//v3aqlUrbdy4sTZp0kRbtWqlhw8f1vz8fL3gggv0+PHjxdrx/fffa48ePbR9+/Y6cuRIPXHihKqqLl68WB988EFVVV24cKF26tRJu3XrppdccokuWbLEU3737t3ap08fvfjii3XAgAH6ww8/FDtH3759PW1fvXq1Tpo0qVAdgW716tVV3YSzzvoc+M60vzg306jy7/DT3aq8AWdjO9PA9uEnH+rNN99coTp89c033+jkyZP9eg5fLV++XHv16qW5ublV3ZSzprZ94alan2uD2hrY7AaIPugW3Y3+/ft7pvr8oUuXLjzxRNGn81SNgwcPMnv2bM9KTGOMqUnKDGwiUldEfLs9RgATEcaNG0fdunWruilnRURERK181IUxJjCUGdhUNR+44iy1pdqyO/sbY0zN4ctc05cisgT4N87SfwBU9T9+a1U1I/j3N2jGGGMqjy+BrT6QjteTrXGepl1rApuN2Iwxpubw5UGjvzsbDanO/H3XEGOMMZWn3KGIiESIyLsictDd3hGRiLPRuOrCRmzGGFNz+PKN/TKwBPiFu73nptUado3NGGNqDl8CW3N1HjKa526vAM393K5qxUZsxhhTc/jyjZ0uIje7v2mrKyI34ywmqTXsGpsxxtQcvgS2ccD1wI/AfmAkUKsWlNiIzRhjao5y7zwCjFDVeFVtrqrhqjpcVff4UrmIDBGRbSKyU0SmlXB8rIikiUiSu433Opbvlb7EK72tiKx163xLRIJPo78VYtfYjDGm5vDlziM3VKRiNyg+C1wFdAJuEJFOJWR9S1Wj3e0lr/Rsr/R4r/RHgSdVNRLIBG6tSPtOh43YjDGm5vDlG/tTEXlGRPqIyKUFmw/legI7VTVZVXOABUD5DyUrgzgXuwYAC92kBGD4mdTp43n9fQpjjDGVxJc7j0S7/33IK00pfCeSkrQC9nrtpwC9Ssj3GxG5EtgOTFbVgjL1RWQDkAfMVtVFQBiQpap5XnUWf5w0ICITgAngPM264EGbFfG/xP/VquB29OjRM3q/aiLrc+1Q2/pc2/pboMzAJiJ1gOdV9W0/nf894E1VPSkit+OMwAoC5oWqmioi7YBVIvINcNjXilV1DjAHICYmRit0t/r/Of/p37//6ZetwRITE2vd3f2tz7VDbetzbetvgfKusZ0C7q9g3alAa6/9CDfNu/50VT3p7r4EdPc6lur+NxlIBC7B+ZlBUxEpCMjF6jTGGFO7+XKN7SMRuU9EWotIaMHmQ7n1QJS7ijEYGI1zBxMPEWnptRsPfOemh4hIPfd1M+BXwBb3ia6rcX5yADAGWOxDW4wxxtQSvlxjG+X+d5JXmgLtyiqkqnkiciewHKgLzFPVzSLyEM7jxpcAd4lIPM51tAxgrFv8l8CLInIKJ/jOVtUt7rGpwAIR+SvwJTDXhz4YY4ypJXy5u3/bilauqkuBpUXSZni9ng5ML6HcZ8DFpdSZjLPi0hhjjCmm1KlIEbnf6/V1RY79zZ+NMsYYYyqqrGtso71eFx1VDfFDW4wxxpgzVlZgk1Jel7RvjDHGVAtlBTYt5XVJ+8YYY0y1UNbikW4i8hPO6KyB+xp3v77fW2aMMcZUQKmBTVXrns2GGGOMMZXBbltvjDEmoFhgM8YYE1AssBljjAkoFtiMMcYEFAtsxhhjAooFNmOMMQHFApsxxpiAYoHNGGNMQLHAZowxJqBYYDPGGBNQLLAZY4wJKBbYjDHGBBQLbMYYYwKKBTYfZGdn07dvX/Lz8wFISEggKiqKqKgoEhISSiyTkZFBXFwcUVFRxMXFkZmZCYCqctdddxEZGUnXrl3ZtGmTp8yQIUNo2rQp11xzjU/tOnnyJKNGjSIyMpJevXqxe/fuEvO1adOGiy++mOjoaGJiYjzpU6ZM4aKLLqJr1678+te/JisrC4DvvvuO6OhooqOj6datG++++y4AOTk5XHnlleTl5fnUPmOMqQp+DWwiMkREtonIThGZVsLxsSKSJiJJ7jbeTY8Wkc9FZLOIfC0io7zKvCIiu7zKRPuzDwDz5s1jxIgR1K1bl4yMDGbNmsXatWtZt24ds2bN8gQtb7NnzyY2NpYdO3YQGxvL7NmzAfjggw/YsWMHO3bsYM6cOfz+97/3lJkyZQqvvfaaz+2aO3cuISEh7Ny5k8mTJzN16tRS865evZqkpCQ2bNjgSYuLi+Pbb7/l66+/pkOHDjzyyCMAtG3blg0bNpCUlMSyZcu4/fbbycvLIzg4mNjYWN566y2f22iMMWeb3wKbiNQFngWuAjoBN4hIpxKyvqWq0e72kpt2HLhFVTsDQ4CnRKSpV5kpXmWS/NWHAvPnz2fYsGEALF++nLi4OEJDQwkJCSEuLo5ly5YVK7N48WLGjBkDwJgxY1i0aJEn/ZZbbkFE6N27N1lZWezfvx+A2NhYGjdu7HO7vM8xcuRIVq5ciarvDzcfNGgQQUHOI/l69+5NSkoKAPXr1/eknzhxAhHxlBk+fDjz58/3+RzGGHO2+XPE1hPYqarJqpoDLACG+VJQVber6g739T7gINDcby0tSx4kJyfTpk0bAFJTU2ndurXncEREBKmpqcWKHThwgJYtWwJw/vnnc+DAgdMq7wvvuoKCgmjSpAnp6enF8okIgwYNonv37syZM6fEuubNm8dVV13l2V+7di2dO3fm4osv5oUXXvAEui5durB+/foKtdcYY86GUp+gXQlaAXu99lOAXiXk+42IXAlsByarqncZRKQnEAx875X8sIjMAFYC01T1ZNFKRWQCMAGgRYsWJCYmVqwXxyE4ONhT/vvvvycnJ8ezv2vXLurVq1es/ry8vEJp+fn5JCYmkp6ezpdffum5TpWZmcnGjRs5evQoAElJSaSnp/vU3mPHjvH555/TvLkT80+cOMGnn35KkyZNCuX7+9//TvPmzcnMzOS+++4jOzubbt26eY6//vrrZGVl0apVKxITEz1tefbZZ/nhhx/44x//SKNGjQgODvaUWbp0KQ0bNiy3jTXF0aNHK/43UkNZnwNfbeuvh6r6ZQNGAi957f8WeKZInjCgnvv6dmBVkeMtgW1A7yJpAtQDEoAZ5bWle/fuWhHMRJmKXnjhhZ60N954QydMmODZnzBhgr7xxhvFynbo0EH37dunqqr79u3TDh06lJjfO5+q6urVq3Xo0KE+tW/QoEH62Wefqapqbm6uhoWF6alTp8os8+c//1kfe+wxz/7LL7+svXv31mPHjhVqg7f+/fvr+vXrPfthYWGak5PjUxtriqJ9rg2sz4HvTPsLbFA/xQh/bv6cikwFWnvtR7hpHqqarj+Ptl4CuhccE5HzgP8CD6jqF15l9rvv+UngZZwpT/9p4Iy2Tpw4AcDgwYNZsWIFmZmZZGZmsmLFCgYPHlysWHx8vGfFZEJCgucaXXx8PK+++iqqyhdffEGTJk08U5almT59umdlYmnnWLhwIQMGDCh0PQycUd2RI0c8r1esWEGXLl0AWLZsGX//+99ZsmRJodHX/v37PSPKH374ga1bt3qmYtPT02nWrBnnnHNO2e+bMcZUEX8GtvVAlIi0FZFgYDSwxDuDiHh/o8cD37npwcC7wKuqurCkMuJ8gw8HvvVbD1yDBg3ik08+ASA0NJQHH3yQHj160KNHD2bMmEFoaCgA48eP96w6nDZtGh9++CFRUVF89NFHTJvmLAq9+uqradeuHZGRkdx2220899xznvP06dOH6667jpUrVxIREcHy5csB+Oabbzj//POLtevWW28lPT2dyMhInnjiCc/Ky3379nH11VcDzrW+K664gm7dutGzZ0+GDh3KkCFDALjzzjs5cuQIcXFxREdHM3HiRM/5unXrRnR0NL/+9a957rnnaNasGeCsrhw6dGjlvsHGGFOZ/DkcBK7GuXb2Pc7IC+AhIN59/QiwGfgKWA1c5KbfDOQCSV5btHtsFfANTkB7HTi3vHac0VTkTHTjxo168803V6iOyjBo0KCzer6ypi9+/etf67Zt285eY86S2jZFpWp9rg1q61SkPxePoKpLgaVF0mZ4vZ4OTC+h3Otu0CqpzgGV3MxyXXrppfTv35/8/Hzq1q17tk/vGblVtZycHIYPH06HDh2quinGGFMqvwa2QDJu3LiqbkKVCw4O5pZbbqnqZhhjTJnsllrGGGMCigU2Y4wxAcUCmzHGmIBigc0YY0xAscBmjDEmoFhgM8YYE1AssBljjAkoFtiMMcYEFAtsxhhjAooFNmOMMQHFApsxxpiAYoHNGGNMQLHAZowxJqBYYDPGGBNQLLAZY4wJKBbYjDHGBBQLbMYYYwKKBTZjjDEBxQKbMcaYgOLXwCYiQ0Rkm4jsFJFpJRwfKyJpIpLkbuO9jo0RkR3uNsYrvbuIfOPW+S8REX/2wRhjTM3it8AmInWBZ4GrgE7ADSLSqYSsb6lqtLu95JYNBf4M9AJ6An8WkRA3//PAbUCUuw3xVx+MMcbUPP4csfUEdqpqsqrmAAuAYT6WHQx8qKoZqpoJfAgMEZGWwHmq+oWqKvAqMNwfjTfGGFMzBfmx7lbAXq/9FJwRWFG/EZErge3AZFXdW0rZVu6WUkJ6MSIyAZgA0KJFCxITEyvWCzijsjXR0aNHrc+1gPU58NW2/hbwZ2DzxXvAm6p6UkRuBxKAAZVRsarOAeYAxMTEaL9+/U6/kv85/6lQ2RosMTHR+lwLWJ8DX23rbwF/TkWmAq299iPcNA9VTVfVk+7uS0D3csqmuq9LrdMYY0zt5s/Ath6IEpG2IhIMjAaWeGdwr5kViAe+c18vBwaJSIi7aGQQsFxV9wM/iUhvdzXkLcBiP/bBGGNMDeO3qUhVzRORO3GCVF1gnqpuFpGHgA2qugS4S0TigTwgAxjrls0Qkb/gBEeAh1Q1w319B/AK0AD4wN2MMcYYwM/X2FR1KbC0SNoMr9fTgemllJ0HzCshfQPQpXJbaowxJlDYnUeMMcYEFAtsxhhjAooFNh9kZ2fTt29f8vPzAUhISCAqKoqoqCgSEhJKLJORkUFcXBxRUVHExcWRmZkJgKpy1113ERkZSdeuXdm0aZOnTGn1PvDAA7Ru3Zpzzz3X5zY/8sgjREZG0rFjR5YvX15m3rvuuqtQ3QcOHKB///5ccskldO3alaVLndnk+fPnEx0d7dnq1KlDUlISAAMHDvT00RhjqpSqBvzWvXt3rQhmosxEn3nmGX3qqadUVTU9PV3btm2r6enpmpGRoW3bttWMjIxiZadMmaKPPPKIqqo+8sgjev/996uq6n//+18dMmSInjp1Sj///HPt2bNnufV+/vnnum/fPm3UqJFP7d68ebN27dpVT5w4ocnJydquXTvNy8srMe/69ev15ptvLlT30KFD9bnnnvPUdeGFFxYr9/XXX2u7du08+6+88or+9a9/9al91dHq1auruglnnfU58J1pf3EW+lX5d/jpbjZi88H8+fMZNsy5G9jy5cuJ+//t3X1sVfUdx/H3Z8W5VifQCFh6GwspmQGUyICU6RaVIQy2C8k2QgPYTm0yM8EtC6xuQfjTGLNsE1wyNgeupgVFrFmQFToXhokglfmIGxWYlD4gjIdtWJzluz/uaW2pbW9r7z147veVkHvPued3+vmFpt97nn6/2bPJzc1l5MiRzJ49mx07dvRoU1NTQ2lpYuzm0tJSnnvuuc71d911F5IoLnS7CxkAAAjhSURBVC7mzJkzNDc397nf4uJi8vLyevyM3tTU1LB48WKuvPJKxo0bR1FREfv27euxXXt7OytXruSRRx7ptl4S586dA+Ds2bOMHTu2R9uqqioWL17cuRyPx6mqqko6o3POpYoXtv58BIcPH6awsBCA48ePU1Dw8bPjsViM48d7PiPe2traWYyuu+46Wltb+2yf7H6Tkey+1q1bRzwe71E0y8rKqKysJBaLMW/ePB577LEebTdv3kxJSUnn8siRI7lw4QKnTp0aVGbnnBsqXtj6cx5GjBjxqXYhicttdp2mpiaefvppli9f3uOzuro6ysrKaGxsZPv27SxbtoyLFy92fr53715ycnKYPLn7UxejR4+mqakp5dmdc64vXtj6cwW0tbV1Lubn53Ps2MfjMzc2NpKf33Mc5jFjxtDc3AxAc3Mzo0eP7rN9svtNRjL7OnDgAA0NDRQVFVFYWMj58+cpKioCYPv27SxatAiAmTNn0tbWxsmTJzvbVldXdzta69DW1kZ2dvagMjvn3FDxwtaf7MS1qI7iNmfOHGprazl9+jSnT5+mtraWOXPm9GgWj8c772zctGlT5zW6eDzOk08+iZnx8ssvM3z4cPLy8pLeb1fbtm3jwQd7Pt8ej8eprq7mwoULHDlyhEOHDjFjxoxu28yfP5+WlhaOHj3K0aNHycnJoaGhAUgU5bq6OgAOHjxIW1sbo0aNAuDixYts2bKl2/U1SNyE1NLS0nnK1jnnwuKFrQ8vLHmBNRPXcOedd7Jnzx4AcnNzWb16NdOnT2f69Ok89NBD5ObmAnDvvfeyf/9+ACoqKti5cycTJkxg165dVFQkJhCfN28e48ePp6ioiPLych5//PF+97tq1SpisRjnz58nFouxdu1aAN59912uueaaHrknTZrEokWLmDhxInPnzmX9+vVkZWV1/vz+Thfed999bNiwgSlTplBSUsLGjRs7T6Xu3r2bgoICxo8f361NfX09xcXFDBsW9oQRzrmMF/Ztmen4N9jb/c0St8vW19fb0qVLB72PVFmyZImdOHFiyPc7mFuEV6xYYbt27RryLOmSabeBm3mfM0Gm3u7vX6+TMHXqVG6//Xba29s7j3wuB5WVlWFH6DR58mRmzZoVdgznnPPClqy777477AiXtfLy8rAjOOcc4NfYnHPORYwXNuecc5Hihc0551ykeGFzzjkXKV7YnHPORYoXNuecc5GixDN40SbpfeCfg2x+LXCy362ixfucGbzP0fdp+3u9mY0aqjDpkhGF7dOQtN/MpoWdI528z5nB+xx9mdbfDn4q0jnnXKR4YXPOORcpXtj695uwA4TA+5wZvM/Rl2n9Bfwam3POuYjxIzbnnHOR4oXNOedcpHhh64OkuZL+LqlBUkXYeVJJUoGkFyW9LektSQ+EnSldJGVJOiDpj2FnSQdJIyQ9I+kdSQclzQw7U6pJ+lHwe/2mpCpJXwg701CT9ISkE5Le7LIuV9JOSYeC15FhZkwXL2y9kJQFrAe+AUwESiRNDDdVSn0E/NjMJgLFwA8i3t+uHgAOhh0ijX4J7DCzG4ApRLzvkvKBFcA0M5sMZAGLw02VEhuBuZesqwDqzGwCUBcsR54Xtt7NABrM7LCZfQhUAwtCzpQyZtZsZq8G7/9N4o9dfripUk9SDJgP/DbsLOkgaTjwNeB3AGb2oZmdCTdVWgwDsiUNA3KAppDzDDkz2w3865LVC4BNwftNwMK0hgqJF7be5QPHuiw3kgF/6AEkFQI3A3vDTZIWvwBWARfDDpIm44D3gd8Hp19/K+mqsEOlkpkdBx4F3gOagbNmVhtuqrQZY2bNwfsWYEyYYdLFC5vrRtLVwFbgh2Z2Luw8qSTpm8AJM6sPO0saDQOmAr82s5uB/xLx01PBdaUFJIr6WOAqSUvDTZV+lni2KyOe7/LC1rvjQEGX5ViwLrIkXUGiqD1lZs+GnScNbgHiko6SONV8h6TKcCOlXCPQaGYdR+PPkCh0UfZ14IiZvW9m/wOeBb4ScqZ0aZWUBxC8ngg5T1p4YevdK8AESeMkfZ7ExebnQ86UMpJE4rrLQTP7edh50sHMHjSzmJkVkvj//bOZRfqbvJm1AMckfSlYNQt4O8RI6fAeUCwpJ/g9n0XEb5jp4nmgNHhfCtSEmCVthoUd4HJlZh9Juh/4E4m7qJ4ws7dCjpVKtwDLgDck/S1Y91Mz2x5iJpcay4Gngi9sh4HvhZwnpcxsr6RngFdJ3P17gAgONSWpCrgNuFZSI7AGeBjYIukeElN3LQovYfr4kFrOOecixU9FOuecixQvbM455yLFC5tzzrlI8cLmnHMuUrywOeecixQvbM4NkKSFkkzSDV3WFXYdVb2Xdv1u00/7eMcsE5LWSiob7L6cizIvbM4NXAmwJ3hNGzN73sweTufPdO6zyAubcwMQjKV5K3APvUx9IqlMUo2kvwTzYK3p8nGWpA3B3GC1krKDNuWSXpH0mqStknJ62e+6YPE/wAfB+hXBPHqvS6oeyv4691nkhc25gVlAYi6zfwCnJH25l+1mAN8GbgK+K2lasH4CsN7MJgFngm0AnjWz6WbWMT/aPX2FMLNHzWxzsFgB3GxmNwHfH2zHnIsKL2zODUwJiQGTCV57Ox2508xOmdkHJAbdvTVYf8TMOoYsqwcKg/eTJf1V0hvAEmDSADK9TmKIrKUkhoxyLqP5WJHOJUlSLnAHcKMkIzGGqEla+QmbXzpWXcfyhS7r2oHs4P1GYKGZvRbcFHLbAKLNJzF56LeAn0m60cy8wLmM5UdsziXvO8AfzOx6Mys0swLgCPDVT9h2tqTc4BraQuClfvb9RaA5mDpoSbKBJH0OKDCzF4GfAMOBq5Nt71wUeWFzLnklwLZL1m3lk09H7gs+ex3Yamb7+9n3ahIzlr8EvDOATFlAZXAK8wDwKzM7M4D2zkWOj+7v3BALTiVOM7P7w87iXCbyIzbnnHOR4kdszjnnIsWP2JxzzkWKFzbnnHOR4oXNOedcpHhhc845Fyle2JxzzkXK/wHuUY6NwEh/ZwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"For values of best alpha = 0.0001 The train log loss is: 0.47882816839326664\n",
"For values of best alpha = 0.0001 The test log loss is: 0.48684052968367625\n",
"Total number of data points : 30000\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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t0qgLSIiUgYpToiISCKKEyIiqaHQBJCISDrp1Km0WyAiIqlMcUJERBIpy3Ei0STQIiIiIiIiIiKSBpQAEhERERFJEjPraWZfm1mmmV2XoN4pZuZmdmBJtk9ERMoPJYBERERERJLAzDKAEcAJQAegn5l1yKdeDeBvwCcl20IRESlPlAASEREREUmOLkCmuy9w903AGKB3PvVuBYYDv5Zk40REpHxRAkhEREREZAeY2UAzmx73GpinSjNgYdxyVlQWv48DgBbu/mqSmysiIuWcngImIiIiIrID3H0UMGpHtzezCsDdQP/iapOIiEhB1ANIRERERCQ5FgEt4pabR2UxNYC9gXfM7HvgYGCCJoIWEZFkUAJIRERERCQ5pgFtzayNmVUG+gITYivdfbW713f31u7eGpgK9HL36aXTXBERSWdKAImIiIiIJIG7bwEGAZOBucBYd59tZsPMrFfptk5ERMobzQEkIiIiIpIk7j4RmJinbEgBdY8qiTaJiEj5pB5AIiIiIiIiIiJpTgkgEREREREREZE0pyFgxeTmm7tTpUo1KlSoQIUKGVxzzYtb17311mhefnk4//znx1SvXpcZM95g4sT7MAt1//Snv7P77uFhD+PH38ns2e/i/jvt23fjlFNuwMxyHWv9+lU8/vgVrFixiLp1m3Heefey6661cHdeeOE25sx5l8qVq3LmmXfQokVHAD755CVef/1BAI477mK6dj25hP5lyp+C/hbeffcp3n//v1SokEHHjkfSu/e1/PDDDMaMuQkAd+eEEy5l3317APDOO0/w8cfP4+4ccsipHH10/22OtSO/8x9/nMV//3s9mzf/SocOR+b7NyYipePTT9/jgQduIzv7d0466VTOOGNgrvVjxz7GxInPk5GRQa1adbn22n/SuHGzrevXr19H//4ncthhx/K3v4URJtdeO4Dly5eRnZ1Np06d+dvfhpKRkVGi5yXb7/jj4b77ICMDHnkEhg/Pvf7uu+Hoo8P7XXeFhg2hTh1o2RJeegkqVIBKleA//4GHHoLq1eH993O2b94cnn4arrii5M5JRHZe69ZwzDFgBjNmwKef5l+vXTvo3RuefBKWLAnXhOOOg8aNwR3eegsWLgx1DzsMOnaEqlXDdUfKhn32gbPPDr/bd96BV17Jvf7ww6FvX1i5MixPmQLvvhveH3ZY+PsAGD8ePvggvO/aFXr1Cvv88kt47rkSORUpQUoAFaNLL32C6tXr5ipbufJn5s37kDp1mm4ta9/+EPbZ5xjMjEWL5vHYY5dz442TWLDgcxYs+JzrrgsPh7j33jPIzPyUtm275trnG2+Mol27Q+jRYyBTpoxiypRR9O59DXPmvMeyZd9z002v8/33XzF27M1cddXzrF+/ikmTHuDqq1/AzLjrrj+xzz7d2XXXWsn/Rymn8v4tfPPNVGbOfJPBgydQqVJl1q5dDkCTJm25+uoXyMioyOrVSxk+vDd77300S5Ys4OOPn+eqq54nI6MSDz54PnvvfTQNGrTKdZwd+Z2PHXszffveSuvW+zJy5AXMnfseHTocWaL/PiKyrezsbO67bxh33fUYDRo04qKL/syhh3andes9ttZp23YvRo58gapVd2H8+Gd46KG7GDr03q3rR4++l06dDsq136FD76Nateq4O0OHXsa7706ie/eTSuy8ZPtVqAAjRkCPHpCVBdOmwYQJMHduTp0rr8x5P2gQ7L9/eP/zz3DIIbBpE1SrBrNmhW1//jmnDsD06fBizndVIlIGmIXrwtixsHZtuPmfPx+WL89dr1IlOOAA+OmnnLJ99w0/H388JI1POQWeeiqUzZ8PX3wB559fIqchxcAMzj03fDmwYgUMGwaff577dw7wySchCRivWjU4+WQYMiQkA2+9NWxboUJIGA0ZEv6+Bg6EDh1gzpySOy9JPg0BS7IXX7yd3r2vydXDokqValuXN23auPW9mbF58ya2bNnMli2byM7eTI0a9bfZ58yZb9KlSx8AunTpw8yZb+QqNzPatNmPjRvXsHr1UubN+4D27btRrVptdt21Fu3bd2Pu3Pe32a8kzwcfPEuPHgOpVKkyADVq1AOgcuVdyMgIedgtW37b+rewZMl8WrXqtHX9HnscxFdfvb7Nfrf3d7569VJ+/XUdbdrsh5nRpUsfZsx4s4T+FUQkkXnzZtC0aSuaNm1BpUqV6d79JD78MPf/z/33P5iqVXcBoEOH/Vi2bPHWdV9/PYuVK5dz0EHdcm1TrVp1ALKzt7Bly2ZAPf5SXZcukJkJ330HmzfDmDE539Tmp18/ePbZ8H7z5pD8AahSJXygz6tt29Bj6H19FBApU5o0Cb05Vq+G33+HefNgjz22rXfYYaFn0JYtOWX16sGPP4b3GzbAb7+F3kAQEsTr1ye//VJ8dt899Oxatgyys2HqVOjcuWjb7rNP+HJg/frwtzBrFnTqBA0ahH2uXRvqzZ4NBx2UeF+y88ysp5l9bWaZZnZdPusvMrOZZvalmX1gZh3i1l0fbfe1mR1flOMlrQeQme0JNAM+cfd1ceU93X1Sso5bmv7v/wYARrdup9Ot2+nMmPEGtWs3pFmzPbep+9VXU/jf//7NunUruPDChwBo02Z/2rXryk03HYa7c8QRZ9G48e7bbLt27XJq1WoIQM2aDbb2Jlm9egm1azfeWq927casXr2EVauWUKdOfHkjVq1aUpynLnnk/VtYtux75s+fziuv3EPFilXo0+daWrXqBMD333/FM8/8nRUrfuLss+8kI6MiTZq045VX7mX9+pVUqlSVOXPeo2XLvbc5zvb+zguqL1IaymOcSOSXX5bQsGHO/88GDRoxd+6MAutPnDiOrl2PAOD333/nwQeHc8MNd/HZZx9tU/eaawYwb94MunQ5giOPLNLnAylFzZrlDM2A0Auoa9f867ZsCW3ahOEcMc2bw6uvhhvDa64JN3fx+vZVt34pGxQncqtePefmHML7Jk1y12nYEGrWhAULct+8L10arglz54b1jRqFn4sXI2VQnTqh50/MihUhKZTXQQdB+/bh9/zf/4Z6detuu23dumFIYZMmUL9+KOvcGSpqvFBSmVkGMALoAWQB08xsgrvH97t6xt1HRvV7AXcDPaNEUF+gI9AUeMPM2rl7dqJjJqUHkJldBowHLgVmmVn891b/TLDdQDObbmbTJ04clYymJc3llz/Ltde+xMUXP8z77/+XzMxpTJnyECee+Ld86++7bw9uvHES558/gldfDYNtly37gcWL5zNs2Lvceut7fPPNVObPn57wuKHHiL7NTSX5/S38/ns2Gzas5sorx9Knz7U89tjluDsArVvvy9///ipXXz2OKVMeYvPm32jceHeOPfZ8RowYwIMPnk+zZntipg57kj6KI048/XTZihPFacqU8Xz99SxOPz301x8//hm6dj2CBg0a51v/rrse5YUXPmDz5k188cXUkmyqJFnfvjBuXOgNEJOVFYZ77LFHGCLQsOG228R6DImkquKIE1Onlr84cfTR8Pbb25bPnBkSRuecE+r89FPu64akny++CPO83XBD6OVz4YWJ62/YEIYIDhoEN94YehfpbyTpugCZ7r7A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\n",
"text/plain": [
"<Figure size 1440x288 with 6 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZhTJgclztAS6"
},
"source": [
"<h2> 4.6 XGBoost </h2>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "9U367-xetAS7",
"outputId": "167e8588-2ac4-4c6d-ac22-f56a2fce5657"
},
"source": [
"import xgboost as xgb\n",
"params = {}\n",
"params['objective'] = 'binary:logistic'\n",
"params['eval_metric'] = 'logloss'\n",
"params['eta'] = 0.02\n",
"params['max_depth'] = 4\n",
"\n",
"d_train = xgb.DMatrix(X_train, label=y_train)\n",
"d_test = xgb.DMatrix(X_test, label=y_test)\n",
"\n",
"watchlist = [(d_train, 'train'), (d_test, 'valid')]\n",
"\n",
"bst = xgb.train(params, d_train, 400, watchlist, early_stopping_rounds=20, verbose_eval=10)\n",
"\n",
"xgdmat = xgb.DMatrix(X_train,y_train)\n",
"predict_y = bst.predict(d_test)\n",
"print(\"The test log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"[0]\ttrain-logloss:0.684819\tvalid-logloss:0.684845\n",
"Multiple eval metrics have been passed: 'valid-logloss' will be used for early stopping.\n",
"\n",
"Will train until valid-logloss hasn't improved in 20 rounds.\n",
"[10]\ttrain-logloss:0.61583\tvalid-logloss:0.616104\n",
"[20]\ttrain-logloss:0.564616\tvalid-logloss:0.565273\n",
"[30]\ttrain-logloss:0.525758\tvalid-logloss:0.52679\n",
"[40]\ttrain-logloss:0.496661\tvalid-logloss:0.498021\n",
"[50]\ttrain-logloss:0.473563\tvalid-logloss:0.475182\n",
"[60]\ttrain-logloss:0.455315\tvalid-logloss:0.457186\n",
"[70]\ttrain-logloss:0.440442\tvalid-logloss:0.442482\n",
"[80]\ttrain-logloss:0.428424\tvalid-logloss:0.430795\n",
"[90]\ttrain-logloss:0.418803\tvalid-logloss:0.421447\n",
"[100]\ttrain-logloss:0.41069\tvalid-logloss:0.413583\n",
"[110]\ttrain-logloss:0.403831\tvalid-logloss:0.40693\n",
"[120]\ttrain-logloss:0.398076\tvalid-logloss:0.401402\n",
"[130]\ttrain-logloss:0.393305\tvalid-logloss:0.396851\n",
"[140]\ttrain-logloss:0.38913\tvalid-logloss:0.392952\n",
"[150]\ttrain-logloss:0.385469\tvalid-logloss:0.389521\n",
"[160]\ttrain-logloss:0.382327\tvalid-logloss:0.386667\n",
"[170]\ttrain-logloss:0.379541\tvalid-logloss:0.384148\n",
"[180]\ttrain-logloss:0.377014\tvalid-logloss:0.381932\n",
"[190]\ttrain-logloss:0.374687\tvalid-logloss:0.379883\n",
"[200]\ttrain-logloss:0.372585\tvalid-logloss:0.378068\n",
"[210]\ttrain-logloss:0.370615\tvalid-logloss:0.376367\n",
"[220]\ttrain-logloss:0.368559\tvalid-logloss:0.374595\n",
"[230]\ttrain-logloss:0.366545\tvalid-logloss:0.372847\n",
"[240]\ttrain-logloss:0.364708\tvalid-logloss:0.371311\n",
"[250]\ttrain-logloss:0.363021\tvalid-logloss:0.369886\n",
"[260]\ttrain-logloss:0.36144\tvalid-logloss:0.368673\n",
"[270]\ttrain-logloss:0.359899\tvalid-logloss:0.367421\n",
"[280]\ttrain-logloss:0.358465\tvalid-logloss:0.366395\n",
"[290]\ttrain-logloss:0.357128\tvalid-logloss:0.365361\n",
"[300]\ttrain-logloss:0.355716\tvalid-logloss:0.364315\n",
"[310]\ttrain-logloss:0.354425\tvalid-logloss:0.363403\n",
"[320]\ttrain-logloss:0.353276\tvalid-logloss:0.362595\n",
"[330]\ttrain-logloss:0.352084\tvalid-logloss:0.361823\n",
"[340]\ttrain-logloss:0.351051\tvalid-logloss:0.361167\n",
"[350]\ttrain-logloss:0.349867\tvalid-logloss:0.36043\n",
"[360]\ttrain-logloss:0.348829\tvalid-logloss:0.359773\n",
"[370]\ttrain-logloss:0.347689\tvalid-logloss:0.359019\n",
"[380]\ttrain-logloss:0.346607\tvalid-logloss:0.358311\n",
"[390]\ttrain-logloss:0.345568\tvalid-logloss:0.357674\n",
"The test log loss is: 0.357054433715\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "6U5b17AatAS_",
"outputId": "ca83b680-023b-4bc5-f499-8d8d85c2ff5e"
},
"source": [
"predicted_y =np.array(predict_y>0.5,dtype=int)\n",
"print(\"Total number of data points :\", len(predicted_y))\n",
"plot_confusion_matrix(y_test, predicted_y)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Total number of data points : 30000\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nLUzf5fCqDSwAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x2567e903cf8>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WmiIgHOJtATF"
},
"source": [
"**bold text**<h1> TF_IDF vectorization</h1>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "r1PJBxTxWFoV",
"outputId": "cd0b2873-dbfb-4b0e-ca9c-a802d28bb67a"
},
"source": [
"data[['cwc_min', 'cwc_max', 'csc_min', 'csc_max', 'ctc_min', 'ctc_max','last_word_eq', 'first_word_eq', 'abs_len_diff', 'mean_len']].columns"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['cwc_min', 'cwc_max', 'csc_min', 'csc_max', 'ctc_min', 'ctc_max',\n",
" 'last_word_eq', 'first_word_eq', 'abs_len_diff', 'mean_len'],\n",
" dtype='object')"
]
},
"metadata": {
"tags": []
},
"execution_count": 37
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vNZWnQfSWFoW"
},
"source": [
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.feature_extraction.text import CountVectorizer\n",
"# merge texts\n",
"raw_data=pd.read_csv('train.csv')\n",
"questions = pd.concat([raw_data['question1'],raw_data['question2']])\n",
"\n",
"tfidf = TfidfVectorizer(lowercase=False, )\n",
"tfidf.fit(questions.values.astype('U'))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "H9QIpoVyWFoW",
"outputId": "4be9bc44-9d89-4285-f0a7-81cc4f549473"
},
"source": [
"('no.of features are equals to the ',len(tfidf.get_feature_names()))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"('no.of features are equals to the ', 109679)"
]
},
"metadata": {
"tags": []
},
"execution_count": 55
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vi2oOkF9WFoW",
"outputId": "2072eea2-95b5-4f5b-8a76-8fff70484216"
},
"source": [
"tfidf_vectorizer=tfidf.transform(questions.iloc[0:100000])\n",
"tfidf_vectorizer.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(100000, 109679)"
]
},
"metadata": {
"tags": []
},
"execution_count": 59
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZpzkETuYWFoX",
"outputId": "065221b4-9fcc-4c14-e91b-4f65c086cbb3"
},
"source": [
"from scipy.sparse import hstack\n",
"from scipy import sparse\n",
"model_data=hstack([tfidf_vectorizer,sparse.csr_matrix(df)])\n",
"model_data.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(100000, 109689)"
]
},
"metadata": {
"tags": []
},
"execution_count": 75
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QgD768zBWFoX",
"outputId": "ec1fe22a-671b-43e5-8747-0550821bc18b"
},
"source": [
"Y_true=raw_data['is_duplicate'][:100000]\n",
"model_data.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(100000, 109689)"
]
},
"metadata": {
"tags": []
},
"execution_count": 90
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "qP_qHt3nWFoX",
"outputId": "a187408d-88c6-40fa-c29f-8288cfb8f08e"
},
"source": [
"type(Y_true.values)\n",
"Y_true.values.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(100000,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 91
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "p-bGJRBiWFoX"
},
"source": [
"X_train,X_test, y_train, y_test = train_test_split(model_data, Y_true.values, stratify=y_true, test_size=0.3)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "d4Fydd_9WFoY",
"outputId": "5dc25a73-8674-4f0d-86da-caf5abd71ea2"
},
"source": [
"print('train dataset size is ',X_train.shape)\n",
"print('train dataset class lable size is ',len(y_train))\n",
"print('test dataset size is ',X_test.shape)\n",
"print('test dataset class lable size is ',len(y_test))\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"train dataset size is (70000, 109689)\n",
"train dataset class lable size is 70000\n",
"test dataset size is (30000, 109689)\n",
"test dataset class lable size is 30000\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "9MN3cUFVWFoY",
"outputId": "54adaf7c-540a-453b-f45a-e10c844686f7"
},
"source": [
"alpha = [10 ** x for x in range(-5, 2)] # hyperparam for SGD classifier.\n",
"\n",
"\n",
"\n",
"log_error_array=[]\n",
"for i in alpha:\n",
" clf = SGDClassifier(alpha=i, penalty='l2', loss='log', random_state=42)\n",
" clf.fit(X_train, y_train)\n",
" sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
" sig_clf.fit(X_train, y_train)\n",
" predict_y = sig_clf.predict_proba(X_test)\n",
" log_error_array.append(log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
" print('For values of alpha = ', i, \"The log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.plot(alpha, log_error_array,c='g')\n",
"for i, txt in enumerate(np.round(log_error_array,3)):\n",
" ax.annotate((alpha[i],np.round(txt,3)), (alpha[i],log_error_array[i]))\n",
"plt.grid()\n",
"plt.title(\"Cross Validation Error for each alpha\")\n",
"plt.xlabel(\"Alpha i's\")\n",
"plt.ylabel(\"Error measure\")\n",
"plt.show()\n",
"\n",
"\n",
"best_alpha = np.argmin(log_error_array)\n",
"clf = SGDClassifier(alpha=alpha[best_alpha], penalty='l2', loss='log', random_state=42)\n",
"clf.fit(X_train, y_train)\n",
"sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
"sig_clf.fit(X_train, y_train)\n",
"\n",
"predict_y = sig_clf.predict_proba(X_train)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The train log loss is:\",log_loss(y_train, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predict_y = sig_clf.predict_proba(X_test)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The test log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predicted_y =np.argmax(predict_y,axis=1)\n",
"print(\"Total number of data points :\", len(predicted_y))\n",
"plot_confusion_matrix(y_test, predicted_y)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"For values of alpha = 1e-05 The log loss is: 0.48278047663612855\n",
"For values of alpha = 0.0001 The log loss is: 0.4918043064202639\n",
"For values of alpha = 0.001 The log loss is: 0.5223978793595413\n",
"For values of alpha = 0.01 The log loss is: 0.5698707566649662\n",
"For values of alpha = 0.1 The log loss is: 0.586266000226983\n",
"For values of alpha = 1 The log loss is: 0.6113725104520547\n",
"For values of alpha = 10 The log loss is: 0.6262438683982634\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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0KJFC5/z9bZgwQIefPDBUu89b948cnNz2bFjB1u2bKFXr15FrhkyZAh79+5l586d7Ny5kwYNGrB161YAjhw5wunTpwFnNOPYsWMBZ1qtoUOHcvvttzN8+PAS9928eTOdO3cut8zGGONvNT6Aebv66qv55JNPAAgLC+Phhx+mZ8+e9OzZk0ceeYSwsDAAxo0bx+rVqwF44IEHWLZsGbGxsbz33ns88ICzasy1115Lu3btiImJ4a677uKFF144Y773338/UVFRnDhxgqioKKZMmQLAtm3buOiii0qUNy4ujptvvplOnToxePBgnn/+eU8X4LXXXnvGbr5169bRoUMH2rdvz759+3jooYcAeP311/noo4+YPXs28fHxxMfHs27dOsB55le/fn2aN29e6e/ZGGPOieoeBnmutsoOo9+fvd8zjH7NmjWeoeTnk1tvvVX3799/zvOtzNDbv/71rzpjxoxzXpaqYMOrawarc8UQwMPoq3sy3/NK9+7d6d+/PwUFBUUGM1S3l19+ubqL4BESEsKoUaOquxjGGGMBrLjC50CmdHfccUd1F8EYYwB7BmaMMSZAWQDzUnwuxMGDBxMSEsJ1111XqfyWLFlChw4diImJYerUqZ7jY8aMoW3btiUGSJTHl3kZCz3zzDOICAcPHgSc0YbXX3893bp1Iy4ujpdecqaW3Lt3L927dyc+Pp64uDhefPFFTx4DBw70zOtojDHnI+tC9DJr1iyGDRvmef41adIkTpw4wb/+9a8K51VQUMB9993HsmXLiIqKomfPniQnJ9OpUycA/vznP5c6RL00hw4d4tFHH2X16tWICD169CA5OZnQ0NAS1+7atYvU1FRat27tOfb888/TqVMn3n77bQ4cOECHDh249dZbCQ8PZ8WKFdStW5fs7Gw6d+5McnIyLVu2ZNSoUbzwwguekYnGGHO+sRaYF++5EAESExNp3LhxievWrFlD37596dGjB4MGDfK8yOxt5cqVxMTE0K5dO+rUqcPIkSM9cw1WlK/zMgJMnDiRp59+usiMICLCsWPHUFWys7MJCwsjODiY2rVrU7duXQByc3M974SB847Zq6++WqnyGmNMVbAA5io+F2JZTp06xa9+9Svmz5/PmjVrGDt2bKmtlDPNU/jQQw/RtWtXJk6cSG5ubon0Fcmr0KJFi4iMjKRbt25Fjo8fP56NGzfS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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"For values of best alpha = 1e-05 The train log loss is: 0.4719429926421485\n",
"For values of best alpha = 1e-05 The test log loss is: 0.48278047663612855\n",
"Total number of data points : 30000\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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iIikOSWARERERERERETSnBJAIiIiIiIiIiJpTgkgEREREREREZE0pwSQiIiIiIiIiEiaUwJIRERERERERCTNKQEkIiIiIiIiIpLmlAASEREREREREUlzSgCJiIiIiIiIiKQ5JYB20EMPwfLlMGtWXtmIEbB4MXzxRfgcd1woP+usvLIvvoCcHDjwQKhePX/5ypVw5535t3PyyeAOnToV3o4ePWDuXJg/H4YNyytv0QKmTg3lEydCpUqhvHLlMD1/fpjfvHmJ/UoE+P3337jwwlMZMOBEzjuvFw8/fDcAzz//BP36decPf9iHdetWb63v7tx99w3069edAQP+yLffzs63vo0bN3DaaUcxevTIQre3fv1aLr/8fPr3P5bLLz+fn39eV+x6X331efr3P5b+/Y/l1VefL+lfgYjshKKO6bnuuCMvZsybB2vW5M0bNQq+/hrmzIHRo/PKO3aEmTPDOmPLJbXNmfM+N9zQg5Eju/PGG+O2mf/hh09y881/ZNSo3tx115ksXboAgI0b13D33Wdz+eUH8cwzebHj1183MGpU762f4cMP5dlnbyy1/RGRklFcnGjaFN5+Gz7/HL76Ku965JBD8uLHl19Cnz55y9SqBc88A998E2LIYYeVzr7Izvnss/c555we9OvXnQkTto0TX301jYEDT+KYY/bnvfdezTdv+fKfGDr0T5x77nGcd97xLFu2ON/8u+++geOOOyip7ZeyUbGsG1BePfII3HMPPPZY/vI774Tbb89fNmFC+AC0bQsvvBAOyAAHxfxdTZ8Ozz2XN129Ovz1ryFRU5gKFeDee6F795B4mjYNJk8OB+9Ro0JbnnoKxoyBAQNg7Njwc80aaN0azjgj1Ovbd6d+FRKjUqXK3HHHo1SrtjvZ2Zv5y1/O4tBDj6Jt244cfnhXLr30nHz1P/30fZYsWcgTT7zON998xZ13XsuYMc9snT9+/F20b39IkdubMGEcHTsezllnDWTChHFMmDCOQYOGFrne9evX8thj9zB27LOYGYMGncwRR3SjRo1aSfudiEhi4h3Tc112Wd73IUPyYsjhh8MRR0D79mH6ww/h6KPhvfdCDLjgAvj0U5gyBXr2hFfznwdKitmyJYdnnhnJxRc/TO3aDfjXv06lbdtuNGrUamudTp3+yJFHngnArFlv8fzzN3PRRQ9RsWIVevX6K0uXzmfp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RYgTxx13Ci1btmb8+NHss09bjjjiGObOncnVVw9hw4b1fPLJOzz88L955JGXycjI4MILh/H3v5+LO7RpcwAnnHBaWe+SlBJzT80byunWZVN2nB5XkFiNG7NTAx0deGDix5avvip+W2bWAnjJ3dtG0z2BO4Cj3X1lTL36wGp3zzGzvYAPgHbuvtrMPgMuAT4FpgD/dvcpZnYbkOXut5jZlUBdd78i0fanO8UJyaXX2kusHj1SK05I2VGckFy6npBYqXY9UZqS1QNIRCTtmdmTQFcg08wWAyMIb/2qArwRDco9NXrj11HASDPbDGwBBrtc2rokAAAgAElEQVR77gDSFxHeKFYNeCX6ANwCPG1mA4AfgdNLYbdERERERCQNKQEkIrKD3P3MQoofKqLus8CzRcybDmwzIqu7ZwHH7EwbRUREREREoGxeAy8iIiIiIiIiIqVICSARERERERERkTSnBJCIiIiIiIiISJpTAkhEREREREREJM0pASQiIiIiIiIikuaUABIRERERSRIz62lm88xsgZldWUSd081sjpnNNrMJpd1GERHZNeg18CIiIiIiSWBmGcC9QHdgMTDNzCa7+5yYOq2B4cAR7r7GzPYom9aKiEi6Uw8gEREREZHk6AwscPfv3f13YCLQu0CdC4B73X0NgLuvKOU2iojILkIJIBERERGRHWBmA81sesxnYIEqewKLYqYXR2Wx2gBtzOwjM5tqZj2T2WYREdl16REwEREREZEd4O7jgHE7uZqKQGugK9AEeN/M2rn72p1cr4iISD7qASQiIiIikhxLgKYx002isliLgcnuvtndfwC+JSSERERESpR6AInILqV9+7JugYiIpLISjhPTgNZm1pKQ+OkLnFWgzgvAmcDDZpZJeCTs+xJthYiIlJjyfD2hHkAiIiIiIkng7tnAEOA14BvgaXefbWYjzezEqNprQJaZzQHeAYa6e1bZtFhEREqTmfU0s3lmtsDMriyizulmNsfMZpvZhJjyc81sfvQ5N5HtqQeQiIiIiEiSuPsUYEqBsmtivjtwWfQREZFdhJllAPcC3QmPA08zs8nuPiemTmtgOHCEu68xsz2i8rrACOBgwIEZ0bJr4m2z2B5AZra7mVWIvrcxsxPNrNKO7aKIiKQbxQkREYlHcUJEpFCdgQXu/r27/w5MBHoXqHMBcG9uYsfdV0TlPYA3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9Fb9GW0vevT4KD177sXChcW42zlzHmevvQ7k4x8/nrlznwRg0aJXaG5eSbduxZjK1atX8/TTD62Z/gXFyK5DDjmOefOKfV58sWintaamwUyf/gArV67grbdeZ/HiV9lvv4/zt3/bxOLFr/LWW6+zatUKpk9/gKamwUQEjY1HMWNGsVD0H/4wnqamwVv0ZyK1Y7uKExuib98m5s9/lQULXmflyhVMmvQAAweu+/2cO3c2o0ePYOTI29htt7Vria1cuYJvfvMihgw5hWOPXTszIiI49NCjmDy5+M5PnDieQYP8zte6554rkjl7712M9Bk6FCZPXrfOpElFsgegZ89iNNAbbxS/4B92GDQ0FPsedlgxBWyXXYo/DKF47Zhj1p0aJtUg40QrCxYUU3J23bUY3dG3L8ybt/b1FSvglltgzJji8ac/FcmfhQuLen37Ft//XXct2lmwYOmqao0AAA5cSURBVP1tqja9/HJxoeCjHy3+TwcMKBZyrvTUU2sTPd26FfUXLy4uEjQ1FaOBPvzhYnvWrGIdqOXLi/WFoFhLqnWb2vZtqRFACyOif2bOACgz958CxgJNW+iY27zu3Xfl9NPP44ILTiMiOOqoY9asE3TTTV/n5JPPoE+fJs48czjf+tZlPPjgz+nV62+45prvAjBgwLE8+eRkzj77H9l551248spidGyPHj35whcu5IILioWJzznnInr06FmV97g9OO20b3LnnZfT3LySPfbYl89/fhQ77bQL99zz74wa9SkaGnbk7LNvWDN176WXptKzZ28+8pF912nn5JMv5667vsZ9932bbt1256yzRgHFws9//OOznHTSpfTu3cihhw7j298+kYaGBk4/fQRdujSU/RjBrbd+idWrmxkw4LP07t1YtnsFP/rRV3ngge+yzz4HM2DA6VvxpyOtYZxopaFhBy65ZARf+1rxvR027LMccEAjY8feTJ8+hzBo0Cf5wQ9uZPny97n22ksB6NWrNyNH/oDf/e4hnnlmGu+882cefng8AFdddQMHHXQww4dfwfXXf5Xbb/8ujY0Hc+KJfudrXXMzjBpVrNfTpQvcf39xFffCC4vk0OTJxdo+AwcWf9ytXg3f+U7xy/sjjxRTu37+82KR59//vqi/++5w883FCIEuXYp1gu69t9rvVOqQcaKVzGJtr9NOK77Hs2YVi7wPGlQkf1sW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\n",
"text/plain": [
"<Figure size 1440x288 with 6 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wHMaR0uIWFoY"
},
"source": [
"# Linear svc"
]
},
{
"cell_type": "code",
"metadata": {
"id": "86ag6yT8WFoZ",
"outputId": "d68fd887-a936-4752-e401-efe96b1c87c6"
},
"source": [
"alpha = [10 ** x for x in range(-5, 2)] # hyperparam for SGD classifier.\n",
"\n",
"\n",
"\n",
"log_error_array=[]\n",
"for i in alpha:\n",
" clf = SGDClassifier(alpha=i, penalty='l1', loss='hinge', random_state=42)\n",
" clf.fit(X_train, y_train)\n",
" sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
" sig_clf.fit(X_train, y_train)\n",
" predict_y = sig_clf.predict_proba(X_test)\n",
" log_error_array.append(log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
" print('For values of alpha = ', i, \"The log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.plot(alpha, log_error_array,c='g')\n",
"for i, txt in enumerate(np.round(log_error_array,3)):\n",
" ax.annotate((alpha[i],np.round(txt,3)), (alpha[i],log_error_array[i]))\n",
"plt.grid()\n",
"plt.title(\"Cross Validation Error for each alpha\")\n",
"plt.xlabel(\"Alpha i's\")\n",
"plt.ylabel(\"Error measure\")\n",
"plt.show()\n",
"\n",
"\n",
"best_alpha = np.argmin(log_error_array)\n",
"clf = SGDClassifier(alpha=alpha[best_alpha], penalty='l1', loss='hinge', random_state=42)\n",
"clf.fit(X_train, y_train)\n",
"sig_clf = CalibratedClassifierCV(clf, method=\"sigmoid\")\n",
"sig_clf.fit(X_train, y_train)\n",
"\n",
"predict_y = sig_clf.predict_proba(X_train)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The train log loss is:\",log_loss(y_train, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predict_y = sig_clf.predict_proba(X_test)\n",
"print('For values of best alpha = ', alpha[best_alpha], \"The test log loss is:\",log_loss(y_test, predict_y, labels=clf.classes_, eps=1e-15))\n",
"predicted_y =np.argmax(predict_y,axis=1)\n",
"print(\"Total number of data points :\", len(predicted_y))\n",
"plot_confusion_matrix(y_test, predicted_y)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"For values of alpha = 1e-05 The log loss is: 0.4891520650129217\n",
"For values of alpha = 0.0001 The log loss is: 0.5043878882946665\n",
"For values of alpha = 0.001 The log loss is: 0.5357135772103946\n",
"For values of alpha = 0.01 The log loss is: 0.5911415203592564\n",
"For values of alpha = 0.1 The log loss is: 0.6330477813348546\n",
"For values of alpha = 1 The log loss is: 0.6393891294970927\n",
"For values of alpha = 10 The log loss is: 0.6593590697623305\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"For values of best alpha = 1e-05 The train log loss is: 0.4719542935076966\n",
"For values of best alpha = 1e-05 The test log loss is: 0.4891520650129217\n",
"Total number of data points : 30000\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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kQrvn0B3M9s/us8/Rpi/pzGAmTU3s+Oiuv8B+pvZsVFMaR59J68K7AQsBjaZ2fGEOecSrQYhmbM4amt/ooURIguBFhYtGlAU0e+txwnDpC8ETjazE0qsxSJFoARQCnP3+4BrCROdLSZk1gcQ5h2AMAfBRGAKMJUwAdrtxTzXOMK42SnAJLZO2lSK2vEbsIwwf0LeBAvuvpQwwdt1hCFsNwAnufuS4rRpO/2FMGnbakJweinP9lsJX9JXmNnZhR3MzE4BerLlOq8FDrRo9TMRkRTQl/DFfDqwnDB55i4Q5k0gzJfzPOG++gZh3qC8egLTzGwNIWneO795cwiTMrcmxJHXCfOv/a8kL6YA/wSqE55cjycMV4j1AHCmhdVjHizsYGbWKjpm32jOo+cJcfgfJdtsEZGyF80x+jTRRM+EBVJmAeOjYbX/I5pf1N2/IprgGVhJmIdu12j471WEuT+XE76vjy6Ftk8H7iOMqlgI7At8FlPlfWAasMDMivpbZQRhjqDM6HdPOvB4ngVvRBLK3AvrpSwiIiIiIiIiIuWZegCJiIiIiIiIiKQ4JYBERERERERERFKcEkAiIiIiIiIiIilOCSARERERERERkRRXuawbUBAzNDu1AJCVVdYtkGTSrBm2I/tvz73FfcfOJYmlOCG5FCckluKE5FKckFyKExKrIscJ9QASEREREREREUlxSgCJiIiIiIiIiKQ4JYBERERERERERFKcEkAiIiIiIiIiIilOCSARERERERERkRSnBJCIiIiIiIiISIpTAkhEREREREREJMUpASQiIiIiIiIikuKUABIRERERERERSXFKAImIiIiIiIiIpDglgEREREREREREUpwSQCIiIiIiIiIiKU4JIBERERERERGRFKcEkIiIiIiIiIhIilMCSEREREREREQkxSkBJCIiIiIiIiKS4pQAEhERERERERFJcUoAiYgUk5mNNLNFZvZdTNmtZpZlZpOj1wkx2waZ2Swz+8HMjosp7xmVzTKzG2PK25jZl1H5S2ZWtfSuTkREREREUokSQCIixfck0DOf8n+4e8folQlgZh2A3sDe0T7/NrM0M0sDHgaOBzoAfaK6AHdFx9odWA6kJ/RqREREREQkZSkBJCJSTO7+MbCsiNVPAV509z/c/WdgFtA5es1y99nuvgF4ETjFzAzoBrwS7f8UcGqJXoCIiIiIiFQYSgCJiBTAzDLMbGLMK6OIuw4wsynRELF6UVlzYG5MnXlRWUHlDYAV7r4pT7mIiIiIiMh2UwJIRKQA7j7C3Q+KeY0owm6PALsBHYH5wH0JbaSIiIiIiEgRVC7rBoiIpBJ3X5j73sweA96KPmYBLWOqtojKKKB8KVDXzCpHvYBi64uIiIiIiGwX9QASESlBZrZLzMfTgNwVwkYDvc1sJzNrA7QDvgImAO2iFb+qEiaKHu3uDnwAnBntfyHwZmlcg4iIiIiIpB71ABIRKSYzewHoCjQ0s3nAEKCrmXUEHPgFuBTA3aeZ2ShgOrAJuNLds6PjDADGAGnASHefFp1iIPCimd0OfAP8p5QuTURESoiZ9QQeINzjH3f3YXm2/wM4Jvq4M9DY3euWbitFRKQisPCQOfmYkZwNk1KXpUEvEqNZM2xH9t+ee4v7jp1LEktxQnIpTkisZIoTZpYGzAS6EybznwD0cffpBdT/E3CAu19U9BZLQRQnJJfihMRKpjhR2jQETEREREQkMToDs9x9trtvAF4ETolTvw/wQqm0TEREKhwlgEREREREisHMMsxsYswrI0+V5sDcmM/zorL8jrUr0AZ4PzGtFRGRik5zAImIiIiIFIO7jwBGlNDhegOv5M4PJyIiUtLUA0hEREREJDGygJYxn1tEZfnpjYZ/iYhIAikBJCIiIiKSGBOAdmbWxsyqEpI8o/NWMrM9gXrAF6XcPhERKUNm1tPMfjCzWWZ2Yz7b/2Fmk6PXTDNbEbMtO2bbNrElPxoCJiIiIiKSAO6+ycwGAGMIy8CPdPdpZjYUmOjuuV/YewMverIuzysiIiUuWinyYWJWijSz0bErRbr7NTH1/wQcEHOIde7ecXvOqQSQiIiIiEiCuHsmkJmnbHCez7eWZptERCQpbF4pEsDMcleKnF5A/T7AkB05oYaAiYiIiIiIiIiUsEJWi9zRlSKrRcccb2anFqU96gEkIiIiIiIiIlLCSnC1yPxWitzV3bPMrC3wvplNdfef4h1EPYBERERERERERErXDq0U6e5Z0Z+zgQ/Zen6gfKkHkIhUKPvtV9YtEBGRZKY4ISIi8ZRgnNi8UiQh8dMbODdvpfxWijSzesDv7v6HmTUEDgfuLuyESgCJiIiIiIiIiJSiHVwpci/gUTPLIYzsGha7elhBlAASERERERERESllxV0p0t0/B/bd3vNpDiARERERERERkRSnBJCIiIiIiIiISIpTAkhEREREREREJMUpASQiIiIiIiIikuKUABIRERERERERSXFKAImIiIiIiIiIpDglgEREREREREREUpwSQCIiIiIiIiIiKU4JIBERERERERGRFKcEkIiIiIiIiIhIilMCSEREREREREQkxSkBVEz/+Q8sXAhTp25dPmAAfP89fPcd3HVXKDv4YPjmm/CaPBlOPbXw49SrB2PHwsyZ4c+6dfNvR9++oc7MmeF9rgMPhClT4Mcf4YEHtv+4UjyLFs3nmmsuoF+/E+jX70ReeeUpAJ588l+cddaRXHzxKVx88SmMH//R5n1++mkGV155Dv36nchFF53Mhg1/APDee29x0UUnk55+MjfckM7Klcu2OZ+78+CDt3Peed1JTz+ZmTOnbd727ruvc/75PTj//B68++7rm8t/+OE7LrroZM47rzsPPng77p6ovw4R2U7HHQczZoR798CB226///4t8eSHH2D58i3bWraEMWNg+nSYNg123TWUd+sGkyaFfT75BHbbrXSuRXbMV199TN++x3Heed15/vkR22wfNeoJ+vU7gfT0k7n22gtZsCBr87ZHH72H/v1Pon//k3j//czN5Xff/VfS03uRnn4yQ4Zcxbp1a0vlWkSk5BQWJ1q2hPffh6+/hm+/heOP37Jt333h88/D75QpU2Cnnbbe9803t/1NIsmrsDjx7bcTyMg4jWOP7cBHH727uXzBgiwyMk7j4otPoV+/Exk9+oXN2zZu3MC9997CBRccR9++PfnoozGlci1SeixZf/yZkZwNixx5JKxZA08/HW6mAF27wk03wYknwoYN0KgRLF4M1auHz9nZ0LRpuBk3axY+53ccCMmjZcvCnwMHhsTNjTdu3YZ69WDiRDjoIHAPX/A7dYIVK+DLL+Gqq8KfmZnw4IPw7rtFO26yycoqvE6yWLp0EUuXLqZ9+735/fc1XHrpGdx228N8+OE7VK++M+eck75V/ezsTWRknMagQfew++57snLlcmrWrA04Z555JE8++TZ16tRn+PC7qVatOv36/Wmr/ceP/4jXX3+GYcMe4/vvv+Vf/7qDRx55mVWrVnDZZWcwfPirmBmXXno6jz76GrVq1eHyy8/kT3+6mb322p8bb7yE00+/gC5dji7Fv6Ud06wZtiP7779/0e8t3367Y+eSxEr2OLG9KlUKyfnu3WHePJgwAfr0CQ8V8jNgABxwAKRHt5UPPoA77oD//Q9q1ICcHFi3LiSKTjkl/GC4/HLo3Bn69y+96yoN5SlOFEV2djZ9+x7HPfc8QaNGTbjssjO55Zb7ad169811vvlmPHvttT/VqlXnzTefZ/Lkrxgy5J988cWHvPrqU9x112Ns2LCBa665gPvue4oaNWqydu0aatSoCcDDD/+devUacO65GWV1mQmjOCG5KmKcePTRkPAfPhz22iv8DmjTBtLSQlLoggtC8qd+/fCbIScn7HfaaXDmmbDfflv/JkkVFTFOLFgwj7Vr1/DSSyM5/PBuHH10TyAkedyhatWqrFu3lv79T+ahh16gYcMmPPHEg+TkZJOefg05OTmsXr2COnXql9VlJkxFjhPqAVRMn3wSEimxLr8chg0LyR4IyR8IX8Czs8P7atVCsibecSB8WX8qdB7hqae27jWU67jjYNy48AR4xYrwvmfPkGSqXTskfyAkl3L3L8pxpfgaNGhM+/Z7A7DzzjVp1aotS5YsLLD+hAmf0bbtHuy++54A1KlTj7S0NNwdd2fdunW4O7//voYGDRpvs/9nn71Hjx6nYmZ06NCRtWtXsXTpIiZM+JROnQ6ndu261KpVh06dDuerrz5h6dJFrF27hg4dOmJm9OhxKp9++l5i/jJEZLt07gyzZsHPP8PGjfDii+GeXZA+feCF6KHdXntB5coh+QOwdm2IPRBiTu3a4X2dOvDbb4m7BikZM2ZMoVmzXWnWrCVVqlSlW7cT+eyzre/VBxxwCNWqVQegQ4eOLF68AIA5c2ax334HkZZWmerVd6Zt2z346quPATYnf9ydDRvWY0n1lVREClOUOFHQPb9Hj5D4mTIlfF62bEvyp0YNuPZauP320rkO2XFFiRNNm7Zgt932pFKlrX/yV6lSlapVqwKwYcMG3HM2b3vnnVc599xLAahUqVJKJn8qulJPAJlZij133KJ9+9CjZ/x4+PDD0DMnV+fOobvl1Klw2WVbEkIFadIEFoTvcixYED7n1bw5zJ275fO8eaGsefPwPm95UY8rJWPBgnnMmvU9e+21PwCvv/4c6eknc9ddg1i9eiUA8+b9jJlx/fXpZGScxgsvPAZA5cpVuOaaW0lPP5kzzzySOXN+4oQTztzmHEuWLKRx46abPzds2JQlSxZuU96oUZPN5Y0axZY3jZugEikLqRwn4inonp6fVq3CE9333w+f27cPDwJefTU84b377vCkGODii8MT4Llzw5PfYcMSex2y4wq6hxckM/MVunQ5CoDddtuTr776hPXr17Fy5TImT/5yc3II4K67BnHGGYfz66+zOe20CxJ3ESIJpDgR5Bcnbr0Vzj8/1MvMhD9Fncfbtw/JoXffDaMGrr9+yz633Qb33Qe//57wS5ASsr1xIq9Fi+aTnn4y55zTld69L6FhwyasWbMKgJEjHyAj4zRuvfUqli1bUuJtl7JVFj2A/lbQBjPLMLOJZjYRth3HmOwqVw7dKQ85JNxUR43asu2rr2CffcJ8QIMGbTvmtjCJGqmXpCMAy71169YyePBVXHnlX6lRoya9evXhuefG8dhjb9KgQWP+/e/wCyw7O5upUydx88338OCDz/Ppp/9j0qQv2LRpI2+++QIjRrzBK698Qtu2e/D884+W8VWJlJqUjRMlpXdveOWVLU9vK1cODyD+8pcQZ9q2hX79wrZrroETTgjzQjzxRJhHSFLHuHFv8sMP33HOORcDcPDBR3DIIUczYEBvbrvtOjp06LjV09+BA//Oyy9/QqtWu/HBB5kFHVYk2SlOFKBPH3jyyXDPP+EEeOYZMAtx4ogj4Lzzwp+nnRbmiNt//zA33BtvlHXLpTQ1brwL//nPf3n22bGMHfs6y5YtITt7E4sXL2CffQ5gxIjX6dDhAIYPv6usmyolLCEJIDObUsBrKlBgnxN3H+HuB7n7QVD+xqTPmwevvRbeT5gQvpg3bLh1nRkzwpw/++wT/1gLF4ahXBD+XLRo2zpZWeHmnqtFi1CWlRXe5y0v6nFlx2zatJHBg6/i//7vZI46qgcA9es3JC0tjUqVKnHSSWcxY0aYYa9Ro6bst9/B1KlTn2rVqtOly1H8+OM0Zs0Kg7mbN2+FmdG16/FMm/bNNudq2LAJixZtebK7ZMkCGjZssk354sULN5fHPglevDjUFyltFTVOxFPQPT0/vXtvGf4FIf5MnhyGBWRnhy/yBx4YYtD++4eHEAAvvQSHHZa4a5CSUdA9PK9Jkz7n2WeHc8cdj2zuzg9w/vmX8/jjb3LvvU/gDi1atNlqv7S0NLp1O5GPPx6buIsQ2UGKE9sqSpxIT9/yEHr8+DD9RMOGIU58/DEsXRqGCGdmhjhx6KFh1MLPP8Onn4aeQh98UHrXJMVT1DhRlOO0bt2OqVMnUrt2PapVq86RR4bfL1279mTmzOkl1mZJDonqAdQE6AucnM9raYLOWebeeAOOOSa8b9cOqlaFJUugdesw8RqEbvt77gm//BL/WKNHw4UXhvcXXhhm5c9rzJgwnrdu3fDq0SOULVgAq1ZBly6hXt++W/YvynGl+Nydu+++iV13bcvZZ2/pnbx06ZZM2yef/I82bdoB4Untzz/PZP36dWRnb+Lbbyew666707BhE+bM+YkVK8IEUZMmfUarVtsu3XPYYd0YO/YN3J3p0ydTo0YtGjRozMEHH8HEiZ+yevVKVq9eycSJn3LwwUfQoEFjatSoyfTpk3F3xo59g8MPPzbBfyupy8xGmtkiM/supuweM5sRfUl93czqRuWtzWydmU2OXsNj9ulkZlPNbJaZPWgWZuYws/pmNs7Mfoz+rFf6V5kwFTJOxDNhQogdrVtDlSohyTN69Lb19tgjTOD/xRdb71u37paHDt26hdXAli8Pc0C0C7ccuncveFJpSR577rkvWVm/MH/+XDZu3MD777/NYYd126rOjz9O5/77B3PHHY9Qr16DzeXZ2dmsXBmWh/vppxnMnv0DBx98OO5OVtYcIMSqzz9/n1at2pbeRYlsP8WJPIoSJ379FY6NvtrtuWdIAC1eHH4j7LtvWJwmLQ2OPjrEieHDwzCyNm1Cz6CZM7f8npHkVZQ4UZDFixfwxx/rAVi9eiXfffc1LVu2wcw49NBjmDw5TCT79ddf0Lq1lg5NNZUTdNy3gJruPjnvBjP7MEHnLFXPPx9W/WrYMIyxHTIERo4Mr6lTw0TQuYmWI44IK21t3Bh6BV1xRci+xzvOsGEhe5+eDnPmwNlnh/qdOoU5hC65JHyxv+22EAwAhg7dsiTwFVeE7p/Vq8M774QXFHxcKRnffTeJcePepG3b9lx8cZiV7+KLr+X9999i1qwZmEHTps259tqhANSqVYezzurHZZediZnRpctRHHpoVwAuvPBKrr76PCpXrkyTJs0ZOPDvAJuXauzVqw+HHHI0X375Eeef352ddqrOwIF3AlC7dl0uuOAKLrsszBvUt++V1K5dF4A//3kIw4YNYsOG9XTufNTmeSOkWJ4EHgKejikbBwxy901mdhcwCMhdqPUnd++Yz3EeAS4BvgQygZ7AO8CNwHvuPszMbow+57Poa7mU8nFie2Vnh5W9xowJX85Hjgxfzv/2t7Di43//G+r17h0m/oyVkxOGf733XujqP2kSPPZYOOYll4S5gXJyQoy46KLSvzbZPmlplbnqqsHccMPF5ORkc/zxZ9CmTTtGjnyAPfbYh8MPP5bhw+9m3brfufXWqwFo0mQX7rhjONnZm7j66vOAsBjBTTfdQ1paZXJycvj73wfy++9rcXd2220PrrmmwFE0IslAcSKPosSJ664L9/9rrglTPeQOB16xIgwBnjAhlGdmhpeUT0WJEzNmTOGWWwawZs0qvvjiA5544l+4SG7nAAAgAElEQVQ8+eTbzJnzE488MgwwwDn77Ito23YPADIy/sLf/34DDz98J3Xq1N/8+0NSh5aBl6SXass2yo5JtmUbzaw18Ja7bzOw08xOA8509/MKqmdmuwAfuPue0ec+QFd3v9TMfojez4/qfejuexS1/alOcUJyKU5IrGSLE1J2FCckl+KExKrIcULLwIuIJM5FhJ48udqY2Tdm9pGZHRmVNQdi1u1jXlQG0MTd50fvFxBnzgMREREREZF4EjUETESk3DOzDLaeQXKEuxdpSREzuwnYBDwXFc0HWrn7UjPrBLxhZnsXtS3u7mamJ5kiIiIiIlIsSgCJiBQgSvZs9xqyZtYPOAk41qNxtu7+B/BH9H6Smf0EtAeygJh1+2gRlQEsNLNdYoaAad0+EREREREpFg0BExEpQWbWE7gB6OXuv8eUNzKztOh9W6AdMDsa4rXKzA6JVv/qC+SuzzcaiKaT58KYchERERERke2iHkAiIsVkZi8AXYGGZjYPGEJY9WsnYFy0mvt4d78MOAoYamYbgRzgMndfFh3qCsKKYtUJcwblzhs0DBhlZunAHEDr9omIiIiISLEoASQiUkzu3ief4v8UUPdV4NUCtk0EtllFzN2XAsfuSBtFRKRsRT1DHwDSgMfdfVg+dc4GbgUc+Nbdzy3VRoqISIWgBJCIiIiISAJEQ38fBroTVnmcYGaj3X16TJ12hN6jh7v7cjNrXDatFRGRVKc5gEREREREEqMzMMvdZ7v7BuBF4JQ8dS4BHnb35QDurgn/RUQkIZQAEhEREREpBjPLMLOJMa+MPFWaA3NjPs+LymK1B9qb2WdmNj4aMiYiIlLiNARMRERERKQY3H0EMGIHD1OZsDJkV6AF8LGZ7evuK3bwuCIiIltRDyARERERkcTIAlrGfG4RlcWaB4x2943u/jMwk5AQEhERKVFKAImIiIiIJMYEoJ2ZtTGzqkBvYHSeOm8Qev9gZg0JQ8Jml2YjRUSkYlACSEREREQkAdx9EzAAGAN8D4xy92lmNtTMekXVxgBLzWw68AFwvbsvLZsWi4hIKtMcQCJSoey3X1m3QEREkllJxwl3zwQy85QNjnnvwLXRS0REklx5/j2hHkAiIiIiIiIiIilOCSARERERERERkRRXaALIzGqYWaXofXsz62VmVRLfNBERKQ8UJ0REJB7FCRGR/JlZTzP7wcxmmdmNBdQ528ymm9k0M3s+pvxCM/sxel1YlPMVpQfQx0A1M2sOjAUuAJ4sysFFRKRCUJwQEZF4FCdERPIwszTgYeB4oAPQx8w65KnTDhgEHO7uewN/jsrrA0OALkBnYIiZ1SvsnEVJAJm7/w6cDvzb3c8C9i7yVYmISKpTnBARkXgUJ0REttUZmOXus919A/AicEqeOpcAD7v7cgB3XxSVHweMc/dl0bZxQM/CTlikBJCZHQqcB7wdlaUVYT8REakYFCdERCQexQkRqZDMLMPMJsa8MmI2NwfmxnyeF5XFag+0N7PPzGy8mfXcjn23UZRl4P9M6HL0urtPM7O2wAdF2E9ERCoGxQkREYlHcUJEKiR3HwGM2IFDVAbaAV2BFsDHZrbvjhwsLnf/CPgIIJq8bYm7X1XcE4qISGpRnBARkXgUJ0RE8pUFtIz53CIqizUP+NLdNwI/m9lMQkIoi5AUit33w8JOWJRVwJ43s9pmVgP4DphuZtcXtp+IiFQMihMiIhKP4oSISL4mAO3MrI2ZVQV6A6Pz1HmDKNFjZg0JQ8JmA2OAHmZWL5r8uUdUFldR5gDq4O6rgFOBd4A2hJn7RUREQHFCRETiU5wQEcnD3TcBAwiJm++BUdEw2aFm1iuqNgZYambTCUNnr3f3pe6+DLiNkESaAAyNyuIqyhxAVcysCuGG/ZC7bzQz3+6rExGRVKU4ISIi8ShOiIjkw90zgcw8ZYNj3jtwbfTKu+9IYOT2nK8oPYAeBX4BahAmHNoVWLU9JxERkZSmOCEiIvEoToiIJIGiTAL9IPBgTNEcMzsmcU0SEZHyRHFCRETiUZwQEUkORRkChpmdCOwNVIspHpqQFomISLmjOCEiIvEoToiIlL2irAI2HDgH+BNgwFnArglul4iIlBOKEyIiEo/ihIhIcijKHECHuXtfYLm7/w04lLD0mIiICChOiIhIfIoTIiJJoCgJoHXRn7+bWTNgI7BL4pokIiLljOKEiIjEozghIpIEijIH0FtmVhe4B/gacODxhLZKRETKE8UJERGJR3FCRCQJFGUVsNuit6+a2VtANXdfmdhmiYhIeaE4ISIi8ShOiIgkhwITQGZ2epxtuPtriWmSiIiUB4oTIiISj+KEiEhyidcD6OQ42xzQDVtEpGJTnBARkXgUJ0REkkiBCSB371+aDRERkfJFcUJEROJRnBARSS4FrgJmZteaWXo+5elm9ufENktERJKd4oSIiMSjOCEiklziLQN/HvB0PuXPABclpjkiIuWHmY00s0Vm9l1MWX0zG2dmP0Z/1ovKzcweNLNZZjbFzA6M2efCqP6PZnZhTHknM5sa7fOgmVnpXmGhFCdERCQexQkRkSQSLwFU2d035i109w1Asv0IEREpC08CPfOU3Qi85+7tgPeizwDHA+2iVwbwCISEETAE6AJ0BobkJo2iOpfE7Jf3XGVNcUJEROJRnBARSSLxEkCVzKxJ3sL8ykREKiJ3/xhYlqf4FOCp6P1TwKkx5U97MB6oa2a7AMcB49x9mbsvB8YBPaNttd19vLs74QnqqSQXxQkREYlHcUJEJInESwDdA7xtZkebWa3o1RV4C7i3VFonIlKGzCzDzCbGvDKKsFsTd58fvV8A5H7JbQ7Mjak3LyqLVz4vn/JkojghIiLxKE6IiCSReKuAPW1mi4GhwD6EpRqnAYPd/Z1Sap+ISJlx9xHAiB3Y383MS7BJSUVxQkRE4lGcEBFJLgUmgACiG7NuziIiRbfQzHZx9/nRMK5FUXkW0DKmXouoLAvomqf8w6i8RT71k4rihIiIxKM4ISKSPOINARMRke03GshdyetC4M2Y8r7RamCHACujoWJjgB5mVi+a/LkHMCbatsrMDolW/+obcywREREREZHtErcHkIiIFMzMXiD03mloZvMIq3kNA0aZWTowBzg7qp4JnADMAn4H+gO4+zIzuw2YENUb6u65E0tfQVhprDrh6ameoIqIiIiISLEoASQiUkzu3qeATcfmU9eBKws4zkhgZD7lEwlzJoiIiIiIiOyQAhNAZnZtvB3d/f6Sb46IiJQXihMiIoUzs57AA0Aa8Li7D8uzvR9htazced4ecvfHS7WRCaI4ISKSXOL1AKpVaq0QEZHySHFCRCQOM0sDHga6A/OACWY22t2n56n6krsPKPUGJp7ihIhIEom3DPzfSrMhIiJSvihOiIgUqjMwy91nA5jZi8ApQN4EUEpSnBARSS6FzgFkZtWAdGBvoFpuubtflMB28e67iTy6lCdTp5Z1CySZNGtW1i2QvMoqTmRlFV5HKobmzcu6BZJM3EvvXGaWAWTEFI1w9xExn5sDc2M+zwO65HOoM8zsKGAmcI27z82nTrlVVnHi7rsTeXQpTwYOLOsWSDJ55pmybkHZKcok0M8AM4DjgKHAecD3iWyUiEii7LdfWbcgJSlOiEjK2J44ESV7RhRaMb7/Ai+4+x9mdinwFNBtB4+ZbBQnRCRllOffE5WKUGd3d78FWOvuTwEnkv+TCxERqZgUJ0RE8pcFtIz53IItkz0D4O5L3f2P6OPjQKdSaltpUpwQEUkCRUkAbYz+XGFm+wB1gMaJa5KIiJQzihMiIvmbALQzszZmVhXoDYyOrWBmu8R87EVq9oxRnBARSQJFGQI2wszqAbcQAlZNYHBCWyUiIuWJ4oSISD7cfZOZDQDGEJaBH+nu08xsKDDR3UcDV5lZL2ATsAzoV2YNThzFCRGRJFBoAsjdH4/efgS0TWxzRESkvFGcEBEpmLtnApl5ygbHvB8EDCrtdpUmxQkRkeRQlFXAdgLOAFrH1nf3oYlrloiIlBeKEyIiEo/ihIhIcijKELA3gZXAJOCPQuqKiEjFozghIiLxKE6IiCSBoiSAWrh7z4S3REREyivFCRERiUdxQkQkCRRlFbDPzWzfhLdERETKK8UJERGJR3FCRCQJFKUH0BFAPzP7mdBl0wB39/0S2jIRESkvFCdERCQexQkRkSRQlATQ8QlvhYiIlGeKEyIiEo/ihIhIEihwCJiZ1Y7eri7gJSIiFZjihIiIxKM4ISISn5n1NLMfzGyWmd0Yp94ZZuZmdlD0ubWZrTOzydFreFHOF68H0PPASYTZ+p3QVTOXA22LcgIREUlZihMiIhKP4oSISAHMLA14GOgOzAMmmNlod5+ep14t4GrgyzyH+MndO27POQtMALn7SdGfbbbngCIiUjEoToiISDyKEyIicXUGZrn7bAAzexE4BZiep95twF3A9Tt6wkLnADKzA/MpXgnMcfdNO9oAEREp3xQnREQkHsUJEamozCwDyIgpGuHuI6L3zYG5MdvmAV3y7H8g0NLd3zazvAmgNmb2DbAKuNndPymsPUWZBPrfwIHAFEK3zX2B74A6Zna5u48twjFERCR1KU6IiEg8ihMiUiFFyZ4RhVbMh5lVAu4H+uWzeT7Qyt2Xmlkn4A0z29vdV8U7ZoGTQMf4DTjA3Q9y905AR2A2YZza3dtzASIikpIUJ0REJB7FCRGRbWUBLWM+t4jKctUC9gE+NLNfgEOA0WZ2kLv/4e5LAdx9EvAT0L6wExYlAdTe3aflfogmJNozd5yaiIhUeIoTIiISj+KEiMi2JgDtzKyNmVUFegOjcze6+0p3b+jurd29NTAe6OXuE82sUTSJNGbWFmhHSKzHVZQhYNPM7BHgxejzOcB0M9sJ2LgdFyciIqlJcUJEROJRnBARycPdN5nZAGAMkAaMdPdpZjYUmOjuo+PsfhQw1Mw2AjnAZe6+rLBzFiUB1A+4Avhz9Pkz4C+Em/UxRdhfRERSWz8UJ0REpGD9UJwQEdmGu2cCmXnKBhdQt2vM+1eBV7f3fIUmgNx9HXBf9MprzfaeUEREUovihIiIxKM4ISKSHApMAJnZKHc/28ymAp53u7vvl9CWiYhIUlOcEBGReBQnRESSS7weQFdHf55UGg0REZFyR3FCRETiUZwQEUkiBSaA3H1+NKv0k+6usbkiIrIVxQkREYlHcUJEJLnEXQbe3bOBHDOrU0rtERGRckRxQkRE4lGcEBFJHkVZBWwNMNXMxgFrcwvd/aqEtUpERMoTxQkREYlHcUJEJAkUJQH0WvQSERHJj+KEiIjEozghIpIEipIAegnYPXo/y93XJ7A9IiLlhpntQbhH5moLDAbqApcAi6Pyv7p7ZrTPICAdyAaucvcxUXlP4AEgDXjc3YeVykWUDMUJERGJR3FCRCQJxFsGvjJwJ3ARMAcwoKWZPQHc5O4bS6eJIiLJyd1/ADoCRJNcZgGvA/2Bf7j7vbH1zawD0BvYG2gG/M/M2kebHwa6A/OACWY22t2nl8qFFJPihIiIxKM4ISKSXOJNAn0PUB9o4+6d3P1AYDfCk+174+wnIlIRHQv85O5z4tQ5BXjR3f9w95+BWUDn6DXL3We7+wbgxahuslOcEBGReBQnRESSSLwE0EnAJe6+OrfA3VcBlwMnJLphIiJlzcwyzGxizCsjTvXewAsxnweY2RQzG2lm9aKy5sDcmDrzorKCypOd4oSIiMSjOCEikkTiJYDc3T2fwmxgm3IRkVTj7iPc/aCY14j86plZVaAX8HJU9AjhCWdHYD5wX6k0uPQpToiISDyKEyIiSSReAmi6mfXNW2hm5wMzEtckEZFy53jga3dfCODuC909291zgMcIQ7wgzBHUMma/FlFZQeXJTnFCRETiUZwQEUki8VYBuxJ4zcwuAiZFZQcB1YHTEt0wEZFypA8xw7/MbBd3nx99PA34Lno/GnjezO4nTALdDviKMClmOzNrQ0j89AbOLaW27wjFCRERiUdxQkQkiRSYAHL3LKCLmXUjrFgDkOnu75VKy0REygEzq0FYvevSmOK7zawjoXv7L7nb3H2amY0CpgObgCujbvCY2QBgDGEZ+JHuPq3ULqKYFCdERCQexQkRkeQSrwcQAO7+PvB+KbRFRKTccfe1QIM8ZRfEqX8HcEc+5ZlAZok3sBQoToiISDyKEyIiyaHQBJCISCrZb7+yboGIiCQzxQkREYmnPMeJeJNAi4iIiIjIDjCznmb2g5nNMrMb49Q7w8zczA4qzfaJiEjFoQSQiIiIiEgCmFka8DBhtcgOQB8z65BPvVrA1cCXpdtCERGpSJQAEhERERFJjM7ALHef7e4bgBeBU/KpdxtwF7C+NBsnIiIVixJAIiIiIiLFYGYZZjYx5pWRp0pzYG7M53lRWewxDgRauvvbCW6uiIhUcJoEWkRERESkGNx9BDCiuPubWSXgfqBfSbVJRESkIOoBJCIiIiKSGFlAy5jPLaKyXLWAfYAPzewX4BBgtCaCFhGRRFACSEREREQkMSYA7cysjZlVBXoDo3M3uvtKd2/o7q3dvTUwHujl7hPLprkiIpLKlAASEREREUkAd98EDADGAN8Do9x9mpkNNbNeZds6ERGpaDQHkIiIiIhIgrh7JpCZp2xwAXW7lkabRESkYlIPIBERERERERGRFKcEkIiIiIiIiIhIilMCSEREREREREQkxWkOoBKUk5PNPfecQd26Tbj00keZOfML3njjbrKzN9Ky5d706XMHaWmVmTLlf2RmPoBZJSpVSuP00//KbruF1T6vvnovmjVrD0C9eruQkTF8m/Ns3LiBZ5+9gblzp1GjRl369fsHDRq0AGDs2EcZP/4VKlWqxBln3Mxeex0JwPTpH/Paa3eQk5PDoYeeRffuGaX0t1Lx/P77Kl544Wbmz5+JmXHuuXeyYsUC3nnnIRYu/InrrnuZVq32BSA7eyMvvHAzc+dOJydnEwcffCo9elzKwoWzefLJazYfc8mSuZxwwlUcc0y/rc7l7rz66h1Mn/4RVatW47zzhtGy5d4AfPnl64wd+wgAPXpcTpcupwHw66/f8dxzg9i4cT0dOhzNGWfchJmVwt+MiBTmq68+5qGH7iA7O4cTTzyLc8/d+l49atQTZGa+TFpaGnXq1OeGG+6kadPmLFiQxeDBA8jJyWHTpk2cfvr59OrVh/Xr13HrrVfz22+/UqlSGocddgwZGX8po6uT7XHccfDAA5CWBo8/DnfdtfX2+++HY44J73feGRo3hnr1wue+feHmm8P722+Hp5+GmjXhk0+27N+iBTz7LFxzDSJSjrRuDcceC2YwZQp89VX+9dq3h1NOCf//L1y4pbxWLbjoIvj8c5gwYUu5GVxwAaxZA6+9ltBLkBKy777hv1mlSvDhh/DWW1tvP/JI6N0bli8Pn8eNg48+Cu+fegrmzg3vly6Ff/xjy35nngmdO0NODrz/Powdm/BLkVKkBFAJ+vDDp2nadDfWr19DTk4Ozz57IwMGPEnjxm14++0H+Oqr1zn00LPYY49D2XffYzEzsrJm8MQTf+bmm98FoEqVagwc+Gbc84wf/zI771ybwYPHMWnS24wefS/9+/+T+fNn8fXXbzNo0NusWrWQhx7qzy23jAHg5ZeHcuWVT1C3bhPuvfdM9tmnG7vssnvC/04qotdeu4O99jqS9PQH2bRpAxs2rKd69dqkp/+Ll14aslXdb755l02bNjBo0H/ZsGEdd955Ip06nUiTJm03/zvIycnmlluOYv/9u29zrunTP2bx4l+45Zax/PLLt4wadSvXXfcya9eu4N13H+Ivf3kVM+Oee05n3327sfPOdRg16lZ6976N1q33Z/jwS/j++4/p0OHoUvm7EZGCZWdn88ADQ7nnnido1KgJl112Jocd1o3Wrbfcq9u124vhw1+lWrXqvPnm8zz66D0MGfJPGjRoxEMPvUTVqlVZt24t/fufzGGHdaNmzdqcc85FHHDAIWzcuIHrruvHl19+RJcu+n8+mVWqBA8/DN27w7x54Ufa6NHw/fdb6lx77Zb3AwbAAQeE9/XqwZAhcNBB4A6TJoV9V6zYUgdg4kT9yBMpb8zCfWHUKFi9Ovz4/+mn8AM+VpUqcOCB8Ntv2x7jmGPg55+3Le/UKRxnp50S03YpWWZw4YXh4cCyZTB0KHz99bb/zb/8MiQB89qwYcuDglhHHgkNGsDAgSGG1K6dmPZL2dEQsBKyfPkCpk//kEMPPROAtWtXkJZWhcaN2wCw556H8+23IX260041Nve42LBh3Xb3vpg69X06dw69OTp2PI6ZM7/A3Zk69T0OPPBEqlSpSoMGLWnUaFfmzJnCnDlTaNRoVxo2bEnlylU58MATmTr1vZK6dImxbt1qZs2asPnfQeXKVdl559o0bbobTZq03aa+mfHHH+vIzt7Exo3rSUurQrVqNbeq88MPX9CwYUvq12++zf5Tp75H586nYma0adORdetWsXLlImbM+JQ99jicGjXqsvPOddhjj8P5/vtPWLlyEevXr6FNm46YGZ07n8qUKfq3IJIMZsyYQrNmu9KsWUuqVKlKt24n8tlnW///ecABh1CtWnUAOnToyOLFCwCoUqUqVatWBWDDhg245wBQrVp1DjjgkM112rXrwOLFC5Hk1rkzzJoVfqRt3Agvvhie5BekTx944YXw/rjjwlPe5ctD0mfcOOjZc+v67dqFHkOxPYJEJPntskv4f3vlytA7Y8YM2D2f57lHHBF6Bm3atHX57ruHfZcs2bq8Zk1o2xamTk1c26Vk7bZb6Nm1eDFkZ8P48SGJt6OOPRZefz0kfwBWrdrxY0pySVgPIDPbE2gOfOnua2LKe7r7u4k6b1l57bU76dXrev74Yy0ANWvWIycnm19/nUqrVvsyefK7LF++YHP9b78dx3//ex9r1izj0ksf3Vy+adMf3HPP6VSqVJnu3TPYb7//2+ZcK1cupG7dXQBIS6tMtWq1WLt2OStXLqR16/0316tbtwkrViyM3jfdqnzOnCkl+xcgACxdOo+aNevz3HODyMqaQcuWe3PGGTex004751u/Y8fjmDr1PW6++Qg2blzPaacNokaNulvV+frrt+nU6aR89w//FmL/2zZl5cqFrFixkHr1tv5vvmLFwgLri5SFihYnCrNkyUIaN97y/2ejRk34/vuC79WZma/QpctRmz8vWjSfQYMyyMr6lUsvvYGGDZtsVX/NmlV88cUHnHHGhSXfeClRzZtv6ZoPoRdQly75123VCtq0Cd30C9q3eZ7nB717w0svlWybRRJBcWJrNWuGnj+5Vq8OSaFYjRuHXhuzZ8PBB28pr1Il3EdGjdq6HKBbtzA0KHqOIOVAvXqh50+uZctCUiivgw+GPfaABQvguee27FOlCvztbyGR+NZbobcohH8/hxwSkkmrV8Mzz2w9hFDKv4T0ADKzq4A3gT8B35lZ7HOrO+Psl2FmE81sYmbmiEQ0LSG+++4DatWqT6tW+2wuMzP69buf1177O/fee+b/t3fvUVpV98HHvz8waAQdMCgQRMGIIpUEe7EkUI1GEaVVY4nBmippDEnEpTbVRt9YtVCNb+Jra1a9hFTWW8WE5LUxIcGG4K1WqxFElIsYCF4A5RJQIyJy+71/nDPwMMxwnRvPfD9rPWvO2WefffYzc+b8Zn7P2fuw//4daddu67f7E584neuu+yWXXHIHU6bcvqX8xhsf4+qrf8LFF/8ffvKTm1m58vVmfS/aO5s3b2TJknkMGXIB3/jGT9l//w/z8MMNn8uvvfYiEe34p3/6b2644REee2wCv/vd1r/cN25cz5w5jzJw4LAG25D2RY0RJyZO3HfiRGObNu1nvPzyHD7/+Uu2lB12WA/uuefnTJz4K371qwdZvXrrR7ybNm1k3Livc955f81HP9qrJbqsJjJyJDzwQPFH/O7sU3vHkNRaNUaceOaZthcnTjkFHnts+/LBg4uhnxs2bFt+1FGwdq3/5Fej558v5nn75jdhzhz4yle2bvvbvy2GC995J1x4YZH4gSIxtGFDse3xx+HLX26RrqsJNdUdQF8G/igz10REb+CBiOidmbcDDY53yszxwHiAqVPJJupbo1u0aCazZz/KvHlPsGHDB6xbt4Z7772Kiy66lSuv/AEAL730JCtWvLrdvkcf/SesWrWYNWtW06nTIXTuXHxi27VrL44++kSWLJnHoYcesc0+NTXdePvtN+nSpTubNm1k3bp36dixCzU13ba5y+jtt5dvae/tt7ctr6nZ9pNhNY7OnbvTuXP3LXdiDRw4jGnTGv7jY8aMX3DccX9G+/Yf4qCDPkKfPn/I66/PpmvX4h+0efOe4PDD/4CDD+5a7/7FuVD5s11GTU03OnfuxoIFz1aUL6dv3xMbrC+1gL2OE2+8se/EiV3RtWs3VqzY+vu5cuXy7e7iAXjuuf9h4sS7+Zd/mbhl2Ffddnr37svs2TM4+eQieXzrrf9Az569GTFiVJP1X41n6VLoVZGnO/zwoqw+I0fCmDHb7vvpT2+77+OPb13/+Mdhv/2KuSKkVm6v48R3vlNdcWLNmmIS51oHHVSU1erQAbp2La4LAB07wnnnFfN99ehRTAx98snFPD+ZxRCxTp2KoWFHHVVcGzp0gOHDYcqU5n1v2j1vvQWHHLJ1/ZBDtk72XKvy3Hj88a3nRe3+UAwhmz8fjjwSVqwo7hCaMaPYNmOGCaBq1FRzALWrvU0zM18FPg2cGRG3sYML9r7q7LP/jnHjnuDGGx9l1KjbOOaYQVx00a28+24xI9uGDet55JHvM2RI8Vu3cuVrZDmwcvHiuWzcuJ6OHbuwdu07bNiwHoA1a1bzyisz6d59+4G9xx9/Ks8++yAAs2ZNpW/fQUQEAwacysyZU9iwYT2rVi1m5cpXOfLIj3PEEQNYuTLuZbkAABCzSURBVPJVVq1azMaN65k5cwoDBpzaHN+aNufggw+lc+fuLF++CCjm7+nevZ77MUtduvRgwYJfA/DBB2t59dUXtpkrqBj+NbzB/QcMOJVnn/0pmckrr8zigAMOoqbmMPr1G8L8+U+ydu07rF37DvPnP0m/fkOoqTmMAw7oxCuvzCIzefbZnzJgwGca6d1Lu6VNxYld0a/fAJYufZU331zMhg3refTRKXzqU9teqxcsmMdtt13PTTfdRZcuH9lSvnLlMj74YB0A7777DnPmzKRXr2IOunvu+Wfee28Nl132v5rvzWivTJ9ezNPTu3fxaezIkcVEznUde2wxDODpp7eWTZ0KQ4dC587Fa+jQoqxW5XxBUitnnKjjzTeL3/mammKy+H79ivnCaq1fX0wgP3588XrjjSL5s3x58XtfW/7cc8XkwM8/X8wFdvfdRfnPfw6vv27yZ1+waBF07w6HHlo8LXLQoO0T+zU1W5crJwU/8MAi2QdFArBv360fMjz3HBx3XLHcr18xdEzVpanuAFoeEQMzcxZAmbn/c2ACMKCJjtnqPPLIvzF37uNkbmbw4As45phPAkXSZvr0n9G+/X586EMHMGrUPxMRLFv2W370oxuICDKT00778pYndU2ZcjtHHHE8AwZ8hk9+cgT33Xc1Y8eezoEH1jBqVPHcvh49+nLCCWdy881n0b59ez73uetp1649ACNGXM+dd17C5s2bGDToL+nRo2/LfFPagBEj/oF7772KTZs28JGP9OLCC7/FCy9M44EHxrFmzWq+972v0LPncVx66T2cdNKF3H//tdx883Ayk0GDzqNnz35AkRCaP/9/+Pznx27T/pNPFn+5DxlyAf37n8zcuf/F2LGn06HDh7nwwuKO6I4dO3PGGZdy663FZNTDho3ZMrfQ+effwP33X8v69evo3/8k+vc/CakFGCfqaN9+Py6//Hr+/u+La/WZZ/4lffr0ZcKE2zn22OMZPPgz3H33t3n//bXceOMVAHTr1oObbrqb1177LXfddQvF/0TJ+ef/DUcddSwrVy5j4sS7OeKIoxg9unh4wGc/+wWGD/9cy71R7dSmTcWTvaZOLf6wnzAB5s0r5muYMaP4Jw2KxNCkSdvu+9ZbMG7c1sc7jx277afC558PZ53VPO9D2kvGiToy4eGHi8d0t2tXTNq8alUxvGvZsuKJYGobNm8unu519dXFufDEE0US57zzigcIPP988VCAE04o6q5ZUyT5oJgX7otfLM6niGIOoNrk0C9+AV/7WvHwgHXr4J57Wu49thURMQy4HWgP/Ftm3lJn+1eBMcAmYA0wOjPnlduuBb5Ubrs8M6eyE1F7J0pjiojDgY2ZuV3OMCIGZ+ZTO2tjXxoCJqn5nHHG3n3qtzvXlr09lhrWGHGi2oaAac/VneRYbVumcaIaNEacqLYhYNpzL/r8G1W4777WEScioj3wG+B0YAkwHbigNsFT1jk4M39fLp8NXJqZwyKiP/BD4ETgo8DDwDGZuWlH/WmSIWCZuaS+i3W5bacXa0lSdTNOSJJ2xDghqQ04EViYmYsycz0wCaic8J7a5E+pI2xJPp0DTMrMDzLzFWBh2d4ONdUcQJIkSZIkSW1W5ZMJy9fois09gcUV60vKsrptjImI3wLfBi7fnX3raqo5gCRJkiRJktqsyicT7kUbdwB3RMRfAdcBF+9pW94BJEmSJEmS1LyWAr0q1g8vyxoyCTh3D/cFTABJkiRJkiQ1t+lA34joExEdgJHA5MoKEVH5+O7hwIJyeTIwMiL2j4g+QF/g2Z0d0CFgkiRJkiRJzSgzN0bEZcBUisfAT8jMuRExFpiRmZOByyLiNGAD8Bbl8K+y3o+BecBGYMzOngAGJoAkSZIkSZKaXWY+BDxUp+z6iuUrdrDvTcBNu3M8h4BJkiRJkiRVORNAkrQXIuLViJgdEbMiYkZZdkhETIuIBeXXLmV5RMR3I2JhRLwYEX9Y0c7FZf0FEbHHM/tLkiRJUn1MAEnS3jslMwdm5h+X69cAj2RmX+CRch3gTIoJ2voCo4G7oEgYATcAfwqcCNxQmzSSJEmSpMZgAkiSGt85wL+Xy//O1sc1ngPcm4VngM4R0QM4A5iWmasz8y1gGjCsuTstSZIkqXqZAJKkBkTE6IiYUfEaXU+1BH4VEc9VbO+WmW+Wy8uAbuVyT2Bxxb5LyrKGyiVJkiSpUfgUMElqQGaOB8bvpNqQzFwaEYcB0yJifp02MiKyyTopSZIkSbvAO4AkaS9k5tLy6wrgQYo5fJaXQ7sov64oqy8FelXsfnhZ1lC5JEmSJDUK7wCS1KYMGNB4bUVER6BdZr5bLg8FxgKTgYuBW8qvPyt3mQxcFhGTKCZ8ficz34yIqcDNFRM/DwWubbyeSpJ2VWPGCUlS9dmX44QJIEnac92AByMCiuvpDzLzlxExHfhxRHwJeA04v6z/EHAWsBBYC3wRIDNXR8Q4YHpZb2xmrm6+tyFJkiSp2pkAkqQ9lJmLgE/UU74K+Ew95QmMaaCtCcCExu6jJEmSJIFzAEmSJEmSJFU9E0CSJEmSJElVzgSQJEmS1EQiYlhEvBwRCyPimnq2fzUiZkfErIh4MiL6t0Q/JUnVzwSQJEmS1AQioj1wB3Am0B+4oJ4Ezw8yc0BmDgS+DdzWzN2UJLURJoAkSZKkpnEisDAzF2XmemAScE5lhcz8fcVqRyCbsX+SpDbEp4BJkiRJeyAiRgOjK4rGZ+b4ivWewOKK9SXAn9bTzhjg60AH4NQm6KokSSaAJEmSpD1RJnvG77Tiztu5A7gjIv4KuA64eG/blCSpLoeASZIkSU1jKdCrYv3wsqwhk4Bzm7RHkqQ2ywSQJEmS1DSmA30jok9EdABGApMrK0RE34rV4cCCZuyfJKkNcQiYJEmS1AQyc2NEXAZMBdoDEzJzbkSMBWZk5mTgsog4DdgAvIXDvyRJTcQEkCRJktREMvMh4KE6ZddXLF/R7J2SJLVJDgGTJEmSJEmqciaAJEmSJEmSqpwJIEmSJEmSpCpnAkiSJEmSJKnKmQCSJEmSJEmqciaAJEmSJEmSqpwJIEmSJEmSpCpnAkiSJEmSJKnKmQCSJEmSJEmqciaAJEmSJEmSqpwJIEmSJEmSpCpnAkiSJEmSJKnKmQCSJEmSJEmqciaAJEmSJEmSqpwJIEmSJEmSpGYWEcMi4uWIWBgR19Sz/aSImBkRGyNiRJ1tmyJiVvmavCvH26+xOi5JkiRJkqSdi4j2wB3A6cASYHpETM7MeRXVXgdGAVfV08T7mTlwd45pAkiSJEmSJKl5nQgszMxFABExCTgH2JIAysxXy22bG+OADgGTJEmSJElqXj2BxRXrS8qyXXVARMyIiGci4txd2cE7gCRJkiRJkhpZRIwGRlcUjc/M8Y3U/JGZuTQijgIejYjZmfnbHe1gAkiSJEmSJKmRlcmehhI+S4FeFeuHl2W72vbS8uuiiHgcOAHYYQLIIWCSJEmSJEnNazrQNyL6REQHYCSwS0/zioguEbF/udwVGEzF3EENMQEkSZIkSZLUjDJzI3AZMBV4CfhxZs6NiLERcTZARPxJRCwBPgd8LyLmlrsfB8yIiBeAx4Bb6jw9rF6RmU3xXtRIImJ0I44R1D7Mc0FSfbw2qJbngqT6eG1QLc8FeQdQ6zd651XURnguSKqP1wbV8lyQVB+vDarludDGmQCSJEmSJEmqciaAJEmSJEmSqpwJoNbPMZqq5bkgqT5eG1TLc0FSfbw2qJbnQhvnJNCSJEmSJElVzjuAJEmSJEmSqpwJIEmSJEmSpCpnAqiViogJEbEiIua0dF/UsiKiV0Q8FhHzImJuRFzR0n2S1PKME6plnJBUH+OEwBihbTkHUCsVEScBa4B7M/P4lu6PWk5E9AB6ZObMiDgIeA44NzPntXDXJLUg44RqGSck1cc4ITBGaFveAdRKZeYTwOqW7odaXma+mZkzy+V3gZeAni3bK0ktzTihWsYJSfUxTgiMEdqWCSBpHxIRvYETgF+3bE8kSa2RcUKS1BBjhEwASfuIiOgE/AdwZWb+vqX7I0lqXYwTkqSGGCMEJoCkfUJEfIjign1/Zv6kpfsjSWpdjBOSpIYYI1TLBJDUykVEAPcAL2XmbS3dH0lS62KckCQ1xBihSiaAWqmI+CHwNHBsRCyJiC+1dJ/UYgYDfw2cGhGzytdZLd0pSS3LOKEKxglJ2zFOqGSM0BY+Bl6SJEmSJKnKeQeQJEmSJElSlTMBJEmSJEmSVOVMAEmSJEmSJFU5E0CSJEmSJElVzgSQJEmSJElSlTMBpG1ExKby0YBzIuL/RcSBe9HWpyPiF+Xy2RFxzQ7qdo6IS/fgGDdGxFUNbLuofB+zI+L52noR8X8jYsTuHkuSZJyQJO2YcUJqvUwAqa73M3NgZh4PrAe+WrkxCrt93mTm5My8ZQdVOgO7fcFuSEScCVwJDM3MAcAg4J3Gal+S2jDjhCRpR4wTUitlAkg78t/A0RHROyJejoh7gTlAr4gYGhFPR8TMMrPfCSAihkXE/IiYCZxX21BEjIqIfy2Xu0XEgxHxQvn6FHAL8LHy04LvlPWujojpEfFiRPxjRVvfjIjfRMSTwLEN9P1a4KrMfAMgMz/IzO/XrRQR15fHmBMR4yMiyvLLI2JeeexJZdnJZf9mlZ8AHLSX319J2tcZJ4wTkrQjxgnjhFqR/Vq6A2qdImI/4Ezgl2VRX+DizHwmIroC1wGnZeZ7EfEN4OsR8W3g+8CpwELgRw00/13gvzLzsxHRHugEXAMcn5kDy+MPLY95IhDA5Ig4CXgPGAkMpDh/ZwLP1XOM4xsor+tfM3Nsecz7gD8Hfl72p09mfhARncu6VwFjMvOpMkCt24X2JakqGSeME5K0I8YJ44RaH+8AUl0fjohZwAzgdeCesvy1zHymXB4E9AeeKuteDBwJ9ANeycwFmZnAxAaOcSpwF0BmbsrM+m6lHFq+nqe4KPejuID/GfBgZq7NzN8Dk/fq3cIpEfHriJhd9usPyvIXgfsj4gvAxrLsKeC2iLgc6JyZG7dvTpKqnnGiYJyQpPoZJwrGCbU63gGkut6vzZrXKu9ifK+yCJiWmRfUqbfNfnspgG9l5vfqHOPKXdx/LvBHwKMNHiDiAOBO4I8zc3FE3AgcUG4eDpwE/AXwzYgYkJm3RMQU4CyKYHVGZs7fnTclSVXAOFEwTkhS/YwTBeOEWh3vANKeeAYYHBFHA0REx4g4BpgP9I6Ij5X1Lmhg/0eAr5X7to+IGuBdoHIM7FTgbyrGAveMiMOAJ4BzI+LD5ZjZv2jgGN8CvhMR3cv9O0TEJXXq1F6cf1ceZ0RZtx3QKzMfA74B1ACdIuJjmTk7M/83MJ3iUwRJ0vaME8YJSdoR44RxQi3AO4C02zJzZUSMAn4YEfuXxddl5m8iYjQwJSLWUkz6Vt/EZlcA4yPiS8Am4GuZ+XREPBURc4D/zMyrI+I44OnyE4M1wBcyc2ZE/Ah4AVhBceGsr48PRUQ34OEoGkhgQp06b0fE9ykmoltW0VZ7YGIZSAL4bll3XEScAmym+ETgP3fzWydJbYJxwjghSTtinDBOqGVEMbRSkiRJkiRJ1cohYJIkSZIkSVXOBJAkSZIkSVKVMwEkSZIkSZJU5UwASZIkSZIkVTkTQJIkSZIkSVXOBJAkSZIkSVKVMwEkSZIkSZJU5f4/JzS/R1kWH3gAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1440x288 with 6 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "v8I6GdveWFoZ"
},
"source": [
"# XGBOOST with hyperparameter tuning "
]
},
{
"cell_type": "code",
"metadata": {
"id": "ONQsTUR-WFoa"
},
"source": [
"data=pd.read_csv('final_features.csv',nrows=100000)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "qzCfK9fKWFoa",
"outputId": "735f9f30-66e2-489a-9756-70607c394eea"
},
"source": [
"print(data.columns)\n",
"Y_true=data['is_duplicate']\n",
"data=data.drop(['Unnamed: 0','is_duplicate'],axis=1)\n",
"print(data.columns)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Index(['Unnamed: 0', 'id', 'is_duplicate', 'cwc_min', 'cwc_max', 'csc_min',\n",
" 'csc_max', 'ctc_min', 'ctc_max', 'last_word_eq',\n",
" ...\n",
" '374_y', '375_y', '376_y', '377_y', '378_y', '379_y', '380_y', '381_y',\n",
" '382_y', '383_y'],\n",
" dtype='object', length=797)\n",
"Index(['id', 'cwc_min', 'cwc_max', 'csc_min', 'csc_max', 'ctc_min', 'ctc_max',\n",
" 'last_word_eq', 'first_word_eq', 'abs_len_diff',\n",
" ...\n",
" '374_y', '375_y', '376_y', '377_y', '378_y', '379_y', '380_y', '381_y',\n",
" '382_y', '383_y'],\n",
" dtype='object', length=795)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "8cP2rAy6WFoa",
"outputId": "1177def3-653a-41c6-9bbd-dd1fbbcfdb2b"
},
"source": [
"Y_true.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(100000,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 4
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "TUN0JBr2WFob"
},
"source": [
"X_train,X_test, y_train, y_test = train_test_split(data, Y_true, stratify=Y_true, test_size=0.3)\n",
"#X_train,cv_train, y_train, cv_test = train_test_split(X_train, y_train, stratify=y_train, test_size=0.3)\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "3icZO-N4WFob",
"outputId": "59672a10-bcf2-4de7-f1a6-894c21f77d42"
},
"source": [
"print('train dataset size is ',X_train.shape)\n",
"print('train dataset class lable size is ',len(y_train))\n",
"print('test dataset size is ',X_test.shape)\n",
"print('test dataset class lable size is ',len(y_test))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"train dataset size is (70000, 795)\n",
"train dataset class lable size is 70000\n",
"test dataset size is (30000, 795)\n",
"test dataset class lable size is 30000\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3i7VZl8hWFoc"
},
"source": [
"import xgboost as xgb\n",
"d_train = xgb.DMatrix(X_train, label=y_train)\n",
"d_test = xgb.DMatrix(X_test, label=y_test)\n",
"d_cv=xgb.DMatrix(X_test, label=y_test)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "xzbR7afsWFoc"
},
"source": [
"params = {\n",
" 'learning_rate' : np.arange(0.1,1,0.1),\n",
" 'max_depth': [3, 4, 5],\n",
" 'n_estimators': np.arange(100,500,100)\n",
" }"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "QsKz4yNZWFod",
"outputId": "fc023932-3c35-4675-b289-b6abadadcff5"
},
"source": [
"from xgboost import XGBClassifier\n",
"from sklearn.model_selection import RandomizedSearchCV\n",
"\n",
"xgb = XGBClassifier(objective='binary:logistic',eval_metric='logloss',silent=True,)\n",
"\n",
"random_search = RandomizedSearchCV(xgb, param_distributions=params, cv=3, verbose=1,scoring='neg_log_loss',n_jobs=-1 )\n",
"\n",
"\n",
"random_search.fit(X_train, y_train)\n",
"\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Fitting 3 folds for each of 10 candidates, totalling 30 fits\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n",
"[Parallel(n_jobs=-1)]: Done 30 out of 30 | elapsed: 93.9min finished\n",
"/home/ravgusa/miniconda3/lib/python3.7/site-packages/sklearn/model_selection/_search.py:841: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n",
" DeprecationWarning)\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"RandomizedSearchCV(cv=3, error_score='raise-deprecating',\n",
" estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
" colsample_bytree=1, eval_metric='logloss', gamma=0,\n",
" learning_rate=0.1, max_delta_step=0, max_depth=3,\n",
" min_child_weight=1, missing=None, n_estimators=100, n_jobs=1,\n",
" nthread=None, objective='binary:logistic', random_state=0,\n",
" reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n",
" silent=True, subsample=1),\n",
" fit_params=None, iid='warn', n_iter=10, n_jobs=-1,\n",
" param_distributions={'learning_rate': array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]), 'max_depth': [3, 4, 5], 'n_estimators': array([100, 200, 300, 400])},\n",
" pre_dispatch='2*n_jobs', random_state=None, refit=True,\n",
" return_train_score='warn', scoring='neg_log_loss', verbose=1)"
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QSPZm-prWFod",
"outputId": "9922da36-96a7-444c-a783-de2f740e7efe"
},
"source": [
""
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
" colsample_bytree=1, gamma=0, learning_rate=0.02, max_delta_step=0,\n",
" max_depth=3, min_child_weight=1, missing=None, n_estimators=600,\n",
" n_jobs=1, nthread=1, objective='binary:logistic', random_state=0,\n",
" reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n",
" silent=True, subsample=1)"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "NjOpQtC3WFod",
"outputId": "07c444c7-975d-45f4-aeaf-1d65521a5663"
},
"source": [
"print(random_search.best_estimator_)\n",
"\n",
"\n",
"print(\"******************** Best hyperparameters for XGBOOST *********************\\n\\n\\n\")\n",
"\n",
"print(random_search.best_params_,'\\n\\n')\n",
"\n",
"print('************************************************\\n\\n')\n",
"\n",
"\n",
"z=pd.DataFrame(random_search.cv_results_)\n",
"z\n",
"\n",
"\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
" colsample_bytree=1, eval_metric='logloss', gamma=0,\n",
" learning_rate=0.2, max_delta_step=0, max_depth=4,\n",
" min_child_weight=1, missing=None, n_estimators=400, n_jobs=1,\n",
" nthread=None, objective='binary:logistic', random_state=0,\n",
" reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n",
" silent=True, subsample=1)\n",
"******************** Best hyperparameters for XGBOOST *********************\n",
"\n",
"\n",
"\n",
"{'n_estimators': 400, 'max_depth': 4, 'learning_rate': 0.2} \n",
"\n",
"\n",
"************************************************\n",
"\n",
"\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>mean_fit_time</th>\n",
" <th>std_fit_time</th>\n",
" <th>mean_score_time</th>\n",
" <th>std_score_time</th>\n",
" <th>param_n_estimators</th>\n",
" <th>param_max_depth</th>\n",
" <th>param_learning_rate</th>\n",
" <th>params</th>\n",
" <th>split0_test_score</th>\n",
" <th>split1_test_score</th>\n",
" <th>split2_test_score</th>\n",
" <th>mean_test_score</th>\n",
" <th>std_test_score</th>\n",
" <th>rank_test_score</th>\n",
" <th>split0_train_score</th>\n",
" <th>split1_train_score</th>\n",
" <th>split2_train_score</th>\n",
" <th>mean_train_score</th>\n",
" <th>std_train_score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2278.759258</td>\n",
" <td>4.554716</td>\n",
" <td>1.776968</td>\n",
" <td>0.021393</td>\n",
" <td>400</td>\n",
" <td>4</td>\n",
" <td>0.8</td>\n",
" <td>{'n_estimators': 400, 'max_depth': 4, 'learnin...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>10</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1445.371515</td>\n",
" <td>2.712062</td>\n",
" <td>1.506949</td>\n",
" <td>0.027934</td>\n",
" <td>200</td>\n",
" <td>5</td>\n",
" <td>0.5</td>\n",
" <td>{'n_estimators': 200, 'max_depth': 5, 'learnin...</td>\n",
" <td>-0.397288</td>\n",
" <td>-0.398649</td>\n",
" <td>-0.403489</td>\n",
" <td>-0.399808</td>\n",
" <td>0.002661</td>\n",
" <td>7</td>\n",
" <td>-0.055893</td>\n",
" <td>-0.057718</td>\n",
" <td>-0.055495</td>\n",
" <td>-0.056369</td>\n",
" <td>0.000968</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>429.345288</td>\n",
" <td>1.011526</td>\n",
" <td>1.172009</td>\n",
" <td>0.031539</td>\n",
" <td>100</td>\n",
" <td>3</td>\n",
" <td>0.7</td>\n",
" <td>{'n_estimators': 100, 'max_depth': 3, 'learnin...</td>\n",
" <td>-0.370394</td>\n",
" <td>-0.370390</td>\n",
" <td>-0.372000</td>\n",
" <td>-0.370928</td>\n",
" <td>0.000758</td>\n",
" <td>5</td>\n",
" <td>-0.262422</td>\n",
" <td>-0.268353</td>\n",
" <td>-0.265918</td>\n",
" <td>-0.265564</td>\n",
" <td>0.002434</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2272.308633</td>\n",
" <td>12.533313</td>\n",
" <td>1.749970</td>\n",
" <td>0.011860</td>\n",
" <td>400</td>\n",
" <td>4</td>\n",
" <td>0.2</td>\n",
" <td>{'n_estimators': 400, 'max_depth': 4, 'learnin...</td>\n",
" <td>-0.342860</td>\n",
" <td>-0.338676</td>\n",
" <td>-0.344241</td>\n",
" <td>-0.341926</td>\n",
" <td>0.002366</td>\n",
" <td>1</td>\n",
" <td>-0.160841</td>\n",
" <td>-0.166737</td>\n",
" <td>-0.163199</td>\n",
" <td>-0.163593</td>\n",
" <td>0.002423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>735.747415</td>\n",
" <td>3.603040</td>\n",
" <td>1.271408</td>\n",
" <td>0.005360</td>\n",
" <td>100</td>\n",
" <td>5</td>\n",
" <td>0.7</td>\n",
" <td>{'n_estimators': 100, 'max_depth': 5, 'learnin...</td>\n",
" <td>-0.423536</td>\n",
" <td>-0.419009</td>\n",
" <td>-0.428971</td>\n",
" <td>-0.423839</td>\n",
" <td>0.004072</td>\n",
" <td>9</td>\n",
" <td>-0.099848</td>\n",
" <td>-0.103434</td>\n",
" <td>-0.097085</td>\n",
" <td>-0.100122</td>\n",
" <td>0.002599</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1694.822935</td>\n",
" <td>4.149279</td>\n",
" <td>1.691544</td>\n",
" <td>0.156125</td>\n",
" <td>400</td>\n",
" <td>3</td>\n",
" <td>0.7</td>\n",
" <td>{'n_estimators': 400, 'max_depth': 3, 'learnin...</td>\n",
" <td>-0.425915</td>\n",
" <td>-0.413853</td>\n",
" <td>-0.421299</td>\n",
" <td>-0.420355</td>\n",
" <td>0.004969</td>\n",
" <td>8</td>\n",
" <td>-0.111196</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>429.706806</td>\n",
" <td>2.997717</td>\n",
" <td>1.190620</td>\n",
" <td>0.006377</td>\n",
" <td>100</td>\n",
" <td>3</td>\n",
" <td>0.6</td>\n",
" <td>{'n_estimators': 100, 'max_depth': 3, 'learnin...</td>\n",
" <td>-0.362432</td>\n",
" <td>-0.359516</td>\n",
" <td>-0.365620</td>\n",
" <td>-0.362523</td>\n",
" <td>0.002493</td>\n",
" <td>4</td>\n",
" <td>-0.274465</td>\n",
" <td>-0.277012</td>\n",
" <td>-0.273033</td>\n",
" <td>-0.274837</td>\n",
" <td>0.001646</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>849.382173</td>\n",
" <td>4.652379</td>\n",
" <td>1.306995</td>\n",
" <td>0.013103</td>\n",
" <td>200</td>\n",
" <td>3</td>\n",
" <td>0.1</td>\n",
" <td>{'n_estimators': 200, 'max_depth': 3, 'learnin...</td>\n",
" <td>-0.350190</td>\n",
" <td>-0.347628</td>\n",
" <td>-0.352882</td>\n",
" <td>-0.350233</td>\n",
" <td>0.002145</td>\n",
" <td>3</td>\n",
" <td>-0.327001</td>\n",
" <td>-0.328875</td>\n",
" <td>-0.326020</td>\n",
" <td>-0.327299</td>\n",
" <td>0.001184</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1014.365775</td>\n",
" <td>186.814688</td>\n",
" <td>1.339706</td>\n",
" <td>0.092805</td>\n",
" <td>300</td>\n",
" <td>3</td>\n",
" <td>0.2</td>\n",
" <td>{'n_estimators': 300, 'max_depth': 3, 'learnin...</td>\n",
" <td>-0.343013</td>\n",
" <td>-0.339332</td>\n",
" <td>-0.345028</td>\n",
" <td>-0.342457</td>\n",
" <td>0.002358</td>\n",
" <td>2</td>\n",
" <td>-0.265792</td>\n",
" <td>-0.268903</td>\n",
" <td>-0.264080</td>\n",
" <td>-0.266258</td>\n",
" <td>0.001996</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1639.180995</td>\n",
" <td>18.110394</td>\n",
" <td>1.552957</td>\n",
" <td>0.019822</td>\n",
" <td>400</td>\n",
" <td>4</td>\n",
" <td>0.4</td>\n",
" <td>{'n_estimators': 400, 'max_depth': 4, 'learnin...</td>\n",
" <td>-0.380609</td>\n",
" <td>-0.374842</td>\n",
" <td>-0.385824</td>\n",
" <td>-0.380425</td>\n",
" <td>0.004485</td>\n",
" <td>6</td>\n",
" <td>-0.078174</td>\n",
" <td>-0.080709</td>\n",
" <td>-0.077985</td>\n",
" <td>-0.078956</td>\n",
" <td>0.001242</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_fit_time std_fit_time mean_score_time std_score_time \\\n",
"0 2278.759258 4.554716 1.776968 0.021393 \n",
"1 1445.371515 2.712062 1.506949 0.027934 \n",
"2 429.345288 1.011526 1.172009 0.031539 \n",
"3 2272.308633 12.533313 1.749970 0.011860 \n",
"4 735.747415 3.603040 1.271408 0.005360 \n",
"5 1694.822935 4.149279 1.691544 0.156125 \n",
"6 429.706806 2.997717 1.190620 0.006377 \n",
"7 849.382173 4.652379 1.306995 0.013103 \n",
"8 1014.365775 186.814688 1.339706 0.092805 \n",
"9 1639.180995 18.110394 1.552957 0.019822 \n",
"\n",
" param_n_estimators param_max_depth param_learning_rate \\\n",
"0 400 4 0.8 \n",
"1 200 5 0.5 \n",
"2 100 3 0.7 \n",
"3 400 4 0.2 \n",
"4 100 5 0.7 \n",
"5 400 3 0.7 \n",
"6 100 3 0.6 \n",
"7 200 3 0.1 \n",
"8 300 3 0.2 \n",
"9 400 4 0.4 \n",
"\n",
" params split0_test_score \\\n",
"0 {'n_estimators': 400, 'max_depth': 4, 'learnin... NaN \n",
"1 {'n_estimators': 200, 'max_depth': 5, 'learnin... -0.397288 \n",
"2 {'n_estimators': 100, 'max_depth': 3, 'learnin... -0.370394 \n",
"3 {'n_estimators': 400, 'max_depth': 4, 'learnin... -0.342860 \n",
"4 {'n_estimators': 100, 'max_depth': 5, 'learnin... -0.423536 \n",
"5 {'n_estimators': 400, 'max_depth': 3, 'learnin... -0.425915 \n",
"6 {'n_estimators': 100, 'max_depth': 3, 'learnin... -0.362432 \n",
"7 {'n_estimators': 200, 'max_depth': 3, 'learnin... -0.350190 \n",
"8 {'n_estimators': 300, 'max_depth': 3, 'learnin... -0.343013 \n",
"9 {'n_estimators': 400, 'max_depth': 4, 'learnin... -0.380609 \n",
"\n",
" split1_test_score split2_test_score mean_test_score std_test_score \\\n",
"0 NaN NaN NaN NaN \n",
"1 -0.398649 -0.403489 -0.399808 0.002661 \n",
"2 -0.370390 -0.372000 -0.370928 0.000758 \n",
"3 -0.338676 -0.344241 -0.341926 0.002366 \n",
"4 -0.419009 -0.428971 -0.423839 0.004072 \n",
"5 -0.413853 -0.421299 -0.420355 0.004969 \n",
"6 -0.359516 -0.365620 -0.362523 0.002493 \n",
"7 -0.347628 -0.352882 -0.350233 0.002145 \n",
"8 -0.339332 -0.345028 -0.342457 0.002358 \n",
"9 -0.374842 -0.385824 -0.380425 0.004485 \n",
"\n",
" rank_test_score split0_train_score split1_train_score \\\n",
"0 10 NaN NaN \n",
"1 7 -0.055893 -0.057718 \n",
"2 5 -0.262422 -0.268353 \n",
"3 1 -0.160841 -0.166737 \n",
"4 9 -0.099848 -0.103434 \n",
"5 8 -0.111196 NaN \n",
"6 4 -0.274465 -0.277012 \n",
"7 3 -0.327001 -0.328875 \n",
"8 2 -0.265792 -0.268903 \n",
"9 6 -0.078174 -0.080709 \n",
"\n",
" split2_train_score mean_train_score std_train_score \n",
"0 NaN NaN NaN \n",
"1 -0.055495 -0.056369 0.000968 \n",
"2 -0.265918 -0.265564 0.002434 \n",
"3 -0.163199 -0.163593 0.002423 \n",
"4 -0.097085 -0.100122 0.002599 \n",
"5 NaN NaN NaN \n",
"6 -0.273033 -0.274837 0.001646 \n",
"7 -0.326020 -0.327299 0.001184 \n",
"8 -0.264080 -0.266258 0.001996 \n",
"9 -0.077985 -0.078956 0.001242 "
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RsLHY5XTWFoe"
},
"source": [
"**The Best hyperparameters for XGBOOST are max_trees=400 and depth=4 and lerning_rate=0.2**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "PI5HJFa_WFoe",
"outputId": "432782c6-19a8-4ddb-f17a-2893a6c38194"
},
"source": [
"from sklearn.calibration import CalibratedClassifierCV\n",
"xgb = XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
" colsample_bytree=1, eval_metric='logloss', gamma=0,\n",
" learning_rate=0.2, max_delta_step=0, max_depth=4,\n",
" min_child_weight=1, missing=None, n_estimators=400, n_jobs=-1,\n",
" nthread=None, objective='binary:logistic', random_state=0,\n",
" reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n",
" silent=True, subsample=1)\n",
"clf=CalibratedClassifierCV(method='sigmoid',base_estimator=xgb,cv=3)\n",
"clf.fit(X_train, y_train)\n",
"#xg_model=xgb.fit(X_train[:100], y_train[:100])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"CalibratedClassifierCV(base_estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
" colsample_bytree=1, eval_metric='logloss', gamma=0,\n",
" learning_rate=0.2, max_delta_step=0, max_depth=4,\n",
" min_child_weight=1, missing=None, n_estimators=400, n_jobs=-1,\n",
" nthread=None, objective='binary:logistic', random_state=0,\n",
" reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n",
" silent=True, subsample=1),\n",
" cv=3, method='sigmoid')"
]
},
"metadata": {
"tags": []
},
"execution_count": 50
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "gcjgfAXrWFoe"
},
"source": [
"test=clf.predict_proba(X_test)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "K0U_FeCSWFoe",
"outputId": "e9cb2432-f0de-4ca8-d431-8720e5d9077c"
},
"source": [
"from sklearn.metrics import log_loss\n",
"print(log_loss(y_test,test))\n",
"#print(log_loss(y_test,a))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.3472066701750146\n"
],
"name": "stdout"
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment