Evaluación Experimental de Técnicas de Caracterización de Series de Tiempo Aplicadas a Electrocardiogramas Abstract Due to the always increasing capabilities of computer systems, it is now practical to store and process large amounts of electronic electrocardiography records. This represents a great research opportunity for developing new storage models for efficient pattern search in these data bases. Efficient pattern matching algorithms are the stepping stone for complex operations of data mining and knowledge discovery. As the electrocardiogram is a sequence of records measuring the heart’s electric activity, it can be treated as a time series. Therefore, indexing and querying techniques developed for time series data should produce correct and adequate results when applied to electrocardiograms. However, we still need to evaluate the effectiveness of these techniques for producing efficient similarity searches. In this work we evaluate these techniques by counting the number of false alarms raised when doing a similarity search. Our results show that techniques based on segmentation and quantization are the most promising Técnicas de Caracterización Para caracterizar series de tiempo se ha propuesto el uso de la transformada discreta de Fourier (DFT). Con esta técnica, las series de tiempo son representadas como un vector de baja dimensionalidad en el espacio de frecuencias (al utilizar los primeros coeficientes de la DFT). La DFT puede calcularse de modo muy eficiente mediante el algoritmo FFT (Fast Fourier Transform). Otra técnica para la caracterización de serie de tiempo es Piecewise Aggregate Approximation (PAA). Aquí, el vector característico se obtiene dividiendo la serie de tiempo en segmentos de la misma longitud y calculando la media de cada segmento. El vector formado por los valores obtenidos será la nueva representación de la serie de tiempo en un espacio dimensional inferior al original. Esta transformación es equivalente a la transformada Haar cuando el número de segmentos (o de coeficientes de la transformada) es una potencia de dos. Otra técnica propuesta para la representación de series de tiempo es la Adaptive Piecewise Constant Approximation (APCA). Este método consiste en dividir la serie de tiempo en segmentos, y utilizar dos valores para caracterizar a cada segmento (que en este caso son de longitud variable para adaptarse mejor a la forma de la serie de tiempo), el primer valor es promedio de los valores en el segmento, mientras que el segundo valor registra la longitud del segmento. Experimentos En la evaluación de la búsqueda de patrones sobre el vector característico, resultado de aplicar a la serie de tiempo de un ECG la técnica de caracterización seleccionada, se implementó el algoritmo de búsqueda de patrones basado en un método de coincidencia de subsecuencia (llamadas motifs) para una búsqueda temporalmente eficiente. La solución del algoritmo propuesto es equivalente a la que se genera tras examinar exhaustivamente cada posible par de patrones en la serie de tiempo para una coincidencia, dando como resultado el par de patrones con mayor semejanza. A este par de patrones se le conoce como primer motif. La dimensionalidad de los vectores característicos utilizada en nuestros experimentos varía entre 8, 16 y 32 dimensiones. En la búsqueda de motifs, se consideraron solamente patrones con una separación de 8, 16, 32 y 64 posiciones en el tiempo. Es decir, se compararon solamente pares de patrones cuyos puntos de inicio están separados al menos ese número de posiciones en el tiempo. Por su parte, en la búsqueda los patrones se consideraron secuencias de 128, 256 y 512 valores. Como se indicó anteriormente, los algoritmos de búsqueda sobre vectores característicos generan falsos positivos que tienen que ser verificados después en una etapa de filtrado. En este caso, un falso positivo es un patrón que se propone inicialmente como parte de la solución de la búsqueda, pero que después de la etapa de filtrado este resulta no ser el patrón buscado. Si al generar un vector característico a partir de un ECG se pierde poca información, es decir si los datos originales son similares de los datos obtenidos al utilizar el vector característico, entonces el número de falsos positivos se reduce y en consecuencia la calidad y eficiencia en la búsqueda se incrementa. En nuestros experimentos, la variable a medir es el número de falsos positivos generados en el proceso de búsqueda. El objetivo de este trabajo es evaluar las técnicas de caracterización al medir el número de falsos positivos utilizando vectores característicos de diferentes tamaños (dimensionalidades). Por otro lado, al utilizar patrones de diferentes tamaños buscamos evaluar si el tamaño del patrón influye en la eficacia del algoritmo de búsqueda. Ejecución de los Experimentos en ambiente de escritorio $ ./exp_PAA_bak.sh $PROGRAMA $DB $RESULTADOS $INDICE $COLUMNAS DONDE: $PROGRAMA : ES EL NOMBRE DEL PROGRAMA QUE SE EJECUTARÁ $DB : ES LA DIRECCIÓN A LA BASE DE DATOS CON LOS ARCHIVOS ASCII $RESULTADOS RESULTANTES : ES LA DIRECCIÓN DONDE SE GUARDARÁN LOS ARCHIVOS $INDICE : COLUMNA DE DATOS QUE SE UTILIZARÁ DEL ARCHIVO ASCII $COLUMNAS : CANTIDAD DE COLUMNAS DE DATOS EN EL ARCHIVO ASCII LA EJECUCIÓN DE LOS SCRIPTS ES EN EL DIRECTORIO: /home/gerardo/Experimentos/caracterizacion UN EJEMPLO DE EJECUCIÓN DE LOS EXPERIMENTOS SERÍA: ./exp_PAA.bak.sh BusquedaPAA ../Databases/PAA ../resultados/PAA DONDE: *BusquedaPAA ,es el programa que se ejecutará por el script *../Databases/PAA/ ,contiene los electros que se analizarán *../resultados/PAA/ ,es la carpeta donde se depositarán todos los archivos resultantes * 0 ,en todos los archivos, la columna de datos que se utilizara será el indice 0 * 1 ,el archivo solo tiene una columna de datos NOTA: El archivo ASCII del electrocardiograma, consta de distintas columnas, tiene la columna de tiempo y distintas columnas de datos, dependiendo del archivo, un simple cat sobre el archivo arroja la cantidad de columnas que este tiene. Sin embargo las que le interesan al programa son las columnas de datos, no las de tiempo. archivo.txt: Este archivo tiene 1 columna de datos y esta en el indice 0. tiempo datos 1 123 2 457 3 568 4 789 5 678 6 556 Resultados de Latin America 2 2010 - Joint GISELA/EPIKH School for Application Porting Los resutados obtenidos en esta escuela se dividieron en 3 Etapas. Primer Etapa. Se logro en la portabilidad de la aplicación a un ambiente grid diseñando un par de script que enviara y procesara la aplicación al igual que la base de datos necesaria. Teniendo un archivo .jdl como el siguiente Type = "Job"; JobType = "Normal"; Executable = "grid.sh"; StdOutput = "output.txt"; StdError = "error.txt"; InputSandbox = {"grid.sh",”db.tar.gz”,"exp_PAA_bak.sh","Busqueda"}; OutputSandbox = {"resultados.tar.gz","output.txt", "error.txt"}; y un script de ejecucion: #!/bin/bash #Extrae archivos de la base de datos tar -zxvf $1 #Crea directorio de resultados mkdir -p resultados/PAA #Asigna Permisos de ejecucion chmod +x exp_PAA_bak.sh chmod +x Busqueda # Ejecuta la aplicacion ./exp_PAA_bak.sh Busqueda Databases/PAA/ resultados/PAA/ 0 2 # Comprime y empaca los resultados tar -zcvf resultados.tar.gz resultados Segunda Etapa. Una segunda solución en ambiente de grid consistió en colocar la bases de datos en un Storage Element la cual era descargada por los worked node para su procesamiento por el script de ejecucion. Para esto se diseño un par de script como los siguientes: # Archivo .jdl Type = "Job"; JobType = "Normal"; Executable = "grid_se.sh"; StdOutput = "output.txt"; StdError = "error.txt"; InputSandbox = {"grid_se.sh","exp_PAA_bak.sh","Busqueda"}; OutputSandbox = {"resultados.tar.gz","output.txt", "error.txt"}; #!/bin/bash # Archivo de Ejecucion de Aplicacion #Descargar Archivo de SE (db.tar.gz) export LFC_HOST=lfc.grid.unam.mx lcg-cp --vo prod.vo.eu-eela.eu lfn:/grid/prod.vo.eu-eela.eu/gerardo/db.tar.gz db.tar.gz #Extrae archivos de la base de datos tar -zxvf db.tar.gz #Crea directorio de resultados mkdir -p resultados/PAA #Asigna Permisos de ejecucion chmod +x exp_PAA_bak.sh chmod +x Busqueda # Ejecuta la aplicacion ./exp_PAA_bak.sh Busqueda Databases/PAA/ resultados/PAA/ 0 2 Tercer Etapa Esta tercer solución de portabilidad de la aplicación a la grid consistió en establecer conexiones remotas a la base de datos colocada en un Storage Element. Para esta solución se utilizo la Biblioteca de funciones GFIL, misma que permitió crear una función que llevara a cabo la transferencia de archivos hacia la aplicación. Esta función se ilustra a continuación: #include "gfal_api.h" char *get_file(char *nomArch); char *get_file(char *nomArch){ int block_size =1, FD; int *readValues; struct stat datos_archivo; //Informacion del archivo remoto char str[999]; char *read_buffer; int j=0, i=0; FD = gfal_open ( nomArch, O_RDONLY,0 ); if(FD < 0) { perror ("error in gfal_open"); exit(1); } // Determina informacion del Archivo abierto gfal_stat(nomArch,&datos_archivo); // Crea buffer para los datos del archivo read_buffer=(char *)malloc(datos_archivo.st_size); // Lee el archivo de la Grid gfal_read(FD,read_buffer,datos_archivo.st_size); return read_buffer; }