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

424 KiB

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

import numpy as np
import lab02_lib as lib
/content/drive/MyDrive/Colab Notebooks/is_lab2/lab02_lib.py:444: SyntaxWarning: invalid escape sequence '\X'
  hatch='/', label='Площадь |Xd| за исключением |Xt| (|Xd\Xt|)')
/content/drive/MyDrive/Colab Notebooks/is_lab2/lab02_lib.py:452: SyntaxWarning: invalid escape sequence '\X'
  facecolor='none', label='Площадь |Xt| за исключением |Xd| (|Xt\Xd|)')

Задание 2

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

Бригада 6 => набор данных Cardio. Это реальный набор данных, который состоит из измерений частоты сердечных сокращений плода и сокращений матки на кардиотокограммах, классифицированных экспертами акушерами. Исходный набор данных предназначен для классификации. В нем представлено 3 класса: «норма», «подозрение» и «патология». Для обнаружения аномалий класс «норма» принимается за норму, класс «патология» принимается за аномалии, а класс «подозрение» был отброшен.

Количество
признаков
Количество
примеров
Количество
нормальных примеров
Количество
аномальных примеров
21 1764 1655 109

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

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

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

print('train:\n', train)
print('train.shape:', np.shape(train))
train:
 [[ 0.00491231  0.69319077 -0.20364049 ...  0.23149795 -0.28978574
  -0.49329397]
 [ 0.11072935 -0.07990259 -0.20364049 ...  0.09356344 -0.25638541
  -0.49329397]
 [ 0.21654639 -0.27244466 -0.20364049 ...  0.02459619 -0.25638541
   1.1400175 ]
 ...
 [ 0.85144861 -0.91998844 -0.20364049 ...  0.57633422 -0.65718941
   1.1400175 ]
 [ 0.85144861 -0.91998844 -0.20364049 ...  0.57633422 -0.62378908
  -0.49329397]
 [ 1.0630827  -0.51148142 -0.16958144 ...  0.57633422 -0.65718941
  -0.49329397]]
train.shape: (1654, 21)

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

# **kwargs
# verbose_every_n_epochs - отображать прогресс каждые N эпох (по умолчанию - 1000)
# early_stopping_delta - дельта для ранней остановки (по умолчанию - 0.01)
# early_stopping_value = значение для ранней остановки (по умолчанию -  0.0001)

from time import time

patience = 4000
start = time()
ae3_v1_trained, IRE3_v1, IREth3_v1 = lib.create_fit_save_ae(train,'out/AE3_V1.h5','out/AE3_v1_ire_th.txt',
100000, False, patience, early_stopping_delta = 0.001)
print("Время на обучение: ", time() - start)
Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 1
Задайте количество скрытых слоёв (нечетное число) : 7
Задайте архитектуру скрытых слоёв автокодировщика, например, в виде 3 1 3 : 46 26 14 10 14 26 46

Epoch 1000/100000
 - loss: 0.0574

Epoch 2000/100000
 - loss: 0.0360

Epoch 3000/100000
 - loss: 0.0261

Epoch 4000/100000
 - loss: 0.0217

Epoch 5000/100000
 - loss: 0.0204

Epoch 6000/100000
 - loss: 0.0185

Epoch 7000/100000
 - loss: 0.0189

Epoch 8000/100000
 - loss: 0.0176

Epoch 9000/100000
 - loss: 0.0165

Epoch 10000/100000
 - loss: 0.0159

Epoch 11000/100000
 - loss: 0.0158

Epoch 12000/100000
 - loss: 0.0150

Epoch 13000/100000
 - loss: 0.0147

Epoch 14000/100000
 - loss: 0.0146

Epoch 15000/100000
 - loss: 0.0142

Epoch 16000/100000
 - loss: 0.0138

Epoch 17000/100000
 - loss: 0.0138

Epoch 18000/100000
 - loss: 0.0140
52/52 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. 


Время на обучение:  765.1605446338654

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

Скрытых слоев 7, нейроны: 46->26->14->10->14->26->48

Ошибка MSE_AE3_v1 = 0.0126

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

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

# **kwargs
# verbose_every_n_epochs - отображать прогресс каждые N эпох (по умолчанию - 1000)
# early_stopping_delta - дельта для ранней остановки (по умолчанию - 0.01)
# early_stopping_value = значение для ранней остановки (по умолчанию -  0.0001)

