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

13 KiB

ЛАБОРАТОРНАЯ РАБОТА №2«Обнаружение аномалий»** А-02-22 бригада №8 Левшенко Д.И., Новиков Д. М., Шестов Д.Н

Задание1:

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

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

!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/lab02_lib.py

!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/name_train.txt
!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/name_test.txt

import numpy as np
import lab02_lib as lib

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

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

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

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

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

lib.ire_plot('training', IRE1, IREth1, 'AE1')

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

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

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

lib.ire_plot('training', IRE2, IREth2, 'AE2')

7)Рассчитать характеристики качества обучения EDCA для AE1 и AE2. Визуализировать и сравнить области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Сделать вывод о пригодности AE1 и AE2 для качественного обнаружения аномалий.

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

Оценка качества AE1
IDEAL = 0. Excess: 14.263157894736842
IDEAL = 0. Deficit: 0.0
IDEAL = 1. Coating: 1.0
summa: 1.0
IDEAL = 1. Extrapolation precision (Approx): 0.06551724137931035

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

Оценка качества AE2
IDEAL = 0. Excess: 3.3157894736842106
IDEAL = 0. Deficit: 0.0
IDEAL = 1. Coating: 1.0
summa: 1.0
IDEAL = 1. Extrapolation precision (Approx): 0.23170731707317074

lib.plot2in1(data,xx,yy,Z1,Z2)

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

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

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

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')
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.]      [2.34]    0.47      
1         [1.]      [3.46]    0.47      
2         [1.]      [2.08]    0.47      
3         [1.]      [2.68]    0.47      
4         [1.]      [4.99]    0.47      
Обнаружено  5.0  аномалий

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

lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)

12)Результаты исследования занести в таблицу:

Табл. 1 Результаты задания

Количество скрытых слоев Количество нейронов в скрытых слоях Количество эпох обучения Ошибка MSE_stop Порог ошибки реконструкции Значение показателя Excess Значение показателя Approx Количество обнаруженных аномалий
АЕ1 1 1 1000 38.04 8.5 14.26 0.07 0
АЕ2 5 3 2 1 2 3 3000 0.07 0.47 3.32 0.23 5

13)Сделать выводы

Для нормального обнаружения аномалий: -архитектура автокодировщика не должна быть простой, -необходимо большое количество эпох обучения, -ошибка MSE_stop должна быть достаточно мала(<<1), -порог обнаружения аномалий не должен быть завышен по сравнению с большинством значений ошибки реконструкции обучающей выборки, -характеристики качества обучения EDCA должны быть близки к идеальным значениям показателей Excess = 0, Deficit = 0, Coating = 1, Approx = 1.

Задание2

1)Изучить описание своего набора реальных данных, что он из себя представляет;

Исходный набор данных Breast Cancer Wisconsin из репозитория машинного обучения UCI представляет собой набор данных для классификации, в котором записываются измерения для случаев рака молочной железы. Есть два класса, доброкачественные и злокачественные. Злокачественный класс этого набора данных уменьшен до 21 точки, которые считаются аномалиями, в то время как точки в доброкачественном классе считаются нормой.

Количество признаков Количество примеров Количесвто нормальных примеров Количество аномальных примеров
30 378 357 21

2)Загрузить многомерную обучающую выборку реальных данных WBC_train.txt.

test = np.loadtxt('WBC_test.txt', dtype=float)
train = np.loadtxt('WBC_train.txt', dtype=float)

3)Вывести полученные данные и их размерность в консоли.

print('Исходные данные:')
print(train)
print('Размерность данных:')
print(train.shape)
Исходные данные:
[[3.1042643e-01 1.5725397e-01 3.0177597e-01 ... 4.4261168e-01
  2.7833629e-01 1.1511216e-01]
 [2.8865540e-01 2.0290835e-01 2.8912998e-01 ... 2.5027491e-01
  3.1914055e-01 1.7571822e-01]
 [1.1940934e-01 9.2323301e-02 1.1436666e-01 ... 2.1398625e-01
  1.7445299e-01 1.4882592e-01]
 ...
 [3.3456387e-01 5.8978695e-01 3.2886463e-01 ... 3.6013746e-01
  1.3502858e-01 1.8476978e-01]
 [1.9967817e-01 6.6486304e-01 1.8575081e-01 ... 0.0000000e+00
  1.9712202e-04 2.6301981e-02]
 [3.6868759e-02 5.0152181e-01 2.8539838e-02 ... 0.0000000e+00
  2.5744136e-01 1.0068215e-01]]
Размерность данных:
(357, 30)

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

patience=2000
ae3_trained, IRE3, IREth3 = lib.create_fit_save_ae(train,'out/AE3.h5','out/AE3_ire_th.txt', 100000, False, patience, early_stopping_delta = 0.00001, early_stopping_value = 0.0001)

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

Epoch 31000/100000
 - loss: 0.0005
12/12 ━━━━━━━━━━━━━━━━━━━━ 0s 14ms/step

lib.ire_plot('training', IRE3, IREth3, 'AE3')

7)Изучить и загрузить тестовую выборку WBC_test.txt.

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

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

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')
print(f"Исходный порог IREth4: {IREth3}")

1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step

i         Labels    IRE       IREth     
0         [0.]      [0.21]    0.24      
1         [1.]      [0.94]    0.24      
2         [1.]      [0.28]    0.24      
3         [1.]      [0.64]    0.24      
4         [1.]      [0.5]     0.24      
5         [1.]      [0.92]    0.24      
6         [1.]      [0.43]    0.24      
7         [1.]      [1.1]     0.24      
8         [1.]      [0.31]    0.24      
9         [1.]      [0.46]    0.24      
10        [1.]      [0.42]    0.24      
11        [1.]      [0.81]    0.24      
12        [0.]      [0.21]    0.24      
13        [1.]      [0.47]    0.24      
14        [0.]      [0.23]    0.24      
15        [1.]      [0.77]    0.24      
16        [1.]      [0.39]    0.24      
17        [0.]      [0.21]    0.24      
18        [1.]      [1.4]     0.24      
19        [1.]      [1.05]    0.24      
20        [1.]      [0.3]     0.24      
Обнаружено  17.0  аномалий

Исходный порог IREth4: 0.24

10)Параметры наилучшего автокодировщика и результаты обнаружения аномалий занести в таблицу:

Количество скрытых слоев Количестов нейронов Количество эпох обучения Ошибка MSE_stop Порог ошибки реконструкции % обнаруженных аномалий
11 31 25 21 17 13 7 13 17 21 25 31 7000 0.0006 0.33 70

11)Сделать выводы:

•архитектура автокодировщика должна включать в себя много слоев,
•количество эпох обучения должно быть достаточно большим (порядка десятков тысяч),
•ошибка MSE_stop, приемлемая для останова обучения, должна иметь достаточно малое значение,
•порог обнаружения аномалий не должен быть завышен по сравнению с большинством значений ошибки реконструкции обучающей выборки.