From aa519fa4314e4fc677bf9e3032c1d824324ac697 Mon Sep 17 00:00:00 2001 From: MachulinaDV Date: Sun, 19 Oct 2025 21:57:18 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB(?= =?UTF-8?q?=D0=B0)=20=D0=BD=D0=B0=20'labworks/LW2/IS=5FLR2.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labworks/LW2/IS_LR2.md | 1927 ++++++++++++++++++++-------------------- 1 file changed, 975 insertions(+), 952 deletions(-) diff --git a/labworks/LW2/IS_LR2.md b/labworks/LW2/IS_LR2.md index 58c3124..3a924e8 100644 --- a/labworks/LW2/IS_LR2.md +++ b/labworks/LW2/IS_LR2.md @@ -1,953 +1,976 @@ -# Отчёт по лабораторной работе №2 -## по теме: "Обнаружение аномалий" - ---- -Выполнили: Бригада 2, Мачулина Д.В., Бирюкова А.С., А-02-22 - -Данные - WBC - ---- - -## Задание 1 -### 1. Создание блокнота и настройка среды - -```python -from google.colab import drive -drive.mount('/content/drive') -import os -os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2') -import numpy as np -import lab02_lib as lib -``` - -```python -work_dir = '/content/drive/MyDrive/Colab Notebooks/is_lab2' -os.makedirs(work_dir, exist_ok=True) -os.chdir(work_dir) -os.makedirs('out', exist_ok=True) -dataset_name = 'WBC' -base_url = "http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/" -!wget -N {base_url}lab02_lib.py -!wget -N {base_url}data/{dataset_name}_train.txt -!wget -N {base_url}data/{dataset_name}_test.txt -``` ---- -### 2. Генерация индивидуального набора двумерных данных - -```python -data = lib.datagen(2, 2, 1000, 2) - -print('Исходные данные:') -print(data) -print('Размерность данных:') -print(data.shape) -``` - -(картинка) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Исходные данные
1.9863081 1.86491133
2.04641244 1.8589354
1.896885721.89978633
...
1.993108372.06214288
1.946951151.99630611
1.791293541.91688919
- -Размерность данных: (1000, 2) - ---- -### 3. Создание и обучение автокодировщика АЕ1 простой архитектуры -```python -patience = 300 -ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt', -1000, True, patience) -``` -Параметры: (1 скрытый слой, 1 нейрон) - ---- -### 4. Построение графика ошибки реконструкции -Ошибка MSE_AE1 = 0.1370 -```python -lib.ire_plot('training', IRE1, IREth1, 'AE1') -``` - -(картинка) - -Порог ошибки реконструкции = 0.81 - ---- -### 5. Создание и обучение автокодировщика АЕ2 усложнённой архитектуры -```python -ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', -3000, True, patience) -``` -Параметры: (5 скрытых слоёв; 3 2 1 2 3) - ---- -### 6. Построение графика ошибки реконструкции -Ошибка MSE_AE2 = 0.0094 -```python -lib.ire_plot('training', IRE2, IREth2, 'AE2') -``` - -(картинка) - -Порог ошибки реконструкции = 0.38 - ---- - ### 7. Расчёт характеристик качества обучения EDCA. Визуализация и сравнение -**АЕ1** -```python -numb_square = 20 -xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True) -``` - -(картинки картинки) - -amount: 19 - -amount_ae: 104 - - -**Оценка качества AE1** - -* IDEAL = 0. Excess: 4.473684210526316 - -* IDEAL = 0. Deficit: 0.0 - -* IDEAL = 1. Coating: 1.0 - -* summa: 1.0 - -* IDEAL = 1. Extrapolation precision (Approx): 0.18269230769230768 - - -**АЕ2** -```python -numb_square = 20 -xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True) -``` -(картинки) -amount: 19 - -amount_ae: 31 - -**Оценка качества АЕ2** -* IDEAL = 0. Excess: 0.631578947368421 -* IDEAL = 0. Deficit: 0.0 -* IDEAL = 1. Coating: 1.0 -* summa: 1.0 -* IDEAL = 1. Extrapolation precision (Approx): 0.612903225806 - - -**Сравнение** -```python -lib.plot2in1(data, xx, yy, Z1, Z2) -``` -(картинки) - ---- -### 8. Редактирование автокодировщика АЕ2 -Полученная аппроксимация автокодировщиком АЕ2 - удовлетворительна. - ---- -### 9. Создание тестовой выборки и применение к ней автокодировщиков -```python -with open('data_test.txt', 'w') as file: - file.write("1.5327 1.5591\n") - file.write("1.4373 1.4932\n") - file.write("1.1231 1.3212\n") - file.write("1.3211 1.1231\n") -data_test = np.loadtxt('data_test.txt', dtype=float) -print(data_test) -``` - -**АЕ1** -```python -predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1) -``` - -```python -lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1) -lib.ire_plot('test', ire1, IREth1, 'AE1') -``` - -Аномалий не обнаружено (картинка) - - -**АЕ2** -```python -predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2) -``` - -```python -lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2) -lib.ire_plot('test', ire2, IREth2, 'AE2') -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ilabelsIREIREth
0[1.][0.57]0.38
1[1.][0.68]0.38
2[1.][1.03]0.38
3[1.][1.04]0.38
- -Обнаружено 4.0 аномалий - -(картинка) - -### 10. Визуализация элементов обучающей и тестовой выборки в областях пространства признаков -```python -lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test) -``` -(картинка) - -### 11. Результаты - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Количество скрытых слоёвКоличество нейронов в скрытых слояхКоличество эпох обученияОшибка MSE_stopПорог ошибки реконструкцииЗначение показателя ExcessЗначение показателя ApproxКоличество обнаруженных аномалий
АЕ11110000.13700.814.4730.1820
АЕ253 2 1 2 330000.00940.380.6310.6124
- - -## Задание 2 -### 1. Изучение набора реальных данных -Исходный набор данных Breast Cancer Wisconsin представляет собой набор данных для -классификации, в котором записываются измерения для случаев рака молочной железы. -Есть два класса, доброкачественные и злокачественные. Злокачественный класс этого -набора данных уменьшен до 21 точки, которые считаются аномалиями, в то время как -точки в доброкачественном классе считаются нормой - - - - - - - - - - - - - - - - - - - - -
Количество признаковКоличество примеровКоличество нормальных примеровКоличество аномальных примеров
АЕ13037835721
- - -### 2. Загрузка обучающей и тестовой выборок -```python -train = np.loadtxt('WBC_train.txt', dtype=float) -print('train:\n', train) -print('train.shape:', np.shape(train)) -``` -train: - - [[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]] - -train.shape: (357, 30) - -```python -test = np.loadtxt('WBC_test.txt', dtype=float) -print('\n test:\n', test) -print('test.shape:', np.shape(test)) -``` - - test: - - [[0.18784609 0.3936422 0.19425057 0.09654295 0.632572 0.31415251 - 0.24461106 0.28175944 0.42171717 0.3946925 0.04530147 0.23598833 - 0.05018141 0.01899148 0.21589557 0.11557064 0.0655303 0.19643872 - 0.08003602 0.07411246 0.17467094 0.62153518 0.18332586 0.08081007 - 0.79066235 0.23528442 0.32132588 0.48934708 0.2757737 0.26905418] - - [0.71129727 0.41224214 0.71460162 0.56776246 0.48451747 0.53990553 - 0.57357076 0.74602386 0.38585859 0.24094356 0.3246424 0.07507514 - 0.32059558 0.23047901 0.0769963 0.19495599 0.09030303 0.27865126 - 0.10269038 0.10023078 0.70188545 0.36727079 0.72010558 0.50181872 - 0.38453411 0.35044775 0.3798722 0.83573883 0.23181549 0.20136429] - - ... - - [0.52103744 0.0226581 0.54598853 0.36373277 0.59375282 0.7920373 - 0.70313964 0.73111332 0.68636364 0.60551811 0.35614702 0.12046941 - 0.3690336 0.27381126 0.15929565 0.35139844 0.13568182 0.30062512 - 0.31164518 0.18304244 0.62077552 0.14152452 0.66831017 0.45069799 - 0.60113584 0.61929156 0.56861022 0.91202749 0.59846245 0.41886396] - - [0.32367836 0.49983091 0.33542948 0.1918982 0.57389185 0.45616833 - 0.31794752 0.33593439 0.61363636 0.47198821 0.13166757 0.25808876 - 0.10446214 0.06023183 0.27082979 0.27268904 0.08777778 0.30611858 - 0.23158102 0.21074997 0.28744219 0.5575693 0.27685642 0.14815179 - 0.71471967 0.35830641 0.27004792 0.52268041 0.41119653 0.41492851]] - -test.shape: (21, 30) - - ---- -### 3. Создание и обучение автокодировщика -**V1** -```python -from time import time - -patience = 6500 -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', -60000, False, patience, early_stopping_delta = 0.001) -print("Время на обучение: ", time() - start) -``` -Параметры: 11 скрытых слоёв; 53 47 43 35 27 13 27 35 43 47 53) -```python -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 -lib.anomaly_detection_ae(predicted_labels3_v1, IRE3_v1, IREth3_v1) -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ilabelsIREIREth
0[0.][0.09]0.67
1[1.][0.14]0.67
2[0.][0.14]0.67
3[0.][0.21]0.67
4[1.][0.11]0.67
5[1.][0.18]0.67
6[1.][0.13]0.67
7[1.][0.14]0.67
8[1.][0.11]0.67
9[1.][0.1]0.67
10[1.][0.14]0.67
11[1.][0.15]0.67
12[1.][0.19]0.67
13[1.][0.15]0.67
14[1.][0.19]0.67
15[1.][0.21]0.67
16[1.][0.09]0.67
17[1.][0.13]0.67
18[1.][0.55]0.67
19[1.][0.16]0.67
20[1.][1.38]0.67
- -Обнаружено 6.0 аномалий - - -**V2** -```python -from time import time -patience = 5000 -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', -50000, False, patience, early_stopping_delta = 0.001) -print("Время на обучение: ", time() - start) -``` -Параметры: 9 скрытых слоёв; 37 29 21 15 7 15 21 29 37) -```python -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 -lib.anomaly_detection_ae(predicted_labels3_v2, IRE3_v2, IREth3_v2) -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ilabelsIREIREth
0[0.][0.2]0.8
1[1.][0.22]0.8
2[0.][0.16]0.8
3[0.][0.3]0.8
4[0.][0.13]0.8
5[0.][0.2]0.8
6[0.][0.17]0.8
7[1.][0.15]0.8
8[0.][0.14]0.8
9[0.][0.15]0.8
10[0.][0.17]0.8
11[1.][0.14]0.8
12[0.][0.22]0.8
13[0.][0.25]0.8
14[0.][0.24]0.8
15[0.][0.29]0.8
16[0.][0.09]0.8
17[0.][0.21]0.8
18[1.][0.69]0.8
19[1.][0.16]0.8
20[0.][0.56]0.8
- -Обнаружено 5.0 аномалий - - -**V3** -```python -from time import time -patience = 5500 -start = time() -ae3_v3_trained, IRE3_v3, IREth3_v3 = lib.create_fit_save_ae(train,'out/AE3_V3.h5','out/AE3_v3_ire_th.txt', -50000, False, patience, early_stopping_delta = 0.0001) -print("Время на обучение: ", time() - start) -``` -Параметры: 9 скрытых слоёв; 30 25 20 15 7 15 20 25 30) - -```python -predicted_labels3_v3, ire3_v3 = lib.predict_ae(ae3_v3_trained, test, IREth3_v3) -``` - -```python -lib.ire_plot('test', ire3_v3, IREth3_v3, 'AE3_v3') -``` - -```python -lib.anomaly_detection_ae(predicted_labels3_v3, IRE3_v3, IREth3_v3) -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ilabelsIREIREth
0[0.][0.08]0.27
1[1.][0.11]0.27
2[0.][0.13]0.27
3[1.][0.17]0.27
4[.][0.13]0.27
5[1.][0.18]0.27
6[1.][0.11]0.27
7[1.][0.12]0.27
8[1.][0.11]0.27
9[1.][0.14]0.27
10[1.][0.17]0.27
11[1.][0.12]0.27
12[0.][0.11]0.27
13[1.][0.09]0.27
14[0.][0.23]0.27
15[1.][0.12]0.27
16[1.][0.1]0.27
17[0.][0.14]0.27
18[1.][0.05]0.27
19[1.][0.12]0.27
20[0.][0.1]0.27
- -Обнаружено 15.0 аномалий - -### 4. Результаты -Лучшим автокодировщиком среди представленных, является AE3_V3, т.к. у него точность обнаружения аномалий наиболее высокая - 71.43% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dataset NameКоличество скрытых слоёвКоличество нейронов в скрытых слояхКоличество эпох обученияОшибка MSE_stopПорог ошибки реконструкцииПроцент обнаруженных аномалий
WBC1153 47 43 35 27 13 27 35 43 47 5350 0000.0010.6728.57
WBC937 29 21 15 7 15 21 29 3750 0000.00070.823.8
WBC930 25 20 15 7 15 20 25 3050 0000.00050.2771.43
- - -### ВЫВОДЫ -1) Так как мы работаем с автокодировщиком, данные для его обучения должны быть без аномалий: автокодировщик должен суметь рассчитать верное пороговое значение. -2) Архитектура автокодировщика представляет из себя многослойную архитектуру с сужением в середине, а также совпадающее количество входов и выходов - -В первой части работы: - -Оптимальным количеством скрытых слоев для нашего автокодировщика будет 5. Лучшие результаты показываются при количестве эпох - 3000 с patience в 100 эпох -1) Оптимальная ошибка MSE-stop должна быть в районе 0.01, в идеале не меньше - для предотвращения переобучения. В этой работе она равна 0.0094 -2) Значение порога ошибки реконструкции приблизительно равно 0.38 -3) Значение Excess равно 0.631 (стремится к 0), значение Approx равно 0.612 (стремится к 1), количество определенных аномалий - 4, - эти результаты лучше, чем при более простой архитектуре - -Во второй части работы: -Сравнив разные архитектуры при работе с выборкой WBC, делаем выводы,что при неизменном количестве эпох наилучший результат показывает автокодировщик с наименьшими ошибкой MSE, порогом ошибки реконструкции и колчиеством нейронов в скрытом слое. Причинами таких результатов являются: -1) При слишком высоком пороге ошибки реконструкции часть ошибок "ускользает" от автокодировщика, он не распознаёт аномалии с малой ошибкой - модель стала "консервативной" -2) При большой ошибке MSE - модель недостаточно хорошо выучила нормальные данные +# Отчёт по лабораторной работе №2 +## по теме: "Обнаружение аномалий" + +--- +Выполнили: Бригада 2, Мачулина Д.В., Бирюкова А.С., А-02-22 + +Данные - WBC + +--- + +## Задание 1 +### 1. Создание блокнота и настройка среды + +```python +from google.colab import drive +drive.mount('/content/drive') +import os +os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2') +import numpy as np +import lab02_lib as lib +``` + +```python +work_dir = '/content/drive/MyDrive/Colab Notebooks/is_lab2' +os.makedirs(work_dir, exist_ok=True) +os.chdir(work_dir) +os.makedirs('out', exist_ok=True) +dataset_name = 'WBC' +base_url = "http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/" +!wget -N {base_url}lab02_lib.py +!wget -N {base_url}data/{dataset_name}_train.txt +!wget -N {base_url}data/{dataset_name}_test.txt +``` +--- +### 2. Генерация индивидуального набора двумерных данных + +```python +data = lib.datagen(2, 2, 1000, 2) + +print('Исходные данные:') +print(data) +print('Размерность данных:') +print(data.shape) +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/train_set.png) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Исходные данные
1.9863081 1.86491133
2.04641244 1.8589354
1.896885721.89978633
...
1.993108372.06214288
1.946951151.99630611
1.791293541.91688919
+ +Размерность данных: (1000, 2) + +--- +### 3. Создание и обучение автокодировщика АЕ1 простой архитектуры +```python +patience = 300 +ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt', +1000, True, patience) +``` +Параметры: (1 скрытый слой, 1 нейрон) + +--- +### 4. Построение графика ошибки реконструкции +Ошибка MSE_AE1 = 0.1370 +```python +lib.ire_plot('training', IRE1, IREth1, 'AE1') +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_trainingAE1.png) + + +Порог ошибки реконструкции = 0.81 + +--- +### 5. Создание и обучение автокодировщика АЕ2 усложнённой архитектуры +```python +ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', +3000, True, patience) +``` +Параметры: (5 скрытых слоёв; 3 2 1 2 3) + +--- +### 6. Построение графика ошибки реконструкции +Ошибка MSE_AE2 = 0.0094 +```python +lib.ire_plot('training', IRE2, IREth2, 'AE2') +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_trainingAE2.png) + +Порог ошибки реконструкции = 0.38 + +--- + ### 7. Расчёт характеристик качества обучения EDCA. Визуализация и сравнение +**АЕ1** +```python +numb_square = 20 +xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True) +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/AE1_train_def.png) + +amount: 19 + +amount_ae: 104 + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/XtXd_1.png) + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/XtXd_1_metrics.png) + +**Оценка качества AE1** + +* IDEAL = 0. Excess: 4.473684210526316 + +* IDEAL = 0. Deficit: 0.0 + +* IDEAL = 1. Coating: 1.0 + +* summa: 1.0 + +* IDEAL = 1. Extrapolation precision (Approx): 0.18269230769230768 + + +**АЕ2** +```python +numb_square = 20 +xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True) +``` +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/AE2_train_def.png) + +amount: 19 + +amount_ae: 31 + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/XtXd_2.png) + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/XtXd_2_metrics.png) + + +**Оценка качества АЕ2** +* IDEAL = 0. Excess: 0.631578947368421 +* IDEAL = 0. Deficit: 0.0 +* IDEAL = 1. Coating: 1.0 +* summa: 1.0 +* IDEAL = 1. Extrapolation precision (Approx): 0.612903225806 + + +**Сравнение** +```python +lib.plot2in1(data, xx, yy, Z1, Z2) +``` +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/AE1_AE2_train_def.png) + + +--- +### 8. Редактирование автокодировщика АЕ2 +Полученная аппроксимация автокодировщиком АЕ2 - удовлетворительна. + +--- +### 9. Создание тестовой выборки и применение к ней автокодировщиков +```python +with open('data_test.txt', 'w') as file: + file.write("1.5327 1.5591\n") + file.write("1.4373 1.4932\n") + file.write("1.1231 1.3212\n") + file.write("1.3211 1.1231\n") +data_test = np.loadtxt('data_test.txt', dtype=float) +print(data_test) +``` + +**АЕ1** +```python +predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1) +``` + +```python +lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1) +lib.ire_plot('test', ire1, IREth1, 'AE1') +``` + +Аномалий не обнаружено + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_testAE1.png) + + +**АЕ2** +```python +predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2) +``` + +```python +lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2) +lib.ire_plot('test', ire2, IREth2, 'AE2') +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ilabelsIREIREth
0[1.][0.57]0.38
1[1.][0.68]0.38
2[1.][1.03]0.38
3[1.][1.04]0.38
+ +Обнаружено 4.0 аномалий + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_testAE2.png) + + +### 10. Визуализация элементов обучающей и тестовой выборки в областях пространства признаков +```python +lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test) +``` +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/AE1_AE2_train_def_anomalies.png) + + +### 11. Результаты + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Количество скрытых слоёвКоличество нейронов в скрытых слояхКоличество эпох обученияОшибка MSE_stopПорог ошибки реконструкцииЗначение показателя ExcessЗначение показателя ApproxКоличество обнаруженных аномалий
АЕ11110000.13700.814.4730.1820
АЕ253 2 1 2 330000.00940.380.6310.6124
+ + +## Задание 2 +### 1. Изучение набора реальных данных +Исходный набор данных Breast Cancer Wisconsin представляет собой набор данных для +классификации, в котором записываются измерения для случаев рака молочной железы. +Есть два класса, доброкачественные и злокачественные. Злокачественный класс этого +набора данных уменьшен до 21 точки, которые считаются аномалиями, в то время как +точки в доброкачественном классе считаются нормой + + + + + + + + + + + + + + + + + + + + +
Количество признаковКоличество примеровКоличество нормальных примеровКоличество аномальных примеров
АЕ13037835721
+ + +### 2. Загрузка обучающей и тестовой выборок +```python +train = np.loadtxt('WBC_train.txt', dtype=float) +print('train:\n', train) +print('train.shape:', np.shape(train)) +``` +train: + + [[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]] + +train.shape: (357, 30) + +```python +test = np.loadtxt('WBC_test.txt', dtype=float) +print('\n test:\n', test) +print('test.shape:', np.shape(test)) +``` + + test: + + [[0.18784609 0.3936422 0.19425057 0.09654295 0.632572 0.31415251 + 0.24461106 0.28175944 0.42171717 0.3946925 0.04530147 0.23598833 + 0.05018141 0.01899148 0.21589557 0.11557064 0.0655303 0.19643872 + 0.08003602 0.07411246 0.17467094 0.62153518 0.18332586 0.08081007 + 0.79066235 0.23528442 0.32132588 0.48934708 0.2757737 0.26905418] + + [0.71129727 0.41224214 0.71460162 0.56776246 0.48451747 0.53990553 + 0.57357076 0.74602386 0.38585859 0.24094356 0.3246424 0.07507514 + 0.32059558 0.23047901 0.0769963 0.19495599 0.09030303 0.27865126 + 0.10269038 0.10023078 0.70188545 0.36727079 0.72010558 0.50181872 + 0.38453411 0.35044775 0.3798722 0.83573883 0.23181549 0.20136429] + + ... + + [0.52103744 0.0226581 0.54598853 0.36373277 0.59375282 0.7920373 + 0.70313964 0.73111332 0.68636364 0.60551811 0.35614702 0.12046941 + 0.3690336 0.27381126 0.15929565 0.35139844 0.13568182 0.30062512 + 0.31164518 0.18304244 0.62077552 0.14152452 0.66831017 0.45069799 + 0.60113584 0.61929156 0.56861022 0.91202749 0.59846245 0.41886396] + + [0.32367836 0.49983091 0.33542948 0.1918982 0.57389185 0.45616833 + 0.31794752 0.33593439 0.61363636 0.47198821 0.13166757 0.25808876 + 0.10446214 0.06023183 0.27082979 0.27268904 0.08777778 0.30611858 + 0.23158102 0.21074997 0.28744219 0.5575693 0.27685642 0.14815179 + 0.71471967 0.35830641 0.27004792 0.52268041 0.41119653 0.41492851]] + +test.shape: (21, 30) + + +--- +### 3. Создание и обучение автокодировщика +**V1** +```python +from time import time + +patience = 6500 +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', +60000, False, patience, early_stopping_delta = 0.001) +print("Время на обучение: ", time() - start) +``` +Параметры: 11 скрытых слоёв; 53 47 43 35 27 13 27 35 43 47 53) +```python +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') +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_testAE3_v1.png) + + +```python +lib.anomaly_detection_ae(predicted_labels3_v1, IRE3_v1, IREth3_v1) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ilabelsIREIREth
0[0.][0.09]0.67
1[1.][0.14]0.67
2[0.][0.14]0.67
3[0.][0.21]0.67
4[1.][0.11]0.67
5[1.][0.18]0.67
6[1.][0.13]0.67
7[1.][0.14]0.67
8[1.][0.11]0.67
9[1.][0.1]0.67
10[1.][0.14]0.67
11[1.][0.15]0.67
12[1.][0.19]0.67
13[1.][0.15]0.67
14[1.][0.19]0.67
15[1.][0.21]0.67
16[1.][0.09]0.67
17[1.][0.13]0.67
18[1.][0.55]0.67
19[1.][0.16]0.67
20[1.][1.38]0.67
+ +Обнаружено 6.0 аномалий + + +**V2** +```python +from time import time +patience = 5000 +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', +50000, False, patience, early_stopping_delta = 0.001) +print("Время на обучение: ", time() - start) +``` +Параметры: 9 скрытых слоёв; 37 29 21 15 7 15 21 29 37) +```python +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') +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_testAE3_v2.png) + + +```python +lib.anomaly_detection_ae(predicted_labels3_v2, IRE3_v2, IREth3_v2) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ilabelsIREIREth
0[0.][0.2]0.8
1[1.][0.22]0.8
2[0.][0.16]0.8
3[0.][0.3]0.8
4[0.][0.13]0.8
5[0.][0.2]0.8
6[0.][0.17]0.8
7[1.][0.15]0.8
8[0.][0.14]0.8
9[0.][0.15]0.8
10[0.][0.17]0.8
11[1.][0.14]0.8
12[0.][0.22]0.8
13[0.][0.25]0.8
14[0.][0.24]0.8
15[0.][0.29]0.8
16[0.][0.09]0.8
17[0.][0.21]0.8
18[1.][0.69]0.8
19[1.][0.16]0.8
20[0.][0.56]0.8
+ +Обнаружено 5.0 аномалий + + +**V3** +```python +from time import time +patience = 5500 +start = time() +ae3_v3_trained, IRE3_v3, IREth3_v3 = lib.create_fit_save_ae(train,'out/AE3_V3.h5','out/AE3_v3_ire_th.txt', +50000, False, patience, early_stopping_delta = 0.0001) +print("Время на обучение: ", time() - start) +``` +Параметры: 9 скрытых слоёв; 30 25 20 15 7 15 20 25 30) + +```python +predicted_labels3_v3, ire3_v3 = lib.predict_ae(ae3_v3_trained, test, IREth3_v3) +``` + +```python +lib.ire_plot('test', ire3_v3, IREth3_v3, 'AE3_v3') +``` + +![](http://uit.mpei.ru/git/MachulinaDV/is_dnn/raw/branch/main/labworks/LW2/IRE_testAE3_v3.png) + +```python +lib.anomaly_detection_ae(predicted_labels3_v3, IRE3_v3, IREth3_v3) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ilabelsIREIREth
0[0.][0.08]0.27
1[1.][0.11]0.27
2[0.][0.13]0.27
3[1.][0.17]0.27
4[.][0.13]0.27
5[1.][0.18]0.27
6[1.][0.11]0.27
7[1.][0.12]0.27
8[1.][0.11]0.27
9[1.][0.14]0.27
10[1.][0.17]0.27
11[1.][0.12]0.27
12[0.][0.11]0.27
13[1.][0.09]0.27
14[0.][0.23]0.27
15[1.][0.12]0.27
16[1.][0.1]0.27
17[0.][0.14]0.27
18[1.][0.05]0.27
19[1.][0.12]0.27
20[0.][0.1]0.27
+ +Обнаружено 15.0 аномалий + +### 4. Результаты +Лучшим автокодировщиком среди представленных, является AE3_V3, т.к. у него точность обнаружения аномалий наиболее высокая - 71.43% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Dataset NameКоличество скрытых слоёвКоличество нейронов в скрытых слояхКоличество эпох обученияОшибка MSE_stopПорог ошибки реконструкцииПроцент обнаруженных аномалий
WBC1153 47 43 35 27 13 27 35 43 47 5350 0000.0010.6728.57
WBC937 29 21 15 7 15 21 29 3750 0000.00070.823.8
WBC930 25 20 15 7 15 20 25 3050 0000.00050.2771.43
+ + +### ВЫВОДЫ +1) Так как мы работаем с автокодировщиком, данные для его обучения должны быть без аномалий: автокодировщик должен суметь рассчитать верное пороговое значение. +2) Архитектура автокодировщика представляет из себя многослойную архитектуру с сужением в середине, а также совпадающее количество входов и выходов + +В первой части работы: + +Оптимальным количеством скрытых слоев для нашего автокодировщика будет 5. Лучшие результаты показываются при количестве эпох - 3000 с patience в 100 эпох +1) Оптимальная ошибка MSE-stop должна быть в районе 0.01, в идеале не меньше - для предотвращения переобучения. В этой работе она равна 0.0094 +2) Значение порога ошибки реконструкции приблизительно равно 0.38 +3) Значение Excess равно 0.631 (стремится к 0), значение Approx равно 0.612 (стремится к 1), количество определенных аномалий - 4, - эти результаты лучше, чем при более простой архитектуре + +Во второй части работы: +Сравнив разные архитектуры при работе с выборкой WBC, делаем выводы,что при неизменном количестве эпох наилучший результат показывает автокодировщик с наименьшими ошибкой MSE, порогом ошибки реконструкции и колчиеством нейронов в скрытом слое. Причинами таких результатов являются: +1) При слишком высоком пороге ошибки реконструкции часть ошибок "ускользает" от автокодировщика, он не распознаёт аномалии с малой ошибкой - модель стала "консервативной" +2) При большой ошибке MSE - модель недостаточно хорошо выучила нормальные данные 3) При слишком большом количестве нейронов модель становится слишком сложной, она "зазубривает" данные, а не учится распознавать закономерности \ No newline at end of file