12 KiB
Лабораторная работа №2: Обнаружение аномалий с помощью автокодировщиков
Выполнили: Фонов А.Д., Хнытченков А.М. Вариант 3
Цель работы
Получить практические навыки создания, обучения и применения искусственных нейронных сетей типа автокодировщик. Исследовать влияние архитектуры автокодировщика и количества эпох обучения на области в пространстве признаков, распознаваемые автокодировщиком после обучения. Научиться оценивать качество обучения автокодировщика на основе ошибки реконструкции и новых метрик EDCA. Научиться решать актуальную задачу обнаружения аномалий в данных с помощью автокодировщика как одноклассового классификатора.
ЗАДАНИЕ 1: Работа с двумерными синтетическими данными
Импорт библиотек и настройка окружения
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2')
import lab02_lib
import numpy as np
Описание: Импортируются необходимые библиотеки и устанавливаются параметры для варианта 2.
Генерация индивидуального набора двумерных данных
k = 3
data = lab02_lib.datagen(k, k, 1000, 2)
print('Исходныеданные:')
print(data)
print('Размерностьданных:')
print(data.shape)
Результат выполнения:
Исходные данные:
k = 3
data = lab02_lib.datagen(k, k, 1000, 2)
print('Исходныеданные:')
print(data)
print('Размерностьданных:')
print(data.shape)
Создание и обучение автокодировщика AE1
epoch = 1000
patience = 100
ae_trainned, IRE_array, IREth = lab02_lib.create_fit_save_ae(data, 'out/AE_1.h5','out/AE_1_ire_th.txt',
epoch, True, patience)
print(f"IREth: {IREth}")
lab02_lib.ire_plot('training', IRE_array, IREth, 'AE1')
Создание и обучение автокодировщика AE2
patience = 500
ae2_trained, IRE2, IREth2= lab02_lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', 3000, True, patience)
lab02_lib.ire_plot('training', IRE2, IREth2, 'AE2')
print(f"IREth: {IREth2}")
Расчет характеристик качества обучения автокодировщиков
numb_square= 20
xx,yy,Z1=lab02_lib.square_calc(numb_square,data, ae_trainned ,IREth,'1',True)
amount: 18
amount_ae: 101
Оценка качества AE1
IDEAL = 0. Excess: 4.611111111111111
IDEAL = 0. Deficit: 0.0
IDEAL = 1. Coating: 1.0
summa: 1.0
IDEAL = 1. Extrapolation precision (Approx): 0.1782178217821782
xx,yy,Z2=lab02_lib.square_calc(numb_square,data,ae2_trained,IREth2,'1',True)
amount: 19
amount_ae: 40
Оценка качества AE2
IDEAL = 0. Excess: 1.0
IDEAL = 0. Deficit: 0.0
IDEAL = 1. Coating: 1.0
summa: 1.0
IDEAL = 1. Extrapolation precision (Approx): 0.5
lab02_lib.plot2in1(data,xx,yy,Z1,Z2)
Тестирование автокодировщиков
data_test= np.loadtxt('data_test.txt', dtype=float)
lab02_lib.anomaly_detection_ae(predicted_labels1, ire1, IREth)
lab02_lib.ire_plot('test', ire1, IREth, 'AE1')
lab02_lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)
lab02_lib.ire_plot('test', ire1, IREth, 'AE2')
ЗАДАНИЕ 2: Работа с реальными данными WBC
Загрузка и изучение данных WBC
# Загрузка выборок
train = np.loadtxt('WBC_train.txt', dtype=float)
test = np.loadtxt('WBC_test.txt', dtype=float)
Описание: Загружаются данные WBC, которые содержат измерения для случаев рака молочной железы.
Создание и обучение автокодировщика
from time import time
start = time()
ae3_trained, IRE3, IREth3= lib.create_fit_save_ae(train,'out/AE3.h5','out/AE3_ire_th.txt', 50000, False, 5000, early_stopping_delta = 0.01)
IREth3 = np.percentile(IRE3, 95)
print("Время на обучение: ", time() - start)
print("Порог IREth3:", IREth3)
Результаты обучения: Время на обучение: 192.4243025779724 Порог IREth3: 0.4819999999999999
predicted_labels3, ire3 = lib.predict_ae(ae3_trained, test, IREth3)
Тестирование автокодировщика
lib.anomaly_detection_ae(predicted_labels3, ire3, IREth3)
lib.ire_plot('test', ire3, IREth3, 'AE3')
Описание: Применяется обученный автокодировщик к тестовой выборке для обнаружения аномалий.
Результаты обнаружения аномалий:
i Labels IRE IREth
0 [1.] [0.56] 0.48
1 [1.] [1.12] 0.48
2 [0.] [0.48] 0.48
3 [1.] [0.73] 0.48
4 [1.] [0.9] 0.48
5 [1.] [0.97] 0.48
6 [1.] [0.6] 0.48
7 [1.] [1.31] 0.48
8 [0.] [0.34] 0.48
9 [1.] [0.69] 0.48
10 [1.] [0.73] 0.48
11 [1.] [1.32] 0.48
12 [0.] [0.36] 0.48
13 [1.] [0.72] 0.48
14 [0.] [0.41] 0.48
15 [1.] [0.84] 0.48
16 [1.] [0.76] 0.48
17 [1.] [0.56] 0.48
18 [1.] [1.71] 0.48
19 [1.] [1.31] 0.48
20 [0.] [0.42] 0.48
Обнаружено 16.0 аномалий
ИТОГОВЫЕ РЕЗУЛЬТАТЫ
Таблица 1 - Результаты задания №1
| Модель | Количество скрытых слоев | Количество нейронов в скрытых слоях | Количество эпох обучения | Ошибка MSE_stop | Порог ошибки реконструкции | Значение показателя Excess | Значение показателя Approx | Количество обнаруженных аномалий |
|---|---|---|---|---|---|---|---|---|
| AE1 | 1 | 1 | 300 | 2.0432 | 2.3 | 13.947368421052632 | 0.06690140845070422 | - |
| AE2 | 5 | 3-2-1-2-3 | 500 | 0.0196 | 0.515 | 1.105263157894737 | 0.475 | - |
Таблица 2 - Результаты задания №2
| Dataset name | Количество скрытых слоев | Количество нейронов в скрытых слоях | Количество эпох обучения | Ошибка MSE_stop | Порог ошибки реконструкции | % обнаруженных аномалий |
|---|---|---|---|---|---|---|
| WBC | 9 | 28-24-20-16-12-16-20-24-28 | 50000 | 0.0003 | 0.482 | 76.2% |
ВЫВОДЫ
Требования к данным для обучения:
- Данные должны быть нормализованными для сохранения стабильности обучения
- В обучающей выборке не должно быть аномальных образцов
- Размер выборки должен быть достаточным для обучения (минимум несколько сотен образцов)
Требования к архитектуре автокодировщика:
- Простая архитектура (AE1): подходит для простых задач, быстро обучается, но может не улавливать сложные зависимости
- Сложная архитектура (AE2): лучше аппроксимирует данные, но требует больше времени на обучение
- Еще более сложная архитектура (AE3): позволяет наиболее точно обнаруживать аномалии и свести ошибку к минимуму, но тратит на обучение много времени из-за большого кол-ва эпох
Требования к количеству эпох обучения:
- AE1 (300 эпох): недостаточно для качественного обучения
- AE2 (500 эпох): обеспечивает хорошую сходимость
- Для реальных данных (WBC) необходимо 50000 эпох
Требования к ошибке MSE_stop:
- AE1: 2.0432 - слишком высокая, указывает на недообучение
- AE2: 0.0196 - приемлемая для синтетических данных
- WBC: 0.0003 - отличная для реальных данных
Требования к порогу обнаружения аномалий:
- Порог 95-го перцентиля обеспечивает разумный баланс
- AE1: 2.3 - слишком высокий, может пропускать аномалии
- AE2: 0.515 - более чувствительный к аномалиям
- WBC: 0.482 - подходящий для реальных данных
Характеристики качества обучения EDCA:
- Более сложная архитектура (AE2) показывает лучшие результаты
- Увеличение количества эпох обучения улучшает качество аппроксимации
- Для качественного обнаружения аномалий необходимо тщательно подбирать параметры модели











