Ethan Goldfarb 6 лет назад
Родитель
Сommit
53cd6f7664
1 измененных файлов с 58 добавлено и 29 удалено
  1. 58 29
      src/classifiers/classifier.py

+ 58 - 29
src/classifiers/classifier.py

@@ -1,14 +1,16 @@
 import tensorflow as tf
 import tensorflow as tf
 import os
 import os
-from sklearn.model_selection import KFold
-import sklearn.linear_model
-import sklearn.metrics
 import keras
 import keras
 from keras.models import Sequential
 from keras.models import Sequential
 from keras.layers import Dense, Activation
 from keras.layers import Dense, Activation
 import numpy as np
 import numpy as np
 import pandas as pd
 import pandas as pd
 import typing
 import typing
+import signal
+import heapq
+
+resheap = []
+
 try:
 try:
     import sample
     import sample
 except ImportError:
 except ImportError:
@@ -20,7 +22,7 @@ except ImportError:
 DEFAULT_FEATURES = ["average_iat", "high.avg_burst_size", "high.burst_count"]
 DEFAULT_FEATURES = ["average_iat", "high.avg_burst_size", "high.burst_count"]
 
 
 
 
-def main(options: list):
+def main(options: list, hparams: tuple):
     args = parse_args(options)
     args = parse_args(options)
     try:
     try:
         import cPickle as pickle
         import cPickle as pickle
@@ -50,30 +52,25 @@ def main(options: list):
     labelsshuffled = trainingdf['0_x']
     labelsshuffled = trainingdf['0_x']
     datashuffled = trainingdf.drop(['0_x'], axis=1)
     datashuffled = trainingdf.drop(['0_x'], axis=1)
 
 
-    classify(num_users, datashuffled.to_numpy()[:-20], labelsshuffled.to_numpy()[:-20], datashuffled.to_numpy()[-20:], labelsshuffled.to_numpy()[-20:])
-    '''if args.graph_top:
-        graph_top(args, data[s], labels[s])
-    if args.graph_k:
-        graph_k(args, data[s], labels[s])
-    if args.graph_weights:
-        graph_w(args, data[s], labels[s])
-    res, matrix = kNearestNeighbors(data[s], labels[s], n=args.folds,
-                                    verbose=args.verbose, guesses=args.top,
-                                    k=args.k_neighbors, weights=args.weight)'''
-    #print("Overall Accuracy: %f" % np.average(res))
-    #if args.p_value:
-     #   print("P-Value: %f" % t_test(res, num_users)[1] / 2)
-    #if args.graph:
-    #    gen_confusion_matrix(matrix, labels)
-
-
-def classify(classifications: int, sampleData: list, labels: list, testdata: list, testlabels: list):
+    tempr = []
+    for i in range(5):
+        tempr.append(classify(num_users, datashuffled.to_numpy()[:-20], labelsshuffled.to_numpy()[:-20],
+                        datashuffled.to_numpy()[-20:], labelsshuffled.to_numpy()[-20:], hparams[0], hparams[1]))
+    acc = 0
+    for z in tempr:
+        acc += z[1]
+    acc = acc / 5
+    return acc
+
+
+def classify(classifications: int, sampleData: list, labels: list, testdata: list, testlabels: list, activ: str, hiddenlayers: int):
     #print(classifications)
     #print(classifications)
     model = Sequential()
     model = Sequential()
     model.add(Dense(len(sampleData[0]), input_dim=len(sampleData[0])))
     model.add(Dense(len(sampleData[0]), input_dim=len(sampleData[0])))
-    model.add(Activation('sigmoid'))
-    model.add(Dense(len(sampleData[0])//2))
-    model.add(Activation('sigmoid'))
+    model.add(Activation(activ))
+    for i in range(hiddenlayers):
+        model.add(Dense(len(sampleData[0])//2))
+        model.add(Activation(activ))
     model.add(Dense(classifications))
     model.add(Dense(classifications))
     model.add(Activation('relu'))
     model.add(Activation('relu'))
     model.compile(optimizer='rmsprop',
     model.compile(optimizer='rmsprop',
@@ -84,6 +81,7 @@ def classify(classifications: int, sampleData: list, labels: list, testdata: lis
     one_hot_test_labels = keras.utils.to_categorical(testlabels, num_classes=classifications)
     one_hot_test_labels = keras.utils.to_categorical(testlabels, num_classes=classifications)
     results = model.evaluate(testdata, one_hot_test_labels, batch_size=128)
     results = model.evaluate(testdata, one_hot_test_labels, batch_size=128)
     print(results)
     print(results)
+    return results
 
 
 
 
 
 
@@ -140,12 +138,43 @@ def parse_args(args: list):
     return parser.parse_args(args)
     return parser.parse_args(args)
 
 
 
 
+def receiveSignal(signalNumber, frame):
+    print('Received:', signalNumber)
+    f = open("interrupt.txt", 'w+')
+    for item in resheap:
+        f.write(str(item))
+    f.close()
+    return
+
+
 if __name__ == '__main__':
 if __name__ == '__main__':
     import sys
     import sys
 
 
+    signal.signal(signal.SIGHUP, receiveSignal)
+    signal.signal(signal.SIGINT, receiveSignal)
+    signal.signal(signal.SIGQUIT, receiveSignal)
+    signal.signal(signal.SIGILL, receiveSignal)
+    signal.signal(signal.SIGTRAP, receiveSignal)
+    signal.signal(signal.SIGABRT, receiveSignal)
+    signal.signal(signal.SIGBUS, receiveSignal)
+    signal.signal(signal.SIGFPE, receiveSignal)
+
+    params = [('sigmoid', 1), ('relu', 1), ('sigmoid', 2), ('relu', 2), ('exponential', 1), ('exponential', 2)]
+    outputcounter = 0
+
     for filename in os.listdir('./samples2.0'):
     for filename in os.listdir('./samples2.0'):
         print(os.path.join('./samples2.0', filename))
         print(os.path.join('./samples2.0', filename))
-        main(["-f*", os.path.join('./samples2.0', filename)])
-        #main(sys.argv[1:])
-    #print(sys.argv[1:])
-    #main(sys.argv[1:])
+        if outputcounter > 10:
+            f = open("tempresults.txt", 'w+')
+            for item in resheap:
+                f.write(str(item))
+            f.close()
+            outputcounter = 0
+        for p in params:
+            temp = main(["-f*", os.path.join('./samples2.0', filename)], p)
+            print("temp: " + str(temp))
+            print(resheap)
+            heapq.heappush(resheap, [temp, filename, p])
+            if len(resheap) > 100:
+                heapq.heappop(resheap)
+            outputcounter += 1