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) +``` + +![o](images/1.png) + +```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') +``` + +![o](images/2.png) + +### 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') +``` + +![o](images/3.png) + +### 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) +``` +![o](images/4.png) + +```output +amount: 21 +amount_ae: 301 +``` + +![o](images/5.png) + +![o](images/6.png) + +```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) +``` + +![o](images/7.png) + +```output +amount: 21 +amount_ae: 36 +``` + +![o](images/8.png) + +![o](images/9.png) + +```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) +``` + +![o](images/10.png) + +### 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 +Аномалий не обнаружено +``` + +![o](images/11.png) + +```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 аномалий +``` + +![o](images/12.png) + +### 11) Визуализировали элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2. + +```python +lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test) +``` + +![o](images/13.png) + +### 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') +``` + +![o](images/14.png) + +### 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') +``` + +![o](images/15.png) + +### 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') +``` + +![o](images/16.png) + +```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') +``` + +![o](images/17.png) + +```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 - идеальное