{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "Oo7dTA8PNR4T" }, "source": [ "# Stroke Prediction Using Clinical Data And CT" ] }, { "cell_type": "markdown", "metadata": { "id": "mn8q6sciNR4X" }, "source": [ "## Import Libraries" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "vg6exGjZNR4X" }, "outputs": [], "source": [ "import numpy as np\n", "import cv2\n", "import os\n", "from matplotlib import pyplot as plt\n", "import random\n", "import tensorflow as tf\n", "from keras import backend as K\n", "\n", "import pandas as pd\n", "import seaborn as sns\n", "from sklearn.decomposition import PCA\n", "\n", "from sklearn.metrics import accuracy_score, precision_recall_fscore_support, confusion_matrix, classification_report, roc_auc_score, roc_curve, auc\n", "\n", "import keras\n", "import tensorflow\n", "from tensorflow.python.keras import layers\n", "from tensorflow.python.keras import models\n", "from tensorflow.keras.callbacks import ModelCheckpoint\n", "from scipy import ndimage\n", "from keras.applications import MobileNetV2\n", "import nibabel as nib\n", "from imblearn.metrics import specificity_score\n", "from sklearn.preprocessing import label_binarize\n", "\n", "from tensorflow.keras.models import Sequential\n", "\n", "from tensorflow.keras.layers import Dense, Conv2D, Flatten, Input\n", "\n", "from tensorflow.keras.layers import Input, Conv3D, MaxPooling3D, Flatten, Dense, BatchNormalization, concatenate\n", "\n", "from tensorflow.keras.models import Model\n", "\n", "from sklearn.preprocessing import LabelBinarizer, LabelEncoder\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.model_selection import StratifiedKFold\n", "\n", "np.random.seed(1)\n", "keras.utils.set_random_seed(1)\n", "\n", "drive_path = ''\n", "\n", "tensorflow.random.set_seed(1)\n", "sns.set(rc={'figure.figsize':(11.7,8.27)})\n", "sns.set_theme(style='whitegrid')" ] }, { "cell_type": "markdown", "metadata": { "id": "vzhPAxJMNR4Z" }, "source": [ "## Load Dataset" ] }, { "cell_type": "markdown", "metadata": { "id": "q5RIW_ibNR4Z" }, "source": [ "### Clinical + Lab Data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "bH4qVcmPNR4a" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
patient_idawitanusiatensi_atastensi_bawahptpt_capttaptt_cfibrinogengdsnihss_delta_3_catnihss_delta_2_cat
010.0843630.0823480.0819070.0933460.0786070.0869360.0543870.0798570.1088440.118202memburuktidak signifikan
120.0656160.1046800.0819070.0653430.0992130.0876850.0916230.0786250.0902700.069889memburuktidak signifikan
230.0478060.0586210.0698940.0858790.0831860.0846870.0543870.0754210.0510670.061915memburuktidak signifikan
340.0562420.0669950.0821260.0845720.0801340.0876850.0579980.0882370.0941690.080067membaiktidak signifikan
450.1265440.0879310.1201310.0933460.0824230.0869360.0744720.0828150.0841030.071296signifikansignifikan
..........................................
1401440.0562420.0711830.0655260.0653430.0908180.0816900.0783080.0798570.0796840.061915memburuktidak signifikan
1411450.0843630.0837440.0764470.0653430.0862390.0771930.0913970.0810900.0750760.066137signifikansignifikan
1421460.0070300.0446640.0768840.0834520.0908180.0854370.0577720.0781320.0845990.080443membaiktidak signifikan
1431470.0515550.0739740.1201310.1026810.0725020.0839380.0846270.0870050.0782190.216703memburuktidak signifikan
1441480.0281210.0791380.0704950.0717830.0847130.0786920.0882380.0803500.0680810.062947signifikansignifikan
\n", "

145 rows × 13 columns

\n", "
" ], "text/plain": [ " patient_id awitan usia tensi_atas tensi_bawah pt \\\n", "0 1 0.084363 0.082348 0.081907 0.093346 0.078607 \n", "1 2 0.065616 0.104680 0.081907 0.065343 0.099213 \n", "2 3 0.047806 0.058621 0.069894 0.085879 0.083186 \n", "3 4 0.056242 0.066995 0.082126 0.084572 0.080134 \n", "4 5 0.126544 0.087931 0.120131 0.093346 0.082423 \n", ".. ... ... ... ... ... ... \n", "140 144 0.056242 0.071183 0.065526 0.065343 0.090818 \n", "141 145 0.084363 0.083744 0.076447 0.065343 0.086239 \n", "142 146 0.007030 0.044664 0.076884 0.083452 0.090818 \n", "143 147 0.051555 0.073974 0.120131 0.102681 0.072502 \n", "144 148 0.028121 0.079138 0.070495 0.071783 0.084713 \n", "\n", " pt_c aptt aptt_c fibrinogen gds nihss_delta_3_cat \\\n", "0 0.086936 0.054387 0.079857 0.108844 0.118202 memburuk \n", "1 0.087685 0.091623 0.078625 0.090270 0.069889 memburuk \n", "2 0.084687 0.054387 0.075421 0.051067 0.061915 memburuk \n", "3 0.087685 0.057998 0.088237 0.094169 0.080067 membaik \n", "4 0.086936 0.074472 0.082815 0.084103 0.071296 signifikan \n", ".. ... ... ... ... ... ... \n", "140 0.081690 0.078308 0.079857 0.079684 0.061915 memburuk \n", "141 0.077193 0.091397 0.081090 0.075076 0.066137 signifikan \n", "142 0.085437 0.057772 0.078132 0.084599 0.080443 membaik \n", "143 0.083938 0.084627 0.087005 0.078219 0.216703 memburuk \n", "144 0.078692 0.088238 0.080350 0.068081 0.062947 signifikan \n", "\n", " nihss_delta_2_cat \n", "0 tidak signifikan \n", "1 tidak signifikan \n", "2 tidak signifikan \n", "3 tidak signifikan \n", "4 signifikan \n", ".. ... \n", "140 tidak signifikan \n", "141 signifikan \n", "142 tidak signifikan \n", "143 tidak signifikan \n", "144 signifikan \n", "\n", "[145 rows x 13 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# load clinical data from csv file\n", "dataset = pd.read_csv('dataset_l2norm.csv', delimiter=',', decimal='.')\n", "dataset = dataset.drop(['ct_axial', 'ct_coronal', 'ct_sagittal'], axis=1)\n", "dataset.drop(columns=['Unnamed: 0'], inplace=True)\n", "dataset" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "3bxcCpVx9jBm" }, "outputs": [], "source": [ "x_clin = dataset[['awitan', 'usia', 'tensi_atas', 'tensi_bawah']]\n", "x_clin_val = x_clin.iloc[33:57]\n", "x_clin = pd.concat([x_clin.iloc[0:33], x_clin.iloc[57:]])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "dXPI1kCi9jBm" }, "outputs": [], "source": [ "x_clin_lab = dataset[['awitan', 'usia', 'tensi_atas', 'tensi_bawah', 'pt', 'aptt', 'fibrinogen', 'gds']]\n", "x_clin_lab_val = x_clin_lab.iloc[33:57]\n", "x_clin_lab = pd.concat([x_clin_lab.iloc[0:33], x_clin_lab.iloc[57:]])" ] }, { "cell_type": "markdown", "metadata": { "id": "SAFUcAEpNR4b" }, "source": [ "### CT Data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "id": "_QyzsHu7NR4b" }, "outputs": [], "source": [ "def read_nifti_file(filepath):\n", " \"\"\"Read and load volume\"\"\"\n", " # Read file\n", " scan = nib.load(filepath)\n", " # Get raw data\n", " scan = scan.get_fdata()\n", " return scan\n", "\n", "def normalize(volume):\n", " \"\"\"Normalize the volume\"\"\"\n", " min = -1000\n", " max = 400\n", " volume[volume < min] = min\n", " volume[volume > max] = max\n", " volume = (volume - min) / (max - min)\n", " volume = volume.astype(\"float32\")\n", " return volume\n", "\n", "def resize_volume(img):\n", " \"\"\"Resize across z-axis\"\"\"\n", " # Set the desired depth\n", " desired_depth = 64\n", " desired_width = 128\n", " desired_height = 128\n", " # Get current depth\n", " current_depth = img.shape[-1]\n", " current_width = img.shape[0]\n", " current_height = img.shape[1]\n", " # Compute depth factor\n", " depth = current_depth / desired_depth\n", " width = current_width / desired_width\n", " height = current_height / desired_height\n", " depth_factor = 1 / depth\n", " width_factor = 1 / width\n", " height_factor = 1 / height\n", " # Rotate\n", " img = ndimage.rotate(img, 90, reshape=False)\n", " # Resize across z-axis\n", " img = ndimage.zoom(img, (width_factor, height_factor, depth_factor), order=1)\n", " return img\n", "\n", "def process_scan(path):\n", " \"\"\"Read and resize volume\"\"\"\n", " # Read scan\n", " volume = read_nifti_file(path)\n", " # Normalize\n", " volume = normalize(volume)\n", " # Resize width, height and depth\n", " volume = resize_volume(volume)\n", " return volume\n", "\n", "def plot_slices(num_rows, num_columns, width, height, data):\n", " data = np.rot90(np.array(data))\n", " data = np.transpose(data)\n", " data = np.reshape(data, (num_rows, num_columns, width, height))\n", " rows_data, columns_data = data.shape[0], data.shape[1]\n", " heights = [slc[0].shape[0] for slc in data]\n", " widths = [slc.shape[1] for slc in data[0]]\n", " fig_width = 12.0\n", " fig_height = fig_width * sum(heights) / sum(widths)\n", " f, axarr = plt.subplots(\n", " rows_data,\n", " columns_data,\n", " figsize=(fig_width, fig_height),\n", " gridspec_kw={\"height_ratios\": heights},\n", " )\n", " for i in range(rows_data):\n", " for j in range(columns_data):\n", " axarr[i, j].imshow(data[i][j], cmap=\"gray\")\n", " axarr[i, j].axis(\"off\")\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "5E8rgmupNR4c" }, "outputs": [], "source": [ "@tf.function\n", "def rotate(volume):\n", " \"\"\"Rotate the volume by a few degrees\"\"\"\n", "\n", " def scipy_rotate(volume):\n", " # define some rotation angles\n", " angles = [-20, -10, -5, 5, 10, 20]\n", " # pick angles at random\n", " angle = random.choice(angles)\n", " # rotate volume\n", " volume = ndimage.rotate(volume, angle, reshape=False)\n", " volume[volume < 0] = 0\n", " volume[volume > 1] = 1\n", " return volume\n", "\n", " augmented_volume = tf.numpy_function(scipy_rotate, [volume], tf.float32)\n", " return augmented_volume\n", "\n", "def train_preprocessing(volume, label):\n", " \"\"\"Process training data by rotating and adding a channel.\"\"\"\n", " # Rotate volume\n", " volume = rotate(volume)\n", " volume = tf.expand_dims(volume, axis=3)\n", " return volume, label\n", "\n", "def validation_preprocessing(volume, label):\n", " \"\"\"Process validation data by only adding a channel.\"\"\"\n", " volume = tf.expand_dims(volume, axis=3)\n", " return volume, label" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "lVWxHRsPZDNC" }, "outputs": [], "source": [ "ct_data_axial = []\n", "ct_data_axial_id = []\n", "\n", "dir_output = drive_path + 'Dataset/brain_mask/'\n", "for filename in os.listdir(dir_output):\n", " dir_file = dir_output + filename\n", " id = filename.split('_')[1]\n", "\n", " if '.DS_Store' in filename:\n", " continue\n", "\n", " img_data = process_scan(dir_file)\n", "\n", " # You may need additional preprocessing steps, e.g., resizing, normalization, etc.\n", " ct_data_axial.append(img_data)\n", "\n", " # ct_data_axial.append(image)\n", " ct_data_axial_id.append(id)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "id": "90TGibg6ZWol" }, "outputs": [], "source": [ "x = np.array(ct_data_axial)\n", "x_val = x[33:57]\n", "x = np.concatenate((x[0:33], x[57:]))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 719 }, "executionInfo": { "elapsed": 864, "status": "ok", "timestamp": 1692494736438, "user": { "displayName": "Muhammad Faris Muzakki", "userId": "08171857617318246005" }, "user_tz": -420 }, "id": "q6r6b-u8Zhox", "outputId": "44405c91-860f-45fe-839f-fcbec3a3e415" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dimension of the CT scan is: (128, 128, 64)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Pmos6thSU1NbBcrUc+1vfG3HovapxtvY2BiopoJne/fudWpqzEFDgCr8FHR+VEhK7TcnJ8epVVRUOLXu3bu3CpR1795d7iPoKl4qFKZCZmofQebbTAf8gq7mpmpjxoxxao8++qhTA4423LkFAACAN2huAQAA4A2aWwAAAHiD5hYAAADeIFAGwK688kqnNm7cOKemQi4qcKPCWWoVKxUAUyEhFUSqqqpyampVLLXfoCutqfGplcHU+NRjMzIyYmNMSkqy5OTkwI9te2x9+vRxtlEhLhVWUqvPqZXH1Diys7OdmjoGdY5VTe1DrQCmrouysjKn1q1bt0C1SCQSu56bmposEokEPgdqO3U9lpaWOjV1jXbu3NmpqetWhTLVfoOu5nbppZcG2g442nDnFgAAAN6guQUAAIA3aG4BAADgDZpbAAAAeINAGQBp06ZNTu0rX/mKU1OhGbWSklrZKmgATFEhHBVkU4EqFcLJzMx0avtbQSwIFTyLRqOx0Fdtba1VVVXJc6CCV23PqQqFqfCTeq6goaasrCynplb7UvsIugqcWtlLHYeiwoy7d+92avsLKbac02g0as3NzXIVLxVuCxpIVOe0sLDQqalV/tS1p64pFR5T514FEAFfcecWAAAA3qC5BQAAgDfi3txGIhH7+c9/bmeddZbl5+fbpEmT7N133419fcOGDTZ58mQbNmyYjR071p544ol4DwEAAAAdVNyb20WLFtmzzz5rd9xxh61cudL69+9v06ZNs5KSEisrK7MpU6ZYv379bMWKFXbVVVfZvHnzbMWKFfEeBgAAADqguAfKXnnlFTv//PNjwZObb77Znn32WXv33Xdty5YtlpqaarfffruFQiE74YQTbOvWrfbII4/YxIkT4z0UAIegoKDAqc2cOdOp/eEPf3BqasUqtZqUWulJBcrS09P3N8wD7lc9nwr6qMeqgFFOTo5TUyuDqRCT2b/DUqFQyFJTU+V+VYip7TlQq8WpcJY6d71793ZqavUrFQCrrq52aiqgpkJhjY2NTk2dJ7UP9VhVCxpuC4fDreYiHA7LoGHQ41DX1N69e51av379nJoKhe3cudOpBV0JTgU6X3jhBacG+CruzW12drb99a9/tcmTJ1ufPn3smWeesXA4bIMGDbJnn33WRo4c2eofi1GjRtnixYuttLTUevbseVD7DIVClpeXZ2YW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/3yPP3IqKirs0ksvtT179tjy5cud83vKKadYc3NzLFhm9lm+oLi4OOHm4qjvMMLhsE2ePNnmzZtnf/7zn+3DDz+0H/7wh5abm2vjxo1r7+F5bcuWLXbnnXfa1772NZs+fbqVlpbarl27bNeuXbZ371675JJL7P3337d58+bZxx9/bI899pj94Q9/sGnTprX30L2Tk5Njxx9/fKtfZp+lxHNycmzixIlWVVVlM2fOtM2bN9vzzz9vS5cutenTp7fzyP2Unp5u06ZNswcffNB++9vf2qeffmqLFi2yf/3rXzZlyhQ7++yzrVevXnbttdfahx9+aK+88ordd999NnXqVPmeNhy8IUOG2CmnnGI33XSTrV692goKCmzBggX2+uuv23e/+11eG+3sQOef7/FHzl133WXbtm2ze++913r06BH7fr5r1y5ramqynJwcO++882zWrFn2xhtv2Pvvv2/XXXedjRw50oYNG9bew28lKerBZzI1NTXZfffdZ88//7zV1dXZiBEj7NZbb7W+ffu299C89vDDD9v8+fPl1yZMmGB33323/f3vf7d7773XCgoKrG/fvnb11Vfbueeee4RH2jENHDjQ7rrrLrvooovMzOz999+3uXPn2vr1661Xr142depUmzx5cjuP0m+PP/64LVu2zIqLi+2EE06wq6++2s4++2wzM9u6davNmTPH1q5da926dbOvf/3rdvXVV/O/GodBRUWFLViwwF599VWrqKiwAQMGxL4pm/HaOJJuvvlm2759uz355JOx2oHOP9/jD49956Kpqcny8/P3Gwz785//bH379rWamhq78847bdWqVWZmNmbMGJs1a5ZlZWUdyaEfkBfNLQAAAGDmwdsSAAAAgBY0twAAAPAGzS0AAAC8QXMLAAAAb9DcAgAAwBs0twAAAPAGzS0AAAC8QXMLAAAAb9DcAgAAwBs0twAAAPAGzS0AAAC88f8BPqpsS12irF0AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "images = x[0]\n", "print(\"Dimension of the CT scan is:\", images.shape)\n", "plt.imshow(np.squeeze(images[:, :, 30]), cmap=\"gray\")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 294 }, "executionInfo": { "elapsed": 5542, "status": "ok", "timestamp": 1692494741978, "user": { "displayName": "Muhammad Faris Muzakki", "userId": "08171857617318246005" }, "user_tz": -420 }, "id": "jd9BZ5n8NR4c", "outputId": "1dae7011-e09a-40e2-e91f-aabeadcee003" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_slices(4, 10, 128, 128, images[:, :, :40])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "id": "KbO7FkLnNR4c" }, "outputs": [], "source": [ "y_delta_3 = []\n", "y_delta_2 = []\n", "for inc, id in enumerate(ct_data_axial_id):\n", " try:\n", " y_delta_3.append(dataset[dataset.patient_id == int(id)]['nihss_delta_3_cat'].values.tolist()[0])\n", " y_delta_2.append(dataset[dataset.patient_id == int(id)]['nihss_delta_2_cat'].values.tolist()[0])\n", " except:\n", " inc = inc + 1\n", " pass\n", "\n", "y_delta_3 = np.array(y_delta_3)\n", "y_delta_2 = np.array(y_delta_2)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "id": "siBiW3hb9jBo" }, "outputs": [], "source": [ "y_delta_3_val = np.array(pd.get_dummies(y_delta_3[33:57]))\n", "y_delta_3 = np.concatenate((y_delta_3[0:33], y_delta_3[57:]))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "Ip6Djvjc9jBo" }, "outputs": [], "source": [ "y_delta_2_val = np.array(pd.get_dummies(y_delta_2[33:57]))\n", "y_delta_2 = np.concatenate((y_delta_2[0:33], y_delta_2[57:]))" ] }, { "cell_type": "markdown", "metadata": { "id": "5ocL-HYbNR4d" }, "source": [ "## Machine Learning" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "categorize_3 = ['membaik', 'memburuk', 'signifikan']\n", "categorize_2 = ['signifikan', 'tidak signifikan']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "id": "d75GyVYw9jBp" }, "outputs": [], "source": [ "def define_model(num_of_label, path, scenario='ct'):\n", " checkpoint_filepath = drive_path + 'Models/bacchi/dataval/' + path\n", " model_checkpoint_callback = ModelCheckpoint(\n", " filepath=checkpoint_filepath,\n", " save_weights_only=True,\n", " monitor='val_f1_m',\n", " mode='max',\n", " save_best_only=True)\n", "\n", " # clear_model()\n", "\n", " img_input = Input((128, 128, 64, 1))\n", " clinical_input = Input((4,))\n", " clinical_lab_input = Input((8,))\n", "\n", " x1 = Conv3D(32, kernel_size=3, activation='relu')(img_input)\n", " x1 = MaxPooling3D(pool_size=3)(x1)\n", "\n", " x1 = Conv3D(64, kernel_size=3, activation='relu')(x1)\n", " x1 = MaxPooling3D(pool_size=3)(x1)\n", "\n", " # Flattening layer\n", " x1 = Flatten()(x1)\n", "\n", " if scenario != 'ct':\n", " if scenario == 'ct_clinic':\n", " x2 = Flatten()(clinical_input)\n", " else:\n", " x2 = Flatten()(clinical_lab_input)\n", " x2 = Dense(6, activation='relu')(x2)\n", " x2 = Dense(4, activation='relu')(x2)\n", " x2 = Dense(4, activation='relu')(x2)\n", "\n", " x1 = concatenate([x1, x2])\n", "\n", " # Fully connected layers\n", " x1 = Dense(32, activation='relu')(x1)\n", " x1 = BatchNormalization()(x1)\n", "\n", " x1 = Dense(2, activation='relu')(x1)\n", " x1 = Dense(6, activation='relu')(x1)\n", "\n", " output = Dense(num_of_label, activation='softmax')(x1)\n", "\n", " if scenario == 'ct':\n", " model = Model(inputs=[img_input], outputs=output)\n", " else:\n", " if scenario == 'ct_clinic':\n", " model = Model(inputs=[img_input, clinical_input], outputs=output)\n", " else:\n", " model = Model(inputs=[img_input, clinical_lab_input], outputs=output)\n", "\n", " #compile model using accuracy to measure model performance\n", " model.compile(optimizer='adam', loss='categorical_crossentropy',\n", " metrics=['accuracy', f1_m, precision_m, recall_m])\n", "\n", " return model, model_checkpoint_callback\n", "\n", "def recall_m(y_true, y_pred):\n", " true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))\n", " possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))\n", " recall = true_positives / (possible_positives + K.epsilon())\n", " return recall\n", "\n", "def precision_m(y_true, y_pred):\n", " true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))\n", " predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))\n", " precision = true_positives / (predicted_positives + K.epsilon())\n", " return precision\n", "\n", "def f1_m(y_true, y_pred):\n", " precision = precision_m(y_true, y_pred)\n", " recall = recall_m(y_true, y_pred)\n", " return 2*((precision*recall)/(precision+recall+K.epsilon()))\n", "\n", "def clear_model():\n", " try:\n", " with os.scandir(drive_path + 'Models') as entries:\n", " for entry in entries:\n", " if entry.is_file():\n", " os.unlink(entry.path)\n", " print(\"All files deleted successfully.\")\n", " except OSError:\n", " print(\"Error occurred while deleting files.\")" ] }, { "cell_type": "markdown", "metadata": { "id": "W3sJdGme9jBp" }, "source": [ "### CT" ] }, { "cell_type": "markdown", "metadata": { "id": "bi53sDXd9jBp", "jp-MarkdownHeadingCollapsed": true }, "source": [ "#### 3 classes" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "id": "pz9AsCC19jBp", "outputId": "9a1a6b4f-17fb-4cad-cacf-a321f3eea6c7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Metal device set to: Apple M1 Pro\n", "\n", "systemMemory: 16.00 GB\n", "maxCacheSize: 5.33 GB\n", "\n", "Epoch 1/50\n", "4/4 [==============================] - 121s 30s/step - loss: 1.1495 - accuracy: 0.3388 - f1_m: 0.0000e+00 - precision_m: 0.0000e+00 - recall_m: 0.0000e+00 - val_loss: 4.3577 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 2/50\n", "4/4 [==============================] - 109s 28s/step - loss: 1.0860 - accuracy: 0.4628 - f1_m: 0.1209 - precision_m: 0.4417 - recall_m: 0.0703 - val_loss: 16.0944 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 3/50\n", "4/4 [==============================] - 108s 28s/step - loss: 1.0713 - accuracy: 0.3802 - f1_m: 0.1291 - precision_m: 0.4750 - recall_m: 0.0747 - val_loss: 40.3942 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 4/50\n", "4/4 [==============================] - 108s 27s/step - loss: 1.0573 - accuracy: 0.4711 - f1_m: 0.1437 - precision_m: 0.5625 - recall_m: 0.0825 - val_loss: 65.2955 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 5/50\n", "4/4 [==============================] - 108s 27s/step - loss: 1.0531 - accuracy: 0.4132 - f1_m: 0.0611 - precision_m: 0.3750 - recall_m: 0.0334 - val_loss: 74.8457 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 6/50\n", "4/4 [==============================] - 107s 27s/step - loss: 1.0176 - accuracy: 0.5124 - f1_m: 0.0950 - precision_m: 0.6667 - recall_m: 0.0512 - val_loss: 78.3558 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 7/50\n", "4/4 [==============================] - 108s 28s/step - loss: 1.0170 - accuracy: 0.5207 - f1_m: 0.1343 - precision_m: 0.6875 - recall_m: 0.0747 - val_loss: 89.5410 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 8/50\n", "4/4 [==============================] - 107s 27s/step - loss: 1.0304 - accuracy: 0.5041 - f1_m: 0.1291 - precision_m: 0.5417 - recall_m: 0.0747 - val_loss: 103.3687 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 9/50\n", "4/4 [==============================] - 107s 27s/step - loss: 1.0104 - accuracy: 0.5620 - f1_m: 0.1266 - precision_m: 0.5250 - recall_m: 0.0725 - val_loss: 108.6206 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 10/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.9902 - accuracy: 0.5620 - f1_m: 0.1182 - precision_m: 0.5833 - recall_m: 0.0669 - val_loss: 102.8820 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 11/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.9818 - accuracy: 0.5041 - f1_m: 0.1216 - precision_m: 0.6875 - recall_m: 0.0669 - val_loss: 95.9327 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 12/50\n", "4/4 [==============================] - 106s 27s/step - loss: 0.9400 - accuracy: 0.6198 - f1_m: 0.2182 - precision_m: 0.8583 - recall_m: 0.1259 - val_loss: 96.2309 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 13/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.9344 - accuracy: 0.6612 - f1_m: 0.1772 - precision_m: 0.7000 - recall_m: 0.1016 - val_loss: 90.6490 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 14/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.9461 - accuracy: 0.5785 - f1_m: 0.1726 - precision_m: 0.6018 - recall_m: 0.1016 - val_loss: 80.2638 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 15/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.9204 - accuracy: 0.6281 - f1_m: 0.2841 - precision_m: 0.7222 - recall_m: 0.1772 - val_loss: 80.2887 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 16/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.9223 - accuracy: 0.5702 - f1_m: 0.2471 - precision_m: 0.6771 - recall_m: 0.1516 - val_loss: 93.9437 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 17/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.9162 - accuracy: 0.5537 - f1_m: 0.1962 - precision_m: 0.6518 - recall_m: 0.1159 - val_loss: 92.9058 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 18/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.8826 - accuracy: 0.6612 - f1_m: 0.2998 - precision_m: 0.6439 - recall_m: 0.1962 - val_loss: 78.5237 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 19/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.8974 - accuracy: 0.5702 - f1_m: 0.2755 - precision_m: 0.7000 - recall_m: 0.1728 - val_loss: 71.5111 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 20/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.8752 - accuracy: 0.6364 - f1_m: 0.2909 - precision_m: 0.6562 - recall_m: 0.1872 - val_loss: 68.1564 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 21/50\n", "4/4 [==============================] - 120s 30s/step - loss: 0.8545 - accuracy: 0.6777 - f1_m: 0.3621 - precision_m: 0.6875 - recall_m: 0.2475 - val_loss: 60.4141 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 22/50\n", "4/4 [==============================] - 120s 30s/step - loss: 0.8532 - accuracy: 0.6942 - f1_m: 0.4245 - precision_m: 0.6964 - recall_m: 0.3053 - val_loss: 46.9429 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 23/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.8584 - accuracy: 0.6694 - f1_m: 0.4051 - precision_m: 0.7222 - recall_m: 0.2831 - val_loss: 40.9158 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 24/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.8345 - accuracy: 0.6529 - f1_m: 0.4028 - precision_m: 0.6655 - recall_m: 0.2891 - val_loss: 51.4148 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 25/50\n", "4/4 [==============================] - 137s 29s/step - loss: 0.9128 - accuracy: 0.5950 - f1_m: 0.3361 - precision_m: 0.5367 - recall_m: 0.2453 - val_loss: 48.2501 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 26/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.8255 - accuracy: 0.6694 - f1_m: 0.4451 - precision_m: 0.9427 - recall_m: 0.3209 - val_loss: 62.5675 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 27/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.8495 - accuracy: 0.5950 - f1_m: 0.4523 - precision_m: 0.8425 - recall_m: 0.3253 - val_loss: 99.5132 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 28/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.7952 - accuracy: 0.6694 - f1_m: 0.4733 - precision_m: 0.6839 - recall_m: 0.3622 - val_loss: 128.8297 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 29/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.8190 - accuracy: 0.6777 - f1_m: 0.4025 - precision_m: 0.8060 - recall_m: 0.2831 - val_loss: 119.7341 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 30/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.8044 - accuracy: 0.6529 - f1_m: 0.4572 - precision_m: 0.7125 - recall_m: 0.3366 - val_loss: 110.6517 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 31/50\n", "4/4 [==============================] - 111s 28s/step - loss: 0.7955 - accuracy: 0.6281 - f1_m: 0.4773 - precision_m: 0.7273 - recall_m: 0.3578 - val_loss: 112.1453 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 32/50\n", "4/4 [==============================] - 115s 30s/step - loss: 0.7735 - accuracy: 0.6529 - f1_m: 0.4983 - precision_m: 0.8438 - recall_m: 0.3722 - val_loss: 151.2761 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 33/50\n", "4/4 [==============================] - 120s 30s/step - loss: 0.7734 - accuracy: 0.6860 - f1_m: 0.5069 - precision_m: 0.9460 - recall_m: 0.3656 - val_loss: 154.0664 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 34/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.7392 - accuracy: 0.6942 - f1_m: 0.4932 - precision_m: 0.6943 - recall_m: 0.3828 - val_loss: 124.9230 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 35/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.7622 - accuracy: 0.5868 - f1_m: 0.4449 - precision_m: 0.6327 - recall_m: 0.3438 - val_loss: 109.8931 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 36/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.7525 - accuracy: 0.6364 - f1_m: 0.4515 - precision_m: 0.6573 - recall_m: 0.3444 - val_loss: 94.2035 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 37/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.7415 - accuracy: 0.6612 - f1_m: 0.5418 - precision_m: 0.8560 - recall_m: 0.4247 - val_loss: 80.5674 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 38/50\n", "4/4 [==============================] - 118s 31s/step - loss: 0.7505 - accuracy: 0.6446 - f1_m: 0.5443 - precision_m: 0.8750 - recall_m: 0.4212 - val_loss: 93.4787 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 39/50\n", "4/4 [==============================] - 125s 33s/step - loss: 0.7257 - accuracy: 0.6694 - f1_m: 0.5538 - precision_m: 0.8594 - recall_m: 0.4391 - val_loss: 106.9284 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 40/50\n", "4/4 [==============================] - 203s 58s/step - loss: 0.7023 - accuracy: 0.7025 - f1_m: 0.5772 - precision_m: 0.8681 - recall_m: 0.4484 - val_loss: 90.7097 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 41/50\n", "4/4 [==============================] - 118s 31s/step - loss: 0.6795 - accuracy: 0.6860 - f1_m: 0.6445 - precision_m: 0.9126 - recall_m: 0.5106 - val_loss: 64.3301 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 42/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6891 - accuracy: 0.6942 - f1_m: 0.5883 - precision_m: 0.8151 - recall_m: 0.4716 - val_loss: 61.2167 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 43/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6652 - accuracy: 0.7107 - f1_m: 0.6158 - precision_m: 0.8028 - recall_m: 0.5019 - val_loss: 52.0127 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 44/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.6623 - accuracy: 0.6860 - f1_m: 0.5978 - precision_m: 0.8499 - recall_m: 0.4628 - val_loss: 32.1957 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 45/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6177 - accuracy: 0.7851 - f1_m: 0.6562 - precision_m: 0.8805 - recall_m: 0.5250 - val_loss: 28.1628 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 46/50\n", "4/4 [==============================] - 186s 46s/step - loss: 0.6691 - accuracy: 0.7025 - f1_m: 0.6233 - precision_m: 0.8178 - recall_m: 0.5072 - val_loss: 26.3035 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 47/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6482 - accuracy: 0.7273 - f1_m: 0.6278 - precision_m: 0.8546 - recall_m: 0.4994 - val_loss: 11.3614 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 48/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.6616 - accuracy: 0.7355 - f1_m: 0.6397 - precision_m: 0.8277 - recall_m: 0.5228 - val_loss: 41.6881 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 49/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.6039 - accuracy: 0.7851 - f1_m: 0.6873 - precision_m: 0.8517 - recall_m: 0.5797 - val_loss: 47.2907 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 50/50\n", "4/4 [==============================] - 122s 31s/step - loss: 0.6886 - accuracy: 0.7355 - f1_m: 0.5920 - precision_m: 0.7987 - recall_m: 0.4816 - val_loss: 33.0002 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "1/1 [==============================] - 3s 3s/step\n", "{'0': {'precision': 0.4166666666666667, 'recall': 1.0, 'f1-score': 0.5882352941176471, 'support': 10}, '1': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 4}, '2': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 10}, 'accuracy': 0.4166666666666667, 'macro avg': {'precision': 0.1388888888888889, 'recall': 0.3333333333333333, 'f1-score': 0.19607843137254902, 'support': 24}, 'weighted avg': {'precision': 0.17361111111111113, 'recall': 0.4166666666666667, 'f1-score': 0.2450980392156863, 'support': 24}}\n", "[[10 0 0]\n", " [ 4 0 0]\n", " [10 0 0]]\n", " precision recall f1-score support\n", "\n", " 0 0.42 1.00 0.59 10\n", " 1 0.00 0.00 0.00 4\n", " 2 0.00 0.00 0.00 10\n", "\n", " accuracy 0.42 24\n", " macro avg 0.14 0.33 0.20 24\n", "weighted avg 0.17 0.42 0.25 24\n", "\n", "Accuracy : 0.4166666666666667\n", "F1 : 0.19607843137254902\n", "Precision : 0.1388888888888889\n", "Recall : 0.3333333333333333\n", "Specificity : 0.6666666666666666\n", "AUC : 0.5523809523809524\n", "FPR : [0.0, 0.05, 0.25, 0.3, 0.4, 0.65, 1.0]\n", "TPR : [0.0, 0.0, 0.12037037037037036, 0.24074074074074073, 0.3611111111111111, 0.48148148148148145, 0.48148148148148145]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] }, { "data": { "image/png": "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ZbFY9NdffyU6duXKFeXIkSPF8f5do0aNtH79esXExOj7779PVGl9qH///jp8+LAWL16sgwcPat26dfrwww8dFsedO3cUHBys4sWL6/jx41q4cOFjz58zZ46++uor66tHjx5JvmaGDBlUunRpnTlzRtL9uZKDBg1S/fr1tW3bNu3evVuLFy+2mU6QLVs2SfcT5r+7fv26duzYodu3b8vT0zPRcUnaunWrLl++nOQ4ATy7SBABB2rXrp1u3LihadOmJTp25coVLVy4UC+88ILKlCljXeSwZs0am/PWrFmjuLg4Va5cOUWxeHh46OLFizZt+/bts/589+5dNWjQwJrwPPfcc2rZsqUaN25stwrq7u6usmXLat26dTaJ561bt7Rly5YUx/tPDRs21I0bNzR37lxFRERYVyL/0759+1S/fn35+/tbh34frvB+WGH95+KTpJg8ebIuXryokJAQvffee5oxY0aiBTl/V6JECfn5+VlfydmTMiYmRkePHlXhwoUlSQcOHFB8fLx69uwpb29vSfeT/59//lnS/c/p6+srLy8vbd682aavb7/9Vp06dVJMTIyqVKmiHTt22Ay9Hz16VJ06ddKRI0eSHCeAZxdDzIADVahQQb1799a0adN06tQpNW/eXF5eXjpx4oRCQ0N17949a/L4wgsvqEWLFpoxY4bu3LmjqlWrKiwsTDNnzpS/v79q166dolhefvllzZs3T/PmzVP58uW1adMmm61j3NzcrKtdM2XKpBIlSig8PFxff/21GjRoYLfPfv36qX379urUqZPeffddxcTEaP78+YqOjn7k3MXkKliwoPz8/DRv3jzVq1fPuvL7n8qVK6fVq1erTJkyypcvn/bv36/58+fLYrFY52h6enpKknbu3KmiRYuqfPnyTxXDnj179Nlnn6lPnz7y8fHRBx98oPXr12vw4MH64osvUpR4PnTx4kUdPHjQ+ueIiAh9/vnnCg8P16RJk6yfUZJGjx6t1157TREREVq2bJmOHTsm6X5l2MPDQz179tTo0aOVK1cuBQYGKjw8XDNmzFDLli2VPXt2devWTW+99ZY6d+6s1q1b6+7du5o2bZrKlSunWrVq6cCBAyn+PACeDSSIgIN17dpVpUuXtj5RJSIiQvnz51dAQIC6dOmi/PnzW88dN26cChcurJUrV2rBggXKmzevdQXp4xY2PI3O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Jk3Shx9+qCpVqqhSpUrq16+fzX9PQEqQIKZzU6dOVYcOHfTtt9/K09NTXbp00Q8//KD58+crODhYGzZs0IoVKyTdH/Jo27atateure+++06TJk3SkSNH1K5dO/39kdyzZ89Wo0aNtHr1apUsWVIDBw7U3LlzNXHiRM2dO1eHDx/WggULbOJYuHChRowYoZUrVypr1qzq0KGDNQEcPHiwjh49qpkzZ+qHH37QkCFD9M0332j58uWP/Wx37txRly5ddPfuXS1dupShGSeUHu6/pxEXF6etW7dq+fLlGjdunCwWS5J+DxMmTNC3336rRYsWqVy5ckl6L1LPtWvX1KNHD7322mtau3atZs6cqb1792rChAmJzh00aJB27NihqVOn6osvvtCtW7e0Zs0am3P+/PNPffHFF5o4caK+/vprZcmSRYMHD7a5fyWpUaNG1vmFK1as0NChQx8Zo73vud9++009e/ZU48aNtXr1an355ZfKmTOnBg4cqOjoaOt7Fy9erNy5c+urr77SxIkTtXHjRi1evDgFvzHg/5EgpnOvvfaaAgMD5evrq2bNmikiIkLDhw9X8eLF1aBBA5UqVUonTpyQJIWGhqpWrVrq0qWLfHx8VKVKFU2ePFmHDh3Snj17rH0GBASoefPmKlSokN58801FRUWpT58+KleunKpXr66aNWta+3zoo48+Uu3atVW8eHFNmDBBUVFR+u9//yvp/hBLcHCwypcvrwIFCqhp06YqXbq0jh8//sjPde/ePXXt2lVRUVFavHixcuTI4fhfHlIsPdx/T6tdu3by8fFRqVKlkvS+qVOnauXKlVq8eLHKli2bpPcidV26dEnR0dF67rnn9Pzzz6ty5cqaO3duosVF586d0w8//KARI0aoZs2aKl68uCZOnKjcuXPbnBcTE6NRo0apQoUKKlasmNq2bauzZ8/qypUrNue5ubkpe/bsku4PO3t6etqN71HfcxkyZNBHH32kNm3aqGDBgipVqpRat26ta9eu2VTPX3jhBfXt21c+Pj4KCgpSrVq1dODAgZT+2gBJzEFM9woXLmz9OUuWLJKkQoUKWdvc3Nys/+I8evSozpw5o4oVKybq59SpU/L393/qPv85xFe5cmXrz9myZZOPj481AXz33Xe1adMmff311zp9+rROnjyp8+fPy9fX95Gfa8mSJYqJiVH16tWtX7Rw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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# Convert target labels to one-hot encoding for multiclass classification\n", "num_classes = len(np.unique(y_delta_3))\n", "y_one_hot = np.array(pd.get_dummies(y_delta_3))\n", "\n", "# Initialize lists to store the metrics across folds\n", "auc_scores = []\n", "specificity_scores = []\n", "accuracy_scores = []\n", "precision_scores = []\n", "recall_scores = []\n", "specificity_scores = []\n", "f1_scores = []\n", "\n", "fpr_all = []\n", "tpr_all = []\n", "auc_all = []\n", "\n", "model, model_checkpoint_callback = define_model(3, '3_classes/ct/')\n", "model.fit([x], y_one_hot, validation_data=([x], y_one_hot),\n", " epochs=50, callbacks=[model_checkpoint_callback])\n", "\n", "# load the best model\n", "model.load_weights(drive_path + 'Models/bacchi/dataval/3_classes/ct/')\n", "\n", "# Evaluate the model on the test set\n", "y_pred = model.predict([x_val])\n", "y_pred_class = np.argmax(y_pred, axis=1)\n", "y_true_class = np.argmax(np.array(y_delta_3_val), axis=1)\n", "\n", "# Append scores to lists\n", "auc_scores.append(roc_auc_score(y_true_class, y_pred, multi_class=\"ovr\", average=\"macro\"))\n", "specificity_scores.append(specificity_score(y_true_class, y_pred_class, average=\"macro\"))\n", "\n", "class_report = classification_report(y_true_class, y_pred_class, output_dict=True)\n", "recall_scores.append(class_report['macro avg']['recall'])\n", "precision_scores.append(class_report['macro avg']['precision'])\n", "f1_scores.append(class_report['macro avg']['f1-score'])\n", "accuracy_scores.append(class_report['accuracy'])\n", "\n", "fpr = dict()\n", "tpr = dict()\n", "y_test_binarizer = label_binarize(y_true_class, classes=[x for x in range(0, num_classes)])\n", "for i in range(num_classes):\n", " fpr[i], tpr[i], _ = roc_curve(y_test_binarizer[:,1], y_pred[:,1])\n", "\n", "all_fpr = np.unique(np.concatenate([fpr[i] for i in range(num_classes)]))\n", "mean_tpr = np.zeros_like(all_fpr)\n", "for i in range(num_classes):\n", " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", " mean_tpr /= num_classes\n", "\n", "fpr_all.append(all_fpr)\n", "tpr_all.append(mean_tpr)\n", "\n", "# Calculate metrics for this fold\n", "print(class_report)\n", "print(confusion_matrix(y_true_class, y_pred_class))\n", "print(classification_report(y_true_class, y_pred_class))\n", "print(f'Accuracy : {sum(accuracy_scores)/len(accuracy_scores)}')\n", "print(f'F1 : {sum(f1_scores)/len(f1_scores)}')\n", "print(f'Precision : {sum(precision_scores)/len(precision_scores)}')\n", "print(f'Recall : {sum(recall_scores)/len(recall_scores)}')\n", "print(f'Specificity : {sum(specificity_scores)/len(specificity_scores)}')\n", "print(f'AUC : {sum(auc_scores)/len(auc_scores)}')\n", "print(f'FPR : {fpr_all[0].tolist()}')\n", "print(f'TPR : {tpr_all[0].tolist()}')\n", "# Print heatmap\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(confusion_matrix(y_true_class, y_pred_class), annot=True, cmap='Blues', fmt='g', xticklabels=categorize_3, yticklabels=categorize_3)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title(f'Confusion Matrix - {\"Bacchi\"}')\n", "plt.show()\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "a1k__MuLNR4e" }, "source": [ "#### 2 classes" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "executionInfo": { "elapsed": 3, "status": "aborted", "timestamp": 1692494742646, "user": { "displayName": "Muhammad Faris Muzakki", "userId": "08171857617318246005" }, "user_tz": -420 }, "id": "5XCN5noONR4e", "outputId": "503f356d-f51e-4820-9de8-b5457e4d82ad" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "4/4 [==============================] - 185s 34s/step - loss: 0.8879 - accuracy: 0.3306 - f1_m: 0.3104 - precision_m: 0.3209 - recall_m: 0.3031 - val_loss: 7.3204 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 2/50\n", "4/4 [==============================] - 175s 30s/step - loss: 0.7445 - accuracy: 0.5041 - f1_m: 0.4962 - precision_m: 0.4963 - recall_m: 0.4963 - val_loss: 17.0794 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 3/50\n", "4/4 [==============================] - 148s 32s/step - loss: 0.7019 - accuracy: 0.5289 - f1_m: 0.5306 - precision_m: 0.5306 - recall_m: 0.5306 - val_loss: 38.9764 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 4/50\n", "4/4 [==============================] - 124s 32s/step - loss: 0.6834 - accuracy: 0.6116 - f1_m: 0.6066 - precision_m: 0.6066 - recall_m: 0.6066 - val_loss: 74.1324 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 5/50\n", "4/4 [==============================] - 120s 31s/step - loss: 0.6885 - accuracy: 0.6942 - f1_m: 0.6891 - precision_m: 0.6891 - recall_m: 0.6891 - val_loss: 100.1210 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 6/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6575 - accuracy: 0.7603 - f1_m: 0.7603 - precision_m: 0.7603 - recall_m: 0.7603 - val_loss: 121.3081 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 7/50\n", "4/4 [==============================] - 124s 31s/step - loss: 0.6452 - accuracy: 0.8017 - f1_m: 0.8059 - precision_m: 0.8059 - recall_m: 0.8059 - val_loss: 138.0387 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 8/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.6462 - accuracy: 0.8099 - f1_m: 0.8072 - precision_m: 0.8072 - recall_m: 0.8072 - val_loss: 145.4922 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 9/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.6424 - accuracy: 0.8347 - f1_m: 0.8350 - precision_m: 0.8350 - recall_m: 0.8350 - val_loss: 145.5009 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 10/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.6321 - accuracy: 0.8760 - f1_m: 0.8806 - precision_m: 0.8806 - recall_m: 0.8806 - val_loss: 138.1365 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 11/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.6264 - accuracy: 0.8926 - f1_m: 0.8897 - precision_m: 0.8897 - recall_m: 0.8897 - val_loss: 133.7269 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 12/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.6168 - accuracy: 0.9174 - f1_m: 0.9197 - precision_m: 0.9197 - recall_m: 0.9197 - val_loss: 131.4094 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 13/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.6033 - accuracy: 0.9256 - f1_m: 0.9275 - precision_m: 0.9275 - recall_m: 0.9275 - val_loss: 123.4148 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 14/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.6001 - accuracy: 0.9091 - f1_m: 0.9119 - precision_m: 0.9119 - recall_m: 0.9119 - val_loss: 103.5960 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 15/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.5972 - accuracy: 0.9339 - f1_m: 0.9331 - precision_m: 0.9331 - recall_m: 0.9331 - val_loss: 94.7453 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 16/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5925 - accuracy: 0.8760 - f1_m: 0.8697 - precision_m: 0.8697 - recall_m: 0.8697 - val_loss: 82.0519 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 17/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5916 - accuracy: 0.9008 - f1_m: 0.9019 - precision_m: 0.9019 - recall_m: 0.9019 - val_loss: 85.8071 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 18/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5856 - accuracy: 0.9256 - f1_m: 0.9209 - precision_m: 0.9209 - recall_m: 0.9209 - val_loss: 105.4065 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 19/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.5942 - accuracy: 0.9174 - f1_m: 0.9153 - precision_m: 0.9153 - recall_m: 0.9153 - val_loss: 111.0929 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 20/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5984 - accuracy: 0.8595 - f1_m: 0.8628 - precision_m: 0.8628 - recall_m: 0.8628 - val_loss: 124.2700 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 21/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.5808 - accuracy: 0.8843 - f1_m: 0.8731 - precision_m: 0.8731 - recall_m: 0.8731 - val_loss: 135.1328 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 22/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.5566 - accuracy: 0.9339 - f1_m: 0.9375 - precision_m: 0.9375 - recall_m: 0.9375 - val_loss: 139.0185 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 23/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5626 - accuracy: 0.9174 - f1_m: 0.9131 - precision_m: 0.9131 - recall_m: 0.9131 - val_loss: 128.9016 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 24/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5716 - accuracy: 0.8843 - f1_m: 0.8775 - precision_m: 0.8775 - recall_m: 0.8775 - val_loss: 103.8461 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 25/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.6235 - accuracy: 0.7686 - f1_m: 0.7637 - precision_m: 0.7638 - recall_m: 0.7638 - val_loss: 89.2084 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 26/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.5678 - accuracy: 0.9256 - f1_m: 0.9275 - precision_m: 0.9275 - recall_m: 0.9275 - val_loss: 88.3286 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 27/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5550 - accuracy: 0.9174 - f1_m: 0.9219 - precision_m: 0.9219 - recall_m: 0.9219 - val_loss: 90.6142 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 28/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5600 - accuracy: 0.9091 - f1_m: 0.9141 - precision_m: 0.9141 - recall_m: 0.9141 - val_loss: 79.8403 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 29/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5939 - accuracy: 0.8182 - f1_m: 0.8194 - precision_m: 0.8194 - recall_m: 0.8194 - val_loss: 72.8892 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 30/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.5452 - accuracy: 0.9587 - f1_m: 0.9588 - precision_m: 0.9588 - recall_m: 0.9588 - val_loss: 85.2434 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 31/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5390 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 97.6508 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 32/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5491 - accuracy: 0.8760 - f1_m: 0.8762 - precision_m: 0.8763 - recall_m: 0.8763 - val_loss: 84.7597 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 33/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.5520 - accuracy: 0.8760 - f1_m: 0.8828 - precision_m: 0.8828 - recall_m: 0.8828 - val_loss: 88.9114 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 34/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5158 - accuracy: 0.9917 - f1_m: 0.9900 - precision_m: 0.9900 - recall_m: 0.9900 - val_loss: 82.6126 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 35/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5266 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 70.5581 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 36/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5103 - accuracy: 0.9917 - f1_m: 0.9922 - precision_m: 0.9922 - recall_m: 0.9922 - val_loss: 69.6936 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 37/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.5052 - accuracy: 0.9752 - f1_m: 0.9766 - precision_m: 0.9766 - recall_m: 0.9766 - val_loss: 62.9057 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 38/50\n", "4/4 [==============================] - 111s 28s/step - loss: 0.5070 - accuracy: 0.9587 - f1_m: 0.9544 - precision_m: 0.9544 - recall_m: 0.9544 - val_loss: 57.7542 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 39/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.5189 - accuracy: 0.9669 - f1_m: 0.9688 - precision_m: 0.9688 - recall_m: 0.9688 - val_loss: 64.5262 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 40/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.4801 - accuracy: 0.9752 - f1_m: 0.9766 - precision_m: 0.9766 - recall_m: 0.9766 - val_loss: 65.5210 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 41/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.4947 - accuracy: 0.9587 - f1_m: 0.9609 - precision_m: 0.9609 - recall_m: 0.9609 - val_loss: 74.3936 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 42/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.4831 - accuracy: 0.9835 - f1_m: 0.9844 - precision_m: 0.9844 - recall_m: 0.9844 - val_loss: 59.8748 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 43/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.4855 - accuracy: 0.9835 - f1_m: 0.9800 - precision_m: 0.9800 - recall_m: 0.9800 - val_loss: 44.5902 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 44/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.4974 - accuracy: 0.9587 - f1_m: 0.9588 - precision_m: 0.9588 - recall_m: 0.9588 - val_loss: 38.1912 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 45/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.4856 - accuracy: 0.9752 - f1_m: 0.9766 - precision_m: 0.9766 - recall_m: 0.9766 - val_loss: 30.4979 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 46/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.5034 - accuracy: 0.9504 - f1_m: 0.9509 - precision_m: 0.9509 - recall_m: 0.9509 - val_loss: 19.5027 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 47/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.4907 - accuracy: 0.9752 - f1_m: 0.9766 - precision_m: 0.9766 - recall_m: 0.9766 - val_loss: 25.1744 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 48/50\n", "4/4 [==============================] - 126s 30s/step - loss: 0.4591 - accuracy: 0.9917 - f1_m: 0.9922 - precision_m: 0.9922 - recall_m: 0.9922 - val_loss: 35.3685 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 49/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.4405 - accuracy: 0.9752 - f1_m: 0.9766 - precision_m: 0.9766 - recall_m: 0.9766 - val_loss: 32.2306 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 50/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.4736 - accuracy: 0.9752 - f1_m: 0.9700 - precision_m: 0.9700 - recall_m: 0.9700 - val_loss: 27.1248 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "1/1 [==============================] - 4s 4s/step\n", "{'0': {'precision': 0.4166666666666667, 'recall': 1.0, 'f1-score': 0.5882352941176471, 'support': 10}, '1': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 14}, 'accuracy': 0.4166666666666667, 'macro avg': {'precision': 0.20833333333333334, 'recall': 0.5, 'f1-score': 0.29411764705882354, 'support': 24}, 'weighted avg': {'precision': 0.17361111111111113, 'recall': 0.4166666666666667, 'f1-score': 0.2450980392156863, 'support': 24}}\n", "[[10 0]\n", " [14 0]]\n", " precision recall f1-score support\n", "\n", " 0 0.42 1.00 0.59 10\n", " 1 0.00 0.00 0.00 14\n", "\n", " accuracy 0.42 24\n", " macro avg 0.21 0.50 0.29 24\n", "weighted avg 0.17 0.42 0.25 24\n", "\n", "Accuracy : 0.4166666666666667\n", "F1 : 0.29411764705882354 || 0.5882352941176471\n", "Precision : 0.20833333333333334 || 0.4166666666666667\n", "Recall : 0.5 || 0.4166666666666667\n", "Specificity : 0.5 || 1.0\n", "AUC : 0.5571428571428572 || 0.5571428571428572\n", "FPR : [0.0, 0.0, 0.0, 0.2, 0.2, 0.3, 0.3, 0.5, 0.5, 0.6, 0.6, 0.9, 0.9, 1.0]\n", "TPR : [0.0, 0.07142857142857142, 0.14285714285714285, 0.14285714285714285, 0.2857142857142857, 0.2857142857142857, 0.42857142857142855, 0.42857142857142855, 0.5714285714285714, 0.5714285714285714, 0.8571428571428571, 0.8571428571428571, 1.0, 1.0]\n", "TN, FP, FN, TP : [10 0 14 0]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] }, { "data": { "image/png": "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Lypr1qzPHe8/NWrUSOvWrVNiYqJWr16dqtL6UO/evXXgwAHNnj1b+/bt06pVqzRgwACLxXH79m2NHDlSxYsX19GjRzVr1qzHnj9lyhQtWrTI+AoLC3vqazo7O6tUqVI6ceKEpPtzJfv27av69evrp59+0vbt2zV79myT6QSZM2eWdD9h/qerV69qy5Ytio+Pl5eXV6rjkrR582ZduHDhqeME8OIiQQQsqH379rp27ZrGjx+f6tjFixc1a9YsvfLKKypdurRxkcOKFStMzluxYoXu3bunihUrPlcsnp6eOnfunEnb7t27jV/fuXNHDRo0MCY8L730koKDg9W4cWOzVVAPDw+VKVNGq1atMkk8b9y4oR9//PG54/23hg0b6tq1a5o6dari4uKMK5H/bffu3apfv778/f2NQ78PV3g/rLD+e/HJ0xg7dqzOnTun8PBwtWrVShMnTky1IOeffHx85Ovra3w9y56UiYmJOnTokAoVKiRJ2rt3r5KTk9WtWzflyZNH0v3k/5dffpF0/z6LFi2qbNmyadOmTSZ9ff/99+rYsaMSExNVqVIlbdmyxWTo/dChQ+rYsaMOHjz41HECeHExxAxYUPny5fXhhx9q/Pjx+uOPP9S8eXNly5ZNx44dU2RkpO7evWtMHl955RUFBQVp4sSJun37tipXrqzDhw8rIiJC/v7+eu21154rljp16mjatGmaNm2aypUrp40bN5psHePm5mZc7eri4iIfHx/FxsZqyZIlatCggdk+e/XqpZCQEHXs2FHvvfeeEhMTNX36dCUkJDxy7uKzKlCggHx9fTVt2jTVq1fPuPL738qWLavly5erdOnSyps3r/bs2aPp06fLYDAY52h6eXlJkrZu3Spvb2+VK1fuiWLYsWOHvv32W/Xo0UOFCxfWRx99pHXr1qlfv36aP3/+cyWeD507d0779u0zfh8XF6d58+YpNjZWY8aMMd6jJA0bNkxvvvmm4uLiNHfuXB05ckTS/cqwp6enunXrpmHDhilHjhwKCAhQbGysJk6cqODgYGXJkkVdunTRO++8o06dOqlNmza6c+eOxo8fr7Jly6p69erau3fvc98PgBcDCSJgYaGhoSpVqpTxiSpxcXHKly+fateurc6dOytfvnzGcz///HMVKlRIixcv1owZM5Q7d27jCtLHLWx4Ep06ddKVK1cUGRmpxMRE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1PLly9WsWTNt3LhRKSkpGjBggCZMmKDjx49bM1YAAIA0YzBY72XvDCkpKSnP+uakpCRt2rRJixcvVkxMjO7du6dixYpp2bJllozRItz9wmwdAgArubozwtYhALASt2fesfn5DVpzzGp9D2tQzGp9W8JzfewZMmRQvXr1VK9ePV26dElLlizRkiVLLBUbAACAzTilg0qftVhsi5+cOXOqQ4cOWrlypaW6BAAAgA3YsHALAABgv9LDamNrceRNwgEAAGAGFUQAAAAzHLiASIIIAABgDotUAAAAkG4sXbpUjRo1kq+vrxo3bqxVq1ZZtH8SRAAAADMMVvzneXz//fcaOHCggoODtWLFCjVp0kQ9e/bU3r17LXTnJIgAAADpRkpKiiZMmKA2bdooODhYBQsWVGhoqF599VXt2LHDYtdhDiIAAIAZ9jgHMTY2VmfOnNEbb7xh0h4ZGWnR65AgAgAApLHAwMDHHt+wYYPZ9tjYWElSfHy8QkJCdOjQIeXPn1+hoaEKCAiwWHwMMQMAAJjhZLDe61ndvHlTktS3b181adJEs2bNUvXq1dWlSxdt3brVQndOBREAACDNPapC+F9cXFwkSSEhIQoKCpIklSxZUocOHdLXX3+tatWqWSQ+KogAAABmGAwGq72eVZ48eSRJxYsXN2l/5ZVXdPr06ee6338iQQQAADDDHoeYS5curUyZMmn//v0m7UePHlXBggWf847/P4aYAQAA0gk3Nzd98MEHmjRpkvLkyaOyZctqxYoV2rJli2bPnm2x65AgAgAAmGGvz2Lu0qWL3N3d9dVXX+n8+fPy9vZWeHi4/P39LXYNEkQAAIB0pl27dmrXrp3V+idBBAAAMMPJXkuIaYBFKgAAADBBBREAAMAMe3zUXlqhgggAAAATVBABAADMcOApiCSIAAAA5jjJcTNEhpgBAABgggoiAACAGY48xEwFEQAAACaoIAIAAJjBNjcAAADAA1QQAQAAzOBRewAAAMADVBABAADMcOACIgkiAACAOQwxAwAAAA9QQQQAADDDgQuIVBABAABgigoiAACAGY5cRXPkewcAAIAZVBABAADMMDjwJEQqiAAAADBBBREAAMAMx60fkiACAACYxUbZAAAAwANUEAEAAMxw3PohFUQAAAD8i11VEC9duqTExESlpKSYtL/00ks2iggAADgqB56CaB8J4p49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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# # Convert target labels to one-hot encoding for multiclass classification\n", "num_classes = len(np.unique(y_delta_2))\n", "y_one_hot = np.array(pd.get_dummies(y_delta_2))\n", "\n", "# # Initialize lists to store the metrics across folds\n", "auc_scores, _auc_scores = [], []\n", "accuracy_scores = []\n", "precision_scores, _precision_scores = [], []\n", "recall_scores, _recall_scores = [], []\n", "specificity_scores, _specificity_scores = [], []\n", "f1_scores, _f1_scores = [], []\n", "\n", "fpr_all = []\n", "tpr_all = []\n", "auc_all = []\n", "\n", "model, model_checkpoint_callback = define_model(2, '2_classes/ct/')\n", "model.fit([x], y_one_hot, validation_data=([x], y_one_hot),\n", " epochs=50, callbacks=[model_checkpoint_callback])\n", "\n", "# load the best model\n", "model.load_weights(drive_path + 'Models/bacchi/dataval/2_classes/ct/')\n", "\n", "# Evaluate the model on the test set\n", "y_pred = model.predict([x_val])\n", "y_pred_class = np.argmax(y_pred, axis=1)\n", "y_true_class = np.argmax(np.array(y_delta_2_val), axis=1)\n", "\n", "# Append scores to lists\n", "_auc_scores.append(roc_auc_score(y_true_class, y_pred[:,1]))\n", "_specificity_scores.append(specificity_score(y_true_class, y_pred_class))\n", "auc_scores.append(roc_auc_score(y_true_class, y_pred[:,1], multi_class=\"ovr\", average=\"macro\"))\n", "specificity_scores.append(specificity_score(y_true_class, y_pred_class, average=\"macro\"))\n", "\n", "class_report = classification_report(y_true_class, y_pred_class, output_dict=True)\n", "recall_scores.append(class_report['macro avg']['recall'])\n", "precision_scores.append(class_report['macro avg']['precision'])\n", "f1_scores.append(class_report['macro avg']['f1-score'])\n", "accuracy_scores.append(class_report['accuracy'])\n", "\n", "_recall_scores.append(class_report['0']['recall'])\n", "_precision_scores.append(class_report['0']['precision'])\n", "_f1_scores.append(class_report['0']['f1-score'])\n", "\n", "y_test_binarizer = label_binarize(y_true_class, classes=[x for x in range(0, num_classes)])\n", "fpr, tpr, _ = roc_curve(y_test_binarizer, y_pred[:, 1])\n", "\n", "fpr_all.append(fpr)\n", "tpr_all.append(tpr)\n", "\n", "# Calculate metrics for this fold\n", "print(class_report)\n", "print(confusion_matrix(y_true_class, y_pred_class))\n", "print(classification_report(y_true_class, y_pred_class))\n", "print(f'Accuracy : {sum(accuracy_scores)/len(accuracy_scores)}')\n", "print(f'F1 : {sum(f1_scores)/len(f1_scores)} || {sum(_f1_scores)/len(f1_scores)}')\n", "print(f'Precision : {sum(precision_scores)/len(precision_scores)} || {sum(_precision_scores)/len(precision_scores)}')\n", "print(f'Recall : {sum(recall_scores)/len(recall_scores)} || {sum(_precision_scores)/len(precision_scores)}')\n", "print(f'Specificity : {sum(specificity_scores)/len(specificity_scores)} || {sum(_specificity_scores)/len(specificity_scores)}')\n", "print(f'AUC : {sum(auc_scores)/len(auc_scores)} || {sum(_auc_scores)/len(auc_scores)}')\n", "print(f'FPR : {fpr_all[0].tolist()}')\n", "print(f'TPR : {tpr_all[0].tolist()}')\n", "print(f'TN, FP, FN, TP : {confusion_matrix(y_true_class, y_pred_class).ravel()}')\n", "# Print heatmap\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(confusion_matrix(y_true_class, y_pred_class), annot=True, cmap='Blues', fmt='g', xticklabels=categorize_2, yticklabels=categorize_2)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title(f'Confusion Matrix - {\"Bacchi\"}')\n", "plt.show()\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "uuBoMpbw9jBq" }, "source": [ "### CT + Clinic" ] }, { "cell_type": "markdown", "metadata": { "id": "LIbGiedM9jBq" }, "source": [ "#### 3 classes" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "id": "LjAKhDFs9jBq", "outputId": "dc0ec9bd-e78b-4c13-8cf9-9d595d8e568a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "4/4 [==============================] - 181s 35s/step - loss: 1.0946 - accuracy: 0.3471 - f1_m: 0.0147 - precision_m: 0.1250 - recall_m: 0.0078 - val_loss: 2.0076 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 2/50\n", "4/4 [==============================] - 112s 28s/step - loss: 1.0623 - accuracy: 0.5289 - f1_m: 0.0446 - precision_m: 0.5000 - recall_m: 0.0234 - val_loss: 3.5549 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 3/50\n", "4/4 [==============================] - 155s 28s/step - loss: 1.0520 - accuracy: 0.5041 - f1_m: 0.0866 - precision_m: 0.6667 - recall_m: 0.0469 - val_loss: 5.2582 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 4/50\n", "4/4 [==============================] - 111s 28s/step - loss: 1.0230 - accuracy: 0.5537 - f1_m: 0.1098 - precision_m: 0.8750 - recall_m: 0.0591 - val_loss: 7.4945 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 5/50\n", "4/4 [==============================] - 111s 28s/step - loss: 1.0291 - accuracy: 0.5207 - f1_m: 0.1147 - precision_m: 0.5417 - recall_m: 0.0647 - val_loss: 13.1554 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 6/50\n", "4/4 [==============================] - 111s 28s/step - loss: 1.0235 - accuracy: 0.5372 - f1_m: 0.1552 - precision_m: 0.9375 - recall_m: 0.0869 - val_loss: 20.2769 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 7/50\n", "4/4 [==============================] - 109s 28s/step - loss: 1.0125 - accuracy: 0.5785 - f1_m: 0.1178 - precision_m: 0.7083 - recall_m: 0.0647 - val_loss: 22.4807 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 8/50\n", "4/4 [==============================] - 108s 27s/step - loss: 1.0073 - accuracy: 0.5950 - f1_m: 0.1120 - precision_m: 0.7917 - recall_m: 0.0613 - val_loss: 22.1795 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 9/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.9893 - accuracy: 0.6364 - f1_m: 0.1698 - precision_m: 1.0000 - recall_m: 0.0947 - val_loss: 25.0933 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 10/50\n", "4/4 [==============================] - 111s 28s/step - loss: 0.9872 - accuracy: 0.6529 - f1_m: 0.2045 - precision_m: 0.8042 - recall_m: 0.1181 - val_loss: 22.4250 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 11/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.9865 - accuracy: 0.6529 - f1_m: 0.2131 - precision_m: 0.9167 - recall_m: 0.1216 - val_loss: 24.3046 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 12/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.9603 - accuracy: 0.7025 - f1_m: 0.2304 - precision_m: 0.9375 - recall_m: 0.1316 - val_loss: 32.0727 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 13/50\n", "4/4 [==============================] - 111s 28s/step - loss: 0.9575 - accuracy: 0.6860 - f1_m: 0.2315 - precision_m: 0.9583 - recall_m: 0.1350 - val_loss: 42.4513 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 14/50\n", "4/4 [==============================] - 124s 29s/step - loss: 0.9529 - accuracy: 0.6942 - f1_m: 0.2555 - precision_m: 1.0000 - recall_m: 0.1506 - val_loss: 47.9697 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 15/50\n", "4/4 [==============================] - 126s 33s/step - loss: 0.9507 - accuracy: 0.7107 - f1_m: 0.2698 - precision_m: 1.0000 - recall_m: 0.1637 - val_loss: 53.2407 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 16/50\n", "4/4 [==============================] - 183s 31s/step - loss: 0.9494 - accuracy: 0.6860 - f1_m: 0.2674 - precision_m: 0.8750 - recall_m: 0.1616 - val_loss: 57.0166 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 17/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.9448 - accuracy: 0.6942 - f1_m: 0.2758 - precision_m: 1.0000 - recall_m: 0.1672 - val_loss: 55.4003 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 18/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.9373 - accuracy: 0.7190 - f1_m: 0.2613 - precision_m: 0.9500 - recall_m: 0.1572 - val_loss: 55.7239 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 19/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.9264 - accuracy: 0.6860 - f1_m: 0.3359 - precision_m: 0.8750 - recall_m: 0.2128 - val_loss: 67.7771 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 20/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.9112 - accuracy: 0.7355 - f1_m: 0.3520 - precision_m: 0.9643 - recall_m: 0.2241 - val_loss: 61.1463 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 21/50\n", "4/4 [==============================] - 152s 30s/step - loss: 0.9265 - accuracy: 0.6529 - f1_m: 0.3242 - precision_m: 0.8500 - recall_m: 0.2062 - val_loss: 53.7050 - val_accuracy: 0.4711 - val_f1_m: 0.4716 - val_precision_m: 0.4716 - val_recall_m: 0.4716\n", "Epoch 22/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.8990 - accuracy: 0.7190 - f1_m: 0.3457 - precision_m: 0.8750 - recall_m: 0.2206 - val_loss: 56.3533 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 23/50\n", "4/4 [==============================] - 124s 32s/step - loss: 0.8971 - accuracy: 0.7025 - f1_m: 0.3212 - precision_m: 0.7500 - recall_m: 0.2050 - val_loss: 92.7645 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 24/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.8990 - accuracy: 0.6529 - f1_m: 0.3650 - precision_m: 0.8819 - recall_m: 0.2331 - val_loss: 143.0739 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 25/50\n", "4/4 [==============================] - 115s 30s/step - loss: 0.9383 - accuracy: 0.6198 - f1_m: 0.3011 - precision_m: 0.8687 - recall_m: 0.1828 - val_loss: 167.1707 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 26/50\n", "4/4 [==============================] - 112s 28s/step - loss: 0.9090 - accuracy: 0.7438 - f1_m: 0.3537 - precision_m: 0.8854 - recall_m: 0.2262 - val_loss: 163.1295 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 27/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.9296 - accuracy: 0.6364 - f1_m: 0.3012 - precision_m: 0.8750 - recall_m: 0.1850 - val_loss: 158.5735 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 28/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.9156 - accuracy: 0.6694 - f1_m: 0.2932 - precision_m: 0.7143 - recall_m: 0.1850 - val_loss: 161.1715 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 29/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.8965 - accuracy: 0.6694 - f1_m: 0.3507 - precision_m: 0.9750 - recall_m: 0.2262 - val_loss: 177.8965 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 30/50\n", "4/4 [==============================] - 113s 28s/step - loss: 0.8670 - accuracy: 0.7273 - f1_m: 0.3856 - precision_m: 0.9236 - recall_m: 0.2541 - val_loss: 170.6496 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 31/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.8666 - accuracy: 0.7190 - f1_m: 0.3414 - precision_m: 0.9750 - recall_m: 0.2184 - val_loss: 175.6637 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 32/50\n", "4/4 [==============================] - 116s 29s/step - loss: 0.8354 - accuracy: 0.7190 - f1_m: 0.4337 - precision_m: 0.9773 - recall_m: 0.2875 - val_loss: 168.8323 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 33/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.8488 - accuracy: 0.7438 - f1_m: 0.3816 - precision_m: 0.9643 - recall_m: 0.2441 - val_loss: 183.5390 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 34/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.8157 - accuracy: 0.7438 - f1_m: 0.4759 - precision_m: 0.9643 - recall_m: 0.3178 - val_loss: 172.4536 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 35/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.8489 - accuracy: 0.6942 - f1_m: 0.3982 - precision_m: 0.8944 - recall_m: 0.2587 - val_loss: 155.2587 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 36/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.8447 - accuracy: 0.6860 - f1_m: 0.4656 - precision_m: 0.9333 - recall_m: 0.3166 - val_loss: 136.5674 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 37/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.8471 - accuracy: 0.7273 - f1_m: 0.3703 - precision_m: 0.9479 - recall_m: 0.2506 - val_loss: 134.2785 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 38/50\n", "4/4 [==============================] - 179s 50s/step - loss: 0.8381 - accuracy: 0.7273 - f1_m: 0.3597 - precision_m: 0.9808 - recall_m: 0.2375 - val_loss: 138.8677 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 39/50\n", "4/4 [==============================] - 123s 32s/step - loss: 0.8264 - accuracy: 0.7521 - f1_m: 0.4237 - precision_m: 0.7500 - recall_m: 0.2953 - val_loss: 133.1788 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 40/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.7964 - accuracy: 0.7769 - f1_m: 0.4283 - precision_m: 1.0000 - recall_m: 0.2912 - val_loss: 119.8898 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 41/50\n", "4/4 [==============================] - 156s 32s/step - loss: 0.8128 - accuracy: 0.7273 - f1_m: 0.4817 - precision_m: 0.9792 - recall_m: 0.3288 - val_loss: 122.2931 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 42/50\n", "4/4 [==============================] - 127s 32s/step - loss: 0.8228 - accuracy: 0.7273 - f1_m: 0.3979 - precision_m: 0.9750 - recall_m: 0.2697 - val_loss: 122.6925 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 43/50\n", "4/4 [==============================] - 123s 32s/step - loss: 0.7882 - accuracy: 0.7438 - f1_m: 0.4253 - precision_m: 0.7500 - recall_m: 0.2969 - val_loss: 100.9741 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 44/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.7750 - accuracy: 0.7769 - f1_m: 0.4360 - precision_m: 1.0000 - recall_m: 0.2991 - val_loss: 89.9190 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 45/50\n", "4/4 [==============================] - 125s 33s/step - loss: 0.7839 - accuracy: 0.8182 - f1_m: 0.4083 - precision_m: 0.7500 - recall_m: 0.2841 - val_loss: 93.3214 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 46/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.7583 - accuracy: 0.8347 - f1_m: 0.4748 - precision_m: 1.0000 - recall_m: 0.3166 - val_loss: 97.4305 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 47/50\n", "4/4 [==============================] - 120s 31s/step - loss: 0.7783 - accuracy: 0.7190 - f1_m: 0.4385 - precision_m: 1.0000 - recall_m: 0.2997 - val_loss: 105.3676 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 48/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.7553 - accuracy: 0.8099 - f1_m: 0.5001 - precision_m: 0.9580 - recall_m: 0.3422 - val_loss: 135.6697 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 49/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.7601 - accuracy: 0.8017 - f1_m: 0.4389 - precision_m: 0.9643 - recall_m: 0.2987 - val_loss: 145.0723 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "Epoch 50/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.7260 - accuracy: 0.8017 - f1_m: 0.4818 - precision_m: 0.9844 - recall_m: 0.3403 - val_loss: 133.1714 - val_accuracy: 0.3554 - val_f1_m: 0.3534 - val_precision_m: 0.3534 - val_recall_m: 0.3534\n", "1/1 [==============================] - 3s 3s/step\n", "{'0': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 10}, '1': {'precision': 0.2, 'recall': 0.75, 'f1-score': 0.31578947368421056, 'support': 4}, '2': {'precision': 0.3333333333333333, 'recall': 0.3, 'f1-score': 0.3157894736842105, 'support': 10}, 'accuracy': 0.25, 'macro avg': {'precision': 0.17777777777777778, 'recall': 0.35000000000000003, 'f1-score': 0.21052631578947367, 'support': 24}, 'weighted avg': {'precision': 0.1722222222222222, 'recall': 0.25, 'f1-score': 0.1842105263157895, 'support': 24}}\n", "[[0 5 5]\n", " [0 3 1]\n", " [0 7 3]]\n", " precision recall f1-score support\n", "\n", " 0 0.00 0.00 0.00 10\n", " 1 0.20 0.75 0.32 4\n", " 2 0.33 0.30 0.32 10\n", "\n", " accuracy 0.25 24\n", " macro avg 0.18 0.35 0.21 24\n", "weighted avg 0.17 0.25 0.18 24\n", "\n", "Accuracy : 0.25\n", "F1 : 0.21052631578947367\n", "Precision : 0.17777777777777778\n", "Recall : 0.35000000000000003\n", "Specificity : 0.6571428571428571\n", "AUC : 0.5660714285714286\n", "FPR : [0.0, 0.05, 0.15, 0.2, 0.3, 0.7, 1.0]\n", "TPR : [0.0, 0.0, 0.12037037037037036, 0.24074074074074073, 0.3611111111111111, 0.48148148148148145, 0.48148148148148145]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] }, { "data": { "image/png": "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Dw+dO3fO6DAAAADsQpIqf6VLl05y9msymXTs2LFkB2Jtwcfdu3e1aNEilSxZMtn9AQAApIadFv6Slvz16tUr3Uuf1hZ8SI+GgydNmpSuzw0AAPBv9jrsm6Tkr0+fPukdh9atWycnJ8tR6CxZsihfvnzp/twAAACOIkULPq5evap9+/YpOjra3BYfH6/79+9r7969mjp1arL77Nevn8aPH6/SpUunJCQAAIA0xVYv//Pzzz9r4MCBio2NNZdDExISzD8XL148RYFcuHBBrq6uKboWAAAASZPs1b5z585VuXLltGLFCr388stq3bq1Vq1apQ8//FCZMmXSsGHDUhRI586dNXz4cG3atElnz57V5cuXLR4AAADP0+ObTaTHw0jJrvyFh4crJCREZcuWlZ+fnxYsWCBvb295e3vrxo0bmjt3rurUqZPsQD799FPFxcVpz549Fm/K46ri8ePHk90nAAAALCU7+XNyclLOnDklSUWLFtXZs2cVHx8vJycn1atXT99//32KAvn8889TdB0AAEB6sNMpf8lP/ooXL679+/erevXqKl68uKKjo3XixAmVLVtWt2/ftlgEkhw1atRI0XUAAABIumQnf2+++aZGjRqle/fuqV+/fqpZs6aGDh2qV199VV9++aXKlSuXokCGDh361OPBwcEp6hcAACAlnBx5n79/eu211xQdHa2LFy9KksaNG6cuXbro448/1osvvqjhw4enKJDH/T0WFxen8+fP6+7du2revHmK+gQAAEgpO839UrbPX7t27cw/Fy5cWGvWrNHff/+tXLlypTiQL774IlFbQkKCxo0bp+zZs6e4XwAAAPx/yd7qxRqTyZSqxO9p/QYFBem7775L874BAACehq1e/qd06dLPDDott2U5d+5ciheRAAAAwFKyk79evXolSv6ioqK0f/9+nT9/XgMHDkxRINYWfERFRWnbtm0KDAxMUZ9IW9u3bdXMaVN15sxp5cqdW2++1U7tgzoa/i8YOKaE+HgdWf+9Tvy2RlG3bihnvhfl2/hVlfBrYHRogG5cu6qe772iEROmqkLl6kaHgxSy17/ekp389enT54nHBg0apCNHjuiVV15JdiD/XvAhSc7OzgoKClKHDh2S3R/S1u+HDqpPz+5q0rSpevV5Xwf279PUkEmKjY1Tpy5djQ4PDmjfyi90+JflqtLyHeX1KqUL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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# # Convert target labels to one-hot encoding for multiclass classification\n", "num_classes = len(np.unique(y_delta_3))\n", "y_one_hot = np.array(pd.get_dummies(y_delta_3))\n", "\n", "# # Initialize lists to store the metrics across folds\n", "auc_scores = []\n", "specificity_scores = []\n", "accuracy_scores = []\n", "precision_scores = []\n", "recall_scores = []\n", "specificity_scores = []\n", "f1_scores = []\n", "\n", "fpr_all = []\n", "tpr_all = []\n", "auc_all = []\n", "\n", "model, model_checkpoint_callback = define_model(3,'3_classes/ct_clin/', 'ct_clinic')\n", "model.fit([x, x_clin], y_one_hot, validation_data=([x, x_clin], y_one_hot),\n", " epochs=50, callbacks=[model_checkpoint_callback])\n", "\n", "# load the best model\n", "model.load_weights(drive_path + 'Models/bacchi/dataval/3_classes/ct_clin/')\n", "\n", "# Evaluate the model on the test set\n", "y_pred = model.predict([x_val, x_clin_val])\n", "y_pred_class = np.argmax(y_pred, axis=1)\n", "y_true_class = np.argmax(np.array(y_delta_3_val), axis=1)\n", "\n", "# Append scores to lists\n", "auc_scores.append(roc_auc_score(y_true_class, y_pred, multi_class=\"ovr\", average=\"macro\"))\n", "specificity_scores.append(specificity_score(y_true_class, y_pred_class, average=\"macro\"))\n", "\n", "class_report = classification_report(y_true_class, y_pred_class, output_dict=True)\n", "recall_scores.append(class_report['macro avg']['recall'])\n", "precision_scores.append(class_report['macro avg']['precision'])\n", "f1_scores.append(class_report['macro avg']['f1-score'])\n", "accuracy_scores.append(class_report['accuracy'])\n", "\n", "fpr = dict()\n", "tpr = dict()\n", "y_test_binarizer = label_binarize(y_true_class, classes=[x for x in range(0, num_classes)])\n", "for i in range(num_classes):\n", " fpr[i], tpr[i], _ = roc_curve(y_test_binarizer[:,1], y_pred[:,1])\n", "\n", "all_fpr = np.unique(np.concatenate([fpr[i] for i in range(num_classes)]))\n", "mean_tpr = np.zeros_like(all_fpr)\n", "for i in range(num_classes):\n", " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", " mean_tpr /= num_classes\n", "\n", "fpr_all.append(all_fpr)\n", "tpr_all.append(mean_tpr)\n", "\n", "# Calculate metrics for this fold\n", "print(class_report)\n", "print(confusion_matrix(y_true_class, y_pred_class))\n", "print(classification_report(y_true_class, y_pred_class))\n", "print(f'Accuracy : {sum(accuracy_scores)/len(accuracy_scores)}')\n", "print(f'F1 : {sum(f1_scores)/len(f1_scores)}')\n", "print(f'Precision : {sum(precision_scores)/len(precision_scores)}')\n", "print(f'Recall : {sum(recall_scores)/len(recall_scores)}')\n", "print(f'Specificity : {sum(specificity_scores)/len(specificity_scores)}')\n", "print(f'AUC : {sum(auc_scores)/len(auc_scores)}')\n", "print(f'FPR : {fpr_all[0].tolist()}')\n", "print(f'TPR : {tpr_all[0].tolist()}')\n", "# Print heatmap\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(confusion_matrix(y_true_class, y_pred_class), annot=True, cmap='Blues', fmt='g', xticklabels=categorize_3, yticklabels=categorize_3)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title(f'Confusion Matrix - {\"Bacchi\"}')\n", "plt.show()\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "gYSXEcyo9jBq" }, "source": [ "#### 2 classes" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "id": "0twwG9lG9jBq", "outputId": "8a05405a-2894-4c51-802b-d71aa0cd520f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "4/4 [==============================] - 131s 32s/step - loss: 0.9784 - accuracy: 0.2975 - f1_m: 0.2887 - precision_m: 0.2966 - recall_m: 0.2822 - val_loss: 2.9679 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 2/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.7599 - accuracy: 0.4298 - f1_m: 0.4369 - precision_m: 0.4369 - recall_m: 0.4369 - val_loss: 16.3897 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 3/50\n", "4/4 [==============================] - 123s 32s/step - loss: 0.6958 - accuracy: 0.5950 - f1_m: 0.5887 - precision_m: 0.5888 - recall_m: 0.5888 - val_loss: 24.2902 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 4/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.6698 - accuracy: 0.7603 - f1_m: 0.7603 - precision_m: 0.7603 - recall_m: 0.7603 - val_loss: 32.2232 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 5/50\n", "4/4 [==============================] - 120s 31s/step - loss: 0.6588 - accuracy: 0.7603 - f1_m: 0.7625 - precision_m: 0.7625 - recall_m: 0.7625 - val_loss: 37.1714 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 6/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6509 - accuracy: 0.7934 - f1_m: 0.7916 - precision_m: 0.7916 - recall_m: 0.7916 - val_loss: 41.4416 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 7/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6392 - accuracy: 0.8430 - f1_m: 0.8472 - precision_m: 0.8472 - recall_m: 0.8472 - val_loss: 46.8535 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 8/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6347 - accuracy: 0.8347 - f1_m: 0.8328 - precision_m: 0.8328 - recall_m: 0.8328 - val_loss: 49.4427 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 9/50\n", "4/4 [==============================] - 129s 33s/step - loss: 0.6242 - accuracy: 0.8347 - f1_m: 0.8394 - precision_m: 0.8394 - recall_m: 0.8394 - val_loss: 46.6327 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 10/50\n", "4/4 [==============================] - 124s 31s/step - loss: 0.6169 - accuracy: 0.8430 - f1_m: 0.8472 - precision_m: 0.8472 - recall_m: 0.8472 - val_loss: 44.0355 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 11/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6077 - accuracy: 0.8760 - f1_m: 0.8806 - precision_m: 0.8806 - recall_m: 0.8806 - val_loss: 45.0020 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 12/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6029 - accuracy: 0.8843 - f1_m: 0.8841 - precision_m: 0.8841 - recall_m: 0.8841 - val_loss: 47.3923 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 13/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.5727 - accuracy: 0.9256 - f1_m: 0.9231 - precision_m: 0.9231 - recall_m: 0.9231 - val_loss: 42.1891 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 14/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.5767 - accuracy: 0.9008 - f1_m: 0.8953 - precision_m: 0.8953 - recall_m: 0.8953 - val_loss: 36.1378 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 15/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5681 - accuracy: 0.8926 - f1_m: 0.8941 - precision_m: 0.8941 - recall_m: 0.8941 - val_loss: 30.1984 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 16/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.5726 - accuracy: 0.8843 - f1_m: 0.8906 - precision_m: 0.8906 - recall_m: 0.8906 - val_loss: 3.5206 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 17/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.5616 - accuracy: 0.9008 - f1_m: 0.9019 - precision_m: 0.9019 - recall_m: 0.9019 - val_loss: 0.6849 - val_accuracy: 0.7521 - val_f1_m: 0.7525 - val_precision_m: 0.7525 - val_recall_m: 0.7525\n", "Epoch 18/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.5603 - accuracy: 0.8678 - f1_m: 0.8684 - precision_m: 0.8684 - recall_m: 0.8684 - val_loss: 0.6783 - val_accuracy: 0.4050 - val_f1_m: 0.4112 - val_precision_m: 0.4112 - val_recall_m: 0.4112\n", "Epoch 19/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.5444 - accuracy: 0.9174 - f1_m: 0.9175 - precision_m: 0.9175 - recall_m: 0.9175 - val_loss: 0.5620 - val_accuracy: 0.7521 - val_f1_m: 0.7525 - val_precision_m: 0.7525 - val_recall_m: 0.7525\n", "Epoch 20/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.5382 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 0.5797 - val_accuracy: 0.7521 - val_f1_m: 0.7525 - val_precision_m: 0.7525 - val_recall_m: 0.7525\n", "Epoch 21/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5551 - accuracy: 0.8926 - f1_m: 0.8919 - precision_m: 0.8919 - recall_m: 0.8919 - val_loss: 10.8890 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 22/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5273 - accuracy: 0.9339 - f1_m: 0.9375 - precision_m: 0.9375 - recall_m: 0.9375 - val_loss: 14.9667 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 23/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5240 - accuracy: 0.9091 - f1_m: 0.9075 - precision_m: 0.9075 - recall_m: 0.9075 - val_loss: 0.4279 - val_accuracy: 0.7521 - val_f1_m: 0.7547 - val_precision_m: 0.7547 - val_recall_m: 0.7547\n", "Epoch 24/50\n", "4/4 [==============================] - 118s 31s/step - loss: 0.5184 - accuracy: 0.9008 - f1_m: 0.8931 - precision_m: 0.8931 - recall_m: 0.8931 - val_loss: 0.4474 - val_accuracy: 0.7521 - val_f1_m: 0.7525 - val_precision_m: 0.7525 - val_recall_m: 0.7525\n", "Epoch 25/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5489 - accuracy: 0.8182 - f1_m: 0.8216 - precision_m: 0.8216 - recall_m: 0.8216 - val_loss: 19.3556 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 26/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5040 - accuracy: 0.9091 - f1_m: 0.9097 - precision_m: 0.9097 - recall_m: 0.9097 - val_loss: 36.5866 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 27/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.5079 - accuracy: 0.8926 - f1_m: 0.8941 - precision_m: 0.8941 - recall_m: 0.8941 - val_loss: 21.8915 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 28/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.4930 - accuracy: 0.9008 - f1_m: 0.9062 - precision_m: 0.9062 - recall_m: 0.9062 - val_loss: 30.4802 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 29/50\n", "4/4 [==============================] - 112s 29s/step - loss: 0.5258 - accuracy: 0.8430 - f1_m: 0.8494 - precision_m: 0.8494 - recall_m: 0.8494 - val_loss: 49.3385 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 30/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.4723 - accuracy: 0.9008 - f1_m: 0.9019 - precision_m: 0.9019 - recall_m: 0.9019 - val_loss: 49.5566 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 31/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.4460 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 49.2370 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 32/50\n", "4/4 [==============================] - 112s 29s/step - loss: 0.4523 - accuracy: 0.8926 - f1_m: 0.8984 - precision_m: 0.8984 - recall_m: 0.8984 - val_loss: 62.6442 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 33/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.4357 - accuracy: 0.8926 - f1_m: 0.8984 - precision_m: 0.8984 - recall_m: 0.8984 - val_loss: 80.7434 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 34/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.4064 - accuracy: 0.9421 - f1_m: 0.9366 - precision_m: 0.9366 - recall_m: 0.9366 - val_loss: 86.5780 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 35/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.4146 - accuracy: 0.9256 - f1_m: 0.9100 - precision_m: 0.9100 - recall_m: 0.9100 - val_loss: 61.0912 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 36/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.3972 - accuracy: 0.9256 - f1_m: 0.9297 - precision_m: 0.9297 - recall_m: 0.9297 - val_loss: 51.0490 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 37/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.3678 - accuracy: 0.9421 - f1_m: 0.9453 - precision_m: 0.9453 - recall_m: 0.9453 - val_loss: 57.8096 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 38/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.3783 - accuracy: 0.9174 - f1_m: 0.9219 - precision_m: 0.9219 - recall_m: 0.9219 - val_loss: 56.8397 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 39/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.3444 - accuracy: 0.9339 - f1_m: 0.9375 - precision_m: 0.9375 - recall_m: 0.9375 - val_loss: 46.4134 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 40/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.3099 - accuracy: 0.9669 - f1_m: 0.9600 - precision_m: 0.9600 - recall_m: 0.9600 - val_loss: 44.4155 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 41/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.3491 - accuracy: 0.9256 - f1_m: 0.9275 - precision_m: 0.9275 - recall_m: 0.9275 - val_loss: 35.0043 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 42/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.3441 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 16.2310 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 43/50\n", "4/4 [==============================] - 107s 28s/step - loss: 0.3871 - accuracy: 0.8760 - f1_m: 0.8697 - precision_m: 0.8697 - recall_m: 0.8697 - val_loss: 10.9612 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 44/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.3620 - accuracy: 0.8843 - f1_m: 0.8753 - precision_m: 0.8753 - recall_m: 0.8753 - val_loss: 11.8262 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 45/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.3452 - accuracy: 0.9008 - f1_m: 0.9019 - precision_m: 0.9019 - recall_m: 0.9019 - val_loss: 9.6743 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 46/50\n", "4/4 [==============================] - 107s 27s/step - loss: 0.3621 - accuracy: 0.9008 - f1_m: 0.9062 - precision_m: 0.9062 - recall_m: 0.9062 - val_loss: 8.5472 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 47/50\n", "4/4 [==============================] - 107s 28s/step - loss: 0.3390 - accuracy: 0.9091 - f1_m: 0.9141 - precision_m: 0.9141 - recall_m: 0.9141 - val_loss: 10.8093 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 48/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.2981 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 14.4245 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 49/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.2798 - accuracy: 0.9421 - f1_m: 0.9453 - precision_m: 0.9453 - recall_m: 0.9453 - val_loss: 11.4398 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 50/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.2420 - accuracy: 0.9669 - f1_m: 0.9644 - precision_m: 0.9644 - recall_m: 0.9644 - val_loss: 22.9512 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "1/1 [==============================] - 3s 3s/step\n", "{'0': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 10}, '1': {'precision': 0.5652173913043478, 'recall': 0.9285714285714286, 'f1-score': 0.7027027027027025, 'support': 14}, 'accuracy': 0.5416666666666666, 'macro avg': {'precision': 0.2826086956521739, 'recall': 0.4642857142857143, 'f1-score': 0.35135135135135126, 'support': 24}, 'weighted avg': {'precision': 0.3297101449275362, 'recall': 0.5416666666666666, 'f1-score': 0.4099099099099098, 'support': 24}}\n", "[[ 0 10]\n", " [ 1 13]]\n", " precision recall f1-score support\n", "\n", " 0 0.00 0.00 0.00 10\n", " 1 0.57 0.93 0.70 14\n", "\n", " accuracy 0.54 24\n", " macro avg 0.28 0.46 0.35 24\n", "weighted avg 0.33 0.54 0.41 24\n", "\n", "Accuracy : 0.5416666666666666\n", "F1 : 0.35135135135135126 || 0.0\n", "Precision : 0.2826086956521739 || 0.0\n", "Recall : 0.4642857142857143 || 0.0\n", "Specificity : 0.4642857142857143 || 0.0\n", "AUC : 0.6428571428571428 || 0.6428571428571428\n", "FPR : [0.0, 0.0, 0.0, 0.2, 0.2, 0.3, 0.3, 0.5, 0.5, 0.6, 0.6, 1.0, 1.0]\n", "TPR : [0.0, 0.07142857142857142, 0.2857142857142857, 0.2857142857142857, 0.35714285714285715, 0.35714285714285715, 0.5, 0.5, 0.7857142857142857, 0.7857142857142857, 0.9285714285714286, 0.9285714285714286, 1.0]\n", "TN, FP, FN, TP : [ 0 10 1 13]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAogAAAImCAYAAADQX3skAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRvUlEQVR4nO3deXxMZ///8feERERiX6K1p8RObKHUkqB20uVuNaV2QmgttbYULUUoEktt1ShfilBqq63aqKXWqrXa1Fo7sQQJye8PzK8jQ4OZnIl5PfuYx52cc3LOZ0blfvdzXec6pqSkpCQBAAAA97kYXQAAAAAcCwERAAAAFgiIAAAAsEBABAAAgAUCIgAAACwQEAEAAGCBgAgAAAALBEQAAABYICACcBo8FwAAUoaACNjBvn379OGHH6p27doqW7as6tatq48//lgnTpyw2zVnz56t6tWrq2zZspo8ebJNzrlt2zb5+vpq27ZtNjlfSq7l6+ur6Ohoq8f8+eef5mNOnjyZ4nPHx8drxIgRWr58+X8e6+vrq/Dw8BSf+1k8eC8PXiVLltTLL7+sXr166dSpU6lSw7+l9M87NT8jAMZIb3QBwPNm7ty5GjFihPz9/dW7d2/lzp1bx44d08yZM/XDDz/o66+/VvHixW16zevXr2vUqFGqXbu22rVrp3z58tnkvKVKldKCBQv00ksv2eR8KeHi4qLVq1erRo0ayfatXLnyqc557tw5ff311xo5cuR/HrtgwQJ5e3s/1XWexhtvvKE333xTkpSQkKBTp05pypQpatOmjVasWCE3N7dUqyWlUvszApD6CIiADe3cuVOfffaZgoODNWjQIPN2f39/1a1bVy1atNDAgQMVFRVl0+vGxsYqMTFRdevWVeXKlW12Xk9PT5UvX95m50uJChUqaO3atfrkk0+UPr3lr6iVK1eqRIkSOnjwoN2un9rv19vb2+KalStXlre3t9577z398ssvql27dqrWkxKp/RkBSH0MMQM2NHPmTHl5ealXr17J9mXPnl39+/dXYGCg4uLiJEl3797V3Llz1bRpU5UtW1a1a9dWWFiYbt++bf65/v37q02bNlq8eLFeffVVlS5dWs2bN9dPP/0kSYqKilJAQIAkaeDAgfL19ZUkBQQEqH///hY1REVFWQzP3rp1S5988olq1qyp0qVLq0GDBpo5c6b5eGtDjvv27VP79u3l7++vChUqqEuXLvrjjz+S/cyWLVvUrl07lStXTtWrV9eYMWN09+7d//wMGzVqpCtXrmjr1q0W2w8dOqS///5bDRs2TPYz69at0zvvvCM/Pz/z+5g7d64k6eTJkwoMDJQkDRgwwPxZ9e/fX++9956GDBmiChUqqFGjRrp7967F8GloaKjKlCmjv/76y3yt8PBwlShRQtu3b//P9/K0smTJIkkymUzmbZcuXdLQoUNVp04dlS5dWlWqVFG3bt2SDbUvXbpUQUFBKleunGrXrq2xY8cqPj7evH/Pnj1q166dKlSooKpVq6pXr146e/asxTn++usvtW/f3vxnFxYWpjt37pj3M8QMPP8IiICNJCUlKTo6WtWqVVPGjBmtHtOoUSN169ZNHh4ekqTBgwdr5MiRqlu3rqZMmaLg4GB988036tq1q8UNFb///rtmzpypHj16aNKkSUqXLp26d++u2NhY1a5dWxEREZKkkJAQLViwIMU1jxgxQj/99JP69eunmTNnKjAwUKNHj9bixYutHr9161a1bNnS/LOffvqp/vnnH7399tv6888/LY7t06ePKlasqKlTp6pJkyaaMWOGFi5c+J81vfTSSypatKhWr15tsX3FihWqUqWKcuXKZbH9xx9/VLdu3VSqVClNnjxZ4eHhyp8/v4YNG6a9e/cqd+7cFp/Pg68laceOHfrnn380adIk9e7dW+nSpbM49yeffCIPDw8NGTJE0r0/h6lTp6pdu3aqUqXKf76XlEhMTNSdO3d0584dxcfHKyYmRmPHjlWRIkVUrVo1Sff+3ercubM2b96sPn36aObMmQoNDdWWLVvMtUn3pjf069dPpUqVUkREhDp16qQ5c+bo008/lSQdOHBA7777rm7fvq3Ro0dr6NCh+v3339W+fXuLADhy5Ejzn13Dhg01ffp0zZ8/3ybvF0DawBAzYCOXL1/W7du3Uzz/7+jRo1q0aJF69+6tTp06SZKqV6+u3Llzq2/fvvrpp59Uq1YtSdK1a9cUFRWlAgUKSJI8PDz07rvvauvWrXr11VdVokQJSVKBAgWeaPhv+/btql69uho3bizp3lC4h4eHcuTIYfX4sWPHqmDBgpo2bZo5TNWoUUP16tXTxIkTNWHCBPOxb775prp16yZJqlatmtatW6cff/xRb7/99n/W1bBhQ0VGRloMM69c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0bRp0/TXX3/p2LFjOnTokCTp7t275uOKFClicT4vLy/z3EcgrTpy5Ij55pUH/Pz8zH8HsmfPrnfeeUfff/+9Dhw4oOPHj5v3PRhWlaRz587pk08+kaurq1588cXHXjM0NFQffvih1qxZo4oVK6pGjRqPvFFk//79ql+/vsW2ypUrJ+ve//t3hXTv7+fT/q541Htxd3fXu+++q9WrV+u3337TsWPHdPjwYV24cMHis3i4nmf93QWkFjqIsJuxY8dq1apV6tChgy5fvqwPP/xQ7du3tzjmQZfg4V+o1ri5uSXb9rTDNMWKFVNkZKR+/fVXLViwwLx9+/btevXVV7Vv3z4VL15coaGhGjNmTIpqAZ4HD/9ddHV1NX99/vx5NWvWTAsXLlSePHn0zjvvaMmSJcnOYTKZNH36dBUrVkwDBw587N/vevXq6eeff9bnn3+uF198UV999ZUaNGigP/74I9mx6dOnT/XfFY96L3FxcXr77bc1depUZc6cWUFBQZo3b568vb3tWg+QWuggwi727t2rFStWaODAgSpSpIjatGmjZcuW6cMPP9Rbb71lPs7X11cmk0l79uxRzZo1JUnx8fHav3+/qlWrZrf6ateurSpVqqht27YaPXq0atasqbx582rWrFny9/e3mKQ+Z84cSfxCx/OvRIkS2rVrl9q0aWPetm/fPvPX33//va5cuaI1a9aYg+OD4dR///14MGqQM2dOvf7664qMjLQ45wPx8fEaO3asmjdvrkaNGqlRo0a6deuWqlevrh9//FFFixa1OL548eLau3evxTZ7T+141HuJjo7W/v37tXnzZvOUmCtXrujixYv8rsBzgQ4i7MLT01Pz5s3TmDFjdOzYMR05ckQrV65UoUKFlC1bNvNx+fPnV8OGDTV8+HBt2bJFR48e1aBBg3TmzBmZTCa71xkaGqrs2bPro48+kiTlzZtXhw8f1o4dO3Ty5EktXrxYEyZMkCSLm1SAtCpTpkw6deqUzpw5k2xfp06dtHbtWs2YMUN///235syZozVr1pj3e3t76+bNm1q9erVOnz6t6Oho9erVS5L1vx++vr5q3769xo8fr+PHjyfb7+bmpn379unjjz/Wnj17dPLkSUVFRSkuLs5i2skDHTt21OrVq/XVV1/p77//1uLFi/XNN988y8eRYg+/lwedwmXLlunUqVPasWOHunbt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# # Convert target labels to one-hot encoding for multiclass classification\n", "num_classes = len(np.unique(y_delta_2))\n", "y_one_hot = np.array(pd.get_dummies(y_delta_2))\n", "\n", "# # Initialize lists to store the metrics across folds\n", "auc_scores, _auc_scores = [], []\n", "accuracy_scores = []\n", "precision_scores, _precision_scores = [], []\n", "recall_scores, _recall_scores = [], []\n", "specificity_scores, _specificity_scores = [], []\n", "f1_scores, _f1_scores = [], []\n", "\n", "fpr_all = []\n", "tpr_all = []\n", "auc_all = []\n", "\n", "model, model_checkpoint_callback = define_model(2, '2_classes/ct_clin/', 'ct_clinic')\n", "model.fit([x, x_clin], y_one_hot, validation_data=([x, x_clin], y_one_hot),\n", " epochs=50, callbacks=[model_checkpoint_callback])\n", "\n", "# load the best model\n", "model.load_weights(drive_path + 'Models/bacchi/dataval/2_classes/ct_clin/')\n", "\n", "# Evaluate the model on the test set\n", "y_pred = model.predict([x_val, x_clin_val])\n", "y_pred_class = np.argmax(y_pred, axis=1)\n", "y_true_class = np.argmax(np.array(y_delta_2_val), axis=1)\n", "\n", "# Append scores to lists\n", "_auc_scores.append(roc_auc_score(y_true_class, y_pred[:,1]))\n", "_specificity_scores.append(specificity_score(y_true_class, y_pred_class))\n", "auc_scores.append(roc_auc_score(y_true_class, y_pred[:,1], multi_class=\"ovr\", average=\"macro\"))\n", "specificity_scores.append(specificity_score(y_true_class, y_pred_class, average=\"macro\"))\n", "\n", "class_report = classification_report(y_true_class, y_pred_class, output_dict=True)\n", "recall_scores.append(class_report['macro avg']['recall'])\n", "precision_scores.append(class_report['macro avg']['precision'])\n", "f1_scores.append(class_report['macro avg']['f1-score'])\n", "accuracy_scores.append(class_report['accuracy'])\n", "\n", "_recall_scores.append(class_report['0']['recall'])\n", "_precision_scores.append(class_report['0']['precision'])\n", "_f1_scores.append(class_report['0']['f1-score'])\n", "\n", "y_test_binarizer = label_binarize(y_true_class, classes=[x for x in range(0, num_classes)])\n", "fpr, tpr, _ = roc_curve(y_test_binarizer, y_pred[:, 1])\n", "\n", "fpr_all.append(fpr)\n", "tpr_all.append(tpr)\n", "\n", "# Calculate metrics for this fold\n", "print(class_report)\n", "print(confusion_matrix(y_true_class, y_pred_class))\n", "print(classification_report(y_true_class, y_pred_class))\n", "print(f'Accuracy : {sum(accuracy_scores)/len(accuracy_scores)}')\n", "print(f'F1 : {sum(f1_scores)/len(f1_scores)} || {sum(_f1_scores)/len(f1_scores)}')\n", "print(f'Precision : {sum(precision_scores)/len(precision_scores)} || {sum(_precision_scores)/len(precision_scores)}')\n", "print(f'Recall : {sum(recall_scores)/len(recall_scores)} || {sum(_precision_scores)/len(precision_scores)}')\n", "print(f'Specificity : {sum(specificity_scores)/len(specificity_scores)} || {sum(_specificity_scores)/len(specificity_scores)}')\n", "print(f'AUC : {sum(auc_scores)/len(auc_scores)} || {sum(_auc_scores)/len(auc_scores)}')\n", "print(f'FPR : {fpr_all[0].tolist()}')\n", "print(f'TPR : {tpr_all[0].tolist()}')\n", "print(f'TN, FP, FN, TP : {confusion_matrix(y_true_class, y_pred_class).ravel()}')\n", "# Print heatmap\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(confusion_matrix(y_true_class, y_pred_class), annot=True, cmap='Blues', fmt='g', xticklabels=categorize_2, yticklabels=categorize_2)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title(f'Confusion Matrix - {\"Bacchi\"}')\n", "plt.show()\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "Ki7gW8A69jBr" }, "source": [ "### CT + Clinic + Lab" ] }, { "cell_type": "markdown", "metadata": { "id": "89ZKfGfR9jBr" }, "source": [ "#### 3 Classes" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "id": "l_87csgd9jBr", "outputId": "02225afb-fd95-4351-dc85-268a82d74f15" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "4/4 [==============================] - 125s 31s/step - loss: 1.1248 - accuracy: 0.3967 - f1_m: 0.0454 - precision_m: 0.2083 - recall_m: 0.0256 - val_loss: 1.3766 - val_accuracy: 0.3967 - val_f1_m: 0.0000e+00 - val_precision_m: 0.0000e+00 - val_recall_m: 0.0000e+00\n", "Epoch 2/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0630 - accuracy: 0.3967 - f1_m: 0.1462 - precision_m: 0.4917 - recall_m: 0.0859 - val_loss: 2.0839 - val_accuracy: 0.3967 - val_f1_m: 0.4009 - val_precision_m: 0.4028 - val_recall_m: 0.3991\n", "Epoch 3/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0710 - accuracy: 0.3967 - f1_m: 0.1253 - precision_m: 0.3393 - recall_m: 0.0769 - val_loss: 4.3452 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 4/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0790 - accuracy: 0.4050 - f1_m: 0.0344 - precision_m: 0.5000 - recall_m: 0.0178 - val_loss: 9.2006 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 5/50\n", "4/4 [==============================] - 112s 29s/step - loss: 1.0820 - accuracy: 0.3967 - f1_m: 0.0486 - precision_m: 0.5000 - recall_m: 0.0256 - val_loss: 13.9033 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 6/50\n", "4/4 [==============================] - 111s 28s/step - loss: 1.0786 - accuracy: 0.3967 - f1_m: 0.0344 - precision_m: 0.5000 - recall_m: 0.0178 - val_loss: 18.9246 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 7/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0711 - accuracy: 0.4050 - f1_m: 0.0522 - precision_m: 0.5000 - recall_m: 0.0278 - val_loss: 22.4424 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 8/50\n", "4/4 [==============================] - 112s 29s/step - loss: 1.0733 - accuracy: 0.4050 - f1_m: 0.0000e+00 - precision_m: 0.0000e+00 - recall_m: 0.0000e+00 - val_loss: 24.5282 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 9/50\n", "4/4 [==============================] - 112s 29s/step - loss: 1.0798 - accuracy: 0.4050 - f1_m: 0.0000e+00 - precision_m: 0.0000e+00 - recall_m: 0.0000e+00 - val_loss: 26.3240 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 10/50\n", "4/4 [==============================] - 111s 29s/step - loss: 1.0731 - accuracy: 0.3967 - f1_m: 0.0344 - precision_m: 0.5000 - recall_m: 0.0178 - val_loss: 25.3702 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 11/50\n", "4/4 [==============================] - 114s 29s/step - loss: 1.0674 - accuracy: 0.4050 - f1_m: 0.0337 - precision_m: 0.3750 - recall_m: 0.0178 - val_loss: 25.5538 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 12/50\n", "4/4 [==============================] - 116s 29s/step - loss: 1.0615 - accuracy: 0.4132 - f1_m: 0.0643 - precision_m: 0.3333 - recall_m: 0.0356 - val_loss: 27.6050 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 13/50\n", "4/4 [==============================] - 119s 31s/step - loss: 1.0647 - accuracy: 0.4050 - f1_m: 0.0727 - precision_m: 0.5417 - recall_m: 0.0391 - val_loss: 23.2437 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 14/50\n", "4/4 [==============================] - 115s 29s/step - loss: 1.0517 - accuracy: 0.4215 - f1_m: 0.0703 - precision_m: 0.3750 - recall_m: 0.0391 - val_loss: 19.1491 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 15/50\n", "4/4 [==============================] - 126s 32s/step - loss: 1.0423 - accuracy: 0.4215 - f1_m: 0.0765 - precision_m: 0.6250 - recall_m: 0.0412 - val_loss: 17.7533 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 16/50\n", "4/4 [==============================] - 242s 62s/step - loss: 1.0395 - accuracy: 0.4545 - f1_m: 0.1262 - precision_m: 0.6250 - recall_m: 0.0712 - val_loss: 15.4789 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 17/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0368 - accuracy: 0.4132 - f1_m: 0.1093 - precision_m: 0.6500 - recall_m: 0.0613 - val_loss: 14.4673 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 18/50\n", "4/4 [==============================] - 114s 29s/step - loss: 1.0187 - accuracy: 0.4132 - f1_m: 0.1524 - precision_m: 0.6500 - recall_m: 0.0869 - val_loss: 13.9822 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 19/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0150 - accuracy: 0.4298 - f1_m: 0.2258 - precision_m: 0.6562 - recall_m: 0.1394 - val_loss: 12.8575 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 20/50\n", "4/4 [==============================] - 113s 29s/step - loss: 1.0148 - accuracy: 0.4298 - f1_m: 0.1735 - precision_m: 0.5929 - recall_m: 0.1025 - val_loss: 11.6284 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 21/50\n", "4/4 [==============================] - 112s 29s/step - loss: 1.0057 - accuracy: 0.4545 - f1_m: 0.2013 - precision_m: 0.8667 - recall_m: 0.1181 - val_loss: 9.7903 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 22/50\n", "4/4 [==============================] - 115s 30s/step - loss: 1.0086 - accuracy: 0.4793 - f1_m: 0.1851 - precision_m: 0.5750 - recall_m: 0.1103 - val_loss: 8.4172 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 23/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.9927 - accuracy: 0.4793 - f1_m: 0.2396 - precision_m: 0.6111 - recall_m: 0.1494 - val_loss: 8.6227 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 24/50\n", "4/4 [==============================] - 115s 30s/step - loss: 0.9794 - accuracy: 0.4711 - f1_m: 0.2323 - precision_m: 0.6875 - recall_m: 0.1406 - val_loss: 9.4016 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 25/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.9833 - accuracy: 0.4711 - f1_m: 0.2984 - precision_m: 0.7083 - recall_m: 0.1937 - val_loss: 9.4588 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 26/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.9697 - accuracy: 0.4711 - f1_m: 0.3025 - precision_m: 0.6167 - recall_m: 0.2006 - val_loss: 9.9780 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 27/50\n", "4/4 [==============================] - 112s 28s/step - loss: 0.9769 - accuracy: 0.5289 - f1_m: 0.2739 - precision_m: 0.5833 - recall_m: 0.1794 - val_loss: 9.7573 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 28/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.9495 - accuracy: 0.5702 - f1_m: 0.3179 - precision_m: 0.6483 - recall_m: 0.2106 - val_loss: 10.3053 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 29/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.9536 - accuracy: 0.5702 - f1_m: 0.3401 - precision_m: 0.9444 - recall_m: 0.2206 - val_loss: 12.1571 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 30/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.9314 - accuracy: 0.5785 - f1_m: 0.3581 - precision_m: 0.8542 - recall_m: 0.2319 - val_loss: 12.0226 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 31/50\n", "4/4 [==============================] - 123s 32s/step - loss: 0.9270 - accuracy: 0.5868 - f1_m: 0.3302 - precision_m: 0.7308 - recall_m: 0.2197 - val_loss: 13.3610 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 32/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.9651 - accuracy: 0.5372 - f1_m: 0.2776 - precision_m: 0.6518 - recall_m: 0.1772 - val_loss: 15.8458 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 33/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.9408 - accuracy: 0.5702 - f1_m: 0.3220 - precision_m: 0.6944 - recall_m: 0.2106 - val_loss: 17.1445 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 34/50\n", "4/4 [==============================] - 116s 29s/step - loss: 0.9305 - accuracy: 0.5620 - f1_m: 0.3042 - precision_m: 0.6124 - recall_m: 0.2031 - val_loss: 17.5136 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 35/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.9228 - accuracy: 0.6116 - f1_m: 0.3417 - precision_m: 0.6995 - recall_m: 0.2266 - val_loss: 18.6162 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 36/50\n", "4/4 [==============================] - 124s 32s/step - loss: 0.9201 - accuracy: 0.5785 - f1_m: 0.3153 - precision_m: 0.6667 - recall_m: 0.2072 - val_loss: 20.4662 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 37/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.8961 - accuracy: 0.5785 - f1_m: 0.3726 - precision_m: 0.6752 - recall_m: 0.2575 - val_loss: 21.2383 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 38/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.9029 - accuracy: 0.5785 - f1_m: 0.3583 - precision_m: 0.7188 - recall_m: 0.2406 - val_loss: 24.1656 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 39/50\n", "4/4 [==============================] - 141s 38s/step - loss: 0.8564 - accuracy: 0.6529 - f1_m: 0.3907 - precision_m: 0.7292 - recall_m: 0.2675 - val_loss: 30.2845 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 40/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.8663 - accuracy: 0.6777 - f1_m: 0.3886 - precision_m: 0.7273 - recall_m: 0.2656 - val_loss: 32.0532 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 41/50\n", "4/4 [==============================] - 112s 29s/step - loss: 0.8711 - accuracy: 0.6446 - f1_m: 0.3754 - precision_m: 0.7500 - recall_m: 0.2519 - val_loss: 281.7568 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 42/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.8976 - accuracy: 0.6033 - f1_m: 0.4004 - precision_m: 0.9500 - recall_m: 0.2753 - val_loss: 161.7062 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 43/50\n", "4/4 [==============================] - 115s 30s/step - loss: 0.8610 - accuracy: 0.6198 - f1_m: 0.4782 - precision_m: 0.9645 - recall_m: 0.3347 - val_loss: 95.1793 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 44/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.8791 - accuracy: 0.6281 - f1_m: 0.4967 - precision_m: 0.9217 - recall_m: 0.3422 - val_loss: 68.9274 - val_accuracy: 0.3967 - val_f1_m: 0.3991 - val_precision_m: 0.3991 - val_recall_m: 0.3991\n", "Epoch 45/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.8501 - accuracy: 0.6364 - f1_m: 0.5399 - precision_m: 0.9250 - recall_m: 0.3834 - val_loss: 84.5550 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 46/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.8945 - accuracy: 0.5620 - f1_m: 0.5195 - precision_m: 0.8105 - recall_m: 0.3834 - val_loss: 88.3228 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 47/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.8141 - accuracy: 0.7025 - f1_m: 0.5644 - precision_m: 0.8539 - recall_m: 0.4225 - val_loss: 98.4677 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 48/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.8315 - accuracy: 0.6612 - f1_m: 0.4330 - precision_m: 0.7344 - recall_m: 0.3088 - val_loss: 95.1434 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 49/50\n", "4/4 [==============================] - 111s 29s/step - loss: 0.8066 - accuracy: 0.7190 - f1_m: 0.4986 - precision_m: 0.7500 - recall_m: 0.3744 - val_loss: 91.8851 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 50/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.7985 - accuracy: 0.7107 - f1_m: 0.4583 - precision_m: 0.6875 - recall_m: 0.3438 - val_loss: 86.8821 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "WARNING:tensorflow:5 out of the last 5 calls to .predict_function at 0x3cd479d80> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", "1/1 [==============================] - 3s 3s/step\n", "{'0': {'precision': 0.4166666666666667, 'recall': 1.0, 'f1-score': 0.5882352941176471, 'support': 10}, '1': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 4}, '2': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 10}, 'accuracy': 0.4166666666666667, 'macro avg': {'precision': 0.1388888888888889, 'recall': 0.3333333333333333, 'f1-score': 0.19607843137254902, 'support': 24}, 'weighted avg': {'precision': 0.17361111111111113, 'recall': 0.4166666666666667, 'f1-score': 0.2450980392156863, 'support': 24}}\n", "[[10 0 0]\n", " [ 4 0 0]\n", " [10 0 0]]\n", " precision recall f1-score support\n", "\n", " 0 0.42 1.00 0.59 10\n", " 1 0.00 0.00 0.00 4\n", " 2 0.00 0.00 0.00 10\n", "\n", " accuracy 0.42 24\n", " macro avg 0.14 0.33 0.20 24\n", "weighted avg 0.17 0.42 0.25 24\n", "\n", "Accuracy : 0.4166666666666667\n", "F1 : 0.19607843137254902\n", "Precision : 0.1388888888888889\n", "Recall : 0.3333333333333333\n", "Specificity : 0.6666666666666666\n", "AUC : 0.5577380952380953\n", "FPR : [0.0, 0.05, 0.1, 0.85, 1.0]\n", "TPR : [0.0, 0.24074074074074073, 0.3611111111111111, 0.48148148148148145, 0.48148148148148145]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] }, { "data": { "image/png": "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ZbFY9NdffyU6duXKFeXIkSPF8f5do0aNtH79esXExOj7779PVGl9qH///jp8+LAWL16sgwcPat26dfrwww8dFsedO3cUHBys4sWL6/jx41q4cOFjz58zZ46++uor66tHjx5JvmaGDBlUunRpnTlzRtL9uZKDBg1S/fr1tW3bNu3evVuLFy+2mU6QLVs2SfcT5r+7fv26duzYodu3b8vT0zPRcUnaunWrLl++nOQ4ATy7SBABB2rXrp1u3LihadOmJTp25coVLVy4UC+88ILKlCljXeSwZs0am/PWrFmjuLg4Va5cOUWxeHh46OLFizZt+/bts/589+5dNWjQwJrwPPfcc2rZsqUaN25stwrq7u6usmXLat26dTaJ561bt7Rly5YUx/tPDRs21I0bNzR37lxFRERYVyL/0759+1S/fn35+/tbh34frvB+WGH95+KTpJg8ebIuXryokJAQvffee5oxY0aiBTl/V6JECfn5+VlfydmTMiYmRkePHlXhwoUlSQcOHFB8fLx69uwpb29vSfeT/59//lnS/c/p6+srLy8vbd682aavb7/9Vp06dVJMTIyqVKmiHTt22Ay9Hz16VJ06ddKRI0eSHCeAZxdDzIADVahQQb1799a0adN06tQpNW/eXF5eXjpx4oRCQ0N17949a/L4wgsvqEWLFpoxY4bu3LmjqlWrKiwsTDNnzpS/v79q166dolhefvllzZs3T/PmzVP58uW1adMmm61j3NzcrKtdM2XKpBIlSig8PFxff/21GjRoYLfPfv36qX379urUqZPeffddxcTEaP78+YqOjn7k3MXkKliwoPz8/DRv3jzVq1fPuvL7n8qVK6fVq1erTJkyypcvn/bv36/58+fLYrFY52h6enpKknbu3KmiRYuqfPnyTxXDnj179Nlnn6lPnz7y8fHRBx98oPXr12vw4MH64osvUpR4PnTx4kUdPHjQ+ueIiAh9/vnnCg8P16RJk6yfUZJGjx6t1157TREREVq2bJmOHTsm6X5l2MPDQz179tTo0aOVK1cuBQYGKjw8XDNmzFDLli2VPXt2devWTW+99ZY6d+6s1q1b6+7du5o2bZrKlSunWrVq6cCBAyn+PACeDSSIgIN17dpVpUuXtj5RJSIiQvnz51dAQIC6dOmi/PnzW88dN26cChcurJUrV2rBggXKmzevdQXp4xY2PI3O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Jk3Shx9+qCpVqqhSpUrq16+fzX9PQEqQIKZzU6dOVYcOHfTtt9/K09NTXbp00Q8//KD58+crODhYGzZs0IoVKyTdH/Jo27atateure+++06TJk3SkSNH1K5dO/39kdyzZ89Wo0aNtHr1apUsWVIDBw7U3LlzNXHiRM2dO1eHDx/WggULbOJYuHChRowYoZUrVypr1qzq0KGDNQEcPHiwjh49qpkzZ+qHH37QkCFD9M0332j58uWP/Wx37txRly5ddPfuXS1dupShGSeUHu6/pxEXF6etW7dq+fLlGjdunCwWS5J+DxMmTNC3336rRYsWqVy5ckl6L1LPtWvX1KNHD7322mtau3atZs6cqb1792rChAmJzh00aJB27NihqVOn6osvvtCtW7e0Zs0am3P+/PNPffHFF5o4caK+/vprZcmSRYMHD7a5fyWpUaNG1vmFK1as0NChQx8Zo73vud9++009e/ZU48aNtXr1an355ZfKmTOnBg4cqOjoaOt7Fy9erNy5c+urr77SxIkTtXHjRi1evDgFvzHg/5EgpnOvvfaaAgMD5evrq2bNmikiIkLDhw9X8eLF1aBBA5UqVUonTpyQJIWGhqpWrVrq0qWLfHx8VKVKFU2ePFmHDh3Snj17rH0GBASoefPmKlSokN58801FRUWpT58+KleunKpXr66aNWta+3zoo48+Uu3atVW8eHFNmDBBUVFR+u9//yvp/hBLcHCwypcvrwIFCqhp06YqXbq0jh8//sjPde/ePXXt2lVRUVFavHixcuTI4fhfHlIsPdx/T6tdu3by8fFRqVKlkvS+qVOnauXKlVq8eLHKli2bpPcidV26dEnR0dF67rnn9Pzzz6ty5cqaO3duosVF586d0w8//KARI0aoZs2aKl68uCZOnKjcuXPbnBcTE6NRo0apQoUKKlasmNq2bauzZ8/qypUrNue5ubkpe/bsku4PO3t6etqN71HfcxkyZNBHH32kNm3aqGDBgipVqpRat26ta9eu2VTPX3jhBfXt21c+Pj4KCgpSrVq1dODAgZT+2gBJzEFM9woXLmz9OUuWLJKkQoUKWdvc3Nys/+I8evSozpw5o4oVKybq59SpU/L393/qPv85xFe5cmXrz9myZZOPj481AXz33Xe1adMmff311zp9+rROnjyp8+fPy9fX95Gfa8mSJYqJiVH16tWtX7Rw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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# # Convert target labels to one-hot encoding for multiclass classification\n", "num_classes = len(np.unique(y_delta_3))\n", "y_one_hot = np.array(pd.get_dummies(y_delta_3))\n", "\n", "# # Initialize lists to store the metrics across folds\n", "auc_scores = []\n", "specificity_scores = []\n", "accuracy_scores = []\n", "precision_scores = []\n", "recall_scores = []\n", "specificity_scores = []\n", "f1_scores = []\n", "\n", "fpr_all = []\n", "tpr_all = []\n", "auc_all = []\n", "\n", "model, model_checkpoint_callback = define_model(3, '3_classes/ct_clin_lab/', 'ct_clinic_lab')\n", "model.fit([x, x_clin_lab], y_one_hot, validation_data=([x, x_clin_lab], y_one_hot),\n", " epochs=50, callbacks=[model_checkpoint_callback])\n", "\n", "# load the best model\n", "model.load_weights(drive_path + 'Models/bacchi/dataval/3_classes/ct_clin_lab/')\n", "\n", "# Evaluate the model on the test set\n", "y_pred = model.predict([x_val, x_clin_lab_val])\n", "y_pred_class = np.argmax(y_pred, axis=1)\n", "y_true_class = np.argmax(np.array(y_delta_3_val), axis=1)\n", "\n", "# Append scores to lists\n", "auc_scores.append(roc_auc_score(y_true_class, y_pred, multi_class=\"ovr\", average=\"macro\"))\n", "specificity_scores.append(specificity_score(y_true_class, y_pred_class, average=\"macro\"))\n", "\n", "class_report = classification_report(y_true_class, y_pred_class, output_dict=True)\n", "recall_scores.append(class_report['macro avg']['recall'])\n", "precision_scores.append(class_report['macro avg']['precision'])\n", "f1_scores.append(class_report['macro avg']['f1-score'])\n", "accuracy_scores.append(class_report['accuracy'])\n", "\n", "fpr = dict()\n", "tpr = dict()\n", "y_test_binarizer = label_binarize(y_true_class, classes=[x for x in range(0, num_classes)])\n", "for i in range(num_classes):\n", " fpr[i], tpr[i], _ = roc_curve(y_test_binarizer[:,1], y_pred[:,1])\n", "\n", "all_fpr = np.unique(np.concatenate([fpr[i] for i in range(num_classes)]))\n", "mean_tpr = np.zeros_like(all_fpr)\n", "for i in range(num_classes):\n", " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", " mean_tpr /= num_classes\n", "\n", "fpr_all.append(all_fpr)\n", "tpr_all.append(mean_tpr)\n", "\n", "# Calculate metrics for this fold\n", "print(class_report)\n", "print(confusion_matrix(y_true_class, y_pred_class))\n", "print(classification_report(y_true_class, y_pred_class))\n", "print(f'Accuracy : {sum(accuracy_scores)/len(accuracy_scores)}')\n", "print(f'F1 : {sum(f1_scores)/len(f1_scores)}')\n", "print(f'Precision : {sum(precision_scores)/len(precision_scores)}')\n", "print(f'Recall : {sum(recall_scores)/len(recall_scores)}')\n", "print(f'Specificity : {sum(specificity_scores)/len(specificity_scores)}')\n", "print(f'AUC : {sum(auc_scores)/len(auc_scores)}')\n", "print(f'FPR : {fpr_all[0].tolist()}')\n", "print(f'TPR : {tpr_all[0].tolist()}')\n", "# Print heatmap\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(confusion_matrix(y_true_class, y_pred_class), annot=True, cmap='Blues', fmt='g', xticklabels=categorize_3, yticklabels=categorize_3)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title(f'Confusion Matrix - {\"Bacchi\"}')\n", "plt.show()\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "72tj5Jk59jBr" }, "source": [ "#### 2 Classes" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "LS3ON-mw9jBr", "outputId": "babbb7e2-3bf0-4ece-b899-6d144dfcfddd" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "4/4 [==============================] - 125s 31s/step - loss: 0.7468 - accuracy: 0.3802 - f1_m: 0.3911 - precision_m: 0.4030 - recall_m: 0.3822 - val_loss: 1.0609 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 2/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6987 - accuracy: 0.5289 - f1_m: 0.5350 - precision_m: 0.5350 - recall_m: 0.5350 - val_loss: 0.9929 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 3/50\n", "4/4 [==============================] - 122s 32s/step - loss: 0.6857 - accuracy: 0.6198 - f1_m: 0.6187 - precision_m: 0.6187 - recall_m: 0.6187 - val_loss: 1.0015 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 4/50\n", "4/4 [==============================] - 120s 30s/step - loss: 0.6827 - accuracy: 0.6777 - f1_m: 0.6822 - precision_m: 0.6822 - recall_m: 0.6822 - val_loss: 1.0522 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 5/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6724 - accuracy: 0.6364 - f1_m: 0.6366 - precision_m: 0.6366 - recall_m: 0.6366 - val_loss: 1.0566 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 6/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6626 - accuracy: 0.7603 - f1_m: 0.7712 - precision_m: 0.7713 - recall_m: 0.7713 - val_loss: 0.9196 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 7/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6594 - accuracy: 0.8430 - f1_m: 0.8450 - precision_m: 0.8450 - recall_m: 0.8450 - val_loss: 0.8498 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 8/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6567 - accuracy: 0.7934 - f1_m: 0.7828 - precision_m: 0.7828 - recall_m: 0.7828 - val_loss: 0.9078 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 9/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.6526 - accuracy: 0.7851 - f1_m: 0.7772 - precision_m: 0.7772 - recall_m: 0.7772 - val_loss: 0.9004 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 10/50\n", "4/4 [==============================] - 123s 32s/step - loss: 0.6410 - accuracy: 0.8017 - f1_m: 0.8037 - precision_m: 0.8037 - recall_m: 0.8037 - val_loss: 0.7928 - val_accuracy: 0.2645 - val_f1_m: 0.2631 - val_precision_m: 0.2631 - val_recall_m: 0.2631\n", "Epoch 11/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.6378 - accuracy: 0.8264 - f1_m: 0.8206 - precision_m: 0.8206 - recall_m: 0.8206 - val_loss: 0.6727 - val_accuracy: 0.7521 - val_f1_m: 0.7525 - val_precision_m: 0.7525 - val_recall_m: 0.7525\n", "Epoch 12/50\n", "4/4 [==============================] - 115s 29s/step - loss: 0.6366 - accuracy: 0.8017 - f1_m: 0.8016 - precision_m: 0.8016 - recall_m: 0.8016 - val_loss: 2.0726 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 13/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.6194 - accuracy: 0.8512 - f1_m: 0.8550 - precision_m: 0.8550 - recall_m: 0.8550 - val_loss: 1.3936 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 14/50\n", "4/4 [==============================] - 112s 28s/step - loss: 0.6211 - accuracy: 0.8347 - f1_m: 0.8350 - precision_m: 0.8350 - recall_m: 0.8350 - val_loss: 0.8131 - val_accuracy: 0.2810 - val_f1_m: 0.2787 - val_precision_m: 0.2788 - val_recall_m: 0.2788\n", "Epoch 15/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.6091 - accuracy: 0.8430 - f1_m: 0.8428 - precision_m: 0.8428 - recall_m: 0.8428 - val_loss: 0.7450 - val_accuracy: 0.3471 - val_f1_m: 0.3456 - val_precision_m: 0.3456 - val_recall_m: 0.3456\n", "Epoch 16/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.6062 - accuracy: 0.8347 - f1_m: 0.8350 - precision_m: 0.8350 - recall_m: 0.8350 - val_loss: 1.3173 - val_accuracy: 0.2562 - val_f1_m: 0.2553 - val_precision_m: 0.2553 - val_recall_m: 0.2553\n", "Epoch 17/50\n", "4/4 [==============================] - 113s 29s/step - loss: 0.6012 - accuracy: 0.8595 - f1_m: 0.8541 - precision_m: 0.8541 - recall_m: 0.8541 - val_loss: 2.3808 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 18/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.5916 - accuracy: 0.8512 - f1_m: 0.8506 - precision_m: 0.8506 - recall_m: 0.8506 - val_loss: 2.0280 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 19/50\n", "4/4 [==============================] - 122s 32s/step - loss: 0.5870 - accuracy: 0.8512 - f1_m: 0.8462 - precision_m: 0.8462 - recall_m: 0.8462 - val_loss: 1.7096 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 20/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.6151 - accuracy: 0.8017 - f1_m: 0.8037 - precision_m: 0.8037 - recall_m: 0.8037 - val_loss: 1.9515 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 21/50\n", "4/4 [==============================] - 118s 30s/step - loss: 0.5776 - accuracy: 0.8678 - f1_m: 0.8706 - precision_m: 0.8706 - recall_m: 0.8706 - val_loss: 0.6554 - val_accuracy: 0.7521 - val_f1_m: 0.7525 - val_precision_m: 0.7525 - val_recall_m: 0.7525\n", "Epoch 22/50\n", "4/4 [==============================] - 118s 31s/step - loss: 0.5646 - accuracy: 0.9008 - f1_m: 0.9041 - precision_m: 0.9041 - recall_m: 0.9041 - val_loss: 0.9859 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 23/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.5591 - accuracy: 0.9339 - f1_m: 0.9287 - precision_m: 0.9287 - recall_m: 0.9287 - val_loss: 1.6270 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 24/50\n", "4/4 [==============================] - 124s 32s/step - loss: 0.5366 - accuracy: 0.9256 - f1_m: 0.9231 - precision_m: 0.9231 - recall_m: 0.9231 - val_loss: 5.7181 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 25/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.5876 - accuracy: 0.8347 - f1_m: 0.8241 - precision_m: 0.8241 - recall_m: 0.8241 - val_loss: 16.5625 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 26/50\n", "4/4 [==============================] - 125s 33s/step - loss: 0.5321 - accuracy: 0.9256 - f1_m: 0.9253 - precision_m: 0.9253 - recall_m: 0.9253 - val_loss: 21.5025 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 27/50\n", "4/4 [==============================] - 117s 30s/step - loss: 0.5374 - accuracy: 0.9174 - f1_m: 0.9131 - precision_m: 0.9131 - recall_m: 0.9131 - val_loss: 25.2617 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 28/50\n", "4/4 [==============================] - 116s 30s/step - loss: 0.5786 - accuracy: 0.8678 - f1_m: 0.8706 - precision_m: 0.8706 - recall_m: 0.8706 - val_loss: 35.5246 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 29/50\n", "4/4 [==============================] - 119s 31s/step - loss: 0.6153 - accuracy: 0.7603 - f1_m: 0.7625 - precision_m: 0.7625 - recall_m: 0.7625 - val_loss: 42.4826 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 30/50\n", "4/4 [==============================] - 118s 31s/step - loss: 0.5215 - accuracy: 0.9256 - f1_m: 0.9231 - precision_m: 0.9231 - recall_m: 0.9231 - val_loss: 84.5193 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 31/50\n", "4/4 [==============================] - 122s 29s/step - loss: 0.5123 - accuracy: 0.9091 - f1_m: 0.9119 - precision_m: 0.9119 - recall_m: 0.9119 - val_loss: 58.5266 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 32/50\n", "4/4 [==============================] - 121s 32s/step - loss: 0.5671 - accuracy: 0.8264 - f1_m: 0.8359 - precision_m: 0.8359 - recall_m: 0.8359 - val_loss: 70.6711 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 33/50\n", "4/4 [==============================] - 121s 31s/step - loss: 0.5408 - accuracy: 0.8678 - f1_m: 0.8728 - precision_m: 0.8728 - recall_m: 0.8728 - val_loss: 86.1573 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 34/50\n", "4/4 [==============================] - 124s 32s/step - loss: 0.5191 - accuracy: 0.9091 - f1_m: 0.9053 - precision_m: 0.9053 - recall_m: 0.9053 - val_loss: 66.9467 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 35/50\n", "4/4 [==============================] - 182s 52s/step - loss: 0.5230 - accuracy: 0.8926 - f1_m: 0.8787 - precision_m: 0.8787 - recall_m: 0.8787 - val_loss: 58.2958 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 36/50\n", "4/4 [==============================] - 171s 31s/step - loss: 0.4967 - accuracy: 0.9339 - f1_m: 0.9287 - precision_m: 0.9287 - recall_m: 0.9287 - val_loss: 56.6680 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 37/50\n", "4/4 [==============================] - 136s 36s/step - loss: 0.4791 - accuracy: 0.9421 - f1_m: 0.9431 - precision_m: 0.9431 - recall_m: 0.9431 - val_loss: 86.1615 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 38/50\n", "4/4 [==============================] - 168s 41s/step - loss: 0.4736 - accuracy: 0.9504 - f1_m: 0.9531 - precision_m: 0.9531 - recall_m: 0.9531 - val_loss: 111.0287 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 39/50\n", "4/4 [==============================] - 130s 34s/step - loss: 0.4733 - accuracy: 0.9008 - f1_m: 0.9019 - precision_m: 0.9019 - recall_m: 0.9019 - val_loss: 112.5644 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 40/50\n", "4/4 [==============================] - 114s 29s/step - loss: 0.4633 - accuracy: 0.9091 - f1_m: 0.9009 - precision_m: 0.9009 - recall_m: 0.9009 - val_loss: 98.8663 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 41/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.4512 - accuracy: 0.9339 - f1_m: 0.9375 - precision_m: 0.9375 - recall_m: 0.9375 - val_loss: 88.7207 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 42/50\n", "4/4 [==============================] - 108s 27s/step - loss: 0.4483 - accuracy: 0.9587 - f1_m: 0.9588 - precision_m: 0.9588 - recall_m: 0.9588 - val_loss: 76.0235 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 43/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.4510 - accuracy: 0.9256 - f1_m: 0.9187 - precision_m: 0.9187 - recall_m: 0.9187 - val_loss: 61.9097 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 44/50\n", "4/4 [==============================] - 111s 28s/step - loss: 0.4778 - accuracy: 0.8926 - f1_m: 0.8853 - precision_m: 0.8853 - recall_m: 0.8853 - val_loss: 49.8025 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 45/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.4379 - accuracy: 0.9256 - f1_m: 0.9253 - precision_m: 0.9253 - recall_m: 0.9253 - val_loss: 51.5799 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 46/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.4729 - accuracy: 0.8678 - f1_m: 0.8706 - precision_m: 0.8706 - recall_m: 0.8706 - val_loss: 49.5188 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 47/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.4621 - accuracy: 0.8595 - f1_m: 0.8672 - precision_m: 0.8672 - recall_m: 0.8672 - val_loss: 57.2072 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 48/50\n", "4/4 [==============================] - 108s 28s/step - loss: 0.4280 - accuracy: 0.9339 - f1_m: 0.9353 - precision_m: 0.9353 - recall_m: 0.9353 - val_loss: 66.5677 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 49/50\n", "4/4 [==============================] - 110s 28s/step - loss: 0.4192 - accuracy: 0.9587 - f1_m: 0.9566 - precision_m: 0.9566 - recall_m: 0.9566 - val_loss: 60.2383 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "Epoch 50/50\n", "4/4 [==============================] - 109s 28s/step - loss: 0.3904 - accuracy: 0.9752 - f1_m: 0.9766 - precision_m: 0.9766 - recall_m: 0.9766 - val_loss: 65.3641 - val_accuracy: 0.2479 - val_f1_m: 0.2475 - val_precision_m: 0.2475 - val_recall_m: 0.2475\n", "WARNING:tensorflow:6 out of the last 6 calls to .predict_function at 0x29eeea8c0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", "1/1 [==============================] - 3s 3s/step\n", "{'0': {'precision': 0.0, 'recall': 0.0, 'f1-score': 0.0, 'support': 10}, '1': {'precision': 0.5833333333333334, 'recall': 1.0, 'f1-score': 0.7368421052631579, 'support': 14}, 'accuracy': 0.5833333333333334, 'macro avg': {'precision': 0.2916666666666667, 'recall': 0.5, 'f1-score': 0.3684210526315789, 'support': 24}, 'weighted avg': {'precision': 0.34027777777777785, 'recall': 0.5833333333333334, 'f1-score': 0.4298245614035088, 'support': 24}}\n", "[[ 0 10]\n", " [ 0 14]]\n", " precision recall f1-score support\n", "\n", " 0 0.00 0.00 0.00 10\n", " 1 0.58 1.00 0.74 14\n", "\n", " accuracy 0.58 24\n", " macro avg 0.29 0.50 0.37 24\n", "weighted avg 0.34 0.58 0.43 24\n", "\n", "Accuracy : 0.5833333333333334\n", "F1 : 0.3684210526315789 || 0.0\n", "Precision : 0.2916666666666667 || 0.0\n", "Recall : 0.5 || 0.0\n", "Specificity : 0.5 || 0.0\n", "AUC : 0.5 || 0.5\n", "FPR : [0.0, 1.0]\n", "TPR : [0.0, 1.0]\n", "TN, FP, FN, TP : [ 0 10 0 14]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/mfarismuzakki/.pyenv/versions/3.10.2/envs/tesis/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] }, { "data": { "image/png": "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Cy/oxRdfVKVKlTR16lRjde+hU6dOac2aNRo8eLBefvlllShRQqNHj1auXLlMzktMTNTQoUNVoUIFFS9eXO3atdPJkyd18eJFk/Pc3NyULVs2SfeHpry8vMzGd/fuXYWFhenWrVuaPXu2smfPLklydnbWJ598orZt26pgwYIqVaqU2rRpoytXrujy5cvG97/00kvq2bOnihQpoqCgINWoUUN79ux51o8NsKrs2bPLxcVFbm5uZodu58yZo8aNGyskJERFixZVx44dTRK727dvq02bNho0aJB8fHxUpEgRde/eXZL0+++/m/T17bffatSoUZo8ebJq1679yJhOnjyprFmzqmDBgipcuLAGDhyoiRMnytnZOdW5UVFRevXVVxUaGqqiRYuqZcuWatmyZarzWrRooebNm6tgwYLq3LmzsmbNqt27d6c6L3fu3HJ2dpaHh8djp6GYu5c7d+6oefPmGj58uEqWLKmCBQuqbdu2ypUrl8lnkdbfXYC9YQ4irKJUqVJq2rSpOnfurNy5c6tGjRqqU6eO6tevbzK8cvDgQUn3F648lDlzZpUrVy5Vnz4+PsavHyZ+iYmJTxXf119/rcTERFWrVs2YUD6MO1u2bJo+fbr+/PNPnThxQocPH5Yk3bt3z3hesWLFTPrz8vIyzn0EMqojR44YF6885O/vb/wZyJEjh9599119//33OnjwoE6ePGk89nBYVZIuXLigIUOGyMXFRS+++OJjrxkeHq6PPvpIa9asUaVKlVSzZs1HLhQ5cOCAGjRoYNJWpUqVVNX7f/6ukO7/fD7t74pH3Yubm5tatWql1atX69dff9WJEyf0+++/69KlSyafxb/jedbfXUB6oYIIqxk7dqxWrVql999/X1evXtVHH32k0NBQk3MeVgn+/QvVHFdX11RtTztMU6JECUVHR+uXX37RggULjO07duxQw4YNtX//fpUsWVLh4eEaPXp0mmIBngf//ll0cXExfn3x4kU1a9ZMCxcuVN68efXuu+9qyZIlqfowGAyaMWOGSpQooQEDBjz257t+/fr66aef9Pnnn+vFF1/UV199pVdffVVHjx5NdW6mTJnS/XfFo+4lPj5e77zzjqZOnaqsWbMqODhY8+bNU758+awaD5BeqCDCKvbt26cVK1ZowIABKlasmNq2batly5bpo48+0ttvv208z9fXVwaDQXv3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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# # Convert target labels to one-hot encoding for multiclass classification\n", "num_classes = len(np.unique(y_delta_2))\n", "y_one_hot = np.array(pd.get_dummies(y_delta_2))\n", "\n", "# # Initialize lists to store the metrics across folds\n", "auc_scores, _auc_scores = [], []\n", "accuracy_scores = []\n", "precision_scores, _precision_scores = [], []\n", "recall_scores, _recall_scores = [], []\n", "specificity_scores, _specificity_scores = [], []\n", "f1_scores, _f1_scores = [], []\n", "\n", "fpr_all = []\n", "tpr_all = []\n", "auc_all = []\n", "\n", "model, model_checkpoint_callback = define_model(2, '2_classes/ct_clin_lab/', 'ct_clinic_lab')\n", "model.fit([x, x_clin_lab], y_one_hot, validation_data=([x, x_clin_lab], y_one_hot),\n", " epochs=50, callbacks=[model_checkpoint_callback])\n", "\n", "# load the best model\n", "model.load_weights(drive_path + 'Models/bacchi/dataval/2_classes/ct_clin_lab/')\n", "\n", "# Evaluate the model on the test set\n", "y_pred = model.predict([x_val, x_clin_lab_val])\n", "y_pred_class = np.argmax(y_pred, axis=1)\n", "y_true_class = np.argmax(np.array(y_delta_2_val), axis=1)\n", "\n", "# Append scores to lists\n", "_auc_scores.append(roc_auc_score(y_true_class, y_pred[:,1]))\n", "_specificity_scores.append(specificity_score(y_true_class, y_pred_class))\n", "auc_scores.append(roc_auc_score(y_true_class, y_pred[:,1], multi_class=\"ovr\", average=\"macro\"))\n", "specificity_scores.append(specificity_score(y_true_class, y_pred_class, average=\"macro\"))\n", "\n", "class_report = classification_report(y_true_class, y_pred_class, output_dict=True)\n", "recall_scores.append(class_report['macro avg']['recall'])\n", "precision_scores.append(class_report['macro avg']['precision'])\n", "f1_scores.append(class_report['macro avg']['f1-score'])\n", "accuracy_scores.append(class_report['accuracy'])\n", "\n", "_recall_scores.append(class_report['0']['recall'])\n", "_precision_scores.append(class_report['0']['precision'])\n", "_f1_scores.append(class_report['0']['f1-score'])\n", "\n", "y_test_binarizer = label_binarize(y_true_class, classes=[x for x in range(0, num_classes)])\n", "fpr, tpr, _ = roc_curve(y_test_binarizer, y_pred[:, 1])\n", "\n", "fpr_all.append(fpr)\n", "tpr_all.append(tpr)\n", "\n", "# Calculate metrics for this fold\n", "print(class_report)\n", "print(confusion_matrix(y_true_class, y_pred_class))\n", "print(classification_report(y_true_class, y_pred_class))\n", "print(f'Accuracy : {sum(accuracy_scores)/len(accuracy_scores)}')\n", "print(f'F1 : {sum(f1_scores)/len(f1_scores)} || {sum(_f1_scores)/len(f1_scores)}')\n", "print(f'Precision : {sum(precision_scores)/len(precision_scores)} || {sum(_precision_scores)/len(precision_scores)}')\n", "print(f'Recall : {sum(recall_scores)/len(recall_scores)} || {sum(_precision_scores)/len(precision_scores)}')\n", "print(f'Specificity : {sum(specificity_scores)/len(specificity_scores)} || {sum(_specificity_scores)/len(specificity_scores)}')\n", "print(f'AUC : {sum(auc_scores)/len(auc_scores)} || {sum(_auc_scores)/len(auc_scores)}')\n", "print(f'FPR : {fpr_all[0].tolist()}')\n", "print(f'TPR : {tpr_all[0].tolist()}')\n", "print(f'TN, FP, FN, TP : {confusion_matrix(y_true_class, y_pred_class).ravel()}')\n", "# Print heatmap\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(confusion_matrix(y_true_class, y_pred_class), annot=True, cmap='Blues', fmt='g', xticklabels=categorize_2, yticklabels=categorize_2)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title(f'Confusion Matrix - {\"Bacchi\"}')\n", "plt.show()\n", "print()" ] } ], "metadata": { "accelerator": "GPU", "colab": { "gpuType": "T4", "provenance": [] }, "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.10.2" } }, "nbformat": 4, "nbformat_minor": 4 }