Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
18.07.2022
Размер:
1.43 Mб
Скачать

Отчет по лабораторной работе № 2 по дисциплине «Интеллектуальные системы»

на тему «Обнаружение аномалий»

Цель работы

Получить практические навыки создания, обучения и применения искусственных нейронных сетей типа автокодировщик. Научиться загружать данные и проводить их предварительную обработку. Исследовать влияние архитектуры автокодировщика и количества эпох обучения на области в пространстве признаков, распознаваемые автокодировщиком после обучения. Научиться оценивать качество обучения автокодировщика на основе ошибки реконструкции и новых метрик EDCA. Научиться решать актуальную задачу обнаружения аномалий в данных с помощью автокодировщика как одноклассового классификатора.

Задание 1

1) В среде Google Colab создадим новый блокнот (notebook). Импортируем необходимые для работы библиотеки и модули.

import os

os.chdir('/content/drive/MyDrive/Colab Notebooks/Lab2')

# импорт модулей import numpy as np import lab02_lib as lib

2) Сгенерируем индивидуальный набор двумерных данных в пространстве признаков с координатами центра (22, 22). Выведем полученные данные на рисунок и в консоль.

# генерация датасета

data = lib.datagen(22, 22, 1000, 2)

1

# вывод данных и размерности print('Исходные данные:') print(data)

print('Размерность данных:') print(data.shape)

Исходные данные: [[22.10978971 21.97373741] [21.93911476 21.99157633] [21.872857 21.8962997 ]

...

[21.91337005 22.13011268] [21.91655809 22.10014979] [21.95680791 21.91179582]]

Размерность данных: (1000, 2)

3) Создадим и обучим автокодировщик AE1 простой архитектуры, выбрав небольшое количество эпох обучения.

# обучение AE1 patience = 300

ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt', 300, True, patience)

Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 1 Задайте количество скрытых слоёв (нечетное число) : 1 Задайте архитектуру скрытых слоёв автокодировщика, например, в виде 3 1 3 : 1

2

4) Зафиксируем ошибку MSE, на которой обучение завершилось. Построим график ошибки реконструкции обучающей выборки. Зафиксируем порог ошибки реконструкции – порог обнаружения аномалий.

Epoch 300/300

1/1 [==============================] - 0s 4ms/step - loss: 456.8507

# Построение графика ошибки реконструкции lib.ire_plot('training', IRE1, IREth1, 'AE1')

5) Создадим и обучим второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения.

# обучение AE2 patience = 1000

ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', 1000, True, patience)

Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 2

6) Зафиксируем ошибку MSE, на которой обучение завершилось. Построим график ошибки реконструкции обучающей выборки. Зафиксируем второй порог ошибки реконструкции – порог обнаружения аномалий.

Epoch 1000/1000

3

1/1 [==============================] - 0s 11ms/step - loss: 261.3800

# Построение графика ошибки реконструкции lib.ire_plot('training', IRE2, IREth2, 'AE2')

Повторим пункты 3)-6) с новыми параметрами обучения, так как значения ошибки MSE, на которых завершилось обучение АЕ1 и АЕ2, достаточно велики.

3) Создадим и обучим автокодировщик AE1 простой архитектуры, задав большее количество эпох обучения, чем было задано для обучения предыдущего А1.. Зафиксируем в таблице вида табл.1 количество скрытых слоёв и нейронов в них.

# обучение AE1 patience = 300

ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt', 12000, True, patience)

Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 1 Задайте количество скрытых слоёв (нечетное число) : 1 Задайте архитектуру скрытых слоёв автокодировщика, например, в виде 3 1 3 : 1

4) Зафиксируем ошибку MSE, на которой обучение завершилось. Построим график ошибки реконструкции обучающей выборки. Зафиксируем порог ошибки реконструкции – порог обнаружения аномалий.

4

Epoch 12000/12000

1/1 [==============================] - 0s 3ms/step - loss: 2.8649

# Построение графика ошибки реконструкции lib.ire_plot('training', IRE1, IREth1, 'AE1')

5) Создадим и обучим второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения, чем было задано для обучения предыдущего А2.

# обучение AE2 patience = 1000

ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', 10000, True, patience)

Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 2

6) Зафиксируем ошибку MSE, на которой обучение завершилось. Построим график ошибки реконструкции обучающей выборки. Зафиксируем второй порог ошибки реконструкции – порог обнаружения аномалий.

Epoch 10000/10000

1/1 [==============================] - 0s 24ms/step - loss: 0.0100

# Построение графика ошибки реконструкции lib.ire_plot('training', IRE2, IREth2, 'AE2')

5

7) Рассчитаем характеристики качества обучения EDCA для AE1 и AE2. Визуализируем и сравним области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Для автокодировщика АЕ1:

#построение областей покрытия и границ классов

#расчет характеристик качества обучения

numb_square = 20

xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)

amount: 22 amount_ae: 258

6

Оценка качества AE1

IDEAL = 0. Excess: 10.727272727272727 IDEAL = 0. Deficit: 0.0

IDEAL = 1. Coating: 1.0 summa: 1.0

IDEAL = 1. Extrapolation precision (Approx): 0.08527131782945736

Для автокодировщика АЕ2:

#построение областей покрытия и границ классов

#расчет характеристик качества обучения

numb_square = 20

xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)

amount: 22 amount_ae: 24

7

Оценка качества AE2

IDEAL = 0. Excess: 0.13636363636363635 IDEAL = 0. Deficit: 0.045454545454545456 IDEAL = 1. Coating: 0.9545454545454546 summa: 1.0

IDEAL = 1. Extrapolation precision (Approx): 0.9166666666666667

# сравнение характеристик качества обучения и областей аппроксимации lib.plot2in1(data, xx, yy, Z1, Z2)

8

Вывод:

Из приведенного выше рисунка видно, что область точек в пространстве признаков, которую автокодировщик АЕ1 будет относить к целевому классу, значительно больше области, которую занимают обучающие данные, следовательно, АЕ1 будет пропускать аномалии и не пригоден для их качественного обнаружения. Область точек в пространстве признаков, которую автокодировщик АЕ2 будет относить к целевому классу, соответствует области, которую занимают обучающие данные, следовательно, АЕ2 подходит для качественного обнаружения аномалий.

8) Изучим сохраненный набор данных и пространство признаков. Создадим тестовую выборку, состоящую, как минимум, из 4ёх элементов, не входящих в обучающую выборку. Элементы должны быть такими, чтобы AE1 распознавал их как норму, а AE2 детектировал как аномалии.

Для создания тестовой выборки возьмем 5 точек с координатами: (X; Y) = (21; 22,5), (21; 22), (21; 21), (22; 21), (23; 21)

# загрузка тестового набора

data_test = np.loadtxt('test.txt', dtype=np.float)

9) Применим обученные автокодировщики AE1 и AE2 к тестовым данным и выведем значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога на график и в консоль.

# тестирование АE1

predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1) lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1) lib.ire_plot('test', ire1, IREth1, 'AE1')

Аномалий не обнаружено

9

# тестирование АE2

predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2) lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2) lib.ire_plot('test', ire2, IREth2, 'AE2')

i

Labels

IRE

IREth

0

[1.]

[1.41]

0.36

1

[1.]

[1.]

0.36

2

[1.]

[1.]

0.36

3

[1.]

[1.42]

0.36

4

[1.]

[1.11]

0.36

Обнаружено 5.0 аномалий

10) Визуализируем элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2.

10

Соседние файлы в папке Лабораторные работы