{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceType":"competition","sourceId":13451,"datasetId":654585,"databundleVersionId":1188070}],"dockerImageVersionId":30627,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport gc\nimport cv2\nimport copy\nimport time\nimport random\n\n# For data manipulation\nimport numpy as np\nimport pandas as pd\n\n# Pytorch Imports\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.optim import lr_scheduler\nfrom torch.utils.data import Dataset, DataLoader\nfrom torch.cuda import amp\n\n# Utils\nimport joblib\nfrom tqdm import tqdm\nfrom collections import defaultdict\n\n# Sklearn Imports\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.model_selection import StratifiedKFold, KFold\n\nimport time\n\n# Albumentations for augmentations\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\n\n# For colored terminal text\nfrom colorama import Fore, Back, Style\nc_ = Fore.CYAN\nsr_ = Style.RESET_ALL\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\n# For descriptive error messages\nos.environ['CUDA_LAUNCH_BLOCKING'] = \"1\"","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.status.busy":"2024-07-17T06:56:27.049623Z","iopub.execute_input":"2024-07-17T06:56:27.050053Z","iopub.status.idle":"2024-07-17T06:56:34.7289Z","shell.execute_reply.started":"2024-07-17T06:56:27.050016Z","shell.execute_reply":"2024-07-17T06:56:34.727735Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nimport tensorflow_addons as tfa\nimport glob, warnings\nimport matplotlib.pyplot as plt\nfrom sklearn.metrics import confusion_matrix, classification_report\nimport seaborn as sns\n\nwarnings.filterwarnings('ignore')\nprint('TensorFlow Version ' + tf.__version__)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:56:34.731674Z","iopub.execute_input":"2024-07-17T06:56:34.732424Z","iopub.status.idle":"2024-07-17T06:56:49.663404Z","shell.execute_reply.started":"2024-07-17T06:56:34.732373Z","shell.execute_reply":"2024-07-17T06:56:49.661271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import seaborn as sns\nimport matplotlib.pyplot as plt\n\nimport os\nimport os.path\nfrom pathlib import Path\n\nimport glob\n\nfrom PIL import Image\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.preprocessing import MinMaxScaler\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras import regularizers\n\nfrom sklearn.metrics import confusion_matrix, accuracy_score, classification_report, roc_auc_score, roc_curve\n\nfrom tensorflow.keras.optimizers import RMSprop,Adam,Optimizer\n\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalization,MaxPooling2D\nfrom tensorflow.keras.layers import BatchNormalization,Permute, TimeDistributed, Bidirectional,GRU, SimpleRNN, LSTM, GlobalAveragePooling2D\nfrom tensorflow.keras import models\nfrom tensorflow.keras import layers\nimport tensorflow as tf\n\n\nfrom warnings import filterwarnings\n\nfilterwarnings(\"ignore\",category=DeprecationWarning)\nfilterwarnings(\"ignore\", category=FutureWarning) \nfilterwarnings(\"ignore\", category=UserWarning)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:56:49.665228Z","iopub.execute_input":"2024-07-17T06:56:49.666132Z","iopub.status.idle":"2024-07-17T06:56:49.693105Z","shell.execute_reply.started":"2024-07-17T06:56:49.666082Z","shell.execute_reply":"2024-07-17T06:56:49.691761Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain = pd.read_csv(\"../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_train.csv\")\nsub = pd.read_csv(\"../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_sample_submission.csv\")\ntrain_images = os.listdir(\"../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_train/\")\ntest_images = os.listdir(\"../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_test/\")\nprint ('Train:', train.shape[0])\nprint ('Sub:', sub.shape[0])","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:56:49.696938Z","iopub.execute_input":"2024-07-17T06:56:49.69759Z","iopub.status.idle":"2024-07-17T06:57:14.451065Z","shell.execute_reply.started":"2024-07-17T06:56:49.697516Z","shell.execute_reply":"2024-07-17T06:57:14.448895Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain['type'] = train['ID'].str.split(\"_\", n = 3, expand = True)[2]\ntrain['PatientID'] = train['ID'].str.split(\"_\", n = 3, expand = True)[1]\ntrain['filename'] = train['ID'].apply(lambda st: \"ID_\" + st.split('_')[1] + \".png\")\n# Remove invalid PNGs\ntrain=train.head(150000)\n\n\nsub['filename'] = sub['ID'].apply(lambda st: \"ID_\" + st.split('_')[1] + \".png\")\nsub['type'] = sub['ID'].apply(lambda st: st.split('_')[2])\nsub=sub.head(150000)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:14.452727Z","iopub.execute_input":"2024-07-17T06:57:14.45314Z","iopub.status.idle":"2024-07-17T06:57:52.086034Z","shell.execute_reply.started":"2024-07-17T06:57:14.453103Z","shell.execute_reply":"2024-07-17T06:57:52.08477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print ('Train type =', list(train.type.unique()))\nprint ('Train label =', list(train.Label.unique()))","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.087634Z","iopub.execute_input":"2024-07-17T06:57:52.088066Z","iopub.status.idle":"2024-07-17T06:57:52.128568Z","shell.execute_reply.started":"2024-07-17T06:57:52.088029Z","shell.execute_reply":"2024-07-17T06:57:52.126464Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print ('Number of Patients: ', train.PatientID.nunique())","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.130381Z","iopub.execute_input":"2024-07-17T06:57:52.130801Z","iopub.status.idle":"2024-07-17T06:57:52.176906Z","shell.execute_reply.started":"2024-07-17T06:57:52.130765Z","shell.execute_reply":"2024-07-17T06:57:52.175467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.type.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.179375Z","iopub.execute_input":"2024-07-17T06:57:52.179938Z","iopub.status.idle":"2024-07-17T06:57:52.229854Z","shell.execute_reply.started":"2024-07-17T06:57:52.17989Z","shell.execute_reply":"2024-07-17T06:57:52.227932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nprint(train.Label.value_counts())\nsns.countplot(x='Label', data=train)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.2315Z","iopub.execute_input":"2024-07-17T06:57:52.231849Z","iopub.status.idle":"2024-07-17T06:57:52.534054Z","shell.execute_reply.started":"2024-07-17T06:57:52.231819Z","shell.execute_reply":"2024-07-17T06:57:52.532844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.groupby('type').Label.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.540194Z","iopub.execute_input":"2024-07-17T06:57:52.540603Z","iopub.status.idle":"2024-07-17T06:57:52.588101Z","shell.execute_reply.started":"2024-07-17T06:57:52.540564Z","shell.execute_reply":"2024-07-17T06:57:52.585883Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.type.value_counts().plot.pie(figsize=(6,6))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.589964Z","iopub.execute_input":"2024-07-17T06:57:52.590389Z","iopub.status.idle":"2024-07-17T06:57:52.835208Z","shell.execute_reply.started":"2024-07-17T06:57:52.590353Z","shell.execute_reply":"2024-07-17T06:57:52.833488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nTRAIN_IMG_PATH = \"../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_train/\"\nTEST_IMG_PATH = \"../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_test/\"\nBASE_PATH = '../input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/'\nTRAIN_DIR = 'stage_2_train/'\nTEST_DIR = 'stage_2_test/'\n\ndef window_image(img, window_center,window_width, intercept, slope, rescale=True):\n\n    img = (img*slope +intercept)\n    img_min = window_center - window_width//2\n    img_max = window_center + window_width//2\n    img[img<img_min] = img_min\n    img[img>img_max] = img_max\n    \n    if rescale:\n        # Extra rescaling to 0-1, not in the original notebook\n        img = (img - img_min) / (img_max - img_min)\n    \n    return img\n    \ndef get_first_of_dicom_field_as_int(x):\n    #get x[0] as in int is x is a 'pydicom.multival.MultiValue', otherwise get int(x)\n    if type(x) == pydicom.multival.MultiValue:\n        return int(x[0])\n    else:\n        return int(x)\n\ndef get_windowing(data):\n    dicom_fields = [data[('0028','1050')].value, #window center\n                    data[('0028','1051')].value, #window width\n                    data[('0028','1052')].value, #intercept\n                    data[('0028','1053')].value] #slope\n    return [get_first_of_dicom_field_as_int(x) for x in dicom_fields]\n\n    \n    \ndef view_images(images, title = '', aug = None):\n    width = 5\n    height = 2\n    fig, axs = plt.subplots(height, width, figsize=(15,5))\n    \n    for im in range(0, height * width):\n        data = pydicom.read_file(os.path.join(TRAIN_IMG_PATH,'ID_'+images[im]+ '.dcm'))\n        image = data.pixel_array\n        window_center , window_width, intercept, slope = get_windowing(data)\n        image_windowed = window_image(image, window_center, window_width, intercept, slope)\n\n\n        i = im // width\n        j = im % width\n        axs[i,j].imshow(image_windowed, cmap=plt.cm.bone) \n        axs[i,j].axis('off')\n        \n    plt.suptitle(title)\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.837709Z","iopub.execute_input":"2024-07-17T06:57:52.838924Z","iopub.status.idle":"2024-07-17T06:57:52.877128Z","shell.execute_reply.started":"2024-07-17T06:57:52.838861Z","shell.execute_reply":"2024-07-17T06:57:52.875486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom\ncase = 8\ndata = pydicom.dcmread(TRAIN_IMG_PATH+train_images[case])\n\nprint(\"data\",data)\nwindow_center , window_width, intercept, slope = get_windowing(data)\n\n\n#displaying the image\nimg = pydicom.read_file(TRAIN_IMG_PATH+train_images[case]).pixel_array\n\nimg = window_image(img, window_center, window_width, intercept, slope)\nplt.imshow(img, cmap=plt.cm.bone)\nplt.grid(False)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:52.879234Z","iopub.execute_input":"2024-07-17T06:57:52.879627Z","iopub.status.idle":"2024-07-17T06:57:53.429574Z","shell.execute_reply.started":"2024-07-17T06:57:52.879592Z","shell.execute_reply":"2024-07-17T06:57:53.428207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"view_images(train[(train['type'] == 'epidural') & (train['Label'] == 1)][:10].PatientID.values, title = 'Images with epidural')","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:53.431037Z","iopub.execute_input":"2024-07-17T06:57:53.431428Z","iopub.status.idle":"2024-07-17T06:57:54.40451Z","shell.execute_reply.started":"2024-07-17T06:57:53.431393Z","shell.execute_reply":"2024-07-17T06:57:54.40333Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"view_images(train[(train['type'] == 'intraparenchymal') & (train['Label'] == 1)][:10].PatientID.values, title = 'Images with intraparenchymal')","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:54.405772Z","iopub.execute_input":"2024-07-17T06:57:54.406128Z","iopub.status.idle":"2024-07-17T06:57:55.334341Z","shell.execute_reply.started":"2024-07-17T06:57:54.406095Z","shell.execute_reply":"2024-07-17T06:57:55.333175Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"view_images(train[(train['type'] == 'subarachnoid') & (train['Label'] == 1)][:10].PatientID.values, title = 'Images with subarachnoid')","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:55.335971Z","iopub.execute_input":"2024-07-17T06:57:55.336421Z","iopub.status.idle":"2024-07-17T06:57:56.201897Z","shell.execute_reply.started":"2024-07-17T06:57:55.336383Z","shell.execute_reply":"2024-07-17T06:57:56.200736Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"view_images(train[(train['type'] == 'subdural') & (train['Label'] == 1)][:10].PatientID.values, title = 'Images with subdural')","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:56.203539Z","iopub.execute_input":"2024-07-17T06:57:56.203962Z","iopub.status.idle":"2024-07-17T06:57:57.031167Z","shell.execute_reply.started":"2024-07-17T06:57:56.203921Z","shell.execute_reply":"2024-07-17T06:57:57.029903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = pd.DataFrame(sub.filename.unique(), columns=['filename'])\nprint ('Test:', test.shape[0])\ntest.head()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:57.032834Z","iopub.execute_input":"2024-07-17T06:57:57.033251Z","iopub.status.idle":"2024-07-17T06:57:57.064767Z","shell.execute_reply.started":"2024-07-17T06:57:57.033215Z","shell.execute_reply":"2024-07-17T06:57:57.063591Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.random.seed(1234)\nsample_files = np.random.choice(os.listdir(TRAIN_IMG_PATH), 150000)\nsample_df = train[train.filename.apply(lambda x: x.replace('.png', '.dcm')).isin(sample_files)]\nprint(sample_df.shape)\n\npivot_df = sample_df[['Label', 'filename', 'type']].drop_duplicates().pivot(\n    index='filename', columns='type', values='Label').reset_index()\nprint(pivot_df.shape)\npivot_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:57.066278Z","iopub.execute_input":"2024-07-17T06:57:57.066725Z","iopub.status.idle":"2024-07-17T06:57:58.946585Z","shell.execute_reply.started":"2024-07-17T06:57:57.066682Z","shell.execute_reply":"2024-07-17T06:57:58.945277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.random.seed(1234)\nsample_files_test = np.random.choice(os.listdir(TEST_IMG_PATH), 150000)\nsample_files_test_df = sub[sub.filename.apply(lambda x: x.replace('.png', '.dcm')).isin(sample_files_test)]\nprint(sample_files_test_df.shape)\n\npivot_test_df = sample_files_test_df[['Label', 'filename', 'type']].drop_duplicates().pivot(\n    index='filename', columns='type', values='Label').reset_index()\nprint(pivot_test_df.shape)\npivot_test_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:58.948814Z","iopub.execute_input":"2024-07-17T06:57:58.949297Z","iopub.status.idle":"2024-07-17T06:57:59.411587Z","shell.execute_reply.started":"2024-07-17T06:57:58.949242Z","shell.execute_reply":"2024-07-17T06:57:59.410372Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def save_and_resize(filenames, load_dir):    \n    save_dir = '/kaggle/tmp/'\n    if not os.path.exists(save_dir):\n        os.makedirs(save_dir)\n\n    for filename in tqdm(filenames):\n        path = load_dir + filename\n        new_path = save_dir + filename.replace('.dcm', '.png')\n        \n        dcm = pydicom.dcmread(path)\n        window_center , window_width, intercept, slope = get_windowing(dcm)\n        img = dcm.pixel_array\n        img = window_image(img, window_center, window_width, intercept, slope)\n        \n        resized = cv2.resize(img, (224, 224))\n        res = cv2.imwrite(new_path, resized)\n        if not res:\n            print('Failed')","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:59.413247Z","iopub.execute_input":"2024-07-17T06:57:59.413629Z","iopub.status.idle":"2024-07-17T06:57:59.422176Z","shell.execute_reply.started":"2024-07-17T06:57:59.413596Z","shell.execute_reply":"2024-07-17T06:57:59.420894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm import tqdm\nimport json\nimport cv2\n\nsave_and_resize(filenames=sample_files, load_dir=BASE_PATH + TRAIN_DIR)\nsave_and_resize(filenames=sample_files_test, load_dir=BASE_PATH + TEST_DIR)\n#save_and_resize(filenames=os.listdir(BASE_PATH + TEST_DIR), load_dir=BASE_PATH + TEST_DIR)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T06:57:59.424001Z","iopub.execute_input":"2024-07-17T06:57:59.424481Z","iopub.status.idle":"2024-07-17T08:23:38.706273Z","shell.execute_reply.started":"2024-07-17T06:57:59.424439Z","shell.execute_reply":"2024-07-17T08:23:38.699799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"BATCH_SIZE = 16\n\ndef create_datagen():\n    return ImageDataGenerator(\n        zoom_range=0.1,  # set range for random zoom\n        # set mode for filling points outside the input boundaries\n        fill_mode='constant',\n        cval=0.,  # value used for fill_mode = \"constant\"\n        horizontal_flip=True,  # randomly flip images\n        vertical_flip=True,  # randomly flip images,\n        validation_split=0.25\n    )\n\ndef create_test_gen():\n    return ImageDataGenerator().flow_from_dataframe(\n        test,\n        directory='/kaggle/tmp/',\n        x_col='filename',\n        class_mode=None,\n        target_size=(224, 224),\n        batch_size=BATCH_SIZE,\n        shuffle=False\n    )\n\ndef create_flow(datagen, subset):\n    return datagen.flow_from_dataframe(\n        pivot_df, \n        directory='/kaggle/tmp/',\n        x_col='filename', \n        y_col=['any', 'epidural', 'intraparenchymal', \n               'intraventricular', 'subarachnoid', 'subdural'],\n        class_mode='other',\n        target_size=(224, 224),\n        batch_size=BATCH_SIZE,\n        subset=subset\n    )\n\n# Using original generator\ndata_generator = create_datagen()\ntrain_gen = create_flow(data_generator, 'training')\nval_gen = create_flow(data_generator, 'validation')\ntest_gen = create_test_gen()","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:38.714094Z","iopub.execute_input":"2024-07-17T08:23:38.714735Z","iopub.status.idle":"2024-07-17T08:23:39.386083Z","shell.execute_reply.started":"2024-07-17T08:23:38.714675Z","shell.execute_reply":"2024-07-17T08:23:39.384892Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# checking training set and its output\nfor data_batch,label_batch in train_gen:\n    print(\"DATA SHAPE: \",data_batch.shape)\n    print(\"LABEL SHAPE: \",label_batch.shape)\n    break","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:39.387825Z","iopub.execute_input":"2024-07-17T08:23:39.388321Z","iopub.status.idle":"2024-07-17T08:23:39.711787Z","shell.execute_reply.started":"2024-07-17T08:23:39.388273Z","shell.execute_reply":"2024-07-17T08:23:39.710326Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# check validation set and its output\nfor data_batch,label_batch in val_gen:\n    print(\"DATA SHAPE: \",data_batch.shape)\n    print(\"LABEL SHAPE: \",label_batch.shape)\n    break","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:39.714744Z","iopub.execute_input":"2024-07-17T08:23:39.715226Z","iopub.status.idle":"2024-07-17T08:23:39.971423Z","shell.execute_reply.started":"2024-07-17T08:23:39.715179Z","shell.execute_reply":"2024-07-17T08:23:39.970044Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.model_selection import train_test_split","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:39.972897Z","iopub.execute_input":"2024-07-17T08:23:39.973269Z","iopub.status.idle":"2024-07-17T08:23:39.97929Z","shell.execute_reply.started":"2024-07-17T08:23:39.973235Z","shell.execute_reply":"2024-07-17T08:23:39.97799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(\n data_batch, label_batch, test_size=0.33, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:39.981552Z","iopub.execute_input":"2024-07-17T08:23:39.982001Z","iopub.status.idle":"2024-07-17T08:23:40.004988Z","shell.execute_reply.started":"2024-07-17T08:23:39.981959Z","shell.execute_reply":"2024-07-17T08:23:40.003684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.shape","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:40.017199Z","iopub.execute_input":"2024-07-17T08:23:40.017637Z","iopub.status.idle":"2024-07-17T08:23:40.026691Z","shell.execute_reply.started":"2024-07-17T08:23:40.017595Z","shell.execute_reply":"2024-07-17T08:23:40.025635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.applications import xception\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:40.028258Z","iopub.execute_input":"2024-07-17T08:23:40.028637Z","iopub.status.idle":"2024-07-17T08:23:40.047048Z","shell.execute_reply.started":"2024-07-17T08:23:40.028584Z","shell.execute_reply":"2024-07-17T08:23:40.045853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nfrom tensorflow.keras.applications import ResNet50\n\n# Load the ResNet50 model\nbranch1 = ResNet50()\n\nbranch1.layers.pop()\n\n# Freeze the layers of the pre-trained model\nfor layer in branch1.layers:\n    layer.trainable = False\n\n# Get the output of the second to last layer\nlast = branch1.layers[-2].output\n\n# Add a custom classification head\nx = Dense(6, activation=\"relu\")(last)\n\n# Create the final model\nfinetuned_model_1 = Model(branch1.input, x, name=\"Branch 1\")\nfinetuned_model_1.summary()\nfinetuned_model_1.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy', metrics=['accuracy', 'mse', 'mae', 'mape', 'cosine'])\n\ncheckpoint = ModelCheckpoint(\n    'model.h5', \n    monitor='val_loss', \n    verbose=0, \n    save_best_only=True, \n    save_weights_only=False,\n    mode='auto'\n)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:40.048521Z","iopub.execute_input":"2024-07-17T08:23:40.048927Z","iopub.status.idle":"2024-07-17T08:23:48.104532Z","shell.execute_reply.started":"2024-07-17T08:23:40.048891Z","shell.execute_reply":"2024-07-17T08:23:48.103224Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nfrom tensorflow.keras.applications import MobileNetV2\n\n# Load the MobileNetV2 model\nbranch2 = MobileNetV2()\nbranch2.layers.pop()\n\n# Freeze the layers of the pre-trained model\nfor layer in branch2.layers:\n    layer.trainable = False\n\n# Get the output of the second to last layer\nlast = branch2.layers[-2].output\n\n# Add a custom classification head\nx = Dense(6, activation=\"softmax\")(last)\n\n# Create the final model\nfinetuned_model_2 = Model(branch2.input, x, name=\"Branch 2\")\nfinetuned_model_2.summary()\nfinetuned_model_2.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy', metrics=['accuracy', 'mse', 'mae', 'mape', 'cosine'])\n\ncheckpoint = ModelCheckpoint(\n    'model.h5', \n    monitor='val_loss', \n    verbose=0, \n    save_best_only=True, \n    save_weights_only=False,\n    mode='auto'\n)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:23:48.106123Z","iopub.execute_input":"2024-07-17T08:23:48.106842Z","iopub.status.idle":"2024-07-17T08:23:51.75375Z","shell.execute_reply.started":"2024-07-17T08:23:48.106794Z","shell.execute_reply":"2024-07-17T08:23:51.752402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.layers import concatenate\n\n\nprint('Getting training features and concatenation---------------start')\nmodel1= Model(branch1.input, branch1.layers[-2].output)\nmodel1_features=model1.predict(train_gen)\nmodel1_features=pd.DataFrame(model1_features)\nprint(\"Branch1_features\", model1_features.shape)\n\nmodel2= Model(branch2.input, branch2.layers[-2].output)\nmodel2_features=model2.predict(train_gen)\nmodel2_features=pd.DataFrame(model2_features)\nprint(\"Branch2_features\", model2_features.shape)\n\nconcatenated_features=pd.concat([model1_features,model2_features], axis=1)\nprint(\"Combined_features\", concatenated_features.shape)\n\nprint('Getting validation features and concatenation---------------start')\nmodel1= Model(branch1.input, branch1.layers[-2].output)\nmodel1_val_features=model1.predict(val_gen)\nmodel1_val_features=pd.DataFrame(model1_val_features)\nprint(\"Branch1_val_features\", model1_val_features.shape)\n\nmodel2= Model(branch2.input, branch2.layers[-2].output)\nmodel2_val_features=model2.predict(val_gen)\nmodel2_val_features=pd.DataFrame(model2_val_features)\nprint(\"Branch2_val_features\", model2_val_features.shape)\n\nconcatenated_val_features=pd.concat([model1_val_features,model2_val_features], axis=1)\nprint(\"Combined_val_features\", concatenated_val_features.shape)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:01:45.210404Z","iopub.execute_input":"2024-07-17T09:01:45.211961Z","iopub.status.idle":"2024-07-17T09:11:12.137015Z","shell.execute_reply.started":"2024-07-17T09:01:45.211891Z","shell.execute_reply":"2024-07-17T09:11:12.135668Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfeature_train_labels=pd.DataFrame(train_gen.labels)\nprint(feature_train_labels)\n\n\nfeature_test_labels=pd.DataFrame(val_gen.labels)\nlen(feature_test_labels.shape)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:33:46.737844Z","iopub.execute_input":"2024-07-17T08:33:46.738364Z","iopub.status.idle":"2024-07-17T08:33:46.758293Z","shell.execute_reply.started":"2024-07-17T08:33:46.738316Z","shell.execute_reply":"2024-07-17T08:33:46.756391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import f1_score, recall_score, precision_score, accuracy_score\n\nknn = KNeighborsClassifier(n_neighbors=7)\n\nknn.fit(concatenated_features,feature_train_labels)\nknn.fit(concatenated_val_features,feature_test_labels)\nprint(\"done training\")\n\npred_knn= knn.predict(concatenated_val_features)\nprint(\"pred_KNN\",pred_knn.shape)\n\n\naccuracy=accuracy_score(feature_test_labels,pred_knn.round())\nprint(\"Accuracy of combined model with KNN: {0:0.4f}\".format(accuracy*100))\n\nf1score=f1_score(pred_knn,feature_test_labels, average='weighted')\nprint(\"F1score of combined model with KNN: {0:0.4f}\".format( f1score*10))\n\nrecall = recall_score(feature_test_labels,pred_knn, average='weighted')\nprint('Recall score of combined model with KNN: {0:0.4f}'.format(recall*10))\n\nprecision = precision_score(pred_knn.round(),feature_test_labels,average='weighted')\nprint('Precision of combined model with KNN: {0:0.4f}'.format(precision*10))\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:34:32.551627Z","iopub.execute_input":"2024-07-17T08:34:32.553659Z","iopub.status.idle":"2024-07-17T08:34:34.436963Z","shell.execute_reply.started":"2024-07-17T08:34:32.553582Z","shell.execute_reply":"2024-07-17T08:34:34.435502Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"concatenated_features_1=pd.concat([model1_features,model1_features], axis=1)\nprint(\"Combined_features\", concatenated_features_1.shape)\n\nconcatenated_val_features_1=pd.concat([model1_val_features,model1_val_features], axis=1)\nprint(\"Combined_val_features\", concatenated_val_features_1.shape)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:34:43.475897Z","iopub.execute_input":"2024-07-17T08:34:43.476601Z","iopub.status.idle":"2024-07-17T08:34:43.700792Z","shell.execute_reply.started":"2024-07-17T08:34:43.476555Z","shell.execute_reply":"2024-07-17T08:34:43.699347Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"concatenated_features_2=pd.concat([model2_features,model2_features], axis=1)\nprint(\"Combined_features\", concatenated_features_2.shape)\n\nconcatenated_val_features_2=pd.concat([model2_val_features,model2_val_features], axis=1)\nprint(\"Combined_val_features\", concatenated_val_features_2.shape)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:58:49.644672Z","iopub.execute_input":"2024-07-17T08:58:49.64577Z","iopub.status.idle":"2024-07-17T08:58:49.776985Z","shell.execute_reply.started":"2024-07-17T08:58:49.645691Z","shell.execute_reply":"2024-07-17T08:58:49.775465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import precision_score, f1_score, recall_score, accuracy_score\n\nknn1 = KNeighborsClassifier(n_neighbors=7)\n\nknn1.fit(concatenated_features_1,feature_train_labels)\nknn1.fit(concatenated_val_features_1,feature_test_labels)\nprint(\"done training\")\n\npred_knn1= knn1.predict(concatenated_val_features_1)\nprint(\"pred_KNN\",pred_knn.shape)\n\n\naccuracy=accuracy_score(feature_test_labels,pred_knn1.round())\nprint(\"Accuracy of combined model with KNN: {0:0.4f}\".format(accuracy*100))\n\nf1score=f1_score(pred_knn1,feature_test_labels, average='weighted')\nprint(\"F1score of combined model with KNN: {0:0.4f}\".format( f1score*10))\n\n\nrecall = recall_score(feature_test_labels,pred_knn1, average='weighted')\nprint('Recall score of combined model with KNN: {0:0.4f}'.format(recall*10))\n\n\nprecision = precision_score(pred_knn1.round(),feature_test_labels,average='weighted')\nprint('Precision of combined model with KNN: {0:0.4f}'.format(precision*10))\n ","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:57:25.563756Z","iopub.execute_input":"2024-07-17T08:57:25.564395Z","iopub.status.idle":"2024-07-17T08:57:27.006733Z","shell.execute_reply.started":"2024-07-17T08:57:25.564339Z","shell.execute_reply":"2024-07-17T08:57:27.004848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import precision_score, f1_score, recall_score, accuracy_score\n\nknn2 = KNeighborsClassifier(n_neighbors=7)\n\nknn2.fit(concatenated_features_2,feature_train_labels)\nknn2.fit(concatenated_val_features_2,feature_test_labels)\nprint(\"done training\")\n\npred_knn2= knn2.predict(concatenated_val_features_2)\nprint(\"pred_KNN\",pred_knn.shape)\n\n\naccuracy=accuracy_score(feature_test_labels,pred_knn2.round())\nprint(\"Accuracy of combined model with KNN: {0:0.4f}\".format(accuracy*100))\n\nf1score=f1_score(pred_knn2,feature_test_labels, average='weighted')\nprint(\"F1score of combined model with KNN: {0:0.4f}\".format( f1score*10))\n\n\nrecall = recall_score(feature_test_labels,pred_knn2, average='weighted')\nprint('Recall score of combined model with KNN: {0:0.4f}'.format(recall*10))\n\n\nprecision = precision_score(pred_knn2.round(),feature_test_labels,average='weighted')\nprint('Precision of combined model with KNN: {0:0.4f}'.format(precision*10))\n ","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:00:03.665782Z","iopub.execute_input":"2024-07-17T09:00:03.667604Z","iopub.status.idle":"2024-07-17T09:00:04.877827Z","shell.execute_reply.started":"2024-07-17T09:00:03.667546Z","shell.execute_reply":"2024-07-17T09:00:04.875598Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\nfrom sklearn.metrics import f1_score, recall_score, precision_score, accuracy_score\n\n\ndt_classifier = DecisionTreeClassifier(random_state=42)\n\n\ndt_classifier.fit(concatenated_features, feature_train_labels)\nprint(\"done training\")\n\n\npred_dt = dt_classifier.predict(concatenated_val_features)\nprint(\"pred_DT\", pred_dt.shape)\n\n\naccuracy = accuracy_score(feature_test_labels, pred_dt)\nprint(\"Accuracy of combined model with Decision Tree: {0:0.4f}\".format(accuracy * 100))\n\n\nf1score = f1_score(feature_test_labels, pred_dt, average='weighted')\nprint(\"F1score of combined model with Decision Tree: {0:0.4f}\".format(f1score ))\n\n\nrecall = recall_score(feature_test_labels, pred_dt, average='weighted')\nprint('Recall score of combined model with Decision Tree: {0:0.4f}'.format(recall ))\n\nprecision = precision_score(feature_test_labels, pred_dt, average='weighted')\nprint('Precision of combined model with Decision Tree: {0:0.4f}'.format(precision ))\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:51:19.403868Z","iopub.execute_input":"2024-07-17T08:51:19.404701Z","iopub.status.idle":"2024-07-17T08:53:51.861148Z","shell.execute_reply.started":"2024-07-17T08:51:19.404626Z","shell.execute_reply":"2024-07-17T08:53:51.859654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(\n data_batch, label_batch, test_size=0.40, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:44:39.703813Z","iopub.status.idle":"2024-07-17T08:44:39.704248Z","shell.execute_reply.started":"2024-07-17T08:44:39.704017Z","shell.execute_reply":"2024-07-17T08:44:39.704036Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.layers import concatenate\n\n\nprint('Getting training features and concatenation---------------start')\nmodel1= Model(branch1.input, branch1.layers[-2].output)\nmodel1_features=model1.predict(train_gen)\nmodel1_features=pd.DataFrame(model1_features)\nprint(\"Branch1_features\", model1_features.shape)\n\nmodel2= Model(branch2.input, branch2.layers[-2].output)\nmodel2_features=model2.predict(train_gen)\nmodel2_features=pd.DataFrame(model2_features)\nprint(\"Branch2_features\", model2_features.shape)\n\nconcatenated_features=pd.concat([model1_features,model2_features], axis=1)\nprint(\"Combined_features\", concatenated_features.shape)\n\nprint('Getting validation features and concatenation---------------start')\nmodel1= Model(branch1.input, branch1.layers[-2].output)\nmodel1_val_features=model1.predict(val_gen)\nmodel1_val_features=pd.DataFrame(model1_val_features)\nprint(\"Branch1_val_features\", model1_val_features.shape)\n\nmodel2= Model(branch2.input, branch2.layers[-2].output)\nmodel2_val_features=model2.predict(val_gen)\nmodel2_val_features=pd.DataFrame(model2_val_features)\nprint(\"Branch2_val_features\", model2_val_features.shape)\n\nconcatenated_val_features=pd.concat([model1_val_features,model2_val_features], axis=1)\nprint(\"Combined_val_features\", concatenated_val_features.shape)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:34:46.3215Z","iopub.execute_input":"2024-07-17T08:34:46.32197Z","iopub.status.idle":"2024-07-17T08:44:38.460899Z","shell.execute_reply.started":"2024-07-17T08:34:46.321935Z","shell.execute_reply":"2024-07-17T08:44:38.458979Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"feature_train_labels=pd.DataFrame(train_gen.labels)\nprint(feature_train_labels)\n\n\nfeature_test_labels=pd.DataFrame(val_gen.labels)\nlen(feature_test_labels.shape)\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:44:38.463483Z","iopub.execute_input":"2024-07-17T08:44:38.463899Z","iopub.status.idle":"2024-07-17T08:44:38.480512Z","shell.execute_reply.started":"2024-07-17T08:44:38.463864Z","shell.execute_reply":"2024-07-17T08:44:38.478763Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import f1_score, recall_score, precision_score, accuracy_score\n\nknn = KNeighborsClassifier(n_neighbors=7)\n\nknn.fit(concatenated_features,feature_train_labels)\nknn.fit(concatenated_val_features,feature_test_labels)\nprint(\"done training\")\n\npred_knn= knn.predict(concatenated_val_features)\nprint(\"pred_KNN\",pred_knn.shape)\n\n\naccuracy=accuracy_score(feature_test_labels,pred_knn.round())\nprint(\"Accuracy of combined model with KNN: {0:0.4f}\".format(accuracy*100))\n\nf1score=f1_score(pred_knn,feature_test_labels, average='weighted')\nprint(\"F1score of combined model with KNN: {0:0.4f}\".format( f1score*10))\n\nrecall = recall_score(feature_test_labels,pred_knn, average='weighted')\nprint('Recall score of combined model with KNN: {0:0.4f}'.format(recall*10))\n\nprecision = precision_score(pred_knn.round(),feature_test_labels,average='weighted')\nprint('Precision of combined model with KNN: {0:0.4f}'.format(precision*10))","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:46:36.275496Z","iopub.execute_input":"2024-07-17T08:46:36.276067Z","iopub.status.idle":"2024-07-17T08:46:37.637951Z","shell.execute_reply.started":"2024-07-17T08:46:36.276009Z","shell.execute_reply":"2024-07-17T08:46:37.636705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"concatenated_features_1=pd.concat([model1_features,model1_features], axis=1)\nprint(\"Combined_features\", concatenated_features_1.shape)\n\nconcatenated_val_features_1=pd.concat([model1_val_features,model1_val_features], axis=1)\nprint(\"Combined_val_features\", concatenated_val_features_1.shape)\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:46:37.697645Z","iopub.execute_input":"2024-07-17T08:46:37.698075Z","iopub.status.idle":"2024-07-17T08:46:37.972593Z","shell.execute_reply.started":"2024-07-17T08:46:37.69804Z","shell.execute_reply":"2024-07-17T08:46:37.971325Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import precision_score, f1_score, recall_score\n\nknn1 = KNeighborsClassifier(n_neighbors=7)\n\nknn1.fit(concatenated_features_1,feature_train_labels)\nprint(\"done training\")\n\npred_knn1= knn1.predict(concatenated_val_features_1)\nprint(\"pred_KNN\",pred_knn.shape)\n\n\naccuracy=accuracy_score(feature_test_labels,pred_knn1.round())\nprint(\"Accuracy of model 1 with KNN: {0:0.4f}\".format(accuracy*100))\n\nf1score=f1_score(pred_knn1,feature_test_labels, average='weighted')\nprint(\"F1score of model 1 with KNN: {0:0.4f}\".format( f1score*10))\n\n\nrecall = recall_score(feature_test_labels,pred_knn1, average='weighted')\nprint('Recall score of model 1 with KNN: {0:0.4f}'.format(recall*10))\n\n\nprecision = precision_score(pred_knn1.round(),feature_test_labels,average='weighted')\nprint('Precision of model 1 with KNN: {0:0.4f}'.format(precision*10))","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:47:15.666335Z","iopub.execute_input":"2024-07-17T08:47:15.667129Z","iopub.status.idle":"2024-07-17T08:47:17.206947Z","shell.execute_reply.started":"2024-07-17T08:47:15.667066Z","shell.execute_reply":"2024-07-17T08:47:17.2054Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\nfrom sklearn.metrics import f1_score, recall_score, precision_score, accuracy_score\n\n\ndt_classifier = DecisionTreeClassifier(random_state=42)\n\ndt_classifier.fit(concatenated_features, feature_train_labels)\nprint(\"done training\")\n\npred_dt = dt_classifier.predict(concatenated_val_features)\nprint(\"pred_DT\", pred_dt.shape)\n\naccuracy = accuracy_score(feature_test_labels, pred_dt)\nprint(\"Accuracy of combined model with Decision Tree: {0:0.4f}\".format(accuracy * 100))\n\nf1score = f1_score(feature_test_labels, pred_dt, average='weighted')\nprint(\"F1score of combined model with Decision Tree: {0:0.4f}\".format(f1score ))\n\nrecall = recall_score(feature_test_labels, pred_dt, average='weighted')\nprint('Recall score of combined model with Decision Tree: {0:0.4f}'.format(recall ))\n\nprecision = precision_score(feature_test_labels, pred_dt, average='weighted')\nprint('Precision of combined model with Decision Tree: {0:0.4f}'.format(precision ))\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T08:47:19.119087Z","iopub.execute_input":"2024-07-17T08:47:19.120543Z","iopub.status.idle":"2024-07-17T08:49:51.112674Z","shell.execute_reply.started":"2024-07-17T08:47:19.120493Z","shell.execute_reply":"2024-07-17T08:49:51.111002Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nfrom sklearn.multiclass import OneVsRestClassifier\n\nrf_classifier = RandomForestClassifier(n_estimators=95)\n\nmulti_rf_classifier = OneVsRestClassifier(rf_classifier)\n\nmulti_rf_classifier.fit(concatenated_features, feature_train_labels)\nprint(\"done training\")\n\npred_rf = multi_rf_classifier.predict(concatenated_val_features)\nprint(\"pred_RF\", pred_rf.shape)\n\naccuracy = accuracy_score(feature_test_labels, pred_rf)\nprint(\"Accuracy of combined model with Random Forest: {0:0.4f}\".format(accuracy * 100))\n\nf1score = f1_score(feature_test_labels, pred_rf, average='weighted')\nprint(\"F1score of combined model with Random Forest: {0:0.4f}\".format(f1score))\n\nrecall = recall_score(feature_test_labels, pred_rf, average='weighted')\nprint('Recall score of combined model with Random Forest: {0:0.4f}'.format(recall))\n\nprecision = precision_score(feature_test_labels, pred_rf, average='weighted')\nprint('Precision of combined model with Random Forest: {0:0.4f}'.format(precision))\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:26:25.542733Z","iopub.execute_input":"2024-07-17T09:26:25.5431Z","iopub.status.idle":"2024-07-17T09:29:19.908853Z","shell.execute_reply.started":"2024-07-17T09:26:25.543067Z","shell.execute_reply":"2024-07-17T09:29:19.906888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import AdaBoostClassifier\nfrom sklearn.multiclass import OneVsRestClassifier\n\nada_classifier = AdaBoostClassifier(n_estimators=100)\n\nmulti_ada_classifier = OneVsRestClassifier(ada_classifier)\n\nmulti_ada_classifier.fit(concatenated_features, feature_train_labels)\nprint(\"done training\")\n\npred_ada = multi_ada_classifier.predict(concatenated_val_features)\nprint(\"pred_AdaBoost\", pred_ada.shape)\n\naccuracy = accuracy_score(feature_test_labels, pred_ada)\nprint(\"Accuracy of combined model with AdaBoost: {0:0.4f}\".format(accuracy * 100))\n\nf1score = f1_score(feature_test_labels, pred_ada, average='weighted')\nprint(\"F1score of combined model with AdaBoost: {0:0.4f}\".format(f1score*10))\n\nrecall = recall_score(feature_test_labels, pred_ada, average='weighted')\nprint('Recall score of combined model with AdaBoost: {0:0.4f}'.format(recall*10))\n\nprecision = precision_score(feature_test_labels, pred_ada, average='weighted')\nprint('Precision of combined model with AdaBoost: {0:0.4f}'.format(precision*10))\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:17:37.429921Z","iopub.execute_input":"2024-07-17T09:17:37.430349Z","iopub.status.idle":"2024-07-17T09:26:25.540415Z","shell.execute_reply.started":"2024-07-17T09:17:37.430307Z","shell.execute_reply":"2024-07-17T09:26:25.539084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nfrom sklearn.multiclass import OneVsRestClassifier\nfrom sklearn.metrics import f1_score, recall_score, precision_score, accuracy_score\n\nlogreg_classifier = LogisticRegression()\n\nmulti_logreg_classifier = OneVsRestClassifier(logreg_classifier)\n\nmulti_logreg_classifier.fit(concatenated_features, feature_train_labels)\nprint(\"done training\")\n\npred_logreg = multi_logreg_classifier.predict(concatenated_val_features)\nprint(\"pred_LogReg\", pred_logreg.shape)\n\naccuracy = accuracy_score(feature_test_labels, pred_logreg)\nprint(\"Accuracy of combined model with Logistic Regression: {0:0.4f}\".format(accuracy * 100))\n\nf1score = f1_score(feature_test_labels, pred_logreg, average='weighted')\nprint(\"F1score of combined model with Logistic Regression: {0:0.4f}\".format(f1score*10))\n\nrecall = recall_score(feature_test_labels, pred_logreg, average='weighted')\nprint('Recall score of combined model with Logistic Regression: {0:0.4f}'.format(recall * 10))\n\nprecision = precision_score(feature_test_labels, pred_logreg, average='weighted')\nprint('Precision of combined model with Logistic Regression: {0:0.4f}'.format(precision * 10))\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:29:19.91092Z","iopub.execute_input":"2024-07-17T09:29:19.91151Z","iopub.status.idle":"2024-07-17T09:29:29.88995Z","shell.execute_reply.started":"2024-07-17T09:29:19.911458Z","shell.execute_reply":"2024-07-17T09:29:29.888434Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import multilabel_confusion_matrix\ncm1 = multilabel_confusion_matrix(feature_test_labels,pred_knn)\nprint(cm1)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:29:45.382486Z","iopub.execute_input":"2024-07-17T09:29:45.382914Z","iopub.status.idle":"2024-07-17T09:29:45.395912Z","shell.execute_reply.started":"2024-07-17T09:29:45.38288Z","shell.execute_reply":"2024-07-17T09:29:45.394538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"first_cat=cm1[0]\ntn, fp, fn, tp = first_cat.ravel()\nfpr = fp / (tn + fp)\nfnr = fn / (tp + fn)\nTPR = tp/(tp+fn)\nTNR = tn/(tn+fp)\nacc_1=(tp+tn)/(tp+tn+fp+fn)\nprint(\"fpr for any is :\",fpr*100)\nprint(\"fnr for any is :  \",fnr*100)\nprint(\"TPR for any is : \",TPR*100)\nprint(\"TNR for any is : \",TNR*100)\nprint(\"Accuracy for any is \",acc_1*100)\n\nsecond_cat=cm1[1]\ntn, fp, fn, tp = second_cat.ravel()\nfpr = fp / (tn + fp)\nfnr = fn / (tp + fn)\nTPR = tp/(tp+fn)\nTNR = tn/(tn+fp)\nacc_2=(tp+tn)/(tp+tn+fp+fn)\nprint(\"fpr for epidural is :  \",fpr*100)\nprint(\"fnr for epidural is : \",fnr*100)\nprint(\"TPR for epidural is : \",TPR*100)\nprint(\"TNR for epidural is : \",TNR*100)\nprint(\"Accuracy for epidural is : \",acc_2*100)\n\nthird_cat=cm1[2]\ntn, fp, fn, tp = third_cat.ravel()\nfpr = fp / (tn + fp)\nfnr = fn / (tp + fn)\nTPR = tp/(tp+fn)\nTNR = tn/(tn+fp)\nacc_3=(tp+tn)/(tp+tn+fp+fn)\nprint(\"fpr for intraparenchymal is : \",fpr*100)\nprint(\"fnr for intraparenchymal is : \",fnr*100)\nprint(\"TPR for intraparenchymal is : \",TPR*100)\nprint(\"TNR for intraparenchymal is : \",TNR*100)\nprint(\"Accuracy for intraparenchymal is \",acc_3*100)\n\nfourth_cat=cm1[3]\ntn, fp, fn, tp = fourth_cat.ravel()\nfpr = fp / (tn + fp)\nfnr = fn / (tp + fn)\nTPR = tp/(tp+fn)\nTNR = tn/(tn+fp)\nacc_4=(tp+tn)/(tp+tn+fp+fn)\nprint(\"fpr for intraventricular is : \",fpr*100)\nprint(\"fnr for intraventricular is :  \",fnr*100)\nprint(\"TPR for intraventricular is : \",TPR*100)\nprint(\"TNR for intraventricular is : \",TNR*100)\nprint(\"Accuracy for intraventricular : is \",acc_4*100)\n\nfifth_cat=cm1[4]\ntn, fp, fn, tp = fourth_cat.ravel()\nfpr = fp / (tn + fp)\nfnr = fn / (tp + fn)\nTPR = tp/(tp+fn)\nTNR = tn/(tn+fp)\nacc_5=(tp+tn)/(tp+tn+fp+fn)\nprint(\"fpr for subarachnoid is  : \",fpr*100)\nprint(\"fnr for subarachnoid is :  \",fnr*100)\nprint(\"TPR for subarachnoid is : \",TPR*100)\nprint(\"TNR for subarachnoid is : \",TNR*100)\nprint(\"Accuracy for subarachnoid is :  \",acc_5*100)\n\nsixth_cat=cm1[5]\ntn, fp, fn, tp = sixth_cat.ravel()\nfpr = fp / (tn + fp)\nfnr = fn / (tp + fn)\nTPR = tp/(tp+fn)\nTNR = tn/(tn+fp)\nacc_6=(tp+tn)/(tp+tn+fp+fn)\nprint(\"fpr for subdural is : \",fpr*100)\nprint(\"fnr for subdural is : \",fnr*100)\nprint(\"TPR for subdural is : \",TPR*100)\nprint(\"TNR for subdural is :\",TNR*100)\nprint(\"Accuracy for Subdural is \",acc_6*100)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:29:48.15072Z","iopub.execute_input":"2024-07-17T09:29:48.151123Z","iopub.status.idle":"2024-07-17T09:29:48.181099Z","shell.execute_reply.started":"2024-07-17T09:29:48.151092Z","shell.execute_reply":"2024-07-17T09:29:48.179615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm2 = multilabel_confusion_matrix(feature_test_labels,pred_dt)\nprint(cm2)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:37:24.000907Z","iopub.execute_input":"2024-07-17T09:37:24.00147Z","iopub.status.idle":"2024-07-17T09:37:24.016048Z","shell.execute_reply.started":"2024-07-17T09:37:24.001429Z","shell.execute_reply":"2024-07-17T09:37:24.014563Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm3 = multilabel_confusion_matrix(feature_test_labels,pred_rf)\nprint(cm3)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:38:09.022024Z","iopub.execute_input":"2024-07-17T09:38:09.02251Z","iopub.status.idle":"2024-07-17T09:38:09.038724Z","shell.execute_reply.started":"2024-07-17T09:38:09.022471Z","shell.execute_reply":"2024-07-17T09:38:09.036871Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm4 = multilabel_confusion_matrix(feature_test_labels,pred_ada)\nprint(cm4)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:38:48.880313Z","iopub.execute_input":"2024-07-17T09:38:48.880786Z","iopub.status.idle":"2024-07-17T09:38:48.895853Z","shell.execute_reply.started":"2024-07-17T09:38:48.880749Z","shell.execute_reply":"2024-07-17T09:38:48.893947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm5 = multilabel_confusion_matrix(feature_test_labels,pred_logreg)\nprint(cm5)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:39:23.923749Z","iopub.execute_input":"2024-07-17T09:39:23.924293Z","iopub.status.idle":"2024-07-17T09:39:23.939394Z","shell.execute_reply.started":"2024-07-17T09:39:23.92425Z","shell.execute_reply":"2024-07-17T09:39:23.937719Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns\nimport numpy as np\nfrom sklearn.metrics import multilabel_confusion_matrix\n\ndef plot_and_save_heatmap(cm, labels, title, filename):\n    plt.figure(figsize=(8, 6))\n    sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Blues\", xticklabels=labels, yticklabels=labels)\n    plt.xlabel('Predicted labels')\n    plt.ylabel('True labels')\n    plt.title(title)\n    plt.savefig(filename, dpi=300, bbox_inches='tight')\n    plt.close() \n\ncategory_names = ['Any', 'Epidural', 'Intraparenchymal', 'Intraventricular', 'Subarachnoid', 'Subdural']\n\n","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:44:10.004072Z","iopub.execute_input":"2024-07-17T09:44:10.00462Z","iopub.status.idle":"2024-07-17T09:44:10.016759Z","shell.execute_reply.started":"2024-07-17T09:44:10.004582Z","shell.execute_reply":"2024-07-17T09:44:10.014734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(cm1)):\n    cm = cm1[i]\n    filename = f'confusion_matrix_pred_knn_{category_names[i].lower()}.png'\n    plot_and_save_heatmap(cm, ['Negative', 'Positive'], f'Confusion Matrix for {category_names[i]}', filename)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:44:53.39761Z","iopub.execute_input":"2024-07-17T09:44:53.398048Z","iopub.status.idle":"2024-07-17T09:44:57.679604Z","shell.execute_reply.started":"2024-07-17T09:44:53.398015Z","shell.execute_reply":"2024-07-17T09:44:57.677513Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(cm2)):\n    cm = cm2[i]\n    filename = f'confusion_matrix_pred_dt_{category_names[i].lower()}.png'\n    plot_and_save_heatmap(cm, ['Negative', 'Positive'], f'Confusion Matrix for {category_names[i]}', filename)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:46:41.76081Z","iopub.execute_input":"2024-07-17T09:46:41.761363Z","iopub.status.idle":"2024-07-17T09:46:45.944541Z","shell.execute_reply.started":"2024-07-17T09:46:41.761322Z","shell.execute_reply":"2024-07-17T09:46:45.942666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(cm3)):\n    cm = cm3[i]\n    filename = f'confusion_matrix_pred_rf_{category_names[i].lower()}.png'\n    plot_and_save_heatmap(cm, ['Negative', 'Positive'], f'Confusion Matrix for {category_names[i]}', filename)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:47:10.616434Z","iopub.execute_input":"2024-07-17T09:47:10.616921Z","iopub.status.idle":"2024-07-17T09:47:14.007277Z","shell.execute_reply.started":"2024-07-17T09:47:10.616883Z","shell.execute_reply":"2024-07-17T09:47:14.005276Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(cm4)):\n    cm = cm4[i]\n    filename = f'confusion_matrix_pred_ada_{category_names[i].lower()}.png'\n    plot_and_save_heatmap(cm, ['Negative', 'Positive'], f'Confusion Matrix for {category_names[i]}', filename)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:47:38.099597Z","iopub.execute_input":"2024-07-17T09:47:38.100032Z","iopub.status.idle":"2024-07-17T09:47:42.197235Z","shell.execute_reply.started":"2024-07-17T09:47:38.099997Z","shell.execute_reply":"2024-07-17T09:47:42.195279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(cm5)):\n    cm = cm5[i]\n    filename = f'confusion_matrix_pred_logreg_{category_names[i].lower()}.png'\n    plot_and_save_heatmap(cm, ['Negative', 'Positive'], f'Confusion Matrix for {category_names[i]}', filename)","metadata":{"execution":{"iopub.status.busy":"2024-07-17T09:48:04.11254Z","iopub.execute_input":"2024-07-17T09:48:04.112948Z","iopub.status.idle":"2024-07-17T09:48:08.414505Z","shell.execute_reply.started":"2024-07-17T09:48:04.112916Z","shell.execute_reply":"2024-07-17T09:48:08.412592Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}