from time import time

patience = 4000
start = time()
ae3_v2_trained, IRE3_v2, IREth3_v2 = lib.create_fit_save_ae(train,'out/AE3_V2.h5','out/AE3_v2_ire_th.txt',
100000, False, patience, early_stopping_delta = 0.001)
print("Время на обучение: ", time() - start)
Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 1
Задайте количество скрытых слоёв (нечетное число) : 11
Задайте архитектуру скрытых слоёв автокодировщика, например, в виде 3 1 3 : 48 36 28 22 16 10 16 22 28 36 48

Epoch 1000/100000
 - loss: 0.0554

Epoch 2000/100000
 - loss: 0.0276

Epoch 3000/100000
 - loss: 0.0217

Epoch 4000/100000
 - loss: 0.0195

Epoch 5000/100000
 - loss: 0.0179

Epoch 6000/100000
 - loss: 0.0166

Epoch 7000/100000
 - loss: 0.0157

Epoch 8000/100000
 - loss: 0.0151

Epoch 9000/100000
 - loss: 0.0144

Epoch 10000/100000
 - loss: 0.0139

Epoch 11000/100000
 - loss: 0.0135

Epoch 12000/100000
 - loss: 0.0131

Epoch 13000/100000
 - loss: 0.0131

Epoch 14000/100000
 - loss: 0.0128

Epoch 15000/100000
 - loss: 0.0117

Epoch 16000/100000
 - loss: 0.0119

Epoch 17000/100000
 - loss: 0.0108

Epoch 18000/100000
 - loss: 0.0103

Epoch 19000/100000
 - loss: 0.0100

Epoch 20000/100000
 - loss: 0.0100

Epoch 21000/100000
 - loss: 0.0094

Epoch 22000/100000
 - loss: 0.0090

Epoch 23000/100000
 - loss: 0.0090

Epoch 24000/100000
 - loss: 0.0098
52/52 ━━━━━━━━━━━━━━━━━━━━ 0s 3ms/step
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. 


Время на обучение:  1065.6178832054138

Скрытых слоев 7, нейроны: 48->36->28->22->16->12->16->22->28->36->48

Ошибка MSE_AE3_v1 = 0.0098

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

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

#загрузка тестовой выборки
test = np.loadtxt('data/cardio_test.txt', dtype=float)
print('\n test:\n', test)
print('test.shape:', np.shape(test))

 test:
 [[ 0.21654639 -0.65465178 -0.20364049 ... -2.0444214   4.987467
  -0.49329397]
 [ 0.21654639 -0.5653379  -0.20364049 ... -2.1133887   6.490482
  -0.49329397]
 [-0.3125388  -0.91998844  6.9653692  ... -1.1478471   3.9186563
  -0.49329397]
 ...
 [-0.41835583 -0.91998844 -0.16463485 ... -1.4926834   0.24461959
  -0.49329397]
 [-0.41835583 -0.91998844 -0.15093411 ... -1.4237162   0.14441859
  -0.49329397]
 [-0.41835583 -0.91998844 -0.20364049 ... -1.2857816   3.5846529
  -0.49329397]]
test.shape: (109, 21)

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

# тестирование АE3
predicted_labels3_v1, ire3_v1 = lib.predict_ae(ae3_v1_trained, test, IREth3_v1)
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 8ms/step 
# Построение графика ошибки реконструкции
lib.ire_plot('test', ire3_v1, IREth3_v1, 'AE3_v1')

# тестирование АE3
predicted_labels3_v2, ire3_v2 = lib.predict_ae(ae3_v2_trained, test, IREth3_v2)
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step 
# Построение графика ошибки реконструкции
lib.ire_plot('test', ire3_v2, IREth3_v2, 'AE3_v2')

# тестирование АE2
lib.anomaly_detection_ae(predicted_labels3_v1, IRE3_v1, IREth3_v1)

