From a8217ec15ef71e077f679c2e0f70014d62e67fef Mon Sep 17 00:00:00 2001 From: DanRie Date: Sun, 19 Oct 2025 22:36:57 +0300 Subject: [PATCH] fix: fix images LR2 --- labworks/LW2/report.md | 110 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 107 insertions(+), 3 deletions(-) diff --git a/labworks/LW2/report.md b/labworks/LW2/report.md index f004e94..e7ecbab 100644 --- a/labworks/LW2/report.md +++ b/labworks/LW2/report.md @@ -28,7 +28,19 @@ print(data) print('Размерность данных:') print(data.shape) ``` - +![Training set](images/picture1_1.png) +``` +Исходные данные: +[[5.8619435 5.99297106] + [6.12066008 5.98527609] + [5.98643623 5.9813867 ] + ... + [5.80640873 6.16429542] + [6.01437944 6.13645626] + [6.00333385 5.99329265]] +Размерность данных: +(1000, 2) +``` ### 3) Создали и обучили автокодировщик AE1 простой архитектуры, выбрав небольшое количество эпох обучения. Зафиксировали в таблице вида табл.1 количество скрытых слоёв и нейронов в них @@ -47,6 +59,7 @@ ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ir # Построение графика ошибки реконструкции lib.ire_plot('training', IRE1, IREth1, 'AE1') ``` +![IRE for training set. AE1](images/picture1_2.png) ### 5) Создали и обучили второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения @@ -64,6 +77,7 @@ ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ir # Построение графика ошибки реконструкции lib.ire_plot('training', IRE2, IREth2, 'AE2') ``` +![IRE for training set. AE1](images/picture1_3.png) ### 7) Рассчитали характеристики качества обучения EDCA для AE1 и AE2. Визуализировали и сравнили области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Сделали вывод о пригодности AE1 и AE2 для качественного обнаружения аномалий. @@ -73,6 +87,23 @@ lib.ire_plot('training', IRE2, IREth2, 'AE2') numb_square = 20 xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True) ``` +![Autoencoder AE1. Training set. Class boundary](images/picture1_4.png) +``` +amount: 21 +amount_ae: 287 +``` +![Площади множеств Xt и Xd AE1](images/picture1_5.png) +![EDCA AE1](images/picture1_6.png) + +``` +Оценка качества AE1 +IDEAL = 0. Excess: 12.666666666666666 +IDEAL = 0. Deficit: 0.0 +IDEAL = 1. Coating: 1.0 +summa: 1.0 +IDEAL = 1. Extrapolation precision (Approx): 0.07317073170731707 +``` + ```python # построение областей покрытия и границ классов @@ -80,11 +111,28 @@ xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True) numb_square = 20 xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True) ``` +![Autoencoder AE2. Training set. Class boundary](images/picture1_7.png) +``` +amount: 21 +amount_ae: 28 +``` +![Площади множеств Xt и Xd AE1](images/picture1_8.png) +![EDCA AE1](images/picture1_9.png) + +``` +Оценка качества AE2 +IDEAL = 0. Excess: 0.3333333333333333 +IDEAL = 0. Deficit: 0.0 +IDEAL = 1. Coating: 1.0 +summa: 1.0 +IDEAL = 1. Extrapolation precision (Approx): 0.75 +``` ```python # сравнение характеристик качества обучения и областей аппроксимации lib.plot2in1(data, xx, yy, Z1, Z2) ``` +![Сравнение обучения AE1 и AE2](images/picture1_10.png) ### 8) Если автокодировщик AE2 недостаточно точно аппроксимирует область обучающих данных, то подобрать подходящие параметры автокодировщика и повторить шаги (6) – (8). @@ -97,6 +145,12 @@ lib.plot2in1(data, xx, yy, Z1, Z2) data_test = np.loadtxt('data_test.txt', dtype=float) print(data_test) ``` +``` +[[4.52855237 4.55922899] + [4.64838873 4.69473527] + [4.41414674 4.47819019] + [4.43922161 4.43454531]] +``` ### 10) Применили обученные автокодировщики AE1 и AE2 к тестовым данным и вывели значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога на график и в консоль. @@ -110,6 +164,10 @@ 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') ``` +``` +Аномалий не обнаружено +``` +![IRE fir test set. AE1](images/picture1_11.png) ```python # тестирование АE2 @@ -121,6 +179,15 @@ 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.02] 0.4 +1 [1.] [1.84] 0.4 +2 [1.] [2.16] 0.4 +3 [1.] [2.17] 0.4 +Обнаружено 4.0 аномалий +``` +![IRE fir test set. AE2](images/picture1_12.png) ### 11) Визуализировали элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2. @@ -128,6 +195,7 @@ lib.ire_plot('test', ire2, IREth2, 'AE2') # построение областей аппроксимации и точек тестового набора lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test) ``` +![Сравнение теста AE1 и AE2](images/picture1_13.png) ### 12) Результаты исследования занесли в таблицу: Табл. 1 Результаты задания №1 @@ -184,7 +252,23 @@ train = np.loadtxt('data/cardio_train.txt', dtype=float) 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) Создать и обучить автокодировщик с подходящей для данных архитектурой. Выбрать необходимое количество эпох обучения. ```python @@ -212,6 +296,7 @@ print("Время на обучение: ", time() - start) # Построение графика ошибки реконструкции lib.ire_plot('training', IRE3_v1, IREth3_v1, 'AE3_v1') ``` +![IRE for training set. AE3_v1](images/picture2_1.png) ### 6) Сделать вывод о пригодности обученного автокодировщика для качественного обнаружения аномалий. Если порог ошибки реконструкции слишком велик, то подобрать подходящие параметры автокодировщика и повторить шаги (4) – (6). @@ -238,6 +323,7 @@ print("Время на обучение: ", time() - start) # Построение графика ошибки реконструкции lib.ire_plot('training', IRE3_v2, IREth3_v2, 'AE3_v2') ``` +![IRE for training set. AE3_v2](images/picture2_2.png) ### 7) Изучить и загрузить тестовую выборку Cardio.txt. @@ -247,7 +333,23 @@ 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) Подать тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Вывести график ошибки реконструкции элементов тестовой выборки относительно порога. ```python @@ -259,6 +361,7 @@ predicted_labels3_v1, ire3_v1 = lib.predict_ae(ae3_v1_trained, test, IREth3_v1) # Построение графика ошибки реконструкции lib.ire_plot('test', ire3_v1, IREth3_v1, 'AE3_v1') ``` +![IRE for test set. AE3_v1](images/picture2_3.png) ```python # тестирование АE3 @@ -269,6 +372,7 @@ predicted_labels3_v2, ire3_v2 = lib.predict_ae(ae3_v2_trained, test, IREth3_v2) # Построение графика ошибки реконструкции lib.ire_plot('test', ire3_v2, IREth3_v2, 'AE3_v2') ``` +![IRE for test set. AE3_v2](images/picture2_4.png) ```python # тестирование АE2