Buckets:

download
raw
92.9 kB
{"cells":[{"cell_type":"code","source":["!pip install rdkit"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"XhQIgVnbrLsb","outputId":"8badbc51-2983-4749-9947-25257eb12a02"},"id":"XhQIgVnbrLsb","execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting rdkit\n"," Downloading rdkit-2025.3.5-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from rdkit) (2.0.2)\n","Requirement already satisfied: Pillow in /usr/local/lib/python3.11/dist-packages (from rdkit) (11.3.0)\n","Downloading rdkit-2025.3.5-cp311-cp311-manylinux_2_28_x86_64.whl (36.3 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m36.3/36.3 MB\u001b[0m \u001b[31m39.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: rdkit\n","Successfully installed rdkit-2025.3.5\n"]}]},{"cell_type":"code","execution_count":null,"id":"ae2e33a1-b2ad-4ad6-b8e9-c82c9a742d33","metadata":{"id":"ae2e33a1-b2ad-4ad6-b8e9-c82c9a742d33"},"outputs":[],"source":["import numpy as np\n","import pandas as pd\n","from rdkit import Chem\n","from sklearn.model_selection import train_test_split\n","from sklearn.metrics import roc_auc_score\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Dropout\n","from tensorflow.keras.callbacks import EarlyStopping\n","from tensorflow.keras.optimizers import Adam\n","from tensorflow.keras.layers import LSTM, Bidirectional, Dense, Embedding\n","from tensorflow.keras.preprocessing.sequence import pad_sequences\n","from tensorflow.keras.preprocessing.text import Tokenizer\n","from sklearn.metrics import confusion_matrix"]},{"cell_type":"code","execution_count":null,"id":"90e0cbb1-330e-4a5d-bfb7-59b53631db4f","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"90e0cbb1-330e-4a5d-bfb7-59b53631db4f","outputId":"ead64729-571e-4939-8167-e006cca1a620"},"outputs":[{"output_type":"stream","name":"stderr","text":["[14:40:36] Explicit valence for atom # 0 N, 4, is greater than permitted\n","[14:40:36] Can't kekulize mol. Unkekulized atoms: 9\n","[14:40:37] Can't kekulize mol. Unkekulized atoms: 4\n","[14:40:37] Can't kekulize mol. Unkekulized atoms: 4\n"]}],"source":["clintox_df = pd.read_csv(\"/content/clintox.csv\") #upload the clintox.csv from this project github rpeo\n","\n","# Preprocess SMILES strings\n","clintox_df['Molecule'] = clintox_df['smiles'].apply(Chem.MolFromSmiles)\n","\n","# Tokenize SMILES strings\n","tokenizer = Tokenizer(char_level=True)\n","tokenizer.fit_on_texts(clintox_df['smiles'])\n","max_len = max(len(smiles) for smiles in clintox_df['smiles'])\n","X_seq = tokenizer.texts_to_sequences(clintox_df['smiles'])\n","X_pad = pad_sequences(X_seq, maxlen=max_len)\n","\n","# Encode labels\n","y_encoded = clintox_df['FDA_APPROVED'].values"]},{"cell_type":"code","execution_count":null,"id":"3e24b205-7043-4baf-a25f-532d5db88959","metadata":{"id":"3e24b205-7043-4baf-a25f-532d5db88959"},"outputs":[],"source":["X_train, X_test, y_train, y_test = train_test_split(X_pad, y_encoded, test_size=0.2, random_state=42)"]},{"cell_type":"markdown","id":"0986c23e-7e1c-4fa8-859e-a8549a3767f9","metadata":{"id":"0986c23e-7e1c-4fa8-859e-a8549a3767f9"},"source":["LSTM for Clintox dataset"]},{"cell_type":"code","execution_count":null,"id":"15746a38-3f8d-4255-81db-b9da47372cc5","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"15746a38-3f8d-4255-81db-b9da47372cc5","outputId":"30c23931-3a35-4eeb-950e-8d32929433d1"},"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 43ms/step - accuracy: 0.9251 - loss: 0.3555 - val_accuracy: 0.9412 - val_loss: 0.2316\n","Epoch 2/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.9241 - loss: 0.2849 - val_accuracy: 0.9412 - val_loss: 0.2278\n","Epoch 3/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9389 - loss: 0.2365 - val_accuracy: 0.9412 - val_loss: 0.2303\n","Epoch 4/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9318 - loss: 0.2433 - val_accuracy: 0.9412 - val_loss: 0.2311\n","Epoch 5/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9412 - loss: 0.2296 - val_accuracy: 0.9412 - val_loss: 0.2315\n","Epoch 6/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9374 - loss: 0.2337 - val_accuracy: 0.9412 - val_loss: 0.2349\n","Epoch 7/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9338 - loss: 0.2375 - val_accuracy: 0.9412 - val_loss: 0.2330\n","Epoch 8/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9316 - loss: 0.2470 - val_accuracy: 0.9412 - val_loss: 0.2327\n","Epoch 9/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9283 - loss: 0.2589 - val_accuracy: 0.9412 - val_loss: 0.2311\n","Epoch 10/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9318 - loss: 0.2388 - val_accuracy: 0.9412 - val_loss: 0.2348\n","Epoch 11/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9381 - loss: 0.2243 - val_accuracy: 0.9412 - val_loss: 0.2317\n","Epoch 12/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 27ms/step - accuracy: 0.9462 - loss: 0.2122 - val_accuracy: 0.9412 - val_loss: 0.2340\n","Epoch 13/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9344 - loss: 0.2268 - val_accuracy: 0.9412 - val_loss: 0.2311\n","Epoch 14/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9454 - loss: 0.1975 - val_accuracy: 0.9412 - val_loss: 0.2391\n","Epoch 15/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9439 - loss: 0.2138 - val_accuracy: 0.9412 - val_loss: 0.2383\n","Epoch 16/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - accuracy: 0.9393 - loss: 0.2244 - val_accuracy: 0.9412 - val_loss: 0.2269\n","Epoch 17/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 28ms/step - accuracy: 0.9407 - loss: 0.2151 - val_accuracy: 0.9412 - val_loss: 0.2302\n","Epoch 18/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9412 - loss: 0.2115 - val_accuracy: 0.9412 - val_loss: 0.2272\n","Epoch 19/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9410 - loss: 0.2135 - val_accuracy: 0.9412 - val_loss: 0.2264\n","Epoch 20/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9224 - loss: 0.2539 - val_accuracy: 0.9412 - val_loss: 0.2189\n","Epoch 21/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9288 - loss: 0.2390 - val_accuracy: 0.9412 - val_loss: 0.2198\n","Epoch 22/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9381 - loss: 0.2113 - val_accuracy: 0.9412 - val_loss: 0.2169\n","Epoch 23/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9319 - loss: 0.2144 - val_accuracy: 0.9412 - val_loss: 0.2239\n","Epoch 24/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9167 - loss: 0.2793 - val_accuracy: 0.9412 - val_loss: 0.2194\n","Epoch 25/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - accuracy: 0.9478 - loss: 0.1789 - val_accuracy: 0.9412 - val_loss: 0.2287\n","Epoch 26/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 30ms/step - accuracy: 0.9309 - loss: 0.2278 - val_accuracy: 0.9412 - val_loss: 0.2080\n","Epoch 27/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9362 - loss: 0.2111 - val_accuracy: 0.9412 - val_loss: 0.2125\n","Epoch 28/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9390 - loss: 0.2046 - val_accuracy: 0.9412 - val_loss: 0.2080\n","Epoch 29/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9446 - loss: 0.1826 - val_accuracy: 0.9412 - val_loss: 0.1988\n","Epoch 30/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9362 - loss: 0.2017 - val_accuracy: 0.9412 - val_loss: 0.1922\n","Epoch 31/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9372 - loss: 0.1982 - val_accuracy: 0.9412 - val_loss: 0.1918\n","Epoch 32/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9427 - loss: 0.1826 - val_accuracy: 0.9412 - val_loss: 0.1847\n","Epoch 33/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.9488 - loss: 0.1632 - val_accuracy: 0.9454 - val_loss: 0.1808\n","Epoch 34/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 27ms/step - accuracy: 0.9541 - loss: 0.1517 - val_accuracy: 0.9412 - val_loss: 0.1699\n","Epoch 35/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9453 - loss: 0.1744 - val_accuracy: 0.9412 - val_loss: 0.1847\n","Epoch 36/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9527 - loss: 0.1458 - val_accuracy: 0.9412 - val_loss: 0.1917\n","Epoch 37/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9524 - loss: 0.1500 - val_accuracy: 0.9286 - val_loss: 0.1670\n","Epoch 38/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9546 - loss: 0.1319 - val_accuracy: 0.9454 - val_loss: 0.1443\n","Epoch 39/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9503 - loss: 0.1404 - val_accuracy: 0.9454 - val_loss: 0.1665\n","Epoch 40/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9598 - loss: 0.1233 - val_accuracy: 0.8571 - val_loss: 0.3013\n","Epoch 41/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9575 - loss: 0.1561 - val_accuracy: 0.9286 - val_loss: 0.1854\n","Epoch 42/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9533 - loss: 0.1488 - val_accuracy: 0.9496 - val_loss: 0.1533\n","Epoch 43/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9399 - loss: 0.1486 - val_accuracy: 0.8866 - val_loss: 0.2367\n","Epoch 44/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9516 - loss: 0.1630 - val_accuracy: 0.9370 - val_loss: 0.1865\n","Epoch 45/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9522 - loss: 0.1470 - val_accuracy: 0.9286 - val_loss: 0.1711\n","Epoch 46/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9380 - loss: 0.1498 - val_accuracy: 0.9454 - val_loss: 0.1524\n","Epoch 47/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9591 - loss: 0.1145 - val_accuracy: 0.9412 - val_loss: 0.1509\n","Epoch 48/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9520 - loss: 0.1179 - val_accuracy: 0.8824 - val_loss: 0.2281\n","Epoch 49/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9187 - loss: 0.1809 - val_accuracy: 0.9454 - val_loss: 0.1497\n","Epoch 50/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9571 - loss: 0.1213 - val_accuracy: 0.9244 - val_loss: 0.1628\n","Epoch 51/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - accuracy: 0.9619 - loss: 0.1082 - val_accuracy: 0.9412 - val_loss: 0.1817\n","Epoch 52/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.9626 - loss: 0.1100 - val_accuracy: 0.9454 - val_loss: 0.1820\n","Epoch 53/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9653 - loss: 0.0894 - val_accuracy: 0.9412 - val_loss: 0.1619\n","Epoch 54/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9635 - loss: 0.0935 - val_accuracy: 0.9412 - val_loss: 0.1541\n","Epoch 55/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9706 - loss: 0.0786 - val_accuracy: 0.9454 - val_loss: 0.1539\n","Epoch 56/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9608 - loss: 0.0896 - val_accuracy: 0.9580 - val_loss: 0.1249\n","Epoch 57/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9752 - loss: 0.0807 - val_accuracy: 0.9538 - val_loss: 0.1349\n","Epoch 58/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9833 - loss: 0.0686 - val_accuracy: 0.9496 - val_loss: 0.1299\n","Epoch 59/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9775 - loss: 0.0825 - val_accuracy: 0.9580 - val_loss: 0.1445\n","Epoch 60/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9768 - loss: 0.0587 - val_accuracy: 0.9538 - val_loss: 0.1331\n","Epoch 61/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9830 - loss: 0.0553 - val_accuracy: 0.9244 - val_loss: 0.1794\n","Epoch 62/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9710 - loss: 0.0687 - val_accuracy: 0.9370 - val_loss: 0.1391\n","Epoch 63/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9803 - loss: 0.0618 - val_accuracy: 0.9496 - val_loss: 0.1451\n","Epoch 64/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9750 - loss: 0.0622 - val_accuracy: 0.9580 - val_loss: 0.1523\n","Epoch 65/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9881 - loss: 0.0417 - val_accuracy: 0.9538 - val_loss: 0.1572\n","Epoch 66/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9798 - loss: 0.0616 - val_accuracy: 0.9538 - val_loss: 0.1633\n","Epoch 67/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9762 - loss: 0.0757 - val_accuracy: 0.9580 - val_loss: 0.1456\n","Epoch 68/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9740 - loss: 0.0614 - val_accuracy: 0.9622 - val_loss: 0.1797\n","Epoch 69/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9792 - loss: 0.0502 - val_accuracy: 0.9622 - val_loss: 0.1575\n","Epoch 70/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 28ms/step - accuracy: 0.9843 - loss: 0.0572 - val_accuracy: 0.9580 - val_loss: 0.1757\n","Epoch 71/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 27ms/step - accuracy: 0.9759 - loss: 0.0573 - val_accuracy: 0.9454 - val_loss: 0.1550\n","Epoch 72/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9866 - loss: 0.0393 - val_accuracy: 0.9580 - val_loss: 0.1791\n","Epoch 73/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9809 - loss: 0.0675 - val_accuracy: 0.9496 - val_loss: 0.1767\n","Epoch 74/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9604 - loss: 0.1132 - val_accuracy: 0.9538 - val_loss: 0.1758\n","Epoch 75/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9736 - loss: 0.0616 - val_accuracy: 0.9580 - val_loss: 0.1606\n","Epoch 76/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9806 - loss: 0.0503 - val_accuracy: 0.9706 - val_loss: 0.1643\n","Epoch 77/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9771 - loss: 0.0407 - val_accuracy: 0.9496 - val_loss: 0.1695\n","Epoch 78/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9928 - loss: 0.0323 - val_accuracy: 0.9286 - val_loss: 0.1486\n","Epoch 79/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9834 - loss: 0.0452 - val_accuracy: 0.9580 - val_loss: 0.1418\n","Epoch 80/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9799 - loss: 0.0580 - val_accuracy: 0.9370 - val_loss: 0.1349\n","Epoch 81/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9736 - loss: 0.0487 - val_accuracy: 0.9580 - val_loss: 0.1342\n","Epoch 82/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9797 - loss: 0.0617 - val_accuracy: 0.9664 - val_loss: 0.1859\n","Epoch 83/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9861 - loss: 0.0409 - val_accuracy: 0.9496 - val_loss: 0.1664\n","Epoch 84/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9887 - loss: 0.0308 - val_accuracy: 0.9538 - val_loss: 0.1599\n","Epoch 85/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9940 - loss: 0.0299 - val_accuracy: 0.9622 - val_loss: 0.1753\n","Epoch 86/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9847 - loss: 0.0496 - val_accuracy: 0.9496 - val_loss: 0.3367\n","Epoch 87/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9549 - loss: 0.1265 - val_accuracy: 0.9538 - val_loss: 0.1635\n","Epoch 88/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.9741 - loss: 0.0724 - val_accuracy: 0.9412 - val_loss: 0.1528\n","Epoch 89/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - accuracy: 0.9790 - loss: 0.0510 - val_accuracy: 0.9580 - val_loss: 0.1852\n","Epoch 90/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.9831 - loss: 0.0419 - val_accuracy: 0.9580 - val_loss: 0.1746\n","Epoch 91/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9839 - loss: 0.0393 - val_accuracy: 0.9496 - val_loss: 0.1726\n","Epoch 92/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9933 - loss: 0.0320 - val_accuracy: 0.9454 - val_loss: 0.1637\n","Epoch 93/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9909 - loss: 0.0349 - val_accuracy: 0.9538 - val_loss: 0.1754\n","Epoch 94/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9737 - loss: 0.0566 - val_accuracy: 0.9496 - val_loss: 0.1539\n","Epoch 95/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9924 - loss: 0.0380 - val_accuracy: 0.9370 - val_loss: 0.3952\n","Epoch 96/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9578 - loss: 0.1842 - val_accuracy: 0.9538 - val_loss: 0.1770\n","Epoch 97/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9787 - loss: 0.0689 - val_accuracy: 0.9580 - val_loss: 0.1619\n","Epoch 98/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9818 - loss: 0.0528 - val_accuracy: 0.9580 - val_loss: 0.1419\n","Epoch 99/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9764 - loss: 0.0458 - val_accuracy: 0.9580 - val_loss: 0.1425\n","Epoch 100/100\n","\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9914 - loss: 0.0287 - val_accuracy: 0.9622 - val_loss: 0.1237\n","\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - accuracy: 0.9583 - loss: 0.1556\n","Test Loss: 0.1504521518945694\n","Test Accuracy: 0.9562289714813232\n","\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step\n","ROC AUC Score: 0.9271911663216011\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 800x600 with 2 Axes>"],"image/png":"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dGm9//77BX4vACgsmkTARQUGBkqSzpw5U6Dj9+/fLw8PD0VFRdltDwsLU3BwsPbv32+3vXLlyqYxypQpo5MnT15nxWYPPfSQGjZsqCeeeEIVKlRQ165dNXv27Gs2jJfqjI6ONu2rWbOmjh07prNnz9ptv/KzlClTRpIK9VnatGmjgIAAzZo1SykpKbrrrrtM3+UleXl5Gj9+vG655RZZrVaVK1dO5cuX15YtW5Senl7g97zpppsKdZHKm2++qZCQEG3evFkTJ05UaGhogV8LAIVFkwi4qMDAQIWHh+u3334r1OuuvHDkajw9PfPdbhjGdb/HpfPlLvHx8dGaNWu0bNkyPfLII9qyZYseeugh3XvvvaZj/41/81kusVqt6tSpk6ZPn6558+ZdNUWUpNGjR2vIkCFq0qSJPvnkE3377bdaunSpbr311gInptLF76cwNm3apCNHjkiStm7dWqjXAkBh0SQCLqxdu3bau3ev1q1b94/HRkREKC8vT7t377bbfvjwYZ06dcp2pXJRKFOmjN2VwJdcmVZKkoeHh1q0aKG33npL27dv12uvvaYVK1Zo5cqV+Y59qc6dO3ea9v3+++8qV66c/Pz8/t0HuIru3btr06ZNOnPmTL4X+1wyZ84cNW/eXFOmTFHXrl3VsmVLxcXFmb6TgjbsBXH27Fk99thjiomJUZ8+fTR27Fht2LChyMYHgCvRJAIu7JlnnpGfn5+eeOIJHT582LR/7969evvttyVdnC6VZLoC+a233pIktW3btsjqioyMVHp6urZs2WLblpqaqnnz5tkdd+LECdNrLy0qfeWyPJdUrFhRderU0fTp0+2art9++01LliyxfU5HaN68uV555RW98847CgsLu+pxnp6eppTy888/199//2237VIzm19DXVjPPvusDhw4oOnTp+utt95SlSpVlJCQcNXvEQD+LRbTBlxYZGSkZs6cqYceekg1a9a0u+PKDz/8oM8//1w9e/aUJNWuXVsJCQn64IMPdOrUKTVt2lQ//fSTpk+fro4dO151eZXr0bVrVz377LO6//77NWjQIGVmZmry5MmqXr263YUbo0aN0po1a9S2bVtFREToyJEjeu+993TzzTerUaNGVx3/jTfeUOvWrRUbG6tevXrp3LlzmjRpkoKCgjRixIgi+xxX8vDw0AsvvPCPx7Vr106jRo3SY489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i4vTV199ZZsifu211xQeHq7o6GhJ0l9//aUuXbooODhYISEh6tChg/7880/beBcuXNCQIUMUHByssmXL6plnntGVa/1fOd2clZWlZ599VpUqVZLValVUVJSmTJmiP//8U82bN5cklSlTRhaLRT179pQk5eXlKSkpSVWrVpWPj49q166tOXPm2L3P119/rerVq8vHx0fNmze3qxMA3AVNIoAi4ePjo+zsbEnS8uXLtXPnTi1dulQLFy5UTk6O4uPjFRAQoO+++07ff/+9/P391apVK9trxo0bp2nTpul///uf1q5dqxMnTmjevHnXfM9HH31Un376qSZOnKgdO3bo/fffl7+/vypVqqS5c+dKknbu3KnU1FS9/fbbkqSkpCTNmDFDycnJ2rZtmwYPHqyHH35Yq1evlnSxme3UqZPat2+vzZs364knntBzzz3nqK8NAFwW080A/hXDMLR8+XJ9++23GjhwoI4ePSo/Pz999NFHtmnmTz75RHl5efroo49ksVgkSVOnTlVwcLBWrVqlli1basKECUpMTFSnTp0kScnJyfr222+v+r67du3S7NmztXTpUsXFxUmSqlWrZtt/aWo6NDRUwcHBki4mj6NHj9ayZcsUGxtre83atWv1/vvvq2nTppo8ebIiIyM1btw4SVJ0dLS2bt2q119/vQi/NQBwfTSJAK7LwoUL5e/vr5ycHOXl5al79+4aMWKE+vfvr1q1atmdh/jrr79qz549CggIsBvj/Pnz2rt3r9LT05Wamqr69evb9pUqVUp33nmnacr5ks2bN8vT01NNmzYtcM179uxRZmam7r33Xrvt2dnZqlu3riRpx44ddnVIsjWUAOBOaBIBXJfmzZtr8uTJ8vb2Vnh4uEqV+n9/nfj5+dkdm5GRoXr16iklJcU0Tvny5a/r/X18fAr9moyMDEnSokWLdNNNN9nts1qt11UHAJRUNIkAroufn5+ioqIKdOwdd9yhWbNmKTQ0VIGBgfkeU7FiRa1fv15NmjSRJOXm5mrjxo2644478j2+Vq1aysvL0+rVq23TzZe7lGReuHDBti0mJkZWq1UHDhy4agJZs2ZNffXVV3bbfvzxx3/+kABQwnDhCgCH69Gjh8qVK6cOHTrou+++0759+7Rq1SoNGjRIBw8elCQ99dRTGjNmjObPn6/ff/9d//3vf6+5xmGVKlWUkJCgxx9/XPPnz7eNOXv2bElSRESELBaLFi5cqKNHjyojI0MBAQEaNmyYBg8erOnTp2vv3r365ZdfNGnSJE2fPl2S1LdvX+3evVvDhw/Xzp07NXPmTE2bNs3RXxEAuByaRAAO5+vrqzVr1qhy5crq1KmTatasqV69eun8+fO2ZHHo0KF65JFHlJCQoNjYWAUEBOj++++/5riTJ0/WAw88oP/+97+qUaOGevfurbNnz0qSbrrpJo0cOVLPPfecKlSooAEDBkiSXnnlFb344otKSkpSzZo11apVKy1atEhVq1aVJFWuXFlz587V/PnzVbt2bSUnJ2v06NEO/HYAwDVZjKudFQ4AAAC3RZIIAAAAE5pEAAAAmNAkAgAAwIQmEQAAACY0iQAAADChSQQAAIAJTSIAAABMaBIBAABgQpMIAAAAE5pEAAAAmNAkAgAAwOT/A7EiqN1TOqZ0AAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["model = Sequential()\n","model.add(LSTM(units=64, input_shape=(X_train.shape[1], 1)))\n","model.add(Dropout(0.2))\n","model.add(Dense(units=1, activation='sigmoid'))\n","\n","# Compile the model\n","optimizer = Adam(learning_rate=0.001)\n","#optimizer = Adam(lr=0.001) #original code\n","model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])\n","\n","# Define early stopping callback\n","early_stopping = EarlyStopping(patience=10, restore_best_weights=True)\n","\n","# Train the model\n","model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)\n","\n","# Evaluate the model\n","loss, accuracy = model.evaluate(X_test, y_test)\n","print(\"Test Loss:\", loss)\n","print(\"Test Accuracy:\", accuracy)\n","\n","y_pred_proba = model.predict(X_test)\n","roc_auc = roc_auc_score(y_test, y_pred_proba)\n","print(\"ROC AUC Score:\", roc_auc)\n","\n","import seaborn as sns\n","import matplotlib.pyplot as plt\n","y_pred = (y_pred_proba > 0.5).astype(int)\n","conf_mat = confusion_matrix(y_test, y_pred)\n","plt.figure(figsize=(8, 6))\n","sns.heatmap(conf_mat, annot=True, fmt='d', cmap='Blues',\n"," xticklabels=['Negative', 'Positive'],\n"," yticklabels=['Negative', 'Positive'])\n","plt.title('Confusion Matrix')\n","plt.xlabel('Predicted')\n","plt.ylabel('Actual')\n","plt.show()"]},{"cell_type":"code","execution_count":null,"id":"123a6496-5e84-4238-9f01-ee9021543f3c","metadata":{"id":"123a6496-5e84-4238-9f01-ee9021543f3c"},"outputs":[],"source":["model = Sequential()\n","model.add(Embedding(input_dim=len(tokenizer.word_index)+1, output_dim=128, input_length=max_len))\n","model.add(Bidirectional(LSTM(units=64, return_sequences=True)))\n","model.add(Bidirectional(LSTM(units=32)))\n","model.add(Dense(units=1, activation='sigmoid'))"]},{"cell_type":"code","execution_count":null,"id":"68c8e102-ffdb-45ee-8366-1a779094d8b5","metadata":{"id":"68c8e102-ffdb-45ee-8366-1a779094d8b5","outputId":"39dd851e-a9bb-4920-8029-20a00d876b45"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/50\n","30/30 [==============================] - 17s 341ms/step - loss: 0.3311 - accuracy: 0.9136 - val_loss: 0.2214 - val_accuracy: 0.9412\n","Epoch 2/50\n","30/30 [==============================] - 11s 378ms/step - loss: 0.2240 - accuracy: 0.9378 - val_loss: 0.2067 - val_accuracy: 0.9412\n","Epoch 3/50\n","30/30 [==============================] - 15s 507ms/step - loss: 0.1728 - accuracy: 0.9399 - val_loss: 0.1470 - val_accuracy: 0.9454\n","Epoch 4/50\n","30/30 [==============================] - 14s 487ms/step - loss: 0.1194 - accuracy: 0.9589 - val_loss: 0.0981 - val_accuracy: 0.9706\n","Epoch 5/50\n","30/30 [==============================] - 12s 396ms/step - loss: 0.0954 - accuracy: 0.9715 - val_loss: 0.1070 - val_accuracy: 0.9706\n","Epoch 6/50\n","30/30 [==============================] - 9s 316ms/step - loss: 0.1081 - accuracy: 0.9726 - val_loss: 0.0687 - val_accuracy: 0.9790\n","Epoch 7/50\n","30/30 [==============================] - 9s 311ms/step - loss: 0.1300 - accuracy: 0.9262 - val_loss: 0.1180 - val_accuracy: 0.9412\n","Epoch 8/50\n","30/30 [==============================] - 9s 317ms/step - loss: 0.1514 - accuracy: 0.9526 - val_loss: 0.2193 - val_accuracy: 0.9412\n","Epoch 9/50\n","30/30 [==============================] - 9s 312ms/step - loss: 0.1966 - accuracy: 0.9378 - val_loss: 0.1983 - val_accuracy: 0.9412\n","Epoch 10/50\n","30/30 [==============================] - 10s 319ms/step - loss: 0.1433 - accuracy: 0.9452 - val_loss: 0.1277 - val_accuracy: 0.9706\n","Epoch 11/50\n","30/30 [==============================] - 10s 317ms/step - loss: 0.0848 - accuracy: 0.9726 - val_loss: 0.1355 - val_accuracy: 0.9706\n","Epoch 12/50\n","30/30 [==============================] - 10s 320ms/step - loss: 0.1436 - accuracy: 0.9515 - val_loss: 0.2439 - val_accuracy: 0.9454\n","Epoch 13/50\n","30/30 [==============================] - 9s 316ms/step - loss: 0.1332 - accuracy: 0.9715 - val_loss: 0.1206 - val_accuracy: 0.9622\n","Epoch 14/50\n","30/30 [==============================] - 9s 315ms/step - loss: 0.0858 - accuracy: 0.9779 - val_loss: 0.0877 - val_accuracy: 0.9790\n","Epoch 15/50\n","30/30 [==============================] - 9s 315ms/step - loss: 0.0628 - accuracy: 0.9863 - val_loss: 0.0558 - val_accuracy: 0.9790\n","Epoch 16/50\n","30/30 [==============================] - 10s 323ms/step - loss: 0.0739 - accuracy: 0.9800 - val_loss: 0.0837 - val_accuracy: 0.9706\n","Epoch 17/50\n","30/30 [==============================] - 10s 321ms/step - loss: 0.0654 - accuracy: 0.9810 - val_loss: 0.0637 - val_accuracy: 0.9748\n","Epoch 18/50\n","30/30 [==============================] - 10s 319ms/step - loss: 0.0568 - accuracy: 0.9874 - val_loss: 0.0647 - val_accuracy: 0.9790\n","Epoch 19/50\n","30/30 [==============================] - 10s 318ms/step - loss: 0.0546 - accuracy: 0.9874 - val_loss: 0.0409 - val_accuracy: 0.9874\n","Epoch 20/50\n","30/30 [==============================] - 10s 319ms/step - loss: 0.0638 - accuracy: 0.9821 - val_loss: 0.0630 - val_accuracy: 0.9790\n","Epoch 21/50\n","30/30 [==============================] - 10s 335ms/step - loss: 0.0580 - accuracy: 0.9852 - val_loss: 0.0854 - val_accuracy: 0.9706\n","Epoch 22/50\n","30/30 [==============================] - 12s 394ms/step - loss: 0.0483 - accuracy: 0.9884 - val_loss: 0.0552 - val_accuracy: 0.9874\n","Epoch 23/50\n","30/30 [==============================] - 10s 331ms/step - loss: 0.0469 - accuracy: 0.9884 - val_loss: 0.0542 - val_accuracy: 0.9874\n","Epoch 24/50\n","30/30 [==============================] - 10s 330ms/step - loss: 0.0453 - accuracy: 0.9884 - val_loss: 0.0546 - val_accuracy: 0.9832\n","Epoch 25/50\n","30/30 [==============================] - 10s 327ms/step - loss: 0.0438 - accuracy: 0.9905 - val_loss: 0.0556 - val_accuracy: 0.9874\n","Epoch 26/50\n","30/30 [==============================] - 10s 335ms/step - loss: 0.0436 - accuracy: 0.9905 - val_loss: 0.0558 - val_accuracy: 0.9874\n","Epoch 27/50\n","30/30 [==============================] - 12s 390ms/step - loss: 0.0431 - accuracy: 0.9905 - val_loss: 0.0556 - val_accuracy: 0.9874\n","Epoch 28/50\n","30/30 [==============================] - 11s 372ms/step - loss: 0.0491 - accuracy: 0.9895 - val_loss: 0.1481 - val_accuracy: 0.9706\n","Epoch 29/50\n","30/30 [==============================] - 11s 365ms/step - loss: 0.0975 - accuracy: 0.9747 - val_loss: 0.0569 - val_accuracy: 0.9832\n","Epoch 30/50\n","30/30 [==============================] - 11s 372ms/step - loss: 0.0527 - accuracy: 0.9874 - val_loss: 0.0644 - val_accuracy: 0.9790\n","Epoch 31/50\n","30/30 [==============================] - 11s 376ms/step - loss: 0.0485 - accuracy: 0.9884 - val_loss: 0.0371 - val_accuracy: 0.9874\n","Epoch 32/50\n","30/30 [==============================] - 11s 371ms/step - loss: 0.0440 - accuracy: 0.9905 - val_loss: 0.0419 - val_accuracy: 0.9832\n","Epoch 33/50\n","30/30 [==============================] - 12s 398ms/step - loss: 0.0467 - accuracy: 0.9895 - val_loss: 0.0536 - val_accuracy: 0.9832\n","Epoch 34/50\n","30/30 [==============================] - 11s 379ms/step - loss: 0.0422 - accuracy: 0.9916 - val_loss: 0.0521 - val_accuracy: 0.9874\n","Epoch 35/50\n","30/30 [==============================] - 11s 367ms/step - loss: 0.0414 - accuracy: 0.9916 - val_loss: 0.0519 - val_accuracy: 0.9874\n","Epoch 36/50\n","30/30 [==============================] - 11s 372ms/step - loss: 0.0410 - accuracy: 0.9916 - val_loss: 0.0524 - val_accuracy: 0.9874\n","Epoch 37/50\n","30/30 [==============================] - 12s 399ms/step - loss: 0.0409 - accuracy: 0.9916 - val_loss: 0.0523 - val_accuracy: 0.9874\n","Epoch 38/50\n","30/30 [==============================] - 12s 411ms/step - loss: 0.0405 - accuracy: 0.9916 - val_loss: 0.0522 - val_accuracy: 0.9874\n","Epoch 39/50\n","30/30 [==============================] - 10s 343ms/step - loss: 0.0411 - accuracy: 0.9916 - val_loss: 0.0528 - val_accuracy: 0.9874\n","Epoch 40/50\n","30/30 [==============================] - 10s 342ms/step - loss: 0.0400 - accuracy: 0.9916 - val_loss: 0.0518 - val_accuracy: 0.9874\n","Epoch 41/50\n","30/30 [==============================] - 11s 368ms/step - loss: 0.0392 - accuracy: 0.9916 - val_loss: 0.0406 - val_accuracy: 0.9874\n","Epoch 42/50\n","30/30 [==============================] - 10s 328ms/step - loss: 0.0388 - accuracy: 0.9916 - val_loss: 0.0372 - val_accuracy: 0.9874\n","Epoch 43/50\n","30/30 [==============================] - 10s 320ms/step - loss: 0.1431 - accuracy: 0.9600 - val_loss: 0.1173 - val_accuracy: 0.9664\n","Epoch 44/50\n","30/30 [==============================] - 9s 315ms/step - loss: 0.1047 - accuracy: 0.9694 - val_loss: 0.0802 - val_accuracy: 0.9790\n","Epoch 45/50\n","30/30 [==============================] - 10s 319ms/step - loss: 0.0526 - accuracy: 0.9884 - val_loss: 0.0682 - val_accuracy: 0.9748\n","Epoch 46/50\n","30/30 [==============================] - 10s 318ms/step - loss: 0.0478 - accuracy: 0.9895 - val_loss: 0.0613 - val_accuracy: 0.9832\n","Epoch 47/50\n","30/30 [==============================] - 10s 323ms/step - loss: 0.0459 - accuracy: 0.9895 - val_loss: 0.0587 - val_accuracy: 0.9790\n","Epoch 48/50\n","30/30 [==============================] - 9s 316ms/step - loss: 0.0445 - accuracy: 0.9905 - val_loss: 0.0587 - val_accuracy: 0.9832\n","Epoch 49/50\n","30/30 [==============================] - 10s 318ms/step - loss: 0.0432 - accuracy: 0.9905 - val_loss: 0.0697 - val_accuracy: 0.9790\n","Epoch 50/50\n","30/30 [==============================] - 10s 327ms/step - loss: 0.0437 - accuracy: 0.9895 - val_loss: 0.0573 - val_accuracy: 0.9832\n"]},{"data":{"text/plain":["<keras.src.callbacks.History at 0x294f411f490>"]},"execution_count":26,"metadata":{},"output_type":"execute_result"}],"source":["model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n","model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)"]},{"cell_type":"code","execution_count":null,"id":"bf4f9f11-6f4f-4920-b192-38609602b2fa","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":651},"id":"bf4f9f11-6f4f-4920-b192-38609602b2fa","outputId":"5b1b0e73-e858-41e2-9016-cb37fa1f2403"},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - accuracy: 0.9583 - loss: 0.1556\n","Test Loss: 0.1504521518945694\n","Test Accuracy: 0.9562289714813232\n","\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step\n","ROC AUC Score: 0.9271911663216011\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 800x600 with 2 Axes>"],"image/png":"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dGm9//77BX4vACgsmkTARQUGBkqSzpw5U6Dj9+/fLw8PD0VFRdltDwsLU3BwsPbv32+3vXLlyqYxypQpo5MnT15nxWYPPfSQGjZsqCeeeEIVKlRQ165dNXv27Gs2jJfqjI6ONu2rWbOmjh07prNnz9ptv/KzlClTRpIK9VnatGmjgIAAzZo1SykpKbrrrrtM3+UleXl5Gj9+vG655RZZrVaVK1dO5cuX15YtW5Senl7g97zpppsKdZHKm2++qZCQEG3evFkTJ05UaGhogV8LAIVFkwi4qMDAQIWHh+u3334r1OuuvHDkajw9PfPdbhjGdb/HpfPlLvHx8dGaNWu0bNkyPfLII9qyZYseeugh3XvvvaZj/41/81kusVqt6tSpk6ZPn6558+ZdNUWUpNGjR2vIkCFq0qSJPvnkE3377bdaunSpbr311gInptLF76cwNm3apCNHjkiStm7dWqjXAkBh0SQCLqxdu3bau3ev1q1b94/HRkREKC8vT7t377bbfvjwYZ06dcp2pXJRKFOmjN2VwJdcmVZKkoeHh1q0aKG33npL27dv12uvvaYVK1Zo5cqV+Y59qc6dO3ea9v3+++8qV66c/Pz8/t0HuIru3btr06ZNOnPmTL4X+1wyZ84cNW/eXFOmTFHXrl3VsmVLxcXFmb6TgjbsBXH27Fk99thjiomJUZ8+fTR27Fht2LChyMYHgCvRJAIu7JlnnpGfn5+eeOIJHT582LR/7969evvttyVdnC6VZLoC+a233pIktW3btsjqioyMVHp6urZs2WLblpqaqnnz5tkdd+LECdNrLy0qfeWyPJdUrFhRderU0fTp0+2art9++01LliyxfU5HaN68uV555RW98847CgsLu+pxnp6eppTy888/199//2237VIzm19DXVjPPvusDhw4oOnTp+utt95SlSpVlJCQcNXvEQD+LRbTBlxYZGSkZs6cqYceekg1a9a0u+PKDz/8oM8//1w9e/aUJNWuXVsJCQn64IMPdOrUKTVt2lQ//fSTpk+fro4dO151eZXr0bVrVz377LO6//77NWjQIGVmZmry5MmqXr263YUbo0aN0po1a9S2bVtFREToyJEjeu+993TzzTerUaNGVx3/jTfeUOvWrRUbG6tevXrp3LlzmjRpkoKCgjRixIgi+xxX8vDw0AsvvPCPx7Vr106jRo3SY489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i4vTV199ZZsifu211xQeHq7o6GhJ0l9//aUuXbooODhYISEh6tChg/7880/beBcuXNCQIUMUHByssmXL6plnntGVa/1fOd2clZWlZ599VpUqVZLValVUVJSmTJmiP//8U82bN5cklSlTRhaLRT179pQk5eXlKSkpSVWrVpWPj49q166tOXPm2L3P119/rerVq8vHx0fNmze3qxMA3AVNIoAi4ePjo+zsbEnS8uXLtXPnTi1dulQLFy5UTk6O4uPjFRAQoO+++07ff/+9/P391apVK9trxo0bp2nTpul///uf1q5dqxMnTmjevHnXfM9HH31Un376qSZOnKgdO3bo/fffl7+/vypVqqS5c+dKknbu3KnU1FS9/fbbkqSkpCTNmDFDycnJ2rZtmwYPHqyHH35Yq1evlnSxme3UqZPat2+vzZs364knntBzzz3nqK8NAFwW080A/hXDMLR8+XJ9++23GjhwoI4ePSo/Pz999NFHtmnmTz75RHl5efroo49ksVgkSVOnTlVwcLBWrVqlli1basKECUpMTFSnTp0kScnJyfr222+v+r67du3S7NmztXTpUsXFxUmSqlWrZtt/aWo6NDRUwcHBki4mj6NHj9ayZcsUGxtre83atWv1/vvvq2nTppo8ebIiIyM1btw4SVJ0dLS2bt2q119/vQi/NQBwfTSJAK7LwoUL5e/vr5ycHOXl5al79+4aMWKE+vfvr1q1atmdh/jrr79qz549CggIsBvj/Pnz2rt3r9LT05Wamqr69evb9pUqVUp33nmnacr5ks2bN8vT01NNmzYtcM179uxRZmam7r33Xrvt2dnZqlu3riRpx44ddnVIsjWUAOBOaBIBXJfmzZtr8uTJ8vb2Vnh4uEqV+n9/nfj5+dkdm5GRoXr16iklJcU0Tvny5a/r/X18fAr9moyMDEnSokWLdNNNN9nts1qt11UHAJRUNIkAroufn5+ioqIKdOwdd9yhWbNmKTQ0VIGBgfkeU7FiRa1fv15NmjSRJOXm5mrjxo2644478j2+Vq1aysvL0+rVq23TzZe7lGReuHDBti0mJkZWq1UHDhy4agJZs2ZNffXVV3bbfvzxx3/+kABQwnDhCgCH69Gjh8qVK6cOHTrou+++0759+7Rq1SoNGjRIBw8elCQ99dRTGjNmjObPn6/ff/9d//3vf6+5xmGVKlWUkJCgxx9/XPPnz7eNOXv2bElSRESELBaLFi5cqKNHjyojI0MBAQEaNmyYBg8erOnTp2vv3r365ZdfNGnSJE2fPl2S1LdvX+3evVvDhw/Xzp07NXPmTE2bNs3RXxEAuByaRAAO5+vrqzVr1qhy5crq1KmTatasqV69eun8+fO2ZHHo0KF65JFHlJCQoNjYWAUEBOj++++/5riTJ0/WAw88oP/+97+qUaOGevfurbNnz0qSbrrpJo0cOVLPPfecKlSooAEDBkiSXnnlFb344otKSkpSzZo11apVKy1atEhVq1aVJFWuXFlz587V/PnzVbt2bSUnJ2v06NEO/HYAwDVZjKudFQ4AAAC3RZIIAAAAE5pEAAAAmNAkAgAAwIQmEQAAACY0iQAAADChSQQAAIAJTSIAAABMaBIBAABgQpMIAAAAE5pEAAAAmNAkAgAAwOT/A7EiqN1TOqZ0AAAAAElFTkSuQmCC\n"},"metadata":{}}],"source":["loss, accuracy = model.evaluate(X_test, y_test)\n","print(\"Test Loss:\", loss)\n","print(\"Test Accuracy:\", accuracy)\n","\n","y_pred_proba = model.predict(X_test)\n","roc_auc = roc_auc_score(y_test, y_pred_proba)\n","print(\"ROC AUC Score:\", roc_auc)\n","\n","import seaborn as sns\n","import matplotlib.pyplot as plt\n","y_pred = (y_pred_proba > 0.5).astype(int)\n","conf_mat = confusion_matrix(y_test, y_pred)\n","plt.figure(figsize=(8, 6))\n","sns.heatmap(conf_mat, annot=True, fmt='d', cmap='Blues',\n"," xticklabels=['Negative', 'Positive'],\n"," yticklabels=['Negative', 'Positive'])\n","plt.title('Confusion Matrix')\n","plt.xlabel('Predicted')\n","plt.ylabel('Actual')\n","plt.show()\n"]},{"cell_type":"code","execution_count":null,"id":"8e9ec9a8-8f0d-40e7-947a-e666044e28e7","metadata":{"id":"8e9ec9a8-8f0d-40e7-947a-e666044e28e7"},"outputs":[],"source":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.5"},"colab":{"provenance":[],"gpuType":"T4"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":5}

Xet Storage Details

Size:
92.9 kB
·
Xet hash:
83a06a1a618105ebd29b90a0c661c84cf8f784642bee33a7bf9c77feb534ad0d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.