Introducción:

A continuación vamos a tratar la “Detección de Anomalías Cardíacas con Aprendizaje Automático (Machine Learning)” y en concreto, nos vamos a centrar en el análisis y detección de las Taquicardias Ventriculares (TV) y las Taquicardias Supraventriculares (TSV).

La taquicardia  es un fenómeno que consiste en el incremento de la frecuencia cardíaca, teniendo como consecuencia una contracción demasiado rápida de los ventrículos. Se considera que existe taquicardia cuando la frecuencia cardíaca es superior a los cien latidos por minuto en estado de reposo. Las personas que padecen de taquicardia poseen una vida normal, ya que no es una enfermedad grave, aunque puede acortar la vida del corazón debido a su mayor trabajo.

Para comenzar, daremos una breve introducción de los que es el “Machine Learning” ó Aprendizaje Automático:

El  Aprendizaje Automático es una rama de la Inteligencia Artificial cuyo objetivo es desarrollar técnicas que permitan a las computadoras aprender por sí mismas. De forma más concreta, se trata de crear programas que extraigan el conocimiento de una información suministrada a partir de unos ejemplos, con el fin de generalizar comportamientos. También podemos definir el Aprendizaje Automático como una ciencia que estudia cómo construir programas que mejoren automáticamente con la experiencia.

Existen varios tipos de algoritmos de aprendizaje, entre los que destacan fundamentalmente dos:
-       Aprendizaje Supervisado.
-       Aprendizaje No Supervisado.

Aprendizaje Supervisado: En este tipo de aprendizaje, el algoritmo se encarga de desarrollar una función que establece una correspondencia entre las entradas y las salidas proporcionadas mediante los ejemplos.

Aprendizaje No Supervisado: En este tipo de aprendizaje, todo el proceso de modelado se ajusta a las observaciones, sin que exista ningún tipo de conocimiento a priori.

Existen otros tipos de aprendizaje, como por ejemplo el Aprendizaje por Refuerzo, en el cual, el algoritmo de aprendizaje aprende observando el mundo que le rodea, tomando como información de entrada la retroalimentación recibida del mundo exterior como resultado de sus acciones.

Las aplicaciones del “Machine Learning” ó Aprendizaje Automático, son muy amplias. Algunas de estas aplicaciones, aunque no nos damos cuenta, las utilizamos a diario, como pueden ser los motores de búsqueda usados por los buscadores en Internet, la herramienta de clasificación de spam del correo electrónico, el reconocimiento de voz, el reconocimiento de caracteres escritos, los diagnósticos médicos, la robótica, etc.

El tipo de problema que se nos plantea con la “Detección de Anomalías Cardíacas” es un problema de Aprendizaje Supervisado de Clasificación, en el cuál, a partir de unos datos proporcionados mediante unas plantillas en las que se recoge la actividad ventricular, debemos detectar las anomalías que se pueden producir, como por ejemplo, las taquicardias.

Los datos que se nos proporcionan están tomados de un Electrograma Intracavitatorio (EGM) que registra la señal eléctrica intracardiaca en un dispositivo implantable como un marcapasos. Las plantillas en las que se nos proporcionan los datos, recogen unos 180 milisegundos (ms) de actividad ventricular. De los datos recogidos, para cada muestra se han tomado 38 características, de las cuales 19 son con Ritmo Sinusal (RS) que es el ritmo normal del corazón y las otras 19 características son de una situación con Taquicardia.

Detectaremos dos tipos de Taquicardias: Taquicardias Ventriculares (TV) y Taquicardias Supraventriculares (TSV). 
En la siguiente imagen podemos ver las diferencias existentes entre las características de un ejemplo cualquiera en Ritmo Sinusal (RS) y ambos tipos de Taquicardias (TV y TSV):



Los ficheros en los que se nos proporcionan los datos son los siguientes:
- "cwaNN.mat": Conjunto de Casos de Entrenamiento, con 38 casos de RS/TSV y 68 casos de RS/TV.
- "CWANNbenno.mat": Conjunto de Casos de Test, con 299 casos de RS/TSV y 1088 casos de RS/TV.


