{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"}],"dockerImageVersionId":31090,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        (os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:55:16.177974Z","iopub.execute_input":"2025-07-12T14:55:16.17849Z","iopub.status.idle":"2025-07-12T14:56:07.615894Z","shell.execute_reply.started":"2025-07-12T14:55:16.178467Z","shell.execute_reply":"2025-07-12T14:56:07.615114Z"}},"outputs":[],"execution_count":2},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:07.617022Z","iopub.execute_input":"2025-07-12T14:56:07.617412Z","iopub.status.idle":"2025-07-12T14:56:07.620494Z","shell.execute_reply.started":"2025-07-12T14:56:07.617393Z","shell.execute_reply":"2025-07-12T14:56:07.620079Z"}},"outputs":[],"execution_count":3},{"cell_type":"code","source":"!pip install pyspark","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:07.621484Z","iopub.execute_input":"2025-07-12T14:56:07.621765Z","iopub.status.idle":"2025-07-12T14:56:13.241503Z","shell.execute_reply.started":"2025-07-12T14:56:07.621749Z","shell.execute_reply":"2025-07-12T14:56:13.240613Z"}},"outputs":[{"name":"stdout","text":"Requirement already satisfied: pyspark in /usr/local/lib/python3.11/dist-packages (3.5.1)\nRequirement already satisfied: py4j==0.10.9.7 in /usr/local/lib/python3.11/dist-packages (from pyspark) (0.10.9.7)\n","output_type":"stream"}],"execution_count":4},{"cell_type":"code","source":"from pyspark.sql import SparkSession\n\nspark = SparkSession.builder \\\n    .appName(\"Lstm_Model\") \\\n    .getOrCreate()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:13.243811Z","iopub.execute_input":"2025-07-12T14:56:13.244048Z","iopub.status.idle":"2025-07-12T14:56:22.239097Z","shell.execute_reply.started":"2025-07-12T14:56:13.244027Z","shell.execute_reply":"2025-07-12T14:56:22.238216Z"}},"outputs":[{"name":"stderr","text":"Setting default log level to \"WARN\".\nTo adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n25/07/12 14:56:19 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n","output_type":"stream"}],"execution_count":5},{"cell_type":"code","source":"spark","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:22.240092Z","iopub.execute_input":"2025-07-12T14:56:22.240602Z","iopub.status.idle":"2025-07-12T14:56:24.054312Z","shell.execute_reply.started":"2025-07-12T14:56:22.240545Z","shell.execute_reply":"2025-07-12T14:56:24.05359Z"}},"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"<pyspark.sql.session.SparkSession at 0x7f640ae62810>","text/html":"\n            <div>\n                <p><b>SparkSession - in-memory</b></p>\n                \n        <div>\n            <p><b>SparkContext</b></p>\n\n            <p><a href=\"http://d270955afca1:4040\">Spark UI</a></p>\n\n            <dl>\n              <dt>Version</dt>\n                <dd><code>v3.5.1</code></dd>\n              <dt>Master</dt>\n                <dd><code>local[*]</code></dd>\n              <dt>AppName</dt>\n                <dd><code>Lstm_Model</code></dd>\n            </dl>\n        </div>\n        \n            </div>\n        "},"metadata":{}}],"execution_count":6},{"cell_type":"code","source":"import os\n\nbase_dir = \"/kaggle/input/hms-harmful-brain-activity-classification\"\ntrain_eeg_dir = os.path.join(base_dir, \"train_eegs\")\ntrain_spec_dir = os.path.join(base_dir, \"train_spectrograms\")\n\neeg_parquet_files = sorted([f for f in os.listdir(train_eeg_dir) if f.endswith(\".parquet\")])\nspec_parquet_files = sorted([f for f in os.listdir(train_spec_dir) if f.endswith(\".parquet\")])\n\nprint(\"Total EEG files:\", len(eeg_parquet_files))\nprint(\"Total Spectrogram files:\", len(spec_parquet_files))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:24.055338Z","iopub.execute_input":"2025-07-12T14:56:24.055626Z","iopub.status.idle":"2025-07-12T14:56:24.092406Z","shell.execute_reply.started":"2025-07-12T14:56:24.055602Z","shell.execute_reply":"2025-07-12T14:56:24.091496Z"}},"outputs":[{"name":"stdout","text":"Total EEG files: 17300\nTotal Spectrogram files: 11138\n","output_type":"stream"}],"execution_count":7},{"cell_type":"code","source":"# Assuming expert_consensus is the target\nfractions = {\n    \"Seizure\": 0.001,\n    \"LPD\": 0.001,\n    \"GPD\": 0.001,\n    \"LRDA\": 0.001,\n    \"GRDA\": 0.001,\n    \"Other\": 0.001\n}\n\ndf_labels = (\n    spark.read.option(\"header\", True).csv(\"/kaggle/input/hms-harmful-brain-activity-classification/train.csv\")\n    .sampleBy(\"expert_consensus\", fractions=fractions, seed=42)\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:24.093471Z","iopub.execute_input":"2025-07-12T14:56:24.09374Z","iopub.status.idle":"2025-07-12T14:56:29.564034Z","shell.execute_reply.started":"2025-07-12T14:56:24.093716Z","shell.execute_reply":"2025-07-12T14:56:29.56329Z"}},"outputs":[],"execution_count":8},{"cell_type":"code","source":"# df_all = spark.read.option(\"header\", True).csv(\"/kaggle/input/hms-harmful-brain-activity-classification/train.csv\")\n# df_all.groupBy(\"expert_consensus\").count().show()\n\ndf_labels.groupBy(\"expert_consensus\").count().show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:29.564955Z","iopub.execute_input":"2025-07-12T14:56:29.565198Z","iopub.status.idle":"2025-07-12T14:56:31.361422Z","shell.execute_reply.started":"2025-07-12T14:56:29.565176Z","shell.execute_reply":"2025-07-12T14:56:31.359194Z"}},"outputs":[{"name":"stderr","text":"[Stage 1:===========================================================(2 + 0) / 2]\r","output_type":"stream"},{"name":"stdout","text":"+----------------+-----+\n|expert_consensus|count|\n+----------------+-----+\n|           Other|   26|\n|             GPD|   12|\n|         Seizure|   29|\n|             LPD|   11|\n|            LRDA|   17|\n|            GRDA|   12|\n+----------------+-----+\n\n","output_type":"stream"},{"name":"stderr","text":"                                                                                \r","output_type":"stream"}],"execution_count":9},{"cell_type":"code","source":"df_labels.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:31.362233Z","iopub.execute_input":"2025-07-12T14:56:31.362492Z","iopub.status.idle":"2025-07-12T14:56:31.373216Z","shell.execute_reply.started":"2025-07-12T14:56:31.362468Z","shell.execute_reply":"2025-07-12T14:56:31.372769Z"}},"outputs":[{"name":"stdout","text":"root\n |-- eeg_id: string (nullable = true)\n |-- eeg_sub_id: string (nullable = true)\n |-- eeg_label_offset_seconds: string (nullable = true)\n |-- spectrogram_id: string (nullable = true)\n |-- spectrogram_sub_id: string (nullable = true)\n |-- spectrogram_label_offset_seconds: string (nullable = true)\n |-- label_id: string (nullable = true)\n |-- patient_id: string (nullable = true)\n |-- expert_consensus: string (nullable = true)\n |-- seizure_vote: string (nullable = true)\n |-- lpd_vote: string (nullable = true)\n |-- gpd_vote: string (nullable = true)\n |-- lrda_vote: string (nullable = true)\n |-- grda_vote: string (nullable = true)\n |-- other_vote: string (nullable = true)\n\n","output_type":"stream"}],"execution_count":10},{"cell_type":"code","source":"from pyspark.sql.functions import input_file_name, regexp_extract\n\n# Load EEG data and extract eeg_id\ndf_eeg = (\n    spark.read.parquet(\"/kaggle/input/hms-harmful-brain-activity-classification/train_eegs/*.parquet\")\n    .withColumn(\"file_path\", input_file_name())\n    .withColumn(\"eeg_id\", regexp_extract(\"file_path\", r\"(\\d+)\\.parquet\", 1).cast(\"long\"))\n)\n\n# Load spectrogram data and extract spectrogram_id\ndf_spec = (\n    spark.read.parquet(\"/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/*.parquet\")\n    .withColumn(\"file_path\", input_file_name())\n    .withColumn(\"spectrogram_id\", regexp_extract(\"file_path\", r\"(\\d+)\\.parquet\", 1).cast(\"long\"))\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:56:31.375608Z","iopub.execute_input":"2025-07-12T14:56:31.37583Z","iopub.status.idle":"2025-07-12T14:58:14.063625Z","shell.execute_reply.started":"2025-07-12T14:56:31.375814Z","shell.execute_reply":"2025-07-12T14:58:14.062627Z"}},"outputs":[{"name":"stderr","text":"                                                                                \r","output_type":"stream"}],"execution_count":11},{"cell_type":"code","source":"# df_eeg.show()\n\nfrom pyspark.sql.window import Window\nfrom pyspark.sql.functions import row_number\n\n# Window to partition by eeg_id and assign row numbers\neeg_window = Window.partitionBy(\"eeg_id\").orderBy(\"file_path\")  # You can replace 'file_path' with timestamp/chunk\ndf_eeg_limited = df_eeg.withColumn(\"row_num\", row_number().over(eeg_window)).filter(\"row_num <= 2\").drop(\"row_num\")\n\n# Window to partition by spectrogram_id and assign row numbers\nspec_window = Window.partitionBy(\"spectrogram_id\").orderBy(\"file_path\")  # Adjust if needed\ndf_spec_limited = df_spec.withColumn(\"row_num\", row_number().over(spec_window)).filter(\"row_num <= 2\").drop(\"row_num\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:58:14.064606Z","iopub.execute_input":"2025-07-12T14:58:14.064889Z","iopub.status.idle":"2025-07-12T14:58:14.434309Z","shell.execute_reply.started":"2025-07-12T14:58:14.064862Z","shell.execute_reply":"2025-07-12T14:58:14.433626Z"}},"outputs":[],"execution_count":12},{"cell_type":"code","source":"from pyspark.sql.functions import col\n\n# Cast IDs\ndf_labels_casted = (\n    df_labels\n    .withColumn(\"eeg_id\", col(\"eeg_id\").cast(\"long\"))\n    .withColumn(\"spectrogram_id\", col(\"spectrogram_id\").cast(\"long\"))\n)\n\n# Join only on limited EEG and Spec data\ndf_joined = (\n    df_labels_casted\n    .join(df_eeg_limited, on=\"eeg_id\", how=\"inner\")\n    .join(df_spec_limited, on=\"spectrogram_id\", how=\"inner\")\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T14:58:14.435285Z","iopub.execute_input":"2025-07-12T14:58:14.435691Z","iopub.status.idle":"2025-07-12T14:58:14.655536Z","shell.execute_reply.started":"2025-07-12T14:58:14.435668Z","shell.execute_reply":"2025-07-12T14:58:14.654847Z"}},"outputs":[],"execution_count":13},{"cell_type":"code","source":"from pyspark.sql.functions import col\nfrom pyspark.sql import DataFrame\nfrom functools import reduce\n\neeg_channels = ['Fp1', 'F3', 'C3', 'P3', 'F7', 'T3', 'T5', 'O1', \n                'Fz', 'Cz', 'Pz', 'Fp2', 'F4', 'C4', 'P4', \n                'F8', 'T4', 'T6', 'O2', 'EKG']\ntarget_column = 'expert_consensus'\n# samples_per_class = 80\n\n# Step 1: Select only needed columns\ndf_selected = df_joined.select(eeg_channels + [target_column]).dropna()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T15:00:07.209943Z","iopub.execute_input":"2025-07-12T15:00:07.210479Z","iopub.status.idle":"2025-07-12T15:00:07.342985Z","shell.execute_reply.started":"2025-07-12T15:00:07.210457Z","shell.execute_reply":"2025-07-12T15:00:07.342207Z"}},"outputs":[],"execution_count":14},{"cell_type":"code","source":"# Check row count\n# print(\"Total rows after join and dropna:\", df_selected.count())\n\n# Check per-class counts\ndf_selected.groupBy(target_column).count().show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T15:00:25.213027Z","iopub.execute_input":"2025-07-12T15:00:25.213741Z","iopub.status.idle":"2025-07-12T15:14:32.508067Z","shell.execute_reply.started":"2025-07-12T15:00:25.213716Z","shell.execute_reply":"2025-07-12T15:14:32.506681Z"}},"outputs":[{"name":"stderr","text":"                                                                                \r","output_type":"stream"},{"name":"stdout","text":"+----------------+-----+\n|expert_consensus|count|\n+----------------+-----+\n|           Other|  104|\n|             GPD|   48|\n|         Seizure|  116|\n|             LPD|   44|\n|            LRDA|   68|\n|            GRDA|   48|\n+----------------+-----+\n\n","output_type":"stream"}],"execution_count":15},{"cell_type":"code","source":"# import time\n# cnt = 1\n# while (1):\n#     print(cnt)\n#     cnt +=1\n#     time.sleep(60)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T20:11:00.261411Z","iopub.execute_input":"2025-07-12T20:11:00.261968Z","iopub.status.idle":"2025-07-12T20:11:00.265751Z","shell.execute_reply.started":"2025-07-12T20:11:00.261943Z","shell.execute_reply":"2025-07-12T20:11:00.264961Z"}},"outputs":[],"execution_count":1},{"cell_type":"code","source":"# df_small = df_selected.sample(fraction=0.001, seed=42)  # 0.1% of data\ndf_pandas = df_selected.toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T15:15:06.85608Z","iopub.execute_input":"2025-07-12T15:15:06.856804Z","iopub.status.idle":"2025-07-12T15:27:50.514088Z","shell.execute_reply.started":"2025-07-12T15:15:06.856773Z","shell.execute_reply":"2025-07-12T15:27:50.512865Z"}},"outputs":[{"name":"stderr","text":"                                                                                \r","output_type":"stream"}],"execution_count":16},{"cell_type":"code","source":"df_pandas['expert_consensus'].value_counts()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T15:28:36.551724Z","iopub.execute_input":"2025-07-12T15:28:36.552211Z","iopub.status.idle":"2025-07-12T15:28:36.566818Z","shell.execute_reply.started":"2025-07-12T15:28:36.552186Z","shell.execute_reply":"2025-07-12T15:28:36.566285Z"}},"outputs":[{"execution_count":19,"output_type":"execute_result","data":{"text/plain":"expert_consensus\nSeizure    116\nOther      104\nLRDA        68\nGPD         48\nGRDA        48\nLPD         44\nName: count, dtype: int64"},"metadata":{}}],"execution_count":19},{"cell_type":"code","source":"import tensorflow as tf\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.metrics import classification_report\n\n# ✅ 1. Confirm GPU availability\ngpus = tf.config.list_physical_devices('GPU')\nif gpus:\n    print(f\"✅ GPU detected: {gpus}\")\n    strategy = tf.distribute.MirroredStrategy()\nelse:\n    print(\"⚠️ No GPU detected, using default strategy.\")\n    strategy = tf.distribute.get_strategy()\n\n# ✅ 2. Use cleaned DataFrame\ndf_clean = df_pandas.copy()\n\n# ✅ 3. EEG channel columns\neeg_channels = ['Fp1', 'F3', 'C3', 'P3', 'F7', 'T3', 'T5', 'O1', \n                'Fz', 'Cz', 'Pz', 'Fp2', 'F4', 'C4', 'P4', \n                'F8', 'T4', 'T6', 'O2', 'EKG']\n\n# ✅ 4. Encode labels\nlabel_encoder = LabelEncoder()\ndf_clean['label'] = label_encoder.fit_transform(df_clean['expert_consensus'])\n\nn_classes = len(label_encoder.classes_)\n\n# ✅ 5. Extract EEG and label arrays\nX = df_clean[eeg_channels].values.astype(np.float32)\ny = df_clean['label'].values\n\n# ✅ 6. One-hot encode labels for softmax\ny = tf.keras.utils.to_categorical(y, num_classes=n_classes)\n\n# ✅ 7. Reshape EEG for LSTM: (samples, time_steps=1, features)\nX = X.reshape(-1, 1, len(eeg_channels))  # shape: (n_samples, 1, 21)\n\n# ✅ 8. Train-validation split\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# ✅ 9. Define model\nwith strategy.scope():\n    model = tf.keras.Sequential([\n        tf.keras.layers.Input(shape=(1, len(eeg_channels))),\n        tf.keras.layers.LSTM(32),\n        tf.keras.layers.Dense(32, activation='relu'),\n        tf.keras.layers.Dense(n_classes, activation='softmax')  # Multi-class\n    ])\n\n    model.compile(optimizer='adam',\n                  loss='categorical_crossentropy',\n                  metrics=['accuracy'])\n\n# ✅ 10. Train\nmodel.fit(X_train, y_train, epochs=10, batch_size=8, validation_data=(X_val, y_val))\n\n# ✅ 11. Evaluate\nloss, accuracy = model.evaluate(X_val, y_val)\nprint(f\"\\n🎯 Validation Accuracy: {accuracy:.4f}\")\n\n# ✅ 12. Classification report\ny_pred = model.predict(X_val)\ny_pred_classes = np.argmax(y_pred, axis=1)\ny_true_classes = np.argmax(y_val, axis=1)\n\nprint(\"\\n📊 Classification Report:\")\nprint(classification_report(y_true_classes, y_pred_classes, target_names=label_encoder.classes_))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T15:32:59.194117Z","iopub.execute_input":"2025-07-12T15:32:59.194412Z","iopub.status.idle":"2025-07-12T15:33:42.914801Z","shell.execute_reply.started":"2025-07-12T15:32:59.194391Z","shell.execute_reply":"2025-07-12T15:33:42.914199Z"}},"outputs":[{"name":"stderr","text":"2025-07-12 15:33:02.601978: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:477] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\nWARNING: All log messages before absl::InitializeLog() is called are written to STDERR\nE0000 00:00:1752334382.983777      36 cuda_dnn.cc:8310] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\nE0000 00:00:1752334383.087711      36 cuda_blas.cc:1418] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n","output_type":"stream"},{"name":"stdout","text":"✅ GPU detected: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU')]\n","output_type":"stream"},{"name":"stderr","text":"I0000 00:00:1752334402.983905      36 gpu_device.cc:2022] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 13942 MB memory:  -> device: 0, name: Tesla T4, pci bus id: 0000:00:04.0, compute capability: 7.5\nI0000 00:00:1752334402.984632      36 gpu_device.cc:2022] Created device /job:localhost/replica:0/task:0/device:GPU:1 with 13942 MB memory:  -> device: 1, name: Tesla T4, pci bus id: 0000:00:05.0, compute capability: 7.5\n","output_type":"stream"},{"name":"stdout","text":"Epoch 1/10\n","output_type":"stream"},{"name":"stderr","text":"I0000 00:00:1752334408.365503    1256 cuda_dnn.cc:529] Loaded cuDNN version 90300\nI0000 00:00:1752334408.449784    1257 cuda_dnn.cc:529] Loaded cuDNN version 90300\n","output_type":"stream"},{"name":"stdout","text":"\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 42ms/step - accuracy: 0.1080 - loss: 1.9064 - val_accuracy: 0.1923 - val_loss: 1.7454\nEpoch 2/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.3902 - loss: 1.7027 - val_accuracy: 0.1845 - val_loss: 1.7260\nEpoch 3/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.5978 - loss: 1.4892 - val_accuracy: 0.1879 - val_loss: 1.6833\nEpoch 4/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.3850 - loss: 1.5887 - val_accuracy: 0.2167 - val_loss: 1.6454\nEpoch 5/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.6975 - loss: 1.3295 - val_accuracy: 0.3223 - val_loss: 1.5763\nEpoch 6/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.5672 - loss: 1.3630 - val_accuracy: 0.3544 - val_loss: 1.5682\nEpoch 7/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 29ms/step - accuracy: 0.6411 - loss: 1.2029 - val_accuracy: 0.3705 - val_loss: 1.5119\nEpoch 8/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.7402 - loss: 1.0213 - val_accuracy: 0.3738 - val_loss: 1.5272\nEpoch 9/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.7007 - loss: 1.1396 - val_accuracy: 0.4456 - val_loss: 1.4137\nEpoch 10/10\n\u001b[1m43/43\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - accuracy: 0.7508 - loss: 0.8521 - val_accuracy: 0.4400 - val_loss: 1.3853\n\u001b[1m3/3\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 68ms/step - accuracy: 0.5530 - loss: 1.2851 \n\n🎯 Validation Accuracy: 0.5748\n\u001b[1m3/3\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 173ms/step\n\n📊 Classification Report:\n              precision    recall  f1-score   support\n\n         GPD       0.80      0.40      0.53        10\n        GRDA       1.00      0.33      0.50        12\n         LPD       0.67      0.29      0.40         7\n        LRDA       0.45      0.62      0.53         8\n       Other       0.52      0.80      0.63        20\n     Seizure       0.69      0.76      0.72        29\n\n    accuracy                           0.62        86\n   macro avg       0.69      0.53      0.55        86\nweighted avg       0.68      0.62      0.60        86\n\n","output_type":"stream"}],"execution_count":20},{"cell_type":"code","source":"# # Count the number of samples per class\n# print(df_pandas['expert_consensus'].value_counts())\n\n# # Optional: Plot class distribution\n# import matplotlib.pyplot as plt\n\n# df_pandas['expert_consensus'].value_counts().plot(kind='bar', title='Class Distribution')\n# plt.xlabel('Class Label')\n# plt.ylabel('Sample Count')\n# plt.grid(True)\n# plt.show()\n\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\n# Set a clean style\nsns.set(style='whitegrid')\n\n# Count class samples\nclass_counts = df_pandas['expert_consensus'].value_counts().reset_index()\nclass_counts.columns = ['Class', 'Count']\n\n# Create the barplot\nplt.figure(figsize=(10, 5))\nax = sns.barplot(data=class_counts, x='Class', y='Count', palette='viridis')\n\n# Improve labels and layout\nax.set_title('Class Distribution of EEG Samples', fontsize=14)\nax.set_xlabel('Class Label', fontsize=12)\nax.set_ylabel('Sample Count', fontsize=12)\nax.bar_label(ax.containers[0], fmt='%d', fontsize=10, padding=3)\n\nplt.xticks(rotation=45)\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-12T15:37:28.348369Z","iopub.execute_input":"2025-07-12T15:37:28.348954Z","iopub.status.idle":"2025-07-12T15:37:28.593718Z","shell.execute_reply.started":"2025-07-12T15:37:28.348933Z","shell.execute_reply":"2025-07-12T15:37:28.593083Z"}},"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1000x500 with 1 Axes>","image/png":"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\n"},"metadata":{}}],"execution_count":25},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}