210 likes | 426 Views
Universidad de Los Andes Facultad de Ingeniería Escuela de Ingeniería Eléctrica Maestría en Ingeniería Biomédica GIBULA. Máquinas de Soporte Vectorial de Mínimos Cuadrados. (L.S.S.V.M) (Clase Nº 6:Una Aplicación a Señales de ECG). Material digital elaborado por: Miguel Vera
E N D
Universidad de Los Andes Facultad de Ingeniería Escuela de Ingeniería Eléctrica Maestría en Ingeniería Biomédica GIBULA Máquinas de Soporte Vectorial de Mínimos Cuadrados. (L.S.S.V.M) (Clase Nº 6:Una Aplicación a Señales de ECG) Material digital elaborado por: Miguel Vera Con la Colaboración de: Ing. José Avila Mérida, Junio de 2009
Universidad de los Andes Facultad de Ingeniería Escuela de Ingeniería Eléctrica Maestría en Ingeniería Biomédica GIBULA Tutorial para implementar, en la práctica, una LSSVM Binaria. Caso3: Señal ECG. Versión 1.1. Autor: Miguel Vera
Antes de entrenar, simular y validar una LSSVM, se debe: A.- Preparar la base de datos, para que sirva de entrada a la LSSVM. Para ello: • Guardar la base de datos, que contiene la señal ECG, en el • directorio del toolbox que permite implementar la LSSVM. • La señal ECG que se va a utilizar posee aproximadamente • 50 mil muestras. Esta señal debe ser cargada en el workspace • de Matlab con la función load. Luego de ello, se procede a la • respectiva Normalización de la referida señal. • De manera arbitraria, se reservan las primeras 5 mil muestras • de la señal normalizada, para construir el conjunto de • Entrenamiento. Por tanto, el conjunto de Validación preliminar • quedará representado por las 45 mil muestras restantes.
Antes de entrenar, simular y validar una LSSVM, se debe: • Debido a que se va a implementar una Máquina Binaria, se debe proceder a crear las dos clases respectivas: • a.- De forma Manual, se seleccionan los primeros 7 complejos QRS para crear las zonas de interés (ROI), es decir, se está interesado en detectar el mencionado complejo. • b.- De manera análoga, se seleccionan partes de la señal que no correspondan al referido complejo para construir las zonas de no interés (NROI). Por ejemplo, se puede utilizar como NROI las ondas P y T. • - Proceso de Vectorización: • a- La señal normalizada, se vectorizará utilizando arreglos de 77 muestras. Este dato se obtuvo de inspeccionar, detalladamente, la duración del citado complejo. • b.- Crear la matriz que va a contener las ROI y NROI, denominada P, usando la relación 1:6. Esto significa que por cada ROI se deben colocar 6 NROI. Adicionalmente, crear la matriz de etiquetas, denominada T, con la misma relación asignando -1 a ROI Y 1 a NROI.
Antes de entrenar, simular y validar una LSSVM, se debe: B.- Seleccionar un Kernel y los Hiperparámetros: -Tal y como se analizó en teoría, la LSSVM requiere de dos HiperParámetros denominados gamma y sigma2 . En una primera aproximación ellos serán asignados de forma heurística. Existe una clara relación entre el tipo de Kernel a utilizar y el sigma2. Por ejemplo: Si se elige un kernel lineal la forma de introducir los parámetros es: kernel = ‘RBF_kernel';gam = 10;sig2 =35; C.- Crear, entrenar, simular y validar la LSSVM
Ejemplo de Código clc,clear,close all load CARDEX.mat; C = X(1:5500); clear X % signal train load CARDEX.mat; Q = X(1:1000); clear X % signal validation ent = C./max(C); % Normalizacion val = Q./max(Q); NE = numel(ent); NV = numel(val); % Deteccion de ondas R x = 0; up = 0; % indicador de subida o bajada for i = 1:NE if ent(i) > 0.7 & up == 0; % threshold subida up = 1; % indicador de subida x = x + 1; t_up(x) = i+10; A(x) = ent(i+10); % amplitud de cada muestra detectada else if ent(i) < 0.7 & up == 1; % threshold bajada up = 0; % indicador de bajada end end end
Ejemplo de Código % seleccion de ROI k = 0; for i = 1:numel(t_up)-1 marca = ent(t_up(i)-30:t_up(i)+46); for j = 1:numel(marca) k = k + 1; marcadores1(k) = marca(j); end clear marca end a1 = marcadores1(1:77)'; a2 = marcadores1(78:154)'; a3 = marcadores1(155:231)'; a4 = marcadores1(232:308)'; a5 = marcadores1(309:385)'; a6 = marcadores1(386:462)'; a7 = marcadores1(463:539)'; % seleccion de NROI I1 = ent(1:77)';I2 = ent(78:154)';I3 = ent(156:232)';I4 = ent(234:310)'; I5 = ent(312:388)';I6 = ent(390:466)';I7=ent(580:656)';I8= ent(658:734)'; I9=ent(736:812)';I10=ent(814:890)';I11=ent(892:968)';I12= ent(970:1046)'; I13=ent(1359:1435)';. . . I41 = ent(2388:2464)';I42 = ent(2466:2542)';
Ejemplo de Código % Entrenamiento de la red P = [a1 I1 I2 I3 I4 I5 I6 a2 I7 I8 I9 I10 I11 I12 ... a3 I13 I14 I15 I16 I17 I18 a4 I19 I20 I21 I22 I23 I24 ... a5 I25 I26 I27 I28 I29 I30 a6 I31 I32 I33 I34 I35 I36 ... a7 I37 I38 I39 I40 I41 I42]; T = [-1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 ... -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 ... -1 1 1 1 1 1 1]; X=P';Y=T';gam =1000;sig2 = 150; type = 'classification'; [alpha,b] = trainlssvm({X,Y,type,gam,sig2,'RBF_kernel'}); [alpha,b] = trainlssvm({X,Y,type,gam,sig2,'RBF_kernel','preprocess'}); % Validación de la red Ytest = simlssvm({X,Y,type,gam,sig2,'RBF_kernel','preprocess'},{alpha,b},X); s=find(Ytest<0)
Ejemplo de Código a = 0; for i = 1:NV-76 lb = i; % Ventana de Observación la = 76+i; a = val(lb:la)'; % Posiciona la ventana en la señal Yt_1(i) = simlssvm({X,Y,type,gam,sig2,'RBF_kernel','preprocess'},... {alpha,b},a'); end s_1 = find(Yt_1 == -1);% Encuentra la coordenada del marcador respecto de la señal de validación Ima_1 = val(s_1);% Evalúa dicha coordenada en la señal de validación para poder graficarla val_inv = val(1,end:-1:1); % Inversión de la señal de validación.
Ejemplo de Código clear a for i = 1:NV-76 lb = NV-76-(i-1); la = NV-(i-1); a = val(lb:la)'; Yt_2(i) = simlssvm({X,Y,type,gam,sig2,'RBF_kernel','preprocess'},... {alpha,b},a'); end s_2 = find(Yt_2 == -1); Ima_2 = val_inv(s_2); figure; subplot(2,1,1);plot(val,'g'); hold on; plot(s_1,Ima_1,'+r'); subplot(2,1,2); plot(val_inv,'g'); hold on; plot(s_2,Ima_2,'+r');
Ejemplo de Código s_11 = minele(s_1); % Eliminación de marcadores repetidos Ima_1 = val(s_11); % Imágenes de dichos marcadores s_22 = minele(s_2); for i=1:numel(s_22) s_22(i) = NV-s_22(i); % Ubicación temporal real de marcadores end % invertidos en señal sin invertir s_22 = sort(s_22); Ima_2 = val(s_22); figure; plot(val,'g') hold on plot(s_11,Ima_1,'+r') plot(s_22,Ima_2,'+r') for i = 1:numel(s_11) QRS = ent(s_11(i):s_22(i)); IR(i) = max(QRS); tR(i) = min(find(QRS == IR(i))) + s_11(i);end plot(tR,IR,'+r')
Función minele function salida = minele(s) NS = numel(s); x = [ ]; j = 0; for i=1:NS-1 if abs(s(i) - s(i+1)) < 5 % Determina que tan parecida es una muestra j = j+1; % a la siguiente x(j) = min(s(i:i+1)); % Almacena el valor mínimo entre ellas s(i+1) = x(j); % Dicho valor es asignado al siguiente end % del vector de entrada, es decir, end % Al final se obtiene vector con muestras repetidas NX = numel(x); for i = 1:NX-1 % Determina los valores iguales, dejando solo uno if x(i) == x(i+1); x(i) = 10000; end end j = 0; for i = 1:NX if x(i) ~= 10000; j = j + 1; salida(j) = x(i); end end
Asignación 1.- Replicar lo realizado en esta clase con las bases de datos denominadas: A (Entrenamiento) y J (Validación) Entregar via email: veramig@gmail.com Fecha Tope: 16/06/2009 Hora: 12 del medio día