Análisis con Regresión Logística (Logistic Regression)

El primer algoritmo de aprendizaje que aplicaremos sobre los datos proporcionados estará basado en el Análisis de Regresión Logística, que es un tipo de análisis de regresión utilizado para predecir el resultado de una variable categórica 'Y' en función de unas variables independientes ó predictoras 'X'. Una vez analizados los Casos de Entrenamiento, con el fin de extraer resultados (conclusiones) de los Casos de Test, podemos seguir varias alternativas en lo que se refiere al planteamiento del problema, mediante la construcción de diversos problemas que iremos viendo más adelante.

Para llevar a cabo los diferentes planteamientos del problema aplicando el Análisis de Regresión Logística, utilizaremos como herramienta para realizar los cálculos, el software matemático "GNU Octave 3.6.4" y para la edición de los ficheros con extensión ".m" usaremos el editor de texto "Notepad++ 6.5.2", ambos de libre distribución.

Para abordar la resolución del problema, primeramente tendremos que cargar los datos de los casos de entrenamiento proporcionados en el fichero "cwaNN.mat". Este fichero contiene dos conjuntos (matrices) de datos, un conjunto con los datos de entrenamiento de RS/TV ("parCWAtv") y otro conjunto con los datos de entrenamiento de RS/TSV ("parCWAtsv").




Ambos conjuntos contienen los valores de las muestras para el entrenamiento de nuestro sistema. El conjunto "parCWAtv" contiene 68 muestras y el conjunto "parCWAtv" contiene 38 muestras, ambos conjuntos con 38 caracteristicas por cada muestra.



Tras cargar el archivo de los casos de entrenamiento, tendremos que construir tanto nuestras variables independientes o predictoras 'X', como nuestra variable categórica 'Y'. La construcción de estas dependerán del planteamiento propuesto en la resolución del problema, pero salvo pequeñas modificaciones, nuestras variables independientes o predictoras 'X' serán todas y cada una de las caracteristicas de cada muestra presentes en el conjunto de entrenamiento proporcionado y nuestra variable categórica 'Y' será la variable que clasifique cada una de las muestras en una de las clases existentes en el planteamiento.



Una vez planteado el problema, utilizaremos la Función de Coste de Regresión Logística. Con esta función de coste obtendremos un valor, que cuanto más cercano a '0' sea dicho valor, mejores serán las predicciones de la hipótesis h(x) que generará nuestro algoritmo de aprendizaje, es decir, si el valor de obtenido de la función de coste es '0', quiere decir que nuestra hipótesis h(x) predice al 100% los resultados de forma correcta.


La implementación de la Función de Coste para Regresión Logística es la siguiente:



Esta función de coste tiene la propiedad de que es una función convexa, y que es la que se utilizar para analizar los modelos de la Regresión Logística. Teniendo en cuenta esta función de coste tenemos que encontrar los parámetros Θ (theta) que encajen con nuestros datos, por tanto lo que vamos a hacer a continuación es tratar de encontrar los parámetros Θ (theta) que minimizan nuestra función de coste J(Θ) con el fin de que el valor de nuestra hipótesis h(x) sea lo más cercano posible a los valores de 'Y' de nuestros ejemplos.

Para la minimización de la función de coste podemos usar diferentes métodos como por ejemplo el Algoritmo de Descenso de Gradiente y los Algoritmos de Optimización Avanzada.

Algoritmo de Descenso de Gradiente: Inicialmente, tomamos un valor inicial para los parámetros Θ (theta), que en este caso, los inicializaremos con valor '0' y después lo que vamos a hacer es ir actualizando los valores de estos parámetros Θ (theta) poco a poco (dependiendo del parámetro α (alpha)) con el fin de ir reduciendo el coste J(Θ). El parámetro α (alpha) determina la tasa de aprendizaje y lo que va a determinar es la dimensión del "paso" que vamos a dar en nuestro descenso.

La actualización de los términos Θ (theta) tiene que hacerse de forma simultánea. Si esta tasa de aprendizaje es un valor muy pequeño, necesitaremos muchas iteraciones para llegar a la convergencia, pero si por el contrario, este valor es grande, puede que no lleguemos a obtener la convergencia.