i         Labels    IRE       IREth     
0         [1.]      0.59      1.75      
1         [1.]      0.61      1.75      
2         [1.]      0.69      1.75      
3         [1.]      0.71      1.75      
4         [1.]      1.57      1.75      
5         [1.]      0.6       1.75      
6         [1.]      0.68      1.75      
7         [1.]      0.66      1.75      
8         [1.]      0.7       1.75      
9         [1.]      0.62      1.75      
10        [1.]      0.51      1.75      
11        [1.]      0.82      1.75      
12        [1.]      0.75      1.75      
13        [1.]      0.63      1.75      
14        [1.]      0.59      1.75      
15        [1.]      1.13      1.75      
16        [1.]      0.66      1.75      
17        [1.]      1.12      1.75      
18        [1.]      0.57      1.75      
19        [1.]      0.78      1.75      
20        [1.]      0.57      1.75      
21        [1.]      0.29      1.75      
22        [1.]      0.48      1.75      
23        [1.]      0.99      1.75      
24        [1.]      0.66      1.75      
25        [1.]      0.86      1.75      
26        [1.]      0.59      1.75      
27        [1.]      0.77      1.75      
28        [1.]      0.69      1.75      
29        [0.]      0.45      1.75      
30        [1.]      0.4       1.75      
31        [1.]      0.87      1.75      
32        [1.]      0.54      1.75      
33        [1.]      0.29      1.75      
34        [1.]      0.93      1.75      
35        [1.]      0.3       1.75      
36        [1.]      0.17      1.75      
37        [1.]      0.74      1.75      
38        [0.]      0.28      1.75      
39        [0.]      0.34      1.75      
40        [0.]      0.35      1.75      
41        [0.]      0.5       1.75      
42        [1.]      0.82      1.75      
43        [1.]      0.36      1.75      
44        [1.]      1.12      1.75      
45        [1.]      0.34      1.75      
46        [1.]      0.34      1.75      
47        [1.]      0.75      1.75      
48        [1.]      0.56      1.75      
49        [1.]      0.37      1.75      
50        [1.]      0.3       1.75      
51        [1.]      0.3       1.75      
52        [1.]      0.65      1.75      
53        [1.]      0.5       1.75      
54        [0.]      0.21      1.75      
55        [1.]      1.06      1.75      
56        [1.]      0.4       1.75      
57        [1.]      0.6       1.75      
58        [1.]      0.6       1.75      
59        [1.]      0.67      1.75      
60        [1.]      0.55      1.75      
61        [0.]      0.24      1.75      
62        [0.]      0.64      1.75      
63        [0.]      1.75      1.75      
64        [0.]      0.89      1.75      
65        [0.]      0.38      1.75      
66        [1.]      0.56      1.75      
67        [1.]      0.73      1.75      
68        [1.]      0.49      1.75      
69        [1.]      0.47      1.75      
70        [1.]      0.26      1.75      
71        [1.]      0.51      1.75      
72        [1.]      0.83      1.75      
73        [1.]      0.71      1.75      
74        [0.]      0.4       1.75      
75        [0.]      1.28      1.75      
76        [1.]      0.42      1.75      
77        [1.]      1.34      1.75      
78        [1.]      0.55      1.75      
79        [1.]      0.92      1.75      
80        [1.]      0.65      1.75      
81        [1.]      0.82      1.75      
82        [1.]      1.23      1.75      
83        [1.]      0.4       1.75      
84        [1.]      0.49      1.75      
85        [1.]      0.47      1.75      
86        [1.]      0.45      1.75      
87        [1.]      0.69      1.75      
88        [1.]      0.58      1.75      
89        [1.]      0.76      1.75      
90        [1.]      0.57      1.75      
91        [1.]      0.33      1.75      
92        [1.]      0.57      1.75      
93        [1.]      0.48      1.75      
94        [1.]      0.31      1.75      
95        [1.]      0.42      1.75      
96        [1.]      0.43      1.75      
97        [1.]      0.51      1.75      
98        [1.]      0.46      1.75      
99        [1.]      0.43      1.75      
100       [1.]      0.54      1.75      
101       [1.]      0.63      1.75      
102       [1.]      0.47      1.75      
103       [1.]      0.51      1.75      
104       [1.]      0.49      1.75      
105       [1.]      0.25      1.75      
106       [1.]      0.16      1.75      
107       [1.]      0.2       1.75      
108       [1.]      0.7       1.75      
Обнаружено  96.0  аномалий

Для AE3_v1 точность составляет 88%

# тестирование АE2
lib.anomaly_detection_ae(predicted_labels3_v2, IRE3_v2, IREth3_v2)

