Как обучить классификатор AF с помощью ResNet?

Фибрилляция предсердий - наиболее распространенный вид нерегулярного сердцебиения, встречающийся у 1–2% населения (у пожилых - до 5–15%) [1]. Причина заболевания обычно возникает из-за побочных эффектов других заболеваний, таких как сердечный приступ или высокое кровяное давление. Симптомы включают боль в груди, учащенное сердцебиение, одышку и усталость, а в смертельных случаях даже инсульт. Для тех, у кого есть ФП, но еще нет явных симптомов, это будет называться тихой ФП или бессимптомной ФП [2].

После положительного диагноза ФП обычно бывает 4-5 стадий ФП, которые классифицируются по длине и тяжести заболевания в соответствии с Рекомендациями AHA / ACC / HRS по ведению пациентов с фибрилляцией предсердий от 2014 г. [3]. Поскольку я не физиолог, я не буду вдаваться в подробности, но стадии, на которых я сосредотачиваюсь, называются пароксизмальной стадией, симптомы которой лучше всего описать как:

  • Испытайте автофокусировку за короткий промежуток времени
  • Эпизод обычно прекращается в течение 24 часов.
  • Симптомы могут длиться до 7 дней.

Эта стадия интересна тем, что симптомы обычно трудно обнаружить (даже людьми), сигналы носят временный характер, а невозможность обнаружения на ранней стадии может привести к тому, что пациент снова вернется в гораздо худшем состоянии. Большинство людей, если они не испытывают вышеупомянутых симптомов, не обращаются в клинику, что в некоторых случаях может быть слишком поздно, когда симптомы появятся. Таким образом, если бы мы смогли улучшить процесс скрининга тихой ФП, используя пароксизмальную форму для поиска закономерностей в данных (поскольку у нас нет данных тихой ФП), пациенты с тихой ФП диагностировались бы гораздо быстрее, прежде чем их здоровье ухудшится.

Кроме того, если пациенты носят умные часы, также может быть предоставлена ​​услуга, которая может контролировать пациента в течение более длительного времени и иметь больше шансов на обнаружение ФП, поскольку симптомы проявляются только в течение короткого периода.

Наборы данных

Большинство популярных наборов данных по физиологии можно найти в PhysioNet. Для этой проблемы я буду использовать следующие наборы данных:

Обратите внимание, что для первых двух наборов данных он не содержал никаких данных, не относящихся к AF, поэтому я добавил набор данных нормального синусового ритма для представления ЭКГ нормального человека. Каждый набор данных состоит из многих часов непрерывной записи ЭКГ в 2 отведениях с частотой дискретизации 125 Гц (за исключением MIT-BIH AF, который составляет 250 Гц и должен быть понижен до 125 Гц). Чтобы скачать наборы данных, вам необходимо установить их программу.

После завершения установки вы сможете использовать такую ​​команду, как rdsamp -r afdb/05091 -c -H -f 300 -t 330 -v -ps > samples.csv, для загрузки наборов данных с веб-сайта. Я не использовал наборы данных с самого начала, потому что они в основном содержали зашумленные данные (возможно, из-за настройки оборудования).

Реализация

Я попытаюсь реализовать с использованием тех же методов и моделей, что и статья с названием 'Алгоритм ЭКГ с поддержкой искусственного интеллекта для идентификации пациентов с фибрилляцией предсердий во время синусового ритма: ретроспективный анализ прогноза исхода [4]' автор

Во-первых, мы замечаем, что данные авторов и наши совершенно разные. По данным автора, гораздо больше пациентов (~ 200 000), причем каждый пациент имеет несколько 10-секундных записей ЭКГ в 12 отведениях. Но для PhysioNet в нем очень мало пациентов (~ 50 человек, если объединить их вместе, при условии, что в каждом наборе данных есть разные пациенты), и у каждого пациента есть одна запись с длительностью в несколько часов. Для пациентов с ФП автор использовал записи ЭКГ, сделанные за месяц до того, как им был поставлен диагноз ФП. Их гипотеза заключается в том, что пароксизмальная ФП обычно проявляет некоторые более ранние симптомы, которые люди не могут обнаружить, поэтому они использовали данные до постановки диагноза ФП, но также не слишком далеко.

Поэтому я разделю длинные фрагменты данных на 10 секунд каждый, а затем разделю их на набор для обучения и набор для тестирования, используя соотношение 80:20. Выборка будет сделана таким образом, чтобы соотношение классов было равномерно сбалансированным. Всего имеется 244 359 ЭКГ в 2 отведениях.

Модель

Для архитектуры модели авторы использовали остаточную сеть CNN или ResNet, в которой 10-секундные сигналы всех отведений вставляются в модель, но у нас есть только 2 отведения ЭКГ, поэтому некоторые гиперпараметры должны быть изменены, чтобы соответствовать нашим данным. измерение.

Модель сначала выполнит свертку по временной оси, а затем по ведущей оси. Это было сделано для того, чтобы модель могла объединять функции по каждому отведению, чтобы она могла лучше обобщать, а для того, чтобы Conv2D мог работать в обоих измерениях (например, изображение), мне пришлось вставить дополнительное измерение из ( 1250,2) по (1250,1,2).

Обучение

Для обучения я буду использовать скорость обучения 1e-5 и использовать обратный вызов уменьшения скорости обучения Tensorflow, чтобы уменьшить скорость обучения до 1e-6. Размер моего пакета был 1024, и я использовал набор тестов в качестве набора для проверки, чтобы отслеживать потерю проверки. (На самом деле это должно быть train / val / test, а test не следует трогать до последней итерации, но я играл с ним, поэтому меня не особо заботила условность) В конце концов, я обычно преждевременно останавливаю обучение из-за быстрое переоснащение.

