DSA_SS24/notebooks/ml_grad_boost_tree.ipynb

508 lines
110 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Gradient Boosting Tree (GBT) Training and Analysis"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import sqlite3\n",
"import os\n",
"from datetime import datetime\n",
"from joblib import dump, load\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import xgboost as xgb\n",
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.metrics import confusion_matrix, f1_score\n",
"from sklearn.ensemble import GradientBoostingClassifier\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Import Data from Database"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# connect to the database\n",
"conn = sqlite3.connect('../features.db')\n",
"c = conn.cursor()\n",
"# get training, validation and test data\n",
"train = pd.read_sql_query(\"SELECT * FROM train\", conn)\n",
"valid = pd.read_sql_query(\"SELECT * FROM validation\", conn)\n",
"test = pd.read_sql_query(\"SELECT * FROM test\", conn)\n",
"# close the connection\n",
"conn.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Format Data for Machine Learning"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train_x shape: (3502, 10)\n",
"test_x shape: (438, 10)\n",
"valid_x shape: (438, 10)\n",
"features: ['age', 'gender', 'artial_rate', 'ventricular_rate', 'qrs_duration', 'qt_length', 'qrs_count', 'q_peak', 'r_axis', 't_axis']\n",
"number of classes: 4\n"
]
}
],
"source": [
"# get the target and features\n",
"train_y = train['y']\n",
"train_y = train_y.map({'GSVT': 0, 'AFIB': 1, 'SR': 2, 'SB': 3})\n",
"train_x = train.drop(columns=['y'])\n",
"\n",
"valid_y = valid['y']\n",
"valid_y = valid_y.map({'GSVT': 0, 'AFIB': 1, 'SR': 2, 'SB': 3})\n",
"valid_x = valid.drop(columns=['y'])\n",
"\n",
"test_y = test['y']\n",
"test_y = test_y.map({'GSVT': 0, 'AFIB': 1, 'SR': 2, 'SB': 3})\n",
"test_x = test.drop(columns=['y'])\n",
"\n",
"# drop id column\n",
"train_x = train_x.drop(columns=['id'])\n",
"valid_x = valid_x.drop(columns=['id'])\n",
"test_x = test_x.drop(columns=['id'])\n",
"\n",
"print('train_x shape:', train_x.shape)\n",
"print('test_x shape:', test_x.shape)\n",
"print('valid_x shape:', valid_x.shape)\n",
"# print column names\n",
"print('features:', train_x.columns.to_list())\n",
"feature_names = train_x.columns.to_list()\n",
"\n",
"# Create an imputer object with a mean filling strategy\n",
"imputer = SimpleImputer(strategy='mean')\n",
"\n",
"train_x = imputer.fit_transform(train_x)\n",
"valid_x = imputer.transform(valid_x)\n",
"test_x = imputer.transform(test_x)\n",
"\n",
"# Scale Data between 0 and 1\n",
"scaler = MinMaxScaler()\n",
"# Fit the scaler to your data and then transform it\n",
"train_x = scaler.fit_transform(train_x)\n",
"valid_x = scaler.transform(valid_x)\n",
"test_x = scaler.transform(test_x)\n",
"\n",
"\n",
"\n",
"# use xgboost\n",
"dtrain = xgb.DMatrix(train_x, label=train_y)\n",
"dvalid = xgb.DMatrix(valid_x, label=valid_y)\n",
"dtest = xgb.DMatrix(test_x, label=test_y)\n",
"\n",
"num_classes= len(set(valid_y.to_list()))\n",
"print('number of classes:', num_classes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test Grid for Hyperparameter Analysis"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"param_grid = {\n",
" 'n_estimators': [100, 200, 300],\n",
" 'learning_rate': [0.1, 0.2, 0.3],\n",
" 'max_depth': [1, 3, 5],\n",
"}# 'random_stat': 42"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# Create a XGBClassifier object\n",
"model = GradientBoostingClassifier()\n",
"\n",
"# Create the grid search object\n",
"grid_search = GridSearchCV(model, param_grid, cv=3, scoring='accuracy')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: total: 2min 49s\n",
"Wall time: 4min 28s\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=3, estimator=GradientBoostingClassifier(),\n",
" param_grid={&#x27;learning_rate&#x27;: [0.1, 0.2, 0.3],\n",
" &#x27;max_depth&#x27;: [1, 3, 5],\n",
" &#x27;n_estimators&#x27;: [100, 200, 300]},\n",
" scoring=&#x27;accuracy&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GridSearchCV</label><div class=\"sk-toggleable__content\"><pre>GridSearchCV(cv=3, estimator=GradientBoostingClassifier(),\n",
" param_grid={&#x27;learning_rate&#x27;: [0.1, 0.2, 0.3],\n",
" &#x27;max_depth&#x27;: [1, 3, 5],\n",
" &#x27;n_estimators&#x27;: [100, 200, 300]},\n",
" scoring=&#x27;accuracy&#x27;)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: GradientBoostingClassifier</label><div class=\"sk-toggleable__content\"><pre>GradientBoostingClassifier()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GradientBoostingClassifier</label><div class=\"sk-toggleable__content\"><pre>GradientBoostingClassifier()</pre></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"GridSearchCV(cv=3, estimator=GradientBoostingClassifier(),\n",
" param_grid={'learning_rate': [0.1, 0.2, 0.3],\n",
" 'max_depth': [1, 3, 5],\n",
" 'n_estimators': [100, 200, 300]},\n",
" scoring='accuracy')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"# Fit the grid search object to the data\n",
"grid_search.fit(train_x, train_y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Results"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best parameters: {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 100}\n",
"Best score: 0.7969733696438982\n"
]
}
],
"source": [
"# Print the best parameters and the best score\n",
"print(f'Best parameters: {grid_search.best_params_}')\n",
"print(f'Best score: {grid_search.best_score_}')\n",
"#{'eta': 0.1, 'learning_rate': 0.1, 'max_depth': 5, 'min_child_weight': 3, 'n_estimators': 100}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Save Model"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['../ml_models/best_gbt_model_20240612171757.joblib']"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Save the best model\n",
"best_model = grid_search.best_estimator_\n",
"# timestamp\n",
"timestamp = datetime.now().strftime('%Y%m%d%H%M%S')\n",
"model_path = f'../ml_models/best_gbt_model_{timestamp}.joblib'\n",
"dump(best_model, model_path)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example Training of best Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"load the best model to get the best hyperparameters from it"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"# list directory\n",
"models = os.listdir('../ml_models')\n",
"model_path = [model for model in models if 'joblib' in model and 'best' in model and 'gbt' in model][0]\n",
"model_path = f'../ml_models/{model_path}'\n",
"# load the best model\n",
"best_model = load(model_path)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GradientBoostingClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GradientBoostingClassifier</label><div class=\"sk-toggleable__content\"><pre>GradientBoostingClassifier()</pre></div></div></div></div></div>"
],
"text/plain": [
"GradientBoostingClassifier()"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# example training of a model with the best parameters\n",
"eval_result = {}\n",
"model = GradientBoostingClassifier(**grid_search.best_params_)\n",
"model.fit(train_x, train_y)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model Accuracy: 0.819634703196347\n"
]
}
],
"source": [
"preds = best_model.predict(test_x)\n",
"accuracy = accuracy_score(test_y, preds)\n",
"print(f\"Model Accuracy: {accuracy}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evaluate Model Performance"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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8OGKjIyUdLPSWK1aNZ08eVLh4eH217Vq1Uo2m00LFixwWtxp8rebb2GfRAAAkN7dLSG8k4ULF2revHmaP3++SpQooR07duj1119XRESE2rZt6+JIHaXpfRL/ufoZAADAVTzSxroV9enTR3379rUPG5cqVUq///67oqKi1LZtW4X9/4r3U6dOOVQST506pbJlyzo1ljS3T+Lly5f16aefavr06dq6dSuVRAAA4DauXr0qDw/HHQo9PT2VnJwsScqXL5/CwsK0evVqe1J46dIlbdq0SV26dHFqLGlm4cr69es1ffp0ff7554qIiFCLFi00cSKbBAMAANdLKz/L17RpUw0fPly5c+dWiRIl9Msvv+iDDz7QSy/dXNRms9n0+uuv65133lGhQoXsW+BERESoefPmTo3F0iQxJiZGs2bN0vTp03Xp0iW1atVKCQkJWrJkiYoXL25laAAAAKluwoQJGjBggF599VWdPn1aERER6ty5swYOHGi/580331RcXJw6deqkCxcuqHr16lqxYoXTt0qybHVz06ZNtX79ejVu3Fht2rRRgwYN5OnpqYwZM2rnzp0PlCSyutm9sLrZvbC62b2wutm9WLm6ufFHm13W99edH3VZ365kWSXx22+/Vffu3dWlSxcVKlTIqjAAAABwB5b9dvOGDRt0+fJllS9fXpUqVdLEiRN15swZq8IBAABuzObCf9Iry5LEypUra+rUqfrrr7/UuXNnffbZZ4qIiFBycrJWrlzJ9jcAACDVeNhcd6RXliWJt/j5+emll17Shg0btHv3bvXu3VvvvvuuQkJC9OSTT1odHgAAgFuyPEn8pyJFimjkyJH6888/9emnn1odDgAAcBM2m81lR3qVppLEWzw9PdW8eXMtXbrU6lAAAADcUprZTBsAAMAq6bjg5zJpspIIAAAAa1FJBAAAbs+DUqIJlUQAAACYUEkEAABuj0KiGUkiAABwe+l5qxpXYbgZAAAAJlQSAQCA26OQaEYlEQAAACZUEgEAgNtjCxwzKokAAAAwoZIIAADcHnVEMyqJAAAAMKGSCAAA3B77JJqRJAIAALfnQY5ownAzAAAATKgkAgAAt8dwsxmVRAAAAJhQSQQAAG6PQqIZlUQAAACYUEkEAABujzmJZveUJC5duvSeO3zyySfvOxgAAACkDfeUJDZv3vyeOrPZbEpKSnqQeAAA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",
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Get the confusion matrix\n",
"cm = confusion_matrix(test_y, preds)\n",
"\n",
"# Create a new figure\n",
"plt.figure(figsize=(8, 6))\n",
"\n",
"labels = ['GSVT', 'AFIB', 'SR', 'SB']\n",
"# Plot the confusion matrix\n",
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=labels, yticklabels=labels)\n",
"plt.xlabel('Predicted')\n",
"plt.ylabel('Actual')\n",
"plt.title('Confusion Matrix')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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4MABq2NAkgwUGXfccYfx2WefGYZhGCVLljT2799vGIZhbNu2zShTpoyFyZxXQECAsWXLFsMwHPfp/v37DS8vLyujObU33njDCAwMNA4ePGjExsYa3t7exs8//2x1LKfl7e1t7Nu3zzAMw4iNjTXatGljGIZh/Pzzz8Ztt91mZTSnxntq/rv99tuN2NhYq2MUOlWqVDHi4+MNwzCMX375xfD09DRmzpxpPPzww8ajjz5qcTrnVLt2baNTp07Gzp07jbNnzxrnzp1zuCHnfH19DT8/P8PFxcX+52s3b29vw8XFxXj++eetjumUvv32W6NOnTrGV199Zfzxxx9GcnKyww23TjGrSz9unYMHD6pu3bpZxt3d3ZWWlmZBIueXlpbmcIT7mjNnzsjd3d2CRIXDyy+/rNOnT6tBgwbKyMjQsmXLdNddd1kdy2kZhmGf+vjdd9/poYcekiQFBQXp1KlTVkZzaryn5r+zZ8+qU6dOVscodI4cOaLw8HBJ0ueff67/+7//0zPPPKO7775brVq1sjack9q7d68WLVpk36/Iu7i4OBmGoaeeekojR46Uj4+P/T43NzeFhISoSZMmFiZ0Xg888IAkqX379g6zCIz/P6uAKfu3DqW7CAkNDdWWLVsUHBzsML506VLdcccdFqVybs2bN9e8efM0evRoSZLNZlNmZqbGjRvH9LJcmDx5cpaxwMBAeXp6qkWLFlq3bp3WrVsnSerbt++tjuf0GjRooDFjxigiIkI//vijpk+fLulqaQwICLA4nfPiPTX/derUScuXL9d///tfq6MUKiVLltTp06d1++23a/ny5YqKipJ09XzPawuAIncaN26sffv2UbrzQY8ePSRdfU9t2rSpihcvbnGiwuNGi9Pi1qJ0FyFRUVHq06ePLl68KMMwtG7dOn300UeKiYnRO++8Y3U8pzRu3Djde++92rBhgy5fvqyXX35ZO3bs0JkzZ7R69Wqr4zmNSZMmZTvu6uqq1atX2/elzWajdOdBXFycunXrps8//1yvvvqq/ZfERYsWqWnTphanc168p+aPv3/oFh4ermHDhunXX39VzZo1s/zyzf//vLnvvvvUq1cv1a1bV3v27LEf/dqxY4dCQkKsDeekXnzxRQ0YMECJiYnZ/lutVauWRcmcV8uWLZWZmak9e/awOF0+admypdUR8P+xenkRM3/+fI0YMUL79++XJFWsWFEjR47U008/bXEy55WcnKwpU6Zo69atSk1NVb169dSnTx9VqFDB6mjADV28eFGurq4cVbgJvKfevJyuqmuz2VgQKI/OnTun1157TUeOHNFzzz2n+++/X5I0fPhwubm56dVXX7U4ofNxccm6FrHNZmPa7k349ddf1bVrVx0+fDjLpVfZp3m3atUqzZw5UwcOHNAnn3yiwMBAvf/++woNDVWzZs2sjldkULqLqAsXLig1NTXLZRkAALnHeypQtPzbqu//PO0E/65OnTqqUqWKRo4cqQoVKmRZyfzv53ojZz799FM9+eST6tatm95//33t3LlTYWFhmjJlipYsWaIlS5ZYHbHIoHQXIa1bt9bixYvl6+vrMJ6SkqIOHTro+++/tyaYE/vtt9+yHbfZbPLw8NDtt9/Ogmp5cPToUX355ZdKSEjQ5cuXHe6bOHGiRamcS+nSpbVnzx6VLVtWfn5+2V6G5ZozZ87cwmSFB++p+W/UqFEaOHBglgUq//zzT40fP57rdOfCb7/9pho1asjFxeW6P6uuYSo0CgIvLy9t3bqV8+TzUd26ddW/f391795dpUqV0tatWxUWFqbNmzerXbt2SkxMtDpikUHpLkJcXFyUmJiY5UjMiRMnFBgYqPT0dIuSOS8XFxd7mbn2X+nv5aZ48eLq0qWLZs6cKQ8PD0syOpv4+Hi1b99eYWFh2rVrl2rUqKFDhw7JMAzVq1ePIpND7733nh577DG5u7tr7ty5Nyzd1xaxQe7wnpr/XF1ddfz48Sz79PTp0/L392d6aS78/d/ntZ9Vf/+Vj6nQN2///v2Ki4vT77//LkmqXr26+vXrp0qVKlmczDm1bt1aL7/8sv30B9w8T09P7dy5UyEhIQ6l+8CBA6pevbouXrxodcQig4XUioC/f8K9c+dOh0+1MjIytHTpUgUGBloRzel99tlnGjx4sAYNGqRGjRpJktatW6cJEyZo+PDhunLlioYMGaLXXntNb775psVpncPQoUM1cOBAjRw5UqVKldKnn34qf39/devWjR/EufD3It2zZ0/rghRCvKea51oJ/KetW7eqdOnSFiRyXgcPHlS5cuXsf0b+WrZsmdq3b686dero7rvvliStXr1ad955p7766ivdd999Fid0PixOl//Kly+vffv2ZVkw8eeff1ZYWJg1oYqqW3tZcFjBZrMZLi4uhouLi2Gz2bLcPD09jdmzZ1sd0yk1bNjQWLp0aZbxpUuXGg0bNjQMwzA+++wzIyws7FZHc1olS5Y09u3bZxiGYfj6+hrbt283DMMwtmzZYgQHB1uYzHm9++672Y6np6cbQ4YMubVhCgHeU/Ofr6+v4efnZ7i4uNj/fO3m7e1tuLi4GM8//7zVMQulzMxMqyM4pTp16hiDBw/OMj548GCjbt26FiRyftm9n157n3VxcbE6nlMaO3asUb16dePXX381SpUqZaxatcr44IMPjHLlyhmTJ0+2Ol6RwpHuIuDgwYMyDENhYWFat26d/ZNvSXJzc5O/v79cXV0tTOi8tm3blu1iKcHBwdq2bZukqwuDHD9+/FZHc1peXl7287grVKig/fv3684775QknTp1yspoTqtv37765ptvNGvWLPn5+UmSdu/era5du+r06dOKiYmxOKFz4T01/8XFxckwDD311FMaOXKkw4JJbm5uCgkJUZMmTSxM6Nx69uypqVOnysvLy2H80KFDevLJJ7Vq1SqLkjmv33//XQsXLswy/tRTTykuLu7WByoEmJGR/4YMGaLMzEzde++9unDhglq0aCF3d3cNHDhQL774otXxihRKdxFwrRT+83qHuHnVqlVTbGysZs2aJTc3N0lSenq6YmNjVa1aNUnSsWPHFBAQYGVMp3LXXXfp559/1h133KEHHnhAAwYM0LZt27R48WLdddddVsdzSps3b9YTTzyhmjVr6t1339WePXv08ssvq0OHDpo2bZrV8ZwO76n579rpEKGhoWratCmXsctnW7duVa1atfTBBx/YP7x477331LdvX7Vu3dridM6pXLly2rJliypXruwwvmXLFq5ikEes+J7/bDabXn31VQ0aNEj79u1TamqqqlevrpIlS1odrcihdBdBO3fuzHZV6Pbt21uUyHlNnTpV7du312233WY/12jbtm3KyMjQ119/LUk6cOCAnn/+eStjOpWJEycqNTVVkjRy5EilpqZqwYIFqly5MiuX51GlSpW0evVqvfTSS7r//vvl6uqq9957T48//rjV0QoF3lPzT926dfXnn3/qzz//dBi32Wxyd3e3f7iJ3Fm3bp1eeeUVtWrVSgMGDNC+ffv07bffauLEierdu7fV8ZxS79699cwzz+jAgQNq2rSppKvndL/xxhuKioqyOJ1zmjdv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4eHatWsXR7puko+Pj1asWKGff/5Zv/32m1JTU1WvXj1FRERYHc1pJSQkqGnTppKkEiVK6Pz585KkJ598UnfddRelOw94TzXPuXPntG7dOp04cSLLOYfdu3e3KJVz++qrrzRv3jy1atVKkZGRat68ucLDwxUcHKz58+dTunPh7+cdL1u2zOGySxkZGYqPj1doaKgV0QqFefPmafz48dq7d68kqUqVKho0aJCefPJJi5M5P8q2tSjdRcirr76qV155Re+//75Kly5tdZxCi32bP5o1a6ZmzZpZHaNQKF++vM6cOaPg4GDdfvvt+vXXX1W7dm0dPHhQTHbKO95T899XX32lbt26KTU1Vd7e3g4fXtpsNkp3Hp05c8a+uJ+3t7fOnDkj6er77HPPPWdlNKdz7bxjm82mHj16ONxXvHhxhYSEcP5xHk2cOFHDhg3TCy+8YF847eeff9Z///tfnTp1Sv3797c4ofNJSkrSwIEDFR8frxMnTmT5mc8Hx7cOpbsImTJlivbt26eKFSsqODg4yzRdFlNCQREfH69Jkybp999/lyTdcccdeumllzjanUetW7fWl19+qbp16yoyMlL9+/fXokWLtGHDBnXs2NHqeE6L99T8N2DAAD311FMaO3asPD09rY5TaISFhengwYO6/fbbVa1aNS1cuFCNGjXSV199JV9fX6vjOZVrsy9CQ0O1fv16lS1b1uJEhcf//vc/TZ8+3eHDtfbt2+vOO+/UiBEjKN150LNnTyUkJGjYsGGqUKECszAtxDndRcjIkSNveP/fV+UErDJt2jT169dP//nPf9SkSRNJ0q+//qpFixZp0qRJ6tOnj8UJnU9mZqYyMzNVrNjVz1k//vhj/fLLL6pcubKeffZZubm5WZzQOfGemv+8vLy0bds2LrmWzyZNmiRXV1f17dtX3333nR5++GEZhqH09HRNnDhR/fr1szoiIA8PD23fvl3h4eEO43v37lXNmjV18eJFi5I5r1KlSmnVqlWqU6eO1VGKPEo3svjoo4/Uvn17FqyCJW677TYNGTJEL7zwgsP41KlTNXbsWB07dsyiZIXf888/r1GjRnHkJp/xnppzHTt21GOPPabOnTtbHaVQO3z4sDZu3Kjw8HDVqlXL6jhOKy0tTT/++GO2l2Ls27evRamcV40aNdS1a1e98sorDuNjxozRggULtG3bNouS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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot the feature importance\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"feature_importances = model.feature_importances_\n",
"# Sort the feature importances in descending order\n",
"sorted_idx = np.argsort(feature_importances)[::-1]\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"plt.title(\"Feature Importances\")\n",
"plt.bar(range(len(feature_importances)), feature_importances[sorted_idx], align=\"center\")\n",
"plt.xticks(range(len(feature_importances)), np.array(feature_names)[sorted_idx], rotation=90)\n",
"plt.xlim([-1, len(feature_importances)])\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIJElEQVR4nO3de5iVVd038O8wwIAgoOGAIjWZpwhPQRLioQOJSvRSpuQhFJXywJMxZYopaKZoecBKpVTEyh5J0x4KwwzjKRMjNUh7hTwhpoHgARRzkJn9/tHr1MRIiMO9gfl8rmtfl3vda+39u7mD1vXd6153RalUKgUAAAAACtSm3AUAAAAA0PoIpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMIJpQBaUEVFRc4777zG91OnTk1FRUUWLVpUtpoAADaW448/PjU1NW9pzOzZs1NRUZHZs2dvlJqAzYdQCtisvBHyvPFq27ZtevXqleOPPz7PPPNMucsDANjo/n0+1KFDh+y6664ZM2ZMli5dWu7yANZb23IXALAhvva1r+Xd7353Xnvttdx3332ZOnVq7rnnnjz88MPp0KFDucsDANjo/nU+dM899+Saa67JHXfckYcffjhbbbVVITVce+21aWhoeEtjDjzwwPz9739P+/btN1JVwOZCKAVslg499ND0798/SXLSSSele/fuueSSSzJ9+vQceeSRZa4OAGDj+/f50Dve8Y5cfvnl+Z//+Z8cddRRa/VftWpVOnXq1KI1tGvX7i2PadOmjR8RgSRu3wO2EAcccECS5PHHH29sW7BgQT796U9n2223TYcOHdK/f/9Mnz59rbEvvfRSxo4dm5qamlRVVWXHHXfMyJEjs3z58iTJ6tWrM378+PTr1y9du3ZNp06dcsABB+TXv/51MScHALAePvKRjyRJnnzyyRx//PHp3LlzHn/88Rx22GHZeuutc8wxxyRJGhoaMmnSpLzvfe9Lhw4d0qNHj3z+85/Piy++uNZn/uIXv8hBBx2UrbfeOl26dMkHPvCB/OhHP2o83tyeUjfffHP69evXOGaPPfbIlVde2Xj8zfaUuuWWW9KvX7907Ngx3bt3z7HHHrvW9gxvnNczzzyT4cOHp3Pnztluu+3y5S9/OfX19W/njw8oA6EUsEV4YyPxbbbZJkny5z//OR/84AfzyCOP5Kyzzspll12WTp06Zfjw4bn99tsbx73yyis54IAD8u1vfzsHH3xwrrzyypx88slZsGBB/vrXvyZJVq5cmeuuuy4f+tCHcskll+S8887LsmXLMmTIkMybN6/oUwUAaNYbP8694x3vSJKsWbMmQ4YMSXV1dS699NIcfvjhSZLPf/7zOeOMMzJo0KBceeWVGTVqVG666aYMGTIkr7/+euPnTZ06NUOHDs0LL7yQcePG5eKLL87ee++dmTNnvmkNd911V4466qhss802ueSSS3LxxRfnQx/6UH73u9+ts/apU6fmyCOPTGVlZSZOnJjRo0fntttuy/7775+XXnqpSd/6+voMGTIk73jHO3LppZfmoIMOymWXXZbvfe97G/LHBpSR2/eAzdKKFSuyfPnyvPbaa/n973+f888/P1VVVfn4xz+eJDn99NPzzne+M3/4wx9SVVWVJDn11FOz//7758wzz8wnP/nJJMk3v/nNPPzww7ntttsa25LknHPOSalUSvKPoGvRokVN9j0YPXp0dt9993z729/O9ddfX9RpAwA0+tf50O9+97t87WtfS8eOHfPxj388c+bMSV1dXY444ohMnDixccw999yT6667LjfddFOOPvroxvYPf/jDOeSQQ3LLLbfk6KOPzooVK/KFL3wh++67b2bPnt3kdrs35kjNmTFjRrp06ZI777wzlZWV63Uer7/+es4888z07ds3v/nNbxq/a//998/HP/7xXHHFFTn//PMb+7/22msZMWJEzj333CTJySefnPe///25/vrrc8opp6zfHx6wSbBSCtgsDR48ONttt1169+6dT3/60+nUqVOmT5+eHXfcMS+88ELuvvvuHHnkkXn55ZezfPnyLF++PM8//3yGDBmSRx99tHEp+E9+8pPstddeTQKpN1RUVCRJKisrGwOphoaGvPDCC1mzZk369++fBx98sLiTBgD4F/86H/rMZz6Tzp075/bbb0+vXr0a+/x7SHPLLbeka9eu+djHPtY4R1q+fHn69euXzp07N25PcNddd+Xll1/OWWedtdb+T2/MkZrTrVu3rFq1Knfdddd6n8f999+f5557LqeeemqT7xo6dGh23333zJgxY60xJ598cpP3BxxwQJ544on1/k5g02ClFLBZuuqqq7LrrrtmxYoVmTJlSn7zm980roh67LHHUiqVcu655zb+gvbvnnvuufTq1SuPP/5441L2dbnxxhtz2WWXZcGCBU2Wtb/73e9umRMCAHiL3pgPtW3bNj169Mhuu+2WNm3+ue6gbdu22XHHHZuMefTRR7NixYpUV1c3+5nPPfdckn/eCti3b9+3VNOpp56aH//4xzn00EPTq1evHHzwwTnyyCNzyCGHvOmYp556Kkmy2267rXVs9913zz333NOkrUOHDtluu+2atG2zzTbN7okFbNqEUsBmad9992182szw4cOz//775+ijj87ChQsbH0v85S9/OUOGDGl2/M4777ze3/XDH/4wxx9/fIYPH54zzjgj1dXVjfsd/OvG6gAARfrX+VBzqqqqmoRUyT9WfVdXV+emm25qdsy/hz1vVXV1debNm5c777wzv/jFL/KLX/wiN9xwQ0aOHJkbb7zxbX32G9b3tkBg0yeUAjZ7bwREH/7wh/Od73wnJ5xwQpJ/PKJ48ODB6xz7nve8Jw8//PA6+9x6663ZaaedcttttzVZrj5hwoS3XzwAQIHe85735Fe/+lUGDRqUjh07rrNfkjz88MNv6ce8JGnfvn2GDRuWYcOGpaGhIaeeemq++93v5txzz232s971rnclSRYuXNj4BME3LFy4sPE4sOWxpxSwRfjQhz6UfffdN5MmTUqXLl3yoQ99KN/97nfzt7/9ba2+y5Yta/zvww8/PPPnz2/yRL43vLGJ5xu/xv3rpp6///3vM2fOnJY+DQCAjerII49MfX19LrjggrWOrVmzpvFJdwcffHC23nrrTJw4Ma+99lqTfuva6Pz5559v8r5NmzbZc889kyR1dXXNjunfv3+qq6szefLkJn1+8Ytf5JFHHsnQoUPX69yAzY+VUsAW44wzzsgRRxyRqVOn5qqrrsr++++fPfbYI6NHj85OO+2UpUuXZs6cOfnrX/+a+fPnN4659dZbc8QRR+SEE05Iv3798sILL2T69OmZPHly9tprr3z84x9vfDrf0KFD8+STT2by5Mnp06dPXnnllTKfNQDA+jvooIPy+c9/PhMnTsy8efNy8MEHp127dnn00Udzyy235Morr8ynP/3pdOnSJVdccUVOOumkfOADH8jRRx+dbbbZJvPnz8+rr776prfinXTSSXnhhRfykY98JDvuuGOeeuqpfPvb387ee++d9773vc2OadeuXS655JKMGjUqBx10UI466qgsXbo0V155ZWpqajJ27NiN+UcClJFQCthifOpTn8p73vOeXHrppRk9enTuv//+nH/++Zk6dWqef/75VFdXZ5999sn48eMbx3Tu3Dm//e1vM2HChNx+++258cYbU11dnY9+9KONG4Mef/zxWbJkSb773e/mzjvvTJ8+ffLDH/4wt9xyS2bPnl2mswUA2DCTJ09Ov3798t3vfjdnn3122rZtm5qamhx77LEZNGhQY78TTzwx1dXVufjii3PBBRekXbt22X333dcZEh177LH53ve+l6uvvjovvfRSevbsmREjRuS8885ba3+rf3X88cdnq622ysUXX5wzzzwznTp1yic/+clccskl6datW0uePrAJqSita+0lAAAAAGwE9pQCAAAAoHBCKQAAAAAKJ5QCAAAAoHBCKQAAAAAKJ5QCAAAAoHBCKQAAAAAK17bcBRStoaEhzz77bLbeeutUVFSUuxwAYBNXKpXy8ssvZ4cddkibNq339zxzKABgfa3v/KnVhVLPPvtsevfuXe4yAIDNzNNPP50dd9yx3GWUjTkUAPBW/af5U6sLpbbeeusk//iD6dKlS5mrAQA2dStXrkzv3r0b5xCtlTkUALC+1nf+1OpCqTeWm3fp0sWECgBYb639ljVzKADgrfpP86fWuzECAAAAAGUjlAIAAACgcEIpAIDNzG9+85sMGzYsO+ywQyoqKvLTn/70P46ZPXt23v/+96eqqio777xzpk6dutHrBABYF6EUAMBmZtWqVdlrr71y1VVXrVf/J598MkOHDs2HP/zhzJs3L1/84hdz0kkn5c4779zIlQIAvLlWt9E5AMDm7tBDD82hhx663v0nT56cd7/73bnsssuSJO9973tzzz335IorrsiQIUM2VpkAAOtkpRQAwBZuzpw5GTx4cJO2IUOGZM6cOWWqCADASikAgC3ekiVL0qNHjyZtPXr0yMqVK/P3v/89HTt2XGtMXV1d6urqGt+vXLlyo9cJALQuVkoBALCWiRMnpmvXro2v3r17l7skAGALI5QCANjC9ezZM0uXLm3StnTp0nTp0qXZVVJJMm7cuKxYsaLx9fTTTxdRKgDQirh9DwBgCzdw4MDccccdTdruuuuuDBw48E3HVFVVpaqqamOXBgC0YlZKAQBsZl555ZXMmzcv8+bNS5I8+eSTmTdvXhYvXpzkH6ucRo4c2dj/5JNPzhNPPJGvfOUrWbBgQa6++ur8+Mc/ztixY8tRPgBAEqEUAMBm5/77788+++yTffbZJ0lSW1ubffbZJ+PHj0+S/O1vf2sMqJLk3e9+d2bMmJG77rore+21Vy677LJcd911GTJkSFnqBwBIkopSqVQqdxFFWrlyZbp27ZoVK1akS5cu5S4HANjEmTv8gz8HAGB9re+8wUopAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcG3LXQAAbG5qzppR7hL4N4suHlruEgCAdTB/2vRsCvMnK6UAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKJxQCgAAAIDCCaUAAAAAKFzbchcAsDmrOWtGuUvg3yy6eGi5SwAAANaDlVIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhyh5KXXXVVampqUmHDh0yYMCAzJ07d539J02alN122y0dO3ZM7969M3bs2Lz22msFVQsAAABASyhrKDVt2rTU1tZmwoQJefDBB7PXXntlyJAhee6555rt/6Mf/ShnnXVWJkyYkEceeSTXX399pk2blrPPPrvgygEAAAB4O8oaSl1++eUZPXp0Ro0alT59+mTy5MnZaqutMmXKlGb733vvvRk0aFCOPvro1NTU5OCDD85RRx31H1dXAQAAALBpaVuuL169enUeeOCBjBs3rrGtTZs2GTx4cObMmdPsmP322y8//OEPM3fu3Oy777554okncscdd+Szn/1sUWWvl5qzZpS7BP7NoouHlrsEAAAA4F+ULZRavnx56uvr06NHjybtPXr0yIIFC5odc/TRR2f58uXZf//9UyqVsmbNmpx88snrvH2vrq4udXV1je9XrlzZMicAAAAAwAYr+0bnb8Xs2bNz0UUX5eqrr86DDz6Y2267LTNmzMgFF1zwpmMmTpyYrl27Nr569+5dYMUAAAAANKdsK6W6d++eysrKLF26tEn70qVL07Nnz2bHnHvuufnsZz+bk046KUmyxx57ZNWqVfnc5z6Xr371q2nTZu2Mbdy4camtrW18v3LlSsEUAAAAQJmVbaVU+/bt069fv8yaNauxraGhIbNmzcrAgQObHfPqq6+uFTxVVlYmSUqlUrNjqqqq0qVLlyYvAAAAAMqrbCulkqS2tjbHHXdc+vfvn3333TeTJk3KqlWrMmrUqCTJyJEj06tXr0ycODFJMmzYsFx++eXZZ599MmDAgDz22GM599xzM2zYsMZwCgAAAIBNX1lDqREjRmTZsmUZP358lixZkr333jszZ85s3Px88eLFTVZGnXPOOamoqMg555yTZ555Jtttt12GDRuWCy+8sFynAAAAAMAGKGsolSRjxozJmDFjmj02e/bsJu/btm2bCRMmZMKECQVUBgAAAMDGslk9fQ8AAACALUPZV0oBAADQetScNaPcJfBvFl08tNwl0EpZKQUAAABA4YRSAAAAABROKAUAsBm66qqrUlNTkw4dOmTAgAGZO3fuOvtPmjQpu+22Wzp27JjevXtn7Nixee211wqqFgBgbUIpAIDNzLRp01JbW5sJEybkwQcfzF577ZUhQ4bkueeea7b/j370o5x11lmZMGFCHnnkkVx//fWZNm1azj777IIrBwD4JxudAwBsZi6//PKMHj06o0aNSpJMnjw5M2bMyJQpU3LWWWet1f/ee+/NoEGDcvTRRydJampqctRRR+X3v/99oXX/JzY/3rTY+BiAjc1KKQCAzcjq1avzwAMPZPDgwY1tbdq0yeDBgzNnzpxmx+y333554IEHGm/xe+KJJ3LHHXfksMMOK6RmAIDmWCkFALAZWb58eerr69OjR48m7T169MiCBQuaHXP00Udn+fLl2X///VMqlbJmzZqcfPLJ67x9r66uLnV1dY3vV65c2TInAADw/1kpBQCwhZs9e3YuuuiiXH311XnwwQdz2223ZcaMGbngggvedMzEiRPTtWvXxlfv3r0LrBgAaA2slAIA2Ix07949lZWVWbp0aZP2pUuXpmfPns2OOffcc/PZz342J510UpJkjz32yKpVq/K5z30uX/3qV9Omzdq/U44bNy61tbWN71euXCmYAgBalJVSAACbkfbt26dfv36ZNWtWY1tDQ0NmzZqVgQMHNjvm1VdfXSt4qqysTJKUSqVmx1RVVaVLly5NXgAALclKKQCAzUxtbW2OO+649O/fP/vuu28mTZqUVatWNT6Nb+TIkenVq1cmTpyYJBk2bFguv/zy7LPPPhkwYEAee+yxnHvuuRk2bFhjOAUAUDShFADAZmbEiBFZtmxZxo8fnyVLlmTvvffOzJkzGzc/X7x4cZOVUeecc04qKipyzjnn5Jlnnsl2222XYcOG5cILLyzXKQAACKUAADZHY8aMyZgxY5o9Nnv27Cbv27ZtmwkTJmTChAkFVAYAsH7sKQUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4dqWuwDYUtScNaPcJfBvFl08tNwlAAAA8CaslAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcGUPpa666qrU1NSkQ4cOGTBgQObOnbvO/i+99FJOO+20bL/99qmqqsquu+6aO+64o6BqAQAAAGgJbcv55dOmTUttbW0mT56cAQMGZNKkSRkyZEgWLlyY6urqtfqvXr06H/vYx1JdXZ1bb701vXr1ylNPPZVu3boVXzwAAAAAG6ysodTll1+e0aNHZ9SoUUmSyZMnZ8aMGZkyZUrOOuustfpPmTIlL7zwQu699960a9cuSVJTU1NkyQAAAAC0gLLdvrd69eo88MADGTx48D+LadMmgwcPzpw5c5odM3369AwcODCnnXZaevTokb59++aiiy5KfX19UWUDAAAA0ALKtlJq+fLlqa+vT48ePZq09+jRIwsWLGh2zBNPPJG77747xxxzTO6444489thjOfXUU/P6669nwoQJzY6pq6tLXV1d4/uVK1e23EkAAAAAsEHKvtH5W9HQ0JDq6up873vfS79+/TJixIh89atfzeTJk990zMSJE9O1a9fGV+/evQusGAAAAIDmlC2U6t69eyorK7N06dIm7UuXLk3Pnj2bHbP99ttn1113TWVlZWPbe9/73ixZsiSrV69udsy4ceOyYsWKxtfTTz/dcicBAAAAwAYpWyjVvn379OvXL7NmzWpsa2hoyKxZszJw4MBmxwwaNCiPPfZYGhoaGtv+8pe/ZPvtt0/79u2bHVNVVZUuXbo0eQEAAABQXmW9fa+2tjbXXnttbrzxxjzyyCM55ZRTsmrVqsan8Y0cOTLjxo1r7H/KKafkhRdeyOmnn56//OUvmTFjRi666KKcdtpp5ToFAAAAADZA2TY6T5IRI0Zk2bJlGT9+fJYsWZK99947M2fObNz8fPHixWnT5p+5We/evXPnnXdm7Nix2XPPPdOrV6+cfvrpOfPMM8t1CgAAwNtQc9aMcpfAv1h08dBylwC0ImUNpZJkzJgxGTNmTLPHZs+evVbbwIEDc999923kqgAAAADYmDarp+8BAPAPV111VWpqatKhQ4cMGDAgc+fOXWf/l156Kaeddlq23377VFVVZdddd80dd9xRULUAAGsr+0opAADemmnTpqW2tjaTJ0/OgAEDMmnSpAwZMiQLFy5MdXX1Wv1Xr16dj33sY6murs6tt96aXr165amnnkq3bt2KLx4A4P8TSgEAbGYuv/zyjB49uvHhMJMnT86MGTMyZcqUnHXWWWv1nzJlSl544YXce++9adeuXZKkpqamyJIBANbi9j0AgM3I6tWr88ADD2Tw4MGNbW3atMngwYMzZ86cZsdMnz49AwcOzGmnnZYePXqkb9++ueiii1JfX19U2QAAa7FSCgBgM7J8+fLU19c3Pq34DT169MiCBQuaHfPEE0/k7rvvzjHHHJM77rgjjz32WE499dS8/vrrmTBhQrNj6urqUldX1/h+5cqVLXcSAACxUgoAYIvX0NCQ6urqfO9730u/fv0yYsSIfPWrX83kyZPfdMzEiRPTtWvXxlfv3r0LrBgAaA2EUgAAm5Hu3bunsrIyS5cubdK+dOnS9OzZs9kx22+/fXbddddUVlY2tr33ve/NkiVLsnr16mbHjBs3LitWrGh8Pf300y13EgAAEUoBAGxW2rdvn379+mXWrFmNbQ0NDZk1a1YGDhzY7JhBgwblscceS0NDQ2PbX/7yl2y//fZp3759s2OqqqrSpUuXJi8AgJYklAIA2MzU1tbm2muvzY033phHHnkkp5xySlatWtX4NL6RI0dm3Lhxjf1POeWUvPDCCzn99NPzl7/8JTNmzMhFF12U0047rVynAABgo3MAgM3NiBEjsmzZsowfPz5LlizJ3nvvnZkzZzZufr548eK0afPP3x579+6dO++8M2PHjs2ee+6ZXr165fTTT8+ZZ55ZrlMAABBKAQBsjsaMGZMxY8Y0e2z27NlrtQ0cODD33XffRq4KAGD9uX0PAAAAgMIJpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMIJpQAAAAAonFAKAAAAgMK1LXcBAACtRX19faZOnZpZs2blueeeS0NDQ5Pjd999d5kqAwAonlAKAKAgp59+eqZOnZqhQ4emb9++qaioKHdJAABlI5QCACjIzTffnB//+Mc57LDDyl0KAEDZ2VMKAKAg7du3z84771zuMgAANglCKQCAgnzpS1/KlVdemVKpVO5SAADKzu17AAAFueeee/LrX/86v/jFL/K+970v7dq1a3L8tttuK1NlAADFE0oBABSkW7du+eQnP1nuMgAANglCKQCAgtxwww3lLgEAYJMhlAIAKNiyZcuycOHCJMluu+2W7bbbrswVAQAUz0bnAAAFWbVqVU444YRsv/32OfDAA3PggQdmhx12yIknnphXX3213OUBABRqvVdK/elPf1rvD91zzz03qBgAgC1ZbW1t/vd//zc/+9nPMmjQoCT/2Pz8C1/4Qr70pS/lmmuuKXOFAADFWe9Qau+9905FRcWbPsL4jWMVFRWpr69vsQIBALYUP/nJT3LrrbfmQx/6UGPbYYcdlo4dO+bII48USgEArcp6h1JPPvnkxqwDAGCL9+qrr6ZHjx5rtVdXV7t9DwBoddY7lHrXu961MesAANjiDRw4MBMmTMj3v//9dOjQIUny97//Peeff34GDhxY5uoAAIq13qHU9OnT1/tDP/GJT2xQMQAAW7Irr7wyQ4YMyY477pi99torSTJ//vx06NAhd955Z5mrAwAo1nqHUsOHD1+vfvaUAgBoXt++ffPoo4/mpptuyoIFC5IkRx11VI455ph07NixzNUBABRrvUOphoaGjVkHAECrsNVWW2X06NHlLgMAoOzWO5QCAOCtmz59eg499NC0a9fuP26HYAsEAKA12eBQatWqVfnf//3fLF68OKtXr25y7Atf+MLbLgwAYEswfPjwLFmyJNXV1evcDsEWCABAa7NBodQf//jHHHbYYXn11VezatWqbLvttlm+fHm22mqrVFdXC6UAAP6/f90CwXYIAAD/1GZDBo0dOzbDhg3Liy++mI4dO+a+++7LU089lX79+uXSSy9t6RoBALZYL730UrlLAAAoiw0KpebNm5cvfelLadOmTSorK1NXV5fevXvnG9/4Rs4+++yWrhEAYItwySWXZNq0aY3vjzjiiGy77bbp1atX5s+fX8bKAACKt0GhVLt27dKmzT+GVldXZ/HixUmSrl275umnn2656gAAtiCTJ09O7969kyR33XVXfvWrX2XmzJk59NBDc8YZZ5S5OgCAYm3QnlL77LNP/vCHP2SXXXbJQQcdlPHjx2f58uX5wQ9+kL59+7Z0jQAAW4QlS5Y0hlI///nPc+SRR+bggw9OTU1NBgwYUObqAACKtUErpS666KJsv/32SZILL7ww22yzTU455ZQsW7Ys3/3ud1u0QACALcU222zTuKp85syZGTx4cJKkVCp58h4A0Ops0Eqp/v37N/53dXV1Zs6c2WIFAQBsqT71qU/l6KOPzi677JLnn38+hx56aJJ/PNl45513LnN1AADF2qBQ6sknn8yaNWuyyy67NGl/9NFH065du9TU1LREbQAAW5QrrrgiNTU1efrpp/ONb3wjnTt3TpL87W9/y6mnnlrm6gAAirVBodTxxx+fE044Ya1Q6ve//32uu+66zJ49uyVqAwDYorRr1y5f/vKX12ofO3ZsGaoBACivDQql/vjHP2bQoEFrtX/wgx/MmDFj3nZRAABbiunTp+fQQw9Nu3btMn369HX2/cQnPlFQVQAA5bdBoVRFRUVefvnltdpXrFhhk04AgH8xfPjwLFmyJNXV1Rk+fPib9quoqDCPAgBalQ16+t6BBx6YiRMnNpk41dfXZ+LEidl///1brDgAgM1dQ0NDqqurG//7zV4CKQCgtdmglVKXXHJJDjzwwOy222454IADkiS//e1vs3Llytx9990tWiAAAAAAW54NWinVp0+f/OlPf8qRRx6Z5557Li+//HJGjhyZBQsWpG/fvi1dIwDAFuELX/hCvvWtb63V/p3vfCdf/OIXiy8IAKCMNmilVJLssMMOueiii1qyFgCALdpPfvKTZjc732+//XLxxRdn0qRJxRcFAFAmG7RSKvnH7XrHHnts9ttvvzzzzDNJkh/84Ae55557Wqw4AIAtyfPPP5+uXbuu1d6lS5csX768DBUBAJTPBoVSP/nJTzJkyJB07NgxDz74YOrq6pL84+l7Vk8BADRv5513zsyZM9dq/8UvfpGddtqpDBUBAJTPBt2+9/Wvfz2TJ0/OyJEjc/PNNze2Dxo0KF//+tdbrDgAgC1JbW1txowZk2XLluUjH/lIkmTWrFm57LLL3LoHALQ6GxRKLVy4MAceeOBa7V27ds1LL730dmsCANginXDCCamrq8uFF16YCy64IElSU1OTa665JiNHjixzdQAAxdqgUKpnz5557LHHUlNT06T9nnvusfQcAGAdTjnllJxyyilZtmxZOnbsmM6dO5e7JACAstigPaVGjx6d008/Pb///e9TUVGRZ599NjfddFO+9KUv5ZRTTmnpGgEAthhr1qzJr371q9x2220plUpJkmeffTavvPJKmSsDACjWBq2UOuuss9LQ0JCPfvSjefXVV3PggQemqqoqZ5xxRk466aSWrhEAYIvw1FNP5ZBDDsnixYtTV1eXj33sY9l6661zySWXpK6uLpMnTy53iQAAhdmglVIVFRX56le/mhdeeCEPP/xw7rvvvixbtixdu3bNu9/97pauEQBgi3D66aenf//+efHFF9OxY8fG9k9+8pOZNWtWGSsDACjeW1opVVdXl/POOy933XVX48qo4cOH54YbbsgnP/nJVFZWZuzYsRurVgCAzdpvf/vb3HvvvWnfvn2T9pqamjzzzDNlqgoAoDzeUig1fvz4fPe7383gwYNz77335ogjjsioUaNy33335bLLLssRRxyRysrKjVUrAMBmraGhIfX19Wu1//Wvf83WW29dhooAAMrnLd2+d8stt+T73/9+br311vzyl79MfX191qxZk/nz5+czn/mMQAoAYB0OPvjgTJo0qfF9RUVFXnnllUyYMCGHHXZY+QoDACiDt7RS6q9//Wv69euXJOnbt2+qqqoyduzYVFRUbJTiAAC2JJdeemkOOeSQ9OnTJ6+99lqOPvroPProo+nevXv++7//u9zlAQAU6i2FUvX19U32QGjbtm06d+7c4kUBAGyJevfunfnz52fatGmZP39+XnnllZx44ok55phjmmx8DgDQGrylUKpUKuX4449PVVVVkuS1117LySefnE6dOjXpd9ttt7VchQAAW4DXX389u+++e37+85/nmGOOyTHHHFPukgAAyuothVLHHXdck/fHHntsixYDALClateuXV577bVylwEAsMl4S6HUDTfcsLHqAADY4p122mm55JJLct1116Vt27c0DQMA2OKYDQEAFOQPf/hDZs2alV/+8pfZY489bIEAALRqQikAgIJ069Ythx9+eLnLAADYJAilAAA2soaGhnzzm9/MX/7yl6xevTof+chHct5553niHgDQqrUpdwEAAFu6Cy+8MGeffXY6d+6cXr165Vvf+lZOO+20cpcFAFBWQikAgI3s+9//fq6++urceeed+elPf5qf/exnuemmm9LQ0FDu0gAAykYoBQCwkS1evDiHHXZY4/vBgwenoqIizz77bBmrAgAoL6EUAMBGtmbNmnTo0KFJW7t27fL666+XqSIAgPKz0TkAwEZWKpVy/PHHp6qqqrHttddey8knn5xOnTo1tt12223lKA8AoCyEUgAAG9lxxx23Vtuxxx5bhkoAADYdQikAgI3shhtuKHcJAACbHHtKAQAAAFA4oRQAAAAAhRNKAQAAAFA4oRQAAAAAhRNKAQAAAFA4oRQAAAAAhRNKAQAAAFA4oRQAAAAAhRNKAQAAAFA4oRQAAAAAhdskQqmrrroqNTU16dChQwYMGJC5c+eu17ibb745FRUVGT58+MYtEAAAAIAWVfZQatq0aamtrc2ECRPy4IMPZq+99sqQIUPy3HPPrXPcokWL8uUvfzkHHHBAQZUCAAAA0FLKHkpdfvnlGT16dEaNGpU+ffpk8uTJ2WqrrTJlypQ3HVNfX59jjjkm559/fnbaaacCqwUAAACgJZQ1lFq9enUeeOCBDB48uLGtTZs2GTx4cObMmfOm4772ta+luro6J5544n/8jrq6uqxcubLJCwAAAIDyKmsotXz58tTX16dHjx5N2nv06JElS5Y0O+aee+7J9ddfn2uvvXa9vmPixInp2rVr46t3795vu24AAAAA3p6y3773Vrz88sv57Gc/m2uvvTbdu3dfrzHjxo3LihUrGl9PP/30Rq4SAAAAgP+kbTm/vHv37qmsrMzSpUubtC9dujQ9e/Zcq//jjz+eRYsWZdiwYY1tDQ0NSZK2bdtm4cKFec973tNkTFVVVaqqqjZC9QAAAABsqLKulGrfvn369euXWbNmNbY1NDRk1qxZGThw4Fr9d9999zz00EOZN29e4+sTn/hEPvzhD2fevHluzQMAWo2rrroqNTU16dChQwYMGJC5c+eu17ibb745FRUVGT58+MYtEADgPyjrSqkkqa2tzXHHHZf+/ftn3333zaRJk7Jq1aqMGjUqSTJy5Mj06tUrEydOTIcOHdK3b98m47t165Yka7UDAGyppk2bltra2kyePDkDBgzIpEmTMmTIkCxcuDDV1dVvOm7RokX58pe/nAMOOKDAagEAmlf2PaVGjBiRSy+9NOPHj8/ee++defPmZebMmY2bny9evDh/+9vfylwlAMCm4/LLL8/o0aMzatSo9OnTJ5MnT85WW22VKVOmvOmY+vr6HHPMMTn//POz0047FVgtAEDzyr5SKknGjBmTMWPGNHts9uzZ6xw7derUli8IAGATtXr16jzwwAMZN25cY1ubNm0yePDgzJkz503Hfe1rX0t1dXVOPPHE/Pa3vy2iVACAddokQikAANbP8uXLU19f37iq/A09evTIggULmh1zzz335Prrr8+8efPW+3vq6upSV1fX+H7lypUbVC8AwJsp++17AABsPC+//HI++9nP5tprr0337t3Xe9zEiRPTtWvXxpcHygAALc1KKQCAzUj37t1TWVmZpUuXNmlfunRpevbsuVb/xx9/PIsWLcqwYcMa2xoaGpIkbdu2zcKFC/Oe97xnrXHjxo1LbW1t4/uVK1cKpgCAFiWUAgDYjLRv3z79+vXLrFmzMnz48CT/CJlmzZrV7B6du+++ex566KEmbeecc05efvnlXHnllW8aNFVVVaWqqqrF6wcAeINQCgBgM1NbW5vjjjsu/fv3z7777ptJkyZl1apVGTVqVJJk5MiR6dWrVyZOnJgOHTqkb9++TcZ369YtSdZqBwAoklAKAGAzM2LEiCxbtizjx4/PkiVLsvfee2fmzJmNm58vXrw4bdrYOhQA2LQJpQAANkNjxoxp9na9JJk9e/Y6x06dOrXlCwIAeIv8hAYAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABROKAUAAABA4YRSAAAAABRukwilrrrqqtTU1KRDhw4ZMGBA5s6d+6Z9r7322hxwwAHZZpttss0222Tw4MHr7A8AAADApqfsodS0adNSW1ubCRMm5MEHH8xee+2VIUOG5Lnnnmu2/+zZs3PUUUfl17/+debMmZPevXvn4IMPzjPPPFNw5QAAAABsqLKHUpdffnlGjx6dUaNGpU+fPpk8eXK22mqrTJkypdn+N910U0499dTsvffe2X333XPdddeloaEhs2bNKrhyAAAAADZUWUOp1atX54EHHsjgwYMb29q0aZPBgwdnzpw56/UZr776al5//fVsu+22G6tMAAAAAFpYWUOp5cuXp76+Pj169GjS3qNHjyxZsmS9PuPMM8/MDjvs0CTY+ld1dXVZuXJlkxcAwObOnpwAwOau7LfvvR0XX3xxbr755tx+++3p0KFDs30mTpyYrl27Nr569+5dcJUAAC3LnpwAwJagrKFU9+7dU1lZmaVLlzZpX7p0aXr27LnOsZdeemkuvvji/PKXv8yee+75pv3GjRuXFStWNL6efvrpFqkdAKBc7MkJAGwJyhpKtW/fPv369WsyIXpjgjRw4MA3HfeNb3wjF1xwQWbOnJn+/fuv8zuqqqrSpUuXJi8AgM2VPTkBgC1F23IXUFtbm+OOOy79+/fPvvvum0mTJmXVqlUZNWpUkmTkyJHp1atXJk6cmCS55JJLMn78+PzoRz9KTU1N495TnTt3TufOnct2HgAARVjXnpwLFixYr8/4T3tyJv/Yl7Ourq7xvX05AYCWVvZQasSIEVm2bFnGjx+fJUuWZO+9987MmTMbJ1qLFy9Omzb/XNB1zTXXZPXq1fn0pz/d5HMmTJiQ8847r8jSAQA2O2/syTl79uw33ZMz+ce+nOeff36BlQEArU3ZQ6kkGTNmTMaMGdPssdmzZzd5v2jRoo1fEADAJqol9uT81a9+tc49OZN/7MtZW1vb+H7lypUeGAMAtKjN+ul7AACtTRF7cib25QQANr5NYqUUAADr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zNZbb537778/3/jGN/J//s//edNxp59+evr27Zv7778//fv3L7BiWsL6XveXX345S5YsSalUytNPP52vfOUr2W677bLffvuVsXooD/On1sv8ieaYQ7U+5k8FK+9CLTa2Z599tjRmzJjSu9/97lK7du1KnTt3Lu27776lb37zm6VVq1aVHn/88dLo0aNLu+66a6ljx46lbt26lT7wgQ+UbrjhhmY/7+CDDy4lKc2dO/dNv9Py8/L7+Mc/XjrssMOaPfb73/++lKQ0f/78DVp+/sarsrKytOOOO5ZGjx5deu655zbSmdBSXnvttdJZZ51Vev/731/q2rVraauttirttttupXPOOaf06quvlkql5pchl0r/eDz6oYceWnDFtIT1ve7/+nd7u+22Kx122GFv+m8DtAbmT62T+RPNMYdqfcyfilVRKrXg800BAAAAYD3YUwoAAACAwgmlAAAAACicUAoAAACAwgmlAAAAACicUAoAAACAwgmlAAAAACicUAoAAACAwgmlAAAAACicUApoVSoqKvLTn/603GUAAGw2zJ+AjUUoBWxRlixZkv/6r//KTjvtlKqqqvTu3TvDhg3LrFmzyl0aAMAmyfwJKJe25S4AoKUsWrQogwYNSrdu3fLNb34ze+yxR15//fXceeedOe2007JgwYJylwgAsEkxfwLKyUopYItx6qmnpqKiInPnzs3hhx+eXXfdNe973/tSW1ub++67r9kxZ555ZnbddddstdVW2WmnnXLuuefm9ddfbzw+f/78fPjDH87WW2+dLl26pF+/frn//vuTJE899VSGDRuWbbbZJp06dcr73ve+3HHHHYWcKwBASzB/AsrJSilgi/DCCy9k5syZufDCC9OpU6e1jnfr1q3ZcVtvvXWmTp2aHXbYIQ899FBGjx6drbfeOl/5yleSJMccc0z22WefXHPNNamsrMy8efPSrl27JMlpp52W1atX5ze/+U06deqU//t//286d+680c4RAKAlmT8B5SaUArYIjz32WEqlUnbfffe3NO6cc85p/O+ampp8+ctfzs0339w4qVq8eHHOOOOMxs/dZZddGvsvXrw4hx9+ePbYY48kyU477fR2TwMAoDDmT0C5uX0P2CKUSqUNGjdt2rQMGjQoPXv2TOfOnXPOOedk8eLFjcdra2tz0kknZfDgwbn44ovz+OOPNx77whe+kK9//esZNGhQJkyYkD/96U9v+zwAAIpi/gSUm1AK2CLssssuqaioeEubcc6ZMyfHHHNMDjvssPz85z/PH//4x3z1q1/N6tWrG/ucd955+fOf/5yhQ4fm7rvvTp8+fXL77bcnSU466aQ88cQT+exnP5uHHnoo/fv3z7e//e0WPzcAgI3B/Akot4rShsbjAJuYQw89NA899FAWLly41r4IL730Urp165aKiorcfvvtGT58eC677LJcffXVTX69O+mkk3LrrbfmpZdeavY7jjrqqKxatSrTp09f69i4ceMyY8YMv/gBAJsN8yegnKyUArYYV111Verr67PvvvvmJz/5SR599NE88sgj+da3vpWBAweu1X+XXXbJ4sWLc/PNN+fxxx/Pt771rcZf8ZLk73//e8aMGZPZs2fnqaeeyu9+97v84Q9/yHvf+94kyRe/+MXceeedefLJJ/Pggw/m17/+deMxAIDNgfkTUE42Oge2GDvttFMefPDBXHjhhfnSl76Uv/3tb9luu+3Sr1+/XHPNNWv1/8QnPpGxY8dmzJgxqaury9ChQ3PuuefmvPPOS5JUVlbm+eefz8iRI7N06dJ07949n/rUp3L++ecnSerr63Paaaflr3/9a7p06ZJDDjkkV1xxRZGnDADwtpg/AeXk9j0AAAAACuf2PQAAAAAKJ5QCAAAAoHBCKQAAAAAKJ5QCAAAAoHBCKQAAAAAKJ5QCAAAAoHBCKQAAAAAKJ5QCAAAAoHBCKQAAAAAKJ5QCAAAAoHBCKQAAAAAKJ5QCAAAAoHD/D5+7hLVCdNAVAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1200x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot recall and precision\n",
"# Calculate the recall and precision\n",
"recall = cm.diagonal() / cm.sum(axis=1)\n",
"precision = cm.diagonal() / cm.sum(axis=0)\n",
"\n",
"# plot in a bar chart\n",
"fig, ax = plt.subplots(1, 2, figsize=(12, 6))\n",
"ax[0].bar(range(num_classes), recall)\n",
"ax[0].set_xticks(range(num_classes))\n",
"ax[0].set_xticklabels(['GSVT', 'AFIB', 'SR', 'SB'])\n",
"ax[0].set_xlabel('Class')\n",
"ax[0].set_ylabel('Recall')\n",
"ax[0].set_title('Recall')\n",
"\n",
"ax[1].bar(range(num_classes), precision)\n",
"ax[1].set_xticks(range(num_classes))\n",
"ax[1].set_xticklabels(['GSVT', 'AFIB', 'SR', 'SB'])\n",
"ax[1].set_xlabel('Class')\n",
"ax[1].set_ylabel('Precision')\n",
"ax[1].set_title('Precision')\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score: 0.8004770573896727\n"
]
}
],
"source": [
"# Calculate F1 Score for multiclass classification\n",
"f1 = f1_score(test_y, preds, average='macro')\n",
"\n",
"print('F1 Score:', f1)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}