Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
I
IDS-DataMining
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jung Euicheol
IDS-DataMining
Commits
230e8e68
Commit
230e8e68
authored
3 years ago
by
Lani Jung
Browse files
Options
Downloads
Patches
Plain Diff
add roc curve
parent
be23b7d3
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
experiment/decision tree classifier/DecisionTree.ipynb
+58
-13
58 additions, 13 deletions
experiment/decision tree classifier/DecisionTree.ipynb
experiment/random forest/RandomForest.ipynb
+63
-13
63 additions, 13 deletions
experiment/random forest/RandomForest.ipynb
with
121 additions
and
26 deletions
experiment/decision tree classifier/DecisionTree.ipynb
+
58
−
13
View file @
230e8e68
...
@@ -73,7 +73,7 @@
...
@@ -73,7 +73,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
6
,
"execution_count":
2
,
"metadata": {},
"metadata": {},
"outputs": [
"outputs": [
{
{
...
@@ -141,7 +141,7 @@
...
@@ -141,7 +141,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
7
,
"execution_count":
3
,
"metadata": {},
"metadata": {},
"outputs": [
"outputs": [
{
{
...
@@ -162,7 +162,7 @@
...
@@ -162,7 +162,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
8
,
"execution_count":
4
,
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
...
@@ -172,7 +172,7 @@
...
@@ -172,7 +172,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
10
,
"execution_count":
5
,
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
...
@@ -195,7 +195,7 @@
...
@@ -195,7 +195,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
12
,
"execution_count":
6
,
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
...
@@ -205,7 +205,7 @@
...
@@ -205,7 +205,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
30
,
"execution_count":
7
,
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
...
@@ -223,7 +223,7 @@
...
@@ -223,7 +223,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
15
,
"execution_count":
8
,
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
"source": [
"source": [
...
@@ -233,16 +233,16 @@
...
@@ -233,16 +233,16 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count":
18
,
"execution_count":
9
,
"metadata": {},
"metadata": {},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
"text/plain": [
"text/plain": [
"(0.99
53625632377741
, 0.99830866807611, 0.996
8334388853705
, None)"
"(0.99
41052631578947
, 0.99830866807611, 0.996
2025316455696
, None)"
]
]
},
},
"execution_count":
18
,
"execution_count":
9
,
"metadata": {},
"metadata": {},
"output_type": "execute_result"
"output_type": "execute_result"
}
}
...
@@ -255,16 +255,16 @@
...
@@ -255,16 +255,16 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 1
9
,
"execution_count": 1
0
,
"metadata": {},
"metadata": {},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
"text/plain": [
"text/plain": [
"(0.9957
788096243141, 0.9974630021141649, 0.99662019433882
56, None)"
"(0.9957
805907172996, 0.9978858350951374, 0.9968321013727
56, None)"
]
]
},
},
"execution_count": 1
9
,
"execution_count": 1
0
,
"metadata": {},
"metadata": {},
"output_type": "execute_result"
"output_type": "execute_result"
}
}
...
@@ -272,6 +272,51 @@
...
@@ -272,6 +272,51 @@
"source": [
"source": [
"precision_recall_fscore_support(y_test, clf2_y_pred, average=\"binary\")"
"precision_recall_fscore_support(y_test, clf2_y_pred, average=\"binary\")"
]
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import roc_curve\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def plot_roc_curve(fper, tper):\n",
" plt.plot(fper, tper, color='red', label='ROC')\n",
" plt.plot([0, 1], [0, 1], color='green', linestyle='--')\n",
" plt.xlabel('False Positive Rate')\n",
" plt.ylabel('True Positive Rate')\n",
" plt.title('Receiver Operating Characteristic Curve')\n",
" plt.legend()\n",
" plt.show()\n",
" \n",
"\n",
"prob = clf2.predict_proba(X_test)\n",
"prob = prob[:, 1]\n",
"fper, tper, thresholds = roc_curve(y_test, prob)\n",
"plot_roc_curve(fper, tper)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
}
],
],
"metadata": {
"metadata": {
...
...
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
from sklearn import tree
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.model_selection import train_test_split
import numpy as np
import numpy as np
import pandas as pd
import pandas as pd
df = pd.read_csv("../../dataset/DM_data.csv")
df = pd.read_csv("../../dataset/DM_data.csv")
df.info()
df.info()
```
```
%% Output
%% Output
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25192 entries, 0 to 25191
RangeIndex: 25192 entries, 0 to 25191
Data columns (total 40 columns):
Data columns (total 40 columns):
# Column Non-Null Count Dtype
# Column Non-Null Count Dtype
--- ------ -------------- -----
--- ------ -------------- -----
0 duration 25192 non-null int64
0 duration 25192 non-null int64
1 protocol_type 25192 non-null int64
1 protocol_type 25192 non-null int64
2 service 25192 non-null int64
2 service 25192 non-null int64
3 flag 25192 non-null int64
3 flag 25192 non-null int64
4 src_bytes 25192 non-null int64
4 src_bytes 25192 non-null int64
5 dst_bytes 25192 non-null int64
5 dst_bytes 25192 non-null int64
6 land 25192 non-null int64
6 land 25192 non-null int64
7 wrong_fragment 25192 non-null int64
7 wrong_fragment 25192 non-null int64
8 hot 25192 non-null int64
8 hot 25192 non-null int64
9 num_failed_logins 25192 non-null int64
9 num_failed_logins 25192 non-null int64
10 logged_in 25192 non-null int64
10 logged_in 25192 non-null int64
11 num_compromised 25192 non-null int64
11 num_compromised 25192 non-null int64
12 root_shell 25192 non-null int64
12 root_shell 25192 non-null int64
13 su_attempted 25192 non-null int64
13 su_attempted 25192 non-null int64
14 num_root 25192 non-null int64
14 num_root 25192 non-null int64
15 num_file_creations 25192 non-null int64
15 num_file_creations 25192 non-null int64
16 num_shells 25192 non-null int64
16 num_shells 25192 non-null int64
17 num_access_files 25192 non-null int64
17 num_access_files 25192 non-null int64
18 is_guest_login 25192 non-null int64
18 is_guest_login 25192 non-null int64
19 count 25192 non-null int64
19 count 25192 non-null int64
20 srv_count 25192 non-null int64
20 srv_count 25192 non-null int64
21 serror_rate 25192 non-null float64
21 serror_rate 25192 non-null float64
22 srv_serror_rate 25192 non-null float64
22 srv_serror_rate 25192 non-null float64
23 rerror_rate 25192 non-null float64
23 rerror_rate 25192 non-null float64
24 srv_rerror_rate 25192 non-null float64
24 srv_rerror_rate 25192 non-null float64
25 same_srv_rate 25192 non-null float64
25 same_srv_rate 25192 non-null float64
26 diff_srv_rate 25192 non-null float64
26 diff_srv_rate 25192 non-null float64
27 srv_diff_host_rate 25192 non-null float64
27 srv_diff_host_rate 25192 non-null float64
28 dst_host_count 25192 non-null int64
28 dst_host_count 25192 non-null int64
29 dst_host_srv_count 25192 non-null int64
29 dst_host_srv_count 25192 non-null int64
30 dst_host_same_srv_rate 25192 non-null float64
30 dst_host_same_srv_rate 25192 non-null float64
31 dst_host_diff_srv_rate 25192 non-null float64
31 dst_host_diff_srv_rate 25192 non-null float64
32 dst_host_same_src_port_rate 25192 non-null float64
32 dst_host_same_src_port_rate 25192 non-null float64
33 dst_host_srv_diff_host_rate 25192 non-null float64
33 dst_host_srv_diff_host_rate 25192 non-null float64
34 dst_host_serror_rate 25192 non-null float64
34 dst_host_serror_rate 25192 non-null float64
35 dst_host_srv_serror_rate 25192 non-null float64
35 dst_host_srv_serror_rate 25192 non-null float64
36 dst_host_rerror_rate 25192 non-null float64
36 dst_host_rerror_rate 25192 non-null float64
37 dst_host_srv_rerror_rate 25192 non-null float64
37 dst_host_srv_rerror_rate 25192 non-null float64
38 class 25192 non-null int64
38 class 25192 non-null int64
39 index_num 25192 non-null int64
39 index_num 25192 non-null int64
dtypes: float64(15), int64(25)
dtypes: float64(15), int64(25)
memory usage: 7.7 MB
memory usage: 7.7 MB
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
X, y = df.drop(columns=["class", "index_num"]), df['class']
X, y = df.drop(columns=["class", "index_num"]), df['class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True, random_state=42)
X_train.reset_index(drop=True, inplace=True)
X_train.reset_index(drop=True, inplace=True)
X_test.reset_index(drop=True, inplace=True)
X_test.reset_index(drop=True, inplace=True)
y_train.reset_index(drop=True, inplace=True)
y_train.reset_index(drop=True, inplace=True)
X_test.reset_index(drop=True, inplace=True)
X_test.reset_index(drop=True, inplace=True)
X_train.info()
X_train.info()
```
```
%% Output
%% Output
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20153 entries, 0 to 20152
RangeIndex: 20153 entries, 0 to 20152
Data columns (total 38 columns):
Data columns (total 38 columns):
# Column Non-Null Count Dtype
# Column Non-Null Count Dtype
--- ------ -------------- -----
--- ------ -------------- -----
0 duration 20153 non-null int64
0 duration 20153 non-null int64
1 protocol_type 20153 non-null int64
1 protocol_type 20153 non-null int64
2 service 20153 non-null int64
2 service 20153 non-null int64
3 flag 20153 non-null int64
3 flag 20153 non-null int64
4 src_bytes 20153 non-null int64
4 src_bytes 20153 non-null int64
5 dst_bytes 20153 non-null int64
5 dst_bytes 20153 non-null int64
6 land 20153 non-null int64
6 land 20153 non-null int64
7 wrong_fragment 20153 non-null int64
7 wrong_fragment 20153 non-null int64
8 hot 20153 non-null int64
8 hot 20153 non-null int64
9 num_failed_logins 20153 non-null int64
9 num_failed_logins 20153 non-null int64
10 logged_in 20153 non-null int64
10 logged_in 20153 non-null int64
11 num_compromised 20153 non-null int64
11 num_compromised 20153 non-null int64
12 root_shell 20153 non-null int64
12 root_shell 20153 non-null int64
13 su_attempted 20153 non-null int64
13 su_attempted 20153 non-null int64
14 num_root 20153 non-null int64
14 num_root 20153 non-null int64
15 num_file_creations 20153 non-null int64
15 num_file_creations 20153 non-null int64
16 num_shells 20153 non-null int64
16 num_shells 20153 non-null int64
17 num_access_files 20153 non-null int64
17 num_access_files 20153 non-null int64
18 is_guest_login 20153 non-null int64
18 is_guest_login 20153 non-null int64
19 count 20153 non-null int64
19 count 20153 non-null int64
20 srv_count 20153 non-null int64
20 srv_count 20153 non-null int64
21 serror_rate 20153 non-null float64
21 serror_rate 20153 non-null float64
22 srv_serror_rate 20153 non-null float64
22 srv_serror_rate 20153 non-null float64
23 rerror_rate 20153 non-null float64
23 rerror_rate 20153 non-null float64
24 srv_rerror_rate 20153 non-null float64
24 srv_rerror_rate 20153 non-null float64
25 same_srv_rate 20153 non-null float64
25 same_srv_rate 20153 non-null float64
26 diff_srv_rate 20153 non-null float64
26 diff_srv_rate 20153 non-null float64
27 srv_diff_host_rate 20153 non-null float64
27 srv_diff_host_rate 20153 non-null float64
28 dst_host_count 20153 non-null int64
28 dst_host_count 20153 non-null int64
29 dst_host_srv_count 20153 non-null int64
29 dst_host_srv_count 20153 non-null int64
30 dst_host_same_srv_rate 20153 non-null float64
30 dst_host_same_srv_rate 20153 non-null float64
31 dst_host_diff_srv_rate 20153 non-null float64
31 dst_host_diff_srv_rate 20153 non-null float64
32 dst_host_same_src_port_rate 20153 non-null float64
32 dst_host_same_src_port_rate 20153 non-null float64
33 dst_host_srv_diff_host_rate 20153 non-null float64
33 dst_host_srv_diff_host_rate 20153 non-null float64
34 dst_host_serror_rate 20153 non-null float64
34 dst_host_serror_rate 20153 non-null float64
35 dst_host_srv_serror_rate 20153 non-null float64
35 dst_host_srv_serror_rate 20153 non-null float64
36 dst_host_rerror_rate 20153 non-null float64
36 dst_host_rerror_rate 20153 non-null float64
37 dst_host_srv_rerror_rate 20153 non-null float64
37 dst_host_srv_rerror_rate 20153 non-null float64
dtypes: float64(15), int64(23)
dtypes: float64(15), int64(23)
memory usage: 5.8 MB
memory usage: 5.8 MB
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
print(f"Shape of X_train: {X_train.shape}\nShape of X_test: {X_test.shape}")
print(f"Shape of X_train: {X_train.shape}\nShape of X_test: {X_test.shape}")
print(f"Shape of y_train: {y_train.shape}\nShape of y_test: {y_test.shape}")
print(f"Shape of y_train: {y_train.shape}\nShape of y_test: {y_test.shape}")
```
```
%% Output
%% Output
Shape of X_train: (20153, 38)
Shape of X_train: (20153, 38)
Shape of X_test: (5039, 38)
Shape of X_test: (5039, 38)
Shape of y_train: (20153,)
Shape of y_train: (20153,)
Shape of y_test: (5039,)
Shape of y_test: (5039,)
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
clf1 = tree.DecisionTreeClassifier()
clf1 = tree.DecisionTreeClassifier()
clf1 = clf1.fit(X_train, y_train)
clf1 = clf1.fit(X_train, y_train)
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
from IPython import display
from IPython import display
import graphviz
import graphviz
import os
import os
os.environ["PATH"] += os.pathsep + 'C:\\Users\\s\\anaconda3\\pkgs\\graphviz-2.38-hfd603c8_2\\Library\\bin\\graphviz'
os.environ["PATH"] += os.pathsep + 'C:\\Users\\s\\anaconda3\\pkgs\\graphviz-2.38-hfd603c8_2\\Library\\bin\\graphviz'
# 시각화
# 시각화
dot_data1 = tree.export_graphviz(clf1,
dot_data1 = tree.export_graphviz(clf1,
out_file = None,
out_file = None,
feature_names = X_train.columns,
feature_names = X_train.columns,
class_names = ["0", "1"],
class_names = ["0", "1"],
filled = True,
filled = True,
rounded = True,
rounded = True,
special_characters = True)
special_characters = True)
graph1 = graphviz.Source(dot_data1)
graph1 = graphviz.Source(dot_data1)
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
clf2 = tree.DecisionTreeClassifier(criterion = "entropy")
clf2 = tree.DecisionTreeClassifier(criterion = "entropy")
clf2 = clf2.fit(X_train, y_train)
clf2 = clf2.fit(X_train, y_train)
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
dot_data2 = tree.export_graphviz(clf2,
dot_data2 = tree.export_graphviz(clf2,
out_file = None,
out_file = None,
feature_names = X_train.columns,
feature_names = X_train.columns,
class_names = ["0", "1"],
class_names = ["0", "1"],
filled = True,
filled = True,
rounded = True,
rounded = True,
special_characters = True)
special_characters = True)
graph2 = graphviz.Source(dot_data2)
graph2 = graphviz.Source(dot_data2)
#graph2
#graph2
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
clf1_y_pred = clf1.predict(X_test)
clf1_y_pred = clf1.predict(X_test)
clf2_y_pred = clf2.predict(X_test)
clf2_y_pred = clf2.predict(X_test)
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
from sklearn.metrics import precision_recall_fscore_support
from sklearn.metrics import precision_recall_fscore_support
precision_recall_fscore_support(y_test, clf1_y_pred, average="binary")
precision_recall_fscore_support(y_test, clf1_y_pred, average="binary")
```
```
%% Output
%% Output
(0.99
53625632377741
, 0.99830866807611, 0.996
8334388853705
, None)
(0.99
41052631578947
, 0.99830866807611, 0.996
2025316455696
, None)
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
precision_recall_fscore_support(y_test, clf2_y_pred, average="binary")
precision_recall_fscore_support(y_test, clf2_y_pred, average="binary")
```
```
%% Output
%% Output
(0.9957788096243141, 0.9974630021141649, 0.9966201943388256, None)
(0.9957805907172996, 0.9978858350951374, 0.996832101372756, None)
%% Cell type:code id: tags:
```
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
def plot_roc_curve(fper, tper):
plt.plot(fper, tper, color='red', label='ROC')
plt.plot([0, 1], [0, 1], color='green', linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic Curve')
plt.legend()
plt.show()
prob = clf2.predict_proba(X_test)
prob = prob[:, 1]
fper, tper, thresholds = roc_curve(y_test, prob)
plot_roc_curve(fper, tper)
```
%% Output
%% Cell type:code id: tags:
```
```
...
...
This diff is collapsed.
Click to expand it.
experiment/random forest/RandomForest.ipynb
+
63
−
13
View file @
230e8e68
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment