├── An Intrusion Detection System ├── NUSW-NB15_features.csv ├── UNSW_NB15_testing-set.csv ├── UNSW_Preprocessing .ipynb ├── UNSW__CNN-LSTM__Binary&Multi__Class.ipynb ├── UNSW__CNN__Binary_Class.ipynb ├── UNSW__CNN__Multi__Class.ipynb ├── UNSW__LSTM-Binary.ipynb ├── UNSW__LSTM__Binary__Class.ipynb ├── UNSW__LSTM__Multi__Class.ipynb ├── best_model_cnn.h5 ├── bin_data.csv ├── le1_classes.npy ├── lstm_best_model.h5 ├── multi_data.csv └── plot.py ├── C7_Batch_Mini_Project_CSE300.pdf ├── LICENSE └── README.md /An Intrusion Detection System/NUSW-NB15_features.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AbiXnash/An-Intrusion-Detection-System-using-Deep-Learning-models-on-UNSW_NB15-dataset/9fc406fb3bd0cdea5d31eec8a341cd7cfbd1822b/An Intrusion Detection System/NUSW-NB15_features.csv -------------------------------------------------------------------------------- /An Intrusion Detection System/UNSW__CNN__Binary_Class.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 5, 6 | "id": "7e3bddef", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import numpy as np\n", 11 | "import pandas as pd\n", 12 | "from sklearn.model_selection import train_test_split\n", 13 | "from keras.models import Sequential\n", 14 | "from keras.layers import Conv1D, MaxPooling1D, Dropout, Dense, LSTM, Flatten\n", 15 | "from keras.optimizers import Adam\n", 16 | "from keras.callbacks import EarlyStopping, ModelCheckpoint\n", 17 | "from plot import plot_training_vs_validation\n", 18 | "from sklearn.metrics import confusion_matrix, classification_report" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 6, 24 | "id": "d9b008f8", 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "bin_data = pd.read_csv(\"bin_data.csv\")" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 7, 34 | "id": "c19f83cc", 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [ 38 | "X = bin_data.drop(columns = ['label'], axis = 1)\n", 39 | "Y = bin_data['label']" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 8, 45 | "id": "c81e2576", 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.20, random_state = 50)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 10, 55 | "id": "efbbda0a", 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "X_train_reshaped = X_train.values.reshape((X_train.shape[0], X_train.shape[1], 1))" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 11, 65 | "id": "bfb3b79a", 66 | "metadata": {}, 67 | "outputs": [], 68 | "source": [ 69 | "X_test_reshaped = X_test.values.reshape((X_test.shape[0], X_test.shape[1], 1))" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 13, 75 | "id": "93735f75", 76 | "metadata": {}, 77 | "outputs": [], 78 | "source": [ 79 | "unique_labels = np.unique(y_train)\n", 80 | "num_classes = len(unique_labels)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 14, 86 | "id": "60a6525a", 87 | "metadata": {}, 88 | "outputs": [ 89 | { 90 | "data": { 91 | "text/plain": [ 92 | "(array([0, 1], dtype=int64), 2)" 93 | ] 94 | }, 95 | "execution_count": 14, 96 | "metadata": {}, 97 | "output_type": "execute_result" 98 | } 99 | ], 100 | "source": [ 101 | "unique_labels, num_classes" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 18, 107 | "id": "15d8d34c", 108 | "metadata": {}, 109 | "outputs": [ 110 | { 111 | "name": "stdout", 112 | "output_type": "stream", 113 | "text": [ 114 | "WARNING:tensorflow:From C:\\Users\\Abinash\\anaconda3\\lib\\site-packages\\keras\\src\\backend.py:6642: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n", 115 | "\n" 116 | ] 117 | } 118 | ], 119 | "source": [ 120 | "cnn_model = Sequential()\n", 121 | "cnn_model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu', input_shape = (X_train.shape[1], 1)))\n", 122 | "cnn_model.add(MaxPooling1D(pool_size = 2))\n", 123 | "cnn_model.add(Dropout(0.35))\n", 124 | "cnn_model.add(Flatten())\n", 125 | "cnn_model.add(Dense(64, activation = 'relu'))\n", 126 | "cnn_model.add(Dense(num_classes, activation='softmax'))" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 24, 132 | "id": "eb21e13a", 133 | "metadata": {}, 134 | "outputs": [], 135 | "source": [ 136 | "adam_optimizer = Adam(learning_rate = 1e-4)\n", 137 | "cnn_model.compile(\n", 138 | " loss = 'sparse_categorical_crossentropy',\n", 139 | " optimizer = adam_optimizer,\n", 140 | " metrics = ['accuracy']\n", 141 | ")\n", 142 | "callbacks = [\n", 143 | " EarlyStopping(monitor = 'val_loss', patience = 10),\n", 144 | " ModelCheckpoint(\n", 145 | " filepath = 'best_model_cnn.h5',\n", 146 | " monitor = 'val_loss',\n", 147 | " save_best_only = True\n", 148 | " )\n", 149 | "]" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 25, 155 | "id": "524716f7", 156 | "metadata": {}, 157 | "outputs": [ 158 | { 159 | "name": "stdout", 160 | "output_type": "stream", 161 | "text": [ 162 | "Epoch 1/50\n", 163 | "364/364 [==============================] - 5s 8ms/step - loss: 0.2364 - accuracy: 0.9413 - val_loss: 0.1114 - val_accuracy: 0.9616\n", 164 | "Epoch 2/50\n", 165 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1492 - accuracy: 0.9496 - val_loss: 0.1394 - val_accuracy: 0.9593\n", 166 | "Epoch 3/50\n", 167 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1609 - accuracy: 0.9483 - val_loss: 0.1152 - val_accuracy: 0.9633\n", 168 | "Epoch 4/50\n", 169 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1677 - accuracy: 0.9479 - val_loss: 0.1268 - val_accuracy: 0.9593\n", 170 | "Epoch 5/50\n", 171 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1734 - accuracy: 0.9483 - val_loss: 0.1531 - val_accuracy: 0.9512\n", 172 | "Epoch 6/50\n", 173 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1521 - accuracy: 0.9497 - val_loss: 0.1589 - val_accuracy: 0.9366\n", 174 | "Epoch 7/50\n", 175 | "364/364 [==============================] - 2s 7ms/step - loss: 0.1513 - accuracy: 0.9504 - val_loss: 0.1303 - val_accuracy: 0.9594\n", 176 | "Epoch 8/50\n", 177 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1499 - accuracy: 0.9512 - val_loss: 0.1061 - val_accuracy: 0.9624\n", 178 | "Epoch 9/50\n", 179 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1484 - accuracy: 0.9520 - val_loss: 0.1154 - val_accuracy: 0.9598\n", 180 | "Epoch 10/50\n", 181 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1492 - accuracy: 0.9512 - val_loss: 0.1038 - val_accuracy: 0.9624\n", 182 | "Epoch 11/50\n", 183 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1608 - accuracy: 0.9501 - val_loss: 0.1035 - val_accuracy: 0.9630\n", 184 | "Epoch 12/50\n", 185 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1780 - accuracy: 0.9484 - val_loss: 0.1089 - val_accuracy: 0.9602\n", 186 | "Epoch 13/50\n", 187 | "364/364 [==============================] - 3s 8ms/step - loss: 0.2027 - accuracy: 0.9464 - val_loss: 0.1174 - val_accuracy: 0.9594\n", 188 | "Epoch 14/50\n", 189 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1995 - accuracy: 0.9475 - val_loss: 0.1030 - val_accuracy: 0.9640\n", 190 | "Epoch 15/50\n", 191 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1334 - accuracy: 0.9537 - val_loss: 0.1335 - val_accuracy: 0.9597\n", 192 | "Epoch 16/50\n", 193 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1279 - accuracy: 0.9558 - val_loss: 0.1298 - val_accuracy: 0.9616\n", 194 | "Epoch 17/50\n", 195 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1386 - accuracy: 0.9539 - val_loss: 0.1007 - val_accuracy: 0.9630\n", 196 | "Epoch 18/50\n", 197 | "364/364 [==============================] - 3s 7ms/step - loss: 0.2560 - accuracy: 0.9472 - val_loss: 0.1023 - val_accuracy: 0.9626\n", 198 | "Epoch 19/50\n", 199 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1287 - accuracy: 0.9553 - val_loss: 0.0994 - val_accuracy: 0.9642\n", 200 | "Epoch 20/50\n", 201 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1281 - accuracy: 0.9553 - val_loss: 0.1101 - val_accuracy: 0.9602\n", 202 | "Epoch 21/50\n", 203 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1232 - accuracy: 0.9571 - val_loss: 0.0980 - val_accuracy: 0.9638\n", 204 | "Epoch 22/50\n", 205 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1229 - accuracy: 0.9573 - val_loss: 0.0974 - val_accuracy: 0.9644\n", 206 | "Epoch 23/50\n", 207 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1254 - accuracy: 0.9568 - val_loss: 0.1171 - val_accuracy: 0.9598\n", 208 | "Epoch 24/50\n", 209 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1222 - accuracy: 0.9581 - val_loss: 0.0976 - val_accuracy: 0.9634\n", 210 | "Epoch 25/50\n", 211 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1268 - accuracy: 0.9572 - val_loss: 0.0993 - val_accuracy: 0.9652\n", 212 | "Epoch 26/50\n", 213 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1263 - accuracy: 0.9572 - val_loss: 0.1075 - val_accuracy: 0.9605\n", 214 | "Epoch 27/50\n", 215 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1235 - accuracy: 0.9577 - val_loss: 0.0977 - val_accuracy: 0.9631\n", 216 | "Epoch 28/50\n", 217 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1183 - accuracy: 0.9581 - val_loss: 0.1185 - val_accuracy: 0.9601\n", 218 | "Epoch 29/50\n", 219 | "364/364 [==============================] - 3s 10ms/step - loss: 0.1219 - accuracy: 0.9571 - val_loss: 0.0981 - val_accuracy: 0.9627\n", 220 | "Epoch 30/50\n", 221 | "364/364 [==============================] - 3s 10ms/step - loss: 0.1128 - accuracy: 0.9597 - val_loss: 0.1275 - val_accuracy: 0.9592\n", 222 | "Epoch 31/50\n", 223 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1150 - accuracy: 0.9597 - val_loss: 0.0928 - val_accuracy: 0.9656\n", 224 | "Epoch 32/50\n", 225 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1171 - accuracy: 0.9587 - val_loss: 0.0953 - val_accuracy: 0.9639\n", 226 | "Epoch 33/50\n", 227 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1145 - accuracy: 0.9596 - val_loss: 0.1041 - val_accuracy: 0.9648\n", 228 | "Epoch 34/50\n", 229 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1118 - accuracy: 0.9604 - val_loss: 0.0931 - val_accuracy: 0.9667\n", 230 | "Epoch 35/50\n", 231 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1145 - accuracy: 0.9599 - val_loss: 0.0934 - val_accuracy: 0.9648\n", 232 | "Epoch 36/50\n", 233 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1140 - accuracy: 0.9603 - val_loss: 0.1122 - val_accuracy: 0.9643\n", 234 | "Epoch 37/50\n", 235 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1069 - accuracy: 0.9615 - val_loss: 0.1083 - val_accuracy: 0.9610\n", 236 | "Epoch 38/50\n", 237 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1117 - accuracy: 0.9605 - val_loss: 0.0908 - val_accuracy: 0.9672\n", 238 | "Epoch 39/50\n", 239 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1106 - accuracy: 0.9606 - val_loss: 0.0931 - val_accuracy: 0.9670\n", 240 | "Epoch 40/50\n", 241 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1041 - accuracy: 0.9620 - val_loss: 0.0906 - val_accuracy: 0.9680\n", 242 | "Epoch 41/50\n", 243 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1057 - accuracy: 0.9621 - val_loss: 0.0919 - val_accuracy: 0.9658\n", 244 | "Epoch 42/50\n", 245 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1051 - accuracy: 0.9615 - val_loss: 0.1082 - val_accuracy: 0.9637\n", 246 | "Epoch 43/50\n", 247 | "364/364 [==============================] - 3s 8ms/step - loss: 0.1046 - accuracy: 0.9616 - val_loss: 0.1277 - val_accuracy: 0.9606\n", 248 | "Epoch 44/50\n", 249 | "364/364 [==============================] - 3s 9ms/step - loss: 0.1026 - accuracy: 0.9629 - val_loss: 0.0878 - val_accuracy: 0.9677\n", 250 | "Epoch 45/50\n", 251 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1056 - accuracy: 0.9617 - val_loss: 0.0918 - val_accuracy: 0.9661\n", 252 | "Epoch 46/50\n", 253 | "364/364 [==============================] - 3s 7ms/step - loss: 0.0994 - accuracy: 0.9633 - val_loss: 0.0912 - val_accuracy: 0.9666\n", 254 | "Epoch 47/50\n", 255 | "364/364 [==============================] - 3s 7ms/step - loss: 0.1936 - accuracy: 0.9533 - val_loss: 0.0888 - val_accuracy: 0.9683\n", 256 | "Epoch 48/50\n", 257 | "364/364 [==============================] - 3s 8ms/step - loss: 0.0975 - accuracy: 0.9638 - val_loss: 0.0944 - val_accuracy: 0.9650\n", 258 | "Epoch 49/50\n", 259 | "364/364 [==============================] - 3s 7ms/step - loss: 0.0958 - accuracy: 0.9647 - val_loss: 0.0971 - val_accuracy: 0.9646\n", 260 | "Epoch 50/50\n", 261 | "364/364 [==============================] - 3s 8ms/step - loss: 0.0978 - accuracy: 0.9638 - val_loss: 0.1017 - val_accuracy: 0.9643\n" 262 | ] 263 | } 264 | ], 265 | "source": [ 266 | "cnn_history = cnn_model.fit(\n", 267 | " X_train_reshpaed, y_train, epochs = 50, batch_size = 256, validation_data = (X_test_reshaped, y_test), callbacks=callbacks\n", 268 | ")" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": 26, 274 | "id": "bfe91458", 275 | "metadata": {}, 276 | "outputs": [ 277 | { 278 | "name": "stdout", 279 | "output_type": "stream", 280 | "text": [ 281 | "728/728 [==============================] - 3s 2ms/step\n" 282 | ] 283 | } 284 | ], 285 | "source": [ 286 | "y_test_probabilities = cnn_model.predict(X_test_reshaped)\n", 287 | "y_test_pred = np.argmax(y_test_probabilities, axis = 1)" 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": 27, 293 | "id": "596ea4ba", 294 | "metadata": {}, 295 | "outputs": [], 296 | "source": [ 297 | "conf_matrix = confusion_matrix(y_test, y_test_pred)" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 31, 303 | "id": "00a8f7b1", 304 | "metadata": {}, 305 | "outputs": [ 306 | { 307 | "name": "stdout", 308 | "output_type": "stream", 309 | "text": [ 310 | "[[17009 386]\n", 311 | " [ 445 5431]]\n" 312 | ] 313 | } 314 | ], 315 | "source": [ 316 | "print(conf_matrix)" 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": 32, 322 | "id": "5bb13f11", 323 | "metadata": {}, 324 | "outputs": [ 325 | { 326 | "name": "stdout", 327 | "output_type": "stream", 328 | "text": [ 329 | " precision recall f1-score support\n", 330 | "\n", 331 | " 0 0.97 0.98 0.98 17395\n", 332 | " 1 0.93 0.92 0.93 5876\n", 333 | "\n", 334 | " accuracy 0.96 23271\n", 335 | " macro avg 0.95 0.95 0.95 23271\n", 336 | "weighted avg 0.96 0.96 0.96 23271\n", 337 | "\n" 338 | ] 339 | } 340 | ], 341 | "source": [ 342 | "print(classification_report(y_test, y_test_pred))" 343 | ] 344 | }, 345 | { 346 | "cell_type": "code", 347 | "execution_count": 1, 348 | "id": "03074e72", 349 | "metadata": {}, 350 | "outputs": [ 351 | { 352 | "name": "stdout", 353 | "output_type": "stream", 354 | "text": [ 355 | "\n" 356 | ] 357 | } 358 | ], 359 | "source": [ 360 | "print()" 361 | ] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "execution_count": null, 366 | "id": "51148c28", 367 | "metadata": {}, 368 | "outputs": [], 369 | "source": [] 370 | } 371 | ], 372 | "metadata": { 373 | "kernelspec": { 374 | "display_name": "Python 3 (ipykernel)", 375 | "language": "python", 376 | "name": "python3" 377 | }, 378 | "language_info": { 379 | "codemirror_mode": { 380 | "name": "ipython", 381 | "version": 3 382 | }, 383 | "file_extension": ".py", 384 | "mimetype": "text/x-python", 385 | "name": "python", 386 | "nbconvert_exporter": "python", 387 | "pygments_lexer": "ipython3", 388 | "version": "3.10.9" 389 | } 390 | }, 391 | "nbformat": 4, 392 | "nbformat_minor": 5 393 | } 394 | -------------------------------------------------------------------------------- /An Intrusion Detection System/UNSW__CNN__Multi__Class.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "id": "_VRC2U4yGS4U" 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from sklearn.model_selection import train_test_split\n", 12 | "from keras.models import Sequential\n", 13 | "from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout\n", 14 | "from keras.optimizers import Adam\n", 15 | "from keras.callbacks import EarlyStopping, ModelCheckpoint\n", 16 | "import pandas as pd\n", 17 | "import numpy as np\n", 18 | "import matplotlib.pyplot as plt" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 2, 24 | "metadata": { 25 | "id": "1wH9LWDBHT6v" 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "bin_data = pd.read_csv(\"/content/bin_data.csv\")\n", 30 | "multi_data = pd.read_csv(\"/content/multi_data.csv\")" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 3, 36 | "metadata": { 37 | "colab": { 38 | "base_uri": "https://localhost:8080/" 39 | }, 40 | "id": "zJQPX3r_HT9i", 41 | "outputId": "53fd2566-7c03-4444-ea36-af977a331ae7" 42 | }, 43 | "outputs": [ 44 | { 45 | "name": "stdout", 46 | "output_type": "stream", 47 | "text": [ 48 | " Unnamed: 0 dur spkts dpkts sbytes dbytes rate \\\n", 49 | "0 3 2.802759e-02 0.001033 0.001089 0.000039 0.000053 0.000014 \n", 50 | "1 11 3.488503e-02 0.005730 0.002541 0.003919 0.000151 0.000043 \n", 51 | "2 15 3.333360e-08 0.000094 0.000000 0.000005 0.000000 0.500000 \n", 52 | "3 17 6.559318e-03 0.000845 0.000726 0.000055 0.000075 0.000043 \n", 53 | "4 21 5.633661e-03 0.000845 0.000545 0.000065 0.000018 0.000044 \n", 54 | "\n", 55 | " sttl dttl sload ... service_snmp service_ssh service_ssl \\\n", 56 | "0 0.138393 0.992126 0.000001 ... 0.0 0.0 0.0 \n", 57 | "1 0.138393 0.992126 0.000092 ... 0.0 0.0 0.0 \n", 58 | "2 0.995536 0.000000 0.119792 ... 1.0 0.0 0.0 \n", 59 | "3 0.138393 0.992126 0.000007 ... 0.0 0.0 0.0 \n", 60 | "4 0.995536 0.992126 0.000009 ... 0.0 0.0 0.0 \n", 61 | "\n", 62 | " state_ACC state_CON state_FIN state_INT state_REQ state_RST label \n", 63 | "0 0.0 0.0 1.0 0.0 0.0 0.0 1 \n", 64 | "1 0.0 0.0 1.0 0.0 0.0 0.0 1 \n", 65 | "2 0.0 0.0 0.0 1.0 0.0 0.0 1 \n", 66 | "3 0.0 0.0 1.0 0.0 0.0 0.0 1 \n", 67 | "4 0.0 0.0 1.0 0.0 0.0 0.0 1 \n", 68 | "\n", 69 | "[5 rows x 60 columns]\n", 70 | " Unnamed: 0 id dur spkts dpkts sbytes dbytes \\\n", 71 | "0 3 4 2.802759e-02 0.001033 0.001089 0.000039 0.000053 \n", 72 | "1 11 12 3.488503e-02 0.005730 0.002541 0.003919 0.000151 \n", 73 | "2 15 16 3.333360e-08 0.000094 0.000000 0.000005 0.000000 \n", 74 | "3 17 18 6.559318e-03 0.000845 0.000726 0.000055 0.000075 \n", 75 | "4 21 22 5.633661e-03 0.000845 0.000545 0.000065 0.000018 \n", 76 | "\n", 77 | " rate sttl dttl ... state_RST attack_cat_Analysis \\\n", 78 | "0 0.000014 0.138393 0.992126 ... 0.0 0 \n", 79 | "1 0.000043 0.138393 0.992126 ... 0.0 0 \n", 80 | "2 0.500000 0.995536 0.000000 ... 0.0 0 \n", 81 | "3 0.000043 0.138393 0.992126 ... 0.0 0 \n", 82 | "4 0.000044 0.995536 0.992126 ... 0.0 0 \n", 83 | "\n", 84 | " attack_cat_Backdoor attack_cat_DoS attack_cat_Exploits \\\n", 85 | "0 0 0 0 \n", 86 | "1 0 0 0 \n", 87 | "2 0 0 0 \n", 88 | "3 0 0 0 \n", 89 | "4 0 0 0 \n", 90 | "\n", 91 | " attack_cat_Fuzzers attack_cat_Generic attack_cat_Normal \\\n", 92 | "0 0 0 1 \n", 93 | "1 0 0 1 \n", 94 | "2 0 0 1 \n", 95 | "3 0 0 1 \n", 96 | "4 0 0 1 \n", 97 | "\n", 98 | " attack_cat_Reconnaissance attack_cat_Worms \n", 99 | "0 0 0 \n", 100 | "1 0 0 \n", 101 | "2 0 0 \n", 102 | "3 0 0 \n", 103 | "4 0 0 \n", 104 | "\n", 105 | "[5 rows x 70 columns]\n" 106 | ] 107 | } 108 | ], 109 | "source": [ 110 | "print(bin_data.head())\n", 111 | "print(multi_data.head())\n" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 4, 117 | "metadata": { 118 | "colab": { 119 | "base_uri": "https://localhost:8080/" 120 | }, 121 | "id": "lo2bvjNdHUA6", 122 | "outputId": "4f63ab2a-6d8a-4cd2-a09b-9e60be08f27a" 123 | }, 124 | "outputs": [ 125 | { 126 | "name": "stdout", 127 | "output_type": "stream", 128 | "text": [ 129 | "(116352, 60)\n", 130 | "(116352, 70)\n" 131 | ] 132 | } 133 | ], 134 | "source": [ 135 | "print(bin_data.shape)\n", 136 | "print(multi_data.shape)\n", 137 | "\n" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": 5, 143 | "metadata": { 144 | "id": "MGejZBGKHl1i" 145 | }, 146 | "outputs": [], 147 | "source": [ 148 | "X = multi_data.drop(columns=['label'], axis=1)\n", 149 | "Y = multi_data['label']\n", 150 | "X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=50)\n", 151 | "\n", 152 | "X_train_reshaped = np.expand_dims(X_train.values, axis=2)\n", 153 | "X_test_reshaped = np.expand_dims(X_test.values, axis=2)\n", 154 | "\n", 155 | "cnn_model = Sequential()\n", 156 | "cnn_model.add(Conv1D(64, kernel_size=3, activation='relu', input_shape=(X_train_reshaped.shape[1], 1)))\n", 157 | "cnn_model.add(MaxPooling1D(pool_size=2))\n", 158 | "cnn_model.add(Conv1D(32, kernel_size=3, activation='relu'))\n", 159 | "cnn_model.add(MaxPooling1D(pool_size=2))\n", 160 | "cnn_model.add(Flatten())\n", 161 | "cnn_model.add(Dense(64, activation='relu'))\n", 162 | "cnn_model.add(Dropout(0.2))\n", 163 | "cnn_model.add(Dense(10, activation='softmax')) # Assuming 10 classes for multiclass classification\n" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 6, 169 | "metadata": { 170 | "colab": { 171 | "base_uri": "https://localhost:8080/" 172 | }, 173 | "id": "UwiPZlw0HzAg", 174 | "outputId": "b46968fd-8dd5-413e-af68-24e39c55fd27" 175 | }, 176 | "outputs": [ 177 | { 178 | "name": "stdout", 179 | "output_type": "stream", 180 | "text": [ 181 | "Epoch 1/50\n", 182 | "1455/1455 [==============================] - 17s 11ms/step - loss: 38.4775 - accuracy: 0.4868 - val_loss: 1.1500 - val_accuracy: 0.6673\n", 183 | "Epoch 2/50\n", 184 | " 19/1455 [..............................] - ETA: 12s - loss: 1.3101 - accuracy: 0.5164" 185 | ] 186 | }, 187 | { 188 | "name": "stderr", 189 | "output_type": "stream", 190 | "text": [ 191 | "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py:3103: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.\n", 192 | " saving_api.save_model(\n" 193 | ] 194 | }, 195 | { 196 | "name": "stdout", 197 | "output_type": "stream", 198 | "text": [ 199 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.9753 - accuracy: 0.6616 - val_loss: 0.5435 - val_accuracy: 0.8946\n", 200 | "Epoch 3/50\n", 201 | "1455/1455 [==============================] - 17s 12ms/step - loss: 0.7494 - accuracy: 0.7527 - val_loss: 0.5511 - val_accuracy: 0.8815\n", 202 | "Epoch 4/50\n", 203 | "1455/1455 [==============================] - 17s 11ms/step - loss: 0.6917 - accuracy: 0.7757 - val_loss: 0.4701 - val_accuracy: 0.9215\n", 204 | "Epoch 5/50\n", 205 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.5949 - accuracy: 0.8233 - val_loss: 0.4506 - val_accuracy: 0.9248\n", 206 | "Epoch 6/50\n", 207 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.5731 - accuracy: 0.8444 - val_loss: 0.3245 - val_accuracy: 0.9255\n", 208 | "Epoch 7/50\n", 209 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.4401 - accuracy: 0.8775 - val_loss: 0.2643 - val_accuracy: 0.9322\n", 210 | "Epoch 8/50\n", 211 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.3402 - accuracy: 0.9028 - val_loss: 0.2327 - val_accuracy: 0.9276\n", 212 | "Epoch 9/50\n", 213 | "1455/1455 [==============================] - 17s 12ms/step - loss: 0.3555 - accuracy: 0.8960 - val_loss: 0.2264 - val_accuracy: 0.9327\n", 214 | "Epoch 10/50\n", 215 | "1455/1455 [==============================] - 17s 11ms/step - loss: 0.2945 - accuracy: 0.9106 - val_loss: 0.1998 - val_accuracy: 0.9314\n", 216 | "Epoch 11/50\n", 217 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.3085 - accuracy: 0.8954 - val_loss: 0.2077 - val_accuracy: 0.9365\n", 218 | "Epoch 12/50\n", 219 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.2583 - accuracy: 0.9154 - val_loss: 0.1776 - val_accuracy: 0.9297\n", 220 | "Epoch 13/50\n", 221 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.2742 - accuracy: 0.9034 - val_loss: 0.1788 - val_accuracy: 0.9300\n", 222 | "Epoch 14/50\n", 223 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.2482 - accuracy: 0.9137 - val_loss: 0.1627 - val_accuracy: 0.9343\n", 224 | "Epoch 15/50\n", 225 | "1455/1455 [==============================] - 18s 12ms/step - loss: 0.2627 - accuracy: 0.9172 - val_loss: 0.2712 - val_accuracy: 0.9266\n", 226 | "Epoch 16/50\n", 227 | "1455/1455 [==============================] - 17s 11ms/step - loss: 0.2275 - accuracy: 0.9261 - val_loss: 0.1670 - val_accuracy: 0.9468\n", 228 | "Epoch 17/50\n", 229 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.2002 - accuracy: 0.9344 - val_loss: 0.1551 - val_accuracy: 0.9359\n", 230 | "Epoch 18/50\n", 231 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.2004 - accuracy: 0.9338 - val_loss: 0.1405 - val_accuracy: 0.9480\n", 232 | "Epoch 19/50\n", 233 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.2012 - accuracy: 0.9346 - val_loss: 0.1414 - val_accuracy: 0.9474\n", 234 | "Epoch 20/50\n", 235 | "1455/1455 [==============================] - 17s 11ms/step - loss: 0.2004 - accuracy: 0.9331 - val_loss: 0.1299 - val_accuracy: 0.9499\n", 236 | "Epoch 21/50\n", 237 | "1455/1455 [==============================] - 18s 12ms/step - loss: 0.1840 - accuracy: 0.9390 - val_loss: 0.1792 - val_accuracy: 0.9318\n", 238 | "Epoch 22/50\n", 239 | "1455/1455 [==============================] - 17s 12ms/step - loss: 0.2041 - accuracy: 0.9290 - val_loss: 0.1505 - val_accuracy: 0.9378\n", 240 | "Epoch 23/50\n", 241 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.1846 - accuracy: 0.9392 - val_loss: 0.1384 - val_accuracy: 0.9473\n", 242 | "Epoch 24/50\n", 243 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.1729 - accuracy: 0.9414 - val_loss: 0.1308 - val_accuracy: 0.9508\n", 244 | "Epoch 25/50\n", 245 | "1455/1455 [==============================] - 16s 11ms/step - loss: 0.1734 - accuracy: 0.9411 - val_loss: 0.1472 - val_accuracy: 0.9404\n" 246 | ] 247 | } 248 | ], 249 | "source": [ 250 | "adam_optimizer = Adam(learning_rate=1e-4)\n", 251 | "cnn_model.compile(loss='sparse_categorical_crossentropy', optimizer=adam_optimizer, metrics=['accuracy'])\n", 252 | "\n", 253 | "early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)\n", 254 | "model_checkpoint = ModelCheckpoint('cnn_best_model.h5', monitor='val_loss', save_best_only=True)\n", 255 | "\n", 256 | "cnn_history = cnn_model.fit(\n", 257 | " X_train_reshaped, y_train,\n", 258 | " epochs=50,\n", 259 | " batch_size=64,\n", 260 | " validation_data=(X_test_reshaped, y_test),\n", 261 | " callbacks=[early_stopping, model_checkpoint]\n", 262 | ")\n", 263 | "\n" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": 7, 269 | "metadata": { 270 | "colab": { 271 | "base_uri": "https://localhost:8080/", 272 | "height": 462 273 | }, 274 | "id": "FaKXhMzlH7JA", 275 | "outputId": "39f44b8c-6c13-4788-babb-4e5ebc9dd4a0" 276 | }, 277 | "outputs": [ 278 | { 279 | "data": { 280 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+oAAAGJCAYAAAAdYckPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACrVklEQVR4nOzdd1hT59sH8G8SIGyQPUQZDnAr7q1VcZQ6aLWOOupoLdiq7VtrbdXaVmutrXVUf7WO2kpdVavVOuuoe08UFwoqw8WGAMl5/zgmiIAyEg6B7+e6ckFOTs65E9DDned+7kcmCIIAIiIiIiIiIioX5FIHQERERERERES5mKgTERERERERlSNM1ImIiIiIiIjKESbqREREREREROUIE3UiIiIiIiKicoSJOhEREREREVE5wkSdiIiIiIiIqBxhok5ERERERERUjjBRJyIiIiIiIipHmKhThTd8+HB4e3uX6LnTp0+HTCbTb0AVVEHvlbe3N4YPH/7S565cuRIymQy3b9/WWzy3b9+GTCbDypUr9XZMIiLSH16fywavz0TGiYk6SUYmkxXptn//fqlDrVASEhJgYmKCIUOGFLpPSkoKLCws0K9fvzKMrGTCw8Mxb948qcPIY/jw4bC2tpY6DCKiEuH1WRq8Ppet/v37QyaTYdKkSVKHQlQgE6kDoMrrt99+y3N/1apV2L17d77tAQEBpTrP0qVLodFoSvTczz77DJ988kmpzl/euLi4oGvXrvjrr7+Qnp4OS0vLfPts3LgRmZmZL/xjoSgiIyMhlxv288Dw8HBcunQJ48ePz7O9evXqyMjIgKmpqUHPT0RU0fD6LA1en8tOcnIytm7dCm9vb/zxxx/45ptvWKFB5Q4TdZLM8xeZY8eOYffu3S+9+BR28SpMaS4EJiYmMDGpeP9MBg8ejB07dmDLli1488038z0eHh4OOzs79OrVq1TnUSqVpXp+achkMpibm0t2fiIiY8Xrs3R4fS4bf/75J9RqNZYvX47OnTvj4MGD6NChg6QxFUQQBGRmZsLCwkLqUEgCLH2ncq1jx46oV68eTp8+jfbt28PS0hKffvopAOCvv/5Cr1694OHhAaVSCT8/P3z55ZdQq9V5jvH8HDjt3KjvvvsOP//8M/z8/KBUKtGsWTOcPHkyz3MLmtclk8kQFhaGzZs3o169elAqlahbty527NiRL/79+/ejadOmMDc3h5+fH/73v/8VaV5dWFgYrK2tkZ6enu+xgQMHws3NTfc6T506haCgIDg5OcHCwgI+Pj54++23X3j8vn37wsrKCuHh4fkeS0hIwN69e/H6669DqVTiv//+wxtvvIFq1apBqVTCy8sLEyZMQEZGxgvPARQ8B+7y5cvo3LkzLCwsULVqVXz11VcFjqgU5efbsWNHbNu2DXfu3NGVYmp/1oXNgfv333/Rrl07WFlZwd7eHr1798aVK1fy7KP9Gd24cQPDhw+Hvb097OzsMGLEiAJ/JiW1fv16BAYGwsLCAk5OThgyZAju3buXZ5+4uDiMGDECVatWhVKphLu7O3r37p1nvmBJfgeIiEqD12den435+rx69Wp07doVnTp1QkBAAFavXl3gflevXkX//v3h7OwMCwsL1K5dG1OmTMmzz7179zBy5Ejd++Hj44OxY8ciKysrT8zPK2j+v7e3N1599VXs3LkTTZs2hYWFBf73v/8BAFasWIHOnTvDxcUFSqUSderUweLFiwuM+59//kGHDh1gY2MDW1tbNGvWTPc7NW3aNJiamuLBgwf5njdmzBjY29sjMzPz5W8iGVzF+yiSKpxHjx6hR48eePPNNzFkyBC4uroCEP+Ds7a2xsSJE2FtbY1///0XU6dORXJyMubMmfPS44aHhyMlJQXvvPMOZDIZvv32W/Tr1w+3bt166af8hw4dwsaNG/Hee+/BxsYG8+fPR0hICKKjo+Ho6AgAOHv2LLp37w53d3d88cUXUKvVmDFjBpydnV8a24ABA7Bo0SJs27YNb7zxhm57eno6tm7diuHDh0OhUCAhIQHdunWDs7MzPvnkE9jb2+P27dvYuHHjC49vZWWF3r17Y8OGDXj8+DEcHBx0j61duxZqtRqDBw8GICaT6enpGDt2LBwdHXHixAksWLAAd+/exfr161/6Wp4VFxeHTp06IScnB5988gmsrKzw888/F/hJcVF+vlOmTEFSUhLu3r2LH374AQBeODd8z5496NGjB3x9fTF9+nRkZGRgwYIFaNOmDc6cOZOvqVH//v3h4+ODWbNm4cyZM/jll1/g4uKC2bNnF+t1F2TlypUYMWIEmjVrhlmzZiE+Ph4//vgjDh8+jLNnz8Le3h4AEBISgsuXL2PcuHHw9vZGQkICdu/ejejoaN39kvwOEBGVFq/PvD4b4/X5/v372LdvH3799VcA4gcsP/zwAxYuXAgzMzPdfhcuXEC7du1gamqKMWPGwNvbGzdv3sTWrVvx9ddf647VvHlzJCYmYsyYMfD398e9e/ewYcMGpKen5zleUUVGRmLgwIF45513MHr0aNSuXRsAsHjxYtStWxevvfYaTExMsHXrVrz33nvQaDQIDQ3VPX/lypV4++23UbduXUyePBn29vY4e/YsduzYgUGDBuGtt97CjBkzsHbtWoSFhemel5WVhQ0bNiAkJETyigd6SiAqJ0JDQ4XnfyU7dOggABCWLFmSb//09PR829555x3B0tJSyMzM1G0bNmyYUL16dd39qKgoAYDg6OgoPH78WLf9r7/+EgAIW7du1W2bNm1avpgACGZmZsKNGzd0286fPy8AEBYsWKDbFhwcLFhaWgr37t3Tbbt+/bpgYmKS75jP02g0gqenpxASEpJn+7p16wQAwsGDBwVBEIRNmzYJAISTJ0++8HgF2bZtmwBA+N///pdne8uWLQVPT09BrVYLglDw+zxr1ixBJpMJd+7c0W0r6L2qXr26MGzYMN398ePHCwCE48eP67YlJCQIdnZ2AgAhKipKt72oP99evXrl+flqaX/OK1as0G1r1KiR4OLiIjx69Ei37fz584JcLheGDh2a77W8/fbbeY7Zt29fwdHRMd+5njds2DDBysqq0MezsrIEFxcXoV69ekJGRoZu+99//y0AEKZOnSoIgiA8efJEACDMmTOn0GOV5neAiKgoeH3OxeuzcV+fBUEQvvvuO8HCwkJITk4WBEEQrl27JgAQNm3alGe/9u3bCzY2NnneS0EQfwe0hg4dKsjl8gJ/ztr9Cnr/BUEQVqxYke+9rV69ugBA2LFjR779C3rfg4KCBF9fX939xMREwcbGRmjRokWevy+ej7tVq1ZCixYt8jy+ceNGAYCwb9++fOchabD0nco9pVKJESNG5Nv+7Ke8KSkpePjwIdq1a4f09HRcvXr1pccdMGAAqlSporvfrl07AMCtW7de+twuXbrAz89Pd79BgwawtbXVPVetVmPPnj3o06cPPDw8dPvVqFEDPXr0eOnxZTIZ3njjDWzfvh2pqam67WvXroWnpyfatm0LALpR17///hvZ2dkvPe6ztJ/0P1teFxUVhWPHjmHgwIG6JjPPvs9paWl4+PAhWrduDUEQcPbs2WKd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\n", 281 | "text/plain": [ 282 | "
" 283 | ] 284 | }, 285 | "metadata": {}, 286 | "output_type": "display_data" 287 | }, 288 | { 289 | "name": "stdout", 290 | "output_type": "stream", 291 | "text": [ 292 | "728/728 [==============================] - 2s 3ms/step - loss: 0.1299 - accuracy: 0.9499\n", 293 | "Test Loss: 0.12991346418857574\n", 294 | "Test Accuracy: 0.9499377012252808\n" 295 | ] 296 | } 297 | ], 298 | "source": [ 299 | "def plot_training_vs_validation(history):\n", 300 | " plt.figure(figsize=(12, 4))\n", 301 | "\n", 302 | " # Plot loss\n", 303 | " plt.subplot(1, 2, 1)\n", 304 | " plt.plot(history.history['loss'], label='Training Loss')\n", 305 | " plt.plot(history.history['val_loss'], label='Validation Loss')\n", 306 | " plt.xlabel('Epochs')\n", 307 | " plt.ylabel('Loss')\n", 308 | " plt.title('Training vs Validation Loss')\n", 309 | " plt.legend()\n", 310 | "\n", 311 | " # Plot accuracy\n", 312 | " plt.subplot(1, 2, 2)\n", 313 | " plt.plot(history.history['accuracy'], label='Training Accuracy')\n", 314 | " plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n", 315 | " plt.xlabel('Epochs')\n", 316 | " plt.ylabel('Accuracy')\n", 317 | " plt.title('Training vs Validation Accuracy')\n", 318 | " plt.legend()\n", 319 | "\n", 320 | " plt.show()\n", 321 | "\n", 322 | "plot_training_vs_validation(cnn_history)\n", 323 | "\n", 324 | "test_loss, test_accuracy = cnn_model.evaluate(X_test_reshaped, y_test)\n", 325 | "\n", 326 | "print(f\"Test Loss: {test_loss}\")\n", 327 | "print(f\"Test Accuracy: {test_accuracy}\")" 328 | ] 329 | } 330 | ], 331 | "metadata": { 332 | "colab": { 333 | "provenance": [] 334 | }, 335 | "kernelspec": { 336 | "display_name": "Python 3 (ipykernel)", 337 | "language": "python", 338 | "name": "python3" 339 | }, 340 | "language_info": { 341 | "codemirror_mode": { 342 | "name": "ipython", 343 | "version": 3 344 | }, 345 | "file_extension": ".py", 346 | "mimetype": "text/x-python", 347 | "name": "python", 348 | "nbconvert_exporter": "python", 349 | "pygments_lexer": "ipython3", 350 | "version": "3.10.9" 351 | } 352 | }, 353 | "nbformat": 4, 354 | "nbformat_minor": 1 355 | } 356 | -------------------------------------------------------------------------------- /An Intrusion Detection System/UNSW__LSTM-Binary.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "c95a7436", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import numpy as np\n", 11 | "import pandas as pd\n", 12 | "import numpy as np\n", 13 | "import pandas as pd\n", 14 | "from sklearn.model_selection import train_test_split\n", 15 | "from keras.models import Sequential\n", 16 | "from keras.layers import Conv1D, MaxPooling1D, Dropout, Dense, LSTM\n", 17 | "from keras.optimizers import Adam\n", 18 | "from keras.callbacks import EarlyStopping, ModelCheckpoint\n", 19 | "from plot import plot_training_vs_validation\n", 20 | "from sklearn.metrics import confusion_matrix, classification_report" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "id": "a618b559", 26 | "metadata": {}, 27 | "source": [ 28 | "## Binary Class | LSTM" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "id": "c7f23224", 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [ 38 | "bin_data = pd.read_csv(\"bin_data.csv\")\n", 39 | "multi_data = pd.read_csv(\"multi_data.csv\")" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "id": "142e04b4", 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "X = bin_data.drop(columns=['label'],axis=1)\n", 50 | "Y = bin_data['label']" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": null, 56 | "id": "2f643488", 57 | "metadata": {}, 58 | "outputs": [], 59 | "source": [ 60 | "X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=50)\n", 61 | "\n", 62 | "X_train_reshaped = X_train.values.reshape((X_train.shape[0], X_train.shape[1], 1))\n", 63 | "X_test_reshaped = X_test.values.reshape((X_test.shape[0], X_test.shape[1], 1))" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": null, 69 | "id": "84dee940", 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "unique_labels = np.unique(y_train)\n", 74 | "num_classes = len(unique_labels)\n", 75 | "\n", 76 | "print(\"Unique Labels:\", unique_labels)\n", 77 | "print(\"Number of Classes:\", num_classes)" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": null, 83 | "id": "cdbbf743", 84 | "metadata": {}, 85 | "outputs": [], 86 | "source": [ 87 | "from keras.models import Sequential\n", 88 | "from keras.layers import LSTM, Dense\n", 89 | "\n", 90 | "from keras.layers import Dropout\n", 91 | "\n", 92 | "lstm_model = Sequential()\n", 93 | "lstm_model.add(LSTM(64, activation='relu', input_shape=(X_train.shape[1], 1)))\n", 94 | "lstm_model.add(Dropout(0.35)) \n", 95 | "lstm_model.add(Dense(64, activation='relu'))\n", 96 | "lstm_model.add(Dropout(0.15)) \n", 97 | "lstm_model.add(Dense(num_classes+7, activation='softmax'))\n", 98 | "\n", 99 | "adam_optimizer = Adam(learning_rate=1e-4)\n", 100 | "lstm_model.compile(loss='sparse_categorical_crossentropy', optimizer=adam_optimizer, metrics=['accuracy'])\n", 101 | "\n", 102 | "callbacks = [\n", 103 | " EarlyStopping(monitor='val_loss', patience=10),\n", 104 | " ModelCheckpoint(filepath='best_model_cnn.h5', monitor='val_loss', save_best_only=True)\n", 105 | "]\n", 106 | "\n", 107 | "lstm_history = lstm_model.fit(\n", 108 | " X_train_reshaped, y_train,\n", 109 | " epochs=50,\n", 110 | " batch_size=256,\n", 111 | " validation_data=(X_test_reshaped, y_test),\n", 112 | " callbacks=callbacks\n", 113 | ")\n" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 172, 119 | "id": "7dc5c874", 120 | "metadata": {}, 121 | "outputs": [ 122 | { 123 | "data": { 124 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAADSB0lEQVR4nOzdeVxU9f7H8dcwwAAC7iIquOSe+75k2iKmZqV5s83d0qzMLH832zXLVqUyLW8qWqZmptVNS1o0S8sll8qubSpp4K7INgxwfn9MMzmyI3BgeD8fj3nMzJmzfOd8sQ5vPt/vsRiGYSAiIiIiIiIiIlKKfMxugIiIiIiIiIiIVDwKpUREREREREREpNQplBIRERERERERkVKnUEpEREREREREREqdQikRERERERERESl1CqVERERERERERKTUKZQSEREREREREZFSp1BKRERERERERERKnUIpEREREREREREpdQqlpNywWCwFemzcuPGijvPkk09isViKtO3GjRuLpQ1lzeDBgwkMDOTMmTO5rnPbbbfh5+fH0aNHC7xfi8XCk08+6X5fmPM3atQoGjRoUOBjnW/evHnExMRkW37w4EEsFkuOn5WmKVOmYLFYuPbaa01th7dr0KBBvufYMAxWrFhBr169qFWrFgEBAdSrV49+/frx5ptvAs6fxYL8t2nUqFEA9OnTB4vFQqNGjTAMI9sxv/rqK/c2Zv8siojo+ss8uv4qea6fuxMnTpT6sUuKqz/fe++9PNc7efIk06ZNo2XLllSqVInKlSvTvHlzhg8fzt69e4HC/ft39eOFP1/nGzNmjHsdERdfsxsgUlBbt271eP/UU0/x5Zdf8sUXX3gsb9my5UUdZ9y4cVxzzTVF2rZDhw5s3br1ottQ1owdO5a1a9fyzjvvMHHixGyfnz17ljVr1nDttdcSFhZW5OOU1vmbN28eNWrUcIcELuHh4WzdupVLLrmkRI+fF4fDwdtvvw3AJ598wpEjR6hbt65p7anopk2bxnPPPccdd9zB1KlTCQkJ4dChQ3zxxRd88MEHjBs3jscee4wJEya4t/n++++5++67eeaZZ7jiiivcy2vWrOl+HRISwoEDB/jiiy+46qqrPI65aNEiQkNDSUxMLPkvKCKSD11/mUfXX1JSkpKS6NatG0lJSUydOpW2bduSmprKL7/8wvvvv8/u3btp06ZNof79nzp1CnBe48TExPD444/j4+PjccxVq1bpGkeyUSgl5Ua3bt083tesWRMfH59syy+UkpJCUFBQgY9Tr1496tWrV6Q2hoaG5tue8qh///7UqVOHRYsW5XhRtHz5clJTUxk7duxFHcfs82ez2Uzvvw8++IDjx48zcOBAPv74Y5YsWcLDDz9saptyU9h/W+VNamoq0dHRjBgxggULFnh8NmrUKLKysgC45JJLPC6k09LSAGjSpEmuP0+RkZGEhISwaNEij1Dq3LlzrFq1ittuu43//Oc/xf2VREQKTddf5tH1l5SUVatW8dtvv/HFF194/AENnBX7rmucwvz7d4VSw4YN48033+Tzzz+nb9++7s9XrlxJZmYmN9xwg/sPsCKg4XviZfr06UOrVq346quv6NGjB0FBQYwZMwZw/ocwKiqK8PBwAgMDadGiBQ899BDJycke+8ipfNw1zOeTTz6hQ4cOBAYG0rx5cxYtWuSxXk7lz6NGjSI4OJjffvuNAQMGEBwcTEREBA888AB2u91j+8OHDzN06FBCQkKoUqUKt912G9u3b8+3pHnPnj1YLBYWLlyY7bP169djsVj48MMPATh+/Dh33nknERER2Gw2atasSc+ePfnss89y3b/VamXkyJHs3LmTH374IdvnixcvJjw8nP79+3P8+HEmTpxIy5YtCQ4OplatWlx55ZVs3rw51/275FY+HhMTQ7NmzbDZbLRo0YKlS5fmuP306dPp2rUr1apVIzQ0lA4dOrBw4UKPIVINGjTgp59+YtOmTe7yYVcZem7l419//TVXXXUVISEhBAUF0aNHDz7++ONsbbRYLHz55Zfcdddd1KhRg+rVqzNkyBD++uuvfL+7y8KFC/H392fx4sVERESwePHiHId4/e9//+OWW24hLCwMm81GZGQkI0aM8PiZOnLkiLuv/f39qVOnDkOHDnWX+LvafPDgQY9959QPxfFvC+C7775j0KBBVK9enYCAAC655BImT54MwObNm7FYLCxfvjzbdkuXLsVisbB9+/YCn8uLlZycjN1uJzw8PMfPz//rX1GMGTOG999/32NYxooVKwC4+eabL2rfIiKlSddfuv4q79df+fnwww/p3r07QUFBhISE0Ldv32xVRAXp4127dnHttddSq1YtbDYbderUYeDAgRw+fLjY2loQJ0+eBCiRa5xmzZrRo0ePbP9OFy1axJAhQ6hcuXKR9y3eSaGUeJ34+Hhuv/12br31VtatW+f+y9Kvv/7KgAEDWLhwIZ988gmTJ0/m3XffZdCgQQXa7549e3jggQe4//77+eCDD2jTpg1jx47lq6++yndbh8PBddddx1VXXcUHH3zAmDFjmDNnDs8995x7neTkZK644gq+/PJLnnvuOd59913CwsIYNmxYvvtv27Yt7du3Z/Hixdk+i4mJoVatWgwYMACA4cOHs3btWh5//HE2bNjAm2++ydVXX+3+n1NuXGPAL/wfzL59+9i2bRsjR47EarW6/0ryxBNP8PHHH7N48WIaNWpEnz59ijTXQ0xMDKNHj6ZFixasXr2aRx99lKeeeipb2TA4L2rGjx/Pu+++y/vvv8+QIUO49957eeqpp9zrrFmzhkaNGtG+fXu2bt3K1q1bWbNmTa7H37RpE1deeSVnz55l4cKFLF++nJCQEAYNGsTKlSuzrT9u3Dj8/Px45513eP7559m4cSO33357gb7r4cOH2bBhA9dffz01a9Zk5MiR/Pbbb9l+xvbs2UPnzp359ttvmTFjBuvXr2fWrFnY7XbS09MBZyDVuXNn1qxZw5QpU1i/fj3R0dFUrlyZ06dPF6g9F7rYf1uffvopvXr1Ii4ujtmzZ7N+/XoeffRRd0jWq1cv2rdvz2uvvZbt2HPnzqVz58507ty5SG0viho1atC4cWPmzZvH7Nmz+d///pdjQFhUN998M1ar1SOEW7hwIUOHDiU0NLTYjiMiUhp0/eVJ11/l5/orP++88w7XX389oaGhLF++nIULF3L69Gn69OnD119/7V4vvz5OTk6mb9++HD16lNdee43Y2Fiio6OJjIzk3LlzxdLWgurevTsAI0aMYO3atfn+HBaWa+ip65pz//79bNmy5aKr+sRLGSLl1MiRI41KlSp5LOvdu7cBGJ9//nme22ZlZRkOh8PYtGmTARh79uxxf/bEE08YF/7TqF+/vhEQEGAcOnTIvSw1NdWoVq2aMX78ePeyL7/80gCML7/80qOdgPHuu+967HPAgAFGs2bN3O9fe+01AzDWr1/vsd748eMNwFi8eHGe3+mVV14xAGP//v3uZadOnTJsNpvxwAMPuJcFBwcbkydPznNfuendu7dRo0YNIz093b3sgQceMADjl19+yXGbjIwMw+FwGFdddZUxePBgj88A44knnnC/v/D8ZWZmGnXq1DE6dOhgZGVludc7ePCg4efnZ9SvXz/XtmZmZhoOh8OYMWOGUb16dY/tL730UqN3797Ztjlw4EC2c92tWzejVq1axrlz5zy+U6tWrYx69eq597t48WIDMCZOnOixz+eff94AjPj4+Fzb6jJjxgwDMD755BPDMAzjjz/+MCwWizF8+HCP9a688kqjSpUqxrFjx3Ld15gxYww/Pz9j3759ua7javOBAwc8luf0c1wc/7YuueQS45JLLjFSU1PzbdOuXbvcy7Zt22YAxpIlS/I8dmHVr1/fGDhwYJ7rbNu2zYiMjDQAAzBCQkKMa6+91li6dKnHz9T5XOdv1apVOX7eu3dv49JLLzUMw/nfh06dOhmGYRg//fSTARgbN240tm/fXqB/9yIipU3XX550/eWpvF1/uX7ujh8/nuv3qVOnjtG6dWsjMzPTvfzcuXNGrVq1jB49eriX5dfHO3bsMABj7dq1ebbpYuV3HeIyY8YMw9/f332N07BhQ2PChAke/y4vlNO/fxdXP77wwgvGuXPnjODgYGPu3LmGYRjG1KlTjYYNGxpZWVnG3Xffne3fulRsqpQSr1O1alWuvPLKbMv/+OMPbr31VmrXro3VasXPz4/evXsD8PPPP+e733bt2hEZGel+HxAQQNOmTTl06FC+21oslmx/EWzTpo3Htps2bSIkJCTbJJ+33HJLvvsH591XbDabR+nz8uXLsdvtjB492r2sS5cuxMTEMHPmTL799lscDkeB9g/Ov3qcOHHCXYqekZHB22+/Ta9evWjSpIl7vddff50OHToQEBCAr68vfn5+fP755wU6z+fbv38/f/31F7feeqtHSX/9+vXp0aNHtvW/+OILrr76aipXruzu48cff5yTJ09y7NixQh0bnH/R+u677xg6dCjBwcHu5VarleHDh3P48GH279/vsc11113n8b5NmzYA+f6cGIbhHrLnGn/fsGFD+vTpw+rVq90TQqakpLBp0yZuuukmj4mzL7R+/XquuOIKWrRoUfAvnI+L+bf1yy+/8PvvvzN27FgCAgJyPcYtt9xCrVq1PKqlXn31VWrWrJnvX60zMjI8HkYxVDV17tyZ3377jU8++YSHH36Y7t278/nnnzNixAiuu+66iz7GmDFj2LFjBz/88AMLFy7kkksu4fLLL7/odouIlDZdf8W4l+n6q/xcf+XHdS6GDx/uMaQtODiYG2+8kW+//ZaUlBQg/z5u3LgxVatW5d///jevv/46+/btK1AbDMPIdo1THB577DHi4uJYtGgR48ePJzg4mNdff52OHTvmOJVCYQQHB/Ovf/2LRYsWkZGRwdKlSxk9erTuuic5UiglXiensdFJSUn06tWL7777jpkzZ7Jx40a2b9/O+++/DzgnNM5P9erVsy2z2WwF2jYoKCjbL+I2m809ITI4x3bndOeUgt5NpVq1alx33XUsXbqUzMxMwFl63aVLFy699FL3eitXrmTkyJG8+eabdO/enWrVqjFixAgSEhLyPcbQoUOpXLmyu0x93bp1HD161KMUd/bs2dx111107dqV1atX8+2337J9+3auueaaAp2r87lKiWvXrp3tswuXbdu2jaioKAD+85//8M0337B9+3YeeeQRoGB9fKHTp09jGEaOP1N16tTxaKPLhT8nNputQMf/4osvOHDgAP/6179ITEzkzJkznDlzhptuuomUlBT3xcHp06fJzMzMdzLY48ePF3nC2NxczL+t48ePA+TbJpvNxvjx43nnnXc4c+YMx48f591332XcuHHuc5kbPz8/j8eSJUuK8jVz3G+/fv14+umn+fTTT/nzzz/p06cP//3vf1m/fv1F7fvyyy+nSZMmvPHGG7z11lvuYRoiIuWNrr90/VUer7/yk9fcS3Xq1CErK8s9RC2/Pq5cuTKbNm2iXbt2PPzww1x66aXUqVOHJ554Is+QcsmSJdmucYpLWFgYo0eP5vXXX2fv3r1s2rQJf39/7rvvvove99ixY/n+++95+umnOX78eLa7Loq46O574nVy+oXuiy++4K+//mLjxo3uv84BHhMMm6169eps27Yt2/KCXKy4jB49mlWrVhEbG0tkZCTbt29n/vz5HuvUqFGD6OhooqOjiYuL48MPP+Shhx7i2LFjfPLJJ3nuPzAwkFtuuYX//Oc/xMfHs2jRIkJCQvjXv/7lXuftt9+mT58+2Y5blLHyrguMnM7BhctWrFiBn58f//3vfz0uQNeuXVvo47pUrVoVHx8f4uPjs33mmjyzRo0aRd7/+VyTpM6ePZvZs2fn+Pn48eOpVq0aVqs13wkxa9asme86rvN04YSvJ06cyHH9i/m35arqKshEnnfddRfPPvssixYtIi0tjYyMDCZMmJDvdhdOgt6wYcN8tymK6tWrM3nyZDZu3MiPP/7oni+kqEaPHs2jjz6KxWJh5MiRxdRKEZHSpesvXX+Vx+uv/LjORW5t8fHxoWrVqu425dfHrVu3ZsWKFRiGwd69e4mJiWHGjBkEBgby0EMP5diGQYMGldqNXi6//HKioqJYu3Ytx44do1atWkXeV8+ePWnWrBkzZsygb9++REREFGNLxZuoUkoqBNeF0oWVFm+88YYZzclR7969OXfuXLbKC9fduAoiKiqKunXrsnjxYhYvXkxAQECe5eeRkZHcc8899O3bl++//75Axxg7diyZmZm88MILrFu3jptvvtnjls8WiyXbed67d2+2O5QURLNmzQgPD2f58uUew6QOHTrEli1bPNa1WCz4+vpitVrdy1JTU3nrrbey7begf2GtVKkSXbt25f333/dYPysri7fffpt69erRtGnTQn+vC50+fZo1a9bQs2dPvvzyy2wP112AfvzxRwIDA+nduzerVq3KNTwC522kv/zyy2zl7edz3fVm7969HstdwwMKoqD/tpo2bcoll1zCokWLsoVgFwoPD+df//oX8+bN4/XXX2fQoEEeQzdy06lTJ49HTn9dLwyHw5HrxJ+uoRCuv9hejJEjRzJo0CCmTp1K3bp1L3p/IiJlha6/cqbrr7yV1vVXQTRr1oy6devyzjvveJyL5ORkVq9e7b4j34Xy62OLxULbtm2ZM2cOVapUyfPnoHr16tmucS7W0aNHycrKyrY8MzOTX3/9laCgIKpUqXLRx3n00UcZNGgQDzzwwEXvS7yXKqWkQujRowdVq1ZlwoQJPPHEE/j5+bFs2TL27NljdtPcRo4cyZw5c7j99tuZOXMmjRs3Zv369Xz66adAwW7NarVaGTFiBLNnzyY0NDTbbVfPnj3LFVdcwa233krz5s0JCQlh+/btfPLJJwwZMqRA7ezUqRNt2rQhOjoawzCy3UXj2muv5amnnuKJJ56gd+/e7N+/nxkzZtCwYcNCj4H38fHhqaeeYty4cQwePJg77riDM2fO8OSTT2YrHx84cCCzZ8/m1ltv5c477+TkyZO8+OKLOQ75cv2VauXKlTRq1IiAgABat26dYxtmzZpF3759ueKKK3jwwQfx9/dn3rx5/PjjjyxfvrxYhlotW7aMtLQ0Jk2aRJ8+fbJ9Xr16dZYtW8bChQuZM2cOs2fP5rLLLqNr16489NBDNG7cmKNHj/Lhhx/yxhtvEBIS4r4r3+WXX87DDz9M69atOXPmDJ988glTpkyhefPmdO7cmWbNmvHggw+SkZFB1apVWbNmjcedZPJTmH9br732GoMGDaJbt27cf//9REZGEhcXx6effsqyZcs81r3vvvvo2rUrQI53NSouCQkJvPfee9mWN2jQwP3417/+xdVXX01ERARJSUls3LiRl19+mRYtWhT4301e6tSpc1F/URYRKat0/eWk6y+nsnb9db6PPvqIkJCQbMuHDh3K888/z2233ca1117L+PHjsdvtvPDCC5w5c4Znn30WKFgf//e//2XevHnccMMNNGrUCMMweP/99zlz5ox7PtHi9O233+a4vHfv3rz11lu88cYb3HrrrXTu3JnKlStz+PBh3nzzTX766Scef/xx/P39L7oNt99+e7HdBVG8mCnTq4sUg9zu/uK6q9WFtmzZYnTv3t0ICgoyatasaYwbN874/vvvs93tI7e7v+R0l67evXt73EUkt7u/5HSXipyOExcXZwwZMsQIDg42QkJCjBtvvNFYt26dARgffPBBbqfCwy+//OK+i0ZsbKzHZ2lpacaECROMNm3aGKGhoUZgYKDRrFkz44knnjCSk5MLtH/DMIyXX37ZAIyWLVtm+8xutxsPPvigUbduXSMgIMDo0KGDsXbtWmPkyJHZ7tZCPnd/cXnzzTeNJk2aGP7+/kbTpk2NRYsW5bi/RYsWGc2aNTNsNpvRqFEjY9asWcbChQuz3WHu4MGDRlRUlBESEmIA7v3kdPcXwzCMzZs3G1deeaVRqVIlIzAw0OjWrZvx0UcfeazjuvvL9u3bPZbn9p3O165dO6NWrVqG3W7PdZ1u3boZNWrUcK+zb98+41//+pdRvXp1w9/f34iMjDRGjRplpKWlubf5888/jTFjxhi1a9c2/Pz8jDp16hg33XSTcfToUfc6v/zyixEVFWWEhoYaNWvWNO69917j448/zvHuexf7b8swDGPr1q1G//79jcqVKxs2m8245JJLjPvvvz/H/TZo0MBo0aJFrufkYtWvX9/9b+XCx8iRIw273W68+OKLRv/+/Y3IyEjDZrMZAQEBRosWLYz/+7//M06ePJnjfgtz973c6O57IlJW6forZ7r+Kn/XX4bxz89Dbg+XtWvXGl27djUCAgKMSpUqGVdd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hmFkW3bh0MJvv/2Wm2++menTp9OvXz8qV67MihUreOmllwr1PfKanuj85RdWYVssFrKKONQyt2Oev/zJJ5/k1ltv5eOPP2b9+vU88cQTrFixgsGDBzNu3Dj69evHxx9/zIYNG5g1axYzZ870qE4rTqaGUsOGDePkyZPMmDGD+Ph4WrVqxbp169yz7MfHx3skkZmZmbz00kvs378fPz8/rrjiCrZs2UID153cgDNnznDnnXeSkJBA5cqVad++PV999RVdunQp7a93cc6edT7nMC41L1u2wDXXwLlzcNllsG4dhISUQPtERERESpDmlBIRKV4Wi6XAQ+jMdtNNN3HffffxzjvvsHz5cu688053oLJ582auv/56br/9dsA5R9Svv/5KixYFm8W4ZcuWxMXF8ddff1GnTh0Atm7d6rHON998Q/369XnkkUfcyw4dOuSxjr+/P5mZmfkea8mSJSQnJ7urpb755ht8fHxo2rRpgdpbWK7v9+eff7qrpfbt28fZs2c9zlHTpk1p2rQp999/P7fccguLFy9m8ODBAERERDBhwgQmTJjAQw89xJIlS7wzlAKYOHEiEydOzPGz8yf+AmjRogW7du3Kc39z5sxhzpw5xdU887gqpapUKfAmX30FAwdCUhL06QMffeScb1xERESkvHGHUhkKpUREKprg4GCGDRvGo48+ytmzZxk5cqT7s8aNG7N69Wq2bNlC1apVmT17NgkJCQUOpa6++mqaNWvGiBEjeOmll0hMTPQIn1zHiIuLY8WKFXTu3JmPP/6YNWvWeKzToEEDDhw4wO7du6lXrx4hISHZ5qq+7bbbeOKJJxg5ciRPPvkkx48f595772X48OG5zqVdUJmZmezevdtjmb+/P1dffTVt2rThtttuIzo62j3Ree/evenUqROpqalMnTqVoUOH0rBhQw4fPsz27du58cYbAZg8eTL9+/enadOmnD59mi+//JJmzZpdVFvzYtqcUpIPV6VUAUOpL76A/v2dgdTVV8PHHyuQEhERkfJLw/dERCq2sWPHcvr0afr06UNkZKR7+WOPPUaHDh3o168fffr0oXbt2txwww0F3q+Pjw9r1qzBbrfTpUsXxo0bx9NPP+2xzvXXX8/999/PPffcQ7t27diyZQuPPfaYxzo33ngj11xzDVdccQU1a9Zk+fLlXCgoKIhPP/2UU6dO0blz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OnLkCEuXLgXgl19+Ydu2bXTt2pXTp08ze/ZsfvzxR5YsWeLe53333cfll1/Oc889x/XXX88HH3zAZ599xtdff23Kdyww10TnOdx9z3XnPU1yLiIiIhWNzdf5h0N7pj2fNUVERKS8MTWUGjZsGCdPnmTGjBnEx8fTqlUr1q1bR/369QGIj48nLi7OvX5mZiYvvfQS+/fvx8/PjyuuuIItW7bQoEED9zo9evRgxYoVPProozz22GNccsklrFy5kq5du5b21yucs2edzzncfc8VStWtW4rtERERESkDAqyqlBIREfFWpk90PnHiRCZOnJjjZzExMR7vW7Rowa5du/Ld59ChQxk6dGhxNK/05FEpdfiw81mVUiIiIlLRuCqlFEqJiIh4Hx+zGyB/c1VK5TF8T5VSIiIiUtGcP6eUYRgmt0ZERESKk0KpssJVKZXD8D1VSomIiEhF5Rq+l2VkkZGVYXJrREREpDgplCorVCklIiIiko2rUgo0hE9ERMTbKJQqK3KplHI44OhR52tVSomIiEhF45pTChRKiYiIeBuFUmVBWhqkpztfX1ApFR8PhgF+flCjRuk3TURERMRMPhYf/K3+gEIpERERb6NQqixwVUlZLBAc7PGRaz6punXBR70lIiIiFdD5k52LiIiI91DMURacP3TvguRJ80mJiIhIRadQSkRExDsplCoL8pjkXHfeExERkYpOoZSIiIh3UihVFuQyyTmoUkpERETEFUrZM+0mt0RERESKk0KpsiCPSimFUiIiIlLR2azOO/CpUkpERMS7KJQqC/KolNLwPREREanoNHxPRETEOymUKgtUKSUiIiKSK4VSIiIi3kmhVFmQS6WUYfwTSqlSSkRERCoqhVIiIiLeSaFUWZBLpdSJE5Ce7nwdHl66TRIREREpKxRKiYiIeCeFUmVBLpVSrvmkwsLA3790myQiIiJSViiUEhER8U4KpcoCVyh1QaWU5pMSERERUSglIiLirRRKlQW5DN/TnfdEREREFEqJiIh4K4VSZUEuw/dUKSUiIiKiUEpERMRbKZQqC3KplNKd90REREQUSomIiHgrhVJlQT4TnatSSkRERCoyVyhlz7Cb3BIREREpTgqlzJaZCefOOV+rUkpEREQkG5vVBqhSSkRExNsolDJbYuI/r1UpJSIiIpKNe/hepkIpERERb6JQymyuoXuBgeDv71587tw/eZVCKREREanINKeUiIiId1IoZTbXJOe53HkvNBRCQkq5TSIiIiJliEIpERER76RQymyuSqlc5pNSlZSIiIhUdAqlREREvJNCKbO5KqUuCKX++sv5rFBKREREKjqFUiIiIt5JoZTZXJVSFwzfS0pyPoeGlm5zRERERMoahVIiIiLeSaGU2XKplEpJcT4HBZVuc0RERETKGoVSIiIi3kmhlNlyqZRSKCUiIiLipFBKRETEOymUMpsqpURERKQYzJs3j4YNGxIQEEDHjh3ZvHlznusvW7aMtm3bEhQURHh4OKNHj+bkyZOl1NrCUSglIiLinRRKmU2VUiIiInKRVq5cyeTJk3nkkUfYtWsXvXr1on///sTFxeW4/tdff82IESMYO3YsP/30E6tWrWL79u2MGzeulFteMK5Qyp5hN7klIiIiUpwUSpnNFUpdUCmVmup8ViglIiIi+Zk9ezZjx45l3LhxtGjRgujoaCIiIpg/f36O63/77bc0aNCASZMm0bBhQy677DLGjx/Pjh07SrnlBWPztQGqlBIREfE2CqXM5hq+p0opERERKYL09HR27txJVFSUx/KoqCi2bNmS4zY9evTg8OHDrFu3DsMwOHr0KO+99x4DBw4sjSYXmobviYiIeCdfsxtQ4eVSKaVQSkRERArixIkTZGZmEhYW5rE8LCyMhISEHLfp0aMHy5YtY9iwYaSlpZGRkcF1113Hq6++mutx7HY7dvs/w+cSExMBcDgcOByOYvgmnlz7dDgcWA2r83WWgzR7GlYfa7EfT7I7vw/EHOoDc+n8m099YL6i9kFB11coZbZ8JjoPDCzd5oiIiEj5ZLFYPN4bhpFtmcu+ffuYNGkSjz/+OP369SM+Pp6pU6cyYcIEFi5cmOM2s2bNYvr06dmWb9iwgaAS/CtabGwsqZmp7vcfrvsQm4+txI4n2cXGxprdhApPfWAunX/zqQ/MV9g+SHGFGvlQKGU2TXQuIiIiF6FGjRpYrdZsVVHHjh3LVj3lMmvWLHr27MnUqVMBaNOmDZUqVaJXr17MnDmT8PDwbNtMmzaNKVOmuN8nJiYSERFBVFQUoaGhxfiNnBwOB7GxsfTt2xeL1QI/OJf3vqo31QKrFfvxJLvz+8DPz8/s5lRI6gNz6fybT31gvqL2gauiOj8KpcxkGPlWSimUEhERkbz4+/vTsWNHYmNjGTx4sHt5bGws119/fY7bpKSk4OvreRlotTqHxBmGkeM2NpsNmy17hZKfn1+J/qLg2r/VYiXTyCTTkqlfTEpZSfex5E99YC6df/OpD8xX2D4o6Lqa6NxMqangGmepSikREREpoilTpvDmm2+yaNEifv75Z+6//37i4uKYMGEC4KxyGjFihHv9QYMG8f777zN//nz++OMPvvnmGyZNmkSXLl2oU6eOWV8jT5rsXERExPuoUspMriopHx8IDvb4SKGUiIiIFNSwYcM4efIkM2bMID4+nlatWrFu3Trq168PQHx8PHFxce71R40axblz55g7dy4PPPAAVapU4corr+S5554z6yvkK8A3gGRHskIpERERL6JQykznzyd1wUSkCqVERESkMCZOnMjEiRNz/CwmJibbsnvvvZd77723hFtVfFQpJSIi4n00fM9EllzmkwLnyD5QKCUiIiICCqVERES8kUIpM+USShmGKqVEREREzucKpewZdpNbIiIiIsVFoZSZzh++d570dMjKcr5WKCUiIiICNl/nnf9UKSUiIuI9FEqZyJKY6HxxQaWUq0oKIDCw9NojIiIiUlZp+J6IiIj3UShlplwqpVyhlK8v+PmVbpNEREREyiKFUiIiIt5HoZSZcplTSvNJiYiIiHhSKCUiIuJ9FEqZyRVK5VIppVBKRERExEmhlIiIiPdRKGUiiyqlRERERApEoZSIiIj3UShlplwqpVJTnc8KpUREREScAqwKpURERLyNQikzuSY6V6WUiIiISJ5UKSUiIuJ9FEqZSMP3RERERApGoZSIiIj3UShlpnwmOg8MLOX2iIiIiJRRCqVERES8j0IpM6lSSkRERKRAXKGUPdNucktERESkuCiUMoklMxNLUpLzTS6VUgqlRERERJxsvjZAlVIiIiLeRKGUSXxdyRMolBIRERHJh4bviYiIeB+FUibxS052vggKAj8/j88USomIiIh4UiglIiLifRRKmcTPlTxdMJ8UKJQSERERuZBCKREREe+jUMok7kqpC4buAaSmOp8VSomIiIg4KZQSERHxPqaHUvPmzaNhw4YEBATQsWNHNm/enOf6y5Yto23btgQFBREeHs7o0aM5efKk+/OYmBgsFku2R1pa2bqAcYdSqpQSERERyZdCKREREe9jaii1cuVKJk+ezCOPPMKuXbvo1asX/fv3Jy4u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5Rb8dLu4AnEP3wsNzfaZQikRERGRnGn4noiIiHcp0iRQlSpV4s477yzutlQc5090fgFXKBUYWHrNERERESkPFEqJiIh4lyLPTL5v3z7i4uJIT0/3WH7ddddddKO8nmv4niY6FxERESkwhVIiIiLepdCh1B9//MHgwYP54YcfsFgsGIYBgMXinB0pMzOzeFvojRITnc8KpUREREQKTKGUiIiIdyn03ffuu+8+GjZsyNGjRwkKCuKnn37iq6++olOnTmzcuLEEmuh9LH9XSimUEhERqdj+/PNPDh8+7H6/bds2Jk+ezIIFC0xsVdmlUEpERMS7FDqU2rp1KzNmzKBmzZr4+Pjg4+PDZZddxqxZs5g0aVJJtNH7/F0pZeQxp5RCKREREe9366238uWXXwKQkJBA37592bZtGw8//DAzZswwuXVlj0IpERER71LoUCozM5Pg4GAAatSowV9//QVA/fr12b9/f/G2zlu5KqV09z0REZEK7ccff6RLly4AvPvuu7Rq1YotW7bwzjvvEBMTY27jyiCFUiIiIt6l0HNKtWrVir1799KoUSO6du3K888/j7+/PwsWLKBRo0Yl0UavY8nj7nupqc5nhVIiIiLez+FwYLPZAPjss8/cN4xp3rw58fHxZjatTFIoJSIi4l0KXSn16KOPkpWVBcDMmTM5dOgQvXr1Yt26dbzyyivF3kCv9HcopbvviYiIVGyXXnopr7/+Ops3byY2NpZrrrkGgL/++ovq1aub3LqyR6GUiIiIdyl0pVS/fv3crxs1asS+ffs4deoUVatWdd+BT/Khic5FREQEeO655xg8eDAvvPACI0eOpG3btgB8+OGH7mF98g+b1VlVplBKRETEOxQqlMrIyCAgIIDdu3fTqlUr9/Jq1aoVe8O8lsOBxZU85THReWBg6TVJREREzNGnTx9OnDhBYmIiVatWdS+/8847CdJfqLJxVUrZM+0mt0RERESKQ6GG7/n6+lK/fn0yMzNLqj3ezzWfFGiicxERkQouNTUVu93uDqQOHTpEdHQ0+/fvp1atWia3ruzR8D0RERHvUqQ5paZNm8apU6dKoj3er3JlHDt2sPnpp8E3e6GaQikREZGK4/rrr2fp0qUAnDlzhq5du/LSSy9xww03MH/+fJNbV/YolBIREfEuhZ5T6pVXXuG3336jTp061K9fn0qVKnl8/v333xdb47ySnx+0acOpw4dz/FihlIiISMXx/fffM2fOHADee+89wsLC2LVrF6tXr+bxxx/nrrvuMrmFZYtCKREREe9S6FDqhhtuKIFmiItCKRERkYojJSWFkJAQADZs2MCQIUPw8fGhW7duHDp0yOTWlT0KpURERLxLoUOpJ554oiTaIX9TKCUiIlJxNG7cmLVr1zJ48GA+/fRT7r//fgCOHTtGaA5zT1Z0CqVERES8S6HnlJKSlZrqfFYoJSIi4v0ef/xxHnzwQRo0aECXLl3o3r074Kyaat++vcmtK3sUSomIiHiXQldK+fj4YLFYcv1cd+YrOsNQpZSIiEhFMnToUC677DLi4+Np27ate/lVV13F4MGDTWxZ2aRQSkRExLsUOpRas2aNx3uHw8GuXbtYsmQJ06dPL7aGVURp511fBQaa1w4REREpPbVr16Z27docPnwYi8VC3bp16dKli9nNKpMUSomIiHiXQodS119/fbZlQ4cO5dJLL2XlypWMHTu2WBpWEbmqpEChlIiISEWQlZXFzJkzeemll0hKSgIgJCSEBx54gEceeQQfH820cD6FUiIiIt6l0KFUbrp27codd9xRXLurkFyhlL8/+BZbz4iIiEhZ9cgjj7Bw4UKeffZZevbsiWEYfPPNNzz55JOkpaXx9NNPm93EMsXmawMUSomIiHiLYok+UlNTefXVV6lXr15x7K7C0nxSIiIiFcuSJUt48803ue6669zL2rZtS926dZk4caJCqQu4KqXsGXaTWyIiIiLFodChVNWqVT0mOjcMg3PnzhEUFMTbb79drI2raBRKiYiIVCynTp2iefPm2ZY3b96cU6dOmdCiss0VSmUamWRkZeDro9JyERGR8qzQ/yefM2eORyjl4+NDzZo16dq1K1WrVi3WxlU0CqVEREQqlrZt2zJ37lxeeeUVj+Vz586lTZs2hdrXvHnzeOGFF4iPj+fSSy8lOjqaXr165bq+3W5nxowZvP322yQkJFCvXj0eeeQRxowZU6TvUhpcoRQ4h/AF+web2BoRERG5WIUOpUaNGlUCzRCA1FTns0IpERGRiuH5559n4MCBfPbZZ3Tv3h2LxcKWLVv4888/WbduXYH3s3LlSiZPnsy8efPo2bMnb7zxBv3792ffvn1ERkbmuM1NN93E0aNHWbhwIY0bN+bYsWNkZGQU11crETarzf1aoZSIiEj5V+hbuixevJhVq1ZlW75q1SqWLFlSLI2qqFQpJSIiUrH07t2bX375hcGDB3PmzBlOnTrFkCFD+Omnn1i8eHGB9zN79mzGjh3LuHHjaNGiBdHR0URERDB//vwc1//kk0/YtGkT69at4+qrr6ZBgwZ06dKFHj16FNdXKxFWHyt+Pn6AJjsXERHxBoWulHr22Wd5/fXXsy2vVasWd955JyNHjiyWhlVECqVEREQqnjp16mSb0HzPnj0sWbKERYsW5bt9eno6O3fu5KGHHvJYHhUVxZYtW3Lc5sMPP6RTp048//zzvPXWW1SqVInrrruOp556isDAwBy3sdvt2O3/TDCemJgIgMPhwOFw5NvOwnLt88J9B/gG4Eh3cC71HI7A4j+u/CO3PpDSoz4wl86/+dQH5itqHxR0/UKHUocOHaJhw4bZltevX5+4uLjC7k7O4wqlcrkWFBEREcnmxIkTZGZmEhYW5rE8LCyMhISEHLf5448/+PrrrwkICGDNmjWcOHGCiRMncurUqVyDsFmzZjF9+vRsyzds2EBQCf5FLTY21uO9T5az0D/2y1h+CfylxI4r/7iwD6T0qQ/MpfNvPvWB+QrbBymugCMfhQ6latWqxd69e2nQoIHH8j179lC9evXC7k7Oo0opERERKarzb0QDzjskX7jMJSsrC4vFwrJly6hcuTLgHAI4dOhQXnvttRyrpaZNm8aUKVPc7xMTE4mIiCAqKorQ0NBi/CZODoeD2NhY+vbti5+fn3t56B+hnE08S5ceXegY3rHYjyv/yK0PpPSoD8yl828+9YH5itoHrorq/BQ6lLr55puZNGkSISEhXH755QBs2rSJ++67j5tvvrmwu5PzKJQSERGRwqpRowZWqzVbVdSxY8eyVU+5hIeHU7duXXcgBdCiRQsMw+Dw4cM0adIk2zY2mw2bzZZtuZ+fX4n+onDh/l134MsgQ7+glJKS7mPJn/rAXDr/5lMfmK+wfVDQdQsdSs2cOZNDhw5x1VVX4evr3DwrK4sRI0bwzDPPFHZ3ch6FUiIiIhXDkCFD8vz8zJkzBd6Xv78/HTt2JDY2lsGDB7uXx8bGcv311+e4Tc+ePVm1ahVJSUkEBzvvYPfLL7/g4+NDvXr1CnxsM7hCKU10LiIiUv4VOpTy9/dn5cqVzJw5k927dxMYGEjr1q2pX79+SbSvQlEoJSIiUjGcX6GU2+cjRowo8P6mTJnC8OHD6dSpE927d2fBggXExcUxYcIEwDn07siRIyxduhSAW2+9laeeeorRo0czffp0Tpw4wdSpUxkzZkyuE52XFTZfZ7WWQikREZHyr9ChlEuTJk1yLO2WolMoJSIiUjEsXry4WPc3bNgwTp48yYwZM4iPj6dVq1asW7fO/UfD+Ph4jxvSBAcHExsby7333kunTp2oXr06N910EzNnzizWdpUEV6WUPcOez5oiIiJS1hU6lBo6dCidOnXKdtvhF154gW3btrFq1apia1xFk5rqfFYoJSIiIoU1ceJEJk6cmONnMTEx2ZY1b968XN7NSMP3REREvIdPYTfYtGkTAwcOzLb8mmuu4auvviqWRlVUqpQSERERyZtCKREREe9R6FAqKSkJf3//bMv9/PwKfMs/yZkrlCrjUzmIiIiImEahlIiIiPcodCjVqlUrVq5cmW35ihUraNmyZbE0qqJSpZSIiIhI3hRKiYiIeI9Czyn12GOPceONN/L7779z5ZVXAvD555/zzjvv8N577xV7AysShVIiIiIieQuwKpQSERHxFoUOpa677jrWrl3LM888w3vvvUdgYCBt27bliy++IDQ0tCTaWGEolBIRERHJmyqlREREvEehQymAgQMHuic7P3PmDMuWLWPy5Mns2bOHzMzMYm1gRaJQSkRERCRvCqVERES8R6HnlHL54osvuP3226lTpw5z585lwIAB7NixozjbVuEolBIRERHJm0IpERER71GoSqnDhw8TExPDokWLSE5O5qabbsLhcLB69WpNcl4MFEqJiIiI5E2hlIiIiPcocKXUgAEDaNmyJfv27ePVV1/lr7/+4tVXXy3JtlU4qanOZ4VSIiIiIjmz+doASMtUKCUiIlLeFbhSasOGDUyaNIm77rqLJk2alGSbKqSsLIVSIiIiIvlxVUrZM+wmt0REREQuVoErpTZv3sy5c+fo1KkTXbt2Ze7cuRw/frwk21ahpJ33x77AQPPaISIiIlKWafieiIiI9yhwKNW9e3f+85//EB8fz/jx41mxYgV169YlKyuL2NhYzp07V5Lt9Hqu+aRAoZSIiIhIbhRKiYiIeI9C330vKCiIMWPG8PXXX/PDDz/wwAMP8Oyzz1KrVi2uu+66kmhjheAKpWw2sFrNbYuIiIhIWaVQSkRExHsUOpQ6X7NmzXj++ec5fPgwy5cvL642VUi6856IiIhI/hRKiYiIeI+LCqVcrFYrN9xwAx9++GFx7K5CUiglIiIikj+FUiIiIt6jWEIpuXgKpURERETyp1BKRETEeyiUKiNSU53PCqVEREREcqdQSkRExHuYHkrNmzePhg0bEhAQQMeOHdm8eXOe6y9btoy2bdsSFBREeHg4o0eP5uTJkx7rrF69mpYtW2Kz2WjZsiVr1qwpya9QLFQpJSIiIpI/hVIiIiLew9RQauXKlUyePJlHHnmEXbt20atXL/r3709cXFyO63/99deMGDGCsWPH8tNPP7Fq1Sq2b9/OuHHj3Ots3bqVYcOGMXz4cPbs2cPw4cO56aab+O6770rraxWJK5QKDDS3HSIiIiJlmc1qAxRKiYiIeANTQ6nZs2czduxYxo0bR4sWLYiOjiYiIoL58+fnuP63335LgwYNmDRpEg0bNuSyyy5j/Pjx7Nixw71OdHQ0ffv2Zdq0aTRv3pxp06Zx1VVXER0dXUrfqmhUKSUiIiKSP1VKiYiIeA9fsw6cnp7Ozp07eeihhzyWR0VFsWXLlhy36dGjB4888gjr1q2jf//+HDt2jPfee4+BAwe619m6dSv333+/x3b9+vXLM5Sy2+3Y7Xb3+8TERAAcDgcOh6OwXy1frn2ev+9z53wAKwEBWTgcmcV+TPGUUx9I6VIfmEvn33zqA/MVtQ/UZ+ZyhVKOLAdZRhY+FtNnoxAREZEiMi2UOnHiBJmZmYSFhXksDwsLIyEhIcdtevTowbJlyxg2bBhpaWlkZGRw3XXX8eqrr7rXSUhIKNQ+AWbNmsX06dOzLd+wYQNBJVi6FBsb6369a1dj4FJOnTrMunW7SuyY4un8PhBzqA/MpfNvPvWB+QrbBymu8mYxhSuUArBn2An009wHIiIi5ZVpoZSLxWLxeG8YRrZlLvv27WPSpEk8/vjj9OvXj/j4eKZOncqECRNYuHBhkfYJMG3aNKZMmeJ+n5iYSEREBFFRUYSGhhbla+XJ4XAQGxtL37598fPzA2D7dudf+Zo2rcuAAeHFfkzxlFMfSOlSH5hL59986gPzFbUPXBXVYo7zQ6m0jDSFUiIiIuWYaaFUjRo1sFqt2SqYjh07lq3SyWXWrFn07NmTqVOnAtCmTRsqVapEr169mDlzJuHh4dSuXbtQ+wSw2WzYbLZsy/38/Er0F4Xz9+8aPRgcbMXPz1pixxRPJd3Hkj/1gbl0/s2nPjBfYftA/WUuXx9ffCw+ZBlZmldKRESknDNtEL6/vz8dO3bMVjIfGxtLjx49ctwmJSUFHx/PJlutzgDHMAwAunfvnm2fGzZsyHWfZYUmOhcRERHJn8Vi0WTnIiIiXsLU4XtTpkxh+PDhdOrUie7du7NgwQLi4uKYMGEC4BxWd+TIEZYuXQrAoEGDuOOOO5g/f757+N7kyZPp0qULderUAeC+++7j8ssv57nnnuP666/ngw8+4LPPPuPrr7827XsWRGqq81mhlIiIiEjeAnwDSHGkKJQSEREp50wNpYYNG8bJkyeZMWMG8fHxtGrVinXr1lG/fn0A4uPjiYuLc68/atQozp07x9y5c3nggQeoUqUKV155Jc8995x7nR49erBixQoeffRRHnvsMS655BJWrlxJ165dS/37FYYqpUREREQKRpVSIiIi3sH0ic4nTpzIxIkTc/wsJiYm27J7772Xe++9N899Dh06lKFDhxZH80qNK5QK1FydIiIiInlSKCUiIuIdTJtTSjypUkpERESkYBRKiYiIeAeFUmWEQikRERGRgrFZnXdNViglIiJSvimUKiMUSomIiIgUjCqlREREvINCqTJCoZSIiIhIwbhCKXum3eSWiIiIyMVQKFVGKJQSERERKRhVSomIiHgHhVJlhEIpERERkYJRKCUiIuIdFEqVEampzmeFUiIiIiJ5UyglIiLiHRRKlQFZWZD29zWVQikRERGRvCmUEhER8Q4KpcoAV5UUQGCgee0QERERKQ8USomIiHgHhVJlgGs+KVAoJSIiIpIfhVIiIiLeQaFUGeAKpQICwEc9IiIiIpInhVIiIiLeQRFIGaA774mIiIgUnEIpERER76BQqgxQKCUiIiJScDarDVAoJSIiUt4plCoDFEqJiIiIFJwqpURERLyDQqkywHX3PYVSIiIiIvlzhVL2TLvJLREREZGLoVCqDFCllIiIiEjBqVJKRETEOyiUKgNcoVRgoLntEBERESkPFEqJiIh4B4VSZYAqpUREREQKTqGUiIiId1AoVQYolBIREREpOIVSIiIi3kGhVBmgUEpERESk4BRKiYiIeAeFUmWAQikRERGRglMoJSIi4h0USpUBCqVERERECk6hlIiIiHdQKFUGKJQSERERKTiFUiIiIt5B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7T7huOPzdcGCBTz88MOMHDmSpUuXkpqayl133eXP19PdF+DOO+9k9+7drF69mnfeeYfk5GSuvPLK054ncioPXvogt7S9hTJvGS999QSOndMAmHLgAF9VDIL+ax10ufh9WhoGcHdSEndUTHwAMDwxkcGxsbgNgzu2bcN1hl1lRUREzkUKSpngaEupatS7RUTqPIulvAudGUtNdoFesWIFgwYNYtiwYXTs2JFmzZqxY8eOmrvhSbRq1Yrvvvuu0rZ169ad8px3332Xhg0bsnHjRlJTU/3LtGnTmDNnDh6Phw4dOnDw4EF+/PHHKq/RoUMHPv/885PeIy4urtK4Tk6nkz179pz286xYsYKePXvywAMPcMkll9CiRQt27drl3x8eHk5ycvIp712vXj0GDx7MrFmzmDVrlr9LosivYbVYmTdkHvOGzCMxLJFDe/8Lhz/BAO7YugWnx/Orru/2+Ri6dStZbjedwsL8LaOOslgsvNmyZY210BIREamLFJQyQUlJ+WtIiAayFBGpq1q0aEFKSgqrVq0iLS2Ne++9l4yMjFpPx0MPPcSMGTOYM2cOO3bsYNKkSWzatOmE1lPHmjFjBjfffDPt2rWrtIwcOZK8vDw++eQTevfuTa9evRgyZAgpKSns2bOHTz/9lM8++wyA8ePHs3btWh544AE2bdrEtm3bmD59OllZWQD85je/4d///jcrVqzghx9+YPjw4f5B0k+lRYsWrFu3jiVLlvDjjz8yYcIE1q5dW+mYZ555hilTpvDqq6+yY8cOvv/+e/7+979XOmb06NHMmTOHtLQ0hg8ffqbZKlIli8XC0HZDSXswjQe7PQi7XoeSdA6UuRmwZjE+49StHk9l/O7drHI6ibTZ+G/btlWOUxUXEMBbrVoBZ7eFloiISF2loJQJ1FJKRKTumzBhAp07d6Z///5cddVVJCYmMnjw4FpPx+2338748eP5wx/+QOfOndmzZw8jRowgKCioyuPXr1/Pxo0bGTJkyAn7wsPD6devHzNmzADg/fffp1u3btx22220adOGxx57zD+7XsuWLVm6dCkbN27k0ksvpUePHnz44Yf+MarGjx9Pr169GDhwINdddx2DBw+mefPmp/089913HzfddBNDhw6le/fuZGdn+weGP2r48OFMmzaN119/nbZt2zJw4MATWqn16dOHpKQk+vfvT/369U+f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u9fspJ2XCgoKjA0bNhgbNmwwAGPq1KnGhg0bjH379hmGYRiTJ082IiMjjQ8++MDYvHmzcdtttxlJSUmG0+k0OeXnj/vvv9+IjIw0li9fbhw+fNi/FBcX+49ROdSs8ePHG19//bWxZ88eY9OmTcYTTzxhWK1WY+nSpYZhKP/NcOxsMoahMqhpjz76qLF8+XJj9+7dxpo1a4yBAwca4eHh/r+9yv+6R/Wl2qc6k7lUXzKf6kt1j+pLtcvM+pKCUrXsH//4h9GkSRMjICDA6Ny5s3+qVzn7vvzySwM4YRk+fLhhGOVTWz799NNGYmKiERgYaPTq1cvYvHmzuYk+z1SV/4Axa9Ys/zEqh5o1cuRI/3dOXFyccc011/grWIah/DfD8ZUslUHNGjp0qJGUlGQ4HA6jfv36xk033WRs2bLFv1/5XzepvlS7VGcyl+pL5lN9qe5Rfal2mVlfshiGYfz69lYiIiIiIiIiIiLVpzGlRERERERERESk1ikoJSIiIiIiIiIitU5BKRERERERERERqXUKSomIiIiIiIiISK1TUEpERERERERERGqdglIiIiIiIiIiIlLrFJQSEREREREREZFap6CUiIiIiIiIiIjUOgWlRETOIovFwqJFi8xOhoiIiEidpfqSiByloJSInDdGjBiBxWI5Ybn22mvNTpqIiIhInaD6kojUJXazEyAicjZde+21zJo1q9K2wMBAk1IjIiIiUveoviQidYVaSonIeSUwMJDExMRKS3R0NFDeVHz69OkMGDCA4OBgmjZtynvvvVfp/M2bN/Ob3/yG4OBg6tWrxz333ENhYWGlY2bOnEnbtm0JDAwkKSmJMWPGVNqflZXFjTfeSEhICBdddBEfffSRf19ubi633347cXFxBAcHc9FFF51QKRQRERGpSaoviUhdoaCUiFxQJkyYwJAhQ9i4cSPDhg3jtttuIy0tDYDi4mKuvfZaoqOjWbt2Le+99x7Lli2rVImaPn06Dz74IPfccw+bN2/mo48+okWLFpXuMXHiRG655RY2bdrEddddx+23305OTo7//lu3buXTTz8lLS2N6dOnExsbW3sZICIiInIaqi+JSK0xRETOE8OHDzdsNpsRGhpaaXn22WcNwzAMwLjvvvsqndO9e3fj/vvvNwzDMN58800jOjraKCws9O//5JNPDKvVamRkZBiGYRj169c3nnzyyZOmATD+/Oc/+9cLCwsNi8VifPrpp4ZhGMYNN9xg3HXXXWfnA4uIiIicIdWXRKQu0ZhSInJeufrqq5k+fXqlbTExMf73PXr0qLSvR48epKamApCWlkbHjh0JDQ3177/88svx+Xxs374di8VCeno611xzzSnT0KFDB//70NBQwsPDyczMBOD+++9nyJAhfP/99/Tr14/BgwfTs2fPX/RZRURERH4J1ZdEpK5QUEpEziuhoaEnNA8/HYvFAoBhGP73VR0THBxcres5HI4TzvX5fAAMGDCAffv28cknn7Bs2TKuueYaHnzwQV5++eUzSrOIiIjIL6X6kojUFRpTSkQuKGvWrDlhvXXr1gC0adOG1NRUioqK/PtXrlyJ1WqlZcuWhIeHk5yczOeff/6r0hAXF8eIESN45513mDZtGm+++eavup6IiIjI2aT6kojUFrWUEpHzSmlpKRkZGZW22e12/+CY7733Hl27duWKK67g3Xff5bvvvmPGjBkA3H777Tz99NMMHz6cZ555hiNHjvDQQw9xxx13kJCQAMAzzzzDfffdR3x8PAMGDKCgoICVK1fy0EMPVSt9Tz31FF26dKFt27aUlpby8ccfc/HFF5/FHBARERE5NdWXRKSuUFBKRM4rn332GUlJSZW2tWrVim3btgHlM73MmzePBx54gMTERN59913atGkDQEhICEuWLGHs2LF069aNkJAQhgwZwtSpU/3XGj58OC6Xi1deeYU//OEPxMbGcvPNN1c7fQEBAYwfP569e/cSHBzMlVdeybx5887CJxcRERGpHtWXRKSusBiGYZidCBGR2mCxWFi4cCGDBw82OykiIiIidZLqSyJSmzSmlIiIiIiIiIiI1DoFpUREREREREREpNap+56IiIiIiIiIiNQ6tZQSEREREREREZFap6CUiIiIiIiIiIjUOgWlRERERERERESk1ikoJSIiIiIiIiIitU5BKRERERERERERqXUKSomIiIiIiIiISK1TUEpERERERERERGqdglIiIiIiIiIiIlLrFJQSEREREREREZFa9/+IyYS/IofMVwAAAABJRU5ErkJggg==\n", 125 | "text/plain": [ 126 | "
" 127 | ] 128 | }, 129 | "metadata": {}, 130 | "output_type": "display_data" 131 | } 132 | ], 133 | "source": [ 134 | "plot_training_vs_validation(lstm_history, \"LSTM\")" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 176, 140 | "id": "0423eaf0", 141 | "metadata": {}, 142 | "outputs": [ 143 | { 144 | "name": "stdout", 145 | "output_type": "stream", 146 | "text": [ 147 | "728/728 [==============================] - 3s 3ms/step\n" 148 | ] 149 | } 150 | ], 151 | "source": [ 152 | "from sklearn.metrics import confusion_matrix, classification_report\n", 153 | "\n", 154 | "y_test_probabilities = lstm_model.predict(X_test_reshaped)\n", 155 | "y_test_pred = np.argmax(y_test_probabilities, axis=1)\n", 156 | "\n", 157 | "conf_matrix = confusion_matrix(y_test, y_test_pred)" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 177, 163 | "id": "b80418fa", 164 | "metadata": {}, 165 | "outputs": [ 166 | { 167 | "name": "stdout", 168 | "output_type": "stream", 169 | "text": [ 170 | "Confusion Matrix:\n", 171 | "[[17309 86]\n", 172 | " [ 761 5115]]\n" 173 | ] 174 | } 175 | ], 176 | "source": [ 177 | "print(\"Confusion Matrix:\")\n", 178 | "print(conf_matrix)" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 178, 184 | "id": "f30d8e11", 185 | "metadata": {}, 186 | "outputs": [ 187 | { 188 | "name": "stdout", 189 | "output_type": "stream", 190 | "text": [ 191 | "\n", 192 | "Classification Report:\n", 193 | " precision recall f1-score support\n", 194 | "\n", 195 | " 0 0.96 1.00 0.98 17395\n", 196 | " 1 0.98 0.87 0.92 5876\n", 197 | "\n", 198 | " accuracy 0.96 23271\n", 199 | " macro avg 0.97 0.93 0.95 23271\n", 200 | "weighted avg 0.96 0.96 0.96 23271\n", 201 | "\n" 202 | ] 203 | } 204 | ], 205 | "source": [ 206 | "print(\"\\nClassification Report:\")\n", 207 | "print(classification_report(y_test, y_test_pred))" 208 | ] 209 | } 210 | ], 211 | "metadata": { 212 | "kernelspec": { 213 | "display_name": "Python 3 (ipykernel)", 214 | "language": "python", 215 | "name": "python3" 216 | }, 217 | "language_info": { 218 | "codemirror_mode": { 219 | "name": "ipython", 220 | "version": 3 221 | }, 222 | "file_extension": ".py", 223 | "mimetype": "text/x-python", 224 | "name": "python", 225 | "nbconvert_exporter": "python", 226 | "pygments_lexer": "ipython3", 227 | "version": "3.10.9" 228 | } 229 | }, 230 | "nbformat": 4, 231 | "nbformat_minor": 5 232 | } 233 | -------------------------------------------------------------------------------- /An Intrusion Detection System/best_model_cnn.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AbiXnash/An-Intrusion-Detection-System-using-Deep-Learning-models-on-UNSW_NB15-dataset/9fc406fb3bd0cdea5d31eec8a341cd7cfbd1822b/An Intrusion Detection System/best_model_cnn.h5 -------------------------------------------------------------------------------- /An Intrusion Detection System/le1_classes.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AbiXnash/An-Intrusion-Detection-System-using-Deep-Learning-models-on-UNSW_NB15-dataset/9fc406fb3bd0cdea5d31eec8a341cd7cfbd1822b/An Intrusion Detection System/le1_classes.npy -------------------------------------------------------------------------------- /An Intrusion Detection System/lstm_best_model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AbiXnash/An-Intrusion-Detection-System-using-Deep-Learning-models-on-UNSW_NB15-dataset/9fc406fb3bd0cdea5d31eec8a341cd7cfbd1822b/An Intrusion Detection System/lstm_best_model.h5 -------------------------------------------------------------------------------- /An Intrusion Detection System/plot.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | 3 | def plot_training_vs_validation(history, model): 4 | fig, ax = plt.subplots(1, 2, figsize=(12, 5)) 5 | 6 | # Accuracy Plot 7 | ax[0].plot(history.history['accuracy'], 'b-', label="Training Accuracy") 8 | ax[0].plot(history.history['val_accuracy'], 'r-', label="Validation Accuracy") 9 | ax[0].set_title('Training vs Validation Accuracy - ' + model) 10 | ax[0].set_xlabel('Epochs') 11 | ax[0].set_ylabel('Accuracy') 12 | ax[0].grid(True) 13 | ax[0].legend() 14 | 15 | # Loss Plot 16 | ax[1].plot(history.history['loss'], 'g-', label="Training Loss") 17 | ax[1].plot(history.history['val_loss'], 'c-', label="Validation Loss") 18 | ax[1].set_title('Training vs Validation Loss - ' + model) 19 | ax[1].set_xlabel('Epochs') 20 | ax[1].set_ylabel('Loss') 21 | ax[1].grid(True) 22 | ax[1].legend() 23 | 24 | plt.tight_layout() 25 | plt.show() -------------------------------------------------------------------------------- /C7_Batch_Mini_Project_CSE300.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AbiXnash/An-Intrusion-Detection-System-using-Deep-Learning-models-on-UNSW_NB15-dataset/9fc406fb3bd0cdea5d31eec8a341cd7cfbd1822b/C7_Batch_Mini_Project_CSE300.pdf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Abinash Selvarasu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # An-Intrusion-Detection-System-using-Deep-Learning-models-on-UNSW_NB15dataset 2 | A Deep Learning Based Intrusion Detection System for IIoT Networks 3 | 4 | In recent years, the advancements in the network and cloud technologies have led to the growth of the Internet of Things (IoT) in industrial sectors. The Industrial Internet of Things (IIoT) comprises many connected devices and service data. IIoT networks are inherently vulnerable to cyberattacks as they depend on the associated networks for data exchange and communication. Therefore, it accentuates the necessity for ensuring the security of the IIoT systems for uninterrupted services. Intrusion Detection Systems (IDS) are widely adopted as a promising solution to detect cyber threats and attacks on the Industrial Control Systems (ICS) and IIoT networks. The existing IDS approaches lack generalisation, and involve misclassification errors and high false alarm rates. Considering these issues, a “Hybrid CNN + LSTM”, deep learning-based IDS is designed to identify malicious activities from IIoT networks. The proposed “CNN + LSTM” employs a Convolution Neural Network (CNN) to identify the attack events and regular operations. The experiments are carried out using a benchmark datasets, UNSW-NB15 and the outcomes demonstrate the dominance of 5 | the proposed approach by achieving higher accuracy for the datasets respectively. 6 | --------------------------------------------------------------------------------