{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import pandas as pd\n", "from tensorflow import keras\n", "from tensorflow.keras import layers\n", "from keras import losses\n", "from keras import optimizers\n", "from keras import metrics\n", "import math\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ], "metadata": { "id": "sIDDU2PYPdH_" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "CSV_HEADER = [\n", " \"duration\",\n", " \"protocol_type\",\n", " \"service\",\n", " \"flag\",\n", " \"src_bytes\",\n", " \"dst_bytes\",\n", " \"land\",\n", " \"wrong_fragment\",\n", " \"urgent\",\n", " \"hot\",\n", " \"num_failed_logins\",\n", " \"logged_in\",\n", " \"num_compromised\",\n", " \"root_shell\",\n", " \"su_attempted\",\n", " \"num_root\",\n", " \"num_file_creations\",\n", " \"num_shells\",\n", " \"num_access_files\",\n", " \"num_outbound_cmds\",\n", " \"is_host_login\",\n", " \"is_guest_login\",\n", " \"count\",\n", " \"srv_count\",\n", " \"serror_rate\",\n", " \"srv_serror_rate\",\n", " \"rerror_rate\",\n", " \"srv_rerror_rate\",\n", " \"same_srv_rate\",\n", " \"diff_srv_rate\",\n", " \"srv_diff_host_rate\",\n", " \"dst_host_count\",\n", " \"dst_host_srv_count\",\n", " \"dst_host_same_srv_rate\",\n", " \"dst_host_diff_srv_rate\",\n", " \"dst_host_same_src_port_rate\",\n", " \"dst_host_srv_diff_host_rate\",\n", " \"dst_host_serror_rate\",\n", " \"dst_host_srv_serror_rate\",\n", " \"dst_host_rerror_rate\",\n", " \"dst_host_srv_rerror_rate\",\n", " \"class\"\n", "]\n", "\n", "\n", "train_data = pd.read_csv(\"train.csv\", header=None, names=CSV_HEADER)\n", "\n", "test_data = pd.read_csv(\"test.csv\", header=None, names=CSV_HEADER)\n", "\n", "print(f\"Train dataset shape: {train_data.shape}\")\n", "print(f\"Test dataset shape: {test_data.shape}\")\n", "train_data['class'] = train_data['class'].str.replace(r\"^(.(?:53: FutureWarning: The default value of regex will change from True to False in a future version.\n", " train_data['class'] = train_data['class'].str.replace(r\"^(.(?:54: FutureWarning: The default value of regex will change from True to False in a future version.\n", " test_data['class'] = test_data['class'].str.replace(r\"^(.(?" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+D0lEQVR4nO3de1iUdf7/8deAcvAw4AmQFQ+ppShJoiJ20IqciroyrdAs8VgaWkoe4ruKZu26q+WhNM0O6n7LPLTZQQtlMXVX8YRaampWGrY6oCmMkYLC/fujL/fPCcpbQgf0+biu+9rm83nP537fc10jr73nnntshmEYAgAAwO/y8nQDAAAAVQGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQlAlbRw4ULZbDYdPnzY060AuEYQmgDgKvPpp59q0qRJnm4DuOoQmgDgKvPpp5/q+eef93QbwFWH0AQAAGABoQnAZff+++/LZrNp/fr1peZef/112Ww27dmzR5L05Zdfqn///rruuuvk5+enkJAQDRw4UD/++ONF92Oz2cr8WKpp06bq37+/21hubq5GjhypsLAw+fr6qkWLFvr73/+u4uJiS8f02WefqWvXrqpdu7bsdrs6duyoxYsXu9UsX75cUVFR8vf3V/369fXYY4/pv//9r1tNt27d1K1bt1Lr9+/fX02bNjUfHz58WDabTS+99JLmz5+v5s2by9fXVx07dtS2bdvcnjdnzhzz9SjZAPxx1TzdAICrX1xcnGrVqqVly5apa9eubnNLly5VmzZt1LZtW0lSWlqavvvuOw0YMEAhISHau3ev5s+fr71792rz5s0VEgB+/vlnde3aVf/973/15JNPqnHjxtq0aZOSk5N17NgxzZw583efv3DhQg0cOFBt2rRRcnKyAgMDtXPnTqWmpurRRx81awYMGKCOHTtqypQpys7O1qxZs7Rx40bt3LlTgYGB5ep98eLFOn36tJ588knZbDZNnTpVPXv21Hfffafq1avrySef1NGjR5WWlqb//d//Ldc+APwGAwCugD59+hhBQUHG+fPnzbFjx44ZXl5exuTJk82xn3/+udRz33vvPUOSsWHDBnNswYIFhiTj0KFD5pgkY+LEiaWe36RJEyMhIcF8/MILLxg1a9Y0vv76a7e65557zvD2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yxf9Zh0AAEBVVK7Q9Pnnn1d0HwAAAJVauUJTiePHj+vAgQOSpBtuuEENGjSokKYAAAAqm3JdCJ6fn6+BAweqYcOGuu2223TbbbcpNDRUgwYN0s8//1zRPQIAAHhcuUJTUlKS1q9fr08++US5ubnKzc3VRx99pPXr1+vZZ5+t6B4BAAA8rlwfz/3zn//U+++/r27duplj9957r/z9/fXII49o7ty5FdUfAABApVCuM00///yzgoODS40HBQXx8RwAALgqlSs0xcTEaOLEiTp79qw5dubMGT3//POKiYmpsOYAAAAqi3J9PDdz5kzdfffdatSokdq1aydJ+uKLL+Tr66s1a9ZUaIMAAACVQblCU0REhA4ePKh3331X+/fvlyT16dNHffv2lb+/f4U2CAAAUBmUKzRNmTJFwcHBGjJkiNv422+/rePHj2vcuHEV0hwAAEBlUa5rml5//XW1atWq1HibNm00b968P9wUAABAZVOu0OR0OtWwYcNS4w0aNNCxY8f+cFMAAACVTblCU1hYmDZu3FhqfOPGjQoNDf3DTQEAAFQ25bqmaciQIRo5cqTOnTunO+64Q5KUnp6usWPHckdwAABwVSpXaBozZox+/PFHPfXUUyosLJQk+fn5ady4cUpOTq7QBgEAACqDcoUmm82mv//975owYYL27dsnf39/tWzZUr6+vhXdHwAAQKVQrtBUolatWurYsWNF9QIAAFBpletCcAAAgGsNoQkAAMACj4amuXPn6sYbb5TdbpfdbldMTIw+++wzc/7s2bNKTExUvXr1VKtWLfXq1UvZ2dlua2RlZSkuLk41atRQUFCQxowZo/Pnz7vVrFu3Tu3bt5evr69atGihhQsXluplzpw5atq0qfz8/BQdHa2tW7delmMGAABVk0dDU6NGjfS3v/1NmZmZ2r59u+644w498MAD2rt3ryRp1KhR+uSTT7R8+XKtX79eR48eVc+ePc3nFxUVKS4uToWFhdq0aZMWLVqkhQsXKiUlxaw5dOiQ4uLidPvtt2vXrl0aOXKkBg8erNWrV5s1S5cuVVJSkiZOnKgdO3aoXbt2cjgcysnJuXIvBgAAqNRshmEYnm7iQnXr1tW0adP00EMPqUGDBlq8eLEeeughSdL+/fvVunVrZWRkqHPnzvrss89033336ejRowoODpYkzZs3T+PGjdPx48fl4+Oj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GjZsqEceeUTnz59Xjx49NGTIEL333nsqLCzU1q1bZbPZJEl9+/bVTTfdpLlz58rb21u7du1S9erVr/ThAqhg/GAvgGvC6dOn1aBBA82ePVuDBw92mzt8+LCaNWumnTt3KjIyssznDx8+XE6nU++//75OnjypevXqad26deratWupWrvdrldffVUJCQmX41AAeAgfzwG4Juzbt08FBQW68847LdXPmTNHUVFRatCggWrVqqX58+crKytLklS3bl31799fDodD999/v2bNmqVjx46Zz01KStLgwYMVGxurv/3tb/r2228vyzEBuLIITQCuCf7+/pZrlyxZotGjR2vQoEFas2aNdu3apQEDBqiwsNCsWbBggTIyMtSlSxctXbpU119/vTZv3ixJmjRpkvbu3au4uDitXbtW4eHhWrFiRYUfE4Ari4/nAFwTzp49q7p16+qVV1656MdzI0aM0FdffaX09HSzJjY2VidOnPjNeznFxMSoY8eOeuWVV0rN9enTR/n5+fr4448r9JgAXFmcaQJwTfDz89O4ceM0duxY/eMf/9C3336rzZs366233ipV27JlS23fvl2rV6/W119/rQkTJmjbtm3m/KFDh5ScnKyMjAx9//33WrNmjQ4ePKjWrVvrzJkzGj58uNatW6fvv/9eGzdu1LZt29S6desrebgALgO+PQfgmjFhwgRVq1ZNKSkpOnr0qBo2bKihQ4eWqnvyySe1c+dOxcfHy2azqU+fPnrqqaf02WefSZJq1Kih/fv3a9GiRfrxxx/VsGFDJSYm6sknn9T58+f1448/ql+/fsrOzlb9+vXVs2dPPf/881f6cAFUMD6eAwAAsICP5wAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgwf8D5hjVopT9TlUAAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "## Removing outliers and duplicates" ], "metadata": { "id": "wHhIvDl9V5kl" } }, { "cell_type": "code", "source": [ "def Remove_Outlier_Indices(df):\n", " Q1 = df.quantile(0.02)\n", " Q3 = df.quantile(0.98)\n", " IQR = Q3 - Q1\n", " #trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR)))\n", " trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)\n", " return trueList\n", "\n", "nonOutlierList = Remove_Outlier_Indices(train_data)\n", "new_train_data = train_data[nonOutlierList]\n", "\n", "nonOutlierList = Remove_Outlier_Indices(test_data)\n", "new_test_data = test_data[nonOutlierList]" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8GZwWkuSV5HT", "outputId": "a0f476a0-e5da-483d-cab3-396ba3a213d2" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":2: FutureWarning: The default value of numeric_only in DataFrame.quantile is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.\n", " Q1 = df.quantile(0.02)\n", ":3: FutureWarning: The default value of numeric_only in DataFrame.quantile is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.\n", " Q3 = df.quantile(0.98)\n", ":6: FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated and will raise ValueError in a future version. Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`\n", " trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Merging train and test datasets" ], "metadata": { "id": "uNzhq0uHKkUB" } }, { "cell_type": "code", "source": [ "frames = [new_train_data, new_test_data]\n", "df = pd.concat(frames)\n", "df = df.reset_index(drop=True)\n", "df" ], "metadata": { "id": "3kxP6kBRGX2y", "colab": { "base_uri": "https://localhost:8080/", "height": 444 }, "outputId": "775127dd-2714-47e8-b1eb-60695ad07e48" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " duration protocol_type service flag src_bytes dst_bytes land \\\n", "0 0 1 20 9 491 0 0 \n", "1 0 2 44 9 146 0 0 \n", "2 0 1 49 5 0 0 0 \n", "3 0 1 24 9 232 8153 0 \n", "4 0 1 24 9 199 420 0 \n", "... ... ... ... ... ... ... ... \n", "139899 0 0 14 9 1032 0 0 \n", "139900 0 1 49 9 794 333 0 \n", "139901 0 1 22 9 317 938 0 \n", "139902 0 2 11 9 42 42 0 \n", "139903 0 1 52 1 0 0 0 \n", "\n", " wrong_fragment urgent hot ... dst_host_srv_count \\\n", "0 0 0 0 ... 25 \n", "1 0 0 0 ... 1 \n", "2 0 0 0 ... 26 \n", "3 0 0 0 ... 255 \n", "4 0 0 0 ... 255 \n", "... ... ... ... ... ... \n", "139899 0 0 0 ... 255 \n", "139900 0 0 0 ... 141 \n", "139901 0 0 0 ... 255 \n", "139902 0 0 0 ... 252 \n", "139903 0 0 0 ... 21 \n", "\n", " dst_host_same_srv_rate dst_host_diff_srv_rate \\\n", "0 0.17 0.03 \n", "1 0.00 0.60 \n", "2 0.10 0.05 \n", "3 1.00 0.00 \n", "4 1.00 0.00 \n", "... ... ... \n", "139899 1.00 0.00 \n", "139900 0.72 0.06 \n", "139901 1.00 0.00 \n", "139902 0.99 0.01 \n", "139903 0.08 0.03 \n", "\n", " dst_host_same_src_port_rate dst_host_srv_diff_host_rate \\\n", "0 0.17 0.00 \n", "1 0.88 0.00 \n", "2 0.00 0.00 \n", "3 0.03 0.04 \n", "4 0.00 0.00 \n", "... ... ... \n", "139899 1.00 0.00 \n", "139900 0.01 0.01 \n", "139901 0.01 0.01 \n", "139902 0.00 0.00 \n", "139903 0.00 0.00 \n", "\n", " dst_host_serror_rate dst_host_srv_serror_rate dst_host_rerror_rate \\\n", "0 0.00 0.00 0.05 \n", "1 0.00 0.00 0.00 \n", "2 1.00 1.00 0.00 \n", "3 0.03 0.01 0.00 \n", "4 0.00 0.00 0.00 \n", "... ... ... ... \n", "139899 0.00 0.00 0.00 \n", "139900 0.01 0.00 0.00 \n", "139901 0.01 0.00 0.00 \n", "139902 0.00 0.00 0.00 \n", "139903 0.00 0.00 0.44 \n", "\n", " dst_host_srv_rerror_rate class \n", "0 0.00 normal \n", "1 0.00 normal \n", "2 0.00 anomaly \n", "3 0.01 normal \n", "4 0.00 normal \n", "... ... ... \n", "139899 0.00 anomaly \n", "139900 0.00 normal \n", "139901 0.00 normal \n", "139902 0.00 normal \n", "139903 1.00 anomaly \n", "\n", "[139904 rows x 42 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
durationprotocol_typeserviceflagsrc_bytesdst_byteslandwrong_fragmenturgenthot...dst_host_srv_countdst_host_same_srv_ratedst_host_diff_srv_ratedst_host_same_src_port_ratedst_host_srv_diff_host_ratedst_host_serror_ratedst_host_srv_serror_ratedst_host_rerror_ratedst_host_srv_rerror_rateclass
00120949100000...250.170.030.170.000.000.000.050.00normal
10244914600000...10.000.600.880.000.000.000.000.00normal
201495000000...260.100.050.000.001.001.000.000.00anomaly
30124923281530000...2551.000.000.030.040.030.010.000.01normal
4012491994200000...2551.000.000.000.000.000.000.000.00normal
..................................................................
13989900149103200000...2551.000.001.000.000.000.000.000.00anomaly
139900014997943330000...1410.720.060.010.010.010.000.000.00normal
139901012293179380000...2551.000.000.010.010.010.000.000.00normal
1399020211942420000...2520.990.010.000.000.000.000.000.00normal
13990301521000000...210.080.030.000.000.000.000.441.00anomaly
\n", "

139904 rows × 42 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "markdown", "source": [ "## Feature Selection" ], "metadata": { "id": "FiXD9jj7JzAt" } }, { "cell_type": "code", "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.model_selection import GridSearchCV, KFold\n", "X = df.drop(['class'], axis=1)\n", "Y = df[\"class\"].astype('category').cat.codes\n", "# # parameters to be tested on GridSearchCV\n", "# params = {\"alpha\":np.arange(0.00001, 10, 500)}\n", "\n", "# # Number of Folds and adding the random state for replication\n", "# kf=KFold(n_splits=5,shuffle=True, random_state=42)\n", "\n", "# # Initializing the Model\n", "# lasso = Lasso()\n", "\n", "# # GridSearchCV with model, params and folds.\n", "# lasso_cv=GridSearchCV(lasso, param_grid=params, cv=kf)\n", "# lasso_cv.fit(X, Y)\n", "\n" ], "metadata": { "id": "vkQIwJLqxnb2" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# calling the model with the best parameter\n", "lasso1 = Lasso(alpha=0.00001)\n", "lasso1.fit(X, Y)\n", "\n", "# Using np.abs() to make coefficients positive.\n", "lasso1_coef = np.abs(lasso1.coef_)\n", "# Subsetting the features which has more than 0.001 importance.\n", "# feature_subset=np.array(names)[lasso1_coef>0.14]\n", "# print(\"Selected Feature Columns: {}\".format(feature_subset))" ], "metadata": { "id": "CcnIqyU6u_lU", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "2bbfacac-d731-41c8-d062-c66b16160a76" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 8.040e+01, tolerance: 3.492e+00\n", " model = cd_fast.enet_coordinate_descent(\n" ] } ] }, { "cell_type": "code", "source": [ "names=df.drop(\"class\", axis=1).columns\n", "feature_subset=np.array(names)[lasso1_coef>0.173]\n", "feature_subset" ], "metadata": { "id": "tE0wNJm-CXLz", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "077ac555-eaed-4d47-cf27-014c65442773" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['protocol_type', 'num_failed_logins', 'logged_in',\n", " 'is_guest_login', 'rerror_rate', 'srv_rerror_rate',\n", " 'same_srv_rate', 'dst_host_same_src_port_rate',\n", " 'dst_host_srv_diff_host_rate', 'dst_host_srv_serror_rate'],\n", " dtype=object)" ] }, "metadata": {}, "execution_count": 9 } ] }, { "cell_type": "code", "source": [ "m=np.array(lasso1_coef)[lasso1_coef>0.17]\n", "m" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "thxrpXYpCjLG", "outputId": "aadeb4bc-fa89-4041-b635-930d423f94b5" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([0.26677555, 0.58052921, 0.18609507, 0.64464029, 0.17964476,\n", " 0.22037623, 0.3956496 , 0.20942421, 0.33044222, 0.20789329,\n", " 0.17277382])" ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "# plotting the Column Names and Importance of Columns.\n", "plt.bar(names, lasso1_coef)\n", "plt.xticks(rotation=90)\n", "plt.grid()\n", "plt.title(\"Feature Selection Based on Lasso\")\n", "plt.xlabel(\"Features\")\n", "plt.ylabel(\"Importance\")\n", "plt.ylim(0, 0.15)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 659 }, "id": "BiLBVbqxA-EN", "outputId": "f1d883c5-1cbd-43c7-848a-e479a4f03ccc" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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Mi0BcnNzg6WlJSIjI3XKIyMjU2zgrIavry+2bt2KAwcOIH/+/KnG2trawtbWVq/c2traqIMyPaT0WrHxGv2yBI1Snlb91KwDY1OPNbQvAMP7Q01sRtaZsepj0zrmtM/NKnX40GINUftZ+z7fExl13GeVz5OM+o551+WaSs1yM60XmI2NDSpXroyQkBClLCEhASEhITqXxNQSEfj6+mLTpk34888/Ubhw4fSoLhEREf2HZOolMD8/P/To0QNVqlRBtWrVEBQUhOjoaKVXWPfu3eHh4YHAwEAAiQ2nL168qPx/584dhIeHw9HREcWKFQOQeNlr1apV+P333+Hk5IT79+8DAFxcXGBvb58Ja0lERERZTaYmQJ06dcLDhw8xatQo3L9/HxUqVEBwcDDy5MkDAIiIiICFxb8nqe7evYuKFSsq96dOnYqpU6eiXr162LdvHwBg/vz5AID69evrvNbSpUvRs2fPDF0fIiIi+jBkeiNoX19f+Pr6GnxMm9RoeXp6Iq1Oa5nUqY2IiIg+IJk+FQYRERHR+8YEiIiIiMwOEyAiIiIyO0yAiIiIyOwwASIiIiKzwwSIiIiIzA4TICIiIjI7TICIiIjI7GT6QIhERESU9XkO36b8b2spmFItcdZ37QSnNya1zKyqmYRngIiIiMjsMAEiIiIis8MEiIiIiMwOEyAiIiIyO0yAiIiIyOwwASIiIiKzwwSIiIiIzA4TICIiIjI7HAiRiIjem7QG0wM+vAH16MPEM0BERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZnUxPgObOnQtPT0/Y2dmhevXqOH78eIqxFy5cQPv27eHp6QmNRoOgoKB3XiYRERGZn0xNgNauXQs/Pz+MHj0aYWFhKF++PLy9vfHgwQOD8TExMShSpAgmTZoEd3f3dFkmERERmZ9MTYCmT5+Ovn37wsfHB15eXliwYAEcHBywZMkSg/FVq1bFjz/+iM6dO8PW1jZdlklERETmxyqzXvjNmzc4deoU/P39lTILCws0btwYR44cea/LjI2NRWxs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zeHr64tXr16hatWqyjZds2aNzjoOHDgQy5YtQ8uWLVGmTJkU2zKIygHynjx5ojcGEACULFlSr13GgAEDULRoURw9elRZ1uPHj/H5559jwIAB2LZtmxKbVnd8U7fpyJEjMWrUKPj7+8PCwiLV2G+++QZfffUVTp06hapVqwJIbAO0ePFifP/99wASB4OrUKECSpUqhd69e+P777/XiZ04caIy7MP+/fv15sBL6tq1a3j79q1R63HkyBG94zZ//vy4d+8eChYsiKJFi2LXrl2oVKkSTpw4oTOuCgAUKVIE169fR8GCBVGyZEn89ttvqFatGv744w+9tnhAYvsP7bhObm5uuHv3LkqUKIFChQop8wICiQ3HT5w4geLFi6NevXoYNWoUHj16hJUrV6JMmTIm11dNrLu7O548eYJChQqhYMGCOHr0KMqXL68cG2l59eoVZs2apddJIvkgpSKCe/fuYcyYMQY7d5QpUwZnzpxB4cKFUb16dUyZMgU2NjZYtGgRihQpYnKsmn1XokQJXL58GZ6enihfvrwyiOOCBQv05uFSUwc1+zl79uzKWHMeHh44f/48ypYti2fPniEmJkYn9l333XuRebmX+UppPpWEhAS9+VQ2bdokbdq0EWtraylevLgEBgbKnTt3DC7XyclJunfvLrt27TLYZiNp+5yU5n8xZN++fQbndDFEbbfHBw8eSMuWLdOczkDNDNIiiWeAtG19kp51mDVrllSsWDHVMznpcVZHja+++krnF9Kvv/4qxYoVk+joaJk3b57BU+zbtm1LcXlqztwlVa1aNfnmm2/0yn19faV69eo6ZQ4ODsqvv6TCw8P1frmq7Y5vLDVTS4gkDs9Qo0YNZVvUqFFDfv31V+XxmJgYefXqlbx9+1bGjx8v7u7uyhlMd3d3mTBhgnKJ7+bNm3Lr1i29M6eDBg2STp06iaOjo95pfu38atpb27ZtpXr16mJpaSljxozRiR02bJgyVMaaNWvEyspKihUrJjY2NjJs2DCd2OnTpyuX/Hbv3i12dnZia2srFhYWEhQUpLcd6tSpo5wd7dKlizRr1kwOHTok3bt3l9KlSytxJ06cUM4cREZGire3tzg5OUmlSpWU96op9VUT27t3b2XbzJkzR7mU6urqKr169dKJTf5e135WODk56Z3RS6ndYcGCBSU0NFRvmwUHByvtYa5evSol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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "columns = []\n", "for k in feature_subset:\n", " columns.append(str(k))\n", "columns" ], "metadata": { "id": "tUrifaWBvZpx", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "24dd6a69-4636-47fc-c722-86a19004ecda" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['protocol_type',\n", " 'num_failed_logins',\n", " 'logged_in',\n", " 'is_guest_login',\n", " 'rerror_rate',\n", " 'srv_rerror_rate',\n", " 'same_srv_rate',\n", " 'dst_host_same_src_port_rate',\n", " 'dst_host_srv_diff_host_rate',\n", " 'dst_host_srv_serror_rate']" ] }, "metadata": {}, "execution_count": 12 } ] }, { "cell_type": "code", "source": [ "X = df.drop(['class'], axis=1)\n", "Y = df[\"class\"].astype('category').cat.codes\n", "principalDf = pd.DataFrame(data = X\n", " , columns = columns)\n", "finalDf = pd.concat([principalDf, df[\"class\"]], axis = 1)\n", "finalDf" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 444 }, "id": "RzFbtWLlsmn0", "outputId": "1be552ec-8a93-4215-d063-4a436956afb7" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " protocol_type num_failed_logins logged_in is_guest_login \\\n", "0 1 0 0 0 \n", "1 2 0 0 0 \n", "2 1 0 0 0 \n", "3 1 0 1 0 \n", "4 1 0 1 0 \n", "... ... ... ... ... \n", "139899 0 0 0 0 \n", "139900 1 0 1 0 \n", "139901 1 0 1 0 \n", "139902 2 0 0 0 \n", "139903 1 0 0 0 \n", "\n", " rerror_rate srv_rerror_rate same_srv_rate \\\n", "0 0.0 0.0 1.00 \n", "1 0.0 0.0 0.08 \n", "2 0.0 0.0 0.05 \n", "3 0.0 0.0 1.00 \n", "4 0.0 0.0 1.00 \n", "... ... ... ... \n", "139899 0.0 0.0 1.00 \n", "139900 0.0 0.0 1.00 \n", "139901 0.0 0.0 1.00 \n", "139902 0.0 0.0 1.00 \n", "139903 1.0 1.0 0.25 \n", "\n", " dst_host_same_src_port_rate dst_host_srv_diff_host_rate \\\n", "0 0.17 0.00 \n", "1 0.88 0.00 \n", "2 0.00 0.00 \n", "3 0.03 0.04 \n", "4 0.00 0.00 \n", "... ... ... \n", "139899 1.00 0.00 \n", "139900 0.01 0.01 \n", "139901 0.01 0.01 \n", "139902 0.00 0.00 \n", "139903 0.00 0.00 \n", "\n", " dst_host_srv_serror_rate class \n", "0 0.00 normal \n", "1 0.00 normal \n", "2 1.00 anomaly \n", "3 0.01 normal \n", "4 0.00 normal \n", "... ... ... \n", "139899 0.00 anomaly \n", "139900 0.00 normal \n", "139901 0.00 normal \n", "139902 0.00 normal \n", "139903 0.00 anomaly \n", "\n", "[139904 rows x 11 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
protocol_typenum_failed_loginslogged_inis_guest_loginrerror_ratesrv_rerror_ratesame_srv_ratedst_host_same_src_port_ratedst_host_srv_diff_host_ratedst_host_srv_serror_rateclass
010000.00.01.000.170.000.00normal
120000.00.00.080.880.000.00normal
210000.00.00.050.000.001.00anomaly
310100.00.01.000.030.040.01normal
410100.00.01.000.000.000.00normal
....................................
13989900000.00.01.001.000.000.00anomaly
13990010100.00.01.000.010.010.00normal
13990110100.00.01.000.010.010.00normal
13990220000.00.01.000.000.000.00normal
13990310001.01.00.250.000.000.00anomaly
\n", "

139904 rows × 11 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 13 } ] }, { "cell_type": "markdown", "source": [ "# Model" ], "metadata": { "id": "B6B5ZuR5J5WQ" } }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "train_data, test_data = train_test_split(finalDf, test_size=0.25)\n", "train_data_file = \"train_data.csv\"\n", "test_data_file = \"test_data.csv\"\n", "\n", "train_data.to_csv(train_data_file, index=False, header=False)\n", "test_data.to_csv(test_data_file, index=False, header=False)" ], "metadata": { "id": "_1N70b_DJb2m" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "CSV_HEADER = []\n", "for x in columns:\n", " CSV_HEADER.append(x)\n", "CSV_HEADER.append(\"class\")\n", "\n", "# A list of the numerical feature names.\n", "NUMERIC_FEATURE_NAMES = columns\n", "# A dictionary of the categorical features and their vocabulary.\n", "CATEGORICAL_FEATURES_WITH_VOCABULARY = {\n", "}\n", "# A list of the columns to ignore from the dataset.\n", "IGNORE_COLUMN_NAMES = []\n", "# A list of the categorical feature names.\n", "CATEGORICAL_FEATURE_NAMES = list(CATEGORICAL_FEATURES_WITH_VOCABULARY.keys())\n", "# A list of all the input features.\n", "FEATURE_NAMES = NUMERIC_FEATURE_NAMES + CATEGORICAL_FEATURE_NAMES\n", "# A list of column default values for each feature.\n", "COLUMN_DEFAULTS = [\n", " [0.0] if feature_name in NUMERIC_FEATURE_NAMES + IGNORE_COLUMN_NAMES else [\"NA\"]\n", " for feature_name in CSV_HEADER\n", "]\n", "# The name of the target feature.\n", "TARGET_FEATURE_NAME = \"class\"\n", "# A list of the labels of the target features.\n", "TARGET_LABELS = [\"normal\", \"anomaly\"]\n", "\n", "from tensorflow.keras.layers import StringLookup\n", "\n", "target_label_lookup = StringLookup(\n", " vocabulary=TARGET_LABELS, mask_token=None, num_oov_indices=0\n", ")\n", "\n", "\n", "def get_dataset_from_csv(csv_file_path, shuffle=False, batch_size=128):\n", " dataset = tf.data.experimental.make_csv_dataset(\n", " csv_file_path,\n", " batch_size=batch_size,\n", " column_names=CSV_HEADER,\n", " column_defaults=COLUMN_DEFAULTS,\n", " label_name=TARGET_FEATURE_NAME,\n", " num_epochs=1,\n", " header=False,\n", " na_value=\"?\",\n", " shuffle=shuffle,\n", " ).map(lambda features, target: (features, target_label_lookup(target)))\n", " return dataset.cache()\n", "\n", "def create_model_inputs():\n", " inputs = {}\n", " for feature_name in FEATURE_NAMES:\n", " if feature_name in NUMERIC_FEATURE_NAMES:\n", " inputs[feature_name] = layers.Input(\n", " name=feature_name, shape=(), dtype=tf.float32\n", " )\n", " else:\n", " inputs[feature_name] = layers.Input(\n", " name=feature_name, shape=(), dtype=tf.string\n", " )\n", " return inputs\n", "\n", "def encode_inputs(inputs):\n", " encoded_features = []\n", " for feature_name in inputs:\n", " if feature_name in CATEGORICAL_FEATURE_NAMES:\n", " vocabulary = CATEGORICAL_FEATURES_WITH_VOCABULARY[feature_name]\n", " #print(vocabulary)\n", " # Create a lookup to convert a string values to an integer indices.\n", " # Since we are not using a mask token, nor expecting any out of vocabulary\n", " # (oov) token, we set mask_token to None and num_oov_indices to 0.\n", " lookup = StringLookup(\n", " vocabulary=vocabulary, mask_token=None, num_oov_indices=0\n", " )\n", " # Convert the string input values into integer indices.\n", " value_index = lookup(inputs[feature_name])\n", " embedding_dims = int(math.sqrt(lookup.vocabulary_size()))\n", " # Create an embedding layer with the specified dimensions.\n", " embedding = layers.Embedding(\n", " input_dim=lookup.vocabulary_size(), output_dim=embedding_dims\n", " )\n", " # Convert the index values to embedding representations.\n", " encoded_feature = embedding(value_index)\n", " else:\n", " # Use the numerical features as-is.\n", " encoded_feature = inputs[feature_name]\n", " if inputs[feature_name].shape[-1] is None:\n", " encoded_feature = tf.expand_dims(encoded_feature, -1)\n", "\n", " encoded_features.append(encoded_feature)\n", "\n", " encoded_features = layers.concatenate(encoded_features)\n", " return encoded_features\n", "\n", "class NeuralDecisionTree(keras.Model):\n", " def __init__(self, depth, num_features, used_features_rate, num_classes):\n", " super().__init__()\n", " self.depth = depth\n", " self.num_leaves = 2 ** depth\n", " self.num_classes = num_classes\n", "\n", " # Create a mask for the randomly selected features.\n", " num_used_features = int(num_features * used_features_rate)\n", " one_hot = np.eye(num_features)\n", " sampled_feature_indicies = np.random.choice(\n", " np.arange(num_features), num_used_features, replace=False\n", " )\n", " self.used_features_mask = one_hot[sampled_feature_indicies]\n", "\n", " # Initialize the weights of the classes in leaves.\n", " self.pi = tf.Variable(\n", " initial_value=tf.random_normal_initializer()(\n", " shape=[self.num_leaves, self.num_classes]\n", " ),\n", " dtype=\"float32\",\n", " trainable=True,\n", " )\n", "\n", " # Initialize the stochastic routing layer.\n", " self.decision_fn = layers.Dense(\n", " units=self.num_leaves, activation=\"sigmoid\", name=\"decision\"\n", " )\n", "\n", " def call(self, features):\n", " batch_size = tf.shape(features)[0]\n", "\n", " # Apply the feature mask to the input features.\n", " features = tf.matmul(\n", " features, self.used_features_mask, transpose_b=True\n", " ) # [batch_size, num_used_features]\n", " # Compute the routing probabilities.\n", " decisions = tf.expand_dims(\n", " self.decision_fn(features), axis=2\n", " ) # [batch_size, num_leaves, 1]\n", " # Concatenate the routing probabilities with their complements.\n", " decisions = layers.concatenate(\n", " [decisions, 1 - decisions], axis=2\n", " ) # [batch_size, num_leaves, 2]\n", "\n", " mu = tf.ones([batch_size, 1, 1])\n", "\n", " begin_idx = 1\n", " end_idx = 2\n", " # Traverse the tree in breadth-first order.\n", " for level in range(self.depth):\n", " mu = tf.reshape(mu, [batch_size, -1, 1]) # [batch_size, 2 ** level, 1]\n", " mu = tf.tile(mu, (1, 1, 2)) # [batch_size, 2 ** level, 2]\n", " level_decisions = decisions[\n", " :, begin_idx:end_idx, :\n", " ] # [batch_size, 2 ** level, 2]\n", " mu = mu * level_decisions # [batch_size, 2**level, 2]\n", " begin_idx = end_idx\n", " end_idx = begin_idx + 2 ** (level + 1)\n", "\n", " mu = tf.reshape(mu, [batch_size, self.num_leaves]) # [batch_size, num_leaves]\n", " probabilities = keras.activations.softmax(self.pi) # [num_leaves, num_classes]\n", " outputs = tf.matmul(mu, probabilities) # [batch_size, num_classes]\n", " return outputs\n", "\n", "class NeuralDecisionForest(keras.Model):\n", " def __init__(self, num_trees, depth, num_features, used_features_rate, num_classes):\n", " super().__init__()\n", " self.ensemble = []\n", " # Initialize the ensemble by adding NeuralDecisionTree instances.\n", " # Each tree will have its own randomly selected input features to use.\n", " for _ in range(num_trees):\n", " self.ensemble.append(\n", " NeuralDecisionTree(depth, num_features, used_features_rate, num_classes)\n", " )\n", "\n", " def call(self, inputs):\n", " # Initialize the outputs: a [batch_size, num_classes] matrix of zeros.\n", " batch_size = tf.shape(inputs)[0]\n", " outputs = tf.zeros([batch_size, num_classes])\n", "\n", " # Aggregate the outputs of trees in the ensemble.\n", " for tree in self.ensemble:\n", " outputs += tree(inputs)\n", " # Divide the outputs by the ensemble size to get the average.\n", " outputs /= len(self.ensemble)\n", " return outputs\n", "learning_rate = 0.01\n", "batch_size = 128\n", "num_epochs = 10\n", "\n", "\n", "def run_experiment(model):\n", "\n", " # model.compile(\n", " # optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n", " # loss=keras.losses.SparseCategoricalCrossentropy(),\n", " # metrics=[keras.metrics.SparseCategoricalAccuracy()],\n", " # )\n", " model.compile(\n", " optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n", " loss=keras.losses.SparseCategoricalCrossentropy(),\n", " metrics=[metrics.SparseCategoricalAccuracy()],\n", " )\n", " print(\"Start training the model...\")\n", " train_dataset = get_dataset_from_csv(\n", " train_data_file, shuffle=True, batch_size=batch_size\n", " )\n", "\n", " model.fit(train_dataset, epochs=num_epochs)\n", " print(\"Model training finished\")\n", "\n", " print(\"Evaluating the model on the test data...\")\n", " test_dataset = get_dataset_from_csv(test_data_file, batch_size=batch_size)\n", "\n", " _, accuracy = model.evaluate(test_dataset)\n", " print(f\"Test accuracy: {round(accuracy * 100, 2)}%\")\n", " return model" ], "metadata": { "id": "PGCEwlOPPpEP", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "6b1d9165-a8ed-41a9-fb06-eda1b67a9118" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/numpy/core/numeric.py:2463: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", " return bool(asarray(a1 == a2).all())\n" ] } ] }, { "cell_type": "code", "source": [ "num_trees = 25\n", "depth = 5\n", "used_features_rate = 0.5\n", "num_classes = len(TARGET_LABELS)\n", "\n", "\n", "def create_forest_model():\n", " inputs = create_model_inputs()\n", " features = encode_inputs(inputs)\n", " features = layers.BatchNormalization()(features)\n", " num_features = features.shape[1]\n", "\n", " forest_model = NeuralDecisionForest(\n", " num_trees, depth, num_features, used_features_rate, num_classes\n", " )\n", "\n", " outputs = forest_model(features)\n", " model = keras.Model(inputs=inputs, outputs=outputs)\n", " return model\n", "\n", "\n", "forest_model = create_forest_model()\n", "\n", "finalModel = run_experiment(forest_model)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vLjxBfBIQUKR", "outputId": "5afeb048-e506-4273-ed9c-c38f4472311a" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Start training the model...\n", "Epoch 1/10\n", "820/820 [==============================] - 53s 27ms/step - loss: 0.1932 - sparse_categorical_accuracy: 0.9393\n", "Epoch 2/10\n", "820/820 [==============================] - 21s 26ms/step - loss: 0.1443 - sparse_categorical_accuracy: 0.9520\n", "Epoch 3/10\n", "820/820 [==============================] - 21s 26ms/step - loss: 0.1412 - sparse_categorical_accuracy: 0.9543\n", "Epoch 4/10\n", "820/820 [==============================] - 20s 24ms/step - loss: 0.1396 - sparse_categorical_accuracy: 0.9562\n", "Epoch 5/10\n", "820/820 [==============================] - 21s 26ms/step - loss: 0.1386 - sparse_categorical_accuracy: 0.9577\n", "Epoch 6/10\n", "820/820 [==============================] - 19s 23ms/step - loss: 0.1381 - sparse_categorical_accuracy: 0.9583\n", "Epoch 7/10\n", "820/820 [==============================] - 20s 25ms/step - loss: 0.1376 - sparse_categorical_accuracy: 0.9587\n", "Epoch 8/10\n", "820/820 [==============================] - 20s 25ms/step - loss: 0.1373 - sparse_categorical_accuracy: 0.9590\n", "Epoch 9/10\n", "820/820 [==============================] - 20s 25ms/step - loss: 0.1371 - sparse_categorical_accuracy: 0.9592\n", "Epoch 10/10\n", "820/820 [==============================] - 20s 24ms/step - loss: 0.1369 - sparse_categorical_accuracy: 0.9594\n", "Model training finished\n", "Evaluating the model on the test data...\n", "274/274 [==============================] - 6s 11ms/step - loss: 0.1370 - sparse_categorical_accuracy: 0.9594\n", "Test accuracy: 95.94%\n" ] } ] }, { "cell_type": "code", "source": [ "test_dataset = get_dataset_from_csv(test_data_file, batch_size=batch_size)\n", "colnames=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'target']\n", "data = pd.read_csv(\"test_data.csv\", names=colnames, header=None)\n", "data['target'].replace('normal', 0,inplace=True)\n", "data['target'].replace('anomaly', 1,inplace=True)\n", "y_test = data['target'].values # as a numpy array\n", "from sklearn.metrics import confusion_matrix\n", "y_prediction = finalModel.predict(test_dataset)\n", "y_prediction = np.argmax (y_prediction, axis = 1)\n", "result = confusion_matrix(y_test, y_prediction , normalize='pred')\n", "print(result)\n", "TP = result[0][0]\n", "FP = result[0][1]\n", "TN = result[1][1]\n", "FN = result[1][0]\n", "ACC = (TP+TN)/(TP+TN+FP+FN)\n", "PR = TP/(TP+FP) #precision\n", "TPR = TP/(TP+FN) #Recall or True positive rate\n", "FPR = FP/(FP+TN)\n", "F1Score = 2*(PR*TPR)/(PR+TPR)\n", "print(\"ACC: \" + str(ACC))\n", "print(\"PR: \" + str(PR))\n", "print(\"TPR: \" + str(TPR))\n", "print(\"FPR: \" + str(FPR))\n", "print(\"F1Score: \" + str(F1Score))\n" ], "metadata": { "id": "Bzegny-zWVlM", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "46a090ad-fcf8-4ba8-843f-2af61f213fd5" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "274/274 [==============================] - 6s 12ms/step\n", "[[0.94727873 0.02660822]\n", " [0.05272127 0.97339178]]\n", "ACC: 0.9603352535958944\n", "PR: 0.9726783245865884\n", "TPR: 0.9472787304292257\n", "FPR: 0.02660822323743672\n", "F1Score: 0.9598105187022743\n" ] } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import numpy\n", "from sklearn import metrics\n", "\n", "\n", "cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = result, display_labels = [True, False])\n", "\n", "cm_display.plot()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 449 }, "id": "_SfKSvXHKd7z", "outputId": "cdc42ecf-3c02-4e95-9478-6a31db155e79" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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AACo/txKICZMmFDqTpQAAOBntDBcuO+++1S3bt2KigUAAO/nIy2Mct8HgvUPAADgonInEBevwgAAAJfgyU2kPKhevPTSS2rYsKGCg4PVoUMHff311+Wat3DhQtlsNvXo0cOt85U7gTAMg/YFAAC/oSqehbFo0SINGzZM48aN08aNG9WmTRt17dpVx48fv+S8ffv2afjw4erYsaPb53T7VtYAAOASqqACMXXqVA0cOFD9+vVTUlKSZs2apZo1a2rOnDllzrHb7erVq5cmTJigxo0bu31OEggAAKqhXz9rqrCw0OW4oqIiZWVlKTU11bHPz89PqampWr9+fZnHnzhxourWrav+/ftfVnwkEAAAWMmiCkRCQoIiIyMdW0ZGhsvTnTx5Una7XTExMU77Y2JidPToUZdzMjMz9frrr2v27NmX/THduowTAABcmlX3gTh48KAiIiIc+4OCgjyM7IK8vDw9+OCDmj17tmrXrn3ZxyGBAACgGoqIiHBKIMpSu3Zt+fv769ixY077jx07ptjY2FLjd+/erX379ql79+6OfYZhSJICAgKUnZ2tJk2a/OZ5aWEAAGClSl5EGRgYqOTkZK1atcqxzzAMrVq1SikpKaXGt2jRQt999502b97s2G677TZ17txZmzdvVkJCQrnOSwUCAAALVcWtrIcNG6Y+ffqoffv2+v3vf69p06apoKBA/fr1kyT17t1b8fHxysjIUHBwsK655hqn+VFRUZJUav+lkEAAAODl7r33Xp04cUJjx47V0aNH1bZtW61YscKxsPLAgQPy87O26UACAQCAlaroWRhpaWlKS0tz+d7q1asvOXfevHlun48EAgAAK/EwLQAAANeoQAAAYCHbfzdP5nsDEggAAKzkIy0MEggAACxUFZdxVgXWQAAAALdRgQAAwEq0MAAAwGXxkiTAE7QwAACA26hAAABgIV9ZREkCAQCAlXxkDQQtDAAA4DYqEAAAWIgWBgAAcB8tDAAAANeoQAAAYCFaGAAAwH0+0sIggQAAwEo+kkCwBgIAALiNCgQAABZiDQQAAHAfLQwAAADXqEAAAGAhm2nKZl5+GcGTuZWJBAIAACvRwgAAAHCNCgQAABbiKgwAAOA+WhgAAACuUYEAAMBCtDAAAID7fKSFQQIBAICFfKUCwRoIAADgNioQAABYiRYGAAC4HN7ShvAELQwAAOA2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DEP333+/xo8f73i/VatWTusetmzZol27dik8PNzpOOfPn9fu3bt15swZHTlyRB06dHC8FxAQoPbt25dqY1y0efNm+fv7q1OnTuWOe9euXTp79qxuueUWp/1FRUVq166dJGnbtm1OcUhSSkpKuc9x0aJFizR9+nTt3r1b+fn5KikpUUREhNOYq6++WvHx8U7nMQxD2dnZCg8P1+7du9W/f38NHDjQMaakpESRkZFuxwPAcyQQgIc6d+6smTNnKjAwUHFxcQoIcP7fKjQ01Ol1fn6+kpOTtWDBglLHqlOnzmXFEBIS4vac/Px8SdKyZcucvrilC+s6rLJ+/Xr16tVLEyZMUNeuXRUZGamFCxfq+eefdzvW2bNnl0po/P39LYsVQPmRQAAeCg0NVWJiYrnHX3vttVq0aJHq1q1b6q/wi+rVq6evvvpKN954o6QLf2lnZWXp2muvdTm+VatWMgxDa9asUWpqaqn3L1ZA7Ha7Y19SUpKCgoJ04MCBMisXLVu2dCwIveg///nPb3/IX1i3bp0aNGigJ554wrFv//79pcYdOHBAhw8fVlxcnOM8fn5+at68uWJiYhQXF6c9e/aoV69ebp0fQMVgESVQyXr16qXatWvr9ttv19q1a7V3716tXr1agwcP1o8//ihJGjJkiJ5++mm9//772r59ux555JFL3sOhYcOG6tOnjx566CG9//77jmO+/fbbkqQGDRrIZrNp6dKlOnHihPLz8xUeHq7hw4dr6NCheuONN7R7925t3LhRM2bMcCxMfPjhh7Vz506NGDFC2dnZeuuttzRv3jy3Pm/Tpk114MABLVy4ULt379b06dNdLggNDg5Wnz59tGXLFq1du1aDBw/WPffco9jYWEnShAkTlJGRoenTp2vHjh367rvvNHfuXE2dOtWteABYgwQCqGQ1a9bUF198oauvvlp33nmnWrZsqf79++v8+fOOisRf//pXPfjgg+rTp49SUlIUHh6uO+6445LHnTlzpu6++2498sgjatGihQYOHKiCggJJUnx8vCZMmKDRo0crJiZGaWlpkqRJkyYpPT1dGRkZatmypbp166Zly5apUaNGki6sS1iyZInef/99tWnTRrNmzdLkyZPd+ry33Xabhg4dqrS0NLVt21br1q1Tenp6qXGJiYm688479cc//lFdunRR69atnS7THDBggF577TXNnTtXrVq1UqdOnTRv3jxHrAAql80sa1UWAABAGahAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt5FAAAAAt/1/8PhBrYZlKTIAAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "result" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "FfPwUmlCPlXc", "outputId": "4d17fb2d-be11-4d12-860e-93b74d991411" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([[0.94727873, 0.02660822],\n", " [0.05272127, 0.97339178]])" ] }, "metadata": {}, "execution_count": 19 } ] }, { "cell_type": "code", "source": [ "import numpy as np\n", "result = np.array( [[0.94727873, 0.02660822],\n", " [0.05272127, 0.97339178]] )\n", "result" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d7w5H-XkPl4y", "outputId": "296a6792-cc0d-4f8e-f418-b75aa9b7afd5" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([[0.94727873, 0.02660822],\n", " [0.05272127, 0.97339178]])" ] }, "metadata": {}, "execution_count": 1 } ] }, { "cell_type": "markdown", "source": [ "## CISIDS2017" ], "metadata": { "id": "lx4RpN47ybt6" } }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kHU-PAI6yhyz", "outputId": "4ed1ac5a-4ce4-48e3-fd44-8526e3179c58" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ] }, { "cell_type": "code", "source": [ "import pandas as pd\n", "import glob\n", "import os\n", "\n", "path = r'C:\\DRO\\DCL_rawdata_files' # use your path\n", "all_files = glob.glob(os.path.join(path , \"/content/drive/MyDrive/datasets/CISIDS2017/*.csv\"))\n", "\n", "li = []\n", "\n", "for filename in all_files:\n", " df = pd.read_csv(filename, index_col=None, header=0)\n", " li.append(df)\n", "\n", "frame = pd.concat(li, axis=0, ignore_index=True)" ], "metadata": { "id": "orUywltc2yaK" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "column_headers = list(frame.columns.values)\n", "column_headers" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "eJcGQKBn4Abs", "outputId": "886afb27-efba-4e72-dad4-a2fc4632607b" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[' Destination Port',\n", " ' Flow Duration',\n", " ' Total Fwd Packets',\n", " ' Total Backward Packets',\n", " 'Total Length of Fwd Packets',\n", " ' Total Length of Bwd Packets',\n", " ' Fwd Packet Length Max',\n", " ' Fwd Packet Length Min',\n", " ' Fwd Packet Length Mean',\n", " ' Fwd Packet Length Std',\n", " 'Bwd Packet Length Max',\n", " ' Bwd Packet Length Min',\n", " ' Bwd Packet Length Mean',\n", " ' Bwd Packet Length Std',\n", " 'Flow Bytes/s',\n", " ' Flow Packets/s',\n", " ' Flow IAT Mean',\n", " ' Flow IAT Std',\n", " ' Flow IAT Max',\n", " ' Flow IAT Min',\n", " 'Fwd IAT Total',\n", " ' Fwd IAT Mean',\n", " ' Fwd IAT Std',\n", " ' Fwd IAT Max',\n", " ' Fwd IAT Min',\n", " 'Bwd IAT Total',\n", " ' Bwd IAT Mean',\n", " ' Bwd IAT Std',\n", " ' Bwd IAT Max',\n", " ' Bwd IAT Min',\n", " 'Fwd PSH Flags',\n", " ' Bwd PSH Flags',\n", " ' Fwd URG Flags',\n", " ' Bwd URG Flags',\n", " ' Fwd Header Length',\n", " ' Bwd Header Length',\n", " 'Fwd Packets/s',\n", " ' Bwd Packets/s',\n", " ' Min Packet Length',\n", " ' Max Packet Length',\n", " ' Packet Length Mean',\n", " ' Packet Length Std',\n", " ' Packet Length Variance',\n", " 'FIN Flag Count',\n", " ' SYN Flag Count',\n", " ' RST Flag Count',\n", " ' PSH Flag Count',\n", " ' ACK Flag Count',\n", " ' URG Flag Count',\n", " ' CWE Flag Count',\n", " ' ECE Flag Count',\n", " ' Down/Up Ratio',\n", " ' Average Packet Size',\n", " ' Avg Fwd Segment Size',\n", " ' Avg Bwd Segment Size',\n", " ' Fwd Header Length.1',\n", " 'Fwd Avg Bytes/Bulk',\n", " ' Fwd Avg Packets/Bulk',\n", " ' Fwd Avg Bulk Rate',\n", " ' Bwd Avg Bytes/Bulk',\n", " ' Bwd Avg Packets/Bulk',\n", " 'Bwd Avg Bulk Rate',\n", " 'Subflow Fwd Packets',\n", " ' Subflow Fwd Bytes',\n", " ' Subflow Bwd Packets',\n", " ' Subflow Bwd Bytes',\n", " 'Init_Win_bytes_forward',\n", " ' Init_Win_bytes_backward',\n", " ' act_data_pkt_fwd',\n", " ' min_seg_size_forward',\n", " 'Active Mean',\n", " ' Active Std',\n", " ' Active Max',\n", " ' Active Min',\n", " 'Idle Mean',\n", " ' Idle Std',\n", " ' Idle Max',\n", " ' Idle Min',\n", " ' Label']" ] }, "metadata": {}, "execution_count": 5 } ] }, { "cell_type": "code", "source": [ "frame[' Label'] = frame[' Label'].str.replace(r\"^(.(?:1: FutureWarning: The default value of regex will change from True to False in a future version.\n", " frame[' Label'] = frame[' Label'].str.replace(r\"^(.(? (Q3 + 1.5 * IQR)))\n", " trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)\n", " return trueList\n", "\n", "nonOutlierList = Remove_Outlier_Indices(df)\n", "new_data = df[nonOutlierList]\n", "\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "f8da8baa-d15e-412d-905e-e27926307110", "id": "i_PXbZyt5-fR" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":2: FutureWarning: The default value of numeric_only in DataFrame.quantile is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.\n", " Q1 = df.quantile(0.02)\n", ":3: FutureWarning: The default value of numeric_only in DataFrame.quantile is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.\n", " Q3 = df.quantile(0.98)\n", ":6: FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated and will raise ValueError in a future version. Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`\n", " trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)\n" ] } ] }, { "cell_type": "code", "source": [ "df = new_data\n", "df = df.reset_index(drop=True)\n", "del new_data\n", "del nonOutlierList\n", "del li\n", "del frame" ], "metadata": { "id": "FSPL95xg5-fT" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [], "metadata": { "id": "dqn7YpLGXhEW" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.model_selection import GridSearchCV, KFold\n", "X = df.drop([' Label'], axis=1)\n", "Y = df[\" Label\"].astype('category').cat.codes\n", "# parameters to be tested on GridSearchCV\n", "params = {\"alpha\":np.arange(0.00001, 10, 500)}\n", "\n", "# Number of Folds and adding the random state for replication\n", "kf=KFold(n_splits=5,shuffle=True, random_state=42)\n", "\n", "# Initializing the Model\n", "lasso = Lasso()\n", "\n", "# GridSearchCV with model, params and folds.\n", "lasso_cv=GridSearchCV(lasso, param_grid=params, cv=kf)\n", "lasso_cv.fit(X, Y)\n", "\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 346 }, "id": "b_-yg9HYXhv7", "outputId": "538a8f92-3dd4-419e-f12f-79ff3ac17f37" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.965e+04, tolerance: 3.205e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.967e+04, tolerance: 3.207e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.962e+04, tolerance: 3.203e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.967e+04, tolerance: 3.203e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.959e+04, tolerance: 3.204e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 7.455e+04, tolerance: 4.006e+01\n", " model = cd_fast.enet_coordinate_descent(\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "GridSearchCV(cv=KFold(n_splits=5, random_state=42, shuffle=True),\n", " estimator=Lasso(), param_grid={'alpha': array([1.e-05])})" ], "text/html": [ "
GridSearchCV(cv=KFold(n_splits=5, random_state=42, shuffle=True),\n",
              "             estimator=Lasso(), param_grid={'alpha': array([1.e-05])})
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "code", "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.model_selection import GridSearchCV, KFold\n", "X = df.drop([' Label'], axis=1)\n", "Y = df[\" Label\"].astype('category').cat.codes\n", "# calling the model with the best parameter\n", "lasso1 = Lasso(alpha=0.00001)\n", "lasso1.fit(X, Y)\n", "\n", "# Using np.abs() to make coefficients positive.\n", "lasso1_coef = np.abs(lasso1.coef_)\n", "# Subsetting the features which has more than 0.001 importance.\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "N1SR7E6EXhv7", "outputId": "3c918ac7-b837-4b8d-82a8-0cf7a03cfbc5" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 7.455e+04, tolerance: 4.006e+01\n", " model = cd_fast.enet_coordinate_descent(\n" ] } ] }, { "cell_type": "code", "source": [ "names=df.drop(\" Label\", axis=1).columns" ], "metadata": { "id": "fb0YK8mtv7Ph" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "feature_subset=np.array(names)[lasso1_coef>0.01]\n", "feature_subset" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hsra5JiBXhv8", "outputId": "8c61c043-2898-487b-8f06-9bfead8bd784" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([' Total Fwd Packets', ' Total Backward Packets', 'Fwd PSH Flags',\n", " 'FIN Flag Count', ' SYN Flag Count', ' PSH Flag Count',\n", " ' ACK Flag Count', ' URG Flag Count', ' Down/Up Ratio',\n", " ' Subflow Bwd Packets'], dtype=object)" ] }, "metadata": {}, "execution_count": 14 } ] }, { "cell_type": "code", "source": [ "m=np.array(lasso1_coef)[lasso1_coef>0.01]\n", "m" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "022906ca-f74e-42ab-c43a-0b6b2845217b", "id": "UB68DTTvXhv9" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([0.02261965, 0.01475288, 0.05149803, 0.28977241, 0.0593355 ,\n", " 0.4697659 , 0.38491962, 0.30526729, 0.07180872, 0.0207763 ])" ] }, "metadata": {}, "execution_count": 15 } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "# plotting the Column Names and Importance of Columns.\n", "plt.bar(names, lasso1_coef)\n", "plt.xticks(rotation=90)\n", "plt.grid()\n", "plt.title(\"Feature Selection Based on Lasso\")\n", "plt.xlabel(\"Features\")\n", "plt.ylabel(\"Importance\")\n", "plt.ylim(0, 0.15)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 656 }, "outputId": "5a2c0486-7235-4def-d6c0-2b1a79343932", "id": "Xm5vrrslXhv-" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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JkBERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdnJ9QRowYIF8Pb2hpWVFapUqYIjR45kWvbs2bP46KOP4O3tDZVKhTlz5hiVmTx5MipXrgx7e3u4ubmhVatWuHDhwltcAyIiInrf5GoCtHr1aoSEhGDMmDGIioqCv78/goKCcPfuXZPlExIS4OPjgylTpsDDw8Nkmb1796Jfv344dOgQtm/fjpSUFDRs2BDx8fFvc1WIiIjoPWKRm43PmjULvXv3Rvfu3QEAixYtwubNm7F06VIMGzbMqHzlypVRuXJlADD5OgBs2bLF4Ocff/wRbm5uiIyMRK1atXJ4DYiIiOh9lGsJUHJyMiIjIzF8+HAlplarUb9+fRw8eDDH2omLiwMA5MmTJ9MySUlJSEpKUn5+/PgxACAlJQUpKSk51pf09PVmrN9UPCtlcyrONtkm28x+mzqNQKeWF/9XS7b6mLEO/WuvG8/uuPxbxpBtmk+bOSkrdatERN5aT14iOjoaXl5eiIiIQNWqVZX40KFDsXfvXhw+fPil7/f29sbAgQMxcODATMukpaWhRYsWePToEfbv359pubFjx2LcuHFG8bCwMNjY2Lx6ZYiIiCjXJSQkoFOnToiLi4ODg8PLC0suuXXrlgCQiIgIg3hoaKgEBAS88v2FChWS2bNnv7RM3759pVChQnLz5s2XlktMTJS4uDhluXnzpgCQ2NhYSU5OfitLfHy8hIeHS3x8/CvjWSmbU3G2yTbZZvbbLD7iN/EbtVHCw8PFb9TGbNWdsY7iI37LUvx9H0O2aT5t5uQSGxsrACQuLu6VeUSunQJzcXGBRqNBTEyMQTwmJibTCc5ZERwcjE2bNmHfvn3Inz//S8vqdDrodDqjuKWlJSwtLd+4Ly+TWRum4lkpm1Nxtsk22WbW20xKVSnxpDRVturOWEdSqipL8fd9DNmm+bWZE7JSb65dBabValGxYkXs3LlTiaWlpWHnzp0Gp8SySkQQHByM9evXY9euXShcuHBOdJeIiIj+Q3L1KrCQkBB07doVlSpVQkBAAObMmYP4+HjlqrAuXbrAy8sLkydPBvBi4vS5c+eU/9+6dQsnTpyAnZ0dihYtCgDo168fwsLCsGHDBtjb2+POnTsAAEdHR1hbW+fCWhIREdG/Ta4mQO3bt8e9e/cwevRo3LlzB+XKlcOWLVvg7u4OALhx4wbU6v87SBUdHY3y5csrP8+YMQMzZsxA7dq1sWfPHgDAN998AwAIDAw0aOuHH35At27d3ur6EBER0fshVxMg4MVcneDgYJOv6ZMaPW9vb8grLlp71etEREREuf4oDCIiIqJ3jQkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERmhwkQERERmZ1cT4AWLFgAb29vWFlZoUqVKjhy5EimZc+ePYuPPvoI3t7eUKlUmDNnzhvXSUREROYnVxOg1atXIyQkBGPGjEFUVBT8/f0RFBSEu3fvmiyfkJAAHx8fTJkyBR4eHjlSJxEREZmfXE2AZs2ahd69e6N79+4oXbo0Fi1aBBsbGyxdutRk+cqVK2P69Ono0KEDdDpdjtRJRERE5scitxpOTk5GZGQkhg8frsTUajXq16+PgwcPvtM6k5KSkJSUpPz8+PFjAEBKSgpSUlKy1ZdX0debsX5T8ayUzak422SbbDP7beo0Ap1aXvxfLdnqY8Y69K+9bjy74/JvGUO2aT5t5qSs1K0SEXlrPXmJ6OhoeHl5ISIiAlWrVlXiQ4cOxd69e3H48OGXvt/b2xsDBw7EwIED37jOsWPHYty4cUbxsLAw2NjYZHHNiIiIKDckJCSgU6dOiIuLg4ODw8sLSy65deuWAJCIiAiDeGhoqAQEBLzy/YUKFZLZs2fnSJ2JiYkSFxenLDdv3hQAEhsbK8nJyW9liY+Pl/DwcImPj39lPCtlcyrONtkm28x+m8VH/CZ+ozZKeHi4+I3amK26M9ZRfMRvWYq/72PINs2nzZxcYmNjBYDExcW9Mo/ItVNgLi4u0Gg0iImJMYjHxMRkOsH5bdWp0+lMzimytLSEpaVltvryujJrw1Q8K2VzKs422SbbzHqbSakqJZ6UpspW3RnrSEpVZSn+vo8h2zS/NnNCVurNtUnQWq0WFStWxM6dO5VYWloadu7caXD6KrfrJCIiov+eXDsCBAAhISHo2rUrKlWqhICAAMyZMwfx8fHo3r07AKBLly7w8vLC5MmTAbyY5Hzu3Dnl/7du3cKJEydgZ2eHokWLvladRERERLmaALVv3x737t3D6NGjcefOHZQrVw5btmyBu7s7AODGjRtQq//vIFV0dDTKly+v/DxjxgzMmDEDtWvXxp49e16rTiIiIqJcTYAAIDg4GMHBwSZf0yc1et7e3pDXuGjtZXUSERER5fqjMIiIiIjeNSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERmhwkQERERmR0mQERERGR2mAARERGR2WECRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdnJdgK0YsUKVK9eHfny5cP169cBAHPmzMGGDRtyrHNEREREb0O2EqBvvvkGISEhaNKkCR49eoTU1FQAgJOTE+bMmZOT/SMiIiLKcdlKgObNm4dvv/0WI0eOhEajUeKVKlXC6dOnc6xzRERERG9DthKgq1evonz58kZxnU6H+Pj4N+4UERER0duUrQSocOHCOHHihFF8y5YtKFWq1Jv2iYiIiOitssjOm0JCQtCvXz8kJiZCRHDkyBH8/PPPmDx5Mr777ruc7iMRERFRjspWAtSrVy9YW1tj1KhRSEhIQKdOnZAvXz7MnTsXHTp0yOk+EhEREeWobCVAANC5c2d07twZCQkJePr0Kdzc3HKyX0RERERvTbYSoKtXr+L58+coVqwYbGxsYGNjAwC4ePEiLC0t4e3tnZN9JCIiIspR2ZoE3a1bN0RERBjFDx8+jG7dur1pn4iIiIjeqmwlQMePH0f16tWN4h988IHJq8OIiIiI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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "columns = []\n", "for k in feature_subset:\n", " columns.append(str(k))\n", "columns" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "6913a1e0-8ef7-419b-b02b-4dd52835d442", "id": "PXkTjydrXhv-" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[' Total Fwd Packets',\n", " ' Total Backward Packets',\n", " 'Fwd PSH Flags',\n", " 'FIN Flag Count',\n", " ' SYN Flag Count',\n", " ' PSH Flag Count',\n", " ' ACK Flag Count',\n", " ' URG Flag Count',\n", " ' Down/Up Ratio',\n", " ' Subflow Bwd Packets']" ] }, "metadata": {}, "execution_count": 17 } ] }, { "cell_type": "code", "source": [ "X = df.drop([' Label'], axis=1)\n", "Y = df[\" Label\"].astype('category').cat.codes\n", "principalDf = pd.DataFrame(data = X\n", " , columns = columns)\n", "finalDf = pd.concat([principalDf, df[\" Label\"]], axis = 1)\n", "finalDf" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 441 }, "outputId": "2289a865-9d89-46db-cf32-53232ebe3f43", "id": "8wP2orQHXhv_" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Total Fwd Packets Total Backward Packets Fwd PSH Flags \\\n", "0 2 0 0 \n", "1 1 1 0 \n", "2 1 1 0 \n", "3 1 1 0 \n", "4 2 0 0 \n", "... ... ... ... \n", "2539413 4 2 0 \n", "2539414 2 2 0 \n", "2539415 2 1 1 \n", "2539416 6 2 0 \n", "2539417 4 2 0 \n", "\n", " FIN Flag Count SYN Flag Count PSH Flag Count ACK Flag Count \\\n", "0 0 0 0 1 \n", "1 0 0 0 1 \n", "2 0 0 0 1 \n", "3 0 0 0 1 \n", "4 0 0 0 1 \n", "... ... ... ... ... \n", "2539413 0 0 0 0 \n", "2539414 0 0 0 0 \n", "2539415 0 1 0 1 \n", "2539416 0 0 0 0 \n", "2539417 0 0 0 0 \n", "\n", " URG Flag Count Down/Up Ratio Subflow Bwd Packets Label \n", "0 0 0 0 BENIGN \n", "1 1 1 1 BENIGN \n", "2 1 1 1 BENIGN \n", "3 1 1 1 BENIGN \n", "4 0 0 0 BENIGN \n", "... ... ... ... ... \n", "2539413 0 0 2 BENIGN \n", "2539414 0 1 2 BENIGN \n", "2539415 0 0 1 BENIGN \n", "2539416 0 0 2 BENIGN \n", "2539417 0 0 2 BENIGN \n", "\n", "[2539418 rows x 11 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Total Fwd PacketsTotal Backward PacketsFwd PSH FlagsFIN Flag CountSYN Flag CountPSH Flag CountACK Flag CountURG Flag CountDown/Up RatioSubflow Bwd PacketsLabel
02000001000BENIGN
11100001111BENIGN
21100001111BENIGN
31100001111BENIGN
42000001000BENIGN
....................................
25394134200000002BENIGN
25394142200000012BENIGN
25394152110101001BENIGN
25394166200000002BENIGN
25394174200000002BENIGN
\n", "

2539418 rows × 11 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 18 } ] }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "train_data, test_data = train_test_split(finalDf, test_size=0.25)\n", "train_data_file = \"train_data.csv\"\n", "test_data_file = \"test_data.csv\"\n", "\n", "train_data.to_csv(train_data_file, index=False, header=False)\n", "test_data.to_csv(test_data_file, index=False, header=False)" ], "metadata": { "id": "c85wOCBv5-fX" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "del finalDf\n", "del principalDf\n", "del train_data\n", "del test_data" ], "metadata": { "id": "szYkC6TjPd0U" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "CSV_HEADER = []\n", "for x in columns:\n", " CSV_HEADER.append(x)\n", "CSV_HEADER.append(\" Label\")\n", "\n", "# A list of the numerical feature names.\n", "NUMERIC_FEATURE_NAMES = columns\n", "# A dictionary of the categorical features and their vocabulary.\n", "CATEGORICAL_FEATURES_WITH_VOCABULARY = {\n", "}\n", "# A list of the columns to ignore from the dataset.\n", "IGNORE_COLUMN_NAMES = []\n", "# A list of the categorical feature names.\n", "CATEGORICAL_FEATURE_NAMES = list(CATEGORICAL_FEATURES_WITH_VOCABULARY.keys())\n", "# A list of all the input features.\n", "FEATURE_NAMES = NUMERIC_FEATURE_NAMES + CATEGORICAL_FEATURE_NAMES\n", "# A list of column default values for each feature.\n", "COLUMN_DEFAULTS = [\n", " [0.0] if feature_name in NUMERIC_FEATURE_NAMES + IGNORE_COLUMN_NAMES else [\"NA\"]\n", " for feature_name in CSV_HEADER\n", "]\n", "# The name of the target feature.\n", "TARGET_FEATURE_NAME = \" Label\"\n", "# A list of the labels of the target features.\n", "TARGET_LABELS = [\"BENIGN\", \"ANOMALY\"]\n", "\n", "from tensorflow.keras.layers import StringLookup\n", "\n", "target_label_lookup = StringLookup(\n", " vocabulary=TARGET_LABELS, mask_token=None, num_oov_indices=0\n", ")\n", "\n", "\n", "def get_dataset_from_csv(csv_file_path, shuffle=False, batch_size=128):\n", " dataset = tf.data.experimental.make_csv_dataset(\n", " csv_file_path,\n", " batch_size=batch_size,\n", " column_names=CSV_HEADER,\n", " column_defaults=COLUMN_DEFAULTS,\n", " label_name=TARGET_FEATURE_NAME,\n", " num_epochs=1,\n", " header=False,\n", " na_value=\"?\",\n", " shuffle=shuffle,\n", " ).map(lambda features, target: (features, target_label_lookup(target)))\n", " return dataset.cache()\n", "\n", "def create_model_inputs():\n", " inputs = {}\n", " for feature_name in FEATURE_NAMES:\n", " if feature_name in NUMERIC_FEATURE_NAMES:\n", " inputs[feature_name] = layers.Input(\n", " name=feature_name, shape=(), dtype=tf.float32\n", " )\n", " else:\n", " inputs[feature_name] = layers.Input(\n", " name=feature_name, shape=(), dtype=tf.string\n", " )\n", " return inputs\n", "\n", "def encode_inputs(inputs):\n", " encoded_features = []\n", " for feature_name in inputs:\n", " if feature_name in CATEGORICAL_FEATURE_NAMES:\n", " vocabulary = CATEGORICAL_FEATURES_WITH_VOCABULARY[feature_name]\n", " #print(vocabulary)\n", " # Create a lookup to convert a string values to an integer indices.\n", " # Since we are not using a mask token, nor expecting any out of vocabulary\n", " # (oov) token, we set mask_token to None and num_oov_indices to 0.\n", " lookup = StringLookup(\n", " vocabulary=vocabulary, mask_token=None, num_oov_indices=0\n", " )\n", " # Convert the string input values into integer indices.\n", " value_index = lookup(inputs[feature_name])\n", " embedding_dims = int(math.sqrt(lookup.vocabulary_size()))\n", " # Create an embedding layer with the specified dimensions.\n", " embedding = layers.Embedding(\n", " input_dim=lookup.vocabulary_size(), output_dim=embedding_dims\n", " )\n", " # Convert the index values to embedding representations.\n", " encoded_feature = embedding(value_index)\n", " else:\n", " # Use the numerical features as-is.\n", " encoded_feature = inputs[feature_name]\n", " if inputs[feature_name].shape[-1] is None:\n", " encoded_feature = tf.expand_dims(encoded_feature, -1)\n", "\n", " encoded_features.append(encoded_feature)\n", "\n", " encoded_features = layers.concatenate(encoded_features)\n", " return encoded_features\n", "\n", "class NeuralDecisionTree(keras.Model):\n", " def __init__(self, depth, num_features, used_features_rate, num_classes):\n", " super().__init__()\n", " self.depth = depth\n", " self.num_leaves = 2 ** depth\n", " self.num_classes = num_classes\n", "\n", " # Create a mask for the randomly selected features.\n", " num_used_features = int(num_features * used_features_rate)\n", " one_hot = np.eye(num_features)\n", " sampled_feature_indicies = np.random.choice(\n", " np.arange(num_features), num_used_features, replace=False\n", " )\n", " self.used_features_mask = one_hot[sampled_feature_indicies]\n", "\n", " # Initialize the weights of the classes in leaves.\n", " self.pi = tf.Variable(\n", " initial_value=tf.random_normal_initializer()(\n", " shape=[self.num_leaves, self.num_classes]\n", " ),\n", " dtype=\"float32\",\n", " trainable=True,\n", " )\n", "\n", " # Initialize the stochastic routing layer.\n", " self.decision_fn = layers.Dense(\n", " units=self.num_leaves, activation=\"sigmoid\", name=\"decision\"\n", " )\n", "\n", " def call(self, features):\n", " batch_size = tf.shape(features)[0]\n", "\n", " # Apply the feature mask to the input features.\n", " features = tf.matmul(\n", " features, self.used_features_mask, transpose_b=True\n", " ) # [batch_size, num_used_features]\n", " # Compute the routing probabilities.\n", " decisions = tf.expand_dims(\n", " self.decision_fn(features), axis=2\n", " ) # [batch_size, num_leaves, 1]\n", " # Concatenate the routing probabilities with their complements.\n", " decisions = layers.concatenate(\n", " [decisions, 1 - decisions], axis=2\n", " ) # [batch_size, num_leaves, 2]\n", "\n", " mu = tf.ones([batch_size, 1, 1])\n", "\n", " begin_idx = 1\n", " end_idx = 2\n", " # Traverse the tree in breadth-first order.\n", " for level in range(self.depth):\n", " mu = tf.reshape(mu, [batch_size, -1, 1]) # [batch_size, 2 ** level, 1]\n", " mu = tf.tile(mu, (1, 1, 2)) # [batch_size, 2 ** level, 2]\n", " level_decisions = decisions[\n", " :, begin_idx:end_idx, :\n", " ] # [batch_size, 2 ** level, 2]\n", " mu = mu * level_decisions # [batch_size, 2**level, 2]\n", " begin_idx = end_idx\n", " end_idx = begin_idx + 2 ** (level + 1)\n", "\n", " mu = tf.reshape(mu, [batch_size, self.num_leaves]) # [batch_size, num_leaves]\n", " probabilities = keras.activations.softmax(self.pi) # [num_leaves, num_classes]\n", " outputs = tf.matmul(mu, probabilities) # [batch_size, num_classes]\n", " return outputs\n", "\n", "class NeuralDecisionForest(keras.Model):\n", " def __init__(self, num_trees, depth, num_features, used_features_rate, num_classes):\n", " super().__init__()\n", " self.ensemble = []\n", " # Initialize the ensemble by adding NeuralDecisionTree instances.\n", " # Each tree will have its own randomly selected input features to use.\n", " for _ in range(num_trees):\n", " self.ensemble.append(\n", " NeuralDecisionTree(depth, num_features, used_features_rate, num_classes)\n", " )\n", "\n", " def call(self, inputs):\n", " # Initialize the outputs: a [batch_size, num_classes] matrix of zeros.\n", " batch_size = tf.shape(inputs)[0]\n", " outputs = tf.zeros([batch_size, num_classes])\n", "\n", " # Aggregate the outputs of trees in the ensemble.\n", " for tree in self.ensemble:\n", " outputs += tree(inputs)\n", " # Divide the outputs by the ensemble size to get the average.\n", " outputs /= len(self.ensemble)\n", " return outputs\n", "learning_rate = 0.01\n", "batch_size = 128\n", "num_epochs = 10\n", "\n", "\n", "def run_experiment(model):\n", "\n", " # model.compile(\n", " # optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n", " # loss=keras.losses.SparseCategoricalCrossentropy(),\n", " # metrics=[keras.metrics.SparseCategoricalAccuracy()],\n", " # )\n", " model.compile(\n", " optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n", " loss=keras.losses.SparseCategoricalCrossentropy(),\n", " metrics=[metrics.SparseCategoricalAccuracy()],\n", " )\n", " print(\"Start training the model...\")\n", " train_dataset = get_dataset_from_csv(\n", " train_data_file, shuffle=True, batch_size=batch_size\n", " )\n", "\n", " model.fit(train_dataset, epochs=num_epochs)\n", " print(\"Model training finished\")\n", "\n", " print(\"Evaluating the model on the test data...\")\n", " test_dataset = get_dataset_from_csv(test_data_file, batch_size=batch_size)\n", "\n", " _, accuracy = model.evaluate(test_dataset)\n", " print(f\"Test accuracy: {round(accuracy * 100, 2)}%\")\n", " return model" ], "metadata": { "id": "8txIkhqk5-fX", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "0e116a14-d48d-4309-c4d1-8a5925355182" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/numpy/core/numeric.py:2463: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", " return bool(asarray(a1 == a2).all())\n" ] } ] }, { "cell_type": "code", "source": [ "num_trees = 25\n", "depth = 5\n", "used_features_rate = 0.5\n", "num_classes = len(TARGET_LABELS)\n", "\n", "\n", "def create_forest_model():\n", " inputs = create_model_inputs()\n", " features = encode_inputs(inputs)\n", " features = layers.BatchNormalization()(features)\n", " num_features = features.shape[1]\n", "\n", " forest_model = NeuralDecisionForest(\n", " num_trees, depth, num_features, used_features_rate, num_classes\n", " )\n", "\n", " outputs = forest_model(features)\n", " model = keras.Model(inputs=inputs, outputs=outputs)\n", " return model\n", "\n", "\n", "forest_model = create_forest_model()\n", "\n", "finalModel = run_experiment(forest_model)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "9eed7729-1873-423a-87c3-6ad24d4d8610", "id": "cEIPaJMi5-fa" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Start training the model...\n", "Epoch 1/10\n", "14880/14880 [==============================] - 288s 18ms/step - loss: 0.1936 - sparse_categorical_accuracy: 0.9490\n", "Epoch 2/10\n", "14880/14880 [==============================] - 235s 16ms/step - loss: 0.1866 - sparse_categorical_accuracy: 0.9514\n", "Epoch 3/10\n", "14880/14880 [==============================] - 234s 16ms/step - loss: 0.1856 - sparse_categorical_accuracy: 0.9518\n", "Epoch 4/10\n", "14880/14880 [==============================] - 233s 16ms/step - loss: 0.1851 - sparse_categorical_accuracy: 0.9520\n", "Epoch 5/10\n", "14880/14880 [==============================] - 233s 16ms/step - loss: 0.1848 - sparse_categorical_accuracy: 0.9521\n", "Epoch 6/10\n", "14880/14880 [==============================] - 238s 16ms/step - loss: 0.1849 - sparse_categorical_accuracy: 0.9521\n", "Epoch 7/10\n", "14880/14880 [==============================] - 242s 16ms/step - loss: 0.1847 - sparse_categorical_accuracy: 0.9522\n", "Epoch 8/10\n", "14880/14880 [==============================] - 239s 16ms/step - loss: 0.1844 - sparse_categorical_accuracy: 0.9522\n", "Epoch 9/10\n", "14880/14880 [==============================] - 237s 16ms/step - loss: 0.1843 - sparse_categorical_accuracy: 0.9523\n", "Epoch 10/10\n", "14880/14880 [==============================] - 235s 16ms/step - loss: 0.1842 - sparse_categorical_accuracy: 0.9523\n", "Model training finished\n", "Evaluating the model on the test data...\n", "4960/4960 [==============================] - 45s 9ms/step - loss: 0.1749 - sparse_categorical_accuracy: 0.9573\n", "Test accuracy: 95.73%\n" ] } ] }, { "cell_type": "code", "source": [ "test_dataset = get_dataset_from_csv(test_data_file, batch_size=batch_size)\n", "colnames=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'target']\n", "data = pd.read_csv(\"test_data.csv\", names=colnames, header=None)\n", "data['target'].replace('BENIGN', 0,inplace=True)\n", "data['target'].replace('ANOMALY', 1,inplace=True)\n", "y_test = data['target'].values # as a numpy array\n", "from sklearn.metrics import confusion_matrix\n", "y_prediction = finalModel.predict(test_dataset)\n", "y_prediction = np.argmax (y_prediction, axis = 1)\n", "result = confusion_matrix(y_test, y_prediction , normalize='pred')\n", "print(result)\n", "TP = result[0][0]\n", "FP = result[0][1]\n", "TN = result[1][1]\n", "FN = result[1][0]\n", "ACC = (TP+TN)/(TP+TN+FP+FN)\n", "PR = TP/(TP+FP) #precision\n", "TPR = TP/(TP+FN) #Recall or True positive rate\n", "FPR = FP/(FP+TN)\n", "F1Score = 2*(PR*TPR)/(PR+TPR)\n", "print(\"ACC: \" + str(ACC))\n", "print(\"PR: \" + str(PR))\n", "print(\"TPR: \" + str(TPR))\n", "print(\"FPR: \" + str(FPR))\n", "print(\"F1Score: \" + str(F1Score))\n", "import matplotlib.pyplot as plt\n", "import numpy\n", "from sklearn import metrics\n", "\n", "\n", "cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = result, display_labels = [True, False])\n", "\n", "cm_display.plot()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 588 }, "id": "ocxti1_vYBlQ", "outputId": "b86f0f50-f4e2-42af-d940-814bac6bbbfd" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "4960/4960 [==============================] - 50s 10ms/step\n", "[[0.95495116 0.03088329]\n", " [0.04504884 0.96911671]]\n", "ACC: 0.9620339331438207\n", "PR: 0.9686729438493482\n", "TPR: 0.954951157412199\n", "FPR: 0.030883291124557774\n", "F1Score: 0.9617631098260437\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhAAAAGwCAYAAAD49Fz6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7S0lEQVR4nO3deXwU9f3H8ffm2oRcBAkJhMhhDEflDJUfKiI2AtoieFRFlEOhKkYQ5LKWW4kXiFgFRbkUCxZvQFpBQSK0SgS8INyEK1wBQoK5dub3B2V1zQaz2cmx5PV8PObxYGe/35nPtjH57OfznRmbaZqmAAAAPOBX1QEAAADfQwIBAAA8RgIBAAA8RgIBAAA8RgIBAAA8RgIBAAA8RgIBAAA8FlDVAfgCwzB06NAhhYeHy2azVXU4AAAPmaapM2fOqEGDBvLzq7jvzvn5+SosLPT6OEFBQQoODrYgoopDAlEGhw4dUnx8fFWHAQDw0v79+9WwYcMKOXZ+fr6aNApT1lGH18eKjY3Vnj17qnUSQQJRBuHh4ZKkHelxCg+j64OL013N2ld1CECFKVaR0rTC+fu8IhQWFirrqEP70hsrIrz8fytyzhhqlLRXhYWFJBC+7nzbIjzMz6sfCqA6C7AFVnUIQMX530MbKqMNHRZuU1h4+c9jyDda5SQQAABYyGEacnjxlCmHaVgXTAUigQAAwEKGTBkqfwbhzdzKRD0eAAB4jAoEAAAWMmTImyaEd7MrDwkEAAAWcpimHGb52xDezK1MtDAAAIDHqEAAAGChmrKIkgQCAAALGTLlqAEJBC0MAADgMSoQAABYiBYGAADwGFdhAAAAlIIKBAAAFjL+t3kz3xeQQAAAYCGHl1dheDO3MpFAAABgIYcpL5/GaV0sFYk1EAAAwGNUIAAAsBBrIAAAgMcM2eSQzav5voAWBgAA8BgVCAAALGSY5zZv5vsCEggAACzk8LKF4c3cykQLAwAAeIwKBAAAFqopFQgSCAAALGSYNhmmF1dheDG3MtHCAAAAHqMCAQCAhWhhAAAAjznkJ4cXBX6HhbFUJBIIAAAsZHq5BsJkDQQAALhYUYEAAMBCrIEAAAAec5h+cpherIHwkVtZ08IAAAAeowIBAICFDNlkePH93JBvlCBIIAAAsFBNWQNBCwMAAHiMCgQAABbyfhElLQwAAGqcc2sgvHiYFi0MAABwsaICAQCAhQwvn4XBVRgAANRArIEAAAAeM+RXI+4DwRoIAADgMSoQAABYyGHa5PDikdzezK1MJBAAAFjI4eUiSgctDAAAcLGiAgEAgIUM00+GF1dhGFyFAQBAzUMLAwAAoBRUIAAAsJAh766kMKwLpUKRQAAAYCHvbyTlG80B34gSAABUK1QgAACwkPfPwvCN7/YkEAAAWMiQTYa8WQPBnSgBAKhxakoFwjeiBAAA1QoVCAAALOT9jaR847s9CQQAABYyTJsMb+4D4SNP4/SNNAcAAFQrVCAAALCQ4WULw1duJEUCAQCAhbx/GqdvJBC+ESUAALigl19+WY0bN1ZwcLA6duyor7766oLjZ8yYoWbNmikkJETx8fEaPny48vPzy3w+KhAAAFjIIZscXtwMqjxzlyxZohEjRmj27Nnq2LGjZsyYoe7duysjI0P16tUrMf7tt9/W2LFjNXfuXF111VXavn27BgwYIJvNpunTp5fpnFQgAACw0PkWhjebp6ZPn67Bgwdr4MCBatmypWbPnq1atWpp7ty5bsevX79eV199te6++241btxY3bp1U58+fX6zavFLJBAAAFRDOTk5LltBQYHbcYWFhUpPT1dycrJzn5+fn5KTk7Vhwwa3c6666iqlp6c7E4bdu3drxYoVuummm8ocHy0MAAAs5FD52hC/nC9J8fHxLvsnTJigiRMnlhh//PhxORwOxcTEuOyPiYnRtm3b3J7j7rvv1vHjx3XNNdfINE0VFxfrwQcf1F//+tcyx0kCAQCAhay6CmP//v2KiIhw7rfb7V7Hdt6aNWs0depUvfLKK+rYsaN27typYcOGacqUKRo3blyZjkECAQCAhax6mFZERIRLAlGaunXryt/fX0eOHHHZf+TIEcXGxrqdM27cON17770aNGiQJKlVq1bKy8vTX/7yFz3xxBPy8/vt+FkDAQCADwsKClJSUpJWr17t3GcYhlavXq1OnTq5nXP27NkSSYK/v78kyTTNMp2XCgQAABYyZZPhxRoIsxxzR4wYof79+6tDhw668sorNWPGDOXl5WngwIGSpH79+ikuLk6pqamSpJ49e2r69Olq166ds4Uxbtw49ezZ05lI/BYSCAAALGRVC8MTd955p44dO6bx48crKytLbdu21cqVK50LKzMzM10qDn/7299ks9n0t7/9TQcPHlR0dLR6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KkD7toe4bI4im04eC3RWFlq0z1Xv+4+oSYuzir20QF17n9AD4w/os/frKPc0CQQq1q1/OaZP3r5En74Tpcwddr00tqHyz/qp213n1iw8O/RSzZ1a3zl+2ze1lLYiUof3Bem7/4bqib6XyTSkO4a4XnlkGNK/l9RR8p+z5c+Pse+oIVdhVLsfyfT0dBmGoWnTpsnP71x+88477/zmvMTERCUmJmr48OHq06eP5s2bp1tuuUXt27fXjz/+qISEhIoOHf/zxcd1FFmnWPeOOHTuRlI/huhv916uU8fPlXjrNSiUafy8lmFrepieGdpU/Uce1IDRB3Vor12TB192wastfq2o0E9dep7UPY8eVqDdUNZ+u95/o57emxPz25MBL13X65ROnwjQwufq6+SxADX93U96atFuZwvj2MEg+f3i61phgU0Lnqmvw5lBCqll6Pd/yNHomfsUFulwOe6mL8J19GCQut/F4klUP9UugUhISFBRUZFeeukl9ezZU19++aVmz55d6viffvpJo0aN0u23364mTZrowIED+vrrr3XbbbdJksaMGaP/+7//U0pKigYNGqTQ0FD9+OOP+vTTT/X3v/+9sj5WjfPxgnqltixG39msxL51y6O0bnlUmY//63UPO7+vpeG9m3sWJGChXvcdV6/73LcsnnvX9d42rTvlac7abb95zKTrzuhfhzZbER4qES2MKtKmTRtNnz5dzzzzjK644gotWrRIqamppY739/fXiRMn1K9fPyUmJuqOO+7QjTfeqEmTJkmSWrdurbVr12r79u3q3Lmz2rVrp/Hjx6tBgwaV9ZEAADVJDbkKw2aaPtJsqUI5OTmKjIxU14DbFGBzfyUB4OtWZm787UGAj8o5YygqcbdOnz6tiIiI355QnnP8729Fpx6TFRBY/iu/iovytWHl+AqN1QrVroUBAIAvqyktDBIIAACsZJjnNm/m+wASCAAArFRDHudd7RZRAgCA6o8KBAAAFrLJyzUQlkVSsUggAACwkrd3k/SRiyNpYQAAAI9RgQAAwEJcxgkAADzHVRgAAADuUYEAAMBCNtOUzYuFkN7MrUwkEAAAWMn43+bNfB9ACwMAAHiMCgQAABaqKS0MKhAAAFjJtGArh5dfflmNGzdWcHCwOnbsqK+++qrUsXPmzFHnzp0VFRWlqKgoJScnX3C8OyQQAABY6fydKL3Z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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "## UNSW-NB15" ], "metadata": { "id": "tsKelzsw3X0i" } }, { "cell_type": "code", "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import pandas as pd\n", "from tensorflow import keras\n", "from tensorflow.keras import layers\n", "from keras import losses\n", "from keras import optimizers\n", "from keras import metrics\n", "import math\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ], "metadata": { "id": "0siibgmK3fuV" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "db864d4a-e708-4c09-e9c1-cfd142798120", "id": "AgJ1lpVg3X0j" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ] }, { "cell_type": "code", "source": [ "CSV_HEADER = [\n", "\"srcip\",\n", "\"sport\",\n", "\"dstip\",\n", "\"dsport\",\n", "\"proto\",\n", "\"state\",\n", "\"dur\",\n", "\"sbytes\",\n", "\"dbytes\",\n", "\"sttl\",\n", "\"dttl\",\n", "\"sloss\",\n", "\"dloss\",\n", "\"service\",\n", "\"Sload\",\n", "\"Dload\",\n", "\"Spkts\",\n", "\"Dpkts\",\n", "\"swin\",\n", "\"dwin\",\n", "\"stcpb\",\n", "\"dtcpb\",\n", "\"smeansz\",\n", "\"dmeansz\",\n", "\"trans_depth\",\n", "\"res_bdy_len\",\n", "\"Sjit\",\n", "\"Djit\",\n", "\"Stime\",\n", "\"Ltime\",\n", "\"Sintpkt\",\n", "\"Dintpkt\",\n", "\"tcprtt\",\n", "\"synack\",\n", "\"ackdat\",\n", "\"is_sm_ips_ports\",\n", "\"ct_state_ttl\",\n", "\"ct_flw_http_mthd\",\n", "\"is_ftp_login\",\n", "\"ct_ftp_cmd\",\n", "\"ct_srv_src\",\n", "\"ct_srv_dst\",\n", "\"ct_dst_ltm\",\n", "\"ct_src_ ltm\",\n", "\"ct_src_dport_ltm\",\n", "\"ct_dst_sport_ltm\",\n", "\"ct_dst_src_ltm\",\n", "\"attack_cat\",\n", "\"Label\"\n", "]" ], "metadata": { "id": "i0XhepFL3iCE" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "import pandas as pd\n", "import glob\n", "import os\n", "\n", "path = r'C:\\DRO\\DCL_rawdata_files' # use your path\n", "all_files = glob.glob(os.path.join(path , \"/content/drive/MyDrive/datasets/UNSW-NB15/*.csv\"))\n", "\n", "li = []\n", "\n", "for filename in all_files:\n", " df = pd.read_csv(filename, index_col=None, header=None, names=CSV_HEADER,low_memory=False)\n", " li.append(df)\n", "\n", "frame = pd.concat(li, axis=0, ignore_index=True)\n", "pd.set_option('display.max_columns', None)\n", "frame" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 461 }, "id": "pJZ6lcuN3X0k", "outputId": "cc9cd371-c37c-4e25-eaa7-240b9fbcf4db" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " srcip sport dstip dsport proto state dur \\\n", "0 59.166.0.9 7045 149.171.126.7 25 tcp FIN 0.201886 \n", "1 59.166.0.9 9685 149.171.126.2 80 tcp FIN 5.864748 \n", "2 59.166.0.2 1421 149.171.126.4 53 udp CON 0.001391 \n", "3 59.166.0.2 21553 149.171.126.2 25 tcp FIN 0.053948 \n", "4 59.166.0.8 45212 149.171.126.4 53 udp CON 0.000953 \n", "... ... ... ... ... ... ... ... \n", "2540042 59.166.0.8 12520 149.171.126.6 31010 tcp FIN 0.020383 \n", "2540043 59.166.0.0 18895 149.171.126.9 80 tcp FIN 1.402957 \n", "2540044 59.166.0.0 30103 149.171.126.5 5190 tcp FIN 0.007108 \n", "2540045 59.166.0.6 30388 149.171.126.5 111 udp CON 0.004435 \n", "2540046 59.166.0.0 6055 149.171.126.5 54145 tcp FIN 0.072974 \n", "\n", " sbytes dbytes sttl dttl sloss dloss service Sload \\\n", "0 37552 3380 31 29 18 8 smtp 1.459438e+06 \n", "1 19410 1087890 31 29 2 370 http 2.640454e+04 \n", "2 146 178 31 29 0 0 dns 4.198418e+05 \n", "3 37812 3380 31 29 19 8 smtp 5.503374e+06 \n", "4 146 178 31 29 0 0 dns 6.128017e+05 \n", "... ... ... ... ... ... ... ... ... \n", "2540042 320 1874 31 29 1 2 - 1.047932e+05 \n", "2540043 19410 1087890 31 29 2 370 http 1.103783e+05 \n", "2540044 2158 2464 31 29 6 6 - 2.328644e+06 \n", "2540045 568 304 31 29 0 0 - 7.684329e+05 \n", "2540046 4238 60788 31 29 7 30 - 4.582454e+05 \n", "\n", " Dload Spkts Dpkts swin dwin stcpb dtcpb \\\n", "0 1.307669e+05 52 42 255 255 1422136554 3572668484 \n", "1 1.481983e+06 364 746 255 255 389619597 394688654 \n", "2 5.118620e+05 2 2 0 0 0 0 \n", "3 4.893601e+05 54 42 255 255 4047523379 1903327524 \n", "4 7.471144e+05 2 2 0 0 0 0 \n", "... ... ... ... ... ... ... ... \n", "2540042 6.436736e+05 6 8 255 255 3208686479 3225486168 \n", "2540043 6.195098e+06 364 746 255 255 283296697 2429736754 \n", "2540044 2.658413e+06 24 24 255 255 703293844 2848960529 \n", "2540045 4.112740e+05 4 4 0 0 0 0 \n", "2540046 6.571546e+06 72 72 255 255 1003293149 1003585034 \n", "\n", " smeansz dmeansz trans_depth res_bdy_len Sjit Djit \\\n", "0 722 80 0 0 456.043567 15.530109 \n", "1 53 1458 1 0 1031.366423 690.219581 \n", "2 73 89 0 0 0.000000 0.000000 \n", "3 700 80 0 0 65.909688 3.155258 \n", "4 73 89 0 0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "2540042 53 234 0 0 212.810729 3.079195 \n", "2540043 53 1458 1 3924 203.808900 114.173588 \n", "2540044 90 103 0 0 17.627831 0.432619 \n", "2540045 142 76 0 0 1.638604 1.390643 \n", "2540046 59 844 0 0 62.045310 61.899776 \n", "\n", " Stime Ltime Sintpkt Dintpkt tcprtt synack \\\n", "0 1424250009 1424250009 3.943843 4.912488 0.000590 0.000473 \n", "1 1424250003 1424250009 16.155447 7.871279 0.000771 0.000638 \n", "2 1424250009 1424250009 0.009000 0.002000 0.000000 0.000000 \n", "3 1424250009 1424250009 1.011547 1.302561 0.000674 0.000540 \n", "4 1424250009 1424250009 0.009000 0.004000 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "2540042 1421955842 1421955842 4.007400 2.027429 0.006386 0.006189 \n", "2540043 1421955841 1421955842 3.864028 1.882421 0.000712 0.000550 \n", "2540044 1421955842 1421955842 0.274261 0.285478 0.000657 0.000532 \n", "2540045 1421955842 1421955842 1.165667 0.987333 0.000000 0.000000 \n", "2540046 1421955842 1421955842 1.022690 0.997042 0.002317 0.002173 \n", "\n", " ackdat is_sm_ips_ports ct_state_ttl ct_flw_http_mthd \\\n", "0 0.000117 0 0 NaN \n", "1 0.000133 0 0 1.0 \n", "2 0.000000 0 0 NaN \n", "3 0.000134 0 0 NaN \n", "4 0.000000 0 0 NaN \n", "... ... ... ... ... \n", "2540042 0.000197 0 0 0.0 \n", "2540043 0.000162 0 0 4.0 \n", "2540044 0.000125 0 0 0.0 \n", "2540045 0.000000 0 0 0.0 \n", "2540046 0.000144 0 0 0.0 \n", "\n", " is_ftp_login ct_ftp_cmd ct_srv_src ct_srv_dst ct_dst_ltm \\\n", "0 NaN 2 2 7 \n", "1 NaN 3 1 4 \n", "2 NaN 3 5 2 \n", "3 NaN 1 1 4 \n", "4 NaN 2 5 2 \n", "... ... ... ... ... ... \n", "2540042 0.0 0 8 20 7 \n", "2540043 0.0 0 1 1 2 \n", "2540044 0.0 0 13 13 6 \n", "2540045 0.0 0 10 13 6 \n", "2540046 0.0 0 13 13 6 \n", "\n", " ct_src_ ltm ct_src_dport_ltm ct_dst_sport_ltm ct_dst_src_ltm \\\n", "0 4 1 1 3 \n", "1 4 1 1 1 \n", "2 7 1 1 4 \n", "3 7 1 1 3 \n", "4 1 1 1 2 \n", "... ... ... ... ... \n", "2540042 5 1 1 4 \n", "2540043 7 2 2 2 \n", "2540044 7 2 1 2 \n", "2540045 5 1 1 3 \n", "2540046 7 1 1 2 \n", "\n", " attack_cat Label \n", "0 NaN 0 \n", "1 NaN 0 \n", "2 NaN 0 \n", "3 NaN 0 \n", "4 NaN 0 \n", "... ... ... \n", "2540042 NaN 0 \n", "2540043 NaN 0 \n", "2540044 NaN 0 \n", "2540045 NaN 0 \n", "2540046 NaN 0 \n", "\n", "[2540047 rows x 49 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
srcipsportdstipdsportprotostatedursbytesdbytessttldttlslossdlossserviceSloadDloadSpktsDpktsswindwinstcpbdtcpbsmeanszdmeansztrans_depthres_bdy_lenSjitDjitStimeLtimeSintpktDintpkttcprttsynackackdatis_sm_ips_portsct_state_ttlct_flw_http_mthdis_ftp_loginct_ftp_cmdct_srv_srcct_srv_dstct_dst_ltmct_src_ ltmct_src_dport_ltmct_dst_sport_ltmct_dst_src_ltmattack_catLabel
059.166.0.97045149.171.126.725tcpFIN0.2018863755233803129188smtp1.459438e+061.307669e+055242255255142213655435726684847228000456.04356715.530109142425000914242500093.9438434.9124880.0005900.0004730.00011700NaNNaN2274113NaN0
159.166.0.99685149.171.126.280tcpFIN5.86474819410108789031292370http2.640454e+041.481983e+06364746255255389619597394688654531458101031.366423690.2195811424250003142425000916.1554477.8712790.0007710.0006380.000133001.0NaN3144111NaN0
259.166.0.21421149.171.126.453udpCON0.001391146178312900dns4.198418e+055.118620e+052200007389000.0000000.000000142425000914242500090.0090000.0020000.0000000.0000000.00000000NaNNaN3527114NaN0
359.166.0.221553149.171.126.225tcpFIN0.0539483781233803129198smtp5.503374e+064.893601e+05544225525540475233791903327524700800065.9096883.155258142425000914242500091.0115471.3025610.0006740.0005400.00013400NaNNaN1147113NaN0
459.166.0.845212149.171.126.453udpCON0.000953146178312900dns6.128017e+057.471144e+052200007389000.0000000.000000142425000914242500090.0090000.0040000.0000000.0000000.00000000NaNNaN2521112NaN0
......................................................................................................................................................
254004259.166.0.812520149.171.126.631010tcpFIN0.0203833201874312912-1.047932e+056.436736e+0568255255320868647932254861685323400212.8107293.079195142195584214219558424.0074002.0274290.0063860.0061890.000197000.00.0082075114NaN0
254004359.166.0.018895149.171.126.980tcpFIN1.40295719410108789031292370http1.103783e+056.195098e+06364746255255283296697242973675453145813924203.808900114.173588142195584114219558423.8640281.8824210.0007120.0005500.000162004.00.001127222NaN0
254004459.166.0.030103149.171.126.55190tcpFIN0.00710821582464312966-2.328644e+062.658413e+0624242552557032938442848960529901030017.6278310.432619142195584214219558420.2742610.2854780.0006570.0005320.000125000.00.00131367212NaN0
254004559.166.0.630388149.171.126.5111udpCON0.004435568304312900-7.684329e+054.112740e+0544000014276001.6386041.390643142195584214219558421.1656670.9873330.0000000.0000000.000000000.00.00101365113NaN0
254004659.166.0.06055149.171.126.554145tcpFIN0.0729744238607883129730-4.582454e+056.571546e+06727225525510032931491003585034598440062.04531061.899776142195584214219558421.0226900.9970420.0023170.0021730.000144000.00.00131367112NaN0
\n", "

2540047 rows × 49 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "code", "source": [ "frame.srcip = frame.srcip.astype('category').cat.codes\n", "frame.dstip = frame.dstip.astype('category').cat.codes\n", "frame.proto = frame.proto.astype('category').cat.codes\n", "frame.state = frame.state.astype('category').cat.codes\n", "frame.service = frame.service.astype('category').cat.codes\n", "frame.ct_flw_http_mthd = frame.ct_flw_http_mthd.astype('category').cat.codes\n", "frame.is_ftp_login = frame.is_ftp_login.astype('category').cat.codes\n", "frame.ct_ftp_cmd = frame.ct_ftp_cmd.astype('category').cat.codes\n", "frame['Label'] = frame['Label'].astype(str)\n", "frame['Label'] = frame['Label'].str.replace(\"1\", \"anomaly\")\n", "frame['Label'] = frame['Label'].str.replace(\"0\", \"normal\")\n", "frame = frame.drop('attack_cat', axis=1)\n", "frame" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 461 }, "id": "CO6IvWfH3rxv", "outputId": "9a235628-04c3-485f-aa89-83fa59bb4d25" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " srcip sport dstip dsport proto state dur sbytes dbytes \\\n", "0 42 7045 25 25 114 5 0.201886 37552 3380 \n", "1 42 9685 20 80 114 5 5.864748 19410 1087890 \n", "2 35 1421 22 53 120 2 0.001391 146 178 \n", "3 35 21553 20 25 114 5 0.053948 37812 3380 \n", "4 41 45212 22 53 120 2 0.000953 146 178 \n", "... ... ... ... ... ... ... ... ... ... \n", "2540042 41 12520 24 31010 114 5 0.020383 320 1874 \n", "2540043 33 18895 27 80 114 5 1.402957 19410 1087890 \n", "2540044 33 30103 23 5190 114 5 0.007108 2158 2464 \n", "2540045 39 30388 23 111 120 2 0.004435 568 304 \n", "2540046 33 6055 23 54145 114 5 0.072974 4238 60788 \n", "\n", " sttl dttl sloss dloss service Sload Dload Spkts \\\n", "0 31 29 18 8 9 1.459438e+06 1.307669e+05 52 \n", "1 31 29 2 370 5 2.640454e+04 1.481983e+06 364 \n", "2 31 29 0 0 2 4.198418e+05 5.118620e+05 2 \n", "3 31 29 19 8 9 5.503374e+06 4.893601e+05 54 \n", "4 31 29 0 0 2 6.128017e+05 7.471144e+05 2 \n", "... ... ... ... ... ... ... ... ... \n", "2540042 31 29 1 2 0 1.047932e+05 6.436736e+05 6 \n", "2540043 31 29 2 370 5 1.103783e+05 6.195098e+06 364 \n", "2540044 31 29 6 6 0 2.328644e+06 2.658413e+06 24 \n", "2540045 31 29 0 0 0 7.684329e+05 4.112740e+05 4 \n", "2540046 31 29 7 30 0 4.582454e+05 6.571546e+06 72 \n", "\n", " Dpkts swin dwin stcpb dtcpb smeansz dmeansz \\\n", "0 42 255 255 1422136554 3572668484 722 80 \n", "1 746 255 255 389619597 394688654 53 1458 \n", "2 2 0 0 0 0 73 89 \n", "3 42 255 255 4047523379 1903327524 700 80 \n", "4 2 0 0 0 0 73 89 \n", "... ... ... ... ... ... ... ... \n", "2540042 8 255 255 3208686479 3225486168 53 234 \n", "2540043 746 255 255 283296697 2429736754 53 1458 \n", "2540044 24 255 255 703293844 2848960529 90 103 \n", "2540045 4 0 0 0 0 142 76 \n", "2540046 72 255 255 1003293149 1003585034 59 844 \n", "\n", " trans_depth res_bdy_len Sjit Djit Stime \\\n", "0 0 0 456.043567 15.530109 1424250009 \n", "1 1 0 1031.366423 690.219581 1424250003 \n", "2 0 0 0.000000 0.000000 1424250009 \n", "3 0 0 65.909688 3.155258 1424250009 \n", "4 0 0 0.000000 0.000000 1424250009 \n", "... ... ... ... ... ... \n", "2540042 0 0 212.810729 3.079195 1421955842 \n", "2540043 1 3924 203.808900 114.173588 1421955841 \n", "2540044 0 0 17.627831 0.432619 1421955842 \n", "2540045 0 0 1.638604 1.390643 1421955842 \n", "2540046 0 0 62.045310 61.899776 1421955842 \n", "\n", " Ltime Sintpkt Dintpkt tcprtt synack ackdat \\\n", "0 1424250009 3.943843 4.912488 0.000590 0.000473 0.000117 \n", "1 1424250009 16.155447 7.871279 0.000771 0.000638 0.000133 \n", "2 1424250009 0.009000 0.002000 0.000000 0.000000 0.000000 \n", "3 1424250009 1.011547 1.302561 0.000674 0.000540 0.000134 \n", "4 1424250009 0.009000 0.004000 0.000000 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "2540042 1421955842 4.007400 2.027429 0.006386 0.006189 0.000197 \n", "2540043 1421955842 3.864028 1.882421 0.000712 0.000550 0.000162 \n", "2540044 1421955842 0.274261 0.285478 0.000657 0.000532 0.000125 \n", "2540045 1421955842 1.165667 0.987333 0.000000 0.000000 0.000000 \n", "2540046 1421955842 1.022690 0.997042 0.002317 0.002173 0.000144 \n", "\n", " is_sm_ips_ports ct_state_ttl ct_flw_http_mthd is_ftp_login \\\n", "0 0 0 -1 -1 \n", "1 0 0 1 -1 \n", "2 0 0 -1 -1 \n", "3 0 0 -1 -1 \n", "4 0 0 -1 -1 \n", "... ... ... ... ... \n", "2540042 0 0 0 0 \n", "2540043 0 0 4 0 \n", "2540044 0 0 0 0 \n", "2540045 0 0 0 0 \n", "2540046 0 0 0 0 \n", "\n", " ct_ftp_cmd ct_srv_src ct_srv_dst ct_dst_ltm ct_src_ ltm \\\n", "0 8 2 2 7 4 \n", "1 8 3 1 4 4 \n", "2 8 3 5 2 7 \n", "3 8 1 1 4 7 \n", "4 8 2 5 2 1 \n", "... ... ... ... ... ... \n", "2540042 0 8 20 7 5 \n", "2540043 0 1 1 2 7 \n", "2540044 0 13 13 6 7 \n", "2540045 0 10 13 6 5 \n", "2540046 0 13 13 6 7 \n", "\n", " ct_src_dport_ltm ct_dst_sport_ltm ct_dst_src_ltm Label \n", "0 1 1 3 normal \n", "1 1 1 1 normal \n", "2 1 1 4 normal \n", "3 1 1 3 normal \n", "4 1 1 2 normal \n", "... ... ... ... ... \n", "2540042 1 1 4 normal \n", "2540043 2 2 2 normal \n", "2540044 2 1 2 normal \n", "2540045 1 1 3 normal \n", "2540046 1 1 2 normal \n", "\n", "[2540047 rows x 48 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
srcipsportdstipdsportprotostatedursbytesdbytessttldttlslossdlossserviceSloadDloadSpktsDpktsswindwinstcpbdtcpbsmeanszdmeansztrans_depthres_bdy_lenSjitDjitStimeLtimeSintpktDintpkttcprttsynackackdatis_sm_ips_portsct_state_ttlct_flw_http_mthdis_ftp_loginct_ftp_cmdct_srv_srcct_srv_dstct_dst_ltmct_src_ ltmct_src_dport_ltmct_dst_sport_ltmct_dst_src_ltmLabel
0427045252511450.201886375523380312918891.459438e+061.307669e+055242255255142213655435726684847228000456.04356715.530109142425000914242500093.9438434.9124880.0005900.0004730.00011700-1-182274113normal
1429685208011455.8647481941010878903129237052.640454e+041.481983e+06364746255255389619597394688654531458101031.366423690.2195811424250003142425000916.1554477.8712790.0007710.0006380.000133001-183144111normal
2351421225312020.00139114617831290024.198418e+055.118620e+052200007389000.0000000.000000142425000914242500090.0090000.0020000.0000000.0000000.00000000-1-183527114normal
33521553202511450.053948378123380312919895.503374e+064.893601e+05544225525540475233791903327524700800065.9096883.155258142425000914242500091.0115471.3025610.0006740.0005400.00013400-1-181147113normal
44145212225312020.00095314617831290026.128017e+057.471144e+052200007389000.0000000.000000142425000914242500090.0090000.0040000.0000000.0000000.00000000-1-182521112normal
...................................................................................................................................................
25400424112520243101011450.020383320187431291201.047932e+056.436736e+0568255255320868647932254861685323400212.8107293.079195142195584214219558424.0074002.0274290.0063860.0061890.0001970000082075114normal
25400433318895278011451.4029571941010878903129237051.103783e+056.195098e+06364746255255283296697242973675453145813924203.808900114.173588142195584114219558423.8640281.8824210.0007120.0005500.000162004001127222normal
2540044333010323519011450.0071082158246431296602.328644e+062.658413e+0624242552557032938442848960529901030017.6278310.432619142195584214219558420.2742610.2854780.0006570.0005320.00012500000131367212normal
254004539303882311112020.00443556830431290007.684329e+054.112740e+0544000014276001.6386041.390643142195584214219558421.1656670.9873330.0000000.0000000.00000000000101365113normal
2540046336055235414511450.072974423860788312973004.582454e+056.571546e+06727225525510032931491003585034598440062.04531061.899776142195584214219558421.0226900.9970420.0023170.0021730.00014400000131367112normal
\n", "

2540047 rows × 48 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 5 } ] }, { "cell_type": "code", "source": [ "column_headers = list(frame.columns.values)\n", "column_headers" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "76ffaf32-9bd4-432d-ba1e-0a85afcbe633", "id": "g9uSi28h3X0k" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['srcip',\n", " 'sport',\n", " 'dstip',\n", " 'dsport',\n", " 'proto',\n", " 'state',\n", " 'dur',\n", " 'sbytes',\n", " 'dbytes',\n", " 'sttl',\n", " 'dttl',\n", " 'sloss',\n", " 'dloss',\n", " 'service',\n", " 'Sload',\n", " 'Dload',\n", " 'Spkts',\n", " 'Dpkts',\n", " 'swin',\n", " 'dwin',\n", " 'stcpb',\n", " 'dtcpb',\n", " 'smeansz',\n", " 'dmeansz',\n", " 'trans_depth',\n", " 'res_bdy_len',\n", " 'Sjit',\n", " 'Djit',\n", " 'Stime',\n", " 'Ltime',\n", " 'Sintpkt',\n", " 'Dintpkt',\n", " 'tcprtt',\n", " 'synack',\n", " 'ackdat',\n", " 'is_sm_ips_ports',\n", " 'ct_state_ttl',\n", " 'ct_flw_http_mthd',\n", " 'is_ftp_login',\n", " 'ct_ftp_cmd',\n", " 'ct_srv_src',\n", " 'ct_srv_dst',\n", " 'ct_dst_ltm',\n", " 'ct_src_ ltm',\n", " 'ct_src_dport_ltm',\n", " 'ct_dst_sport_ltm',\n", " 'ct_dst_src_ltm',\n", " 'Label']" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "code", "source": [ "CSV_HEADER = column_headers\n", "df = frame\n", "def Remove_Outlier_Indices(df):\n", " Q1 = df.quantile(0.02)\n", " Q3 = df.quantile(0.98)\n", " IQR = Q3 - Q1\n", " #trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR)))\n", " trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)\n", " return trueList\n", "\n", "nonOutlierList = Remove_Outlier_Indices(df)\n", "new_data = df[nonOutlierList]\n", "\n", "df = new_data\n", "df = df.reset_index(drop=True)\n", "del new_data\n", "del nonOutlierList\n", "del li\n", "del frame\n", "import gc\n", "gc.collect()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "62ee996a-146b-44da-9ead-aa5b88c614b0", "id": "JfHf8zgY3X0l" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":4: FutureWarning: The default value of numeric_only in DataFrame.quantile is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.\n", " Q1 = df.quantile(0.02)\n", ":5: FutureWarning: The default value of numeric_only in DataFrame.quantile is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.\n", " Q3 = df.quantile(0.98)\n", ":8: FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated and will raise ValueError in a future version. Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`\n", " trueList = ~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "31" ] }, "metadata": {}, "execution_count": 7 } ] }, { "cell_type": "code", "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.model_selection import GridSearchCV, KFold\n", "X = df.drop([' Label'], axis=1)\n", "Y = df[\" Label\"].astype('category').cat.codes\n", "# parameters to be tested on GridSearchCV\n", "params = {\"alpha\":np.arange(0.00001, 10, 500)}\n", "\n", "# Number of Folds and adding the random state for replication\n", "kf=KFold(n_splits=5,shuffle=True, random_state=42)\n", "\n", "# Initializing the Model\n", "lasso = Lasso()\n", "\n", "# GridSearchCV with model, params and folds.\n", "lasso_cv=GridSearchCV(lasso, param_grid=params, cv=kf)\n", "lasso_cv.fit(X, Y)\n", "\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 346 }, "outputId": "538a8f92-3dd4-419e-f12f-79ff3ac17f37", "id": "cIYk9ZnY3X0m" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.965e+04, tolerance: 3.205e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.967e+04, tolerance: 3.207e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.962e+04, tolerance: 3.203e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.967e+04, tolerance: 3.203e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.959e+04, tolerance: 3.204e+01\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 7.455e+04, tolerance: 4.006e+01\n", " model = cd_fast.enet_coordinate_descent(\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "GridSearchCV(cv=KFold(n_splits=5, random_state=42, shuffle=True),\n", " estimator=Lasso(), param_grid={'alpha': array([1.e-05])})" ], "text/html": [ "
GridSearchCV(cv=KFold(n_splits=5, random_state=42, shuffle=True),\n",
              "             estimator=Lasso(), param_grid={'alpha': array([1.e-05])})
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "code", "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.model_selection import GridSearchCV, KFold\n", "X = df.drop(['Label'], axis=1)\n", "Y = df[\"Label\"].astype('category').cat.codes\n", "# calling the model with the best parameter\n", "lasso1 = Lasso(alpha=0.00001)\n", "lasso1.fit(X, Y)\n", "\n", "# Using np.abs() to make coefficients positive.\n", "lasso1_coef = np.abs(lasso1.coef_)\n", "# Subsetting the features which has more than 0.001 importance.\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "f1e5fa37-4c6a-4998-b267-aadcc9e5bea9", "id": "DkvVFpIP3X0m" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.146e+04, tolerance: 2.565e+01\n", " model = cd_fast.enet_coordinate_descent(\n" ] } ] }, { "cell_type": "code", "source": [ "names=df.drop(\"Label\", axis=1).columns" ], "metadata": { "id": "eG_vL8HU3X0m" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "feature_subset=np.array(names)[lasso1_coef>0.003]\n", "feature_subset" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "67af06bf-5e83-4649-ff31-fd3cefbedee2", "id": "nm5knwtG3X0m" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['proto', 'state', 'dur', 'sloss', 'service', 'trans_depth',\n", " 'synack', 'ct_state_ttl', 'ct_flw_http_mthd', 'is_ftp_login'],\n", " dtype=object)" ] }, "metadata": {}, "execution_count": 13 } ] }, { "cell_type": "code", "source": [ "m=np.array(lasso1_coef)[lasso1_coef>0.003]\n", "m" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "de6ce49c-4e5b-41e1-cce2-f2081d65e777", "id": "OSo02gS13X0n" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([3.58566963e-03, 3.25063436e-02, 9.61164559e-03, 5.40550719e-03,\n", " 4.20648889e-03, 3.34519850e-02, 3.83053988e+00, 3.90737301e-01,\n", " 3.78285090e-03, 1.22391985e-02])" ] }, "metadata": {}, "execution_count": 14 } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "# plotting the Column Names and Importance of Columns.\n", "plt.bar(names, lasso1_coef)\n", "plt.xticks(rotation=90)\n", "plt.grid()\n", "plt.title(\"Feature Selection Based on Lasso\")\n", "plt.xlabel(\"Features\")\n", "plt.ylabel(\"Importance\")\n", "plt.ylim(0, 0.15)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 577 }, "outputId": "8886487e-073a-46a3-ef27-33c0295a2fe5", "id": "sv01YtY-3X0n" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAIwCAYAAABuuNT3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADIjUlEQVR4nOzdd1xT1/8/8FfYIlMRUBw4qIpbcVtxglvcG9y1FRf9aLWtCm6tdVSt2uFsrdZZWy2KuMWNe9eFdeAGBUWE9+8PfrlfrgkQEEGb1/PxyENzc3LOyc0leedMjYgIiIiIiIyISW5XgIiIiCinMQAiIiIio8MAiIiIiIwOAyAiIiIyOgyAiIiIyOgwACIiIiKjwwCIiIiIjA4DICIiIjI6DICIiIjI6DAAIqJM6d27N9zd3XO83Bs3bkCj0WDZsmU5XvaHavfu3dBoNNi9e3duV4XovcMAiP5Tli1bBo1Go/c2evTod1JmREQEgoOD8fTp03eS/9s6c+YMOnbsiGLFisHKygpubm5o2rQp5s2bl9tV02vVqlWYM2dObldDpXfv3qpryczMDEWKFEHXrl1x/vz53K7eByM4OBgajQYPHz7M7aoQwSy3K0D0LkyYMAHFixdXHStfvvw7KSsiIgIhISHo3bs3HBwc3kkZWRUREYGGDRuiaNGiGDBgAFxdXXHr1i0cOnQIc+fOxZAhQ3K7ijpWrVqFs2fPYvjw4arjxYoVw4sXL2Bubp4r9bK0tMRPP/0EAHj9+jWuXr2KRYsWITQ0FOfPn0ehQoVypV5ElDUMgOg/qXnz5vDy8srtaryVuLg45M2b963ymDx5Muzt7XH06FGd4Oz+/ftvlXdO02g0sLKyyrXyzczM0LNnT9WxWrVqoVWrVtiyZQsGDBiQSzUjoqxgFxgZpb///hsff/wx8ubNC1tbW7Rs2RLnzp1TpTl9+jR69+6NEiVKwMrKCq6urujbty8ePXqkpAkODsbIkSMBAMWLF1e6SG7cuJHumBWNRoPg4GBVPhqNBufPn0f37t3h6OiIevXqKY//8ssvqFatGvLkyYN8+fKha9euuHXrVoav8+rVqyhXrpzelilnZ2edY1ktJzk5GXPmzEG5cuVgZWUFFxcXfPLJJ3jy5IlO2r///hve3t6wtbWFnZ0dqlevjlWrVgEAGjRogC1btuDmzZvKudSON0rrfO7cuVN5Lx0cHNC2bVtcuHBBlUZ7fv/55x+lpc7e3h59+vRBfHx8hq8vLa6urgBSgiOtx48f43//+x8qVKgAGxsb2NnZoXnz5jh16pTO8+fNm4dy5crB2toajo6O8PLyUs6F1u3bt9G3b1+4uLjA0tIS5cqVw5IlS3Ty+vfff+Hn54e8efPC2dkZI0aMQEJCgsGv5cSJE2jevDns7OxgY2ODxo0b49ChQ6o02i7mAwcOICgoCAUKFEDevHnRrl07PHjwwOCy0pOd5+/Zs2cYPnw43N3dYWlpCWdnZzRt2hSRkZGqfNauXatc905OTujZsydu376dLa+H3l9sAaL/pJiYGJ1xBk5OTgCAlStXIiAgAL6+vpg+fTri4+OxcOFC1KtXDydOnFC+cMPCwnDt2jX06dMHrq6uOHfuHH744QecO3cOhw4dgkajQfv27XH58mX89ttvmD17tlJGgQIFsvSF0KlTJ3h4eGDKlCkQEQAprThjx45F586d0b9/fzx48ADz5s1D/fr1ceLEiXS73YoVK4aDBw/i7NmzGXYBvk05n3zyCZYtW4Y+ffpg6NChuH79OubPn48TJ07gwIEDSrfVsmXL0LdvX5QrVw5jxoyBg4MDTpw4gdDQUHTv3h1fffUVYmJi8O+//2L27NkAABsbmzTL3bFjB5o3b44SJUogODgYL168wLx581C3bl1ERkbqDNbu3LkzihcvjqlTpyIyMhI//fQTnJ2dMX369HTPjZb2mkpKSsK1a9fwxRdfIH/+/GjVqpWS5tq1a9i0aRM6deqE4sWLIzo6GosXL4a3t7eqq+zHH3/E0KFD0bFjRwwbNgwvX77E6dOncfjwYXTv3h0AEB0djVq1akGj0SAwMBAFChTA33//jX79+iE2NlbpJnzx4gUaN26MqKgoDB06FIUKFcLKlSuxc+dOg17XuXPn8PHHH8POzg6jRo2Cubk5Fi9ejAYNGmDPnj2oWbOmKv2QIUPg6OiI8ePH48aNG5gzZw4CAwOxZs0ag8pLT3aev0GDBmHdunUIDAyEp6cnHj16hP379+PChQuoWrUqACjXbfXq1TF16lRER0dj7ty5OHDgQIbXPX3ghOg/ZOnSpQJA701E5NmzZ+Lg4CADBgxQPe/evXtib2+vOh4fH6+T/2+//SYAZO/evcqxb775RgDI9evXVWmvX78uAGTp0qU6+QCQ8ePHK/fHjx8vAKRbt26qdDdu3BBTU1OZPHmy6viZM2fEzMxM5/ibtm/fLqampmJqaiq1a9eWUaNGybZt2+TVq1dZLicgIECKFSum3N+3b58AkF9//VX13NDQUNXxp0+fiq2trdSsWVNevHihSpucnKz8v2XLlqr8tfSdz8qVK4uzs7M8evRIOXbq1CkxMTERf39/5Zj2/Pbt21eVZ7t27SR//vw6Zb0pICBA7zXl5uYmx48fV6V9+fKlJCUl6dTd0tJSJkyYoBxr27atlCtXLt1y+/XrJwULFpSHDx+qjnft2lXs7e2Va3TOnDkCQH7//XclTVxcnJQqVUoAyK5du9Itx8/PTywsLOTq1avKsTt37oitra3Ur19fOab9+2rSpInqPRsxYoSYmprK06dP0y1H+z48ePAgzTTZef7s7e1l8ODBaT7+6tUrcXZ2lvLly6uuyb/++ksAyLhx49LNnz5s7AKj/6QFCxYgLCxMdQNSWnWePn2Kbt264eHDh8rN1NQUNWvWxK5du5Q88uTJo/z/5cuXePjwIWrVqgUAOk3o2WXQoEGq+xs2bEBycjI6d+6sqq+rqys8PDxU9dWnadOmOHjwINq0aYNTp05hxowZ8PX1hZubGzZv3pwt5axduxb29vZo2rSp6rnVqlWDjY2N8tywsDA8e/YMo0eP1hnLo9FoMnuqcPfuXZw8eRK9e/dGvnz5lOMVK1ZE06ZNsXXrVp3nvHl+P/74Yzx69AixsbEZlmdlZaVcS9u2bcPixYthY2ODFi1a4PLly0o6S0tLmJikfLQmJSXh0aNHsLGxQenSpVXXjYODA/79918cPXpUb3kigvXr16N169YQEdW59fX1RUxMjJLf1q1bUbBgQXTs2FF5vrW1NQYOHJjh60pKSsL27dvh5+eHEiVKKMcLFiyI7t27Y//+/TrnZ+DAgar37OOPP0ZSUhJu3ryZYXkZya7zp01z+PBh3LlzR+/jx44dw/379/HZZ5+prsmWLVuiTJky2LJly1u/Hnp/sQuM/pNq1KihdxD0lStXAACNGjXS+zw7Ozvl/48fP0ZISAhWr16tM2A4JiYmG2v7f96cuXblyhWICDw8PPSmN2RGVPXq1bFhwwa8evUKp06dwsaNGzF79mx07NgRJ0+ehKen51uVc+XKFcTExOgdUwT832Drq1evAsi+2XjaL9vSpUvrPFa2bFls27ZNZyB50aJFVekcHR0BAE+ePFG99/qYmpqiSZMmqmMtWrSAh4cHxowZg/Xr1wNIGQ81d+5cfP/997h+/TqSkpKU9Pnz51f+/8UXX2DHjh2oUaMGSpUqBR8fH3Tv3h1169YFADx48ABPnz7FDz/8gB9++EFvnbTn9ubNmyhVqpROIKnv3LzpwYMHiI+PT/M8Jicn49atWyhXrpxyPL3z+Lay6/wBwIwZMxAQEIAiRYqgWrVqaNGiBfz9/ZVAL71rqEyZMti/f/9bvx56fzEAIqOSnJwMIGUckHYAa2qpB7N27twZERERGDlyJCpXrgwbGxskJyejWbNmSj7pSatVI/UH+ptStzpp66vRaPD333/D1NRUJ31642PeZGFhgerVq6N69er46KOP0KdPH6xduxbjx49/q3KSk5Ph7OyMX3/9Ve/jBQoUMLiO75q+1wZAGW+VWYULF0bp0qWxd+9e5diUKVMwduxY9O3bFxMnTkS+fPlgYmKC4cOHq66bsmXL4tKlS/jrr78QGhqK9evX4/vvv8e4ceMQEhKipO3ZsycCAgL0ll+xYsUs1fttZfd5TC27zh+Q8jf88ccfY+PGjdi+fTu++eYbTJ8+HRs2bEDz5s3fuq70YWMAREalZMmSAFJmQL35az61J0+eIDw8HCEhIRg3bpxyXNuClFpagY72V/GbCyRmppugZMmSEBEUL14cH330kcHPy4i2dezu3btvXU7JkiWxY8cO1K1bVyeAezMdAJw9exalSpVKM52h3WHFihUDAFy6dEnnsYsXL8LJyemtlxEwxOvXr/H8+XPl/rp169CwYUP8/PPPqnRPnz5VBslr5c2bF126dEGXLl3w6tUrtG/fHpMnT8aYMWNQoEAB2NraIikpKd1rFUg5F2fPnoWIqM6fvnPzpgIFCsDa2jrN82hiYoIiRYpkmE92ya7zp+3SKliwID777DN89tlnuH//PqpWrYrJkyejefPmqmvozVbhS5cuKY/TfxPHAJFR8fX1hZ2dHaZMmYLExESdx7Uzt7S/cN/8RatvhWLtl+ybgY6dnR2cnJxUrQMA8P333xtc3/bt28PU1BQhISE6dRER1ZR8fXbt2qX3V7l2fIy26f9tyuncuTOSkpIwceJEncdev36tnBcfHx/Y2tpi6tSpePnypU4ZWnnz5jWoi7FgwYKoXLkyli9frjr3Z8+exfbt29GiRYsM83hbly9fxqVLl1CpUiXlmKmpqc45XLt2rc606jfPqYWFBTw9PSEiSExMhKmpKTp06ID169fj7NmzOmWnnmXYokUL3LlzB+vWrVOOxcfHp9l1lpqpqSl8fHzwxx9/4MaNG8rx6OhorFq1CvXq1cuwezA7Zdf5S0pK0rmOnJ2dUahQIWV5AC8vLzg7O2PRokWqJQP+/vtvXLhwAS1btszOl0bvGbYAkVGxs7PDwoUL0atXL1StWhVdu3ZFgQIFEBUVhS1btqBu3bqYP38+7OzsUL9+fcyYMQOJiYlwc3PD9u3bcf36dZ08q1WrBgD46quv0LVrV5ibm6N169bImzcv+vfvj2nTpqF///7w8vLC3r17VQNmM1KyZElMmjQJY8aMwY0bN+Dn5wdbW1tcv34dGzduxMCBA/G///0vzecPGTIE8fHxaNeuHcqUKYNXr14hIiICa9asgbu7O/r06fPW5Xh7e+OTTz7B1KlTcfLkSfj4+MDc3BxXrlzB2rVrMXfuXHTs2BF2dnaYPXs2+vfvj+rVqyvrHZ06dQrx8fFYvny5cj7XrFmDoKAgVK9eHTY2NmjdurXesr/55hs0b94ctWvXRr9+/ZRp8Pb29qp1lrLD69ev8csvvwBI6fa7ceMGFi1ahOTkZIwfP15J16pVK0yYMAF9+vRBnTp1cObMGfz666+qAcZASkDo6uqKunXrwsXFBRcuXMD8+fPRsmVL2NraAgCmTZuGXbt2oWbNmhgwYAA8PT3x+PFjREZGYseOHXj8+DEAYMCAAZg/fz78/f1x/PhxFCxYECtXroS1tbVBr23SpEkICwtDvXr18Nlnn8HMzAyLFy9GQkICZsyYkR2nT2XWrFk6dTMxMcGXX36Zbefv6dOnKFy4MDp27IhKlSrBxsYGO3bswNGjR/Htt98CSBnbNn36dPTp0wfe3t7o1q2bMg3e3d0dI0aMyPbXTu+RnJ10RvRuaafpHj16NN10u3btEl9fX7G3txcrKyspWbKk9O7dW44dO6ak+ffff6Vdu3bi4OAg9vb20qlTJ7lz547OFHYRkYkTJ4qbm5uYmJiopsTHx8dLv379xN7eXmxtbaVz585y//79NKfBpzU9eP369VKvXj3Jmzev5M2bV8qUKSODBw+WS5cupfs6//77b+nbt6+UKVNGbGxsxMLCQkqVKiVDhgyR6OjoLJXz5jR4rR9++EGqVasmefLkEVtbW6lQoYKMGjVK7ty5o0q3efNmqVOnjuTJk0fs7OykRo0a8ttvvymPP3/+XLp37y4ODg4CQCkrrWUFduzYIXXr1lXya926tZw/f16VJq3zq71e3lzC4E36psHb2dlJ48aNZceOHaq0L1++lM8//1wKFiwoefLkkbp168rBgwfF29tbvL29lXSLFy+W+vXrS/78+cXS0lJKliwpI0eOlJiYGFV+0dHRMnjwYClSpIiYm5uLq6urNG7cWH744QdVups3b0qbNm3E2tpanJycZNiwYcpSBBlNgxcRiYyMFF9fX7GxsRFra2tp2LChRERE6D1fb/597dq1y6BytO+DvpupqWm2nr+EhAQZOXKkVKpUSWxtbSVv3rxSqVIl+f7773XqtWbNGqlSpYpYWlpKvnz5pEePHvLvv/9meM7ow6YRyYZRa0REREQfEI4BIiIiIqPDAIiIiIiMDgMgIiIiMjoMgIiIiMjoMAAiIiIio8N1gPRITk7GnTt3YGtrm6VNGomIiCjniQiePXuGQoUKKZvqpoUBkB537tzJ0aXfiYiIKPvcunULhQsXTjcNAyA9tKuw3rp1650uAZ+YmIjt27crK+fmRDqWaXz1z40yP/T6G0uZOVn/8uO3AQAsTAUTqyVh7HFTvEpKaWE/G+Kb7WVqy8vJMj+EvN7nMrNDbGwsihQponyPp4cBkB7abi87O7t3HgBZW1vDzs4uwwsnu9KxTOOrf26U+aHX31jKzMn6m1imbH1haiqwtk6CqaUpTJL+77M2u8vUlpeTZX4Ieb3PZWYnQ4avcBA0ERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERkdBkBERERkdBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHRyPQBasGAB3N3dYWVlhZo1a+LIkSNppj137hw6dOgAd3d3aDQazJkzJ928p02bBo1Gg+HDh2dvpYmIiOiDlqsB0Jo1axAUFITx48cjMjISlSpVgq+vL+7fv683fXx8PEqUKIFp06bB1dU13byPHj2KxYsXo2LFiu+i6kRERPQBy9UAaNasWRgwYAD69OkD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y9SWl5Nlfgh5vc9lZgdtD44hci0AcnJygqmpKaKjo1XHo6Oj0xzg/K7ytLS01DumyNzc/J2+UZktJzvTsczczctYyvzQ628sZeZE/ROSNOr7yRrlWHp5ZrXMN8vLiTI/pLze5zLfRmbyzrVB0BYWFqhWrRrCw8OVY8nJyQgPD1d1X+V2nkRERPTfk6tdYEFBQQgICICXlxdq1KiBOXPmIC4uDn369AEA+Pv7w83NDVOnTgWQMsj5/Pnzyv9v376NkydPwsbGBqVKlTIoTyIiIqJcDYC6dOmCBw8eYNy4cbh37x4qV66M0NBQuLi4AACioqJgYvJ/jVR37txBlSpVlPszZ87EzJkz4e3tjd27dxuUJxEREVGuD4IODAxEYGCg3se0QY2Wu7s7DJm0ll6eRERERLm+FQYRERFRTmMAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERkdBkBERERkdBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERmdLAdAK1euRN26dVGoUCHcvHkTADBnzhz88ccf2VY5IiIionchSwHQwoULERQUhBYtWuDp06dISkoCADg4OGDOnDnZWT8iIiKibJelAGjevHn48ccf8dVXX8HU1FQ57uXlhTNnzmRb5YiIiIjehSwFQNevX0eVKlV0jltaWiIuLu6tK0VERET0LmUpACpevDhOnjypczw0NBRly5Z92zoRERERvVNmWXlSUFAQBg8ejJcvX0JEcOTIEfz222+YOnUqfvrpp+yuIxEREVG2ylIA1L9/f+TJkwdff/014uPj0b17dxQqVAhz585F165ds7uORERERNkqSwEQAPTo0QM9evRAfHw8nj9/Dmdn5+ysFxEREdE7k6UA6Pr163j9+jU8PDxgbW0Na2trAMCVK1dgbm4Od3f37KwjERERUbbK0iDo3r17IyIiQuf44cOH0bt377etExEREdE7laUA6MSJE6hbt67O8Vq1aumdHUZERET0PslSAKTRaPDs2TOd4zExMcqq0ERERETvqywFQPXr18fUqVNVwU5SUhKmTp2KevXqZVvliIiIiN6FLA2Cnj59OurXr4/SpUvj448/BgDs27cPsbGx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EyZMwIEDB1CtWjXkzZtX9fjQoUOzpXJERERE70KWAqCff/4ZDg4OOH78OI4fP656TKPRMAAiIiKi91qWAqDr169ndz2IiIiIckyWxgClJiIQkeyoCxEREVGOyHIAtGLFClSoUAF58uRBnjx5ULFiRaxcuTI760ZERET0TmSpC2zWrFkYO3YsAgMDUbduXQDA/v37MWjQIDx8+BAjRozI1koSERERZacsBUDz5s3DwoUL4e/vrxxr06YNypUrh+DgYAZARERE9F7LUhfY3bt3UadOHZ3jderUwd27d9+6UkRERETvUpYCoFKlSuH333/XOb5mzRp4eHi8daWIiIiI3qUsdYGFhISgS5cu2Lt3rzIG6MCBAwgPD9cbGBERERG9T7LUAtShQwccPnwYTk5O2LRpEzZt2gQnJyccOXIE7dq1y+46EhEREWWrLLUAAUC1atXwyy+/ZGddiIiIiHJElgOgpKQkbNy4ERcuXAAAeHp6om3btjAzy3KWRERERDkiS9HKuXPn0KZNG9y7dw+lS5cGAEyfPh0FChTAn3/+ifLly2drJYmIiIiyU5bGAPXv3x/lypXDv//+i8jISERGRuLWrVuoWLEiBg4cmN11JCIiIspWWWoBOnnyJI4dOwZHR0flmKOjIyZPnozq1atnW+WIiIiI3oUstQB99NFHiI6O1jl+//59lCpV6q0rRURERPQuZSkAmjp1KoYOHYp169bh33//xb///ot169Zh+PDhmD59OmJjY5UbERER0fsmS11grVq1AgB07twZGo0GACAiAIDWrVsr9zUaDZKSkrKjnkRERETZJksB0K5du7K7HkREREQ5JksBkLe3d3bXg4iIiCjHZHnVwpcvX+L06dO4f/8+kpOTVY+1adPmrStGRERE9K5kKQAKDQ2Fv78/Hj58qPMYx/0QERHR+y5Ls8CGDBmCTp064e7du0hOTlbdGPwQERHR+y5LAVB0dDSCgoLg4uKS3fUhIiIieueyFAB17NgRu3fvzuaqEBEREeWMLI0Bmj9/Pjp16oR9+/ahQoUKMDc3Vz0+dOjQbKkcERER0buQpQDot99+w/bt22FlZYXdu3criyECKYOgGQARERHR+yxLXWBfffUVQkJCEBMTgxs3buD69evK7dq1a5nKa8GCBXB3d4eVlRVq1qyJI0eOpJt+7dq1KFOmDKysrFChQgVs3bpVJ82FCxfQpk0b2NvbI2/evKhevTqioqIyVS8iIiL678pSAPTq1St06dIFJiZZerpizZo1CAoKwvjx4xEZGYlKlSrB19cX9+/f15s+IiIC3bp1Q79+/XDixAn4+fnBz88PZ8+eVdJcvXoV9erVQ5kyZbB7926cPn0aY8eOhZWV1VvVlYiIiP47stQFFhAQgDVr1uDLL798q8JnzZqFAQMGoE+fPgCARYsWYcuWLViyZAlGjx6tk37u3Llo1qwZRo4cCQCYOHEiwsLCMH/+fCxatAhASutUixYtMGPGDOV5JUuWTLceCQkJSEhIUO5rN3FNTExEYmLiW73G9GjzzqiM7EzHMnM3L2Mp80Ovv7GUmZP1tzRN2S/S0kT9b1rp37ZMbXk5WeaHkNf7XGZ2yEz+GtHuYpoJQ4cOxYoVK1CpUiVUrFhRZxD0rFmzMszj1atXsLa2xrp16+Dn56ccDwgIwNOnT/HHH3/oPKdo0aIICgrC8OHDlWPjx4/Hpk2bcOrUKSQnJ8Pe3h6jRo3C/v37ceLECRQvXhxjxoxRlfGm4OBghISE6BxftWoVrK2tM3wtRERElPvi4+PRvXt3xMTEwM7OLt20WWoBOnPmDKpUqQIAqu6nzHj48CGSkpJ01hJycXHBxYsX9T7n3r17etPfu3cPAHD//n08f/4c06ZNw6RJkzB9+nSEhoaiffv22LVrV5p7mI0ZMwZBQUHK/djYWBQpUgQ+Pj4ZnsC3kZiYiLCwMDRt2lQniHxX6Vim8dU/N8r80OtvLGXmZP3LB28DkNIKM9ErGWOPmSAhOWUCzdlg32wvU1teTpb5IeT1PpeZHbQ9OIb4T+0Gr92TrG3bthgxYgQAoHLlyoiIiMCiRYvSDIAsLS1haWmpc9zc3PydvlGZLSc707HM3M3LWMr80OtvLGXmRP0TkjTq+8ka5Vh6eWa1zDfLy4kyP6S83ucy30Zm8s5UANS+ffsM02g0Gqxfvz7DdE5OTjA1NUV0dLTqeHR0NFxdXfU+x9XVNd30Tk5OMDMzg6enpypN2bJlsX///gzrRERERMYhU9O47O3tM7wZ2mVkYWGBatWqITw8XDmWnJyM8PBw1K5dW+9zateurUoPAGFhYUp6CwsLVK9eHZcuXVKluXz5MooVK5aZl0pERET/YZlqAVq6dGm2Fh4UFISAgAB4eXmhRo0amDNnDuLi4pRZYf7+/nBzc8PUqVMBAMOGDYO3tze+/fZbtGzZEqtXr8axY8fwww8/KHmOHDkSXbp0Qf369dGwYUOEhobizz//5NYdREREpMjSGKDs0qVLFzx48ADjxo3DvXv3ULlyZYSGhioDnaOiolRrDdWpUwerVq3C119/jS+//BIeHh7YtGkTypcvr6Rp164dFi1ahKlTp2Lo0KEoXbo01q9fj3r16uX46yMiIqL3U64GQAAQGBiIwMBAvY/pa7Xp1KkTOnXqlG6effv2Rd++fbOjekRERPQf9HZLORMRERF9gBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERkdBkBERERkdBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERkdBkBERERkdBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERkdBkBERERkdBgAERERkdF5LwKgBQsWwN3dHVZWVqhZsyaOHDmSbvq1a9eiTJkysLKyQoUKFbB169Y00w4aNAgajQZz5szJ5loTERHRhyrXA6A1a9YgKCgI48ePR2RkJCpVqgRfX1/cv39fb/qIiAh069YN/fr1w4kTJ+Dn5wc/Pz+cPXtWJ+3GjRtx6NAhFCpU6F2/DCIiIvqA5HoANGvWLAwYMAB9+vSBp6cnFi1aBGtrayxZskRv+rlz56JZs2YYOXIkypYti4kTJ6Jq1aqYP3++Kt3t27cxZMgQ/PrrrzA3N8+Jl0JEREQfCLPcLPzVq1c4fvw4xowZoxwzMTFBkyZNcPDgQb3POXjwIIKCglTHfH19sWnTJuV+cnIyevXqhZEjR6JcuXIZ1iMhIQEJCQnK/djYWABAYmIiEhMTM/OSMkWbd0ZlZGc6lpm7eRlLmR96/Y2lzJysv6WppPxrov43rfRvW6a2vJws80PI630uMztkJn+NiEjGyd6NO3fuwM3NDREREahdu7ZyfNSoUdizZw8OHz6s8xwLCwssX74c3bp1U459//33CAkJQXR0NABg6tSp2LVrF7Zt2waNRgN3d3cMHz4cw4cP11uP4OBghISE6BxftWoVrK2t3/JVEhERUU6Ij49H9+7dERMTAzs7u3TT5moL0Ltw/PhxzJ07F5GRkdBoNAY9Z8yYMapWpdjYWBQpUgQ+Pj4ZnsC3kZiYiLCwMDRt2jTdbrrsTMcyja/+uVHmh15/YykzJ+tfPngbgJRWmIleyRh7zAQJySmf0WeDfbO9TG15OVnmh5DX+1xmdtD24BgiVwMgJycnmJqaKi03WtHR0XB1ddX7HFdX13TT79u3D/fv30fRokWVx5OSkvD5559jzpw5uHHjhk6elpaWsLS01Dlubm6eI+OHDC0nO9OxzNzNy1jK/NDrbyxl5kT9E5LUP0gTkjXKsfTyzGqZb5aXE2V+SHm9z2W+jczknauDoC0sLFCtWjWEh4crx5KTkxEeHq7qEkutdu3aqvQAEBYWpqTv1asXTp8+jZMnTyq3QoUKYeTIkdi2bZu+LImIiMjI5HoXWFBQEAICAuDl5YUaNWpgzpw5iIuLQ58+fQAA/v7+cHNzw9SpUwEAw4YNg7e3N7799lu0bNkSq1evxrFjx/DDDz8AAPLnz4/8+fOryjA3N4erqytKly6dsy+OiIiI3ku5HgB16dIFDx48wLhx43Dv3j1UrlwZoaGhcHFxAQBERUXBxOT/Gqrq1KmDVatW4euvv8aXX34JDw8PbNq0CeXLl8+tl0BEREQfmFwPgAAgMDAQgYGBeh/bvXu3zrFOnTqhU6dOBuevb9wPERERGa9cXwiRiIiIKKcxACIiIiKjwwCIiIiIjA4DICIiIjI6DICIiIjI6DAAIiIiIqPDAIiIiIiMDgMgIiIiMjoMgIiIiMjovBcrQRMRvQ/cR29R/m9pKphRAygfvE3ZQfzGtJa5VTUiymZsASIiIiKjwxYgyrT0fiXzFzIREX0I2AJERERERocBEBERERkdBkBERERkdBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBERERERocBEBERERkdBkBERERkdBgAERERkdFhAERERERGhwEQERERGR0GQERERGR0GAARERGR0WEAREREREaHARAREREZHQZAREREZHQYABEREZHRYQBE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Zj1evnwJMzMz1biCU6dOoWfPnoiKikJQUBDGjx8PIGVswaNHj7Bq1SrVtWZtba28L1qPHz9Gu3btsGvXLuTLlw/lypVTpTl06JDq+tuxY4fev4HXr1/rzHrRRztzJSQkBCNHjlTGu2mNHz8ee/fuxa5du9LNx8TERHUdiIjOeAbtsdSzbnbu3KmMEalQoYLyWrdu3YqmTZsif/78Gc40yszson///Re+vr4QEVy5cgVeXl64cuUKnJycsHfvXuWcdenSBfb29vjhhx9ga2uL06dPo0CBAmjbti2KFi2KpUuXws3NDfv379cZg7J+/Xr4+/sjLi4OAHD27FmUL19eb302bdoEPz8/mJiY4N69ezrvWXR0NNzc3PDzzz8b9Pq043G0r3Xz5s2IiorSGRulnTm0e/dutGvXDrGxsQgICMCSJUsAAF9++SW2bNmCfv36YcSIEZg4caLe8UQ3btzAiRMnABj+d/fLL7/gjz/+wPLly3WuN61ly5ahf//+aN68uTJW8PDhwwgNDcWPP/6I3r17Q0Rw69YtFChQAP/++y9OnjyJPHnyoEKFCqpZsx9//LFqnNNHH32E8uXL48qVKxgyZAjGjRsHAPj5558xaNAgWFlZpTnDy9HREbNnz85wPE5gYCB++uknNGzYUO/YHu04ykOHDqF79+64ceOGqqzUfyuG5pWbGADlsD59+hiU7t9//8XDhw8xceJEvYOI7ezssHz5coPyOnHiBI4fP46FCxem+YEGpHwAdunSBU2aNEHdunUBAAcOHEB4eDh+//13tGvXTkl74MABnDp1Cs+fP0fVqlWVacla2unfWomJiYiPj4eFhQWsra3x+PFj5TFDptUDKR9UV69eRf369ZEnTx7ljy31l5i+yzlPnjyYN28eTE1NISLo27cv5syZA3t7eyWNhYUF3N3dlYGLy5cvh5OTE1q2bAkAGDVqFH744Qd4enrit99+Uz6oMjvdPD4+Hs+fP0/zS15EEBYWhosXLwJImfbdpEkT1YeHIR/YJUqUwNGjR1UDZrXnumrVqqppr2lJHSxldK0FBASke23v379fWSogI+/igzGt98nGxga9e/fWCej08fb2Vv6vDcLf/FBPTk6GRqNBcnJyhgNOExISYG5ubnCg9Pr1a6xevRqnT59W/u569OiBPHnyKGkNCZTGjx+PX375BQcOHICrqysA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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "columns = []\n", "for k in feature_subset:\n", " columns.append(str(k))\n", "columns" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "c07cb763-7fb2-403b-9a72-3968332617f8", "id": "Hos6VC0I3X0n" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['proto',\n", " 'state',\n", " 'dur',\n", " 'sloss',\n", " 'service',\n", " 'trans_depth',\n", " 'synack',\n", " 'ct_state_ttl',\n", " 'ct_flw_http_mthd',\n", " 'is_ftp_login']" ] }, "metadata": {}, "execution_count": 16 } ] }, { "cell_type": "code", "source": [ "X = df.drop(['Label'], axis=1)\n", "Y = df[\"Label\"].astype('category').cat.codes\n", "principalDf = pd.DataFrame(data = X\n", " , columns = columns)\n", "finalDf = pd.concat([principalDf, df[\"Label\"]], axis = 1)\n", "finalDf" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 424 }, "outputId": "d90a896b-2d5b-4834-b156-97ee35493074", "id": "rLz6kZRM3X0n" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " proto state dur sloss service trans_depth synack \\\n", "0 114 5 0.201886 18 9 0 0.000473 \n", "1 114 5 5.864748 2 5 1 0.000638 \n", "2 120 2 0.001391 0 2 0 0.000000 \n", "3 114 5 0.053948 19 9 0 0.000540 \n", "4 120 2 0.000953 0 2 0 0.000000 \n", "... ... ... ... ... ... ... ... \n", "2438669 114 5 0.020383 1 0 0 0.006189 \n", "2438670 114 5 1.402957 2 5 1 0.000550 \n", "2438671 114 5 0.007108 6 0 0 0.000532 \n", "2438672 120 2 0.004435 0 0 0 0.000000 \n", "2438673 114 5 0.072974 7 0 0 0.002173 \n", "\n", " ct_state_ttl ct_flw_http_mthd is_ftp_login Label \n", "0 0 -1 -1 normal \n", "1 0 1 -1 normal \n", "2 0 -1 -1 normal \n", "3 0 -1 -1 normal \n", "4 0 -1 -1 normal \n", "... ... ... ... ... \n", "2438669 0 0 0 normal \n", "2438670 0 4 0 normal \n", "2438671 0 0 0 normal \n", "2438672 0 0 0 normal \n", "2438673 0 0 0 normal \n", "\n", "[2438674 rows x 11 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
protostatedurslossservicetrans_depthsynackct_state_ttlct_flw_http_mthdis_ftp_loginLabel
011450.20188618900.0004730-1-1normal
111455.8647482510.00063801-1normal
212020.0013910200.0000000-1-1normal
311450.05394819900.0005400-1-1normal
412020.0009530200.0000000-1-1normal
....................................
243866911450.0203831000.006189000normal
243867011451.4029572510.000550040normal
243867111450.0071086000.000532000normal
243867212020.0044350000.000000000normal
243867311450.0729747000.002173000normal
\n", "

2438674 rows × 11 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 17 } ] }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "train_data, test_data = train_test_split(finalDf, test_size=0.25)\n", "train_data_file = \"train_data.csv\"\n", "test_data_file = \"test_data.csv\"\n", "\n", "train_data.to_csv(train_data_file, index=False, header=False)\n", "test_data.to_csv(test_data_file, index=False, header=False)" ], "metadata": { "id": "u0wGu11w3X0o" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "del finalDf\n", "del principalDf\n", "del train_data\n", "del test_data" ], "metadata": { "id": "gskeDt0-3X0o" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "CSV_HEADER = []\n", "for x in columns:\n", " CSV_HEADER.append(x)\n", "CSV_HEADER.append(\"Label\")\n", "\n", "# A list of the numerical feature names.\n", "NUMERIC_FEATURE_NAMES = columns\n", "# A dictionary of the categorical features and their vocabulary.\n", "CATEGORICAL_FEATURES_WITH_VOCABULARY = {\n", "}\n", "# A list of the columns to ignore from the dataset.\n", "IGNORE_COLUMN_NAMES = []\n", "# A list of the categorical feature names.\n", "CATEGORICAL_FEATURE_NAMES = list(CATEGORICAL_FEATURES_WITH_VOCABULARY.keys())\n", "# A list of all the input features.\n", "FEATURE_NAMES = NUMERIC_FEATURE_NAMES + CATEGORICAL_FEATURE_NAMES\n", "# A list of column default values for each feature.\n", "COLUMN_DEFAULTS = [\n", " [0.0] if feature_name in NUMERIC_FEATURE_NAMES + IGNORE_COLUMN_NAMES else [\"NA\"]\n", " for feature_name in CSV_HEADER\n", "]\n", "# The name of the target feature.\n", "TARGET_FEATURE_NAME = \"Label\"\n", "# A list of the labels of the target features.\n", "TARGET_LABELS = [\"normal\", \"anomaly\"]\n", "\n", "from tensorflow.keras.layers import StringLookup\n", "\n", "target_label_lookup = StringLookup(\n", " vocabulary=TARGET_LABELS, mask_token=None, num_oov_indices=0\n", ")\n", "\n", "\n", "def get_dataset_from_csv(csv_file_path, shuffle=False, batch_size=128):\n", " dataset = tf.data.experimental.make_csv_dataset(\n", " csv_file_path,\n", " batch_size=batch_size,\n", " column_names=CSV_HEADER,\n", " column_defaults=COLUMN_DEFAULTS,\n", " label_name=TARGET_FEATURE_NAME,\n", " num_epochs=1,\n", " header=False,\n", " na_value=\"?\",\n", " shuffle=shuffle,\n", " ).map(lambda features, target: (features, target_label_lookup(target)))\n", " return dataset.cache()\n", "\n", "def create_model_inputs():\n", " inputs = {}\n", " for feature_name in FEATURE_NAMES:\n", " if feature_name in NUMERIC_FEATURE_NAMES:\n", " inputs[feature_name] = layers.Input(\n", " name=feature_name, shape=(), dtype=tf.float32\n", " )\n", " else:\n", " inputs[feature_name] = layers.Input(\n", " name=feature_name, shape=(), dtype=tf.string\n", " )\n", " return inputs\n", "\n", "def encode_inputs(inputs):\n", " encoded_features = []\n", " for feature_name in inputs:\n", " if feature_name in CATEGORICAL_FEATURE_NAMES:\n", " vocabulary = CATEGORICAL_FEATURES_WITH_VOCABULARY[feature_name]\n", " #print(vocabulary)\n", " # Create a lookup to convert a string values to an integer indices.\n", " # Since we are not using a mask token, nor expecting any out of vocabulary\n", " # (oov) token, we set mask_token to None and num_oov_indices to 0.\n", " lookup = StringLookup(\n", " vocabulary=vocabulary, mask_token=None, num_oov_indices=0\n", " )\n", " # Convert the string input values into integer indices.\n", " value_index = lookup(inputs[feature_name])\n", " embedding_dims = int(math.sqrt(lookup.vocabulary_size()))\n", " # Create an embedding layer with the specified dimensions.\n", " embedding = layers.Embedding(\n", " input_dim=lookup.vocabulary_size(), output_dim=embedding_dims\n", " )\n", " # Convert the index values to embedding representations.\n", " encoded_feature = embedding(value_index)\n", " else:\n", " # Use the numerical features as-is.\n", " encoded_feature = inputs[feature_name]\n", " if inputs[feature_name].shape[-1] is None:\n", " encoded_feature = tf.expand_dims(encoded_feature, -1)\n", "\n", " encoded_features.append(encoded_feature)\n", "\n", " encoded_features = layers.concatenate(encoded_features)\n", " return encoded_features\n", "\n", "class NeuralDecisionTree(keras.Model):\n", " def __init__(self, depth, num_features, used_features_rate, num_classes):\n", " super().__init__()\n", " self.depth = depth\n", " self.num_leaves = 2 ** depth\n", " self.num_classes = num_classes\n", "\n", " # Create a mask for the randomly selected features.\n", " num_used_features = int(num_features * used_features_rate)\n", " one_hot = np.eye(num_features)\n", " sampled_feature_indicies = np.random.choice(\n", " np.arange(num_features), num_used_features, replace=False\n", " )\n", " self.used_features_mask = one_hot[sampled_feature_indicies]\n", "\n", " # Initialize the weights of the classes in leaves.\n", " self.pi = tf.Variable(\n", " initial_value=tf.random_normal_initializer()(\n", " shape=[self.num_leaves, self.num_classes]\n", " ),\n", " dtype=\"float32\",\n", " trainable=True,\n", " )\n", "\n", " # Initialize the stochastic routing layer.\n", " self.decision_fn = layers.Dense(\n", " units=self.num_leaves, activation=\"sigmoid\", name=\"decision\"\n", " )\n", "\n", " def call(self, features):\n", " batch_size = tf.shape(features)[0]\n", "\n", " # Apply the feature mask to the input features.\n", " features = tf.matmul(\n", " features, self.used_features_mask, transpose_b=True\n", " ) # [batch_size, num_used_features]\n", " # Compute the routing probabilities.\n", " decisions = tf.expand_dims(\n", " self.decision_fn(features), axis=2\n", " ) # [batch_size, num_leaves, 1]\n", " # Concatenate the routing probabilities with their complements.\n", " decisions = layers.concatenate(\n", " [decisions, 1 - decisions], axis=2\n", " ) # [batch_size, num_leaves, 2]\n", "\n", " mu = tf.ones([batch_size, 1, 1])\n", "\n", " begin_idx = 1\n", " end_idx = 2\n", " # Traverse the tree in breadth-first order.\n", " for level in range(self.depth):\n", " mu = tf.reshape(mu, [batch_size, -1, 1]) # [batch_size, 2 ** level, 1]\n", " mu = tf.tile(mu, (1, 1, 2)) # [batch_size, 2 ** level, 2]\n", " level_decisions = decisions[\n", " :, begin_idx:end_idx, :\n", " ] # [batch_size, 2 ** level, 2]\n", " mu = mu * level_decisions # [batch_size, 2**level, 2]\n", " begin_idx = end_idx\n", " end_idx = begin_idx + 2 ** (level + 1)\n", "\n", " mu = tf.reshape(mu, [batch_size, self.num_leaves]) # [batch_size, num_leaves]\n", " probabilities = keras.activations.softmax(self.pi) # [num_leaves, num_classes]\n", " outputs = tf.matmul(mu, probabilities) # [batch_size, num_classes]\n", " return outputs\n", "\n", "class NeuralDecisionForest(keras.Model):\n", " def __init__(self, num_trees, depth, num_features, used_features_rate, num_classes):\n", " super().__init__()\n", " self.ensemble = []\n", " # Initialize the ensemble by adding NeuralDecisionTree instances.\n", " # Each tree will have its own randomly selected input features to use.\n", " for _ in range(num_trees):\n", " self.ensemble.append(\n", " NeuralDecisionTree(depth, num_features, used_features_rate, num_classes)\n", " )\n", "\n", " def call(self, inputs):\n", " # Initialize the outputs: a [batch_size, num_classes] matrix of zeros.\n", " batch_size = tf.shape(inputs)[0]\n", " outputs = tf.zeros([batch_size, num_classes])\n", "\n", " # Aggregate the outputs of trees in the ensemble.\n", " for tree in self.ensemble:\n", " outputs += tree(inputs)\n", " # Divide the outputs by the ensemble size to get the average.\n", " outputs /= len(self.ensemble)\n", " return outputs\n", "learning_rate = 0.01\n", "batch_size = 128\n", "num_epochs = 10\n", "\n", "\n", "def run_experiment(model):\n", "\n", " # model.compile(\n", " # optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n", " # loss=keras.losses.SparseCategoricalCrossentropy(),\n", " # metrics=[keras.metrics.SparseCategoricalAccuracy()],\n", " # )\n", " model.compile(\n", " optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n", " loss=keras.losses.SparseCategoricalCrossentropy(),\n", " metrics=[metrics.SparseCategoricalAccuracy()],\n", " )\n", " print(\"Start training the model...\")\n", " train_dataset = get_dataset_from_csv(\n", " train_data_file, shuffle=True, batch_size=batch_size\n", " )\n", "\n", " model.fit(train_dataset, epochs=num_epochs)\n", " print(\"Model training finished\")\n", "\n", " print(\"Evaluating the model on the test data...\")\n", " test_dataset = get_dataset_from_csv(test_data_file, batch_size=batch_size)\n", "\n", " _, accuracy = model.evaluate(test_dataset)\n", " print(f\"Test accuracy: {round(accuracy * 100, 2)}%\")\n", " return model" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "c2f09d8c-a13d-4bed-b751-02913e8c56cd", "id": "kvpabeu43X0o" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/numpy/core/numeric.py:2463: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", " return bool(asarray(a1 == a2).all())\n" ] } ] }, { "cell_type": "code", "source": [ "num_trees = 25\n", "depth = 5\n", "used_features_rate = 0.5\n", "num_classes = len(TARGET_LABELS)\n", "\n", "\n", "def create_forest_model():\n", " inputs = create_model_inputs()\n", " features = encode_inputs(inputs)\n", " features = layers.BatchNormalization()(features)\n", " num_features = features.shape[1]\n", "\n", " forest_model = NeuralDecisionForest(\n", " num_trees, depth, num_features, used_features_rate, num_classes\n", " )\n", "\n", " outputs = forest_model(features)\n", " model = keras.Model(inputs=inputs, outputs=outputs)\n", " return model\n", "\n", "\n", "forest_model = create_forest_model()\n", "\n", "finalModel = run_experiment(forest_model)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "56d0e878-b296-4b96-c931-f1c6c4cbaa42", "id": "BTvfogDW3X0p" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Start training the model...\n", "Epoch 1/10\n", "14290/14290 [==============================] - 368s 24ms/step - loss: 0.0615 - sparse_categorical_accuracy: 0.9885\n", "Epoch 2/10\n", "14290/14290 [==============================] - 304s 21ms/step - loss: 0.0574 - sparse_categorical_accuracy: 0.9892\n", "Epoch 3/10\n", "14290/14290 [==============================] - 305s 21ms/step - loss: 0.0571 - sparse_categorical_accuracy: 0.9892\n", "Epoch 4/10\n", "14290/14290 [==============================] - 303s 21ms/step - loss: 0.0570 - sparse_categorical_accuracy: 0.9893\n", "Epoch 5/10\n", "14290/14290 [==============================] - 302s 21ms/step - loss: 0.0570 - sparse_categorical_accuracy: 0.9892\n", "Epoch 6/10\n", "14290/14290 [==============================] - 302s 21ms/step - loss: 0.0570 - sparse_categorical_accuracy: 0.9893\n", "Epoch 7/10\n", "14290/14290 [==============================] - 304s 21ms/step - loss: 0.0570 - sparse_categorical_accuracy: 0.9893\n", "Epoch 8/10\n", "14290/14290 [==============================] - 305s 21ms/step - loss: 0.0569 - sparse_categorical_accuracy: 0.9894\n", "Epoch 9/10\n", "14290/14290 [==============================] - 308s 22ms/step - loss: 0.0569 - sparse_categorical_accuracy: 0.9894\n", "Epoch 10/10\n", "14290/14290 [==============================] - 306s 21ms/step - loss: 0.0569 - sparse_categorical_accuracy: 0.9894\n", "Model training finished\n", "Evaluating the model on the test data...\n", "4764/4764 [==============================] - 49s 10ms/step - loss: 0.0564 - sparse_categorical_accuracy: 0.9897\n", "Test accuracy: 98.97%\n" ] } ] }, { "cell_type": "code", "source": [ "test_dataset = get_dataset_from_csv(test_data_file, batch_size=batch_size)\n", "colnames=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'target']\n", "data = pd.read_csv(\"test_data.csv\", names=colnames, header=None)\n", "data['target'].replace('normal', 0,inplace=True)\n", "data['target'].replace('anomaly', 1,inplace=True)\n", "y_test = data['target'].values # as a numpy array\n", "from sklearn.metrics import confusion_matrix\n", "y_prediction = finalModel.predict(test_dataset)\n", "y_prediction = np.argmax (y_prediction, axis = 1)\n", "result = confusion_matrix(y_test, y_prediction , normalize='pred')\n", "print(result)\n", "TP = result[0][0]\n", "FP = result[0][1]\n", "TN = result[1][1]\n", "FN = result[1][0]\n", "ACC = (TP+TN)/(TP+TN+FP+FN)\n", "PR = TP/(TP+FP) #precision\n", "TPR = TP/(TP+FN) #Recall or True positive rate\n", "FPR = FP/(FP+TN)\n", "F1Score = 2*(PR*TPR)/(PR+TPR)\n", "print(\"ACC: \" + str(ACC))\n", "print(\"PR: \" + str(PR))\n", "print(\"TPR: \" + str(TPR))\n", "print(\"FPR: \" + str(FPR))\n", "print(\"F1Score: \" + str(F1Score))\n", "import matplotlib.pyplot as plt\n", "import numpy\n", "from sklearn import metrics\n", "\n", "\n", "cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = result, display_labels = [True, False])\n", "\n", "cm_display.plot()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "54ec1211-4d37-4baa-d57e-d74780e3d603", "id": "nPIZFS1A3X0p" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "4764/4764 [==============================] - 46s 9ms/step\n", "[[0.99779348 0.06634595]\n", " [0.00220652 0.93365405]]\n", "ACC: 0.965723761422259\n", "PR: 0.9376529508800495\n", "TPR: 0.997793476119445\n", "FPR: 0.066345953274927\n", "F1Score: 0.966788834039377\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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kSNHymaz6aabbtL58+f15ZdfKiwsTAMGDKjiT4Cfa3dDnv59bHtVhwFc0arlDbVqeUOn740fcnmbNXVdlFLXRV3xmGs/jNXaD2OvOObdhU307sImVxyDquctd6L0+ASiR48emjhxosaOHauCggI99NBD6t+/v7777jv7mGnTpikyMlIpKSnKzMxUrVq11LFjR/31r3+twsgBANcib2lhWIxfLiDAZXJzcxUeHq6ze5sqLNQzMkPAVbd36F7VIQAVpsRWpPUn5+v8+fMKCwurkHNc+l3R+z8PqWaw369PKENxfpE+7L6gQmM1g8dXIAAAqE7cfZ6Fp1zGSQIBAICJvKWFQT0eAAC4jAoEAAAm8pYKBAkEAAAm8pYEghYGAABwGRUIAABM5C0VCBIIAABMZMi9SzE95eZMJBAAAJjIWyoQrIEAAAAuowIBAICJvKUCQQIBAICJvCWBoIUBAABcRgUCAAATeUsFggQCAAATGYZFhhtJgDtzKxMtDAAA4DIqEAAAmMgmi1s3knJnbmUigQAAwETesgaCFgYAAHAZFQgAAEzkLYsoSSAAADCRt7QwSCAAADCRt1QgWAMBAABcRgUCAAATGW62MDylAkECAQCAiQxJhuHefE9ACwMAALiMCgQAACayySILd6IEAACu4CoMAACAMlCBAADARDbDIgs3kgIAAK4wDDevwvCQyzBoYQAAAJdRgQAAwETesoiSBAIAABORQAAAAJd5yyJK1kAAAACXUYEAAMBE3nIVBgkEAAAmKk0g3FkDYWIwFYgWBgAAcBkVCAAATMRVGAAAwGXG/zZ35nsCWhgAAMBlVCAAADARLQwAAOA6L+lh0MIAAMBM/6tAXO2mq6xAvPbaa2rcuLECAgLUuXNnff3111ccf+7cOT3++OOqX7++/P391bx5c33yySflPh8VCAAAPNzy5cs1atQozZ07V507d9asWbPUo0cPpaenq169epeNLyoq0q233qp69eppxYoVio2N1aFDh1SrVq1yn5MEAgAAE1XFnShnzpypIUOGaNCgQZKkuXPnavXq1VqwYIHGjx9/2fgFCxYoJydHmzdvVs2aNSVJjRs3dumctDAAADCRO+2Lny/AzM3NddgKCwudnq+oqEhpaWlKTk627/Px8VFycrK2bNnidM5HH32kpKQkPf7444qKilLr1q01Y8YMWa3Wcn9O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desmSYqIiJDFYtHAgQMlSTabTSkpKWrSpIkCAwPVrl07rVixwuE8n3zyiZo3b67AwEB169bNIc7yGjdunJo3b66goCA1bdpUEydOVHFx8WXj3njjDcXFxSkoKEj33Xefzp8/7/D+/Pnz1apVKwUEBKhly5Z6/fXXXY4FgDlIIACTBQYGqqioyP56/fr1Sk9P19q1a7Vq1SoVFxerR48eCg0N1aZNm/Tll18qJCREPXv2tM976aWXtGjRIi1YsECpqanKycnRBx98cMXz9u/fX//61780e/Zs7d69W2+88YZCQkIUFxen9957T5KUnp6u48eP65VXXpEkpaSkaMmSJZo7d65++OEHjRw5Uv369dPGjRsllSY6d999t3r16qXt27dr8ODBGj9+vMv/JqGhoVq0aJF27dqlV155RfPmzdPLL7/sMCYjI0PvvPOOPv74Y61Zs0bffvuthg4dan9/6dKlmjRpkqZPn67du3drxowZmjhxIo9wB6qKAeCqDRgwwOjdu7dhGIZhs9mMtWvXGv7+/sbo0aPt70dFRRmFhYX2OW+99ZbRokULw2az2fcVFhYagYGBxr///W/DMAyjfv36xvPPP29/v7i42GjQoIH9XIZhGF27djVGjBhhGIZhpKenG5KMtWvXOo3z888/NyQZZ8+ete8rKCgwgoKCjM2bNzuMffjhh40+ffoYhmEYEyZMMBISEhzeHzdu3GXH+iVJxgcffFDm+y+88IKRmJhofz158mTD19fXOHLkiH3fp59+avj4+BjHjx83DMMwrrvuOuPtt992OM60adOMpKQkwzAM48CBA4Yk49tvvy3zvADMwxoIwE2rVq1SSEiIiouLZbPZ9MADD2jKlCn299u0aeOw7mHHjh3KyMhQaGiow3EKCgq0f/9+nT9/XsePH1fnzp3t79WoUUOdOnW6rI1xyfbt2+Xr66uuXbuWO+6MjAxdvHhRt956q8P+oqIidejQQZK0e/duhzgkKSkpqdznuGT58uWaPXu29u/fr7y8PJWUlCgsLMxhTMOGDRUbG+twHpvNpvT0dIWGhmr//v16+OGHNWTIEPuYkpIShYeHuxwPAPeRQABu6tatm+bMmSM/Pz/FxMSoRg3H/62Cg4MdXufl5SkxMVFLly697FiRkZFXFUNgYKDLc/Ly8iRJq1evdvjFLZWu6zDLli1b1LdvX02dOlU9evRQeHi4li1bppdeesnlWOfNm3dZQuPr62tarADKjwQCcFNwcLDi4+PLPb5jx45avny56tWrd9lf4ZfUr19f//3vf3XzzTdLKv1LOy0tTR07dnQ6vk2bNrLZbNq4caOSk5Mve/9SBcRqtdr3JSQkyN/fX1lZWWVWLlq1amVfEHrJV1999esf8mc2b96sRo0a6amnnrLvO3To0GXjsrKydOzYMcXExNjP4+PjoxYtWigqKkoxMTHKzMxU3759XTo/gIrBIkqgkvXt21d169ZV7969tWnTJh04cEAbNmzQ8OHDdeTIEUnSiBEj9Oyzz2rlypXas2ePhg4desV7ODRu3FgDBgzQQw89pJUrV9qP+c4770iSGjVqJIvFolWrVunUqVPKy8tTaGioRo8erZEjR2rx4sXav3+/tm3bpldffdW+MPHRRx/Vvn37NGbMGKWnp+vtt9/WokWLXPq8zZo1U1ZWlpYtW6b9+/dr9uzZTheEBgQEaMCAAdqxY4c2bdqk4cOH67777lN0dLQkaerUqUpJSdHs2bO1d+9efffdd1q4cKFmzpzpUjwAzEECAVSyoKAgffHFF2rYsKHuvvtutWrVSg8//LAKCgrsFYknn3xSDz74oAYMGKCkpCSFhobqrrvuuuJx58yZo3vvvVdDhw5Vy5YtNWTIEOXn50uSYmNjNXXqVI0fP15RUVEaNmyYJGnatGmaOHGiUlJS1KpVK/Xs2VOrV69WkyZNJJWuS3jvvfe0cuVKtWvXTnPnztWMGTNc+rx33HGHRo4cqWHDhql9+/bavHmzJk6ceNm4+Ph43X333br99tvVvXt3tW3b1uEyzcGDB2v+/PlauHCh2rRpo65du2rRokX2WAFULotR1qosAACAMlCBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALiOBAAAALvv/E3sH1crScJ8AAAAASUVORK5CYII=\n" }, "metadata": {} } ] } ] }