Для окончательной модели я использовал точку, в которой она имеет наименьшие потери при проверке. Я предполагаю, что ЭКГ каждого пациента в основном содержит повторяющиеся данные, и поэтому дальнейшее извлечение признаков должно помочь предотвратить переобучение.

После некоторой тренировки я оценил результаты с помощью кривой ROC, и вот что произошло.

По какой-то причине модель, казалось, правильно классифицирует каждую точку данных даже с нулевым количеством ложных срабатываний. Я искал причину и позже обнаружил, что в методе, который я использовал при разбиении набора данных, был недостаток. Оказывается, не следует смешивать данные одного и того же пациента в наборе для обучения / тестирования, потому что модель сможет сопоставить ЭКГ пациента вместо того, чтобы находить полезные функции. Поскольку в наших наборах данных небольшое количество пациентов, для модели было несложно перестроить каждого пациента и просто запомнить, у кого есть болезнь! (Оказывается, авторы не помещают одного и того же пациента в разные наборы, поэтому этой проблемы не возникало.)

Поэтому я попытался разделить набор данных другим способом. Я разделю пациентов на 2 группы, и каждый пациент будет входить только в одну группу. Изначально я не хотел делить пациентов на 80:20, потому что считаю, что, разделив пациентов 50:50, я смогу лучше понять, насколько хорошо модель будет обобщать многие характеристики ЭКГ (поскольку у каждого пациента разные ЭКГ, разные ЭКГ различаются в зависимости от частота пульса, артериальное давление, возраст, пол и т. д.). Используя этот метод, мы можем гарантировать, что для тестового набора модель никогда раньше не видела ЭКГ того же человека.

Вот результат после тренировки.

Похоже, модель теперь лучше умеет различать автофокусировку. Однако следует быть осторожным, чтобы ROC представлял каждую часть данных ЭКГ, а НЕ каждого пациента! Чтобы классифицировать пациента, нужно прогнать модель по каждой части ЭКГ и использовать некоторые эвристические методы, чтобы определить, есть ли у пациента заболевание или нет. Я еще не сделал эту часть, и было бы интересно посмотреть, какая часть длинной ЭКГ классифицирована как модель AF или нет. Это требует дальнейшего анализа. Для автора они использовали максимальное и среднее значение вероятности каждой рассматриваемой ЭКГ для каждого пациента, чтобы определить вероятность.

Дополнительно: дополнительная информация о данных ЭКГ

Как определить, какой признак указывает на заболевание ФП, а другой - нет? В этом семестре я изучал много интересных предметов, в том числе ASR (автоматическое распознавание речи). Эта область занимается проблемой огромных данных в течение многих десятилетий, поэтому у них есть различные методы анализа данных временных рядов (например, аудио) и извлечения их полезных функций. Один из методов, который я буду использовать, - это преобразование ЭКГ в спектрограмму. Спектрограмма - это визуализация нескольких срезов спектра (частотной области) вместо временной области. Это также должно дать нам новый взгляд на изучение данных.

Спектрограмма создается путем перемещения скользящих окон и выполнения БПФ (быстрого преобразования Фурье) для каждого оконного кадра. Это приведет к созданию нескольких спектров для каждого временного кадра, которые позже будут объединены в одно изображение тепловой карты. Это расскажет вам информацию о частотном распределении в каждом временном интервале.

Обратите внимание, что работа еще не завершена и требуется дальнейшее изучение.

Вот несколько случайных ЭКГ, которые я превратил в спектрограмму.

На этих ЭКГ можно найти несколько паттернов. Во-первых, вы сможете увидеть повторяющийся ритм, как сердцебиение. (Вероятно, это сердцебиение). Другой паттерн может быть обусловлен другими факторами, одним из которых, надеюсь, является болезнь ФП. Затем я запускаю каждый кадр в алгоритм кластеризации T-SNE, чтобы увидеть, как они сгруппированы в каждой настройке. Ниже приведен образец журналов моих экспериментов.

Пример 1: не AF

График внедрения T-SNE (вверху - отвод 1, а ниже - отвод 2 для каждого изображения)

* 0–62 - это хронологический порядок временных рамок спектрограммы

Пример 2: Не AF

График внедрения T-SNE

Ex 3: AF

Встраивание T-SNE

Ex 4: AF

Встраивание T-SNE

Смешивание ЭКГ 2 пациентов без ФП

  • (0–62 - пациент №1, 63–125 - пациент №2 для остальных изображений)
  • красный - AF

Смешивание ЭКГ 2 пациентов с ФП и без ФП

Таким образом, мы можем видеть, что все они выровнены в некоторой линейной ориентации, что имеет смысл, потому что более близкие кадры имеют схожие характеристики. Следующее, что нам нужно сделать, - это посмотреть на каждый кластер и увидеть, какие общие характеристики у них обычно общие, и чем они отличаются для каждого кластера. Но это уже другая глава! Моя конечная цель состоит не только в том, чтобы модель могла классифицировать каждого пациента, но также выделить те части или особенности, которые модель считает важной частью, которая помогла в принятии решения. Поступая таким образом, мы могли бы лучше понять, как был сделан вывод, а также углубить наше понимание симптомов пароксизмальной ФП. Спасибо за чтение!

ขอขอบคุณ อ.โปรดปราน และบุคคลอื่น ๆ ที่ได้ให้คำปรึกษาและความช่วยเหลือในการทำให้บทความนี้สำเร็จลุล่วงไปได้ด้วยดี

Продолжение следует… つ づ く