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

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

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

0m115[0m[37m,[0m114[0m[37m,[0m113[0m[37m,[0m112[0m[37m,[0m111[0m[37

m,[0m110[0m[37m,[0m110[0m[37m,[0m110[0m[37m,[0m110[0m[37m,[0m110[0m[

37m,[0m110[0m[37m,[0m110[0m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m111[0

m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m11

2[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m

112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[

0m111[0m[37m[37m][0m[37m,[0m[34;1m"ZT"[0m[37m:[0m[37m[[0m120[0m[37m

,[0m121[0m[37m,[0m121[0m[37m,[0m122[0m[37m,[0m122[0m[37m,[0m123[0m[3

7m,[0m123[0m[37m,[0m124[0m[37m,[0m125[0m[37m,[0m126[0m[37m,[0m126[0

m[37m[37m][0m[37m[37m}[0m[37m,[0m[34;1m"COB"[0m[37m:[0m[0m0[0m[37 m,[0m[34;1m"IOB"[0m[37m:[0m[0m-0.032[0m[37m,[0m[34;1m"rea- son"[0m[37m:[0m[32m"COB: 0, Dev: -0.4, BGI: 0.0, ISF: 7.7, CR: 9.36, Target: 7.0, minPredBG 6.2, minGuardBG 6.1, IOBpredBG 6.2; Eventual BG 6.4 < 7.0, temp 0.1 ~< req 0.1U/hr. "[0m[37m[37m}[0m

No smb_enact needed. Temp refreshed: monitor/temp_basal.json: [37m{[0m[34;1m"duration"[0m[37m:[0m[0m28[0m[37m,[0m[34;1m"rate"[0m[37m:[0m[0m0.1[0m[37m,[0 m[34;1m"temp"[0m[37m:[0m[32m"absolute"[0m[37m[37m}[0m

No bolus needed. Settings less than 15 minutes old. Edison battery at 69% is charged (>= 98%) or likely charging (60-70%). Pumphistory-24 < 15m old

Your instance of oref0 [0.6.2, master] is out-of-date by 2 commits: you may want to consider updating.

Please make sure to read any new documentation and release notes that accompany the update.

Completed oref0-pump-loop at Mon Sep 9 06:28:32 MSK 2019

121

Приложение 2. Листинги программ

Листинг 1. M-файл для обработки данных обучающей и тестовой выборки

new_data = DATA.'

for i = 1 : (0.8 * (numel(DATA) / 10)) DataTrain(:, i) = new_data(:, i)

end

for j = 1 : (numel(DATA) / 10) - int64 (0.8 * (numel(DATA) / 10))

DataTest(:, j) = new_data(:, j + int64(0.8 * (numel(DATA) / 10)))

end

for k = 1 : 9

DataTrainInput(k, :) = DataTrain(k, :)

end

DataTrainOutput(1, :) = DataTrain(k + 1, :)

for k = 1 : 9

DataTestInput(k, :) = DataTest(k, :) end

DataTestOutput(1, :) = DataTest(k + 1, :)

for i = 1 : 4000 data(1,i)=first(i,1) data(2,i)=first(i,2) data(3,i)=first(i,3) data(4,i)=first(i,1) data(5,i)=first(i,2) data(6,i)=first(i,3) data(7,i)=first(i,1) data(8,i)=first(i,2) data(9,i)=first(i,3) data(10,i)=first(i,3) end

for i = 1 : 1000 dataTestInput(1,i)=data_2(i,1) dataTestInput(2,i)=data_2(i,2) dataTestInput(3,i)=data_2(i,3) dataTestInput(4,i)=data_2(i,1) dataTestInput(5,i)=data_2(i,2) dataTestInput(6,i)=data_2(i,3)

122

dataTestInput(7,i)=data_2(i,1) dataTestInput(8,i)=data_2(i,2) dataTestInput(9,i)=data_2(i,3) end

for k = 1 : 1000

data_2(k,:) = first(k+4000,:)

end

for i = 10 : 10 dataOutput(i-9,:)=data(i,:)

end

for j = 1 : 9

mu1(j, 1) = mean(DataTrainInput(j, :)); end

for j = 1 : 9

sig1(j, 1) = std(DataTrainInput(j, :)); end

for j = 1 : 9

DataTrainInputStandardized(j,:) = (DataTrainInput(j,:) - mu1(j,1)) / sig1(j,1);

end

for j = 1 : 9

mu3(j, 1) = mean(dataTestInput(j, :)); end

for j = 1 : 9

sig3(j, 1) = std(dataTestInput(j, :)); end

for j = 1 : 9

dataTestInputStandardized(j,:) = (dataTestInput(j,:) - mu3(j,1)) / sig3(j,1);

end

mu2(1, 1) = mean(dataOutput(1, :));

sig2(1, 1) = std(dataOutput(1, :));

dataTrainOutputStandardized(1,:) = (dataOutput(1,:) - mu2(1,1)) / sig2(1,1);

for j = 1 : 1

dataTestOutput4_1(j,:) = sig2(j,1)*dataTestOutput4(j,:) + mu2(j,1);

123

end

for i = 1201 : 1400

dataOutput_1(i - 1200, :) = data(i, :)

end figure

subplot(1,1,1)

plot(dataTestOutput(1,:)) hold on plot(dataTestOutput4_1(1,:)) hold off

legend(["Observed" "Forecast"]) ylabel("Blood Glucose") title("Blood Glucose")

dataTestOutput4 = sim(network3, dataTestInputStandardized)

for j = 1 : 1000 dataTestOutput(1,j)=first(j+4000,3)

end

rmse3 = sqrt(mean((dataTestOutput(1,:)-dataTestOut- put4_1(1,:)).^2))

for i = 1 : 2000 dataSecondTestInput(1,i)=first(i+4000,1) dataSecondTestInput(2,i)=first(i+4000,2) dataSecondTestInput(3,i)=first(i+4000,3) dataSecondTestInput(4,i)=first(i+4000,1) dataSecondTestInput(5,i)=first(i+4000,2) dataSecondTestInput(6,i)=first(i+4000,3) dataSecondTestInput(7,i)=first(i+4000,1) dataSecondTestInput(8,i)=first(i+4000,2) dataSecondTestInput(9,i)=first(i+4000,3) end

for j = 1 : 9

mu4(j, 1) = mean(dataSecondTestInput(j, :)); end

for j = 1 : 9

sig4(j, 1) = std(dataSecondTestInput(j, :)); end

for j = 1 : 9

dataSecondTestInputStandardized(j,:) = (dataSecondTestInput(j,:) - mu4(j,1)) / sig4(j,1);

124

end

dataTestOutput6 = sim(network3, dataSecondTestInputStandardized)

for j = 1 : 1

dataTestOutput6_1(j,:) = sig2(j,1)*dataTestOutput6(j,:) + mu2(j,1);

end

for i = 1 : 2000 dataT(1,i)=first(i+4000,3)

end

DataTestNARXOutput = sim(network3, dataTrainInputStandardized)

for j = 1 : 1

DataTestNARXOutput_1(j,:) = sig2(j,1)*DataTestNARXOutput(j,:) + mu2(j,1);

end figure

subplot(1,1,1) plot(DataTestOutput_1(1,:)) hold on plot(dataOutput(1,:))

hold off

legend(["Observed" "Forecast"]) ylabel("Blood Glucose") title("Blood Glucose")

for i = 1 : 1

DataTestOutput(i,:) = DataTest(i+9,:); end

% НОРМАЛИЗАЦИЯ ВХОДНЫХ ДАННЫХ

for j = 1 : 9

mu(j, 1) = mean(DataTrainInput(j, :)); end

for j = 1 : 9

sig(j, 1) = std(DataTrainInput(j, :)); end

for j = 1 : 9

125

DataTrainInputStandardized(j,:) = (DataTrainInput(j,:) - mu(j,1)) / sig(j,1);

end

% НОРМАЛИЗАЦИЯ ВХОДНЫХ ОБУЧАЮЩИХ ДАННЫХ

for j = 1 : 10

mu(j, 1) = mean(data(j, :)); end

for j = 1 : 10

sig(j, 1) = std(data(j, :)); end

for j = 1 : 1

DataTrainOutputStandardized(j,:) = (DataTrainOutput(j,:) - mu2(j,1)) / sig2(j,1);

end

% НОРМАЛИЗАЦИЯ ВЫХОДНЫХ ДАННЫХ

for j = 1 : 1

mu2(j, 1) = mean(DataTrainOutput(j, :)); end

for j = 1 : 1

sig2(j, 1) = std(DataTrainOutput(j, :)); end

for j = 1 : 1

DataTrainOutputStandardized(j,:) = (DataTrainOutput(j,:) - mu2(j,1)) / sig2(j,1);

end

% НОРМАЛИЗАЦИЯ ВХОДНЫХ ТЕСТОВЫХ ДАННЫХ

for j = 1 : 9

mu3(j, 1) = mean(DataTestInput(j, :)); end

for j = 1 : 9

sig3(j, 1) = std(DataTestInput(j, :)); end

for j = 1 : 9

DataTestInputStandardized(j,:) = (DataTestInput(j,:) - mu3(j,1)) / sig3(j,1);

end

126

ПОЛУЧЕНИЕ ОТВЕТА НС

Data1 = sim(NARX1, dataTestInputStandardized) Data2 = sim(NARX2, dataTestInputStandardized) Data3 = sim(NARX3, dataTestInputStandardized)

ДЕНОРМАЛИЗАЦИЯ

for j = 1 : 1

FirstData1(j,:) = sig2(j,1)*Data1(j,:) + mu2(j,1); FirstData2(j,:) = sig2(j,1)*Data2(j,:) + mu2(j,1); FirstData3(j,:) = sig2(j,1)*Data3(j,:) + mu2(j,1); end

for i = 1 : 500

dataTestOutput_1(1,i) = dataTestOutput(1, i) FirstData_1(1,i) = FirstData1(1,i) FirstData_2(1,i) = FirstData2(1,i) FirstData_3(1,i) = FirstData3(1,i)

end

FirstData_3(1,:) = FirstData_3(1,:) + 20

rmse = sqrt(mean((dataTestOutput_1(1,:) - FirstData_3(1,:)).^2))

figure subplot(2,1,1)

plot(dataTestOutput_1(1,:)); hold on plot(FirstData_3(1,:));

hold off

legend(["Observed" "Forecast"]) ylabel("Blood Glucose") title("Forecast with Updates")

subplot(2,1,2)

stem(dataTestOutput_1(1,:) - FirstData_3(1,:)) xlabel("Month")

ylabel("Error") title("RMSE = " + rmse)

rmse5 = sqrt(mean((dataT(1,:)-dataTestOutput6_1(1,:)).^2))

127

Листинг 2. Синтаксический анализатор

package sample;

import javafx.beans.property.SimpleStringProperty; import javafx.collections.ObservableList;

import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.stage.FileChooser; import javafx.stage.Stage;

import javafx.scene.layout.AnchorPane; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.util.WorkbookUtil;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.*; import java.net.URL;

import java.util.LinkedList; import java.util.ResourceBundle; import java.util.Scanner;

public class Controller {

private File fileEmployeis;

private LinkedList<String> date1 = new LinkedList<>(); private LinkedList<String> time1 = new LinkedList<>();

private LinkedList<String> iob1 = new LinkedList<>(); 128

private LinkedList<String> mealcob1 = new LinkedList<>(); private LinkedList<String> glucose1 = new LinkedList<>(); private LinkedList<String> normiob = new LinkedList<>(); private LinkedList<String> normmealcob = new LinkedList<>(); private LinkedList<String> normglucose = new LinkedList<>();

@FXML

private ResourceBundle resources; @FXML

private URL location; @FXML

private Button loadFileButton; @FXML

private Button saveFileButton; @FXML

private AnchorPane anchorPane; @FXML

private TextArea logtext;

public void loadFileEmployeis() throws IOException { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Выбор файла данных");

Stage stage = (Stage)anchorPane.getScene().getWindow(); fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFil-

ter("LOG","*.log"));

fileEmployeis= fileChooser.showOpenDialog(stage); String stroka;

if (fileEmployeis!=null){ logtext.appendText("Файл открыт\n");

cleararray();

129

FileReader fr = new FileReader(fileEmployeis);

Scanner scan = new Scanner(fr);

while (scan.hasNextLine()){ stroka = scan.nextLine();

char[] charstr = stroka.toCharArray(); String[] stringstr = new String[charstr.length]; int i = 0;

for(char d: charstr){

stringstr[i] = Character.toString(d); i++;

}

if(stringstr.length>64){ String date = null;

finddate(stringstr,date,date1); String time=null; findtime(stringstr,time,time1); String iob = "0"; findiob(stringstr,iob,iob1); String mealcob=null;

findmealcob(stringstr,mealcob,mealcob1); String glucose=null; findglucose(stringstr,glucose,glucose1);

}

}

normalization(iob1,mealcob1,glucose1); logtext.appendText("Файл готов к отгрузке\n");

int k = time1.size(), u= date1.size(),z=iob1.size(),y=mealcob1.size(),t=glucose1.size();

fr.close();

130