Files
PacketBreeze/assets/Deepfence_ML_flowmeter.ipynb
Unic-X 3f83936e6e Init
2023-06-18 14:03:27 +05:30

2710 lines
195 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 1;\n",
" var nbb_unformatted_code = \"%load_ext nb_black\";\n",
" var nbb_formatted_code = \"%load_ext nb_black\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%load_ext nb_black"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"code_folding": []
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 2;\n",
" var nbb_unformatted_code = \"# Import libraries\\nfrom __future__ import division\\n\\nimport pandas as pd\\nimport matplotlib.pyplot as plt # plotting\\nimport numpy as np # linear algebra\\nimport math\\n\\nfrom sklearn.linear_model import LogisticRegression\\nfrom sklearn.svm import SVC\\n\\nfrom sklearn.pipeline import make_pipeline\\n\\nfrom sklearn.preprocessing import StandardScaler, MinMaxScaler\\n\\nfrom sklearn.model_selection import (\\n train_test_split,\\n GridSearchCV,\\n cross_val_score,\\n RepeatedStratifiedKFold,\\n StratifiedKFold,\\n)\\n\\nfrom sklearn.metrics import (\\n accuracy_score,\\n confusion_matrix,\\n roc_curve,\\n roc_auc_score,\\n auc,\\n precision_score,\\n recall_score,\\n precision_recall_curve,\\n plot_confusion_matrix,\\n f1_score,\\n)\\n\\n\\nfrom collections import Counter\\n\\nfrom sklearn.datasets import make_classification\\n\\nimport copy\\n\\nimport warnings\";\n",
" var nbb_formatted_code = \"# Import libraries\\nfrom __future__ import division\\n\\nimport pandas as pd\\nimport matplotlib.pyplot as plt # plotting\\nimport numpy as np # linear algebra\\nimport math\\n\\nfrom sklearn.linear_model import LogisticRegression\\nfrom sklearn.svm import SVC\\n\\nfrom sklearn.pipeline import make_pipeline\\n\\nfrom sklearn.preprocessing import StandardScaler, MinMaxScaler\\n\\nfrom sklearn.model_selection import (\\n train_test_split,\\n GridSearchCV,\\n cross_val_score,\\n RepeatedStratifiedKFold,\\n StratifiedKFold,\\n)\\n\\nfrom sklearn.metrics import (\\n accuracy_score,\\n confusion_matrix,\\n roc_curve,\\n roc_auc_score,\\n auc,\\n precision_score,\\n recall_score,\\n precision_recall_curve,\\n plot_confusion_matrix,\\n f1_score,\\n)\\n\\n\\nfrom collections import Counter\\n\\nfrom sklearn.datasets import make_classification\\n\\nimport copy\\n\\nimport warnings\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Import libraries\n",
"from __future__ import division\n",
"\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt # plotting\n",
"import numpy as np # linear algebra\n",
"import math\n",
"\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC\n",
"\n",
"from sklearn.pipeline import make_pipeline\n",
"\n",
"from sklearn.preprocessing import StandardScaler, MinMaxScaler\n",
"\n",
"from sklearn.model_selection import (\n",
" train_test_split,\n",
" GridSearchCV,\n",
" cross_val_score,\n",
" RepeatedStratifiedKFold,\n",
" StratifiedKFold,\n",
")\n",
"\n",
"from sklearn.metrics import (\n",
" accuracy_score,\n",
" confusion_matrix,\n",
" roc_curve,\n",
" roc_auc_score,\n",
" auc,\n",
" precision_score,\n",
" recall_score,\n",
" precision_recall_curve,\n",
" plot_confusion_matrix,\n",
" f1_score,\n",
")\n",
"\n",
"\n",
"from collections import Counter\n",
"\n",
"from sklearn.datasets import make_classification\n",
"\n",
"import copy\n",
"\n",
"import warnings"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### File path"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 3;\n",
" var nbb_unformatted_code = \"folder = \\\"../pkg/flowOutput/\\\"\\nfname_benign = \\\"2017-05-02_kali-normal22_flow_stats.csv\\\"\\nfname_malicious = \\\"webgoat_flow_stats.csv\\\"\";\n",
" var nbb_formatted_code = \"folder = \\\"../pkg/flowOutput/\\\"\\nfname_benign = \\\"2017-05-02_kali-normal22_flow_stats.csv\\\"\\nfname_malicious = \\\"webgoat_flow_stats.csv\\\"\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"folder = \"../pkg/flowOutput/\"\n",
"fname_benign = \"2017-05-02_kali-normal22_flow_stats.csv\"\n",
"fname_malicious = \"webgoat_flow_stats.csv\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Malicious: Webgoat"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"code_folding": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(248, 40)\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 4;\n",
" var nbb_unformatted_code = \"# Malicious flows\\npd_malicious = pd.read_csv(folder + fname_malicious)\\npd_malicious.drop(pd_malicious.tail(1).index, inplace=True)\\npd_malicious[\\\"Type\\\"] = \\\"Malicious\\\"\\n\\nprint(pd_malicious.shape)\";\n",
" var nbb_formatted_code = \"# Malicious flows\\npd_malicious = pd.read_csv(folder + fname_malicious)\\npd_malicious.drop(pd_malicious.tail(1).index, inplace=True)\\npd_malicious[\\\"Type\\\"] = \\\"Malicious\\\"\\n\\nprint(pd_malicious.shape)\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Malicious flows\n",
"pd_malicious = pd.read_csv(folder + fname_malicious)\n",
"pd_malicious.drop(pd_malicious.tail(1).index, inplace=True)\n",
"pd_malicious[\"Type\"] = \"Malicious\"\n",
"\n",
"print(pd_malicious.shape)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Benign"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"code_folding": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(28714, 40)\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 5;\n",
" var nbb_unformatted_code = \"# Benign flows\\npd_benign = pd.read_csv(folder + fname_benign)\\n# pd_benign.drop(pd_webgoat.tail(1).index, inplace=True)\\npd_benign[\\\"Type\\\"] = \\\"Benign\\\"\\n\\nprint(pd_benign.shape)\";\n",
" var nbb_formatted_code = \"# Benign flows\\npd_benign = pd.read_csv(folder + fname_benign)\\n# pd_benign.drop(pd_webgoat.tail(1).index, inplace=True)\\npd_benign[\\\"Type\\\"] = \\\"Benign\\\"\\n\\nprint(pd_benign.shape)\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Benign flows\n",
"pd_benign = pd.read_csv(folder + fname_benign)\n",
"# pd_benign.drop(pd_webgoat.tail(1).index, inplace=True)\n",
"pd_benign[\"Type\"] = \"Benign\"\n",
"\n",
"print(pd_benign.shape)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Combined dataframe - Benign + malicious"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"code_folding": []
},
"outputs": [
{
"data": {
"text/plain": [
"(28962, 40)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 6;\n",
" var nbb_unformatted_code = \"## Combine malicous and benign dataframes.\\npd_comb = pd.concat([pd_malicious, pd_benign])\\n\\n## Random shuffle of rows\\npd_comb = pd_comb.sample(frac=1)\\n\\npd_comb.shape\";\n",
" var nbb_formatted_code = \"## Combine malicous and benign dataframes.\\npd_comb = pd.concat([pd_malicious, pd_benign])\\n\\n## Random shuffle of rows\\npd_comb = pd_comb.sample(frac=1)\\n\\npd_comb.shape\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Combine malicous and benign dataframes.\n",
"pd_comb = pd.concat([pd_malicious, pd_benign])\n",
"\n",
"## Random shuffle of rows\n",
"pd_comb = pd_comb.sample(frac=1)\n",
"\n",
"pd_comb.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>fiveTuple</th>\n",
" <th>srcIP</th>\n",
" <th>dstIP</th>\n",
" <th>protocol</th>\n",
" <th>srcPort</th>\n",
" <th>dstPort</th>\n",
" <th>flowDuration</th>\n",
" <th>flowLength</th>\n",
" <th>fwdFlowLength</th>\n",
" <th>bwdFlowLength</th>\n",
" <th>...</th>\n",
" <th>bwdIATTotal</th>\n",
" <th>fwdIATMean</th>\n",
" <th>bwdIATMean</th>\n",
" <th>fwdIATStd</th>\n",
" <th>bwdIATStd</th>\n",
" <th>fwdIATMin</th>\n",
" <th>bwdIATMin</th>\n",
" <th>fwdIATMax</th>\n",
" <th>bwdIATMax</th>\n",
" <th>Type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>22705</th>\n",
" <td>216.137.61.254--192.168.1.191--TCP--443(https)...</td>\n",
" <td>192.168.1.191</td>\n",
" <td>216.137.61.254</td>\n",
" <td>TCP</td>\n",
" <td>39338</td>\n",
" <td>443(https)</td>\n",
" <td>5.189759e+09</td>\n",
" <td>15.0</td>\n",
" <td>0.0</td>\n",
" <td>15.0</td>\n",
" <td>...</td>\n",
" <td>5.189759e+09</td>\n",
" <td>0.0</td>\n",
" <td>3.706970e+08</td>\n",
" <td>0.0</td>\n",
" <td>1.209897e+09</td>\n",
" <td>0.0</td>\n",
" <td>9735.0</td>\n",
" <td>0.0</td>\n",
" <td>4.741535e+09</td>\n",
" <td>Benign</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24032</th>\n",
" <td>192.168.1.191--216.137.61.62--TCP--52706--80(h...</td>\n",
" <td>216.137.61.62</td>\n",
" <td>192.168.1.191</td>\n",
" <td>TCP</td>\n",
" <td>80(http)</td>\n",
" <td>52706</td>\n",
" <td>1.095918e+11</td>\n",
" <td>23.0</td>\n",
" <td>0.0</td>\n",
" <td>23.0</td>\n",
" <td>...</td>\n",
" <td>1.095918e+11</td>\n",
" <td>0.0</td>\n",
" <td>4.981446e+09</td>\n",
" <td>0.0</td>\n",
" <td>4.866784e+09</td>\n",
" <td>0.0</td>\n",
" <td>6304.0</td>\n",
" <td>0.0</td>\n",
" <td>1.138703e+10</td>\n",
" <td>Benign</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4936</th>\n",
" <td>173.241.240.220--192.168.1.191--TCP--80(http)-...</td>\n",
" <td>192.168.1.191</td>\n",
" <td>173.241.240.220</td>\n",
" <td>TCP</td>\n",
" <td>47724</td>\n",
" <td>80(http)</td>\n",
" <td>1.667897e+09</td>\n",
" <td>33.0</td>\n",
" <td>0.0</td>\n",
" <td>33.0</td>\n",
" <td>...</td>\n",
" <td>1.667897e+09</td>\n",
" <td>0.0</td>\n",
" <td>5.212100e+07</td>\n",
" <td>0.0</td>\n",
" <td>2.502940e+08</td>\n",
" <td>0.0</td>\n",
" <td>5642.0</td>\n",
" <td>0.0</td>\n",
" <td>1.441531e+09</td>\n",
" <td>Benign</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>3 rows × 40 columns</p>\n",
"</div>"
],
"text/plain": [
" fiveTuple srcIP \\\n",
"22705 216.137.61.254--192.168.1.191--TCP--443(https)... 192.168.1.191 \n",
"24032 192.168.1.191--216.137.61.62--TCP--52706--80(h... 216.137.61.62 \n",
"4936 173.241.240.220--192.168.1.191--TCP--80(http)-... 192.168.1.191 \n",
"\n",
" dstIP protocol srcPort dstPort flowDuration \\\n",
"22705 216.137.61.254 TCP 39338 443(https) 5.189759e+09 \n",
"24032 192.168.1.191 TCP 80(http) 52706 1.095918e+11 \n",
"4936 173.241.240.220 TCP 47724 80(http) 1.667897e+09 \n",
"\n",
" flowLength fwdFlowLength bwdFlowLength ... bwdIATTotal \\\n",
"22705 15.0 0.0 15.0 ... 5.189759e+09 \n",
"24032 23.0 0.0 23.0 ... 1.095918e+11 \n",
"4936 33.0 0.0 33.0 ... 1.667897e+09 \n",
"\n",
" fwdIATMean bwdIATMean fwdIATStd bwdIATStd fwdIATMin \\\n",
"22705 0.0 3.706970e+08 0.0 1.209897e+09 0.0 \n",
"24032 0.0 4.981446e+09 0.0 4.866784e+09 0.0 \n",
"4936 0.0 5.212100e+07 0.0 2.502940e+08 0.0 \n",
"\n",
" bwdIATMin fwdIATMax bwdIATMax Type \n",
"22705 9735.0 0.0 4.741535e+09 Benign \n",
"24032 6304.0 0.0 1.138703e+10 Benign \n",
"4936 5642.0 0.0 1.441531e+09 Benign \n",
"\n",
"[3 rows x 40 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 7;\n",
" var nbb_unformatted_code = \"pd_comb.head(3)\";\n",
" var nbb_formatted_code = \"pd_comb.head(3)\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd_comb.head(3)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Added throughput columns."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"flowLengthPerTime\n",
"fwdFlowLengthPerTime\n",
"bwdFlowLengthPerTime\n",
"packetSizeTotalPerTime\n",
"fwdPacketSizeTotalPerTime\n",
"bwdPacketSizeTotalPerTime\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 8;\n",
" var nbb_unformatted_code = \"## Add throughput columns.\\ncolsPerTime = [\\n \\\"flowLength\\\",\\n \\\"fwdFlowLength\\\",\\n \\\"bwdFlowLength\\\",\\n \\\"packetSizeTotal\\\",\\n \\\"fwdPacketSizeTotal\\\",\\n \\\"bwdPacketSizeTotal\\\",\\n]\\n\\nfor feature in colsPerTime:\\n pd_comb[feature + \\\"PerTime\\\"] = pd_comb[feature] / pd_comb[\\\"flowDuration\\\"]\\n print(feature + \\\"PerTime\\\")\";\n",
" var nbb_formatted_code = \"## Add throughput columns.\\ncolsPerTime = [\\n \\\"flowLength\\\",\\n \\\"fwdFlowLength\\\",\\n \\\"bwdFlowLength\\\",\\n \\\"packetSizeTotal\\\",\\n \\\"fwdPacketSizeTotal\\\",\\n \\\"bwdPacketSizeTotal\\\",\\n]\\n\\nfor feature in colsPerTime:\\n pd_comb[feature + \\\"PerTime\\\"] = pd_comb[feature] / pd_comb[\\\"flowDuration\\\"]\\n print(feature + \\\"PerTime\\\")\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Add throughput columns.\n",
"colsPerTime = [\n",
" \"flowLength\",\n",
" \"fwdFlowLength\",\n",
" \"bwdFlowLength\",\n",
" \"packetSizeTotal\",\n",
" \"fwdPacketSizeTotal\",\n",
" \"bwdPacketSizeTotal\",\n",
"]\n",
"\n",
"for feature in colsPerTime:\n",
" pd_comb[feature + \"PerTime\"] = pd_comb[feature] / pd_comb[\"flowDuration\"]\n",
" print(feature + \"PerTime\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Features"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 9;\n",
" var nbb_unformatted_code = \"# Feature columns.\\nfeature_cols = [\\n \\\"flowDuration\\\",\\n \\\"flowLength\\\",\\n \\\"fwdFlowLength\\\",\\n \\\"bwdFlowLength\\\",\\n \\\"packetSizeTotal\\\",\\n \\\"packetSizeMean\\\",\\n \\\"packetSizeStd\\\",\\n \\\"packetSizeMin\\\",\\n \\\"packetSizeMax\\\",\\n \\\"fwdPacketSizeTotal\\\",\\n \\\"bwdPacketSizeTotal\\\",\\n \\\"fwdPacketSizeMean\\\",\\n \\\"bwdPacketSizeMean\\\",\\n \\\"fwdPacketSizeStd\\\",\\n \\\"bwdPacketSizeStd\\\",\\n \\\"fwdPacketSizeMin\\\",\\n \\\"bwdPacketSizeMin\\\",\\n \\\"fwdPacketSizeMax\\\",\\n \\\"bwdPacketSizeMax\\\",\\n \\\"IATMean\\\",\\n \\\"IATStd\\\",\\n \\\"IATMin\\\",\\n \\\"IATMax\\\",\\n \\\"fwdIATTotal\\\",\\n \\\"bwdIATTotal\\\",\\n \\\"fwdIATMean\\\",\\n \\\"bwdIATMean\\\",\\n \\\"fwdIATStd\\\",\\n \\\"bwdIATStd\\\",\\n \\\"fwdIATMin\\\",\\n \\\"bwdIATMin\\\",\\n \\\"fwdIATMax\\\",\\n \\\"bwdIATMax\\\",\\n \\\"flowLengthPerTime\\\",\\n \\\"fwdFlowLengthPerTime\\\",\\n \\\"bwdFlowLengthPerTime\\\",\\n \\\"packetSizeTotalPerTime\\\",\\n \\\"fwdPacketSizeTotalPerTime\\\",\\n \\\"bwdPacketSizeTotalPerTime\\\",\\n \\\"Type\\\",\\n]\";\n",
" var nbb_formatted_code = \"# Feature columns.\\nfeature_cols = [\\n \\\"flowDuration\\\",\\n \\\"flowLength\\\",\\n \\\"fwdFlowLength\\\",\\n \\\"bwdFlowLength\\\",\\n \\\"packetSizeTotal\\\",\\n \\\"packetSizeMean\\\",\\n \\\"packetSizeStd\\\",\\n \\\"packetSizeMin\\\",\\n \\\"packetSizeMax\\\",\\n \\\"fwdPacketSizeTotal\\\",\\n \\\"bwdPacketSizeTotal\\\",\\n \\\"fwdPacketSizeMean\\\",\\n \\\"bwdPacketSizeMean\\\",\\n \\\"fwdPacketSizeStd\\\",\\n \\\"bwdPacketSizeStd\\\",\\n \\\"fwdPacketSizeMin\\\",\\n \\\"bwdPacketSizeMin\\\",\\n \\\"fwdPacketSizeMax\\\",\\n \\\"bwdPacketSizeMax\\\",\\n \\\"IATMean\\\",\\n \\\"IATStd\\\",\\n \\\"IATMin\\\",\\n \\\"IATMax\\\",\\n \\\"fwdIATTotal\\\",\\n \\\"bwdIATTotal\\\",\\n \\\"fwdIATMean\\\",\\n \\\"bwdIATMean\\\",\\n \\\"fwdIATStd\\\",\\n \\\"bwdIATStd\\\",\\n \\\"fwdIATMin\\\",\\n \\\"bwdIATMin\\\",\\n \\\"fwdIATMax\\\",\\n \\\"bwdIATMax\\\",\\n \\\"flowLengthPerTime\\\",\\n \\\"fwdFlowLengthPerTime\\\",\\n \\\"bwdFlowLengthPerTime\\\",\\n \\\"packetSizeTotalPerTime\\\",\\n \\\"fwdPacketSizeTotalPerTime\\\",\\n \\\"bwdPacketSizeTotalPerTime\\\",\\n \\\"Type\\\",\\n]\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Feature columns.\n",
"feature_cols = [\n",
" \"flowDuration\",\n",
" \"flowLength\",\n",
" \"fwdFlowLength\",\n",
" \"bwdFlowLength\",\n",
" \"packetSizeTotal\",\n",
" \"packetSizeMean\",\n",
" \"packetSizeStd\",\n",
" \"packetSizeMin\",\n",
" \"packetSizeMax\",\n",
" \"fwdPacketSizeTotal\",\n",
" \"bwdPacketSizeTotal\",\n",
" \"fwdPacketSizeMean\",\n",
" \"bwdPacketSizeMean\",\n",
" \"fwdPacketSizeStd\",\n",
" \"bwdPacketSizeStd\",\n",
" \"fwdPacketSizeMin\",\n",
" \"bwdPacketSizeMin\",\n",
" \"fwdPacketSizeMax\",\n",
" \"bwdPacketSizeMax\",\n",
" \"IATMean\",\n",
" \"IATStd\",\n",
" \"IATMin\",\n",
" \"IATMax\",\n",
" \"fwdIATTotal\",\n",
" \"bwdIATTotal\",\n",
" \"fwdIATMean\",\n",
" \"bwdIATMean\",\n",
" \"fwdIATStd\",\n",
" \"bwdIATStd\",\n",
" \"fwdIATMin\",\n",
" \"bwdIATMin\",\n",
" \"fwdIATMax\",\n",
" \"bwdIATMax\",\n",
" \"flowLengthPerTime\",\n",
" \"fwdFlowLengthPerTime\",\n",
" \"bwdFlowLengthPerTime\",\n",
" \"packetSizeTotalPerTime\",\n",
" \"fwdPacketSizeTotalPerTime\",\n",
" \"bwdPacketSizeTotalPerTime\",\n",
" \"Type\",\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dataframe with chosen features"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 10;\n",
" var nbb_unformatted_code = \"## Select feature columns in datasets.\\npd_comb_features = pd_comb[feature_cols]\";\n",
" var nbb_formatted_code = \"## Select feature columns in datasets.\\npd_comb_features = pd_comb[feature_cols]\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Select feature columns in datasets.\n",
"pd_comb_features = pd_comb[feature_cols]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Feature importance plots"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 10;\n",
" var nbb_unformatted_code = \"#feature = \\\"fwdPacketSizeMax\\\"\\nfeature = \\\"fwdPacketSizeMax\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"fwdPacketSizeMax\\\"\\nfeature = \\\"fwdPacketSizeMax\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"fwdPacketSizeMax\"\n",
"feature = \"fwdPacketSizeMax\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 12;\n",
" var nbb_unformatted_code = \"#feature = \\\"flowDuration\\\"\\nfeature = \\\"flowDuration\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"flowDuration\\\"\\nfeature = \\\"flowDuration\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"flowDuration\"\n",
"feature = \"flowDuration\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAaZElEQVR4nO3dfZRU9Z3n8fcnDQIRnwZQZ0AEF0YkAhJbZsUMYGIQ5cE1zvFITKKDAsnKmnWOZsAZDTqzRyfZNepoTEiGoEkGNT4NKBHURMETVx4yaEDag0d71o6zCpi0sgMq+N0/6nanuum+Xd19q6v79ud1Th+qfnXvr75Vl+bD7z78riICMzOz1nyi0gWYmVn35qAwM7NUDgozM0vloDAzs1QOCjMzS+WgMDOzVH0qXUA5DB48OEaMGFHpMszMepQtW7bsjoghzdtzGRQjRoxg8+bNlS7DzKxHkfRvLbV715OZmaVyUJiZWSoHhZmZpcrVMQpJs4HZo0aNqnQpZlYGH330EXV1dezfv7/SpfRo/fv3Z9iwYfTt27ek5ZXHSQGrq6vDB7PN8ueNN97giCOOYNCgQUiqdDk9UkSwZ88e3n//fUaOHNnkNUlbIqK6+Tre9WRmPcb+/fsdEp0kiUGDBrVrVOagMLMexSHRee39DnN1jCILIxY/UekSrJ1qb51Z6RKsF6mqqmLcuHFEBFVVVdx1111Mnjy5Q33deOONTJkyhXPOOSfjKrPloDCzHivr/9iV8p+OAQMGsHXrVgDWrl3LkiVLeO655zr0fjfffHOH1utq3vVkZtZB7733Hsccc0zj829/+9ucccYZjB8/nm9+85sA1NbWcsoppzB//nw+9alPMX36dPbt2wfA5ZdfzkMPPQTAmjVrGDNmDJ/5zGe4+uqrmTVrFgBLly5l3rx5TJs2jZNOOok777yziz+lg8LMrF327dvHaaedxpgxY7jyyiu54YYbAFi3bh07d+5k48aNbN26lS1btrB+/XoAdu7cyVVXXcX27ds5+uijefjhh5v0uX//fhYuXMjPf/5znn/+eXbt2tXk9ZqaGtauXcvGjRu56aab+Oijj7rmwyYcFGZm7dCw66mmpoYnn3ySr3zlK0QE69atY926dUycOJFPf/rT1NTUsHPnTgBGjhzJaaedBsDpp59ObW1tkz5ramo46aSTGk9XnTt3bpPXZ86cSb9+/Rg8eDDHHnssb7/9dtk/Z7FcHaPwBXdm1pXOPPNMdu/eza5du4gIlixZwsKFC5ssU1tbS79+/RqfV1VVNe56atDW9WzN1z9w4EAG1ZcuVyOKiFgdEQuOOuqoSpdiZr1ATU0NBw8eZNCgQZx77rksX76cvXv3AvDb3/6Wd955p6R+xowZw+uvv9440njggQfKVXKH5GpEYWZWbg3HKKAwErj33nupqqpi+vTp7NixgzPPPBOAgQMH8pOf/ISqqqo2+xwwYADf/e53mTFjBoMHD2bSpEnl/Ajt5ik8mvF1FD2Pr6PoPXbs2MEpp5xS6TLKYu/evQwcOJCI4KqrrmL06NFcc801ZXu/lr7L1qbw8IiiG6jt/8VKl9CzLe2q96nvojey3ugHP/gB9957Lx9++CETJ0485FhHJTkozMy6gWuuuaasI4jOcFCYlah4t6R3d1lvkquznszMLHsOCjMzS+WgMDOzVD0iKCQdLmmLpFmVrsXMejdJfPnLX258fuDAAYYMGdI4iV9rnn322cZlVq1axa233pq6fEenLi+Hsh7MlrQcmAW8ExGnFrXPAO4AqoAfRkT6NwZ/DTxYtkLNrGdamvEsDCWcAn344Yezbds29u3bx4ABA3jqqacYOnRou95mzpw5zJkzJ3WZX/3qV+3qs5zKPaJYAcwobpBUBdwNnAeMBeZKGitpnKTHm/0cK+kc4BWga2fBMjNrxXnnnccTTxTOglu5cmWTSfw2btzI5MmTmThxIpMnT+bVV189ZP0VK1awaNEiAN5++20uvPBCJkyYwIQJExoDYuDAgUDh6u/rrruOU089lXHjxjVO71E8QgFYtGgRK1asAGDx4sWMHTuW8ePHc+2113b685Z1RBER6yWNaNY8CXgtIl4HkHQ/cEFE3EJh9NGEpLOBwymEyj5JayLi43LWbWaW5pJLLuHmm29m1qxZvPzyy8ybN48NGzYAhXmb1q9fT58+fXj66ae5/vrrD5lWvNjVV1/N1KlTefTRRzl48GDjXFENHnnkEbZu3cpLL73E7t27OeOMM5gyZUqr/b377rs8+uij1NTUIInf//73nf68lbiOYijwZtHzOuDPWls4Iv4GQNLlwO7WQkLSAmABwPDhw7Oq1czsEOPHj6e2tpaVK1dy/vnnN3mtvr6eyy67jJ07dyKpzXtH/OIXv+C+++4DCjPDNp/U9Pnnn2fu3LlUVVVx3HHHMXXqVDZt2sSRRx7ZYn9HHnkk/fv358orr2TmzJltHjspRSUOZrd0V+82J5yKiBUR8XjK68siojoiqocMGdKpAs3M2jJnzhyuvfbaQ+4dccMNN3D22Wezbds2Vq9ezf79+zv1Pq3Nx9enTx8+/vgP/29ueJ8+ffqwceNGLrroIh577DFmzJjR4vrtUYmgqANOKHo+DHgri44lzZa0rL7ec/KYWXnNmzePG2+8kXHjxjVpr6+vbzy43XDMIM3nPvc57rnnHgAOHjzIe++91+T1KVOm8MADD3Dw4EF27drF+vXrmTRpEieeeCKvvPIKH3zwAfX19TzzzDNAYXLB+vp6zj//fG6//fbG+3t3RiWCYhMwWtJISYcBlwCrsujY96Mws64ybNgwvv71rx/S/o1vfIMlS5Zw1llncfDgwTb7ueOOO/jlL3/JuHHjOP3009m+fXuT1y+88ELGjx/PhAkT+OxnP8u3vvUtjj/+eE444QQuvvhixo8fz6WXXsrEiRMBeP/995k1axbjx49n6tSpfOc73+n0Zy3rNOOSVgLTgMEUzlr6ZkT8k6TzgdspnB67PCL+R0bv13CHu/kNtyBsr0pMM+7ZY3uGEfv/ufGx53qqjDxPM97Vus004xExt5X2NcCaMrzfamB1dXX1/Kz7NjPrrXrEldlmZlY5uQoKH8w2M8teroLCB7PN8i+Pt2/uau39DnMVFGaWb/3792fPnj0Oi06ICPbs2UP//v1LXidXd7grOuup0qWYWRkMGzaMuro6du3aVelSerT+/fszbNiwkpfPVVD4rCezfOvbty8jR46sdBm9jnc9mZlZqlyNKMzKqcmFkUu76E1LuD+CWbnlakTh02PNzLKXq6Dw6bFmZtnLVVCYmVn2HBRmZpbKQWFmZqlyFRQ+mG1mlr1cBYUPZpuZZS9XQWFmZtlzUJiZWSoHhZmZpXJQmJlZqlwFhc96MjPLXq6Cwmc9mZllL1dBYWZm2XNQmJlZKgeFmZmlclCYmVkqB4WZmaVyUJiZWapcBYWvozAzy16ugsLXUZiZZS9XQWFmZtlzUJiZWSoHhZmZpXJQmJlZqj6VLsDMUiztxidmLPXZhb2FRxRmZpbKQWFmZqkcFGZmlspBYWZmqbp9UEiaJmmDpO9JmlbpeszMepuyBoWk5ZLekbStWfsMSa9Kek3S4ja6CWAv0B+oK1etZmbWsnKfHrsCuAu4r6FBUhVwN/B5Cv/wb5K0CqgCbmm2/jxgQ0Q8J+k44Dbg0jLXbGZmRcoaFBGxXtKIZs2TgNci4nUASfcDF0TELcCslO5+B/Rr7UVJC4AFAMOHD+9M2WZmVqQSxyiGAm8WPa9L2lok6QuSvg/8mMLopEURsSwiqiOiesiQIZkVa2bW21Xiymy10BatLRwRjwCPlNSxNBuYPWrUqA6WZmZmzVViRFEHnFD0fBjwVhYd+34UZmbZq0RQbAJGSxop6TDgEmBVBeowM7MSlPv02JXAC8DJkuokXRERB4BFwFpgB/BgRGzP6P18K1Qzs4yV+6ynua20rwHWlOH9VgOrq6ur52fdt5lZb9Xtr8w2M7PKylVQeNeTmVn2chUUPuvJzCx7uQoKMzPLXq6CwruezMyyl6ug8K4nM7Ps5SoozMwsew4KMzNLlaug8DEKM7Ps5SoofIzCzCx7JQWFpIclzZSUq2AxM7O2lfoP/z3AF4Gdkm6VNKaMNZmZWTdSUlBExNMRcSnwaaAWeErSryT9paS+5SywPXyMwswseyXvSpI0CLgcuBL4V+AOCsHxVFkq6wAfozAzy15J04xLegQYQ+G+1bMj4t+Tlx6QtLlcxZmZWeWVej+KHyb3kGgkqV9EfBAR1WWoy8zMuolSdz39fQttL2RZiJmZdU+pIwpJxwNDgQGSJgJKXjoS+GSZazMzs26grV1P51I4gD0MuK2o/X3g+jLV1GGSZgOzR40aVelSzMxyIzUoIuJe4F5JF0XEw11UU4f5ntlmZtlra9fTlyLiJ8AISX/V/PWIuK2F1czMLEfa2vV0ePLnwHIXYmZm3VNbu56+n/x5U9eUY2Zm3U2pkwJ+S9KRkvpKekbSbklfKndxZmZWeaVeRzE9It4DZgF1wJ8C15WtKjMz6zZKDYqGif/OB1ZGxLtlqsfMzLqZUoNitaQaoBp4RtIQYH/5yuoYzx5rZpa9UqcZXwycCVRHxEfA/wMuKGdhHeHZY83MslfqpIAAp1C4nqJ4nfsyrsfMzLqZUqcZ/zHwn4CtwMGkOXBQmJnlXqkjimpgbEREOYsxM7Pup9SD2duA48tZiJmZdU+ljigGA69I2gh80NAYEXPKUpWZmXUbpQbF0nIWYWZm3VdJQRERz0k6ERgdEU9L+iRQVd7SzMysOyj1rKf5wALgjyic/TQU+B7wufKVZmY9zYjFTzR5XnvrzApVYlkqddfTVcAk4EWAiNgp6diyVWVm3V7zULD8KjUoPoiID6XCLbOTi+665FRZSZ8A/o7Cfbo3J3fdMzOzLlLq6bHPSboeGCDp88DPgNVtrSRpuaR3JG1r1j5D0quSXpO0uI1uLqCwq+sjCjPXmplZFyo1KBYDu4DfAAuBNcDflrDeCmBGcYOkKuBu4DxgLDBX0lhJ4yQ93uznWOBk4IWI+CvgayXWa2ZmGSn1rKePJT0GPBYRu0rtPCLWSxrRrHkS8FpEvA4g6X7ggoi4hcL9LpqQVAd8mDw92Px1MzMrr9QRhQqWStoN1ACvStol6cZOvOdQ4M2i53VJW2seAc6V9I/A+pRaF0jaLGnzrl0lZ5mZmbWhrRHFfwfOAs6IiDcAJJ0E3CPpmoj4TgfeUy20tXpgPCL+A7iirU4jYhmwDKC6utpzUpmZZaStYxRfAeY2hARAssvoS8lrHVEHnFD0fBjwVgf7asI3LjIzy15bQdE3InY3b0yOU/RtYflSbAJGSxop6TDgEmBVB/tqXpdvXGRmlrG2guLDDr4GgKSVwAvAyZLqJF0REQeARcBaYAfwYERsL7XgNt7PIwozs4y1dYxigqT3WmgX0L+tziNibivtayicYpupiFgNrK6urp6fdd9mZr1ValBEhCf+MzPr5Uq94K5H8K4nM7Ps5SoofDDbzCx7pU4KaGbWacUzznoK8p4jVyMK73oyM8teroLCu57MzLLnXU9mVja+uVE+5GpEYWZm2ctVUPgYhZlZ9nIVFD5GYWaWvVwFhZmZZc9BYWZmqRwUZmaWKldB4YPZZmbZy9V1FJ5m3Kzn8vQe3VeuRhRmZpY9B4WZmaVyUJiZWapcBYUPZpuZZS9XQeErs83MsperoDCz3mXE4ic8Q20XyNXpsWbWc/gf+J7DIwozM0vloDAzs1QOCjMzS+VjFGbWbXlaj+7BIwozM0uVqxGFpNnA7FGjRlW6FDPrQu0deTQs71FKaXI1ovAFd2Zm2cvViMLM8qG7XmPRW0ciuRpRmJlZ9hwUZpZrxaMTT/nRMQ4KMzNL5aAws17Lo4vSOCjMzCyVz3oysx6ho9dKdOQ9am+decgZTr159OERhZmZpXJQmJlZqm6/60nSnwOXUqh1bERMrnBJZlZh5dgN1Pw02uLHve0Cu+bKOqKQtFzSO5K2NWufIelVSa9JWpzWR0RsiIivAo8D95azXjMzO1S5RxQrgLuA+xoaJFUBdwOfB+qATZJWAVXALc3WnxcR7ySPvwhcWeZ6zcysmbIGRUSslzSiWfMk4LWIeB1A0v3ABRFxCzCrpX4kDQfqI+K91t5L0gJgAcDw4cMzqN7MrKA3n/EElTmYPRR4s+h5XdKW5grgR2kLRMSyiKiOiOohQ4Z0skQzM2tQiYPZaqEt0laIiG+W1LHvR2FmlrlKjCjqgBOKng8D3sqiY9+Pwswse5UIik3AaEkjJR0GXAKsqkAdZmZWgnKfHrsSeAE4WVKdpCsi4gCwCFgL7AAejIjtGb3fbEnL6uvrs+jOzMwo/1lPc1tpXwOsKcP7rQZWV1dXz8+6bzOz3ipXU3h4RGFmlr1cBYUPZpuZZa/bz/VkZtZZaRfM9faL6UqRqxGFmZllL1dB4WMUZmbZy1VQ+BiFmVn2chUUZmaWvVwFhXc9mdmIxU90yQHq3nQQPFdB4V1PZmbZy1VQmJlZ9hwUZmaWykFhZmapchUUPphtZpa9XAWFD2abmWUvV0FhZmbZc1CYmVkqB4WZWSelXeSXhwvzHBRmZpYqV0Hhs57MzLKXq6DwWU9mZtnLVVCYmVn2HBRmZpbKQWFmZqkcFGZmlspBYWZmqRwUZmaWKldB4esozMyyl6ug8HUUZmbZy1VQmJlZ9hwUZmaWykFhZtZODTPCNp81Ng8zxbbEQWFmZqkcFGZmlspBYWZmqRwUZmaWykFhZmapHBRmZpbKQWFmZqkcFGZmlspBYWZmqRQRla4hc5J2Af/WgVWPArKYerYj/ZS6TlvLpb3e2msttbfUNhjYXUKN5VCpbZPVdklbprPtvXG7tGcd/86U7sSIGHJIa0T4J/kBllWqn1LXaWu5tNdbe62l9lbaNve2bZPVdmnv99+e9t64XbLcNv6dafvHu56aWl3Bfkpdp63l0l5v7bWW2rP6LrJSqW2T1XZJWyar9krw70zp79PVMqsnl7uerDwkbY6I6krXYU15u3Rfedk2HlFYeyyrdAHWIm+X7isX28YjCjMzS+URhZmZpXJQmJlZKgeFmZmlclBYh0g6RdL3JD0k6WuVrseaknS4pC2SZlW6FvsDSdMkbUh+d6ZVup5SOSiskaTlkt6RtK1Z+wxJr0p6TdJigIjYERFfBS4Gevzpf91de7ZN4q+BB7u2yt6pndsmgL1Af6Cuq2vtKAeFFVsBzChukFQF3A2cB4wF5koam7w2B3geeKZry+yVVlDitpF0DvAK8HZXF9lLraD035sNEXEehSC/qYvr7DAHhTWKiPXAu82aJwGvRcTrEfEhcD9wQbL8qoiYDFzatZX2Pu3cNmcD/xn4IjBfkn/Py6g92yYiPk5e/x3QrwvL7JQ+lS7Aur2hwJtFz+uAP0v2r36Bwl/2NV1fltHKtomIRQCSLgd2F/3jZF2ntd+bLwDnAkcDd1Wgrg5xUFhb1EJbRMSzwLNdW4o10+K2aXwQsaLrSrFmWvu9eQR4pKuL6SwPSa0tdcAJRc+HAW9VqBZrytum+8rVtnFQWFs2AaMljZR0GHAJsKrCNVmBt033latt46CwRpJWAi8AJ0uqk3RFRBwAFgFrgR3AgxGxvZJ19kbeNt1Xb9g2nhTQzMxSeURhZmapHBRmZpbKQWFmZqkcFGZmlspBYWZmqRwUZmaWykFhPZakqyXtkPTTdq5XK2lw8vigpK2Stkn6maRPdqCOve1YdpqkyUXPT5b0bFLDDknLkvZqSXe2s45xST9bJb0r6Y3k8dOtLH99if02fl/WO/k6CuuxJNUA50XEG+1crxaojojdkvZGxMCk/afAloi4rZ39NfZRwrJLgb0R8T+T52uB70bEvyTPx0XEb9rz/q28zwrg8Yh4qLN1F39fna3LeiaPKKxHkvQ94CRglaRQwdGSPpY0JVlmg6RRkgZJWifpXyV9n5YnbAPYAIySNFvSi8nyT0s6LulvoKQfSfqNpJclXdSspsGSXpA0U9IQSQ9L2pT8nCVpBPBV4Jrkf/p/DvwxRTewaQiJZOTxePJ4TdFIoV7SZZKqJH076ftlSQtTvqu5Sc3bJP1D0nYrMCDp86dJ22Mq3BVvu6QF7d4oll8R4R//9MgfoBYYDDwJfAqYRWGOnb+hMP35G8lydwI3Jo9nUphhdXDyfG/yZx/gX4CvAcfwh9H2lcD/Sh7/A3B70fsf09AHcBzwIvD5pO2fgc8kj4cDO5LHS4Fri/r4S6Ae+DlwDXB00j6Nwoig+POeDrwMHAUsAP42ae8HbAZGFi27AvgL4E+A/wMMST7jL4D/UvzZi9b5o+TPAcA2YFDx91zp7e2fyv14mnHLgw3AFGAkcAswH3iOQmiQvPYFgIh4QtLvitYdIGlrUT//BJwMPCDpj4HDgIZdW+dQmNyNpK+GfvpSuMvfVRHxXNGyY6XGwcuRko5oXnhE/CjZ/TSDwk2HFkqa0Hy55BjBj4GLI6Je0nRgvKS/SBY5ChhdVGuDM4BnI2JX0s9Pk+/jsebvAVwt6cLk8QlJf3taWM56GQeF5cEGCrt0/gS4EbiOwv/I1xct09rBuH0RcVpxg6R/BG6LiFUq3KBpacNLrfRzANhC4YY0DUHxCeDMiNjXrO9DVo6It4DlwHIV7rt8arN1qijcIe3miGi4L7OA/xYRa1v5XBQt16bkc56T1Pwfkp6lcF9nMx+jsFx4EZgMfBwR+4GtwEIKAQKFwLgUQNJ5FHYtpTkK+G3y+LKi9nUUZgQl6auhnwDmAWMkLW5l2dOSh+8DRxS1z5DUN3l8PDCo6L0b3Aq8HBH3F7WtBb5WtO6fSjq8hc/yIjA1OX5SBczlD2H2UcP6yWf+XRISYyjcStUMcFBYDkTEBxRuO/m/k6YNFP4xbjh76CZgiqRfA9Mp7LNPsxT4maQNQPGZPn8PHJMcFH6Jwr2pG2o4SGG31NmS/itwNVCdHGh+hcKIB2A1cGHRwezpQEN/a4HrIuL/NqvnWmB60QHtOcAPgVeAXyejkO/Twh6CiPh3YAnwS+Al4NeRnGEFLANeTnZHPQn0kfQy8HdF36WZT481M7N0HlGYmVkqB4WZmaVyUJiZWSoHhZmZpXJQmJlZKgeFmZmlclCYmVkqB4WZmaX6/44cgUe/BpUVAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 13;\n",
" var nbb_unformatted_code = \"#feature = \\\"fwdPacketSizeTotal\\\"\\nfeature = \\\"fwdPacketSizeTotal\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"fwdPacketSizeTotal\\\"\\nfeature = \\\"fwdPacketSizeTotal\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"fwdPacketSizeTotal\"\n",
"feature = \"fwdPacketSizeTotal\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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z2efffZhwoQJWzzg11duUZiZ9dKJJ57I5ZdfzqxZs3j11VeZM2cOzz77LJBbt2nZsmUMGjSIJ554gosuuoj777+/aF3nnHMOhxxyCA8++CCbNm3io48+2uL9Bx54gFdeeYU//OEPrFu3jgMOOIBp06YVre/999/nwQcfpKWlBUn85S9/2ebPm6lE4cHsvvPgt1npJkyYQGtrK4sWLeLoo4/e4r329nZOO+00Vq9ejSQ+/fTTxLqeeuop7rjjDiC3MmzXbRKee+45TjrpJOrq6vjyl7/MIYccwooVK9h55527rW/nnXemvr6eM888k5kzZ27R6uirTHU9eT8KM+svs2fP5vzzz99q74iLL76Yww47jJUrV9Lc3ExHR8c2XafYEuSDBg3is88+2/y68zqDBg1i+fLlHH/88Tz00EPMmDFjm64PGUsUZmb9Zc6cOVxyySXst99+W5S3t7dvHtwuXPSvmMMPP5wbbrgByC04+MEHH2zx/rRp07jnnnvYtGkTa9euZdmyZUyZMoU99tiD119/nY8//pj29naefPJJAD766CPa29s5+uij+fnPf755f+9tkamuJzOrMRV8WLShoaHblWJ/9KMfcdppp3H11VfzrW99q8d6rrnmGubNm8ett95KXV0dN9xww+alygGOO+44nn/+eSZOnIgkfvKTn7DbbrsBcMIJJzBhwgTGjRvH5MmTAfjwww859thj6ejoICL42c9+ts2fVT3trDQQNTU1xYsvvljpMLpXZN53sSU8Nq8e24tziila14L2ImMUxa9drB6zclq1ahV77713pcPIhO7upaSXIqKp67FuUVSJXv9QTjhnwKwb5SVFzAYEj1GYmVmiTCUKScdIuqm93b+RmmVVFrvL+1tv72GmEoWnx5plW319PevXr3ey2AYRwfr166mvL/1BKY9RWPmlvXCb1ayGhgba2tpYu3ZtpUMZ0Orr62loaCj5eCcKMxswBg8ezJgxYyodRs3JVNeTmZmlzy0Ks54kdZ15Kq/VACcK83LlXXS9H14c0Wqdu54sNU44ZtnkRGFmZomcKMzMLFGmxii8cVFOX9aNsvQV64prvXJmP0ditm0ylSgiohlobmpqmlvpWGqVd8ozy55MJQqzSvAgvmWdxyjMzCyRWxTlMoDWN/KYRv9prf8OLOjmDT+4Z1XMLQozM0vkRGFmZomcKKzq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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 14;\n",
" var nbb_unformatted_code = \"#feature = \\\"fwdFlowLength\\\"\\nfeature = \\\"fwdFlowLength\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\n#plt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"fwdFlowLength\\\"\\nfeature = \\\"fwdFlowLength\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\n# plt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"fwdFlowLength\"\n",
"feature = \"fwdFlowLength\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"#plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 15;\n",
" var nbb_unformatted_code = \"#feature = \\\"fwdIATMean\\\"\\nfeature = \\\"fwdIATMean\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"fwdIATMean\\\"\\nfeature = \\\"fwdIATMean\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"fwdIATMean\"\n",
"feature = \"fwdIATMean\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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rKzwuep+YcTp06dzxx13MGXKFF5++WVmzJjB888/D2TWqVq9ejW9evXiqaee4utf//pxS7Dnmjt3LhdccAGPPvooR44cObo2VptHHnmEDRs28NJLL7Fnzx7OOecczj///KL1/elPf+LRRx9ly5YtSOLPf/5zRdpsZt1fvQxbJaLel2QHGDNmDDt37mTJkiVcdtllx+zbt28fn//859m2bRuSOnz2xq9//WsefPBBILNibv7jd1944QVaWlpoaGjgtNNO44ILLmDdunWcdNJJBes76aST6Nu3L9dddx2TJ0/ucC7GrOJ8iW7dqpcJ80TU+zPM20ybNo2bb775mCErgFtuuYWPfexjbNy4kRUrVnDo0KEunafYOma9evXinXfeObrddp5evXqxdu1arrzySh577DEmTZpU8Hgz63lSnTy6w5wHwIwZM7j11lsZPXr0MeX79u07OoHeNgfRnk984hPce++9ABw5coT9+/cfs//888/n4Ycf5siRI+zevZvVq1czceJEPvCBD/DKK6/w1ltvsW/fPp5++mkgs8Divn37uOyyy/je97539MFVZmapTh7dpefR1NTEl770pePKv/rVrzJ//nw+8pGPcOTIkQ7r+f73v88zzzzD6NGjmTBhAps2HXvNwRVXXMGYMWMYO3YsH//4x/nWt77F+9//fgYPHsynP/1pxowZw9VXX330CYZvvvkmU6ZMYcyYMVxwwQV897vfrUyDzboq996P3DIPc1WNl2S3LvP3skZ64i/Ktkvg224YzL1x8GhC2ecbCiskdUuyl6q7DFuZmXU3qU4e3WXYysysu0l18jAzs2SkOnl0NGzVE+Z7kubvoVVdR3M9PXEuqAZSnTzaG7bq27cve/fu9S+/LogI9u7dS9++fWsdiplVWarvMG9PU1MTra2t+FkfXdO3b1+amppqHYaZVVmPTR69e/dm2LBhtQ7DzKxbSvWwlZmZJSPVycP3eZiZJSPVycP3eZiZJSPVycPMzJLh5GFm3UexezgKlft+j0Q5eZiZWdm6ZfKQNErSUkn3Srqq1vGYmfU0VU8ekhZJ2iVpY175JElbJW2XNK+Dai4F/iki/gG4JrFgzcysoFrcJLgYuBt4sK1AUgNwD3AR0Aqsk7QcaAAW5B0/A/gxcJukacCAKsRsZmY5qp48ImK1pKF5xROB7RGxA0DSQ8DlEbEA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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 16;\n",
" var nbb_unformatted_code = \"#feature = \\\"bwdIATMean\\\"\\nfeature = \\\"bwdIATMean\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"bwdIATMean\\\"\\nfeature = \\\"bwdIATMean\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"bwdIATMean\"\n",
"feature = \"bwdIATMean\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAaZElEQVR4nO3de5RV5Z3m8e/TBQIRURtQe0QEBxRQbrEkS0wjJgZRLraxx5bYiQYFTEtMnNEETDRoei1tM52LMTFiQtBkghpvDYqCmig4OuGSJgakHFyEmVScUSCdQntABX/zxzlFDoeqXRf2rnNq1/NZqxbnvGef9/zeKqiHfXtfRQRmZmbN+YtKF2BmZtXNQWFmZokcFGZmlshBYWZmiRwUZmaWyEFhZmaJulW6gDRJmgZMO+KII2adfPLJlS7HzKxTWb9+/Y6I6F/erjzeR1FbWxvr1q2rdBlmZp2KpPURUVve7kNPZmaWyEFhZmaJchUUkqZJWtjQ0FDpUszMciNXJ7MjYhmwrLa2dlb5a++//z719fXs2bOnApXlQ8+ePRkwYADdu3evdClm1oFyFRRJ6uvrOeKIIxg0aBCSKl1OpxMR7Ny5k/r6egYPHlzpcsysA+Xq0FOSPXv20LdvX4dEO0mib9++3iMz64K6TFAADolD5O+fWdfUZQ49VYOamhpGjhxJRFBTU8Ndd93F+PHj29XXzTffzIQJEzj33HNTrtLMsjBo3pP7H2+7fUoFK2m7XAVF453ZQ4YMaXHb0h9aGlrzg+/VqxcbNmwAYMWKFcyfP58XXnihXZ936623tut9ZmZtlatDTxGxLCJmH3nkkZUupUW7du3i6KOP3v/8G9/4BmeccQajRo3ia1/7GgDbtm1j+PDhzJo1i1NPPZVJkyaxe/duAK644goefvhhAJYvX86wYcP46Ec/yrXXXsvUqVMBWLBgATNnzmTixImcdNJJ3HnnnR08SjPLg1wFRbXbvXs3Y8aMYdiwYVx11VXcdNNNAKxcuZItW7awZs0aNmzYwPr161m1ahUAW7Zs4ZprrmHTpk0cddRRPPLIIwf0uWfPHubMmcNTTz3Fiy++yPbt2w94va6ujhUrVrBmzRpuueUW3n///Y4ZrJnlhoOiAzUeeqqrq+Ppp5/mM5/5DBHBypUrWblyJWPHjuXDH/4wdXV1bNmyBYDBgwczZswYAE4//XS2bdt2QJ91dXWcdNJJ+y9ZnTFjxgGvT5kyhR49etCvXz+OOeYY3nzzzczHaWb5kqtzFJ3JmWeeyY4dO9i+fTsRwfz585kzZ84B22zbto0ePXrsf15TU7P/0FOjliZ1LH//3r17U6jezLoS71FUSF1dHfv27aNv376cd955LFq0iHfeeQeAP/zhD7z11lut6mfYsGFs3bp1/57Ggw8+mFXJZtZFeY+iAzWeo4DCnsB9991HTU0NkyZNYvPmzZx55pkA9O7dm5/+9KfU1NS02GevXr34/ve/z+TJk+nXrx/jxo3Lcghm1gXlaj2KkstjZzUe42+0efNmhg8fXpnCMvbOO+/Qu3dvIoJrrrmGoUOHct1112XyWXn+PpplqTPcR9El1qPoTJfHpunee+9lzJgxnHrqqTQ0NBx0rsPM7FD40FMOXHfddZntQZiZ5WqPwszM0uegMDOzRA4KMzNL5KAwM+tgaU9KmjUHRQeSxKc//en9z/fu3Uv//v33T+LXnOeff37/NkuXLuX2229P3L69U5ebmTWl6171tCDlS2gXNLS4yeGHH87GjRvZvXs3vXr14plnnuH4449v08dMnz6d6dOnJ27z0ksvtalPM7Mk3qPoYOeffz5PPlnY7VyyZMkBk/itWbOG8ePHM3bsWMaPH89rr7120PsXL17M3LlzAXjzzTe56KKLGD16NKNHj94fEL179wYKd3/fcMMNnHbaaYwcOXL/9B6leygAc+fOZfHixQDMmzePESNGMGrUKK6//vr0vwFm1unkao+iLQsXVcqll17KrbfeytSpU3nllVeYOXMmq1evBgrzNq1atYpu3brx7LPPcuONNx40rXipa6+9lrPPPpvHHnuMffv27Z8rqtGjjz7Khg0b+M1vfsOOHTs444wzmDBhQrP9/fGPf+Sxxx6jrq4OSfzpT39KZcxm1rnlKigiYhmwrLa2dlala2nOqFGj2LZtG0uWLOGCCy444LWGhgYuv/xytmzZgqQW1474xS9+wf333w8UZoYtvyP9xRdfZMaMGdTU1HDsscdy9tlns3btWvr06dNkf3369KFnz55cddVVTJkypcVzJ2bWss524ropPvRUAdOnT+f6668/aO2Im266iXPOOYeNGzeybNky9uzZc0if09w8Xt26deODDz7Y/7zxc7p168aaNWu4+OKLefzxx5k8efIh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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 17;\n",
" var nbb_unformatted_code = \"#feature = \\\"fwdPacketSizeMean\\\"\\nfeature = \\\"fwdPacketSizeMean\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"fwdPacketSizeMean\\\"\\nfeature = \\\"fwdPacketSizeMean\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"fwdPacketSizeMean\"\n",
"feature = \"fwdPacketSizeMean\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Density')"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 18;\n",
" var nbb_unformatted_code = \"#feature = \\\"packetSizeMax\\\"\\nfeature = \\\"packetSizeMax\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\", zorder=2\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\", zorder=3\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_formatted_code = \"# feature = \\\"packetSizeMax\\\"\\nfeature = \\\"packetSizeMax\\\"\\n\\ndf_benign = pd_benign\\ndf_malicious = pd_malicious\\n\\n\\nMIN1, MAX1 = (\\n df_benign[feature].min(),\\n df_benign[feature].max(),\\n)\\n\\n\\nMIN2, MAX2 = (\\n df_malicious[feature].min(),\\n df_malicious[feature].max(),\\n)\\n\\n\\nNUM_BINS = 50\\n\\nIF_NORM = True\\n\\nylabel_dict = {True: \\\"Density\\\", False: \\\"Frequency\\\"}\\n\\nplt.hist(\\n x=df_benign[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN1, MAX1, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Benign\\\",\\n zorder=2,\\n)\\n\\nplt.hist(\\n x=df_malicious[feature].values,\\n # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\\n bins=np.linspace(MIN2, MAX2, NUM_BINS),\\n density=IF_NORM,\\n label=\\\"Malicious\\\",\\n zorder=3,\\n)\\n\\n\\nplt.gca().set_xscale(\\\"log\\\")\\nplt.gca().set_yscale(\\\"log\\\")\\n\\nplt.legend()\\nplt.xlabel(feature)\\nplt.ylabel(ylabel_dict[IF_NORM])\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#feature = \"packetSizeMax\"\n",
"feature = \"packetSizeMax\"\n",
"\n",
"df_benign = pd_benign\n",
"df_malicious = pd_malicious\n",
"\n",
"\n",
"MIN1, MAX1 = (\n",
" df_benign[feature].min(),\n",
" df_benign[feature].max(),\n",
")\n",
"\n",
"\n",
"MIN2, MAX2 = (\n",
" df_malicious[feature].min(),\n",
" df_malicious[feature].max(),\n",
")\n",
"\n",
"\n",
"NUM_BINS = 50\n",
"\n",
"IF_NORM = True\n",
"\n",
"ylabel_dict = {True: \"Density\", False: \"Frequency\"}\n",
"\n",
"plt.hist(\n",
" x=df_benign[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN1, MAX1, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Benign\", zorder=2\n",
")\n",
"\n",
"plt.hist(\n",
" x=df_malicious[feature].values,\n",
" # bins=10 ** np.linspace(np.log10(MIN1), np.log10(MAX1), NUM_BINS),\n",
" bins=np.linspace(MIN2, MAX2, NUM_BINS),\n",
" density=IF_NORM,\n",
" label=\"Malicious\", zorder=3\n",
")\n",
"\n",
"\n",
"plt.gca().set_xscale(\"log\")\n",
"plt.gca().set_yscale(\"log\")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(feature)\n",
"plt.ylabel(ylabel_dict[IF_NORM])\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Machine learning - feature importance"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clean dataset"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 11;\n",
" var nbb_unformatted_code = \"# Remove spurious entries from dataset.\\ndef clean_dataset(df):\\n assert isinstance(df, pd.DataFrame), \\\"df needs to be a pd.DataFrame\\\"\\n df.dropna(inplace=True)\\n\\n df_X = df.iloc[:, :-1]\\n df_Y = df.iloc[:, -1]\\n\\n print(df.shape, df_X.shape, df_Y.shape)\\n indices_to_keep = ~df_X.isin([np.nan, np.inf, -np.inf]).any(1)\\n return df_X[indices_to_keep].astype(np.float64).values, df_Y[indices_to_keep].values\";\n",
" var nbb_formatted_code = \"# Remove spurious entries from dataset.\\ndef clean_dataset(df):\\n assert isinstance(df, pd.DataFrame), \\\"df needs to be a pd.DataFrame\\\"\\n df.dropna(inplace=True)\\n\\n df_X = df.iloc[:, :-1]\\n df_Y = df.iloc[:, -1]\\n\\n print(df.shape, df_X.shape, df_Y.shape)\\n indices_to_keep = ~df_X.isin([np.nan, np.inf, -np.inf]).any(1)\\n return df_X[indices_to_keep].astype(np.float64).values, df_Y[indices_to_keep].values\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Remove spurious entries from dataset.\n",
"def clean_dataset(df):\n",
" assert isinstance(df, pd.DataFrame), \"df needs to be a pd.DataFrame\"\n",
" df.dropna(inplace=True)\n",
"\n",
" df_X = df.iloc[:, :-1]\n",
" df_Y = df.iloc[:, -1]\n",
"\n",
" print(df.shape, df_X.shape, df_Y.shape)\n",
" indices_to_keep = ~df_X.isin([np.nan, np.inf, -np.inf]).any(1)\n",
" return df_X[indices_to_keep].astype(np.float64).values, df_Y[indices_to_keep].values"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get feature and class arrays (X and y.)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(28962, 40) (28962, 39) (28962,)\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 12;\n",
" var nbb_unformatted_code = \"# Get feature and class arrays (X and y.)\\npd_comb_features_cp = pd_comb_features.copy(deep=True)\\n\\nX, y = clean_dataset(pd_comb_features_cp)\";\n",
" var nbb_formatted_code = \"# Get feature and class arrays (X and y.)\\npd_comb_features_cp = pd_comb_features.copy(deep=True)\\n\\nX, y = clean_dataset(pd_comb_features_cp)\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Get feature and class arrays (X and y.)\n",
"pd_comb_features_cp = pd_comb_features.copy(deep=True)\n",
"\n",
"X, y = clean_dataset(pd_comb_features_cp)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Train test split"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(20273, 39) (8689, 39)\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 13;\n",
" var nbb_unformatted_code = \"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)\\n\\nprint(X_train.shape, X_test.shape)\";\n",
" var nbb_formatted_code = \"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)\\n\\nprint(X_train.shape, X_test.shape)\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)\n",
"\n",
"print(X_train.shape, X_test.shape)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Scale data"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 14;\n",
" var nbb_unformatted_code = \"scaler = StandardScaler() # MinMaxScaler\\nX_train_scale = scaler.fit_transform(X_train)\\nX_test_scale = scaler.transform(X_test)\";\n",
" var nbb_formatted_code = \"scaler = StandardScaler() # MinMaxScaler\\nX_train_scale = scaler.fit_transform(X_train)\\nX_test_scale = scaler.transform(X_test)\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"scaler = StandardScaler() # MinMaxScaler\n",
"X_train_scale = scaler.fit_transform(X_train)\n",
"X_test_scale = scaler.transform(X_test)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Weighted Logistic Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hyperparameter grid search."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 15;\n",
" var nbb_unformatted_code = \"# Class weights.\\nw = [\\n {0: 0.10, 1: 99.90},\\n {0: 0.25, 1: 99.75},\\n {0: 0.50, 1: 99.50},\\n {0: 0.75, 1: 99.25},\\n {0: 1.00, 1: 99.00},\\n {\\n 0: 100\\n * np.sum(y == \\\"Malicious\\\")\\n / (np.sum(y == \\\"Benign\\\") + np.sum(y == \\\"Malicious\\\")),\\n 1: 100\\n * np.sum(y == \\\"Benign\\\")\\n / (np.sum(y == \\\"Benign\\\") + np.sum(y == \\\"Malicious\\\")),\\n },\\n]\\n\\n# Inverse of regularization strength.\\ncrange = np.arange(0.1, 1.0, 0.2)\\n\\n\\n# Hyperparameter grid.\\nhyperparam_grid = {\\n \\\"class_weight\\\": w,\\n \\\"penalty\\\": [\\\"l1\\\", \\\"l2\\\"],\\n \\\"C\\\": crange,\\n \\\"fit_intercept\\\": [True, False],\\n}\";\n",
" var nbb_formatted_code = \"# Class weights.\\nw = [\\n {0: 0.10, 1: 99.90},\\n {0: 0.25, 1: 99.75},\\n {0: 0.50, 1: 99.50},\\n {0: 0.75, 1: 99.25},\\n {0: 1.00, 1: 99.00},\\n {\\n 0: 100\\n * np.sum(y == \\\"Malicious\\\")\\n / (np.sum(y == \\\"Benign\\\") + np.sum(y == \\\"Malicious\\\")),\\n 1: 100\\n * np.sum(y == \\\"Benign\\\")\\n / (np.sum(y == \\\"Benign\\\") + np.sum(y == \\\"Malicious\\\")),\\n },\\n]\\n\\n# Inverse of regularization strength.\\ncrange = np.arange(0.1, 1.0, 0.2)\\n\\n\\n# Hyperparameter grid.\\nhyperparam_grid = {\\n \\\"class_weight\\\": w,\\n \\\"penalty\\\": [\\\"l1\\\", \\\"l2\\\"],\\n \\\"C\\\": crange,\\n \\\"fit_intercept\\\": [True, False],\\n}\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Class weights.\n",
"w = [\n",
" {0: 0.10, 1: 99.90},\n",
" {0: 0.25, 1: 99.75},\n",
" {0: 0.50, 1: 99.50},\n",
" {0: 0.75, 1: 99.25},\n",
" {0: 1.00, 1: 99.00},\n",
" {\n",
" 0: 100\n",
" * np.sum(y == \"Malicious\")\n",
" / (np.sum(y == \"Benign\") + np.sum(y == \"Malicious\")),\n",
" 1: 100\n",
" * np.sum(y == \"Benign\")\n",
" / (np.sum(y == \"Benign\") + np.sum(y == \"Malicious\")),\n",
" },\n",
"]\n",
"\n",
"# Inverse of regularization strength.\n",
"crange = np.arange(0.1, 1.0, 0.2)\n",
"\n",
"\n",
"# Hyperparameter grid.\n",
"hyperparam_grid = {\n",
" \"class_weight\": w,\n",
" \"penalty\": [\"l1\", \"l2\"],\n",
" \"C\": crange,\n",
" \"fit_intercept\": [True, False],\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Prepare samples."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 16;\n",
" var nbb_unformatted_code = \"# String to int for classes\\ny_train2 = np.copy(y_train)\\ny_train2[np.where(y_train == \\\"Benign\\\")[0]] = 0\\ny_train2[np.where(y_train == \\\"Malicious\\\")[0]] = 1\";\n",
" var nbb_formatted_code = \"# String to int for classes\\ny_train2 = np.copy(y_train)\\ny_train2[np.where(y_train == \\\"Benign\\\")[0]] = 0\\ny_train2[np.where(y_train == \\\"Malicious\\\")[0]] = 1\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# String to int for classes\n",
"y_train2 = np.copy(y_train)\n",
"y_train2[np.where(y_train == \"Benign\")[0]] = 0\n",
"y_train2[np.where(y_train == \"Malicious\")[0]] = 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model fitting."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/siddharthsatpathy/opt/anaconda3/lib/python3.8/site-packages/scikit_learn-1.0.dev0-py3.8-macosx-10.9-x86_64.egg/sklearn/model_selection/_search.py:890: UserWarning: One or more of the test scores are non-finite: [ nan 0.9880426 nan 0.98095783 nan 0.99057238\n",
" nan 0.97893785 nan 0.99171251 nan 0.97658718\n",
" nan 0.99194833 nan 0.97491777 nan 0.99202053\n",
" nan 0.97368655 nan 0.99198866 nan 0.97435697\n",
" nan 0.98991559 nan 0.98147736 nan 0.99206716\n",
" nan 0.97907415 nan 0.99294926 nan 0.97651238\n",
" nan 0.99310424 nan 0.97479531 nan 0.99329743\n",
" nan 0.97358621 nan 0.99321499 nan 0.97423402\n",
" nan 0.9905359 nan 0.98155072 nan 0.99265558\n",
" nan 0.97911204 nan 0.99344045 nan 0.97649611\n",
" nan 0.99376651 nan 0.97475562 nan 0.99400771\n",
" nan 0.97355775 nan 0.99385109 nan 0.97419971\n",
" nan 0.99099631 nan 0.98158927 nan 0.99312902\n",
" nan 0.97911352 nan 0.99379647 nan 0.97649009\n",
" nan 0.99421899 nan 0.97475513 nan 0.99447011\n",
" nan 0.97355238 nan 0.99435966 nan 0.97419141\n",
" nan 0.99141737 nan 0.98158634 nan 0.99345803\n",
" nan 0.97914409 nan 0.99406938 nan 0.9764844\n",
" nan 0.99454865 nan 0.97473854 nan 0.99480042\n",
" nan 0.97354408 nan 0.99466787 nan 0.97418263]\n",
" warnings.warn(\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best score: 0.9948004205120142 with param: {'C': 0.9000000000000001, 'class_weight': {0: 1.0, 1: 99.0}, 'fit_intercept': True, 'penalty': 'l2'}\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/siddharthsatpathy/opt/anaconda3/lib/python3.8/site-packages/scikit_learn-1.0.dev0-py3.8-macosx-10.9-x86_64.egg/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
"\n",
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
"Please also refer to the documentation for alternative solver options:\n",
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
" n_iter_i = _check_optimize_result(\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 17;\n",
" var nbb_unformatted_code = \"# logistic model classifier.\\nlg = LogisticRegression(random_state=13)\\n\\n# define evaluation procedure\\ngrid = GridSearchCV(\\n lg, hyperparam_grid, scoring=\\\"roc_auc\\\", cv=10, n_jobs=-1, refit=True\\n)\\ngrid.fit(X_train_scale, y_train2.astype(\\\"int32\\\"))\\n\\nprint(f\\\"Best score: {grid.best_score_} with param: {grid.best_params_}\\\")\";\n",
" var nbb_formatted_code = \"# logistic model classifier.\\nlg = LogisticRegression(random_state=13)\\n\\n# define evaluation procedure\\ngrid = GridSearchCV(\\n lg, hyperparam_grid, scoring=\\\"roc_auc\\\", cv=10, n_jobs=-1, refit=True\\n)\\ngrid.fit(X_train_scale, y_train2.astype(\\\"int32\\\"))\\n\\nprint(f\\\"Best score: {grid.best_score_} with param: {grid.best_params_}\\\")\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# logistic model classifier.\n",
"lg = LogisticRegression(random_state=13)\n",
"\n",
"# define evaluation procedure\n",
"grid = GridSearchCV(\n",
" lg, hyperparam_grid, scoring=\"roc_auc\", cv=10, n_jobs=-1, refit=True\n",
")\n",
"grid.fit(X_train_scale, y_train2.astype(\"int32\"))\n",
"\n",
"print(f\"Best score: {grid.best_score_} with param: {grid.best_params_}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test perfomance."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy Score: 0.9766371274024629\n",
"Confusion Matrix: \n",
"[[8418 202]\n",
" [ 1 68]]\n",
"Area Under Curve: 0.9810366858334173\n",
"Recall score (Pct of true malicious detected): 98.55072463768117\n",
"Data reduction: 3.11 percent\n",
"Pct malicious in data sent to console: 25.19 percent\n",
"F1 score: 0.9834254890707712\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 18;\n",
" var nbb_unformatted_code = \"# test\\ny_pred_wt = grid.predict(X_test_scale)\\n\\ny_test2 = np.copy(y_test)\\ny_test2[np.where(y_test == \\\"Benign\\\")[0]] = 0\\ny_test2[np.where(y_test == \\\"Malicious\\\")[0]] = 1\\n\\n\\n# performance\\nconf_mat = confusion_matrix(y_test2.astype(\\\"int32\\\"), y_pred_wt)\\n\\nprint(f\\\"Accuracy Score: {accuracy_score(y_test2.astype('int32'),y_pred_wt)}\\\")\\nprint(f\\\"Confusion Matrix: \\\\n{confusion_matrix(y_test2.astype('int32'), y_pred_wt)}\\\")\\nprint(f\\\"Area Under Curve: {roc_auc_score(y_test2.astype('int32'), y_pred_wt)}\\\")\\nprint(\\n f\\\"Recall score (Pct of true malicious detected): {100*recall_score(y_test2.astype('int32'), y_pred_wt)}\\\"\\n)\\nprint(\\n f\\\"Data reduction: { np.round( 100.0 * conf_mat.T[1].sum() / conf_mat.sum() , 2 )} percent\\\"\\n)\\n\\nprint(\\n f\\\"Pct malicious in data sent to console: { np.round( 100.0 * conf_mat.T[1][1] / conf_mat.T[1].sum() , 2 )} percent\\\"\\n)\\n\\nprint(\\\"F1 score: \\\", f1_score(y_test2.astype(\\\"int32\\\"), y_pred_wt, average=\\\"weighted\\\"))\";\n",
" var nbb_formatted_code = \"# test\\ny_pred_wt = grid.predict(X_test_scale)\\n\\ny_test2 = np.copy(y_test)\\ny_test2[np.where(y_test == \\\"Benign\\\")[0]] = 0\\ny_test2[np.where(y_test == \\\"Malicious\\\")[0]] = 1\\n\\n\\n# performance\\nconf_mat = confusion_matrix(y_test2.astype(\\\"int32\\\"), y_pred_wt)\\n\\nprint(f\\\"Accuracy Score: {accuracy_score(y_test2.astype('int32'),y_pred_wt)}\\\")\\nprint(f\\\"Confusion Matrix: \\\\n{confusion_matrix(y_test2.astype('int32'), y_pred_wt)}\\\")\\nprint(f\\\"Area Under Curve: {roc_auc_score(y_test2.astype('int32'), y_pred_wt)}\\\")\\nprint(\\n f\\\"Recall score (Pct of true malicious detected): {100*recall_score(y_test2.astype('int32'), y_pred_wt)}\\\"\\n)\\nprint(\\n f\\\"Data reduction: { np.round( 100.0 * conf_mat.T[1].sum() / conf_mat.sum() , 2 )} percent\\\"\\n)\\n\\nprint(\\n f\\\"Pct malicious in data sent to console: { np.round( 100.0 * conf_mat.T[1][1] / conf_mat.T[1].sum() , 2 )} percent\\\"\\n)\\n\\nprint(\\\"F1 score: \\\", f1_score(y_test2.astype(\\\"int32\\\"), y_pred_wt, average=\\\"weighted\\\"))\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# test\n",
"y_pred_wt = grid.predict(X_test_scale)\n",
"\n",
"y_test2 = np.copy(y_test)\n",
"y_test2[np.where(y_test == \"Benign\")[0]] = 0\n",
"y_test2[np.where(y_test == \"Malicious\")[0]] = 1\n",
"\n",
"\n",
"# performance\n",
"conf_mat = confusion_matrix(y_test2.astype(\"int32\"), y_pred_wt)\n",
"\n",
"print(f\"Accuracy Score: {accuracy_score(y_test2.astype('int32'),y_pred_wt)}\")\n",
"print(f\"Confusion Matrix: \\n{confusion_matrix(y_test2.astype('int32'), y_pred_wt)}\")\n",
"print(f\"Area Under Curve: {roc_auc_score(y_test2.astype('int32'), y_pred_wt)}\")\n",
"print(\n",
" f\"Recall score (Pct of true malicious detected): {100*recall_score(y_test2.astype('int32'), y_pred_wt)}\"\n",
")\n",
"print(\n",
" f\"Data reduction: { np.round( 100.0 * conf_mat.T[1].sum() / conf_mat.sum() , 2 )} percent\"\n",
")\n",
"\n",
"print(\n",
" f\"Pct malicious in data sent to console: { np.round( 100.0 * conf_mat.T[1][1] / conf_mat.T[1].sum() , 2 )} percent\"\n",
")\n",
"\n",
"print(\"F1 score: \", f1_score(y_test2.astype(\"int32\"), y_pred_wt, average=\"weighted\"))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Visualization of results"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"code_folding": [
0
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 19;\n",
" var nbb_unformatted_code = \"# Confusion matrix\\nxarray = [\\\"Benign\\\", \\\"Malicious\\\"]\\nyarray = [\\\"Benign\\\", \\\"Malicious\\\"]\\n\\nconf_matrix = confusion_matrix(y_test2.astype(\\\"int32\\\"), y_pred_wt)\\n\\n\\nfig, ax = plt.subplots()\\nim = ax.imshow(conf_matrix, cmap=plt.cm.jet, clim=(0, 1000))\\n\\n# Show all ticks and label them with the respective list entries\\nax.set_xticks(np.arange(len(xarray)))\\nax.set_xticklabels(xarray)\\n\\nax.set_yticks(np.arange(len(yarray)))\\nax.set_yticklabels(yarray)\\n\\n# Rotate the tick labels and set their alignment.\\nplt.setp(ax.get_xticklabels(), rotation=45, ha=\\\"right\\\", rotation_mode=\\\"anchor\\\")\\n\\n# Loop over data dimensions and create text annotations.\\nfor i in range(len(xarray)):\\n for j in range(len(yarray)):\\n text = ax.text(j, i, conf_matrix[i, j], ha=\\\"center\\\", va=\\\"center\\\", color=\\\"w\\\")\\n\\nax.set_title(\\\"Confusion matrix\\\")\\nfig.tight_layout()\\nplt.show()\";\n",
" var nbb_formatted_code = \"# Confusion matrix\\nxarray = [\\\"Benign\\\", \\\"Malicious\\\"]\\nyarray = [\\\"Benign\\\", \\\"Malicious\\\"]\\n\\nconf_matrix = confusion_matrix(y_test2.astype(\\\"int32\\\"), y_pred_wt)\\n\\n\\nfig, ax = plt.subplots()\\nim = ax.imshow(conf_matrix, cmap=plt.cm.jet, clim=(0, 1000))\\n\\n# Show all ticks and label them with the respective list entries\\nax.set_xticks(np.arange(len(xarray)))\\nax.set_xticklabels(xarray)\\n\\nax.set_yticks(np.arange(len(yarray)))\\nax.set_yticklabels(yarray)\\n\\n# Rotate the tick labels and set their alignment.\\nplt.setp(ax.get_xticklabels(), rotation=45, ha=\\\"right\\\", rotation_mode=\\\"anchor\\\")\\n\\n# Loop over data dimensions and create text annotations.\\nfor i in range(len(xarray)):\\n for j in range(len(yarray)):\\n text = ax.text(j, i, conf_matrix[i, j], ha=\\\"center\\\", va=\\\"center\\\", color=\\\"w\\\")\\n\\nax.set_title(\\\"Confusion matrix\\\")\\nfig.tight_layout()\\nplt.show()\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Confusion matrix\n",
"xarray = [\"Benign\", \"Malicious\"]\n",
"yarray = [\"Benign\", \"Malicious\"]\n",
"\n",
"conf_matrix = confusion_matrix(y_test2.astype(\"int32\"), y_pred_wt)\n",
"\n",
"\n",
"fig, ax = plt.subplots()\n",
"im = ax.imshow(conf_matrix, cmap=plt.cm.jet, clim=(0, 1000))\n",
"\n",
"# Show all ticks and label them with the respective list entries\n",
"ax.set_xticks(np.arange(len(xarray)))\n",
"ax.set_xticklabels(xarray)\n",
"\n",
"ax.set_yticks(np.arange(len(yarray)))\n",
"ax.set_yticklabels(yarray)\n",
"\n",
"# Rotate the tick labels and set their alignment.\n",
"plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\", rotation_mode=\"anchor\")\n",
"\n",
"# Loop over data dimensions and create text annotations.\n",
"for i in range(len(xarray)):\n",
" for j in range(len(yarray)):\n",
" text = ax.text(j, i, conf_matrix[i, j], ha=\"center\", va=\"center\", color=\"w\")\n",
"\n",
"ax.set_title(\"Confusion matrix\")\n",
"fig.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Best fit parameters."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/siddharthsatpathy/opt/anaconda3/lib/python3.8/site-packages/scikit_learn-1.0.dev0-py3.8-macosx-10.9-x86_64.egg/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
"\n",
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
"Please also refer to the documentation for alternative solver options:\n",
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
" n_iter_i = _check_optimize_result(\n"
]
},
{
"data": {
"text/plain": [
"LogisticRegression(C=0.9000000000000001, class_weight={0: 1.0, 1: 99.0},\n",
" max_iter=5, random_state=13)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 20;\n",
" var nbb_unformatted_code = \"# define model\\nbest_fit_model = LogisticRegression(\\n class_weight=grid.best_params_[\\\"class_weight\\\"],\\n penalty=grid.best_params_[\\\"penalty\\\"],\\n C=grid.best_params_[\\\"C\\\"],\\n fit_intercept=grid.best_params_[\\\"fit_intercept\\\"],\\n random_state=13,\\n max_iter=5,\\n)\\n\\n# fit it\\nbest_fit_model.fit(X_train_scale, y_train2.astype(\\\"int32\\\"))\";\n",
" var nbb_formatted_code = \"# define model\\nbest_fit_model = LogisticRegression(\\n class_weight=grid.best_params_[\\\"class_weight\\\"],\\n penalty=grid.best_params_[\\\"penalty\\\"],\\n C=grid.best_params_[\\\"C\\\"],\\n fit_intercept=grid.best_params_[\\\"fit_intercept\\\"],\\n random_state=13,\\n max_iter=5,\\n)\\n\\n# fit it\\nbest_fit_model.fit(X_train_scale, y_train2.astype(\\\"int32\\\"))\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# define model\n",
"best_fit_model = LogisticRegression(\n",
" class_weight=grid.best_params_[\"class_weight\"],\n",
" penalty=grid.best_params_[\"penalty\"],\n",
" C=grid.best_params_[\"C\"],\n",
" fit_intercept=grid.best_params_[\"fit_intercept\"],\n",
" random_state=13,\n",
" max_iter=5,\n",
")\n",
"\n",
"# fit it\n",
"best_fit_model.fit(X_train_scale, y_train2.astype(\"int32\"))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Save parameters."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 30;\n",
" var nbb_unformatted_code = \"np.savetxt(\\\"mean.txt\\\", scaler.mean_, delimiter=\\\",\\\")\\nnp.savetxt(\\\"std.txt\\\", scaler.scale_, delimiter=\\\",\\\")\\nnp.savetxt(\\\"weights.txt\\\", best_fit_model.coef_[0], delimiter=\\\",\\\")\\nnp.savetxt(\\\"intercepts.txt\\\", best_fit_model.intercept_, delimiter=\\\",\\\")\";\n",
" var nbb_formatted_code = \"np.savetxt(\\\"mean.txt\\\", scaler.mean_, delimiter=\\\",\\\")\\nnp.savetxt(\\\"std.txt\\\", scaler.scale_, delimiter=\\\",\\\")\\nnp.savetxt(\\\"weights.txt\\\", best_fit_model.coef_[0], delimiter=\\\",\\\")\\nnp.savetxt(\\\"intercepts.txt\\\", best_fit_model.intercept_, delimiter=\\\",\\\")\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"np.savetxt(\"mean.txt\", scaler.mean_, delimiter=\",\")\n",
"np.savetxt(\"std.txt\", scaler.scale_, delimiter=\",\")\n",
"np.savetxt(\"weights.txt\", best_fit_model.coef_[0], delimiter=\",\")\n",
"np.savetxt(\"intercept.txt\", best_fit_model.intercept_, delimiter=\",\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Feature importance scores"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 21;\n",
" var nbb_unformatted_code = \"important_features = pd_comb_features_cp.iloc[:, :-1].columns.values[\\n np.argsort(-1 * np.abs(best_fit_model.coef_[0]))\\n]\";\n",
" var nbb_formatted_code = \"important_features = pd_comb_features_cp.iloc[:, :-1].columns.values[\\n np.argsort(-1 * np.abs(best_fit_model.coef_[0]))\\n]\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"important_features = pd_comb_features_cp.iloc[:, :-1].columns.values[\n",
" np.argsort(-1 * np.abs(best_fit_model.coef_[0]))\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['flowLength', 'bwdFlowLength', 'packetSizeMin', 'bwdPacketSizeMin',\n",
" 'bwdPacketSizeTotalPerTime', 'packetSizeTotalPerTime',\n",
" 'packetSizeMax', 'bwdPacketSizeMax', 'bwdFlowLengthPerTime',\n",
" 'flowLengthPerTime', 'bwdIATTotal', 'flowDuration', 'IATMean',\n",
" 'bwdIATMean', 'packetSizeTotal', 'bwdPacketSizeTotal', 'bwdIATStd',\n",
" 'IATStd', 'bwdPacketSizeStd', 'packetSizeStd', 'bwdIATMax',\n",
" 'IATMax', 'packetSizeMean', 'fwdPacketSizeMean',\n",
" 'bwdPacketSizeMean', 'IATMin', 'bwdIATMin',\n",
" 'fwdPacketSizeTotalPerTime', 'fwdIATStd', 'fwdPacketSizeTotal',\n",
" 'fwdIATMin', 'fwdIATMax', 'fwdPacketSizeMax', 'fwdPacketSizeMin',\n",
" 'fwdFlowLengthPerTime', 'fwdPacketSizeStd', 'fwdFlowLength',\n",
" 'fwdIATTotal', 'fwdIATMean'], dtype=object)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 22;\n",
" var nbb_unformatted_code = \"important_features\";\n",
" var nbb_formatted_code = \"important_features\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"important_features"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}