В настоящее время я пытаюсь использовать Scikit Learn для создания простого фрагмента обнаружения аномалий.
Программа получает файл .csv, который затем передается в DataFrame Panda. Кадр данных имеет 8 столбцов: «Src IP»;'Dst IP';«Спорт»;'DPORT';«Протокол»;'Load';«Пакеты»;«Флаг TCP».
Я помещаю данные в IsolationForest примерно так:
iForest = IsolationForest(n_estimators=128, max_samples='auto', max_features=1, behaviour='new', contamination='auto', random_state=None, n_jobs=-1, verbose=0, bootstrap=True)
usecols=["Src IP","Dst IP","sPort","dPort","Protocol","Load","Packets","TCP Flags"]
iForest.fit(data[usecols])
И затем получаю выбросы / аномалии от IForest:
pred = iForest.predict(data[usecols])
data['anomaly']=pred
outliers=data.loc[data['anomaly']==-1]
Все это работает хорошо, однако мой вопрос здесь: как я могу использовать Isolation Forest для обнаружения аномалий в сети, будучи независимым от свойства «загрязнение»?
В IDS с низким уровнем ложных срабатыванийСкорость имеет решающее значение. В моем случае я несколько решаю, какие записи «загрязнены», выбрав процент.
Моя цель - заставить Isolation Forest автоматически устанавливать коэффициент загрязнения, зная, что если x.csv очищен на 100% от загрязнениязатем найдите% загрязнения на y.csv.
Это должно быть частью гибридной IDS, которая использует как анализ сигнатур, так и поведение для обнаружения вторжений на основе данных потока (NetFlow).
TLDR : IsolationForest должен получить чистый .csv (без загрязнения), чтобы затем обнаружить аномалии в новом наборе данных (другом .csv или данных канала). Как это возможно с помощью ScikitLearn?