sábado, 23 de agosto de 2008

Naive Bayes: "Clasificador de Texto"

En este caso la probabilidad se obtiene a partir de frecuencias, Se calcula el número de veces que se da cada valor para cada clase.

El clasificador de texto clasificará a los documentos (de noticias) en dos clases: Deporte y No Deporte.Para el entrenamiento se ha utilizado tres documentos que pertenecen al rubro de noticias deportivas y un documento que pertenece a las noticias de música

Ingresando Documentos de Noticias Deportivas:

Ingresando Documento de Noticia Musical:

Ahora Vamos a Clasificar la siguiente noticia:
"La serie entre Ecuador y Perú de la Copa Sudamericana se define a las 17 horas de hoy , en el estadio Atahualpa de la capital ecuatoriana . Deportivo Quito sale con la ventaja de haber empatado sin goles en Lima ante el Universitario de Pero , pero de nada le servirá si no logra un triunfo . Un nuevo empate forzaría a los tiros penales"

como podemos ver en la imágen anterior la noticia pertenece a la clase "deporte" con una probabilidad de 0.64

Para poder verificar el "aprendizaje" ingresaremos la siguiente noticia:
" Durante seis años , el chelista ha acudido a Oviedo para formar parte del claustro de los cursos de perfeccionamiento musical que organiza la Asociación Encuentros Musicales de Asturias , que se imparten actualmente hasta el próximo día 23 del mes de agosto ."


Como podemos ver la clasificación es correcta, porque la noticia pertenece al rubro musica.

Adaline: “Convertir un número binario a decimal”.

En la implementación se ha considerado realizar un programa generalizado, de manera que se pueda aplicar a diferentes casos, para esto las entradas son patrones, que contienen un vector característico y un valor deseado de salida, el factor de aprendizaje y el valor mínimo de error.
Como criterio de parada se considero que el error de época sea menor que un valor determinado (0.1).

En la fase de entrenamiento se consideró los siguientes patrones

1 0 0 1 1
1 0 1 0 2
1 0 1 1 3
1 1 0 1 5

Factor de aprendizaje = 0.3
Valor de error mínimo = 0.1


Se probó con estos datos el programa y el aprendizaje nos dio como resultados lo siguiente:
Número de Iteraciones = 49
w = 0.6350 3.7432 1.6340 0.5798

Ahora para probar que el aprendizaje fue correcto se probó con las siguientes nuevas entradas:

>> convertidor(w,[1,1,1,1])
rpta = 7

>> convertidor(w,[1,1,0,0])
rpta = 4

>> convertidor(w,[1,1,1,0])
rpta = 6

Como podemos notar los resultados son los deseados y por lo tanto queda demostrado que el aprendizaje fue correcto.

Notas:
El factor de aprendizaje mas adecuado que se encontró es el 0.3 porque por ejemplo si probamos con el factor 0.5 el aprendizaje no es tan bueno, como podemos notar a continuación:

Número de Iteraciones = 45
w = 0.1335 4.3759 1.8665 0.7593

>>convertidor(w,[1,1,0,1])
rpta sin redondeo=5.2687
rpta = 5

>> convertidor(w,[1,1,0,0])
rpta sin redondeo=4.5094
rpta = 5

Como se puede notar el resultado de la segunda conversión no es correcta, por tanto el factor
de aprendizaje 0.5 no es el adecuado.

Si el factor de aprendizaje es 0.1 se tiene lo siguiente:
Número de Iteraciones = 265
w = 0.2678 4.2013 1.8016 0.8055

>> convertidor(w,[1,1,0,0])
rpta = 4
>> convertidor(w,[1,1,0,1])
rpta = 5
>> convertidor(w,[1,1,1,1])
rpta = 7
>> convertidor(w,[1,1,1,0])
rpta = 6
>> convertidor(w,[1,0,1,1])
rpta = 3
>> convertidor(w,[1,0,1,0])
rpta = 2
>> convertidor(w,[1,0,0,1])
rpta = 1
>> convertidor(w,[1,0,0,0])
rpta = 0
Como podemos notar el aprendizaje es correcto pero el número de iteraciones son muchas.

Perceptrón Primal


El ejemplo mostrado esta aplicado a la funcion AND
patrones de entrada:
bias x1 x2 vEsperado
1 1 1 1
1 1 -1 -1
1 -1 1 -1
1 -1 -1 -1

Perceptrón Simple de Rosemblant



Los patrones de entrada fueron para clasificar las nueces, según el cuadro siguiente:

Nuez Tipo A-1 Tipo A-2 Tipo A-3 Tipo A-4 Tipo A-5 Tipo A-6
Largo 2.2 1.5 0.6 2.3 1.3 0.3
Peso 1.4 1.0 0.5 2.0 1.5 1.0

Entrenada con los siguientes vectores de entrada:
(1, 2.2, 1.4)
(1, 1.5, 1.0) Asociar 1 a la clase A
(1, 0.6, 0.5)

(1, 2.3, 2.0)
(1, 1.3, 1.5) Asociar -1 a la clase B
(1, 0.3, 1.0)

viernes, 22 de agosto de 2008

