▷ Epileptic seizure prediction with Machine Learning #ML using #Matlab

La epilepsia es un trastorno crónico del sistema nervioso central que predispone a las personas a experimentar ataques recurrentes. Afecta a 3 millones de estadounidenses y 50 millones de personas en todo el mundo. Una convulsión es una aberración transitoria en la actividad eléctrica del cerebro que produce síntomas físicos perturbadores, como un lapso en la atención y la memoria, una alucinación sensorial o una convulsión de todo el cuerpo. Estas convulsiones incontrolables representan un grave riesgo de lesiones, limitan la independencia y la movilidad de un individuo y dan como resultado tanto aislamiento social como dificultades económicas.
Untitled
Cargar los datos desde carpeta especifica
clear;clc;
dir='D:\vasanza\...\DATA_EPY\';
E=importdata(strcat(dir,'electrodes.txt'));
L=importdata(strcat(dir,'labels.txt'));
Fs=256;%frecuencia de muestreo
size(E)%numero de archivos con los datos
ans = 1×2
8 1
size(L)%numero de archivos con los labels
ans = 1×2
7 1
Crear una sola fila de valores RMS por cada electrodo, esto por cada archivo
AllElectrodes=[];
AllLabels=[];
PredictionTime=10;%con cuantos segundos deseo predecir
skip=PredictionTime*Fs;
%Cálculo de muestras 10 seg x frecuencia de muestreo muestreo
for j=1:length(E)-2
%número de filas del archivo con los nombes (training 1 al 6 %testing 7)
RMSE=[];
RMSL=[];
NameFileA=string(strcat(E(j),'.mat'));
%recorro cada fila del vector de nombres de archivos con los datos
Electrodes=load(NameFileA);Electrodes=Electrodes.D;
%carga cada archivo .mat con los datos
for i=1:skip:length(Electrodes)-skip
%recorre cada sample durante cada skip (10) segundos de muestras
RMSE=[RMSE;rms(Electrodes(i:i+skip,:))];
%saca el RMS de cada electrodo durante los 10 seg. y crea una fila
end
AllElectrodes=[AllElectrodes;RMSE];
%cada fila tiene los valores RMS de un skip o (10) seg. de muestra
NameFileL=string(strcat(L(j),'.mat'));
%recorro cada fila del vector de nombres de archivos con los labels
Labels=load(NameFileL);Labels=Labels.C;
%carga cada archivo .mat con los labels
for i=1:skip:length(Labels)-skip
%recorre cada sample durante cada skip (10) segundos de muestras
if sum(Labels(i:i+skip,2))>=1
%si encuentra un 1 durante los 10 seg. lo etiqueta como 1
RMSL=[RMSL;1];
else
%si no encuentra un durante los 10 seg. lo etiqueta como o
RMSL=[RMSL;0];
end
end
AllLabels=[AllLabels;RMSL];
%cada fila representa el label (1 tiene ataque , 0 no tiene ataque)
% de un periodo de skip (10) segundos de muestra
end
size(AllElectrodes)% son 23 electrodos EEG
ans = 1×2
2154 23
size(AllLabels)% 1 tiene ataque epileptico, o no tiene ataque epilectico
ans = 1×2
2154 1
Adecuación de los datos para la red neuronal
steps=1;%numero de filas que deseo anticipar para aprender a predecir
inNN=[AllElectrodes(1:length(AllElectrodes)-steps,:)];
% los features son los valores rms de los 23 electrodos EEG en el tiempo t
outNN=[AllLabels(steps+1:length(AllLabels),:)];
% los labels son desplazados un tiempo t+1 para lograr la predicción
%outNN = [Epileptic, not Epileptic]% (1 0) tiene ataque
% (0 1) no tiene ataque
SalidaActual=[AllLabels(1:length(AllLabels)-steps,:)];
% los labels sin desplazamiento en el tiempo t para constratar la predicción
size(inNN)%se pierde steps (1 = 1skip = 10s) filas de los datos
ans = 1×2
2153 23
size(outNN)%se pierde steps (1 = 1skip = 10s) filas de los datos
ans = 1×2
2153 1
Llamar el toolbox de matlab
nnstart
Probar la red neuronal implementada
clear;clc;
load('inNN.mat');%guardar previamente desde el workspace
load('OutNN.mat');%guardar previamente desde el workspace
load('SalidaActual.mat');%guardar previamente desde el workspace
pred=[];
pred=NEWmyNeuralNetworkFunctionNoAnt10s1step(inNN(:,:));
%10 segundos prom y 1 steps antes no anteriores
plot((pred(:,1)));
hold on;
plot(outNN(:,1),'--g');
plot(SalidaActual(:,1),'--r');
legend('Prediction_t_-_1','Out_t_-_1','Ataque tiempo real _t');
xlabel('2153 muestras de 10 s cada una');
ylabel('1 tiene ataque epilético vs 0 no tiene ataque epilécptico');
title('Predicción de ataque epiléptico');
Calculo del error cuadratico medio
err = immse(outNN,pred)
err = 0.0038
acc=1-err
acc = 0.9962




Comentarios

Popular Posts

▷ Especificaciones del módulo ESP32

▷ #ESP32 - REAL-TIME CLOCK #RTC INTERNO

▷ #ESP32 - SINCRONIZAR RTC INTERNO CON SERVIDOR NTP

▷ #ESP32 - Display OLED 128x64

▷ #ESP32 - Over-The-Air programming #OTA

▷ #ESP32 - #MQTT (Introducción)

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2021 PAO1)

▷ DISEÑO DE SISTEMAS DIGITALES, PROYECTOS PROPUESTOS (2019 2do Término)

▷ PROTEUS PCB DESIGN

▷ SOLUCIÓN EVALUACIÓN SISTEMAS DIGITALES 1, 1er Parcial (2021 PAE)