Предварительная обработка журнала при обнаружении аномалий
Я попытался реализовать эту работу по обнаружению аномалий неконтролируемых сообщений журнала, но этап предварительной обработки для меня совершенно непонятен.
В этой статье они сказали, что сообщение дополняется до 40 слов, а затем вычисляют частоту слов. Я не мог понять, зачем нужна последовательность заполнения, поскольку частота слов, такая как TF-IDF, будет генерировать результат с размером словаря.
Предлагаемая модель неконтролируемого обнаружения аномалий включает две глубокие сети автоэнкодеров и изолирующий лес. Во-первых, к набору данных применяется предварительная обработка текста, включая токенизацию и замену букв на строчные. Затем предложения дополняются до 40 слов, а предложения, содержащие менее пяти слов, удаляются. Затем вычисляется частота слов и данные перемешиваются. Затем набор данных нормализуется и масштабируется от 0 до 1.
Данные, которые я использовал в этом эксперименте, - это BGL.
Это пример данных. Dataframe
columns = ['Label','Timestamp','Date','Node','Time','NodeRepeat','Type','Component','Level','Content']
В настоящее время я просто передаю последовательность заполнения непосредственно модели.
sequences = tokenizer.texts_to_sequences(t1['Content'])
t1_encoded = pad_sequences(sequences, maxlen=40, padding='post')
t1_scaled = scaler.fit_transform(t1_encoded)
На самом деле, автоэнкодер должен применяться перед изолированным лесом, но я пытаюсь использовать только изолирующий лес в качестве одного из вариантов их оценки (а) один изолирующий лес .
IF = IsolationForest(n_jobs=-1)
IF.fit(t1_encoded)
pred = IF.predict(t3_encoded)
результат ужасен по сравнению с бумажным результатом.
Accuracy: 89.9065250294299
Precision 0: 0.9007981755986317
Precision 1: 91.01406092594956
Recall 0: 0.12458406270205485
Recall 1: 98.66322950585173