-
Notifications
You must be signed in to change notification settings - Fork 0
/
Derin Ogrenme (Deep Learning).py
182 lines (127 loc) · 6.03 KB
/
Derin Ogrenme (Deep Learning).py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
import pandas as pd
import numpy as np
import time
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import MinMaxScaler
from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
import psutil
import os
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import to_categorical
print("Derin Öğrenme")
# Train ve Test Verisetlerini Oku
train = pd.read_csv('/content/drive/My Drive/Colab Notebooks/Derin öğrenme ile Ağ Anomali Yönetimi Sistemi ve Karşılaştırmalı Analizi/Train_Verileri.csv', header=None)
test = pd.read_csv('/content/drive/My Drive/Colab Notebooks/Derin öğrenme ile Ağ Anomali Yönetimi Sistemi ve Karşılaştırmalı Analizi/Test_Verileri.csv', header=None)
# Baslıklar.csv dosyasından kolon adlarını oku ve train ve test veri setlerinde kolon başlığı olarak ata
columns = pd.read_csv('/content/drive/My Drive/Colab Notebooks/Derin öğrenme ile Ağ Anomali Yönetimi Sistemi ve Karşılaştırmalı Analizi/Basliklar.csv', header=None)
columns.columns = ['name', 'type']
train.columns = columns['name']
test.columns = columns['name']
# Saldiri tiplerini oku
attackType = pd.read_csv('/content/drive/My Drive/Colab Notebooks/Derin öğrenme ile Ağ Anomali Yönetimi Sistemi ve Karşılaştırmalı Analizi/Saldiri_Tipleri.csv', header=None)
attackType.columns = ['Name', 'Type']
attackMap = {}
# (Sql join işlemine benzer) Mapping işlemi yap.
for i in range(len(attackType)):
attackMap[attackType['Name'][i]] = attackType['Type'][i]
print("Mapping İşlemi Yapıldı")
# train ve test verilerinde label kolonu oluştur ve mapping işlemini bu kolona bağla yani sonuç kolonu (etiketleme kolonu)
train['label'] = train['attack_type'].map(attackMap)
test['label'] = test['attack_type'].map(attackMap)
#Saldırıların sayısını bul
attackTypeCount = len(attackType['Type'].drop_duplicates())
attackNames = attackType['Type'].drop_duplicates().values.tolist()
print(str(attackTypeCount) + ' Sadırı Tipi Vardır')
print('Saldırılar Şunlardır:')
print(attackNames)
# LabelEncoder kullanarak nominal verileri nümerik değerlere çevir
for col in ['protocol_type', 'flag', 'service', 'label']:
le = LabelEncoder()
le.fit(train[col])
train[col] = le.transform(train[col])
le1 = LabelEncoder()
le1.fit(test[col])
test[col] = le1.transform(test[col])
# Test ve Train verilerindeki label kolonu etiket kolonumuz olduğundan farklı değişkenlerde tutalım
trainLabel = train['label']
testLabel = test['label']
#Test ve Train verilerindeki etiket kolonunu categorik verilere çevirelim
trainLabel = to_categorical(trainLabel, attackTypeCount)
testLabel = to_categorical(testLabel, attackTypeCount)
# attack_type ve label kolonları sonuç kolonları olduğundan bunları verisetlerinden atalım
train.drop(['attack_type', 'label'], axis=1, inplace=True)
test.drop(['attack_type', 'label'], axis=1, inplace=True)
# Stadart Scaler ile verileri 0-1 aralığına ölçekliyelim
scaler = MinMaxScaler()
train = scaler.fit_transform(train)
test = scaler.fit_transform(test)
total = np.concatenate([train, test] )
# PCA - Temel Bileşenler Analizi
pca = PCA(n_components=41, random_state=100)
pca.fit(total)
train = pca.transform(train)
test = pca.transform(test)
print("Kullanılan Özellik Sayısı : %d" % train.shape[1])
# seed değerini ayarlayalım
seed = 7
np.random.seed(seed)
# Temel modelin tanımlanması
def baseline_model():
# Modelin oluşturulması
model = Sequential()
model.add(Dense(30, input_dim=41, activation='relu'))
model.add(Dense(30, activation='relu'))
model.add(Dense(attackTypeCount, activation='softmax'))
# Modelin derlenmesi
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
DLC = KerasClassifier(build_fn=baseline_model, epochs=10, batch_size=5, verbose=0)
# K katlamalı çapraz doğrulama
startTime = time.clock()
kfold = KFold(n_splits=5, shuffle=True, random_state=seed)
results = cross_val_score(DLC, train, trainLabel, cv=kfold)
endTime = time.clock()
print("5-Katlamalı çapraz doğrulamanın gerçekleştirim zamanı : %f" % (endTime - startTime))
print("5-Katlamalı çapraz doğrulamanın ortalaması: %% %.2f" % (results.mean()*100))
# Modelin eğitilmesi
startTime = time.clock()
DLC.fit(train, trainLabel, epochs =10)
endTime = time.clock()
print("Modelin eğitiminin gerçekleştirim süresi : %f" % (endTime - startTime))
# Modelin test edilmesi
startTime = time.clock()
pred = DLC.predict(test)
endTime = time.clock()
cpuUsage = psutil.cpu_percent()
pid = os.getpid()
py = psutil.Process(pid)
memoryUse = py.memory_info()[0] / 2. ** 30
print("Modelin testinin gerçekleştirim süresi : %f" % (endTime - startTime))
print("Kullanılan hafıza : %f GB , Kullanılan işlemci : %f" % (memoryUse, cpuUsage))
pred = to_categorical(pred,attackTypeCount)
pred = np.array(pred)
testLabel = np.array(testLabel)
#Karışıklık Matrisi
con_matrix = confusion_matrix(pred.argmax(axis=1), testLabel.argmax(axis=1)) #, labels=Classes
print("Karışıklık Matrisi : ")
print(con_matrix)
# Accuracy ve detection rate değerşerini hesapla
acc = accuracy_score(pred.argmax(axis=1), testLabel.argmax(axis=1))
print("Test verisinin ACC değeri : %f" % acc)
sumDr = 0
for i in range(con_matrix.shape[0]):
det_rate = 0
for j in range(con_matrix.shape[1]):
if i != j :
det_rate += con_matrix[i][j]
if con_matrix[i][i] != 0 or (det_rate + con_matrix[i][i]) != 0:
det_rate =100* con_matrix[i][i]/(det_rate + con_matrix[i][i])
sumDr += det_rate
DR = sumDr/attackTypeCount
print("Test verisinin Detection Rate değeri % " + str(DR))