diff --git a/labworks/LW2/images/1.png b/labworks/LW2/images/1.png
new file mode 100644
index 0000000..c56abe9
Binary files /dev/null and b/labworks/LW2/images/1.png differ
diff --git a/labworks/LW2/images/10.png b/labworks/LW2/images/10.png
new file mode 100644
index 0000000..b0cd2be
Binary files /dev/null and b/labworks/LW2/images/10.png differ
diff --git a/labworks/LW2/images/11.png b/labworks/LW2/images/11.png
new file mode 100644
index 0000000..f4558e4
Binary files /dev/null and b/labworks/LW2/images/11.png differ
diff --git a/labworks/LW2/images/12.png b/labworks/LW2/images/12.png
new file mode 100644
index 0000000..238402a
Binary files /dev/null and b/labworks/LW2/images/12.png differ
diff --git a/labworks/LW2/images/13.png b/labworks/LW2/images/13.png
new file mode 100644
index 0000000..dbe6dec
Binary files /dev/null and b/labworks/LW2/images/13.png differ
diff --git a/labworks/LW2/images/14.png b/labworks/LW2/images/14.png
new file mode 100644
index 0000000..66750b7
Binary files /dev/null and b/labworks/LW2/images/14.png differ
diff --git a/labworks/LW2/images/15.png b/labworks/LW2/images/15.png
new file mode 100644
index 0000000..bb4cb44
Binary files /dev/null and b/labworks/LW2/images/15.png differ
diff --git a/labworks/LW2/images/16.png b/labworks/LW2/images/16.png
new file mode 100644
index 0000000..c11945c
Binary files /dev/null and b/labworks/LW2/images/16.png differ
diff --git a/labworks/LW2/images/17.png b/labworks/LW2/images/17.png
new file mode 100644
index 0000000..41ab942
Binary files /dev/null and b/labworks/LW2/images/17.png differ
diff --git a/labworks/LW2/images/2.png b/labworks/LW2/images/2.png
new file mode 100644
index 0000000..1c6fc28
Binary files /dev/null and b/labworks/LW2/images/2.png differ
diff --git a/labworks/LW2/images/3.png b/labworks/LW2/images/3.png
new file mode 100644
index 0000000..3a7787b
Binary files /dev/null and b/labworks/LW2/images/3.png differ
diff --git a/labworks/LW2/images/4.png b/labworks/LW2/images/4.png
new file mode 100644
index 0000000..9586369
Binary files /dev/null and b/labworks/LW2/images/4.png differ
diff --git a/labworks/LW2/images/5.png b/labworks/LW2/images/5.png
new file mode 100644
index 0000000..06c1638
Binary files /dev/null and b/labworks/LW2/images/5.png differ
diff --git a/labworks/LW2/images/6.png b/labworks/LW2/images/6.png
new file mode 100644
index 0000000..1741759
Binary files /dev/null and b/labworks/LW2/images/6.png differ
diff --git a/labworks/LW2/images/7.png b/labworks/LW2/images/7.png
new file mode 100644
index 0000000..183c04b
Binary files /dev/null and b/labworks/LW2/images/7.png differ
diff --git a/labworks/LW2/images/8.png b/labworks/LW2/images/8.png
new file mode 100644
index 0000000..3385418
Binary files /dev/null and b/labworks/LW2/images/8.png differ
diff --git a/labworks/LW2/images/9.png b/labworks/LW2/images/9.png
new file mode 100644
index 0000000..0f64569
Binary files /dev/null and b/labworks/LW2/images/9.png differ
diff --git a/labworks/LW2/report.md b/labworks/LW2/report.md
new file mode 100644
index 0000000..7047cd1
--- /dev/null
+++ b/labworks/LW2/report.md
@@ -0,0 +1,688 @@
+# Отчёт по лабораторной работе №2
+
+**Касимов Азамат, Немыкин Никита — А-01-22**
+
+---
+
+## Задание 1
+
+### 1) В среде Google Colab создали новый блокнот (notebook). Импортировали необходимые для работы библиотеки и модули.
+
+```python
+# импорт модулей
+import os
+os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2')
+```
+
+```python
+import lab02_lib as lib
+```
+
+### 2) Сгенерировали индивидуальный набор двумерных данных в пространстве признаков с координатами центра (6, 6), где 6 – номер бригады. Вывели полученные данные на рисунок и в консоль.
+
+```python
+# генерация датасета
+data = lib.datagen(6, 6, 1000, 2)
+
+# вывод данных и размерности
+print('Исходные данные:')
+print(data)
+print('Размерность данных:')
+print(data.shape)
+```
+
+
+
+```output
+Исходные данные:
+[[5.85155463 5.90866047]
+ [5.89835027 5.87217268]
+ [5.95502834 6.13788939]
+ ...
+ [5.97194799 6.15187645]
+ [6.24367408 6.18137502]
+ [6.04890409 6.24554664]]
+Размерность данных:
+(1000, 2)
+```
+
+### 3) Создали и обучили автокодировщик AE1 простой архитектуры, выбрав небольшое количество эпох обучения. Зафиксировали в таблице вида табл.1 количество скрытых слоёв и нейронов в них
+
+```python
+# обучение 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, на которой обучение завершилось. Построили график ошибки реконструкции обучающей выборки. Зафиксировали порог ошибки реконструкции – порог обнаружения аномалий.
+
+Ошибка MSE_AE1 = 16.0985
+
+```python
+# Построение графика ошибки реконструкции
+lib.ire_plot('training', IRE1, IREth1, 'AE1')
+```
+
+
+
+### 5) Создали и обучили второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения
+
+```python
+# обучение 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.0112
+
+```python
+# Построение графика ошибки реконструкции
+lib.ire_plot('training', IRE2, IREth2, 'AE2')
+```
+
+
+
+### 7) Рассчитали характеристики качества обучения EDCA для AE1 и AE2. Визуализировали и сравнили области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Сделали вывод о пригодности AE1 и AE2 для качественного обнаружения аномалий.
+
+```python
+# построение областей покрытия и границ классов
+# расчет характеристик качества обучения
+numb_square = 20
+xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)
+```
+
+
+```output
+amount: 21
+amount_ae: 301
+```
+
+
+
+
+
+```output
+
+Оценка качества AE1
+IDEAL = 0. Excess: 13.333333333333334
+IDEAL = 0. Deficit: 0.0
+IDEAL = 1. Coating: 1.0
+summa: 1.0
+IDEAL = 1. Extrapolation precision (Approx): 0.06976744186046512
+```
+
+```python
+# построение областей покрытия и границ классов
+# расчет характеристик качества обучения
+numb_square = 20
+xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)
+```
+
+
+
+```output
+amount: 21
+amount_ae: 36
+```
+
+
+
+
+
+```output
+
+Оценка качества AE2
+IDEAL = 0. Excess: 0.7142857142857143
+IDEAL = 0. Deficit: 0.0
+IDEAL = 1. Coating: 1.0
+summa: 1.0
+IDEAL = 1. Extrapolation precision (Approx): 0.5833333333333335
+```
+
+```python
+# сравнение характеристик качества обучения и областей аппроксимации
+lib.plot2in1(data, xx, yy, Z1, Z2)
+```
+
+
+
+### 8) Если автокодировщик AE2 недостаточно точно аппроксимирует область обучающих данных, то подобрать подходящие параметры автокодировщика и повторить шаги (6) – (8).
+
+Полученные показатели EDCA для автокодировщика AE2 нас устраивают.
+
+### 9) Изучили сохраненный набор данных и пространство признаков. Создали тестовую выборку, состоящую, как минимум, из 4ёх элементов, не входящих в обучающую выборку. Элементы должны быть такими, чтобы AE1 распознавал их как норму, а AE2 детектировал как аномалии.
+
+```python
+# загрузка тестового набора
+data_test = np.loadtxt('data_test.txt', dtype=float)
+print(data_test)
+```
+
+```output
+[[4.85155463 4.90866047]
+ [4.89835027 4.87217268]
+ [4.95502834 4.13788939]
+ [4.9958611 4.8697867 ]]
+```
+
+### 10) Применили обученные автокодировщики AE1 и AE2 к тестовым данным и вывели значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога на график и в консоль.
+
+```python
+# тестирование АE1
+predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)
+```
+
+```python
+# тестирование АE1
+lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)
+lib.ire_plot('test', ire1, IREth1, 'AE1')
+```
+
+```output
+Аномалий не обнаружено
+```
+
+
+
+```python
+# тестирование АE2
+predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)
+```
+
+```python
+# тестирование АE2
+lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)
+lib.ire_plot('test', ire2, IREth2, 'AE2')
+```
+
+```output
+
+i Labels IRE IREth
+0 [1.] [1.48] 0.44
+1 [1.] [1.47] 0.44
+2 [1.] [2.04] 0.44
+3 [1.] [1.41] 0.44
+Обнаружено 4.0 аномалий
+```
+
+
+
+### 11) Визуализировали элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2.
+
+```python
+lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)
+```
+
+
+
+### 12) Результаты исследования занесли в таблицу:
+Табл. 1 Результаты задания №1
+
+| | Количество
скрытых слоев | Количество
нейронов в скрытых слоях | Количество
эпох обучения | Ошибка
MSE_stop | Порог ошибки
реконструкции | Значение показателя
Excess | Значение показателя
Approx | Количество обнаруженных
аномалий |
+|-----:|------------------------------|----------------------------------------|-----------------------------|--------------------|-------------------------------|-------------------------------|--------------------------------|-------------------------------------|
+| AE1 | 1 | 1 | 1000 | 16.0985 | 6 | 13.333333333333334 | 0.06976744186046512 | 0 |
+| AE2 | 5 | 3,2,1,2,3 | 3000 | 0.0112 | 0.44 | 0.7142857142857143 | 0.5833333333333335 | 4 |
+
+### 13) Сделали выводы о требованиях к:
+- данным для обучения,
+- архитектуре автокодировщика,
+- количеству эпох обучения,
+- ошибке MSE_stop, приемлемой для останова обучения,
+- ошибке реконструкции обучающей выборки (порогу обнаружения
+аномалий),
+- характеристикам качества обучения EDCA одноклассового
+классификатора
+
+для качественного обнаружения аномалий в данных.
+
+1) Данные для обучения должны быть без аномалий, чтобы автокодировщик смог рассчитать верное пороговое значение
+2) Архитектура автокодировщика должна постепенно сужатся к бутылочному горлышку,а затем постепенно возвращатся к исходным выходным размерам, кол-во скрытых слоев 3-5
+3) В рамках данного набора данных оптимальное кол-во эпох 3000 с patience 300 эпох
+4) Оптимальная ошибка MSE-stop в районе 0.01, желательно не меньше для предотвращения переобучения
+5) Значение порога в районе 0.45
+6) Значение Excess не больше 0.75, значение Deficit равное 0, значение Coating равное 1, значение Approx не меньше 0.58
+
+## Задание 2
+
+### 1) Изучить описание своего набора реальных данных, что он из себя представляет
+
+Бригада 6 => набор данных Cardio. Это реальный набор данных, который состоит из измерений частоты сердечных сокращений плода и
+сокращений матки на кардиотокограммах, классифицированных экспертами
+акушерами. Исходный набор данных предназначен для классификации. В нем
+представлено 3 класса: «норма», «подозрение» и «патология». Для обнаружения
+аномалий класс «норма» принимается за норму, класс «патология» принимается за
+аномалии, а класс «подозрение» был отброшен.
+
+| Количество
признаков | Количество
примеров | Количество
нормальных примеров | Количество
аномальных примеров |
+|-------------------------:|-----------------------:|----------------------------------:|-----------------------------------:|
+| 21 | 1764 | 1655 | 109 |
+
+### 2) Загрузить многомерную обучающую выборку реальных данных Cardio.txt.
+
+```python
+# загрузка обчуающей выборки
+train = np.loadtxt('cardio_train.txt', dtype=float)
+```
+
+### 3) Вывести полученные данные и их размерность в консоли.
+
+```python
+print('train:\n', train)
+print('train.shape:', np.shape(train))
+```
+
+```output
+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) Создать и обучить автокодировщик с подходящей для данных архитектурой. Выбрать необходимое количество эпох обучения.
+
+```python
+# **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)
+```
+
+
+```output
+
+Время на обучение: 1232.8548789024353
+```
+
+### 5) Зафиксировать ошибку MSE, на которой обучение завершилось. Построить график ошибки реконструкции обучающей выборки. Зафиксировать порог ошибки реконструкции – порог обнаружения аномалий.
+
+Скрытых слоев 7, нейроны: 46->26->14->10->14->26->48
+
+Ошибка MSE_AE3_v1 = 0.0137
+
+```python
+lib.ire_plot('training', IRE3_v1, IREth3_v1, 'AE3_v1')
+```
+
+
+
+### 6) Сделать вывод о пригодности обученного автокодировщика для качественного обнаружения аномалий. Если порог ошибки реконструкции слишком велик, то подобрать подходящие параметры автокодировщика и повторить шаги (4) – (6).
+
+```python
+# **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)
+```
+
+```output
+
+Время на обучение: 1298.1322848796844
+```
+
+Скрытых слоев 11, нейроны: 48->36->28->22->16->12->16->22->28->36->48
+
+Ошибка MSE_AE3_v1 = 0.0077
+
+```python
+# Построение графика ошибки реконструкции
+lib.ire_plot('training', IRE3_v2, IREth3_v2, 'AE3_v2')
+```
+
+
+
+### 7) Изучить и загрузить тестовую выборку Cardio.txt.
+
+```python
+#загрузка тестовой выборки
+test = np.loadtxt('cardio_test.txt', dtype=float)
+print('\n test:\n', test)
+print('test.shape:', np.shape(test))
+```
+
+```output
+
+ 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) Подать тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Вывести график ошибки реконструкции элементов тестовой выборки относительно порога.
+
+```python
+# тестирование АE3
+predicted_labels3_v1, ire3_v1 = lib.predict_ae(ae3_v1_trained, test, IREth3_v1)
+```
+
+```python
+# Построение графика ошибки реконструкции
+lib.ire_plot('test', ire3_v1, IREth3_v1, 'AE3_v1')
+```
+
+
+
+```python
+# тестирование АE3
+predicted_labels3_v2, ire3_v2 = lib.predict_ae(ae3_v2_trained, test, IREth3_v2)
+```
+
+```python
+# Построение графика ошибки реконструкции
+lib.ire_plot('test', ire3_v2, IREth3_v2, 'AE3_v2')
+```
+
+
+
+```python
+# тестирование АE1
+lib.anomaly_detection_ae(predicted_labels3_v1, IRE3_v1, IREth3_v1)
+```
+
+```output
+
+i Labels IRE IREth
+0 [1.] 0.62 1.82
+1 [1.] 0.81 1.82
+2 [1.] 0.68 1.82
+3 [1.] 0.68 1.82
+4 [1.] 1.14 1.82
+5 [1.] 0.64 1.82
+6 [1.] 0.84 1.82
+7 [1.] 0.87 1.82
+8 [1.] 0.51 1.82
+9 [1.] 0.46 1.82
+10 [1.] 0.5 1.82
+11 [1.] 0.67 1.82
+12 [1.] 0.74 1.82
+13 [1.] 0.9 1.82
+14 [1.] 0.66 1.82
+15 [1.] 1.33 1.82
+16 [1.] 0.66 1.82
+17 [1.] 0.5 1.82
+18 [1.] 0.64 1.82
+19 [1.] 0.5 1.82
+20 [1.] 0.4 1.82
+21 [1.] 0.49 1.82
+22 [1.] 0.43 1.82
+23 [1.] 0.61 1.82
+24 [1.] 0.43 1.82
+25 [1.] 0.98 1.82
+26 [1.] 0.49 1.82
+27 [1.] 0.92 1.82
+28 [1.] 0.91 1.82
+29 [0.] 0.41 1.82
+30 [1.] 0.55 1.82
+31 [1.] 0.55 1.82
+32 [1.] 0.58 1.82
+33 [1.] 0.39 1.82
+34 [1.] 0.73 1.82
+35 [1.] 0.4 1.82
+36 [1.] 0.22 1.82
+37 [1.] 0.62 1.82
+38 [0.] 0.36 1.82
+39 [0.] 0.31 1.82
+40 [0.] 0.38 1.82
+41 [0.] 0.5 1.82
+42 [1.] 0.84 1.82
+43 [1.] 0.38 1.82
+44 [1.] 1.03 1.82
+45 [1.] 0.3 1.82
+46 [1.] 0.3 1.82
+47 [1.] 0.8 1.82
+48 [0.] 0.67 1.82
+49 [1.] 0.6 1.82
+50 [1.] 0.59 1.82
+51 [1.] 0.66 1.82
+52 [1.] 0.71 1.82
+53 [1.] 0.48 1.82
+54 [0.] 0.25 1.82
+55 [1.] 0.95 1.82
+56 [1.] 0.33 1.82
+57 [1.] 0.6 1.82
+58 [1.] 0.6 1.82
+59 [1.] 0.71 1.82
+60 [1.] 0.39 1.82
+61 [0.] 0.33 1.82
+62 [0.] 0.57 1.82
+63 [0.] 0.93 1.82
+64 [0.] 0.78 1.82
+65 [0.] 0.4 1.82
+66 [1.] 0.44 1.82
+67 [1.] 0.71 1.82
+68 [1.] 0.57 1.82
+69 [1.] 0.32 1.82
+70 [1.] 0.27 1.82
+71 [1.] 0.47 1.82
+72 [1.] 0.62 1.82
+73 [1.] 0.46 1.82
+74 [1.] 0.61 1.82
+75 [1.] 1.2 1.82
+76 [1.] 0.38 1.82
+77 [1.] 1.46 1.82
+78 [1.] 0.58 1.82
+79 [1.] 0.92 1.82
+80 [1.] 0.51 1.82
+81 [1.] 0.9 1.82
+82 [1.] 0.99 1.82
+83 [1.] 0.56 1.82
+84 [1.] 0.55 1.82
+85 [1.] 0.58 1.82
+86 [1.] 0.76 1.82
+87 [1.] 0.65 1.82
+88 [1.] 0.34 1.82
+89 [1.] 0.98 1.82
+90 [1.] 0.52 1.82
+91 [1.] 0.22 1.82
+92 [1.] 0.57 1.82
+93 [1.] 0.46 1.82
+94 [1.] 0.29 1.82
+95 [1.] 0.37 1.82
+96 [1.] 0.38 1.82
+97 [1.] 0.51 1.82
+98 [1.] 0.54 1.82
+99 [1.] 0.61 1.82
+100 [1.] 0.47 1.82
+101 [1.] 0.57 1.82
+102 [1.] 0.48 1.82
+103 [1.] 0.46 1.82
+104 [1.] 0.45 1.82
+105 [1.] 0.43 1.82
+106 [1.] 0.19 1.82
+107 [1.] 0.24 1.82
+108 [1.] 0.71 1.82
+Обнаружено 97.0 аномалий
+```
+
+Для AE3_v1 точность составляет 92%
+
+```python
+# тестирование АE2
+lib.anomaly_detection_ae(predicted_labels3_v2, IRE3_v2, IREth3_v2)
+```
+
+```output
+
+i Labels IRE IREth
+0 [1.] 0.37 1.15
+1 [1.] 0.43 1.15
+2 [1.] 0.36 1.15
+3 [1.] 0.57 1.15
+4 [1.] 1.03 1.15
+5 [1.] 0.37 1.15
+6 [1.] 0.56 1.15
+7 [1.] 0.6 1.15
+8 [1.] 0.5 1.15
+9 [1.] 0.5 1.15
+10 [1.] 0.28 1.15
+11 [1.] 0.57 1.15
+12 [1.] 0.69 1.15
+13 [1.] 0.54 1.15
+14 [1.] 0.89 1.15
+15 [1.] 0.48 1.15
+16 [1.] 0.4 1.15
+17 [1.] 0.48 1.15
+18 [1.] 0.37 1.15
+19 [1.] 0.18 1.15
+20 [1.] 0.48 1.15
+21 [1.] 0.31 1.15
+22 [1.] 0.39 1.15
+23 [1.] 0.52 1.15
+24 [1.] 0.35 1.15
+25 [1.] 0.62 1.15
+26 [1.] 0.28 1.15
+27 [1.] 0.44 1.15
+28 [1.] 0.53 1.15
+29 [0.] 0.38 1.15
+30 [1.] 0.24 1.15
+31 [1.] 0.6 1.15
+32 [1.] 0.25 1.15
+33 [1.] 0.18 1.15
+34 [1.] 0.47 1.15
+35 [1.] 0.25 1.15
+36 [1.] 0.13 1.15
+37 [1.] 0.38 1.15
+38 [0.] 0.21 1.15
+39 [0.] 0.21 1.15
+40 [0.] 0.28 1.15
+41 [1.] 0.51 1.15
+42 [1.] 0.67 1.15
+43 [1.] 0.2 1.15
+44 [1.] 0.67 1.15
+45 [1.] 0.31 1.15
+46 [1.] 0.31 1.15
+47 [1.] 0.25 1.15
+48 [1.] 0.25 1.15
+49 [1.] 0.29 1.15
+50 [1.] 0.28 1.15
+51 [1.] 0.31 1.15
+52 [1.] 0.41 1.15
+53 [1.] 0.35 1.15
+54 [0.] 0.19 1.15
+55 [1.] 0.43 1.15
+56 [1.] 0.25 1.15
+57 [1.] 0.52 1.15
+58 [1.] 0.61 1.15
+59 [1.] 0.49 1.15
+60 [1.] 0.39 1.15
+61 [0.] 0.31 1.15
+62 [0.] 0.42 1.15
+63 [0.] 0.47 1.15
+64 [0.] 0.57 1.15
+65 [0.] 0.21 1.15
+66 [1.] 0.37 1.15
+67 [1.] 0.58 1.15
+68 [1.] 0.19 1.15
+69 [1.] 0.34 1.15
+70 [1.] 0.18 1.15
+71 [1.] 0.26 1.15
+72 [1.] 0.3 1.15
+73 [1.] 0.3 1.15
+74 [1.] 0.51 1.15
+75 [1.] 0.51 1.15
+76 [1.] 0.22 1.15
+77 [1.] 1.05 1.15
+78 [1.] 0.36 1.15
+79 [1.] 0.81 1.15
+80 [1.] 0.38 1.15
+81 [1.] 0.56 1.15
+82 [1.] 0.55 1.15
+83 [1.] 0.3 1.15
+84 [1.] 0.44 1.15
+85 [1.] 0.37 1.15
+86 [1.] 0.43 1.15
+87 [1.] 0.39 1.15
+88 [1.] 0.27 1.15
+89 [1.] 0.74 1.15
+90 [1.] 0.44 1.15
+91 [1.] 0.2 1.15
+92 [1.] 0.45 1.15
+93 [1.] 0.24 1.15
+94 [1.] 0.25 1.15
+95 [1.] 0.41 1.15
+96 [1.] 0.43 1.15
+97 [1.] 0.35 1.15
+98 [1.] 0.41 1.15
+99 [1.] 0.42 1.15
+100 [1.] 0.5 1.15
+101 [1.] 0.42 1.15
+102 [1.] 0.47 1.15
+103 [1.] 0.49 1.15
+104 [1.] 0.29 1.15
+105 [1.] 0.14 1.15
+106 [1.] 0.16 1.15
+107 [1.] 0.13 1.15
+108 [1.] 0.73 1.15
+Обнаружено 99.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.0077 | 1 | 99% |
+
+### 11) Сделать выводы о требованиях к:
+- данным для обучения,
+- архитектуре автокодировщика,
+- количеству эпох обучения,
+- ошибке MSE_stop, приемлемой для останова обучения,
+- ошибке реконструкции обучающей выборки (порогу обнаружения
+аномалий)
+
+для качественного обнаружения аномалий в случае, когда размерность
+пространства признаков высока.
+
+1) Данные для обучения должны быть без аномалий, чтобы автокодировщик смог рассчитать верное пороговое значение
+2) Архитектура автокодировщика должна постепенно сужатся к бутылочному горлышку,а затем постепенно возвращатся к исходным выходным размерам, кол-во скрытых слоев 7-11.
+3) В рамках данного набора данных оптимальное кол-во эпох 100000 с patience 4000 эпох
+4) Оптимальная ошибка MSE-stop в районе 0.001, желательно не меньше для предотвращения переобучения
+5) Значение порога 1 - идеальное