{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "modeling.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EnBV1jN248Ug", "outputId": "3424dd27-36c7-429e-b088-2267a6750bf3" }, "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "ceDOBFoAPvNl" }, "source": [ "#!pip install -qqq h5py" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "HvyXFF0GHrHq", "outputId": "d694def4-662f-4682-86ed-1126420651fc" }, "source": [ "#!pip install --upgrade -qqq gensim" ], "execution_count": null, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K |████████████████████████████████| 24.1 MB 1.8 MB/s \n", "\u001b[?25h" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Acq0aPH0-ZoR", "outputId": "68aa21cc-0c63-42dc-ba79-e7897a0ae04d" }, "source": [ "!python -m spacy download en_core_web_lg" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting en_core_web_lg==2.2.5\n", " Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-2.2.5/en_core_web_lg-2.2.5.tar.gz (827.9 MB)\n", "\u001b[K |████████████████████████████████| 827.9 MB 1.3 MB/s \n", "\u001b[?25hRequirement already satisfied: spacy>=2.2.2 in /usr/local/lib/python3.7/dist-packages (from en_core_web_lg==2.2.5) (2.2.4)\n", "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (2.0.6)\n", "Requirement already satisfied: numpy>=1.15.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (1.19.5)\n", "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (1.0.6)\n", "Requirement already satisfied: wasabi<1.1.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (0.8.2)\n", "Requirement already satisfied: plac<1.2.0,>=0.9.6 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (1.1.3)\n", "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (2.23.0)\n", "Requirement already satisfied: blis<0.5.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (0.4.1)\n", "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (3.0.6)\n", "Requirement already satisfied: thinc==7.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (7.4.0)\n", "Requirement already satisfied: srsly<1.1.0,>=1.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (1.0.5)\n", "Requirement already satisfied: catalogue<1.1.0,>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (1.0.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (57.4.0)\n", "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.7/dist-packages (from spacy>=2.2.2->en_core_web_lg==2.2.5) (4.62.3)\n", "Requirement already satisfied: importlib-metadata>=0.20 in /usr/local/lib/python3.7/dist-packages (from catalogue<1.1.0,>=0.0.7->spacy>=2.2.2->en_core_web_lg==2.2.5) (4.8.2)\n", "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=0.20->catalogue<1.1.0,>=0.0.7->spacy>=2.2.2->en_core_web_lg==2.2.5) (3.6.0)\n", "Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=0.20->catalogue<1.1.0,>=0.0.7->spacy>=2.2.2->en_core_web_lg==2.2.5) (3.10.0.2)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy>=2.2.2->en_core_web_lg==2.2.5) (3.0.4)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy>=2.2.2->en_core_web_lg==2.2.5) (2.10)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy>=2.2.2->en_core_web_lg==2.2.5) (2021.10.8)\n", "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy>=2.2.2->en_core_web_lg==2.2.5) (1.24.3)\n", "Building wheels for collected packages: en-core-web-lg\n", " Building wheel for en-core-web-lg (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for en-core-web-lg: filename=en_core_web_lg-2.2.5-py3-none-any.whl size=829180942 sha256=2b245d4db35432e69601f09c954c3f03ad99442f4c272e38e79ff0cda6e18570\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-ll8e18vr/wheels/11/95/ba/2c36cc368c0bd339b44a791c2c1881a1fb714b78c29a4cb8f5\n", "Successfully built en-core-web-lg\n", "Installing collected packages: en-core-web-lg\n", "Successfully installed en-core-web-lg-2.2.5\n", "\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n", "You can now load the model via spacy.load('en_core_web_lg')\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 801 }, "id": "sBYe-DXP_Huq", "outputId": "fde81c27-16c0-42d4-b623-1c12984c6923" }, "source": [ "!pip install -U SpaCy==2.2.0" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting SpaCy==2.2.0\n", " Downloading spacy-2.2.0-cp37-cp37m-manylinux1_x86_64.whl (10.2 MB)\n", "\u001b[K |████████████████████████████████| 10.2 MB 14.1 MB/s \n", "\u001b[?25hCollecting thinc<7.2.0,>=7.1.1\n", " Downloading thinc-7.1.1-cp37-cp37m-manylinux1_x86_64.whl (2.1 MB)\n", "\u001b[K |████████████████████████████████| 2.1 MB 69.4 MB/s \n", "\u001b[?25hRequirement already satisfied: blis<0.5.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (0.4.1)\n", "Collecting plac<1.0.0,>=0.9.6\n", " Downloading plac-0.9.6-py2.py3-none-any.whl (20 kB)\n", "Requirement already satisfied: numpy>=1.15.0 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (1.19.5)\n", "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (3.0.6)\n", "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (2.0.6)\n", "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (1.0.6)\n", "Requirement already satisfied: wasabi<1.1.0,>=0.2.0 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (0.8.2)\n", "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (2.23.0)\n", "Requirement already satisfied: srsly<1.1.0,>=0.1.0 in /usr/local/lib/python3.7/dist-packages (from SpaCy==2.2.0) (1.0.5)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->SpaCy==2.2.0) (2.10)\n", "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->SpaCy==2.2.0) (1.24.3)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->SpaCy==2.2.0) (3.0.4)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->SpaCy==2.2.0) (2021.10.8)\n", "Requirement already satisfied: tqdm<5.0.0,>=4.10.0 in /usr/local/lib/python3.7/dist-packages (from thinc<7.2.0,>=7.1.1->SpaCy==2.2.0) (4.62.3)\n", "Installing collected packages: plac, thinc, SpaCy\n", " Attempting uninstall: plac\n", " Found existing installation: plac 1.1.3\n", " Uninstalling plac-1.1.3:\n", " Successfully uninstalled plac-1.1.3\n", " Attempting uninstall: thinc\n", " Found existing installation: thinc 7.4.0\n", " Uninstalling thinc-7.4.0:\n", " Successfully uninstalled thinc-7.4.0\n", " Attempting uninstall: SpaCy\n", " Found existing installation: spacy 2.2.4\n", " Uninstalling spacy-2.2.4:\n", " Successfully uninstalled spacy-2.2.4\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "en-core-web-sm 2.2.5 requires spacy>=2.2.2, but you have spacy 2.2.0 which is incompatible.\n", "en-core-web-lg 2.2.5 requires spacy>=2.2.2, but you have spacy 2.2.0 which is incompatible.\u001b[0m\n", "Successfully installed SpaCy-2.2.0 plac-0.9.6 thinc-7.1.1\n" ] }, { "output_type": "display_data", "data": { "application/vnd.colab-display-data+json": { "pip_warning": { "packages": [ "plac", "plac_core", "plac_ext", "spacy", "thinc" ] } } }, "metadata": {} } ] }, { "cell_type": "code", "metadata": { "id": "KF1Wqxyj5IqV" }, "source": [ "## Import required libraries\n", "\n", "## warnings\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "\n", "## for data\n", "import numpy as np\n", "import pandas as pd\n", "\n", "## for plotting\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "## TF-IDF \n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "\n", "## T-Sne\n", "from yellowbrick.text import TSNEVisualizer\n", "from sklearn import manifold\n", "\n", "## Train-Test Split\n", "from sklearn.model_selection import train_test_split\n", "\n", "## Feature selection\n", "from sklearn import feature_selection\n", "\n", "## libraraies for classification\n", "from sklearn.pipeline import Pipeline\n", "import sklearn.metrics as skm\n", "from sklearn.metrics import confusion_matrix, accuracy_score\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.svm import SVC\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.neural_network import MLPClassifier\n", "from sklearn.ensemble import RandomForestClassifier\n", "\n", "## for saving model\n", "import pickle\n", "\n", "## for explainer\n", "#from lime import lime_text\n", "\n", "## detokenization\n", "from nltk.tokenize.treebank import TreebankWordDetokenizer\n", "\n", "## for word embedding with gensim\n", "import gensim\n", "import gensim.downloader as gensim_api\n", "from gensim.models import Word2Vec\n", "from gensim.models import KeyedVectors\n", "from keras.preprocessing.text import Tokenizer\n", "from keras.preprocessing.sequence import pad_sequences\n", "\n", "## for word embedding with Spacy\n", "import spacy\n", "import en_core_web_lg\n", "\n", "## for deep learning\n", "from keras.models import load_model\n", "from keras.models import Model, Sequential\n", "from keras.callbacks import EarlyStopping, ModelCheckpoint\n", "from keras.layers import Conv1D, Dense, Input, LSTM, Embedding, Dropout, Activation, MaxPooling1D\n", "from tensorflow.keras import models, layers, preprocessing as kprocessing\n", "from tensorflow.keras import backend as K\n", "import tensorflow as tf\n", "import keras\n", "from keras.layers import Lambda\n", "import tensorflow as tf\n", "from keras.models import model_from_json\n", "\n", "## for bert language model\n", "#import transformers" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "qpKZPTJFf3ny" }, "source": [ "## Loading the dataset:" ] }, { "cell_type": "code", "metadata": { "id": "aX_vtWbl5Yg2" }, "source": [ "df_all = pd.read_csv(\"/content/drive/MyDrive/NLP/Depression_Detection/data_cleaning/processed_data/processed_data.csv\",\n", " sep='\\t', encoding='utf-8')" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 414 }, "id": "MK9pdUZL3qiE", "outputId": "b755aeae-2e8f-41f0-ad0a-1bde478b8a7b" }, "source": [ "df_all" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
textlabelclean_text
0Open discussion. Between the Transfer Portal a...1open discussion transfer portal nil become obs...
1Plenty of things are changing in my life and t...1plenty thing changing life life around one thi...
2I feel a little hopeless. Anyone else? #hopele...1feel little hopeless anyone else
3Which is more healthy? Hope, or hopelessness? ...1healthy hope hopelessness
4So someone tell me how do I get over #HOPELESS...1someone tell get live world surrounded people ...
............
38904@andreaj27 well, cheers. i have a glass of wat...0well cheer glass water handy drink cheer
38905@AndreaJo84 Is that right? You're over in Palm...0right palm spring guess see local news still w...
38906@AndreaKobayashi It's the best cafe in Asakusa...0best cafe asakusa tokyo small serf best coffee
38907@AndreaKoeln heeey! tonight is the night! no s...0heeey tonight night sleeping like night loll
38908@AmandaFClark it is when you add the hammock0add hammock
\n", "

38909 rows × 3 columns

