Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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')

Результаты AE1 IREth: 1.71

Создание и обучение автокодировщика 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}")

Результаты AE2 IREth: 0.44

Расчет характеристик качества обучения автокодировщиков

numb_square= 20
xx,yy,Z1=lab02_lib.square_calc(numb_square,data, ae_trainned ,IREth,'1',True)

Результат выполнения: AE1 Граница класса

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)

Результат выполнения: AE2 Граница класса

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)

Сравнение AE1 и AE2

Тестирование автокодировщиков

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  аномалий

Результаты тестирования AE3


ИТОГОВЫЕ РЕЗУЛЬТАТЫ

Таблица 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) показывает лучшие результаты
  • Увеличение количества эпох обучения улучшает качество аппроксимации
  • Для качественного обнаружения аномалий необходимо тщательно подбирать параметры модели