A las matrices iniciales de datos 'X' tenemos que añadirles una columna adicional que se corresponde con una característica extra denominada 'X0' que acompaña a Θ0 y siempre toma el valor '1':


Ahora para poder aplicar el algoritmo de Descenso de Gradiente, inicializamos nuestro vector de parámetros Θ (theta):



A continuación presentamos nuestro Algoritmo de Descenso de Gradiente:



Ejecución del Algoritmo de Descenso de Gradiente para obtener nuestro vector de parámetros Θ (theta) óptimo:



Una vez que ejecutamos el algoritmo de descenso de gradiente, en función del parámetro α (alpha), que es nuestra "tasa de aprendizaje" y del número de iteraciones, tendremos unos valores de nuestros parámetros Θ (theta) u otros. Cuando disponemos del valor de los parámetros Θ (theta), podemos tomar un caso de ejemplo y el vector de parámetros Θ (theta) y ver el resultado que nos ofrece la hipótesis de nuestro problema de Regresión Logística.


Algoritmos de Optimización Avanzada: Estos algoritmos logran obtener la Regresión Logística mucho más rápidamente que el algoritmo del Descenso de Gradiente. Esto nos permitirá escalar mucho mejor los grandes problemas de aprendizaje automático en los que tengamos un gran número de características.

Para ello utilizaremos una de las funciones proporcionadas por Octave, que es "fminunc":
· La función "fminunc" encuentra un mínimo de una función escalar de varias variables a partir de una estimación inicial.


