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'.