Ссылка на часть 1 этого тематического исследования

Ссылка на вторую часть этого тематического исследования

В последней части мы построили несколько моделей на наших данных поезда и рассчитали метрики на наших тестовых данных.

Байесовская оптимизация и Гиперопт:

Hyperopt — это инструмент, который находит лучшую модель и гиперпараметры на основе байесовской оптимизации и SMBO (последовательной глобальной оптимизации на основе моделей). По сути, при байесовской оптимизации он находит P(оценка|конфигурация) — вероятность получения оценки при определенной конфигурации для разных конфигураций, а затем определяет наилучшую. Эта конфигурация может быть моделью с разными значениями гиперпараметров или разными моделями с разными гиперпараметрами. Используя байесовскую оптимизацию, алгоритм может сузить пространство поиска, чтобы найти эти конфигурации и быстрее предоставить результат.

Я использовал этот инструмент, чтобы найти лучшую модель и параметры для нашего набора данных, а затем реализовал его.

Согласно вышеизложенному, лучшей моделью является KNN с евклидовым расстоянием и K=1. Также предлагается использовать нормализацию L1 в качестве этапа предварительной обработки.

K-ближайшие соседи:

В KNN соседи точки запроса находятся в наборе данных, а метка класса большинства соседей задается как метка класса для точки запроса. ниже результат.

Модель дала потери в журнале поезда 0,11 и потери журнала испытаний 0,14. Точность обучения составляет 100 процентов, а точность теста — 98 процентов. Примечательно, что разница в потерях между потерями при поездке и тесте меньше, что говорит о том, что модель не должна переобучать.

Из приведенного ниже графика матрицы путаницы видно, что все положительные точки классифицированы правильно, а одна отрицательная точка неправильно классифицирована в тестовых данных.

Из приведенного выше графика точности можно сделать вывод, что 85 процентов предсказанных положительных результатов были фактически положительными, а 100 процентов предсказанных отрицательных результатов были фактически отрицательными.

Из приведенного выше графика отзыва можно сделать вывод, что положительный класс имеет 100-процентную полноту, а отрицательный класс имеет 97-процентную полноту.

На этом классические реализации машинного обучения для нашей задачи заканчиваются. В заключение, KNN выступил лучше всего. Существует больше возможностей для настройки гиперпараметров и получения лучших результатов, однако ясно, что классические методы могут классифицировать наши данные в очень ограниченном объеме, и есть хороший шанс переобучения к обучающим данным.

Теперь, поскольку проблема заключается в медицинской диагностике, важными показателями для нас являются процент истинно положительных и ложноотрицательных результатов. Важно уменьшить FN и увеличить TP.

Ниже приведен график для TP и FN для всех вышеперечисленных моделей.

Модели на основе глубокого обучения

Далее мы реализуем некоторые модели глубокого обучения и проанализируем их производительность.

Сверточная нейронная сеть

Ядро используется для свертки изображения пиксель за пикселем, а скалярное произведение сохраняется в другой матрице, которая является результатом этой свертки. Многие такие слои свертки используются для обучения на входном изображении. В нашем случае изображение представляет собой звуковую спектрограмму, подробно рассмотренную ранее. Весь наш набор данных конвертируется в спектрограммы. CNN используется для этих спектрограмм, за которыми следует слой двоичной классификации, чтобы делать прогнозы относительно того, относится ли спектрограмма к ковид-положительному или ковид-отрицательному звуку.

VGGNet:

Это архитектура на основе свертки. Для всей архитектуры используются только ядра 3x3, а максимальный пул 2x2 используется с шагом 2. Это значительно упрощает эту архитектуру. VGG 16 имеет 16 слоев. Это используется для передачи обучения для нашей задачи. В Keras есть предварительно созданная модель VGG 16, обученная на наборе данных imagenet.

