Лабораторные работы / intel_lab2
.pdf# построение областей аппроксимации и точек тестового набора lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)
11) Результаты исследования занесем в таблицу:
|
|
Число |
|
|
|
|
|
|
|
|
Число |
нейронов |
Число |
Ошибка |
Порог ошибки |
Значение |
Значение |
Число |
|
M=22 |
скрытых |
в |
|
эпох |
MSE_stop |
реконструкции |
показателя |
показателя |
обнаруженных |
|
слоев |
скрытых |
обучения |
|
|
Excess |
Approx |
аномалий |
|
|
|
слоях |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AE1 |
1 |
1 |
|
12000 |
2,8649 |
2,75 |
10,727 |
0,085 |
0 |
|
|
|
|
|
|
|
|
|
|
AE2 |
5 |
3 2 1 |
2 3 |
10000 |
0,0100 |
0,36 |
0,136 |
0,917 |
5 |
|
|
|
|
|
|
|
|
|
|
12) Выводы:
Для качественного обнаружения аномалий в данных при создании и обучении автокодировщика должны выполняться следующие требования:
-архитектура автокодировщика не должна быть простой, то есть должна включать в себя несколько слоев;
-количество эпох обучения должно быть достаточно большим (порядка десятков тысяч);
-ошибка MSE_stop, приемлемая для останова обучения, должна иметь достаточно малое значение << 1;
-порог обнаружения аномалий не должен быть завышен по сравнению с большинством значений ошибки реконструкции обучающей выборки.
-характеристики качества обучения EDCA одноклассового классификатора не должны сильно отличаться от идеальных значений показателей Excess = 0, Deficit = 0, Coating = 1, Approx = 1.
11
Задание 2
1) Изучим описание набора реальных данных.
Исходный набор данных Letter Recognition Data Set https://archive.ics.uci.edu/ml/datasets/Letter+Recognition) из репозитория машинного обучения
UCI представляет собой набор данных для многоклассовой классификации. Набор предназначен для распознавания черно-белых пиксельных прямоугольников как одну из 26 заглавных букв английского алфавита, где буквы алфавита представлены в 16 измерениях. Чтобы получить данные, подходящие для обнаружения аномалий, была произведена подвыборка данных из 3 букв, чтобы сформировать нормальный класс, и случайным образом их пары были объединены так, чтобы их размерность удваивалась. Чтобы сформировать класс аномалий, случайным образом были выбраны несколько экземпляров букв, которые не входят в нормальный класс, и они были объединены с экземплярами из нормального класса. Процесс объединения выполняется для того, чтобы сделать обнаружение более сложным, поскольку каждый аномальный пример также будет иметь некоторые нормальные значения признаков.
Количество |
Количество |
Количество |
Количество |
признаков |
примеров |
нормальных |
аномалий |
|
|
примеров |
|
|
|
|
|
32 |
1600 |
1500 |
100 |
|
|
|
|
2) Загрузим многомерную обучающую выборку реальных данных letter_train.txt.
# загрузка обучающей выборки
train = np.loadtxt('letter_train.txt', dtype=np.float)
3) Выведем полученные данные и их размерность в консоли.
# вывод данных и размерности print('Исходные данные:') print(train)
print('Размерность данных:') print(train.shape)
12
Исходные данные:
[[ 6. 10. 5. ... 10. 2. 7.] [ 0. 6. 0. ... 8. 1. 7.] [ 4. 7. 5. ... 8. 2. 8.]
...
[ 7. 10. 10. ... 8. 5. 6.] [ 7. 7. 10. ... 6. 0. 8.] [ 3. 4. 5. ... 9. 5. 5.]]
Размерность данных: (1500, 32)
4) Создадим и обучим автокодировщик с подходящей для данных архитектурой.
# обучение AE3 patience=5000
ae3_trained, IRE3, IREth3 = lib.create_fit_save_ae(train,'out/AE3.h5','out/AE3_ire_th.txt', 100000, True, patience)
Задать архитектуру автокодировщиков или использовать архитектуру по умолчанию? (1/2): 1 Задайте количество скрытых слоёв (нечетное число) : 7 Задайте архитектуру скрытых слоёв автокодировщика, например, в виде 3 1 3 : 40 30 15 10 15 30 40
5) Зафиксируем ошибку MSE, на которой обучение завершилось. Построим график ошибки реконструкции обучающей выборки. Зафиксируем порог ошибки реконструкции – порог обнаружения аномалий.
Epoch 100000/100000
1/1 [==============================] - 0s 23ms/step - loss: 0.2161
# Построение графика ошибки реконструкции lib.ire_plot('training', IRE3, IREth3, 'AE3')
13
6) Вывод:
Так как ошибка MSE_stop = 0,2161, которая была получена на последней эпохе обучения автокодировщика АЕ3, значительно меньше 1, а порог обнаружения аномалий не слишком завышен по сравнению с большинством значений ошибки реконструкции обучающей выборки, можно сделать вывод, что автокодировщик АЕ3 пригоден для обнаружения аномалий.
7)Загрузим тестовую выборку letter_test.txt.
test = np.loadtxt('letter_test.txt', dtype=np.float)
8)Подадим тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Выведем график ошибки реконструкции элементов тестовой выборки относительно порога.
# тестирование АE3
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')
i |
Labels |
IRE |
IREth |
0 |
[1.] |
[8.34] |
5.47 |
1 |
[1.] |
[11.11] |
5.47 |
… |
|
|
|
98 |
[1.] |
[8.17] |
5.47 |
14
99 [1.] [12.51] 5.47
Обнаружено 83.0 аномалий
9) Параметры наилучшего автокодировщика и результаты обнаружения аномалий занесем в таблицу:
|
Число |
Число |
|
|
|
|
|
Name |
нейронов в |
Число эпох |
Ошибка |
Порог ошибки |
% Обнаруженных |
||
скрытых |
|||||||
dataset |
скрытых |
обучения |
MSE_stop |
реконструкции |
аномалий |
||
|
слоев |
слоях |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
letter |
7 |
40 30 15 10 |
100000 |
0,2161 |
5,5 |
83 |
|
15 30 40 |
|||||||
|
|
|
|
|
|
||
|
|
|
|
|
|
|
10) Выводы:
Для качественного обнаружения аномалий в данных, когда размерность пространства признаков высока, при создании и обучении автокодировщика должны выполняться следующие требования:
-архитектура автокодировщика должна быть достаточно сложной, то есть должна включать в себя несколько слоев;
-количество эпох обучения должно быть достаточно большим (порядка сотен тысяч);
-ошибка MSE_stop, приемлемая для останова обучения, должна иметь достаточно малое значение << 1;
-порог обнаружения аномалий не должен быть завышен по сравнению с большинством значений ошибки реконструкции обучающей выборки.
15