{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TvQvDlAfM4Sr",
"outputId": "93516842-f87e-4ab3-93f7-90d041d6faff"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting pytorch-tabnet\n",
" Downloading https://files.pythonhosted.org/packages/94/e5/2a808d611a5d44e3c997c0d07362c04a56c70002208e00aec9eee3d923b5/pytorch_tabnet-3.1.1-py3-none-any.whl\n",
"Requirement already satisfied: torch<2.0,>=1.2 in /usr/local/lib/python3.7/dist-packages (from pytorch-tabnet) (1.9.0+cu102)\n",
"Requirement already satisfied: numpy<2.0,>=1.17 in /usr/local/lib/python3.7/dist-packages (from pytorch-tabnet) (1.19.5)\n",
"Requirement already satisfied: tqdm<5.0,>=4.36 in /usr/local/lib/python3.7/dist-packages (from pytorch-tabnet) (4.41.1)\n",
"Requirement already satisfied: scipy>1.4 in /usr/local/lib/python3.7/dist-packages (from pytorch-tabnet) (1.4.1)\n",
"Requirement already satisfied: scikit_learn>0.21 in /usr/local/lib/python3.7/dist-packages (from pytorch-tabnet) (0.22.2.post1)\n",
"Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch<2.0,>=1.2->pytorch-tabnet) (3.7.4.3)\n",
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit_learn>0.21->pytorch-tabnet) (1.0.1)\n",
"Installing collected packages: pytorch-tabnet\n",
"Successfully installed pytorch-tabnet-3.1.1\n"
]
}
],
"source": [
"pip install pytorch-tabnet"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0fLPTFDANJvy",
"outputId": "9bd6bc9e-a04b-49cf-eb85-296384ac62d5"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: imbalanced-learn in /usr/local/lib/python3.7/dist-packages (0.4.3)\n",
"Requirement already satisfied: scikit-learn>=0.20 in /usr/local/lib/python3.7/dist-packages (from imbalanced-learn) (0.22.2.post1)\n",
"Requirement already satisfied: scipy>=0.13.3 in /usr/local/lib/python3.7/dist-packages (from imbalanced-learn) (1.4.1)\n",
"Requirement already satisfied: numpy>=1.8.2 in /usr/local/lib/python3.7/dist-packages (from imbalanced-learn) (1.19.5)\n",
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20->imbalanced-learn) (1.0.1)\n"
]
}
],
"source": [
" pip install imbalanced-learn"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TtSu1A6q7jJJ",
"outputId": "a664b1d0-5861-4f79-a6e6-95df2e4a543c"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting tsne\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/4c/ea/f4deb02eb49bbc7006624398d3909bbb43cd93efd58e66b74320b5530edd/tsne-0.3.1.tar.gz (547kB)\n",
"\r",
"\u001b[K |▋ | 10kB 6.8MB/s eta 0:00:01\r",
"\u001b[K |█▏ | 20kB 11.2MB/s eta 0:00:01\r",
"\u001b[K |█▉ | 30kB 15.0MB/s eta 0:00:01\r",
"\u001b[K |██▍ | 40kB 18.1MB/s eta 0:00:01\r",
"\u001b[K |███ | 51kB 20.6MB/s eta 0:00:01\r",
"\u001b[K |███▋ | 61kB 22.9MB/s eta 0:00:01\r",
"\u001b[K |████▏ | 71kB 22.1MB/s eta 0:00:01\r",
"\u001b[K |████▉ | 81kB 22.9MB/s eta 0:00:01\r",
"\u001b[K |█████▍ | 92kB 23.9MB/s eta 0:00:01\r",
"\u001b[K |██████ | 102kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████▋ | 112kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████▏ | 122kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████▉ | 133kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████▍ | 143kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████ | 153kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████▋ | 163kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████▏ | 174kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████▊ | 184kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████▍ | 194kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████ | 204kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████▋ | 215kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████▏ | 225kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████▊ | 235kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████▍ | 245kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████ | 256kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████▋ | 266kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████▏ | 276kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████▊ | 286kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████████▍ | 296kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████ | 307kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████▌ | 317kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████▏ | 327kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████▊ | 337kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████████▍ | 348kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████████████ | 358kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████████████▌ | 368kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████████▏ | 378kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████████▊ | 389kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████████▍ | 399kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████████████ | 409kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████████████▌ | 419kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████████████████▏ | 430kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████████████████▊ | 440kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████████████▎ | 450kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████████████ | 460kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████████████▌ | 471kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████████████████▏ | 481kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████████████████▊ | 491kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |█████████████████████████████▎ | 501kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████████████████ | 512kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |██████████████████████████████▌ | 522kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████████████████▏| 532kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |███████████████████████████████▊| 542kB 24.7MB/s eta 0:00:01\r",
"\u001b[K |████████████████████████████████| 552kB 24.7MB/s \n",
"\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
" Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
" Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n",
"Requirement already satisfied: numpy>=1.7.1 in /usr/local/lib/python3.7/dist-packages (from tsne) (1.19.5)\n",
"Requirement already satisfied: scipy>=0.12.0 in /usr/local/lib/python3.7/dist-packages (from tsne) (1.4.1)\n",
"Requirement already satisfied: cython>=0.19.1 in /usr/local/lib/python3.7/dist-packages (from tsne) (0.29.23)\n",
"Building wheels for collected packages: tsne\n",
" Building wheel for tsne (PEP 517) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for tsne: filename=tsne-0.3.1-cp37-cp37m-linux_x86_64.whl size=260482 sha256=e979c270ac532f6a8424de16caa61797ab75017d9683c488fe286210dfd976d7\n",
" Stored in directory: /root/.cache/pip/wheels/3e/d6/fc/58392f18ea8fc4c74e20185d2faeee87a1c1924a182606c6cd\n",
"Successfully built tsne\n",
"Installing collected packages: tsne\n",
"Successfully installed tsne-0.3.1\n"
]
}
],
"source": [
"pip install tsne"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ZdQJ5v4bNNbB",
"outputId": "cea7db10-6176-4dae-a954-5f4f61dcbade"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/externals/six.py:31: FutureWarning: The module is deprecated in version 0.21 and will be removed in version 0.23 since we've dropped support for Python 2.7. Please rely on the official version of six (https://pypi.org/project/six/).\n",
" \"(https://pypi.org/project/six/).\", FutureWarning)\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/utils/deprecation.py:144: FutureWarning: The sklearn.neighbors.base module is deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.neighbors. Anything that cannot be imported from sklearn.neighbors is now part of the private API.\n",
" warnings.warn(message, FutureWarning)\n"
]
}
],
"source": [
"import pandas as pd\n",
"#from tabnet import TabNet, TabNetClassifier\n",
"#from tabnet import TabNet, TabNetClassifier\n",
"import tensorflow as tf\n",
"from tensorflow.keras.models import Model\n",
"from tensorflow.keras.layers import Input, Dense\n",
"import imblearn\n",
"from imblearn.over_sampling import ADASYN, SMOTE\n",
"from imblearn.under_sampling import RandomUnderSampler\n",
"from collections import Counter\n",
"#import umap\n",
"import random \n",
"from sklearn.model_selection import StratifiedKFold\n",
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.manifold import TSNE\n",
"from sklearn.decomposition import FastICA, PCA, FactorAnalysis\n",
"from sklearn.metrics import roc_auc_score, recall_score, f1_score, classification_report, accuracy_score,roc_curve, confusion_matrix, auc,precision_score, log_loss\n",
"pd.set_option('display.max_columns', None)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 226
},
"id": "LFMmD6WGNPEh",
"outputId": "cde67d9b-46d9-490f-fecf-64a798d3813c"
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Age | \n",
" Gender..female.0..male1. | \n",
" ethnicity | \n",
" race | \n",
" Fever | \n",
" Cough | \n",
" SOB | \n",
" Fatigue | \n",
" Sputum | \n",
" Myalgia | \n",
" Diarrhea | \n",
" Nausea.Vomiting | \n",
" Sore.throat | \n",
" Runny.nose.Nasal.congestion | \n",
" Loss.of.smell | \n",
" Loss.of.taste | \n",
" Headahce | \n",
" Chest.discomfort..chest.pain | \n",
" Asymptomatic | \n",
" smoking_history | \n",
" hypertensionhx | \n",
" diabeteshx | \n",
" asthmahx | \n",
" coronaryheartdiseasehx | \n",
" copdhx | \n",
" heartfailurehx | \n",
" carcinomahx | \n",
" immunosuppressionhx | \n",
" ckdhx | \n",
" ALT | \n",
" CRP | \n",
" D.dimer | \n",
" Ferritin | \n",
" HR | \n",
" LDH | \n",
" Lymphocyte | \n",
" SpO2 | \n",
" Procalcitonin | \n",
" RR | \n",
" Systolic.BP | \n",
" Temperature | \n",
" Troponin | \n",
" ICU.or.not | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 23 | \n",
" 0 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 31 | \n",
" 2.2 | \n",
" 857 | \n",
" 203.9 | \n",
" 117 | \n",
" 345 | \n",
" 40.6 | \n",
" 96 | \n",
" 0.28 | \n",
" 18 | \n",
" 89 | \n",
" 37.0 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 25 | \n",
" 1 | \n",
" 3 | \n",
" 7 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 37 | \n",
" 11.7 | \n",
" 183 | \n",
" 587.1 | \n",
" 132 | \n",
" 483 | \n",
" 6.8 | \n",
" 98 | \n",
" 0.64 | \n",
" 28 | \n",
" 107 | \n",
" 39.5 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 28 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 18 | \n",
" 22.0 | \n",
" 389 | \n",
" 932.1 | \n",
" 124 | \n",
" 562 | \n",
" 10.4 | \n",
" 88 | \n",
" 1.81 | \n",
" 17 | \n",
" 123 | \n",
" 39.1 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 28 | \n",
" 1 | \n",
" 1 | \n",
" 7 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 183 | \n",
" 10.5 | \n",
" 370 | \n",
" 2068.0 | \n",
" 123 | \n",
" 706 | \n",
" 13.4 | \n",
" 94 | \n",
" 0.92 | \n",
" 20 | \n",
" 120 | \n",
" 38.9 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 4 | \n",
" 30 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 218 | \n",
" 6.7 | \n",
" 349 | \n",
" 2141.0 | \n",
" 101 | \n",
" 688 | \n",
" 17.9 | \n",
" 98 | \n",
" 0.37 | \n",
" 15 | \n",
" 130 | \n",
" 37.1 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Age Gender..female.0..male1. ethnicity race Fever Cough SOB Fatigue \\\n",
"0 23 0 2 1 0 0 0 0 \n",
"1 25 1 3 7 1 1 0 1 \n",
"2 28 1 2 1 1 1 1 0 \n",
"3 28 1 1 7 1 1 1 0 \n",
"4 30 1 2 1 1 1 0 1 \n",
"\n",
" Sputum Myalgia Diarrhea Nausea.Vomiting Sore.throat \\\n",
"0 0 0 0 0 0 \n",
"1 1 1 0 0 0 \n",
"2 0 0 1 1 1 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
"\n",
" Runny.nose.Nasal.congestion Loss.of.smell Loss.of.taste Headahce \\\n",
"0 0 0 0 0 \n",
"1 0 0 0 1 \n",
"2 1 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"\n",
" Chest.discomfort..chest.pain Asymptomatic smoking_history \\\n",
"0 0 1 0 \n",
"1 1 0 0 \n",
"2 1 0 0 \n",
"3 0 0 0 \n",
"4 0 0 0 \n",
"\n",
" hypertensionhx diabeteshx asthmahx coronaryheartdiseasehx copdhx \\\n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
"\n",
" heartfailurehx carcinomahx immunosuppressionhx ckdhx ALT CRP \\\n",
"0 0 0 0 0 31 2.2 \n",
"1 0 0 0 0 37 11.7 \n",
"2 0 0 0 0 18 22.0 \n",
"3 0 0 0 0 183 10.5 \n",
"4 0 0 0 0 218 6.7 \n",
"\n",
" D.dimer Ferritin HR LDH Lymphocyte SpO2 Procalcitonin RR \\\n",
"0 857 203.9 117 345 40.6 96 0.28 18 \n",
"1 183 587.1 132 483 6.8 98 0.64 28 \n",
"2 389 932.1 124 562 10.4 88 1.81 17 \n",
"3 370 2068.0 123 706 13.4 94 0.92 20 \n",
"4 349 2141.0 101 688 17.9 98 0.37 15 \n",
"\n",
" Systolic.BP Temperature Troponin ICU.or.not \n",
"0 89 37.0 0.01 1 \n",
"1 107 39.5 0.01 1 \n",
"2 123 39.1 0.01 1 \n",
"3 120 38.9 0.01 1 \n",
"4 130 37.1 0.01 1 "
]
},
"execution_count": 5,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"data_icu = pd.read_csv('ICUMICE2754.csv')\n",
"data_icu.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 226
},
"id": "oUKQ3JWMNYCC",
"outputId": "3e50789e-101d-4d1c-f2cb-9c5f8312aa2e"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Age | \n",
" Gender | \n",
" ethnicity | \n",
" race | \n",
" Fever | \n",
" Cough | \n",
" SOB | \n",
" Fatigue | \n",
" Sputum | \n",
" Myalgia | \n",
" Diarrhea | \n",
" Nausea_Vomiting | \n",
" Sore_throat | \n",
" Runny_nose_Nasal_congestion | \n",
" Loss_of_smell | \n",
" Loss_of_taste | \n",
" Headahce | \n",
" Chest_discomfort__chest_pain | \n",
" Asymptomatic | \n",
" smoking_history | \n",
" hypertensionhx | \n",
" diabeteshx | \n",
" asthmahx | \n",
" coronaryheartdiseasehx | \n",
" copdhx | \n",
" heartfailurehx | \n",
" carcinomahx | \n",
" immunosuppressionhx | \n",
" ckdhx | \n",
" ALT | \n",
" CRP | \n",
" D_dimer | \n",
" Ferritin | \n",
" HR | \n",
" LDH | \n",
" Lymphocyte | \n",
" SpO2 | \n",
" Procalcitonin | \n",
" RR | \n",
" Systolic_BP | \n",
" Temperature | \n",
" Troponin | \n",
" ICU_or_not | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 23 | \n",
" 0 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 31 | \n",
" 2.2 | \n",
" 857 | \n",
" 203.9 | \n",
" 117 | \n",
" 345 | \n",
" 40.6 | \n",
" 96 | \n",
" 0.28 | \n",
" 18 | \n",
" 89 | \n",
" 37.0 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 25 | \n",
" 1 | \n",
" 3 | \n",
" 7 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 37 | \n",
" 11.7 | \n",
" 183 | \n",
" 587.1 | \n",
" 132 | \n",
" 483 | \n",
" 6.8 | \n",
" 98 | \n",
" 0.64 | \n",
" 28 | \n",
" 107 | \n",
" 39.5 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 28 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 18 | \n",
" 22.0 | \n",
" 389 | \n",
" 932.1 | \n",
" 124 | \n",
" 562 | \n",
" 10.4 | \n",
" 88 | \n",
" 1.81 | \n",
" 17 | \n",
" 123 | \n",
" 39.1 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 28 | \n",
" 1 | \n",
" 1 | \n",
" 7 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 183 | \n",
" 10.5 | \n",
" 370 | \n",
" 2068.0 | \n",
" 123 | \n",
" 706 | \n",
" 13.4 | \n",
" 94 | \n",
" 0.92 | \n",
" 20 | \n",
" 120 | \n",
" 38.9 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
" 4 | \n",
" 30 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 218 | \n",
" 6.7 | \n",
" 349 | \n",
" 2141.0 | \n",
" 101 | \n",
" 688 | \n",
" 17.9 | \n",
" 98 | \n",
" 0.37 | \n",
" 15 | \n",
" 130 | \n",
" 37.1 | \n",
" 0.01 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Age Gender ethnicity race Fever Cough SOB Fatigue Sputum Myalgia \\\n",
"0 23 0 2 1 0 0 0 0 0 0 \n",
"1 25 1 3 7 1 1 0 1 1 1 \n",
"2 28 1 2 1 1 1 1 0 0 0 \n",
"3 28 1 1 7 1 1 1 0 0 0 \n",
"4 30 1 2 1 1 1 0 1 0 0 \n",
"\n",
" Diarrhea Nausea_Vomiting Sore_throat Runny_nose_Nasal_congestion \\\n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 1 1 1 1 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"\n",
" Loss_of_smell Loss_of_taste Headahce Chest_discomfort__chest_pain \\\n",
"0 0 0 0 0 \n",
"1 0 0 1 1 \n",
"2 0 0 0 1 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"\n",
" Asymptomatic smoking_history hypertensionhx diabeteshx asthmahx \\\n",
"0 1 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
"\n",
" coronaryheartdiseasehx copdhx heartfailurehx carcinomahx \\\n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"\n",
" immunosuppressionhx ckdhx ALT CRP D_dimer Ferritin HR LDH \\\n",
"0 0 0 31 2.2 857 203.9 117 345 \n",
"1 0 0 37 11.7 183 587.1 132 483 \n",
"2 0 0 18 22.0 389 932.1 124 562 \n",
"3 0 0 183 10.5 370 2068.0 123 706 \n",
"4 0 0 218 6.7 349 2141.0 101 688 \n",
"\n",
" Lymphocyte SpO2 Procalcitonin RR Systolic_BP Temperature Troponin \\\n",
"0 40.6 96 0.28 18 89 37.0 0.01 \n",
"1 6.8 98 0.64 28 107 39.5 0.01 \n",
"2 10.4 88 1.81 17 123 39.1 0.01 \n",
"3 13.4 94 0.92 20 120 38.9 0.01 \n",
"4 17.9 98 0.37 15 130 37.1 0.01 \n",
"\n",
" ICU_or_not \n",
"0 1 \n",
"1 1 \n",
"2 1 \n",
"3 1 \n",
"4 1 "
]
},
"execution_count": 6,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"data_icu.columns = data_icu.columns.str.replace('.','_')\n",
"data_icu = data_icu.rename(columns={'Gender__female_0__male1_':'Gender'})\n",
"data_icu.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "jVJ62zq1RdEa"
},
"outputs": [],
"source": [
"X = data_icu.drop(columns='ICU_or_not')\n",
"y= data_icu['ICU_or_not']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5iLr69ziPxqy",
"outputId": "17191d97-b7f7-4158-8edb-9408fd054b47"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Resampled dataset shape Counter({1: 836, 0: 835})\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
" warnings.warn(msg, category=FutureWarning)\n"
]
}
],
"source": [
"ada = ADASYN(random_state=0, n_neighbors=20)\n",
"X_res, y_res = ada.fit_resample(X, y)\n",
"print('Resampled dataset shape {}'.format(Counter(y_res)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0ild212ijoEG",
"outputId": "aea4893c-461f-4e16-c655-043e2f2aaca0"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Resampled dataset shape Counter({1: 836, 0: 835})\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
" warnings.warn(msg, category=FutureWarning)\n"
]
}
],
"source": [
"smote = SMOTE(random_state=0)\n",
"X_resm, y_resm = ada.fit_resample(X, y)\n",
"print('Resampled dataset shape {}'.format(Counter(y_resm)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xlBN3hsNI3Zh",
"outputId": "97ee2b34-a0bf-49aa-90cd-97db84a7b67c"
},
"outputs": [
{
"data": {
"text/plain": [
"(1671, 42)"
]
},
"execution_count": 10,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"transformer = FastICA(random_state=0)\n",
"X_transformed = transformer.fit_transform(X_res)\n",
"X_transformed.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "-6fRKosCkAH4",
"outputId": "f39af7a7-df42-4e88-8ca9-98cef56ab6de"
},
"outputs": [
{
"data": {
"text/plain": [
"(1671, 42)"
]
},
"execution_count": 11,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"transformer = PCA(random_state=0)\n",
"X_transformed0 = transformer.fit_transform(X_res)\n",
"X_transformed0.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "yRHyXaoHNu_L"
},
"outputs": [],
"source": [
"from pytorch_tabnet.tab_model import TabNetClassifier"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X_transformed, y_res, \n",
" test_size=0.1, random_state=80)\n",
"target = data_icu['ICU_or_not']\n",
"skf = StratifiedKFold(n_splits=5)\n",
"fold_no = 1\n",
"for train_index, test_index in skf.split(data_icu, target):\n",
" train = data_icu.loc[train_index,:]\n",
" test = data_icu.loc[test_index,:]\n",
" print('Fold',str(fold_no),'Class Ratio:',sum(test['ICU_or_not'])/len(test['ICU_or_not']))\n",
" fold_no += 1\n",
"def train_model(train, test, fold_no):\n",
" \n",
" \n",
" clf = TabNetClassifier(n_d=64,n_shared=2,mask_type='entmax', momentum=0.3,n_steps=3,n_independent=2,lambda_sparse=0.003,gamma=2.7)\n",
" clf.fit(\n",
" X_train=X_train, y_train=y_train,\n",
" eval_set=[(X_train, y_train), (X_test, y_test)],\n",
" eval_name=['train', 'test'],\n",
" eval_metric=['auc'], max_epochs=200, batch_size=128, patience=60\n",
" \n",
" )\n",
" predictions = clf.predict(X_test)\n",
" #print('Fold',str(fold_no),'Accuracy:',recall_score(y_test,predictions))\n",
" print('Roc score is',np.mean(roc_auc_score(y_test,predictions)))\n",
" print('f1 score is'np.mean(f1_score(y_test,predictions)))\n",
" print('accuracy score is'np.mean(accuracy_score(y_test,predictions)))\n",
" print('recall score is'np.mean(recall_score(y_test,predictions)))\n",
" print('precision score is'np.mean(precision_score(y_test,predictions))) \n",
"import numpy as np\n",
"\n",
"fold_no = 1\n",
"for train_index, test_index in skf.split(data_icu, target):\n",
" train = data_icu.loc[train_index,:]\n",
" test = data_icu.loc[test_index,:]\n",
" train_model(train,test,fold_no)\n",
" fold_no += 1 "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tab_pred = clf.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 313
},
"id": "oqbEgJJNFNi-",
"outputId": "157c3fb2-4b78-46f2-a7f8-902a2f8684e5"
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" async function download(id, filename, size) {\n",
" if (!google.colab.kernel.accessAllowed) {\n",
" return;\n",
" }\n",
" const div = document.createElement('div');\n",
" const label = document.createElement('label');\n",
" label.textContent = `Downloading \"${filename}\": `;\n",
" div.appendChild(label);\n",
" const progress = document.createElement('progress');\n",
" progress.max = size;\n",
" div.appendChild(progress);\n",
" document.body.appendChild(div);\n",
"\n",
" const buffers = [];\n",
" let downloaded = 0;\n",
"\n",
" const channel = await google.colab.kernel.comms.open(id);\n",
" // Send a message to notify the kernel that we're ready.\n",
" channel.send({})\n",
"\n",
" for await (const message of channel.messages) {\n",
" // Send a message to notify the kernel that we're ready.\n",
" channel.send({})\n",
" if (message.buffers) {\n",
" for (const buffer of message.buffers) {\n",
" buffers.push(buffer);\n",
" downloaded += buffer.byteLength;\n",
" progress.value = downloaded;\n",
" }\n",
" }\n",
" }\n",
" const blob = new Blob(buffers, {type: 'application/binary'});\n",
" const a = document.createElement('a');\n",
" a.href = window.URL.createObjectURL(blob);\n",
" a.download = filename;\n",
" div.appendChild(a);\n",
" a.click();\n",
" div.remove();\n",
" }\n",
" "
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"download(\"download_897462b8-3bb2-438a-a17d-2d874801eb43\", \"trvalicu.pdf\", 16269)"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"