Трансферное обучение относится к повторному использованию предварительно обученной модели для текущей работы вместо создания модели с нуля. Если мы удалим верхние слои, которые являются сглаженными и полностью связанными плотными слоями, на выходе мы получим признаки узкого места. Веса начальных слоев заморожены, поэтому через них не проходят градиенты, и веса не обновляются. Тонкая настройка означает использование более низкой скорости обучения, поэтому веса не обновляются кардинально.

В нашей задаче будет применено и узкое место, и тонкая настройка, чтобы увидеть результат.

Модель 1 CNN:

Генератор данных изображения и метод потока данных используются для подготовки наших изображений к обучению. После разделения тестового поезда мы получаем 30% изображений в проверочном наборе и 70% в наборе поездов. Для первой задачи использования узких мест целевой размер используемых изображений соответствует размеру исходных спектрограмм, то есть 288x432. Если задано значение shuffle, то используемый режим класса является бинарным, поскольку наша задача — бинарная классификация.

В финальной модели есть входной слой, затем модель VGG 16 со снятым верхом. Весы здесь застыли. Веса инициализируются набором данных imagenet. У нас есть слой свертки, слой объединения, за которым следуют сглаженные и плотные слои. В итоге у нас есть один сигмовидный нейрон для бинарной классификации.

Модель скомпилирована оптимизатором Adam со скоростью обучения 0,01, двоичной кросс-энтропийной потерей и набором метрик. Метрики включают бинарную точность, TP, FP, TN, FN.

Модель обучалась в течение 50 эпох.

30/30 [==============================] — 13s 433ms/step — loss: 3.9778e-07 — binary_accuracy: 1.0000 — tp: 11.0000 — tn: 108.0000 — fp: 0.0000e+00 — fn: 0.0000e+00 — val_loss: 0.8592 — val_binary_accuracy: 0.9412 — val_tp: 5.0000 — val_tn: 43.0000 — val_fp: 0.0000e+00 — val_fn: 3.0000
<keras.callbacks.History at 0x7f955de702d0>

Модель дала 100-процентную точность для тренировочного набора. Точность 0,94 для проверочного набора с 3 ложноотрицательными результатами.

Модель 2 CNN:

Для второй задачи тонкой настройки модели VGG 16 для трансферного обучения размер изображений изменяется до 224x224, что является стандартным входным размером модели VGG-16. Если задано значение shuffle, то используемый режим класса является бинарным, поскольку наша задача — бинарная классификация.

В этой модели базовой моделью является VGG 16. Мы заморозили начальные слои этой модели, но не заморозили более поздние слои. 6 слоев не замерзли.

Окончательная модель содержит входной слой VGG 16, описанный выше, за которым следуют 2 слоя свертки. Здесь слои свертки используются вместо полносвязных слоев. Это ускоряет обучение. Затем идет плоский слой, за которым следует выходной слой сигмовидной активации. В этой сети около 130 миллионов обучаемых параметров.

При составлении этой модели мы использовали концепцию снижения скорости обучения. Мы использовали оптимизатор Adam с более низкой скоростью обучения 0,0001. Мы также использовали те же метрики, описанные ранее. Использование снижения скорости обучения с минимумом 0,000001.

Epoch 50/50
30/30 [==============================] — 16s 531ms/step — loss: 4.6876e-07 — binary_accuracy: 1.0000 — tp: 16.0000 — tn: 103.0000 — fp: 0.0000e+00 — fn: 0.0000e+00 — val_loss: 0.1338 — val_binary_accuracy: 0.9608 — val_tp: 2.0000 — val_tn: 47.0000 — val_fp: 1.0000 — val_fn: 1.0000 — lr: 1.0000e-06
<keras.callbacks.History at 0x7f6aa02ca7d0>

Как видно выше, мы обучали модель на 50 эпох. Достигается точность 100 процентов на наборе поездов и точность 96 процентов на наборе проверки. Однако ложноотрицательный результат равен всего 1, а ложноположительный результат равен 1. Это намного лучше, чем модель 1 CNN, поскольку мы больше всего заботимся о снижении FN и увеличении TP, что было достигнуто в этой модели.