\n", "
" ], "text/plain": [ " text ... clean_text\n", "0 Open discussion. Between the Transfer Portal a... ... open discussion transfer portal nil become obs...\n", "1 Plenty of things are changing in my life and t... ... plenty thing changing life life around one thi...\n", "2 I feel a little hopeless. Anyone else? #hopele... ... feel little hopeless anyone else\n", "3 Which is more healthy? Hope, or hopelessness? ... ... healthy hope hopelessness\n", "4 So someone tell me how do I get over #HOPELESS... ... someone tell get live world surrounded people ...\n", "... ... ... ...\n", "38904 @andreaj27 well, cheers. i have a glass of wat... ... well cheer glass water handy drink cheer\n", "38905 @AndreaJo84 Is that right? You're over in Palm... ... right palm spring guess see local news still w...\n", "38906 @AndreaKobayashi It's the best cafe in Asakusa... ... best cafe asakusa tokyo small serf best coffee\n", "38907 @AndreaKoeln heeey! tonight is the night! no s... ... heeey tonight night sleeping like night loll\n", "38908 @AmandaFClark it is when you add the hammock ... add hammock\n", "\n", "[38909 rows x 3 columns]" ] }, "metadata": {}, "execution_count": 11 } ] }, { "cell_type": "markdown", "metadata": { "id": "uM-8VSL6Lh90" }, "source": [ "## Classification models as well as LSTM with pretrained model(Spacy):" ] }, { "cell_type": "markdown", "metadata": { "id": "IOqhNXnbU9Lx" }, "source": [ "In order to run a supervised learning model, we first need to convert the clean_text into feature representation." ] }, { "cell_type": "code", "metadata": { "id": "o5TuRf0zLmrY" }, "source": [ "nlp = en_core_web_lg.load()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "VnRhuRZ8Uh4O" }, "source": [ "## word-embedding\n", "all_vectors = pd.np.array([pd.np.array([token.vector for token in nlp(s)]).mean(axis=0) * pd.np.ones((300)) \\\n", " for s in df_all['clean_text']])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ZC2QaSNgB7DG" }, "source": [ "# split out validation dataset for the end\n", "Y= df_all[\"label\"]\n", "X = all_vectors\n", "\n", "from sklearn.model_selection import train_test_split, KFold, cross_val_score, GridSearchCV\n", "validation_size = 0.3\n", "seed = 7\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=validation_size, random_state=seed)\n", "\n", "# test options for classification\n", "num_folds = 10\n", "seed = 7\n", "scoring = 'accuracy'\n", "\n", "## spot check the algorithms\n", "models = []\n", "models.append(('LR', LogisticRegression()))\n", "models.append(('KNN', KNeighborsClassifier()))\n", "models.append(('CART', DecisionTreeClassifier()))\n", "models.append(('SVM', SVC()))\n", "## Neural Network\n", "models.append(('NN', MLPClassifier()))\n", "## Ensable Models \n", "models.append(('RF', RandomForestClassifier()))" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4s-ZnpSIDGml", "outputId": "1356b2cb-057b-47d1-b8f9-0a199325ef8c" }, "source": [ "## Running the classification models\n", "results = []\n", "names = []\n", "kfold_results = []\n", "test_results = []\n", "train_results = []\n", "for name, model in models:\n", " kfold = KFold(n_splits=num_folds, random_state=seed)\n", " cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)\n", " results.append(cv_results)\n", " names.append(name)\n", " #msg = \"%s: %f (%f)\" % (name, cv_results.mean(), cv_results.std())\n", " #print(msg)\n", " \n", " # Full Training period\n", " res = model.fit(X_train, Y_train)\n", " train_result = accuracy_score(res.predict(X_train), Y_train)\n", " train_results.append(train_result)\n", " \n", " # Test results\n", " test_result = accuracy_score(res.predict(X_test), Y_test)\n", " test_results.append(test_result) \n", " \n", " msg = \"%s: %f (%f) %f %f\" % (name, cv_results.mean(), cv_results.std(), train_result, test_result)\n", " print(msg)\n", " print(confusion_matrix(res.predict(X_test), Y_test))\n", " #print(classification_report(res.predict(X_test), Y_test))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "LR: 0.849904 (0.006147) 0.855889 0.848368\n", "[[5394 895]\n", " [ 875 4509]]\n", "KNN: 0.797768 (0.008248) 0.847334 0.789857\n", "[[4351 535]\n", " [1918 4869]]\n", "CART: 0.743831 (0.008116) 0.998972 0.745738\n", "[[4733 1432]\n", " [1536 3972]]\n", "SVM: 0.865582 (0.006346) 0.892275 0.863017\n", "[[5552 882]\n", " [ 717 4522]]\n", "NN: 0.852290 (0.008657) 0.998054 0.852309\n", "[[5433 888]\n", " [ 836 4516]]\n", "RF: 0.841606 (0.008591) 0.998972 0.840230\n", "[[5648 1244]\n", " [ 621 4160]]\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 540 }, "id": "J7ueBZrYMm0v", "outputId": "3745f1b0-e622-4b5a-d0af-dbbfd0f8946b" }, "source": [ "# compare algorithms\n", "from matplotlib import pyplot\n", "fig = pyplot.figure()\n", "ind = np.arange(len(names)) # the x locations for the groups\n", "width = 0.35 # the width of the bars\n", "fig.suptitle('Algorithm Comparison')\n", "ax = fig.add_subplot(111)\n", "pyplot.bar(ind - width/2, train_results, width=width, label='Train Error')\n", "pyplot.bar(ind + width/2, test_results, width=width, label='Test Error')\n", "fig.set_size_inches(15,8)\n", "pyplot.legend()\n", "ax.set_xticks(ind)\n", "ax.set_xticklabels(names)\n", "pyplot.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2gAAAILCAYAAACdAb99AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZzWdb3//+fAsCQQATFqgkqYG4SKihauiAsJHnODo+Ka2s3tuCZ5Ms8xUTOXCts0cj+CC2qgqbmUlShKpYKaaEqgxaJp4cI6vz/6eX0dGBg0hnkz3O+3W7fmuj6f6/q8ZuZ9m/HB53NdU1VbW1sbAAAAmlyLph4AAACAfxFoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAM3EuHHjss022zTa8z/55JP5/Oc/n7///e/1bh8wYEBuuummRjt+c/KNb3wjJ598clOPAUCBqpt6AABW3quvvpp99tknvXv3zu23375aj7399tvn2Wefrdx+4okn0qpVq/Tt23e1zfDmm2/mxz/+cR5++OHMnj077dq1S58+fXLcccdlu+22W21z/LsuvPDCph4BgEI5gwawBhk7dmz23HPPvPjii3nhhReadJZrr702f/jDH1bb8ebOnZuDDjooM2bMyE9+8pM8/fTT+fnPf55evXrlqKOOyoMPPrjaZgGAxiLQANYQCxYsyJ133pmDDz44u+22W8aOHbvC/X/zm99kjz32yFZbbZWvfvWrufXWW+tcAvnKK6/k2GOPzQ477JBtt902J598cmbNmpUkmTlzZjbbbLOMGTMmX/ziF3P11VfniSeeyGabbZY333wzxxxzTB555JFcccUV2XfffSvP+d577+Wss87KNttskx133DF33HFHZduAAQNyww035LjjjsvWW2+dQYMG5YUXXshVV12VHXfcMTvssEOuv/765X4+l19+eVq3bp1Ro0alZ8+eqaqqSteuXXPqqafmtNNOy9tvv13Z984778yQIUOy1VZbZffdd89PfvKT1NbWJklGjRqVI488MqNHj84XvvCFbL/99hk9enR+//vfZ8iQIdl6661z3HHH5Z133qnsP3To0Fx33XXZaaedstVWW+XrX/96FixYkCSpra3NqFGjMmDAgGyzzTbZe++9c+edd1ZmGTVqVIYPH55vfvOb2XrrrTNr1qyMGDEiJ5xwQpLk/fffz3//93+nf//+2XrrrTN48OD84he/+Ejfp8ceeyxDhw6tfF2feuqpFa4NAMol0ADWEA888ECqq6vTv3//7L///hk/fnzee++9evedPXt2TjzxxOy///6ZNGlShg0blu9///uV7QsWLMgxxxyT7t275+GHH84DDzyQefPm5eyzz67zPA899FDuueeeHHfccXXu/9nPfpYNNtggZ5xxRu65557K/WPGjMkhhxySJ554Iv/5n/+ZCy64oBI6SXLzzTfn9NNPz29/+9t84hOfyAknnJC2bdvm0UcfzTHHHJPvfOc7mTdv3jKfz5IlS/LAAw9k+PDhqa5e9ur8r3zlKznwwAOTJI8++mjOP//8fO1rX8vkyZNz6aWX5ic/+Unuvvvuyv7PP/98Fi9enF//+tf5yle+kiuvvDLXXnttrr/++tx9992ZNGlSxo8fX9l/2rRpef311/Pggw9m3Lhx+c1vfpOrr746STJhwoRcf/31lcg77bTTcu655+aVV16pPP7FF19Mt27d8tRTT6WmpqbO7Nddd12eeeaZjB8/vs7j//73v6/09+lHP/pRLrvssjz++OPZeOONM3LkyGW+RgCsGQQawBpi7Nix2W+//dKyZcvssssuadOmTe69995693388cdTVVWV4447Lm3atMluu+2WnXbaqbL90UcfzRtvvJGzzz477dq1S5cuXXLSSSfliSeeyNy5cyv7DRkyJJ06dUpVVdVKzbjzzjunX79+ad26dQYPHpz3338/r732WmX7TjvtlC233DLt27fPjjvumHfffTfHHHNMWrdunT322CMLFy7M66+/vszzvvnmm5k3b1569OixUl+nvfbaKzvvvHOqq6uz/fbbZ++9964TkrW1tTn22GPrHHe//fZL586ds9FGG+Vzn/tcpk+fXtl/4cKFOeOMM9K2bdv07Nkz++23Xx566KEkyZe+9KU88sgj6dGjR6qqqrLPPvukZcuWee655yqPX7BgQY466qhUV1cv87X8xz/+kVatWqVt27Zp0aJFBg4cmMmTJ6dTp04r/X06+OCD071797Rt2zZ77713Xn755ZX4bgFQIoEGsAZ4+eWXM2nSpHz5y19OklRXV2fIkCG57bbb6t1/zpw56dq1a9q2bVu5r0+fPpWPZ86cmfXXXz/t2rWr3LfhhhsmSWbMmFG5r1u3bh9pzg/v36ZNmyTJ/PnzK/ett956lY8/8YlPpGvXrmnR4l+/ij6Y9cP7L23x4sUNzjBjxoxssskmde7baKON8pe//KVyu2vXrmnZsmWd46677rp1ZvvwHJ/5zGfqfC27detWucxw/vz5ufTSS7PTTjvl85//fPr06ZOFCxfWeXxNTU1at25d77yHHXZY5s+fn1122SWnnnpqbrvttspjV/b7tNFGG1U+btu27Qq/hgCUzbs4AqwBPni92SGHHFK5b9GiRVmwYEFefPHFbLrppnX2X7JkSVq1alXnvg9CKEnl9VP1+fAZnqWfoyENnWn78Az13V6eLl26pGPHjnnppZey8847r3Df5X1uH56tvuOuaPalw7C2tray/wUXXJA//OEP+dnPfpZNNtkkLVq0yFZbbVVn/xV9HTfYYIOMHz8+Tz31VH71q1/lBz/4QX7605/mjjvuWOnv08p+HQEon5/oAIWbP39+7r777pxxxhm56667Kv+bMGFCevXqlVtvvXWZx3Tp0iWzZs2q8x/4zzzzTOXj7t275/XXX6/zeq9p06alqqqqcoamJB9cOnjDDTfk/fffX2b79773vZx33nlJ/nWG6cUXX6yzfdq0adl4440/9vFnz55d57gzZ86snA384x//mH333TebbrppWrRokZdeeqneGZfn3XffzYIFC9KvX7987Wtfy4QJEzJ79uw89thja9z3CYB/n0ADKNwvfvGLzJ8/P4ceemg22mijOv875JBD8vOf/3yZS9r69euX+fPn57rrrsuCBQvym9/8JhMnTqxs33XXXfPJT34yl19+ed5///3MmjUrV111VXbfffd07tx5peZq06ZN/vKXv9R598TGdNppp6VFixY59NBDM3Xq1NTW1mbu3Lm58sorc91112XIkCFJkgMPPDAPPPBAHnvssSxatCiPPfZYHnjggcqbiHwcLVu2zKhRozJ//vy8/PLLGT9+fPbaa68k/7rc8dlnn838+fMzbdq0fPe7360E8so45ZRTct555+Xtt99ObW1tnn/++SxcuDAbbbTRKvk+AbBmEWgAhRs7dmwGDRqUDh06LLNt8ODBWbhwYZ23ZU/+FQ3f/va3c8MNN2THHXfMXXfdlWOOOaZyWdw666yTn/70p3n55Zezyy675OCDD86mm26a73znOys919ChQ3PXXXfVeZv9xtS5c+fcdttt6du3b0455ZRstdVW2X///TN9+vSMGTMm/fr1S5LsvffeOeecc3LhhRdm++23z8UXX5wLL7wwe+6558c+drdu3fLpT386e+yxRw444IDsvPPOOeaYY5IkZ511VmbPnp1+/frl61//ek4++eQccsgh+dGPfpQbbrihwee+8MIL889//jN77LFH+vbtm//93//NhRdemM0222yVfJ8AWLNU1X7wh2EAaFYWLlyYli1bVl6f9MMf/jATJkxY7js/Ur9Ro0bl/vvvz4QJE5p6FADWAs6gATRD77//fvr3758f//jHWbRoUaZPn5477rgju+++e1OPBgCsgEADaIbatm2bUaNG5eGHH87222+fww8/PLvuumtOOumkph4NAFgBlzgCAAAUwhk0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQlSvzoMtWbIk77zzTlq1apWqqqrVeWgAAIAmV1tbm4ULF6Zdu3Zp0WLZ82WrNdDeeeedvPjii6vzkAAAAMXZdNNN06FDh2XuX62B1qpVq8owrVu3Xp2HbtamTJmS3r17N/UYFMSaoD7WBUuzJqiPdcHSrIlVa8GCBXnxxRcrbbS01RpoH1zW2Lp167Rp02Z1HrrZ8/VkadYE9bEuWJo1QX2sC5ZmTax6y3vJlzcJAQAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKMRq/TtoK6vlmTeu0udbfPnwFW6/5JJLMnXq1MyZMyfvvfdeNtxww3Ts2DFXXXVVg899+umn5+KLL07btm1XuN/MmTMzZMiQZf7I36hRo/KpT32q4U8CAABo9ooMtNVtxIgRSZJx48Zl2rRpOeecc1b6sVdeeeVK79ujR4/ceOOqjU8AAKD5EGgrMGLEiLRq1SpvvfVWLr744px55pl599138/777+e8885Lnz59MmDAgIwfPz7f+ta3UlNTk6lTp+b111/PZZddll69en3k4+y+++559NFHM3v27Fx55ZW57777cu+99yZJ9thjjxx//PF19h81alRjfgkAAIDVyGvQGtCxY8eMGjUqc+bMycEHH5wbb7wxZ5xxRq655ppl9l2wYEFGjx6dI444InfdddfHOk6S/PWvf83NN9+cBQsW5M4778zNN9+cm2++Ob/4xS/yl7/8ZZn9AQCA5sEZtAb06dMnSfLpT386P/zhDzN69OgsWLAg66yzzjL7brfddkmS9dZbL88888wy21955ZUMH/7/Xg/Xo0ePXHDBBXWOkySf//znU1VVleeffz5bbbVVqqv/9W3q27dvXnjhhWX2BwAAmgeB1oBWrVolSa6//vqsu+66+c53vpNnn302l1566TL7tmzZsvJxbW3tMttX9Bq0D47z4Y+rqqrqPM/ChQvTokWLZfYHAACaB5c4rqS///3v2XDDDZMkDz74YBYuXNjox9xiiy3yxz/+MYsWLcqiRYvy9NNPZ4sttmj04wIAAE1jpc6gvfjiiznxxBNz1FFH5fDDD6+z7bHHHssVV1yRli1bZpdddslJJ530bw/V0NviN4X/+I//yDnnnJP77rsvhx12WCZMmJA77rjjIz3H0pc4JsnZZ5+93P27deuWoUOH5vDDD09tbW0OPvjgbLDBBh9rfgAAoHxVtfVdi/ch7777bk444YRsvPHG2WyzzZYJtC996UsZPXp01l133Rx++OG54IILsskmm9T7XPPnz8+UKVPSu3fvtGnTZtV9Fmu5yZMnZ9ttt23qMSiINUF9rAuWZk1QH+uCpVkTq1ZDTdTgJY6tW7fONddck5qammW2zZgxIx07dsz666+fFi1aZNddd83EiRNXzeQAAABrmQYvcayurq68i+DS5syZk86dO1dud+7cOTNmzGjwoFOmTPkII7IyJk+e3NQjUBhrgvpYFyzNmqA+1gVLsyZWnyZ5F0eXOK5aTjuzNGui8bQ8s/53Yl0TTDp0S+uCOvysaDx+VlCfNXVdWBOr1geXOC7Pv/UujjU1NZk7d27l9qxZs+q9FBIAAICG/VuB1q1bt8ybNy8zZ87MokWL8sgjj6R///6rajYAAIC1SoOXOE6ZMiXf/va389prr6W6ujr3339/BgwYkG7dumXPPffM//zP/+TMM89M8q93dOzRo0ejDw0AANAcNRhovXv3zo03Lv962e233z5jx45dpUNd99sRq/T5jtrpkhVuv+SSSzJ16tTMmTMn7733XjbccMN07NgxV1111Uo9/wsvvJA2bdosE6cDBgzIeuutl5YtW1buO/HEE/OFL3zho38SAABAs9ckbxJSmhEj/hWE48aNy7Rp03LOOed8pMf/8pe/TO/eves9e3jNNdekXbt2q2ROAACgeRNoy7F48eKcd955mTFjRhYtWpRTTz01X/jCF3LXXXflpptuSqtWrbL55ptn2LBhGTNmTDp37pwuXbqkT58+DT73uHHj8uijj2b27Nk588wzc9lll2WdddbJ4YcfnnXWWSdXXnllqqurs+666+biiy/OhAkTKvtfeeWVWXfddVfDVwAAAFjdBNpyjB8/Pl27ds1FF12UN998M0ceeWTGjx+f0aNH5+qrr87666+fO+64IxtttFF23nnn7L333isVZx/461//mjFjxuS1117L888/n0ceeSSdOnXKPvvsk2uvvTbrr79+LrjggowfPz5VVVWV/auqqhrxswYAAJqSQFuOP/zhD5k8eXJ+//vfJ/nX3ytYsGBBBg8enJNOOin77bdfBg8enLZt267weY477rg6r0G75pprkiSf//znK7HVvXv3dOrUKW+99Vaqqqqy/vrrJ0l22GGHPPnkk9lyyy3r7A8AADRPAm05WrVqla9+9asZPHhwnftPOOGEDBkyJPfff3+OPPLI3HTTTSt8nuW9Bq1Vq1bLfFxVVZXa2trK/QsXLqxE2Yf3BwAAmqd/6++gNWdbbbVVHnrooSTJG2+8kSuuuCJLlizJlVdema5du+boo4/O1ltvnddffz1VVVVZvHjxv33Mjh07pqqqKq+//nqSZNKkSendu/e//bwAAMCaocgzaA29Lf7qMGjQoDz++OMZNmxYFi9enJNPPjktWrRIu3btMnTo0HTo0CHdu3fPFltske222y4XXnhh2rVrt8xb6C99iePgwYNXeDbsW9/6Vs4888xUV1ene/fu2XffffPzn/+80T5PAACgHEUGWlM54IADKh9XV1dn5MiRy+xz/PHH5/jjj69z34EHHpgDDzxwmX0ffvjhBo/ZrVu3jBs3rnJ7u+22yy233LLcuQAAgObLJY4AAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFqG7qAQBgTdfyzBubeoSPZdKhWzb1CAAsxRk0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQlQ39QAAQNN49r3b8uxvb2vqMT6Wo3a6pKlHAGgUzqABAAAUQqABAAAUwiWO/7+WZ97Y1CN8bJMO3bKpRwAAAFYBgQYAQIXXJkLTcokjAABAIZxBawb8S1fjWVMvfXXZKwDAmskZNAAAgEIINAAAgEK4xBEAAFguL6dZvZxBAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKET1yux00UUX5emnn05VVVXOPffc9OnTp7Lt5ptvzs9//vO0aNEivXv3zn//93832rAAAADNWYNn0CZNmpTp06dn7NixGTlyZEaOHFnZNm/evIwePTo333xzbrnllrz88sv54x//2KgDAwAANFcNBtrEiRMzcODAJEnPnj3z9ttvZ968eUmSVq1apVWrVnn33XezaNGivPfee+nYsWPjTgwAANBMNXiJ49y5c9OrV6/K7c6dO2fOnDlp37592rRpk5NOOikDBw5MmzZtsu+++6ZHjx4NHnTKlCn/3tQ0G5MnT27qEZotX1vqY13QXFjL1Me6YGlr4ppYqdegfVhtbW3l43nz5uUnP/lJ7rvvvrRv3z5HHnlkXnjhhWy++eYrfI7evXunTZs2H33axvR/zzX1BGulbbfdtqlHWLE1eF0U/7VdU63BayKxLhrNGr4u1kTFr2VroklYFyytxDUxf/78FZ6wavASx5qamsydO7dye/bs2enatWuS5OWXX0737t3TuXPntG7dOtttt52zYwAAAB9Tg4HWv3//3H///UmSqVOnpqamJu3bt0+SbLDBBnn55Zfz/vvvJ/nXpYsbb7xx400LAADQjDV4iWPfvn3Tq1evDBs2LFVVVTn//PMzbty4dOjQIXvuuWeOPfbYHHHEEWnZsmW22WabbLfddqtjbmAFnn3vtjz729uaeoyP5aidLmnqEQAAmsxKvQbtrLPOqnP7w68xGzZsWIYNG7ZqpwIAAFgLNXiJIwAAAKuHQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAACiEQAMAAChEdVMPAMDq8ex7t+XZ397W1GN8LEftdElTjwAAq4UzaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIUQaAAAAIWoXpmdLrroojz99NOpqqrKueeemz59+lS2/fWvf80ZZ5yRhQsXZsstt8wFF1zQaMMCAAA0Zw2eQZs0aVKmT5+esWPHZuTIkRk5cmSd7ZdcckmOOeaY3H777WnZsmVef/31RhsWAACgOWsw0CZOnJiBAwcmSXr27Jm333478+bNS5IsWbIkkydPzoABA5Ik559/fj7zmc804rgAAADNV4OXOM6dOze9evWq3O7cuXPmzJmT9u3b580330y7du1y8cUXZ+rUqdluu+1y5plnNnjQKVOm/HtT02xMnjy5qUegMNYE9bEuWJo1QX2sC5a2Jq6JlXoN2ofV1tbW+XjWrFk54ogjssEGG+T444/Pr371q+y2224rfI7evXunTZs2H3nYRvV/zzX1BGulbbfdtqlHWDHrYrWzJqiPdcHSrAnqY12wtBLXxPz581d4wqrBSxxramoyd+7cyu3Zs2ena9euSZJOnTrlM5/5TDbccMO0bNkyX/jCFzJt2rRVMDYAAMDap8FA69+/f+6///4kydSpU1NTU5P27dsnSaqrq9O9e/e8+uqrle09evRovGkBAACasQYvcezbt2969eqVYcOGpaqqKueff37GjRuXDh06ZM8998y5556bESNGpLa2NptuumnlDUMAAAD4aFbqNWhnnXVWndubb7555eONNtoot9xyy6qdCgAAYC3U4CWOAAAArB4CDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBArFWgXXXRRhg4dmmHDhuWZZ56pd5/LL788w4cPX6XDAQAArE0aDLRJkyZl+vTpGTt2bEaOHJmRI0cus89LL72UJ598slEGBAAAWFs0GGgTJ07MwIEDkyQ9e/bM22+/nXnz5tXZ55JLLsnpp5/eOBMCAACsJaob2mHu3Lnp1atX5Xbnzp0zZ86ctG/fPkkybty49OvXLxtssMFKH3TKlCkfY1Sao8mTJzf1CBTGmqA+1gVLsyaoj3XB0tbENdFgoC2ttra28vFbb72VcePG5dprr82sWbNW+jl69+6dNm3afNRDN67/e66pJ1grbbvttk09wopZF6udNUF9rAuWZk1QH+uCpZW4JubPn7/CE1YNXuJYU1OTuXPnVm7Pnj07Xbt2TZI8/vjjefPNN3PYYYfl5JNPztSpU3PRRRetgrEBAADWPg0GWv/+/XP//fcnSaZOnZqamprK5Y377LNP7r333tx666256qqr0qtXr5x77rmNOzEAAEAz1eAljn379k2vXr0ybNiwVFVV5fzzz8+4cePSoUOH7LnnnqtjRgAAgLXCSr0G7ayzzqpze/PNN19mn27duuXGG29cNVMBAACshVbqD1UDAADQ+AQaAEKr1YkAAA9jSURBVABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIQQaAABAIapXZqeLLrooTz/9dKqqqnLuueemT58+lW2PP/54rrjiirRo0SI9evTIyJEj06KF7gMAAPioGiypSZMmZfr06Rk7dmxGjhyZkSNH1tn+zW9+M9///vczZsyYvPPOO/nNb37TaMMCAAA0Zw0G2sSJEzNw4MAkSc+ePfP2229n3rx5le3jxo3LeuutlyTp3Llz/v73vzfSqAAAAM1bg5c4zp07N7169arc7ty5c+bMmZP27dsnSeX/Z8+end/97nf5r//6rwYPOmXKlI87L83M5MmTm3oECmNNUB/rgqVZE9THumBpa+KaWKnXoH1YbW3tMve98cYb+epXv5rzzz8/nTp1avA5evfunTZt2nzUQzeu/3uuqSdYK2277bZNPcKKWRernTVBfawLlmZNUB/rgqWVuCbmz5+/whNWDV7iWFNTk7lz51Zuz549O127dq3cnjdvXo477ricdtpp2Wmnnf7NcQEAANZeDQZa//79c//99ydJpk6dmpqamspljUlyySWX5Mgjj8wuu+zSeFMCAACsBRq8xLFv377p1atXhg0blqqqqpx//vkZN25cOnTokJ122il33XVXpk+fnttvvz1JMnjw4AwdOrTRBwcAAGhuVuo1aGeddVad25tvvnnlY2/4AQAAsGr4i9IAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFEGgAAACFWKlAu+iiizJ06NAMGzYszzzzTJ1tjz32WA466KAMHTo0P/jBDxplSAAAgLVBg4E2adKkTJ8+PWPHjs3IkSMzcuTIOtsvvPDCjBo1Krfcckt+97vf5aWXXmq0YQEAAJqz6oZ2mDhxYgYOHJgk6dmzZ95+++3Mmzcv7du3z4wZM9KxY8esv/76SZJdd901EydOzCabbFLvc9XW1iZJFixYsKrmX2XWb9eqqUf42FpVrdPUI3xs8+fPb+oRVmhNXRfWRONZU9dEYl00pjV1XVgTjWdNXROJddGY1tR1YU2sWh+00AdttLQGA23u3Lnp1atX5Xbnzp0zZ86ctG/fPnPmzEnnzp3rbJsxY8Zyn2vhwoVJkhdffHHlpl+N7v6PzzX1CP+GNXf2KVOmNPUIK7Tmros1dW5ronGtubNbF41lTZ3bmmhca+7s1kVjWVPnLntNLFy4MG3btl3m/gYDbWnLK72V0a5du2y66aZp1apVqqqqPvbzAAAArIlqa2uzcOHCtGvXrt7tDQZaTU1N5s6dW7k9e/bsdO3atd5ts2bNSk1NzXKfq0WLFunQocNKDw8AANDc1Hfm7AMNvklI//79c//99ydJpk6dmpqamrRv3z5J0q1bt8ybNy8zZ87MokWL8sgjj6R///6raGwAAIC1S1XtSlyzeNlll+Wpp55KVVVVzj///Dz33HPp0KFD9txzzzz55JO57LLLkiR77bVXjj322EYfGgAAoDlaqUADAACg8a3UH6oGAACg8Qk0AACAQgi0NcjMmTNzwAEH1Llv1KhR2WuvvTJ8+PAcfvjhOeigg/LLX/6yiSZkdVh6HTz44IM57LDDMmbMmOy66651/iDjiBEjMnPmzMycOTNbbLFFXnjhhcq2cePGZdy4cat1dlatV199Nccff3wOOuigHHDAAfnWt75V+eOXs2bNyhZbbJEHH3ywsv8TTzyRHXfcMcOHD8/w4cNz0EEH5Xvf+16S5JJLLsnw4cOzzz77ZNddd83w4cNz8sknN8nnxapx880355BDDqn8bhgzZkyGDBlSZ5/a2trsvvvueeONNzJgwIBcffXVdbZ/+9vfzoABA1bn2KxGK/rdMGDAgNx444119h0xYkRTjMlqNnPmzGyzzTaV3xVDhw7Neeedl8WLF2fAgAE59NBDK9uGDx/e1OM2Sx/576BRniOOOCKHH354kuStt97K/vvvn5133nmFb99J8/CnP/0p3//+93PdddflV7/6VT75yU/m+uuvz/HHH7/Mvptsskkuv/zyXHPNNU0wKava4sWLc8opp+S8885Lv379UltbmwsvvDA/+MEPcvrpp+eee+7JRhttlHvuuScDBw6sPK5fv375/ve/nyRZsmRJjj766Dz11FOV//AaN25cpk2blnPOOadJPi9WjZkzZ+bWW2/N7bffnlatWuXVV1/NN77xjbRq1Sovv/xyevbsmSSZPHlyPvvZz6ZLly7p2rVrHnroocrPj9ra2qL/wCurxvJ+N3Tp0iW33nprvvzlL1fevZu1R48ePeoE+ogRIzJ+/PgkyTXXXLPcv9/FquEMWjPzqU99Kl27ds2cOXOaehQa2ZtvvplzzjknV155ZTp37pwkOfTQQzN+/Pi89dZby+zfq1evrLPOOpk4ceLqHpVG8Lvf/S6f/exn069fvyRJVVVVzj777Jx00klJkgkTJuSb3/xmHnvssbz77rv1PkeLFi3Su3fvvPrqq6trbFaTefPmZf78+Vm4cGGSZOONN85NN92UwYMH5957763s94tf/CKDBw9OkrRu3TqdOnXKSy+9lORf8fZByNF8Le93Q9u2bTNs2LCMHj26iSajJH369Mn06dObeoy1hkBrZv785z/njTfeyLrrrtvUo9CIFi1alFNPPTWDBg2q8x9Qbdq0ydFHH50f//jH9T7u9NNPz3e/+91489Y135///OdsscUWde5r27ZtWrdunT//+c/55z//mS9+8YvZYYcd8vDDD9f7HO+8805++9vfplevXqtjZFajzTffPH369Mkee+yRESNG5N57782iRYuy7777Vv626ZIlS/LrX/86e+65Z+Vxe++9d+Vfye+9997stddeTTI/q9fyfjcMHTo0jzzyiH/0XcstXLgwDz30kN8Vq5FAawZuuOGGDB8+PF/+8pdzyimn5LLLLkvr1q2beiwa0SuvvJJBgwbljjvuyN/+9rc62/bff/88+eSTee2115Z53MYbb5wtt9yyzr+gs2aqqqrK4sWL6902YcKEfOlLX0qSDB48OBMmTKhsmzRpUoYPH55DDz00e+21V4444ohlQo/m4dJLL81NN92UzTffPD/96U9z9NFHp6amJp06dcqf/vSnPPXUU9lyyy3rXL62xx575Je//GUWL16cSZMmVc7Q0rwt73dDdXV1TjjhhIwaNaqJJqOpvPLKK5XXmPXv3z877LBD5XL54447rrLt1FNPbeJJmyevQWsGPngN2uzZs3PkkUdms802a+qRaGSf+9zncthhh6VLly4566yzcv3111e2tWjRIqecckq+973vpUWLZf8N5qSTTsqxxx6bww47LNXVfgSsqT772c/m5ptvrnPfggUL8uqrr+aee+5JVVVVfvWrX2XJkiWZMWNG/vGPfyT5f69Bq62tzdChQ/28aKZqa2uzYMGC9OzZMz179szw4cMzaNCgvP766xkyZEjuu+++/OMf/1jmTUM++clPplu3brnuuuuy1VZb+RmxFlne74ZBgwbl+uuvdyn0WubDr0E79dRT06NHj8o2r0FrfM6gNSM1NTXZf//9c9VVVzX1KKwm++yzT7p3754f/OAHde7fbbfd8re//S1/+tOflnnMpz/96QwcODBjxoxZXWPSCPr375/XXnutcvnikiVL8p3vfCeXXnpp2rVrl/vuuy933313xo8fn0GDBlUua/tAVVVVRowYkQsuuCBLlixpik+BRnT77bfnvPPOq1yy9s9//jNLlixJly5dsvfee+exxx7LU089lV133XWZx+6zzz65+uqrXd64llnR74bTTz89V1xxRRNMRQnOPvvsXHbZZXnvvfeaepS1hkBbw3z4lPPw4cPzzDPP1Nl+9NFH5+GHH860adOaaEJWt2984xv1XrJ41lln5bnnnqv3Mcccc8wyl0ayZmnRokVGjx6dW2+9NQcccEAOPfTQdOjQIZ/97GeX+XMcBx54YL1rpG/fvunevXtuu+221TU2q8kBBxyQLl265OCDD84RRxyRE088Md/4xjfStm3bdOzYMV26dEmvXr3qvRx+4MCBadmyZb74xS82weQ0peX9bthhhx3y6U9/ugkmogTdu3fP3nvvnR/96EdNPcpao6rWuwUAAAAUwRk0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQgg0AACAQvx/waIj3/xuLd8AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {} } ] }, { "cell_type": "markdown", "metadata": { "id": "v2ONnB_jMAwv" }, "source": [ "The best model with the highest accuracy is **Support Vector Machine(SVM)** with **85.79**% accuracy on test dataset. Logistic Regression performed good as well but we see overfitting problem with CART, NN and RF." ] }, { "cell_type": "markdown", "metadata": { "id": "4arHL0jORPAH" }, "source": [ "### LSTM model:" ] }, { "cell_type": "code", "metadata": { "id": "ZP3d0s2jQtYA" }, "source": [ "### Create sequence\n", "vocabulary_size = 20000\n", "tokenizer = Tokenizer(num_words= vocabulary_size)\n", "tokenizer.fit_on_texts(df_all['clean_text'])\n", "sequences = tokenizer.texts_to_sequences(df_all['clean_text'])\n", "X_LSTM = pad_sequences(sequences, maxlen=50)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "4llx--HcR5Qo" }, "source": [ "## Split the data into train and test\n", "Y_LSTM = df_all[\"label\"]\n", "X_train_LSTM, X_test_LSTM, Y_train_LSTM, Y_test_LSTM = train_test_split(X_LSTM, \\\n", " Y_LSTM, test_size=validation_size, random_state=seed)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "WXu9iwluSKC3", "outputId": "8b3bb160-b860-44f7-96d8-fc71a7f2738d" }, "source": [ "from keras.wrappers.scikit_learn import KerasClassifier\n", "def create_model(input_length=50):\n", " model = Sequential()\n", " model.add(Embedding(20000, 300, input_length=50))\n", " model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))\n", " model.add(Dense(1, activation='sigmoid'))\n", " model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) \n", " return model \n", "model_LSTM = KerasClassifier(build_fn=create_model, epochs=3, verbose=1, validation_split=0.4)\n", "model_LSTM.fit(X_train_LSTM, Y_train_LSTM)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/3\n", "511/511 [==============================] - 138s 264ms/step - loss: 0.3561 - accuracy: 0.8405 - val_loss: 0.3040 - val_accuracy: 0.8729\n", "Epoch 2/3\n", "511/511 [==============================] - 135s 263ms/step - loss: 0.1890 - accuracy: 0.9241 - val_loss: 0.3237 - val_accuracy: 0.8606\n", "Epoch 3/3\n", "511/511 [==============================] - 134s 263ms/step - loss: 0.1161 - accuracy: 0.9525 - val_loss: 0.4235 - val_accuracy: 0.8540\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 14 } ] }, { "cell_type": "code", "metadata": { "id": "zZ7rFVv5ThsZ" }, "source": [ "train_result_LSTM = accuracy_score(model_LSTM.predict(X_train_LSTM), Y_train_LSTM)\n", "# Test results\n", "test_result_LSTM = accuracy_score(model_LSTM.predict(X_test_LSTM), Y_test_LSTM)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "syOKVcDrTrA-", "outputId": "66289c55-fe09-40d7-b473-10200088b63b" }, "source": [ "print(\"train result:\", train_result_LSTM)\n", "print(\"test result:\", test_result_LSTM)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "train result: 0.9259068879424291\n", "test result: 0.8553071189925469\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xhkT8EFzUAol", "outputId": "acc3563d-e2fa-4df3-9a55-efa58992cc64" }, "source": [ "confusion_matrix(model_LSTM.predict(X_test_LSTM), Y_test_LSTM)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([[5424, 844],\n", " [ 845, 4560]])" ] }, "metadata": {}, "execution_count": 17 } ] }, { "cell_type": "markdown", "metadata": { "id": "wi_Bt5c6RdLB" }, "source": [ "### Compare all the models:" ] }, { "cell_type": "code", "metadata": { "id": "_6j6bpafUKWV" }, "source": [ "train_results.append(train_result_LSTM);test_results.append(test_result_LSTM)\n", "names.append(\"LSTM\")" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 557 }, "id": "I8zVmWQTUNdR", "outputId": "06e2dfbf-1cb2-444a-c0cd-cf6bff205796" }, "source": [ "# compare algorithms\n", "from matplotlib import pyplot\n", "fig = pyplot.figure()\n", "ind = np.arange(len(names)) # the x locations for the groups\n", "width = 0.35 # the width of the bars\n", "fig.suptitle('Algorithm Comparison')\n", "ax = fig.add_subplot(111)\n", "pyplot.bar(ind - width/2, train_results, width=width, label='Train Error')\n", "pyplot.bar(ind + width/2, test_results, width=width, label='Test Error')\n", "fig.set_size_inches(15,8)\n", "pyplot.legend()\n", "ax.set_xticks(ind)\n", "ax.set_xticklabels(names)\n", "pyplot.show()\n", "plt.savefig('/content/drive/MyDrive/NLP/Depression_Detection/modeling/classification_comparision.png')" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2gAAAILCAYAAACdAb99AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3debzVdb3v8feGzZBAHCG2mSASHicIFRUtUBNRNKFrTnBBHFO7TjenI8eTea6JmjmcwiaNkxMncCALNDWHjhUoSqWCmmhKIMWgOaAy7/uH13XdMmyUYX/39vl8PHq01/r91lqftb/sJS9+v7V2VW1tbW0AAABocM0aegAAAADeJdAAAAAKIdAAAAAKIdAAAAAKIdAAAAAKIdAAAAAKIdAAmogJEyZk11133Wj3/9hjj+Vzn/tc/vGPf6x2e//+/XPLLbdstMdvSr7xjW/k9NNPb+gxAChQdUMPAMC6e+mll3LQQQelZ8+euf322zfpY++xxx556qmnKpcfffTRtGjRIr17995kM7z66qv50Y9+lAcffDDz589PmzZt0qtXr5x00knZfffdN9kc6+uSSy5p6BEAKJQjaACNyPjx43PAAQfkueeey7PPPtugs/z0pz/NH//4x032eAsXLswRRxyR2bNn58c//nGeeOKJ/PKXv0yPHj1y3HHH5f77799kswDAxiLQABqJpUuX5uc//3mOPPLIfPGLX8z48ePXuv9vf/vb7L///tl5553zta99LbfeemudUyBffPHFnHjiidlzzz2z22675fTTT8+8efOSJHPmzMn222+fcePG5Qtf+EKuu+66PProo9l+++3z6quv5oQTTshDDz2Uq6++OoccckjlPt95552ce+652XXXXbPXXnvljjvuqGzr379/brrpppx00knZZZddcvDBB+fZZ5/Ntddem7322it77rlnbrzxxjU+n6uuuiotW7bM6NGj071791RVVaVTp04588wz8/Wvfz2vv/56Zd+f//znGTx4cHbeeefst99++fGPf5za2tokyejRo3PsscdmzJgx+fznP5899tgjY8aMyR/+8IcMHjw4u+yyS0466aS89dZblf2HDBmSG264If369cvOO++cf/3Xf83SpUuTJLW1tRk9enT69++fXXfdNQMHDszPf/7zyiyjR4/OiBEj8s1vfjO77LJL5s2bl5EjR+aUU05JkixevDj/9m//lr59+2aXXXbJoEGD8qtf/epDrdPkyZMzZMiQyvf18ccfX+ufDQDKJdAAGon77rsv1dXV6du3bw499NBMnDgx77zzzmr3nT9/fk499dQceuihmTp1aoYOHZrvfe97le1Lly7NCSeckC5duuTBBx/Mfffdl0WLFuW8886rcz8PPPBA7rrrrpx00kl1rv/P//zPbLXVVjn77LNz1113Va4fN25cjjrqqDz66KP5n//zf+biiy+uhE6SjB07NmeddVZ+97vf5ROf+EROOeWUtG7dOg8//HBOOOGEfOc738miRYtWeT4rV67MfffdlxEjRqS6etWz87/61a/m8MMPT5I8/PDDueiii/Iv//IvmTZtWq644or8+Mc/zi9+8YvK/s8880xWrFiR//7v/85Xv/rVXHPNNfnpT3+aG2+8Mb/4xS8yderUTJw4sbL/zJkzM3fu3Nx///2ZMGFCfvvb3+a6665LkkyaNCk33nhjJfK+/vWv54ILLsiLL75Yuf1zzz2Xzp075/HHH09NTU2d2W+44YY8+eSTmThxYp3b/+Mf/1jndfrhD3+YK6+8Mo888ki22WabjBo1apXvEQCNg0ADaCTGjx+fL3/5y2nevHn22WeftGrVKnffffdq933kkUdSVVWVk046Ka1atcoXv/jF9OvXr7L94YcfziuvvJLzzjsvbdq0SceOHXPaaafl0UcfzcKFCyv7DR48OJtvvnmqqqrWaca99947ffr0ScuWLTNo0KAsXrw4L7/8cmV7v379stNOO6Vt27bZa6+98vbbb+eEE05Iy5Yts//++2fZsmWZO3fuKvf76quvZtGiRenWrds6fZ8OPPDA7L333qmurs4ee+yRgQMH1gnJ2tranHjiiXUe98tf/nI6dOiQrl275p//+Z8za9asyv7Lli3L2WefndatW6d79+758pe/nAceeCBJ8qUvfSkPPfRQunXrlqqqqhx00EFp3rx5nn766crtly5dmuOOOy7V1dWrfC/feOONtGjRIq1bt06zZs0yYMCATJs2LZtvvvk6r9ORRx6ZLl26pHXr1hk4cGBeeOGFdVgtAEok0AAagRdeeCFTp07NV77ylSRJdXV1Bg8enNtuu221+y9YsCCdOnVK69atK9f16tWr8vWcOXOy5ZZbpk2bNpXrtt566yTJ7NmzK9d17tz5Q835/v1btWqVJFmyZEnluk9/+tOVrz/xiU+kU6dOadbs3f8UvTfr+/f/oBUrVtQ7w+zZs7PtttvWua5r167561//WrncqVOnNG/evM7jbrHFFnVme/8cn/nMZ+p8Lzt37lw5zXDJkiW54oor0q9fv3zuc59Lr169smzZsjq3r6mpScuWLVc77/Dhw7NkyZLss88+OfPMM3PbbbdVbruu69S1a9fK161bt17r9xCAsvkUR4BG4L33mx111FGV65YvX56lS5fmueeey3bbbVdn/5UrV6ZFixZ1rnsvhJJU3j+1Ou8/wvPB+6hPfUfa3j/D6i6vSceOHdO+ffs8//zz2Xvvvde675qe2/tnW93jrm32D4ZhbW1tZf+LL744f/zjH/Of//mf2XbbbdOsWbPsvPPOdfZf2/dxq622ysSJE/P444/nN7/5Tb7//e/nJz/5Se644451Xqd1/T4CUD6v6ACFW7JkSX7xi1/k7LPPzp133ln536RJk9KjR4/ceuutq9ymY8eOmTdvXp2/4D/55JOVr7t06ZK5c+fWeb/XzJkzU1VVVTlCU5L3Th286aabsnjx4lW2f/e7382FF16Y5N0jTM8991yd7TNnzsw222zzkR9//vz5dR53zpw5laOBf/rTn3LIIYdku+22S7NmzfL888+vdsY1efvtt7N06dL06dMn//Iv/5JJkyZl/vz5mTx5cqNbJwDWn0ADKNyvfvWrLFmyJMOGDUvXrl3r/O+oo47KL3/5y1VOaevTp0+WLFmSG264IUuXLs1vf/vbTJkypbJ93333zSc/+clcddVVWbx4cebNm5drr702++23Xzp06LBOc7Vq1Sp//etf63x64sb09a9/Pc2aNcuwYcMyY8aM1NbWZuHChbnmmmtyww03ZPDgwUmSww8/PPfdd18mT56c5cuXZ/LkybnvvvsqHyLyUTRv3jyjR4/OkiVL8sILL2TixIk58MADk7x7uuNTTz2VJUuWZObMmfmP//iPSiCvizPOOCMXXnhhXn/99dTW1uaZZ57JsmXL0rVr1w2yTgA0LgINoHDjx4/PwQcfnHbt2q2ybdCgQVm2bFmdj2VP3o2Gb3/727npppuy11575c4778wJJ5xQOS1us802y09+8pO88MIL2WeffXLkkUdmu+22y3e+8511nmvIkCG5884763zM/sbUoUOH3Hbbbendu3fOOOOM7Lzzzjn00EMza9asjBs3Ln369EmSDBw4MOeff34uueSS7LHHHrnssstyySWX5IADDvjIj925c+d86lOfyv7775/DDjsse++9d0444YQkybnnnpv58+enT58++dd//decfvrpOeqoo/LDH/4wN910U733fckll+TNN9/M/vvvn969e+f//J//k0suuSTbb7/9BlknABqXqtr3fjEMAE3KsmXL0rx588r7k37wgx9k0qRJa/zkR1Zv9OjRuffeezNp0qSGHgWAjwFH0ACaoMWLF6dv37750Y9+lOXLl2fWrFm54447st9++zX0aADAWgg0gCaodevWGT16dB588MHsscceOfroo7PvvvvmtNNOa+jRAIC1cIojAABAIRxBAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKIRAAwAAKET1pnywlStX5q233kqLFi1SVVW1KR8aAACgwdXW1mbZsmVp06ZNmjVb9XjZJg20t956K88999ymfEgAAIDibLfddmnXrt0q12/SQGvRokVlmJYtW27Kh270pk+fnp49ezb0GKwn69j4WcOmwTo2ftawabCOjZ81/PCWLl2a5557rtJGH7RJA+290xpbtmyZVq1abcqHbhJ8z5oG69j4WcOmwTo2ftawabCOjZ81/GjW9JYvHxICAABQCIEGAABQCIEGAABQCIEGAABQCIEGAABQCIEGAABQCIEGAABQiE36e9AAAIDGp/k5N6954389/aHvb8VVI9a6/fLLL8+MGTOyYMGCvPPOO9l6663Tvn37XHvttfXe91lnnZXLLrssrVu3Xut+c+bMyeDBg1f5RdujR4/OP/3TP9X/JDYSgQYAABRl5MiRSZIJEyZk5syZOf/889f5ttdcc80679utW7fcfPNa4rMBCDQAAKBRGDlyZFq0aJHXXnstl112Wc4555y8/fbbWbx4cS688ML06tUr/fv3z8SJE/Otb30rNTU1mTFjRubOnZsrr7wyPXr0+NCPs99+++Xhhx/O/Pnzc8011+See+7J3XffnSTZf//9c/LJJ9fZf/To0ev1HL0HDQAAaDTat2+f0aNHZ8GCBTnyyCNz88035+yzz87111+/yr5Lly7NmDFjcswxx+TOO+/8SI+TJH/7298yduzYLF26ND//+c8zduzYjB07Nr/61a/y17/+dZX914cjaAAAQKPRq1evJMmnPvWp/OAHP8iYMWOydOnSbLbZZqvsu/vuuydJPv3pT+fJJ59cZfuLL76YESP+//vhunXrlosvvrjO4yTJ5z73uVRVVeWZZ57JzjvvnOrqdzOqd+/eefbZZ1fZf30INAAAoNFo0aJFkuTGG2/MFltske985zt56qmncsUVV6yyb/PmzStf19bWrrJ9be9Be+9x3v91VVVVnftZtmxZmjVrtsr+68MpjgAAQKPzj3/8I1tvvXWS5P7778+yZcs2+mPuuOOO+dOf/pTly5dn+fLleeKJJ7Ljjjtu0MdYpyNozz33XE499dQcd9xxOfroo+tsmzx5cq6++uo0b948++yzT0477bQNOiAAANCw1vSx+NOmTctuu+22iad51//4H/8j559/fu65554MHz48kyZNyh133PGh7uODpzgmyXnnnbfG/Tt37pwhQ4bk6KOPTm1tbY488shstdVWH2n+NamqXd2xvvd5++23c8opp2SbbbbJ9ttvv0qgfelLX8qYMWOyxRZb5Oijj87FF1+cbbfddrX3tWTJkkyfPj09e/ZMq1atNtyz+BhoyD/8bDjWsfGzhk2DdWz8rGHTYB0bP2v44dXXRPWe4tiyZctcf/31qampWWXb7Nmz0759+2y55ZZp1qxZ9t1330yZMmXDTA4AAPAxU+8pjtXV1ZVPKfmgBQsWpEOHDpXLHTp0yOzZs+t90OnTp3+IEXnPtGnTGnoENgDr2PhZw6bBOjZ+1rBpsI6NnzXcsBrkUxyd4vjhOXzcNFjH+jU/Z/WfpFSKqcN2soZNgJ/FdVPyz6OfxXVT8hom1rEp8Hr64b13iuOarNenONbU1GThwoWVy/PmzVvtqZAAAADUb70CrXPnzlm0aFHmzJmT5cuX56GHHkrfvn031GwAAAAfK/We4jh9+vR8+9vfzssvv5zq6urce++96d+/fzp37pwDDjgg//7v/55zzjknybuf6NitW7eNPjQAAEBTVG+g9ezZc42/XTtJ9thjj4wfP36DDgUAAJTjht+NXOO2p35324e+v+P6Xb7W7ZdffnlmzJiRBQsW5J133snWW2+d9u3b59prr12n+3/22WfTqlWrVQ4e9e/fP5/+9KfTvHnzynWnnnpqPv/5z3/o57CxNMiHhAAAAKzJyJHvBuGECRMyc+bMnH/++R/q9r/+9a/Ts2fP1Z7dd/3116dNmzYbZM6NQaABAADFW7FiRS688MLMnj07y5cvz5lnnpnPf/7zufPOO3PLLbekRYsW2WGHHTJ06NCMGzcuHTp0SMeOHdOrV69673vChAl5+OGHM3/+/Jxzzjm58sors9lmm+Xoo4/OZpttlmuuuSbV1dXZYostctlll2XSpEmV/a+55ppsscUWG+x5CjQAAKB4EydOTKdOnXLppZfm1VdfzbHHHpuJEydmzJgxue6667LlllvmjjvuSNeuXbP33ntn4MCB6xRn7/nb3/6WcePG5eWXX84zzzyThx56KJtvvnkOOuig/PSnP82WW26Ziy++OBMnTkxVVVVl/6qqqg36PAUaAABQvD/+8Y+ZNm1a/vCHPyR59/eJLV26NIMGDcppp52WL3/5yxk0aFBat2691vs56aST6rwH7frrr0+SfO5zn6vEVpcuXbL55pvntddeS1VVVbbccsskyZ577pnHHnssO+20U539NySBBgAAFK9Fixb52te+lkGDBtW5/pRTTsngwYNz77335thjj80tt9yy1vtZ03vQWrRoscrXVVVVqa2trVy/bNmySpS9f/8Nab1+DxoAAMCmsPPOO+eBBx5Ikrzyyiu5+uqrs3LlylxzzTXp1KlTjj/++Oyyyy6ZO3duqqqqsmLFivV+zPbt26eqqipz585NkkydOjU9e/Zc7/tdG0fQAACAtVrTx+JPmzYtu+222yaZ4eCDD84jjzySoUOHZsWKFTn99NPTrFmztGnTJkOGDEm7du3SpUuX7Ljjjtl9991zySWXpE2bNqt8hP4HT3EcNGjQWo+Gfetb38o555yT6urqdOnSJYccckh++ctfbrTnKdAAAIAiHXbYYZWvq6urM2rUqFX2Ofnkk3PyySfXue7www/P4Ycf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Nn7WsGmwjk2DdWz8GuMartN70N6vtra2ztfz5s3LMccck6222ionn3xyfvOb3+SLX/ziWu+jZ8+eadWq1YcedqP6r6cbeoJGbbfddmvoEd5lHT8ya9g0WMfGr5g1TKzjeihmHa3herGOjV8xa/g+S5YsWesBq3pPcaypqcnChQsrl+fPn59OnTolSTbffPN85jOfydZbb53mzZvn85//fGbOnLkBxgYAAPj4qTfQ+vbtm3vvvTdJMmPGjNTU1KRt27ZJkurq6nTp0iUvvfRSZXu3bt023rQAAABNWL2nOPbu3Ts9evTI0KFDU1VVlYsuuigTJkxIu3btcsABB+SCCy7IyJEjU1tbm+22267ygSEAAAB8OOv0HrRzzz23zuUddtih8nXXrl3zs5/9bMNOBQAA8DFU7ymOAAAAbBoCDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBACDQAAoBDrFGiXXnpphgwZkqFDh+bJJ59c7T5XXXVVRowYsUGHAwAA+DipN9CmTp2aWbNmZfz48Rk1alRGjRq1yj7PP/98HnvssY0yIAAAwMdFvYE2ZcqUDBgwIEnSvXv3vP7661m0aFGdfS6//PKcddZZG2dCAACAj4nq+nZYuHBhevToUbncoUOHLFiwIG3btk2STJgwIX369MlWW221zg86ffr0jzAqJZs2bVpDj8B6soZNg3Vs/Kxh02Admwbr2Pg1xjWsN9A+qLa2tvL1a6+9lgkTJuSnP/1p5s2bt8730bNnz7Rq1erDPvTG9V9PN/QEjdpuu+3W0CO8yzp+ZNawabCOjV8xa5hYx/VQzDpaw/ViHRu/YtbwfZYsWbLWA1b1nuJYU1OThQsXVi7Pnz8/nTp1SpI88sgjefXVVzN8+PCcfvrpmTFjRi699NINMDYAAMDHT72B1rdv39x7771JkhkzZqSmpqZyeuNBBx2Uu+++O7feemuuvfba9OjRIxdccG9A8RAAABEYSURBVMHGnRgAAKCJqvcUx969e6dHjx4ZOnRoqqqqctFFF2XChAlp165dDjjggE0xIwAAwMfCOr0H7dxzz61zeYcddlhln86dO+fmm2/eMFMBAAB8DK3TL6oGAABg4xNoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhRBoAAAAhahel50uvfTSPPHEE6mqqsoFF1yQXr16VbY98sgjufrqq9OsWbN069Yto0aNSrNmug8AAODDqrekpk6dmlmzZmX8+PEZNWpURo0aVWf7N7/5zXzve9/LuHHj8tZbb+W3v/3tRhsWAACgKas30KZMmZIBAwYkSbp3757XX389ixYtqmyfMGFCPv3pTydJOnTokH/84x8baVQAAICmrd5THBcuXJgePXpULnfo0CELFixI27Ztk6Ty//Pnz8/vf//7/O///b/rfdDp06d/1Hkp1LRp0xp6BNaTNWwarGPjZw2bBuvYNFjHxq8xruE6vQft/Wpra1e57pVXXsnXvva1XHTRRdl8883rvY+ePXumVatWH/ahN67/erqhJ2jUdtttt4Ye4V3W8SOzhk2DdWz8ilnDxDquh2LW0RquF+vY+BWzhu+zZMmStR6wqvcUx5qamixcuLByef78+enUqVPl8qJFi3LSSSfl61//evr167ee4wIAAHx81Rtoffv2zb333pskmTFjRmpqaiqnNSbJ5ZdfnmOPPTb77LPPxpsSAADgY6DeUxx79+6dHj16ZOjQoamqqspFF12UCRMmpF27dunXr1/uvPPOzJo1K7fffnuSZNCgQRkyZMhGHxwAAKCpWaf3oJ177rl1Lu+www6Vr33gBwAAwIbhN0oDAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUQqABAAAUYp0C7dJLL82QIUMydOjQPPnkk3W2TZ48OUcccUSGDBmS73//+xtlSAAAgI+DegNt6tSpmTVrVsaPH59Ro0Zl1KhRdbZfcsklGT16dH72s5/l97//fZ5//vmNNiwAAEBTVl3fDlOmTMmAAQOSJN27d8/rr7+eRYsWpW3btpk9e3bat2+fLbfcMkmy7777ZsqUKdl2221Xe1+1tbVJkqVLl26o+TeYLdu0aOgR1qpF1WYNPcJaLVmypKFHSGId14c1XDclr2FiHddVyetYyhomZa9jyWuYlLOOJa9hYh3XVcnraA0/vPda6L02+qCq2jVt+X8uvPDC7LvvvpVIGzZsWEaNGpVu3brlD3/4Q8aMGVM5tfG2227L7Nmzc/bZZ6/2vt58880899xzH/nJAAAANAXbbbdd2rVrt8r19R5B+6B6em6t2rRpk+222y4tWrRIVVXVR74fAACAxqi2tjbLli1LmzZtVru93kCrqanJwoULK5fnz5+fTp06rXbbvHnzUlNTs8b7atas2WorEQAA4OOidevWa9xW74eE9O3bN/fee2+SZMaMGampqUnbtm2TJJ07d86iRYsyZ86cLF++PA899FD69u27gcYGAAD4eKn3PWhJcuWVV+bxxx9PVVVVLrroojz99NNp165dDjjggDz22GO58sorkyQHHnhgTjzxxI0+NAAAQFO0ToEGAADAxrdOv6gaAACAjU+gAQAAFEKgFWbOnDk57LDD6lw3evToHHjggRkxYkSOPvroHHHEEfn1r3/dQBOyOh9ct/vvvz/Dhw/PuHHjsu+++9b5JYkjR47MnDlzMmfOnOy444559tlnK9smTJiQCRMmbNLZP+5eeumlnHzyyTniiCNy2GGH5Vvf+lblF0jOmzcvO+64Y+6///7K/o8++mj22muvjBgxIiNGjMgRRxyR7373u0mSyy+/PCNGjMhBBx2UfffdNyNGjMjpp5/eIM/r42rs2LE56qijKq+V48aNy+DBg+vsU1tbm/322y+vvPJK+vfvn+uuu67O9m9/+9vp37//phybtVjba2X//v1z880319l35MiRDTEm9ZgzZ0523XXXymvnkCFDcuGFF2bFihXp379/hg0bVtk2YsSIhh73Y211fxddtGhRzjzzzAwfPjxDhw7N//pf/ytvvPFG7rzzzowYMSJHHXVUnfWdO3duRowYkW9+85t17ueWW27J9ttvvymfTqP0oX8PGg3jmGOOydFHH50kee2113LooYdm7733XutHdNIw/vznP+d73/tebrjhhvzmN7/JJz/5ydx44405+eSTV9l32223zVVXXZXrr7++ASZlxYoVOeOMM3LhhRemT58+qa2tzSWXXJLvf//7Oeuss3LXXXela9euueuuuzJgwIDK7fr06ZPvfe97SZKVK1fm+OOPz+OPP175i+GECRMyc+bMnH/++Q3yvD6u5syZk1tvvTW33357WrRokZdeeinf+MY30qJFi7zwwgvp3r17kmTatGn57Gc/m44dO6ZTp0554IEHKj+ftbW1mT59ekM+DVZjTa+VHTt2zK233pqvfOUrlU+YplzdunWrE9QjR47MxIkTkyTXX3/9Gn8nFA3vhhtuSK9evfLVr341SfKDH/wgEydOzPDhw3PooYdmzpw5OfPMM+usb5I888wzWbZsWVq0aJEkefDBByu/ros1cwStEfqnf/qndOrUKQsWLGjoUfiAV199Neeff36uueaadOjQIUkybNiwTJw4Ma+99toq+/fo0SObbbZZpkyZsqlHJcnvf//7fPazn02fPn2SJFVVVTnvvPNy2mmnJUkmTZqUb37zm5k8eXLefvvt1d5Hs2bN0rNnz7z00kubamzWYNGiRVmyZEmWLVuWJNlmm21yyy23ZNCgQbn77rsr+/3qV7/KoEGDkiQtW7bM5ptvnueffz7Ju/H2XshRjjW9VrZu3TpDhw7NmDFjGmgy1kevXr0ya9ashh6DdfDGG2/kzTffrFw+9dRTM3z48Hpv16tXr/z+979Pkvztb39LdXV1WrZsudHmbCoEWiP0l7/8Ja+88kq22GKLhh6F91m+fHnOPPPMHHzwwXX+gteqVascf/zx+dGPfrTa25111ln5j//4j/hA1U3vL3/5S3bcccc617Vu3TotW7bMX/7yl7z55pv5whe+kD333DMPPvjgau/jrbfeyu9+97v06NFjU4zMWuywww7p1atX9t9//4wcOTJ33313li9fnkMOOaTy+zxXrlyZ//7v/84BBxxQud3AgQMr/4p/991358ADD2yQ+Vm7Nb1WDhkyJA899JB/tGxkli1blgceeMBrZyMxfPjwTJo0KV/5yldy1VVX1TnleG0GDhyYSZMmJXn39fX9r72smUBrJG666aaMGDEiX/nKV3LGGWfkyiuv9C8QhXnxxRdz8MEH54477sjf//73OtsOPfTQPPbYY3n55ZdXud0222yTnXbaqc6/8LNpVFVVZcWKFavdNmnSpHzpS19KkgwaNKjyH5gkmTp1akaMGJFhw4blwAMPzDHHHLNK6NEwrrjiitxyyy3ZYYcd8pOf/CTHH398ampqsvnmm+fPf/5zHn/88ey00051Tofbf//98+tf/zorVqzI1KlTK0dUKcuaXiurq6tzyimnZPTo0Q00GevqxRdfrLxHqW/fvtlzzz0rp4+fdNJJlW1nnnlmA0/KB3Xt2jX33HNPzjnnnCxbtizHHntsbr/99npvt/vuu+fJJ5/M4sWLc99992X//fffBNM2ft6D1ki89x60+fPn59hjj/UGywL98z//c4YPH56OHTvm3HPPzY033ljZ1qxZs5xxxhn57ne/m2bNVv13kdNOOy0nnnhihg8fnupqP5abymc/+9mMHTu2znVLly7NSy+9lLvuuitVVVX5zW9+k5UrV2b27Nl54403kvz/96DV1tZmyJAhfh4LUVtbm6VLl6Z79+7p3r17RowYkYMPPjhz587N4MGDc8899+SNN95Y5UNDPvnJT6Zz58654YYbsvPOO/sZLNiaXisPPvjg3HjjjU41Ltz734N25plnplu3bpVt3oNWtsWLF6d169bp169f+vXrl/79+2f06NE54ogj1nq7Zs2apW/fvhk7dmw+8YlPVN7+wdo5gtbI1NTU5NBDD821117b0KOwBgcddFC6dOmS73//+3Wu/+IXv5i///3v+fOf/7zKbT71qU9lwIABGTdu3KYakyR9+/bNyy+/XDl9ceXKlfnOd76TK664Im3atMk999yTX/ziF5k4cWIOPvjgymly76mqqsrIkSNz8cUXZ+XKlQ3xFHif22+/PRdeeGHlFLg333wzK1euTMeOHTNw4MBMnjw5jz/+ePbdd99VbnvQQQfluuuuc3pj4db2WnnWWWfl6quvboCp+CjOO++8XHnllXnnnXcaehTWwfHHH5/JkydXLv/9739Ply5d1um2Xl8/PIFWoPefAjBixIg8+eSTdbYff/zxefDBBzNz5swGmpD6fOMb31jtKYvnnntunn766dXe5oQTTljl1Eg2rmbNmmXMmDG59dZbc9hhh2XYsGFp165dPvvZz67yEcOHH374ate0d+/e6dKlS2677bZNNTZrcNhhh6Vjx4458sgjc8wxx+TUU0/NN77xjbRu3Trt27dPx44d06NHj9WeHj5gwIA0b948X/jCFxpgcj6MNb1W7rnnnvnUpz7VABPxUXTp0iUDBw7MD3/4w4YehdX44N9FR44cmZ/85CcZPnx4jjnmmNx33305++yz1+m+9thjj7Rs2VKgfQhVtT6ZAAAAoAiOoAEAABRCoAEAABRCoAEAABRCoAEAABRCoAEAABRCoAEAABRCoAEAABTi/wIsQM65fn9UHQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ] }, "metadata": {} } ] }, { "cell_type": "markdown", "metadata": { "id": "iB73YuVi55HQ" }, "source": [ "## Evaluate the performance:" ] }, { "cell_type": "markdown", "metadata": { "id": "APQx6jEQ6R9_" }, "source": [ "* **Accuracy:** the fraction of predictions the model got right.\n", "* **Confusion Matrix:** a summary table that breaks down the number of correct and incorrect predictions by each class.\n", "* **ROC:** a plot that illustrates the true positive rate against the false positive rate at various threshold settings. The area under the curve (AUC) indicates the probability that the classifier will rank a randomly chosen positive observation higher than a randomly chosen negative one.\n", "* **Precision:** the fraction of relevant instances among the retrieved instances.\n", "* **Recall:** the fraction of the total amount of relevant instances that were actually retrieved.\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "gcBQDboiJ-ht" }, "source": [ "def conf_matrix_acc(y_true, y_pred):\n", " ## Plot confusion matrix\n", " cm = confusion_matrix(y_true, y_pred)\n", " fig, ax = plt.subplots()\n", " sns.heatmap(cm, annot=True, fmt='d', ax=ax, cmap=plt.cm.Blues, \n", " cbar=False)\n", " ax.set(xlabel=\"Pred\", ylabel=\"True\", xticklabels=classes, \n", " yticklabels=classes, title=\"Confusion matrix\")\n", " plt.yticks(rotation=0)\n", " print(\"=========================================\")\n", " print(f'Accuracy score is : {accuracy_score(y_true, y_pred)}')\n", " print(\"=========================================\")\n", " print(\"Detail:\")\n", " print(skm.classification_report(y_true, y_pred))" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "0boGWGiH1aw9" }, "source": [ "## Plot ROC and precision-recall curve\n", "def roc_precision_auc():\n", " fig, ax = plt.subplots(nrows=1, ncols=2)\n", " ## Plot roc\n", " for i in range(len(classes)):\n", " fpr, tpr, thresholds = skm.roc_curve(y_test_array[:,i], \n", " probs[:,i])\n", " ax[0].plot(fpr, tpr, lw=3, \n", " label='{0} (area={1:0.2f})'.format(classes[i], \n", " skm.auc(fpr, tpr))\n", " )\n", " ax[0].plot([0,1], [0,1], color='navy', lw=3, linestyle='--')\n", " ax[0].set(xlim=[-0.05,1.0], ylim=[0.0,1.05], \n", " xlabel='False Positive Rate', \n", " ylabel=\"True Positive Rate (Recall)\", \n", " title=\"Receiver operating characteristic\")\n", " ax[0].legend(loc=\"lower right\")\n", " ax[0].grid(True)\n", "\n", " ## Plot precision-recall curve\n", " for i in range(len(classes)):\n", " precision, recall, thresholds = skm.precision_recall_curve(\n", " y_test_array[:,i], probs[:,i])\n", " ax[1].plot(recall, precision, lw=3, \n", " label='{0} (area={1:0.2f})'.format(classes[i], \n", " skm.auc(recall, precision))\n", " )\n", " ax[1].set(xlim=[0.0,1.05], ylim=[0.0,1.05], xlabel='Recall', \n", " ylabel=\"Precision\", title=\"Precision-Recall curve\")\n", " ax[1].legend(loc=\"best\")\n", " ax[1].grid(True)\n", " plt.show()\n", " #plt.savefig('/content/drive/MyDrive/NLP/Depression_Detection/modeling/ROC_Precision_LR.png')\n", " #plt.savefig('/content/drive/MyDrive/NLP/Depression_Detection/modeling/ROC_Precision_SVM.png') \n", " ## AUC score\n", " print(f'AUC score is : {skm.roc_auc_score(Y_test, probs[:,1])}')" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "C-alyEwrIF-8" }, "source": [ "## Support Vector Machine(SVM) with word embedding:" ] }, { "cell_type": "code", "metadata": { "id": "826_WFaMIvsU" }, "source": [ "nlp = en_core_web_lg.load()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "SxoHGaSgIwlZ" }, "source": [ "## word-embedding\n", "all_vectors = pd.np.array([pd.np.array([token.vector for token in nlp(s)]).mean(axis=0) * pd.np.ones((300)) \\\n", " for s in df_all['clean_text']])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ddO28-MEI41Y" }, "source": [ "# split out validation dataset for the end\n", "Y= df_all[\"label\"]\n", "X = all_vectors\n", "\n", "from sklearn.model_selection import train_test_split, KFold, cross_val_score, GridSearchCV\n", "validation_size = 0.3\n", "seed = 7\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=validation_size, random_state=seed)\n", "\n", "# test options for classification\n", "num_folds = 10\n", "seed = 7\n", "scoring = 'accuracy'" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "VXFxwVJxKYgM" }, "source": [ "#Create a svm Classifier\n", "clf = SVC(probability=True) " ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "-sjKJGdVKvvP" }, "source": [ "## Running the svm Classifier\n", " \n", "# Full Training period\n", "res = clf.fit(X_train, Y_train)\n", "train_result = accuracy_score(res.predict(X_train), Y_train)\n", "test_result = accuracy_score(res.predict(X_test), Y_test)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "dzMcEiqRHO_b", "outputId": "4c4dbe0f-bbfc-4079-d880-ab59ba9f64d7" }, "source": [ "print(\"train_result:\", \"test_resuld:\", train_result, test_result, sep=\" \")" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "train_result: test_resuld: 0.8922749302393891 0.8630172192238499\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "MVY5_ME6aK3B" }, "source": [ "## Save the Modle to file in the current working directory\n", "SVM = \"/content/drive/MyDrive/NLP/Depression_Detection/modeling/model_svm1.pkl\" \n", "\n", "with open(SVM, 'wb') as file: \n", " pickle.dump(clf, file)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "qhrl7r6Oa6CA", "outputId": "3c4ef54d-7492-49da-f8ed-d997ac914204" }, "source": [ "## Load the Model back from file\n", "with open(SVM, 'rb') as file: \n", " clf = pickle.load(file)\n", "\n", "clf" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "SVC(probability=True)" ] }, "metadata": {}, "execution_count": 19 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "qTeeI-nsVk4H", "outputId": "2d07b389-e8a0-4c60-e306-0e8f1b61296f" }, "source": [ "## Test results\n", "## \n", "y_pred_svm = res.predict(X_test) \n", "classes = np.unique(Y_test.to_list())\n", "y_test_array = pd.get_dummies(Y_test, drop_first=False).values\n", "probs = res.predict_proba(X_test)\n", "conf_matrix_acc(Y_test.to_list(),y_pred_svm)\n", "roc_precision_auc()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=========================================\n", "Accuracy score is : 0.8630172192238499\n", "=========================================\n", "Detail:\n", " precision recall f1-score support\n", "\n", " 0 0.86 0.89 0.87 6269\n", " 1 0.86 0.84 0.85 5404\n", "\n", " accuracy 0.86 11673\n", " macro avg 0.86 0.86 0.86 11673\n", "weighted avg 0.86 0.86 0.86 11673\n", "\n" ] }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "AUC score is : 0.9365111408468516\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ] }, "metadata": {} } ] }, { "cell_type": "markdown", "metadata": { "id": "iAnrSn8p94nt" }, "source": [ "## Exploring False positive and False negative:" ] }, { "cell_type": "code", "metadata": { "id": "dlhGPlQU-UI8" }, "source": [ "## creating lists of true values and predictions\n", "y_test_1 = [x for x in y_test]\n", "y_pred_lr_1 = [x for x in y_pred_lr]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "_mKoT4-rW4zh" }, "source": [ "## Find the indices of wrong predictions\n", "idx = [] \n", "for i in range(len(y_test_1)):\n", " if y_test_1[i] != y_pred_lr_1[i]:\n", " idx.append(i)\n", " i+=1" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wTNAbHji6dlh", "outputId": "67c20371-d856-4290-c240-7d2597497c03" }, "source": [ "print('There are\", {} \"wrong preditions\", len(idx))" ], "execution_count": null, "outputs": [ { "data": { "text/plain": [ "1157" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ] }, { "cell_type": "code", "metadata": { "id": "mmziG8ijf_aw" }, "source": [ "wrong_arr = cv.inverse_transform(X_test_tfidf[idx])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "J9Gn8nhcDixY" }, "source": [ "## detokenize the wrong array\n", "detokenized = [TreebankWordDetokenizer().detokenize(x) for x in wrong_arr]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ocafKjvuEUFb", "outputId": "0476d5f3-5c02-4b4c-f0ad-754c462869ed" }, "source": [ "detokenized[:50]" ], "execution_count": null, "outputs": [ { "data": { "text/plain": [ "['year paradox mood meet man later hospital dream cope bum bite',\n", " 'one in headache give',\n", " 'job',\n", " 'walk visit use train station stair ride rainy perfect new mood month home explore exercise dark cold bus boosting antidote',\n", " 'thomas stronger stain rob one let left know good go every day',\n", " 'yupp using put hi hacked ashwin account abt',\n", " 'shadow love healed ford embraced debbie becomes',\n", " 'story short make long like difference',\n", " 'text start side seen guy chick argument',\n", " 'handle',\n", " 'thought seeya',\n", " 'stay positive jess',\n", " 'take seriously ppl missing man lot laugh hilarity happy',\n", " 'tea one made friend day brought',\n", " 'year plus',\n", " 'yawn tired heading daddy bed',\n", " 'story life heatherbailey',\n", " 'wan rich na live life famous coz',\n", " 'would tila talk like know guess difficult choose child',\n", " 'wanted loved love joy desired',\n", " 'yurina sorry saying im',\n", " 'wow quote pretty never life fwd end email dumb deep begin afraid',\n", " 'without story reason always act',\n", " 'fails else',\n", " 'work wannamusic mf listen ear dont atm',\n", " 'tomorrow til support society show morning life come cancer american 2pm',\n", " 'thought',\n", " 'talk night ever best',\n", " 'pe',\n", " 'vintage try streaming river rat prime movie many key channel',\n", " 'would sale mel love detail choc certain ask also',\n", " 'week prepare ahead',\n", " 'welcome old friend back',\n", " 'time take shut level everything disconnecting better beat available 24',\n", " 'train time thinking stop smiling ran icant especially',\n", " 'ta got',\n", " 'week turned thursday roll positive increase fold feeling corner coming 10',\n", " 'miss idol',\n", " 'person may hehehe deserve day call',\n", " 'one check',\n", " 'true queen positive person friend became absolutely',\n", " 'thought ok jackie im going figured ask',\n", " 'run done day',\n", " 'season corral collapse',\n", " 'wisely pick people inspire either drain',\n", " 'work well week time starting random nanowrimo holiday hello episode depressive busiest',\n", " 'would thought see never made kyle happen got carson believe back',\n", " 'cant canceled believe',\n", " 'story possibly listen hear crappy cousin blank bizarre anyway always',\n", " 'way see everything awe']" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ] }, { "cell_type": "markdown", "metadata": { "id": "S7E4MBH-HZKs" }, "source": [ "There is no specific patterns between false positive and false negative predictions." ] } ] }