Моделирование интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей тема диссертации и автореферата по ВАК РФ 00.00.00, кандидат наук Киладзе Мария Романовна
- Специальность ВАК РФ00.00.00
- Количество страниц 194
Оглавление диссертации кандидат наук Киладзе Мария Романовна
ВВЕДЕНИЕ
ГЛАВА 1. АНАЛИЗ МЕТОДОВ И МОДЕЛЕЙ ЦИФРОВОЙ ОБРАБОТКИ КАРДИОЛОГИЧЕСКИХ ДАННЫХ
1.1. Актуальность классификации кардиологических данных
1.2. Методы и модели регистрации кардиологических данных
1.3. Аналитический обзор систем искусственного интеллекта для классификации сигналов электрокардиограмм
1.4. Постановка задачи исследования и методы его оценивания
1.5. Выводы по первой главе
ГЛАВА 2. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ ИНТЕЛЛЕКТУАЛЬНОЙ КЛАССИФИКАИЦИИ КАРДИОЛОГИЧЕСКИХ ДАННЫХ
2.1. Модель многослойного персептрона для интеллектуальной классификации статистических кардиологических данных
2.2. Модель рекуррентной нейронной сети LSTM для интеллектуальной классификации сигналов кардиологических данных
2.3. Принцип объединения разнородных данных для интеллектуальной классификации кардиологических данных
2.4. Математическая модель интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей
2.5. Выводы по второй главе
ГЛАВА 3. ЧИСЛЕННЫЙ МЕТОД ПРЕДВАРИТЕЛЬНОЙ ОБРАБОТКИ СИГНАЛОВ ЭЛЕКТРОКАРДИОГРАММ
3.1. Метод удаления шумов с сигналов электрокардиограмм на основе дискретного вейвлет-преобразования
3.2. Метод выделения морфологических признаков на потоке сигналов электрокардиограмм
3.3. Численный метод обработки сигналов электрокардиограмм для шумоподавления и выделения морфологических признаков
3.4. Выводы по третьей главе
ГЛАВА 4. КОМПЛЕКС ПРОГРАММ ИНТЕЛЛЕКТУАЛЬНОЙ КЛАССИФИКАЦИИ КАРДИОЛОГИЧЕСКИХ ДАННЫХ
4.1. Моделирование интеллектуальной классифкаиции одноканальных сигналов электрокардиограмм с этапом предварительной обработки сигналов
4.2. Моделирование интеллектуальной классификации кардиологических данных без предварительного выделения морфологических признаков
4.3. Моделирование интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей с предварительным выделением морфологических признаков
4.4. Практические рекомендации по классификации 12-канальных сигналов электрокардиограмм
4.5. Выводы по четвертой главе
ЗАКЛЮЧЕНИЕ
СПИСОК ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ А. Листинг метода классификации одноканальных сигналов
электрокардиограмм
ПРИЛОЖЕНИЕ Б. Листинг мультимодальной системы классификации
канальных сигналов электрокардиограмм
ПРИЛОЖЕНИЕ В. Свидетельство о государственной регистрации программы для
ЭВМ
ПРИЛОЖЕНИЕ Г. Акты о внедрении результатов диссертационного исследования
Рекомендованный список диссертаций по специальности «Другие cпециальности», 00.00.00 шифр ВАК
Модели и алгоритмы обработки кардиологических данных для системы поддержки принятия диагностических решений на основе нейросетевых технологий2026 год, кандидат наук Аль-Хамами Омар Хашим Яхья
Нейросетевая система экспресс - оценки наличия ишемической болезни сердца по одноканальной ЭКГ2019 год, кандидат наук Талеб Емад Махмуд Ахмед
Модели машинного обучения для автоматизированного анализа интервалограмм ритма сердца в диагностике аритмии2025 год, кандидат наук Марков Никита Сергеевич
Персонализированные модели электрофизиологии сердца человека и их приложения2023 год, кандидат наук Ушенин Константин Сергеевич
Моделирование интеллектуального анализа дерматологических данных на основе ансамблевой мультимодальной классификации2024 год, кандидат наук Ляхова Ульяна Алексеевна
Введение диссертации (часть автореферата) на тему «Моделирование интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей»
ВВЕДЕНИЕ
Актуальность работы. Сердечно-сосудистые заболевания (ССЗ) являются основной причиной смертности населения и роста числа инвалидов во всем мире [93]. ССЗ включают в себя заболевания сердца и кровеносных сосудов, которые 2022 году в Российской Федерации заняли второе место по общей заболеваемости населения и составили 26 295,8 на 100 000 населения с приростом на 5,8% по сравнению с 2021 годом [9, 21]. В мировой практике из 17 миллионов смертей в возрасте до 70 лет 37% приходятся на заболевания ССЗ, где 82% случаев зарегистрированы в странах с низким доходом [93]. Вариабельная комбинация изменений внутренней оболочки артерий является основным фактором риска развития заболеваний сердечно-сосудистой системы [38]. Факторами риска развития изменений внутренней оболочки артерий являются возраст, курение, артериальная гипертония, сахарный диабет 2 типа, отягощённая наследственность, семейная гиперлипидемия, абдоминальное ожирение, хроническое заболевание почек, употребление алкоголя [16, 67]. Развитие описанных выше заболеваний, влияющих на проявление ССЗ, связано с отсутствием чистой пресной воды, качественного и сбалансированного питания, своевременного медицинского вмешательства, что обосновывает высокий процент развития ССЗ в странах с низким доходом. Учитывая, что лечение ССЗ является дорогостоящим и включает в себя операции на открытом сердце и мозге, главным критерием в борьбе со смертностью из-за ССР является их профилактика. Комитет по разработке национальных рекомендаций Российской Федерации описывает две основные стратегии профилактики ССЗ: популяционная стратегия и стратегия высокого риска [10]. Популяционная стратегия направлена на мероприятия в масштабах всего населения и осуществляется на общенациональном уровне, например, программы по борьбе с курением табака и употреблением алкогольных напитков, обеспечению правильного питания населения, повышению уровня физической активности населения и так далее [8]. Стратегия высокого риска направлена на
раннее выявление ССЗ среди лиц с высоким показателем риска возникновения ССЗ. В [72] описаны два вида профилактики ССЗ: первичная, направленная на предотвращение заболевания, и вторичная, содержащая комплекс мер по предупреждению осложнений и смертельных случаев ССЗ [15]. Способы снижения смертности от ССЗ в Российской Федерации описаны в национальном проекте «Здравоохранение» [26]. Такими способами являются развитие телемедицины и компьютерных вспомогательных диагностических систем. Автоматические способы классификации аритмий на электрокардиологических сигналах позволят точно и быстро классифицировать сигналы электрокардиограмм. Значительный вклад в развитие методов автоматической классификации сигналов электрокардиограмм внесли многие отечественные и зарубежные исследователи: Т.В. Подладчикова, А.Г. Глушкова, R. M. Rangayyan, S. Krishnan, F. Murat, Savaliaand, S. Hong, Pérez-Riera, L. Littmann, А. Kalyakulina, G. Luo, K. Bnou, D. Donoho, S. Mahmoodabadi, Y. Liu, C. Che, M. Safdar, D. Le, M. Qi, E. Prabhakararao C. Zhang и другие. Результаты, представленные в работах отечественных и зарубежных исследователей, показывают актуальность и необходимость использования интеллектуальных моделей в качестве инструмента для классификации кардиологических данных для определения наличия или отсутствия патологий в работе сердечно-сосудистой системы. Анализ существующих нейросетевых моделей классификаций сигналов электрокардиограмм, показал, что существующие нейросетевые модели не превосходят 71% тестовой точности классификации 12-канальных сигналов электрокардиограмм. Для решения наиболее актуальных задач вспомогательной диагностической медицины необходимо разработать модель интеллектуальной классификации кардиологических данных, достигающей наиболее высокую тестовую точность классификации кардиологических данных. При этом повышение тестовой точности классификации на основе существующих интеллектуальных систем и моделей затруднено. Это связанно с недостатками, возникающими при предварительной обработке сигналов электрокардиограмм, такими как недостаточное или избыточное шумоподавление, отсутствие
возможностей учета статистических данных пациентов, таких как пол и возраст. Таким образом возможно сформировать противоречие в практике, которое заключается в необходимостьи повышения тестовой точности классификации сигналов электрокардиограмм, превосходящей 71%, и невозможности реализации такого повышения на основе существующих интеллектуальных систем и моделей, без их дополнительной модификации и адаптации к индивидуальным данным пациента. В интересах преодоления вышеуказанного противоречия в практике сформулирована цель исследования - повышение тестовой точности интеллектуальной классификации кардиологических данных. Выполненный анализ существующих методов классификации и предварительной обработки сигналов в области искусственного интеллекта и цифровой обработки данных, а также известных работ в области вспомогательной медицины позволил выявить следующее научное противоречие. Противоречие в науке - известные системы и модели интеллектуальной классификации кардиологических данных не учитывают статистических данных пациентов. Таким образом, главной идеей диссертационного исследования является повышение тестовой точности классификации кардиологических данных путем разработки мультимодальной нейросетевой модели на основе рекуррентной нейронной сети, учитывающей такие статистические данные пациентов как пол и возраст, и численного метода шумоподавления и выделения морфологических признаков на потоке сигналов электрокардиограмм. Для разрешения поставленной цели и решения известного противоречия сформулирована следующая научная задача - разработка модели интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей.
Объект исследования - методы цифровой обработки мультимодальных кардиологических данных.
Предмет исследования - методы интеллектуальной классификации мультимодальных кардиологических данных.
Для решения общей поставленной научной задачи произведена ее декомпозиция на ряд частных задач, позволяющих создать математическую
модель, численный метод и комплекс программ для классификации кардиологических данных с этапом предварительной обработки электрокардиограмм.
1. Разработка математической модели интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети, учитывающей статистические данные пациента и морфологические признаки электрокардиограмм.
2. Разработка численного метода предварительной обработки сигналов электрокардиограмм с целью шумоподавления и выделения морфологических признаков на основе дискретного вейвлет-преобразования и спектрального анализа.
3. Разработка комплекса программ для интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети, учитывающего статистические данные пациентов и использующего численный метод шумоподавления и выделения морфологических признаков электрокардиограмм.
Методы исследования. Для решения поставленных в работе научных задач использованы методы цифровой обработки сигналов, теории фильтрации цифровых сигналов, частотно-временного и спектрального анализа, теории математического анализа, вероятности и статистики, линейной алгебры, математического и компьютерного моделирования в программных средах Matlab и высоко уровневый язык программирования Python.
Положения, выносимые на защиту:
1. Математическая модель интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети, учитывающая статистические данные пациента и морфологические признаки электрокардиограмм.
2. Численный метод предварительной обработки сигналов электрокардиограмм с целью шумоподавления и выделения морфологических признаков на основе дискретного вейвлет-преобразования и спектрального анализа.
3. Комплекс программ интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети, учитывающий статистические данные пациентов и использующий численный метод шумоподавления и выделения морфологические признаки электрокардиограмм, позволяющий распознавать 12-канальные сигналы электрокардиограмм с тестовой точностью 83,35%.
Достоверность и обоснованность полученных в диссертационной работе теоретических результатов и формулируемых на их основе выводов обеспечивается строгостью производимых математических выкладок. Справедливость выводов относительно эффективности предложенных методов подтверждена результатами моделирования интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей.
Практическая значимость заключается в том, что разработанные модель искусственного интеллекта, численный метод и программный комплекс могут быть использованы для классификации сигналов электрокардиограмм и статистических данных пациентов. Результаты моделирования демонстрируют повышение тестовой точности классификации кардиологических данных в сравнении с современными методами, что подтверждает работоспособность предложенной модели и возможность ее применения в качестве вспомогательного диагностического инструмента.
Научная новизна заключается в следующем:
1. Разработана математическая модель интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети, отличающаяся от известных, учетом статистических данных пациентов и морфологических признаков электрокардиограмм.
2. Разработан численный метод предварительной обработки кардиологических данных на основе дискретного вейвлет-преобразования и выделения морфологических признаков, используемый для шумоподавления и отличающийся от известных использованием семейства симлет и методов спектрального анализа.
3. Разработан комплекс программ для интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети, учитывающий статистические данные пациентов, использующий численный метод обработки сигналов электрокардиограмм, реализованный на языке программирования Python и отличающийся от известного учетом статистических данных пациентов и морфологических признаков сигналов электрокардиограмм. Тестовая точность классификации в среднем на 12,35-20,35 процентных пунктов выше, чем у известных подходов.
Моделирование и вычислительный эксперимент проводилось с использованием математического пакета Matlab версии R2020b с подключением модулей Signal Processing Toolbox, Matlab Mathematics, Wavelet Signal Denoiser и высокоуровневого языка программирования Python с подключением библиотек pandas, NumPy, OpenCv, Python Imaging Library, PyToch, sklearn.preprocessing, Matplotlib, SciPy, sklearn.metrics, seaborn.
Результаты исследования соответствуют следующим пунктам паспорта научной специальности 1.2.2 - Математическое моделирование, численные методы и комплексы программ: 6 - «Разработка систем компьютерного и имитационного моделирования, алгоритмов и методов имитационного моделирования на основе анализа математических моделей (технические науки)», а именно разработана модель интеллектуальной классификации кардиологических данных на основе рекуррентной нейронной сети; 8 - «Комплексные исследования научных и технических проблем с применением современной технологии математического моделирования и вычислительного эксперимента», а именно проведено комплексное исследование проблемы классификации сигналов электрокардиограмм и выделения на них морфологических признаков с применением моделирования в программной среде Matlab и высокоуровневого языка программирования Python; 9 - «Постановка и проведение численных экспериментов, статистический анализ их результатов, в том числе с применением современных компьютерных технологий (технические науки)», а именно проведен
ряд численных экспериментов и статистический анализ полученных результатов интеллектуальной классификации кардиологических данных.
Внедрение. Результаты диссертационного исследования получены при проведении научно-исследовательских работ в рамках проекта МК-3918.2021.1.6 «Высокопроизводительные устройства цифровой обработки медицинских изображений на основе параллельной математики»; проекта, поддержанного в рамках конкурса поддержки проектов научных групп и отдельных ученых Северо -Кавказского федерального университета (2020-2023, 2023-2026); грантов РНФ 2317-10013 «Перспективные методы интеллектуальной обработки сигналов на основе глубоких нейронных сетей и модулярных вычислений» и РНФ 24-71-10016 «Перспективные подходы к нейросетевой обработке сигналов и изображений и их реализация на современных аппаратных устройствах». Результаты диссертационного исследования внедрены в учебный процесс Северо-Кавказского федерального университета и Ставропольского государственного медицинского университета. Результаты диссертационного исследования также внедрены в работу клиники персонализированной медицины Северо-Кавказского Федерального университета.
Апробация работы. Основные результаты диссертационной работы докладывались и обсуждались на следующих научных конференциях: Международная конференция «Actual Problems in Applied Mathematics and Computer Science» (Ставрополь, 2022), X ежегодная научно -практическая конференция студентов, преподавателей и молодых ученных Северо-Кавказского федерального университета «Университетская наука - региону» (Ставрополь, 2023), международная конференция «International Conference on Quality Management, Transport and Information Security, Information Technologies (IT&QM&IS)» (Петрозаводск, 2023), международная конференция «International Conference on Advances in Sustainable Development, Innovation and Green Technology (ICASDIGT)» (Ассам, Индия, 2024).
Публикации. По теме диссертации опубликовано 9 работ, из них 2 работы в журналах, входящих в перечень ВАК при Министерстве науки и высшего
образования РФ, 2 работы в журналах, индексирующихся в базах Scopus и Web of Science, 2 тезиса докладов в научных изданиях Scopus и Web of Science, 2 тезиса докладов в изданиях, проиндексированных в национальной библиографической базе данных научного цитирования РИНЦ, 1 свидетельство о регистрации программ для ЭВМ.
Личный вклад соискателя. Диссертационное исследование проводилось автором в течение нескольких лет. В диссертационную работу включены только те результаты, которые были получены лично соискателем. В работах, опубликованных совместно с другими авторами, постановка и решение задач осуществлялась совместными усилиями соавторов. В статьях [12-13, 18, 60] автором диссертационного исследования разработаны математические модели интеллектуальной классификации кардиологических данных. В статьях [13, 19, 66] соискателем проведено компьютерное моделирование численного метода предварительной обработки сигналов электрокардиограмм с целью шумоподавления и выделения на них различных морфологических признаков. В статьях [13, 59, 66] автором опубликованы результаты существующих и предложенных моделей и систем интеллектуальной классификации кардиологических данных.
Структура и объем диссертации. Диссертация состоит из введения, четырех глав, заключения, списка литературы и 4 приложений. Работа содержит 75 рисунков и 10 таблиц. Список использованных источников насчитывает 103 наименований. В диссертации принята двойная нумерация формул, рисунков и таблиц: первая цифра указывает номер главы, вторая - порядковый номер рисунка, таблицы или формулы внутри данной главы.
Первая глава посвящена анализу актуальности классификации сигналов электрокардиограмм. Проанализированы методы регистрации сигналов электрокардиограмм и случаи возникновения шумов на них. Продемонстрированы открытые базы кардиологических данных, необходимые для моделирования моделей и методов обработки сигналов электрокардиограмм. Рассмотрены ограничения, связанные с техническими возможностями электрокардиографов.
Проанализированы существующие методы классификации одноканальных и многоканальных сигналов электрокардиограмм. Сформулированы математическая постановка задачи и основная задача исследования: разработка модели интеллектуальной классификации кардиологических данных на основе рекуррентных нейронных сетей.
Вторая глава посвящена разработке математической модели интеллектуального анализа кардиологических данных на основе рекуррентной нейронной сети для классификации 12-канальных сигналов электрокардиограмм. Предложены нейросетевая модель для классификации статистических данных на основе многослойного персептрона и нейросетевая модель для классификации сигналов электрокардиограмм на основе рекуррентной нейронной сети. Объединение двух нейросететвых архитектур в общую систему для классификации кардиологических данных позволяет повысить точность диагностирования наличия сердечной аритмии на потоке сигналов электрокардиограмм. Полученная интеллектуальная модель может быть использована как вспомогательный инструмент для классификации кардиологических данных с целью выявления сердечных аритмий.
Третья глава посвящена разработке числительного метода предварительной обработки сигналов электрокардиограмм. В главе разработан численный метод очистки сигналов электрокардиограмм от шума на основе вейвлет-преобразования и метод выделения морфологических признаков на потоке сигналов электрокардиограмм. Объединение этих двух этапов предварительной обработки сигналов позволяет получить матрицу вектор-признаков для определения расположения морфологических признаков.
Четвертая глава посвящена описанию реализации разработанного комплекса программ интеллектульаной классификации кардиологических данных с использованием предварительной обработки сигналов электрокардиограмм и учета статистических данных. Зафиксировано повышение тестовой точности классификации сигналов электрокардиограмм по диагностическим категориям
аритмий по сравнению с известными методами на 12,35-20,35 процентных пункта, что показано в таблице 4.8
В заключении диссертационной работы сформулированы основные теоретические выводы исследований, а также описаны полученные практические результаты.
ГЛАВА 1. АНАЛИЗ МЕТОДОВ И МОДЕЛЕЙ ЦИФРОВОЙ ОБРАБОТКИ
КАРДИОЛОГИЧЕСКИХ ДАННЫХ
1.1. Актуальность классификации кардиологических данных
Российская Федерация занимает первое место по смертности от патологий сердца и сосудов. В среднем в год в нашей стране от данных недугов погибает более 900 тысяч человек [70]. Согласно статистическим данным Федеральной службы государственной статистики Российской Федерации Ставропольский край занимает 76 место по смертности от сердечно-сосудистых заболеваний среди регионов Российской Федерации и 2 среди регионов Северо-Кавказского Федерального округа (СКФО). На рисунке 1.1 представлено число смертей от сердечно-сосудистых заболеваний на 100 000 населения за 2022 год [25]. Согласно статистическим данным за 2012-2022 года [24] число погибших от этого недуга в Ставропольском крае снижается, но доля смертей, связанных с кардиологическими заболеваниями, все еще достаточно высокая. Так, в 2022 году 43% смертей выпало на долю сердечно-сосудистых заболеваний, наибольший показатель был достигнут в 2013 году - 60%, наименьший в 2021 - 40%. В год пандемии 45% смертей случилось из-за заболеваний сердечно-сосудистой системы. На рисунке 1.2 представлена статистическая информация об общей смертности и доли смертей от сердечно-сосудистой системы по Ставропольскому краю за 2012-2022 года.
Для профилактики заболеваний сердечно-сосудистой системы ВОЗ предлагает использовать следующие меры: ведение борьбы против употребления табака и алкоголя, экономические санкции на продукты с высоким содержанием соли, сахара и жиров, стимулирование населения к повышению своей физической активности, популяризация здорового питания среди детей [3].
Рисунок 1.1 - Основная причина смертности населения Северо-Кавказского
федерального округа (СКФО).
Рисунок 1.2 - Смертность от заболеваний сердечно-сосудистой системы по
Ставропольскому краю.
Основным способом профилактики осложнений является ранняя диагностика заболеваний сердечно-сосудистой системы. Ранняя диагностика осложнений возможна с использованием алгоритмов и моделей интеллектуальной классификации кардиологических данных. Возможность применения данных моделей, в качестве вспомогательных диагностических систем, в Российской Федерации подробно описана в ГОСТ 59525 - 2021 [4]. Для корректной классификации кардиологических данных необходимо понимание анатомии сердечной мышцы и способа регистрации сердечных сокращений. пораграфах описаны анатомия сердца, способ регистрации электрокардиограммы и некоторые открытые базы кардиологических данных.
1.2. Методы и модели регистрации кардиологических данных
Сердечная мышца (сердце) является четырехкамерным насосом, состоящим из двух предсердий, предназначенных для сбора крови, и двух желудочков, проводящих откачку крови от сердца. Рисунок 1.3 иллюстрирует основные сосуды, идущие к сердцу, четыре камеры сердечной мышцы и выходящие из сердца сосуды. Сосуды, идущие к сердцу, наполняют кровью предсердия. В этот момент времени сердечная мышца находится в покое и этот процесс называется диастолой. Правое предсердие собирает кровь, насыщенную углекислым газом, через верхнюю и нижнюю полые вены, а левое предсердие наполняется кровью, насыщенной кислородом из левого желудочка через митральный клапан во время сокращения желудочков сердца. Процесс сокращения желудочков сердца называется систолой.
Правый желудочек наполняется кровью через трехстворчатый клапан правого предсердия во время его сокращения и опустошается во время сокращения правого желудочка через клапан легочной артерии в легкие для насыщения кровью кислородом. В левый желудочек кровь поступает из легких и является
обогащённой кислородом. Из-за необходимости перекачивать насыщенную кислородом кровь через аортальный клапан и аорту левый желудочек сокращается сильнее всего.
Верхняя полая вена
Легочная артерия
Правое предсердие
Трехстворчатый клапан Нижняя полая вена
Аорта
Левое предсердие Митральный клапан
Аортальный клапан Левый желудочек
Правый желудочек
Нисходящая аорта
Рисунок 1.3. - Схематическое представление сердца [81].
Частота сердечных сокращений (ЧСС) или сердечный ритм контролируется группой клеток сердца, являющейся водителем сердечного ритма. Эта группа клеток расположена в соединении верхней полой вены и правого предсердия и образует синусовый узел (ЗА) [81]. Вегетативная нервная система контролирует частоту срабатывания узла SA доставкой нейромедиаторов, отвечающих за передачу импульсов двигательным нейронам (нейромедиаторы ацетилхолина), которые стимулируют блуждающий нерв, вызывающий снижение частоты сердечных сокращений, или адреналина, вызывающего увеличение частоты сердечных сокращений. Нормальная частота сердечных сокращений, фиксируемых в состоянии покоя, составляет около 70 ударов в минуту. Во время сна этот показатель ниже. Низкая частота сокращений во время физической активности пациента (менее 60 ударов в минуту) указывает на наличие аритмии. Такой вид аритмии принято называть брадикардией. Синусовой брадикардией называют
аритмию, при которой фиксируется низкая частота сердечных сокращений, вызванную срабатыванием узла SA. Активная физическая нагрузка здорового человека может сопровождаться частотой сердечных сокращений до 200 ударов в минуту и является вариантом нормы, однако достижение таких значений ЧСС, зарегистрированных у пациента, находящегося в покое, может свидетельствовать о заболеваниях сердечно-сосудистой системы. Высокая частота сокращений узла SA, зафиксированная у пациента, находящегося в покое, вызывает аритмию, называемую синусовой брадикардией.
Сердце имеет специализированную систему проводимости и скоординированные электрические явления, представленные на рисунке 1.4, которые называются цепочкой сокращения потенциалов и обеспечивают равномерное сердечное сокращение. Цепочка потенциалов запускается узлом SA, который является основным естественным водителем ритма сердца. Потенциал действия узла SA распространяется с правого предсердия во все остальные части сердца, вызывая волну возбуждения и сокращения.
Рисунок 1.4 - Цепочка сокращения потенциалов [81].
Результатом регистрации цепочки сокращения потенциалов электрокардиографом является сигнал электрокардиограммы. Схематически этот сигнал представлен на рисунке 1.5 с метками, на которых указаны названия и длительности различных морфологических особенностей, отражающих сердечную активность. На рисунке также показаны потенциалы действия мышечной ткани предсердий и желудочков.
га
й
£
С
800 -
600
400
-200
-400
200 -
4320 4340 4360 4380 4400 4420 4440 4460 4480 4500 4520
Рисунок 1.5 - Схематичное представление изменений волн на сигнале
электрокардиограммы
Международный стандарт [85] описывает последовательность событий и волн сердечного цикла и состоит из следующих пунктов:
1. Возбуждение SA узла, представленного на рисунке 1.4.
2. Регистрация зубца Р (рисунок 1.5) медленной малоамплитудной волны длительностью 60-80мс и амплитудой 0,1 - 0,2 мВ. Это обусловлено медленной деполяризацией предсердий.
Похожие диссертационные работы по специальности «Другие cпециальности», 00.00.00 шифр ВАК
Развитие методов и алгоритмов обработки и нейросетевого анализа фонокардиосигнала2017 год, кандидат наук Аед Валид МохаммедАхмед
Разработка цифрового двойника сердечно-сосудистой системы с регуляцией для поддержки принятия врачебных решений при диагностике и терапии кардиологических больных2022 год, кандидат наук Коробов Артём Андреевич
Методы и модели для интеллектуальных систем прогнозирования сердечно-сосудистых рисков на основе анализа показателей синхронности системных ритмов2018 год, кандидат наук Петрова, Татьяна Владимировна
Система обработки и нейросетевого анализа биоэлектрических сигналов для решения задач медицинской диагностики2014 год, кандидат наук Аль-Хулейди Нашван Амин
Совершенствование систем обработки кардиографической информации для диагностики инфаркта миокарда2014 год, кандидат наук Рябчиков, Роман Вадимович
Список литературы диссертационного исследования кандидат наук Киладзе Мария Романовна, 2024 год
СПИСОК ЛИТЕРАТУРЫ
1. Билич, Г.Л. Атлас анатомии человека: в 3-х т. Т. 1: учеб. пособие. / Г.Л. Билич - Ростов-на-Дону: Феникс, 2014. - 488 с.
2. Бугаенко, В.В., Голикова И.П, Шеремет М.Ю., Гендерные особенности. диагностики, течения и лечения ишемической болезни сердца, / В.В. Бугаенко, И.П Голикова, М.Ю. Шеремет // Рациональная фармакотерапия. - 2015. - № 1 (34). - Cc. 5 - 19.
3. Всемирная организация здравоохранения. Официальный сайт. [Электронный ресурс]. — Режим доступа:https://www.who.mt/ra (дата обращения: 31.01.2024).
4. ГОСТ Р 59525 - 2021 «Интеллектуальные методы обработки медицинских данных. Основные положения». [Электронный ресурс]. — Режим доступа: https://docs.cntd.ru/document/1200179654
5. ГОСТ Р 59921.0-2022 «Системы искусственного интеллекта в клинической медицине. Основные положения». [Электронный ресурс]. — Режим доступа: https://docs.cntd.ru/document/1200193727
6. ГОСТ Р 59921.1-2022 «Системы искусственного интеллекта в клинической медицине. Часть 1. Клиническая оценка». [Электронный ресурс]. — Режим доступа: https://docs.cntd.ru/document/ 1200189205
7. ГОСТ Р 70462.1-2022 «Информационные технологии (ИТ). Интеллект искусственный. Оценка робастности нейронных сетей. Часть 1. Обзор». [Электронный ресурс]. — Режим доступа: https://docs.cntd.ru/document/ 1200193906
8. Европейские рекомендации по профилактике сердечно-сосудистых заболеваний в клинической практике // РФК. 2008. - №3. URL: https://cyberleninka.ru/article/n/evropeyskie-rekomendatsii-po-profilaktike-serdechno-sosudistyh-zabolevaniy-v-klinicheskoy-praktike (дата обращения: 05.07.2024).
9. Здравоохранение в России. 2023: Статистический сборник. - М.: Росстат, 2023. - 181 с.
10. Кардиоваскулярная профилактика 2017. Российские Национальные Рекомендации / Бойцов С.А., Погосова Н.В., Бубнова М.Г. [и др] // РКЖ. 2018. №6. URL: https://cyberleninka.ru/article/n/kardiovaskulyarnaya-profilaktika-2017-rossiyskie-natsionalnye-rekomendatsii (дата обращения: 17.03.2024).
11. Киладзе, М.Р. Предварительная обработка сигналов для мультимодальной классификации 12 -канальных сигналов электрокардиограмм / М.Р Киладзе // Инженерный вестник Дона. 2024. №2.
12. Киладзе, М.Р., Ковалец, А.А, Ляхов, П.А Способы обнаружения P-пиков на сигналах электрокардиограммы с использованием сети LSTM / М.Р. Киладзе, А.А. Ковалец, П.А. Ляхов // IX ежегодная научно -практическая конференция Северо-Кавказского федерального университета «Университетская наука - региону». - Ставрополь: Северо-Кавказский федеральный университет, 2021. - С. 80-85.
13. Киладзе, М.Р., Ляхов, П.А., Нагорнов, Н.Н. Использование детализирующего вектора для нейросетевой классификации сигналов / М.Р. Киладзе, П.А Ляхов, Н.Н. Нагорнов // Инженерный вестник Дона. 2023. №11.
14. Киселёв, А.Р., Нейфельд, И.В., Балашов, С.В. Факторы сердечнососудистого риска у женщин в постмено паузе / А.Р. Киселёв, И.В. Нейфельд, С.В. Балашов // Клиницист. - 2014. - №1. - С. 9-14.
15. Курманалина, Г.Л., Медовщиков, В. В., Ешниязов, Н.Б., Жолдин, Б.К. Модифицируемые факторы риска и их влияние на развитие сердечно-сосудистых заболеваний / Г.Л. Курманалина, В. В. Медовщиков, Н.Б. Ешниязов, Б.К. Жолдин // Медицинский журнал Западного Казахстана. - 2017. - №1. - С. 4-12.
16. Кухарчук, В.В., Коновалов, Г.А., Сусеков, А.В., [и др.] Диагностика и коррекция нарушений липидного обмена с целью профилактики и лечения атеросклероза. Российские рекомендации / В.В. Кухарчук, Г.А. Коновалов, А.В. Сусеков, [и др.] - V пересмотр изд. - М.: 2012. - 50 с.
17. Лебедева, А. Ю., Клыков, Л. Л., Зайцева, В. В. ИБС у молодых женщин: проблемы диагностики и профилактики / А. Ю. Лебедева, Л. Л. Клыков, В. В. Зайцева // Российский кардиологический журнал. - 2021. - №6 (92). - С. 90-97.
18. Ляхов, П.А., Киладзе, М.Р., Киладзе, М.Д. Классификация сигналов электрокардиограммы с использованием сверточной нейронной сети. / П.А. Ляхов, М.Р. Киладзе, М.Д. Киладзе // Высокопроизводительные вычисления для решения прикладных задач: сборник материалов X-й (67-й) ежегодной научно-практической конференции студентов, преподавателей и молодых ученых Северо-Кавказского федерального университета «Университетская наука - региону», 2023. - С. 83-87.
19. Ляхов, П.А. Ляхова, У.А., Киладзе, М.Р. Мультимодальная нейросетевая система обработки метаданных и сигналов электрокардиограммы для определения аритмии сердца. Свидетельство о государственной регистрации программы для ЭВМ № RU 2023617299. Зарегистрировано в Реестре программ для ЭВМ 7 апреля 2023.
20. Нестерова, Е.А. Основы электрокардиографии. Нормальная ЭКГ / Е.А. Нестерова // Кардиология: Новости. Мнения. Обучение. - 2016. - №2(9).
21. Об итогах работы министерства здравоохранения российской федерации в 2022 году и задачах на 2023 год. // Министерство здравоохранения Российской федерации URL: http://medmvestdub.ra/wp-content/uploads/2023/04/0б-итогах-работы.pdf (дата обращения: 17.06.2024).
22. Онищенко, П.С., Клышников, К.Ю., Овчаренко, Е.А. Искусственные нейронные сети в кардиологии: анализ численных и текстовых данных / П.С. Онищенко, К.Ю. Клышников, Е.А. Овчаренко // Мат. биол. и биоинф. - 2020. -№15(1). - С. 40-56.
23. Репина, М.А. Менопаузальный метаболический синдром и ожирение / М.А. Репина // Обзоры по клин. фармакол. и лек. терапии. - 2003. - №3, Т2. - С. 3547.
24. Росстат. Ставропольский край. Официальный сайт. [Электронный ресурс]. — Режим доступа: https://26.rosstat.gov.ru/folder/28386 (дата обращения: 31.01.2024).
25. Смертность населения по основным классам причин смерти по субъектам российской федерации // Федеральная служба государственной статистики URL: https://rosstat.gov.ru/folder/13721 (дата обращения: 31.01.2024).
26. Указ Президента Российской Федерации "О национальных целях и стратегических задачах развития Российской Федерации на период до 2024 года" от 07.05.2018 № 204 // Министерство здравоохранения Российской Федерации. -2018.
27. Хайкин, С. Нейронные сети: полный курс. - 2-е изд. / С. Хайкин - М.: ООО «И.Д. Вильямс», 2016. - 1104 с.
28. Andreotti, F., Carr, O., Pimentel, M. A. F., Mahdi, A., De Vos, M. Comparing Feature-Based Classifiers and Convolutional Neural Networks to Detect Arrhythmia from Short Segments of ECG / F. Andreotti, O. Carr, M.A.F. Pimentel, A. Mahdi, M. De Vos // Computing in Cardiology. - 2017. - №44. - С. 1-4.
29. Bakalets, N.F., Kovalchuk, L.S., Kovalchuk, P.N. The Impact of Gender Factors onSome Aspects of the Treatment of Cardiovascular Diseases / N.F. Bakalets, L.S. Kovalchuk, P.N. Kovalchuk // Journal: Problems of Health and Ecology. - 2015. -№4 (46). - С. 13-19.
30. Bender, T., et al. Benchmarking the impact of noise on Deep Learning-based classification of atrial fibrillation in 12-lead ECG / T. Bender, et al. //Caring is sharing-exploiting the value in data for health and innovation. - 2023. - С. 977.
31. Billeci, L., Costi, M., Lombardi, D., Chiarugi, F., Varanini, M. Automatic Detection of Atrial Fibrillation and Other Arrhythmias in ECG Recordings Acquired by a Smartphone Device / L. Billeci, M. Costi, D. Lombardi, F. Chiarugi, M. Varanini // Electronics. - 2018. - №7 (9). - С. 199.
32. Bishop, C.M. Neural Networks for Pattern Recognition / C.M. Bishop -Oxford: Oxford University Press, 1995. - 372 с.
33. Bortolan, G. 3D ECG display with deep learning approach for identification of cardiac abnormalities from a variable number of leads / G. Bortolan // Physiological Measurement. - 2023. - Т. 44. - №. 2. - С. 024002.
34. Brownlee, J. Long short-term memory networks with python: develop sequence prediction models with deep learning / J. Brownlee - Machine Learning Mastery, 2017.
35. Chazova, I.E., et al. Management of Women with Cardiovascular Risk in Peri-Postmenopausal: Consensus of Russian Cardiologists and Gynecologists / I.E. Chazova // Consilium Medicum. - 2008. - №06. - C. 5-18.
36. Che, C., et al. Constrained transformer network for ECG signal processing and arrhythmia classification / C. Che, et al. // BMC Medical Informatics and Decision Making. - 2021. - №21. - C. 184.
37. Clifford, G.D., et al. AF classification from a short single lead ECG recording: The PhysioNet/computing in cardiology challenge 2017 / G.D. Clifford, et al.// In 2017 Computing in Cardiology (CinC) . - IEEE, 2017. - C. 1-4.
38. D'Adamo, E., Guardamagna, O., Chiarelli, F., Bartuli, A., Liccardo, D., Ferrari, F., Nobili, V. Atherogenic dyslipidemia and cardiovascular risk factors in obese children / E. D'Adamo, O. Guardamagna, F. Chiarelli, A. Bartuli, D. Liccardo, F. Ferrari, V. Nobili // International Journal of Endocrinology. - 2015. - C. 912047.
39. Datta, S. et al. Identifying normal, AF and other abnormal ECG rhythms using a cascaded binary classifier / S. Datta, et al. // 2017 Computing in cardiology (CinC). - IEEE. - 2017. - C. 1-4.
40. Draper, H.W., Peffer, C.J., Stallmann, F.W., Littmann, D., Pipberger, H.V. The corrected orthogonal electrocardiogram and vectorcardiogram in 510 normal men (Frank lead system) / H.W. Draper, C.J. Peffer, F.W. Stallmann, D. Littmann, H.V. Pipberger. // Circulation. - 1964. - №30. - Cc. 853-864.
41. Duan, J., Zhang, X., Song, J. Predictive power of extubation failure diagnosed by cough strength: a systematic review and meta-analysis / J. Duan, X. Zhang, J. Song // Critical Care. - 2021. - №25. - C. 357.
42. Fang, R. et al. A visually interpretable detection method combines 3-D ECG with a multi-VGG neural network for myocardial infarction identification / R. Fang et al. //Computer Methods and Programs in Biomedicine. - 2022. - T. 219. - C. 106762.
43. Finegold, J.A., Asaria, P., Francis, D.P. Mortality from ischaemic heart disease by country, region, and age: statistics from World Health Organisation and United Nations / J.A. Finegold, P. Asaria, D.P. Francis // IInternational Journal of Cardiology. -2013. - №168 (2). - C. 934-945.
44. Fisher, R.A. The concepts of inverse probability and fiducial probability referring to unknown parameters / R.A. Fisher // Proceedings of the Royal Society. - 1933.
- №A 139. - С. 343 - 348.
45. Fisher, R.A. The use of multiple measurements in taxonomic problems / R.A. Fisher // Annals of Eugenics. - 1936. - №7(2). - С. 179 - 188.
46. Friedman, H.H. Diagnostic Electrocardiography and Vectorcardiography / H.H. Friedman - 2rd - New York: McGraw-Hill, 1977. - 486 c.
47. Gers, F. A., Schmidhuber J., Cummins F. Learning to forget: continual prediction with LSTM / F. A. Gers, J. Schmidhuber, F. Cummins // Neural Computation.
- 2000. - №12. - С. 2451-2471.
48. Goldberger, E. Unipolar Lead Electrocardiography and Vectorcardiography / E. Goldberger - 3rd изд. - Philadelphia: Lea & Febiger, 1954. - 601 с.
49. Goldberger, A., et al. PhysioBank, PhysioToolkit, and PhysioNet: Components of a new research resource for complex physiologic signals / A. Goldberger, et al. // Circulation. - 2000. - №101(23). - С. e215-e220.
50. Gutierrez, J., Hassan, D.M., Landi, H.M., Application of Federated Learning Techniques for Arrhythmia Classification Using 12-Lead ECG Signals. / J. Gutierrez, D.M. Hassan, D.M., H.M. Landi // Algorithmic Aspects of Cloud Computing. ALGOCLOUD 2023. Lecture Notes in Computer Science. - Cham: Springer, 2024. - С. 38-65.
51. Hinton, G. Where do features come from? / G. Hinton // Cognative Sciences.
- 2014. - №38(6). - С. 1078-1101.
52. Hochreiter, S., Schmidhuber, J. Long Short-Term Memory / S. Hochreiter, J. Schmidhuber // Neural Computation. - 1997. - №9(8). - С. 1735-1780.
53. Ingabire, H. N. et al. Analysis of ECG signals by dynamic mode decomposition / H. N. Ingabire et al. // IEEE Journal of Biomedical and Health Informatics. - 2021. - Т. 26. - №. 5. - С. 2124-2135.
54. Jeong, D. U., Lim, K. M. Convolutional neural network for classification of eight types of arrhythmia using 2D time-frequency feature map from standard 12-lead
electrocardiogram / D. U. Jeong, K. M. Lim // Scientific reports. - 2021. - T. 11. - №. 1. - C. 20396.
55. Jiménez-Serrano, S. et al. From 12 to 1 ECG lead: multiple cardiac condition detection mixing a hybrid machine learning approach with a one-versus-rest classification strategy / S. Jiménez-Serrano et al. // Physiological Measurement. - 2022. - №43. - C. 064003.
56. Jousilahti, P., Vartiainen, E., Tuomilehto, J., Puska, P. Sex, age, cardiovascular risk factors, and coronary heart disease: a prospective follow-up study of 14 786 middle-aged men and women in Finland / P. Jousilahti, E. Vartiainen, J. Tuomilehto, P. Puska // Circulation. - 1999. - №99(9). - C. 1165-1172.
57. Kalyakulina, A.I., et al., LUDB: A New Open-Access Validation Tool for Electrocardiogram Delineation Algorithms / A.I. Kalyakulina, et al. // IEEE Access. -2020. - №8. - C. 186181-186190.
58. Kiladze, M.R. Application of Bidirectional LSTM Neural Networks and Noise Pre-Cleaning for Feature Extraction on an Electrocardiogram /M.R. Kiladze // Current Problems in Applied Mathematics and Computer Science and Systems. - Cham: Springer, 2023. - C. 421-429.
59. Kiladze, M.R., Kalita, D.I., Lyakhova, U.A., Orazaev, A.R. About the Choice of Data Balance Method for Neural Network Classification of Electrocardiogram Signals / M.R. Kiladze, D.I. Kalita, U.A. Lyakhova, A.R. Orazaev // 2023 International Conference on Quality Management, Transport and Information Security, Information Technologies (IT&QM&IS). - Petrozavodsk, Russian Federation: IEEE, 2023. - C. 133136.
60. Kiladze, M. R. Lyakhova, U. A. Lyakhov, P. A. Nagornov N. N., Vahabi M. Multimodal Neural Network for Recognition of Cardiac Arrhythmias Based on 12-Load Electrocardiogram Signals / M. R. Kiladze, U. A. Lyakhova, P. A. Lyakhov, N. N. Nagornov, M. Vahabi // IEEE Access. 2023. - V. 11. C. 133744-133754.
61. Larose, D. T., Larose, C. D. Discovering knowledge in data: an introduction to data mining / D. T. Larose, C. D. Larose - Hoboken: Wiley, 2014. - 316 c.
62. Le, D. et al. scl-st: Supervised contrastive learning with semantic transformations for multiple lead ecg arrhythmia classification / D. Le, et al. //IEEE journal of biomedical and health informatics. - 2023. - Т. 27. - №. 6. - С. 2818-2828.
63. Littmann, L. Electrocardiographic artifact / L. Littmann // Journal of Electrocardiology. - 2021. - Т. 64. - С. 23-29.
64. Liu, Y. et al. Automatic multi-label ECG classification with category imbalance and cost-sensitive thresholding / Y. Liu et al. // Biosensors. - 2021. - Т. 11. -№. 11. - С. 453.
65. Lu, L. Dying relu and initialization: Theory and numerical examples / L. Lu // Communications in Computational Physics. - 2020. - №28(5). - С. 1671-1706.
66. Lyakhov, P., Kiladze, M., Lyakhova, U. System for Neural Network Determination of Atrial Fibrillation on ECG Signals with Wavelet-Based Preprocessing / P. Lyakhov, M. Kiladze, U. Lyakhova // Applied Science. 2021. - T. 11. - P. 7213.
67. Mackay, J., Mensah, G., Mendis, S., Greenland K. The Atlas of Heart Disease and Stroke // World Health Organization and U. S. Centers for Disease Control and Prevention. - 2004
68. Maglogiannis, I. G., Karpouzis, K., Wallace, M. Image and Signal Processing for Networked E-health Applications / I. G. Maglogiannis, K. Karpouzis, M. Wallace, - Morgan & Claypool Publishers, 2021. - c. 41.
69. Malmivuo, J., Plonsey, R. Bioelectromagnetism: Principles and Applications of Bioelectric and Biomagnetic Fields / J. Malmivuo, R. Plonsey - New York: Oxford University Press NY, - 1995. - 482 c.
70. McDonagh, T., Metra, M., Adamo, M., Gardner R.S., Baumbach A., et. al. 2021 ESC Guidelines for the diagnosis and treatment of acute and chronic heart failure / T. McDonagh, M. Metra, M. Adamo, R.S. Gardner, A. Baumbach, et. al. // European Heart Journal. - 2021. - С. 1-128.
71. National Heart, Lung, and Blood Institute. The healthy heart handbook for women // NIHWebsite URL: www.nhlbi.nih.gov/hbp/ issues / issues.htm (дата обращения: 31.01.2024).
72. Noncommunicable Diseases, Rehabilitation and Disability (NCD). WHO Global NCD Action Plan 2013-2020. - Geneva: World Health Organization, 2013. - 55 c.
73. Ortín, S. et al. Automated real-time method for ventricular heartbeat classification / S. Ortín et al. // Computer methods and programs in biomedicine. - 2019. - T. 169. - C. 1-8.
74. Perez Alday, E. A., et al. (2022). Classification of 12-lead ECGs: The PhysioNet/Computing in Cardiology Challenge 2020 (version 1.0.2). PhysioNet / E. A. Perez Alday, et al. // Physiol Meas. - 2020. - № 41. - C. 124003.
75. Perez Alday, E. A., et al. (2022). Classification of 12-lead ECGs: The PhysioNet/Computing in Cardiology Challenge 2020 (version 1.0.2). PhysioNet / E. A. Perez Alday, et al. // Physiol Meas. - 2020. - № 41. - C. 124003.
76. Pérez-Riera, A.R., Barbosa-Barros, R., Daminello-Raimundo, R., de Abreu, L.C., Main artifacts in electrocardiography / A.R. Pérez-Riera, R. Barbosa-Barros, R. Daminello-Raimundo, L.C. de Abreu // Ann Noninvasive Electrocardiol. - 2018. -№23(2). - C. e12494.
77. Petrov, E. Ye., Kazakov, Yu. M., Chekalina, N. I., Some features of risk factors forcoronary heart disease in women. / E. Ye. Petrov, Yu. M. Kazakov, N. I. Chekalina // Bulletin of problems in biology and medicine. - 2014. - №1(106). - C. 2330.
78. Prabhakararao, E., Dandapat, D. Multi-Scale Convolutional Neural Network Ensemble for Multi-Class Arrhythmia Classification / E. Prabhakararao, D. Dandapat // IEEE Journal of Biomedical and Health Informatics. - 2022. - №26(8). - C. 3802-3812.
79. Qi, M. et al. Arrhythmia classification detection based on multiple electrocardiograms databases / M. Qi et al. //Plos one. - 2023. - T. 18. - №. 9. - C. e0290995.
80. Rubel, P., et.al. SCP-ECG V3.0: An Enhanced Standard Communication Protocol for Computer-assisted Electrocardiography / P. Rubel, et.al. // Computing in Cardiology. - 2016. - №43. - c. 309-312.
81. Rushmer, R. F. Cardiovascular dynamics / R. F. Rushmer //Cardiovascular dynamics. - 1970. - С. 559-559.
82. Safdar, M.F., Nowak, R.M., Palka, P. A. Denoising and Fourier Transformation-Based Spectrograms in ECG Classification Using Convolutional Neural Network / Safdar M.F., Nowak R.M., Palka, P. A. // Sensors. - 2022. - №22. - С. 9576.
83. Santry, D. J. Demystifying deep learning: An introduction to the mathematics of neural networks / D. J. Santry - New Jersey: John Wiley & Sons, 2024. -246 с.
84. Smigiel, S. ECG Classification Using Orthogonal Matching Pursuit and Machine Learning / S. Smigiel // Sensors . - 2022. - №22. - С. 4960.
85. Schamroth, L. An introduction to electrocardiography / L. Schamroth -1971. - №. 4th edition. - С. 212pp.
86. Tompkins, W.J. Biomedical Digital Signal Processing / W.J. Tompkins -Englewood Cliffs: Prentice-Hall, Upper Saddle River, 1993. - 368 с.
87. Topol, E.J. High-performance medicine: the convergence of human and artificial intelligence / E.J. Topol // Nature Medicine. - 2019. - №25. - c. 44-56.
88. Venton, J. et al. Robustness of convolutional neural networks to physiological electrocardiogram noise / J. Venton et al. // Philosophical Transactions of the Royal Society A. - 2021. - Т. 379. - №. 2212. - С. 20200262.
89. Wagner, P., et al. (2020), PTB-XL: A Large Publicly Available ECG Dataset / P. Wagner, et al. // Scientific data. - 2020. - Т. 7. - №. 1. - С. 1-15.
90. Wang, J., Li W., Atrial Fibrillation Detection and ECG Classification based on CNN-BiLSTM // Electrical Engineering and Systems Science, Signal Processing. -2020. - №12. - С. 40-56.
91. Webster, J. G. Medical instrumentation: application and design / J.G. Webster - John Wiley & Sons, 2009. - 715c.
92. WHO list of priority medical devices for management of cardiovascular diseases and diabetes. - WHO medical device technical series изд. - Geneva: World Health Organization, 2021. - 316 с.
93. World health statistics 2024: monitoring health for the SDGs, Sustainable Development Goals. - Geneva: World Health Organization, 2024. - 86 c.
94. Xiuzhu, Y., Xinyue, Z., Mengyao, Y., Lin, Z. 12-Lead ECG arrhythmia classification using cascaded convolutional neural network and expert feature / Y. Xiuzhu, Z. Xinyue, Y. Mengyao, Z. Lin // Journal of Electrocardiology. - 2021. - №67. -C. 56-62.
95. Xu, Y., Goodacre, R. On Splitting Training and Validation Set: A Comparative Study of Cross-Validation, Bootstrap and Systematic Sampling for Estimating the Generalization Performance of Supervised Learning / Y. Xu, R. Goodacre // Journal of Analysis and Testing. - 2018. - №2(3). - C. 249-262.
96. Zahid, M. U. et al. Robust R-peak detection in low-quality holter ECGs using 1D convolutional neural network / M. U. Zahid et al. // IEEE Transactions on Biomedical Engineering. - 2021. - T. 69. - №. 1. - C. 119-128.
97. Zhang, C., Si, Y., Yang, W., Wang, D. F. A Robust Multilevel DWT Densely Network for Cardiovascular Disease Classification / C. Zhang, Y. Si, W. Yang, D.F. Wang // Sensors. - 2020. - №20. - C. 4777.
98. Zhang, D. et al. Interpretable deep learning for automatic diagnosis of 12-lead electrocardiogram / D. Zhang, et al. // Iscience. - 2021. - T. 24. - №. 4.
99. Zhang, J. et al. MLBF-Net: A multi-lead-branch fusion network for multi-class arrhythmia classification using 12-Lead ECG / J. Zhang, et al. //IEEE journal of translational engineering in health and medicine. - 2021. - T. 9. - C. 1-11.
100. Zhao, Z. et al. Analysis of an adaptive lead weighted ResNet for multiclass classification of 12-lead ECGs / Z. Zhao et al. // Physiological Measurement. - 2022. -T. 43. - №. 3. - C. 034001.
101. Zhao, Z. et.al. Adaptive lead weighted ResNet trained with different duration signals for classifying 12-lead ECGs // 2020 Computing in Cardiology Conference. -Rimini, Italy: IEEE, 2020. - C. 1-4.
102. Zhaowei, Zh., et al. Identification of 27 abnormalities from multi-lead ECG signals: an ensembled SE_ResNet framework with Sign Loss function / Zh. Zhaowei // Physiological Measurement. - 2021. - №42. - C. 065008.
103. Zhuoyang, X., et al. Abnormality classification from electrocardiograms with various lead combinations / X. Zhuoyang, et al. // Physiol. Meas. - 2022. - №43. -C.074002.
ПРИЛОЖЕНИЕ А. Листинг метода классификации одноканальных
сигналов электрокардиограмм
%Загрузка данных load PhysionetData
%длина сигнала L = cellfun(@length,Signals); h = histogram(L); xticks(0:3000: 18000); xticklabels(0:3000:18000); title(,Число отсчетов сигналов') xlabel('OTC4eTbi сигналов') ylabel('Число сигналов')
%сегментация сигнала
[Signals,Labels] = segmentSignals(Signals,Labels);
%число сигналов после сегментации
a=numel(Labels)
b=numel(Signals)
%примеры сигналов зашумленных normal = Signals {1}; aFib = Signals{5};
%визуализация зашумленных сигналов figure
subplot(2,1,1); plot(normal(4000:5200))
title('Зашумленный сигнал категории "Нормальный сигнал" ')
subplot(2,1,2); plot(aFib(4000:5200))
title('Зашумленный сигнал категории "Фибрилляция предсе?рдий" ')
%подавление шума D5denoise = denois1(Signals); D5denoise=Signals;
%примеры шумопадавленных сигналов normal = Signals {1};
aFib = Signals{5};
%визуализация сигнала figure
subplot(2,1,1); plot(normal(4000:5200))
title('Шумопадавленный сигнал категории "Нормальный сигнал" ')
subplot(2,1,2); plot(aFib(4000:5200))
title('Шумопадавленный сигнал категории "Фибрилляция предсердий" ')
%Разбиение на категории afibX = Signals(Labels=='A'); afibY = Labels(Labels=='A');
normalX = Signals(Labels=='N'); normalY = Labels(Labels=='N');
%база для обучения
[trainIndA,~,testIndA] = dividerand(718,0.7,0.0,0.3); [trainIndN,~,testIndN] = dividerand(4937,0.7,0.0,0.3);
XTrainA = afibX(trainIndA); YTrainA = afibY(trainIndA);
XTrainN = normalX(trainIndN); YTrainN = normalY(trainIndN);
XTestA = afibX(testIndA); YTestA = afibY(testIndA);
XTestN = normalX(testIndN); YTestN = normalY(testIndN);
%%уравнивание
XTrain = [repmat(XTrainA(1:503),6,1); XTrainN(1:3018)]; YTrain = [repmat(YTrainA(1:503),6,1); YTrainN(1:3018)];
XTest = [repmat(XTestA( 1:215),6,1); XTestN(1:1290)]; YTest = [repmat(YTestA(1:215),6,1); YTestN(1:1290);];
%Выделение морфологических признаков % задаваемая частота fs = 300;
% мгоновеная частота [instFreqA,tA] = instfreq(aFib,fs); [instFreqN,tN] = instfreq(normal,fs);
figure
subplot(2,1,1); plot(tN,instFreqN) title(,Нормальй сигнал') х1аЬе1('Время (с)') у1аЬе1('Мгновеная частота')
subplot(2,1,2); plot(tA,instFreqA) title('Фибрилляция предсердий') х1аЬе1('Время (с)') у1аЬе1('Мгновеная частота')
% спектральная энтропия [pentropyA,tA2] = pentropy(aFib,fs); [pentropyN,tN2] = pentropy(normal,fs);
figure
subplot(2,1,1) plot(tN2,pentropyN) title('Normal Signal') ylabel('Spectral Entropy')
subplot(2,1,2) plot(tA2,pentropyA) title('AFib Signal') xlabel('Time (s)') ylabel('Spectral Entropy')
instfreqTrain = cellfun(@(x)instfreq(x,fs)',XTrain,'UniformOutput',false); instfreqTest = cellfun(@(x)instfreq(x,fs)',XTest,'UniformOutput',false);
pentropyTrain = cellfun(@(x)pentropy(x,fs)',XTrain,'UniformOutput',false); pentropyTest = cellfun(@(x)pentropy(x,fs)',XTest,'UniformOutput',false);
%Объединение вектор-признаков
XTrain2 = cellfun(@(x,y)[x;y],instfreqTrain,pentropyTrain,'UniformOutput',false); XTest2 = cellfun(@(x,y)[x;y],instfreqTest,pentropyTest,'UniformOutput',false);
%Описание архитектуры рекуррентной сети layers = [ ...
sequenceInputLayer(2) bilstmLayer(100,'0utputMode','last') fullyConnectedLayer(2) softmaxLayer
classificationLayer ]
options = training0ptions('adam', ... 'MaxEpochs',30, ... 'MiniBatchSize', 20, ... 'InitialLearnRate', 0.01, ... 'GradientThreshold', 1, ... 'ExecutionEnvironment',"auto",... 'plots','training-progress', ... 'Verbose',true,...
'ValidationData', {XTest2,YTest}');
% Обучение предложенной архитектуры
net = trainNetwork(XTrain2,YTrain,layers,options);
%Оценка
trainPred2 = classify(net,XTrain2);
LSTMAccuracy = sum(trainPred2 == YTrain)/numel(YTrain)*100 figure
confusionchart(YTrain,trainPred2,'ColumnSummary','column-normalized',...
'RowSummary','row-normalized','Title','Confusion Chart for LSTM');
testPred2 = classify(net,XTest2);
LSTMAccuracy = sum(testPred2 == YTest)/numel(YTest)*100 figure
confusionchart(YTest,testPred2,'ColumnSummary','column-normalized',...
'RowSummary','row-normalized','Title','Confusion Chart for LSTM');
ПРИЛОЖЕНИЕ Б. Листинг мультимодальной системы классификации 12-канальных сигналов электрокардиограмм
import pandas as pd import os
import numpy as np import cv2
from PIL import Image
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
from torch.autograd import Variable
from sklearn.preprocessing import LabelEncoder
import matplotlib.pyplot as plt
import matplotlib
import scipy.io
import time
class CombineDataset(Dataset):
def_init_(self, frame, id_col, label_name, ecg_name, path_ecg):
self.frame = frame self.id_col = id_col self.label_name = label_name self.ecg_name = ecg_name self.path_ecg = path_ecg
def_len_(self):
return (self.frame.shape[0])
def_getitem_(self, idx):
if torch.is_tensor(idx):
idx = idx.tolist() ecg_name = self.frame[self.id_col].iloc[idx] ecg = os.path.join(self.path_ecg, ecg_name +'.mat') ecg = scipy.io.loadmat(ecg) ecg = ecg['val']
feats = [feat for feat in self.frame.columns if feat not in [self.label_name,self.id_col]]
feats = np.array(self.frame[feats].iloc[idx])
feats = feats.tolist() feats = torch.FloatTensor(feats) label = np.array(self.frame[self.label_name].iloc[idx]) label = torch.tensor(label, dtype=torch.long) name = self.frame[self.ecg_name].iloc[idx] #label = torch.tensor(label, dtype=torch.float) return ecg, feats, name, labe class Sampler(object):
def_init_(self, data_source):
pass
def_iter_(self):
raise NotlmplementedError
def_len_(self):
raise NotlmplementedError class StratifiedSampler(Sampler):
def_init_(self, class_vector, y):
self.n_splits = 1
self.class_vector = class_vector self.test_size = test_size def gen_sample_array(self): try:
from sklearn.model_selection import StratifiedShuffleSplit except:
print('Ошибка распределения изображений') import numpy as np
s = StratifiedShuffleSplit(n_splits=self.n_splits, test_size=self.test_size) X = torch.randn(self.class_vector.size(0),2).numpy() y = self.class_vector.numpy() s.get_n_splits(X, y)
train_index, test_index= next(s.split(X, y)) return train_index, test_index
def_iter_(self):
return iter(self. gen_sample_array())
def_len_(self):
return len(self.class_vector) # Определение процессора для обучения def get_default_device(): if torch.cuda.is_available(): return torch.device('cuda')
else:
return torch.device('cpu') metadata = pd.read_csv('E:\\Ea3a 3Kr\\metadata.csv') data_dir = "E:\\Ea3a 3Kr\\WFDBRecords\\" batch_size = 32 device = get_default_device() metadata_age = metadata[['Age']] Age_grup = []
for i in metadata_age['Age']: if i <= 44: Age_grup += ['young'] #print('MO^ogofi') elif 45 <= i <= 59:
Age_grup += ['middle'] #print('cpegHHH') elif 60 <= i <= 74: Age_grup += ['elderly'] #print('no^H^ofi') elif 75 <= i:
Age_grup += ['senile'] #print('go^ro^HTe^n') else:
Age_grup += ['error'] #print('omHÖKa') metadata['Age'] = Age_grup
encode_map_categor = {'Sinus Bradycardia': 0, 'Atrial Fibrillation': 1, 'Sinus Rhythm': 2, 'Sinus Tachycardia': 3, 'Atrial Flutter': 4} encode_map_age = {'young': 0, 'middle': 1, 'elderly': 2, 'senile': 3} encode_map_sex = {'Male': 0, 'Female': 1}
metadata['Diagnosis'].replace(encode_map_categor, inplace=True) metadata['Age'] .replace(encode_map_age, inplace=True) metadata['Sex'] .replace(encode_map_sex, inplace=True) label_images = [] le = LabelEncoder()
label_encoded1 = le.fit_transform(metadata['Diagnosis'].astype(str)) metadata['Diagnosis'] = label_encoded1 label_encoded2 = le.fit_transform(metadata['Age'].astype(str)) metadata['Age'] = label_encoded2
label_encoded3 = le.fit_transform(metadata['Sex'].astype(str))
metadata['Sex'] = label_encoded3 test_size = 0.2
data_label = metadata['Diagnosis'] .to_numpy() ss = StratifiedSampler(torch.FloatTensor(data_label), test_size) pre_train_indices, test_indices = ss.gen_sample_array() indices = {'train': pre_train_indices,
'test': test_indices} val_size = 0.2
data_label = metadata['Diagnosis'] .to_numpy() ss = StratifiedSampler(torch.FloatTensor(data_label), val_size) pre_val_indices, val_indices = ss.gen_sample_array() indices = {'train': pre_train_indices, 'val': val_indices, 'test': test_indices} train_indices = indices['train'] val_indices = indices ['val'] test_indices = indices['test']
#Выводим индексы для разделения базы изображений print(мРазмер тренировочной базы:", len(train_indices)) print(мРазмер валидационной базы:", len(val_indices)) рпП;("Размер тестовой базы:", len(test_indices)) classes = np.unique(data_label)
weights = compute_class_weight('balanced', classes=classes, y=data_label)
weights = torch.FloatTensor(weights).to(device)
weights
label_images = [] le = LabelEncoder()
label_encoded1 = le.fit_transform(metadata['Diagnosis'].astype(str)) metadata['Diagnosis'] = label_encoded1 label_encoded2 = le.fit_transform(metadata['Age'].astype(str)) metadata['Age'] = label_encoded2
label_encoded3 = le.fit_transform(metadata['Sex'].astype(str)) metadata['Sex'] = label_encoded3
data_set = CombineDataset(metadata,'Signals','Diagnosis','Signals',data_dir) trainloader = torch.utils.data.DataLoader(data_set, batch_size = batch_size, shuffle = False, sampler = train_indices)
validatloader = torch.utils.data.DataLoader(data_set, batch_size = batch_size, shuffle = False, sampler = test_indices) class LSTM(nn.Module):
def_init_(self, num_classes, input_size, hidden_size, num_layers):
super(LSTM, self)._init_()
self.num_classes = num_classes self.num_layers = num_layers self.input_size = input_size self.hidden_size = hidden_size
self.lstml = nn.LSTM(input_size = input_size, hidden_size = hidden_size, num_layers = num_layers, batch_first = True)
self.lstm2 = nn.LSTM(input_size = hidden_size, hidden_size = hidden_size, num_layers = num_layers, batch_first = True)
self.lstm3 = nn.LSTM(input_size = hidden_size, hidden_size = hidden_size, self.relu = nn.ReLU() self.batchnorml = nn.BatchNorm1d(64) self.fc = nn.Linear(hidden_size, num_classes) def forward(self,x):
h_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size)) c_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size)) h_0 = h_0.to(device) c_0 = c_0.to(device)
output, (hn, cn) = self.lstm1(x, (h_0, c_0)) output, (hn, cn) = self.lstm2(output, (hn, cn)) output, (hn, cn) = self.lstm3(output, (hn, cn)) hn = hn.view(-1, self.hidden_size) out = self.relu(hn) out = self.batchnorm1(out) out = self.fc(out) return out num_epochs = 15 input_size = 5000 hidden_size = 64 num_layers = 1 num_classes = 5
lstm = LSTM(num_classes, input_size, hidden_size, num_layers)
lstm = lstm.to(device)
lstm
#criterion = nn.CrossEntropyLoss(weight = weights).to(device) criterion = nn.CrossEntropyLoss().to(device) criterion2 = nn.CrossEntropyLoss(size_average=False).to(device) optimizer = torch.optim.Adam(lstm.parameters())
train_losses_lstm = [] train_counter_lstm = [] train_acc_lstm = [] test_losses_lstm = []
test_counter_lstm = [i*len(train_indices) for i in range(num_epochs + 1)] test_acc_lstm = [] def train(num_epochs): lstm.train() train_accuracy = 0 total = 0 correct = 0 acc = 0
for i, data in enumerate(trainloader): ecg, meta, name, targets = data ecg = ecg.float()
ecg, meta, targets = ecg.to(device), meta.to(device), targets.to(device)
optimizer.zero_grad()
output = lstm.forward(ecg)
loss = criterion(output, targets)
loss.backward()
optimizer.step()
_, predicted = torch.max(output, 1) total += targets.size(0)
correct += (predicted == targets).sum().item() train_accuracy = 100 * correct / total if i % 10 == 0:
рпп^'Тренировочная эпоха: {} [{}/{} ({:.0f}%)]\t\t | Ошибка: {:.4f}\t | Точность распознавания: {:.2f}'.format(num_epochs, batch_size * i, len(train_indices), 100 * i / len(trainloader), loss.item(), train_accuracy)) train_losses_lstm.append(loss.item()) train_counter_lstm.append((i*batch_size) + ((num_epochs-1)*len(train_indices)))
train_acc_lstm. append(train_accuracy) def test(): lstm.eval() test_loss = 0 correct = 0 test_accuracy = 0 with torch.no_grad():
for data in validatloader:
ecg, meta, name, targets = data ecg = ecg.float()
ecg, meta, targets = ecg.to(device), meta.to(device), targets.to(device) output = lstm(ecg)
test_loss += criterion2(output, targets).item() pred = torch.max(torch.exp(output), 1)[1] #targets = targets.cpu().data.numpy() correct += pred.eq(targets.data.view_as(pred)).sum() print('\nИстинные значения:\t {}'.format(targets)) print('Предсказанные значения: \t {}'.format(pred)) test_loss /= len(test_indices) test_accuracy = 100 * correct / len(test_indices) test_accuracy = test_accuracy.cpu()
print ('\пТестовые изображения. Ошибка: {:.4f} \t | Точность распознавания: {}/{} ({:.2f}%)\n'.format(test_loss, correct, len(test_indices), test_accuracy)) test_acc_lstm.append(test_accuracy) test_losses_lstm.append(test_loss) start_time_glob = time.time() start_time_test = time.time() test()
time_test = time.time()-start_time_test
#print ('—Время тестирования: {}\n'.format(time.strftime("%H:%M:%S", time. gmtime(time_test)))) for num_epochs in range(1, num_epochs + 1): start_time_tarin = time.time() train(num_epochs)
time_tarin = time.time()-start_time_tarin
#print ('—Время обучения за эпоху: {}\n'.format(time.strftime("%H:%M:%S", time. gmtime(time_tarin)))) start_time_test = time.time() test()
time_test = time.time()-start_time_test
#print ('—Время тестирования: {} \n'.format(time.strftime("%H:%M:%S", time. gmtime(time_test)))) time_glob = time.time()-start_time_glob
print ('—Общее время обучения: {}\n'.format(time.strftime("%H:%M:%S",
time. gmtime(time_glob))))
from sklearn.metrics import confusion_matrix
import seaborn as sns
actuals = [] predictions = [] with torch.no_grad():
ecg, meta, name, targets = data ecg = ecg.float()
ecg, meta, targets = ecg.to(device), meta.to(device), targets.to(device) output = lstm(ecg)
pred = (torch.max(torch.exp(output), 1)[1]).cpu().data.numpy() predictions. extend(pred) targets = targets.cpu().data.numpy() actuals. extend(targets) matrix = confusion_matrix(predictions, actuals) categor = ['СБ', МА', 'СР', 'СТ', 'ТП'] df_matrix = pd.DataFrame(matrix, categor, categor) plt.rcParams['font.size'] = '14' plt.figure(figsize = (5,4))
sns.heatmap(df_matrix, annot=True, fmt="d", cmap='Blues') plt.xlabel(" Истинные значения") plt.ylabel("Предсказанные значения") plt.show()
cm = confusion_matrix(actuals, predictions)
FP = np.mean(cm.sum(axis=0) - np.diag(cm))
FN = np.mean(cm.sum(axis=1) - np.diag(cm))
TP = np.mean(np.diag(cm))
TN = np.mean(cm.sum() - (FP + FN + TP))
Sensitivity = (TP/(TP+FN))
Specificity = (TN/(TN+FP))
Precision = (TP/(TP+FP))
NPV = (TN/(TN+FN))
PPV = (TP/(TP+FP))
FNR = (FN/(FN+TP))
FPR = (FP/(FP+TN))
F1 = (2 * TP)/((2 * TP)+FP+FN)
print('Sensitivity: %f % Sensitivity)
print('Specificity: %f % Specificity)
print('Precision: %f % Precision)
print('NPV: %f % NPV)
print('PPV: %f % PPV) print('FNR: %f % FNR) print('FPR: %f % FPR) print('F1: %f % F1)
class ClassificationMETADATA(nn.Module):
def_init_(self):
super(ClassificationMETADATA, self).__init__() self.layer_1 = nn.Linear(2, 64) self.relu1 = nn.ReLU() self.batchnorm1 = nn.BatchNorm1d(64) self.layer_2 = nn.Linear(64, 32) self.relu2 = nn.ReLU() self.batchnorm2 = nn.BatchNorm1d(32) self.layer_out = nn.Linear(32, 5) def forward(self, inputs): x = self.layer_1(inputs) x = self.relu1(x) x = self.batchnorm1(x) x = self.layer_2(x) x = self.relu2(x) x = self.batchnorm2(x) x = self.layer_out(x) return x
NNMetaData = ClassificationMETADATA()
NNMetaData = NNMetaData.to(device)
criterion = nn.CrossEntropyLoss().to(device)
criterion2 = nn.CrossEntropyLoss(size_average=False).to(device)
optimizer = torch.optim.Adam(NNMetaData.parameters())
train_losses_Meta = []
train_counter_Meta = []
train_acc_Meta = []
test_losses_Meta = []
test_counter_Meta = [i*len(train_indices) for i in range(num_epochs + 1)] test_acc_Meta = [] def train(num_epochs): NNMetaData.train() train_accuracy = 0 total = 0 correct = 0
acc = 0
for i, data in enumerate(trainloader): ecg, meta, name, targets = data meta, targets = meta.to(device), targets.to(device) optimizer.zero_grad() output = NNMetaData.forward(meta) loss = criterion(output, targets) loss.backward() optimizer.step()
_, predicted = torch.max(output, 1) total += targets.size(0)
correct += (predicted == targets).sum().item() train_accuracy = 100 * correct / total if i % 10 == 0:
рпп^'Тренировочная эпоха: {} [{}/{} ({:.0f}%)]\t\t | Ошибка: {:.4f}\t | Точность распознавания: {:.2f}'.format(num_epochs, batch_size * i, len(train_indices), 100 * i / len(trainloader), loss.item(), train_accuracy)) train_losses_Meta.append(loss.item()) train_counter_Meta.append((i*batch_size) + ((num_epochs-1)*len(train_indices)))
train_acc_Meta.append(train_accuracy) def test(): NNMetaData.eval() test_loss = 0 correct = 0 test_accuracy = 0 with torch.no_grad(): for data in validatloader:
ecg, meta, name, targets = data meta, targets = meta.to(device), targets.to(device) output = NNMetaData.forward(meta) test_loss += criterion2(output, targets).item() pred = torch.max(torch.exp(output), 1)[1] #targets = targets.cpu().data.numpy() correct += pred.eq(targets.data.view_as(pred)).sum() print('\nИстинные значения:\t {}'.format(targets)) print('Предсказанные значения: \t {}'.format(pred)) test_loss /= len(test_indices) test_accuracy = 100 * correct / len(test_indices)
test_accuracy = test_accuracy.cpu()
print ('\пТестовые изображения. Ошибка: {:.4f} \t | Точность распознавания: {}/{} ({:.2f}%)\n'.format(test_loss, correct, len(test_indices), test_accuracy)) test_acc_Meta.append(test_accuracy) test_losses_Meta.append(test_loss) start_time_glob = time.time() start_time_test = time.time() test()
time_test = time.time()-start_time_test
#print ('—Время тестирования: {}\n'.format(time.strftime("%H:%M:%S", time. gmtime(time_test)))) for num_epochs in range(1, num_epochs + 1): start_time_tarin = time.time() train(num_epochs)
time_tarin = time.time()-start_time_tarin
#print ('—Время обучения за эпоху: {}\n'.format(time.strftime("%H:%M:%S", time. gmtime(time_tarin)))) start_time_test = time.time() test()
time_test = time.time()-start_time_test
#print ('—Время тестирования: {} \n'.format(time.strftime("%H:%M:%S", time. gmtime(time_test)))) time_glob = time.time()-start_time_glob
print ('—Общее время обучения: {}\n'.format(time.strftime("%H:%M:%S", time. gmtime(time_glob)))) actuals = [] predictions = [] with torch.no_grad(): for data in validatloader:
ecg, meta, name, targets = data
meta, targets = meta.to(device), targets.to(device)
output = NNMetaData.forward(meta)
pred = (torch.max(torch.exp(output), 1)[1]).cpu().data.numpy() predictions. extend(pred) targets = targets.cpu().data.numpy() actuals. extend(targets) matrix = confusion_matrix(predictions, actuals) categor = ['СБ', МА', 'СР', 'СТ', 'ТП'] df_matrix = pd.DataFrame(matrix, categor, categor)
plt.rcParams['font.size'] = '14' plt.figure(figsize = (5,4))
sns.heatmap(df_matrix, annot=True, fmt="d", cmap='Blues') plt.xlabel(" Истинные значения") plt.ylabel("Предсказанные значения") plt.show()
cm = confusion_matrix(actuals, predictions)
FP = np.mean(cm.sum(axis=0) - np.diag(cm))
FN = np.mean(cm.sum(axis=1) - np.diag(cm))
TP = np.mean(np.diag(cm))
TN = np.mean(cm.sum() - (FP + FN + TP))
Sensitivity = (TP/(TP+FN))
Specificity = (TN/(TN+FP))
Precision = (TP/(TP+FP))
NPV = (TN/(TN+FN))
PPV = (TP/(TP+FP))
FNR = (FN/(FN+TP))
FPR = (FP/(FP+TN))
F1 = (2 * TP)/((2 * TP)+FP+FN)
class LSTM_M(nn.Module):
def_init_(self, num_classes, input_size, hidden_size, num_layers):
super(LSTM_M, self).__init__() self.num_classes = num_classes self.num_layers = num_layers self.input_size = input_size self.hidden_size = hidden_size
self.lstm1 = nn.LSTM(input_size = input_size, hidden_size = hidden_size, num_layers = num_layers, batch_first = True)
self.lstm2 = nn.LSTM(input_size = hidden_size, hidden_size = hidden_size, num_layers = num_layers, batch_first = True)
self.lstm3 = nn.LSTM(input_size = hidden_size, hidden_size = hidden_size, num_layers = num_layers, batch_first = True) self.relu = nn.ReLU() self.batchnorm1 = nn.BatchNorm1d(64) self.fc = nn.Linear(hidden_size, num_classes) def forward(self,x):
h_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size)) c_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size)) h_0 = h_0.to(device)
c_0 = c_0.to(device)
output, (hn, cn) = self.lstm1(x, (h_0, c_0))
output, (hn, cn) = self.lstm2(output, (hn, cn))
output, (hn, cn) = self.lstm3(output, (hn, cn))
hn = hn.view(-1, self.hidden_size)
out = self.relu(hn)
out = self.batchnorm1(out)
out = self.fc(out)
return out
lstm_M = LSTM_M (num_classes, input_size, hidden_size, num_layers) class Classification_M(nn.Module):
def_init_(self):
super(Classification_M, self)._init_()
self.layer_1 = nn.Linear(2, 64) self.relu1 = nn.ReLU() self.batchnorm1 = nn.BatchNorm1d(64) self.dropout1 = nn.Dropout(p=0.1) self.layer_2 = nn.Linear(64, 32) self.relu2 = nn.ReLU() self.batchnorm2 = nn.BatchNorm1d(32) self.dropout2 = nn.Dropout(p=0.1) self.layer_out = nn.Linear(32, 5) def forward(self, inputs): x = self.layer_1(inputs) x = self.relu1(x) x = self.batchnorm1(x) x = self.dropout1(x) x = self.layer_2(x) x = self.relu2(x) x = self.batchnorm2(x) x = self.dropout2(x) x = self.layer_out(x) return x Class_M = Classification_M() class LSTM_MetaData(nn.Module):
def_init_(self):
super(L S TM_MetaData, self)._init_()
self.lstm = lstm_M self.meta net = Class M
self.out = nn.Linear(5+5, 5) def forward(self, ecg , tab): ecg = self.lstm(ecg) ecg = ecg.reshape(ecg.shape[0], -1) tab = self.meta_net(tab) x = torch.cat((ecg, tab),1) x = self.out(x) return x
Itog_model = LSTM_MetaData() Itog_model = Itog_model.to(device) Itog_model
criterion = nn.CrossEntropyLoss().to(device)
optimizer = torch.optim.Adam(Itog_model.parameters())
train_losses_Itog = []
train_counter_Itog = []
train_acc_Itog = []
test_losses_Itog = []
test_counter_Itog = [i*len(train_indices) for i in range(num_epochs + 1)] test_acc_Itog = [] def train(num_epochs): Itog_model.train() train_accuracy = 0 total = 0 correct = 0 acc = 0
for i, data in enumerate(trainloader): ecg, meta, name, targets = data ecg = ecg.float()
ecg, meta, targets = ecg.to(device), meta.to(device), targets.to(device)
optimizer.zero_grad()
output = Itog_model.forward(ecg, meta)
loss = criterion(output, targets)
loss.backward()
optimizer.step()
_, predicted = torch.max(output, 1) total += targets.size(0)
correct += (predicted == targets).sum().item() train_accuracy = 100 * correct / total if i % 10 == 0:
рпд^Тренировочная эпоха: {} [{}/{} ({:.0f}%)]\t\t | Ошибка: {:.4f}\t | Точность распознавания: {:.2f}'.format(num_epochs, batch_size * i, len(train_indices), 100 * i / len(trainloader), loss.item(), train_accuracy)) train_losses_Itog.append(loss.item()) train_counter_Itog.append((i*batch_size) + ((num_epochs-1)*len(train_indices)))
train_acc_Itog.append(train_accuracy) def test():
Itog_model.eval() test_loss = 0 correct = 0 test_accuracy = 0 with torch.no_grad(): for data in validatloader:
ecg, meta, name, targets = data ecg = ecg.float()
ecg, meta, targets = ecg.to(device), meta.to(device), targets.to(device) output = Itog_model.forward(ecg, meta) test_loss += criterion2(output, targets).item() pred = torch.max(torch.exp(output), 1)[1] #targets = targets.cpu().data.numpy() correct += pred.eq(targets.data.view_as(pred)).sum() print('\nИстинные значения:\t {}'.format(targets)) print('Предсказанные значения: \t {}'.format(pred)) test_loss /= len(test_indices) test_accuracy = 100 * correct / len(test_indices) test_accuracy = test_accuracy.cpu()
print ('\пТестовые изображения. Ошибка: {:.4f} \t | Точность распознавания: {}/{} ({:.2f}%)\n'.format(test_loss, correct, len(test_indices), test_accuracy)) test_acc_Itog.append(test_accuracy) test_losses_Itog.append(test_loss) start_time_glob = time.time() start_time_test = time.time() test()
time_test = time.time()-start_time_test
#print ('—Время тестирования: {}\n'.format(time.strftime("%H:%M:%S", time. gmtime(time_test)))) for num_epochs in range(1, num_epochs + 1): start_time_tarin = time.time()
train(num_epochs)
time_tarin = time.time()-start_time_tarin
#print ('—Время обучения за эпоху: {}\n'.format(time.strftime(M%H:%M:%SM, time. gmtime(time_tarin)))) start_time_test = time.time() test()
time_test = time.time()-start_time_test
Обратите внимание, представленные выше научные тексты размещены для ознакомления и получены посредством распознавания оригинальных текстов диссертаций (OCR). В связи с чем, в них могут содержаться ошибки, связанные с несовершенством алгоритмов распознавания. В PDF файлах диссертаций и авторефератов, которые мы доставляем, подобных ошибок нет.