Построение и исследование моделей краткосрочного прогнозирования гликемии у больных сахарным диабетом
.pdfНа рисунке 3.38 представлена диаграмма рассеяния для обученной модели
NARX.
Рисунок 3.38 – Оценка коэффициента корреляции Из графика видно, что отклонения прогнозируемых значений от эталонов
минимальны и коэффициент корреляции близок по значению к 1, что свидетель-
ствует о сильной прямой связи между переменными.
На рисунке 3.39 представлено окно с результатами обучения модели
NARX с одним скрытым слоем и 40 нейронами в нем.
91
Рисунок 3.39 – Окно обучения нейронной сети На рисунке 3.40 представлен график зависимости СКО от количества эпох
обучения для построенной на предыдущем шаге модели.
Рисунок 3.40 – Среднеквадратичная ошибка обучения На графика видно, что значение погрешности на обучающей выборке
непрерывно уменьшалось на каждом шаге обучения и достигло минимального значения на 116 эпохе.
92
На рисунке 3.41 представлена диаграмма рассеяния для обученной модели
NARX.
Рисунок 3.41 – Оценка коэффициента корреляции Из графика видно, что отклонения прогнозируемых значений от эталонов
минимальны и коэффициент корреляции близок по значению к 1, что свидетель-
ствует о сильной прямой связи между переменными.
На рисунке 3.42 представлено окно с результатами обучения модели
NARX с двумя скрытыми слоями по 40 нейронов в каждом.
93
Рисунок 3.42 – Окно обучения нейронной сети На рисунке 3.43 представлен график зависимости СКО от количества эпох
обучения для построенной на предыдущем шаге модели.
Рисунок 3.43 – Среднеквадратичная ошибка обучения На рисунке 3.44 представлена диаграмма рассеяния для обученной модели
NARX.
94
Рисунок 3.44 – Оценка коэффициента корреляции Из графика видно, что отклонения прогнозируемых значений от эталонов
минимальны и коэффициент корреляции близок по значению к 1, что свидетель-
ствует о сильной прямой связи между переменными.
Произведем анализ программного модуля, сгенерированного после созда-
ния нейронной сети инструментарием NNTool. Структура созданной программы будет иметь следующие элементы:
1) name_network = network (Inputs, Layers, biasCon, inputCon, layerCon, outputCon, targetCon) – функция, которая возвращает созданную нейронную сеть
сименем name_network и с нижеперечисленными свойствами:
Inputs – число входов сети;
Layers – число скрытых слоев сети;
biasCon – вектор с количеством элементов, равным количеству
слоев;
inputCon – матрица с количеством строк, равным количеству слоев и числом столбцов, равным количеству входов;
95
layerCon – матрица с количеством строк и столбцов, равным количе-
ству слоев;
outputCon – вектор-строка с количеством элементов, равным количе-
ству слоев;
targetCon – вектор-строка, такая же, как предыдущая.
2) name_network = newp (MINMAX, N, FA, FL) – функция, создающая нейросетевую модель типа «многослойный персептрон» и содержащая следую-
щие аргументы:
MINMAX – матрица, хранящая минимальные и максимальные зна-
чения для входных элементов из таблицы исходных данных:
N – число нейронов в скрытом слое;
FA – активационная функция;
FL – обучающая функция.
3)[name_network, training_record] = trainbr (name_network, Pd, Tl, Ai, Q, TS,
VV)– функция, которая реализует алгоритм обучения Левенберга-Марквардта,
который работает по принципу минимизации комбинации квадратов ошибок и весов с выбором наилучшей такой (для получения наилучших обобщающих свойств нейронной сети). Аргументы функции:
name_network – название обучаемой нейронной сети;
Pd – название массива, хранящий задержанные входы обучающей
выборки;
Tl – название массива, хранящий целевые значения выходов;
Ai – матрица, хранящая начальные условия входных задержек;
Q – количество обучающих пар в одном цикле обучения;
TS – вектор временных интервалов;
VV – массив, хранящий проверочные значения (validation value);
TV – массив, хранящий тестовые значения (test value).
Функция trainbr возвращает обученную нейронную сеть name_network и
набор записей training_record для каждого цикла обучения (training_record.epoch
96
– номер цикла, training_record.perf – текущая ошибка обучения, training_record.vperf – текущая ошибка для проверочной выборки, training_record.tperf – те-
кущая ошибка для тестовой выборки).
Процесс обучения зависит от значений следующих параметров:
name_network.paramTrain.epochs – количество циклов обучения;
name_network.paramTrain.show – количество циклов для показа про-
межуточных результатов;
name_network.paramTrain.goal – целевая ошибка обучения;
name_network.paramTrain.time – максимальное время обучения в се-
кундах;
name_network.paramTrain.min_grad – целевое значение градиента;
name_network.paramTrain.max_fai – максимально допустимая крат-
ность превышения ошибки проверочной выборки по сравнению с достигнутым
минимальным значением;
name_network.paramTrain.searchFcn – имя используемого одномер-
ного алгоритма оптимизации.
Процесс обучения останавливается в случае выполнения любого из следу-
ющих условий:
достигнута верхняя граница заданного количества циклов обучения
(name_network. paramTrain.epochs);
достигнута верхняя граница заданного времени обучения сети
(name_network.paramTrain.time);
среднеквадратичная ошибка обучения сети стала меньше заданной
(name_network.paramTrain.goal);
градиент стал меньше заданного
(name_network.paramTrain.min_grad);
возрастание ошибки проверочной выборки по сравнению с достиг-
нутым |
минимальным |
превысило |
предопределенное |
значение |
(name_network.paramTrain.max_fail).
97
4)sim – функция, позволяющая моделировать работу нейронной сети
[Y, Pf, Af] = sim (name_network, P, Pi, Ai) – функция, моделирующая работу
сети.
Аргументы функции:
name_network – имя сети;
P – входы сети;
Pi – массив, который хранит начальные условия входных задержек
(по умолчанию они равны нулю);
Ai – массив, который хранит начальные условия задержек слоя нейронов (по умолчанию они равны нулю).
Аргументы Pi, Ai, Pf, Af используются только в случаях, когда сеть имеет задержки по входам или по слоям нейронов.
Структура данных аргументов имеет следующий вид:
P – массив размерностью × , элементами массива { , } будут являться матрицы размерностью × ;
Pi – массив размерностью × , элементами массива { , } (i-й
вход в момент = − ) будут являться матрицы размерностью × ;
Ai – массив размерностью × , элементами массива { , } (вы-
ход i-го слоя в момент = − ) будут являться матрицы размерностью ×
;
Y – массив размерностью × , элементами массива Y{i, ts} бу-
дут являться матрицы размерностью × ;
Pf – массив размерностью × , элементами массива { , } (i-й
вход в момент = + − ) будут являться матрицы размерностью × ;
Af – массив размерностью × , элементами массива { , } (вы-
ход i-го слоя в момент, когда = + − ) будут являться матрицы размер-
ностью × ,
при этом Ni = name_network.numInputs - количество входов сети;
Nl = name_network.numLayers - количество слоев сети;
98
No = name_network.numOutputs - количество выходов сети;
ID = name_network.numInputDelays - входные задержки;
LD = name_network.numLayerDelays - задержки слоя;
TS = Number of time steps - число временных интервалов;
Q = Batch size - размер набора подаваемых векторов;
Ri = name_network.inputs{i}.size - размер i-го входного вектора;
Si = name_network.layers{i}.size - размер i-го слоя;
Ui = name_network.outputs{i}.size - размер выходного вектора.
5)init – инициализация нейронной сети
name_network = init(name_network) – функция инициализирует нейронную сеть с именем name_network, устанавливая веса и смещения сети в соответствии
сустановками name_network.initFcn и name_network.initParam.
6)adapt – функция адаптации сети
[name_network, Y, E, Pf, Af] = adapt(name_network, P, T, Pi, Ai) – функция адаптации сети. Устанавливает адаптацию сети в соответствии с установками name_network.adaptFcn и name_network.adaptParam. Здесь E – ошибка сети, T –
целевые значения выходов; остальные аргументы – как у команды sim.
7)train – тренировка нейронной сети
[name_network, tr] = train(name_network, P, T, Pi, Ai) – функция осуществ-
ляет обучение сети в соответствии с установками name_network.trainFcn и name_network.trainParam. Здесь tr – информация о выполнении процесса обуче-
ния (количество циклов и соответствующая ошибка обучения).
8)disp – функция отображения свойств нейронной сети
disp(name_network) – функция возвращает развернутую информацию о структуре и свойствах сети.
9)display – функция отображения имен переменных и свойств сети.
99
3.5.Выводы
Вданной главе в качестве инструментальных средств для прогнозирования гликемии была выбрана аналитическая платформа Deductor и среда разработки
MATLAB. Была разработана структура нейросетевой модели, описаны пара-
метры и результаты обучения модели линейной регрессии и нейросетевых моде-
лей, произведена оценка точности прогнозирования на обучающих моделях.
В таблице 3.2 представлен сравнительный анализ результатов обучения моделей.
Таблица 3.2. – Сравнительный анализ эффективности обучения моделей
|
|
1 слой / |
1 слой / |
2 слоя / |
|
Тип модели |
Показатели |
20 нейро- |
40 нейро- |
40 нейро- |
|
|
|
нов |
нов |
нов |
|
|
Время обуче- |
|
1 секунда |
|
|
|
ния |
|
|
||
Линейная регрес- |
|
|
|
||
СКО |
|
5,55 10−4 |
|
||
сия |
|
|
|||
Коэффициент |
|
0,99122 |
|
||
|
|
|
|||
|
корреляции |
|
|
||
|
|
|
|
||
|
Время обуче- |
10 секунд |
6 секунд |
2 минуты 39 |
|
|
ния |
секунд |
|||
Многослойный |
|
|
|||
СКО |
6,12 10−7 |
5,46 10−6 |
1,02 10−6 |
||
персептрон |
|||||
Коэффициент |
1 |
0,99999 |
1 |
||
|
|||||
|
корреляции |
||||
|
|
|
|
||
Нелинейная авто- |
Время обуче- |
19 секунд |
1 минута |
10 минут |
|
регрессионная |
ния |
41 секунда |
51 секунда |
||
|
|||||
нейросетевая мо- |
СКО |
1,74 10−6 |
1,73 10−6 |
3,77 10−7 |
|
дель с внешним |
Коэффициент |
0,99285 |
0,99311 |
0,99337 |
|
выходом |
корреляции |
||||
|
|
|
Среди вышеперечисленных моделей многослойный персептрон с одним скрытым слоем с 20 нейронами в нем имел наилучшее значение среднеквадрати-
ческого отклонения и коэффициента корреляции.
100