Построение и исследование моделей краткосрочного прогнозирования гликемии у больных сахарным диабетом
.pdf– синтаксический анализатор исходного текста. Пример необработанных логги-
рованных данных приведен на рисунке 2.1. {"carbs":0,"nsCarbs":0,"bwCarbs":0,"journalCarbs":0,"mealCOB":0,"currentDeviation":1.33,"maxDeviation":1.38,"minDeviation":0.76,"slopeFromMaxDeviation":- 0.009,"slopeFromMinDeviation":0.225,"allDeviations":[1,1,1,1,1],"lastCarbTime":0,"bwFound":false} {"iob":-0.647,"activity":-0.0022,"basaliob":-0.756,"bolusiob":0.109,"net- basalinsulin":-0.5,"bolusinsulin":2.2,"time":"2019-03- 03T21:01:39.000Z","iobWithZeroTemp":{"iob":-0.647,"activity":- 0.0022,"basaliob":-0.756,"bolusiob":0.109,"netbasalinsulin":-0.5,"bo- lusinsulin":2.2,"time":"2019-03-03T21:01:39.000Z"},"last-
BolusTime":1551636172000,"lastTemp":{"rate":0.85,"timestamp":"2019- 03-03T23:56:52+03:00","started_at":"2019-03-
{"delta":2,"glucose":90,"noise":null,"short_avgdelta":1.78,"long_avgdelta":0.71,"date": 1551646740000}
Autosens ratio: 1.2; Adjusting basal from 0.55 to 0.65; ISF from 69.1 to 57.6; CR: 5.818
currenttemp: { duration: 26, rate: 0.85, temp: 'absolute' } lastTempAge: 5 m tempModulus: 1 m
Рисунок 2.1 – Фрагмент лог-файла с необработанными данными.
2.2. Этапы анализа данных
При решении задач моделирования, прогнозирования и поиска закономер-
ностей практически всегда приходится комбинировать различные методы анали-
тической обработки. Это связано с тем, что реальные данные в «сыром виде» чаще всего непригодны для анализа. Сведения нужно собрать из множества ис-
точников, систематизировать, очистить, трансформировать и только затем
можно применять методы Data Mining.
41
На рисунке 2.2 представлены этапы процесса обнаружения полезных зна-
ний в базе данных.
Рисунок 2.2 – Обнаружение знаний в базах данных
Knowledge Discovery in Databases (KDD) – это процесс поиска полезных знаний в «сырых» данных. KDD включает в себя вопросы: подготовки данных,
выбора информативных признаков, очистки, применения методов Data Mining
(DM), постобработки и интерпретации полученных результатов [19].
Процесс KDD, состоит из последующих шагов [20]:
1) Подготовка исходного комплекта данных. Этот шаг содержится в разра-
ботке комплекта данных, в том числе из разных источников, выбора обучающего множества и т.д.;
2) Предобработка данных. Для того чтобы в полной мере использовать ме-
тоды Data Mining, следует направить интерес на задачи предобработки данных.
Данные могут иметь шумы, пропуски, аномальные значения и т.д. Также, данные могут быть сверхизбыточны, недостаточны и т.д. В определенных задачах необ-
ходимо расширить данные некой априорной информацией. Данные обязаны быть качественны и корректны с точки зрения используемого метода;
3) Трансформация, нормализация данных. Этот шаг нужен для приведения информации к подходящему для следующего анализа виду. Для этого необхо-
димо сделать такие действия, как приведение типов, квантование, приведение к
«скользящему окну» и прочее;
42
4) Data Mining. На этом шаге используются разные методы для нахождения знаний. Это нейросети, модели на базе классификационно-регрессионных дере-
вьев, методы кластеризации, установления ассоциаций и т.д.;
5) Постобработка данных. Интерпретация результатов и использование по-
лученных знаний в бизнес системах.
Использование методов Data Mining – практически единственная возмож-
ность извлечь пользу из накопленной информации, в противном случае собран-
ные данные будут лежать «мертвым грузом». Data Mining позволяет извлекать из данных знания и превратить в конкурентные достоинства: качественно про-
гнозировать, точнее выявлять целевые аудитории, предвещать развитие собы-
тий, управлять рисками и другое.
2.3. Разработка синтаксического анализатора
Решение задачи поиска во фрагменте необработанного лог-файла данных биологического мониторинга и дальнейшее их преобразование в структуриро-
ванных набор данных является классическим примером алгоритмов поиска под-
строки в строке.
Один из самых очевидных и одновременно эффективных алгоритмов по-
иска является алгоритм прямого поиска. Суть его заключается в сравнении иско-
мой подстроки с каждым словом в основной строке. В начальный момент проис-
ходит сравнение первого символа строки с первым символом подстроки, второго символа строки со вторым символом подстроки и т. д. Если произошло совпаде-
ние всех символов, то фиксируется факт нахождения подстроки. В противном слу-
чае производится сдвиг подстроки на одну позицию вправо и повторяется посим-
вольное сравнение, то есть сравнивается второй символ строки с первым симво-
лом подстроки, третий символ строки со вторым символом подстроки и т. д. [24]
На рисунке 2.3 представлен пример поиска подстроки в строке методом прямого поиска.
43
Рисунок 2.3 – Демонстрация алгоритма прямого поиска Для извлечения из всех протоколированных действий параметров времен-
ного ряда был разработан программный синтаксический анализатор исходного текста на языке программирования высокого уровня Java. После обработки вы-
деленных значений данные должны быть помещены в таблицу для дальнейшего обучения и валидации нейронных сетей.
При написании программной системы, реализующей синтаксический ана-
лизатор, был использован один класс под названием «Controller». В нем разрабо-
таны все методы, необходимые для работоспособности программы.
Во время написания класса были разработаны такие методы как:
1.loadFileEmployeis(),
2.normalization(),
3.finddate(),
4.findtime(),
5.findiob(),
6.findmealcob(),
7.findglucose(),
44
8.saveFile(),
9.cleararray().
Рассмотрим подробнее функциональность каждого метода класса.
Метод loadFileEmployeis() – вызывается при нажатии на кнопку «Загрузить файл». Для вызова окна выбора файлов была использована библиотека javafx.stage.FileChooser. Был добавлен фильтр файлов «.log» для отображения файлов с данным форматом. При выборе нужного файла метод проверяет файл построчно до тех пор, пока он не закончится, и если строка больше 64 символов вызываются методы finddate(), findtime(), findiob(), findmealcob(), findglucose().
При завершении проверки построчно вызывается метод normalization() с переда-
чей в него всех массивов данных. При обратном вызове из метода normalization(),
добавляется текст «Файл готов к отгрузке» и закрывается FileReader.
Метод finddate() – вызывается из метода loadFileEmployeis() в том случае,
если проверяемая строка больше 64 символов. Метод проверяет строку на нали-
чие слова «”clock:”» и при успешном его нахождении записывает в массив сим-
волы до буквы «T». Когда обнаружится буква «Т» метод повторно вызовет loadFileEmployeis(). В том случае, если в проверяемой строке не найдется нуж-
ного слова, метод также обратно вызовет loadFileEmployeis().
Метод findtime() – вызывается из метода loadFileEmployeis() в том случае,
если проверяемая строка больше 64 символов. Метод проверяет каждый 3 сим-
вол в строке на наличие двоеточия («:»). При нахождении 3 двоеточий подряд,
метод записывает 8 символов подряд в массив. По окончанию записи в массив,
вызывается обратно метод loadFileEmployeis(). Если же в строке не было найдено
3 двоеточий подряд, также вызывается метод loadFileEmployeis().
Метод findiob() - вызывается из метода loadFileEmployeis() в том случае,
если проверяемая строка больше 64 символов. Метод проверяет строку на нали-
чие слова «” iob”» и при успешном его нахождении записывает в массив символы до запятой («,»). Когда обнаружится запятая, метод повторно вызовет loadFileEmployeis(). В том случае, если в проверяемой строке не найдется нуж-
ного слова, метод также обратно вызовет loadFileEmployeis().
45
Метод findmealcob() – вызывается из метода loadFileEmployeis() в том слу-
чае, если проверяемая строка больше 64 символов. Метод проверяет строку на наличие слова «” mealCOB”» и при успешном его нахождении записывает в мас-
сив символы до запятой («,»). Когда обнаружится запятая, метод повторно вызо-
вет loadFileEmployeis(). В том случае, если в проверяемой строке не найдется нужного слова, метод также обратно вызовет loadFileEmployeis().
Метод findglucose() - вызывается из метода loadFileEmployeis() в том слу-
чае, если проверяемая строка больше 64 символов. Метод проверяет строку на наличие слова «” glucose”» и при успешном его нахождении записывает в массив символы до запятой («,»). Когда обнаружится запятая, метод повторно вызовет loadFileEmployeis(). В том случае, если в проверяемой строке не найдется нуж-
ного слова, метод также обратно вызовет loadFileEmployeis().
Метод normalization() – вызывается из метода loadFileEmployeis() по завер-
шении проверки файла. Данный метод реализует нормализацию данных на от-
резке [-1;1]. Приравнивает первые значения всех массивов к минимальному и максимальному значениям. Затем идет сравнивание каждого символа массивов с максимальным и минимальным значением. После сравнения идет расчет по фор-
муле нормализации на отрезке [-1;1] для дальнейшей записи в новые массивы.
Метод saveFile() – метод вызывается по нажатию кнопки «Сохранить файл». Для реализации данного метода была использована библиотека org.apache.poi. Тут реализованы функции создания файла формата «.xls», задания стиля для ячеек файла, создание и заполнение ячеек. Метод берет значения из всех массивов данных и записывает их в таблицу в определенные столбцы. При успешном заполнении ячеек столбцов, выводится текст «Файл отгружен», вызы-
вается метод clearray(), закрываются Workbook и FileOutputStream.
Метод clearray() – вызывается из метода saveFile() в том случае, если таб-
лица формата «.xls» успешно заполнена. В данном методе реализована очистка всех массивов для дальнейшего использования файлов формата «.log» без ошибок.
46
2.4. Подготовка исходных данных к анализу
После обработки выделенные значимые данные в привязке ко времени по-
мещались в таблицу для дальнейшего обучения и валидации нейронных сетей.
Таблица с обработанными измеряемыми данными представлена на рисунке 2.4
(здесь Carbs – количество активных углеводов, IOB – количество активного ин-
сулина, Glucose – текущий уровень гликемии в мг/дл).
Рисунок 2.4 – Фрагмент данных для обучения нейронной сети График временного ряда по каждому из значимых параметров представлен
на рисунке 2.5.
47
Рисунок 2.5 – График временного ряда Предобработка данных – комплекс методов и алгоритмов, применяемых в
аналитическом приложении с целью подготовки данных к решению конкретной задачи и приведения их в соответствие с требованиями, определяемыми специ-
фикой задачи и способами ее решения [21].
Была построена автокорреляция (рисунок 2.6) и проведен визуальный ана-
лиз показателей временных рядов (рисунок 2.5), чтобы проверить необходи-
мость очистки данных.
Рисунок 2.6 – Автокорреляция временного ряда
48
Видно, что зависимость между последовательными величинами одного ряда слабая, поэтому есть необходимость для очистки данных от шумов и ано-
мальных значений.
Для очистки входных данных временных рядов была применена спек-
тральная обработка по методу Фурье-преобразование (рисунок 2.7).
Рисунок 2.7 – Спектральная обработка показателей временного ряда В результате удалось добиться сглаживания временного ряда за счет уда-
ления шума в измерениях показателей. График с результатами сглаживания вре-
менного ряда представлен на рисунке 2.8.
49
Рисунок 2.8 – График временного ряда после спектральной обработки Была построена автокорреляция после спектральной обработки. Зависи-
мость между последовательными величинами одного ряда значительно возросла
(рисунок 2.9).
Рисунок 2.9 – Автокорреляция после спектральной обработки После спектральной обработки на этапе предподготовки выполняется нор-
мализация данных – процедура предобработки входной информации (обучаю-
щих, тестовых и валидационных выборок, а также реальных данных), при кото-
рой значения признаков во входном векторе приводятся к некоторому заданному диапазону, например, [0…1] или [-1…1].
50