La función 'h' emitida por nuestro algoritmo de aprendizaje, denominada como "función hipótesis" es una función que tomará como entrada las caracteristicas de los casos de test ('X1', X2', 'X3', ..., 'XN') y con los valores de Θ (theta) almacenados, podremos generar una predicción sobre el ejemplo de test seleccionado.



La salida de nuestra función hipótesis "h(x)" va a ser un número comprendido entre '0' y '1' y dicho número lo vamos a interpretar como la probabilidad estimada de que el valor 'Y' obtenido sea igual a '1' para cada uno de los ejemplos con 'X' características, es decir, si por ejemplo estamos clasificando tumores en benignos ('0') y malignos ('1'), si para un caso concreto obtenemos que nuestra hipótesis da como resultado '0.7', diremos que la probabilidad de que 'Y' sea igual a '1' es de '0.7', es decir, que existen un 70% de posibilidades de que el ejemplo concreto que estamos  tratando, sea un tumor maligno.


Finalmente, una vez que tenemos nuestro vector de parámetros Θ (theta) óptimo, podemos probar que resultados ofrece nuestra Hipótesis de Regresión Logística con los Casos de Test proporcionados. Para probar dichos casos de test, lo primero que tenemos que hacer es cargar el archivo con los datos proporcionados (fichero "CWANNbenno.mat") para después tomar un caso de ejemplo e introducirlo a nuestra función hipótesis junto con el vector de parámetros Θ (theta) hallado anteriormente.


Cuando de nuestra hipótesis obtengamos resultados mayores o iguales a '0.5', esto significará que es más probable que las entradas (caso de test) con sus correspondientes parámetros estén más cerca del resultado asociado al valor '1' que del resultado asociado al valor '0'. Y si por el contrario, el resultado de la hipótesis es menor que '0.5', significará que el caso de test que estamos tratando, esta más cerca del resultado al equivalente al valor '0' que del resultado equivalente al valor '1'.

Planteamiento I (Regresión Logística)

En este planteamiento tomaremos las 38 características de cada muestra con datos de ritmo sinusal (RS) y taquicardia (TV ó TSV) con el fin de poder diferenciar los ejemplos de RS/TV de los ejemplos de RS/TSV. La idea de este planteamiento es que tomando datos con Taquicardias (sin eliminar sus características de Ritmo Sinusal RS), podamos diferenciar entre las Taquicardias Ventriculares (TV) y las Taquicardias Supraventriculares (TSV).

Organizaremos los datos de entrenamiento proporcionados en el fichero "cwaNN.mat" de la siguiente manera, distinguiendo los datos pertenecientes a RS/TV de los datos pertenecientes a RS/TSV. Para ello, etiquetaremos los datos pertenecientes a RS/TV con un '0', y los datos pertenecientes a RS/TSV con un '1':


Nuestras variables independientes o predictoras 'X' serán las caracteristicas tomadas de cada una de las muestras (datos proporcionados en el fichero de casos de entrenamiento), mientras que nuestra variable categórica 'Y' recogerá las etiquetas que hemos establecido para los datos.


Con el fin de poder obtener nuestro objetivo (minimización de la función de coste) de forma mas rápida, podemos normalizar los datos de la siguiente manera:


Una vez normalizados los datos, podemos añadir la columna de los valores "X0 = 1" y construir e inicializar nuestro vector de parámetros theta.


Ahora optimizamos (minimizamos) nuestra función de coste con la funcion "fminunc" de Optimización Avanzada para obtener el valor del vector de parámetros Θ (theta) óptimo.


Una vez tenemos el valor de nuestro vector de parámetros Θ (theta) óptimo, podemos cargar los casos de test, pasárselos a nuestra función Hipótesis de Regresión Logística y evaluar los resultados obtenidos que son los siguientes:



Planteamiento II (Regresión Logística)

En este planteamiento tan solo vamos a tomar las 19 características de cada muestra que reflejan los datos pertenecientes a las taquicardias (TV ó TSV) con el fin de poder diferenciar los ejemplos de TV de los ejemplos de TSV. La idea de este planteamiento es que tomando datos con Taquicardias (eliminando sus características de Ritmo Sinusal RS), podamos diferenciar entre las Taquicardias Ventriculares (TV) y las Taquicardias Supraventriculares (TSV).

Organizaremos los datos de entrenamiento proporcionados en el fichero "cwaNN.mat" de la siguiente manera, distinguiendo los datos pertenecientes a TV de los datos pertenecientes a TSV. Para ello, etiquetaremos los datos pertenecientes a TV con un '0', y los datos pertenecientes a TSV con un '1':


Nuestras variables independientes o predictoras 'X' serán las características tomadas de cada una de las muestras (datos proporcionados en el fichero de casos de entrenamiento), mientras que nuestra variable categórica 'Y' recogerá las etiquetas que hemos establecido para los datos.



Del mismo modo que en el planteamiento anterior, con el objetivo de minimizar la función de coste más rápido, normalizamos los datos. Seguidamente añadimos la columna de los valores pertenecientes a "X0 = 1" y construimos e inicializamos nuestro vector de parámetros Θ (theta). Tras estos pasos podemos minimizar nuestra función de coste con la función "fminunc" de Optimización Avanzada de la cual obtendremos nuestro vector de parámetros Θ (theta) óptimo.

Una vez tenemos el valor de nuestro vector de parámetros Θ (theta) óptimo, podemos cargar los casos de test (eliminando los datos de RS), pasárselos a nuestra función Hipótesis de Regresión Logística y evaluar los resultados obtenidos que son los siguientes:



Planteamiento III (Regresión Logística)

En este planteamiento vamos a realizar dos ejercicios por separado, que consistirán en separar por un lado los datos de una taquicardia en concreto (TV ó TSV) y por otro lado, todo lo que no sean esos datos (RS y TV o TSV), es decir, si queremos detectar ejemplos de Taquicardias Ventriculares (TV) separaremos esos datos de los datos de Ritmo Sinusal (RS) y de los de la Taquicardia Supraventricular (TSV). Del mismo modo lo haremos en el caso en el cual queramos detectar Taquicardias Supraventriculares (TSV). 

Este planteamiento lo realizamos con vista a poder detectar los casos de taquicardia, discriminando mejor dichos casos de los casos de RS y el otro tipo de Taquicardia. Tomaremos las muestras con 19 características cada una de ellas (RS, TV y TSV).

En ambos problemas que planteamos (por separado), organizaremos los datos de la siguiente manera, etiquetando los valores de la Taquicardia que queramos detectar con un '1', y todo lo que no sean datos de lo que queramos detectar con un '0':


Nuestras variables independientes o predictoras 'X' serán las características tomadas de cada una de las muestras (datos proporcionados en el fichero de casos de entrenamiento), mientras que nuestra variable categórica 'Y' recogerá las etiquetas que hemos establecido para los datos.



Del mismo modo que en los planteamientos anteriores, con el objetivo de minimizar la función de coste más rápido, normalizamos los datos. Seguidamente añadimos la columna de los valores pertenecientes a "X0 = 1" y construimos e inicializamos nuestro vector de parámetros Θ (theta). Tras estos pasos podemos minimizar nuestra función de coste con la función "fminunc" de Optimización Avanzada de la cual obtendremos nuestro vector de parámetros Θ (theta) óptimo.

Una vez tenemos el valor de nuestro vector de parámetros Θ (theta) óptimo, podemos cargar los casos de test (haciendo la misma separación que en el entrenamiento), pasárselos a nuestra función Hipótesis de Regresión Logística y evaluar los resultados obtenidos que son los siguientes:



Al aumentar el número de ejemplos de los casos negativos de Taquicardia para el "aprendizaje" , somos capaces de detectar mejor estos casos negativos y distinguirlos así de los casos de Taquicardia (TV ó TSV).

Análisis con Redes Neuronales (Neural Networks)

Una neurona es un tipo de célula del sistema nervioso cuya principal función es la excitabilidad eléctrica de su membrana plasmática y están especializadas en la recepción de estímulos y la conducción (propagación) del impulso nervioso (señales) mediante reacciones electroquímicas. Cada neurona se compone principalmente de un cuerpo (soma), varias ramificaciones procedentes del soma neuronal (dendritas) y una prolongación del soma neuronal (axón). Cada neurona, generalmente, se conecta con otras neuronas y a esa conexión se la denomina "sinapsis".


Las señales propagadas por las neuronas permiten controlar la actividad del cerebro (pensamiento) y también permiten poder establecer cambios de posición y conectividad de estas neuronas (aprendizaje). El sueño de la Inteligencia Artificial es que algún día se puedan llegar a construir máquinas verdaderamente inteligentes.

El funcionamiento general de una neurona es el siguiente: 
Las dendritas de la neurona reciben las señales de otras neuronas, pudiendo considerar estas señales recibidas como las "entradas" de una neurona. La influencia colectiva de todas las entradas pueden "activar" una neurona, siempre y cuando dicha influencia colectiva supere un nivel mínimo de potencial eléctrico. Una vez que la neuronal este activada, transportará una señal procesada a las neuronas con las que esta conectada (salidas), sirviendo así también de entradas para otras neuronas.

Puede existir variabilidad en la sinapsis producida en las conexiones entre las dendritas de las neuronas, pueden influir de manera distinta en la "activación" de las neuronas, debido a que algunas sinapsis refuerzan la activación mientras que otras inhiben la activación ambos casos con diferentes grados. Se cree que esta "variabilidad" es la base del aprendizaje humano.

Las Redes Neuronales (Artificiales) son un paradigma de procesamiento y aprendizaje automático inspirado en la motivación de poder disponer de máquinas que simularan el comportamiento del cerebro, siendo esta una técnica muy eficaz para el aprendizaje automático en la actualidad. Los términos denominados como "pesos" representan la variabilidad en las sinapsis nombradas anteriormente. A continuación podemos visualizar la representación de una Red Neuronal Artificial y también algunos ejemplos de Funciones de Activación.



La neurona artificial más simple es la denominada como "perceptrón" que se caracteriza por ser una neurona artificial con una función de activación umbral. Formalmente, el umbral se representa como otro peso más (denominado como "sesgo") cuya entrada constante es '1' y su peso es negativo. Varios perceptrones componen una red neuronal de una "capa".




El objetivo del aprendizaje de perceptrones en las redes neuronales artificiales es ser capaces de aprender un perceptrón que concuerde con los ejemplos, es decir, que implemente la función booleana f(X1, X2, X3, ..., XN) = Y. Para ello, hay que aprender los "pesos" (w1, w2, ..., wN) y el umbral U (peso w0). En el caso de una red, se considera cada perceptrón por separado.

Para el aprendizaje, la idea es presentar los ejemplos de entrenamiento de forma iterativa al perceptrón y comparando en cada iteración el resultado ofrecido por el perceptrón con el resultado deseado (cálculo del "error"). En el caso en el cual existan diferencias entre el resultado ofrecido por el perceptrón y el resultado deseado, se realizan pequeños ajustes en los "pesos" de las entradas (incluyendo el "peso" que representa el umbral) con el fin de reducir estas diferencias. Este procedimiento se repite hasta que ambos resultados convergen y finalmente el perceptrón ha aprendido.

Para el desarrollo de los diferentes planteamientos que hemos propuesto anteriormente,a pero analizándolos con Redes Neuronales, realizaremos los siguientes pasos:

Primeramente, al igual que en los problemas de Regresión Logística, construiremos nuestras variables independientes ó predictoras 'X' que recogen todas y cada una de las características de cada una de las muestras y nuestra variable categórica 'Y' que recoge las etiquetas que hemos establecido para los datos de cada una de las muestras.

La función de activación que vamos a utilizar va a ser la "función sigmoide" y también emplearemos una generalización de la "Función de Coste de Regresión Logística" para evaluar el coste de dicha función. Al igual que en Regresión Lineal, el objetivo será minimizar el coste de la función J(Θ) (en este caso, podemos identificar los parámetros Θ (theta) como los "pesos" de nuestra red neuronal), por ello, para llevar a cabo este proceso de minimización lo mas rápido posible, normalizaremos los datos de nuestras variables independientes ó predictoras 'X'.



Seguidamente, añadiremos la columna de '1' para los valores 'X0' que serán los valores asociados a la entrada para el umbral de activación de nuestra Red Neuronal y configuraremos los parámetros de nuestra red en función del problema que se nos presente. Después tenemos que inicializar los valores de los "pesos", que en el caso de las Redes Neuronales Artificiales, no podemos inicializarlos con valor '0' como en los problemas de Regresión Logística, sino que los inicializaremos con un valor aleatorio dentro de un rango establecido:



Una vez que tenemos inicializados los "pesos" de nuestra Red Neuronal, podemos minimizar la función de coste, mediante la función de Optimización Avanzada "fmingcde la cual obtendremos nuestros "pesos" de forma optimizada:


En la función "FuncionCosteNN" nos ocupamos de evaluar los resultados en el proceso de activación de cada uno de los perceptrones de la Red Neuronal mediante la aplicación de la "Propagación hacia Adelante" (Forward Propagation), evaluar el coste y finalmente calcular los "errores" producidos en las diferentes capas con el fin de modificar ligeramente los "pesos" de forma adecuada por medio de la "Propagación hacia Atrás" (BackPropagation).



Una vez que tenemos calculados de forma correcta los pesos asociados a las entradas y a las "capas ocultas" de nuestra red neuronal, podemos cargar los ejemplos de entrenamiento proporcionados y evaluar los resultados obtenidos de la Red Neuronal realizando nuevamente un paso de "Propagación hacia Adelante" (Forward Propagation).




Planteamiento I (Redes Neuronales).

En este planteamiento tomaremos las 38 características de cada muestra con datos de ritmo sinusal (RS) y taquicardia (TV ó TSV) con el fin de poder diferenciar los ejemplos de RS/TV de los ejemplos de RS/TSV. La idea de este planteamiento es que tomando datos con Taquicardias (sin eliminar sus características de Ritmo Sinusal RS), podamos diferenciar entre las Taquicardias Ventriculares (TV) y las Taquicardias Supraventriculares (TSV).

Organizaremos los datos de entrenamiento proporcionados en el fichero "cwaNN.mat" de la siguiente manera, distinguiendo los datos pertenecientes a RS/TV de los datos pertenecientes a RS/TSV. Para ello, etiquetaremos los datos pertenecientes a RS/TV con un '0', y los datos pertenecientes a RS/TSV con un '1':


Nuestras variables independientes o predictoras 'X' serán las caracteristicas tomadas de cada una de las muestras (datos proporcionados en el fichero de casos de entrenamiento), mientras que nuestra variable categórica 'Y' recogerá las etiquetas que hemos establecido para los datos.


Del mismo modo que en el planteamiento anterior, con el objetivo de minimizar la función de coste más rápido, normalizamos los datos. Seguidamente añadimos la columna de los valores pertenecientes a "X0 = 1", configuramos los parámetros de nuestra Red Neuronal (entradas, numero de neuronas, salidas, etc.) e inicializamos los pesos asociados a las entradas y a las capas ocultas de nuestra red de forma aleatoria en un rango establecidoTras estos pasos podemos minimizar nuestra función de coste y para ello construimos la función que va a ser minimizada con nuestra función "FuncionCosteNN" y la minimizamos con la función "fmincg" de Optimización Avanzada de la cual obtendremos nuestros "pesos" de forma optimizada.


Una vez tenemos el valor de nuestros "pesos" optimizados, podemos cargar los casos de test (sin eliminar los datos de RS), pasárselos a nuestra Red Neuronal y evaluar los resultados obtenidos de dicha red mediante la realización de un nuevo paso de "Propagación hacia Adelante" (Forward Propagation) que son los siguientes:


Comparando los resultados obtenidos en este planteamiento con Redes Neuronales (Neural Networks) y comparándolos con los resultados obtenidos en el mismo planteamiento pero con el Análisis de Regresión Lineal, si notamos mejoría en las predicciones y por tanto mejorando los valores de "Precisión" y "Recall".

Planteamiento II (Redes Neuronales).

En este planteamiento tan solo vamos a tomar las 19 características de cada muestra que reflejan los datos pertenecientes a las taquicardias (TV ó TSV) con el fin de poder diferenciar los ejemplos de TV de los ejemplos de TSV. La idea de este planteamiento es que tomando datos con Taquicardias (eliminando sus características de Ritmo Sinusal RS), podamos diferenciar entre las Taquicardias Ventriculares (TV) y las Taquicardias Supraventriculares (TSV).

Organizaremos los datos de entrenamiento proporcionados en el fichero "cwaNN.mat" de la siguiente manera, distinguiendo los datos pertenecientes a TV de los datos pertenecientes a TSV. Para ello, etiquetaremos los datos pertenecientes a TV con un '0', y los datos pertenecientes a TSV con un '1':


Nuestras variables independientes o predictoras 'X' serán las características tomadas de cada una de las muestras (datos proporcionados en el fichero de casos de entrenamiento), mientras que nuestra variable categórica 'Y' recogerá las etiquetas que hemos establecido para los datos.


Del mismo modo que en el planteamiento anterior, con el objetivo de minimizar la función de coste más rápido, normalizamos los datos. Seguidamente añadimos la columna de los valores pertenecientes a "X0 = 1", configuramos los parámetros de nuestra Red Neuronal (entradas, numero de neuronas, salidas, etc.) e inicializamos los pesos asociados a las entradas y a las capas ocultas de nuestra red de forma aleatoria en un rango establecidoTras estos pasos podemos minimizar nuestra función de coste y para ello construimos la función que va a ser minimizada con nuestra función "FuncionCosteNN" y la minimizamos con la función "fmincg" de Optimización Avanzada de la cual obtendremos nuestros "pesos" de forma optimizada.


Una vez tenemos el valor de nuestros "pesos" optimizados, podemos cargar los casos de test (sin eliminar los datos de RS), pasárselos a nuestra Red Neuronal y evaluar los resultados obtenidos de dicha red mediante la realización de un nuevo paso de "Propagación hacia Adelante" (Forward Propagation) que son los siguientes:


Comparando los resultados obtenidos en este planteamiento con Redes Neuronales (Neural Networks) y comparándolos con los resultados obtenidos en el mismo planteamiento pero con el Análisis de Regresión Lineal, si notamos mejoría en las predicciones y por tanto mejorando los valores de "Precisión" y "Recall".