Etiquetar señales de un ECG y hacer un seguimiento del progreso
Este ejemplo muestra cómo realizar un seguimiento del progreso del etiquetado y evaluar la calidad de las etiquetas con el panel. En este modo, se puede determinar rápidamente cuántos miembros están etiquetados e inspeccionar las duraciones y distribuciones de valores de etiqueta en un conjunto de datos. Este paso facilita el proceso de obtención de conjuntos de datos completos y precisos para machine learning.
Descargar y preparar los datos
Utilice la función QTdownload
para descargar señales de un electrocardiograma (ECG) de la base de datos QT de acceso público [1] [2] en un nuevo directorio temporal folder
. El código de esta función se encuentra al final del ejemplo.
folder = QTdownload;
Cada archivo contiene una señal de ECG ecgSignal
, una tabla de etiquetas de región signalRegionLabels
y la variable de tasa de muestreo Fs
. Todas las señales tienen una tasa de muestreo de 250 Hz. Las etiquetas de las regiones corresponden a tres morfologías de latido:
Onda P
Complejo QRS
Onda T
Cree un almacén de datos de señales que apunte a folder
. Especifique el nombre de la variable de la señal ecgSignal
y la variable de tasa de muestreo Fs
.
sds = signalDatastore(folder,SignalVariableNames="ecgSignal", ... SampleRateVariableName="Fs");
Cree un subconjunto del almacén de datos que contenga los veinte primeros archivos. Utilice este subconjunto como la fuente de un objeto labeledSignalSet
.
subsds = subset(sds,1:20); lss = labeledSignalSet(subsds);
Etiquetar regiones de interés
Abra la app Signal Labeler e importe el conjunto de señales etiquetadas del área de trabajo. Represente la primera señal del conjunto de datos. En la pestaña Display, seleccione el panoramizador y haga zoom sobre una región más pequeña de la señal para visualizarla mejor.
En la pestaña Labeler, defina una etiqueta categórica de la región de interés (ROI) con las categorías P, QRS y T. Nombre la etiqueta BeatMorphologies
.
Cree una función de etiquetado personalizada labelECGregions
para localizar y etiquetar las tres regiones de interés diferentes. El código de la función personalizada aparece más adelante en el ejemplo. Puede guardar la función en la carpeta actual, en la ruta de MATLAB, o añadirla a la app seleccionando Add Custom Function
en la galería Automate Value. Para obtener más información, consulte Custom Labeling Functions.
Seleccione BeatMorphologies
en el navegador Label Definitions y elija la función labelECGregions
de la galería Automate Value. Seleccione Auto-Label
y, luego, Auto-Label and Inspect Plotted
. Haga clic en Run. En la pestaña Display, amplíe una región de la señal etiquetada y utilice el panoramizador para navegar en el tiempo. Si el etiquetado es satisfactorio, haga clic en Save Labels para aceptar las etiquetas y cerrar la pestaña Autolabel. Puede ver las etiquetas y sus valores de ubicación en el explorador Labeled Signal Set Members.
Visualizar el progreso del etiquetado y las estadísticas
Seleccione el panel en la barra de herramientas de la pestaña Labeler. La barra de progreso muestra que el 5% de los miembros están etiquetados con al menos una etiqueta de la ROI. Esto corresponde a 1/20 miembros del conjunto de datos. La gráfica circular de distribución de etiquetas muestra el número de instancias de cada categoría para la definición de etiqueta seleccionada.
Cierre el panel y siga etiquetando. Seleccione Auto-Label
y, luego, Auto-Label All Signals
para etiquetar las cuatro señales siguientes de la lista. Marque la casilla situada junto a los nombres de las señales que desea etiquetar y, luego, haga clic en OK.
Seleccione de nuevo el panel. La barra de progreso muestra ahora que el 25% de los miembros están etiquetados. Compruebe que la distribución de cada categoría (P, QRS o T) es la esperada. La gráfica circular Label Distribution
muestra que cada categoría representa aproximadamente un tercio de todas las instancias de etiquetas. Seleccione la gráfica de histogramas Time Distribution
de la galería Plots para ver la duración media de las ondas P y T y los complejos QRS, incluidos los valores atípicos. Observe que las ondas T duran más que las ondas P y que los complejos QRS.
Muestre la gráfica Member Count
para visualizar mejor la distribución de etiquetas entre los miembros y el número de instancias. La mayoría de los miembros del conjunto de datos tienen entre 0 y 500 instancias de las regiones P, QRS y T.
Haga clic en la gráfica de la barra de progreso y ajuste Threshold
en la barra de herramientas para contar solo los miembros con al menos 5000
etiquetas. Ahora solo se incluyen en el recuento tres de los cinco miembros etiquetados. Ajuste el umbral de recuento para diferenciar mejor entre miembros etiquetados y no etiquetados, en función de sus requisitos de etiquetado.
Función labelECGregions
La función labelECGregions
utiliza una red de deep learning preentrenada para identificar morfologías de latido P, QRS y T en señales de ECG.
function [labelVals,labelLocs] = labelECGregions(x,t,parentLabelVal,parentLabelLoc,varargin) labelVals = cell(2,1); labelLocs = cell(2,1); if nargin < 5 Fs = 250; else Fs = varargin{1}; end % Download the pretrained network netfil = matlab.internal.examples.downloadSupportFile("SPT", ... "data/QTDatabaseECGSegmentationNetworks.zip"); %#ok<*UNRCH> unzip(netfil,fullfile(tempdir,"ECGnet")) load(fullfile(tempdir,"ECGnet","trainedNetworks.mat")) for kj = 1:size(x,2) sig = x(:,kj)'; predTest = classify(rawNet,sig,MiniBatchSize=50); msk = signalMask(predTest); msk.SpecifySelectedCategories = true; msk.SelectedCategories = find(msk.Categories ~= "n/a"); labels = roimask(msk); labelVals{kj} = labels.Value; labelLocs{kj} = labels.ROILimits/Fs; end labelVals = vertcat(labelVals{:}); labelLocs = cell2mat(labelLocs); end
Función QTdownload
Puede descargar los archivos de datos de https://www.mathworks.com/supportfiles/SPT/data/QTDatabaseECGData.zip o utilizar la función unzip
para crear una carpeta en un directorio temporal con 210 archivos MAT.
function folder = QTdownload localfile = matlab.internal.examples.downloadSupportFile("SPT", ... "data/QTDatabaseECGData1.zip"); unzip(localfile,tempdir) folder = fullfile(tempdir,"QTDataset"); end
Referencias
[1] Goldberger, Ary L., Luis A. N. Amaral, Leon Glass, Jeffery M. Hausdorff, Plamen Ch. Ivanov, Roger G. Mark, Joseph E. Mietus, George B. Moody, Chung-Kang Peng y H. Eugene Stanley. "PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for Complex Physiologic Signals." Circulation. Vol. 101, núm. 23, 2000, págs. e215–e220. [Circulation Electronic Pages; http://circ.ahajournals.org/content/101/23/e215.full].
[2] Laguna, Pablo, Roger G. Mark, Ary L. Goldberger y George B. Moody. "A Database for Evaluation of Algorithms for Measurement of QT and Other Waveform Intervals in the ECG." Computers in Cardiology. Vol. 24, 1997, págs. 673–676.
Consulte también
Apps
Objetos
Temas
- Label Signal Attributes, Regions of Interest, and Points
- Label Spoken Words in Audio Signals
- Examine Labeled Signal Set
- Automate Signal Labeling with Custom Functions
- Use Signal Labeler App
- Import Data into Signal Labeler
- Create or Import Signal Label Definitions
- Label Signals Interactively or Automatically
- Custom Labeling Functions
- Customize Labeling View
- Dashboard
- Export Data and Create Data Sets
- Signal Labeler Usage Tips