Добавил:
Преподаватель Колледжа информационных технологий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
4
Добавлен:
08.05.2022
Размер:
4.69 Mб
Скачать

– синтаксический анализатор исходного текста. Пример необработанных логги-

рованных данных приведен на рисунке 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