{"metadata":{"accelerator":"GPU","colab":{"collapsed_sections":["G4Mu759FZ58a"],"gpuType":"T4","machine_shape":"hm","toc_visible":true,"provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":10338,"databundleVersionId":862042,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Pneumonia Detection from CXR","metadata":{"id":"cb5uzS_nslQF"}},{"cell_type":"markdown","source":"* **Project Overview**:\n\n    * In this project, we utilized the Kaggle RSNA Pneumonia Detection Challenge dataset to train a neural network model for pneumonia detection. The dataset includes chest X-ray (CXR) images in DICOM format and corresponding pneumonia labels.\n    * The model was trained to accurately distinguish between pneumonia and non-pneumonia cases, with the aim of assisting in the automated detection of pneumonia from medical imaging.\n    * The DICOM metadata is reviewed to extract any non-image features that may influence the interpretation of chest X-ray images. This process helps determine whether additional features—such as patient background or imaging settings—could enhance the model's predictive performance.\n\n* Kaggle Link: [Competition Link: https://www.kaggle.com/competitions/rsna-pneumonia-detection-challenge/](https://www.kaggle.com/competitions/rsna-pneumonia-detection-challenge/)\n    * The training dataset consists a total of 26,684 chest radiographs in DICOM format.","metadata":{"id":"s-EtsNaH4fcI"}},{"cell_type":"markdown","source":"![model.png](data:image/png;base64,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nnsGlS22g0D2CHj/DwVdjzcjcNx+87Q1HcfikUcesa233tpWWmklGzFiROBZuPTSS23x4sXuWvHtt9/an3/+aRdffLH973//s08//TTl+TniiCPshx9+qLStv//+29566y078sgjXR6effZZe+WVV1Ken6A2kMj+XHjhhSaHFVdcMahssZ16EqgoDb6mUuBBiKzKSovriYzV5KLAeuutZ2eddZb99NNPpqpYs2fPtpNPPtldaObNm2cnnXRS1I+/qm7pohRZLPzee+9Zr169bK+99nLr+uWXX2qkUkCkJ2off/xx1LyTJk1y21c+lPQDqwve/vvvbyq50VOfql7woydzmh6ZJkyY4PIUOa6m/D7++ONuW927d7fLLrvMZs2aFbk43/NYIJ9/T8tKuJYEferr5n/UqFHud/iYY46xRx99tFIW9Jt8yy232D777GOHHHKIjRkzxlVLUnUePy1atMgGDhzoSjM0z/Dhw6v8HfWX8T/1e66SkLXWWsuNKiwsdL/JKoEoKiryZ7Pqfld1zXjsscfC8+rLQw89ZNddd13UuHgDu+++u6299tr21FNPRU3WcIMGDcKlJNrfu+66K2qehx9+2P2WqxRnwIABNn/+fDddwYt+2yPTjTfeaLrx95PmPfXUU00l7rFJpVPnn3++TZw40Xr37u2ufX379jVdMyOTqkv503Utjb3e6fqka+fee+9tZ5xxhlufv3zk/ugarZIQXQ9POOEEUwmQroNa/txzz/UXcePkqpIjrfOCCy6Iyr/m9/PtX7OVbz14JAUnoMKBCu8v6JSeIKSEYrqgD3S2bW/OnDkuy02bNnXF/frx09OuFi1auB81Vd/yqwFce+217kZ/q622csu8/vrrrtRk3XXXdTf7+jFTtQEtX10qKCgwFfPffPPNUbOpjccHH3xgK6+8sqnNxy677GJff/21C1h0MdKP6j333BO1jD8wbty4Su1PdJG4//77/VmspvzqB/zss8921db0Y//JJ5+4/SsvD/4HI5xpvmSMQFke/56Wl3ItCfpEfPrpp624uNhVn9VN4xdffBH1UEj50dNw3VB36dLFunXr5h4SXXnlle63TtMVpCjw0IOj448/3gUiavenwCCR1LVrV3cDrN9R/SYrqURd29A2lWr6Xd1ggw3slFNOMbURVFIQoBvpzp07u+Hq/lGg06NHD5f/yAdQ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u/rqq93zv//+2y1XmY844gi3P+X/888/R7aLfiIH1U1p5MiR7vkrr7ziXvt/br/9dtt1111tn332saeeesq/7R5LSkrsiiuuiCxXHgqa46Xa6qnuWNqHT//9739ddzR59+3b1/bbb78lWmTko/V2220323fffd3npLb9+nz9o7r9DR061HbZZRe3bWx9tV6ieiVTxsmTJ0eOuY5F7H7q+kz4stb2WFf9X3rpJff/Uuy26rY4fPjwyNv333+/q7+OrS4KzJkzJ7Lsvvvuc90MX331VTvzzDOX+P8wsmIIn7gApJbPaAirQ5ERQAABBPJEoEmCkIqFpTnFqxPinj17LlEn3wXpl19+cctGjRq1RD94nXDffffdbnnXrl1Nf0rLLrusrbDCClZUVGQzZsxw40zUxau8vNz22GMPF9hsueWWphNDpS+++MIefvhh99z/oxN4PzaiZcuWLr/i4mJr06aNe+735dePflSQE72vrbfe2qZMmeJW0QnjVlttZeq6pRNxdUPTCbDvLqRyd+zY0bV26bn+1Cry4osv2s4772wqw6GHHury32abbVxQpIzVBU3ddBSgfPzxx5GATi1JO+64o6200kpuf1pP+//jjz+ii+yet2vXzu1PLzp16uSe6z2fdNKqQEXlaNWqlR100EH2yCOPuMU6mVdg8swzz9hRRx3lApELLrjALrroIr95jcfa6qlAS2NvfFKQethhh9mHH37onGSx//77u/FDWkfjcNRtTeNVTjzxRNeVT0Fo9Am2zyveo4LPSy65xHr16mU6TgooPvvss8iqydQrURn1WZCZzHXM119/fTvkkEPs8ccfd/tJ9JmIFCbOk0T179Kli11zzTX26aefRrbWmCXVs7Cw0L03aNAgO/vss52vglB91vbcc8/IuCwFyQMHDnSBtQLsXGqJzbXv08hB5gkCCCCAQE4LLPoFz3AVqyrLg5ODyuAks3mG95ye3c2fP9+d2Mfm3rZtW/fWvHnzYhfFfa0T1eWXX94eeugh16qx4ooruvV8EHPggQfabbfd5t5TkLDOOuu4FgdduU+UFNRceeWVruVhtdVWs6uuuqrOTXQip6vrStH70hXmO+64w3Ri/9hjj5mCG524T5061bVeKEDSSbtaQnTiF70ftfJoXS1TUkuIApnrr7/eFIz4pBYWtSL5pDxko65dSurmpgBv2LBh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+2SHCCCAQK4LVFfz3Zrrx5j6ZacAQUh2HhdKhcASAlytW4KENxBAAIFGC1TREtJoQzJAoCECBCENUWMbBJpAoKqSLgNNwM4uEUAgxwWqgzumkxBAIPMCzS++4LzBmd8te0QAgYYING9RZAXNuHaQjN24cePsq6++sgkTJri/SZMmmQagdurUKZnNc2Id1fnqq6+27t27W+fOnetdp2jDX3/91f766y8rLCy0du3a1Tuve++917p06WIdOnSo97Z1bRCbr47xoEGDrLy83FZbbbW6Nm3wsgULFtjbb79tv/zyi/ts/fbbb6b3OnbsaM2bN29wvvXdUPtU/VdffXUrLi52m8d61DfPfFtfLczlZQvyrdrUF4GsECgomT2dCbKz4lBQCAQSC7Rs1c4KWy462Ui8dn6vsddee9lrr71mrVu3dhBlZWVWWlpqO+20kz322GPuhDjXhT788EPbd9997dFHH7Udd9yx3tWV4ahRo6xly5Zu2/nz57vHPfbYw+655x5beumlk86zoKDAHn74YevXr1/S2ySzYmy+Cj4UdJ100kl26aWXJpNFvdf55JNPbLPNNnPBWLPgokBVMF5r7ty5tsoqq9gdd9xhffv2rXeeDdlAQdAaa6xhY8eOdeVRHrEeDck3n7apLC+zsvlz8qnK1BWBrBHgkmrWHAoKgkBigarK8sQrsYYT0BXxHXbYwWbPnu3+SkpK7P3333etI//973/zQmnLLbe06dOnNygAEZAMdUItO/3NmTPHnnzySfvggw/sjDPOyErDFi1a2J9//pm2AMS76PGNN95wny25TJs2zXr27GmHH364c8pKHAq1hEBlxcIl3uMNBBDIjABBSGac2QsCKRGoLOcHs6GQumK91VZb2f7772/vvfeey0ZdV4YPH24vvviiazHYdddd7brrrrOKipp9xLX+EUcc4VpRTj31VPv5558jxdCJ6HnnnRd5rSczZ8604447ztQdSkn7GTlypLtKvssuu9ihhx5qn376qVvvnHPOsZ133tlOO+00dyLrNlj8j7r8HHnkkW6/xx57rOkKvE9+Hz/88IOdeeaZbp2jjjrKBVmx6/zxxx/+LXvqqaciddE+1V0t2aRuWAceeKALQJ577jmbN29eZNP7778/Yjh48ODIibh8jj76aLeeDPT8lVdeSbidX2H06NGuvHLr37+/ffPNN25R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)","metadata":{"id":"CTQjO92KQ-TK"}},{"cell_type":"markdown","source":"## Setup and Import Libraries\n\n","metadata":{"id":"xb6YhTUwsTlU"}},{"cell_type":"code","source":"!pip install pydicom\n!pip install tensorflow-io\n!pip install -q -U keras-tuner","metadata":{"id":"HOYV150ATe1d","outputId":"cb4b2cbd-e84b-4d77-84aa-5a2224e67850"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom\nimport os\nimport pandas as pd\nimport numpy as np\nimport random\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport scipy.stats as stats\nimport statsmodels.api as sm\nimport statsmodels.formula.api as smf\nfrom scipy.stats import chi2_contingency\nfrom sklearn.model_selection import train_test_split\nimport tensorflow as tf\nimport tensorflow_io as tfio\nimport keras\nfrom tensorflow.keras import metrics\nfrom keras.layers import Dense, Conv2D , MaxPool2D , Flatten , Dropout , BatchNormalization\n# from keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport keras_tuner as kt\n\nfrom sklearn.metrics import classification_report, confusion_matrix\nfrom collections import Counter\n# Suppress the specific FutureWarning\nimport warnings\nwarnings.simplefilter(action='ignore', category=FutureWarning)\n\nload_dicom_data = False","metadata":{"id":"ftok-x4jri0x"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from google.colab import drive\ndrive.mount('/content/drive')","metadata":{"id":"GUfUFWZv2VCl","outputId":"49b09007-fb44-474e-8cd6-d6c37fb629dd"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"root_directory = '/content/drive/MyDrive/Side Project/rsna-pneumonia-detection-challenge/'","metadata":{"id":"gntcLoZM5AQ1"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.chdir(root_directory)","metadata":{"id":"Jf-HTrcc5wkK"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Helper function to display CXR with given patientId\n# def show_cxr(patientId, title='CXR'):\n#     dcm = pydicom.dcmread(f'stage_2_train_images/{patientId}.dcm')\n#     image = dcm.pixel_array\n#     # Display the image\n#     plt.figure(figsize=(3, 3))\n#     plt.imshow(image, cmap='gray')\n#     plt.axis('off')  # Turn off axis labels\n#     plt.title(title)\n#     plt.show()","metadata":{"id":"juAA95hKj7qX"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def set_random_seed():\n  seed = 18\n  # Set random seeds for reproducibility\n  random.seed(seed)\n  np.random.seed(seed)\n  tf.random.set_seed(seed)\n\n  # (For TensorFlow GPU determinism)\n  os.environ['CUDA_VISBLE_DEVICE'] = ''\n  os.environ['TF_DETERMINISTIC_OPS'] = '1'\n  os.environ['PYTHONHASHSEED'] = str(1234)","metadata":{"id":"Q_AvX27jdtrj"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Part 1: Data Loading","metadata":{"id":"ePQwzspRseo8"}},{"cell_type":"markdown","source":"### 1.1: Data Labels","metadata":{"id":"mAW0oKd2EmVz"}},{"cell_type":"markdown","source":"**Preview of Raw Data Labels**\n\nThere are two separate files that contain the labels for chest x-ray images.\n\n* stage_2_detailed_class_info.csv\n* stage_2_train_labels.csv","metadata":{"id":"nGwHzUFU_a_v"}},{"cell_type":"code","source":"raw_label = pd.read_csv(\"stage_2_detailed_class_info.csv\")\ntrain_label = pd.read_csv(\"stage_2_train_labels.csv\")","metadata":{"id":"IKigYZXE67Qf"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 1.2: Load Non-image Data from DICOM","metadata":{"id":"GikzlfzvEilw"}},{"cell_type":"markdown","source":"Get a preview of metadata in DICOM file","metadata":{"id":"2GgghtyZalPR"}},{"cell_type":"code","source":"dcm = pydicom.dcmread('stage_2_train_images/e122edcb-dab7-4a4c-8fd3-ab0ee84ce6b9.dcm')\nprint(\"Successfully read in sample cxr dcm\")\nprint(dcm)\n# dcm.PatientID = \"0123456789\"\n# image = dcm.pixel_array","metadata":{"id":"uo5y9aK3KIL8","outputId":"f31dff34-af50-4f0f-9d65-ece6835c8126"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The objective in this section is to extract relevant information from the DICOM file, including:\n\n* Patient ID,\n* UID (unique identifier for each DICOM image),\n* Sex,\n* Age (calculated as the difference between the study date and birthday),\n* View position (PA or AP),\n* Body Part Examined,\n* Image Size (row and column).\n\nThe chest x-ray pixels are too large to fit into memory, so we need to create a generator that loads data on the fly before model training.","metadata":{"id":"poe62IBeoV6R"}},{"cell_type":"code","source":"def get_dicom_data(directory):\n\n  data = []\n\n  # Iterate over all DICOM files in the given directory\n  for filename in os.listdir(directory):\n    file_path = os.path.join(directory, filename)\n\n    if os.path.isfile(file_path):  # Check if it's a file\n      try:\n          # Attempt to read the file as a DICOM file\n          ds = pydicom.dcmread(file_path, stop_before_pixels=True)\n\n          # Extract required information\n          patient_id = ds.PatientID\n          uid = ds.StudyInstanceUID\n          sex = ds.PatientSex\n          age = ds.PatientAge\n          view_position = ds.ViewPosition if 'BodyPartExamined' in ds else None\n          body_part_examined = ds.BodyPartExamined if 'BodyPartExamined' in ds else None\n          row = ds.Rows\n          col = ds.Columns\n\n\n          # Add the information to the list\n          data.append({\n              'patientId': patient_id,\n              'uid': uid,  # Used to distinguish different CXR of the same patient\n              'sex': sex,\n              'age': age,\n              'view_position': view_position,\n              'body_part_examed': body_part_examined,\n              'row': row,\n              'col': col\n          })\n\n      except (pydicom.errors.InvalidDicomError, ValueError):\n          print(f'{filename} is not a DICOM file.')\n\n  # Create a DataFrame from the data list\n  data_df = pd.DataFrame(data)\n  return data_df","metadata":{"id":"qom9kQc3_on4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Execute this cell only if we want to read from DICOM data again\nif load_dicom_data:\n    train_data = get_dicom_data('stage_2_train_images')\n    # Stored the retrieved data (Saving time to import from DICOM next time)\n    train_data.to_csv('train_data.csv')","metadata":{"id":"wYxSkBqL_ojy"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Part 2: Data Processing","metadata":{"id":"aqZf9RHjx73i"}},{"cell_type":"markdown","source":"Now, we have three tables:\n\n* `raw_label`: Contains detailed CXR classifications ('No Lung Opacity / Not Normal', 'Normal', 'Lung Opacity').\n\n* `train_label`: Includes the classification of whether pneumonia is present (Target = 0 or 1).\n\n* `train_data`: Contains CXR metadata extracted from DICOM files (sex, age, view_position, body_part_examed, row, col).","metadata":{"id":"2TlYd9PX-k22"}},{"cell_type":"markdown","source":"### Labels","metadata":{"id":"fU4Ii4_ABxHM"}},{"cell_type":"markdown","source":"Check data type","metadata":{"id":"dJP6kw99adGT"}},{"cell_type":"code","source":"raw_label.info()","metadata":{"id":"qu5fC_QPabHj","outputId":"4b8ae1f1-8ab0-40fb-d666-d6fd261ac9ff"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_label.info()","metadata":{"id":"zwArAcsXafK8","outputId":"40fa4829-3346-4779-efdb-01238f91ae63"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"raw_label['class'].unique()","metadata":{"id":"KC7OPU0b8_4i","outputId":"fcbc400e-05e1-45b4-9f04-dc9093d22c05"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_label['Target'].unique()","metadata":{"id":"oRdtHdr9A8Bb","outputId":"0318c36f-d41b-4434-9ccb-5cd5342bb8c3"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"We need to clarify how the three raw data classes map to the binary target labels.","metadata":{"id":"Bnuw222d_-uP"}},{"cell_type":"markdown","source":"1. **Raw Data Labels:**\n\n  * The chest X-ray images are classified into three categories:\n\n    `'No Lung Opacity / Not Normal'`\n\n    `'Normal'`\n\n    `'Lung Opacity'`\n2. **Training Labels:**\n\n  * The training dataset only contains binary labels:\n\n    `Target = 0`\n\n    `Target = 1`\n\n","metadata":{"id":"bBf5bN-O9cfX"}},{"cell_type":"code","source":"combined_label = pd.merge(raw_label, train_label[['patientId', 'Target']], on='patientId', how='outer')\ngrouped_table = combined_label.groupby(['Target', 'class']).count()","metadata":{"id":"jUUkfnzB_ouw"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"grouped_table.head()","metadata":{"id":"yr0amfDZ_orb","outputId":"5a1e9a74-8796-4adf-afa4-7d9f5dad9283"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"> Since both \"No Lung Opacity / Not Normal\" and \"Normal\" are labeled as Target = 0, if we train the model using Target = 1 and Target = 0, the model will be designed to distinguish between chest X-rays with and without pneumonia. However, it won't be able to determine whether a chest X-ray is normal or not.*\n\n","metadata":{"id":"52Zd6UG4CxUi"}},{"cell_type":"markdown","source":"Check for duplicated patientId","metadata":{"id":"FR2ptmDdIgpb"}},{"cell_type":"code","source":"duplicated_patient_ids = train_label[train_label.duplicated(subset='patientId', keep=False)]\nprint(f\"There are {len(duplicated_patient_ids['patientId'].unique())} patients having more than 1 labels.\")\nprint(f\"The values of the labels are {duplicated_patient_ids['Target'].unique()}\")","metadata":{"id":"VnQYhn1GIf3I","outputId":"9244f624-74a4-4e3f-9909-a032ddf2e0e3"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Since all duplicated labels are identical, it is not possible for a patient to have two different labels for their CXR images. Therefore, we can retain only one instance of the duplicated data.\n\n","metadata":{"id":"E07He1JgSfrn"}},{"cell_type":"code","source":"# Remove duplicates\ntrain_label = train_label.drop_duplicates(subset='patientId', keep='first')","metadata":{"id":"_RJuiLcrS5_l"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### DICOM data","metadata":{"id":"_ZpQSsBwB2fi"}},{"cell_type":"code","source":"train_data = pd.read_csv('train_data.csv', index_col=0)","metadata":{"id":"_0FM_IZ1Ewut"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Check Data Type","metadata":{"id":"0ZJtKEj-aml-"}},{"cell_type":"code","source":"train_data.info()","metadata":{"id":"sPSYsx1faoKf","outputId":"9d9809cf-04eb-49b4-8ea2-31179fd04c31"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Convert categorical variable to integer: `'sex'` and `'view_position'`.","metadata":{"id":"kPojOECaaqCw"}},{"cell_type":"code","source":"print(f\"The unique values for sex is {train_data['sex'].unique()}\")\nprint(f\"The unique values for veiw_position is {train_data['view_position'].unique()}\")","metadata":{"id":"y62qse0FbIt-","outputId":"f08491ce-921f-4be1-bd5b-6c22647e457e"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Encode sex = 1 for 'M', sex = 0 for 'F'.\n* Encode view_position = 1 for 'PA', view_position = 0 for 'AP'.","metadata":{"id":"NsKm8qi5bTdb"}},{"cell_type":"code","source":"train_data['sex'] = train_data['sex'].apply(lambda sex: 1 if sex == 'M' else 0)\ntrain_data['view_position'] = train_data['view_position'].apply(lambda vp: 1 if vp == 'PA' else 0)","metadata":{"id":"pmYBiMDlattH"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Check duplicated chest x-ray images by `'uid'`.","metadata":{"id":"sxIdUfanNg0x"}},{"cell_type":"code","source":"duplicated_dicom = train_data[train_data.duplicated(subset='uid', keep=False)]\nprint(f\"There are {len(duplicated_dicom['uid'].unique())} DICOM images with duplication(s).\")","metadata":{"id":"1nnAPqFxH5Ey","outputId":"ef389b2b-2601-42f0-c165-23bb995e0bc4"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Remove duplicated DICOM images.","metadata":{"id":"XlHMY3LgOIrW"}},{"cell_type":"code","source":"train_data = train_data.drop_duplicates(subset='uid', keep='first')\nduplicated_patient_ids = train_data[train_data.duplicated(subset='patientId', keep=False)]\nprint(f\"After removed duplicated DICOM images, there is {len(duplicated_patient_ids)} duplicated patient id.\")","metadata":{"id":"Gb114nWMIF_Z","outputId":"78d7a11e-be2c-4cee-c7de-da1424e41eec"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"merged_table = pd.merge(train_data, train_label[['patientId', 'Target']], on='patientId', how='outer')\nmerged_table.info()","metadata":{"id":"esWouGWVDj0i","outputId":"07d9b2cd-c16b-4a20-df14-73fb32990ce5"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"All DICOM images have corresponding labels, and there are no missing values.","metadata":{"id":"eKFDFA70TYrD"}},{"cell_type":"markdown","source":"**Confirmation of Chest X-ray Examination Body Part**\n\nMake sure that all X-ray images are of the chest area, and there are no images from other anatomical locations mixed in.","metadata":{"id":"o9XLO7YtViOh"}},{"cell_type":"code","source":"merged_table['body_part_examed'].unique()","metadata":{"id":"Ww_cwByVB551","outputId":"f0d58731-dd75-4c27-ccc2-d9a75dbcd2d1"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Check DICOM image size**\n\nVerify that all DICOM images have the same pixel size.","metadata":{"id":"WcqwJpPNV4vh"}},{"cell_type":"code","source":"print(f\"All unique row number(s) of DICOM images: {merged_table['row'].unique()}\")\nprint(f\"All unique column number(s) of DICOM images: {merged_table['col'].unique()}\")","metadata":{"id":"UKssh1_aWCTJ","outputId":"51a17089-7325-42a6-8512-c5a2bdd9e4f9"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Remove Invalid age**\n\nThe longest documented and verified human lifespan is 122 years and 164 days. Consequently, we will consider any age greater than 123 as invalid data.","metadata":{"id":"_phXGPTpguwR"}},{"cell_type":"code","source":"merged_table[merged_table['age'] > 123]","metadata":{"id":"lLzN7s_Ifur1","outputId":"c0062f3c-060e-4052-ce26-957580c14c35"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"We have 5 invalid age. Remove these data.","metadata":{"id":"FzvM43UahGdU"}},{"cell_type":"code","source":"merged_table = merged_table[merged_table['age'] <= 123]","metadata":{"id":"w4pfdjE4hMrn"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Remove pediatric CXR**\n\n\n\n> It is well known that the interpretation of pediatric chest radiographs differs from that in adult chest radiographs. There is a varying radiographic appearance of the normal growing child, ranging from tiny premature neonates to adolescents. Pediatric radiography often utilizes differing techniques of acquisition, and frequently, differing pathologies are encountered that are not commonly seen in adults. (Ref: [Pediatr Radiol. 2022; 52(8): 1568–1580.](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9033522/))\n\nFor example, the adult and pediatric CXR from our training set:\n\n","metadata":{"id":"A0MpL18jiVma"}},{"cell_type":"code","source":"child_id = merged_table.loc[merged_table['age'] < 2]['patientId']\ni = 0\nplt.figure(figsize=(6,12))\nfor id in child_id:\n    plt.subplot(2,2, i+1)\n    dcm = pydicom.dcmread(f'stage_2_train_images/{id}.dcm')\n    image = dcm.pixel_array\n    plt.imshow(image, cmap='gray')\n    plt.axis('off')  # Turn off axis labels\n    plt.title(\"Child x-ray\")\n    i += 1\nplt.tight_layout()\n\nadult_id = merged_table.loc[merged_table['age'] >= 18 ]['patientId']\ni = 0\nplt.figure(figsize=(6,12))\nfor id in adult_id:\n    if i < 2:\n        plt.subplot(2,2, i+1)\n        dcm = pydicom.dcmread(f'stage_2_train_images/{id}.dcm')\n        image = dcm.pixel_array\n        plt.imshow(image, cmap='gray')\n        plt.axis('off')  # Turn off axis labels\n        plt.title(\"Adult x-ray\")\n        i += 1\nplt.tight_layout()","metadata":{"id":"ykmimPakjXL4","outputId":"a9516ddd-86d6-480b-b456-def3b6c01369"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Remove pediatric chest x-ray from our data.","metadata":{"id":"RMALWxwwo5ok"}},{"cell_type":"code","source":"merged_table = merged_table[merged_table['age'] >= 18]","metadata":{"id":"c-KfSex7pB9a"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Part 3: Exploratory Data Analysis","metadata":{"id":"G4Mu759FZ58a"}},{"cell_type":"markdown","source":"### Class Imbalance\n\nSignificant class imbalance is shown in the plot below.\n\nThe number of CXR without pneumonia is significantly more than those with pneumonia. We need to address class imbalance issue while training the model.","metadata":{"id":"4TwtIlBLZfzz"}},{"cell_type":"code","source":"merged_table.groupby('Target').size().reset_index(name='count')","metadata":{"id":"v-P6z5SK1PkZ","outputId":"2f99d9fe-9b27-418e-cd9f-4cea81b6bc61"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Set the figure size\nplt.figure(figsize=(6, 4))\nsns.countplot(data=merged_table, x='Target')\n# Set the title and labels\nplt.title('Number of CXR with and without Pneumonia')\nplt.xlabel('Target')\nplt.ylabel('Count')\n# Customize x-ticks\nplt.xticks(ticks=[0, 1], labels=['No Pneumonia', 'Pneumonia'])\nplt.show()","metadata":{"id":"7l7JaHg1aHmJ","outputId":"5a2ccb4f-ce99-4551-fd59-21d07b4f0323"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Age Distribution","metadata":{"id":"7CIKkV2DZ_IK"}},{"cell_type":"code","source":"plt.figure(figsize=(16, 4))\nplt.subplot(1, 2, 1)\n# Create a histogram of age distribution with different target values\nsns.histplot(data=merged_table, x='age', hue=merged_table['Target'].apply(lambda x: 'Pneumonia' if x == 1 else 'No pneumonia'), multiple='stack', bins=10)\n# Set the title and labels\nplt.title('Age Distribution by Pneumonia')\nplt.xlabel('Age')\nplt.ylabel('Count')\n\nplt.subplot(1, 2, 2)\n# Create the boxplot\nsns.boxplot(data=merged_table,\n            x=merged_table['Target'].apply(lambda x: 'Pneumonia' if x == 1 else 'No pneumonia'),\n            y='age',\n            showmeans=True,\n            meanprops={\"marker\":\"o\", \"markerfacecolor\":\"white\", \"markeredgecolor\":\"white\", \"markersize\":\"3\"})\n# Set the title and labels\nplt.title('Age Distribution by Pneumonia')\nplt.xlabel('Target')\nplt.ylabel('Age')\n\n\n# Display the plot\nplt.show()","metadata":{"id":"dYoV4FayfG1K","outputId":"23ec92ab-f144-4425-80a6-fed6742c4405"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The age distribution in the pneumonia and non-pneumonia groups, as observed in the histogram, is not normally distributed. Therefore, we apply a non-parametric test to compare the means using the Mann-Whitney U Test.","metadata":{"id":"Dk90Ii0KNrWK"}},{"cell_type":"code","source":"# Assuming 'group1' and 'group2' are your two independent samples\ngroup1 = merged_table[merged_table['Target'] == 1]['age']  # Pneumonia group\ngroup2 = merged_table[merged_table['Target'] == 0]['age']  # No pneumonia group\n\n# Perform Mann-Whitney U Test\nstat, p_value = stats.mannwhitneyu(group1, group2, alternative='two-sided')\n\nprint(f\"Mann-Whitney U Test statistic: {stat}\")\nprint(f\"P-value: {p_value}\")\n\n# Interpretation\nif p_value < 0.05:\n    print(\"There is a significant difference between the two groups.\")\nelse:\n    print(\"There is no significant difference between the two groups.\")","metadata":{"id":"m7I8SmFxNWQQ","outputId":"c9269612-3eb7-4841-b538-0c42a67acd74"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fit1 = smf.glm('Target~age',\n               data = merged_table,\n               family=sm.families.Binomial()).fit()\nprint(fit1.summary())","metadata":{"id":"m2sjzvg2NoA2","outputId":"1a98ea1d-075e-4470-ce13-23c977ebb570"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"From the Logistic regression results above, we can see that the coefficients on age variable is statistically significant with p-value < 0.05. Hence, we can reject the null hypothesis that there is no difference in age among different chest x-ray group.","metadata":{"id":"AppXMCrFQXY8"}},{"cell_type":"markdown","source":"**The percentage of pneumonia within different age groups**","metadata":{"id":"9FD4LDgfLkvM"}},{"cell_type":"code","source":"plt.figure(figsize=(4, 3))\n\n# Create 10-year age bins\nmerged_table['age_group'] = pd.cut(merged_table['age'], bins=range(10, 101, 10), right=False)\n\n# Calculate the percentage of pneumonia in each age group\npercentage_df = merged_table.groupby('age_group')['Target'].mean() * 100  # Calculate mean of `Target=1` and multiply by 100 to get percentage\n\n# Plot the percentage of pneumonia in each age group\nplt.figure(figsize=(10, 6))\nsns.lineplot(x=percentage_df.index.astype(str), y=percentage_df.values)\n\n# Set the labels and title\nplt.xlabel('Age Group (10-Year Bins)')\nplt.ylabel('Percentage of Pneumonia (%)')\nplt.title('Percentage of Pneumonia in Each Age Group')\nplt.xticks(rotation=45)  # Rotate x labels for better visibility\nplt.show()","metadata":{"id":"FzmghrRlHjIU","outputId":"ecbca3fc-ed25-4488-d0e0-04f702e55ee3"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"The number of chest x-rays with age in range 90-100: {len(merged_table[merged_table['age'] > 90])}\")","metadata":{"id":"HdkD0QigI_Av","outputId":"e79fee47-2e06-47aa-a232-a2aba334b2ff"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Although the proportion of pneumonia in the 90-100 age group appears unusually high, there are actually only 4 data points, so the sample size is too small to conclude that older patients have a higher rate of pneumonia on CXR.","metadata":{"id":"V_-7C8lJdNbf"}},{"cell_type":"markdown","source":"### Sex","metadata":{"id":"WTzG3km9RIyo"}},{"cell_type":"code","source":"print(\"The percentage of males in each target group:\")\npercentage_male = merged_table.groupby('Target')['sex'].mean() * 100\npercentage_male = percentage_male.round(2).astype(str) + '%'\nprint(percentage_male)","metadata":{"id":"GW4PYf8ZfTa9","outputId":"67975ee8-1962-4bd2-ca5e-170ad052084a"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# generate correlation matrix\nsex_pneumonia_corr = merged_table[[\"Target\", \"sex\"]].corr()\nsex_pneumonia_heatmap = sns.heatmap(sex_pneumonia_corr, annot=True, cmap=\"RdBu\", vmin=-1, vmax=1).set_title(\"Correlation matrix of sex and pneumonia\")\nplt.show(sex_pneumonia_heatmap)\nprint(f\"The correlation between sex and pneumonia is {sex_pneumonia_corr['sex'].loc['Target']:.2f}.\")","metadata":{"id":"lxRUhuBkRMFU","outputId":"aa53b5cd-05aa-4164-f186-12ffe0c5c0c0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Given that the correlation coefficient is so low, sex might provide very little information about whether they have pneumonia or not.","metadata":{"id":"HHs4ppkFgNZ0"}},{"cell_type":"markdown","source":"### View Position","metadata":{"id":"x1RuRNerS-FP"}},{"cell_type":"code","source":"percentage_PA = merged_table.groupby('Target')['view_position'].mean() * 100\nplt.figure(figsize=(6, 4))\npercentage_PA.plot(kind='bar', color='skyblue')\n\n# Set title and labels\nplt.title('Percentage of PA view for Each x-ray Group')\nplt.xlabel('Target')\nplt.ylabel('PA View Percentage (%)')\n\n# Adding percentage labels on top of the bars\nfor i, v in enumerate(percentage_PA):\n    plt.text(i, v + 1, f\"{v:.2f}%\", ha='center')\n\n# Display the plot\nplt.xticks(ticks=[0, 1], labels=[\"No Pneumonia\", \"Pneumonia\"], rotation=0)\nplt.show()\n","metadata":{"id":"_5R44U05gtNO","outputId":"6dcf1027-6d01-4c1f-90ec-fc24c2c660d1"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# generate correlation matrix\nview_position_pneumonia_corr = merged_table[[\"Target\", \"view_position\"]].corr()\nview_position_pneumonia_heatmap = sns.heatmap(view_position_pneumonia_corr, annot=True, cmap=\"RdBu\", vmin=-1, vmax=1).set_title(\"Correlation matrix of sex and pneumonia\")\nplt.show(view_position_pneumonia_heatmap)\nprint(f\"The correlation between view_position and pneumonia is {view_position_pneumonia_corr['view_position'].loc['Target']:.2f}.\")","metadata":{"id":"IThNi4mygtNa","outputId":"e6b8bb0b-cbec-4699-d148-037da8417864"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"There may be a moderate negative relationship between view_position and pneumonia. Therefore, we need to conduct a statistical analysis to determine if this relationship is statistically significant.","metadata":{"id":"1ddF6f0SgtNb"}},{"cell_type":"code","source":"# Create a contingency table\ncontingency_table = pd.crosstab(merged_table['Target'], merged_table['view_position'])\n\nprint(\"Contingency Table:\")\nprint(contingency_table)\n\n# Perform the Chi-Square test\nchi2_stat, p_value, dof, expected = chi2_contingency(contingency_table)\n\n# Print the results\nprint(f'Chi-Square Statistic: {chi2_stat}')\nprint(f'P-value: {p_value}')\nprint(f'Degrees of Freedom: {dof}')\nprint(f'Expected Frequencies:\\n{expected}')\n\n# Interpret the results\nalpha = 0.05  # Significance level\nif p_value < alpha:\n    print(\"Reject the null hypothesis: There is a significant association between pneumonia and view_position.\")\nelse:\n    print(\"Fail to reject the null hypothesis: There is no significant association between pneumonia and view_position.\")","metadata":{"id":"Smnr9rn7ivCj","outputId":"b708b62c-d00c-4462-9451-f7c7ed874421"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The higher percentage of PA views observed in the no pneumonia group can be attributed to patient condition. Healthy individuals are generally able to stand and undergo PA chest X-rays. In contrast, AP views are commonly utilized for patients who are unable to stand, such as the elderly, bedridden individuals, or those who cannot stand due to illness. Pneumonia can make it difficult for patients to stand and receive a PA view; conversely, those who are unable to stand also represent a high-risk group for developing pneumonia. This may help explain why the proportion of PA views is lower in the pneumonia group.","metadata":{"id":"OhcNxvkMkWQx"}},{"cell_type":"markdown","source":"## Part 4: Data Preparation","metadata":{"id":"PGWCN1Loszj6"}},{"cell_type":"markdown","source":"### Non-Image Features","metadata":{"id":"HhX9jR1LadsL"}},{"cell_type":"markdown","source":"**Age**\n\nIt is sometimes challenging to differentiate between age-related changes and pathological findings. For example, emphysematous changes and basal fibrotic changes are common in elderly patients. Since age can influence chest X-ray interpretation and exploratory data analysis (EDA) has shown a correlation between age and pneumonia, age will be included as a non-image feature to train the model for pneumonia detection.\n\n\n","metadata":{"id":"m4TpkyobB2Ob"}},{"cell_type":"markdown","source":"\n\n**Sex and View Position**\n\nBoth variables influence how chest X-rays (CXR) are interpreted. Therefore, regardless of whether they show correlation with our target variable (pneumonia) in exploratory data analysis (EDA), they should still be included as variables in our model.\n\n* Sex\n\n    Although sex is not strongly correlated with the target label \"pneumonia,\" CNN can still extract different features from chest X-ray pixels because male and female CXRs display distinct characteristics. For instance, female CXRs show distinct features such as:\n\n    * **Prominent breast tissue**:\n    \n    Breast tissue absorbs some of the x-ray beam, which causes underexposure of tissues behind it. As a result, the lung behind the breast appears whiter, and the pulmonary vascular pattern in that area becomes more prominent. If the breast tissue is large, it may create the appearance of bilateral basilar lung infiltrates on PA or AP views.\n\n    * **Central pattern of costal cartilage calcification**:\n\n    In women, costal cartilage calcification typically occurs in a central pattern, while in men, it tends to follow a peripheral pattern.\n","metadata":{"id":"v54mLSJ-9vRR"}},{"cell_type":"markdown","source":"* **View Position**\n\n    PA views are of higher **quality** and allow for a more accurate assessment of **heart size** compared to AP views.\n\n| **Aspect**           | **PA View**                        | **AP View**                         |\n|----------------------|------------------------------------|-------------------------------------|\n| **Heart size**        | Normal heart size                  | Heart appears larger                |\n| **Clavicles**         | Project over lung field            | Above lung field                    |\n| **Scapulae**          | Retracted laterally                | Projected over lung field           |\n| **Lung markings**     | Normal                             | Crowded                             |\n| **Ribs**              | Posterior ribs are distinct        | Anterior ribs are distinct          |\n| **Disc spaces**       | Not clearly seen                   | Clearly seen                        |\n","metadata":{"id":"Op15JuQrVi8L"}},{"cell_type":"markdown","source":"Ref:\n* [Aging-Related Findings of the Respiratory System in Chest Imaging: Pearls and Pitfalls](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9713755/)\n* [Geriatric Chest Imaging: When and How to Image the Elderly Lung, Age-Related Changes, and Common Pathologies](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3713368/)\n* [Review of Thoracic Imaging Findings Unique to Women](https://www.sciencedirect.com/science/article/pii/S084653711400120X)\n* [Radiat Prot Dosimetry. 2018 Feb 1;178(3):298-303.](https://www.researchgate.net/publication/342666950_Use_of_AP_Vs_PA_view_chest_X_rays_in_Medical_facility_of_Hamad_General_Hospital_Doha_Qatar)","metadata":{"id":"6Aakbfx6ZPad"}},{"cell_type":"code","source":"nonimage_data = merged_table[['patientId', 'age', 'sex', 'view_position', 'Target']]\nnonimage_data['file_name'] = nonimage_data['patientId'].apply(lambda id: f\"{id}.dcm\")\n# Ensure data type is consistent\nnonimage_data.loc[:, 'patientId'] = nonimage_data['patientId'].astype(str)\nnonimage_data.loc[:, 'age'] = nonimage_data['age'].astype(int)\nnonimage_data.loc[:, 'sex'] = nonimage_data['sex'].astype(int)\nnonimage_data.loc[:, 'view_position'] = nonimage_data['view_position'].astype(int)\nnonimage_data.loc[:, 'Target'] = nonimage_data['Target'].astype(int)","metadata":{"id":"qHGH_d0xcBCP","outputId":"66ed716c-fadf-4320-e8c7-e5a5991232ba"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nonimage_data.head(2)","metadata":{"id":"ygApVUL4prAO","outputId":"a4a0e409-6542-4bd0-aeaa-2766b4b5a268"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Image\n\nThe image pixels are too large to fit into memory, so we need to create a generator that loads data on the fly.","metadata":{"id":"65K6-VFvaPjY"}},{"cell_type":"markdown","source":"### Splitting the Dataset\n\n* Training set: 70%\n* Validation set: 15%\n* Test set: 15%","metadata":{"id":"fayg338rrKGo"}},{"cell_type":"code","source":"# Split the dataset into 70% train and 30% (temp) for validation + test\ntrain, temp = train_test_split(nonimage_data, test_size=0.3, random_state=42, shuffle=True)\n\n# Split the temp set into 50% validation and 50% test (0.15 each of original dataset)\nval, test = train_test_split(temp, test_size=0.5, random_state=42, shuffle=True)","metadata":{"id":"bWscJcBXrKGp"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"Number of samples in the train set: {len(train)}\")\nprint(f\"Number of samples in the validation set: {len(val)}\")\nprint(f\"Number of samples in the test set: {len(test)}\")","metadata":{"id":"cwTKyH6Uz3TR","outputId":"1b00afc5-e24f-4179-cacd-e41139f12d25"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Data Pipeline and Data Augmentation","metadata":{"id":"tVoiRVhR9JSf"}},{"cell_type":"markdown","source":"**Merge image and non-image data**\n\nIn our training process, we are using a dataset that includes both image data and non-image data (age, sex, view position). Although Keras supports models with multiple inputs, `tf.keras` multi input models don't work when used together with `tf.data.Dataset` due to input broken validation checks.\n\nAs a result, we must merge the image data and non-image data into one tensor (flattened image + non-image data) to simplify the data pipeline and ensure compatibility with the training process.\n\n","metadata":{"id":"tvdelZnd4FrC"}},{"cell_type":"code","source":"# Merge image and non-image data for original image\ndef process_data(patient_data):\n\n    file_name = patient_data['file_name']\n\n    file_path = tf.strings.join([\"stage_2_train_images\", file_name], separator='/')\n\n    dicom_file = tf.io.read_file(file_path)\n    image = tfio.image.decode_dicom_image(dicom_file, dtype=tf.uint16)\n    image = tf.image.resize(image, [256, 256])\n    image = image / 255\n    flattened_image = tf.reshape(image, [-1])\n\n    # Combine all features into a single tensor vector\n    # nonimage = [patient_data['sex'], patient_data['view_position']]\n\n    nonimage = tf.convert_to_tensor([patient_data['sex'], patient_data['age'], patient_data['view_position']], dtype=tf.float32)\n    combined_tensor = tf.concat([flattened_image, nonimage], axis=0)\n    # combined_tensor = tf.reshape(combined_tensor, (-1, 65538))\n\n\n\n    # nonimage = tf.stack([patient_data['sex'], patient_data['view_position']], axis=0)\n    # combined_feature = tf.stack([image, nonimage], axis=0)\n\n    # Obtain the label from csv file\n    # label = patient_data['Target']\n\n    label = tf.convert_to_tensor(patient_data['Target'], dtype=tf.int64)\n    label = tf.expand_dims(label, axis=-1)\n    label = tf.ensure_shape(label, [1])\n\n    return combined_tensor, label","metadata":{"id":"gvOYcPQNsuxC"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Data Augmentation**\n\nIn our dataset, there exists a significant **class imbalance** between the \"pneumonia\" and \"no pneumonia\" groups. This imbalance presents a challenge for the model to accurately generalize across both classes, as the model may become biased towards the majority class, leading to suboptimal performance in identifying the minority class. To address this, we will apply data augmentation to the \"pneumonia\" group to increase the number of samples.","metadata":{"id":"TAi2v8EM9MqQ"}},{"cell_type":"code","source":"train_pneumonia = train[train['Target'] == 1]\ntrain_no_pneumonia = train[train['Target'] == 0]\nprint(f\"Number of Pneumonia in the train set: {len(train_pneumonia)}\")\nprint(f\"Number of Pneumonia in the train set: {len(train_no_pneumonia)}\")\nprint(f\"The ratio between pneumonia and nonpneumonia class: {len(train_no_pneumonia)/len(train_pneumonia)}\")","metadata":{"id":"GIWN-yxK0IAA","outputId":"ac57415e-1f62-4945-8231-9530a0b91bdc"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def augment_image(image):\n    # Apply random augmentations\n    image = tf.image.random_flip_left_right(image)\n    image = tf.image.random_brightness(image, max_delta=0.2)\n    image = tf.image.random_contrast(image, lower=0.8, upper=1.2)\n    return image","metadata":{"id":"tqfapZHY_x5m"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Merge image and non-image data for augmented image\ndef process_augmented_data(patient_data):\n\n    file_name = patient_data['file_name']\n\n    file_path = tf.strings.join([\"stage_2_train_images\", file_name], separator='/')\n\n    dicom_file = tf.io.read_file(file_path)\n    image = tfio.image.decode_dicom_image(dicom_file, dtype=tf.uint16)\n    image = tf.image.resize(image, [256, 256])\n    image = image / 255\n    image = augment_image(image)\n    flattened_image = tf.reshape(image, [-1])\n\n    # Combine all features into a single tensor vector\n    nonimage = tf.convert_to_tensor([patient_data['sex'], patient_data['age'], patient_data['view_position']], dtype=tf.float32)\n    combined_tensor = tf.concat([flattened_image, nonimage], axis=0)\n\n    # Obtain the label\n    label = tf.convert_to_tensor(patient_data['Target'], dtype=tf.int64)\n    label = tf.expand_dims(label, axis=-1)\n    label = tf.ensure_shape(label, [1])\n\n    return combined_tensor, label","metadata":{"id":"HjbZAs0F1GbT"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Since the sample size of the pneumonia group is smaller, we applied data augmentation to the pneumonia images to equalize the number of samples between the pneumonia and no-pneumonia groups, addressing the class imbalance.","metadata":{"id":"G13vm1XVLR4-"}},{"cell_type":"code","source":"# Build up train dataset pipeline\ntrain_no_pneumonia_dataset = tf.data.Dataset.from_tensor_slices(dict(train_no_pneumonia))\ntrain_pneumonia_dataset = tf.data.Dataset.from_tensor_slices(dict(train_pneumonia))\n\n# The ratio between \"no pneumonia\" and \"pneumonia\" group is 3.5\n# Add 2.5X augmented \"pneumonia\" data to achieve class balance\ntrain_pneumonia_augmented_dataset = train_pneumonia_dataset.repeat(3)\ntrain_pneumonia_augmented_dataset = train_pneumonia_augmented_dataset.shuffle(buffer_size=100).take(len(train_no_pneumonia) - len(train_pneumonia))\ntrain_pneumonia_augmented_dataset = train_pneumonia_augmented_dataset.map(process_augmented_data)\n\ntrain_no_pneumonia_dataset = train_no_pneumonia_dataset.map(process_data)\ntrain_pneumonia_dataset = train_pneumonia_dataset.map(process_data)\n# Concatenate train dataset from \"pneumonia\", \"augmented pneumonia\" and \"no penumonia\" dataset\ntrain_dataset = train_pneumonia_dataset.concatenate(train_no_pneumonia_dataset).concatenate(train_pneumonia_augmented_dataset)\ntrain_dataset = train_dataset.shuffle(buffer_size=5000, seed=42)\n\n# Build up validation and test dataset pipeline\nval_dataset = tf.data.Dataset.from_tensor_slices(dict(val))\ntest_dataset = tf.data.Dataset.from_tensor_slices(dict(test))\nval_dataset = val_dataset.map(process_data)\ntest_dataset = test_dataset.map(process_data)","metadata":{"id":"4lUE38zItCm0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Check the shape of our tensorflow dataset.","metadata":{"id":"4v0kx5g4LzJ8"}},{"cell_type":"code","source":"for data, label in train_dataset.take(1):\n    print(data.shape)\n    print(label.shape)","metadata":{"id":"auoPwctqta4Z","outputId":"0c2d3112-aca5-4200-8214-deefda33549b"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Examine the DICOM image\n\n","metadata":{"id":"-yWic67NOh-N"}},{"cell_type":"code","source":"# Display the image using matplotlib\nfor data, label in train_dataset.take(1):\n    # flattened_image = tf.slice(data, [0, 0], [-1, 256*256])\n    # image = tf.reshape(flattened_image, (256, 256))\n    flattened_image = data.numpy()[0: 256*256]\n    image = flattened_image.reshape(256, 256)\n\n    plt.imshow(image, cmap='gray')\n    plt.title('Pneumonia' if label == 1 else \"No Pneumonia\")\n    plt.axis('off')  # Hide axes\n    plt.show()","metadata":{"outputId":"b6a4cfca-1962-4340-8c9e-601c71a2d17e","id":"Nczr-_wKOh-O"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Prefetch and batch both datasets","metadata":{"id":"04wdWWonOh-O"}},{"cell_type":"code","source":"batch_size = 32\ntrain_dataset = train_dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)\nval_dataset = val_dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)","metadata":{"id":"qqw76y6aOh-O"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Part 5: Modeling","metadata":{"id":"M7anuUvxtAyW"}},{"cell_type":"markdown","source":"### 5.1: Model Architecture\n\nModels with multiple inputs\n\n* Concatenate the CNN features with the\n additional features:\n Combine the output of the CNN with the additional features (structured data) to form a single input vector.\n* Pass the combined features through fully connected layers:\nAfter concatenating, pass the combined features through dense layers and then output the final classification.","metadata":{"id":"qTYjwfYFtfy-"}},{"cell_type":"markdown","source":"![model.png](data:image/png;base64,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nnsGlS22g0D2CHj/DwVdjzcjcNx+87Q1HcfikUcesa233tpWWmklGzFiROBZuPTSS23x4sXuWvHtt9/an3/+aRdffLH973//s08//TTl+TniiCPshx9+qLStv//+29566y078sgjXR6effZZe+WVV1Ken6A2kMj+XHjhhSaHFVdcMahssZ16EqgoDb6mUuBBiKzKSovriYzV5KLAeuutZ2eddZb99NNPpqpYs2fPtpNPPtldaObNm2cnnXRS1I+/qm7pohRZLPzee+9Zr169bK+99nLr+uWXX2qkUkCkJ2off/xx1LyTJk1y21c+lPQDqwve/vvvbyq50VOfql7woydzmh6ZJkyY4PIUOa6m/D7++ONuW927d7fLLrvMZs2aFbk43/NYIJ9/T8tKuJYEferr5n/UqFHud/iYY46xRx99tFIW9Jt8yy232D777GOHHHKIjRkzxlVLUnUePy1atMgGDhzoSjM0z/Dhw6v8HfWX8T/1e66SkLXWWsuNKiwsdL/JKoEoKiryZ7Pqfld1zXjsscfC8+rLQw89ZNddd13UuHgDu+++u6299tr21FNPRU3WcIMGDcKlJNrfu+66K2qehx9+2P2WqxRnwIABNn/+fDddwYt+2yPTjTfeaLrx95PmPfXUU00l7rFJpVPnn3++TZw40Xr37u2ufX379jVdMyOTqkv503Utjb3e6fqka+fee+9tZ5xxhlufv3zk/ugarZIQXQ9POOEEUwmQroNa/txzz/UXcePkqpIjrfOCCy6Iyr/m9/PtX7OVbz14JAUnoMKBCu8v6JSeIKSEYrqgD3S2bW/OnDkuy02bNnXF/frx09OuFi1auB81Vd/yqwFce+217kZ/q622csu8/vrrrtRk3XXXdTf7+jFTtQEtX10qKCgwFfPffPPNUbOpjccHH3xgK6+8sqnNxy677GJff/21C1h0MdKP6j333BO1jD8wbty4Su1PdJG4//77/VmspvzqB/zss8921db0Y//JJ5+4/SsvD/4HI5xpvmSMQFke/56Wl3ItCfpEfPrpp624uNhVn9VN4xdffBH1UEj50dNw3VB36dLFunXr5h4SXXnlle63TtMVpCjw0IOj448/3gUiavenwCCR1LVrV3cDrN9R/SYrqURd29A2lWr6Xd1ggw3slFNOMbURVFIQoBvpzp07u+Hq/lGg06NHD5f/yAdQ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u/rqq93zv//+2y1XmY844gi3P+X/888/R7aLfiIH1U1p5MiR7vkrr7ziXvt/br/9dtt1111tn332saeeesq/7R5LSkrsiiuuiCxXHgqa46Xa6qnuWNqHT//9739ddzR59+3b1/bbb78lWmTko/V2220323fffd3npLb9+nz9o7r9DR061HbZZRe3bWx9tV6ieiVTxsmTJ0eOuY5F7H7q+kz4stb2WFf9X3rpJff/Uuy26rY4fPjwyNv333+/q7+OrS4KzJkzJ7Lsvvvuc90MX331VTvzzDOX+P8wsmIIn7gApJbPaAirQ5ERQAABBPJEoEmCkIqFpTnFqxPinj17LlEn3wXpl19+cctGjRq1RD94nXDffffdbnnXrl1Nf0rLLrusrbDCClZUVGQzZsxw40zUxau8vNz22GMPF9hsueWWphNDpS+++MIefvhh99z/oxN4PzaiZcuWLr/i4mJr06aNe+735dePflSQE72vrbfe2qZMmeJW0QnjVlttZeq6pRNxdUPTCbDvLqRyd+zY0bV26bn+1Cry4osv2s4772wqw6GHHury32abbVxQpIzVBU3ddBSgfPzxx5GATi1JO+64o6200kpuf1pP+//jjz+ii+yet2vXzu1PLzp16uSe6z2fdNKqQEXlaNWqlR100EH2yCOPuMU6mVdg8swzz9hRRx3lApELLrjALrroIr95jcfa6qlAS2NvfFKQethhh9mHH37onGSx//77u/FDWkfjcNRtTeNVTjzxRNeVT0Fo9Am2zyveo4LPSy65xHr16mU6TgooPvvss8iqydQrURn1WZCZzHXM119/fTvkkEPs8ccfd/tJ9JmIFCbOk0T179Kli11zzTX26aefRrbWmCXVs7Cw0L03aNAgO/vss52vglB91vbcc8/IuCwFyQMHDnSBtQLsXGqJzbXv08hB5gkCCCCAQE4LLPoFz3AVqyrLg5ODyuAks3mG95ye3c2fP9+d2Mfm3rZtW/fWvHnzYhfFfa0T1eWXX94eeugh16qx4ooruvV8EHPggQfabbfd5t5TkLDOOuu4FgdduU+UFNRceeWVruVhtdVWs6uuuqrOTXQip6vrStH70hXmO+64w3Ri/9hjj5mCG524T5061bVeKEDSSbtaQnTiF70ftfJoXS1TUkuIApnrr7/eFIz4pBYWtSL5pDxko65dSurmpgBv2LBh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+2SHCCCAQK4LVFfz3Zrrx5j6ZacAQUh2HhdKhcASAlytW4KENxBAAIFGC1TREtJoQzJAoCECBCENUWMbBJpAoKqSLgNNwM4uEUAgxwWqgzumkxBAIPMCzS++4LzBmd8te0QAgYYING9RZAXNuHaQjN24cePsq6++sgkTJri/SZMmmQagdurUKZnNc2Id1fnqq6+27t27W+fOnetdp2jDX3/91f766y8rLCy0du3a1Tuve++917p06WIdOnSo97Z1bRCbr47xoEGDrLy83FZbbbW6Nm3wsgULFtjbb79tv/zyi/ts/fbbb6b3OnbsaM2bN29wvvXdUPtU/VdffXUrLi52m8d61DfPfFtfLczlZQvyrdrUF4GsECgomT2dCbKz4lBQCAQSC7Rs1c4KWy462Ui8dn6vsddee9lrr71mrVu3dhBlZWVWWlpqO+20kz322GPuhDjXhT788EPbd9997dFHH7Udd9yx3tWV4ahRo6xly5Zu2/nz57vHPfbYw+655x5beumlk86zoKDAHn74YevXr1/S2ySzYmy+Cj4UdJ100kl26aWXJpNFvdf55JNPbLPNNnPBWLPgokBVMF5r7ty5tsoqq9gdd9xhffv2rXeeDdlAQdAaa6xhY8eOdeVRHrEeDck3n7apLC+zsvlz8qnK1BWBrBHgkmrWHAoKgkBigarK8sQrsYYT0BXxHXbYwWbPnu3+SkpK7P3333etI//973/zQmnLLbe06dOnNygAEZAMdUItO/3NmTPHnnzySfvggw/sjDPOyErDFi1a2J9//pm2AMS76PGNN95wny25TJs2zXr27GmHH364c8pKHAq1hEBlxcIl3uMNBBDIjABBSGac2QsCKRGoLOcHs6GQumK91VZb2f7772/vvfeey0ZdV4YPH24vvviiazHYdddd7brrrrOKipp9xLX+EUcc4VpRTj31VPv5558jxdCJ6HnnnRd5rSczZ8604447ztQdSkn7GTlypLtKvssuu9ihhx5qn376qVvvnHPOsZ133tlOO+00dyLrNlj8j7r8HHnkkW6/xx57rOkKvE9+Hz/88IOdeeaZbp2jjjrKBVmx6/zxxx/+LXvqqaciddE+1V0t2aRuWAceeKALQJ577jmbN29eZNP7778/Yjh48ODIibh8jj76aLeeDPT8lVdeSbidX2H06NGuvHLr37+/ffPNN25R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)","metadata":{"id":"fMWl1WlD8Rme"}},{"cell_type":"markdown","source":"### Hyperparameter Tuning","metadata":{"id":"UhxepVEAf-7S"}},{"cell_type":"markdown","source":"* Learning rate\n* Number of neurons for layers\n* Dropout rate","metadata":{"id":"dQSoFjcAeJaT"}},{"cell_type":"code","source":"def model_builder(hp):\n    set_random_seed()\n\n    image_size = 256*256\n    nonimage_feature_number = 3\n    input_size = image_size + nonimage_feature_number\n\n    # Define the inputs (image and nonimage inputs)\n    input = keras.Input(\n        shape=(input_size,), name=\"input\"\n    )  # Binary vectors of size `num_tags`\n\n    # Use Lambda layers to slice and reshape the input for image and non-image parts\n    # Use Lambda layers to slice and reshape the input for image and non-image parts\n    flattened_image = keras.layers.Lambda(\n        lambda x: tf.slice(x, [0, 0], [-1, image_size]),\n        output_shape=(image_size,)\n    )(input)\n\n    image_input = keras.layers.Reshape((256, 256, 1))(flattened_image)\n\n    nonimage_input = keras.layers.Lambda(\n        lambda x: tf.slice(x, [0, image_size], [-1, 3]),\n        output_shape=(nonimage_feature_number,)\n    )(input)\n\n\n    # Add convolutional layers\n    filter_1 = hp.Int('filter_1', min_value=32, max_value=128, step=32)\n    x = keras.layers.Conv2D(filter_1, (3, 3), activation='relu')(image_input)\n    x = keras.layers.MaxPooling2D((2, 2))(x)\n    hp_dropout = hp.Float('dropout', min_value=0.0, max_value=0.5, step=0.1)\n    x= keras.layers.Dropout(hp_dropout)(x)\n\n    filter_2 = hp.Int('filter_2', min_value=32, max_value=128, step=32)\n    x = keras.layers.Conv2D(filter_2, (3, 3), activation='relu')(x)\n    x = keras.layers.MaxPooling2D((2, 2))(x)\n    x= keras.layers.Dropout(hp_dropout)(x)\n\n    filter_3 = hp.Int('filter_3', min_value=32, max_value=128, step=32)\n    x = keras.layers.Conv2D(filter_3, (3, 3), activation='relu')(x)\n    x = keras.layers.MaxPooling2D((2, 2))(x)\n    x = keras.layers.Dropout(hp_dropout)(x)\n\n    image_features = keras.layers.Flatten()(x)\n\n    x = keras.layers.concatenate([image_features, nonimage_input])\n    # Stick a logistic regression for priority prediction on top of the features\n    units_1 = hp.Int('units_1', min_value=32, max_value=512, step=32)\n    x = keras.layers.Dense(units_1, activation='relu')(x)\n    units_2 = hp.Int('units_2', min_value=32, max_value=512, step=32)\n    x = keras.layers.Dense(units_2, activation='relu')(x)\n    outputs = keras.layers.Dense(1, activation='sigmoid')(x)\n\n    # Instantiate an end-to-end model predicting both priority and department\n    model = keras.Model(\n        inputs=input,\n        outputs=outputs\n    )\n\n    # Tune the learning rate for the optimizer\n    # Choose an optimal value from 0.01, 0.001, or 0.0001\n    hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])\n\n    model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),\n                    loss='binary_crossentropy',\n                    metrics=[metrics.BinaryAccuracy(), metrics.Precision(),\n                             metrics.Recall(), metrics.AUC()])\n\n    return model","metadata":{"id":"agsjoi0-EeGj"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Instantiate the tuner and perform hypertuning**","metadata":{"id":"cc6IM1IOJ5Bu"}},{"cell_type":"markdown","source":"The Keras Tuner has four tuners available - RandomSearch, Hyperband, BayesianOptimization, and Sklearn. Given the large seach space for the model architecture, we will apply Hyperband.\n\n> The Hyperband tuning algorithm uses adaptive resource allocation and early-stopping to quickly converge on a high-performing model. This is done using a sports championship style bracket. The algorithm trains a large number of models for a few epochs and carries forward only the top-performing half of models to the next round.\n\n","metadata":{"id":"q5goypBMLK1z"}},{"cell_type":"code","source":"tuner = kt.Hyperband(model_builder,\n                     objective='val_binary_accuracy',\n                     max_epochs=10,\n                     factor=3,\n                     overwrite=False,\n                     directory='my_dir',\n                     project_name='optimal_architecture')","metadata":{"id":"bM6jTsUFEd8R","outputId":"2ef5ff31-fd2b-4f2b-95b8-21222e4b6bb3"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Create a callback to stop training early after reaching a certain value for the validation loss.\n\n\n","metadata":{"id":"BHv83LlQLnh6"}},{"cell_type":"code","source":"stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)","metadata":{"id":"-3AiyO2cLoaY"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Run the hyperparameter search.","metadata":{"id":"qgShpDafRf3a"}},{"cell_type":"code","source":"tuner.search(train_dataset, epochs=50, validation_data=val_dataset, callbacks=[stop_early])\n\n# Get the optimal hyperparameters\nbest_hps=tuner.get_best_hyperparameters(num_trials=1)[0]\n\nprint(f\"\"\"\nThe hyperparameter search is complete.\nFirst convolutional layer filter number: {best_hps.get('filter_1')}.\nSecond convolutional layer filter number: {best_hps.get('filter_2')}.\nThird convolutional layer filter number: {best_hps.get('filter_3')}.\nOptimal dropout rate: {best_hps.get('dropout')}.\nThe optimal number of units in the first densely-connected layer is {best_hps.get('units_1')}.\nThe optimal number of units in the second densely-connected layer is {best_hps.get('units_2')}.\n and the optimal learning rate for the optimizer\nis {best_hps.get('learning_rate')}.\n\"\"\")","metadata":{"id":"s07EJPlmRgXH","outputId":"911d5adc-418d-4321-8fa5-82d0e702981e"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Store the optimal hyperparameters","metadata":{"id":"PzKK9Ge1f-1N"}},{"cell_type":"code","source":"best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]\n\nfilter_1 = best_hps.get('filter_1')\nfilter_2 = best_hps.get('filter_2')\nfilter_3 = best_hps.get('filter_3')\nhp_dropout = best_hps.get('dropout')\nunits_1 = best_hps.get('units_1')\nunits_2 = best_hps.get('units_2')\nlearning_rate = best_hps.get('learning_rate')","metadata":{"id":"mH-dnnbyfzjr"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Model Training","metadata":{"id":"lryvTlq2cTg_"}},{"cell_type":"markdown","source":"Load the tuner from the saved directory.\n\nBuild the model based on the optimal\nhyperparameters.","metadata":{"id":"HmXWjlki83UJ"}},{"cell_type":"code","source":"# Get the best hyperparameter\nbest_hps = tuner.get_best_hyperparameters(num_trials=1)[0]\n# Build the model with the optimal hyperparameters\nmodel = tuner.hypermodel.build(best_hps)\n# stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=15)","metadata":{"id":"ve0S7PB182U8"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def final_model_builder():\n    set_random_seed()\n\n    image_size = 256*256\n    nonimage_feature_number = 3\n    input_size = image_size + nonimage_feature_number\n\n    # Define the inputs (image and nonimage inputs)\n    input = keras.Input(\n        shape=(input_size,), name=\"input\"\n    )  # Binary vectors of size `num_tags`\n\n    # Use Lambda layers to slice and reshape the input for image and non-image parts\n    # Use Lambda layers to slice and reshape the input for image and non-image parts\n    flattened_image = keras.layers.Lambda(\n        lambda x: tf.slice(x, [0, 0], [-1, image_size]),\n        output_shape=(image_size,)\n    )(input)\n\n    image_input = keras.layers.Reshape((256, 256, 1))(flattened_image)\n\n    nonimage_input = keras.layers.Lambda(\n        lambda x: tf.slice(x, [0, image_size], [-1, 3]),\n        output_shape=(nonimage_feature_number,)\n    )(input)\n\n\n    # Add convolutional layers\n    x = keras.layers.Conv2D(filter_1, (3, 3), activation='relu')(image_input)\n    x = keras.layers.MaxPooling2D((2, 2))(x)\n    x= keras.layers.Dropout(hp_dropout)(x)\n\n    x = keras.layers.Conv2D(filter_2, (3, 3), activation='relu')(x)\n    x = keras.layers.MaxPooling2D((2, 2))(x)\n    x= keras.layers.Dropout(hp_dropout)(x)\n\n    x = keras.layers.Conv2D(filter_3, (3, 3), activation='relu')(x)\n    x = keras.layers.MaxPooling2D((2, 2))(x)\n    x = keras.layers.Dropout(hp_dropout)(x)\n\n    image_features = keras.layers.Flatten()(x)\n\n    x = keras.layers.concatenate([image_features, nonimage_input])\n    # Stick a logistic regression for priority prediction on top of the features\n    x = keras.layers.Dense(units_1, activation='relu')(x)\n    x = keras.layers.Dense(units_2, activation='relu')(x)\n    outputs = keras.layers.Dense(1, activation='sigmoid')(x)\n\n    # Instantiate an end-to-end model predicting both priority and department\n    model = keras.Model(\n        inputs=input,\n        outputs=outputs\n    )\n\n    # Tune the learning rate for the optimizer\n    # Choose an optimal value from 0.01, 0.001, or 0.0001\n\n    return model","metadata":{"id":"So7T2N_cdml6"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = final_model_builder()\nmodel.summary()","metadata":{"id":"_7C3nG8_XTXq","outputId":"e647ed9e-c080-419c-9bbb-c9375906d399"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Define EarlyStopping with val_auc as the monitor","metadata":{"id":"22rB1ehdd4Yu"}},{"cell_type":"code","source":"stop_early = tf.keras.callbacks.EarlyStopping(\n    monitor='val_loss',        # Monitor validation loss\n    patience=10,               # Wait for 3 epochs with no improvement\n    mode='min',                # AUC should be maximized\n    restore_best_weights=True  # Restore the best weights after stopping\n)","metadata":{"id":"sNhs-N1BdJ78"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n              loss='binary_crossentropy',\n              metrics=[metrics.BinaryAccuracy(name='accuracy'),\n                       metrics.AUC(name='auc'),\n                       metrics.Precision(name='precision'),\n                       metrics.Recall(name='recall')\n                       ])","metadata":{"id":"978nKH3JdyOJ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(train_dataset, epochs=100, validation_data=val_dataset, callbacks=[stop_early])","metadata":{"id":"saLrbqt61mh7","outputId":"723efabb-8015-4bf4-d532-6793ce1b17a7"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Plot the training curve","metadata":{"id":"vP3K-vzt51tQ"}},{"cell_type":"code","source":"# Access the training history\nhistory_dict = history.history\n\n# Plotting function\ndef plot_metric(metric):\n    plt.plot(history_dict[metric], label=f'Train {metric.capitalize()}')\n    plt.plot(history_dict[f'val_{metric}'], label=f'Validation {metric.capitalize()}')\n    plt.xlabel('Epochs')\n    plt.ylabel(metric.capitalize())\n    plt.legend()\n    plt.title(f'Training and Validation {metric.capitalize()}')\n    plt.show()\n\n# Plot Loss, Accuracy, AUC, Precision, and Recall\nmetrics_to_plot = ['loss', 'accuracy']\ni = 1\nfor metric in metrics_to_plot:\n    plt.subplot(2, 1, i)\n    plot_metric(metric)\n    i += 1\nplt.show()","metadata":{"id":"_Kqc5MNJicLv","outputId":"a099bbab-69f8-4ee4-e238-a535576f31ea"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Save the basic model","metadata":{"id":"18_6Na4oB9cp"}},{"cell_type":"code","source":"# Save the model\nmodel.save(\"augmented_model.keras\")","metadata":{"id":"b2pTXFT0B9cq"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Evaluate Model on Test Set","metadata":{"id":"OAt47n_kCD9E"}},{"cell_type":"code","source":"test_dataset = test_dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)","metadata":{"id":"uj975PsuVh4W"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_test = test_dataset.map(lambda x, y: x)\ny_test = test_dataset.map(lambda x, y: y)","metadata":{"id":"kk8f8T2ZkahO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results = model.evaluate(test_dataset)\nprint(f\"Accuracy: {results[2]:.2f}\")\nprint(f\"Precision: {results[3]:.2f}\")\nprint(f\"Sensitivity: {results[4]:.2f}\")","metadata":{"id":"bIfDlzy2CD9L","outputId":"4f495e2e-2cc2-4b01-b08b-7a680ab1b88c"},"execution_count":null,"outputs":[]}]}