Escolar Documentos
Profissional Documentos
Cultura Documentos
Redes Neurais
RESUMO— É apresentado um método para classificar arritmias ventrículo direito é retardada em relação ao esquerdo, de modo
ventriculares do tipo bloqueio de ramo esquerdo (L) e direito (R) em que o complexo QRS é estendido e a derivação precordial direita
relação aos batimentos normais (N) do banco de dados de arritmia do produz uma morfologia rsR '(V1 e V2).
MIT-BIH-FACIL.
Para sua detecção, o sinal do eletrocardiograma (ECG) é analisado
Este trabalho propõe um método para classificar arritmias tipo
para obter características que podem identificar padrões normais e
anormais. Este artigo apresenta o progresso do processamento do
L e tipo R de batimentos normais de acordo com o banco de dados
sinal de ECG e o modelo de classificação de anormalidades cardíacas. de arritmia MIT-BIH-FACIL.
Para isso, foi desenvolvida uma etapa de extração de
PALAVRAS CHAVE— LBBB, RBBB, classificação, arritmias, características com base nas características morfológicas do
ECG. complexo QRS utilizando também os intervalos RR.
ABSTRACT— A method is presented to classify left (L) and right (R) Objetivo
ventricular arrhythmias in relation to the normal beats (N) of the
MIT-BIH-FACIL arrhythmia database. Classificar batimentos cardíacos em 3 possíveis classes:
For its detection, the electrocardiogram (ECG) signal is analyzed to Batimento normal (N), Bloqueio de ramo direito (RBBB) e
obtain characteristics that can identify normal and abnormal Bloqueio de ramo esquerdo (LBBB).
patterns. This article presents the progress of ECG signal processing
and the classification model of cardiac abnormalities. II. MATERIALES Y MÉTODOS
KEYWORDS— LBBB, RBBB, classification, arrhythmias, ECG.
Os métodos propostos neste trabalho compreendem as
seguintes etapas:
I. INTRODUÇÃO
A. Dados
Neste trabalho foi utilizado o banco de dados de Arritmia
MIT-BIH-FACIL (MARK e MOODY, 1997), que contém
gravações de sinais de 48 participantes de duas derivações de
ECG com duração de 30 minutos cada. Os arquivos foram salvos
em formato .wav e contém os sinais com frequência de
amostragem de 360 Hz e uma resolução de 12 bits.
B. Pré-processamento
No pré-processamento do sinal, um filtro passa-baixa de
segunda ordem com uma frequência de corte de 20 Hz é usado
para atenuar o ruído de alta frequência no sinal. Além disso, dois
filtros de média móvel são usados para eliminar a linha de base,
ou o primeiro filtro com uma janela de 200 ms para remover o
QRS complexo na onda P e o segundo filtro com uma janela de
600 ms para remover as ondas T.
C. Extração de características
A extração do complexo QRS foi realizada a partir da
posição das anotações feitas no pico R de cada batimento no banco
de dados do MIT. Considerando a largura do complexo QRS.
2
UFRJ. Gómez. Redes Neurais
Variável Descrição
RRant Intervalo RR anterior ao
batimento
RRpost Intervalo RR posterior ao
batimento
Cross1 Primeiro cruzamento de 0
da derivação 1 na função
de auto correlação da 4a
escala da transformada de
wavelets discreta
Cross2 Primeiro cruzamento de 0
da derivação 2 na função
de auto correlação da 4a
escala da transformada de Figura 5- Analise dos valores ausentes.
wavelets discreta
Mind1 Posição do valor máximo As estatísticas descritivas mais comuns são obtidas, como
da derivação 1 na função mínimo, primeiro quartil, média, mediana, terceiro quartil e
de auto correlação da 4a máximo, mas também o número de zeros, valores negativos e até
escala da transformada de mesmo o número de outliers potenciais para cada variável numérica
wavelets discreta
Mind2 Posição do valor máximo
da derivação 2 na função
de auto correlação da 4a
escala da transformada de
wavelets discreta
Tabela 1 - Características extraídas dos sinais de ECG
.
Tipo Quantidade de amostras
Normal 3159
LBBB 5998
RBBB 8068
Total 17,225
Tabela 2 - Distribuição das amostras em cada tipo.
Diagnóstico geral
3
UFRJ. Gómez. Redes Neurais
4
UFRJ. Gómez. Redes Neurais
5
UFRJ. Gómez. Redes Neurais
Os dados são divididos em conjuntos de treinamento e teste Figura 12 - Matriz de Confusão obtida no teste do
e, em seguida, ou SVM foi treinado. Ou o Scikit-Learn contém a modelo SVM
biblioteca svm, que contém classes integradas para diferentes
algoritmos SVM. Como a intenção era realizar uma classificação,
foi utilizada uma classe classificadora de vetores de suporte, escrita
como SVC na biblioteca svm do Scikit-Learn. Essa classe recebe
um parâmetro, que é o tipo de kernel. Isto é muito importante.
Neste caso de SVMs simples, esse parâmetro foi definido
simplesmente como “linear”, uma vez que SVMs simples só
podem classificar os dados de forma separada e linear.
O método (fit) de ajuste da classe SVC é chamado para treinar Figura 13 - Métricas calculadas no teste do modelo SVM
o algoritmo nos dados de treinamento, que são passados como
parâmetro para o método de ajuste (fit).
O segundo classificador treinado e testado foi o
Depois o segundo classificador MLP foi implementado MLP e seus resultados estão dispostos na Figura 14 e na Figura
usando o pacote Scikit -Learn, MLPRegressor é implementado no 15.
módulo neural_network. Os outros módulos foram importados
como "train_test_split" para dividir o conjunto de dados em
treinamento e conjunto de teste para testar o modelo e
"StandardScaler" para dimensionar os dados, uma vez que
características diferentes (variáveis independentes) têm um valor
grande, era muito importante dimensionar os dados usados para
treinar o modelo. Além disso, foi necessário definir uma função de
ativação para os neurônios é a função sigmóide (logística ).
6
UFRJ. Gómez. Redes Neurais
IV. CONCLUSÃO
7
UFRJ. Gómez. Redes Neurais
ANEXOS
8
UFRJ. Gómez. Redes Neurais
ANEXO 1
Código elaborado em python para a implementação dos modelos (SVM e MLP)
In [2]: # Import libraries
#Johana Gómez Ceballos
#SVM #MLP
import pandas
import joblib
import pandas as pd # for data manipulation import
numpy as np
import matplotlib.pyplot as plt
import sklearn.model_selection
import sklearn.metrics import
sklearn.neural_network
from sklearn.model_selection import train_test_split # for splitting the data into trai
from sklearn.metrics import plot_confusion_matrix
from sklearn.metrics import classification_report,confusion_matrix
Após a separação, os dados passaram por uma normalização a fim de retirar a média e fazer com
que a variância dos dados seja unitária:
Out[4]: StandardScaler()
In [5]: scaled_X = scaler.transform(df.drop(['Paciente','Tipo','Posicao'],axis=1))
s_X = pd.DataFrame(scaled_X,columns=X.columns) s_X
9
UFRJ. Gómez. Redes Neurais
2 -> LBBB
3 -> RBBB
SVM
In [6]: #Divide the data as Train/ Test dataset
Accuracy: 0.999
10
UFRJ. Gómez. Redes Neurais
Classes Preditas
print(title)
print(disp.confusion_matrix)
11
UFRJ. Gómez. Redes Neurais
MLP
In [43]: from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import
train_test_split from sklearn.metrics import
accuracy_score from sklearn.metrics import
confusion_matrix
12
UFRJ. Gómez. Redes Neurais
print(classRep
)
Classes Preditas
13
UFRJ. Gómez. Redes Neurais
RBBB 0 1 156
print(title)
print(disp.confusion_matrix)
14
UFRJ. Gómez. Redes Neurais
Accuracy: 0.92
Accuracy: 0.92100
In [ ]:
15
UFRJ. Gómez. Redes Neurais
ANEXO 2
Código elaborado em MATLAB para o pré-processamento dos sinais de ECG
addpath C:\Users\Usuario\Desktop\MIT-BIH-FACIL %
Identificação dos pacientes analisados
Paciente = [100 109 207 232 ];
for i = 1:length(Paciente) %
Leitura do sinal
% y é é uma matriz com duas coluna contendo os dois canais de
ECG
% fs é a frequência de amostragem
Sinal_Paciente = sprintf('%s\\%d.wav','sinais',Paciente(i));
[y,fs] = audioread(Sinal_Paciente,'native');
y_mV = double(y-1024)/200;
Anot_Paciente = sprintf('%s\\%d.ant','anotações_mod',Paciente(i));
fid = fopen(Anot_Paciente,'r');
fclose(fid);
% Filtro passa-baixas
b = [1 0 0 0 0 0 -2 0 0 0 0 0 1];
16
UFRJ. Gómez. Redes Neurais
Der1 = filter(b,a,Der1);
Der2 = filter(b,a,Der2);
else
Janela1 = round(fs*0.2); end
if mod(round(fs*0.6),2) == 0
Janela2 = round(fs*0.6) - 1; else
Janela2 = round(fs*0.6); end
aux1 = medfilt1(Der1,Janela1);
aux1 = medfilt1(aux1,Janela2);
aux2 = medfilt1(Der2,Janela1);
aux2 = medfilt1(aux2,Janela2);
end
17
UFRJ. Gómez. Redes Neurais
ANEXO 3
addpath C:\Users\Usuario\Desktop\MIT-BIH-FACIL
media_RR = 0;
cont = 0;
cont = cont + 1;
end
clear jj
media_RR = media_RR/cont;
media_RR = media_RR/Fs;
% Inicialização de vetores
RR_ant = zeros(length(cont_B),1);
RR_post = zeros(length(cont_B),1);
Tipo_B = zeros(length(cont_B),1);
Posicao_B = zeros(length(cont_B),1);
list_Paciente = zeros(length(cont_B),1);
pos = 1;
for jj = 2:(length(Anot.data)-1)
18
UFRJ. Gómez. Redes Neurais
if ((Anot.data(jj,1) == 1) || (Anot.data(jj,1) == 2) ||
(Anot.data(jj,1) == 3)) pos = pos + 1;
Tipo_B(pos,1) = Anot.data(jj,1);
Posicao_B(pos,1) = Anot.data(jj,2);
RR_ant(pos,1) = (Anot.data(jj,2)-Anot.data(jj-1,2))/Fs;
RR_ant(pos,1) = RR_ant(pos,1)/media_RR;
RR_post(pos,1) = (Anot.data(jj+1,2)-
Anot.data(jj,2))/Fs; RR_post(pos,1) =
RR_post(pos,1)/media_RR;
end
end
clear jj
19
UFRJ. Gómez. Redes Neurais
Min_der2(aux,1) = NaN;
end
aux = aux + 1;
end
clear jj
for jj = 1:(length(Features1)-1)
if Features1(jj,:) == NaN
Features1(jj,:) = [];
end
end clear jj
20