Многослойный персептрон

Многослойный перцептрон был построен с 4 плотными слоями, входным слоем и выходным слоем. Выход состоит из 1 сигмовидной единицы, так как наша задача — бинарная классификация. В качестве метрик используются компоненты матрицы бинарной точности и путаницы. В качестве функции потерь используется бинарная кросс-энтропия. Оптимизатор Адама используется в качестве оптимизатора со скоростью обучения 0,01.

Здесь мы использовали табличные функции, которые использовались для классических моделей машинного обучения.

Ниже представлено краткое описание модели. Наша модель имеет около 186 000 обучаемых параметров.

Как отмечалось выше, модель обучалась в течение 100 эпох, и потери в конце очень малы. С помощью этой модели была достигнута 100-процентная точность обучения и проверки.

Однако для целостного представления результатов нам необходимо обучить и протестировать приведенную выше модель на нескольких разделениях данных обучения/тестирования.

Повторный запуск модели, основанной на MLP, с использованием нескольких разделов обучающих тестов, чтобы понять среднюю производительность

В этом эксперименте было создано несколько тестовых сплитов поезда, и на них была запущена модель MLP. Показатели производительности были зафиксированы и записаны.

Как отмечалось выше, это первый запуск из 5 запусков, в котором в наборе данных поезда у нас есть 14 положительных точек, а в наборе тестовых данных у нас есть 5 положительных точек. После запуска модели на 100 эпох потери теста составили 0,014, точность 100 процентов.

Аналогичный процесс был повторен 5 раз на разных тестовых участках поезда. Ниже окончательный результат. Как видно, точность выше 90 и близка к 100 во многих прогонах. Что еще более важно, у нас низкий уровень ложноотрицательных результатов и высокий уровень истинных положительных результатов.

Таким образом, мы будем продвигать эту модель как окончательную модель и производить ее.

Развертывание и производство

Последняя используемая модель — это модель глубокого обучения MLP. Двумя ключевыми файлами, необходимыми для развертывания и ионизации продукта, являются файл сохраненной модели и файл pickle для стандартизации данных. API создается вокруг модели, которая принимает аудиофайл в качестве входных данных и возвращает метку в качестве выходных данных. Вывод в формате JSON.

Пользовательский интерфейс прост. Файл загружается и нажимается кнопка классификации. Это отправит файл на сервер, а метка класса будет возвращена клиенту. Это достигается с помощью модуля Flask API.

Мы будем использовать облако AWS для развертывания этого приложения. Мы будем использовать эластичную службу облачных вычислений. Сначала будет запущен экземпляр EC2 и установлены необходимые библиотеки. Затем с помощью защищенной копии мы перенесем нужные файлы с локального на ящик EC2. Затем запустите файл app.py на сервере EC2.

Заключение

В этом примере мы попытались создать рабочую модель, которая могла бы классифицировать звуки кашля. Даже с небольшим набором данных результаты были хорошими и многообещающими. Использовались как классические методы машинного обучения, так и методы глубокого обучения. В классических методах КНН давала лучшие результаты. Чтобы найти лучшую модель, мы также использовали байесовскую оптимизацию.

В методах глубокого обучения были реализованы многослойные персептронные и сверточные нейронные сети. Для классических методов и МЛП использовались табличные данные. Данные были получены из временных рядов аудиосигнала. Для CNN мы использовали спектрограммы.

В качестве окончательной модели мы выбрали MLP, поскольку она давала хорошие результаты и быстрее обучалась. Он имеет сравнительно малое время прогнозирования и низкую стоимость прогнозирования по сравнению с CNN.

Модель была развернута на сервисе AWS EC2. Вокруг модели был разработан API с использованием Flask.

Надеюсь, вам понравилось читать!!