Inferencia Por Eliminación De Variables En Redes Bayesianas


Los valores de las probabilidades consideradas son las siguientes:

Visito Asia(V) -- 0.1
Fuma(F) -- 0.7

Tuberculosis(T)
V P(T|V)
T 0.7
F 0.1

Cancer al Pulmón(C)
F P(C|F)
T 0.9
F 0.5

Bronquitis(B)
F P(B|F)
T 0.6
F 0.3

Respiración anormal(R)
T C P(R|T,C)
T T 0.9
T F 0.7
F T 0.5
F F 0.3

Resultados R-X(X)
R P(X|R)
T 0.6
F 0.8

Disnea(D)
R B P(D|R,B)
T T 0.9
T F 0.8
F T 0.7
F F 0.5

jueves, 17 de julio de 2008

Inferencia Utilizando Distribución Conjunta Completa


Para este trabajo hemos elegido el tema de las infecciones respiratorias agudas (IRAS), específicamente la neumonía en los niños, considerando las siguientes variables:
  • Factor Respiratorio (FR), esta variable puede tomar tres valores {>40, >50, >60}.
  • Edad, esta variable puede tomar 2 valores {2-11 meses, 1-4años}
  • Disnea (D), esta variable es de tipo booleana {true, false}
  • Estertores Crepitantes (EC), esta variable es de tipo booleana {true, false}
  • Murmullo Vesicular(MV), esta variable es de tipo booleana {true, false}
  • Tos (T), esta variable es de tipo booleana {true, false}
  • Sibilancia (S), esta variable es de tipo booleana {true, false}
  • Cianosis (C), esta variable es de tipo booleana {true, false}

Todas estas variables las hemos obtenido de un Estudio sobre signos y síntomas indicadores de neumonía en la infancia y su utilización en programas de control de infecciones respiratoriasagudas (IRA), el cual lo pueden encontrar aquí. Con este estudio pudimos también obtener la tabla de distribución conjunta completa, la cual se muestra a continuación(por cuestiones de espacio ha quedado dividida en tres partes):







La implementación se realizó de dos formas:
  1. En la primera forma se decidió considerar la siguiente estructura:
    Estructura{ FR de tipo Byte
    D de tipo boolean
    T de tipo boolean
    EC de tipo boolean
    MV de tipo boolean
    S de tipo Boolean
    C de tipo boolean
    Edad de tipo string
    Valor de tipo double}

    A partir de esta estructura se crea una matriz, de manera que cada una de las celdas de la tabla, de distribución conjunta completa, tiene la forma de dicha estructura.
    Esta forma de trabajar trajo varios problemas pues para calcular un tipo de probabilidad como por ejemplo: P (FR ^ D), la codificación es tediosa, es decir se tenia que redundar demasiado en el código (no permitía simplificar el proceso).
    De todas maneras se logro implementar las probabilidades, pero con demasiadas líneas de código.
  2. En la segunda forma ya no se ha considerado una estructura como en el primer caso, sino más bien una matriz de n x 17, donde ‘n’ es el número de celdas que existe en la tabla de distribución conjunta completa.


Así por ejemplo para la primera celda la fila uno de la matriz será:


Como podemos ver cada fila de la matriz es una codificación en binario, en donde el valor es 1 si la variable ocurre, sino es 0.

Realizando este tipo de implementación se pudo simplificar todo el trabajo hecho en la primera forma, pues ya se sabía explícitamente que por ejemplo a FR>40 le corresponde el número 12, y por tanto para calcular su probabilidad, lo que hacemos es mantener fija la columna 12 de la matriz y el resto variar.
Por tanto la mejor manera de implementar este problema es usando una codificación binaria para cada celda de la tabla de distribución conjunta completa.

lunes, 14 de julio de 2008

Problema de Satisfacción de Restricciones (PSR)

Para conocer un poco sobre PSR puedes ver las diapositivas del curso aquí

En esta oportunidad hemos implementado un algoritmo Algoritmo para PSR que utiliza heurística de grado, heurística MVR y forward checking para el problema de coloración de mapas.

El problema de coloración de mapas ha sido simplificado a colorear un grafo, donde los nodos representan a los lugares del mapa y los arcos representan a las restricciones.
Inicialmente hemos usado un dominio de tres colores, lo que traía como consecuencia de que existan soluciones inconsistentes y por tanto el grafo no era coloreado. Debido a este problema se considero usar un dominio con cuatro colores, por la existencia del teorema de los cuatro colores, para el coloreado de grafos, el cual dice que todo grafo puede ser coloreado con a lo mas 4 colores.
Aplicando este cambio donde el dominio es ahora cuatro colores, entonces nuestro programa debe colorear cualquier grafo, es decir la solución siempre es consistente


A continuación se muestra algunas imagenes del programa.
En este caso el coloreado se realiza con un dominio de 3 colores, la solución es consistente.

Al igual que en el caso anterior el dominio es de 3 colores, pero la solución no se encuentra, es decir es inconsistente.

En este caso se usa un dominio de 4 colores, como se dijo antes el grafo debe ser coloreado( encuenrta solución)