From a0dca1307b53eab54a8249118b64aeaa4adf141e Mon Sep 17 00:00:00 2001
From: mas1u19 <mas1u19@soton.ac.uk>
Date: Wed, 7 Jun 2023 21:52:47 +0000
Subject: [PATCH] Upload New File

---
 Part_B_Multi.ipynb | 2895 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 2895 insertions(+)
 create mode 100644 Part_B_Multi.ipynb

diff --git a/Part_B_Multi.ipynb b/Part_B_Multi.ipynb
new file mode 100644
index 0000000..622aba5
--- /dev/null
+++ b/Part_B_Multi.ipynb
@@ -0,0 +1,2895 @@
+{
+ "cells": [
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "5354ae81",
+   "metadata": {},
+   "source": [
+    "# Coursework 2\n",
+    "\n",
+    "## Part B\n",
+    "### B.1\tProblem Description\n",
+    "The task requires a design and implement of a machine learning model to classify 100 test traces into three different types of events, normal, abnormal data injection attack and abnormal command injection attack events. Each trace has 128 features where the last column represents the label. The labels are 0 for normal events, 1 for abnormal data injection attack events and 2 for abnormal command injection attack events. The dataset contains 6,000 system traces where it’s equally divided between normal (1) and abnormal (1 or 2). The goal is to predict the labels of 100 test traces without labels using the training dataset to train the ML model.\n",
+    "### B.2\tData Pre-processing \n",
+    "First, let's do some basic analysis of input data."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2203,
+   "id": "3997c6f9",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pandas as pd\n",
+    "import numpy as np\n",
+    "import matplotlib.pyplot as plt"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2204,
+   "id": "309d1fa9",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Columns: 129 entries, R1-PA1:VH to marker\n",
+      "dtypes: float64(112), int64(17)\n",
+      "memory usage: 5.9 MB\n"
+     ]
+    }
+   ],
+   "source": [
+    "raw_data = pd.read_csv('TrainingDataMulti.csv')\n",
+    "raw_data.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2205,
+   "id": "a10544aa",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(6000, 129)"
+      ]
+     },
+     "execution_count": 2205,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "raw_data.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2206,
+   "id": "283c569c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[]"
+      ]
+     },
+     "execution_count": 2206,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "raw_data.columns[raw_data.isnull().any()].tolist()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2207,
+   "id": "ed5a0f8a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([0, 2, 1], dtype=int64)"
+      ]
+     },
+     "execution_count": 2207,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "raw_data['marker'].unique()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2208,
+   "id": "cdf8b7e1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0    3000\n",
+       "2    1500\n",
+       "1    1500\n",
+       "Name: marker, dtype: int64"
+      ]
+     },
+     "execution_count": 2208,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "raw_data['marker'].value_counts()"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "8d15070d",
+   "metadata": {},
+   "source": [
+    "So, there are 6000 rows of all not-null data and the target column *marker* has multi-value of 0, 1 and 2. Further, it's equally divided between normal (0) and anomolous (1 or 2) giving us a good stable sample."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2209,
+   "id": "081e4ad7",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>R1-PA1:VH</th>\n",
+       "      <th>R1-PM1:V</th>\n",
+       "      <th>R1-PA2:VH</th>\n",
+       "      <th>R1-PM2:V</th>\n",
+       "      <th>R1-PA3:VH</th>\n",
+       "      <th>R1-PM3:V</th>\n",
+       "      <th>R1-PA4:IH</th>\n",
+       "      <th>R1-PM4:I</th>\n",
+       "      <th>R1-PA5:IH</th>\n",
+       "      <th>R1-PM5:I</th>\n",
+       "      <th>...</th>\n",
+       "      <th>control_panel_log4</th>\n",
+       "      <th>relay1_log</th>\n",
+       "      <th>relay2_log</th>\n",
+       "      <th>relay3_log</th>\n",
+       "      <th>relay4_log</th>\n",
+       "      <th>snort_log1</th>\n",
+       "      <th>snort_log2</th>\n",
+       "      <th>snort_log3</th>\n",
+       "      <th>snort_log4</th>\n",
+       "      <th>marker</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>4294</th>\n",
+       "      <td>134.324226</td>\n",
+       "      <td>131659.74080</td>\n",
+       "      <td>14.364052</td>\n",
+       "      <td>131634.6675</td>\n",
+       "      <td>-105.641958</td>\n",
+       "      <td>131709.8873</td>\n",
+       "      <td>133.292902</td>\n",
+       "      <td>418.22324</td>\n",
+       "      <td>11.321646</td>\n",
+       "      <td>428.66051</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2819</th>\n",
+       "      <td>-166.851040</td>\n",
+       "      <td>131208.42190</td>\n",
+       "      <td>73.166710</td>\n",
+       "      <td>130581.5902</td>\n",
+       "      <td>-46.827841</td>\n",
+       "      <td>131283.6417</td>\n",
+       "      <td>-170.901851</td>\n",
+       "      <td>457.77500</td>\n",
+       "      <td>69.373730</td>\n",
+       "      <td>456.85945</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4029</th>\n",
+       "      <td>-60.670501</td>\n",
+       "      <td>131509.30120</td>\n",
+       "      <td>179.364438</td>\n",
+       "      <td>131459.1546</td>\n",
+       "      <td>59.364157</td>\n",
+       "      <td>131559.4477</td>\n",
+       "      <td>-61.180433</td>\n",
+       "      <td>393.86961</td>\n",
+       "      <td>176.814776</td>\n",
+       "      <td>403.57444</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2366</th>\n",
+       "      <td>-42.118128</td>\n",
+       "      <td>46761.64855</td>\n",
+       "      <td>-150.985838</td>\n",
+       "      <td>116390.1193</td>\n",
+       "      <td>71.808800</td>\n",
+       "      <td>114885.7231</td>\n",
+       "      <td>-90.555980</td>\n",
+       "      <td>1720.31845</td>\n",
+       "      <td>-148.315855</td>\n",
+       "      <td>702.40996</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>991</th>\n",
+       "      <td>-171.898798</td>\n",
+       "      <td>133690.67560</td>\n",
+       "      <td>68.124682</td>\n",
+       "      <td>133665.6024</td>\n",
+       "      <td>-51.881328</td>\n",
+       "      <td>133740.8222</td>\n",
+       "      <td>-161.293349</td>\n",
+       "      <td>244.63496</td>\n",
+       "      <td>68.691910</td>\n",
+       "      <td>283.27117</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 129 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "       R1-PA1:VH      R1-PM1:V   R1-PA2:VH     R1-PM2:V   R1-PA3:VH  \\\n",
+       "4294  134.324226  131659.74080   14.364052  131634.6675 -105.641958   \n",
+       "2819 -166.851040  131208.42190   73.166710  130581.5902  -46.827841   \n",
+       "4029  -60.670501  131509.30120  179.364438  131459.1546   59.364157   \n",
+       "2366  -42.118128   46761.64855 -150.985838  116390.1193   71.808800   \n",
+       "991  -171.898798  133690.67560   68.124682  133665.6024  -51.881328   \n",
+       "\n",
+       "         R1-PM3:V   R1-PA4:IH    R1-PM4:I   R1-PA5:IH   R1-PM5:I  ...  \\\n",
+       "4294  131709.8873  133.292902   418.22324   11.321646  428.66051  ...   \n",
+       "2819  131283.6417 -170.901851   457.77500   69.373730  456.85945  ...   \n",
+       "4029  131559.4477  -61.180433   393.86961  176.814776  403.57444  ...   \n",
+       "2366  114885.7231  -90.555980  1720.31845 -148.315855  702.40996  ...   \n",
+       "991   133740.8222 -161.293349   244.63496   68.691910  283.27117  ...   \n",
+       "\n",
+       "      control_panel_log4  relay1_log  relay2_log  relay3_log  relay4_log  \\\n",
+       "4294                   0           0           0           0           0   \n",
+       "2819                   0           0           0           0           0   \n",
+       "4029                   0           0           0           0           0   \n",
+       "2366                   0           0           0           0           0   \n",
+       "991                    0           0           0           0           0   \n",
+       "\n",
+       "      snort_log1  snort_log2  snort_log3  snort_log4  marker  \n",
+       "4294           0           0           0           0       0  \n",
+       "2819           0           0           0           0       2  \n",
+       "4029           0           0           0           0       2  \n",
+       "2366           0           0           0           0       1  \n",
+       "991            0           0           0           0       1  \n",
+       "\n",
+       "[5 rows x 129 columns]"
+      ]
+     },
+     "execution_count": 2209,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "raw_data.sample(n=5)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2210,
+   "id": "989201f2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array(['R1-PA1:VH', 'R1-PM1:V', 'R1-PA2:VH', 'R1-PM2:V', 'R1-PA3:VH',\n",
+       "       'R1-PM3:V', 'R1-PA4:IH', 'R1-PM4:I', 'R1-PA5:IH', 'R1-PM5:I',\n",
+       "       'R1-PA6:IH', 'R1-PM6:I', 'R1-PA7:VH', 'R1-PM7:V', 'R1-PA8:VH',\n",
+       "       'R1-PM8:V', 'R1-PA9:VH', 'R1-PM9:V', 'R1-PA10:IH', 'R1-PM10:I',\n",
+       "       'R1-PA11:IH', 'R1-PM11:I', 'R1-PA12:IH', 'R1-PM12:I', 'R1:F',\n",
+       "       'R1:DF', 'R1-PA:Z', 'R1-PA:ZH', 'R1:S', 'R2-PA1:VH', 'R2-PM1:V',\n",
+       "       'R2-PA2:VH', 'R2-PM2:V', 'R2-PA3:VH', 'R2-PM3:V', 'R2-PA4:IH',\n",
+       "       'R2-PM4:I', 'R2-PA5:IH', 'R2-PM5:I', 'R2-PA6:IH', 'R2-PM6:I',\n",
+       "       'R2-PA7:VH', 'R2-PM7:V', 'R2-PA8:VH', 'R2-PM8:V', 'R2-PA9:VH',\n",
+       "       'R2-PM9:V', 'R2-PA10:IH', 'R2-PM10:I', 'R2-PA11:IH', 'R2-PM11:I',\n",
+       "       'R2-PA12:IH', 'R2-PM12:I', 'R2:F', 'R2:DF', 'R2-PA:Z', 'R2-PA:ZH',\n",
+       "       'R2:S', 'R3-PA1:VH', 'R3-PM1:V', 'R3-PA2:VH', 'R3-PM2:V',\n",
+       "       'R3-PA3:VH', 'R3-PM3:V', 'R3-PA4:IH', 'R3-PM4:I', 'R3-PA5:IH',\n",
+       "       'R3-PM5:I', 'R3-PA6:IH', 'R3-PM6:I', 'R3-PA7:VH', 'R3-PM7:V',\n",
+       "       'R3-PA8:VH', 'R3-PM8:V', 'R3-PA9:VH', 'R3-PM9:V', 'R3-PA10:IH',\n",
+       "       'R3-PM10:I', 'R3-PA11:IH', 'R3-PM11:I', 'R3-PA12:IH', 'R3-PM12:I',\n",
+       "       'R3:F', 'R3:DF', 'R3-PA:Z', 'R3-PA:ZH', 'R3:S', 'R4-PA1:VH',\n",
+       "       'R4-PM1:V', 'R4-PA2:VH', 'R4-PM2:V', 'R4-PA3:VH', 'R4-PM3:V',\n",
+       "       'R4-PA4:IH', 'R4-PM4:I', 'R4-PA5:IH', 'R4-PM5:I', 'R4-PA6:IH',\n",
+       "       'R4-PM6:I', 'R4-PA7:VH', 'R4-PM7:V', 'R4-PA8:VH', 'R4-PM8:V',\n",
+       "       'R4-PA9:VH', 'R4-PM9:V', 'R4-PA10:IH', 'R4-PM10:I', 'R4-PA11:IH',\n",
+       "       'R4-PM11:I', 'R4-PA12:IH', 'R4-PM12:I', 'R4:F', 'R4:DF', 'R4-PA:Z',\n",
+       "       'R4-PA:ZH', 'R4:S', 'control_panel_log1', 'control_panel_log2',\n",
+       "       'control_panel_log3', 'control_panel_log4', 'relay1_log',\n",
+       "       'relay2_log', 'relay3_log', 'relay4_log', 'snort_log1',\n",
+       "       'snort_log2', 'snort_log3', 'snort_log4', 'marker'], dtype=object)"
+      ]
+     },
+     "execution_count": 2210,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "column_names = raw_data.columns.values\n",
+    "column_names"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "131b20d5",
+   "metadata": {},
+   "source": [
+    "### B.3\tAdvanced Data Analysis\n",
+    "We understand that first 116 columns have current/voltage data so these are continuous real value data. Next 16 columns are switch (0/1) and last column is target that was just observed to contain 50% as 0 and other 50% as 1 or 2.\n",
+    "\n",
+    "Let's explore missing, anomalous, categorical data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2211,
+   "id": "80f7ee9a",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "Int64Index: 129 entries, 0 to 128\n",
+      "Data columns (total 3 columns):\n",
+      " #   Column  Non-Null Count  Dtype  \n",
+      "---  ------  --------------  -----  \n",
+      " 0   minn    129 non-null    float64\n",
+      " 1   maxx    129 non-null    float64\n",
+      " 2   uniq    129 non-null    int64  \n",
+      "dtypes: float64(2), int64(1)\n",
+      "memory usage: 4.0 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "minn = [raw_data[c].min() for c in column_names]\n",
+    "maxx = [raw_data[c].max() for c in column_names]\n",
+    "uniq = [len(raw_data[c].unique()) for c in column_names]\n",
+    "idx=[x for x in range(len(minn))]\n",
+    "data_stat = pd.DataFrame({\"minn\": minn, \"maxx\": maxx, \"uniq\": uniq},index=idx)\n",
+    "data_stat.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2212,
+   "id": "ad863ae4",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>minn</th>\n",
+       "      <th>maxx</th>\n",
+       "      <th>uniq</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>57</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>115</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>116</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>117</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>118</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>119</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>124</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>125</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>127</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     minn  maxx  uniq\n",
+       "57    0.0   0.0     1\n",
+       "115   0.0   0.0     1\n",
+       "116   0.0   0.0     1\n",
+       "117   0.0   0.0     1\n",
+       "118   0.0   0.0     1\n",
+       "119   0.0   0.0     1\n",
+       "124   0.0   0.0     1\n",
+       "125   0.0   0.0     1\n",
+       "127   0.0   0.0     1"
+      ]
+     },
+     "execution_count": 2212,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "data_stat[data_stat.uniq == 1]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2213,
+   "id": "a1178960",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>minn</th>\n",
+       "      <th>maxx</th>\n",
+       "      <th>uniq</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>28</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>2058.0</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>57</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>86</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>2048.0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>115</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>116</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>117</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>118</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>119</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>120</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>121</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>122</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>123</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>124</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>125</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>126</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>127</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>128</th>\n",
+       "      <td>0.0</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     minn    maxx  uniq\n",
+       "28    0.0  2058.0     3\n",
+       "57    0.0     0.0     1\n",
+       "86    0.0  2048.0     2\n",
+       "115   0.0     0.0     1\n",
+       "116   0.0     0.0     1\n",
+       "117   0.0     0.0     1\n",
+       "118   0.0     0.0     1\n",
+       "119   0.0     0.0     1\n",
+       "120   0.0     1.0     2\n",
+       "121   0.0     1.0     2\n",
+       "122   0.0     1.0     2\n",
+       "123   0.0     1.0     2\n",
+       "124   0.0     0.0     1\n",
+       "125   0.0     0.0     1\n",
+       "126   0.0     1.0     2\n",
+       "127   0.0     0.0     1\n",
+       "128   0.0     2.0     3"
+      ]
+     },
+     "execution_count": 2213,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "data_stat[data_stat.uniq < 10]"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "b9ef8ba4",
+   "metadata": {},
+   "source": [
+    "Similar to assignment# 1, it is found that RS columns to contain categorical values along with last 16 fields"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2214,
+   "id": "b8bfbe4d",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>R1:S_0</th>\n",
+       "      <th>R1:S_2048</th>\n",
+       "      <th>R1:S_2058</th>\n",
+       "      <th>R2:S_0</th>\n",
+       "      <th>R3:S_0</th>\n",
+       "      <th>R3:S_2048</th>\n",
+       "      <th>R4:S_0</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>4807</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1154</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3806</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1212</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4330</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5407</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "      R1:S_0  R1:S_2048  R1:S_2058  R2:S_0  R3:S_0  R3:S_2048  R4:S_0\n",
+       "4807       1          0          0       1       1          0       1\n",
+       "1154       1          0          0       1       1          0       1\n",
+       "3806       1          0          0       1       1          0       1\n",
+       "1212       1          0          0       1       1          0       1\n",
+       "4330       1          0          0       1       1          0       1\n",
+       "5407       1          0          0       1       1          0       1"
+      ]
+     },
+     "execution_count": 2214,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "#lets make a copy of original\n",
+    "df = raw_data.copy()\n",
+    "df.replace([np.inf, -np.inf], np.nan, inplace=True)\n",
+    "df.dropna(inplace=True)\n",
+    "\n",
+    "column_names_RS = [column_names[28], column_names[57], column_names[86], column_names[115]]\n",
+    "RS_frame = df[column_names_RS]\n",
+    "RS_frame = RS_frame.astype('int')\n",
+    "RS_frame = RS_frame.astype('category')\n",
+    "RS_frame = pd.get_dummies(RS_frame, dtype=int)\n",
+    "RS_frame.sample(n=6)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "df0fab07",
+   "metadata": {},
+   "source": [
+    "We can drop RS columns\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2215,
+   "id": "7ff5a12e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Columns: 125 entries, R1-PA1:VH to marker\n",
+      "dtypes: float64(112), int64(13)\n",
+      "memory usage: 5.7 MB\n"
+     ]
+    }
+   ],
+   "source": [
+    "#SSimilar to Part A\n",
+    "column_names_updated = np.delete(column_names, [28, 57, 86, 115])\n",
+    "df = df.drop(column_names_RS, axis=1)\n",
+    "\n",
+    "df.info()"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "54517212",
+   "metadata": {},
+   "source": [
+    "Normalise continuous data values using `scikit lib`\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2216,
+   "id": "f21a5139",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(6000, 112)"
+      ]
+     },
+     "execution_count": 2216,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from sklearn.preprocessing import StandardScaler\n",
+    "\n",
+    "unscaled_input = df.iloc[:,:-13]\n",
+    "scaler = StandardScaler().fit(unscaled_input)\n",
+    "scaled_input = scaler.transform(unscaled_input)\n",
+    "scaled_input[np.isnan(scaled_input)] = 1\n",
+    "#np.isnan(scaled_input.sum())\n",
+    "scaled_input.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2217,
+   "id": "91c3e8c2",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Columns: 112 entries, R1-PA1:VH to R4-PA:ZH\n",
+      "dtypes: float64(112)\n",
+      "memory usage: 5.1 MB\n"
+     ]
+    }
+   ],
+   "source": [
+    "df1_scaled = pd.DataFrame(scaled_input, index=df.index, columns=column_names_updated[:scaled_input.shape[1]])\n",
+    "df1_scaled.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2218,
+   "id": "4a23f18c",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Data columns (total 12 columns):\n",
+      " #   Column              Non-Null Count  Dtype\n",
+      "---  ------              --------------  -----\n",
+      " 0   control_panel_log1  6000 non-null   int64\n",
+      " 1   control_panel_log2  6000 non-null   int64\n",
+      " 2   control_panel_log3  6000 non-null   int64\n",
+      " 3   control_panel_log4  6000 non-null   int64\n",
+      " 4   relay1_log          6000 non-null   int64\n",
+      " 5   relay2_log          6000 non-null   int64\n",
+      " 6   relay3_log          6000 non-null   int64\n",
+      " 7   relay4_log          6000 non-null   int64\n",
+      " 8   snort_log1          6000 non-null   int64\n",
+      " 9   snort_log2          6000 non-null   int64\n",
+      " 10  snort_log3          6000 non-null   int64\n",
+      " 11  snort_log4          6000 non-null   int64\n",
+      "dtypes: int64(12)\n",
+      "memory usage: 562.6 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "df2 = df.iloc[:,-13:-1]\n",
+    "df2.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2219,
+   "id": "b133d674",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Data columns (total 7 columns):\n",
+      " #   Column     Non-Null Count  Dtype\n",
+      "---  ------     --------------  -----\n",
+      " 0   R1:S_0     6000 non-null   int32\n",
+      " 1   R1:S_2048  6000 non-null   int32\n",
+      " 2   R1:S_2058  6000 non-null   int32\n",
+      " 3   R2:S_0     6000 non-null   int32\n",
+      " 4   R3:S_0     6000 non-null   int32\n",
+      " 5   R3:S_2048  6000 non-null   int32\n",
+      " 6   R4:S_0     6000 non-null   int32\n",
+      "dtypes: int32(7)\n",
+      "memory usage: 164.2 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "RS_frame.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2220,
+   "id": "2e67286d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Columns: 131 entries, R1-PA1:VH to R4:S_0\n",
+      "dtypes: float64(112), int32(7), int64(12)\n",
+      "memory usage: 5.8 MB\n"
+     ]
+    }
+   ],
+   "source": [
+    "X = pd.concat([df1_scaled, df2, RS_frame], axis=1)\n",
+    "X.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2221,
+   "id": "7d4368da",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "y = df[column_names[-1]]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2222,
+   "id": "5ac91fca",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(6000,)"
+      ]
+     },
+     "execution_count": 2222,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "y.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2223,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from sklearn.model_selection import train_test_split\n",
+    "\n",
+    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 10, test_size=0.35, stratify=y)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "17b62a90",
+   "metadata": {},
+   "source": [
+    "35% of the data will be used for the testing subset while the remainder will be used for the training subset."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2224,
+   "id": "43361446",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from sklearn.model_selection import StratifiedKFold\n",
+    "\n",
+    "#StratifiedKFold ensures data labels are balanced\n",
+    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=10)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "be505063",
+   "metadata": {},
+   "source": [
+    "StratifiedKFold ensures data labels are balanced"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "a1e9c681",
+   "metadata": {},
+   "source": [
+    "### B.4\tML Model Evaluation\n",
+    "#### B.4.1\tTraining Result\n",
+    "##### i.\tLogistic Regression (LR)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2225,
+   "id": "7c0aa1f4",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "LR score =  0.7276190476190476\n",
+      "LR accuracy score = 72.76%\n"
+     ]
+    }
+   ],
+   "source": [
+    "from sklearn.linear_model import LogisticRegression\n",
+    "\n",
+    "clf_lr = LogisticRegression(C=100, multi_class=\"multinomial\", class_weight=\"balanced\", max_iter=5000).fit(X_train, y_train)\n",
+    "score_lr = clf_lr.score(X_test, y_test)\n",
+    "print(\"LR score = \", score_lr)\n",
+    "print(\"LR accuracy score = %0.2f%%\" % (score_lr*100))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "1028696d",
+   "metadata": {},
+   "source": [
+    "Logistic Regression returns a poor accuracy score."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2226,
+   "id": "f1981ad3",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[0.68865253 0.67676452 0.66767337 0.66704094 0.66015875]\n",
+      "5-fold cross-validation accuracy [67.21%] with standard deviation [0.98%]\n"
+     ]
+    }
+   ],
+   "source": [
+    "from sklearn.model_selection import cross_val_score\n",
+    "\n",
+    "cross_val_scores_lr = cross_val_score(clf_lr, X, y, cv=kfold, scoring='f1_macro')\n",
+    "print (cross_val_scores_lr)\n",
+    "print (\"5-fold cross-validation accuracy [%0.2f%%] with standard deviation [%0.2f%%]\" % (100*cross_val_scores_lr.mean(), 100*cross_val_scores_lr.std()))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "7567ed36",
+   "metadata": {},
+   "source": [
+    "Cross-validation result of Logistic Regression shows the model is overfitting the data."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2227,
+   "id": "aa843f1d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[[ 914  136]\n",
+      "  [  91  959]]\n",
+      "\n",
+      " [[1403  172]\n",
+      "  [ 250  275]]\n",
+      "\n",
+      " [[1311  264]\n",
+      "  [ 231  294]]]\n",
+      "-------------------------------------------------------\n",
+      "              precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.88      0.91      0.89      1050\n",
+      "           1       0.62      0.52      0.57       525\n",
+      "           2       0.53      0.56      0.54       525\n",
+      "\n",
+      "    accuracy                           0.73      2100\n",
+      "   macro avg       0.67      0.67      0.67      2100\n",
+      "weighted avg       0.72      0.73      0.72      2100\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x25720594250>"
+      ]
+     },
+     "execution_count": 2227,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "from sklearn import metrics\n",
+    "from sklearn.metrics import multilabel_confusion_matrix\n",
+    "from sklearn.metrics import ConfusionMatrixDisplay\n",
+    "from sklearn.metrics import classification_report\n",
+    "\n",
+    "y_pred = clf_lr.predict(X_test)\n",
+    "print(multilabel_confusion_matrix(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "print('-'*55)\n",
+    "print (classification_report(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "ConfusionMatrixDisplay.from_predictions(y_test, y_pred, labels=[0, 1, 2])"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "9d89d0af",
+   "metadata": {},
+   "source": [
+    "##### ii.\tSupport Vector Machine (SVM)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2228,
+   "id": "8dee01a3",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "SVM score =  0.8957142857142857\n",
+      "SVM accuracy score = 89.57%\n"
+     ]
+    }
+   ],
+   "source": [
+    "#using SVM analysis\n",
+    "from sklearn import svm\n",
+    "\n",
+    "clf_svm = svm.SVC(kernel='rbf', gamma=0.1, C=100).fit(X_train, y_train)\n",
+    "score_svm = clf_svm.score(X_test, y_test)\n",
+    "print(\"SVM score = \", score_svm)\n",
+    "print(\"SVM accuracy score = %0.2f%%\" % (score_svm*100))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "49ae039e",
+   "metadata": {},
+   "source": [
+    "SVM returns a much improved accuracy score compared to Logistic Regression."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2229,
+   "id": "c362c7d4",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[0.88537968 0.89984839 0.90661995 0.88891372 0.89147395]\n",
+      "5-fold cross-validation accuracy [89.44%] with standard deviation [0.77%]\n"
+     ]
+    }
+   ],
+   "source": [
+    "cross_val_scores_svm = cross_val_score(clf_svm, X, y, cv=kfold, scoring='f1_macro')\n",
+    "print (cross_val_scores_svm)\n",
+    "print (\"5-fold cross-validation accuracy [%0.2f%%] with standard deviation [%0.2f%%]\" % (100*cross_val_scores_svm.mean(), 100*cross_val_scores_svm.std()))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "b999be7c",
+   "metadata": {},
+   "source": [
+    "The cross-validation result of SVM is stable but the accuracy score is still <90%."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2230,
+   "id": "19bc4356",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[[1000   50]\n",
+      "  [  51  999]]\n",
+      "\n",
+      " [[1466  109]\n",
+      "  [  76  449]]\n",
+      "\n",
+      " [[1515   60]\n",
+      "  [  92  433]]]\n",
+      "-------------------------------------------------------\n",
+      "              precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.95      0.95      0.95      1050\n",
+      "           1       0.80      0.86      0.83       525\n",
+      "           2       0.88      0.82      0.85       525\n",
+      "\n",
+      "    accuracy                           0.90      2100\n",
+      "   macro avg       0.88      0.88      0.88      2100\n",
+      "weighted avg       0.90      0.90      0.90      2100\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2572b23c210>"
+      ]
+     },
+     "execution_count": 2230,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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pnBmgp4rmzNOnDih3r17y9/fX//73/+0c+dOPf/882rQoIG9zcyZMzVr1izNmzdPmzdvVmhoqPr376/S0lJ7m+TkZO3YsUMrV67UihUrtG7dOt13331OxcKYPQAATigqKnL4HBgYqMDAwLPaPfPMM4qPj9f8+fPt+xISEuz/bRiGXnrpJU2aNEmDBg2SJC1cuFAxMTFatmyZ7rjjDmVmZurjjz/Wl19+qZ49e0qSZs+erRtvvFHPPfec4uLiqhUzlT0AwBwMi+ubpPj4eEVGRtq3tLS0c97uww8/VM+ePXXbbbcpOjpal1xyiV5//XX78ezsbOXm5iopKcm+LzIyUr169VJ6erokKT09XVFRUfZEL0lJSUny8fHR5s2bq/2jU9kDAEyhpla9y8nJUUREhH3/uap6Sdq7d6/mzp2rcePG6a9//au+/PJLPfTQQwoICFBKSopyc3MlSTExMQ7nxcTE2I/l5uYqOjra4bifn58aNmxob1MdJHsAAJwQERHhkOzPx2azqWfPnnrqqackSZdccom+/fZbzZs3TykpKbUdpgO68QEA5mDUwOaEpk2bqlOnTg77OnbsqAMHDkiSYmNjJUl5eXkObfLy8uzHYmNjdfToUYfjlZWVys/Pt7epDpI9AMAU6no2fu/evZWVleWw7/vvv1fLli0lVU3Wi42N1apVq+zHi4qKtHnzZiUmJkqSEhMTVVBQoIyMDHub1atXy2azqVevXtWOpVrd+B9++GG1L3jzzTdXuy0AAN5q7NixuvLKK/XUU0/p9ttv1xdffKHXXntNr732miTJYrFozJgxevLJJ9WuXTslJCRo8uTJiouL0+DBgyVV9QQMGDBAI0aM0Lx581RRUaFRo0bpjjvuqPZMfKmayf7MTX+LxWKR1Wqt9s0BAKhTdfh++8suu0xLly7VxIkTNW3aNCUkJOill15ScnKyvc2jjz6qkpIS3XfffSooKNBVV12ljz/+WEFBQfY2ixYt0qhRo3T99dfLx8dHQ4cO1axZs5yKpVrJ3mazOXVRAADqG3esevf73/9ev//978973GKxaNq0aZo2bdp52zRs2FCLFy92+t4/59KY/c/f8AMAQL1WxxP06hOnk73VatX06dPVrFkzhYWFae/evZKkyZMn680336zxAAEAgGucTvYzZszQggULNHPmTAUEBNj3d+nSRW+88UaNBgcAQM2x1MDmmZxO9gsXLtRrr72m5ORk+fr62vd369ZN3333XY0GBwBAjaEbv/oOHTqktm3bnrXfZrOpoqKiRoICAAA1x+lk36lTJ61fv/6s/f/+9791ySWX1EhQAADUOBNX9k6/G3/KlClKSUnRoUOHZLPZ9MEHHygrK0sLFy7UihUraiNGAABc97OV6y74fA/ldGU/aNAgLV++XJ9++qlCQ0M1ZcoUZWZmavny5frd735XGzECAAAXXNCqd1dffbVWrlxZ07EAAFBramqJW090wUvcbtmyRZmZmZKqxvF79OhRY0EBAFDjXB13N1OyP3jwoP74xz/q888/V1RUlCSpoKBAV155pd555x01b968pmMEAAAucHrM/t5771VFRYUyMzOVn5+v/Px8ZWZmymaz6d57762NGAEAcN2ZCXqubB7K6cp+7dq12rhxo9q3b2/f1759e82ePVtXX311jQYHAEBNsRhVmyvneyqnk318fPw5X55jtVqdWlsXAIA6ZeIxe6e78Z999lk9+OCD2rJli33fli1bNHr0aD333HM1GhwAAHBdtSr7Bg0ayGL5aayipKREvXr1kp9f1emVlZXy8/PTPffco8GDB9dKoAAAuMTEL9WpVrJ/6aWXajkMAABqmYm78auV7FNSUmo7DgAAUEsu+KU6klRaWqry8nKHfRERES4FBABArTBxZe/0BL2SkhKNGjVK0dHRCg0NVYMGDRw2AADqJROveud0sn/00Ue1evVqzZ07V4GBgXrjjTc0depUxcXFaeHChbURIwAAcIHT3fjLly/XwoUL1adPHw0bNkxXX3212rZtq5YtW2rRokVKTk6ujTgBAHCNiWfjO13Z5+fnq3Xr1pKqxufz8/MlSVdddZXWrVtXs9EBAFBDzrxBz5XNUzld2bdu3VrZ2dlq0aKFOnTooHfffVeXX365li9fbl8YB677w8jD6j3ghJq3KVV5qY92ZoTpraeb6+DeYId2HS8tVsr4g+rQvURWq7R3Z4j+dld7lZc5/T0ObjCi21Y9fPlmvf1NV6VtuuoXRw29NuC/uiY+R6mfDNCq/Qn2I1fEHdTonl/oogb5OlXpp2W72uulL3vJavB7r8+SR+1X8qgDDvty9gbrLzf2lCT5B9g04rG9umbgMfn727T18waaM7WtCn4IcEe48CJO/2UYNmyYvvrqK0nShAkT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F1+4OyTUgnXr1ummm25SXFycLBaLli1b5u6QUEvS0tJ02WWXKTw8XNHR0Ro8eLCysrLcHRa8DMnegyxZskTjxo3T448/rq1bt6pbt27q37+/jh496u7QUMNKSkrUrVs3zZkzx92hoJatXbtWqamp2rRpk1auXKmKigr169dPJSUl7g4NXoRH7zxIr169dNlll+nll1+WVLU2QHx8vB588EFNmDDBzdGhtlgsFi1dulSDBw92dyioA8eOHVN0dLTWrl2ra665xt3hwEtQ2XuI8vJyZWRkKCkpyb7Px8dHSUlJSk9Pd2NkAGpSYWGhJKlhw4ZujgTehGTvIY4fPy6r1aqYmBiH/TExMTWybCMA97PZbBozZox69+6tLl26uDsceBGPXvUOALxJamqqvv32W23YsMHdocDLkOw9ROPGjeXr66u8vDyH/Xl5eYqNjXVTVABqyqhRo7RixQqtW7fO1Et3o3bQje8hAgIC1KNHD61atcq+z2azadWqVUpMTHRjZABcYRiGRo0apaVLl2r16tVKSEhwd0jwQlT2HmTcuHFKSUlRz549dfnll+ull15SSUmJhg0b5u7QUMOKi4u1e/du++fs7Gxt375dDRs2VIsWLdwYGWpaamqqFi9erP/85z8KDw+3z8GJjIxUcHCwm6ODt+DROw/z8ssv69lnn1Vubq66d++uWbNmqVevXu4OCzVszZo16tu371n7U1JStGDBgroPCLXGYrGcc//8+fN19913120w8FokewAAvBxj9gAAeDmSPQAAXo5kDwCAlyPZAwDg5Uj2AAB4OZI9AABejmQPAICXI9kDAODlSPaAi+6++24NHjzY/rlPnz4aM2ZMncexZs0aWSwWFRQUnLeNxWLRsmXLqn3NJ554Qt27d3cprn379slisWj79u0uXQfAhSPZwyvdfffdslgsslgsCggIUNu2bTVt2jRVVlbW+r0/+OADTZ8+vVptq5OgAcBVLIQDrzVgwADNnz9fZWVl+uijj5Samip/f39NnDjxrLbl5eUKCAiokfs2bNiwRq4DADWFyh5eKzAwULGxsWrZsqUeeOABJSUl6cMPP5T0U9f7jBkzFBcXp/bt20uScnJydPvttysqKkoNGzbUoEGDtG/fPvs1rVarxo0bp6ioKDVq1EiPPvqofrm8xC+78cvKyvTYY48pPj5egYGBatu2rd58803t27fPvthNgwYNZLFY7Auf2Gw2paWlKSEhQcHBwerWrZv+/e9/O9zno48+0kUXXaTg4GD17dvXIc7qeuyxx3TRRRcpJCRErVu31uTJk1VRUXFWu1dffVXx8fEKCQnR7bffrsLCQofjb7zxhjp27KigoCB16NBBr7zyitOxAKg9JHuYRnBwsMrLy+2fV61apaysLK1cuVIrVqxQRUWF+vfvr/DwcK1fv16ff/65wsLCNGDAAPt5zz//vBYsWKC33npLGzZsUH5+vpYuXfqr9/3zn/+sf/3rX5o1a5YyMzP16quvKiwsTPHx8Xr//fclSVlZWTpy5Ij+/ve/S5LS0tK0cOFCzZs3Tzt27NDYsWN15513au3atZKqvpQMGTJEN910k7Zv3657771XEyZMcPp/k/DwcC1YsEA7d+7U3//+d73++ut68cUXHdrs3r1b7777rpYvX66PP/5Y27Zt08iRI+3HFy1apClTpmjGjBnKzMzUU089pcmTJ+vtt992Oh4AtcQAvFBKSooxaNAgwzAMw2azGStXrjQCAwONRx55xH48JibGKCsrs5/zj3/8w2jfvr1hs9ns+8rKyozg4GDj//7v/wzDMIymTZsaM2fOtB+vqKgwmjdvbr+XYRjGtddea4wePdowDMPIysoyJBkrV648Z5yfffaZIck4ceKEfV9paakREhJibNy40aHt8OHDjT/+8Y+GYRjGxIkTjU6dOjkcf+yxx8661i9JMpYuXXre488++6zRo0cP++fHH3/c8PX1NQ4ePGjf97///c/w8fExjhw5YhiGYbRp08ZYvHixw3WmT59uJCYmGoZhGNnZ2YYkY9u2bee9L4DaxZg9vNaKFSsUFhamiooK2Ww2/elPf9ITTzxhP961a1eHcfqvvvpKu3fvVnh4uMN1SktLtWfPHhUWFurIkSPq1auX/Zifn5969ux5Vlf+Gdu3b5evr6+uvfbaase9e/dunTp1Sr/73e8c9peXl+uSSy6RJGVmZjrEIUmJiYnVvscZS5Ys0axZs7Rnzx4VFxersrJSERERDm1atGihZs2aOdzHZrMpKytL4eHh2rNnj4YPH64RI0bY21RWVioyMtLpeADUDpI9vFbfvn01d+5cBQQEKC4uTn5+jv93Dw0NdfhcXFysHj16aNGiRWddq0mTJhcUQ3BwsNPnFBcXS5L++9//OiRZqWoeQk1JT09XcnKypk6dqv79+ysyMlLvvPOOnn/+eadjff3118/68uHr61tjsQJwDckeXis0NFRt27atdvtLL71US5YsUXR09FnV7RlNmzbV5s2bdc0110iqqmAzMjJ06aWXnrN9165dZbPZtHbtWiUlJZ11/EzPgtVqte/r1KmTAgMDdeDAgfP2CHTs2NE+2fCMTZs2/fYP+TMbN25Uy5Yt9be//c2+b//+/We1O3DggA4fPqy4uDj7fXx8fNS+fXvFxMQoLi5Oe/fuVXJyslP3B1B3mKAH/Cg5OVmNGzfWoEGDtH79emVnZ2vNmjV66KGHdPDgQUnS6NGj9fTTT2vZsmX67rvvNHLkyF99Rr5Vq1ZKSUnRPffco2XLltmv+e6770qSWrZsKYvFohUrVujYsWMqLi5WeHi4HnnkEY0dO1Zvv/229uzZo61bt2r27Nn2SW/333+/du3apfHjxysrK0uLFy/WggULnPp527VrpwMHDuidd97Rnj17NGvWrHNONgwKClJKSoq++uorrV+/Xg899JBuv/12xcbGSpKmTp2qtLQ0zZo1S99//72++eYbzZ8/Xy+88IJT8QCoPSR74EchISFat26dWrRooSFDhqhjx44aPny4SktL7ZX+ww8/rLvuukspKSlKTExUeHi4brnlll+97ty5c3Xrrbdq5MiR6tChg0aMGKGSkhJJUrNmzTR16lRNmDBBMTExGjVqlCRp+vTpmjx5stLS0tSxY0cNGDBA//3vf5WQkCCpahz9/fff17Jly9StWzfNmzdPTz31lFM/780336yxY8dq1KhR6t69uzZu3KjJkyef1a5t27YaMmSIbrzxRvXr108XX3yxw6N19957r9544w3Nnz9fXbt21bXXXqsFCxbYYwXgfhbjfDOLAACAV6CyBwDAy5HsAQDwciR7AAC8HMkeAAAvR7IHAMDLkewBAPByJHsAALwcyR4AAC9HsgcAwMuR7AEA8HIkewAAvNz/A3/SekqGwqufAAAAAElFTkSuQmCC",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_pred = clf_svm.predict(X_test)\n",
+    "print(multilabel_confusion_matrix(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "print('-'*55)\n",
+    "print (classification_report(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "ConfusionMatrixDisplay.from_predictions(y_test, y_pred, labels=[0, 1, 2])"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "8f2c3dab",
+   "metadata": {},
+   "source": [
+    "##### iii.\tRandom Forest Classifier (RFC)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2231,
+   "id": "4db1862e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "RFC score =  0.8304761904761905\n",
+      "RFC accuracy score = 83.05%\n"
+     ]
+    }
+   ],
+   "source": [
+    "from sklearn.ensemble import RandomForestClassifier\n",
+    "\n",
+    "clf_rfc =  RandomForestClassifier(max_depth=8, n_estimators=40, max_features=8, class_weight=\"balanced\", random_state=10).fit(X_train, y_train)\n",
+    "score_rfc = clf_rfc.score(X_test, y_test)\n",
+    "print(\"RFC score = \", score_rfc)\n",
+    "print(\"RFC accuracy score = %0.2f%%\" % (score_rfc*100))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "4176e79d",
+   "metadata": {},
+   "source": [
+    "RFC returns a much better accuracy score compared to Logistic Regression but still considerably lower than SVM."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2232,
+   "id": "af11085f",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[0.83180178 0.83375684 0.83754756 0.82173522 0.80264521]\n",
+      "5-fold cross-validation accuracy [82.55%] with standard deviation [1.26%]\n"
+     ]
+    }
+   ],
+   "source": [
+    "cross_val_scores_rfc = cross_val_score(clf_rfc, X, y, cv=kfold, scoring='f1_macro')\n",
+    "print (cross_val_scores_rfc)\n",
+    "print (\"5-fold cross-validation accuracy [%0.2f%%] with standard deviation [%0.2f%%]\" % (100*cross_val_scores_rfc.mean(), 100*cross_val_scores_rfc.std()))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "6785766d",
+   "metadata": {},
+   "source": [
+    "The cross-validation result of RFC is slightly worse than SVM but better than Logistic Regression."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2233,
+   "id": "d58b58c2",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[[ 924  126]\n",
+      "  [  96  954]]\n",
+      "\n",
+      " [[1485   90]\n",
+      "  [ 127  398]]\n",
+      "\n",
+      " [[1435  140]\n",
+      "  [ 133  392]]]\n",
+      "-------------------------------------------------------\n",
+      "              precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.88      0.91      0.90      1050\n",
+      "           1       0.82      0.76      0.79       525\n",
+      "           2       0.74      0.75      0.74       525\n",
+      "\n",
+      "    accuracy                           0.83      2100\n",
+      "   macro avg       0.81      0.80      0.81      2100\n",
+      "weighted avg       0.83      0.83      0.83      2100\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2572c8143d0>"
+      ]
+     },
+     "execution_count": 2233,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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LSLzGXXVRsIDSjlUGMrczV1ZuO1i+/H5JZWL8R68YjPzbvsUHy8be3+J5MFPb2DXsUau+lpSBXOmtuauBzMYMXEX4ZHl5B3x44sPm7B4dgtXh2YKzt4Fz53voGcxDMNl4a9evZqePXuesT85OZkFCxb84fGFhYWEh4fTg/74WJTgPF32uCtcHYLUobi30lwdgtSBCqOMlcffpqCgoNYekX46V7SYOhWvgPO/w6itpIT9jz9eq7HWFpdW9j169MCFvzVERMRMTNzGP6/rs9atW8edd95JYmIihw5V3tXrnXfeYf369TUanIiISI3R7XKr7qOPPqJPnz4EBgby/fff229yU1BQwLPPPlvjAYqIiIhzqp3sn3nmGebMmcPcuXPx9f11nvzKK69k27ZtNRqciIhITdEjbqshPT2da6655oz94eHh5Ofn10RMIiIiNc/Ed9CrdmUfExPjcLncaevXr6dly5Y1EpSIiEiN05x91d17772MGjWKTZs2YbFYyM7OZtGiRTz88MMMHz68NmIUERERJ1S7jT9+/HhsNhvXX389J0+e5JprrsHf35+HH36YBx54oDZiFBERcZqZb6pT7WRvsVh4/PHHGTduHHv27KGoqIj27dsTEhJSG/GJiIjUDBNfZ3/eN9Xx8/Ojffv2NRmLiIiI1IJqJ/uePXtisZx7ReKqVaucCkhERKRWOHv5nJkq+86dOzu8Li8vZ/v27fz0008kJyfXVFwiIiI1S238qnvllVfOuv+pp56iqKjI6YBERESkZp3XvfHP5s477+Qf//hHTZ1ORESkZpn4Ovsae+pdamoqAU48OlBERKQ26dK7ahg4cKDDa8MwOHz4MFu2bGHixIk1FpiIiIjUjGon+/DwcIfXXl5etGnThsmTJ9O7d+8aC0xERERqRrWSvdVqZciQIXTs2JEGDRrUVkwiIiI1z8Sr8au1QM/b25vevXvr6XYiIuJ2zPyI22qvxu/QoQP79u2rjVhERESkFlQ72T/zzDM8/PDDLF++nMOHD1NYWOiwiYiI1FsmvOwOqjFnP3nyZB566CFuvPFGAG655RaH2+YahoHFYsFqtdZ8lCIiIs4y8Zx9lZP9008/zX333cc333xTm/GIiIhIDatysjeMyp801157ba0FIyIiUlt0U50q+r2n3YmIiNRrauNXzYUXXviHCT8vL8+pgERERKRm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xYsX88knnxAaGmpfgxMeHk5gYKCLoxNPoUvv3Mxrr73GCy+8QE5ODp07d2bGjBl0797d1WFJDVu9ejU9e/Y8Y39ycjILFiyo+4Ck1lgslrPunz9/PnfffXfdBiMeS8leRETEw2nOXkRExMMp2YuIiHg4JXsREREPp2QvIiLi4ZTsRUREPJySvYiIiIdTshcREfFwSvYiIiIeTslexEl33303AwYMsL/u0aMHo0ePrvM4Vq9ejcViIT8//5xjLBYLS5curfI5n3rqKTp37uxUXPv378disbB9+3anziMi50/JXjzS3XffjcViwWKx4OfnR6tWrZg8eTIVFRW1/tkff/wxU6ZMqdLYqiRoERFn6UE44rFuuOEG5s+fT2lpKZ9//jkjRozA19eXCRMmnDG2rKwMPz+/GvncyMjIGjmPiEhNUWUvHsvf35+YmBji4+MZPnw4vXr14tNPPwV+bb1PnTqV2NhY2rRpA0BWVhaDBg0iIiKCyMhI+vfvz/79++3ntFqtjB07loiICBo2bMgjjzzCbx8v8ds2fmlpKY8++ihxcXH4+/vTqlUr5s2bx/79++0Pu2nQoAEWi8X+4BObzUZKSgoJCQkEBgbSqVMn/vWvfzl8zueff86FF15IYGAgPXv2dIizqh599FEuvPBCgoKCaNmyJRMnTqS8vPyMcW+88QZxcXEEBQUxaNAgCgoKHN5/6623aNeuHQEBAbRt25bXX3+92rGISO1RshfTCAwMpKyszP565cqVpKens2LFCpYvX055eTl9+vQhNDSUdevW8e233xISEsINN9xgP+6ll15iwYIF/OMf/2D9+vXk5eWxZMmS3/3c//u//+Pdd99lxowZpKWl8cYbbxASEkJcXBwfffQRAOnp6Rw+fJhXX30VgJSUFBYuXMicOXPYsWMHY8aM4c4772TNmjVA5Y+SgQMHcvPNN7N9+3buuecexo8fX+3/n4SGhrJgwQJ27tzJq6++yty5c3nllVccxuzZs4cPPviAZcuW8eWXX/L9999z//33299ftGgRkyZNYurUqaSlpfHss88yceJE3n777WrHIyK1xBDxQMnJyUb//v0NwzAMm81mrFixwvD39zcefvhh+/vR0dFGaWmp/Zh33nnHaNOmjWGz2ez7SktLjcDAQOPf//63YRiG0aRJE2PatGn298vLy41mzZrZP8swDOPaa681Ro0aZRiGYaSnpxuAsWLFirPG+c033xiAcfz4cfu+kpISIygoyNiwYYPD2KFDhxp33HGHYRiGMWHCBKN9+/YO7z/66KNnnOu3AGPJkiXnfP+FF14wunbtan/95JNPGt7e3sbBgwft+7744gvDy8vLOHz4sGEYhnHBBRcYixcvdjjPlClTjMTERMMwDCMjI8MAjO+///6cnysitUtz9uKxli9fTkhICOXl5dhsNv7617/y1FNP2d/v2LGjwzz9Dz/8wJ49ewgNDXU4T0lJCXv37qWgoIDDhw/TvXt3+3s+Pj5069btjFb+adu3b8fb25trr722ynHv2bOHkydP8qc//clhf1lZGV26dAEgLS3NIQ6AxMTEKn/Gae+//z4zZsxg7969FBUVUVFRQVhYmMOY5s2b07RpU4fPsdlspKenExoayt69exk6dCj33nuvfUxFRQXh4eHVjkdEaoeSvXisnj17Mnv2bPz8/IiNjcXHx/Gfe3BwsMProqIiunbtyqJFi844V+PGjc8rhsDAwGofU1RUBMBnn33mkGShch1CTUlNTSUpKYmnn36aPn36EB4eznvvvcdLL71U7Vjnzp17xo8Pb2/vGotVRJyjZC8eKzg4mFatWlV5/CWXXML7779PVFTUGdXtaU2aNGHTpk1cc801QGUFu3XrVi655JKzju/YsSM2m401a9bQq1evM94/3VmwWq32fe3bt8ff35/MzMxzdgTatWtnX2x42saNG//4S/6PDRs2EB8fz+OPP27fd+DAgTPGZWZmkp2dTWxsrP1zvLy8aNOmDdHR0cTGxrJv3z6SkpKq9fkiUne0QE/kv5KSkmjUqBH9+/dn3bp1ZGRksHr1ah588EEOHjwIwKhRo3juuedYunQpP//8M/fff//vXiPfokULkpOT+dvf/sbSpUvt5/zggw8AiI+Px2KxsHz5co4ePUpRURGhoaE8/PDDjBkzhrfffpu9e/eybds2Zs6caV/0dt9997F7927GjRtHeno6ixcvZsGCBdX6vq1btyYzM5P33nuPvXv3MmPGjLMuNgwICCA5OZkffviBdevW8eCDDzJo0CBiYmIAePrpp0lJSWHGjBns2rWLH3/8kfnz5/Pyyy9XKx4RqT1K9iL/FRQUxNq1a2nevDkDBw6kXbt2DB06lJKSEnul/9BDD3HXXXeRnJxMYmIioaGh/PnPf/7d886ePZvbbruN+++/n7Zt23LvvfdSXFwMQNOmTXn66acZP3480dHRjBw5EoApU6YwceJEUlJSaNeuHTfccAOfffYZCQkJQOU8+kcffcTSpUvp1KkTc+bM4dlnn63W973lllsYM2YMI0eOpHPnzmzYsIGJEyeeMa5Vq1YMHDiQG2+8kd69e3PxxRc7XFp3zz338NZbbzF//nw6duzItddey4IFC+yxiojrWYxzrSwSERERj6DKXkRExMMp2YuIiHg4JXsREREPp2QvIiLi4ZTsRUREPJySvYiIiIdTshcREfFwSvYiIiIeTsleRETEwynZi4iIeDglexEREQ/3/2vCYroRWTi8AAAAAElFTkSuQmCC",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_pred = clf_rfc.predict(X_test)\n",
+    "print(multilabel_confusion_matrix(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "print('-'*55)\n",
+    "print (classification_report(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "ConfusionMatrixDisplay.from_predictions(y_test, y_pred, labels=[0, 1, 2])"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "60a41aed",
+   "metadata": {},
+   "source": [
+    "##### iv.\tAdaBoost Classifier with Decision Tree Classifier "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2234,
+   "id": "c759af37",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "AdaBoost Classifier with Decision Tree Classifier score =  0.91\n",
+      "AdaBoost Classifier with Decision Tree Classifier accuracy score = 91.00%\n"
+     ]
+    }
+   ],
+   "source": [
+    "from sklearn.ensemble import AdaBoostClassifier\n",
+    "from sklearn.tree import DecisionTreeClassifier\n",
+    "\n",
+    "base_est = DecisionTreeClassifier(max_depth=6)\n",
+    "clf_adc = AdaBoostClassifier(estimator=base_est, learning_rate=0.1, random_state=10).fit(X_train, y_train)\n",
+    "score_adc = clf_adc.score(X_test, y_test)\n",
+    "print(\"AdaBoost Classifier with Decision Tree Classifier score = \", score_adc)\n",
+    "print(\"AdaBoost Classifier with Decision Tree Classifier accuracy score = %0.2f%%\" % (score_adc*100))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "477171e3",
+   "metadata": {},
+   "source": [
+    "AdaBoost with Decision Tree returns a better accuracy score compared to the other models which is >90%. Linear separation was expected to be difficult and Decision Tree were better able to separate classess on features. Let's check its cross-validation."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2235,
+   "id": "931d8c8d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[0.91530999 0.90239335 0.92099101 0.88686561 0.92409902]\n",
+      "5-fold cross-validation accuracy [90.99%] with standard deviation [1.37%]\n"
+     ]
+    }
+   ],
+   "source": [
+    "cross_val_scores_adc = cross_val_score(clf_adc, X, y, cv=kfold, scoring='f1_macro')\n",
+    "print (cross_val_scores_adc)\n",
+    "print (\"5-fold cross-validation accuracy [%0.2f%%] with standard deviation [%0.2f%%]\" % (100*cross_val_scores_adc.mean(), 100*cross_val_scores_adc.std()))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "43b2389f",
+   "metadata": {},
+   "source": [
+    "The cross-validation returns only a slightly better result compared to SVM. However, the standard deviation is still quite high compared to SVM."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2236,
+   "id": "20132e23",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[[1008   42]\n",
+      "  [  23 1027]]\n",
+      "\n",
+      " [[1522   53]\n",
+      "  [  94  431]]\n",
+      "\n",
+      " [[1481   94]\n",
+      "  [  72  453]]]\n",
+      "-------------------------------------------------------\n",
+      "              precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.96      0.98      0.97      1050\n",
+      "           1       0.89      0.82      0.85       525\n",
+      "           2       0.83      0.86      0.85       525\n",
+      "\n",
+      "    accuracy                           0.91      2100\n",
+      "   macro avg       0.89      0.89      0.89      2100\n",
+      "weighted avg       0.91      0.91      0.91      2100\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2572c813310>"
+      ]
+     },
+     "execution_count": 2236,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_pred = clf_adc.predict(X_test)\n",
+    "print(multilabel_confusion_matrix(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "print('-'*55)\n",
+    "print (classification_report(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "ConfusionMatrixDisplay.from_predictions(y_test, y_pred, labels=[0, 1, 2])"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "68f91410",
+   "metadata": {},
+   "source": [
+    "##### v.\tExtreme Gradient Boosting (XGBoost) Classifier "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2237,
+   "id": "07757123",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "XGBoost Classifier score =  0.9504761904761905\n",
+      "XGBoost Classifier accuracy score = 95.05%\n"
+     ]
+    }
+   ],
+   "source": [
+    "from xgboost import XGBClassifier\n",
+    "\n",
+    "clf_xgb = XGBClassifier(learning_rate=0.2, n_estimators=70, max_depth=10, min_child_weight=1, gamma=0, subsample=1.0, colsample_bytree=0.6, random_state=10).fit(X_train, y_train)\n",
+    "score_xgb = clf_xgb.score(X_test, y_test)\n",
+    "print(\"XGBoost Classifier score = \", score_xgb)\n",
+    "print(\"XGBoost Classifier accuracy score = %0.2f%%\" % (score_xgb*100))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "d98c9a87",
+   "metadata": {},
+   "source": [
+    "XGBoost Classifier returns a higher accuracy score than AdaBoost."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2238,
+   "id": "314688f3",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[0.94979319 0.9582466  0.95606921 0.94441792 0.95079785]\n",
+      "5-fold cross-validation accuracy [95.19%] with standard deviation [0.49%]\n"
+     ]
+    }
+   ],
+   "source": [
+    "cross_val_scores_xgb = cross_val_score(clf_xgb, X, y, cv=kfold, scoring='f1_macro')\n",
+    "print (cross_val_scores_xgb)\n",
+    "print (\"5-fold cross-validation accuracy [%0.2f%%] with standard deviation [%0.2f%%]\" % (100*cross_val_scores_xgb.mean(), 100*cross_val_scores_xgb.std()))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "8a03daef",
+   "metadata": {},
+   "source": [
+    "The cross-validation result is the best yet with the smallest standard deviation."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2239,
+   "id": "7aaf0b95",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[[1023   27]\n",
+      "  [  14 1036]]\n",
+      "\n",
+      " [[1541   34]\n",
+      "  [  42  483]]\n",
+      "\n",
+      " [[1532   43]\n",
+      "  [  48  477]]]\n",
+      "-------------------------------------------------------\n",
+      "              precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.97      0.99      0.98      1050\n",
+      "           1       0.93      0.92      0.93       525\n",
+      "           2       0.92      0.91      0.91       525\n",
+      "\n",
+      "    accuracy                           0.95      2100\n",
+      "   macro avg       0.94      0.94      0.94      2100\n",
+      "weighted avg       0.95      0.95      0.95      2100\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2572ca26650>"
+      ]
+     },
+     "execution_count": 2239,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGwCAYAAAA0bWYRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABAwUlEQVR4nO3de1xUdfoH8M8MONxnEIwZUVDMGyh5j0jTTBIvla7uum5YZKZbgXnJayneUkq7GGZaVqK7mnbTkl+5EuYtERXFTBFvqCgOWAgjGDDMOb8/WKYmmZVhZhiY83m/Xuf12jnne848A5vz8Dzf8z0yURRFEBERkWTJHR0AERERORaTASIiIoljMkBERCRxTAaIiIgkjskAERGRxDEZICIikjgmA0RERBLn6ugArCEIAvLz8+Hj4wOZTObocIiIyEKiKOLWrVsIDAyEXG6/v0/Ly8tRWVlp9XUUCgXc3d1tEFHj0qSTgfz8fAQFBTk6DCIislJeXh5at25tl2uXl5cjpI03tIUGq6+l0WiQm5vrdAlBk04GfHx8AACXj7WF0psdD2f3l47hjg6BiGysCnocwLfGf8/tobKyEtpCAy5ntoXSp/7fFbpbAtr0uoTKykomA41JTWtA6S236hdMTYOrrJmjQyAiW/vvgvgN0er19pHB26f+7yPAedvRTToZICIiqiuDKMBgxdN4DKJgu2AaGSYDREQkCQJECKh/NmDNuY0da+tEREQSx8oAERFJggAB1hT6rTu7cWMyQEREkmAQRRjE+pf6rTm3sWObgIiISOKYDBARkSTUTCC0ZrPEvn378PjjjyMwMBAymQzbt283OS6KIhISEtCyZUt4eHggKioK586dMxlTVFSEmJgYKJVK+Pr6YsKECSgtLTUZ89NPP+Ghhx6Cu7s7goKCsHz5cot/NkwGiIhIEgSIMFixWZoMlJWVoVu3bli9enWtx5cvX46kpCSsXbsWGRkZ8PLyQnR0NMrLy41jYmJicOrUKaSmpiIlJQX79u3DpEmTjMd1Oh0GDx6MNm3aIDMzEytWrMDChQvx4YcfWhQr5wwQERHZwdChQzF06NBaj4miiJUrV2LevHkYMWIEAGDjxo1Qq9XYvn07xo4di+zsbOzcuRNHjhxB7969AQCrVq3CsGHD8OabbyIwMBCbNm1CZWUlPvnkEygUCnTp0gVZWVl4++23TZKGu2FlgIiIJMFWbQKdTmeyVVRUWBxLbm4utFotoqKijPtUKhUiIiKQnp4OAEhPT4evr68xEQCAqKgoyOVyZGRkGMf0798fCoXCOCY6Oho5OTm4efNmneNhMkBERJJQczeBNRsABAUFQaVSGbfExESLY9FqtQAAtVptsl+tVhuPabVaBAQEmBx3dXWFn5+fyZjarvHH96gLtgmIiIgskJeXB6VSaXzt5ubmwGhsg5UBIiKSBMEGGwAolUqTrT7JgEajAQAUFBSY7C8oKDAe02g0KCwsNDleVVWFoqIikzG1XeOP71EXTAaIiEgSrLmToGazlZCQEGg0GqSlpRn36XQ6ZGRkIDIyEgAQGRmJ4uJiZGZmGsfs3r0bgiAgIiLCOGbfvn3Q6/XGMampqejUqROaN29e53iYDBARkSQYROs3S5SWliIrKwtZWVkAqicNZmVl4cqVK5DJZJg6dSpee+01fPPNNzh58iSefvppBAYGYuTIkQCA0NBQDBkyBBMnTsThw4fx448/Ij4+HmPHjkVgYCAA4Mknn4RCocCECRNw6tQpbN26Fe+++y6mT59uUaycM0BERGQHR48excCBA42va76gY2NjkZycjFmzZqGsrAyTJk1CcXEx+vXrh507d8Ld3d14zqZNmxAfH49BgwZBLpdj9OjRSEpKMh5XqVTYtWsX4uLi0KtXL7Ro0QIJCQkW3VYIADJRbLqLLet0OqhUKtw82w5KHxY5nF10YHdHh0BENlYl6rEHX6OkpMRkUp4t1XxXZJ0OgI8V3xW3bgnoHlZo11gdhZUBIiKSBAEyGCCz6nxnxT+niYiIJI6VASIikgRBrN6sOd9ZMRkgIiJJMFjZJrDm3MaObQIiIiKJY2WAiIgkgZUB85gMEBGRJAiiDIJoxd0EVpzb2LFNQEREJHGsDBARkSSwTWAekwEiIpIEA+QwWFEQN9gwlsaGyQAREUmCaOWcAZFzBoiIiMhZsTJARESSwDkD5jEZICIiSTCIchhEK+YMOPFyxGwTEBERSRwrA0REJAkCZBCs+BtYgPOWBpgMEBGRJHDOgHlsExAREUkcKwNERCQJ1k8gZJuAiIioSaueM2DFg4rYJiAiIiJnxcoAERFJgmDlswl4NwEREVETxzkD5jEZICIiSRAg5zoDZnDOABERkcSxMkBERJJgEGUwWPEYYmvObeyYDBARkSQYrJxAaGCbgIiIiJwVKwNERCQJgiiHYMXdBALvJiAiImra2CYwj20CIiIiiWNlgIiIJEGAdXcECLYLpdFhMkBERJJg/aJDzltMd95PRkRERHXCygAREUmC9c8mcN6/n5kMEBGRJAiQQYA1cwa4AiEREVGTxsqAeUwGHOTkIS98/n4Azp30RFFBMyz4OBcPDi0xHhdFYOMKDXZu9kepzgVhvcvw0ut5aNWu0jhmQWwILpzyQPGvrvBRGdDjoVuY8Go+/DVVJtf5Yu09+G6TPwqvKqD0q8Jjsb/iySkFDfp5yTLjXtbiqZdNf0d5593wXP/ODoqI7MnDy4DYWVo8OLQEvv5VuHDKA2vmt8LZE56ODo0kolGkOatXr0bbtm3h7u6OiIgIHD582NEh2V35bTnadfkN8cuu1nr8s9UB+PqTezD59Ty8m3IW7p4CXnnyXlSW/16m6ta3FK9+cAkf78/GvHW5yL/khiUTQ0yus2Z+K+zc7I+J8/Px0b4zWJSci07dy+z62cg2Lp1xx9huYcZt+sj2jg6J7GTaW3no2f8Wlk8OxvODOiFzrw9e33oB/hq9o0NzKjWLDlmzOSuHVwa2bt2K6dOnY+3atYiIiMDKlSsRHR2NnJwcBAQEODo8u+nzyC30eeRWrcdEEdj+0T34xxQtHhyiAwDMSrqMv3frioM7VXh4ZDEAYNSkG8Zz1K31+Ht8ARY9G4IqPeDaDLhyzg0pG1vgg91nENS+AgCgCbbv5yLbMRiAmzeaOToMsjOFu4B+w0qwcHwIfs7wBgD8+y0NHnhUh8ee/gUblrd0cITOQxBlEKxZZ8CJn1ro8DTn7bffxsSJEzF+/HiEhYVh7dq18PT0xCeffOLo0BxGe0WBosJm6PlQqXGfl1JA5x63kZ3pVes5upsu2P1Vc4T1LoPrf78/Du1SoWVwBTK+V+LpiFA8fX8Y3nk5CLqbLg3xMchKrUIqsfnYKSSnZ2P2e5dxT6vKu59ETY6LiwgXV6CywvSLpqJchi73s4pHDcOhyUBlZSUyMzMRFRVl3CeXyxEVFYX09PQ7xldUVECn05lszqiosLpg43uPaYnQ9x698ViNj15riSfuDcffuoTjRr4CC9fnGo9dv6JAwTUF9qf4YmbSFby88grO/eSB1ya1tftnIOucOeaJN6cG4dWYdlg1pxU0wZV4a9t5eHgZHB0a2dhvZS44fdQTT04tgJ9aD7lcxCOjbiK01234qavufgGqM8HKFgEXHbKTX375BQaDAWq12mS/Wq2GVqu9Y3xiYiJUKpVxCwoKaqhQG62/vVCI93edxbJPz0MuF7FiSjBqHqwlCoC+Qo6Z715BeEQZuj1Yimlv5eHEjz7IO+/m2MDpfzr6gxL7U3yRm+2BzL1KzBvXDt5KA/o/Uezo0MgOlk8OhkwGfHr8NFIu/YSRE25gz3ZfiM68/q0D1Dy10JrNWTWpTzZ37lyUlJQYt7y8PEeHZBd+AdV/DRT/qV9cfKOZ8VgNlb8Bre+tQK8BpZi75jIOp6mQnelpvI6Lq4jW91YYxwd3KAcAFF5jL7opKdO54OpFNwS2ZavAGV2/7IaZo9vjiXu7YlzvMLw0vCNcm4m4flnh6NBIIhyaDLRo0QIuLi4oKDC9haqgoAAajeaO8W5ublAqlSabM9IEV8IvQI/jB7yN+8puyXHmuCdCe5nvIdb8FaGvrP61dulTBkOVDPmXfv8H5erF6oqAujVnKTcl7p4GBLapvKNNRM6l4jcXFBU2g7eqCr0G3EL6f1SODsmpGCCzenNWDv2XRaFQoFevXkhLS8PIkSMBAIIgIC0tDfHx8Y4Mze5+K5MjP/f3Ur02T4ELP3vAx7cKAa31GPncDXz6rhqtQiqgCa7EhuUt4a/W48Eh1WsRnDnmiZwsT3S9vwzevlW4fskNG5Zr0LJthTFh6NH/FtqH38bb04Px/KJrEEXgvVdao2d/nUm1gBqfiQn5OLRLicKrCvhr9HhqhhYGAdizrbmjQyM76DVAB5kMyLvghlYhlXhufj7yzrtj11Y/R4fmVKwt9Ttzm8Dhf2ZMnz4dsbGx6N27N+6//36sXLkSZWVlGD9+vKNDs6uzJzwx66+/3zf+wcJWAIBHxxRhxsorGBNXiPLbcrw7KwilOhd06VOGpZsuQuFePSHAzUPAj9+p8K+3NCi/LYdfgB69B97Cq1MuQ+FWPUYuBxZvuIjV81pjxqj2cPcU0HugDpMW5Df8ByaLtGipx9z3L8OnuQElv7ri1BEvTH2sA0qKHP6fLNmBl1LA+LnX0aKlHreKXfDjtyqsf70lDFXO+5coNS4yUayZbuY47733HlasWAGtVovu3bsjKSkJERERdz1Pp9NBpVLh5tl2UPo4b8ZG1aIDuzs6BCKysSpRjz34GiUlJXZr/dZ8VyRkRMHdu/7zpcpL9Vgc8b1dY3WURvFnRnx8vNO3BYiIyLHYJjCvUSQDRERE9sYHFZnnvJ+MiIiI6oSVASIikgQRMghW3B4o8tZCIiKipo1tAvOc95MRERFRnbAyQEREksBHGJvHZICIiCSh5umD1pzvrJz3kxEREVGdsDJARESSwDaBeUwGiIhIEgTIIVhRELfm3MbOeT8ZERER1QkrA0REJAkGUQaDFaV+a85t7FgZICIiSaiZM2DNZgmDwYD58+cjJCQEHh4euPfee7FkyRL88WHBoigiISEBLVu2hIeHB6KionDu3DmT6xQVFSEmJgZKpRK+vr6YMGECSktLbfIzqcFkgIiIJEH871ML67uJFq5A+MYbb2DNmjV47733kJ2djTfeeAPLly/HqlWrjGOWL1+OpKQkrF27FhkZGfDy8kJ0dDTKy8uNY2JiYnDq1CmkpqYiJSUF+/btw6RJk2z2cwHYJiAiIrKLgwcPYsSIERg+fDgAoG3btvj0009x+PBhANVVgZUrV2LevHkYMWIEAGDjxo1Qq9XYvn07xo4di+zsbOzcuRNHjhxB7969AQCrVq3CsGHD8OabbyIwMNAmsbIyQEREkmCAzOoNAHQ6nclWUVFR6/s9+OCDSEtLw9mzZwEAJ06cwIEDBzB06FAAQG5uLrRaLaKiooznqFQqREREID09HQCQnp4OX19fYyIAAFFRUZDL5cjIyLDZz4aVASIikgRBtG6tAOG/rf6goCCT/QsWLMDChQvvGD9nzhzodDp07twZLi4uMBgMWLp0KWJiYgAAWq0WAKBWq03OU6vVxmNarRYBAQEmx11dXeHn52ccYwtMBoiIiCyQl5cHpVJpfO3m5lbruM8++wybNm3C5s2b0aVLF2RlZWHq1KkIDAxEbGxsQ4VbJ0wGiIhIEmomAlpzPgAolUqTZMCcmTNnYs6cORg7diwAIDw8HJcvX0ZiYiJiY2Oh0WgAAAUFBWjZsqXxvIKCAnTv3h0AoNFoUFhYaHLdqqoqFBUVGc+3Bc4ZICIiSRAgs3qzxO3btyGXm37Nuri4QBAEAEBISAg0Gg3S0tKMx3U6HTIyMhAZGQkAiIyMRHFxMTIzM41jdu/eDUEQEBERUd8fxR1YGSAiIrKDxx9/HEuXLkVwcDC6dOmC48eP4+2338azzz4LAJDJZJg6dSpee+01dOjQASEhIZg/fz4CAwMxcuRIAEBoaCiGDBmCiRMnYu3atdDr9YiPj8fYsWNtdicBwGSAiIgkoqFXIFy1ahXmz5+PF198EYWFhQgMDMQ///lPJCQkGMfMmjULZWVlmDRpEoqLi9GvXz/s3LkT7u7uxjGbNm1CfHw8Bg0aBLlcjtGjRyMpKanen6M2MvGPSyE1MTqdDiqVCjfPtoPShx0PZxcd2N3RIRCRjVWJeuzB1ygpKalTH74+ar4rxqaNg8JbUe/rVJZWYsugf9s1VkfhNygREZHEsU1ARESSIMDy5wv8+XxnxWSAiIgkQazHHQF/Pt9ZMRkgIiJJqM+TB/98vrPinAEiIiKJY2WAiIgkwVYrEDojJgNERCQJbBOY57xpDhEREdUJKwNERCQJ9Xm+wJ/Pd1ZMBoiISBLYJjCPbQIiIiKJY2WAiIgkgZUB85gMEBGRJDAZMI9tAiIiIoljZYCIiCSBlQHzmAwQEZEkiLDu9kDRdqE0OkwGiIhIElgZMI9zBoiIiCSOlQEiIpIEVgbMYzJARESSwGTAPLYJiIiIJI6VASIikgRWBsxjMkBERJIgijKIVnyhW3NuY8c2ARERkcSxMkBERJIgQGbVokPWnNvYMRkgIiJJ4JwB89gmICIikjhWBoiISBI4gdA8JgNERCQJbBOYx2SAiIgkgZUB8zhngIiISOKcojLwl47hcJU1c3QYZGe5yyIdHQI1oHtfO+HoEKgByMVK4HbDvJdoZZvAmSsDTpEMEBER3Y0IQBStO99ZsU1AREQkcawMEBGRJAiQQcYVCGvFZICIiCSBdxOYxzYBERGRxLEyQEREkiCIMsi46FCtmAwQEZEkiKKVdxM48e0EbBMQERFJHCsDREQkCZxAaB6TASIikgQmA+YxGSAiIkngBELzOGeAiIhI4lgZICIiSeDdBOYxGSAiIkmoTgasmTNgw2AaGbYJiIiIJI6VASIikgTeTWAekwEiIpIE8b+bNec7K7YJiIiIJI6VASIikgS2CcxjMkBERNLAPoFZTAaIiEgarKwMwIkrA5wzQEREJHGsDBARkSRwBULzmAwQEZEkcAKheWwTEBERSRwrA0REJA2izLpJgE5cGWAyQEREksA5A+axTUBERCRxrAwQEZE0cNEhs1gZICIiSai5m8CazVLXrl3DuHHj4O/vDw8PD4SHh+Po0aN/iElEQkICWrZsCQ8PD0RFReHcuXMm1ygqKkJMTAyUSiV8fX0xYcIElJaWWv3z+KM6VQa++eabOl/wiSeeqHcwREREzuLmzZvo27cvBg4ciO+++w733HMPzp07h+bNmxvHLF++HElJSdiwYQNCQkIwf/58REdH4/Tp03B3dwcAxMTE4Pr160hNTYVer8f48eMxadIkbN682Wax1ikZGDlyZJ0uJpPJYDAYrImHiIjIfmxQ6tfpdCav3dzc4Obmdse4N954A0FBQVi/fr1xX0hIyO+hiCJWrlyJefPmYcSIEQCAjRs3Qq1WY/v27Rg7diyys7Oxc+dOHDlyBL179wYArFq1CsOGDcObb76JwMBA6z8Q6tgmEAShThsTASIiaqxs1SYICgqCSqUybomJibW+3zfffIPevXvjb3/7GwICAtCjRw+sW7fOeDw3NxdarRZRUVHGfSqVChEREUhPTwcApKenw9fX15gIAEBUVBTkcjkyMjJs9rOxagJheXm5sYxBRETUqNloAmFeXh6USqVxd21VAQC4ePEi1qxZg+nTp+OVV17BkSNH8NJLL0GhUCA2NhZarRYAoFarTc5Tq9XGY1qtFgEBASbHXV1d4efnZxxjCxZPIDQYDFiyZAlatWoFb29vXLx4EQAwf/58fPzxxzYLjIiIqDFSKpUmm7lkQBAE9OzZE8uWLUOPHj0wadIkTJw4EWvXrm3giO/O4mRg6dKlSE5OxvLly6FQKIz7u3btio8++simwREREdmOzAZb3bVs2RJhYWEm+0JDQ3HlyhUAgEajAQAUFBSYjCkoKDAe02g0KCwsNDleVVWFoqIi4xhbsDgZ2LhxIz788EPExMTAxcXFuL9bt244c+aMzQIjIiKyKdEGmwX69u2LnJwck31nz55FmzZtAFRPJtRoNEhLSzMe1+l0yMjIQGRkJAAgMjISxcXFyMzMNI7ZvXs3BEFARESEZQH9DxbPGbh27Rrat29/x35BEKDX620SFBERUVM3bdo0PPjgg1i2bBnGjBmDw4cP48MPP8SHH34IoPoOvKlTp+K1115Dhw4djLcWBgYGGu/iCw0NxZAhQ4ztBb1ej/j4eIwdO9ZmdxIA9UgGwsLCsH//fmNmU+OLL75Ajx49bBYYERGRTTXwCoR9+vTBtm3bMHfuXCxevBghISFYuXIlYmJijGNmzZqFsrIyTJo0CcXFxejXrx927txpMjl/06ZNiI+Px6BBgyCXyzF69GgkJSVZ8UHuZHEykJCQgNjYWFy7dg2CIOCrr75CTk4ONm7ciJSUFJsGR0REZDMOeGrhY489hscee8zscZlMhsWLF2Px4sVmx/j5+dl0gaHaWDxnYMSIEdixYwe+//57eHl5ISEhAdnZ2dixYwceffRRe8RIREREdlSvdQYeeughpKam2joWIiIiu+EjjM2r96JDR48eRXZ2NoDqeQS9evWyWVBEREQ2x6cWmmVxMnD16lX84x//wI8//ghfX18AQHFxMR588EFs2bIFrVu3tnWMREREZEcWzxl47rnnoNfrkZ2djaKiIhQVFSE7OxuCIOC5556zR4xERETWq5lAaM3mpCyuDOzduxcHDx5Ep06djPs6deqEVatW4aGHHrJpcERERLYiE6s3a853VhYnA0FBQbUuLmQwGGy6AAIREZFNcc6AWRa3CVasWIHJkyfj6NGjxn1Hjx7FlClT8Oabb9o0OCIiIrK/OlUGmjdvDpns915JWVkZIiIi4OpafXpVVRVcXV3x7LPPGpdQJCIialQcsOhQU1GnZGDlypV2DoOIiMjO2CYwq07JQGxsrL3jICIiIgep96JDAFBeXo7KykqTfUql0qqAiIiI7IKVAbMsnkBYVlaG+Ph4BAQEwMvLC82bNzfZiIiIGiXRBpuTsjgZmDVrFnbv3o01a9bAzc0NH330ERYtWoTAwEBs3LjRHjESERGRHVncJtixYwc2btyIhx9+GOPHj8dDDz2E9u3bo02bNti0aZPJc5qJiIgaDd5NYJbFlYGioiK0a9cOQPX8gKKiIgBAv379sG/fPttGR0REZCM1KxBaszkriysD7dq1Q25uLoKDg9G5c2d89tlnuP/++7Fjxw7jg4vI9uRyEeNe1mLQ6GI0v0ePXwuaIfUzP2xeGQDAebNVZzcp/Dhm9MpA8ulwLDvcFwDQwuM2ZvdOx4OBV+HlqkeuzhdrfuqJXZfbGc9b88h3CPX7Ff4ev6Gkwg3p11thxdEHUPibl6M+CtXB8Ce1GP5kAdStKwAAl895YPOq1ji678/zrUQs/vgM+gwoxuLnOyH9e7+GD5YkxeLKwPjx43HixAkAwJw5c7B69Wq4u7tj2rRpmDlzpkXX2rdvHx5//HEEBgZCJpNh+/btloYjGWPiCvFY7K9Y/WorTBzQGR8vbYm/vViIERN+cXRoVE/h/oX4e8fTOFPkb7J/eb/dCFEW44W0IXj86zHYdTkE7w5IRajf77/rDG0gpux9FNFfjcXkHwYjyEeHpIG7GvojkIV+0SqwfkUwJo8Ix0sjw3EiXYWEtTkI7nDbZNzI8dederKaw3ACoVkWVwamTZtm/N9RUVE4c+YMMjMz0b59e9x3330WXausrAzdunXDs88+i1GjRlkaiqSE9S5D+n9UOJxWfetmwVUFBo4sRqfut+9yJjVGnq56vNk/DfMPDsAL3TJNjvUI0GJhen/89IsaALDmp154JuwndPW/geyiFgCA5NPdjOPzy3zw4ckeeP+RnXCVGVAlujTcByGLZOw2/Qt/w9vBGP6kFp2738KVc54AgHahZRg94TpeGhmOzYcya7sMkc1Ztc4AALRp0wZt2rSp17lDhw7F0KFDrQ1BEk4f9cLQcb+iVbsKXLvohnZhv6HL/WX4YCEfDtUULXhgP/ZcDcbB663vSAaOF2owLOQ89lwNhq7SDcNCLsDNxYAMbe2/a5WiHE+0O4fjhRomAk2IXC7ioaG/wt1TwJnjPgAAN3cDZr9zDqsXhuDmLwoHR+h8ZLDyqYU2i6TxqVMykJSUVOcLvvTSS/UO5m4qKipQUVFhfK3T6ez2Xo3N1vcC4OljwEf7zkAwAHIXIPl1DX7YxrUdmprhIecR5v8LRqfUXg2bsvdRrByQiiNPJkMvyFFe5Yq4H6Jx5ZbKZNyMXocwrvPP8GxWheOFavwzjYl1U9C2Yxne/vxnKNwE/HbbBUte6IQr56urApNevYTTx3xwiHMEqIHVKRl455136nQxmUxm12QgMTERixYtstv1G7P+TxTjkVHFeD0uGJdz3HFvl9/w/KJ8/FrQDN9/zn84mgqNZylevf9HjN/1GCoNtf/nN7XHESgVlYj9z2O4We6OqOBLePfhVDz57QicLf59fsHHP3fDF+c6I9DrFiZ3z8TyfrsxKW0onPvvl6bvaq4H4p64D17eBvQb+iteXnEes57sgpZtytEtUof4Jyxrt5IFeGuhWXVKBnJzc+0dR53MnTsX06dPN77W6XQICgpyYEQNZ+L869j6XgD2fl1dCbh0xgMBrfUYO7mQyUAT0rXFDbTw+A3bHv/CuM9VLqKP+jrGdf4Z0dvG4qnQnzFs+xicL67+vZ652QK91dcRE3oKC9L7G8+7WeGBmxUeuKTzxYWS5tg/5t/ofk8Bsm5oGvxzUd1V6eW4ftkDAHD+lDc6hpdhROx1VJbL0TK4HF8cO2wy/tXVOTh1VInZMV0cEa5z4XLEZlk9Z6Ahubm5wc3NzdFhOISbuwBRMN0nGACZM9/46oTS81th+PYxJvte7/cDLpb44sOTPeDhUgUAEP/0F4hBlEH+P/4lkv/3/wcKF4ONIyZ7k8lFNFOI+Pe7rbDzM7XJsbXfncCHS9siYzfbgWRfTSoZkLJDqUqMfakQhdcU1W2Crr9h1D9vYNcWVgWakrIqBc4Vm/7Oble54maFO84V+8FVZsAlnRKLI/fhjaMP4GaFOx4NvoS+gVfxz++r5wTc16IA97W4gcxCDUoq3BDso8OUHodxWafE8UJWBRqzZ2ZcxtG9zVGYr4CnlwEPP/EL7ovQYd74UNz8RVHrpMEb+W4ouOrugGidECsDZjk0GSgtLcX58+eNr3Nzc5GVlQU/Pz8EBwc7MLLG5/15rRA7S4v4xKvw9a/CrwXN8O2//LHpHfXdT6Ymo0p0wcTUYZjRKwNrB+2Ep6seV26pMHv/I9h7rfqunfIqVzza5iImdz8Cz2ZVKLztif3XgjB1b0/oBd5N0Jj5+usxY8V5+AVUouyWC3LPeGHe+FAc/9HX0aFJgrWrCDpzIVYmiqLDPt6ePXswcODAO/bHxsYiOTn5rufrdDqoVCo8jBFwlTWzQ4TUmOQui3R0CNSA7n3thKNDoAZQJVZi9+0tKCkpgVKptMt71HxXtF26FHL3+ldZhPJyXHr1VbvG6igOrQw8/PDDcGAuQkREUsI2gVkWL0cMAPv378e4ceMQGRmJa9euAQD+9a9/4cCBAzYNjoiIyGa4HLFZFicDX375JaKjo+Hh4YHjx48bFwEqKSnBsmXLbB4gERER2ZfFycBrr72GtWvXYt26dWjW7Pc+fd++fXHs2DGbBkdERGQrfISxeRbPGcjJyUH//v3v2K9SqVBcXGyLmIiIiGyPKxCaZXFlQKPRmNwOWOPAgQNo165dLWcQERE1ApwzYJbFycDEiRMxZcoUZGRkQCaTIT8/H5s2bcKMGTPwwgsv2CNGIiIisiOL2wRz5syBIAgYNGgQbt++jf79+8PNzQ0zZszA5MmT7REjERGR1bjokHkWJwMymQyvvvoqZs6cifPnz6O0tBRhYWHw9va2R3xERES2wXUGzKr3okMKhQJhYWG2jIWIiIgcwOJkYODAgZDJzM+o3L17t1UBERER2YW1tweyMvC77t27m7zW6/XIysrCzz//jNjYWFvFRUREZFtsE5hlcTLwzjvv1Lp/4cKFKC0ttTogIiIialj1ejZBbcaNG4dPPvnEVpcjIiKyLa4zYJbNnlqYnp4OdyseDUlERGRPvLXQPIuTgVGjRpm8FkUR169fx9GjRzF//nybBUZEREQNw+JkQKVSmbyWy+Xo1KkTFi9ejMGDB9ssMCIiImoYFiUDBoMB48ePR3h4OJo3b26vmIiIiGyPdxOYZdEEQhcXFwwePJhPJyQioiaHjzA2z+K7Cbp27YqLFy/aIxYiIiJyAIuTgddeew0zZsxASkoKrl+/Dp1OZ7IRERE1WrytsFZ1njOwePFivPzyyxg2bBgA4IknnjBZllgURchkMhgMBttHSUREZC3OGTCrzsnAokWL8Pzzz+OHH36wZzxERETUwOqcDIhidUo0YMAAuwVDRERkL1x0yDyLbi38X08rJCIiatTYJjDLomSgY8eOd00IioqKrAqIiIiIGpZFycCiRYvuWIGQiIioKWCbwDyLkoGxY8ciICDAXrEQERHZD9sEZtV5nQHOFyAiInJOFt9NQERE1CSxMmBWnZMBQRDsGQcREZFdcc6AeRY/wpiIiKhJYmXALIufTUBERETOhckAERFJgzUPKbKyqvD6669DJpNh6tSpxn3l5eWIi4uDv78/vL29MXr0aBQUFJicd+XKFQwfPhyenp4ICAjAzJkzUVVVVf9AzGAyQEREklAzZ8CarT6OHDmCDz74APfdd5/J/mnTpmHHjh34/PPPsXfvXuTn52PUqFHG4waDAcOHD0dlZSUOHjyIDRs2IDk5GQkJCdb8GGrFZICIiMhOSktLERMTg3Xr1qF58+bG/SUlJfj444/x9ttv45FHHkGvXr2wfv16HDx4EIcOHQIA7Nq1C6dPn8a///1vdO/eHUOHDsWSJUuwevVqVFZW2jROJgNERCQNNmoT6HQ6k62iosLsW8bFxWH48OGIiooy2Z+ZmQm9Xm+yv3PnzggODkZ6ejoAID09HeHh4VCr1cYx0dHR0Ol0OHXqlBU/iDsxGSAiIkmwVZsgKCgIKpXKuCUmJtb6flu2bMGxY8dqPa7VaqFQKODr62uyX61WQ6vVGsf8MRGoOV5zzJZ4ayEREZEF8vLyoFQqja/d3NxqHTNlyhSkpqbC3d29IcOrF1YGiIhIGmzUJlAqlSZbbclAZmYmCgsL0bNnT7i6usLV1RV79+5FUlISXF1doVarUVlZieLiYpPzCgoKoNFoAAAajeaOuwtqXteMsRUmA0REJA0NeGvhoEGDcPLkSWRlZRm33r17IyYmxvi/mzVrhrS0NOM5OTk5uHLlCiIjIwEAkZGROHnyJAoLC41jUlNToVQqERYWVu8fQ23YJiAiIrIxHx8fdO3a1WSfl5cX/P39jfsnTJiA6dOnw8/PD0qlEpMnT0ZkZCQeeOABAMDgwYMRFhaGp556CsuXL4dWq8W8efMQFxdXazXCGkwGiIhIEmT/3aw535beeecdyOVyjB49GhUVFYiOjsb7779vPO7i4oKUlBS88MILiIyMhJeXF2JjY7F48WIbR8JkgIiIpMLBzybYs2ePyWt3d3esXr0aq1evNntOmzZt8O2331r3xnXAZICIiCSBTy00jxMIiYiIJI6VASIikgY+wtgsJgNERCQdTvyFbg22CYiIiCSOlQEiIpIETiA0j8kAERFJA+cMmMU2ARERkcSxMkBERJLANoF5TAaIiEga2CYwi20CIiIiiXOKyoDM1RUymVN8FPof2i065ugQqAFdTOjp6BCoAQjl5cDiLQ3yXmwTmMdvUCIikga2CcxiMkBERNLAZMAszhkgIiKSOFYGiIhIEjhnwDwmA0REJA1sE5jFNgEREZHEsTJARESSIBNFyMT6/3lvzbmNHZMBIiKSBrYJzGKbgIiISOJYGSAiIkng3QTmMRkgIiJpYJvALLYJiIiIJI6VASIikgS2CcxjMkBERNLANoFZTAaIiEgSWBkwj3MGiIiIJI6VASIikga2CcxiMkBERJLhzKV+a7BNQEREJHGsDBARkTSIYvVmzflOiskAERFJAu8mMI9tAiIiIoljZYCIiKSBdxOYxWSAiIgkQSZUb9ac76zYJiAiIpI4VgaIiEga2CYwi8kAERFJAu8mMI/JABERSQPXGTCLcwaIiIgkjpUBIiKSBLYJzGMyQERE0sAJhGaxTUBERCRxrAwQEZEksE1gHpMBIiKSBt5NYBbbBERERBLHygAREUkC2wTmMRkgIiJp4N0EZrFNQEREJHGsDBARkSSwTWAekwEiIpIGQazerDnfSTEZICIiaeCcAbM4Z4CIiEjiWBkgIiJJkMHKOQM2i6TxYTJARETSwBUIzWKbgIiISOJYGSAiIkngrYXmMRkgIiJp4N0EZrFNQEREJHGsDBARkSTIRBEyKyYBWnNuY8fKABERSYNgg80CiYmJ6NOnD3x8fBAQEICRI0ciJyfHZEx5eTni4uLg7+8Pb29vjB49GgUFBSZjrly5guHDh8PT0xMBAQGYOXMmqqqqLP30/xOTASIiIjvYu3cv4uLicOjQIaSmpkKv12Pw4MEoKyszjpk2bRp27NiBzz//HHv37kV+fj5GjRplPG4wGDB8+HBUVlbi4MGD2LBhA5KTk5GQkGDTWNkmICIiSWjoNsHOnTtNXicnJyMgIACZmZno378/SkpK8PHHH2Pz5s145JFHAADr169HaGgoDh06hAceeAC7du3C6dOn8f3330OtVqN79+5YsmQJZs+ejYULF0KhUNT78/wRKwNERCQNog02ADqdzmSrqKio09uXlJQAAPz8/AAAmZmZ0Ov1iIqKMo7p3LkzgoODkZ6eDgBIT09HeHg41Gq1cUx0dDR0Oh1OnTpVn59CrZgMEBGRNNSsQGjNBiAoKAgqlcq4JSYm3vWtBUHA1KlT0bdvX3Tt2hUAoNVqoVAo4OvrazJWrVZDq9Uax/wxEag5XnPMVtgmICIiskBeXh6USqXxtZub213PiYuLw88//4wDBw7YM7R6YzJARESSYKsVCJVKpUkycDfx8fFISUnBvn370Lp1a+N+jUaDyspKFBcXm1QHCgoKoNFojGMOHz5scr2auw1qxtgCk4FGquv9t/DX5wvQIfw2/NV6LHruXqTv8jUe922hx4S519Czvw5eyir8nOGD9xOCkH/J3XFBU738/YV89I2+idb3/obKcjlOH/PGJ28E4epFD+OYlsHleO6VPHTpfQvNFAIy9/ni/YVtUPxLMwdGTpaaGH4cM3pnYMOpcCw73BetvHXY/bfNtY6d8sOj2HnpXvyl/Rm8/tCeWsdEfhqLonKPWo9RLRr4QUWiKGLy5MnYtm0b9uzZg5CQEJPjvXr1QrNmzZCWlobRo0cDAHJycnDlyhVERkYCACIjI7F06VIUFhYiICAAAJCamgqlUomwsLD6f5Y/YTLQSLl7Csg97YFdW/2RsO7in46KWLDuAqqqZFg04V7cLnXBqIkFSNx8DpMGhaHiNxeHxEz1Ex5xCzv+FYCzP3lB7gqMn5GHpRtzMOnRcFT85gI3DwOWbsxBbrYn5sR0BgA8Pf0qFn10FlP/EgZRdOYHqzqP8BaFGNvpNM4U+Rv3XS/zRt8tT5uM+3vH05gQfgL7rgYDAL7NbY/914JNxrze7wcoXKqYCDRycXFx2Lx5M77++mv4+PgYe/wqlQoeHh5QqVSYMGECpk+fDj8/PyiVSkyePBmRkZF44IEHAACDBw9GWFgYnnrqKSxfvhxarRbz5s1DXFxcndoTdeXQCYR1WZBBqo7uUWHDm61w8D/N7zjWKqQCob3K8N6rwTj7kxeuXnTHqleC4eYuYOCImw6Ilqwx75lOSP3yHlw+54ncbE+8NbMd1K0q0SG8+l7kLr1LoW5dgbdmtsOlHE9cyvHEmzPaoUN4Gbo/qHNw9FQXnq56rOifhnk/DkBJxe+3ggmiHL/85mmyRbXJxXe59+J2VXXVp8LganLcIMgQ0fIavjwX6qiP02TJBOs3S6xZswYlJSV4+OGH0bJlS+O2detW45h33nkHjz32GEaPHo3+/ftDo9Hgq6++Mh53cXFBSkoKXFxcEBkZiXHjxuHpp5/G4sWLbfVjAeDgykDNggx9+vRBVVUVXnnlFQwePBinT5+Gl5eXI0Nr1JopqktVlRW/53KiKIO+UoYufUqxc0sLR4VGNuDpYwAA3Cqu/s+zmUIAREBf+XsFQF8hhygAXXrfwvEfVQ6Jk+ouIXI/9l4NRvr11nihW6bZcV38byDM/1csPvSQ2TEj259FeZUrdl5qZ49QnZsD2gR34+7ujtWrV2P16tVmx7Rp0wbffvutRe9tKYcmA3dbkOHPKioqTO7n1Omk+VdR3gV3FFxVYPzsa0iaG4zy23L85blC3BOoh1+A3tHhkRVkMhHPz7+MU0e8cfmsJwDgzHFvlN92wbOz85C8ojUgA56dnQcXV/D33QQMCzmPMP9f8Ncdo+469q8dsnG+uDmOF5qfGPbXjmeQcrE9Kgzs8pLtNKp1Bv68IMOfJSYmmtzbGRQU1JDhNRqGKhmW/LMdWoWU44uTJ/B1znF0i7yFw7uVECwsY1HjErf4Mtp2+g2JL7U37ispaoal8e0RMagY205l4qufMuGtNODcSU8IAucLNGYar1K8GvEjZu4dhMq7fHm7uVThsXbn8cXZzmbHdL9Hi/a+N/EFWwT1Y6NFh5xRo0kta1uQ4c/mzp2L6dOnG1/rdDrJJgTnT3ohbmgYPH0MaNZMQElRM6z8OhvnfmJ7pal6cdElRDxSjBl/D8UvWtMlRo/tV+HZh7tB2VwPQ5UMZbdcsfnwcWhTbDeBiGyvi/8NtPD4DV898YVxn6tcRB/NdcSE/ozwjRMhiNV/kw1pexHurlXYfr6j2ev9reMZnP7VH6d+vcfusTsjPrXQvEaTDNRlQQY3Nzebzp50BrdvuQBwQWDbcnS47zY2vtnK0SGRxUS8uOgyHhx8E7P+EYqCq+b/P667WT2prFukDr7+ehz63reBYqT6OJTfCo9tG2OyL7HfD7hY4ot1J3sYEwEAGN0hG7vz2uJmRe13CHi66jE05ALeyoywa8wkTY0iGTC3IIOUuXsaENj29/kRmqAKtAu7jVvFrriRr8BDw2+i5FdXFOYr0LbTb3hhYR7S/+OLY/vrvhAGNQ5xiy9j4IhfsWhSB/xWKkfzFpUAgLJbrsZJoo/+9QbyznugpMgVoT1L8XzCZWz7RGOyFgE1PmVVCpwrNm173q5yRXGFu8n+YJ8S9NFcx6TUYWavNSzkPFxkAr650MFu8Tq9Bp5A2JQ4NBm424IMUtbxvttY/tlZ4+t/LrgKAEj93B9vvdwWfgF6TJqfB98WVSgqbIa0L/2wOamlo8IlKzz+VCEAYMWWMyb735oRgtQvq8vBrduVY/ysq/BRVaHgmgJbVgfiq49tt/oYOdboDmegLfPGgWvm256jO55B6uUQ3KpkdbTeRADWzKty3lwAMrEu9z7YyYsvvmhckKFTp07G/TULMtyNTqeDSqXCQNfRcJVxJTan58LFlKQkN6Gno0OgBiCUl+Pi4ldRUlJi0RK/lqj5rnikxxy4utR/ldYqQzl2H3/drrE6ikPvJqjLggxERERkXw5vExARETUIEVbOGbBZJI1Oo5hASEREZHecQGhWo1p0iIiIiBoeKwNERCQNAgBrFu104hVemQwQEZEkcAVC89gmICIikjhWBoiISBo4gdAsJgNERCQNTAbMYpuAiIhI4lgZICIiaWBlwCwmA0REJA28tdAsJgNERCQJvLXQPM4ZICIikjhWBoiISBo4Z8AsJgNERCQNggjIrPhCF5w3GWCbgIiISOJYGSAiImlgm8AsJgNERCQRViYDcN5kgG0CIiIiiWNlgIiIpIFtArOYDBARkTQIIqwq9fNuAiIiInJWrAwQEZE0iEL1Zs35TorJABERSQPnDJjFZICIiKSBcwbM4pwBIiIiiWNlgIiIpIFtArOYDBARkTSIsDIZsFkkjQ7bBERERBLHygAREUkD2wRmMRkgIiJpEAQAVqwVIDjvOgNsExAREUkcKwNERCQNbBOYxWSAiIikgcmAWWwTEBERSRwrA0REJA1cjtgsJgNERCQJoihAtOLJg9ac29gxGSAiImkQRev+uuecASIiInJWrAwQEZE0iFbOGXDiygCTASIikgZBAGRW9P2deM4A2wREREQSx8oAERFJA9sEZjEZICIiSRAFAaIVbQJnvrWQbQIiIiKJY2WAiIikgW0Cs5gMEBGRNAgiIGMyUBu2CYiIiCSOlQEiIpIGUQRgzToDzlsZYDJARESSIAoiRCvaBCKTASIioiZOFGBdZYC3FhIREZGTYmWAiIgkgW0C85gMEBGRNLBNYFaTTgZqsrQqUe/gSKhBOPF/iHQnobzc0SFQAxAqqn/PDfFXdxX0Vq05VAXn/a6RiU247nH16lUEBQU5OgwiIrJSXl4eWrdubZdrl5eXIyQkBFqt1upraTQa5Obmwt3d3QaRNR5NOhkQBAH5+fnw8fGBTCZzdDgNRqfTISgoCHl5eVAqlY4Oh+yIv2vpkOrvWhRF3Lp1C4GBgZDL7Tenvby8HJWVlVZfR6FQOF0iADTxNoFcLrdbJtkUKJVKSf2jIWX8XUuHFH/XKpXK7u/h7u7ulF/itsJbC4mIiCSOyQAREZHEMRlogtzc3LBgwQK4ubk5OhSyM/6upYO/a3KkJj2BkIiIiKzHygAREZHEMRkgIiKSOCYDREREEsdkgIiISOKYDDQxq1evRtu2beHu7o6IiAgcPnzY0SGRHezbtw+PP/44AgMDIZPJsH37dkeHRHaSmJiIPn36wMfHBwEBARg5ciRycnIcHRZJDJOBJmTr1q2YPn06FixYgGPHjqFbt26Ijo5GYWGho0MjGysrK0O3bt2wevVqR4dCdrZ3717ExcXh0KFDSE1NhV6vx+DBg1FWVubo0EhCeGthExIREYE+ffrgvffeA1D9bIagoCBMnjwZc+bMcXB0ZC8ymQzbtm3DyJEjHR0KNYAbN24gICAAe/fuRf/+/R0dDkkEKwNNRGVlJTIzMxEVFWXcJ5fLERUVhfT0dAdGRkS2VFJSAgDw8/NzcCQkJUwGmohffvkFBoMBarXaZL9arbbJYzmJyPEEQcDUqVPRt29fdO3a1dHhkIQ06acWEhE5k7i4OPz88884cOCAo0MhiWEy0ES0aNECLi4uKCgoMNlfUFAAjUbjoKiIyFbi4+ORkpKCffv2SfrR7OQYbBM0EQqFAr169UJaWppxnyAISEtLQ2RkpAMjIyJriKKI+Ph4bNu2Dbt370ZISIijQyIJYmWgCZk+fTpiY2PRu3dv3H///Vi5ciXKysowfvx4R4dGNlZaWorz588bX+fm5iIrKwt+fn4IDg52YGRka3Fxcdi8eTO+/vpr+Pj4GOcAqVQqeHh4ODg6kgreWtjEvPfee1ixYgW0Wi26d++OpKQkREREODossrE9e/Zg4MCBd+yPjY1FcnJywwdEdiOTyWrdv379ejzzzDMNGwxJFpMBIiIiieOcASIiIoljMkBERCRxTAaIiIgkjskAERGRxDEZICIikjgmA0RERBLHZICIiEjimAwQERFJHJMBIis988wzGDlypPH1ww8/jKlTpzZ4HHv27IFMJkNxcbHZMTKZDNu3b6/zNRcuXIju3btbFdelS5cgk8mQlZVl1XWIyH6YDJBTeuaZZyCTySCTyaBQKNC+fXssXrwYVVVVdn/vr776CkuWLKnT2Lp8gRMR2RsfVEROa8iQIVi/fj0qKirw7bffIi4uDs2aNcPcuXPvGFtZWQmFQmGT9/Xz87PJdYiIGgorA+S03NzcoNFo0KZNG7zwwguIiorCN998A+D30v7SpUsRGBiITp06AQDy8vIwZswY+Pr6ws/PDyNGjMClS5eM1zQYDJg+fTp8fX3h7++PWbNm4c+P9/hzm6CiogKzZ89GUFAQ3Nzc0L59e3z88ce4dOmS8WFEzZs3h0wmMz6YRhAEJCYmIiQkBB4eHujWrRu++OILk/f59ttv0bFjR3h4eGDgwIEmcdbV7Nmz0bFjR3h6eqJdu3aYP38+9Hr9HeM++OADBAUFwdPTE2PGjEFJSYnJ8Y8++gihoaFwd3dH586d8f7771scCxE5DpMBkgwPDw9UVlYaX6elpSEnJwepqalISUmBXq9HdHQ0fHx8sH//fvz444/w9vbGkCFDjOe99dZbSE5OxieffIIDBw6gqKgI27Zt+5/v+/TTT+PTTz9FUlISsrOz8cEHH8Db2xtBQUH48ssvAQA5OTm4fv063n33XQBAYmIiNm7ciLVr1+LUqVOYNm0axo0bh7179wKoTlpGjRqFxx9/HFlZWXjuuecwZ84ci38mPj4+SE5OxunTp/Huu+9i3bp1eOedd0zGnD9/Hp999hl27NiBnTt34vjx43jxxReNxzdt2oSEhAQsXboU2dnZWLZsGebPn48NGzZYHA8ROYhI5IRiY2PFESNGiKIoioIgiKmpqaKbm5s4Y8YM43G1Wi1WVFQYz/nXv/4ldurUSRQEwbivoqJC9PDwEP/zn/+IoiiKLVu2FJcvX248rtfrxdatWxvfSxRFccCAAeKUKVNEURTFnJwcEYCYmppaa5w//PCDCEC8efOmcV95ebno6ekpHjx40GTshAkTxH/84x+iKIri3LlzxbCwMJPjs2fPvuNafwZA3LZtm9njK1asEHv16mV8vWDBAtHFxUW8evWqcd93330nyuVy8fr166IoiuK9994rbt682eQ6S5YsESMjI0VRFMXc3FwRgHj8+HGz70tEjsU5A+S0UlJS4O3tDb1eD0EQ8OSTT2LhwoXG4+Hh4SbzBE6cOIHz58/Dx8fH5Drl5eW4cOECSkpKcP36dURERBiPubq6onfv3ne0CmpkZWXBxcUFAwYMqHPc58+fx+3bt/Hoo4+a7K+srESPHj0AANnZ2SZxAEBkZGSd36PG1q1bkZSUhAsXLqC0tBRVVVVQKpUmY4KDg9GqVSuT9xEEATk5OfDx8cGFCxcwYcIETJw40TimqqoKKpXK4niIyDGYDJDTGjhwINasWQOFQoHAwEC4upr+393Ly8vkdWlpKXr16oVNmzbdca177rmnXjF4eHhYfE5paSkA4P/+7/9MvoSB6nkQtpKeno6YmBgsWrQI0dHRUKlU2LJlC9566y2LY123bt0dyYmLi4vNYiUi+2IyQE7Ly8sL7du3r/P4nj17YuvWrQgICLjjr+MaLVu2REZGBvr37w+g+i/gzMxM9OzZs9bx4eHhEAQBe/fuRVRU1B3HayoTBoPBuC8sLAxubm64cuWK2YpCaGiocTJkjUOHDt39Q/7BwYMH0aZNG7z66qvGfZcvX75j3JUrV5Cfn4/AwEDj+8jlcnTq1AlqtRqBgYG4ePEiYmJiLHp/Imo8OIGQ6L9iYmLQokULjBgxAvv370dubi727NmDl156CVevXgUATJkyBa+//jq2b9+OM2fO4MUXX/yfawS0bdsWsbGxePbZZ7F9+3bjNT/77DMAQJs2bSCTyZCSkoIbN26gtLQUPj4+mDFjBqZNm4YNGzbgwoULOHbsGFatWmWclPf888/j3LlzmDlzJnJycrB582YkJydb9Hk7dOiAK1euYMuWLbhw4QKSkpJqnQzp7u6O2NhYnDhxAvv378dLL72EMWPGQKPRAAAWLVqExMREJCUl4ezZszh58iTWr1+Pt99+26J4iMhxmAwQ/Zenpyf27duH4OBgjBo1CqGhoZgwYQLKy8uNlYKXX34ZTz31FGJjYxEZGQkfHx/85S9/+Z/XXbNmDf7617/ixRdfROfOnTFx4kSUlZUBAFq1aoVFixZhzpw5UKvViI+PBwAsWbIE8+fPR2JiIkJDQzFkyBD83//9H0JCQgBU9/G//PJLbN++Hd26dcPatWuxbNkyiz7vE088gWnTpiE+Ph7du3fHwYMHMX/+/DvGtW/fHqNGjcKwYcMwePBg3HfffSa3Dj733HP46KOPsH79eoSHh2PAgAFITk42xkpEjZ9MNDfziYiIiCSBlQEiIiKJYzJAREQkcUwGiIiIJI7JABERkcQxGSAiIpI4JgNEREQSx2SAiIhI4pgMEBERSRyTASIiIoljMkBERCRxTAaIiIgk7v8BXFSFXuu6po8AAAAASUVORK5CYII=",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_pred = clf_xgb.predict(X_test)\n",
+    "print(multilabel_confusion_matrix(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "print('-'*55)\n",
+    "print (classification_report(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "ConfusionMatrixDisplay.from_predictions(y_test, y_pred, labels=[0, 1, 2])"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "76af4fe4",
+   "metadata": {},
+   "source": [
+    "##### vi.\tGradient Boosting Classifier (GBC)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2240,
+   "id": "e405d144",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "GBC score =  0.96\n",
+      "GBC accuracy score = 96.00%\n"
+     ]
+    }
+   ],
+   "source": [
+    "from sklearn.ensemble import GradientBoostingClassifier\n",
+    "\n",
+    "# Create a GradientBoostingClassifier object\n",
+    "clf_gb = GradientBoostingClassifier(n_estimators=70, learning_rate=0.5, max_depth=11, random_state=10, subsample=1.0, max_features='sqrt').fit(X_train, y_train)\n",
+    "score_gb = clf_gb.score(X_test, y_test)\n",
+    "print(\"GBC score = \", score_gb)\n",
+    "print(\"GBC accuracy score = %0.2f%%\" % (score_gb*100))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "f75d092f",
+   "metadata": {},
+   "source": [
+    "Gradient Boosting Classifier returns an even better accuracy score compared to XGBBoost Classifier."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2241,
+   "id": "5167b6a8",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[0.95549517 0.96640743 0.96353285 0.95521615 0.95777767]\n",
+      "5-fold cross-validation accuracy [95.97%] with standard deviation [0.45%]\n"
+     ]
+    }
+   ],
+   "source": [
+    "cross_val_scores_gb = cross_val_score(clf_gb, X, y, cv=kfold, scoring='f1_macro')\n",
+    "print (cross_val_scores_gb)\n",
+    "print (\"5-fold cross-validation accuracy [%0.2f%%] with standard deviation [%0.2f%%]\" % (100*cross_val_scores_gb.mean(), 100*cross_val_scores_gb.std()))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "3c68823c",
+   "metadata": {},
+   "source": [
+    "It also returns the best cross-validation result among the models."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2242,
+   "id": "3a1037cd",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[[1035   15]\n",
+      "  [  11 1039]]\n",
+      "\n",
+      " [[1547   28]\n",
+      "  [  38  487]]\n",
+      "\n",
+      " [[1534   41]\n",
+      "  [  35  490]]]\n",
+      "-------------------------------------------------------\n",
+      "              precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.99      0.99      0.99      1050\n",
+      "           1       0.95      0.93      0.94       525\n",
+      "           2       0.92      0.93      0.93       525\n",
+      "\n",
+      "    accuracy                           0.96      2100\n",
+      "   macro avg       0.95      0.95      0.95      2100\n",
+      "weighted avg       0.96      0.96      0.96      2100\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x25729e3f710>"
+      ]
+     },
+     "execution_count": 2242,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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6J577tHgwYPtr6+//nqNHTu21uNYvXq1LBaL8vPznY6xWCxaunRpla/55JNPqmvXri7F9eOPP8pisWjHjh0uXQdAzSEZgFe65557ZLFYZLFY5O/vr7Zt22ratGkqLy+v8ff+6KOPNH369CqNrcoXOADUNB5UBK/Vv39/zZs3TyUlJfrss880evRoNWjQQI899tg5Y0tLS+Xv7++W942IiHDLdQCgtlAZgNcKCAhQdHS0WrVqpfvuu0+JiYn65JNPJP1S2n/66acVExOjdu3aSZIOHTqk22+/XeHh4YqIiNCgQYP0448/2q9ZUVGh8ePHKzw8XE2aNNEjjzyi/368x3+3CUpKSvToo48qNjZWAQEBatu2rd566y39+OOP9ocRNW7cWBaLxf5gGpvNptTUVMXFxSkoKEhdunTRBx984PA+n332mS699FIFBQWpT58+DnFW1aOPPqpLL71UwcHBatOmjSZNmqSysrJzxr322muKjY1VcHCwbr/9dhUUFDgcf/PNN9WhQwcFBgaqffv2+tvf/lbtWAB4DskATCMoKEilpaX21ytXrlRWVpbS09O1fPlylZWVqV+/fgoJCdG6dev09ddfq1GjRurfv7/9vOeff17z58/X22+/rfXr1ysvL09Lliz5n+97991365///KfS0tK0e/duvfbaa2rUqJFiY2P14YcfSpKysrJ07NgxvfTSS5Kk1NRULVy4UHPnztXOnTs1btw43XnnnVqzZo2kyqRlyJAhuvXWW7Vjxw7de++9mjhxYrV/JiEhIZo/f7527dqll156SW+88YZefPFFhzH79u3Te++9p2XLlmnFihXavn277r//fvvxRYsWafLkyXr66ae1e/duzZgxQ5MmTdKCBQuqHQ8ADzEAL5ScnGwMGjTIMAzDsNlsRnp6uhEQEGBMmDDBfjwqKsooKSmxn/P3v//daNeunWGz2ez7SkpKjKCgIOPzzz83DMMwmjdvbsycOdN+vKyszGjRooX9vQzDMHr37m2MGTPGMAzDyMrKMiQZ6enp543zq6++MiQZp06dsu8rLi42goODjQ0bNjiMHTFihPHHP/7RMAzDeOyxx4yOHTs6HH/00UfPudZ/k2QsWbLE6fFZs2YZ3bt3t7+eMmWK4evraxw+fNi+71//+pfh4+NjHDt2zDAMw7j44ouNxYsXO1xn+vTpRkJCgmEYhpGdnW1IMrZv3+70fQF4FnMG4LWWL1+uRo0aqaysTDabTXfccYeefPJJ+/HOnTs7zBP45ptvtG/fPoWEhDhcp7i4WPv371dBQYGOHTum+Ph4+zE/Pz/16NHjnFbBWTt27JCvr6969+5d5bj37dunM2fO6KabbnLYX1paqm7dukmSdu/e7RCHJCUkJFT5Pc569913lZaWpv3796uwsFDl5eUKDQ11GNOyZUtddNFFDu9js9mUlZWlkJAQ7d+/XyNGjNDIkSPtY8rLyxUWFlbteAB4BskAvFafPn306quvyt/fXzExMfLzc/zn3rBhQ4fXhYWF6t69uxYtWnTOtZo1a3ZBMQQFBVX7nMLCQknSp59+6vAlLFXOg3CXjIwMJSUlaerUqerXr5/CwsL0zjvv6Pnnn692rG+88cY5yYmvr6/bYgVQs0gG4LUaNmyotm3bVnn8FVdcoXfffVeRkZHn/HV8VvPmzbVp0yb16tVLUuVfwJmZmbriiivOO75z586y2Wxas2aNEhMTzzl+tjJRUVFh39exY0cFBATo4MGDTisKHTp0sE+GPGvjxo2//SF/ZcOGDWrVqpUef/xx+74DBw6cM+7gwYM6evSoYmJi7O/j4+Ojdu3aKSoqSjExMfrhhx+UlJRUrfcHUHcwgRD4j6SkJDVt2lSDBg3SunXrlJ2drdWrV+vBBx/U4cOHJUljxozRM888o6VLl+r777/X/fff/z/vEdC6dWslJyfrT3/6k5YuXWq/5nvvvSdJatWqlSwWi5YvX64TJ06osLBQISEhmjBhgsaNG6cFCxZo//792rZtm15++WX7pLy//OUv2rt3rx5++GFlZWVp8eLFmj9/frU+7yWXXKKDBw/qnXfe0f79+5WWlnbeyZCBgYFKTk7WN998o3Xr1unBBx/U7bffrujoaEnS1KlTlZqaqrS0NO3Zs0fffvut5s2bpxdeeKFa8QDwHJIB4D+Cg4O1du1atWzZUkOGDFGHDh00YsQIFRcX2ysFDz30kO666y4lJycrISFBISEh+t3vfvc/r/vqq6/q//7v/3T//ferffv2GjlypIqKiiRJF110kaZOnaqJEycqKipKKSkpkqTp06dr0qRJSk1NVYcOHdS/f399+umniouLk1TZx//www+1dOlSdenSRXPnztWMGTOq9Xlvu+02jRs3TikpKeratas2bNigSZMmnTOubdu2GjJkiG6++Wb17dtXl19+ucPSwXvvvVdvvvmm5s2bp86dO6t3796aP3++PVYAdZ/FcDbzCQAAmAKVAQAATI5kAAAAkyMZAADA5EgGAAAwOZIBAABMjmQAAACTIxkAAMDkSAYAADA5kgEAAEyOZAAAAJMjGQAAwOT+H6PqiPR05XTiAAAAAElFTkSuQmCC",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_pred = clf_gb.predict(X_test)\n",
+    "print(multilabel_confusion_matrix(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "print('-'*55)\n",
+    "print (classification_report(y_test, y_pred, labels=[0, 1, 2]))\n",
+    "ConfusionMatrixDisplay.from_predictions(y_test, y_pred, labels=[0, 1, 2])"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "b9fb9bec",
+   "metadata": {},
+   "source": [
+    "It returns a stable 5-fold cross-validation result with the lowest standard deviation among the models. This means that the model is not overfitting or underfitting the data.\n",
+    "So, Logistic Regression fared poorly for multi-class regression. A better result was obtained using SVM and Decision Tree based learning. Finally, AdaBoost, XGBoost and Gradient Boosting obtained >90% training score which is far better than the rest. \n",
+    "\n",
+    "The cross-validation results obtained shows which method is the most suitable to be picked as the final model to train the dataset."
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "30062966",
+   "metadata": {},
+   "source": [
+    "### B.5\tML Model with Best Result\n",
+    "The model with best result was found to be GBC after comparison between accuracy score, 5-fold crpss-validation result and confusion matrix were made.\n",
+    "### B.6\tGBC Testing Result\n",
+    "\n",
+    "Let's predict output on test inputs."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2243,
+   "id": "77fbdfde",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "test_raw_data = pd.read_csv('TestingDataMulti.csv')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2244,
+   "id": "b6aeecef",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 100 entries, 0 to 99\n",
+      "Columns: 128 entries, R1-PA1:VH to snort_log4\n",
+      "dtypes: float64(104), int64(24)\n",
+      "memory usage: 100.1 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_raw_data.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2245,
+   "id": "dec22570",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[]"
+      ]
+     },
+     "execution_count": 2245,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_raw_data.columns[test_raw_data.isnull().any()].tolist()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2246,
+   "id": "80208613",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>R1-PA1:VH</th>\n",
+       "      <th>R1-PM1:V</th>\n",
+       "      <th>R1-PA2:VH</th>\n",
+       "      <th>R1-PM2:V</th>\n",
+       "      <th>R1-PA3:VH</th>\n",
+       "      <th>R1-PM3:V</th>\n",
+       "      <th>R1-PA4:IH</th>\n",
+       "      <th>R1-PM4:I</th>\n",
+       "      <th>R1-PA5:IH</th>\n",
+       "      <th>R1-PM5:I</th>\n",
+       "      <th>...</th>\n",
+       "      <th>control_panel_log3</th>\n",
+       "      <th>control_panel_log4</th>\n",
+       "      <th>relay1_log</th>\n",
+       "      <th>relay2_log</th>\n",
+       "      <th>relay3_log</th>\n",
+       "      <th>relay4_log</th>\n",
+       "      <th>snort_log1</th>\n",
+       "      <th>snort_log2</th>\n",
+       "      <th>snort_log3</th>\n",
+       "      <th>snort_log4</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>38</th>\n",
+       "      <td>172.546240</td>\n",
+       "      <td>134192.1410</td>\n",
+       "      <td>52.557419</td>\n",
+       "      <td>134167.0678</td>\n",
+       "      <td>-67.437132</td>\n",
+       "      <td>134292.4341</td>\n",
+       "      <td>174.534404</td>\n",
+       "      <td>329.78111</td>\n",
+       "      <td>55.886303</td>\n",
+       "      <td>323.18915</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>47</th>\n",
+       "      <td>-141.463280</td>\n",
+       "      <td>132060.9131</td>\n",
+       "      <td>98.560200</td>\n",
+       "      <td>132010.7666</td>\n",
+       "      <td>-21.428622</td>\n",
+       "      <td>132111.0596</td>\n",
+       "      <td>-137.492682</td>\n",
+       "      <td>265.87572</td>\n",
+       "      <td>103.997569</td>\n",
+       "      <td>260.56553</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>97</th>\n",
+       "      <td>178.642511</td>\n",
+       "      <td>131208.4219</td>\n",
+       "      <td>58.670878</td>\n",
+       "      <td>131183.3486</td>\n",
+       "      <td>-61.340862</td>\n",
+       "      <td>131283.6417</td>\n",
+       "      <td>175.290708</td>\n",
+       "      <td>429.75917</td>\n",
+       "      <td>54.946653</td>\n",
+       "      <td>430.85783</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>25</th>\n",
+       "      <td>-114.471238</td>\n",
+       "      <td>131509.3012</td>\n",
+       "      <td>125.535053</td>\n",
+       "      <td>130882.4694</td>\n",
+       "      <td>5.546231</td>\n",
+       "      <td>131559.4477</td>\n",
+       "      <td>-116.035413</td>\n",
+       "      <td>410.53262</td>\n",
+       "      <td>122.504106</td>\n",
+       "      <td>416.39214</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>63</th>\n",
+       "      <td>36.927130</td>\n",
+       "      <td>132236.4260</td>\n",
+       "      <td>-83.061692</td>\n",
+       "      <td>132186.2794</td>\n",
+       "      <td>156.938870</td>\n",
+       "      <td>132286.5725</td>\n",
+       "      <td>40.576871</td>\n",
+       "      <td>274.48189</td>\n",
+       "      <td>-82.299658</td>\n",
+       "      <td>284.00361</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 128 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     R1-PA1:VH     R1-PM1:V   R1-PA2:VH     R1-PM2:V   R1-PA3:VH     R1-PM3:V  \\\n",
+       "38  172.546240  134192.1410   52.557419  134167.0678  -67.437132  134292.4341   \n",
+       "47 -141.463280  132060.9131   98.560200  132010.7666  -21.428622  132111.0596   \n",
+       "97  178.642511  131208.4219   58.670878  131183.3486  -61.340862  131283.6417   \n",
+       "25 -114.471238  131509.3012  125.535053  130882.4694    5.546231  131559.4477   \n",
+       "63   36.927130  132236.4260  -83.061692  132186.2794  156.938870  132286.5725   \n",
+       "\n",
+       "     R1-PA4:IH   R1-PM4:I   R1-PA5:IH   R1-PM5:I  ...  control_panel_log3  \\\n",
+       "38  174.534404  329.78111   55.886303  323.18915  ...                   0   \n",
+       "47 -137.492682  265.87572  103.997569  260.56553  ...                   0   \n",
+       "97  175.290708  429.75917   54.946653  430.85783  ...                   0   \n",
+       "25 -116.035413  410.53262  122.504106  416.39214  ...                   0   \n",
+       "63   40.576871  274.48189  -82.299658  284.00361  ...                   0   \n",
+       "\n",
+       "    control_panel_log4  relay1_log  relay2_log  relay3_log  relay4_log  \\\n",
+       "38                   0           0           0           0           0   \n",
+       "47                   0           0           0           0           0   \n",
+       "97                   0           0           0           0           0   \n",
+       "25                   0           0           0           0           0   \n",
+       "63                   0           0           0           0           0   \n",
+       "\n",
+       "    snort_log1  snort_log2  snort_log3  snort_log4  \n",
+       "38           0           0           0           0  \n",
+       "47           0           0           0           0  \n",
+       "97           0           0           0           0  \n",
+       "25           0           0           0           0  \n",
+       "63           0           0           0           0  \n",
+       "\n",
+       "[5 rows x 128 columns]"
+      ]
+     },
+     "execution_count": 2246,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_raw_data.sample(n=5)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2247,
+   "id": "c251d39b",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>R1:S_0</th>\n",
+       "      <th>R2:S_0</th>\n",
+       "      <th>R3:S_0</th>\n",
+       "      <th>R4:S_0</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>49</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>13</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>86</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    R1:S_0  R2:S_0  R3:S_0  R4:S_0\n",
+       "49       1       1       1       1\n",
+       "13       1       1       1       1\n",
+       "86       1       1       1       1"
+      ]
+     },
+     "execution_count": 2247,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "#let's save a copy before proceeding\n",
+    "results_df = test_raw_data.copy()\n",
+    "\n",
+    "test_RS_frame = test_raw_data[column_names_RS]\n",
+    "test_RS_frame = test_RS_frame.astype('int')\n",
+    "test_RS_frame = test_RS_frame.astype('category')\n",
+    "test_RS_frame = pd.get_dummies(test_RS_frame, dtype=int)\n",
+    "test_RS_frame.sample(3)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2248,
+   "id": "c56a8a5b",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>R1:S_0</th>\n",
+       "      <th>R1:S_2048</th>\n",
+       "      <th>R1:S_2058</th>\n",
+       "      <th>R2:S_0</th>\n",
+       "      <th>R3:S_0</th>\n",
+       "      <th>R3:S_2048</th>\n",
+       "      <th>R4:S_0</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>19</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>83</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    R1:S_0  R1:S_2048  R1:S_2058  R2:S_0  R3:S_0  R3:S_2048  R4:S_0\n",
+       "19       1          0          0       1       1          0       1\n",
+       "83       1          0          0       1       1          0       1"
+      ]
+     },
+     "execution_count": 2248,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "#let's reconcile RS dummies between training and validation data set\n",
+    "a = RS_frame.columns.values\n",
+    "b = test_RS_frame.columns.values\n",
+    "missing_cols = [ai for ai in a if ai not in b]\n",
+    "missing_cols\n",
+    "for col in a :\n",
+    "    if col not in b :\n",
+    "        test_RS_frame[col] = 0\n",
+    "\n",
+    "#order columns as in training\n",
+    "test_RS_frame = test_RS_frame.loc[:,a]\n",
+    "test_RS_frame.sample(2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2249,
+   "id": "f4fc567a",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 100 entries, 0 to 99\n",
+      "Columns: 124 entries, R1-PA1:VH to snort_log4\n",
+      "dtypes: float64(104), int64(20)\n",
+      "memory usage: 97.0 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "#let's drop RS columns\n",
+    "test_raw_data = test_raw_data.drop(column_names_RS, axis=1)\n",
+    "test_raw_data.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2250,
+   "id": "24da31bd",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "unscaled_test_input = test_raw_data.iloc[:,:-12]\n",
+    "unscaled_test_input.replace([np.inf, -np.inf], np.nan, inplace=True)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2251,
+   "id": "d17cd7e4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(100, 112)"
+      ]
+     },
+     "execution_count": 2251,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "scaled_test_input = scaler.transform(unscaled_test_input)\n",
+    "scaled_test_input.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2252,
+   "id": "33845d19",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 100 entries, 0 to 99\n",
+      "Columns: 112 entries, R1-PA1:VH to R4-PA:ZH\n",
+      "dtypes: float64(112)\n",
+      "memory usage: 87.6 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_df1_scaled = pd.DataFrame(scaled_test_input, index=unscaled_test_input.index, columns=column_names_updated[:scaled_test_input.shape[1]])\n",
+    "test_df1_scaled.replace(np.nan, 1, inplace=True)\n",
+    "test_df1_scaled.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2253,
+   "id": "75c977ec",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 100 entries, 0 to 99\n",
+      "Data columns (total 12 columns):\n",
+      " #   Column              Non-Null Count  Dtype\n",
+      "---  ------              --------------  -----\n",
+      " 0   control_panel_log1  100 non-null    int64\n",
+      " 1   control_panel_log2  100 non-null    int64\n",
+      " 2   control_panel_log3  100 non-null    int64\n",
+      " 3   control_panel_log4  100 non-null    int64\n",
+      " 4   relay1_log          100 non-null    int64\n",
+      " 5   relay2_log          100 non-null    int64\n",
+      " 6   relay3_log          100 non-null    int64\n",
+      " 7   relay4_log          100 non-null    int64\n",
+      " 8   snort_log1          100 non-null    int64\n",
+      " 9   snort_log2          100 non-null    int64\n",
+      " 10  snort_log3          100 non-null    int64\n",
+      " 11  snort_log4          100 non-null    int64\n",
+      "dtypes: int64(12)\n",
+      "memory usage: 9.5 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_df2 = test_raw_data.iloc[:,-12:]\n",
+    "test_df2.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2254,
+   "id": "4f176a75",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 100 entries, 0 to 99\n",
+      "Columns: 131 entries, R1-PA1:VH to R4:S_0\n",
+      "dtypes: float64(112), int32(4), int64(15)\n",
+      "memory usage: 100.9 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_X = pd.concat([test_df1_scaled, test_df2, test_RS_frame], axis=1)\n",
+    "test_X.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2255,
+   "id": "7aacce46",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,\n",
+       "       2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,\n",
+       "       2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
+       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1,\n",
+       "       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64)"
+      ]
+     },
+     "execution_count": 2255,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "results = clf_gb.predict(test_X)\n",
+    "results"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2256,
+   "id": "c627bdcf",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 100 entries, 0 to 99\n",
+      "Columns: 129 entries, R1-PA1:VH to marker\n",
+      "dtypes: float64(104), int64(25)\n",
+      "memory usage: 100.9 KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "results_df['marker'] = np.transpose(results)\n",
+    "results_df.info()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2257,
+   "id": "0ea24283",
+   "metadata": {},
+   "outputs": [
+    {
+     "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>R1-PA1:VH</th>\n",
+       "      <th>R1-PM1:V</th>\n",
+       "      <th>R1-PA2:VH</th>\n",
+       "      <th>R1-PM2:V</th>\n",
+       "      <th>R1-PA3:VH</th>\n",
+       "      <th>R1-PM3:V</th>\n",
+       "      <th>R1-PA4:IH</th>\n",
+       "      <th>R1-PM4:I</th>\n",
+       "      <th>R1-PA5:IH</th>\n",
+       "      <th>R1-PM5:I</th>\n",
+       "      <th>...</th>\n",
+       "      <th>control_panel_log4</th>\n",
+       "      <th>relay1_log</th>\n",
+       "      <th>relay2_log</th>\n",
+       "      <th>relay3_log</th>\n",
+       "      <th>relay4_log</th>\n",
+       "      <th>snort_log1</th>\n",
+       "      <th>snort_log2</th>\n",
+       "      <th>snort_log3</th>\n",
+       "      <th>snort_log4</th>\n",
+       "      <th>marker</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>82</th>\n",
+       "      <td>178.934719</td>\n",
+       "      <td>132537.3052</td>\n",
+       "      <td>58.968816</td>\n",
+       "      <td>132487.1587</td>\n",
+       "      <td>-61.048653</td>\n",
+       "      <td>132587.4518</td>\n",
+       "      <td>176.797587</td>\n",
+       "      <td>568.00722</td>\n",
+       "      <td>52.425638</td>\n",
+       "      <td>597.48793</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>22</th>\n",
+       "      <td>-114.402483</td>\n",
+       "      <td>131509.3012</td>\n",
+       "      <td>125.603808</td>\n",
+       "      <td>130882.4694</td>\n",
+       "      <td>5.620716</td>\n",
+       "      <td>131559.4477</td>\n",
+       "      <td>-115.657261</td>\n",
+       "      <td>408.88463</td>\n",
+       "      <td>122.681723</td>\n",
+       "      <td>416.02592</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>28</th>\n",
+       "      <td>-61.896631</td>\n",
+       "      <td>131534.3744</td>\n",
+       "      <td>178.149767</td>\n",
+       "      <td>131509.3012</td>\n",
+       "      <td>58.149487</td>\n",
+       "      <td>131584.5210</td>\n",
+       "      <td>-64.446293</td>\n",
+       "      <td>401.92645</td>\n",
+       "      <td>176.012635</td>\n",
+       "      <td>402.10956</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>70</th>\n",
+       "      <td>119.072089</td>\n",
+       "      <td>132687.7448</td>\n",
+       "      <td>-0.893814</td>\n",
+       "      <td>132662.6716</td>\n",
+       "      <td>-120.905554</td>\n",
+       "      <td>132762.9647</td>\n",
+       "      <td>119.415864</td>\n",
+       "      <td>289.68002</td>\n",
+       "      <td>-0.790682</td>\n",
+       "      <td>288.94758</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>62</th>\n",
+       "      <td>37.013074</td>\n",
+       "      <td>132211.3527</td>\n",
+       "      <td>-82.958559</td>\n",
+       "      <td>132161.2062</td>\n",
+       "      <td>157.059191</td>\n",
+       "      <td>132261.4993</td>\n",
+       "      <td>41.373282</td>\n",
+       "      <td>272.10146</td>\n",
+       "      <td>-81.898587</td>\n",
+       "      <td>283.08806</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 129 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     R1-PA1:VH     R1-PM1:V   R1-PA2:VH     R1-PM2:V   R1-PA3:VH     R1-PM3:V  \\\n",
+       "82  178.934719  132537.3052   58.968816  132487.1587  -61.048653  132587.4518   \n",
+       "22 -114.402483  131509.3012  125.603808  130882.4694    5.620716  131559.4477   \n",
+       "28  -61.896631  131534.3744  178.149767  131509.3012   58.149487  131584.5210   \n",
+       "70  119.072089  132687.7448   -0.893814  132662.6716 -120.905554  132762.9647   \n",
+       "62   37.013074  132211.3527  -82.958559  132161.2062  157.059191  132261.4993   \n",
+       "\n",
+       "     R1-PA4:IH   R1-PM4:I   R1-PA5:IH   R1-PM5:I  ...  control_panel_log4  \\\n",
+       "82  176.797587  568.00722   52.425638  597.48793  ...                   0   \n",
+       "22 -115.657261  408.88463  122.681723  416.02592  ...                   0   \n",
+       "28  -64.446293  401.92645  176.012635  402.10956  ...                   0   \n",
+       "70  119.415864  289.68002   -0.790682  288.94758  ...                   0   \n",
+       "62   41.373282  272.10146  -81.898587  283.08806  ...                   0   \n",
+       "\n",
+       "    relay1_log  relay2_log  relay3_log  relay4_log  snort_log1  snort_log2  \\\n",
+       "82           0           0           0           0           0           0   \n",
+       "22           0           0           0           0           0           0   \n",
+       "28           0           0           0           0           0           0   \n",
+       "70           0           0           0           0           0           0   \n",
+       "62           0           0           0           0           0           0   \n",
+       "\n",
+       "    snort_log3  snort_log4  marker  \n",
+       "82           0           0       0  \n",
+       "22           0           0       2  \n",
+       "28           0           0       2  \n",
+       "70           0           0       0  \n",
+       "62           0           0       1  \n",
+       "\n",
+       "[5 rows x 129 columns]"
+      ]
+     },
+     "execution_count": 2257,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "results_df.sample(5)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2258,
+   "id": "20c29600",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "results_df.to_csv('TestingResultsMulti.csv')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2259,
+   "id": "07a1fff0",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "marker count:\n",
+      "1    39\n",
+      "2    32\n",
+      "0    29\n",
+      "Name: marker, dtype: int64\n"
+     ]
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAABqgAAAIjCAYAAAB/FprFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABIJElEQVR4nO3debhVBf337/fmHDjMIIJMgqBmAqWoOOGAAwplGYaIigpo+q3UFKW+mo+KKaCWT5amaKWkOZWmqThkBs6ZQ5hTOIThjDigSAxy9u8Pf+6nExhwwHUE7/u69nWx11p7r8/a57DSXq61S+VyuRwAAAAAAAAoSKOGHgAAAAAAAIDPFoEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAABYYa+//nr23XffrLvuuimVSjn33HMbeqSPNW7cuJRKpTrLevTokVGjRjXMQMuwrBkBAAA+CwQqAADWGI8//nj23XffbLDBBmnatGm6du2aPfbYI+edd15Dj/aZMWbMmNx+++058cQTc/nll2fw4MEfu22pVKo8GjVqlC5dumTPPffMtGnTiht4NXjllVcybty4TJ8+vcFmGDVqVJ3P898fTZs2bbC5/t2VV175qQ6WAADAp0t1Qw8AAAAr4v7778+uu+6a7t275/DDD0+nTp3y4osv5s9//nN+8pOf5Oijj27oET8T/vSnP+VrX/taxo4du0Lb77HHHjnkkENSLpczc+bMXHDBBdltt90yZcqUfOlLX/qEp13ajBkz0qjRyv13eq+88kpOO+209OjRI3379v1kBlsBNTU1+cUvfrHU8qqqqgaYZmlXXnllnnjiiRx77LENPQoAALAGEKgAAFgjjB8/Pm3atMlDDz2Utm3b1lk3e/bshhnqM2j27NlLff7/zSabbJKDDjqo8nyfffbJZpttlnPPPfdjA9WCBQvSpEmTlQ5JK6Kmpma1v2dRqqur63yWAAAAazK3+AMAYI3w/PPPp0+fPsuMI+utt95Sy379619nq622SrNmzdKuXbvsv//+efHFF5fa7uKLL85GG22UZs2aZZtttsk999yTXXbZJbvssktlm8mTJ6dUKuWFF16o89pp06alVCotdcu6Bx98MIMHD06bNm3SvHnzDBgwIPfdd1+dbT767qHnnnsuo0aNStu2bdOmTZuMHj068+fPX+bxbLPNNmnevHnWWWed7LzzzvnDH/5QZ5tbb701O+20U1q0aJFWrVplr732ypNPPrnUey3LP/7xjwwbNizt2rVL8+bNs91222XKlClLfQblcjk/+9nPKreXW1lf/OIX0759+8ycOTPJ//sMr7766vyf//N/0rVr1zRv3jzvvvtukhX7LJPk3nvvzdZbb52mTZtmo402ykUXXbTM/S/rO6jeeeedjBkzJj169EhNTU3WX3/9HHLIIZkzZ06mTZuWrbfeOkkyevToynFPnjy58vrVPWN9PfzwwymVSvnVr3611Lrbb789pVIpN998c2XZyy+/nEMPPTQdO3ZMTU1N+vTpk0suuaTO6z76+fzmN7/J+PHjs/7666dp06bZfffd89xzz1W222WXXTJlypT885//rHxGPXr0qKw/77zz0qdPn8rvb79+/XLllVeu1uMHAADWLK6gAgBgjbDBBhvkgQceyBNPPJEvfOEL/3Xb8ePH5+STT85+++2Xb3zjG3njjTdy3nnnZeedd85f//rXSuT65S9/mf/5n/9J//79c+yxx+Yf//hH9t5777Rr1y7dunWr15x/+tOf8qUvfSlbbbVVTj311DRq1CiXXnppdtttt9xzzz3ZZptt6my/3377pWfPnpk4cWIeffTR/OIXv8h6662Xs846q7LNaaedlnHjxqV///75wQ9+kCZNmuTBBx/Mn/70p+y5555JkssvvzwjR47MoEGDctZZZ2X+/Pm58MILs+OOO+avf/1rnVjwn15//fX0798/8+fPz3e+852su+66+dWvfpW999471157bfbZZ5/svPPOufzyy3PwwQdXbttXH2+//XbefvvtbLzxxnWWn3766WnSpEnGjh2bhQsXpkmTJiv8WT7++OPZc88906FDh4wbNy4ffPBBTj311HTs2HG588ybNy877bRTnn766Rx66KHZcsstM2fOnNx444156aWX0qtXr/zgBz/IKaeckiOOOCI77bRTkqR///5JVvznvSoz/rs5c+YstaxJkyZp3bp1+vXrlw033DC/+c1vMnLkyDrbXHPNNVlnnXUyaNCgJB/+zLfbbruUSqUcddRR6dChQ2699dYcdthheffdd5e6Td+ZZ56ZRo0aZezYsZk7d27OPvvsjBgxIg8++GCS5KSTTsrcuXPz0ksv5cc//nGSpGXLlkmSn//85/nOd76TfffdN8ccc0wWLFiQv/3tb3nwwQdz4IEHrtTxAwAAa5EyAACsAf7whz+Uq6qqylVVVeXtt9++/L3vfa98++23lxctWlRnuxdeeKFcVVVVHj9+fJ3ljz/+eLm6urqyfNGiReX11luv3Ldv3/LChQsr21188cXlJOUBAwZUll166aXlJOWZM2fWec+pU6eWk5SnTp1aLpfL5dra2vLnPve58qBBg8q1tbWV7ebPn1/u2bNneY899qgsO/XUU8tJyoceemid99xnn33K6667buX5s88+W27UqFF5n332KS9ZsqTOth/t47333iu3bdu2fPjhh9dZ/9prr5XbtGmz1PL/dOyxx5aTlO+5557Ksvfee6/cs2fPco8ePersN0n5yCOP/K/v9+/bHnbYYeU33nijPHv27PKDDz5Y3n333ctJyuecc065XP5/n+GGG25Ynj9/fp1jW9HPcsiQIeWmTZuW//nPf1aWPfXUU+Wqqqryf/4rzwYbbFAeOXJk5fkpp5xSTlL+3e9+t9T8H+33oYceKicpX3rppUut/yRmXJaRI0eWkyzzMWjQoMp2J554Yrlx48blt956q7Js4cKF5bZt29b5XTvssMPKnTt3Ls+ZM6fOfvbff/9ymzZtKj+Lj34+vXr1qvP35Cc/+Uk5Sfnxxx+vLNtrr73KG2ywwVKzf+1rXyv36dNnuccIAAB8trjFHwAAa4Q99tgjDzzwQPbee+889thjOfvsszNo0KB07do1N954Y2W73/3ud6mtrc1+++2XOXPmVB6dOnXK5z73uUydOjXJh7dDmz17dr75zW+mSZMmldePGjUqbdq0qdeM06dPz7PPPpsDDzwwb775ZmXf77//fnbffffcfffdqa2trfOab37zm3We77TTTnnzzTcrt7i74YYbUltbm1NOOWWp72T66BZ7d9xxR955550ccMABdY65qqoq2267beWYP84tt9ySbbbZJjvuuGNlWcuWLXPEEUfkhRdeyFNPPVWvzyP58Cq1Dh06ZL311su2226b++67L8cdd9xSV+iMHDkyzZo1qzxf0c9yyZIluf322zNkyJB079698vpevXpVrhb6b6677rpsvvnm2WeffZZat7xbGBY140eaNm2aO+64Y6nHmWeeWdlm+PDhWbx4cX73u99Vlv3hD3/IO++8k+HDhydJyuVyrrvuunz1q19NuVyu8zszaNCgzJ07N48++midfY8ePbrO35OPriT7xz/+sdy527Ztm5deeikPPfTQCh8rAACw9nOLPwAA1hhbb711fve732XRokV57LHHcv311+fHP/5x9t1330yfPj29e/fOs88+m3K5nM997nPLfI/GjRsnSf75z38myVLbNW7cOBtuuGG95nv22WeTZKnbq/27uXPnZp111qk8//dgkaSy7u23307r1q3z/PPPp1GjRundu/dy97vbbrstc33r1q3/69z//Oc/s+222y61vFevXpX1y7ut4sf52te+lqOOOiqlUimtWrVKnz590qJFi6W269mzZ53nK/pZLly4MP/617+W+fP+/Oc/n1tuueW/zvf8889n6NChK3IoSylqxo9UVVVl4MCB/3WbzTffPJtuummuueaaHHbYYUk+vL1f+/btK78fb7zxRt55551cfPHFufjii5f5PrNnz67z/L/9ni7P//7v/+aPf/xjttlmm2y88cbZc889c+CBB2aHHXZY7msBAIC1l0AFAMAap0mTJtl6662z9dZbZ5NNNsno0aPz29/+Nqeeempqa2tTKpVy6623pqqqaqnXfvS9OCvj466kWbJkSZ3nH10d9cMf/jB9+/Zd5mv+c//LmjH58CqXFfXRfi+//PJ06tRpqfXV1Q33j/3rr7/+cqNKkjpXTyUr/lkuXLhwlWesr0/rjMOHD8/48eMzZ86ctGrVKjfeeGMOOOCAyu/BR3MfdNBBHxvXNttsszrPV+X3tFevXpkxY0Zuvvnm3HbbbbnuuutywQUX5JRTTslpp522MocGAACsRQQqAADWaP369UuSvPrqq0mSjTbaKOVyOT179swmm2zysa/bYIMNknx4Fcy/X3m0ePHizJw5M5tvvnll2UdXi7zzzjt13uOjq7A+stFGGyX58IqlFYkyK2KjjTZKbW1tnnrqqY+NIB/td7311qvXfjfYYIPMmDFjqeV///vfK+uLtqKfZYcOHdKsWbPK1Uz/blnHtKz9PPHEE/91m48LlEXNuLKGDx+e0047Ldddd106duyYd999N/vvv3+deVq1apUlS5astt/T5L/fErFFixYZPnx4hg8fnkWLFuXrX/96xo8fnxNPPDFNmzZdbTMAAABrDt9BBQDAGmHq1KnLvFrjo9ujff7zn0+SfP3rX09VVVVOO+20pbYvl8t58803k3wYtjp06JBJkyZl0aJFlW0mT568VIj6KETcfffdlWVLlixZ6vZoW221VTbaaKP86Ec/yrx585aa9Y033ljRw60YMmRIGjVqlB/84AdLfX/VR8c3aNCgtG7dOhMmTMjixYtXer9f/vKX85e//CUPPPBAZdn777+fiy++OD169Pivtxf8pKzoZ1lVVZVBgwblhhtuyKxZsyrrn3766dx+++3L3c/QoUMrt4v8Tx99vh/dkvA/fy+KmnFl9erVK1/84hdzzTXX5Jprrknnzp2z8847V9ZXVVVl6NChue6665YZ5+rze5p8+DnNnTt3qeUf/Z37SJMmTdK7d++Uy+Vl/r4CAACfDa6gAgBgjXD00Udn/vz52WeffbLppptm0aJFuf/++3PNNdekR48eGT16dJIPY9IZZ5yRE088MS+88EKGDBmSVq1aZebMmbn++utzxBFHZOzYsWncuHHOOOOM/M///E922223DB8+PDNnzsyll1661HdQ9enTJ9ttt11OPPHEvPXWW2nXrl2uvvrqfPDBB3W2a9SoUX7xi1/kS1/6Uvr06ZPRo0ena9euefnllzN16tS0bt06N91000od98Ybb5yTTjopp59+enbaaad8/etfT01NTR566KF06dIlEydOTOvWrXPhhRfm4IMPzpZbbpn9998/HTp0yKxZszJlypTssMMOOf/88z92HyeccEKuuuqqfOlLX8p3vvOdtGvXLr/61a8yc+bMXHfddWnUqPj/rm1lPsvTTjstt912W3baaad8+9vfzgcffJDzzjsvffr0yd/+9rf/up/vfve7ufbaazNs2LAceuih2WqrrfLWW2/lxhtvzKRJk7L55ptno402Stu2bTNp0qS0atUqLVq0yLbbbpuePXsWMuNHPvjgg/z6179e5rp99tmnznd7DR8+PKecckqaNm2aww47bKmf4ZlnnpmpU6dm2223zeGHH57evXvnrbfeyqOPPpo//vGPeeutt1Zopn+31VZb5Zprrslxxx2XrbfeOi1btsxXv/rV7LnnnunUqVN22GGHdOzYMU8//XTOP//87LXXXmnVqtVK7wcAAFhLlAEAYA1w6623lg899NDypptuWm7ZsmW5SZMm5Y033rh89NFHl19//fWltr/uuuvKO+64Y7lFixblFi1alDfddNPykUceWZ4xY0ad7S644IJyz549yzU1NeV+/fqV77777vKAAQPKAwYMqLPd888/Xx44cGC5pqam3LFjx/L3v//98h133FFOUp46dWqdbf/617+Wv/71r5fXXXfdck1NTXmDDTYo77fffuU777yzss2pp55aTlJ+44036rz20ksvLScpz5w5s87ySy65pLzFFluUa2pqyuuss055wIAB5TvuuKPONlOnTi0PGjSo3KZNm3LTpk3LG220UXnUqFHlhx9+eLmf7/PPP1/ed999y23bti03bdq0vM0225RvvvnmpbZLUj7yyCOX+34ruu3UqVPLScq//e1vl7l+RT7Lcrlcvuuuu8pbbbVVuUmTJuUNN9ywPGnSpMpn/O822GCD8siRI+sse/PNN8tHHXVUuWvXruUmTZqU119//fLIkSPLc+bMqWzz+9//vty7d+9ydXV1OUn50ksv/cRmXJaRI0eWk3zs4z9/X5599tnKunvvvXeZ7/n666+XjzzyyHK3bt3KjRs3Lnfq1Km8++67ly+++OLKNh/385k5c+ZSn8O8efPKBx54YLlt27blJOUNNtigXC6XyxdddFF55513rnw+G220Ufm73/1uee7cucs9bgAAYO1VKpdX4tuXAQDgM2CXXXZJkkybNq1B5wAAAIC1le+gAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiU76ACAAAAAACgUK6gAgAAAAAAoFACFQAAAAAAAIWqbugBkqS2tjavvPJKWrVqlVKp1NDjAAAAAAAADahcLue9995Lly5d0qiRa23WRp+KQPXKK6+kW7duDT0GAAAAAADwKfLiiy9m/fXXb+gx+AR8KgJVq1atknz4i9a6desGngYAAAAAAGhI7777brp161bpB6x9PhWB6qPb+rVu3VqgAgAAAAAAksTXAq3F3LgRAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFCfiu+gAgAAAAAAWBnlcjkffPBBlixZ0tCj8P9r3LhxqqqqVmhbgQoAAAAAAFijLFq0KK+++mrmz5/f0KPwb0qlUtZff/20bNlyudsKVAAAAAAAwBqjtrY2M2fOTFVVVbp06ZImTZqkVCo19FifeeVyOW+88UZeeumlfO5zn1vulVQCFQAAAAAAsMZYtGhRamtr061btzRv3ryhx+HfdOjQIS+88EIWL1683EDVqKCZAAAAAAAAVptGjSSOT5uVuZLNTw8AAAAAAIBCucUfAAAAAACwVpg1K5kzp7j9tW+fdO9e3P7WJgIVAAAAAACwxps1K/n855MFC4rbZ9OmyYwZIlV9uMUfAAAAAACwxpszp9g4lXy4v5W5YmvUqFEplUpLPQYPHvzJDbkM48aNS9++fVdo29/+9rfZdNNN07Rp03zxi1/MLbfcslpmEKgAAAAAAAAKMnjw4Lz66qt1HldddVVDj7VM999/fw444IAcdthh+etf/5ohQ4ZkyJAheeKJJ1b5vQUqAAAAAACAgtTU1KRTp051Huuss06S5MADD8zw4cPrbL948eK0b98+l112WZKktrY2EydOTM+ePdOsWbNsvvnmufbaayvbT5s2LaVSKXfeeWf69euX5s2bp3///pkxY0aSZPLkyTnttNPy2GOPVa7gmjx58jJn/clPfpLBgwfnu9/9bnr16pXTTz89W265Zc4///xV/hwEKgAAAAAAgE+BESNG5Kabbsq8efMqy26//fbMnz8/++yzT5Jk4sSJueyyyzJp0qQ8+eSTGTNmTA466KDcdddddd7rpJNOyjnnnJOHH3441dXVOfTQQ5Mkw4cPz/HHH58+ffpUruD6zyj2kQceeCADBw6ss2zQoEF54IEHVvlYBSoAAAAAAICC3HzzzWnZsmWdx4QJE5J8GH9atGiR66+/vrL9lVdemb333jutWrXKwoULM2HChFxyySUZNGhQNtxww4waNSoHHXRQLrroojr7GT9+fAYMGJDevXvnhBNOyP33358FCxakWbNmadmyZaqrqytXcDVr1myZs7722mvp2LFjnWUdO3bMa6+9tsqfQ/UqvwMAAAAAAAArZNddd82FF15YZ1m7du2SJNXV1dlvv/1yxRVX5OCDD87777+f3//+97n66quTJM8991zmz5+fPfbYo87rFy1alC222KLOss0226zy586dOydJZs+ene7du6/2Y6oPgQoAAAAAAKAgLVq0yMYbb/yx60eMGJEBAwZk9uzZueOOO9KsWbMMHjw4SSq3/psyZUq6du1a53U1NTV1njdu3Ljy51KplOTD769aGZ06dcrrr79eZ9nrr7+eTp06rdT7LItABQAAAAAA8CnRv3//dOvWLddcc01uvfXWDBs2rBKbevfunZqamsyaNSsDBgyo9z6aNGmSJUuWLHe77bffPnfeeWeOPfbYyrI77rgj22+/fb33/RGBag1QOq3U0COsVcrjGnqCT15pXP1e91n4bOrD57n61fcz5VNkXLmeryv2f9P8PVzzOV+s2er7d3BN+rmv7cfoPPrZVUo9/7ceWGOVU79/Vq/v+aK++1vbOf9+dpX96D9TFi5cuNR3OFVXV6d9+/aV5wceeGAmTZqUZ555JlOnTq0sb9WqVcaOHZsxY8aktrY2O+64Y+bOnZv77rsvrVu3zsiRI1dohh49emTmzJmZPn161l9//bRq1WqpK7CS5JhjjsmAAQNyzjnnZK+99srVV1+dhx9+OBdffHE9j/7/abTK7wAAAAAAANDA2rdPmjYtdp9Nm36435Vx2223pXPnznUeO+64Y51tRowYkaeeeipdu3bNDjvsUGfd6aefnpNPPjkTJ05Mr169Mnjw4EyZMiU9e/Zc4RmGDh2awYMHZ9ddd02HDh1y1VVXLXO7/v3758orr8zFF1+czTffPNdee21uuOGGfOELX1i5g14GV1ABAAAAAABrvO7dkxkzkjlzittn+/Yf7ndFTZ48OZMnT17udr169Ur5Yy6tK5VKOeaYY3LMMccsc/0uu+yy1Gv79u1bZ1lNTU2uvfbaFZp52LBhGTZs2AptuzIEKgAAAAAAYK3QvfvKBSMajlv8AQAAAAAAUCiBCgAAAAAAgEIJVAAAAAAAABRKoAIAAAAAAKBQAhUAAAAAAACFEqgAAAAAAAAolEAFAAAAAABAoaobegAAAAAAAIDVYtasZM6c4vbXvn3SvXtx+1uLCFQAAAAAAMCab9as5POfTxYsKG6fTZsmM2aIVPXgFn8AAAAAAMCab86cYuNU8uH+VuKKrVGjRqVUKi31GDx48Cc45NLGjRuXvn37Lne7J598MkOHDk2PHj1SKpVy7rnnrrYZXEEFAAAAAABQkMGDB+fSSy+ts6ympqaBpvnv5s+fnw033DDDhg3LmDFjVut7u4IKAAAAAACgIDU1NenUqVOdxzrrrJMkOfDAAzN8+PA62y9evDjt27fPZZddliSpra3NxIkT07NnzzRr1iybb755rr322sr206ZNS6lUyp133pl+/fqlefPm6d+/f2bMmJEkmTx5ck477bQ89thjlSu4Jk+evMxZt9566/zwhz/M/vvvv9ojmkAFAAAAAADwKTBixIjcdNNNmTdvXmXZ7bffnvnz52efffZJkkycODGXXXZZJk2alCeffDJjxozJQQcdlLvuuqvOe5100kk555xz8vDDD6e6ujqHHnpokmT48OE5/vjj06dPn7z66qt59dVXl4piRRCoAAAAAAAACnLzzTenZcuWdR4TJkxIkgwaNCgtWrTI9ddfX9n+yiuvzN57751WrVpl4cKFmTBhQi655JIMGjQoG264YUaNGpWDDjooF110UZ39jB8/PgMGDEjv3r1zwgkn5P7778+CBQvSrFmztGzZMtXV1ZUruJo1a1boZ5D4DioAAAAAAIDC7LrrrrnwwgvrLGvXrl2SpLq6Ovvtt1+uuOKKHHzwwXn//ffz+9//PldffXWS5Lnnnsv8+fOzxx571Hn9okWLssUWW9RZttlmm1X+3Llz5yTJ7Nmz071799V+TPUhUAEAAAAAABSkRYsW2XjjjT92/YgRIzJgwIDMnj07d9xxR5o1a5bBgwcnSeXWf1OmTEnXrl3rvO4/vyOqcePGlT+XSqUkH35/1aeFQAUAAAAAAPAp0b9//3Tr1i3XXHNNbr311gwbNqwSm3r37p2amprMmjUrAwYMqPc+mjRpkiVLlqyuketFoAIAAAAAACjIwoUL89prr9VZVl1dnfbt21eeH3jggZk0aVKeeeaZTJ06tbK8VatWGTt2bMaMGZPa2trsuOOOmTt3bu677760bt06I0eOXKEZevTokZkzZ2b69OlZf/3106pVq6WuwEo+vHXgU089Vfnzyy+/nOnTp6dly5b/9SqwFdFolV4NAAAAAADwadC+fdK0abH7bNr0w/2uhNtuuy2dO3eu89hxxx3rbDNixIg89dRT6dq1a3bYYYc6604//fScfPLJmThxYnr16pXBgwdnypQp6dmz5wrPMHTo0AwePDi77rprOnTokKuuumqZ273yyivZYostssUWW+TVV1/Nj370o2yxxRb5xje+sVLHvCyuoAIAAAAAANZ83bsnM2Ykc+YUt8/27T/c7wqaPHlyJk+evNztevXqlXK5vMx1pVIpxxxzTI455phlrt9ll12Wem3fvn3rLKupqcm111673Dl69OjxsXOsKoEKAAAAAABYO3TvvlLBiIbjFn8AAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAA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KJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKFWS6BasmRJpk+fnrfffnt1vB0AAAAAAABrsXoFqmOPPTa//OUvk3wYpwYMGJAtt9wy3bp1y7Rp01bnfAAAAAAAAKxl6hWorr322my++eZJkptuuikzZ87M3//+94wZMyYnnXTSah0QAAAAAACAtUu9AtWcOXPSqVOnJMktt9ySYcOGZZNNNsmhhx6axx9/fLUOCAAAAAAAwNqlXoGqY8eOeeqpp7JkyZLcdttt2WOPPZIk8+fPT1VV1WodEAAAAAAAgLVLdX1eNHr06Oy3337p3LlzSqVSBg4cmCR58MEHs+mmm67WAQEAAAAAAFi71CtQjRs3Ll/4whfy4osvZtiwYampqUmSVFVV5YQTTlitAwIAAAAAALB2qVeguuyyyzJ8+PBKmPrIAQcckKuvvnq1DAYAAAAAAMDaqV7fQTV69OjMnTt3qeXvvfdeRo8evcpDAQAAAAAAsPaqV6Aql8splUpLLX/ppZfSpk2bVR4KAAAAAACAtddK3eJviy22SKlUSqlUyu67757q6v/38iVLlmTmzJkZPHjwah8SAAAAAACAtcdKBaohQ4YkSaZPn55BgwalZcuWlXVNmjRJjx49MnTo0NU6IAAAAAAAAGuXlQpUp556apKkR48eGT58eJo2bfqJDAUAAAAAAMDaa6UC1UdGjhyZJFm0aFFmz56d2traOuu7d+++6pMBAAAAAACwVqpXoHr22Wdz6KGH5v7776+zvFwup1QqZcmSJatlOAAAAAAAANY+9QpUo0aNSnV1dW6++eZ07tw5pVJpdc8FAAAAAADAWqpegWr69Ol55JFHsummm67ueQAAAAAAAFjLNarPi3r37p05c+as7lkAAAAAAAD4DKhXoDrrrLPyve99L9OmTcubb76Zd999t84DAAAAAAAAPk69bvE3cODAJMnuu+9eZ3m5XE6pVMqSJUtWfTIAAAAAAADWSvUKVFOnTl3dcwAAAAAAAPAZUa9ANWDAgNU9BwAAAAAAAJ8R9foOqiS55557ctBBB6V///55+eWXkySXX3557r333tU2HAAAAAAAAGufegWq6667LoMGDUqzZs3y6KOPZuHChUmSuXPnZsKECat1QAAAAAAAANYu9QpUZ5xxRiZNmpSf//znady4cWX5DjvskEcffXS1DQcAAAAAAMDap16BasaMGdl5552XWt6mTZu88847qzoTAAAAAAAAa7F6BapOnTrlueeeW2r5vffemw033HCVhwIAAAAAAGDtVa9Adfjhh+eYY47Jgw8+mFKplFdeeSVXXHFFxo4dm29961ure0YAAAAAAADWItX1edEJJ5yQ2tra7L777pk/f3523nnn1NTUZOzYsTn66KNX94wAAAAAAACsReoVqEqlUk466aR897vfzXPPPZd58+ald+/eadmy5eqeDwAAAAAAgLVMvW7x9+tf/zrz589PkyZN0rt372yzzTbiFAAAAAAAACukXoFqzJgxWW+99XLggQfmlltuyZIlS1b3XAAAAAAAAKyl6hWoXn311Vx99dUplUrZb7/90rlz5xx55JG5//77V/d8AAAAAAAArGXqFaiqq6vzla98JVdccUVmz56dH//4x3nhhRey6667ZqONNlrdMwIAAAAAALAWqV7VN2jevHkGDRqUt99+O//85z/z9NNPr465AAAAAAAAWEvV6wqqJJk/f36uuOKKfPnLX07Xrl1z7rnnZp999smTTz65OucDAAAAAABgLVOvK6j233//3HzzzWnevHn222+/nHzyydl+++1X92wAAAAAAACsheoVqKqqqvKb3/wmgwYNSlVV1eqeCQAAAAAAgLXYSt3i78tf/nLmzp1bubXfD3/4w7zzzjuV9W+++WZ69+69umcEAAAAAABgLbJSger222/PwoULK88nTJiQt956q/L8gw8+yIwZM1bfdAAAAAAAAKx1VipQlcvl//ocAAAAAAAAlmelAhUAAAAAAACsqpUKVKVSKaVSaallAAAAAAAAsKKqV2bjcrmcUaNGpaamJkmyYMGCfPOb30yLFi2SpM73UwEAAAAAAMCyrFSgGjlyZJ3nBx100FLbHHLIIas2EQAAAAAAAGu1lQpUl1566Sc1BwAAAAAAAJ8RK/UdVAAAAAAAALCqBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFACFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQlU39ABJUi6XkyTvvvtuA0/yKbWgoQdYu3wmfsvq+Tvzmfhs6sPnufo5r60F6vkbXvDP3t/DtYDzxRqt3n8H16Cf+9p+jM6jn2V++vBZU/+/9fV7pbPMx/HJfFb5v8aX9lEv+KgfsPYplT8FP92XXnop3bp1a+gxAAAAAACAT5EXX3wx66+/fkOPwSfgUxGoamtr88orr6RVq1YplUoNPc4a49133023bt3y4osvpnXr1g09DrAWcp4BPmnOM8AnyTkG+KQ5zwCftM/yeaZcLue9995Lly5d0qiRbytaG30qbvHXqFEjBXQVtG7d+jN3cgKK5TwDfNKcZ4BPknMM8ElzngE+aZ/V80ybNm0aegQ+QbIjAAAAAAAAhRKoAAAAAAAAKJRAtQarqanJqaeempqamoYeBVhLOc8AnzTnGeCT5BwDfNKcZ4BPmvMMa7NSuVwuN/QQAAAAAAAAfHa4ggoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKo1lA/+9nP0qNHjzRt2jTbbrtt/vKXvzT0SMAaauLEidl6663TqlWrrLfeehkyZEhmzJhRZ5sFCxbkyCOPzLrrrpuWLVtm6NChef311xtoYmBNduaZZ6ZUKuXYY4+tLHOOAVaHl19+OQcddFDWXXfdNGvWLF/84hfz8MMPV9aXy+Wccsop6dy5c5o1a5aBAwfm2WefbcCJgTXFkiVLcvLJJ6dnz55p1qxZNtpoo5x++ukpl8uVbZxjgJVx991356tf/Wq6dOmSUqmUG264oc76FTmnvPXWWxkxYkRat26dtm3b5rDDDsu8efMKPApYdQLVGuiaa67Jcccdl1NPPTWPPvpoNt988wwaNCizZ89u6NGANdBdd92VI488Mn/+859zxx13ZPHixdlzzz3z/vvvV7YZM2ZMbrrppvz2t7/NXXfdlVdeeSVf//rXG3BqYE300EMP5aKLLspmm21WZ7lzDLCq3n777eywww5p3Lhxbr311jz11FM555xzss4661S2Ofvss/PTn/40kyZNyoMPPpgWLVpk0KBBWbBgQQNODqwJzjrrrFx44YU5//zz8/TTT+ess87K2WefnfPOO6+yjXMMsDLef//9bL755vnZz362zPUrck4ZMWJEnnzyydxxxx25+eabc/fdd+eII44o6hBgtSiV//0/92CNsO2222brrbfO+eefnySpra1Nt27dcvTRR+eEE05o4OmANd0bb7yR9dZbL3fddVd23nnnzJ07Nx06dMiVV16ZfffdN0ny97//Pb169coDDzyQ7bbbroEnBtYE8+bNy5ZbbpkLLrggZ5xxRvr27Ztzzz3XOQZYLU444YTcd999ueeee5a5vlwup0uXLjn++OMzduzYJMncuXPTsWPHTJ48Ofvvv3+R4wJrmK985Svp2LFjfvnLX1aWDR06NM2aNcuvf/1r5xhglZRKpVx//fUZMmRIkhX755ann346vXv3zkMPPZR+/folSW677bZ8+ctfzksvvZQuXbo01OHASnEF1Rpm0aJFeeSRRzJw4MDKskaNGmXgwIF54IEHGnAyYG0xd+7cJEm7du2SJI888kgWL15c57yz6aabpnv37s47wAo78sgjs9dee9U5lyTOMcDqceONN6Zfv34ZNmxY1ltvvWyxxRb5+c9/Xlk/c+bMvPbaa3XONW3atMm2227rXAMsV//+/XPnnXfmmWeeSZI89thjuffee/OlL30piXMMsHqtyDnlgQceSNu2bStxKkkGDhyYRo0a5cEHHyx8Zqiv6oYegJUzZ86cLFmyJB07dqyzvGPHjvn73//eQFMBa4va2toce+yx2WGHHfKFL3whSfLaa6+lSZMmadu2bZ1tO3bsmNdee60BpgTWNFdffXUeffTRPPTQQ0utc44BVod//OMfufDCC3Pcccfl+9//fh566KF85zvfSZMmTTJy5MjK+WRZ/x7lXAMszwknnJB33303m266aaqqqrJkyZKMHz8+I0aMSBLnGGC1WpFzymuvvZb11luvzvrq6uq0a9fOeYc1ikAFQMWRRx6ZJ554Ivfee29DjwKsJV588cUcc8wxueOOO9K0adOGHgdYS9XW1qZfv36ZMGFCkmSLLbbIE088kUmTJmXkyJENPB2wpvvNb36TK664IldeeWX69OmT6dOn59hjj02XLl2cYwBgFbjF3xqmffv2qaqqyuuvv15n+euvv55OnTo10FTA2uCoo47KzTffnKlTp2b99devLO/UqVMWLVqUd955p872zjvAinjkkUcye/bsbLnllqmurk51dXXuuuuu/PSnP011dXU6duzoHAOsss6dO6d37951lvXq1SuzZs1Kksr5xL9HAfXx3e9+NyeccEL233//fPGLX8zBBx+cMWPGZOLEiUmcY4DVa0XOKZ06dcrs2bPrrP/ggw/y1ltvOe+wRhGo1jBNmjTJVlttlTvvvLOyrLa2NnfeeWe23377BpwMWFOVy+UcddRRuf766/OnP/0pPXv2rLN+q622SuPGjeucd2bMmJFZs2Y57wDLtfvuu+fxxx/P9OnTK49+/fplxIgRlT87xwCraocddsiMGTPqLHvmmWeywQYbJEl69uyZTp061TnXvPvuu3nwwQeda4Dlmj9/fho1qvt/oVVVVaW2tjaJcwyweq3IOWX77bfPO++8k0ceeaSyzZ/+9KfU1tZm2223LXxmqC+3+FsDHXfccRk5cmT69euXbbbZJueee27ef//9jB49uqFHA9ZARx55ZK688sr8/ve/T6tWrSr3Km7Tpk2aNWuWNm3a5LDDDstxxx2Xdu3apXXr1jn66KOz/fbbZ7vttmvg6YFPu1atWlW+0+4jLVq0yLrrrltZ7hwDrKoxY8akf//+mTBhQvbbb7/85S9/ycUXX5yLL744SVIqlXLsscfmjDPOyOc+97n07NkzJ598crp06ZIhQ4Y07PDAp95Xv/rVjB8/Pt27d0+fPn3y17/+Nf/3//7fHHrooUmcY4CVN2/evDz33HOV5zNnzsz06dPTrl27dO/efbnnlF69emXw4ME5/PDDM2nSpCxevDhHHXVU9t9//3Tp0qWBjgpWXqlcLpcbeghW3vnnn58f/vCHee2119K3b9/89Kc/VceBeimVSstcfumll2bUqFFJkgULFuT444/PVVddlYULF2bQoEG54IILXDYO1Msuu+ySvn375txzz03iHAOsHjfffHNOPPHEPPvss+nZs2eOO+64HH744ZX15XI5p556ai6++OK888472XHHHXPBBRdkk002acCpgTXBe++9l5NPPjnXX399Zs+enS5duuSAAw7IKaeckiZNmiRxjgFWzrRp07LrrrsutXzkyJGZPHnyCp1T3nrrrRx11FG56aab0qhRowwdOjQ//elP07JlyyIPBVaJQAUAAAAAAEChfAcVAAAAAAAAhRKoAAAAAAAAKJRABQAAAAAAQKEEKgAAAAAAAAolUAEAAAAAAFAogQoAAAAAAIBCCVQAAAAAAAAUSqACAAAAAACgUAIVAAAAAAAAhRKoAACAOt54441861vfSvfu3VNTU5NOnTpl0KBBue+++xp6NAAAANYS1Q09AAAA8OkydOjQLFq0KL/61a+y4YYb5vXXX8+dd96ZN998s6FHAwAAYC3hCioAAKDinXfeyT333JOzzjoru+66azbYYINss802OfHEE7P33ntXtvnGN76RDh06pHXr1tltt93y2GOP1XmfM888Mx07dkyrVq1y2GGH5YQTTkjfvn0r63fZZZcce+yxdV4zZMiQjBo1qvJ84cKFGTt2bLp27ZoWLVpk2223zbRp0yrrJ0+enLZt2+b2229Pr1690rJlywwePDivvvpqnfe95JJL0qdPn9TU1KRz58456qij6hzv8o4FAACA1U+gAgAAKlq2bJmWLVvmhhtuyMKFC5e5zbBhwzJ79uzceuuteeSRR7Lllltm9913z1tvvZUk+c1vfpNx48ZlwoQJefjhh9O5c+dccMEFKz3LUUcdlQceeCBXX311/va3v2XYsGEZPHhwnn322co28+fPz49+9KNcfvnlufvuuzNr1qyMHTu2sv7CCy/MkUcemSOOOCKPP/54brzxxmy88cYrfCwAAAB8Mkrlcrnc0EMAAACfHtddd10OP/zw/Otf/8qWW26ZAQMGZP/9989mm22We++9N3vttVdmz56dmpqayms23njjfO9738sRRxyR/v37Z4sttsjPfvazyvrtttsuCxYsyPTp05N8eAVV3759c+6551a2GTJkSNq2bZvJkydn1qxZ2XDDDTNr1qx06dKlss3AgQOzzTbbZMKECZk8eXJGjx6d5557LhtttFGS5IILLsgPfvCDvPbaa0mSrl27ZvTo0TnjjDOWOs4VORYAAAA+Gb6DCgAAqGPo0KHZa6+9cs899+TPf/5zbr311px99tn5xS9+kffffz/z5s3LuuuuW+c1//rXv/L8888nSZ5++ul885vfrLN+++23z9SpU1d4hscffzxLlizJJptsUmf5woUL6+y7efPmlTiVJJ07d87s2bOTJLNnz84rr7yS3XfffZn7eOyxx5Z7LAAAAHwyBCoAAGApTZs2zR577JE99tgjJ598cr7xjW/k1FNPzbe//e107ty5zndBfaRt27Yr/P6NGjXKf97MYfHixZU/z5s3L1VVVXnkkUdSVVVVZ7uWLVtW/ty4ceM660qlUuV9mzVr9l9nmDdv3mo5FgAAAFaeQAUAACxX7969c8MNN2TLLbfMa6+9lurq6vTo0WOZ2/bq1SsPPvhgDjnkkMqyP//5z3W26dChQ1599dXK8yVLluSJJ57IrrvumiTZYostsmTJksyePTs77bRTvWZu1apVevTokTvvvLPyvv9uRY4FAACAT0ajhh4AAAD49HjzzTez22675de//nX+9re/ZebMmfntb3+bs88+O1/72tcycODAbL/99hkyZEj+8Ic/5IUXXsj999+fk046KQ8//HCS5Jhjjskll1ySSy+9NM8880xOPfXUPPnkk3X2s9tuu2XKlCmZMmVK/v73v+db3/pW3nnnncr6TTbZJCNGjMghhxyS3/3ud5k5c2b+8pe/ZOLEiZkyZcoKH8+4ceNyzjnn5Kc//WmeffbZPProoznvvPOSZIWOBQAAgE+GK6gAAICKli1bZtttt82Pf/zjPP/881m8eHG6deuWww8/PN///vdTKpVyyy235KSTTsro0aPzxhtvpFOnTtl5553TsWPHJMnw4cPz/PPP53vf+14WLFiQoUOH5lvf+lZuv/32yn4OPfTQPPbYYznkkENSXV2dMWPGLHWV06WXXpozzjgjxx9/fF5++eW0b98+2223Xb7yla+s8PGMHDkyCxYsyI9//OOMHTs27du3z7777pskK3QsAAAAfDJK5f+88TsAAMBqNm7cuNxwww2ZPn16Q48CAADAp4Bb/AEAAAAAAFAogQoAAAAAAIBCucUfAAAAAAAAhXIFFQAAAAAAAIUSqAAAAAAAACiUQAUAAAAAAEChBCoAAAAAAAAKJVABAAAAAABQKIEKAAAAAACAQglUAAAAAAAAFEqgAgAAAAAAoFD/H459H6qLH0eZAAAAAElFTkSuQmCC",
+      "text/plain": [
+       "<Figure size 2000x600 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "import matplotlib.patches as mpatches\n",
+    "\n",
+    "# Get the sequence of results\n",
+    "results_sequence = results_df['marker']\n",
+    "print('marker count:')\n",
+    "results_sequence_counts = results_df['marker'].value_counts()\n",
+    "print(results_sequence_counts)\n",
+    "# Define colors for each class in the sequence\n",
+    "colors = ['blue' if result == 0 else 'red' if result == 1 else 'green' for result in results_sequence]\n",
+    "\n",
+    "plt.figure(figsize=(20, 6))  \n",
+    "plt.bar(range(len(results_sequence)), np.ones_like(results_sequence), color=colors, width=1)\n",
+    "patches = [mpatches.Patch(color=color, label=label) for label, color in zip(['Event 0', 'Event 1', 'Event 2'], ['blue', 'red', 'green'])]\n",
+    "plt.legend(handles=patches, bbox_to_anchor=(1, 1), loc='upper left')\n",
+    "plt.xlabel('Sequence')\n",
+    "plt.ylabel('Events')\n",
+    "plt.title('Sequence of Predicted Events')\n",
+    "plt.yticks([])\n",
+    "plt.show()"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "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.11.1"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
-- 
GitLab