Commit fe3aad70 authored by zcq98's avatar zcq98

flow type classification

parent 11a5ba5d
__pycache__
oai_client/__pycache__
.py38
\ No newline at end of file
"""
预测函数:随机森林
每次运行前,检查:
四个需要修改的地方,命名是否正确
最后的运行模式是否正确
做预测
1. 直接使用之前的模型做预测 分类结果和五元组封装起来
2. 做一个线程池 多线程接收发送来的特征信息
"""
from common_utils import * # 修改了
from argparse import ArgumentParser
from collections import namedtuple
from typing import List, Dict
from datetime import datetime
from path_utils import get_prj_root
import numpy as np
# from sklearn.externals import joblib
import joblib
import pprint
import socket
import string
from sklearn.ensemble import RandomForestClassifier # 训练模型
random.seed(datetime.now())
model_dir = os.path.join(get_prj_root(), "classify/models") # 修改:模型model文件夹路径
predict_model_pkl = os.path.join(model_dir, "dt2.pkl") # 修改:模型的版本,只用修改此处就行
Instance = namedtuple("Instance", ["features", "label"]) # 实例
dirs = {
"video": "./tmp/dt/video",
"iot": "./tmp/dt/iot",
"voip": "./tmp/dt/voip",
"AR": "./tmp/dt/AR",
}
instances_dir = os.path.join(get_prj_root(), "classify/instances") # 修改:instances路径
# 通过元组测试
test_flow = (1, 2, 3, 4, 5, 6, 7, 8, 6, 10)
test_flow2 = [221.0, 1350.0, 640.0, 376.26798960315506, 543.0,
21257877.349853516, 4793407917.022705, 1263437211.5135193,
2039103758.0566826, 119541525.84075928]
def train_and_predict():
iot = load_pkl(os.path.join(instances_dir, "iot.pkl")) # 不同实例的pkl是不同特征的
videos = load_pkl(os.path.join(instances_dir, "video.pkl"))
voip = load_pkl(os.path.join(instances_dir, "voip.pkl"))
AR = load_pkl(os.path.join(instances_dir, "AR.pkl"))
for i in videos:
assert i.label == 0
for i in iot:
assert i.label == 1
for i in voip:
assert i.label == 2
for i in AR:
assert i.label == 3
# print(videos)
debug("# iot instances {}".format(len(iot)))
debug("# video instances {}".format(len(videos)))
debug("# VOIP instances {}".format(len(voip)))
debug("# AR instances {}".format(len(AR)))
random.shuffle(voip) # 打乱排序
random.shuffle(iot)
random.shuffle(videos)
random.shuffle(AR)
n_video_train = int(len(videos) * 0.7)
n_video_test = len(videos) - n_video_train
video_train = videos[:n_video_train]
video_test = videos[n_video_train:]
iot_train = iot[:n_video_train]
iot_test = iot[len(iot) - len(video_test):]
voip_train = voip[:n_video_train]
voip_test = voip[len(voip) - len(video_test):]
AR_train = AR[:n_video_train]
AR_test = AR[len(AR) - len(video_test):]
info("#video train {}".format(len(video_train)))
info("#iot train {}".format(len(iot_train)))
info("#voip train {}".format(len(voip_train)))
info("#AR train {}".format(len(AR_train)))
train = []
train.extend(iot_train)
train.extend(video_train)
train.extend(voip_train)
train.extend(AR_train)
random.shuffle(train)
train_x = [x.features for x in train]
train_y = [x.label for x in train]
# test 1:1
test = []
info("#video test {}".format(len(video_test)))
info("#iot test {}".format(len(iot_test)))
info("#voip test {}".format(len(voip_test)))
info("#AR test {}".format(len(AR_test)))
test.extend(video_test)
test.extend(iot_test)
test.extend(voip_test)
test.extend(AR_test)
random.shuffle(test)
test_x = [t.features for t in test]
test_y = [t.label for t in test]
# 训练以及预测
predict_model = RandomForestClassifier(oob_score=True) # 引入训练方法
predict_model.fit(train_x, train_y) # 队训练数据进行拟合
predicts = predict_model.predict(test_x)
"""
dt = DT()
dt.fit((train_x, train_y))
predicts = dt.predict(test_x)
"""
"""
# 打印预测的结果
print(predicts)
print("-------------------------------")
"""
# 保存模型
fn_name = os.path.join(model_dir, predict_model_pkl)
joblib.dump(predict_model, predict_model_pkl)
# 评价模型
count = 0
for idx in range(len(test_x)):
if int(predicts[idx]) == int(test_y[idx]):
count += 1
# print(count / len(test_x))
return count / len(test_x)
def classify_flows(mode: 'int', predict_dir):
"""
该函数用于训练模型并且测试模型的准确度 或者 预测结果
:param mode: 0--训练模型 1--预测和分类流并返回
:param predict_dir: 待预测的流的目录下的pkl文件
:return: 待分类的流的分类结果列表
"""
# 判断是只训练模型 还是 只是预测结果
if mode == 0:
# 此时训练使用数据训练模型 并且 保存模型 评价模型
times = 10
sum_predict = 0
for _ in range(times):
res = train_and_predict()
sum_predict = sum_predict + res
print("模型准确率为:", sum_predict / times)
else:
# 使用传递的文件来预测结果并且返回
predict = load_pkl(os.path.join(predict_dir, "predict2.pkl"))
test = []
info("#video test {}".format(len(predict)))
test.extend(predict)
# random.shuffle(test)
test_x = [t.features for t in test]
predict_model = joblib.load(predict_model_pkl)
predict_result = predict_model.predict(test_x)
res_list = identify_classification(predict_result)
return res_list
def classify_flow_list(flow_list):
"""
该方法用于分类为元组的流
格式:[[1, 2, 3, 4, 5, 6, 7, 8, 6, 10], ["五元组"]]
"""
test_x = [flow_list[0]]
predict_model = joblib.load(predict_model_pkl)
predict_result = predict_model.predict(test_x)
# 定义结果的变量 res = ["五元组", "分类结果"]
res = []
res.append(flow_list[1][0])
# 得到字符串的结果
if predict_result == 0:
res.append("videos")
elif predict_result == 1:
res.append("iot")
elif predict_result == 2:
res.append("voip")
else:
res.append("AR")
return res
def change_result_to_integer_list(result_list):
# 将这个格式 res = ["五元组", "分类结果"] 改为[srcIP, dstIP, srcPort, dstPort, protocol, flowType]
integer_list = []
string_list = result_list[0].split()
# 添加源ip 转换为int的
integer_list.append(ipToLong(string_list[0]))
# 添加目的ip 转换为int的
integer_list.append(ipToLong(string_list[1]))
# 添加源端口 转换为int的
integer_list.append(int(string_list[2]))
# 添加目的端口 转换为int的
integer_list.append(int(string_list[3]))
# 添加协议类型
#if string_list[4] == 'TCP':
# integer_list.append(1)
#elif string_list[4] == 'UDP':
# integer_list.append(2)
integer_list.append(int(string_list[4]))
# 添加分类结果
integer_list.append(result_list[1])
return integer_list
#将字符串形式的ip地址转成整数类型。
def ipToLong(ip_str):
#print map(int,ip_str.split('.'))
ip_long = 0
for index,value in enumerate(reversed([int(x) for x in ip_str.split('.')])):
ip_long += value<<(8*index)
return ip_long
def identify_classification(predict_result):
"""
该函数将分类结果的标签转换为具体内容字符串的结果
:param predict_result:标签分类结果
:return: 字符串分类结果
"""
res_list = []
for label in predict_result:
if label == 0:
res_list.append("videos")
elif label == 1:
res_list.append("iot")
elif label == 2:
res_list.append("voip")
elif label == 3:
res_list.append("AR")
return res_list
if __name__ == '__main__':
"""
测试 格式转换
# 训练模型
# classify_flows(mode=0, path=instances_dir)
# 预测结果
predict_dir = os.path.join(get_prj_root(), "classify/predict") # 修改:instances路径
predict_result_list = classify_flows(mode=1, predict_dir=predict_dir)
pprint.pprint(predict_result_list)
"""
list1 = ['54.52.52.53 51.49.50.44 8242 12596 UDP', 'iot']
res = change_result_to_integer_list(list1)
print(res)
{"1": "videos", "2": "videos", "3": "videos", "4": "videos", "5": "videos", "6": "videos", "7": "videos", "8": "videos", "9": "videos", "10": "videos", "11": "videos", "12": "videos", "13": "videos", "14": "videos", "15": "videos", "16": "videos", "17": "videos", "18": "videos", "19": "videos", "20": "videos", "21": "videos", "22": "videos", "23": "videos", "24": "videos", "25": "videos", "26": "videos", "27": "videos", "28": "videos", "29": "videos", "30": "videos", "31": "videos", "32": "videos", "33": "videos", "34": "videos", "35": "videos", "36": "videos", "37": "videos", "38": "videos", "39": "videos", "40": "videos", "41": "videos", "42": "videos", "43": "videos", "44": "videos", "45": "videos", "46": "videos", "47": "videos", "48": "videos", "49": "videos", "50": "videos", "51": "videos", "52": "videos", "53": "videos", "54": "videos", "55": "videos", "56": "videos", "57": "videos", "58": "videos", "59": "videos", "60": "videos", "61": "videos", "62": "videos", "63": "videos", "64": "videos", "65": "videos", "66": "videos", "67": "videos", "68": "videos", "69": "videos", "70": "videos", "71": "videos", "72": "videos", "73": "videos", "74": "videos", "75": "videos", "76": "videos", "77": "videos", "78": "videos", "79": "videos", "80": "videos", "81": "videos", "82": "videos", "83": "videos", "84": "videos", "85": "videos", "86": "videos", "87": "videos", "88": "videos", "89": "videos", "90": "videos", "91": "videos", "92": "videos", "93": "videos", "94": "videos", "95": "videos", "96": "videos", "97": "videos", "98": "videos", "99": "videos", "100": "videos", "101": "videos", "102": "videos", "103": "videos", "104": "videos", "105": "videos", "106": "videos", "107": "videos", "108": "videos", "109": "videos", "110": "videos", "111": "videos", "112": "videos", "113": "videos", "114": "videos", "115": "videos", "116": "videos", "117": "videos", "118": "videos", "119": "videos", "120": "videos", "121": "videos", "122": "videos", "123": "videos", "124": "videos", "125": "videos", "126": "videos", "127": "videos", "128": "videos", "129": "videos", "130": "videos", "131": "videos", "132": "videos", "133": "videos", "134": "videos", "135": "videos", "136": "videos", "137": "videos", "138": "videos", "139": "videos", "140": "videos", "141": "videos", "142": "videos", "143": "videos", "144": "voip", "145": "videos", "146": "videos", "147": "videos", "148": "videos", "149": "videos", "150": "videos", "151": "videos", "152": "videos", "153": "videos", "154": "videos", "155": "videos", "156": "videos", "157": "videos", "158": "videos", "159": "videos", "160": "videos", "161": "videos", "162": "videos", "163": "videos", "164": "videos", "165": "videos", "166": "videos", "167": "videos", "168": "videos", "169": "videos", "170": "videos", "171": "videos", "172": "videos", "173": "videos", "174": "videos", "175": "videos", "176": "videos", "177": "videos", "178": "videos", "179": "videos", "180": "videos", "181": "videos", "182": "videos", "183": "videos", "184": "videos", "185": "videos", "186": "videos", "187": "videos", "188": "videos", "189": "videos", "190": "videos", "191": "videos", "192": "videos", "193": "videos", "194": "videos", "195": "videos", "196": "videos", "197": "videos", "198": "videos", "199": "videos", "200": "videos", "201": "videos", "202": "videos", "203": "videos", "204": "videos", "205": "videos", "206": "videos", "207": "videos", "208": "videos", "209": "videos", "210": "videos", "211": "videos", "212": "videos", "213": "videos", "214": "videos", "215": "videos", "216": "videos", "217": "videos", "218": "videos", "219": "videos", "220": "videos", "221": "videos", "222": "videos", "223": "videos", "224": "videos", "225": "videos", "226": "videos", "227": "videos", "228": "videos", "229": "videos", "230": "videos", "231": "videos", "232": "videos", "233": "videos", "234": "videos", "235": "videos", "236": "videos", "237": "videos", "238": "videos", "239": "videos", "240": "videos", "241": "videos", "242": "videos", "243": "videos", "244": "videos", "245": "videos", "246": "videos", "247": "videos", "248": "videos", "249": "videos", "250": "videos", "251": "videos", "252": "videos", "253": "videos", "254": "videos", "255": "videos", "256": "videos", "257": "videos", "258": "videos", "259": "videos", "260": "videos", "261": "videos", "262": "videos", "263": "videos", "264": "videos", "265": "videos", "266": "videos", "267": "videos", "268": "videos", "269": "videos", "270": "videos", "271": "videos", "272": "videos", "273": "videos", "274": "videos", "275": "videos", "276": "videos", "277": "videos", "278": "videos", "279": "videos", "280": "videos", "281": "videos", "282": "videos", "283": "videos", "284": "videos", "285": "videos", "286": "videos", "287": "videos", "288": "videos", "289": "videos", "290": "videos", "291": "videos", "292": "videos", "293": "videos", "294": "videos", "295": "videos", "296": "videos", "297": "videos", "298": "videos", "299": "videos", "300": "videos", "301": "videos", "302": "videos", "303": "videos", "304": "videos", "305": "videos", "306": "videos", "307": "videos", "308": "videos", "309": "videos", "310": "videos", "311": "videos", "312": "videos", "313": "videos", "314": "videos", "315": "videos", "316": "videos", "317": "videos", "318": "videos", "319": "videos", "320": "videos", "321": "videos", "322": "videos", "323": "videos", "324": "videos", "325": "videos", "326": "videos", "327": "videos", "328": "videos", "329": "videos", "330": "videos", "331": "videos", "332": "videos", "333": "videos", "334": "videos", "335": "videos", "336": "videos", "337": "videos", "338": "videos", "339": "videos", "340": "videos", "341": "videos", "342": "videos", "343": "videos", "344": "voip", "345": "videos", "346": "videos", "347": "videos", "348": "videos", "349": "videos", "350": "videos", "351": "videos", "352": "videos", "353": "videos", "354": "videos", "355": "videos", "356": "videos", "357": "videos", "358": "voip", "359": "voip", "360": "videos", "361": "videos", "362": "videos", "363": "videos", "364": "videos", "365": "videos", "366": "videos", "367": "videos", "368": "videos", "369": "videos", "370": "videos", "371": "videos", "372": "videos", "373": "videos", "374": "videos", "375": "videos", "376": "videos", "377": "videos", "378": "videos", "379": "videos", "380": "videos", "381": "videos", "382": "videos", "383": "videos", "384": "voip", "385": "videos", "386": "videos", "387": "videos", "388": "videos", "389": "videos", "390": "videos", "391": "videos", "392": "videos", "393": "videos", "394": "videos", "395": "videos", "396": "videos", "397": "videos", "398": "videos", "399": "videos", "400": "videos", "401": "videos", "402": "videos", "403": "videos", "404": "videos", "405": "videos", "406": "videos", "407": "videos", "408": "videos", "409": "videos", "410": "videos", "411": "videos", "412": "videos", "413": "videos", "414": "videos", "415": "videos", "416": "videos", "417": "videos", "418": "videos", "419": "videos", "420": "videos", "421": "videos", "422": "videos", "423": "videos", "424": "videos", "425": "videos", "426": "videos", "427": "videos", "428": "videos", "429": "videos", "430": "videos", "431": "videos", "432": "videos", "433": "videos", "434": "iot", "435": "videos", "436": "videos", "437": "videos", "438": "videos", "439": "videos", "440": "videos", "441": "videos", "442": "videos", "443": "videos", "444": "videos", "445": "videos", "446": "videos", "447": "videos", "448": "videos", "449": "videos", "450": "videos", "451": "videos", "452": "videos", "453": "videos", "454": "videos", "455": "videos", "456": "videos", "457": "videos", "458": "videos", "459": "videos", "460": "videos", "461": "videos", "462": "voip", "463": "videos", "464": "videos", "465": "videos", "466": "videos", "467": "videos", "468": "videos", "469": "videos", "470": "videos", "471": "videos", "472": "videos", "473": "videos", "474": "videos", "475": "videos", "476": "videos", "477": "videos", "478": "videos", "479": "videos", "480": "videos", "481": "videos", "482": "videos", "483": "videos", "484": "videos", "485": "videos", "486": "videos", "487": "videos", "488": "videos", "489": "videos", "490": "videos", "491": "videos", "492": "videos", "493": "videos", "494": "videos", "495": "videos", "496": "videos", "497": "videos", "498": "videos", "499": "videos", "500": "videos", "501": "videos", "502": "videos", "503": "videos", "504": "videos", "505": "videos", "506": "videos", "507": "videos", "508": "videos", "509": "videos", "510": "videos", "511": "videos", "512": "videos", "513": "videos", "514": "videos", "515": "videos", "516": "videos", "517": "videos", "518": "videos", "519": "videos", "520": "videos", "521": "videos", "522": "videos", "523": "videos", "524": "videos", "525": "videos", "526": "videos", "527": "videos", "528": "videos", "529": "videos", "530": "videos", "531": "videos", "532": "videos", "533": "videos", "534": "videos", "535": "voip", "536": "videos", "537": "videos", "538": "videos", "539": "videos", "540": "videos", "541": "videos", "542": "videos", "543": "videos", "544": "videos", "545": "videos", "546": "videos", "547": "videos", "548": "videos", "549": "videos", "550": "videos", "551": "videos", "552": "videos", "553": "videos", "554": "videos", "555": "videos", "556": "videos", "557": "videos", "558": "videos", "559": "videos", "560": "videos", "561": "videos", "562": "videos", "563": "videos", "564": "videos", "565": "videos", "566": "videos", "567": "videos", "568": "videos", "569": "videos", "570": "videos", "571": "videos", "572": "videos", "573": "videos", "574": "videos", "575": "videos", "576": "videos", "577": "videos", "578": "videos", "579": "videos", "580": "videos", "581": "videos", "582": "videos", "583": "videos", "584": "videos", "585": "videos", "586": "videos", "587": "videos", "588": "videos", "589": "videos", "590": "videos", "591": "videos", "592": "videos", "593": "videos", "594": "videos", "595": "videos", "596": "videos", "597": "videos", "598": "videos", "599": "videos", "600": "videos", "601": "videos", "602": "videos", "603": "videos", "604": "videos", "605": "videos", "606": "videos", "607": "videos", "608": "videos", "609": "videos", "610": "videos", "611": "videos", "612": "videos", "613": "videos", "614": "videos", "615": "videos", "616": "videos", "617": "videos", "618": "videos", "619": "videos", "620": "videos", "621": "videos", "622": "videos", "623": "videos", "624": "videos", "625": "videos", "626": "videos", "627": "videos", "628": "videos", "629": "videos", "630": "videos", "631": "videos", "632": "videos", "633": "videos", "634": "videos", "635": "videos", "636": "videos", "637": "videos", "638": "videos", "639": "videos", "640": "videos", "641": "videos", "642": "videos", "643": "videos", "644": "videos", "645": "videos", "646": "videos", "647": "videos", "648": "videos", "649": "videos", "650": "videos", "651": "videos", "652": "videos", "653": "videos", "654": "videos", "655": "videos", "656": "videos", "657": "videos", "658": "videos", "659": "videos", "660": "videos", "661": "videos", "662": "videos", "663": "videos", "664": "videos", "665": "videos", "666": "videos", "667": "videos", "668": "videos", "669": "videos", "670": "videos", "671": "videos", "672": "videos", "673": "videos", "674": "videos", "675": "videos", "676": "videos", "677": "videos", "678": "videos", "679": "videos", "680": "videos", "681": "videos", "682": "videos", "683": "videos", "684": "videos", "685": "videos", "686": "videos", "687": "videos", "688": "videos", "689": "videos", "690": "videos", "691": "videos", "692": "videos", "693": "videos", "694": "videos", "695": "videos", "696": "videos", "697": "videos", "698": "videos", "699": "videos", "700": "videos", "701": "videos", "702": "videos", "703": "videos", "704": "videos", "705": "videos", "706": "videos", "707": "videos", "708": "videos", "709": "videos", "710": "videos", "711": "videos", "712": "videos", "713": "videos", "714": "videos", "715": "videos", "716": "videos", "717": "videos", "718": "videos", "719": "videos", "720": "videos", "721": "videos", "722": "videos", "723": "videos", "724": "videos", "725": "videos", "726": "videos", "727": "videos", "728": "videos", "729": "videos", "730": "videos", "731": "videos", "732": "videos", "733": "videos", "734": "videos", "735": "videos", "736": "videos", "737": "videos", "738": "videos", "739": "videos", "740": "videos", "741": "videos", "742": "videos", "743": "videos", "744": "videos", "745": "videos", "746": "videos", "747": "videos", "748": "videos", "749": "videos", "750": "videos", "751": "videos", "752": "videos", "753": "videos", "754": "videos", "755": "videos", "756": "videos", "757": "videos", "758": "videos", "759": "videos", "760": "videos", "761": "videos", "762": "videos", "763": "videos", "764": "videos", "765": "videos", "766": "videos", "767": "videos", "768": "videos", "769": "videos", "770": "videos", "771": "videos", "772": "videos", "773": "videos", "774": "videos", "775": "videos", "776": "videos", "777": "videos", "778": "videos", "779": "videos", "780": "videos", "781": "videos", "782": "videos", "783": "videos", "784": "videos", "785": "videos", "786": "videos", "787": "videos", "788": "videos", "789": "videos", "790": "videos", "791": "videos", "792": "videos", "793": "videos", "794": "videos", "795": "videos", "796": "videos", "797": "videos", "798": "videos", "799": "videos", "800": "videos", "801": "videos", "802": "videos", "803": "videos", "804": "videos", "805": "videos", "806": "videos", "807": "videos", "808": "videos", "809": "videos", "810": "videos", "811": "videos", "812": "videos", "813": "videos", "814": "videos", "815": "videos", "816": "videos", "817": "videos", "818": "videos", "819": "videos", "820": "videos", "821": "videos", "822": "videos", "823": "videos", "824": "videos", "825": "videos", "826": "videos", "827": "videos", "828": "videos", "829": "videos", "830": "voip", "831": "voip", "832": "videos", "833": "videos", "834": "videos", "835": "videos", "836": "videos", "837": "videos", "838": "videos", "839": "videos", "840": "videos", "841": "videos", "842": "videos", "843": "videos", "844": "videos", "845": "videos", "846": "videos", "847": "videos", "848": "videos", "849": "videos", "850": "videos", "851": "videos", "852": "videos", "853": "videos", "854": "videos", "855": "videos", "856": "videos", "857": "videos", "858": "videos", "859": "videos", "860": "videos", "861": "videos", "862": "videos", "863": "videos", "864": "videos", "865": "videos", "866": "videos", "867": "videos", "868": "videos", "869": "videos", "870": "videos", "871": "videos", "872": "videos", "873": "videos", "874": "videos", "875": "videos", "876": "videos"}
\ No newline at end of file
import json
import os
import pickle
import random
from pathlib import Path
import loguru
import numpy as np
logger = loguru.logger
info = logger.info
debug = logger.debug
err = logger.error
def check_dir(dir_name):
if not Path(dir_name).is_dir():
raise FileNotFoundError
def check_file(fn):
if not Path(fn).is_file():
raise FileNotFoundError
def file_exsit(fn):
return Path(fn).is_file()
def dir_exsit(fn):
return Path(fn).is_dir()
def gaussion(mean: float, std_var: float, size=1):
if size == 1:
return np.random.normal(mean, std_var)
return np.random.normal(mean, std_var, size)
def exp(mean: float, size=1):
if 1 == size:
return np.random.normal(mean)
return np.random.normal(mean, size)
def uniform(low, up, size=1):
if 1 == size:
return np.random.uniform(low, up)
return np.random.uniform(low, up, size)
def load_pkl(filename):
if Path(filename).is_file():
data = None
with open(filename, 'rb') as file:
data = pickle.load(file)
file.close()
return data
raise FileNotFoundError
def save_pkl(filename, obj, overwrite=True):
def write():
with open(filename, 'wb') as file:
pickle.dump(obj, file)
file.flush()
file.close()
if Path(filename).is_file() and overwrite:
write()
return
write()
def load_json(filename):
if Path(filename).is_file():
with open(filename) as f:
return json.load(f)
raise FileNotFoundError
def save_json(filename, obj, overwrite=True):
def write():
with open(filename, 'w', encoding="utf8") as file:
json.dump(obj, file, indent=4)
if Path(filename).is_file and overwrite:
write()
return
write()
def is_digit(x: str) -> bool:
try:
float(x)
return True
except:
return False
def normalize(x):
mi = min(x)
ma = max(x)
diff = ma - mi
x = [(xx - mi) / diff for xx in x]
return x
if __name__ == "__main__":
pass
/*
Navicat Premium Data Transfer
Source Server : enb2
Source Server Type : MySQL
Source Server Version : 50733
Source Host : 192.168.31.50:3306
Source Schema : mytestdb
Target Server Type : MySQL
Target Server Version : 50733
File Encoding : 65001
Date: 21/06/2021 20:11:19
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for measure
-- ----------------------------
DROP TABLE IF EXISTS `measure`;
CREATE TABLE `measure` (
`srcIP` bigint(20) NOT NULL,
`dstIP` bigint(20) NOT NULL,
`srcPort` smallint(6) UNSIGNED NOT NULL,
`dstPort` smallint(6) UNSIGNED NOT NULL,
`protocol` tinyint(4) UNSIGNED NOT NULL,
`averBytes` double(20, 1) NULL DEFAULT NULL,
`averPkts` double(20, 1) NULL DEFAULT NULL,
`flowType` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`srcIP`, `dstIP`, `srcPort`, `dstPort`, `protocol`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of measure
-- ----------------------------
INSERT INTO `measure` VALUES (167772418, 167772417, 40000, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40001, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40002, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40003, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40004, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40005, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40006, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40007, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40008, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40009, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40010, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40011, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40012, 11111, 6, 21470.0, 14.4, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40013, 11111, 6, 29806.0, 20.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40014, 11111, 6, 25293.2, 17.4, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40100, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40101, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40102, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40103, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40104, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40105, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40106, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40107, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40108, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40109, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40110, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40111, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40112, 11111, 6, 26057.2, 17.6, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40113, 11111, 6, 29806.0, 20.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40114, 11111, 6, 22774.0, 15.6, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40200, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40201, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40202, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40203, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40204, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40205, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40206, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40207, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40208, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40209, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40210, 11111, 6, 0.0, 0.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40211, 11111, 6, 5097.6, 3.4, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40212, 11111, 6, 29518.4, 20.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40213, 11111, 6, 29806.0, 20.0, NULL);
INSERT INTO `measure` VALUES (167772418, 167772417, 40214, 11111, 6, 24412.8, 16.8, NULL);
SET FOREIGN_KEY_CHECKS = 1;
'''创建数据库'''
import pymysql
#打开数据库连接,不需要指定数据库,因为需要创建数据库
conn = pymysql.connect(host = 'localhost',user = "root",passwd = "123456")
#获取游标
cursor=conn.cursor()
#创建pythonBD数据库
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建pythonBD数据库成功')
由于路径的问题,在import上作了一些删除
在classify文件夹下是运行的数据
先运行parser产生解析PCAP之后的文件,放在./tmp/dt的目录下,statistics.json为各个类型流的数据
再运行train,先把最下面的模式设置为1,产生对statistics.json中包大小,包间隔进行处理产生特征,保存在instances文件夹的pkl中
最后是运行predict,预测
train_dt_1
设置的是8个特征的(前四个包大小,后四个包间隔)+决策树 。。。
特征与标签都保存到instances文件夹,
训练模型保存到models文件夹中
正确率可以达到90%
加了PCA降维之后为88.6%
train_dt_2
设置的是10个特征的(前五个包大小,后五个包间隔):最小值,最大值,平均值,方差,中位数 +决策树
特征与标签都保存到instances2文件夹,
训练模型保存到models2文件夹中
正确率可以达到91.73%
加了PCA降维之后为88.7%
train_dt_3
11个特征(前五个包大小,后五个包间隔):最小值,最大值,平均值,方差,中位数 ;每秒包的数量
预测函数:决策树
特征与标签都保存到instances3文件夹
训练模型保存到models3文件夹中
正确率可以达到91.7%
加了PCA降维之后为88.7%
instances装的是 8个特征的(前四个包大小,后四个包间隔)
pkl文件其实可以处理成Excel表格的形式,然后用MATLAB来跑
predit_1_1 K邻近+8特征 85%
predit_1_2 K邻近+10特征 86.59%
predit_2 支持向量机 + 8特征 25.9%
predict_3 随机森林 +8特征 93.5%
predict_3 随机森林 +10特征 94%
predict_3 随机森林 +11特征 93.5%
models文件下
model_predict文件夹装的是各种预测函数
dt1为 K邻近+8特征 85%
dt1_2 为 K邻近+10特征 86.59%
dt3_1 为 随机森林 +8特征 93.5%
dt3_2 为 随机森林 +10特征 94%
有后缀_9 说明是用9个窗口
from classify import *
from multithread_server import TcpServer, boot_server
from pool import *
from save_result import *
import json
def load_flows():
# 一直执行
con = connect_database(DB_ADDR, USER_NAME, USER_PASSWORD, DB_NAME) # 建立数据库的连接
while True:
# 判断是否停止识别
"""
mutex.acquire()
if len(STOP_CLASSIFY) == 1:
print("程序结束")
mutex.release()
break
mutex.release()
"""
mutex.acquire()
if PREDECT_FLOWS:
# 读出所有的结果
for feature in PREDECT_FLOWS:
if type(feature) == list:
# print("type: ", type(feature))
# 预测结果
predict_result = classify_flow_list(feature)
# 将分类结果放到全局变量中
# if predict_result not in CLASSIFY_RESULT:
# CLASSIFY_RESULT.append(predict_result)
#print("缓冲池中有: ", len(CLASSIFY_RESULT), "个已经分类好的结果,请取走")
# 将分类结果转为整数
integer_list = change_result_to_integer_list(predict_result)
# 存入数据库
mysqldb_insert(con, integer_list[0], integer_list[1], integer_list[2], integer_list[3], integer_list[4], integer_list[5])
print(integer_list, "存入数据库成功!")
print("分类结果为:", integer_list)
# 清空列表
PREDECT_FLOWS.clear()
mutex.release()
# 定义一个函数作为主线程 让其他的守护他 判断关键字close后关闭主线称
def main_threading():
global STOP_CLASSIFY
# 创建线程
t_server = threading.Thread(target = boot_server)
t_classify = threading.Thread(target = load_flows)
# 设置其他的为守护线程
t_server.setDaemon(True)
t_classify.setDaemon(True)
# 启动线程
t_server.start()
t_classify.start()
while True:
mutex.acquire()
if len(STOP_CLASSIFY) == 1:
print("程序结束")
mutex.release()
break
mutex.release()
if __name__ == "__main__":
main_threading()
from sklearn.tree import DecisionTreeClassifier
from path_utils import get_prj_root
from pathlib import Path
import os
from common_utils import save_pkl, load_pkl, info #修改了
import numpy as np
import random
root_dir = get_prj_root()
model_dir = os.path.join(root_dir, "models")
class Classifier:
# def __init__(self,fn_name=None):
# self.model=None
# if fn_name is not None:
# self.load_model(fn_name)
def fit(self, data):
raise NotImplementedError
def predict(self, features):
raise NotImplementedError
def save_model(self, fn_name):
raise NotImplementedError
def load_model(self, fn_name):
raise NotImplementedError
'''
min_pkt|max_pkt|mean_pkt|var_pkt
min_idt|max_idt|mean_idt|var_idt
'''
class DT(Classifier):
def __init__(self):
super(DT, self).__init__()
self.model: DecisionTreeClassifier = DecisionTreeClassifier()
def fit(self, data):
assert len(data) == 2
features = data[0]
y = data[1]
assert len(features) == len(y)
info("# instances {}".format(len(features)))
self.model.fit(features, y)
def predict(self, features):
# info("# instances {}".format(len(features)))
return self.model.predict(features)
def save_model(self, fn_name):
if self.model is None: return
fn_name = os.path.join(model_dir, fn_name)
save_pkl(fn_name, self.model)
def load_model(self, fn_name):
fn_name = os.path.join(model_dir, fn_name)
self.model: DecisionTreeClassifier = load_pkl(fn_name)
class Dumb(Classifier):
def fit(self, data):
pass
def predict(self, features):
if random.random() >= 0.5:
return 1
return 0
def save_model(self, fn_name):
pass
def load_model(self, fn_name):
pass
if __name__ == '__main__':
from sklearn.datasets import load_iris
x, y = load_iris(return_X_y=True)
model = DT()
model.fit((x, y))
model.save_model("test.pkl")
model.load_model("test.pkl")
from socket import *
from threading import Thread
from random import choice
import json
import time
BUFFER_SIZE = 8192
# 随机发送数据测试的库:
data_list = [
[[221.0, 1350.0, 640.0, 376.26798960315506, 543.0, 21257877.349853516,
4793407917.022705, 1263437211.5135193, 2039103758.0566826, 119541525.84075928],["10.0.0.0 10.0.0.1 6666 7771 UDP"]],
[[171.0, 1460.0, 888.4, 514.1558518581695, 853.0, 11920.928955078125,
17442424058.914185, 4385495722.293854, 7538530505.708111, 49773454.666137695],["10.0.0.0 10.0.0.2 6666 7772 TCP"]],
[[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 36954.87976074219,
43512821.197509766, 11164724.826812744, 18679961.749486398, 554561.6149902344],["10.0.0.0 10.0.0.3 6666 7773 UDP"]],
[[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 30994.415283203125,
44764995.57495117, 16246497.631072998, 18385686.144529935, 10095000.267028809],["10.0.0.0 10.0.0.4 6666 7774 TCP"]],
[[566.0, 1460.0, 1281.2, 357.59999999999997, 1460.0, 22172.927856445312,
21413803.100585938, 5526959.8960876465, 9175244.715715846, 335931.77795410156],["10.0.0.0 10.0.0.5 6666 7775 UDP"]],
[[69.0, 629.0, 246.6, 205.1522361564699, 172.0, 190973.28186035156,
457492113.1134033, 219977498.0545044, 220039359.48775682, 211113452.91137695],["10.0.0.6 10.0.0.1 7776 6666 TCP"]],
[[69.0, 278.0, 137.8, 78.91108920804477, 85.0, 144958.49609375,
462785959.2437744, 210317969.3222046, 211827960.3342278, 189170479.7744751],["10.0.0.7 10.0.0.1 7777 6666 UDP"]],
[[302.0, 1460.0, 807.6, 537.1113850962387, 498.0, 12874.603271484375,
205285072.32666016, 56649982.92922974, 86251862.02980827, 10650992.393493652],["10.0.0.8 10.0.0.1 7778 6666 TCP"]],
[[266.0, 1460.0, 892.8, 490.89730086852177, 780.0, 24080.276489257812,
301223039.6270752, 76725006.10351562, 129634012.70485088, 2826452.2552490234],["10.0.0.9 10.0.0.1 7779 6666 UDP"]],
[[514.0, 1460.0, 1191.6, 371.89762032043177, 1460.0, 10013.580322265625,
890016.5557861328, 236511.23046875, 377434.79666208074, 23007.39288330078],["10.0.0.10 10.0.0.1 8000 6666 TCP"]],
"hhh", "exit", "send", "send"]
class TcpClient(object):
"""Tcp客户端"""
def __init__(self, IP="127.0.0.1", Port=5002):
"""初始化对象"""
self.code_mode = "utf-8" #收发数据编码/解码格式
self.IP = IP
self.Port = Port
self.my_socket = socket(AF_INET, SOCK_STREAM) #创建socket
def run(self):
"""启动"""
self.my_socket.connect((self.IP, self.Port)) #连接服务器
tr = Thread(target=self.recv_data) #创建线程收数据
ts = Thread(target=self.send_data) #创建线程发数据
tr.start() #开启线程
ts.start()
def recv_data(self):
"""收数据"""
while True:
data = self.my_socket.recv(BUFFER_SIZE).decode(self.code_mode)
if data:
if data == "close connecting":
print("已下线")
break
else:
print("{}".format(data))
else:
break
self.my_socket.close()
def send_data(self):
"""发数据"""
while True:
# 接收数据
data = choice(data_list)
if type(data) == list:
print("已发送五元组{}的特征".format(data[1][0]))
else:
print("发送命令: ", data)
# 两s发送一次 测试
time.sleep(2)
# 判断data的类型 如果是列表用 json传输 字符串就直接传输
if type(data) == list:
send_dat = json.dumps(data)
self.my_socket.sendall(send_dat.encode(self.code_mode))
elif type(data) == str:
self.my_socket.sendall(data.encode(self.code_mode))
else:
continue
# 如果是退出 直接推出程序
if data == "exit":
break
def main():
# 服务器IP和端口
ip = "127.0.0.1"
port = 12345
my_socket = TcpClient(ip, port)
my_socket.run()
if __name__ == "__main__":
main()
\ No newline at end of file
from socket import *
from threading import Thread
from pool import *
import json
import struct
class TcpServer(object):
"""Tcp服务器"""
def __init__(self, Port):
"""初始化对象"""
self.code_mode = "utf-8" #收发数据编码/解码格式
self.server_socket = socket(AF_INET, SOCK_STREAM) #创建socket
self.server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) #设置端口复用
self.server_socket.bind((SEVER_HOST, Port)) #绑定IP和Port
self.server_socket.listen(100) #设置为被动socket
print("服务器正在监听...")
def run(self):
"""运行"""
while True:
# 判断程序是否结束
"""
mutex.acquire()
if len(STOP_CLASSIFY) == 1:
print("程序结束")
mutex.release()
break
mutex.release()
"""
client_socket, client_addr = self.server_socket.accept() #等待客户端连接
print("{} 已上线".format(client_addr))
#创建线程为客户端服务
tr = Thread(target=self.recv_data, args=(client_socket, client_addr))
# if !tr.is_alive():
tr.start() #开启线程
self.server_socket.close()
def recv_data(self, client_socket, client_addr):
"""收发数据"""
while True:
# 判断程序是否结束
"""
mutex.acquire()
if len(STOP_CLASSIFY) == 1:
print("程序结束")
mutex.release()
break
mutex.release()
"""
recv = client_socket.recv(80)
# a = []
data = []
if recv:
# print('服务端收到客户端发来的消息:%s' % (recv))
recv = recv[:77]
a = struct.unpack('2i2f1i2l2d1l13B', recv)
print(a)
data = [[], []]
idStr = ""
mystr = a[10:]
for i in range(10):
data[0].append(a[i]+0.0)
for i in range(8):
if i % 4 == 3:
idStr += str(mystr[i])+" "
else:
idStr += str(mystr[i]) + "."
idStr += str(int(mystr[8])*256+int(mystr[9])) + " "
idStr += str(int(mystr[10])*256+int(mystr[11])) + " "
"""
if int(mystr[12]) == 6:
idStr += "TCP"
else:
idStr += "UDP"
"""
idStr += str(int(mystr[12])) +""
data[1].append(idStr)
#data = client_socket.recv(BUFFER_SIZE).decode(self.code_mode)
#if len(data) > 8:
# data = json.loads(data)
if data:
# 关闭连接的客户端的线程
if data == "exit":
# 发送关闭客户端的命令
client_socket.send("close connecting".encode(self.code_mode))
print("{} 已下线".format(client_addr))
break
# 如果接收的命令是close 修改标志位 停止程序
elif data == "close":
mutex.acquire()
close_program()
mutex.release()
break
# 如果发送的命令是 send 则将分类结果发送过来
elif data == "send":
mutex.acquire()
if CLASSIFY_RESULT:
for res in CLASSIFY_RESULT:
client_socket.send(str(res).encode(self.code_mode))
CLASSIFY_RESULT.clear()
else:
client_socket.send("暂无分类结果".encode(self.code_mode))
mutex.release()
else:
# 将数据保存在PREDECT_FLOWS中 加锁
mutex.acquire()
if data not in PREDECT_FLOWS:
PREDECT_FLOWS.append(data)
mutex.release()
print("{}:发送特征的五元组为{}".format(client_addr, data[1]))
# print("缓冲池中有: ", len(PREDECT_FLOWS), " 个待分类的特征,请分类")
# client_socket.send(data.encode(self.code_mode))
else:
#客户端断开连接
print("{} 已下线".format(client_addr))
break
client_socket.close()
def boot_server():
# print("\033c", end="") #清屏
# port = int(input("请输入要绑定的Port:"))
my_server = TcpServer(SEVER_PORT)
my_server.run()
if __name__ == "__main__":
boot_server()
from socket import *
from threading import Thread
from random import choice
import json
import time
BUFFER_SIZE = 8192
# 随机发送数据测试的库:
data_list = [
[[221.0, 1350.0, 640.0, 376.26798960315506, 543.0, 21257877.349853516,
4793407917.022705, 1263437211.5135193, 2039103758.0566826, 119541525.84075928],["1"]],
[[171.0, 1460.0, 888.4, 514.1558518581695, 853.0, 11920.928955078125,
17442424058.914185, 4385495722.293854, 7538530505.708111, 49773454.666137695],["2"]],
[[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 36954.87976074219,
43512821.197509766, 11164724.826812744, 18679961.749486398, 554561.6149902344],["3"]],
[[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 30994.415283203125,
44764995.57495117, 16246497.631072998, 18385686.144529935, 10095000.267028809],["4"]],
[[566.0, 1460.0, 1281.2, 357.59999999999997, 1460.0, 22172.927856445312,
21413803.100585938, 5526959.8960876465, 9175244.715715846, 335931.77795410156],["5"]],
[[69.0, 629.0, 246.6, 205.1522361564699, 172.0, 190973.28186035156,
457492113.1134033, 219977498.0545044, 220039359.48775682, 211113452.91137695],["6"]],
[[69.0, 278.0, 137.8, 78.91108920804477, 85.0, 144958.49609375,
462785959.2437744, 210317969.3222046, 211827960.3342278, 189170479.7744751],["7"]],
[[302.0, 1460.0, 807.6, 537.1113850962387, 498.0, 12874.603271484375,
205285072.32666016, 56649982.92922974, 86251862.02980827, 10650992.393493652],["8"]],
[[266.0, 1460.0, 892.8, 490.89730086852177, 780.0, 24080.276489257812,
301223039.6270752, 76725006.10351562, 129634012.70485088, 2826452.2552490234],["9"]],
[[514.0, 1460.0, 1191.6, 371.89762032043177, 1460.0, 10013.580322265625,
890016.5557861328, 236511.23046875, 377434.79666208074, 23007.39288330078],["10"]],
"hhh", "exit", "send", "send"]
class TcpClient(object):
"""Tcp客户端"""
def __init__(self, IP="127.0.0.1", Port=5002):
"""初始化对象"""
self.code_mode = "utf-8" #收发数据编码/解码格式
self.IP = IP
self.Port = Port
self.my_socket = socket(AF_INET, SOCK_STREAM) #创建socket
def run(self):
"""启动"""
self.my_socket.connect((self.IP, self.Port)) #连接服务器
tr = Thread(target=self.recv_data) #创建线程收数据
ts = Thread(target=self.send_data) #创建线程发数据
tr.start() #开启线程
ts.start()
def recv_data(self):
"""收数据"""
while True:
data = self.my_socket.recv(BUFFER_SIZE).decode(self.code_mode)
if data:
if data == "close connecting":
print("已下线")
break
else:
print("{}".format(data))
else:
break
self.my_socket.close()
def send_data(self):
"""发数据"""
while True:
# 接收数据
data = choice(data_list)
if type(data) == list:
print("已发送五元组{}的特征".format(data[1][0]))
else:
print("发送命令: ", data)
# 两s发送一次 测试
time.sleep(2)
# 判断data的类型 如果是列表用 json传输 字符串就直接传输
if type(data) == list:
send_dat = json.dumps(data)
self.my_socket.sendall(send_dat.encode(self.code_mode))
elif type(data) == str:
self.my_socket.sendall(data.encode(self.code_mode))
else:
continue
# 如果是退出 直接推出程序
if data == "exit":
break
def main():
# 服务器IP和端口
ip = "192.168.136.137"
port = 5005
my_socket = TcpClient(ip, port)
my_socket.run()
if __name__ == "__main__":
main()
\ No newline at end of file
from pathlib import Path
import os.path
def get_prj_root():
return os.path.abspath(os.curdir)
# return Path(__file__).parent
if __name__ == '__main__':
print(get_prj_root())
import threading
"""
该文件定义使用的常量 和 进程锁
"""
# 设置服务器的IP和端口
SEVER_HOST = "127.0.0.1" # 发送到windows测试
SEVER_PORT = 12345
# 缓冲区大小
BUFFER_SIZE = 8192
# 共享的全局变量 保存解析的特征 用于客户端发送和服务器端读取的缓冲区
PREDECT_FLOWS = []
# 共享的全局变量 保存分类的结果
CLASSIFY_RESULT = []
# 是否停止分类的标志位 长度为1退出程序
STOP_CLASSIFY = []
# 定义修改全局变量的函数
def close_program():
global STOP_CLASSIFY
STOP_CLASSIFY.append(1)
# 创建全局的进程锁
mutex = threading.Lock()
# 数据库操作
# 数据库地址
DB_ADDR = '127.0.0.1'
# 数据库用户名
USER_NAME = 'root'
# 数据库用户密码
USER_PASSWORD = '123456'
# 数据库名称
DB_NAME = 'mytestdb'
# 测试使用的数据
test = [[221.0, 1350.0, 640.0, 376.26798960315506, 543.0,
21257877.349853516, 4793407917.022705, 1263437211.5135193,
2039103758.0566826, 119541525.84075928],["sip sport dip dport protocol"]]
"""
预测函数:随机森林
每次运行前,检查:
四个需要修改的地方,命名是否正确
最后的运行模式是否正确
"""
from common_utils import * # 修改了
from argparse import ArgumentParser
from collections import namedtuple
from typing import List, Dict
from datetime import datetime
from path_utils import get_prj_root
import numpy as np
# from sklearn.externals import joblib
import joblib
from sklearn.ensemble import RandomForestClassifier # 训练模型
random.seed(datetime.now())
model_dir = os.path.join(get_prj_root(), "classify/models") # 修改:模型model文件夹路径
predict_model_pkl = os.path.join(model_dir, "dt2.pkl") # 修改:模型的版本,只用修改此处就行
Instance = namedtuple("Instance", ["features", "label"]) # 实例
dirs = {
"video": "./tmp/dt/video",
"iot": "./tmp/dt/iot",
"voip": "./tmp/dt/voip",
"AR": "./tmp/dt/AR",
}
instances_dir = os.path.join(get_prj_root(), "classify/instances") # 修改:instances路径
def train_and_predict():
iot = load_pkl(os.path.join(instances_dir, "iot.pkl")) # 不同实例的pkl是不同特征的
videos = load_pkl(os.path.join(instances_dir, "video.pkl"))
voip = load_pkl(os.path.join(instances_dir, "voip.pkl"))
AR = load_pkl(os.path.join(instances_dir, "AR.pkl"))
for i in videos:
assert i.label == 0
for i in iot:
assert i.label == 1
for i in voip:
assert i.label == 2
for i in AR:
assert i.label == 3
# print(videos)
debug("# iot instances {}".format(len(iot)))
debug("# video instances {}".format(len(videos)))
debug("# VOIP instances {}".format(len(voip)))
debug("# AR instances {}".format(len(AR)))
random.shuffle(voip) # 打乱排序
random.shuffle(iot)
random.shuffle(videos)
random.shuffle(AR)
n_video_train = int(len(videos) * 0.7)
n_video_test = len(videos) - n_video_train
video_train = videos[:n_video_train]
video_test = videos[n_video_train:]
iot_train = iot[:n_video_train]
iot_test = iot[len(iot) - len(video_test):]
voip_train = voip[:n_video_train]
voip_test = voip[len(voip) - len(video_test):]
AR_train = AR[:n_video_train]
AR_test = AR[len(AR) - len(video_test):]
info("#video train {}".format(len(video_train)))
info("#iot train {}".format(len(iot_train)))
info("#voip train {}".format(len(voip_train)))
info("#AR train {}".format(len(AR_train)))
train = []
train.extend(iot_train)
train.extend(video_train)
train.extend(voip_train)
train.extend(AR_train)
random.shuffle(train)
train_x = [x.features for x in train]
train_y = [x.label for x in train]
# test 1:1
test = []
info("#video test {}".format(len(video_test)))
info("#iot test {}".format(len(iot_test)))
info("#voip test {}".format(len(voip_test)))
info("#AR test {}".format(len(AR_test)))
test.extend(video_test)
test.extend(iot_test)
test.extend(voip_test)
test.extend(AR_test)
random.shuffle(test)
test_x = [t.features for t in test]
test_y = [t.label for t in test]
# 训练以及预测
predict_model = RandomForestClassifier(oob_score=True) # 引入训练方法
predict_model.fit(train_x, train_y) # 队训练数据进行拟合
predicts = predict_model.predict(test_x)
"""
dt = DT()
dt.fit((train_x, train_y))
predicts = dt.predict(test_x)
"""
"""
# 打印预测的结果
print(predicts)
print("-------------------------------")
"""
# 保存模型
fn_name = os.path.join(model_dir, predict_model_pkl)
joblib.dump(predict_model, predict_model_pkl)
# 评价模型
count = 0
for idx in range(len(test_x)):
if int(predicts[idx]) == int(test_y[idx]):
count += 1
# print(count / len(test_x))
return count / len(test_x)
# save_pkl(predict_model_pkl, knn.model)
# knn.save_model(dt_model_pkl) #储存模型
if __name__ == '__main__':
n = 10
s = 0
predict_sum = 0
for i in range(n):
s = train_and_predict()
predict_sum = predict_sum + s
print(predict_sum / n)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 18-5-21 下午3:44
# @Author : LK
# @File : 进度条.py
# @Software: PyCharm
import sys
import time
def process_bar(precent, width=50):
use_num = int(precent*width)
space_num = int(width-use_num)
precent = precent*100
# 第一个和最后一个一样梯形显示, 中间两个正确,但是在python2中报错
#
# print('[%s%s]%d%%'%(use_num*'#', space_num*' ',precent))
# print('[%s%s]%d%%'%(use_num*'#', space_num*' ',precent), end='\r')
print('[%s%s]%d%%'%(use_num*'#', space_num*' ',precent),file=sys.stdout,flush=True, end='\r')
# print('[%s%s]%d%%'%(use_num*'#', space_num*' ',precent),file=sys.stdout,flush=True)
# for i in range(21):
# precent = i/20
# process_bar(precent)
# time.sleep(0.2)
loguru
numpy
joblib
scikit-learn==0.24.1
pymysql
\ No newline at end of file
"""
该文件用于将分类好的结果保存到mysql数据库中
"""
import pymysql
from pool import *
# 建立连接
def connect_database(addr, uer_name, usr_paswd, db_name):
return pymysql.connect(host = addr, user = uer_name, passwd = usr_paswd, database = db_name, charset='utf8' )
# 插入数据
def mysqldb_insert(con, srcIP, dstIP, srcPort, dstPort, protocol,flowType):
# con = connect_database(DB_ADDR, USER_NAME, USER_PASSWORD, DB_NAME)
cursor = con.cursor()
sql = "INSERT INTO measure(srcIP, dstIP, srcPort, dstPort, protocol, flowType) VALUES ({}, {}, {}, {}, {},\'{}\') ON DUPLICATE KEY UPDATE flowType = \'{}\'".format(srcIP, dstIP, srcPort, dstPort, protocol, flowType,flowType)
# print(sql)
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
con.commit()
except:
# 发生错误时回滚
con.rollback()
#cursor.close()
#con.close()
print("插入数据成功!")
# 查询数据
def mysqldb_research():
return
# 清空数据
def mysqldb_clearall(con):
cursor = con.cursor()
sql = "TRUNCATE TABLE measure;"
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
con.commit()
except:
# 发生错误时回滚
con.rollback()
print("表已清空!")
if __name__ == "__main__":
# write_database()
con = connect_database(DB_ADDR, USER_NAME, USER_PASSWORD, DB_NAME)
mysqldb_insert(con, 3,4,1,1,'UDP',"iot")
mysqldb_insert(con, 1,2,1,1,1,"video")
mysqldb_insert(con, 1,3,3,1,1,"video")
mysqldb_insert(con, 1,4,3,1,1,"video")
# mysqldb_clearall(con)
#!/usr/bin/env bash
# Shell script absolute path
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "当前脚本所在路径为: $DIR"
cd $DIR
cd ..
# Check Python3
python3_version=$(python3 -V|awk '{print $2}')
if [ $python3_version ]; then
echo "python3已安装,当前版本为:{$python3_version}"
else
apt update && apt install -y python3
fi
# Check Python3-venv
python3venv_version=$(dpkg --status python3-venv 2>/dev/null|grep Version|awk '{print $2}')
if [ $python3venv_version ]; then
echo "python3-venv已安装,当前版本为:{$python3venv_version}"
else
apt update && apt install -y python3-venv
fi
# Check if .py38 has been built
py38=$(ls -a ../|grep .py38)
if [ $py38 ]; then
echo "Python3虚拟环境目录已安装"
else
python3 -m venv .py38
fi
# .py38 install requirements
source ./.py38/bin/activate
pip install -r ./requirement.txt
\ No newline at end of file
#!/usr/bin/env bash
# Shell script absolute path
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "当前脚本所在路径为: $DIR"
cd $DIR
cd ..
# Check if .py38 has been built
py38=$(ls -a ./|grep .py38)
if [ $py38 ]; then
echo "Python3虚拟环境目录已安装"
else
echo "请先运行init.sh创建Python3虚拟环境并下载依赖"
exit
fi
# Enter Python3 virtual environment
source ./.py38/bin/activate
python ./main.py
\ No newline at end of file
[
Instance(features=[221.0, 1350.0, 640.0, 376.26798960315506, 543.0, 21257877.349853516, 4793407917.022705, 1263437211.5135193, 2039103758.0566826, 119541525.84075928], label=0),
Instance(features=[543.0, 1420.0, 865.8, 397.8187527002718, 543.0, 80108.642578125, 302655220.0317383, 118959307.67059326, 124965001.82909915, 86550951.00402832], label=0),
Instance(features=[51.0, 1420.0, 565.2, 504.39246624032756, 543.0, 37908.55407714844, 152942180.63354492, 114446520.80535889, 66054246.991755255, 152402997.01690674], label=0),
Instance(features=[51.0, 1420.0, 573.0, 500.55289430788434, 543.0, 38146.97265625, 149838924.40795898, 112113237.38098145, 64707617.526605316, 149287939.07165527], label=0),
Instance(features=[543.0, 1420.0, 865.8, 397.8187527002718, 543.0, 80108.642578125, 302655220.0317383, 118959307.67059326, 124965001.82909915, 86550951.00402832], label=0),
Instance(features=[543.0, 543.0, 543.0, 0.0, 543.0, 12002904891.967773, 12002904891.967773, 12002904891.967773, 0.0, 12002904891.967773], label=0),
Instance(features=[543.0, 543.0, 543.0, 0.0, 543.0, 61996713161.468506, 61996713161.468506, 61996713161.468506, 0.0, 61996713161.468506], label=0),
Instance(features=[69.0, 165.0, 88.2, 38.400000000000006, 69.0, 234842.30041503906, 15935797214.508057, 4096173763.2751465, 6838056860.393458, 224331498.14605713], label=0),
Instance(features=[53.0, 53.0, 53.0, 0.0, 53.0, 900425158977.5085, 900619699001.3123, 900495255708.6943, 88229310.2092093, 900440909147.2626], label=0),
Instance(features=[171.0, 1460.0, 888.4, 514.1558518581695, 853.0, 11920.928955078125, 17442424058.914185, 4385495722.293854, 7538530505.708111, 49773454.666137695], label=0),
Instance(features=[69.0, 789.0, 353.8, 348.8440339177381, 69.0, 177860.26000976562, 16926848173.14148, 4387068212.032318, 7244279086.278186, 310623407.3638916], label=0),
Instance(features=[1152.0, 1460.0, 1398.4, 123.19999999999999, 1460.0, 37908.55407714844, 1278162.0025634766, 464260.5781555176, 505904.0109753843, 270485.87799072266], label=0),
Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 36954.87976074219, 43512821.197509766, 11164724.826812744, 18679961.749486398, 554561.6149902344], label=0),
Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 16927.719116210938, 599861.1450195312, 345230.1025390625, 231610.05946217623, 382065.7730102539], label=0),
Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 30994.415283203125, 44764995.57495117, 16246497.631072998, 18385686.144529935, 10095000.267028809], label=0),
Instance(features=[68.0, 1460.0, 796.8, 563.8050726980026, 498.0, 64849.853515625, 59234857.5592041, 23645222.187042236, 25055721.53286109, 17640590.66772461], label=0),
Instance(features=[566.0, 1460.0, 1281.2, 357.59999999999997, 1460.0, 56028.36608886719, 20931959.15222168, 5464732.646942139, 8935189.980569247, 435471.5347290039], label=0),
Instance(features=[53.0, 757.0, 472.2, 266.61687868550257, 498.0, 19500017.166137695, 179983756065.36865, 45023086249.82834, 77919581004.17883, 44544458.38928223], label=0),
Instance(features=[49.0, 1460.0, 1098.6, 546.7517169611816, 1460.0, 19073.486328125, 192880.63049316406, 67472.45788574219, 72792.08549574362, 28967.857360839844], label=0),
Instance(features=[357.0, 1460.0, 1160.2, 429.8894741674888, 1460.0, 10967.254638671875, 7920619964.599609, 1980168759.8228455, 3429721102.1972656, 22053.71856689453], label=0),
Instance(features=[34.0, 1460.0, 1095.6, 552.5133844532637, 1460.0, 12874.603271484375, 39534807.205200195, 9967505.931854248, 17071036.76126337, 161170.95947265625], label=0),
Instance(features=[566.0, 1460.0, 1281.2, 357.59999999999997, 1460.0, 22172.927856445312, 21413803.100585938, 5526959.8960876465, 9175244.715715846, 335931.77795410156], label=0), Instance(features=[645.0, 997.0, 920.2, 138.15701212750656, 997.0, 7315587997.436523, 10015514135.360718, 9327197492.12265, 1161482474.3592775, 9988843917.84668], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 6198.883056640625, 778085947.0367432, 194917023.18191528, 336693134.64337415, 787973.4039306641], label=0), Instance(features=[69.0, 629.0, 246.6, 205.1522361564699, 172.0, 190973.28186035156, 457492113.1134033, 219977498.0545044, 220039359.48775682, 211113452.91137695], label=0), Instance(features=[203.0, 517.0, 360.0, 157.0, 360.0, 576164960.861206, 576164960.861206, 576164960.861206, 0.0, 576164960.861206], label=0), Instance(features=[266.0, 1460.0, 834.0, 513.2812094748842, 498.0, 20980.8349609375, 573156118.3929443, 246138036.25106812, 248362972.34601125, 205687522.8881836], label=0), Instance(features=[472.0, 1460.0, 877.4, 475.78213501559725, 498.0, 12159.347534179688, 408530950.54626465, 113934516.90673828, 171170734.5952428, 23597478.86657715], label=0), Instance(features=[68.0, 1460.0, 853.4, 544.8543291559681, 781.0, 23126.602172851562, 110846996.30737305, 41195988.65509033, 45817371.300639905, 26956915.855407715], label=0), Instance(features=[75.0, 1301.0, 892.6, 506.8118388514617, 1285.0, 15974.044799804688, 29991816997.528076, 15005207479.000092, 14716919889.929535, 15014498472.213745], label=0), Instance(features=[154.0, 1460.0, 1119.6, 506.5750092533188, 1460.0, 17166.1376953125, 504382848.739624, 138471961.02142334, 212147087.12124813, 24743914.60418701], label=0), Instance(features=[566.0, 1460.0, 1188.4, 359.36032056975904, 1460.0, 10967.254638671875, 905036.9262695312, 240743.16024780273, 383666.3293895713, 23484.230041503906], label=0), Instance(features=[566.0, 1460.0, 1188.4, 359.36032056975904, 1460.0, 16927.719116210938, 380992.8894042969, 198960.3042602539, 182032.58514404297, 198960.3042602539], label=0), Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 20980.8349609375, 77643156.05163574, 27270257.472991943, 31771635.317431103, 15708446.502685547], label=0), Instance(features=[424.0, 1460.0, 966.8, 447.5562087604193, 992.0, 15974.044799804688, 507964849.4720459, 227932989.59732056, 230850223.75677642, 201875567.43621826], label=0), Instance(features=[498.0, 1460.0, 1070.3333333333333, 413.4298274462333, 1253.0, 22888.18359375, 74783086.7767334, 37402987.480163574, 37380099.296569824, 37402987.480163574], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 17881.393432617188, 38013219.83337402, 15703797.340393066, 16351302.199390737, 12392044.067382812], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 10967.254638671875, 12046905040.740967, 3011972486.972809, 5216320755.748366, 486969.9478149414], label=0), Instance(features=[180.0, 1460.0, 950.0, 521.1924788405911, 1152.0, 61988.83056640625, 12149194002.15149, 3041020989.41803, 5258609426.934627, 7413983.345031738], label=0), Instance(features=[180.0, 1460.0, 1009.2, 556.3964054520842, 1448.0, 21934.50927734375, 12049144983.291626, 3022482752.799988, 5211570900.783003, 20382046.699523926], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 8821.487426757812, 12145423173.904419, 3036862015.724182, 5258830299.664923, 1008033.7524414062], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 9059.906005859375, 12099762916.564941, 3025185704.231262, 5239209610.004252, 485420.22705078125], label=0), Instance(features=[302.0, 1460.0, 838.4, 511.9803121214721, 498.0, 10967.254638671875, 289257049.5605469, 73832750.32043457, 124399665.7465824, 3031492.233276367], label=0), Instance(features=[304.0, 1460.0, 848.4, 504.9964752352238, 520.0, 12159.347534179688, 24822950.36315918, 8991003.036499023, 10197928.628486902, 5564451.217651367], label=0), Instance(features=[75.0, 1460.0, 863.4, 539.171809352084, 836.0, 38862.22839355469, 300346136.09313965, 82095265.38848877, 126466518.33213389, 13998031.616210938], label=0), Instance(features=[69.0, 278.0, 137.8, 78.91108920804477, 85.0, 144958.49609375, 462785959.2437744, 210317969.3222046, 211827960.3342278, 189170479.7744751], label=0), Instance(features=[266.0, 1448.0, 765.75, 445.5818527498623, 674.5, 735998.1536865234, 312245845.79467773, 104909976.32344563, 146609181.51557696, 1748085.0219726562], label=0), Instance(features=[266.0, 1460.0, 764.75, 449.50382367672916, 666.5, 22888.18359375, 310250997.54333496, 104106028.87471516, 145768840.9933372, 2044200.8972167969], label=0), Instance(features=[266.0, 1460.0, 765.75, 449.66341579007735, 668.5, 1394033.432006836, 354246139.5263672, 131862004.59798177, 158034992.041647, 39945840.83557129], label=0), Instance(features=[266.0, 1460.0, 765.75, 449.66341579007735, 668.5, 732183.4564208984, 367688894.2718506, 184210538.86413574, 183478355.40771484, 184210538.86413574], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 12159.347534179688, 21399974.822998047, 6167769.432067871, 8891484.75069979, 1629471.778869629], label=0), Instance(features=[283.0, 1460.0, 1029.8, 530.7814616205053, 1460.0, 20980.8349609375, 9747028.350830078, 3273328.1453450522, 4577614.802952686, 51975.250244140625], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 11920.928955078125, 1834154.1290283203, 668287.2772216797, 746585.1773631036, 413537.02545166016], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 15974.044799804688, 44844865.798950195, 15847980.976104736, 18356636.896544904, 9265542.030334473], label=0), Instance(features=[92.0, 1460.0, 793.2, 562.4540514566501, 498.0, 15974.044799804688, 309867143.63098145, 90308785.4385376, 128479053.49490911, 25676012.03918457], label=0), Instance(features=[114.0, 1460.0, 770.0, 576.3374011809402, 498.0, 12874.603271484375, 198775053.024292, 67333757.87734985, 81160540.5818586, 35273551.94091797], label=0), Instance(features=[69.0, 164.0, 110.6, 38.58808106138474, 85.0, 240087.50915527344, 363121986.38916016, 141678988.93356323, 152320843.3736875, 101676940.91796875], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 73909.75952148438, 123717069.62585449, 69681644.43969727, 51664174.322677545, 85253953.93371582], label=0), Instance(features=[75.0, 517.0, 369.6666666666667, 208.360798189636, 517.0, 4271030.426025391, 395777940.7501221, 200024485.58807373, 195753455.16204834, 200024485.58807373], label=0), Instance(features=[203.0, 517.0, 360.0, 157.0, 360.0, 275189876.5563965, 275189876.5563965, 275189876.5563965, 0.0, 275189876.5563965], label=0), Instance(features=[302.0, 1460.0, 807.6, 537.1113850962387, 498.0, 12874.603271484375, 205285072.32666016, 56649982.92922974, 86251862.02980827, 10650992.393493652], label=0), Instance(features=[75.0, 1365.0, 844.6, 496.0006451608707, 917.0, 558137.8936767578, 5907773017.883301, 1607518017.2920227, 2485026948.507088, 260870456.69555664], label=0), Instance(features=[247.0, 1460.0, 827.4, 523.8402810017573, 498.0, 12159.347534179688, 265039920.80688477, 66994488.23928833, 114347651.69753249, 1462936.4013671875], label=0), Instance(features=[472.0, 1460.0, 1033.75, 436.88578312872573, 1101.5, 20027.16064453125, 286478042.60253906, 95511039.09810384, 135034063.30009258, 35047.53112792969], label=0), Instance(features=[318.0, 1460.0, 838.4, 511.01686860611557, 498.0, 30994.415283203125, 304636955.26123047, 87099254.13131714, 126778600.46064155, 21864533.42437744], label=0), Instance(features=[266.0, 1460.0, 892.8, 490.89730086852177, 780.0, 24080.276489257812, 301223039.6270752, 76725006.10351562, 129634012.70485088, 2826452.2552490234], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 317806959.1522217, 317806959.1522217, 317806959.1522217, 0.0, 317806959.1522217], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 388973951.3397217, 388973951.3397217, 388973951.3397217, 0.0, 388973951.3397217], label=0), Instance(features=[112.0, 1460.0, 918.8, 535.7008120210385, 1064.0, 22888.18359375, 988006.591796875, 530779.3617248535, 408667.26212039025, 556111.3357543945], label=0), Instance(features=[566.0, 1460.0, 1033.2, 390.6519678690996, 1070.0, 10013.580322265625, 11563062.66784668, 3137767.3149108887, 4879949.3086357685, 488996.5057373047], label=0), Instance(features=[282.0, 1460.0, 909.8, 484.32402376921175, 849.0, 11920.928955078125, 283659934.9975586, 73796749.11499023, 121254851.01171769, 5757570.266723633], label=0), Instance(features=[302.0, 1460.0, 838.4, 511.9803121214721, 498.0, 13113.021850585938, 281206846.2371826, 74366509.9143982, 119602227.27232686, 8123040.199279785], label=0), Instance(features=[498.0, 1460.0, 1086.4, 453.1973521546656, 1448.0, 15020.370483398438, 13982057.571411133, 3636956.214904785, 5975953.734322401, 275373.4588623047], label=0), Instance(features=[498.0, 1460.0, 1214.0, 369.50994573894764, 1448.0, 44107.43713378906, 9217977.523803711, 4818737.506866455, 3316813.464951306, 5006432.53326416], label=0), Instance(features=[230.0, 1460.0, 896.0, 548.6113378339898, 1064.0, 11205.673217773438, 302710056.30493164, 76157748.69918823, 130802256.44974475, 954866.4093017578], label=0), Instance(features=[51.0, 1460.0, 724.0, 544.1723072704086, 692.5, 41961.669921875, 391793012.61901855, 229004621.5057373, 166636324.29265845, 295178890.2282715], label=0), Instance(features=[154.0, 1460.0, 1119.6, 506.5750092533188, 1460.0, 4053.1158447265625, 338228940.9637451, 85055232.04803467, 146171985.31614003, 993967.0562744141], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 205670118.33190918, 205670118.33190918, 205670118.33190918, 0.0, 205670118.33190918], label=0), Instance(features=[498.0, 1460.0, 1191.6, 364.7736832612792, 1388.0, 25033.950805664062, 17818927.764892578, 4705011.84463501, 7580545.560745716, 488042.83142089844], label=0), Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 10013.580322265625, 38522005.08117676, 9644508.361816406, 16672432.816320054, 23007.39288330078], label=0), Instance(features=[532.0, 1460.0, 1191.6, 366.7116578457794, 1460.0, 20027.16064453125, 846862.79296875, 256001.94931030273, 343350.83213370305, 78558.92181396484], label=0), Instance(features=[514.0, 1460.0, 1191.6, 371.89762032043177, 1460.0, 10013.580322265625, 890016.5557861328, 236511.23046875, 377434.79666208074, 23007.39288330078], label=0), Instance(features=[180.0, 599.0, 447.4, 143.08822453297827, 498.0, 1609802.24609375, 81108537197.11304, 20429762005.80597, 35033619360.69005, 304450511.93237305], label=0), Instance(features=[266.0, 1460.0, 1083.0, 440.00272726427505, 1199.0, 1021862.0300292969, 331479072.5708008, 166250467.30041504, 165228605.27038574, 166250467.30041504], label=0), Instance(features=[266.0, 1460.0, 1083.0, 437.9114065653006, 1165.0, 12159.347534179688, 239316940.3076172, 60148477.55432129, 103444153.28565085, 632405.2810668945], label=0), Instance(features=[266.0, 1460.0, 1083.0, 437.9114065653006, 1165.0, 38146.97265625, 310812950.13427734, 77934980.39245605, 134452544.39998987, 444412.2314453125], label=0), Instance(features=[69.0, 517.0, 191.8, 169.57169575138417, 85.0, 130891.79992675781, 17819832086.56311, 4543594241.142273, 7666402234.468327, 177206993.10302734], label=0), Instance(features=[266.0, 1460.0, 765.75, 449.66341579007735, 668.5, 705957.4127197266, 268321037.29248047, 108160018.92089844, 115435336.07208605, 55453062.05749512], label=0), Instance(features=[266.0, 1460.0, 765.75, 449.66341579007735, 668.5, 41007.99560546875, 284489870.07141113, 103950977.32543945, 128145185.1403774, 27322053.909301758], label=0), Instance(features=[180.0, 1460.0, 802.2, 547.0920946239308, 498.0, 16212.46337890625, 17501767873.764038, 4593563735.485077, 7461061224.855642, 436235427.8564453], label=0), Instance(features=[180.0, 1460.0, 787.0, 500.1127872790297, 498.0, 49019098.28186035, 15566764116.287231, 4286816298.9616394, 6535877782.240981, 765740990.6387329], label=0), Instance(features=[180.0, 1460.0, 1170.6, 498.75990215734066, 1448.0, 1953840.2557373047, 17468115806.57959, 4593526244.163513, 7441991013.864291, 452017664.9093628], label=0), Instance(features=[114.0, 1460.0, 800.8, 555.0821200507183, 498.0, 12874.603271484375, 288254022.5982666, 96975982.18917847, 117678743.18217297, 49818515.77758789], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 24080.276489257812, 419086933.1359863, 105257749.55749512, 181190881.50117153, 959992.4087524414], label=0), Instance(features=[344.0, 1460.0, 838.4, 493.33055855075514, 498.0, 24080.276489257812, 372086048.1262207, 106401741.50466919, 154036760.79917333, 26748418.8079834], label=0), Instance(features=[154.0, 1460.0, 1119.6, 506.5750092533188, 1460.0, 5960.4644775390625, 889743089.6759033, 222645521.16394043, 385149103.48257643, 416517.2576904297], label=0), Instance(features=[53.0, 819.0, 387.5, 297.2158306685564, 339.0, 39870977.4017334, 60960207939.14795, 20436065594.355267, 28655105114.495094, 308117866.5161133], label=0), Instance(features=[53.0, 659.0, 347.5, 242.1099956631283, 339.0, 39777994.15588379, 60982697963.7146, 20449623982.111614, 28661450326.960552, 326395988.46435547], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 314588069.9157715, 314588069.9157715, 314588069.9157715, 0.0, 314588069.9157715], label=0), Instance(features=[266.0, 1460.0, 902.2, 486.0372002223698, 839.0, 19073.486328125, 372415065.76538086, 175015985.96572876, 174527868.14289537, 163814902.30560303], label=0), Instance(features=[367.0, 1460.0, 951.0, 467.0511749262601, 996.0, 11920.928955078125, 453582048.4161377, 200553715.22903442, 203938567.07168227, 174310445.78552246], label=0), Instance(features=[498.0, 1460.0, 1007.6, 416.2180197925121, 1054.0, 40054.3212890625, 37325143.814086914, 16097784.042358398, 16392060.92261857, 13512969.017028809], label=0), Instance(features=[164.0, 1460.0, 708.0, 450.9079728725142, 721.0, 84877.01416015625, 59169657945.632935, 14945246458.053589, 25533566151.55131, 305621504.7836304], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 5006.7901611328125, 335884094.23828125, 84220290.184021, 145298381.37850446, 496029.8538208008], label=0), Instance(features=[271.0, 1460.0, 931.8, 491.9725195577493, 996.0, 1320123.6724853516, 365045785.90393066, 222310304.64172363, 158465428.11415598, 300565004.3487549], label=0), Instance(features=[180.0, 1460.0, 1009.2, 556.3964054520842, 1448.0, 25033.950805664062, 14438995838.165283, 3619478702.545166, 6246671188.375674, 19446969.032287598], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 6198.883056640625, 13740953922.271729, 3435414254.6653748, 5949906106.022429, 348448.7533569336], label=0), Instance(features=[180.0, 1347.0, 738.8, 443.8312291851487, 498.0, 7065057.754516602, 14477946043.014526, 4058396756.6490173, 6055003527.475111, 874287962.9135132], label=0), Instance(features=[266.0, 1460.0, 1021.0, 536.2219689643459, 1337.0, 33140.18249511719, 360765933.9904785, 180399537.08648682, 180366396.9039917, 180399537.08648682], label=0), Instance(features=[266.0, 1460.0, 1021.0, 536.2219689643459, 1337.0, 27894.973754882812, 399661064.1479492, 199844479.56085205, 199816584.58709717, 199844479.56085205], label=0), Instance(features=[180.0, 1460.0, 791.0, 555.4544085701364, 498.0, 50067.901611328125, 12546051025.390625, 3418325245.3804016, 5289466975.367775, 563599944.114685], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 325339078.90319824, 325339078.90319824, 325339078.90319824, 0.0, 325339078.90319824], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 133991.24145507812, 155073881.149292, 59573332.46866862, 68200197.37709245, 23512125.01525879], label=0), Instance(features=[101.0, 741.0, 352.6, 235.41503775247665, 243.0, 2941131.591796875, 3015913963.317871, 847359299.659729, 1254435935.2671611, 185291051.86462402], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 337796926.4984131, 337796926.4984131, 337796926.4984131, 0.0, 337796926.4984131], label=0), Instance(features=[22.0, 1460.0, 452.2, 529.2003023430731, 180.0, 532150.2685546875, 2548447847.366333, 683387756.3476562, 1078091983.9144962, 92285513.87786865], label=0), Instance(features=[283.0, 1460.0, 1029.8, 526.4136776338548, 1448.0, 10967.254638671875, 1724958.4197998047, 703752.0408630371, 726735.3480454262, 539541.2445068359], label=0), Instance(features=[180.0, 1460.0, 863.8, 464.21822454531014, 996.0, 1472949.9816894531, 335441827.77404785, 144180715.08407593, 131827011.1612705, 119904041.2902832], label=0), Instance(features=[180.0, 1460.0, 809.4, 524.4591881166732, 498.0, 40737152.099609375, 300920009.6130371, 161628544.33059692, 109353491.47627816, 152428507.8048706], label=0), Instance(features=[180.0, 1460.0, 739.0, 458.45043352580655, 498.0, 22044181.82373047, 256494998.93188477, 135958790.77911377, 105756466.66341457, 132647991.18041992], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 331628084.18273926, 331628084.18273926, 331628084.18273926, 0.0, 331628084.18273926], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 9059.906005859375, 294625997.54333496, 74688732.62405396, 126991371.99631166, 2059936.5234375], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 285554885.8642578, 285554885.8642578, 285554885.8642578, 0.0, 285554885.8642578], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 355246067.04711914, 355246067.04711914, 355246067.04711914, 0.0, 355246067.04711914], label=0), Instance(features=[180.0, 1460.0, 1009.8, 471.6865060609642, 1064.0, 77009.20104980469, 341979026.7944336, 85746228.69491577, 147936229.57004938, 464439.39208984375], label=0), Instance(features=[185.0, 1460.0, 815.0, 537.9754641245268, 498.0, 953.67431640625, 289327144.62280273, 107834339.1418457, 129090908.0447468, 34174919.12841797], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 31948.089599609375, 163197040.55786133, 75778722.76306152, 67121186.61629394, 64107179.64172363], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 39815.90270996094, 323179006.5765381, 81485748.29101562, 139544836.87364933, 1362085.3424072266], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 5006.7901611328125, 317117929.45861816, 79771220.68405151, 137034419.31773517, 980973.2437133789], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 29087.066650390625, 27698993.682861328, 8252203.464508057, 11427034.255290747, 2640366.554260254], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 13828.277587890625, 46239137.64953613, 13513028.621673584, 19157407.009656448, 3899574.2797851562], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 102996.826171875, 59205055.236816406, 19073486.328125, 24144027.479256514, 8492946.62475586], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 189449071.88415527, 189449071.88415527, 189449071.88415527, 0.0, 189449071.88415527], label=0), Instance(features=[474.0, 1460.0, 1029.8, 450.2196797120268, 1257.0, 101089.4775390625, 14524936.67602539, 5328238.010406494, 5924671.363884872, 3343462.9440307617], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 291363954.5440674, 291363954.5440674, 291363954.5440674, 0.0, 291363954.5440674], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 291086912.15515137, 291086912.15515137, 291086912.15515137, 0.0, 291086912.15515137], label=0), Instance(features=[283.0, 1460.0, 853.4, 504.02206300915043, 566.0, 10013.580322265625, 32567977.905273438, 8396506.309509277, 13961074.622799322, 504016.8762207031], label=0), Instance(features=[180.0, 1460.0, 776.2, 567.672581687719, 498.0, 30040.740966796875, 314578056.3354492, 84946751.59454346, 132960627.15831636, 12589454.650878906], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 30994.415283203125, 335455894.47021484, 92184722.42355347, 141053038.56879073, 16626000.40435791], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 315080881.1187744, 315080881.1187744, 315080881.1187744, 0.0, 315080881.1187744], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 375045061.1114502, 375045061.1114502, 375045061.1114502, 0.0, 375045061.1114502], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 206947.32666015625, 148854017.25769043, 78549385.07080078, 60950485.85205471, 86587190.62805176], label=0), Instance(features=[154.0, 1460.0, 1006.4, 566.0945504065553, 1460.0, 5006.7901611328125, 338291883.4686279, 85260450.83999634, 146091894.377619, 1372456.5505981445], label=0), Instance(features=[24.0, 90.0, 57.0, 33.0, 57.0, 21488189.697265625, 21488189.697265625, 21488189.697265625, 0.0, 21488189.697265625], label=0), Instance(features=[24.0, 90.0, 57.0, 33.0, 57.0, 2779006.9580078125, 2779006.9580078125, 2779006.9580078125, 0.0, 2779006.9580078125], label=0), Instance(features=[24.0, 42.0, 33.0, 9.0, 33.0, 2288818.359375, 2288818.359375, 2288818.359375, 0.0, 2288818.359375], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 32901.763916015625, 522522926.3305664, 147658467.29278564, 217918602.25774756, 34039020.53833008], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 23841.85791015625, 590304136.2762451, 171848475.93307495, 244806940.30037817, 48532962.799072266], label=0), Instance(features=[34.0, 1460.0, 918.8, 664.4379278758852, 1460.0, 12874.603271484375, 817779064.1784668, 204926252.3651123, 353831564.01913106, 956535.3393554688], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 12159.347534179688, 393916130.06591797, 98679244.51828003, 170455180.7013458, 394344.3298339844], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 127077.10266113281, 664869070.0531006, 230298360.1888021, 307467964.237317, 25898933.41064453], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 30994.415283203125, 961080074.3103027, 246674776.0772705, 412566646.4570605, 12794017.791748047], label=0), Instance(features=[75.0, 517.0, 369.6666666666667, 208.360798189636, 517.0, 303983.6883544922, 722588062.286377, 361446022.9873657, 361142039.29901123, 361446022.9873657], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 4053.1158447265625, 654654026.0314941, 173334300.5180359, 278336882.42770785, 19339561.462402344], label=0), Instance(features=[152.0, 1430.0, 702.0, 440.1399777343567, 498.0, 2140998.8403320312, 86138963.69934082, 37965476.512908936, 31358067.098501, 31790971.755981445], label=0), Instance(features=[266.0, 1460.0, 734.4, 427.8511890833073, 498.0, 9660959.243774414, 310178995.1324463, 98984479.9041748, 123893619.96474949, 38048982.62023926], label=0), Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 16927.719116210938, 65076112.74719238, 17923533.91647339, 27353815.503475018, 3300547.5997924805], label=0), Instance(features=[348.0, 1460.0, 838.4, 497.78935304001834, 498.0, 166177.74963378906, 390552997.5891113, 100378513.33618164, 167556897.8167548, 5397439.002990723], label=0), Instance(features=[266.0, 1460.0, 1086.4, 438.29378275307533, 1176.0, 12159.347534179688, 589874029.1595459, 157080292.7017212, 250335464.23282778, 19217491.149902344], label=0), Instance(features=[498.0, 1460.0, 918.8, 446.7493256849976, 678.0, 165939.3310546875, 2074003.2196044922, 944733.6196899414, 699724.5024022621, 769495.964050293], label=0), Instance(features=[498.0, 1460.0, 975.6, 430.27321552706485, 962.0, 20863056.182861328, 54913997.650146484, 35954713.82141113, 14167699.247757833, 32087087.631225586], label=0), Instance(features=[150.0, 1381.0, 800.4, 545.9126670081946, 933.0, 328850030.89904785, 2381392955.7800293, 1448256492.614746, 818344783.5007114, 1541391491.8899536], label=0), Instance(features=[258.0, 1460.0, 848.4, 509.74723147850443, 566.0, 13113.021850585938, 20050048.828125, 5194783.2107543945, 8580944.696644109, 357985.4965209961], label=0), Instance(features=[498.0, 1460.0, 1088.8, 455.13356281425786, 1460.0, 10967.254638671875, 15133142.471313477, 4010498.523712158, 6431045.548357127, 448942.1844482422], label=0), Instance(features=[59.0, 870.0, 555.0, 296.2309909513183, 498.0, 555038.4521484375, 289527177.81066895, 112341761.5890503, 107875994.61652163, 79642415.0466919], label=0), Instance(features=[498.0, 1460.0, 819.2, 362.57214454505464, 678.0, 561952.5909423828, 42387008.66699219, 16403257.846832275, 17272189.08844017, 11332035.064697266], label=0), Instance(features=[2.0, 498.0, 202.0, 241.70064129000568, 10.0, 1943111.4196777344, 2193044900.894165, 698347032.0701599, 882749467.7892686, 299200057.98339844], label=0), Instance(features=[59.0, 1460.0, 651.2, 460.40477842872133, 498.0, 202894.2108154297, 567331075.668335, 246367990.97061157, 249406106.4863269, 208968997.00164795], label=0), Instance(features=[2.0, 1221.0, 308.75, 526.6979091471695, 6.0, 962018.9666748047, 938365936.2792969, 403788010.2793376, 393870076.09840626, 272036075.592041], label=0), Instance(features=[2.0, 836.0, 212.5, 359.99270825948685, 6.0, 5804061.8896484375, 373600959.77783203, 243480364.48160806, 168314808.52449718, 351036071.77734375], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 117063.52233886719, 488145112.991333, 123109757.90023804, 210758545.11926955, 2088427.5436401367], label=0), Instance(features=[33.0, 241.0, 192.8, 80.22318866761655, 232.0, 372215032.57751465, 2143828868.8659668, 920712471.0083008, 717099898.1666881, 583402991.2948608], label=0), Instance(features=[8.0, 1460.0, 639.6, 473.494920775292, 498.0, 38059949.87487793, 646749019.6228027, 320077240.46707153, 263270761.66282758, 297749996.18530273], label=0), Instance(features=[8.0, 498.0, 317.8, 222.1084419827396, 498.0, 42990207.67211914, 351454973.2208252, 206649541.8548584, 130371898.67738624, 216076493.26324463], label=0), Instance(features=[31.0, 238.0, 190.0, 79.82480817390042, 229.0, 526228904.7241211, 1918848037.7197266, 943273484.7068787, 573832515.6496229, 664008498.1918335], label=0), Instance(features=[2.0, 1440.0, 390.4, 558.5071530428236, 10.0, 978946.6857910156, 1177330970.7641602, 417551994.32373047, 472848695.5347159, 245949029.92248535], label=0), Instance(features=[180.0, 1460.0, 570.4, 456.096744123437, 357.0, 2575159.0728759766, 10647056818.008423, 2890199542.0455933, 4483737935.254644, 455583095.5505371], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 10967.254638671875, 419295072.555542, 107474029.06417847, 180080459.7312228, 5295038.223266602], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 3099.4415283203125, 555128097.5341797, 138786792.75512695, 240374764.4064652, 7987.022399902344], label=0), Instance(features=[180.0, 1460.0, 912.0, 511.9234317747138, 962.0, 953.67431640625, 510086774.8260498, 128070235.25238037, 220557845.78841338, 1096606.2545776367], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 3099.4415283203125, 388364791.8701172, 97105741.50085449, 168158491.59047666, 27537.34588623047], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 33855.438232421875, 418956995.010376, 107304990.29159546, 179979493.35314205, 5114555.358886719], label=0), Instance(features=[180.0, 1460.0, 1018.4, 552.1831580191486, 1460.0, 9059.906005859375, 445860147.4761963, 111710011.95907593, 192922054.29072875, 485420.22705078125], label=0), Instance(features=[181.0, 1460.0, 754.8, 542.1451466166602, 498.0, 33140.18249511719, 342921972.2747803, 188220739.36462402, 146841487.73932418, 204963922.50061035], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 49114.227294921875, 235726833.34350586, 93728303.90930176, 102101471.64307055, 45408964.15710449], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 504688024.520874, 504688024.520874, 504688024.520874, 0.0, 504688024.520874], label=0), Instance(features=[282.0, 1460.0, 909.8, 484.32402376921175, 849.0, 15020.370483398438, 376907110.2142334, 97098767.75741577, 161614405.22351533, 5736470.2224731445], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 986099.2431640625, 469647884.3688965, 118360757.82775879, 202815948.34682304, 1404523.8494873047], label=0), Instance(features=[24.0, 90.0, 57.0, 33.0, 57.0, 3365039.825439453, 3365039.825439453, 3365039.825439453, 0.0, 3365039.825439453], label=0), Instance(features=[24.0, 90.0, 57.0, 33.0, 57.0, 2835035.3240966797, 2835035.3240966797, 2835035.3240966797, 0.0, 2835035.3240966797], label=0), Instance(features=[24.0, 42.0, 33.0, 9.0, 33.0, 1801013.9465332031, 1801013.9465332031, 1801013.9465332031, 0.0, 1801013.9465332031], label=0), Instance(features=[2.0, 498.0, 219.0, 229.72853544999583, 87.0, 126734972.00012207, 3099634170.5322266, 1003837764.2631531, 1226325242.040202, 394490957.26013184], label=0), Instance(features=[2.0, 480.0, 164.0, 223.4696101635895, 10.0, 304587841.03393555, 3435501098.6328125, 1870044469.833374, 1565456628.7994385, 1870044469.833374], label=0), Instance(features=[2.0, 167.0, 59.666666666666664, 75.96636682696422, 10.0, 569247007.3699951, 3196852922.439575, 1883049964.9047852, 1313802957.53479, 1883049964.9047852], label=0), Instance(features=[180.0, 1460.0, 678.0, 440.5219631301032, 498.0, 7867.8131103515625, 3060411930.0842285, 903623998.1651306, 1261708660.5246222, 277038097.3815918], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 25987.625122070312, 338664054.87060547, 85038542.74749756, 146431309.0040922, 732064.2471313477], label=0), Instance(features=[302.0, 1460.0, 807.6, 537.1113850962387, 498.0, 23841.85791015625, 297491073.60839844, 89486002.9220581, 122500895.36542992, 30214548.110961914], label=0), Instance(features=[318.0, 1430.0, 847.0, 482.56895880278086, 559.0, 593185.4248046875, 245357036.59057617, 77455759.04846191, 98688534.91768344, 31936407.0892334], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 77962.87536621094, 471239805.2215576, 118166208.26721191, 203847644.9187018, 673532.4859619141], label=0), Instance(features=[498.0, 1460.0, 1029.8, 417.3988021065705, 1152.0, 26941.299438476562, 977993.0114746094, 479519.3672180176, 418736.41687141336, 456571.5789794922], label=0), Instance(features=[69.0, 278.0, 137.8, 78.91108920804477, 85.0, 296831.1309814453, 1197694063.1866455, 591389238.8343811, 591150157.4917392, 583783030.5099487], label=0), Instance(features=[472.0, 1460.0, 982.8, 422.88504348108603, 1030.0, 953.67431640625, 1366235017.7764893, 667799234.3902588, 665230364.2959077, 652480483.0551147], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 8106.231689453125, 2292271137.237549, 573611259.4604492, 992269102.6882776, 1082897.1862792969], label=0), Instance(features=[203.0, 517.0, 360.0, 157.0, 360.0, 567649126.0528564, 567649126.0528564, 567649126.0528564, 0.0, 567649126.0528564], label=0), Instance(features=[181.0, 1460.0, 754.8, 542.1451466166602, 498.0, 38146.97265625, 870161056.5185547, 329583287.2390747, 337138127.7573473, 224066972.73254395], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 15974.044799804688, 726923942.565918, 197869479.65621948, 306582541.1126966, 32269001.007080078], label=0), Instance(features=[180.0, 1460.0, 626.2, 434.6034514359038, 498.0, 46968.46008300781, 1328106880.1879883, 465326488.0180359, 529519613.17227066, 266576051.71203613], label=0), Instance(features=[75.0, 517.0, 369.6666666666667, 208.360798189636, 517.0, 650882.7209472656, 581269025.8026123, 290959954.2617798, 290309071.5408325, 290959954.2617798], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 11920.928955078125, 46281099.31945801, 16216278.076171875, 18932301.348393407, 9286046.028137207], label=0), Instance(features=[180.0, 1460.0, 840.2, 524.8871878794528, 603.0, 69141.38793945312, 318445205.68847656, 95492303.37142944, 129931438.79680015, 31727433.20465088], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 12159.347534179688, 406101942.0623779, 117814540.86303711, 168551060.01701063, 32572031.021118164], label=0), Instance(features=[53.0, 1460.0, 556.4, 493.19148411139463, 498.0, 43503046.0357666, 61333158969.87915, 15479937732.219696, 26473806729.038822, 271544456.4819336], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 445397138.59558105, 445397138.59558105, 445397138.59558105, 0.0, 445397138.59558105], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 30994.415283203125, 552266120.9106445, 138715267.18139648, 238764566.59883955, 1281976.6998291016], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 16927.719116210938, 473403215.4083252, 118538260.4598999, 204881571.78311145, 366449.35607910156], label=0), Instance(features=[75.0, 1013.0, 623.8, 355.13963451014587, 517.0, 149011.61193847656, 27237824201.583862, 7440325021.743774, 11474517097.939096, 1261663436.8896484], label=0), Instance(features=[75.0, 757.0, 449.6666666666667, 282.4669105498121, 517.0, 717878.3416748047, 1104288101.196289, 552502989.7689819, 551785111.4273071, 552502989.7689819], label=0), Instance(features=[59.0, 1460.0, 783.0, 572.9020858750647, 498.0, 14066.696166992188, 105442047.11914062, 41730284.69085693, 44515775.417278856, 30732512.47406006], label=0), Instance(features=[266.0, 1460.0, 834.0, 513.2812094748842, 498.0, 46014.78576660156, 794950008.392334, 309257745.74279785, 299486283.1011046, 221017479.8965454], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 10967.254638671875, 88099956.51245117, 27053773.403167725, 36184203.78196522, 10052084.922790527], label=0), Instance(features=[68.0, 1460.0, 796.8, 563.8050726980026, 498.0, 12159.347534179688, 2629995.346069336, 814259.0522766113, 1074616.7856355452, 307440.75775146484], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 32901.763916015625, 10974168.77746582, 2910017.967224121, 4657279.107689708, 316500.6637573242], label=0), Instance(features=[237.0, 1460.0, 1029.8, 535.0799566419958, 1460.0, 23126.602172851562, 4546880.722045898, 1162230.9684753418, 1954171.0198809756, 39458.274841308594], label=0), Instance(features=[203.0, 1460.0, 1029.8, 539.244805260097, 1460.0, 10013.580322265625, 37044048.30932617, 9280204.772949219, 16029468.676431127, 33378.60107421875], label=0), Instance(features=[498.0, 1460.0, 996.0, 415.5709325734898, 996.0, 943899.1546630859, 4358053.207397461, 2650976.1810302734, 1707077.0263671875, 2650976.1810302734], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 649086952.2094727, 649086952.2094727, 649086952.2094727, 0.0, 649086952.2094727], label=0), Instance(features=[22.0, 1460.0, 603.6, 515.167390272327, 498.0, 492811.2030029297, 441520214.08081055, 146568536.75842285, 176774332.04314804, 72130560.87493896], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 625500917.4346924, 625500917.4346924, 625500917.4346924, 0.0, 625500917.4346924], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 675348997.1160889, 675348997.1160889, 675348997.1160889, 0.0, 675348997.1160889], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 675944089.8895264, 675944089.8895264, 675944089.8895264, 0.0, 675944089.8895264], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 738692998.8861084, 738692998.8861084, 738692998.8861084, 0.0, 738692998.8861084], label=0), Instance(features=[69.0, 278.0, 137.8, 78.91108920804477, 85.0, 296115.8752441406, 708487033.8439941, 288230001.9264221, 302737952.46875507, 222068428.9932251], label=0), Instance(features=[75.0, 901.0, 598.5, 340.4801756343532, 709.0, 106811.5234375, 51745048999.78638, 17486811955.769855, 24225991169.47778, 715280055.9997559], label=0), Instance(features=[69.0, 164.0, 110.6, 38.58808106138474, 85.0, 7867.8131103515625, 718745946.8841553, 284462988.37661743, 303483445.959548, 209549069.40460205], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 599241971.9696045, 599241971.9696045, 599241971.9696045, 0.0, 599241971.9696045], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 89168.54858398438, 104675054.5501709, 26550233.364105225, 45106454.76716195, 718355.1788330078], label=0), Instance(features=[283.0, 1460.0, 853.4, 504.02206300915043, 566.0, 23126.602172851562, 40792942.04711914, 11340975.761413574, 17101562.289949346, 2273917.1981811523], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 18119.81201171875, 664000988.0065918, 174796760.08224487, 282797308.32992625, 17583966.25518799], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 2861.02294921875, 10182879924.77417, 2545726239.681244, 4409312735.933577, 11086.463928222656], label=0), Instance(features=[68.0, 1460.0, 744.0, 600.4838049439801, 498.0, 22888.18359375, 65099954.60510254, 23232996.463775635, 26697281.51189973, 13904571.533203125], label=0), Instance(features=[247.0, 1460.0, 827.4, 523.8402810017573, 498.0, 11920.928955078125, 642252922.0581055, 183723449.70703125, 267416144.95062873, 46314477.92053223], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 103950.50048828125, 1418726921.081543, 361808240.4136658, 610309144.3732666, 14201045.036315918], label=0), Instance(features=[319.0, 1460.0, 902.2, 481.231919140865, 800.0, 537429094.3145752, 1247168064.1174316, 892298579.2160034, 354869484.9014282, 892298579.2160034], label=0), Instance(features=[302.0, 1460.0, 838.4, 511.9803121214721, 498.0, 21934.50927734375, 1205783128.7384033, 305353522.3007202, 519901893.1031451, 7804512.977600098], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 47922.13439941406, 786674022.6745605, 197611987.5907898, 340096592.33623815, 1863002.7770996094], label=0), Instance(features=[367.0, 1460.0, 950.8, 467.03207598622174, 995.0, 16212.46337890625, 783121824.2645264, 383275508.88061523, 383423217.02048695, 374981999.39727783], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 43153.76281738281, 4935979.843139648, 1843035.2210998535, 2005357.0042010501, 1196503.6392211914], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 12159.347534179688, 57806015.01464844, 25634765.625, 26036034.08913767, 22360444.06890869], label=0), Instance(features=[34.0, 1460.0, 989.2, 597.7285002407029, 1460.0, 13113.021850585938, 41813135.14709473, 11029779.91104126, 17796700.27598497, 1146435.7376098633], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 73909.75952148438, 606726169.5861816, 235502322.5148519, 265627610.35454825, 99706888.19885254], label=0), Instance(features=[69.0, 278.0, 139.0, 79.465715877981, 85.0, 297069.5495605469, 604851961.1358643, 220544278.62167358, 248919043.25783345, 138514041.90063477], label=0), Instance(features=[69.0, 164.0, 110.6, 38.58808106138474, 85.0, 151872.6348876953, 643829107.2845459, 230873227.1194458, 264263550.35204285, 139755964.2791748], label=0), Instance(features=[266.0, 1460.0, 834.0, 513.2812094748842, 498.0, 56982.04040527344, 623749017.7154541, 247856974.6017456, 238955618.43121415, 183810949.32556152], label=0), Instance(features=[46.0, 1460.0, 706.4, 636.0721971600393, 498.0, 57935.71472167969, 143713951.11083984, 48989236.35482788, 58638326.5304098, 26092529.296875], label=0), Instance(features=[69.0, 278.0, 137.8, 78.91108920804477, 85.0, 129938.12561035156, 569087982.1777344, 259104013.44299316, 261448841.98538607, 233599066.73431396], label=0), Instance(features=[181.0, 1460.0, 754.8, 542.1451466166602, 498.0, 34809.112548828125, 525015115.73791504, 264234006.4048767, 205261200.1738584, 265943050.38452148], label=0), Instance(features=[180.0, 1460.0, 906.2, 511.4881816816494, 933.0, 152111.05346679688, 42836603879.92859, 11792849540.71045, 18009819650.266174, 2167321085.9298706], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 23126.602172851562, 95727920.53222656, 47547280.78842163, 47510561.02484816, 47219038.009643555], label=0), Instance(features=[180.0, 1460.0, 783.0, 496.0653182797604, 498.0, 25987.625122070312, 45782200098.03772, 11583422005.176544, 19745437580.67448, 275730967.5216675], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 29087.066650390625, 387915134.42993164, 100085794.9256897, 166250297.6318655, 6199479.103088379], label=0), Instance(features=[180.0, 1460.0, 646.2, 430.38605925378204, 498.0, 13013839.721679688, 45729797124.86267, 11579425752.162933, 19717821831.918186, 287446022.0336914], label=0), Instance(features=[101.0, 1292.0, 462.8, 435.43054555233033, 243.0, 105211973.19030762, 46326915025.71106, 11781689226.62735, 19944995151.369263, 347314953.8040161], label=0), Instance(features=[283.0, 1460.0, 853.4, 504.02206300915043, 566.0, 21934.50927734375, 49653053.283691406, 15643239.02130127, 20320120.055861052, 6448984.146118164], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 27894.973754882812, 819767951.965332, 206745207.3097229, 353939598.1682774, 3592491.1499023438], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 37908.55407714844, 402579069.13757324, 138580004.3741862, 186751947.3942248, 13123035.430908203], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 25987.625122070312, 502643823.6236572, 127586007.1182251, 216554216.87360498, 3837108.612060547], label=0), Instance(features=[75.0, 1301.0, 631.0, 506.9621945142129, 517.0, 432968.1396484375, 3657186031.3415527, 1828809499.7406006, 1828376531.6009521, 1828809499.7406006], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 538923978.805542, 538923978.805542, 538923978.805542, 0.0, 538923978.805542], label=0), Instance(features=[302.0, 1460.0, 838.4, 511.9803121214721, 498.0, 50067.901611328125, 462512969.9707031, 127372741.69921875, 194435301.78462642, 23463964.462280273], label=0), Instance(features=[472.0, 1460.0, 1048.0, 428.0093456923575, 1130.0, 10013.580322265625, 355572938.9190674, 118539651.23494466, 167607845.4241671, 36001.20544433594], label=0), Instance(features=[69.0, 278.0, 136.2, 78.28001021972341, 85.0, 190019.6075439453, 703310012.8173828, 252878248.69155884, 288720844.0482355, 154006481.1706543], label=0), Instance(features=[266.0, 1460.0, 1083.0, 437.9114065653006, 1165.0, 10967.254638671875, 520145893.0969238, 145917236.80496216, 217609461.66482857, 31756043.434143066], label=0), Instance(features=[266.0, 1460.0, 918.0, 542.2563969193909, 973.0, 145652055.74035645, 282724857.33032227, 214188456.53533936, 68536400.79498291, 214188456.53533936], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 48160.552978515625, 464936971.6644287, 117350459.09881592, 200685604.1073779, 2208352.0889282227], label=0), Instance(features=[75.0, 1429.0, 838.2, 483.0893913138644, 1013.0, 472068.78662109375, 15089643955.230713, 4873679518.699646, 6099111997.05675, 2202301025.390625], label=0), Instance(features=[114.0, 1460.0, 770.0, 576.3374011809402, 498.0, 12874.603271484375, 332584142.6849365, 100009799.00360107, 137065647.2354696, 33721089.363098145], label=0), Instance(features=[180.0, 1460.0, 817.8, 536.7868850856921, 498.0, 29087.066650390625, 424298048.0194092, 107352495.19348145, 182998623.3140083, 2541422.8439331055], label=0), Instance(features=[266.0, 1460.0, 1083.0, 437.9114065653006, 1165.0, 12159.347534179688, 400681018.8293457, 102712988.85345459, 172079997.79195195, 5079388.618469238], label=0), Instance(features=[532.0, 1460.0, 1029.8, 420.4837214447189, 1165.0, 1192.0928955078125, 742912.2924804688, 307401.02132161456, 316308.43122414686, 178098.6785888672], label=0), Instance(features=[92.0, 1460.0, 793.2, 562.4540514566501, 498.0, 30994.415283203125, 378411054.61120605, 113052248.95477295, 156129194.8786756, 36883473.39630127], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 16927.719116210938, 517507791.51916504, 145185947.4182129, 216486163.97766158, 31609535.217285156], label=0), Instance(features=[498.0, 1460.0, 1029.8, 431.13543115823825, 1199.0, 12874.603271484375, 56128025.05493164, 15905261.039733887, 23420609.509410616, 3740072.250366211], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 14066.696166992188, 50130128.86047363, 14490306.377410889, 20817665.031462923, 3908514.976501465], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 10967.254638671875, 59736967.08679199, 24947285.652160645, 25887895.094131213, 20020604.133605957], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 217199.32556152344, 754125118.2556152, 257151047.38871256, 351481406.79047513, 17110824.584960938], label=0), Instance(features=[92.0, 1460.0, 762.4, 583.8840980879681, 498.0, 10013.580322265625, 697054147.7203369, 222840011.11984253, 285043557.9778357, 97147941.58935547], label=0), Instance(features=[92.0, 1460.0, 762.4, 583.8840980879681, 498.0, 47922.13439941406, 385498046.875, 132160007.9536438, 157473892.42458162, 71547031.40258789], label=0), Instance(features=[498.0, 1460.0, 882.8, 471.2818265114835, 498.0, 24080.276489257812, 690249919.8913574, 194076478.48129272, 288606562.59398603, 43015956.87866211], label=0), Instance(features=[497.0, 1460.0, 887.0, 467.9247802799078, 520.0, 14066.696166992188, 637841939.9261475, 171496987.34283447, 269958428.99558765, 24065971.37451172], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 36954.87976074219, 66144227.98156738, 33094048.500061035, 33040049.66761048, 33097505.569458008], label=0), Instance(features=[286.0, 1460.0, 804.4, 540.1531634638458, 498.0, 12874.603271484375, 618175983.4289551, 177098751.06811523, 257301708.27648813, 45103073.12011719], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 30994.415283203125, 462455034.25598145, 122639954.09011841, 196520017.37228495, 14036893.844604492], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 551017045.9747314, 551017045.9747314, 551017045.9747314, 0.0, 551017045.9747314], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 3814.697265625, 655173063.2781982, 165371716.02249146, 282798542.29879993, 3154993.0572509766], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 97990.03601074219, 564059019.0887451, 145039737.22457886, 242003473.4153203, 8000969.886779785], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 14066.696166992188, 102065086.3647461, 49063265.323638916, 49116430.44826884, 47086954.11682129], label=0), Instance(features=[180.0, 1460.0, 1089.8, 505.8064451942067, 1460.0, 4053.1158447265625, 828080892.5628662, 207102239.1319275, 358522210.3132679, 162005.42449951172], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 13113.021850585938, 829035043.7164307, 248634517.19284058, 341832303.0812877, 82744956.01654053], label=0), Instance(features=[75.0, 517.0, 369.6666666666667, 208.360798189636, 517.0, 293970.10803222656, 532001018.5241699, 266147494.31610107, 265853524.20806885, 266147494.31610107], label=0), Instance(features=[185.0, 1460.0, 815.0, 537.9754641245268, 498.0, 9775.161743164062, 526853084.564209, 172022223.4725952, 215172898.45487073, 80613017.08221436], label=0), Instance(features=[472.0, 1460.0, 877.8, 475.4628902448644, 499.0, 12874.603271484375, 672888994.216919, 209190964.6987915, 275942506.8514404, 81930994.9874878], label=0), Instance(features=[75.0, 1269.0, 642.5, 428.5822558156135, 613.0, 160932.5408935547, 551642894.744873, 190611282.98441568, 255416736.1958952, 20030021.66748047], label=0), Instance(features=[355.0, 1460.0, 853.6, 497.8130572815462, 498.0, 13113.021850585938, 641396045.6848145, 172264754.77218628, 271549111.7992066, 23824930.19104004], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 473716020.58410645, 473716020.58410645, 473716020.58410645, 0.0, 473716020.58410645], label=0), Instance(features=[154.0, 1460.0, 827.6, 534.9144230622315, 566.0, 24080.276489257812, 538847923.2788086, 136382460.59417725, 232377626.7984544, 3328919.4107055664], label=0), Instance(features=[75.0, 1460.0, 728.4, 453.14086110171087, 721.0, 236034.39331054688, 59065145015.71655, 14944052040.576935, 25474974727.394703, 355413556.098938], label=0), Instance(features=[75.0, 1301.0, 631.0, 506.9621945142129, 517.0, 312089.9200439453, 599934101.1047363, 300123095.51239014, 299811005.5923462, 300123095.51239014], label=0), Instance(features=[266.0, 1460.0, 834.0, 517.7597898639871, 498.0, 19073.486328125, 826720952.9876709, 325708746.9100952, 348477507.37690264, 238047480.58319092], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 36001.20544433594, 819802999.49646, 205343723.29711914, 354758390.06381625, 767946.2432861328], label=0), Instance(features=[180.0, 1460.0, 869.0, 514.9384429230352, 747.0, 21934.50927734375, 850960969.9249268, 222751498.22235107, 363063372.57279927, 20011544.227600098], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 11920.928955078125, 577126026.1535645, 167670249.93896484, 239460885.0924719, 46771526.33666992], label=0), Instance(features=[180.0, 1460.0, 1011.6, 558.3065824437323, 1460.0, 2861.02294921875, 1035663127.8991699, 259408235.54992676, 448171666.6252217, 983476.6387939453], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 36001.20544433594, 851855993.270874, 218236505.98526, 365908240.67042524, 10527014.73236084], label=0), Instance(features=[180.0, 1460.0, 832.8, 528.428008341723, 566.0, 13113.021850585938, 1037997007.3699951, 275502979.7554016, 440999613.7368845, 32000899.31488037], label=0), Instance(features=[431.0, 1460.0, 963.6, 451.47429605681873, 995.0, 10967.254638671875, 517104864.1204834, 237323224.54452515, 239194883.6431992, 216088533.40148926], label=0), Instance(features=[75.0, 533.0, 375.0, 212.23257682709, 517.0, 16113996.505737305, 833901882.1716309, 425007939.3386841, 408893942.8329468, 425007939.3386841], label=0), Instance(features=[180.0, 1460.0, 1124.8, 496.6730916810372, 1460.0, 8106.231689453125, 465495109.55810547, 118808507.91931152, 200198808.94133335, 4865407.943725586], label=0), Instance(features=[59.0, 1460.0, 731.4, 611.9403892537246, 498.0, 28133.392333984375, 4484310865.402222, 1141045987.6060486, 1930509283.6940675, 39922475.814819336], label=0), Instance(features=[498.0, 1460.0, 853.4, 355.6389180053274, 849.0, 33855.438232421875, 98803997.03979492, 40949702.26287842, 42191938.512228474, 32480478.286743164], label=0), Instance(features=[154.0, 1460.0, 1006.4, 566.0945504065553, 1460.0, 142097.47314453125, 522368192.6727295, 132419764.99557495, 225153710.7710404, 3584384.9182128906], label=0), Instance(features=[75.0, 1301.0, 631.0, 506.9621945142129, 517.0, 11930942.53540039, 580235958.0993652, 296083450.3173828, 284152507.7819824, 296083450.3173828], label=0), Instance(features=[85.0, 1460.0, 863.8, 571.4565250305574, 996.0, 6198.883056640625, 621131896.9726562, 261876662.57222494, 262757338.4724482, 164491891.8609619], label=0), Instance(features=[180.0, 1460.0, 950.0, 521.1924788405911, 1152.0, 23841.85791015625, 795819044.1131592, 222485005.8555603, 333231867.98379165, 47048568.72558594], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 11920.928955078125, 39277076.721191406, 13480007.648468018, 16040435.673164777, 7315516.471862793], label=0), Instance(features=[498.0, 1460.0, 1029.8, 421.0332053413365, 1165.0, 14781.951904296875, 66404104.232788086, 23950755.59616089, 27261719.931433883, 14692068.099975586], label=0), Instance(features=[266.0, 1460.0, 1083.0, 437.9114065653006, 1165.0, 19073.486328125, 467733144.76013184, 117110252.3803711, 202432390.0742285, 344395.63751220703], label=0), Instance(features=[498.0, 1460.0, 1029.8, 417.3988021065705, 1152.0, 36954.87976074219, 2676010.1318359375, 755012.035369873, 1111571.1018679, 153541.56494140625], label=0), Instance(features=[266.0, 1460.0, 1083.0, 437.9114065653006, 1165.0, 10013.580322265625, 468808889.3890381, 117295265.1977539, 202946525.66834623, 181078.91082763672], label=0), Instance(features=[334.0, 1460.0, 1029.8, 504.36669200096867, 1397.0, 953.67431640625, 18138170.24230957, 8272727.330525716, 7489748.21475747, 6679058.074951172], label=0), Instance(features=[180.0, 1460.0, 762.8, 572.9186329663228, 357.0, 788927.0782470703, 3861664056.777954, 1247249960.899353, 1528332921.6978586, 563273429.8706055], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 930862188.3392334, 930862188.3392334, 930862188.3392334, 0.0, 930862188.3392334], label=0), Instance(features=[75.0, 1253.0, 638.5, 422.75140449204895, 613.0, 127077.10266113281, 693108081.817627, 231181701.02437338, 326631284.79949677, 309944.15283203125], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 681262016.2963867, 681262016.2963867, 681262016.2963867, 0.0, 681262016.2963867], label=0), Instance(features=[75.0, 517.0, 296.0, 221.0, 296.0, 854786872.8637695, 854786872.8637695, 854786872.8637695, 0.0, 854786872.8637695], label=0), Instance(features=[283.0, 1460.0, 853.4, 504.02206300915043, 566.0, 11920.928955078125, 165117025.3753662, 64868509.7694397, 69510625.54192932, 47172546.38671875], label=0), Instance(features=[498.0, 1460.0, 1029.8, 417.3988021065705, 1152.0, 22888.18359375, 11232137.680053711, 3040015.697479248, 4741654.41849825, 452518.4631347656], label=0), Instance(features=[258.0, 1460.0, 848.4, 509.74723147850443, 566.0, 36001.20544433594, 49420833.587646484, 19087255.001068115, 20631484.992527563, 13446092.60559082], label=0), Instance(features=[283.0, 1460.0, 853.4, 504.02206300915043, 566.0, 13113.021850585938, 164752006.53076172, 64696729.18319702, 69341127.77270766, 47010898.59008789], label=0), Instance(features=[75.0, 201.0, 138.0, 63.0, 138.0, 1079689025.8789062, 1079689025.8789062, 1079689025.8789062, 0.0, 1079689025.8789062], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151700019.83642578, 1200838088.9892578, 563737511.6348267, 401755316.89502054, 451205968.8568115], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150331974.02954102, 1201927900.314331, 563563466.0720825, 402683134.6019848, 450996994.972229], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150166988.37280273, 1201389074.3255615, 563665747.6425171, 402519906.4482712, 451553463.93585205], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151319980.6213379, 1202176094.0551758, 564242243.7667847, 402417681.41255474, 451736450.1953125], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150342941.2841797, 1200208902.3590088, 563114762.3062134, 402133547.77673554, 450953602.7908325], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151942014.69421387, 1202992916.1071777, 564018011.0931396, 402714455.49136096, 450568556.7855835], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150637865.06652832, 1201406002.0446777, 563974738.1210327, 402510332.2467725, 451927542.6864624], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150534152.98461914, 1200881958.0078125, 563383042.8123474, 402107000.8331577, 451058030.128479], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 152068853.3782959, 1201162099.8382568, 564175009.727478, 401847578.3891655, 451734542.8466797], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 152570009.23156738, 1200753211.9750977, 563639521.5988159, 401608471.97137743, 450617432.5942993], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151530027.38952637, 1201097011.566162, 563677251.3389587, 402048891.84400564, 451040983.20007324], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151183128.3569336, 1200891971.5881348, 563439249.9923706, 402014253.8941397, 450840950.01220703], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150913000.10681152, 1202771902.0843506, 564182758.3312988, 402729389.626871, 451523065.5670166], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 152922153.4729004, 1201146841.0491943, 564281761.6462708, 401479665.9921572, 451529026.03149414], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 152642011.64245605, 1200266122.8179932, 563452243.8049316, 401516642.3175579, 450450420.3796387], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151345968.24645996, 1200555086.1358643, 563736259.9372864, 401692709.036359, 451521992.68341064], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150758028.0303955, 1200247049.331665, 563237965.1069641, 401767051.19477487, 450973391.53289795], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150596857.07092285, 1201128005.9814453, 563033223.1521606, 402424459.67106855, 450204014.7781372], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 150454044.34204102, 1201855182.647705, 564072549.3431091, 402484296.88020146, 451990485.1913452], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 154445886.61193848, 1201619863.5101318, 564642488.9564514, 401456181.89186746, 451252102.8518677], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151687145.2331543, 1202599048.614502, 564393281.9366455, 402508488.3594751, 451643466.9494629], label=0), Instance(features=[1350.0, 1350.0, 1350.0, 0.0, 1350.0, 151703119.2779541, 1202502965.927124, 564364254.4746399, 402480359.36487556, 451625466.3467407], label=0),
[[1, 2, 3, 4, 5, 6, 7, 8, 6, 10], ["五元组"]]
"""
10个特征的(前五个包大小,后五个包间隔):最小值,最大值,平均值,方差,中位数
每次运行前,检查:
四个需要修改的地方,命名是否正确
最后的运行模式是否正确
这个文件用于把pcap解析的文件生成特征和标签的形式 并且5个包一组
"""
from common_utils import * # 修改了
from argparse import ArgumentParser
from collections import namedtuple
from typing import List, Dict
from path_utils import get_prj_root
from model import DT # 修改了
from datetime import datetime
from path_utils import get_prj_root
import numpy as np
from sklearn.decomposition import PCA
import time
# start counting time
start = time.time()
random.seed(datetime.now())
# get the path of the models
model_dir = os.path.join(get_prj_root(), "classify/models") # 修改:模型models路径
dt_model_pkl = os.path.join(model_dir, "dt2_9.pkl") # 修改:模型的版本,只用修改此处就行
Instance = namedtuple("Instance", ["features", "label"]) # 实例
win_size = 5 # 窗口大小
limit = 100000
# the path
# iot-物联网流 video-视频流 voip-音频流 AR-AR流用的高清视频流代替
dirs = {
"video": "./tmp/dt/video",
"iot": "./tmp/dt/iot",
"voip": "./tmp/dt/voip",
"AR": "./tmp/dt/AR",
}
instances_dir = os.path.join(get_prj_root(), "classify/instances") # 修改:instances路径
# 获取特征
def get_median(data): # 产生中位数
data.sort()
half = len(data) // 2
return (data[half] + data[~half]) / 2
def gen_single_instance(dir_name, flow, flow_type):
# debug("generate {}".format(flow["file"]))
def extract_features(raw_features: List[float]): # 修改特征
extracted_features = []
raw_features = [r for r in raw_features if int(r) >= 0]
extracted_features.append(min(raw_features))
extracted_features.append(max(raw_features))
extracted_features.append(sum(raw_features) / len(raw_features))
extracted_features.append(np.std(raw_features)) # 标准差
extracted_features.append(get_median(raw_features)) # 中位数
return extracted_features
features = []
idts = []
ps = []
idt_file = os.path.join(dir_name, flow["idt"]) # 包大小
ps_file = os.path.join(dir_name, flow["ps"]) # 包间隔
with open(idt_file, 'r') as fp:
lines = fp.readlines()
fp.close()
lines = [l.strip() for l in lines] # .strip()用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
lines = [l for l in lines if len(l) > -1]
if len(lines) > win_size:
lines = lines[:win_size]
for l in lines:
idts.append(float(l))
with open(ps_file, "r") as fp:
lines = fp.readlines()
fp.close()
lines = [l.strip() for l in lines]
lines = [l for l in lines if len(l) > 0]
if len(lines) > win_size:
lines = lines[:win_size]
for l in lines:
ps.append(float(l))
# 有很奇怪的现象
ps = [p for p in ps if p > 0]
if len(ps) == 0:
print(flow["ps"])
return None
idts = [i for i in idts if i >= 0]
if len(idts) == 0:
return None
features.extend(extract_features(ps)) # 包间隔的数理统计
features.extend(extract_features(idts)) # 包大小的数理统计
if flow_type == "video":
label = 0
elif flow_type == "iot":
label = 1
elif flow_type == "voip":
label = 2
elif flow_type == "AR":
label = 3
else:
err("Unsupported flow type")
raise Exception("Unsupported flow type")
return Instance(features=features, label=label)
def generate():
instances_dir = os.path.join(get_prj_root(), "classify/instances") # 修改:instances_dir实例的路径
for flow_type, dirname in dirs.items():
stats_fn = os.path.join(dirname, "statistics.json") # statistics.json流量统计的文件
debug(stats_fn)
statistics = load_json(os.path.join(dirname, "statistics.json"))
debug("#flows {}".format(statistics["count"]))
flows: List = statistics["flows"]
sorted(flows, key=lambda f: -f["num_pkt"])
if len(flows) > limit:
flows = flows[:limit]
instances = [gen_single_instance(dirname, f, flow_type) for f in flows]
instances = [i for i in instances if i is not None]
debug("#{} instances {}".format(flow_type, len(instances)))
# print(len(instances))
save_pkl(os.path.join(instances_dir, "{}.pkl".format(flow_type)), instances) # 保存Python内存数据到文件
if __name__ == '__main__':
parser = ArgumentParser()
print("running mode\n"
"1. generate instances\n"
"2. train dt\n")
parser.add_argument("--mode", type=int, default=1) # default为模式修改
args = parser.parse_args()
mode = int(args.mode)
if mode == 1:
generate()
end = time.time()
print("程序运行时间:%.2f秒" % (end - start))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment