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

33 KiB

Отчёт по лабораторной работе №2

Сидора Д.А. Пивоваров Я.В. А-02-22


Задание 1

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

# скачивание библиотеки
!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/letter_train.txt
!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/letter_test.txt

# импорт модулей
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/lab2')

import numpy as np
import lab02_lib as lib

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

#генерация датасета
data=lib.datagen(5,5,1000,2)

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

Training set

Исходные данные:
[[4.92346186 5.06160261]
 [4.86776523 4.87688396]
 [5.04434246 4.99621627]
 ...
 [5.08559661 4.90905577]
 [5.13652538 5.08244034]
 [5.04940858 4.87050374]]
Размерность данных:
(1000, 2)

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

# обучение AE1
patience= 300
ae1_trained, IRE1, IREth1= lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt', 1000, False, patience)

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

Ошибка MSE_AE1 = 7.0839

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

IRE for training set. AE1

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

# обучение AE2
ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt',
3000, True, patience)

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

Ошибка MSE_AE2 = 0.0114

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

IRE for training set. 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)

Autoencoder AE1. Training set. Class boundary

amount:  19
amount_ae:  295

Площади множеств Xt и Xd AE1 EDCA AE1

Оценка качества AE1
IDEAL = 0. Excess:  14.526315789473685
IDEAL = 0. Deficit:  0.0
IDEAL = 1. Coating:  1.0
summa:  1.0
IDEAL = 1. Extrapolation precision (Approx):  0.06440677966101695
# построение областей покрытия и границ классов
# расчет характеристик качества обучения
numb_square = 20
xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)

Autoencoder AE2. Training set. Class boundary

amount:  19
amount_ae:  41

Площади множеств Xt и Xd AE1 EDCA AE1

Оценка качества AE2
IDEAL = 0. Excess:  1.1578947368421053
IDEAL = 0. Deficit:  0.0
IDEAL = 1. Coating:  1.0
summa:  1.0
IDEAL = 1. Extrapolation precision (Approx):  0.46341463414634143
# сравнение характеристик качества обучения и областей аппроксимации
lib.plot2in1(data, xx, yy, Z1, Z2)

Сравнение обучения AE1 и AE2

8) Если автокодировщик AE2 недостаточно точно аппроксимирует область обучающих данных, то подобрать подходящие параметры автокодировщика и повторить шаги (6) – (8).

Полученные показатели EDCA для автокодировщика AE2 нас устраивают.

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

# загрузка тестового набора
data_test = np.loadtxt('data_test.txt', dtype=float)
print(data_test)
[[ 4.856234  5.123456]
 [ 5.234567  4.876543]
 [ 4.765432  5.345678]
 [ 5.123456  4.987654]
 [ 4.987654  5.234567]
 [ 5.345678  4.765432]
 [ 4.876543  5.432109]
 [ 5.432109  4.654321]
 [ 4.654321  5.56789 ]
 [ 5.56789   4.54321 ]
 [ 6.856234  6.123456]
 [ 7.234567  6.876543]
 [ 6.765432  7.345678]
 [ 7.123456  6.987654]
 [ 6.987654  7.234567]
 [ 7.345678  6.765432]
 [ 6.876543  7.432109]
 [ 7.432109  6.654321]
 [ 6.654321  7.56789 ]
 [ 7.56789   6.54321 ]
 [ 3.156234  3.123456]
 [ 2.734567  3.876543]
 [ 3.265432  2.654321]
 [ 2.876543  3.234567]
 [ 3.423456  2.987654]
 [ 2.987654  3.345678]
 [ 3.576543  2.765432]
 [ 2.654321  3.432109]
 [ 3.687654  2.56789 ]
 [ 2.54321   3.56789 ]
 [ 5.123456  7.876543]
 [ 4.876543  8.234567]
 [ 5.234567  7.654321]
 [ 4.765432  8.123456]
 [ 5.345678  7.432109]
 [ 4.654321  8.345678]
 [ 5.432109  7.234567]
 [ 4.54321   8.456789]
 [ 5.56789   7.123456]
 [ 4.432109  8.56789 ]
 [ 7.856234  5.123456]
 [ 8.234567  4.876543]
 [ 7.765432  5.345678]
 [ 8.123456  4.987654]
 [ 7.987654  5.234567]
 [ 8.345678  4.765432]
 [ 7.876543  5.432109]
 [ 8.432109  4.654321]
 [ 7.654321  5.56789 ]
 [ 8.56789   4.54321 ]
 [14.856234 14.123456]
 [15.234567 14.876543]
 [14.765432 15.345678]
 [15.123456 14.987654]
 [14.987654 15.234567]
 [15.345678 14.765432]
 [14.876543 15.432109]
 [15.432109 14.654321]
 [14.654321 15.56789 ]
 [15.56789  14.54321 ]
 [-0.856234 -0.123456]
 [ 0.234567 -0.876543]
 [-0.765432  0.345678]
 [ 0.123456 -0.987654]
 [-0.987654  0.234567]
 [ 0.345678 -0.765432]
 [-0.876543  0.432109]
 [ 0.432109 -0.654321]
 [-0.654321  0.56789 ]
 [ 0.56789  -0.54321 ]
 [17.856234  4.123456]
 [18.234567  4.876543]
 [17.765432  5.345678]
 [18.123456  4.987654]
 [17.987654  5.234567]
 [18.345678  4.765432]
 [17.876543  5.432109]
 [18.432109  4.654321]
 [17.654321  5.56789 ]
 [18.56789   4.54321 ]
 [-3.123456 22.876543]
 [ 2.345678 18.654321]
 [ 8.765432 -1.234567]
 [12.345678 23.456789]
 [-4.123456  7.876543]
 [19.234567 19.876543]
 [-2.876543 -2.123456]
 [22.345678  3.654321]
 [15.432109 -3.234567]
 [-1.54321  25.56789 ]
 [ 0.       15.      ]
 [ 2.5      16.25    ]
 [ 5.       17.5     ]
 [ 7.5      18.75    ]
 [10.       20.      ]
 [12.5      21.25    ]
 [15.       22.5     ]
 [17.5      23.75    ]
 [20.       25.      ]
 [22.5      26.25    ]]
Размерность data_test: (100, 2)

В данной тестовой выборке среди 100 примеров: 10 нормальные данные(строки 1-10), 40 пограничные случаи (строки 11-50), 50 аномалий, из которых 15 являются сложными для обнаружения(точки рядом с границей) и 35 являются легко обнаружимыми (находятся по углам двумерного набора данных)

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

# тестирование АE1
predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)
# тестирование АE1
lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)
lib.ire_plot('test', ire1, IREth1, 'AE1')
i         Labels    IRE       IREth     
0         [0.]      [3.73]    4.11      
1         [0.]      [3.88]    4.11      
2         [0.]      [3.81]    4.11      
3         [0.]      [3.85]    4.11      
4         [0.]      [3.9]     4.11      
5         [0.]      [3.92]    4.11      
6         [0.]      [3.95]    4.11      
7         [0.]      [3.93]    4.11      
8         [0.]      [3.89]    4.11      
9         [0.]      [4.]      4.11      
10        [1.]      [5.92]    4.11      
11        [1.]      [6.67]    4.11      
12        [1.]      [6.63]    4.11      
13        [1.]      [6.66]    4.11      
14        [1.]      [6.72]    4.11      
15        [1.]      [6.69]    4.11      
16        [1.]      [6.77]    4.11      
17        [1.]      [6.7]     4.11      
18        [1.]      [6.71]    4.11      
19        [1.]      [6.75]    4.11      
20        [0.]      [1.23]    4.11      
21        [0.]      [1.41]    4.11      
22        [0.]      [1.28]    4.11      
23        [0.]      [1.03]    4.11      
24        [0.]      [1.46]    4.11      
25        [0.]      [1.18]    4.11      
26        [0.]      [1.59]    4.11      
27        [0.]      [1.]      4.11      
28        [0.]      [1.7]     4.11      
29        [0.]      [1.05]    4.11      
30        [1.]      [6.04]    4.11      
31        [1.]      [6.26]    4.11      
32        [1.]      [5.91]    4.11      
33        [1.]      [6.12]    4.11      
34        [1.]      [5.78]    4.11      
35        [1.]      [6.3]     4.11      
36        [1.]      [5.67]    4.11      
37        [1.]      [6.38]    4.11      
38        [1.]      [5.66]    4.11      
39        [1.]      [6.48]    4.11      
40        [1.]      [6.33]    4.11      
41        [1.]      [6.59]    4.11      
42        [1.]      [6.33]    4.11      
43        [1.]      [6.53]    4.11      
44        [1.]      [6.49]    4.11      
45        [1.]      [6.66]    4.11      
46        [1.]      [6.47]    4.11      
47        [1.]      [6.71]    4.11      
48        [1.]      [6.33]    4.11      
49        [1.]      [6.81]    4.11      
50        [1.]      [17.17]   4.11      
51        [1.]      [17.96]   4.11      
52        [1.]      [17.94]   4.11      
53        [1.]      [17.95]   4.11      
54        [1.]      [18.02]   4.11      
55        [1.]      [17.97]   4.11      
56        [1.]      [18.08]   4.11      
57        [1.]      [17.96]   4.11      
58        [1.]      [18.02]   4.11      
59        [1.]      [17.99]   4.11      
60        [0.]      [2.12]    4.11      
61        [0.]      [3.66]    4.11      
62        [0.]      [1.86]    4.11      
63        [0.]      [3.73]    4.11      
64        [0.]      [1.79]    4.11      
65        [0.]      [3.58]    4.11      
66        [0.]      [1.76]    4.11      
67        [0.]      [3.5]     4.11      
68        [0.]      [1.84]    4.11      
69        [0.]      [3.4]     4.11      
70        [1.]      [15.92]   4.11      
71        [1.]      [16.38]   4.11      
72        [1.]      [15.98]   4.11      
73        [1.]      [16.28]   4.11      
74        [1.]      [16.19]   4.11      
75        [1.]      [16.48]   4.11      
76        [1.]      [16.11]   4.11      
77        [1.]      [16.55]   4.11      
78        [1.]      [15.91]   4.11      
79        [1.]      [16.67]   4.11      
80        [1.]      [22.45]   4.11      
81        [1.]      [17.93]   4.11      
82        [1.]      [7.85]    4.11      
83        [1.]      [23.23]   4.11      
84        [1.]      [8.76]    4.11      
85        [1.]      [24.31]   4.11      
86        [0.]      [3.67]    4.11      
87        [1.]      [20.37]   4.11      
88        [1.]      [14.71]   4.11      
89        [1.]      [24.9]    4.11      
90        [1.]      [14.24]   4.11      
91        [1.]      [15.55]   4.11      
92        [1.]      [17.18]   4.11      
93        [1.]      [18.58]   4.11      
94        [1.]      [19.23]   4.11      
95        [1.]      [21.29]   4.11      
96        [1.]      [23.65]   4.11      
97        [1.]      [26.11]   4.11      
98        [1.]      [28.63]   4.11      
99        [1.]      [31.19]   4.11
Обнаружено  69.0  аномалий

IRE fir test set. AE1

# тестирование АE2
predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)
# тестирование АE2
lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)
lib.ire_plot('test', ire2, IREth2, 'AE2')

i         Labels    IRE       IREth     
0         [0.]      [0.14]    0.48      
1         [0.]      [0.35]    0.48      
2         [0.]      [0.38]    0.48      
3         [0.]      [0.21]    0.48      
4         [0.]      [0.26]    0.48      
5         [1.]      [0.49]    0.48      
6         [0.]      [0.44]    0.48      
7         [1.]      [0.62]    0.48      
8         [1.]      [0.63]    0.48      
9         [1.]      [0.8]     0.48      
10        [1.]      [2.25]    0.48      
11        [1.]      [3.]      0.48      
12        [1.]      [3.]      0.48      
13        [1.]      [2.98]    0.48      
14        [1.]      [3.06]    0.48      
15        [1.]      [3.02]    0.48      
16        [1.]      [3.14]    0.48      
17        [1.]      [3.02]    0.48      
18        [1.]      [3.11]    0.48      
19        [1.]      [3.08]    0.48      
20        [1.]      [2.56]    0.48      
21        [1.]      [2.44]    0.48      
22        [1.]      [2.86]    0.48      
23        [1.]      [2.68]    0.48      
24        [1.]      [2.49]    0.48      
25        [1.]      [2.53]    0.48      
26        [1.]      [2.59]    0.48      
27        [1.]      [2.74]    0.48      
28        [1.]      [2.71]    0.48      
29        [1.]      [2.76]    0.48      
30        [1.]      [2.89]    0.48      
31        [1.]      [3.25]    0.48      
32        [1.]      [2.68]    0.48      
33        [1.]      [3.14]    0.48      
34        [1.]      [2.48]    0.48      
35        [1.]      [3.37]    0.48      
36        [1.]      [2.31]    0.48      
37        [1.]      [3.49]    0.48      
38        [1.]      [2.23]    0.48      
39        [1.]      [3.61]    0.48      
40        [1.]      [2.95]    0.48      
41        [1.]      [3.33]    0.48      
42        [1.]      [2.88]    0.48      
43        [1.]      [3.21]    0.48      
44        [1.]      [3.09]    0.48      
45        [1.]      [3.44]    0.48      
46        [1.]      [3.]      0.48      
47        [1.]      [3.54]    0.48      
48        [1.]      [2.81]    0.48      
49        [1.]      [3.69]    0.48      
50        [1.]      [13.5]    0.48      
51        [1.]      [14.3]    0.48      
52        [1.]      [14.3]    0.48      
53        [1.]      [14.29]   0.48      
54        [1.]      [14.37]   0.48      
55        [1.]      [14.3]    0.48      
56        [1.]      [14.44]   0.48      
57        [1.]      [14.29]   0.48      
58        [1.]      [14.38]   0.48      
59        [1.]      [14.31]   0.48      
60        [1.]      [6.74]    0.48      
61        [1.]      [7.48]    0.48      
62        [1.]      [6.97]    0.48      
63        [1.]      [7.63]    0.48      
64        [1.]      [6.8]     0.48      
65        [1.]      [7.33]    0.48      
66        [1.]      [6.95]    0.48      
67        [1.]      [7.19]    0.48      
68        [1.]      [6.9]     0.48      
69        [1.]      [7.03]    0.48      
70        [1.]      [12.98]   0.48      
71        [1.]      [13.33]   0.48      
72        [1.]      [12.86]   0.48      
73        [1.]      [13.21]   0.48      
74        [1.]      [13.08]   0.48      
75        [1.]      [13.44]   0.48      
76        [1.]      [12.98]   0.48      
77        [1.]      [13.53]   0.48      
78        [1.]      [12.76]   0.48      
79        [1.]      [13.67]   0.48      
80        [1.]      [19.63]   0.48      
81        [1.]      [13.96]   0.48      
82        [1.]      [7.32]    0.48      
83        [1.]      [19.91]   0.48      
84        [1.]      [9.39]    0.48      
85        [1.]      [20.66]   0.48      
86        [1.]      [7.18]    0.48      
87        [1.]      [17.49]   0.48      
88        [1.]      [13.36]   0.48      
89        [1.]      [21.6]    0.48      
90        [1.]      [11.17]   0.48      
91        [1.]      [11.57]   0.48      
92        [1.]      [12.57]   0.48      
93        [1.]      [14.]     0.48      
94        [1.]      [15.85]   0.48      
95        [1.]      [17.95]   0.48      
96        [1.]      [20.21]   0.48      
97        [1.]      [22.59]   0.48      
98        [1.]      [25.06]   0.48      
99        [1.]      [27.59]   0.48      
Обнаружено  94.0  аномалий

Параметр AE1 AE2
True Positive (TP) 29 50
True Negative (TN) 10 4
False Positive (FP) 29 46
False Negative (FN) 21 0

IRE fir test set. AE2

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

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

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

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

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

Количество скрытых слоев Количество нейронов в скрытых слоях Количество эпох обучения Ошибка MSE_stop Порог ошибки реконструкции Значение показателя Excess Значение показателя Approx Количество обнаруженных аномалий
AE1 1 1 1000 7.0839 4.16 14.526 0.064 69
AE2 5 3,2,1,2,3 3000 0.0114 0.48 1.158 0.463 94

13) Сделали выводы о требованиях к:

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

для качественного обнаружения аномалий в данных.

  1. Данные для обучения должны быть без аномалий, чтобы автокодировщик смог рассчитать верное пороговое значение
  2. Слишком простая архитектура, как у AE1, приводит к неполному выявлению аномалий. Напротив, архитектура, как у AE2, приводит к переобучению
  3. 1000 эпох - недостаточно, 3000 - избыточно
  4. Оптимальная ошибка MSE-stop в диапазоне 0.1- 0.01, желательно не меньше для предотвращения переобучения
  5. 4.16 адекватный, но завышен из-за выбросов. 0.48 слишком низкий, чрезмерная чувствительность.
  6. Значение Excess не больше 0.5, значение Deficit равное 0, значение Coating равное 1, значение Approx не меньше 0.7

Задание 2

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

Бригада 4 => набор данных Letter. Он представляет собой набор данных для многоклассовой классификации. Набор предназначен для распознавания черно-белых пиксельных прямоугольниковкак одну из 26 заглавных букв английского алфавита, где буквы алфавита представлены в 16 измерениях. Чтобы получить данные, подходящие для обнаружения аномалий, была произведена подвыборка данных из 3 букв, чтобы сформировать нормальный класс, и случайным образом их пары были объединены так, чтобы их размерность удваивалась. Чтобы сформировать класс аномалий, случайным образом были выбраны несколько экземпляров букв, которые не входят нормальный класс, и они были объединены с экземплярами из нормального класса. Процесс объединения выполняется для того, чтобы сделать обнаружение более сложным, поскольку каждый аномальный пример также будет иметь некоторые нормальные значения признаков

Количество признаков Количество примеров Количество нормальных примеров Количество аномальных примеров
32 1600 1500 100

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

# загрузка обчуающей выборки
train= np.loadtxt('letter_train.txt', dtype=float)

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

print('train:\n', train)
print('train.shape:', np.shape(train))
train:
 [[ 6. 10.  5. ... 10.  2.  7.]
 [ 0.  6.  0. ...  8.  1.  7.]
 [ 4.  7.  5. ...  8.  2.  8.]
 ...
 [ 7. 10. 10. ...  8.  5.  6.]
 [ 7.  7. 10. ...  6.  0.  8.]
 [ 3.  4.  5. ...  9.  5.  5.]]
train.shape: (1500, 32)

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


patience = 5000
ae3_trained, IRE3, IREth3= lib.create_fit_save_ae(train,'out/AE3.h5','out/AE3_ire_th.txt', 100000, False, patience)

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

Скрытых слоев 7, нейроны: 14 12 9 7 9 12 14

Ошибка MSE_AE3 = 0.9383

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

IRE for training set. AE3

6) Сделать вывод о пригодности обученного автокодировщика для качественного обнаружения аномалий. Если порог ошибки реконструкции слишком велик, то подобрать подходящие параметры автокодировщика и повторить шаги (4) – (6).

# обучение AE3.2
patience=5000
ae32_trained, IRE32, IREth32= lib.create_fit_save_ae(train,'out/AE32.h5','out/AE32_ire_th.txt', 100000, False, patience)

Скрытых слоев 7, нейроны: 12 10 8 7 8 10 12

Ошибка MSE_AE32 = 0.9393

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

IRE for training set. AE32

# обучение AE3.3
patience=5000
ae33_trained, IRE33, IREth33= lib.create_fit_save_ae(train,'out/AE33.h5','out/AE33_ire_th.txt', 100000, False, patience)

Скрытых слоев 7, нейроны: 10 9 8 7 8 9 10

Ошибка MSE_AE33 = 1.0524

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

IRE for training set. AE33

# обучение AE3.4
patience=5000
ae34_trained, IRE34, IREth34=lib.create_fit_save_ae(train,'out/AE34.h5','out/AE34_ire_th.txt', 100000, False, patience)

Скрытых слоев 11, нейроны: 48 36 28 22 16 10 16 22 28 36 48

Ошибка MSE_AE34 = 0.3074

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

IRE for training set. AE34

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

#загрузка тестовой выборки
test = np.loadtxt('letter_test.txt', dtype=float)
print('\n test:\n', test)
print('test.shape:', np.shape(test))
 test:
 [[ 8. 11.  8. ...  7.  4.  9.]
 [ 4.  5.  4. ... 13.  8.  8.]
 [ 3.  3.  5. ...  8.  3.  8.]
 ...
 [ 4.  9.  4. ...  8.  3.  8.]
 [ 6. 10.  6. ...  9.  8.  8.]
 [ 3.  1.  3. ...  9.  1.  7.]]
test.shape: (100, 32)

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

#тестирование АE3
predicted_labels3, ire3 = lib.predict_ae(ae3_trained, test, IREth3)
#тестированиеАE3
lib.anomaly_detection_ae(predicted_labels3, ire3, IREth3)

# Построение графика ошибки реконструкции
lib.ire_plot('test', ire3, IREth3, 'AE3')

IRE for test set. AE3

#тестирование АE32
predicted_labels32, ire32 = lib.predict_ae(ae32_trained, test, IREth32)
#тестированиеАE32
lib.anomaly_detection_ae(predicted_labels32, ire32, IREth32)

# Построение графика ошибки реконструкции
lib.ire_plot('test', ire32, IREth32, 'AE32')

IRE for test set. AE32

#тестирование АE33
predicted_labels33, ire33 = lib.predict_ae(ae33_trained, test, IREth33)
#тестированиеАE33
lib.anomaly_detection_ae(predicted_labels33, ire33, IREth33)

# Построение графика ошибки реконструкции
lib.ire_plot('test', ire33, IREth33, 'AE33')

IRE for test set. AE33

#тестирование АE34
predicted_labels34, ire34 = lib.predict_ae(ae34_trained, test, IREth34)
#тестированиеАE34
lib.anomaly_detection_ae(predicted_labels34, ire34, IREth34)
# Построение графика ошибки реконструкции
lib.ire_plot('test', ire34, IREth34, 'AE34')

IRE for test set. AE34

9) Если результаты обнаружения аномалий не удовлетворительные (обнаружено менее 70% аномалий), то подобрать подходящие параметры автокодировщика и повторить шаги (4) – (9).

Результаты обнаружения аномалий удовлетворены.

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

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

Dataset name Количество скрытых слоев Количество нейронов в скрытых слоях Количество эпох обучения Ошибка MSE_stop Порог ошибки реконструкции % обнаруженных аномалий
Cardio 11 48 36 28 22 16 10 16 22 28 36 48 100000 0.3074 7.3 85%

11) Сделать выводы о требованиях к:

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

для качественного обнаружения аномалий в случае, когда размерность пространства признаков высока.

  1. Данные для обучения должны быть без аномалий, чтобы автокодировщик смог рассчитать верное пороговое значение
  2. Архитектура автокодировщика должна постепенно сужатся к бутылочному горлышку,а затем постепенно возвращатся к исходным выходным размерам, кол-во скрытых слоев 7-11.
  3. В рамках данного набора данных оптимальное кол-во эпох 100000 с patience 5000 эпох
  4. Оптимальная ошибка MSE-stop в районе 0.1, желательно не меньше для предотвращения переобучения
  5. Значение порога не больше 1.6