i         Labels    IRE       IREth     
0         [1.]      0.69      1.6       
1         [1.]      0.81      1.6       
2         [1.]      0.51      1.6       
3         [1.]      0.62      1.6       
4         [1.]      1.6       1.6       
5         [1.]      0.34      1.6       
6         [1.]      0.51      1.6       
7         [1.]      0.49      1.6       
8         [1.]      0.5       1.6       
9         [1.]      0.45      1.6       
10        [1.]      0.4       1.6       
11        [1.]      0.3       1.6       
12        [1.]      0.7       1.6       
13        [1.]      0.54      1.6       
14        [1.]      0.59      1.6       
15        [1.]      0.64      1.6       
16        [1.]      0.4       1.6       
17        [1.]      0.73      1.6       
18        [1.]      0.86      1.6       
19        [1.]      0.45      1.6       
20        [1.]      0.71      1.6       
21        [1.]      0.33      1.6       
22        [1.]      0.49      1.6       
23        [1.]      0.83      1.6       
24        [1.]      0.65      1.6       
25        [1.]      0.92      1.6       
26        [1.]      0.41      1.6       
27        [1.]      0.48      1.6       
28        [1.]      0.51      1.6       
29        [0.]      0.42      1.6       
30        [1.]      0.35      1.6       
31        [1.]      0.4       1.6       
32        [1.]      0.42      1.6       
33        [1.]      0.29      1.6       
34        [1.]      0.48      1.6       
35        [1.]      0.28      1.6       
36        [1.]      0.14      1.6       
37        [1.]      0.55      1.6       
38        [0.]      0.26      1.6       
39        [0.]      0.32      1.6       
40        [0.]      0.23      1.6       
41        [0.]      0.43      1.6       
42        [1.]      0.46      1.6       
43        [1.]      0.26      1.6       
44        [1.]      0.92      1.6       
45        [1.]      0.34      1.6       
46        [1.]      0.34      1.6       
47        [1.]      0.69      1.6       
48        [0.]      0.49      1.6       
49        [1.]      0.44      1.6       
50        [1.]      0.31      1.6       
51        [1.]      0.54      1.6       
52        [1.]      0.66      1.6       
53        [1.]      0.45      1.6       
54        [0.]      0.26      1.6       
55        [1.]      0.44      1.6       
56        [1.]      0.45      1.6       
57        [1.]      0.48      1.6       
58        [1.]      0.68      1.6       
59        [1.]      0.75      1.6       
60        [1.]      0.5       1.6       
61        [0.]      0.34      1.6       
62        [1.]      0.33      1.6       
63        [1.]      0.54      1.6       
64        [1.]      0.57      1.6       
65        [1.]      0.36      1.6       
66        [1.]      0.48      1.6       
67        [1.]      0.66      1.6       
68        [1.]      0.36      1.6       
69        [1.]      0.53      1.6       
70        [1.]      0.25      1.6       
71        [1.]      0.58      1.6       
72        [1.]      0.47      1.6       
73        [1.]      0.45      1.6       
74        [1.]      0.46      1.6       
75        [1.]      1.04      1.6       
76        [1.]      0.25      1.6       
77        [1.]      0.99      1.6       
78        [1.]      0.37      1.6       
79        [1.]      0.52      1.6       
80        [1.]      0.39      1.6       
81        [1.]      0.52      1.6       
82        [1.]      0.59      1.6       
83        [1.]      0.38      1.6       
84        [1.]      0.44      1.6       
85        [1.]      0.45      1.6       
86        [1.]      0.41      1.6       
87        [1.]      0.55      1.6       
88        [1.]      0.61      1.6       
89        [1.]      0.75      1.6       
90        [1.]      0.4       1.6       
91        [1.]      0.23      1.6       
92        [1.]      0.36      1.6       
93        [1.]      0.39      1.6       
94        [1.]      0.22      1.6       
95        [1.]      0.43      1.6       
96        [1.]      0.44      1.6       
97        [1.]      0.43      1.6       
98        [1.]      0.41      1.6       
99        [1.]      0.54      1.6       
100       [1.]      0.48      1.6       
101       [1.]      0.45      1.6       
102       [1.]      0.34      1.6       
103       [1.]      0.4       1.6       
104       [1.]      0.46      1.6       
105       [1.]      0.33      1.6       
106       [1.]      0.19      1.6       
107       [1.]      0.21      1.6       
108       [1.]      0.62      1.6       
Обнаружено  101.0  аномалий

Для AE3_v2 точность составляет 92%

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.0098 1.6 92%

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

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

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

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