diff --git a/labworks/LW2.md b/labworks/LW2.md deleted file mode 100644 index 7e797d5..0000000 --- a/labworks/LW2.md +++ /dev/null @@ -1,221 +0,0 @@ -**ЛАБОРАТОРНАЯ РАБОТА №2**«Обнаружение аномалий»** -А-02-22 бригада №8 Левшенко Д.И., Новиков Д. М., Шестов Д.Н - -Задание1: - -**1)В среде GoogleColabсоздать новый блокнот(notebook).Импортировать необходимые для работы библиотеки и модули.** -```py -import os -os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2') - -!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/lab02_lib.py - -!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/name_train.txt -!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/name_test.txt - -import numpy as np -import lab02_lib as lib -``` -**2)Сгенерировать индивидуальный набор двумерных данныхв пространстве признаковс координатами центра (k, k), где k–номер бригады.Вывести полученныеданные на рисуноки в консоль.** -```py -data = lib.datagen(8, 8, 1000, 2) -``` - -**3)Создать и обучить автокодировщик AE1 простой архитектуры, выбрав небольшое количество эпох обучения.** -```py -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, на которой обучение завершилось. Построить график ошибки реконструкции обучающей выборки. Зафиксировать порог ошибки реконструкции –порог обнаружения аномалий.** -```py -lib.ire_plot('training', IRE1, IREth1, 'AE1') -``` -**5)Создать и обучить второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения.** -```py -ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', 3000, True, patience) -``` -**6)Зафиксировать ошибку MSE, на которой обучение завершилось. Построить график ошибки реконструкции обучающей выборки. Зафиксировать второй порог ошибки реконструкции –порог обнаружения аномалий.** -```py -lib.ire_plot('training', IRE2, IREth2, 'AE2') -``` -**7)Рассчитать характеристики качества обучения EDCA для AE1 и AE2. Визуализировать и сравнить области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Сделать вывод о пригодности AE1 и AE2 для качественного обнаружения аномалий.** -```py -numb_square= 20 -xx,yy,Z1=lib.square_calc(numb_square,data,ae1_trained,IREth1,'1',True) - -Оценка качества AE1 -IDEAL = 0. Excess: 14.263157894736842 -IDEAL = 0. Deficit: 0.0 -IDEAL = 1. Coating: 1.0 -summa: 1.0 -IDEAL = 1. Extrapolation precision (Approx): 0.06551724137931035 - -numb_square = 20 -xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True) - -Оценка качества AE2 -IDEAL = 0. Excess: 3.3157894736842106 -IDEAL = 0. Deficit: 0.0 -IDEAL = 1. Coating: 1.0 -summa: 1.0 -IDEAL = 1. Extrapolation precision (Approx): 0.23170731707317074 - -lib.plot2in1(data,xx,yy,Z1,Z2) -``` -**9)Изучить сохраненный набор данных и пространство признаков. Создать тестовую выборку, состоящую, как минимум, из 4ёх элементов, не входящих в обучающую выборку. Элементы должны быть такими, чтобы AE1 распознавал их как норму, а AE2 детектировал как аномалии.** -```py -data_test= np.loadtxt('data_test.txt', dtype=float) -``` - -**10)Применить обученные автокодировщики AE1 и AE2 к тестовым данными вывести значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога на график и в консоль.** -```py -predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1) -lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1) -lib.ire_plot('test', ire1, IREth1, 'AE1') -``` - -```py -predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2) -lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2) -lib.ire_plot('test', ire2, IREth2, 'AE2') - - -i Labels IRE IREth -0 [1.] [2.34] 0.47 -1 [1.] [3.46] 0.47 -2 [1.] [2.08] 0.47 -3 [1.] [2.68] 0.47 -4 [1.] [4.99] 0.47 -Обнаружено 5.0 аномалий -``` -**11)Визуализировать элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2.** - -```py -lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test) -``` -**12)Результаты исследования занести в таблицу:** - -**Табл. 1 Результаты задания** - -| | | | | | | | | | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | -| | **Количество скрытых слоев** | **Количество нейронов в скрытых слоях** | **Количество эпох обучения** | **Ошибка MSE_stop** | **Порог ошибки реконструкции** | **Значение показателя Excess** | **Значение показателя Approx** | **Количество обнаруженных аномалий** | -| **АЕ1** | **1** | **1** | **1000** | **38.04** | **8.5** | **14.26** | **0.07** | **0** | -| **АЕ2** | **5** | **3 2 1 2 3** | **3000** | **0.07** | **0.47** | **3.32** | **0.23** | **5** | - -**13)Сделать выводы** - -Для нормального обнаружения аномалий: -\-архитектура автокодировщика не должна быть простой, -\-необходимо большое количество эпох обучения, -\-ошибка MSE_stop должна быть достаточно мала(<<1), -\-порог обнаружения аномалий не должен быть завышен по сравнению с -большинством значений ошибки реконструкции обучающей выборки, -\-характеристики качества обучения EDCA должны быть близки к идеальным значениям показателей Excess = 0, Deficit = 0, Coating = 1, Approx = 1. - - -**Задание2** - -**1)Изучить описание своего набора реальных данных, что он из себя представляет;** - -Исходный набор данных Breast Cancer Wisconsin из репозитория машинного обучения UCI представляет собой набор данных для классификации, в котором записываются измерения для случаев рака молочной железы. Есть два класса, доброкачественные и злокачественные. Злокачественный класс этого набора данных уменьшен до 21 точки, которые считаются аномалиями, в то время как точки в доброкачественном классе считаются нормой. - -| | | | | -| --- | --- | --- | --- | -| Количество признаков | Количество примеров | Количесвто нормальных примеров | Количество аномальных примеров | -| 30 | 378 | 357 | 21 | - -**2)Загрузить многомерную обучающую выборку реальных данных WBC_train.txt.** -```py -test = np.loadtxt('WBC_test.txt', dtype=float) -train = np.loadtxt('WBC_train.txt', dtype=float) -``` -**3)Вывести полученные данные и их размерность в консоли.** -```py -print('Исходные данные:') -print(train) -print('Размерность данных:') -print(train.shape) -Исходные данные: -[[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]] -Размерность данных: -(357, 30) -``` -**4)Создать и обучить автокодировщик с подходящей для данных архитектурой.** **Выбрать необходимое количество эпох обучения.** -```py -patience=2000 -ae3_trained, IRE3, IREth3 = lib.create_fit_save_ae(train,'out/AE3.h5','out/AE3_ire_th.txt', 100000, False, patience, early_stopping_delta = 0.00001, early_stopping_value = 0.0001) -``` -**5)Зафиксировать ошибку MSE, на которой обучение завершилось. Построить график ошибки реконструкции обучающей выборки. Зафиксировать порог ошибки реконструкции –порог обнаружения аномалий.** -```py -Epoch 31000/100000 - - loss: 0.0005 -12/12 ━━━━━━━━━━━━━━━━━━━━ 0s 14ms/step - -lib.ire_plot('training', IRE3, IREth3, 'AE3') -``` -**7)Изучить и загрузить тестовую выборку WBC_test.txt.** -```py -test = np.loadtxt('WBC_test.txt', dtype=float) -``` -**8)Подать тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Вывести графикошибки реконструкции элементов тестовой выборки относительно порога.** -```py -predicted_labels3, ire3 = lib.predict_ae(ae3_trained, test, IREth3) -lib.anomaly_detection_ae(predicted_labels3, ire3, IREth3) -lib.ire_plot('test', ire3, IREth3, 'AE3') -print(f"Исходный порог IREth4: {IREth3}") - -1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - -i Labels IRE IREth -0 [0.] [0.21] 0.24 -1 [1.] [0.94] 0.24 -2 [1.] [0.28] 0.24 -3 [1.] [0.64] 0.24 -4 [1.] [0.5] 0.24 -5 [1.] [0.92] 0.24 -6 [1.] [0.43] 0.24 -7 [1.] [1.1] 0.24 -8 [1.] [0.31] 0.24 -9 [1.] [0.46] 0.24 -10 [1.] [0.42] 0.24 -11 [1.] [0.81] 0.24 -12 [0.] [0.21] 0.24 -13 [1.] [0.47] 0.24 -14 [0.] [0.23] 0.24 -15 [1.] [0.77] 0.24 -16 [1.] [0.39] 0.24 -17 [0.] [0.21] 0.24 -18 [1.] [1.4] 0.24 -19 [1.] [1.05] 0.24 -20 [1.] [0.3] 0.24 -Обнаружено 17.0 аномалий - -Исходный порог IREth4: 0.24 -``` -**10)Параметры наилучшего автокодировщика и результаты обнаружения аномалий занести в таблицу:** - -| | | | | | | -| --- | --- | --- | --- | --- | --- | -| Количество скрытых слоев | Количестов нейронов | Количество эпох обучения | Ошибка MSE_stop | Порог ошибки реконструкции | % обнаруженных аномалий | -| 11 | 31 25 21 17 13 7 13 17 21 25 31 | 7000 | 0.0006 | 0.33 | 70 | - -**11)Сделать выводы:** - -•архитектура автокодировщика должна включать в себя много слоев, -•количество эпох обучения должно быть достаточно большим (порядка десятков тысяч), -•ошибка MSE_stop, приемлемая для останова обучения, должна иметь достаточно малое значение, -•порог обнаружения аномалий не должен быть завышен по сравнению с большинством значений ошибки реконструкции обучающей выборки. \ No newline at end of file