Aprendizaje Computacional Eduardo Morales y Jesús González Objetivo General La capacidad de aprender se considera como una de los atributos distintivos del ser humano y ha sido una de las principales áreas de investigación de la Inteligencia Artificial desde sus inicios. En los últimos años se ha visto un crecimiento acelerado en la capacidad de generación y almacenamiento de información, debido a la creciente automatización de procesos y los avances en las capacidades de almacenamiento de información. En gran parte debido a esto, se han desarrollado una gran cantidad de herramientas y técnicas que tienen que ver con el análisis de información. En este aspecto, el desarrollo en el área de aprendizaje ha sido fundamental. El área de aprendizaje en general trata de construir programas que mejoren su desempeño automáticamente con la experiencia. Los objetivos del curso son: dar un panoráma general de lo que es aprendizaje computacional y conocer a detalle las técnicas más importantes empleadas. Temario Los temas que se van a ver en clase son: 1. Introducción a aprendizaje computacional 2. Técnicas principales: • Árboles de decisión y regresión • Reglas de clasificación • Reglas de asociación • Programación lógica inductiva • Aprendizaje basado en grafos • Aprendizaje bayesiano y Redes bayesianas • Aprendizaje basado en instancias y casos • Clustering i • Aprendizaje por refuerzo 3. Evaluación de algoritmos (intercalado con las técnicas) 4. Conclusiones Existen muchos otros temas de aprendizaje. Algunos de estos se ven en el segundo curso de aprendizaje (ver página) como: • Aprendizaje basado en Kernels y Support Vector Machines • Ensambles de clasificadores • Selección de atributos • Aprendizaje semi-supervisado Otros temas se cubren en otros cursos: • Algoritmos genéticos • Redes neuronales Existen temas que se pueden incluir en el segundo curso de aprendizaje como son: • Colonias de hormigas (ant colony optimization o ACO) y de enjambres (particle swarm optimization o PSO) • Modelos lineales de regresión, Bayesianos. • Modelos lineales para clasificación (funciones discriminantes, modelos generativos, modelos discriminativos, regresión logı́stica) • Modelos basados en muestreo • Procesos Gaussianos • Análisis de componentes principales ii • Modelos para secuencias Evaluación La evaluación del curso se hará en base a dos examenes y un proyecto final (cada uno contando 1/3 parte de la calificación final). Lista de posibles Proyectos: La siguiente es una lista tentativa (no exhaustiva) de posibles proyectos del curso. • Analizar como afecta el ruido a las técnicas de muestreo (sobre y submuestreo). • Algoritmo de selección de atributos favoreciendo la clase minoritaria • Aprendizaje por refuerzo distribuido • Aprendizaje de acciones continuas (en un simulador de vuelo o en robótica móvil) • Aprendizaje de reglas por imitación (aplicado a ajedrez o simulador de vuelo o robot móvil) • Aprendizaje semi-supervisado (evaluar asignación de pesos diferentes a las instancias no clasificadas). • Crear nuevos atributos (constructive induction) • Reimplementar algún algoritmo reciente de las técnicas vistas en clase con alguna mejora. • Aprendizaje jerárquico multiclase • Aprendizaje en secuencias iii Referencias 1. T. Mitchell (1997) Machine Learning, McGraw–Hill. 2. I.H. Witten, E. Frank (2005) Data Mining: practical machine learning tools and techniques 2nd. Edition. Morgan Kaufmann 3. J. Han, M. Kamber (2001) Data Mining: concepts and techniques, Morgan Kaufmann. 4. D. Hand, H. Mannila, P. Smyth (2001). Principales of Data Mining, MIT Press 5. R. Michalski, I. Bratko, M. Kubat (1998) Machine Learning and data mining: methods and applications, John Wiley and Sons. 6. B. Schölfopf, A. Smola (2002). Learning with Kernels: Suport Vector Machines, Regularizartion, Optimization, and Beyond, MIT Press. 7. R. Sutton, A. Barto (1998). Reinforcement Learning: An Introduction. MIT Press. 8. N. Lavrac, S. Džeroski (1994). Inductive Logic Programming: Techniques and Applications. Ellis Horwood. 9. T. Hastie, R. Tibshirani, J. Friedman (2001). The Elements of Statistical Learning: Data Mining, Inference, and Prediction. Springer-Verlag. 10. C. Bishop (2006). Pattern Recognition and Machine Learning. Springer. iv Capı́tulo 1 Aprendizaje Posiblemente la caracterı́stica más distintiva de la inteligencia humana es el aprendizaje. Desde el comienzo de las computadoras se cuestionó si serı́an capaces de aprender. El darles la capacidad de aprendizaje a las máquinas abre una amplia gama de nuevas aplicaciones. El entender también como pueden aprender las máquinas nos puede ayudar a entender las capacidades y limitaciones humanas de aprendizaje. El aprendizaje humano en general es muy diverso e incluye entre otras cosas: • adquisición de conocimiento • desarrollo de habilidades a través de instrucción y práctica • organización de conocimiento • descubrimiento de hechos • ... De la misma forma el aprendizaje computacional (ML) se encarga de estudiar y modelar computacionalmente los procesos de aprendizaje en sus diversas manifestaciones. 1 En general, se busca contruir programas que mejoren automáticamente con la experiencia. Aunque no se tienen programas que aprenden tan bien como los humanos, existen algoritmos que han probado ser muy efectivos para ciertas tareas. Se tienen más resultados teóricos y una mayor cantidad de aplicaciones reales, lo cual refleja cierto proceso de maduración del área. Aprendizaje: cambios adaptivos en el sistema para hacer la misma tarea(s) de la misma problación de una manera más eficiente y efectiva la próxima vez [Simon, 83]. Aprendizaje: un programa de computadora se dice que aprende de experiencia E con respecto a una clase de tareas T y medida de desempeño D, si su desempeño en las tareas en T , medidas con D, mejoran con experiencia E [Mitchell, 97]. Muchas veces los objetivos dependen de la perspectiva que se les de: • ingenieril (resolver tareas) • simulación cognitiva • análisis teórico Instruir una máquina a realizar cierta tarea lleva mucho tiempo. ML trata de suavizar la carga mediante herramientas que pueden automatizarlo. Desde el punto de vista de sistemas basados en conocimiento... “. . . knowledge is currently acquired in a very painstaking way; individual computer scientists work with individual experts to explicate the expert’s heuristics – the problem of knowledge acquisition is the critical bottleneck in artificial intelligence.” Feigenbaum and McCorduck [Feigenbaum, pp. 79-80] “Knowledge engineers have generally assumed that the procedural knowledge which drives an expert’s skilled behavior can be 2 elicited by dialogue. The findings of the past decade in brain science, cognitive psychology and commercial software do not support this idea. Evidence is lacking that skills, having once reached the “automization” stage, can be de-automized by dialogue so as to make their inner workings accessible to introspective report.” Donald Michie [Michie, pp. 1] Existen diversas tareas que se pueden hacer con sistemas de aprendizaje. Entre ellas podemos en general clasificarlas como sigue: • Descripción: normalmente es usada como análisis preliminar de los datos (resumen, caracterı́sticas de los datos, casos extremos, etc.). Con esto, el usuario se sensibiliza con los datos y su estructura. Busca derivar descripciones concisas de caracterı́sticas de los datos (e.g., medias, desviaciones estándares, etc.). • La Predicción la podemos dividir en dos: Clasificación y Estimación. – Clasificación: Los datos son objetos caracterizados por atributos que pertenecen a diferentes clases (etiquetas discretas). La meta es inducir un modelo para poder predecir una clase dados los valores de los atributos. Se usan por ejemplo, árboles de decisión, reglas, SVM, etc. – Estimación o Regresión: las clases son continuas. La meta es inducir un modelo para poder predecir el valor de la clase dados los valores de los atributos. Se usan por ejemplo, árboles de regresión, regresión lineal, redes neuronales, LWR, etc. • Segmentación: separación de los datos en subgrupos o clases interesantes. Las clases pueden ser exhaustivas y mutuamente exclusivas o jerárquicas y con traslapes. Se puede utilizar con otras técnicas de minerı́a de datos: considerar cada subgrupo de datos por separado, etiquetarlos y utilizar un algoritmo de clasificación. 3 Se usan algoritmos de clustering, SOM (self-organization maps), EM (expectation maximization), k-means, etc. Normalmente el usuario tiene una buena capacidad de formar las clases y se han desarrollado herramientas visuales interactivas para ayudar al usuario. • Análisis de dependencias: El valor de un elemento puede usarse para predecir el valor de otro. La dependencia puede ser probabilı́stica, puede definir una red de dependencias o puede ser funcional (leyes fı́sicas). También se ha enfocado a encontrar si existe una alta proporción de valores de algunos atributos que ocurren con cierta medida de confianza junto con valores de otros atributos. Se pueden utilizar redes bayesianas, redes causales, y reglas de asociación. • Detección de desviaciones, casos extremos o anomalias: Detectar los cambios más significativos en los datos con respecto a valores pasados o normales. Sirve para filtrar grandes volúmenes de datos que son menos probables de ser interesantes. El problema está en determinar cuándo una desviación es significativa para ser de interés. • Aprendizaje de cuál es la mejor acción a tomar a partir de experiencia: Esto involucra búsqueda y exploración del ambiente. Esto está relacionado principalmente con aprendizaje por refuerzo, pero también con técnicas como aprendizaje de macro-operadores, chunking y EBL. • Optimización y búsqueda: Existen una gran cantidad de algoritmos de búsqueda tanto determinı́stica como aleatoria, individual como poblacional, local como global, que se utilizan principalmente para resolver algún problema de optimización. Aquı́ podemos incluir a los algoritmos genéticos, recocido simulado, ant-colony, técnicas de búsqueda local, etc. Algunas de las técnicas más comunes son: • Arboles de decisión y reglas de clasificación: realizan cortes sobre una variable (lo cual limita su expresividad, pero facilita su comprensión). 4 Generalmente se usan técnicas heurı́sticas en su construcción (e.g., ID3, C4.5, CN2). Ver figura 1.1. • Métodos de clasificación y regresiones no–lineales: tratan de ajustar combinaciones de funciones lineales y no–lineales, por ejemplo, redes neuronales (e.g., backpropagation), métodos de splines adaptativos, etc. Ver figura 1.2 • Métodos basados en ejemplos prototı́picos: se hacen aproximaciones en base a los ejemplos o casos más conocidos (Examplar–based learning y Case–based resoning). El problema es cómo determinar una medida de similaridad adecuada. Ver figura 1.3. • Modelos gráficos de dependencias probabilı́sticas: básicamente se utilizan redes bayesianas, en donde dado un modelo estructural y probabilı́stico, se encuentran los valores de ciertas variables dados valores de otras variables. Ver figura 1.4. • Modelos relacionales: Programación lógica inductiva (o ILP), en donde la búsqueda del modelo se basa en lógica y heurı́sitcas. Ver figura 1.5. • Reglas de Asociación: reglas que relacionan un conjunto de pares atributovalor con otros pares atributo-valor. Por ejemplo: edad(X, 20 . . . 29) ∧ ingresos(X, 20K..29K) ⇒ compra(X, CD) [soporte = 2%,confianza = 60%] • Clustering: agrupan datos cuya distancia multidimensional dentro de la clase es pequeña y entre clases es grande. Ver figura 1.6. Algunos ejemplos de aplicaciones que usan aprendizaje: • Sistemas de reconocimiento de voz (e.g., SPHINX, Lee 89), • Manejo de vehı́culos autónomos (ALVINN, Pomerleau 89) • Clasificación de nuevas estructuras de astronomı́a (SkyCat, Fayyad et al. 95) • Aprendiendo a jugar Backgammon (TD-Gammon, Tesauro 92) 5 DV_T O3_Q 120 NO2_F 57 11 O3_Q NO2_X C5 DV_X 49 46 SO2_F SO2_L DV_F 72 C7 32 C4 C4 C7 39 89 39 C4 O3_L C5 C1 DV_L RH_Q RH_F 219 286 484 C10 C5 C1 C10 NOX_X NO2_T 45 87 DV_T RH_L TMP_L C2 168 291 219 C11 C13 O3_X C3 TMP_F C11 231 NO2_T 227 VV_Q C3 C7 43 HORA 23 10 C3 NOX_X RH_Q C6 C7 77 346 VV_T RH_L C2 DV_X 43 162 423 C12 C6 C8 C6 C2 C3 Figura 1.1: Predicción de Ozono en la Ciudad de México. 6 Salidas Entradas Figura 1.2: Red Neuronal prototı́pica. Figura 1.3: Aprendizaje basado en instancias. 7 nivel socioecono. edad auto extra buen estudian. ano auto marca experien. seguri. habilid. manejo anti robo kilome. ABS valor comerc. histor. manejo calidad manejo bolsas aire lugar hogar accident robo condic. camino defensas costo medico danos persona. costo coche propio costo otros autos costo personal costo propied. Figura 1.4: Red bayesiana de seguros de coches. 8 ACTIVO + O=N + CH = N - NH - C - NH - O N=O - O O nitrofurazone 4-nitropenta[cd]pyrene INACTIVO - O O + N + N NH - O O 6-nitro-7,8,9,10-tetrahydrobenzo[a]pyrene 4-nitroindole U V Y=Z W X Figura 1.5: Predicción de mutagénesis. 9 x x x x x x Figura 1.6: Ejemplo de Clustering. 10 Por otro, existe una gran cantidad de aplicaciones reales relacionadas con descubrimiento de conocimiento en base de datos que utilizan algún algoritmo de aprendizaje. Estas aplicaciones se encuentran en áreas tales como: • astronomı́a: clustering y clasificación de cuerpos celestes • biologı́a molecular: predicción de substancias cancerı́genas, genoma humana, etc. • aspectos climatológicos: predicción de tormentas, etc. • medicina: caracterización y predicción de enfermedades • industria y manufactura: diagnóstico de fallas • mercadotécnia: identificar clientes susceptibles de responder a ofertas de productos y servicios por correo, selección de sitios de tiendas, etc. • inversión en casas de bolsa y banca: análisis de clientes, aprobación de prestamos, etc. • detección de fraudes y comportamientos inusuales: telefónicos, seguros, electricidad, etc. • análisis de canastas de mercado para mejorar la organización de tiendas • aprendizaje de tareas en robótica • ... Aprendizaje tiene muchas áreas relacionadas: • Inteligencia Artificial: manejo simbólico, búsqueda, uso de conocimiento del dominio • Métodos Bayesianos: teorema de Bayes, algoritmos para estimar valores de variables no observadas • Teorı́a de complejidad computacional: cotas teóricas de complejidad, número de ejemplos para aprender, etc. 11 • Teorı́a de control: para optimizar objetivos y predecir el estado siguiente de lo que se está controlando. • Teorı́a de información: medidas de entropı́a, principio de longitud de descripción mı́nima. • Filosofı́a: principio de Occam, inducción • Psicologı́a y neurobiologı́a: modelos de aprendizaje y neuronales • Estadı́stica: caracterización de errores, niveles de confianza, pruebas. Consideraciones y retos actuales Existen muchos puntos que aclarar cuando se quiere correr o desarrollar algún algoritmo de aprendizaje. Algunos de estos son: • Qué algoritmos existen para resolver cierta tarea? cuándo y cómo usarlos? qué propiedades tienen? • Cuántos datos o tiempo de entrenamiento necesito? qué tanta confianza puedo tener en los resultados? • Cómo y cuándo usar conocimiento del dominio? • ... Se espera que algunas de estas preguntas se puedan resolver al final del curso. Existen otros retos actuales para el área de aprendizaje. Tales como: • Volúmen de datos (mega, giga y hasta terabytes) • Alta dimensionalidad • Muchos atributos y pocos datos • Sobreajuste (overfitting) de modelos en los datos • Datos y conocimiento dinámicos (datos en BD y los patrones encontrados cambian continuamente) 12 • Ruido, incertidumbre (tanto en datos como en conocimiento del dominio y en patrones descubiertos) y datos incompletos y/o esparsos • Relaciones complejas entre campos, jerarquı́as, relaciones entre atributos, nuevos atributos., etc. • Interpretación de los resultados • Incorporación de conocimiento del dominio • Interacción activa del usuario • Integración con otros sistemas 1.1 Aprendizaje Inductivo El aprendizaje inductivo puede verse como el proceso de aprender una función. Por ejemplo, en aprendizaje supervisado, al elemento de aprendizaje se le dá un valor correcto (o aproximadamente correcto) de una función a aprender para entradas particulares y cambia la representación de la función que está infiriendo, para tratar de aparear la información dada por la retroalimentación que ofrecen los ejemplos. Un ejemplo es un par (x, f (x)), donde x es la entrada (que generalmente es un vector) y f (x) la salida. El proceso de inferencia inductiva pura (o inducción) es: dada una colección de ejemplos de f , regresar una función h tal que se aproxime a f . A la función h se le llama la hipótesis. En principio existen muchas posibilidades para escoger h, cualquier preferencia se llama bias o sesgo. Todos los algoritmos de aprendizaje exhiben algún tipo de sesgo. La selección de una representación para la función deseada es probablemente el factor más importante en el diseño de un sistema de aprendizaje. Desde un punto de vista más tradicional (hablando de representaciones simbólicas/reglas,...), podemos decir que una buena parte de ML está dedicada a inferir reglas a partir de ejemplos. Descripciones generales de clases 13 de objetos, obtenidas a partir de un conjunto de ejemplos, pueden ser usadas para clasificar o predecir. En general, el interes no está en aprender conceptos de la forma en que lo hacen los humanos, sino aprender representaciones simbólicas de ellos. Angluin y Smith listan cinco elementos que deben de especificarse para caracterizar un problema de inferencia inductiva: 1. La clase de reglas 2. El espacio de hipótesis 3. El conjunto de ejemplos y su presentación 4. La clase del método de inferencia 5. El criterio de éxito La clase de reglas: La clase de reglas denota la clase de funciones o lenguaje bajo consideración. Por ejemplo, todas las expresiones regulares sobre un alfabeto especı́fico, lenguajes libres de contexto, funciones recursivamente enumerables, programas en Prolog, etc. El espacio de hipótesis: El espacio de hipótesis es el conjunto de descripciones tal que cada regla en la clase tiene por lo menos una descripción en el espacio de hipótesis. Diferentes espacios de hipótesis pueden usarse para la misma clase de reglas. El lenguaje de hipótesis debe de tener descripciones para todas las reglas en la clase, pero puede contener más. Por conveniencia, normalmente se asume que el lenguaje descrito por el espacio de hipótesis (i.e., el lenguaje de hipótesis) es el mismo que el de la clase de reglas: • Lenguaje de Hipótesis: la sintáxis usada en la construcción de hipótesis 14 • Espacio de Hipótesis: el conjunto de todas las posibles hipótesis dentro del lenguaje de hipótesis El lenguaje de hipótesis determina el espacio de hipótesis del cual el método de inferencia selecciona sus reglas. El lenguaje impone ciertas restricciones (o preferencias) en lo que puede ser aprendido y qué estrategias de razonamiento son permitidas. Al escoger un lenguaje, debemos de considerar no sólo lo que queremos que el sistema realice, sino también qué información se le debe de proporcionar al sistema de entrada para permitirle resolver el problema, y si lo va a resolver a tiempo. Al igual que en los mecanismos de razonamiento utilizados para representar conocimiento, aquı́ existe un balance fundamental entre la expresividad y la eficiencia (ver figura 1.7 y 1.8). El lenguaje de hipótesis depende del área de aplicación. Una vez definido, una buena parte del tiempo de desarrollo se dedica a seleccionar cuidadosamente las estructuras de conocimiento adecuadas para la tarea de aprendizaje. Este tiempo se vuelve más crı́tico cuando el lenguaje de hipótesis restringe la expresividad de tal forma que el conocimiento del dominio tiene que adaptarse al formalismo adoptado. El proceso de indución puede verse como una búsqueda de hipótesis o reglas. El espacio puede buscarse sistemáticamente, hasta encontrar la regla adecuada. Dado un espacio de hipótesis particular, podemos tener una enumeración de descripciones, digamos d1 , . . . , dn , tal que cada regla en el espacio de hipótesis tiene una o más descripciones en esta enumeración. Dada una colección de ejemplos, identificación en el lı́mite recorre esta lista encontrando la primera descripción, digamos di , que es compatible con los ejemplos vistos y conjetura a di . Este método a pesar de ser poderoso y general es impráctico, para todos exceptuando un número limitado de casos, debido al tamaño del espacio de búsqueda. 15 X XY X XY Y Y XY XY f(X). f(a). f(X) :- g(Y). f(c). f(b). f(X) :- h(Y). f(c) :- h(c). f(a) :- g(X). f(a) :- g(b), h(c). Figura 1.7: El espacio de hipótesis depende de la expresividad del lenguaje. 16 f(x) f(x) = mx + b f(x) = ax3+ bx2+ cx + d f(x) = ax2+ bx + c x Figura 1.8: Qué tan bien se ajusta el modelo depende de la expresividad del lenguaje. Para que el aprendizaje puede realizarse en forma eficiente, es normalmente crucial estructurar el espacio de hipótesis. Esto se puede hacer con un modelo de generalización. A grandes razgos una regla R1 es más general que otra regla R2 (o R2 es más especı́fica que R1 ), si en cualquier mundo R1 puede mostrar los mismos resultados que R2 . Esta estructuración permite cortar ramas durante la búsqueda sabiendo que especializaciones o generalizaciones de reglas hereden alguna propiedad. Las propiedades más comunes son: incapacidad de cubrir un ejemplo conocido como verdadero o probar un ejemplo conocido como falso. Conjunto de ejemplos y su presentación: Existen diferentes tipos de presentación de datos y sus efectos en la inferencia de lenguajes. Los ejemplos pueden dar una retroalimentación directa o indirecta. Por ejemplo, al aprender a jugar un cierto juego, la retroalimentación se puede dar en cada jugada o al final del juego o después de un conjunto de jugadas que provocaron una pérdida de material, etc. Aquı́, surge el problema de asignación de crédito (cuál jugada es responsable del éxito o fracaso). 17 Una presentación puede consistir en: (i) sólo ejemplos positivos y (ii) positivos y negativos. Casi todos los algoritmos requieren presentaciones admisibles, esto es, para cada regla falsa que es consistente con los ejemplos positivos, existe un ejemplo negativo que la refuta (se relaciona con Popper: Las teorı́as deben de ser refutables con hechos). Los ejemplos se usan para probar y formar hipótesis. En la práctica una selección de ejemplos se hace sobre el espacio de ejemplos. Esta selección puede hacerla un: oráculo, el medio ambiente, seleccionada en forma aleatoria, propuesta por el sistema. Una “buena” selección de ejemplos puede mejorar el desempeño de un sistema (ver por ejemplo Active Learning). A veces esa selección puede mejorarse con conocimiento del dominio. Es deseable que la distribución que sigan los ejemplos sea similar a la que van a tener ejemplos futuros. Finalmente, si el sistema es quién tiene el control sobre cuándo experimentar situaciones novedosas o no, entonces se tiene el problema de formar un balance entre exploración y explotación. Métodos de inferencia: Intuitivamente un método de inferencia es un proceso computacional de algún tipo que lee ejemplos y produce hipótesis del espacio de hipótesis. Existe una gran cantidad de métodos. Algunos realizan ajustes graduales en base a refuerzos sobre predicciones sucesivas (e.g., aprendizaje por refuerzo, redes neuronales, regresión, etc.). Otros construyen incrementalmente hipótesis tratando de cubrir la mayor parte de un conjunto de ejemplos (e.g., reglas de clasificación, programas lógicos) o en base a mejores particiones de ejemplos (e.g., árboles de decisión). Otros, guardan ejemplos prototı́picos (e.g., aprendizaje basado en casos y aprendizaje basado en instancias). Algunos buscan relaciones entre variables (e.g., redes Bayesianas). Finalmente, algunos algoritmos combinan o modifican hipótesis promisorias 18 (e.g., algoritmos genéticos). Criterio de éxito: Un componente importante dentro de la especificación de un problema de inferencia es el criterio de éxito. Identificación en el lı́mite es uno de ellos, sin embargo, normalmente es difı́cil saber cuándo el método ha convergido. Recientemente Valiant, propuso un criterio de identificación correcta de una regla a partir de ejemplos usando un criterio estocástico. La idea es que después de un muestreo aleatorio de ejemplos positivos y negativos de una regla, un procedimiento de identificación debe de producir una regla que con “alta probabilidad” no sea “muy diferente” de la regla correcta. Esto se basa en dos parámetros: ǫ y δ. ǫ es una medida de tolerancia o un lı́mite de la diferencia permitida entre la regla correcta y la hipótesis generada. δ es una medida de confianza. Informalmente, un procedimiento de identificación se dice ser probablemente aproximadamente correcto o PAC si la diferencia entre la regla correcta y la hipótesis es menos que ǫ con probabilidad mayor a 1 − δ. En la práctica queremos ciertas garantias de la calidad de la hipótesis. Las más comunes son que sea completo y consistente (ver figura 1.9): • Una hipótesis es completa si cubre todos los ejemplos positivos • Una hipótesis es consistente si no cubre a ninguno de los ejemplos negativos A veces el usuario determina el criterio de paro. Si el sistema genera sus propios ejemplos, éste lo determina. 19 x x x x x x x x x x x x H H Completo e Inconsistente Completo y Consistente x x x x x x x x H x x x x H Incompleto e Inconsistente Inompleto y Consistente Figura 1.9: Completo y Consistente (X positivos y O negativos). 20 1.2 Espacio de Versiones Desde el punto de vista de lógica, en aprendizaje computacional, normalmente empezamos con un predicado meta (M) y tratamos de encontrar una expresión lógica equivalente que nos sirva para clasificar ejemplos correctamente. Cada hipótesis propone una expresión, y la llamaremos la definición candidata del predicado meta. Como lo mencionamos antes, el espacio de hipótesis H es el conjunto de todas las hipótesis {H1 , H2 , . . . , Hn }, que el algoritmo de aprendizaje está diseñado a producir. Cada hipótesis predice que un cierto conjunto de ejemplos (aquellos que satisfacen su definición candidata) son ejemplos del predicado meta. A estos ejemplos también se les llama la extensión del predicado. En este sentido dos hipótesis son lógicamente equivalentes si tienen la misma extensión. Los ejemplos son objetos para los cuales el predicado meta puede o no satisfacerse. Una hipótesis es consistente lógicamente con los ejemplos si se cumple o no dependiendo si el ejemplo es positivo o negativo. Las condiciones por las cuales una hipótesis puede ser inconsistente con algún ejemplo son: • Un ejemplo es un negativo falso para la hipótesis (i.e., la hipótesis dice que debe de ser negativo y en realidad es positivo) • Un ejemplo es un positivo falso para la hipótesis (i.e., la hipótesis dice que debe de ser positivo y en realidad es negativo) Si asumimos que el ejemplo es una observación correcta, un falso positivo o negativo implica que la hipótesis tiene que ser rechazada. 21 Desde un esquema de lógica, podemos caracterizar el aprendizaje inductivo eliminando gradualmente hipótesis que sean inconsistentes con los ejemplos (ver figura 1.10). Sin embargo, el espacio es muy grande (e incluso infinito en muchos casos) haciendo su implantación directa impráctica (sino imposible). Búsqueda de la mejor hipótesis actual: La idea es mantener una sola hipótesis, e irla ajustando conforme nuevos ejemplos se consideran, manteniendo consistencia. El algoritmo básico puede encontrarse descrito desde 1943 (John Stuart Mill). Si tenemos una hipótesis Hr y recibimos un negativo falso, entonces la extensión de la hipótesis debe aumentarse para incluirlo. A esto se le llama generalización. Si tenemos un positivo falso, entonces la extensión de la hipótesis debe reducirse para excluirlo. A esto se le llama especialización. Definimos generalización y especialización como operaciones que cambian la extensión de una hipótesis (ver figura 1.11). Intuitivamente H1 es más general que H2 si la “cubre”. Ahora debemos de ver cómo implementarlas como operaciones sintácticas. Una posible forma de generalizar es eliminando condiciones volviendo las definiciones más débiles y por lo tanto cubriendo un conjunto mayor de ejemplos o añadiendo disjunciones (ver tabla 1.1). De forma dual, podemos especializar añadiendo condiciones o eliminando disjunciones. La estrategia de la tabla 1.1, sigue básicamente una búsqueda en profundidad. Podemos empezar con una generalización o con una especialización que sea consistente con los ejemplos. Las ideas de éste algoritmo se han usado en varios sistemas de aprendizaje, sin embargo, tiene algunos problemas: 22 ?? Ejemplo: 4 Espadas (+) Num ? ? Num Num Negro 4? 4 Negro ? Espadas Num Espadas Ejemplo: 7 Espadas (+) 4 Espadas ?? Num ? ? Num Num Negro Ejemplo: 5 Corazones (-) ? Espadas ? Num Num Negro Num Espadas ? Espadas Num Espadas Ejemplo: 3 Treboles (+) ? Num Ejemplo: Reina Treboles (-) Num Negro Num Negro Figura 1.10: Proceso de eliminación de hipótesis. 23 x x x x x x x Generalizar Especializar x x x x x x x x x x x x x x x Figura 1.11: Proceso de especializar y generalizar. 24 Tabla 1.1: Algoritmo de Mejor Hipótesis Actual. función mejor-hipótesis-actual(ejemplos) regresa una hipótesis H ← cualquier hipótesis consistente con el primer ejemplo en ejemplos para cada uno de los ejemplos restantes hacer si e es positivo falso para H entonces H ← selecciona una especialización de H consistente con ejemplos sino si e es negativo falso para H entonces H ← selecciona una generalización de H consistente con ejemplos si no se puede construir una especialización / generalización consistente entonces falla regresa H 1. Verificar todas las instancias anteriores cada vez que se hace una modificación 2. Es difı́cil encontrar buenas heurı́sticas de búsqueda y el hacer backtracking puede volverse “eterno” El hacer backtracking sucede porque en el algoritmo anterior escoge una hipótesis particular como la mejor (aunque no se tenga suficiente información para estar seguros de tal decisión). Alternativamente, podemos seguir una búsqueda a lo ancho (i.e., mantener varias hipótesis a la vez). Si seguimos una estrategia de especı́fico a general, podemos tratar de tener en el conjunto todas las generalizaciones más especı́ficas que son consistentes con las observaciones (también podemos hacerlo de general a especı́fico). Ver tabla 1.2. Los ejemplos positivos forzan las generalizaciones y los negativos eliminan generalizaciones. Sigue un proceso monotónico de especı́fico a general. 25 Tabla 1.2: Algoritmo de Especı́fico a General a lo ancho. función espec-a-general-breadth(ejemplos) H ← el conjunto de generalizaciones más especı́ficas consistentes con los ejemplos vistos en ejemplos para cada uno de los ejemplos restantes hacer si e es positivo falso para alguna hipótesis en H entonces H ← las hipótesis que no son consistentes con el ejemplo sino si e es negativo falso para alguna hipótesis en H entonces H ← generaliza miembros de H, pero sólo al punto de aceptar el ejemplo Elimina de H cualquier elemento que sea (i) más general que otro elemento o (ii) aparea otros negativos si no se puede construir una generalización consistente entonces falla regresa H 26 Sin embargo, cada vez que generalizamos, seguimos teniendo que verificar consistencia con todos los ejemplos positivos. Búsqueda con el menor compromiso Una alternativa es mantener todas y sólo aquellas hipótesis que son consistentes con todos los datos. Con cada instancia nueva, o no se hace nada, o se eliminan algunas hipótesis. Asumiendo que el espacio de hipótesis inicial tiene una respuesta correcta, la disjunción de hipótesis reducida, va a seguir teniendola. Al conjunto de hipótesis que quedan se le llama espacio de versiones (version space). Una propiedad importante del algoritmo es que es incremental (nunca se tiene que regresar para examinar ejemplos viejos). Problema obvio: si el espacio es gigantesco, como podemos escribir la disjunción completa de hipótesis. El punto es que no la tenemos que escribir! Se puede hacer una analogı́a con números reales. Si queremos representar todos los números entre 1 y 2 ⇒ [1, 2]. Esto lo podemos hacer porque existe un ordenamiento. La generalización / especialización también nos da un orden, en este caso un orden parcial (ver figura 1.12). En este caso, las fronteras no son puntuales, sino conjuntos de hipótesis o conjuntos frontera (boundary sets). Lo bueno es que podemos representar todo el espacio de versiones usando sólo 2 conjuntos de frontera: • la frontera más general (el conjunto G) • la frontera más especı́fica (el conjunto S) Todo lo que está entre S y G está garantizado a ser consistente con los ejemplos (el tamaño de S y G depende del lenguaje). 27 Muy general mas general mas especifico Muy especifico Figura 1.12: Orden parcial entre hipótesis. Resumiendo: • el espacio de versiones actual es el conjunto de hipótesis consistente con todos los ejemplos vistos • cada elemento del conjunto S es consistente con todas las observaciones hasta el momento y no existen hipótesis consistentes que sean más especı́ficas • cada elemento del conjunto G es consistente con todas las observaciones hasta el momento y no existen hipótesis consistentes que sean más generales El espacio de versiones inicial tiene que representar a todas las hipótesis. Esto se puede lograr haciendo G = True (contiene todo) y S = False (su extensión es vacı́a). Se tienen que cumplir dos propiedades: • Toda hipótesis consistente está entre S y G 28 generalizar + H no cubre e H cubre e especializar Figura 1.13: Actualización en el espacio de versiones • Toda hipótesis entre S y G es consistente Lo único que queda es como actualizar S y G. Si Si es una de las hipótesis en S y Gi una en G (ver figura 1.13): 1. Positivo falso para Si : Si es muy general, pero por definición no existe una especialización de Si consistente, por lo que la eliminamos 2. Negativo falso para Si : Si es muy especı́fico y tenemos que substituirlo por su generalización inmediata 3. Positivo falso para Gi : Gi es muy general y tenemos que substituirlo por su especialización inmediata 4. Negativo falso para Gi : Gi es muy especı́fico, pero por definición no existe una generalización de Gi consistente, por lo que la eliminamos Continuamos con estas operaciones hasta que (ver tabla 1.3): 29 Tabla 1.3: Algoritmo de Espacio de Versiones. Inicializa los conjuntos S y G con Falso y Verdadero Para cada ejemplo ei subsecuente si e es negativo entonces • Manten en S sólo las hipótesis que no cubren a ei • Especializa en G aquellas hipótesis que cubran a ei , pero sólo al punto para no cubrirlo y que sigan siendo las más generales • Elimina de G cualquier elemento más especı́fico sino si ei es positivo entonces • Manten en G sólo las hipótesis que cubren a ei • Generaliza en S aquellas hipótesis que no cubran a ei , pero sólo al punto para cubrirlo y que sigan siendo las más especı́ficas • Elimina de S cualquier elemento más general 1. En el espacio de versiones queda una sola hipótesis 2. El espacio de versiones se colapsa (S y G se vuelven vacı́as), por lo que no hay una hipótesis consistente con los ejemplos 3. Se acabaron los ejemplos y tenemos varias hipótesis en el espacio de versiones, i.e., una disjunción de hipótesis (con un nuevo ejemplo, si todas las hipótesis están de acuerdo, clasificamos el ejemplo, sino, podemos tomar un voto mayoritario) Ventajas: • Detecta cuando acaba (cuando los ejemplos son suficientes) • Cuando hay sólo algunos ejemplos, sigue dando resultados Problemas: 30 1. Asume que podemos calcular la relación más-general-que 2. Si el dominio tiene ruido o insuficientes atributos para una clasificación exacta, el espacio de versiones se colapsa 3. Si permitimos una disjunción ilimitada en el espacio de hipótesis, el conjunto S va a tener una disjunción de los ejemplos positivos y G va a tener la negación de la disjunción de los ejemplos negativos Para el manejo de ruido no existe una solución general (pero vamos a ver varias). Para el caso de disjunciones ilimitadas, podemos usar una jerarquı́a de generalizaciones. El algoritmo de espacio de versiones se uso en Meta-Dendral (reglas para predecir como se rompen moleculas quı́micas) y en LEX (resolver problemas de integración simbólica). Puede servir para generar automáticamente ejemplos que dividan el espacio de búsqueda. Unos años depués, se desarrolló una generalización del espacio de versiones, que permite manejar ruido, valores faltantes e incorporar conocimiento del dominio. Para esto utiliza conjuntos de frontores que permiten cierta cantidad de ruido y desarrollo métodos para fusionar elementos de las fronteras. 31 Capı́tulo 2 Aprendizaje Basado en Similaridades (SBL) Atributos Peludo? Edad? Tamaño? si viejo grande no joven grande si joven mediano si viejo pequeño si joven pequeño si joven grande no joven pequeño no viejo grande If Tamaño = mediano Then león If Tamaño = grande and Peludo = si Then león If Tamaño = pequeño Then no león 32 Clase león no león león no león no león león no león no león ~ Tamano ~ pequeno mediano grande leon Peludo no leon no si no leon leon Figura 2.1: Arbol de decisión. If Tamaño = grande and Peludo = no Then no león 2.1 Inducción de Árboles de Decisión (TDIDT: Top Down Induction of Decision Trees) Existe una serie de algoritmos desarrollados desde los principios de los 60’s para la construcción de árboles de decisión. CLS (Hunt et al., 1966), ID3 (Quinlan, 1979), CART (Breiman et al., 1984), ACLS (Niblett et al., 1982), ASSISTANT (Cestnik et al., 1987), C4.5 (Quinlan, 1993), etc. Muchos de estos desarrollos se han convertido en herramientas comerciales, por ejemplo, RuleMaster (1984), Ex-Tran (1984), Expert-Ease (1983), y C5/See5 (2000). Por otro lado, la gran mayorı́a de los ambientes de KDD incluyen alguna versión de ID3 o de CART. El aprendizaje de árboles de decisión es uno de los más sencillos y fáciles de implementar y a su vez de los más poderosos. 33 Un árbol de decisión toma de entrada un objeto o situación descrita por un conjunto de atributos y regresa una decisión “verdadero/falso”. En general pueden tener un rango más amplio que simples funciones Booleanas, pero por simplicidad, consideremos primero sólo estas. Cada nodo interno corresponde a una prueba en el valor de uno de los atributos y las ramas están etiquetadas con los posibles valores de la prueba. Cada hoja especifica el valor de la clase. Expresividad Los árboles de decisión están limitados a hablar de un solo objeto, osea, son escencialmente proposicionales, siendo cada prueba de atributo una proposición. Por lo mismo no podemos usar los árboles de decisión para expresar pruebas sobre dos o más objetos diferentes, e.g. ∃r2 Cercano(r2 , r)∧P recio(r2, p2 )∧ P recio(r, p) ∧ MasBarato(p2 , p) Claro que podrı́amos añadir un atributo Booleano que se llame: RestMásBaratoCerca, pero es intratable para todas las combinaciones de atributos. Por otro lado, los árboles de decisión son completamente expresivos dentro de la clase de lenguajes proposicionales. Osea que cualquier función Booleana puede ser descrita por un árbol de decisión. Trivialmente, podemos tomar cada fila como un camino en la construcción de un árbol. Sin embargo, la tabla es exponencial en el número de atributos. Para muchas funciones, los árboles son relativamente pequeños. Sin embargo, para otras funciones puede requerir un árbol exponencialmente grande. Por ejemplo, la función paridad (i.e., regresa 1 si la suma de 1’s es par) o la función de mayorı́a (regresa 1 si más de la mitad de la entrada es un 1). Para n atributos, hay 2n filas. Podemos considerar la salida como una n función definida por 2n bits. Con esto hay 22 posibles funciones diferentes para n atributos (para 6 atributos, hay 2 × 1019 ). 34 Por lo mismo, tenemos que usar algún algoritmo ingenioso para encontrar una hipótesis consistente en un espacio de búsqueda tan grande. Inducción de árboles de decisión a partir de ejemplos Un ejemplo es descrito por los valores de los atributos y el valor del predicado meta. El valor del predicado meta se le llama la clasificación del ejemplo. Si el predicado es verdadero, entonces el ejemplo es positivo, sino el ejemplo es negativo. En caso de existir más clases, los ejemplos de una sola clase son positivos y el resto de los ejemplos son considerados negativos. Cuando se tiene un conjunto de ejemplos (datos), normalmente se divide aleatoriamente en dos subconjuntos. Uno de entrenamiento (con el cual se construye la hipótesis) y otro de prueba (con el que se prueba la hipótesis encontrada). Más formalmente: 1. Junta una gran cantidad de ejemplos 2. Dividelos en dos conjuntos disjuntos: entrenamiento y prueba 3. Usa el algoritmo de aprendizaje para generar una hipótesis H 4. Mide el porcentage de clasificación correcta de H en el conjunto de prueba 5. Repite los pasos 1 - 4 para diferentes tamaños de conjuntos de entrenamiento y diferentes conjuntos seleccionados aleatoriamente Encontrar un árbol puede ser trivial (e.g., construir un camino por cada ejemplo). Sin embargo, no es bueno para predecir casos no vistos. El problema es que sólo memoriza lo visto, por lo que no extrae ningún patrón de los ejemplos (por lo que no podemos esperar que extrapole). El extraer un patrón significa el poder describir una gran cantidad de ejemplos en forma concisa. Esto también sigue un principio general en los 35 algoritmos de inducción llamada: Ockham’s razor (muchas veces escrito como Occam): dar preferencia a hipótesis más simples que sean consistentes con todas las observaciones. Encontrar el árbol más pequeño es intratable, pero se pueden usar heurı́sticas para encontrar árboles pequeños. Idea: probar primero el atributo más “importante” (el que diferencia mejor los ejemplos). Después que el primer atributo particiona los ejemplos, cada subconjunto es un nuevo problema de aprendizaje a su vez, con menos ejemplos y un atributo menos. Este proceso recursivo tiene 4 posibles resultados (ver tabla 2.1): 1. Si existen ejemplos positivos y negativos, escoge el mejor atributo para particionarlos 2. Si todos los atributos restantes son positivos (o negativos), termina y regresa True (o False) 3. No quedan ejemplos (no ha sido observado un ejemplo con esa combinación de atributos). Regresa un default en base a la clasificación mayoritaria de su nodo padre 4. No hay más atributos, pero seguimos con ejemplos positivos y negativos (i.e., existen ejemplos con la misma descripción, pero diferente clasificación). Posiblemente por ruido y/o falta de atributos y/o dominio no determinı́stico. Posible solución: tomar la clasificación mayoritaria El árbol resultante no necesariamente es el “correcto”. Para eso lo probamos con el conjunto de prueba. Aplicaciones: Es la técnica que posiblemente se ha usado más en aplicaciones reales. Tres ejemplos: • GASOIL (1986): Diseño de sistemas de separación de hidrocarburos en plataformas petroleras de BP, 2,800 reglas, 1 año-hombre de tiempo 36 Tabla 2.1: Algoritmo de construcción de árboles de decisión. función Arbol-decisión(ejemplos,atributos,default) regresa un árbol de decisión entradas:ejemplos: conjunto de ejemplos atributos: conjunto de atributos default: valor de default para el predicado meta if ejemplos = vacı́o then regresa default else if todos los ejemplos tienen la misma clasificación then regresa la clasificación else if atributos = vacı́o then regresa VALOR-MAYORITARIO(ejemplos) else Mejor ← ESCOGE-ATRIBUTO(atributos, ejemplos) Arbol ← nuevo árbol de decisión con Mejor como raı́z para cada valor vi de Mejor do ejemplos i ← {ejemplos con Mejor = vi } Subárbol ← ARBOL-DECISION(ejemplos i , atributos - mejor, VALOR-MAYORITARIO(ejemplos)) añade una rama a Arbol con etiqueta vi y subárbol Subárbol end return Arbol 37 Tabla 2.2: Tabla de ejemplos para decidir si jugar o no golf. Ambiente soleado soleado nublado lluvia lluvia lluvia nublado soleado soleado luvia soleado nublado nublado lluvia Temp. alta alta alta media baja baja baja media baja media media media alta media Humedad alta alta alta alta normal normal normal alta normal normal normal alta normal alta Viento no si no no no si si no no no si si no si Clase N N P P P N P N P P P P P N Ambiente soleado lluvioso nublado Humedad alta N Viento P si normal P N no P Figura 2.2: Arbol de decisión para jugar Golf. 38 de desarrollo, 0.1 de mantenimiento, mejor que expertos y ahorro de millones de dolares. • BMT (1990): Configuración de equipo de protección de incendios en edificios, > 30,000 reglas, 9 años hombre de desarrollo y 2 de mantenimiento (comparado con: MYCIN: 400 reglas, 100 años-hombre de desarrollo o R1/XCON: 8,000 reglas, 180 años-hombre de desarrollo y 30 de mantenimiento). • Aprendiendo a volar (1992): En lugar de construir un modelo preciso de la dinámica del sistema, se aprendió un mapeo adecuado entre el estado actual y la decisión de control correcta para volar un Cessna en un simulador de vuelo. Los datos se obtuvieron de 3 pilotos experimentados haciendo un plan de vuelo asignado 30 veces. Cada acción del piloto creaba un ejemplo. Se usaron 90,000 ejemplos descritos por 20 atributos. Se uso C4.5 que generó un árbol y se convirtió a C. Se insertó en el simulador y logro volar. Los resultados fueron sorprendentes en el sentido de que aparte de aprender a volar a veces tomaba decisiones mejores que las de sus “maestros” 2.1.1 Cómo le hace? La medida utilizada en ESCOGE-ATRIBUTO debe de tener su valor máximo cuando el atributo sea perfecto (i.e., discrimine perfectamente ejemplos positivos y negativos) y mı́nimo cuando el atributo no sea relevante. Una posibilidad es basar la medida en la cantidad de información que da el atributo (basado en la teorı́a de Shannon y Weaver ’49). La cantidad de información mide la (im)pureza en una colección arbitraria de ejemplos. La cantidad de información recibida respecto a la ocurrencia de un evento es inversamente proporcional a la probabilidad de ocurrencia de dicho evento. La información se mide en bits (un bit de información es suficiente para responder Verdadero/Falso a una pregunta cuya respuesta no se sabe). 39 E 1 1/2 1 P(x) Figura 2.3: Función de Entropı́a. Si se tienen vi posibles respuestas con probabilidades P (vi ), el contenido de información es: I(P (v1), . . . , P (vn )) = − n X P (vi )log2 P (vi ) i=1 Nos representa el contenido promedio de información para los diferentes eventos (ver figura 2.3). En el caso de los árboles de decisión queremos estimar las probabilidades de las respuestas. Esto se hace por la proporción de ejemplos positivos y negativos. Si se tienen p ejemplos positivos y n ejemplos negativos, entonces: I( p n p p n n , )=− log2 − log2 p+n p+n p+n p+n p+n p+n Un solo atributo normalmente no nos proporciona toda esta información, pero podemos estimar cuanta, viendo cuanta información necesitamos después de utilizar ese atributo, Cada atributo A, divide a los ejemplos del conjunto de entrenamiento en subconjuntos E1 , E2 , . . . , Ev de acuerdo a los v valores del atributo. 40 Cada subconjutno Ei tiene pi ejemplos positivos y ni ejemplos negativos, pi por lo que para cada rama necesitamos: I( pi +n , ni ) cantidad de infori pi +ni mación para responder a una pregunta. Un ejemplo aleatorio tiene el valor i-ésimo del atributo A con probai +ni bilidad: pp+n . Por lo que en promedio, después de probar el atributo A, necesitamos: E(A) = v X pi + ni ni pi , ) I( pi + ni pi + ni i=1 p + n La cantidad de información que ganamos al seleccionar un atributo está dada por: Ganancia(A) = I( n p , ) − E(A) p+n p+n La ganancia de A me dice el número de bits que ahorramos para responder a la pregunta de la clase de un ejemplo, dado que conocemos el valor del atributo A. Dicho de otra forma, mide que tan bien un atributo separa a los ejemplos de entrenamiento de acuerdo a la clase meta. La función de evaluación escoge el atributo de mayor ganancia. Por ejemplo, si calculamos las ganancias para los atributos con los datos de la tabla 2.2 (asumimos que 0 × log2 (0) = 0): 9 9 I(9, 5) = − 14 log2 ( 14 )− 5 5 log2 ( 14 ) 14 = 0.941 Para Ambiente: soleado: p1 = 2, n1 = 3, I(p1, n1 ) = 0.971 nublado: p2 = 4, n2 = 0, I(p2 , n2 ) = 0 lluvia: p3 = 3, n3 = 2, I(p3 , n2 ) = 0.971 4 5 I(p1 , n1 ) + 14 I(p2 , n2 ) + Entropı́a(Ambiente) = 14 Para Humedad : alta: p1 = 3, n1 = 4, I(p1, n1 ) = 0.985 41 5 I(p3 , n3 ) 14 = 0.694 normal: p2 = 6, n2 = 1, I(p2 , n2 ) = 0.592 Entropı́a(Humedad) = 0.798 Para Viento: no: p1 = 6, n1 = 2, I(p1 , n1 ) = 0.811 si: p2 = 3, n2 = 3, I(p2, n2 ) = 1.0 Entropı́a(Viento) = 0.892 Para Temperatura, Entropı́a(Temperatura) = 0.9111 Las ganancias son entonces: Ganancia(Ambiente) = 0.246 (MAX) Ganancia(Humedad) = 0.151 Ganancia(Viento) = 0.048 Ganancia(Temperatura) = 0.029 Por lo que ID3 escoge el atributo Ambiente como nodo raı́z y procede a realizar el mismo proceso con los ejemplos de cada rama. Para Ambiente tenemos tres subconjuntos: soleado (2+, 3−), nublado (4+, 0−), lluvioso (3+, 2−). Para nublado, no tenemos que hacer nada, mas que asignarle la clase P . Por ejemplo, para soleado hariamos el mismo proceso: Ganancia(Humedad) = 0.97 - [(3/5)0 + (2/5)0] = 0.97 (MAX) Ganancia(Temperatura) = 0.97 - [(2/5)0 + (2/5)1 + (1/5)0] = 0.570 Ganancia(Viento) = 0.97 - [(2/5)1 + (3/5)0.918] = 0.019 Uso del Arbol de Decisión Con el árbol construido, podemos preguntar si esta bien jugar el sábado en la mañana con ambiente soleado, temperatura alta, humedad alta y con viento, a lo cual el ábol me responde que no. ID3 sigue una estrategia hill-climbing, sin backtracking, incrementando en cada paso la complejidad del árbol. Utiliza todos los ejemplos, con los cuales extrae estadı́sticas y que lo hace más robusto que un algoritmo incremental y por otro lado lo hace fácilmente extendible para manejar ruido. Tiende a preferir construir árboles pequeños con atributos con ganancia de información alta cerca de la raı́z. 42 Criterio de Selección: El criterio de selección basado en contenido de información tiende a favorecer atributos que tienen más valores. Por ejemplo, si un atributo tiene valores aleatorios o es un identificador único de cada ejemplo (su clasificación serı́a perfecta y su información al seleccionarlo serı́a 0 (ganancia máxima). Con esto el algoritmo básico construye un árbol de un solo nivel o decision stump. Posible solución: árbol binario, dividiendo los posibles valores de los atributos en dos. Desventaja: árboles difı́ciles de entender + computacionalmente caro (2n subconjuntos para n valores). Otra solución: Para compensar esto se definió una razón de ganancia de información. Esto es dividir la ganancia de información entre la información de la división (la cantidad de información en los ejemplos que se dividió). La información de la división (split information) se define como: SI(A) = − n X P (Ai )log2 P (Ai ) i=1 Esto es, la entropı́a de los datos con respecto a los valores del atributo (versus entropı́a con respecto a la clase). E.g., si un atributo binario divide el conjunto de ejemplos en dos subconjuntos de igual tamaño, el contenido de información de su división es 1. Mientras que un atributo que divide los ejemplos en 14 subconjuntos de tamaño 1, serı́a: 14(−1/14log2(1/14)) = −log2 (1/14). Sin embargo, no siempre funciona ya que puede sobrecompensar. Una práctica común es usar el atributo de la razón de ganancia de información máxima si su ganancia de información es al menos tan grande como el promedio de ganacia de información del resto de los atributos. Además de medidas basadas en ganancia de información, se han propuesto un gran número de diferentes medidas heurı́sticas para seleccionar al “mejor” nodo y construir árboles de decisión. Otra medida muy utilizada es 43 el ı́ndice Gini del sistema CART: Gini(t) = 1 − m X (p(j | t))2 j=1 donde p(j | t) es la frecuencia relativa de la clase j en t. Lo que se quiere es minimizar el ı́ndice Gini al seleccionar un atributo. Para esto se calcula el ı́ndice Gini en cada rama del atributo tomando en cuenta su proporción de ejemplos. Si se divide en k ramas: GiniA = k X ni Gini(k) i=1 n donde ni son los ejemplos de la rama y n los del nodo. 2.1.2 Atributos numéricos y manejo de ruido Hasta ahora hemos visto como funciona el algoritmo con atributos con valores discretos finitos y con datos sin ruido. Veremos ahora algunas extensiones para estos casos. Atributos numéricos: Qué hacer si un atributo es numérico? Lo que normalmente se hace es que se ordena el atributo numérico, se identifican ejemplos adyacentes que tengan valor de clase diferente y se consideran como candidatos los puntos medios de división del valor del atributo. A cada uno de estos se le calcula su ganancia de información. Supongamos que en el ejemplo de la tabla 2.2 la temperatura toma valores enteros, y que los desplegamos en forma ordenada (de menor a mayor) juntando los valores iguales: 64 65 68 69 P N P P 70 71 72 75 80 P N N P N P P 81 83 85 P P N Existen 8 posibles lugares de corte que separan el valor de la clase. Para cada uno de ellos se puede calcular su ganancia de información tomando el 44 punto medio. Por ejemplo, si se toma el punto 71.5, Temperatura < 71.5 tiene 4 P y 2 N, mientras que Temperatura > 71.5 tiene 5 P y 3 N. Cada posible partición entra en competencia con el resto de los atributos y el de mayor ganancia de información es el que se selecciona. Esto implica que en el caso de atributos numéricos, estos pueden aparecer varias veces en una rama de un árbol. Para evitar ordenar ejemplos cada vez que se selecciona un atributo, se guarda con cada subconjunto el orden de acuerdo a un atributo numérico. Esto se puede hacer al principio y no volverlo a repetir. Valores faltantes: Una forma de tratar valores faltantes es como si fueran otro posible valor del atributo. Esto solo funciona si el valor faltante tiene un significado especial en algun sentido. Ignorar los datos es demasiado drástico ya que algunas veces el valor del atributo puede no ser relevante para tomar una decisión. Se han hecho diferentes propuestas para manejar datos faltantes, como llenar estos huecos con el valor más probable o con el valor más probable dada la clase. Lo que hace C4.5 es distribuir los objetos con valores desconocidos entre los demas. En donde se calcula la ganacia en información como si pi fuera: pi + pd · razoni razoni = P pi + ni i (pi + ni ) y pd es la probabilidad de los datos desconocidos. Haciendo lo equivalente para ni . La otra “cara de la moneda” es cómo clasificar (dado que se tiene un árbol) un objeto con atributos desconocidos. Idea: seguir todas las posibles ramas pero tomando en cuenta que algunas 45 son más probables que otras (tienen mas datos que la sorportan). T · razoni Al final se puede calcular el nivel de “confianza” para una clasificación. Si se sabe cierta información acerca del posible valor del atributo, se puede usar algún método probabilı́stico. Costo de clasificación: Si existe un costo en la clasificación, y este se conoce, entonces se puede incorporar a la probabilidad de la predicción de la clase (se multiplica). Normalmente se hace definiendo una matriz de costo en donde la diagonal es 0 y los elementos fuera de la diagonal representan el costo de equivocarse en la clasificación. Entonces, se multiplican las probabilidades de las clases predichas por el clasificador, por la columna correspondiente a la clase predicha en la matriz de costo y se selecciona la clase de menor costo esperado. Variando las matrices de costo se puede variar la clasificación. Recientemente se han estado estudiado el crear árboles cuando el costo de (error en la) clasificación es diferente (e.g., dianosticar cancer). Esto afecta en general el proceso de crecer y de podar (ver abajo) los árboles. Cuando veamos formas de evaluar algoritmos, se mostrara cómo se puede tomar en cuenta el costo de la clasificación definiendo diferentes umbrales dentro de curvas ROC. Por lo pronto una forma simple y general es generar datos de entrenamiento con diferente proporción en las clases. Si lo que nos interesa es que clasifique bien una clase, entonces aumentamos la proporción de ejemplos de esa clase. Esto se puede hacer duplicando instancias de la clase a predecir y/o reduciendo instancias de las otras clases. Algunos algoritmos generan instancias artificialmente y las clasifican de acuerdo a sus vecinos más cercanos. Finalmente, algunos algoritmos permiten incorporarle pesos a los ejemplos de entrenamiento y con esto considerar el costo de una mala clasificación. Ruido y “Overfitting” 46 Algunas de las ventajas de ID3 es que es útil en dominios con un alto grado de no homogeneidad (diferentes relaciones entre atributos en diferentes regiones del espacio de problemas) y alta dimensionalidad (muchos atributos). En general, podemos hablar de que a pesar de que falte información relevante, se pueda construir un árbol con los atributos irrelevantes. Con muchas posibles hipótesis se tiene que tener cuidado en no encontrar “regularidades con poco sentido” a partir de los datos. A este problema se le llama overfitting y afecta a todos los tipos de aprendizaje (i.e., no sólo a los árboles de decisión). Definición: dado un espacio de hipótesis H, una hipótesis h ∈ H se dice que sobreajusta los datos de entrenamiento si existe otra hipótesis h′ ∈ H, tal que h tiene errores más pequeños que h′ en los ejemplos de entrenamiento, pero h′ tiene errores más pequeños que h en toda la distribución de ejemplos. Uno de los problemas a los que se enfrentan los sistemas de aprendizaje, y que provocan el sobreajuste, es cuando los ejemplos de entrenamiento contienen ruido: • valores de atributos erroneos, subjetivos • clasificación equivocada • valores desconocidos Con ruido, se pueden tener dos ejemplos con los mismos valores de atributos, pero clase diferente. En presencia de ruı́do, el algoritmo básico (ID3) tiende a construir árboles de decisión que son más grandes de lo necesario, y no clasifican adecuadamente. En el caso de árboles de decisión se tiene que decidir: • cómo trabajar con atributos inadecuados • cuándo al añadir atributos extra no mejora la predicción del árbol de decisión 47 En general, podemos hablar de dos métodos utilizados para manejar ruido (basados en la condición de terminación): • pruning (o pre-pruning): cambiar el criterio de paro del árbol de decisión para “podar” ramas. • post-pruning: “podar” ramas una vez construı́do el árbol. Pruning: En este caso, lo que se tiene que decidir es cuándo parar o dejar de construir el árbol a pesar de no tener hojas con ejemplos de una sola clase. Se han propuesto técnicas usando un umbral de ganancia de información (si no es mayor al umbral parar), técnicas usando validación cruzada (si no mejora la clasificación con datos desconocidos parar) o medidas basadas en el principio de longitud de descripión mı́nima (MDL). Si el utilizar el atributo aumenta la medida de MDL entonces parar. El problema principal es que en todos estos métodos el criterio de paro está basado en información local. A pesar de que no se tengan buenos criterios en un nodo, puede darse el caso que se puedan hacer buenas particiones en sus descendientes. Post-pruning: Esta es la técnica más utilizada, y algunos de los métodos mencionados arriba se han utilizado para podar el árbol una vez ya construido. Pasos: 1. Crece el árbol como antes (sólo verifica cuando se tienen ejemplos iguales y clases diferentes). 2. “Poda” el árbol. Los problemas que se enfrentan estas técnicas es cuál árbol podado considerar (pueden existir muchas opciones) y cómo estimar el error de clasificación de los árboles. 48 El estimado de re-substitución está dado por la proporción de ejemplos en el nodo mal clasificados si se toma la clase mayoritaria en el nodo. El problema es que el árbol más grande nos dá la mejor clasificación. Una de las técnicas más populares es hacer una estimación directa del error por re-substitución (poda). Como se hace con los mismos datos, se asume que los datos siguen una distribución Bernoulli (por ser unos cuantos (< 100), la cual se aproxima a una Normal con muchos datos), y considerando una estimación pesimista dentro de un nivel de confianza. Para estimar errores se especifican niveles de confianza y las estadı́sticas (media y varianza) se obtienen directamente de los datos y los valores de tablas (e.g., z). 2.1.3 Ejemplo Supongamos que medimos el error de un clasificador con datos de prueba, y nos da 25%. Lo que nos gustaria saber es qué tan confiable es esa estimación. Si obtenemos eso con 100 datos o con 10,000 claramente le vamos a creer más a la estimación con los 10,000 datos. En estadı́stica, un conjunto de eventos independientes se conoce como un proceso Bernoulli (e.g., lanzar una moneda). Podemos pensar en el porcentage de éxito, por lo que queremos saber es qué tanto se acerca ese 75% de éxito al verdadedo porcentage de éxito. Esto se expresa normalmente con intervalos de confianza. Para 750 éxitos de 1,000 pruebas se tiene un 80% de confianza de que el verdadero porcentage de éxito este entre 73.3% y 76.8%. Para 75 éxitos de 100 pruebas el mismo 80% de confianza tiene un intervalo de 70% y 81%. La media y la varianza de un proceso Bernoulli con porcentage de éxito p son p y p(1 − p) respectivamente. 49 Tabla 2.3: Niveles de confianza de una distribución normal. P r[X ≥ z] z 0.1% 3.09 0.5% 2.58 1% 2.33 5% 1.65 10% 1.28 20% 0.84 40% 0.25 Para N pruebas del proceso Bernoulli el porcentage de éxito es f = E/N (E = número de éxitos), y la varianza se reduce por un factor N a p(1−p)/N El valor de éxito se puede tomar como una variable aleatoria, con su media y su varianza. La probabilidad de que una variable aleatoria con media cero esté en un intervalo de confianza de tamaño 2z es P r[−z ≤ X ≤ z] = c. Para una distribución normal los valores de c y de z están dados en tablas (ver tabla 2.3) que expresan la probabilidad de que X sea mayor a z (P r[X ≥ z]). Las tablas nos dan sólo una mitad, pero al ser simétrica la distribución normal podemos considerar la mitad del intervalo que queremos y ese buscarlo en la tabla. Las tablas asumen que se tiene una media 0 y varianza de 1 (z nos mide las desviaciones estandar fuera de la media). Osea que para un 5% nos dice que existe un 5% que la variable X se encuentre a más de 1.65 desviaciones estandar arriba de la media, o un 10% que esté 1.65 desviaciones estandar (arriba o abajo) de la media. P r[−1.65 ≤ X ≤ 1.65] = 90% Para cambiar a una media 0 y varianza 1 tenemos que restar la media p q y dividirlo por la deviación estandar p(1 − p)/N. Esto nos da: 50 f −p ≤ z] = c P r[−z ≤ q p(1 − p)/N Para esto dado un nivel de confiaza c le restamos 1 y dividimos el resultado entre 2 y consultamos la tabla. Tenemos que encontrar una expresión para p. Después de cierta matemática nos queda: s z2 f f2 z2 z2 p = (f + ±z − + )/(1 + ) 2N N N 4N 2 N Esto nos da dos valores uno pesimista y otro optimista. La distribución normal es válida sólo para valores grandes de N (e.g., N > 100). Regresando a la poda de árboles. Como ya vimos, una forma es guardar datos y usarlos para estimar estos errores. Otra posibilidad es usar los mismos datos de entrenamiento para esta estimación, que es lo que hace C4.5. El usar un estimado de éxito p o de error q es lo de menos, p + q = 1. Como los valores obtenidos son de los datos de entrenamiento se usa el valor pesimista que nos da: s f f2 z2 z2 z2 +z − + )/(1 + ) p = (f + 2N N N 4N 2 N Para ver como funciona esto, supongamos que tenemos el subárbol de la figura 2.4. Usamos c = 25% (z = 0.69). Para la rama izquierda tenemos 2 éxitos de 6 casos, lo cual nos da una f = 0.33, Poniendo esto en la fórmula nos da p = 0.47 (aquı́ se ve la parte pesimista ya que en lugar un 33% nos da un 47%). Para la rama de enmedio, tenemos 1 éxito de 2, lo cual nos da p = 72. La rama de la derecha es igual a la izquierda. 51 Temp. alta 2P 4N baja media 2P 1P 4N 1N Figura 2.4: Subarbol de decisión. La combinación de estos valores tomando en cuenta el porcentage de ejemplos de cada uno, nos da 0.51. Ahora para la clase mayoritaria del nodo tenemos f = 5/14 lo cual nos da p = 0.46, que como es menor, entonces podamos esa rama. Al cambiar el criterio de paro, podemos tener hojas con ejemplos de diferentes clases. Posibles soluciones: • que las clases tomen valores fraccionarios (p/(p+n)) • tomar la clase mayoritaria (mejor si se quiere minimizar el error esperado) En general con poco nivel de ruido, se comportan bien. No conviene quitarle ruido a los datos si se van a probar en ambientes ruidosos. Análisis de Complejidad: La complejidad de contruir un árbol es: O(mnlogn) + O(n(logn)2) 52 Donde n es el número de datos y m el número de atributos. El primer término se refiere a construir un árbol de decisión sin considerar podado. El segundo término se refiere cuando realizamos podado. Esto es independiente de que los atributos sean continuos o no. 2.1.4 Algunas Extensiones Se han propuesto varias extensiones, como en lugar de hacer una búsqueda tipo hill climbing usar beam search, o hacer búsqueda tipo look-ahead. Una de las más populares es generar varios árboles de decisión y luego combinar sus resultados. Esto se puede hacer en forma paralela a partir de varias subconjuntos de los datos de entrenamiento (bagging), en forma secuencial considerando errores de clasificación y modificando los datos (boosting) o usando varias muestras de los datos de entrenamiento e introduciendo aleatoriedad en la selección de atributos a considerar en cada nodo (random forest). 2.1.5 Árboles de Regresión y de Modelos Cuando la clase a predecir es numérica existen dos variantes: • Regression trees: guardan el valor promedio de los valores en las hojas • Model trees: utilizan una regresión lineal para predecir los valores de las clases Los dos tipos de árboles se construyen muy parecido a los árboles de decisión para construir un árbol inicial. En lugar de usar ganancia de información, seleccionan el atributo que minimiza la variación entre subconjuntos de la clase en cada rama. El criterio se basa en tratar la desviación estandar de la clase como una medida de error de ese nodo y calcular la reducción esperada de error (stan53 dard deviation reduction) como resultado de probar cada atributo en ese nodo. SDR = destd(T ) − X i Ti × destd(Ti ) T donde T1 , T2 , . . . son los conjuntos que resultan de dividir al nodo de acuerdo al atributo seleccionado y destd es desviación estandar (destd = qP Pn n 2 i (x(i) − µ) /(n − 1), µ = i x(i)/n). El proceso termina o cuando se tienen muy pocas instancias en el nodo o cuando la desviación estandar es una pequeña fracción (5%) de la desviación estandar original de los datos. Cuando se usa un árbol de modelos para predecir el valor normalmente se construyen modelos lineales en cada nodo interno del árbol para suavizar discontinuidades en las hojas. Los valores predichos se suavizan combinando los valores predichos en cada nodo. El proceso de suavizamiento usa la siguiente fórmula: p′ = np + kp n+k donde p′ es el nuevo valor suavizado que se pasa al nodo de arriba, p es la predicción del nodo de abajo, q es el valor que se obtiene con el modelo asociado al nodo, n es el número de instancias asociadas al nodo de abajo y k es una constante. Para valores desconocidos se ajusta la fórmula de reducción esperada de error. Para construir y probar un modelo con un valor desconocido, se usan dos técnicas: • Se reemplaza el valor del atributo por el valor del atributo más fuertemente correlacionado a él (surrogate splitting). • Se utiliza el valor de la clase (para entrenamiento). Se cambia por el valor promedio de los datos en ese nodo (para prueba). 54 Capı́tulo 3 Aprendizaje de Reglas El aprendizaje de reglas normalmente produce resultados más fáciles de entender. Splitting vs. Covering La estrategia básica de la construcción de árboles de decisión se basa en splitting, esto es, dividir el conjunto de datos en subconjuntos considerando un atributo seleccionado por una heurı́stica particular. Aqui se consideran todas las clases dentro de la partición. La idea básica es añadir atributos al árbol que se esta construyendo buscando maximizar la separación entre las clases. La estrategia utilizada para aprender reglas, está basada en covering, esto es, encontrar condiciones de reglas (par atributo-valor) que cubra la mayor cantidad de ejemplos de una clase, y la menor del resto de las clases. Se considera el cubrir una sola clase. La idea básica es añadir pruebas a cada regla que se esta construyendo buscando maximizar covertura minimizando errores. Las reglas pueden expresar disjunciones de manera más fácil que los árboles. Por lo mismo, el extaer reglas directamente de árboles tiede a pro- 55 Tabla 3.1: Algoritmo de 1R Para cada atributo Para cada valor de cada atributo, crea una regla: cuenta cuántas veces ocurre la clase encuentra la clase más frecuente asigna esa clase a la regla Calcula el error de todas las reglas Selecciona las reglas con el error más bajo ducir reglas más complejas de lo necesario. Los árboles tienen lo que se conoce como replicated subtree problem, ya que a veces repiten subárboles en varios lados. Por otro lado, si se quieren construir árboles a partir de reglas, no es trivial y tiende a dejar árboles incompletos. Las reglas tienden a preferirse con respecto a los árboles por tender a representar “pedazos” de conocimiento relativamente independiente. Listas de Decisión • Normalmente los sistemas generan lo que se llaman listas de decisión (decision lists) que son conjuntos de reglas que son evaluadas en orden. • Esto facilita la evaluación, aunque disminuye su modularidad. • El tener reglas que pueden ser evaluadas independientemente de su orden, permite que existan más de una predicción para un solo ejemplo y dificulta el producir un solo resultado. 3.1 1R Vamos a ver primero un sistema muy simple (1R) que es el equivalente a un decision stump, o árbol de decisión de un solo nivel. 56 Covering vs. Splitting + + + Splitting (ID3,CART) - + + + - - + - + - + + + - + + Covering (AQ,CN2) - - + + - - - - + - + - + Figura 3.1: Splitting vs. Covering. • La idea es hacer reglas que prueban un solo par atributo-valor. • Se prueban todos los pares atributo-valor y se selecciona el que ocasione el menor número de errores. • En el caso de la tabla 2.2 el número total de errores para el atributo Ambiente es 4, para Temperatura es 5, para Humedad es 4 y para Viento es 5. • Se rompe arbitrariamente los empates y nos quedariamos con las siguientes reglas: If Ambiente = soleado Then Clase = N (cubre 5 y tiene 2 errores) If Ambiente = nublado Then Clase = P (cubre 4 y tiene 0 errores) If Ambiente = lluvioso Then Clase = P (cubre 5 y tiene 2 errores) 57 • Los valores faltantes en 1R se tratan como un nuevo valor y para los atributos continuos se hace una división simple. • Primero se ordenan los atributos con respecto a la clase (como lo vimos con árboles de decisión). • Se sugieren puntos de partición en cada lugar donde cambia la clase. • Si existen dos clases diferentes con el mismo valor, se mueve el punto de partición a un punto intermedio con el siguiente valor hacia arriba o abajo dependiendo de donde está la clase mayoritaria. • Un problema más serio es que el algoritmo tendrı́a a favorecer contruir reglas para cada una de las particiones, lo cual le da una clasificación perfecta (pero muy poca predicción futura). • Lo que se hace es que se exige que cada partición tenga un número mı́nimo de ejemplos de la clase mayoritaria. • Cuando hay clases adyacentes con la misma clase mayoritaria, estas se juntan. Ejemplo: 64 65 68 69 P N P P 70 71 72 72 75 P N N P P 75 80 81 83 85 P N P P N • Tomando los puntos intermedios serı́a: 64.5, 66.5, 70.5, 72, 77.5, 80.5 y 84. • Considerando los ejemplos de diferente clase, podemos mover la frontera de 72 a 73.5. P N P P P N N P P P N P P N • Si tomamos al menos 3 elementos por partición (en resultados experimentales con varios dominios, este valor se fijo a 6): 58 P N P P P N N P P P N P P N • Si juntamos clases con la misma clase mayoritaria, nos queda: P N P P P N N P P P N P P N • Lo cual nos darı́a una regla del tipo: If Temperatura ≤ 77.5 Then Clase = P (cubre 10 y tiene 3 errores) If Temperatura > 77.5 Then Clase = N (cubre 4 y tiene 2 errores) • En la segunda regla se hizo una selección aleatoria, ya que se tenia un empate. 3.2 PRISM Es un algoritmo básico de aprendizaje de reglas que asume que no hay ruido en los datos (ver table 3.2). • Sea t el número de ejemplos cubiertos por la regla y p el número de ejemplos positivos cubiertos por la regla. • Lo que hace PRISM es añadir condiciones a reglas que maximicen la relación p/t (relación entre ejemplos positivos cubiertos y ejemplos cubiertos en total) sea mayor. • Este algoritmo, como va eliminando los ejemplos que va cubriendo cada regla, las reglas que se construyen tienen que interpretarse en orden (las nuevas reglas se diseñan solo para cubrir los casos que faltan). 59 If true [9+,5- ] Then Clase = P [6+,2- ] If Viento=n Then Clase=P If Viento=si Then Clase=P [3+,3- ] ... [3+,4- ] If Humedad=alta Then Clase=P [6+,1- ] If Hum.=normal Then Clase=P ... If Hum.=normal and Viento=no Then Clase=P If Hum.=normal and Viento=si Then Clase=P If Hum.=normal and Ambiente=lluvia Then Clase=P [2+,0- ] If Hum.=normal and Ambiente=soleado Then Clase=P Figura 3.2: Aprendizaje de Reglas Tabla 3.2: Algoritmo de PRISM Para cada clase C Sea E = ejemplos de entrenamiento Mientras E tenga ejemplos de clase C Crea una regla R con LHS vacı́o y clase C Until R es perfecta do Para cada atributo A no incluido en R y cada valor v, Considera añadir la condición A = v al LHS de R Selecciona el par A = v que maximice p/t (en caso de empates, selecciona la que tenga p mayor) Añade A = v a R Elimina de E los ejemplos cubiertos por R 60 A1 1 0 1 1 1 0 0 1 A2 x x y y x y x y Tabla A3 A4 triang a circ a cuadr a triang b cuadr b circ a traing b circ a 3.3: Ejemplos para construir reglas. Clase P N P P N P N P • Reglas que dependen del orden para su interpretación se conocen como decision lists o listas de decisión. • Reglas que no dependen del orden son más modulares, pero pueden producir varias clasificaciones o no predecir nada. • Con varias clasificaciones se puede seleccionar la regla que cubra más ejemplos, y cuando no se tiene una clasificación, escoger la clase mayoritaria. • Las reglas ordenadas son en general más rápidas de producir ya que van reduciendo el número de ejemplos a considerar. 3.2.1 Ejemplo Consideremos la siguiente tabla (ver tabla 3.3). Si empezamos con la clase P construimos todas las posibles combinaciones de atributo valor y evaluamos su predicción sobre la clase P . Osea: 61 Tabla 3.4: Ejemplos que quedan después de eliminar los cubiertos por la primera regla. A1 A2 A3 A4 Clase 1 x triang a P 0 x circ a N 1 x cuadr b N 0 x traing b N If A1 = 1 Then Clase = P 4/5 If A1 = 0 Then Clase = P 1/3 If A2 = x Then Clase = P 1/4 If A2 = y Then Clase = P 4/4 If A3 = triang Then Clase = P 2/3 If A3 = circ Then Clase = P 2/3 If A3 = cuadr Then Clase = P 1/2 If A4 = a Then Clase = P 4/5 If A4 = b Then Clase = P 1/3 En este caso una regla es perfecta, (If A2 = y Then Clase = P) por lo que esa seleccionamos y eliminamos todos los ejemplos que cubre (ver tabla 3.4). Repetimos lo mismo con los ejemplos que quedan. If A1 = 1 Then Clase = P 1/2 If A1 = 0 Then Clase = P 0/2 If A2 = x Then Clase = P 1/4 If A3 = triang Then Clase = P 1/2 If A3 = circ Then Clase = P 0/1 If A3 = cuadr Then Clase = P 0/1 If A4 = a Then Clase = P 1/2 If A4 = b Then Clase = P 0/2 En este caso, tenemos tres empates de 1/2 como valor máximo. Tomamos 62 uno al azar y construimos todas las posibles reglas añadiendole posibles pares atributo-valor: If A1 = 1 And A2 = x Then Clase = P 1/2 If A1 = 1 And A3 = triang Then Clase = P 1/1 If A1 = 1 And A3 = circ Then Clase = P 0/0 If A1 = 1 And A3 = cuadr Then Clase = P 0/1 If A1 = 1 And A4 = a Then Clase = P 1/1 If A1 = 1 And A4 = b Then Clase = P 0/1 De nuevo tenemos tres empates y tomamos uno aleatoriamente (el primero). Las reglas entonces para la clase P son: If A2 = y Then Clase = P If A1 = 1 and A3 = triang Then Clase = P Lo mismo hay que hacer para el resto de las clases. Para la clase N unas posibles reglas son: If A2 = x and A1 = 0 If A2 = x and A3 = cuadr Then Clase = N Then Clase = N 3.3 Otros sistemas de reglas AQ Uno de los primeros sistemas de reglas fue AQ, desarrollado originalmente por Michalski (79) (reimplementado y mejorado por otros autores, AQ11, AQ15). • Su salida es un conjunto de reglas de clasificación del tipo ‘if ... then ...’. • La idea principal de este sistema era seleccionar, aleatoriamente un 63 ejemplo - semilla. • Identificar el ejemplo de otra clase más cercano y especializar (añadir condiciones atributo-valor) a la regla actual, para no cubrir ese ejemplo negativo y tratar de cubrir a la mayor cantidad de ejemplos positivos. Se exploran varias alternativas de reglas (beam-search). Algunas de las heurı́sticas que se usaron para seleccionar la mejor regla son: • Sumar los ejemplos positivos cubiertos y los negativos excluidos (en caso de empate, preferir la más corta). • Sumar el número de ejemplos clasificados correctamente dividido por el número total de ejemplos cubiertos. • Maximiza el número de ejemplos positivos cubiertos. Una de sus principales desventajas es que es sensible a ejemplos con ruido (i.e., si la semilla seleccionado tiene información errónea). CN2 Un poco más adelante se propuso el sistema CN2 (Clark, Niblett, 88), con la idea de atacar datos con ruido y evitar el sobreajuste que se encontraba en sistemas como AQ. Su contribución principal es la de quitar la dependencia de un ejemplo especı́fico durante su búsqueda y forma la base de muchos de los algoritmos de reglas actuales. En CN2 se pueden especificar valores don’t-care y valores desconocidos y sigue una búsqueda tipo beam-search. La heurı́stica de búsqueda original que sigue es basada en entropı́a: Entr = − X pi log2 (pi ) i donde pi es la distribución de las clases que cubre cada regla. 64 Se selecciona la regla de menor entropı́a, osea la regla que cubre muchos ejemplos de 1 clase y pocos de las demás. En una versión posterior usaron the Laplacian error estimate: AccuracyA(n, nc , k) = (n − nc + k − 1)/(n + k) donde: n = número total de ejemplos cubiertos por la regla nc = número de ejemplos positivos cubiertos por la regla k = número de clases en el problema. CN2 maneja también una medida de significancia para las reglas. El usuario proporciona un lı́mite para la medida de significancia, abajo del cual las reglas son rechazadas. La medida está basada en la razón de verosimilitud (likelihood ratio statistic) que mide una distancia entre dos distribuciones, definida por: 2 n X fi fi log( ) ei i=1 donde: • F = (f1 , . . . , fn ) es la distribución de frecuencias observada de ejemplos dentro de las clases que satisfacen una regla dada (número de ejemplos que satisfacen la regla entre el número total de ejemplos que satisface la regla). • E = (e1 , . . . , en ) es la frecuencia esperada del mismo número de ejemplos bajo la suposición de que la regla selecciona ejemplos aleatoriamente (número de ejemplos cubiertos por la regla siguiendo la distribución de ejemplos del total de los ejemplos). • Entre más baja es la medida es más probable que la aparente regularidad expresada en la regla sea por casualidad. Estas medidas, entropı́a y significancia determinan que reglas son buenas (tienen alta precisión cuando predicen la clase mayoritaria cubierta) y confiables (la alta precisión sobre datos de entrenamiento no se debe solo a casualidad). 65 Medidas Alternativas de Selección: • La más simple (que ya vimos), es la frecuencia relativa de ejemplos positivos cubiertos. Tiene problemas con muestras pequeñas. m(R) = p p = t p+n t = número total de ejemplos cubiertos por la regla = p + n p = número total de ejemplos positivos cubiertos por la regla • Estimador Laplaciano (CN2). Asume una distribución uniforme de las k clases (k = 2). m(R) = p+1 p+n+k • Estimador m: considera que las distribuciones a priori de las clases (Pa (C)), son independientes del número de clases y m es dependiente del dominio (entre más ruido, se selecciona una m mayor). m(R) = p + m · Pa (C) p+n+m • Ganancia de información: log2 p P − log2 p+n P +N donde P y N son los ejemplos cubiertos antes de que se añadiera la nueva prueba • Weighted relative accuracy: wla = p+n p P ( − ) P +N p+n P +N 66 Tabla 3.5: Algoritmo de podado de reglas. Inicializa E al conjunto de ejemplos Until E sea vacı́o do Para cada clase C Crea una regla perfecta para la clase C Calcula la medida de probabilidad m(R) para la regla y para la regla sin la última condición m(R−) Mientras m(R−) < m(R), elimina la última condición de la regla y repite el proceso De las reglas generadas, selecciona aquella con m(R) menor Elimina las instancias cubiertas por la regla 3.4 Valores desconocidos y numéricos Con valores desconocidos, en un algoritmo de covering lo mejor es hacer como si no aparecieran en ninguna condición (ignorarlos). En este sentido, los algoritmos que aprenden decision lists tienen cierta ventaja, ya que ejemplos que parecen difı́ciles al principio, se van quedando y al final se pueden resolver, en general, más fácilmente. Los atributos numéricos se pueden tratar igual que con los árboles. Pruning: Una forma de evaluar si una regla es buena es considerar la probabilidad de que una regla aleatoria nos de resultados iguales o mejores que la regla a considerar, basados en la mejora en ejemplos positivos cubiertos. Idea: generar reglas que cubran puros ejemplos positivos. Esta regla es probable que este sobre-especializada. Lo que se hace es que se elimina el último término que se añadio y se verifica si esta regla es mejor a la anterior (ver abajo). Este proceso se repite hasta que no existan mejoras (ver tabla 3.5). Este algoritmo no garantiza encontrar las mejores reglas por 3 razones 67 principales: • (i) el algoritmo para construir las reglas, no necesariamente produce las mejores reglas para ser reducidas, • (ii) la reducción de reglas empieza con la última condición, y no necesariamente es el mejor orden, y • (iii) la reducción de reglas termina cuando cambia la estimación, lo cual no garantiza que el seguir recortando pueda mejorar de nueva la estimación. Sin embargo, el procedimiento es bueno y rápido. Medida de Evaluación para reducción de reglas: Cuál es la probabilidad que de una regla seleccionada aleatoriamente con la misma cantidad de ejemplos que cubre R tenga el mismo desempeño? Esto es, una regla que cubra t casos, de los cuales i sean de la clase C (sin reemplazo): P r(tC ) = P i ! T −P t−i T t ! ! Donde p es número de instancias de la clase que la regla selecciona, t es el número total de instancias que cubre la regla, P es el número total de instancias de la clase, y T es el número total de instancias. Si queremos ver la probabilidad de que cubra p casos o más, entonces: min(t,P ) m(R) = X P r(tC ) i=p Valores pequeños indican que la regla es buena, ya que es muy poco probable que la regla sea construida por casualidad. 68 Como este es muy costoso de calcular, se pueden hacer aproximaciones. Si el número de ejemplos es grande, la probabilidad de que exactamente i ejemplos de los t sean de clase C (con reemplazo) es: P r(tC ) = t i ! P P ( )i (1 − )t−i T T que corresponde a una distribución binomial. La función acumulada se puede aproximar a una función beta de la siguiente forma: t X i=p t i ! P P ( )i (1 − )t−i = Iβ (p, t − p + 1) T T Todo esto (simplificación de reglas) se puede hacer con un subconjunto del conjunto de ejemplos de entrenamiento (reduced error pruning). Variantes: IREP (Incremental REP) simplifica reglas cada vez que se construyen usando: p + (N − n) P +N Maximiza el número de ejemplos positivos cubiertos más el número de ejemplos negativos no cubiertos. Sin embargo, le da la misma importancia a los ejemplos negativos no cubiertos y los positivos cubiertos. Por lo que si una regla cubre 2000 (p) de 3,000, osea que tiene 1,000 mal (n) es evaluada mejor que una regla que cubre 1,000 (p) de 1,001 (n = 1). Otra medida popular es: p−n p+n Pero sufre de problemas parecidos. RIPPER 69 Una variante que obtiene buenos resultados, es construir un conjunto de reglas usando covering, reducirlas usando alguna heurı́stica como las de arriba con un conjunto de entrenamiento separado, y luego “optimizar” al mismo tiempo ese conjunto de reglas (RIPPER). RIPPER utiliza varias medidas e ideas al mismo tiempo. • Utiliza un conjunto de ejemplos separados para decidir podar reglas, • utiliza ganancia de información para crecer las reglas, • utiliza la medida de IREP para podar reglas, y • utiliza una medida basada en MDL como criterio de paro para el conjunto global de reglas. Una vez que construye un conjunto inicial de reglas, toma una regla Ri del conjunto total de reglas y la hace crecer (revision) y también hace crecer una nueva regla desde el principio. Al final se queda con la regla original o alguna de las otras dos (la que hizo crecer o construyo desde cero) pero tomando en cuenta el error sobre el conjunto total de las reglas. Construir reglas usando árboles Es posible crear reglas directamente de un árbol de decisión, sin embargo, las reglas tienden a ser más complejas de lo necesario. Se pueden utilizar los mecanismos planteaedos en la sección anterior para ir podando las reglas. Una alternativa es combinar una estrategia de covering con una de splitting. Para construir una regla se construye un árbol podado (splitting) y la hoja con la mejor covertura se transforma en una regla. Una vez construida una regla se eliminan todos los ejemplos que cubre (covering) y se repite el proceso. 70 En lugar de construir un árbol completo, se construyen árboles parciales, expandiendo las hojas con mejores medidas de entropı́a. Este esquema tiende a producir conjuntos de reglas simples con muy buen desempeño. Ripple-down rules La idea es constuir primero las reglas que cubren la mayor cantidad de casos y luego irlas afinando mediante excepciones. Primero se toma la clase mayoritaria de entrada. Todo lo que no se cumpla se toma como una excepción a esta. Se busca la mejor regla (la que cubra más casos) de otra clase y se añade como una excepción. Esto divide de nuevo los datos en los que cumplen con esa nueva condición y los que no cumplen. Dentro de los que no cumplen de nuevo se busca la mejor regla de otra clase y se añade como excepción, y ası́ sucesivamente hasta que se cubran todos los casos. Una de las ventajas de estas reglas es que la mayorı́a de los ejemplos se cubren por las reglas de más alto nivel, y las de bajo nivel representan realmente las excepciones. Reglas que Consideran Relaciones En los casos anteriores las reglas consideran la prueba de un atributo contra una constante. Estas son reglas proposicionales porque el lenguaje atributo-valor que usamos para crear las reglas tiene el mismo poder que el cálculo proposicional. Algunas veces requerimos reglas más expresivas para poder expresar relaciones entre los ejemplos. Por ejemplo, en el dominio de los objetos geométricos, podemos tener las siguientes reglas proposicionales: 71 Tabla 3.6: Ejemplo de Ripple down rules. Default: reprueba excepto Si estudia=si AND memoriza=no Entonces pasa excepto Si copia=si AND descubren=si Entonces reprueba Else Si estudia=no AND copia=si AND descubren=no Entonces pasa excepto Si vecino-sabe=no Entonces reprueba If width >= 3.5 and weight < 7 then lying If height >= 3.5 then standing Sin embargo, si vemos varios ejemplos de este dominio, notamos que ”los bloques con clase ”standing” (de pie) tienen más altura que anchura” y es posible generar las reglas: If width > heigh then lying if height > width then standing En este caso el valor particular de la altura y ancho ya no son importantes, solo el resultado de su comparación. A este tipo de reglas se les conoce como r elacionales porque expresan relaciones entre atributos, en lugar de referirse a hechos sobre un atributo como las proposicionales. Otro dominio relacional es el de figuras geométricas para representar una casa como un triángulo sobre un cuadrado, donde la forma de un objeto se representa con un atributo, (vea la figura 3.3). 72 Figura 3.3: Ejemplo de Dominio Relacional. Posteriormente veremos como trabajar con dominios relacionales al tratar los temas: • Inductive Logic Programming y • Aprendizaje basado en Grafos 73 Capı́tulo 4 Reglas de Asociación El objetivo de las reglas de asociación es encontrar asociaciones o correlaciones entre los elementos u objetos de bases de datos transaccionales, relacionales o datawarehouses. Las reglas de asociación tienen diversas aplicaciones como: • Soporte para la toma de decisiones • Diagnóstico y predicción de alarmas en telecomunicaciones • Análisis de información de ventas – Diseño de catálogos – Distribución de mercancı́as en tiendas – Segmentación de clientes en base a patrones de compra Las reglas de asociación son parecidas a las reglas de clasificación. Se encuentran también usando un procedimiento de covering. Sin embargo, en el lado derecho de las reglas, puede aparecer cualquier par o pares atributo-valor. Para encontrar ese tipo de reglas se debe de considerar cada posible combinación de pares atributo-valor del lado derecho. 74 Tabla 4.1: Transacciones Transacción 1 2 3 4 Elementos Comprados A,B,C A,C A,D B,E,F Para posteriormente podarlas usando covertura (número de instancias predichas correctamente) y precisión (proporción de número de instancias a las cuales aplica la regla). Ejemplo: Encontrar las reglas de asociación X ⇒ Z de la tabla 4.1 con la restriccón de cumplir con un mı́nimo de covertura y de precisión. Las reglas con: • Covertura mı́nima de 50% • Precisión mı́nima de 50% – A ⇒ C (50%, 66.6%) – C ⇒ A (50%, 100%) Una regla de asociación es una expresión de la forma X ⇒ Z donde X y Z son conjuntos de elementos. El significado intuitivo: Las transacciones de la base de datos que contienen X tienden a contener Z 4.1 Definiciones • I = {i1 , i2 , i3 , . . . , im } ⇒ un conjunto de literales, atributos 75 • D ⇒ un conjunto de transacciones T , T ⊆ I • T ID ⇒ un identificador asociado a cada transacción • X ⇒ un conjunto de elementos X ∈ I • Una regla de asociación es una implicación: – X ⇒ Z, X ∈ I, Z ∈ I y X ∩ Z = ∅ • Soporte (o cobertura), s, es la probabilidad de que una transacción contenga {X, Z} • Confianza (o eficiencia), c, es la probabilidad condicional de que una transacción que contenga {X} también contenga {Z}. 4.2 Evaluación de las Reglas En minerı́a de datos con reglas de asociación en BD transaccionales evaluamos las reglas de acuerdo al soporte y la confianza de las mismas. En reglas de asociación, la covertura se llama soporte (support) y la precisión se llama confianza (confidence). Se pueden leer como: soporte(X ⇒ Z) = P (X ∪ Z) confianza(X ⇒ Z) = P (Z|X) = soporte(X ∪ Z) soporte(X) En realidad estamos interesados únicamente en reglas que tienen mucho soporte (soporte ≥ sop min y confianza ≥ conf min), por lo que buscamos (independientemente de que lado aparezcan), pares atributo-valor que cubran una gran cantidad de instancias. A estos, se les llama item-sets y a cada par atributo-valor item. 76 Un ejemplo tı́pico de reglas de asociación es el análisis de la canasta de mercado. Básicamente, encontrar asociaciones entre los productos de los clientes, las cuales pueden impactar a las estrategias mercadotécnicas. Ya que tenemos todos los conjuntos, los transformamos en reglas con la confianza mı́nima requerida. Algunos items producen más de una regla y otros no producen ninguna. Por ejemplo, si seguimos con los datos de la tabla 2.2, el itemset: humedad=normal, viento=no, clase=P Puede producir las siguientes posibles reglas: If If If If If If If humedad=normal and viento=no Then clase=P 4/4 humedad=normal and clase=P Then viento=no 4/6 viento=no and clase=P Then humedad=normal 4/6 humedad=normal Then viento=no and clase=P 4/7 viento=no Then clase=P and humedad=normal 4/8 clase=P Then viento=no and humedad=normal 4/9 true Then humedad=normal and viento=no and clase=P 4/12 Si pensamos en 100% de éxito, entonces sólo la primera regla cumple. De hecho existen 58 reglas considerando la tabla completa que cubren al menos dos ejemplos con un 100% de exactitud (exaccuracy). 4.3 Algoritmo El proceso es mas o menos el siguiente y sigue dos pasos (Apriori, Agrawal et al. ’94): 77 Tabla 4.2: Algoritmo Apriori Apriori() L1 = find-frequent-1-itemsets(D) for (k = 2; Lk−1 6= NULL; k++) % generate-&-prune candidate k-itemsets Ck = AprioriGen(Lk−1 ) forall transactions t ∈ D Ct = subset(Ck , t) forall candidates c ∈ Ct c.count + + Lk = {c ∈ Ck | c.count ≥ minsup} Return ∪k Lk 1. Genera todos los items sets con un elemento. Usa estos para generar los de dos elementos, y ası́ sucesivamente. Se toman todos los posibles pares que cumplen con las medidas mı́nimas de soporte. Esto permite ir eliminando posibles combinaciones ya que no todas se tienen que considerar. 2. Genera las reglas revisando que cumplan con el criterio mı́nimo de confianza. En las tablas 4.2, 4.3, 4.4 y 4.5 se muestra el pseudocódigo del algoritmo apriori. Una observación interesante, es que si una conjunción de consecuentes de una regla cumple con los nivels mı́nimos de soporte y confianza, sus subconjuntos (consecuentes) también los cumplen. Por el contrario, si algún item no los cumple, no tiene caso considerar sus superconjuntos. Esto da una forma de ir construyendo reglas, con un solo consecuente, y a partir de ellas construir de dos consecuentes y ası́ sucesivamente. 78 Tabla 4.3: Función Apriori Genera AprioriGen(L) – Assume transactions in lexicographic order insert into Ck all p.item1 , p.item2 , . . . , p.itemk−1 , q.itemk−1 from p, q ∈ L where p.item1 = q.item1 , p.item2 = q.item2 , . . . , p.itemk−1 < q.itemk−1 %– Prune itemsets s.t. some (k-1)-subset of c is ∈ /L %– A (k-1) itemset that is not frequent cannot be a subset of %– a frequent k-itemset, then it is removed forall itemsets c ∈ Ck forall (k-1)-subsets s of c do if(s ∈ / Lk−1 ) then delete c from Ck Tabla 4.4: Función Reglas de Asociación AssocRules() forall large itemsets lk , k ≥ 2 GenRules(lk , lk ) Tabla 4.5: Función Genera Reglas GenRules(lk , am ) –Generate all valid rules a → (lk − a), for all a ⊂ am A = {(m − 1) − itemsets am−1 |am−1 ⊂ am } forall am−1 ∈ A conf = support(lk ) / support(am−1 ) if(conf ≥ min conf ) then output rule am−1 → (lk − am−1 ) with confidence conf , support = support(lk ) if(m − 1 > 1) then GenRules(lk , am−1 ) – Generate rules with subsets of am−1 as antecedents 79 Tabla 4.6: Datos de compras de productos. id1 id2 id3 id4 id5 id6 id7 id8 id9 p1,p2,p5 p2,p4 p2,p3 p1,p2,p4 p1,p3 p2,p3 p1,p3 p1,p2,p3,p5 p1,p2,p3 Este método hace una pasada por la base de datos cada para cada conjunto de items de diferente tamaño. El esfuerzo computacional depende principalmente de la covertura mı́nima requerida, y se lleva prácticamente todo en el primer paso. El proceso de iteración del primer paso se llama level-wise y va considerando los superconjuntos nivel por nivel. Lo que se tiene es una propiedad anti-monótona: si un conjunto no pasa una prueba, ninguno de sus superconjuntos la pasan. Si un conjunto de items no pasa la prueba de soporte, ninguno de sus superconjuntos la pasan. Esto se aprovecha en la construcción de candidatos para no considerar todos. Por ejemplo, consideremos la tabla 4.6 con listas de compras de productos. La figura 4.1 muestra este proceso con los datos de la tabla anterior. Una vez que tenemos los conjuntos de items, generar las reglas es relativamente sencillo. • Para cada conjunto l de items, genera todos sus subconjuntos. 80 1,2,5(2) 1,2,3(2) 1,2(4) 1,3(4) 1,4(1) 1(6) 1,5(2) 2,4(2) 2,3(4) 2(7) 2,5(2) 3(6) 4(2) 3,4(0) 3,5(1) 4,5(0) 5(2) Figura 4.1: Generación de candidatos por niveles. El primer número indica el producto y el número entre parétesis las veces que ocurre. • Para cada subconjunto s ⊂ l, genera una regla: s ⇒ (l − s) si: soporte(l) ≥ nivel confianza soporte(s) Todas las reglas satisfacen los niveles mı́nimos de soporte. 4.4 Algunas Mejoras Se han hecho algunas mejoras al algoritmo básico de reglas de asociación (Apriori) para hacerlo más eficiente: • Usar tablas hash para reducir el tamaño de los candidatos de los itemsets • Eliminar transacciones (elementos en la base de datos) que no contribuyan en superconjuntos a considerar • Dividir las transacciones en particiones disjuntas, evaluar itemsets locales y luego, en base a sus resultados, estimar los globales. 81 • Hacer aproximaciones con muestreos en la lista de productos, para no tener que leer todos los datos • Evitar generar candidatos usando estructuras de datos alternativas, como por ejemplo, los FP-trees (Frequent Pattern tree). 4.5 Algunas Extensiones Dentro de las extensiones principales, podemos citar: 1. Encontrar reglas de asociación a diferentes niveles de abstracción. Normalmente se empieza con las clases superiores, y los resultados pueden servir para filtrar clases inferiores. Por ejemplo, considerar reglas de asociación sobre computadoras e impresoras, y luego sobre laptops y estaciones de trabajo, por un lado, y sobre impresoras laser y de punto por otro, etc. Al proceder a las subclases se puede considerar: • un criterio de soporte uniforme • reduciendo el criterio para las subclases • considerar todas las subclases independientemente del criterio de soporte • tomando en cuenta el criterio de soporte de una de las superclases de un item o k superclases de k items • considerar items aunque el nivel de soporte de sus padres no cumplan con el criterio de soporte, pero que sea mayor que un cierto umbral. Al encontrar reglas de asociación a diferentes niveles de abstracción es común generar reglas redundantes o reglas que no nos dicen nada nuevo (e.g., la regla más general, ya decia lo mismo), por lo que es necesario incorporar mecanismos de filtrado. 82 2. Encontrar reglas de asociación combinando información de múltiples tablas o reglas de asociación multidimensionales. Los DataCubes pueden servir para encontrar reglas de asociación multidimensionales. 3. Las reglas de asociación, al igual que los árboles de decisión y las reglas de clasificación que hemos visto, funcionan, en su forma original, con atributos discretos. Al igual que en las otras técnicas se han propuesto mecanismos para manjejar atributos continuos. Los enfoques más comunes son: • Discretizar antes de minar en rangos usando posiblemente jerarquı́as predefinidas. • Discretizar dinámicamente durante el proceso tratando de maximizar algún criterio de confianza o reducción de longitud de reglas. Por ejemplo, ACRS (Association Rule Clustering System), mapea atributos cuantitativos a una rejilla y luego utiliza clustering. Primero asigna datos a “contenedores” delimitados por rangos (que después pueden cambiar). Los esquemas más comunes son: contendores del mismo tamaño, contenedores con el mismo número de elementos, y contenedores con elementos uniformemente distribuidos. Después se encuentran reglas de asociación utilizando los contenedores. Una vez que se tienen las reglas, éstas se agrupan si forman rectángulos más grandes dentro de la rejilla. • Discretizar utilizando información semántica, i.e., formar grupos con elementos cercanos (posiblemente haciendo clustering sobre los atributos). Una vez establecidos los clusters, encontrar las reglas de asociación con esos clusters basados en distancias o similaridades. 83 4.6 Asociación vs. Correlación El que se encuentre una regla de asociación no necesariamente quiere decir que sea útil. Por ejemplo, si se analizan 10,000 compras, de las cuales 6,000 compraron videojuegos, 7,500 videos y 4,000 las dos, posiblemente se genere una regla: compra videojuegos => compra videos [soporte=4,000/10,000 = 40% y confianza=4,000/6,000 = 66%]. Sin embargo, el 75% de los clientes compran videos por lo que el comprar videojuegos reduce las posibilidades de comprar videos. La ocurrencia de un itemset A es independiente de otro B si P (A ∩ B) = P (A)P (B). En caso contrario, existe cierta dependencia o correlación. La correlación entre dos eventos se define como: corrA,B = P (A ∩ B) P (A)P (B) Si es menor que 1, entonces la ocurrencia de uno decrece la ocurrencia del otro. Si es 1 son independientes y si es mayor que 1 la ocurrencia de uno favorece la ocurrencia de otro. Con esto, se pueden encontrar reglas de asociación correlacionadas. Se puede estimar si la correlación es estadı́sticamente significativa usando una χ2 . Si un conjunto de elementos está correlacionado, cualquier superconjunto de este también lo está. Esto puede ayudar a buscar los conjuntos mı́nimos correlacionados y construir a partir de ahı́ sus superconjuntos. Meta-Reglas Las meta-reglas permiten especificar la forma de las reglas. Podemos buscar por reglas de asociación que tengan formas especı́ficas: 84 Tabla 4.7: Reglas de Asociación vs. Reglas de Clasificación Exploración de dependencias vs. Predicción enfocada Diferentes combinaciones de vs. Predice un atributo (clase) atributos dependientes e a partir de otros independientes Búsqueda completa (todas las vs. búsqueda heurı́stica (se encuentra reglas encontradas) un subconjunto de reglas) P1 (X, Y )ANDP2 (X, W ) ⇒ compra(X, libros de KDD) donde Pi es un predicado variable que se instancia con algún atributo de la base de datos, y las X, Y y W son posibles valores de los atributos. Uso de restricciones Se pueden usar restricciones sobre los tipos de datos, jerarquı́as, o formas posibles de las reglas a encontrar para reducir el espacio de búsqueda. Las restricciones pueden ser: • (i) antimonótonas (si un conjunto no satisface una condición, entonces tampoco la satisfacen sus superconjuntos), • (ii) monótonas (si un conjunto satisface una restricción, entonces también la satisfacen todos sus superconjuntos), • (iii) suscintas (succint) (podemos enumerar todos los conjuntos que satisfacen una restricción), (iv) convertibles (podemos converir una restricción a alguna de las clases anteriores), y (v) no convertibles. Reglas de Asociación, de Clasificación y Árboles de Decisión. La tabla 4.7 muestra una comparación entre reglas de asociación y de clasificación. Los árboles usan heurı́stica de evaluación sobre un atributo, estan basados en splitting, y normalmente realizan sobreajuste seguido de podado. Las reglas de clasificación utilizan una heurı́stica de evaluación de condición 85 (par atributo-valor), estan basados en covering, y utilizan sobre todo criterios de paro (y a veces sobreajuste y podado). Las reglas de asociación se basan en medidas de confianza y soporte, consideran cualquier conjunto de atributos con cualquier otro conjunto de atributos. 86 Capı́tulo 5 Evaluación En muchas ocasiones requerimos hacer una evaluación muy precisa de nuestros algoritmos de aprendizaje computacional porque los vamos a utilizar en algún tipo de aplicación que ası́ lo requiere. Algunos ejemplos de este tipo de aplicaciones son: • Aplicaciones de apoyo al diagnóstico médico. • Identificación de objetos amigos y enemigos. • Identificación de zonas afectadas por un desastre natural. Algunas otras veces diseñamos un algoritmo y queremos probar qué tan bueno es. Para esto, lo queremos comparar con otros algoritmos que ya han demostrado ser buenos y en el mejor de los casos que nuestro algoritmo obtenga precisiones superiores a las de aquel otro algoritmo. Lo anterior se refiere a: • Calcular la tasa de error esperado de un algoritmo de clasificación. • Comparar las tasas de error esperado de dos algoritmos de clasificación para poder decir cuál es mejor. 87 Necesitamos saber si la diferencia en precisión de los algoritmos es significativa o no lo es. Estos son algunos ejemplos de porqué necesitamos evaluar o comparar algoritmos de aprendizaje computacional. A continuación veremos como hacer esta evaluación. Es importante señalar que evaluar una hipótesis cuando contamos con un conjunto de datos grande no es problemático, sin embargo, cuando tenemos pocos datos tenemos dos dificultades principales. • Sesgo en la estimación. – La precisión observada en la muestra no es un buen estimador de la precisión sobre futuras instancias. – El estimador será optimista, más aún cuando se tiene un espacio de hipótesis grande y hay un sobreajuste de los datos. – Es por esto que probamos con datos que no usamos para entrenar. • Varianza en la estimación. – Aún cuando la precisión de la hipótesis se mide con un conjunto de prueba independiente del conjunto de entrenamiento, la precisión medida puede variar de la precisión verdadera y esto depende de los ejemplos de prueba utilizados. – Mientras más pequeña es la muestra, más grande es la varianza esperada. Recordemos también que la evaluación de hipótesis es parte del proceso de aprendizaje en varios métodos. • Post-pruning en árboles de decisión para evitar el sobre-ajuste 5.1 Estimando la Precisión de Hipótesis Queremos evaluar la precisión de la hipótesis para nuevas instancias. Además queremos saber cuál es el error probable en la estimación de esta 88 precisión. Recordando el Problema de Aprendizaje: • Dado un espacio de posibles instancias X sobre el que podemos definir diferentes funciones objetivo X → toda la gente • Asumimos que diferentes instancias de X se pueden encontrar con diferentes frecuencias más gente de 20 años que de 90 • Para modelar esto asumimos que hay alguna distribución de probabilidad D que define la probabilidad de encontrar cada instancia en X • D no dice nada respecto a la clase del ejemplo, sólo determina la probabilidad de encontrarlo • La tarea de aprendizaje consiste en aprender el concepto objetivo (o función objetivo) f considerando un espacio H de posibles hipótesis. • Tomamos ejemplos de entrenamiento bajo la distribución D (atributos y clase). 5.1.1 Error de Muestra y Error Verdadero En esta sección queremos contestar estas preguntas: • Dada una hipótesis h y una muestra de datos con n ejemplos tomados aleatoriamente siguiendo la distribución de probabilidad D, Cuál es el mejor estimado de la precisión de h sobre instancias futuras tomadas con la misma distribución? • Cuál es el error probable en este estimado de precisión? Necesitamos entender dos nociones de precisión o error: • Tasa de error de la hipótesis sobre la muestra disponible, que es lo que podemos calcular 89 • Tasa de error de la hipótesis sobre toda la distribución desconocida D de ejemplos, que es lo que quisiéramos calcular El error de muestra para la hipótesis h con respecto a la función f se define como: • errorS (h) = 1 n P δ(f (x), h(x)) x∈S • n es el número de ejemplos en S • δ(f (x), h(x)) es 1 si f (x) 6= h(x) y 0 de otro modo El error verdadero de una hipótesis es la probabilidad de que se equivoque para una instancia tomada aleatoriamente con la distribución D y se define como: • errorD (h) ≡ P rx∈D [f (x) 6= h(x)] • P rx∈D denota que la probabilidad se toma sobre la instancia de distribución D Lo que quisieramos conocer es el error verdadero errorD (h) de la hipótesis. Sin embargo, lo que podemos medir es el error de muestra errorS (h) porque sólo tenemos una muestra de los datos disponible. Ahora surge la pregunta: • Qué tan buen estimador es errorS (h) de errorD (h)? Para saberlo, vamos a utilizar el concepto de intervalos de confianza pruebas de hipótesis. 5.1.2 Intervalos de Confianza para Hipótesis con Valores Discretos • Dada una hipótesis con valores discretos 90 • Queremos estimar el error verdadero para una hipótesis h basándonos en el error sobre la muestra S • La muestra S tiene n ejemplos, tomados cada uno independientemente de h, de acuerdo a D • n > 30 • h tiene r errores sobre los n ejemplos errorS (h) = r n Utilizando teorı́a estadı́stica podemos establecer lo siguiente • Dado que no tenemos más información, el valor más probable para errorD (h) es errorS (h) • Con aproximadamente 95% de q probabilidad, el error errorD (h) cae en S (h)) el intervalo errorS (h) ± 1.96 errorS (h)(1−error n Ahora podemos saber el intervalo en el que caerá el error de muestra calculado. Ejemplo • Dada la muestra de datos S • n = 40 ejemplos • La hipótesis h comete r = 12 errores sobre estos datos • errorS (h) = 12 40 = 0.30 • Sabemos que éste no es un estimador perfecto del eror verdadero • Si probamos con otra muestra el error podrı́a variar un poco • Estas diferencias se deben a las diferencias entre las muestras • Si repetimos el experimento muchas veces, encontrarı́amos que el 95% de las veces el error verdadero cae en el intervalo de confianza 91 • Por eso se llama el intervalo estimado del 95% de confianza para errorD (h) • El intervalo es 0.30 ±(1.96×0.07)=0.30 ± 0.14. ZN La q fórmula general para calcular intervalos de confianza es: errorS (h) ± errorS (h)(1−errorS (h)) n Los valores de ZN para intervalos de confianza de dos-lados N% son: Confidence level N% Constant ZN 50% 68% 0.67 1.00 80% 90% 1.28 1.64 95% 98% 1.96 2.33 99% 2.58 Tabla 5.1: Valores de ZN • Usamos esta fórmula para calcular los intervalos de confianza para estimados de errorS (h) • Recordemos que se utiliza para hipótesis con valores discretos • Asumimos que la muestra S se toma aleatoriamente utilizando la misma distribución con que se tomarán futuros ejemplos • Asumimos que los datos son independientes de la hipótesis que estamos probando • Proporciona sólo una aproximación buena para más de 30 ejemplos y si errorS (h) no esta tan cerca de 0 o 1. • Otra regla para saber si la aproximación sera buena es: n errorS (h)(1− errorS (h)) ≥ 5 5.2 Método General para Derivar Intervalos de Confianza Podemos ver de manera general el problema de estimar la media (valor esperado) de una población con base a la media de una muestra tomada aleatoriamente de tamaño n. 92 1. Identificar el parámetro de la población p a estimar, por ejemplo: errorD (h) 2. Definir el estimador Y , por ejemplo errorS (h). Es deseable elegir un estimador de mı́nima varianza y sin sesgos. 3. Determinar la distribución de probabilidad DY que gobierna al estimador Y , incluyendo su media y varianza. 4. Determinar el intervalo de confianza N% para encontrar los umbrales L y U tal que N% de la masa de la distribución de probabilidad DY cae entre L y U 5.2.1 Teorema del Lı́mite Central El teorema del lı́mite central simplifica el cálculo de intervalos de confianza. • Dados n valores de variables aleatorias independientes Y1 , ..., Yn que siguen la misma distribución de probabilidad. • µ denota la media de la distribución que gobierna cada Yi y σ su desviación estandar. • Decimos que las variables Yi son variables aleatorias independientes e idénticamente distribuı́das porque describen experimentos independientes, y cada uno sigue la misma distribución de probabilidad. • Para estimar µ de la distribución que gobierna Yi utilizamos la media de la muestra P • Y¯n ≡ ni=1 Yi . • El teorema del lı́mite central dice que la distribución de probabilidad que gobierna Y¯n se aproxima a una distribución Normal conforme n → ∞, sin importar la distribución que gobierna a las variables aleatorias en cuestión Yi . Más aún, la media de Y¯n se aproxima a µ y la desviación estandar a √σn . 93 – Si definimos un estimador que es la media de una muestra (como errorS (h)), la distribución que gobierna este estimador se puede aproximar con una distribución Normal para una n suficientemente grande – Si conocemos también la varianza, podemos usar la ecuación µ ± zN σ para calcular el intervalo de confianza – Comunmente utilizamos como regla que podemos utilizar una aproximación Normal cuando n ≥ 30 5.3 Diferencia en Error de Dos Hipótesis • Si tenemos dos hipótesis h1 y h2 para una función objetivo con valores discretos. • Tenemos que h1 se probó con S1 que tiene n1 ejemplos aleatorios • Tenemos que h2 se probó con S2 que tiene n2 ejemplos aleatorios tomados con la misma distribución • Queremos estimar la diferencia d entre los errores verdaderos de las dos hipótesis d ≡ errorD (h1 ) − errorD (h2 ) Utilizando el procedimiento general para obtener intervalos de confianza: • Identificamos a d como el parámetro a estimar • Ahora definimos el estimador: la diferencia entre los errores de muestra dˆ ≡ errorS1 (h1 ) − errorS2 (h2 ) • Se puede probar que dˆ es un estimador no sesgado de d • Para n1 , n2 ≥ 30, errorS1 (h1 ) y errorS2 (h2 ) siguen distribuciones que se aproximan a la Normal • La diferencia de 2 distribuciones Normal también es una distribución Normal, dˆ seguira una Normal con media d 94 • La varianza de la distribución es la suma de las varianzas de la distribuciones errorS1 (h1 ) y errorS2 (h2 ) • La aproximación de la varianza de las distribuciones es: σd2ˆ ≈ errorS2 (h2 )(1−errorS2 (h2 )) n2 errorS1 (h1 )(1−errorS1 (h1 )) + n1 • Ya determinamos la distribución de probabilidad que gobierna al estimador dˆ • Ahora generamos el intervalo de confianza Para una variable aleatoria dˆ que sigue una distribución Normal con media µ y varianza σ 2 el estimado del intervalo de confianza N% para d es dˆ ± zN σ • Utilizando la varianza estimada σd2ˆ, el intervalo de confianza para d es: • dˆ ± zN r errorS1 (h1 )(1−errorS1 (h1 )) n1 + errorS2 (h2 )(1−errorS2 (h2 )) n2 • También es válido utilizar la misma muestra para probar, es decir; que h1 y h2 se prueben con la misma muestra S y S es independiente de h1 y h2 , entonces dˆ ≡ errorS (h1 ) − errorS (h2 ) 5.3.1 Pruebas de Hipótesis • Cuando queremos probar que una conjetura en especı́fico es cierta en lugar de calcular un intervalo de confianza • Cuál es la probabilidad de que errorD (h1 ) > errorD (h2 )? • Podemos medir la diferencia de error errorS1 (h1 ) = 0.30 errorS2 (h2 ) = 0.20 dˆ = 0.1 • Note que es posible que observemos esta diferencia aún cuando errorD (h1 ) ≤ errorD (h2 ) debido a la variación aleatoria en los datos de la muestra • La pregunta entonces es: Cuál es la probabilidad de que errorD (h1 ) > errorD (h2 ), dado que observamos la diferencia en errores de muestra dˆ = 0.1? Dicho de otra manera, cuál es la probabilidad de que d > 0 dado que observamos dˆ = 0.1? 95 • P r(d > 0) es la probabilidad de que dˆ no sobre-estime d en más de 0.1, esto es lo mismo que la probabilidad de que dˆ caiga en el intervalo de un solo lado dˆ < d + 0.1 y esto se puede expresar como dˆ < σdˆ + 0.1 • Podemos determinar la probabilidad de que dˆ caiga en este intervalo de un solo lado calculando probabilidad de masa de la distribución dˆ dentro de este intervalo • Re-expresamos el intervalo dˆ < µdˆ + 0.1 en términos del número de desviaciones estandar que permite desviarse de la media, σdˆ ≈ 0.061 • El intervalo se re-expresa como dˆ < µdˆ + 1.64σdˆ • Cuál es el nivel de confianza asociado con este intervalo de un lado para una distribución Normal? • Consultamos la tabla 5.1 y vemos que 1.64 desviaciones estandar de la media corresponde a un intervalo de dos lados con un nivel de confianza de 90%. Esto corresponde a un nivel de confianza del 95% en un intervalo de un lado. ˆ la probabilidad de que errorD (h1 ) > errorD (h2 ) es aprox. • Dado 0.1, 0.95 • En términos estadı́sticos decimos que aceptamos la hipótesis de que errorD (h1 ) > errorD (h2 ) con una confianza de 0.95 • También podemos decir que rechazamos la hipótesis opuesta (o nula) con un nivel de significancia de (1 - 0.95) = 0.05. 5.4 Comparando Algoritmos de Aprendizaje Muchas veces queremos comparar dos algoritmos de aprendizaje LA y LB en lugar de dos hipótesis en especı́fico. Cómo determinamos que la diferencia observada entre los algoritmos es estadı́sticamente significativa? • Iniciamos especificando el parámetro que deseamos estimar 96 • Queremos determinar cual de LA y LB es mejor método en promedio para una función objetivo particular f • Para definir en promedio consideramos la precisión relativa de los algoritmos promediada sobre todos los conjuntos de tamaño n que se puedan tomar de la instancia de distribución D • En otras palabras queremos determinar el valor esperado de la diferencia de errores ES⊂D [errorD (LA (S)) − errorD (LB (S))] • L(S) es la hipótesis de salida del algoritmo L dada la muestra S de datos de entrenamiento y S ⊂ D significa que el valor esperado se toma sobre las muestras S tomadas bajo la instancia de distribución D • Pero en la práctica la muestra es de tamaño limitado D0 • En este caso dividimos los datos en conjuntos disjuntos de entrenamiento S0 y prueba T0 • Usamos S0 para entrenar y T0 para comparar la precisión • Medimos la cantidad errorT0 (LA (S0 )) − errorT0 (LB (S0 )) • Para obtener una mejor medida, podemos particionar repetidamente https://www.bancomer.com/acceso/perfila.asp el conjunto D0 en conjuntos disjuntos de entrenamiento y prueba y calcular la media de los errores del conjunto de prueba para todos los experimentos • Esto es lo que conocemos como el k-fold cross validation que usamos cuando tenemos al menos 30 ejemplos de entrenamiento • Obtenemos δ̂ ≡ 1 k k P i=1 δi δ̂ ← errorTi (hA ) − errorTi (hB ) • Entonces δ̂ estima ES⊂D0 [errorD (LA (S)) − errorD (LB (S))] • S representa una muestra aleatoria de tamaño formemente de D0 k−1 |D0 | k tomada uni- • En esta expresión se toma el valor esperado sobre subconjuntos de los datos disponibles D0 en lugar de sobre todos los subconjuntos tomados de toda la instancia de distribución D 97 • El intervalo de confianza aproximado del N% para estimar ES⊂D0 [errorD (LA (S))− errorD (LB (S))] usando δ̂ esta dado por: δ̂ ± tN,k−1 S δ̂ • donde tN,k−1 es una constante análoga a zN un estimado de la desviación estandar que gobierna δ̂ • sδ̂ es s sδ̂ ≡ 1 k(k−1) k P (δi − δ̂)2 i=1 • tN,k−1 tiene dos sub-ı́ndices, el primero indica el nivel de confianza y el segundo los grados de libertad, denotado por v • v se refiere al número de eventos aleatorios independientes que tienen que ver para producir el valor para la variable aleatoria δ̂, en este caso k−1 • Conforme k → ∞, el valor de tN,k−1 se acerca a la constante zN • Note que las muestras con que probamos a los 2 algoritmos son idénticas, a estas pruebas se les llama apareadas • Puebas apareadas producen intervalos de confianza más ajustados porque las diferencias en errores se deben a los algoritmos y no a las diferencias de las muestras que se dan cuando no usamos muestras idénticas para los algoritmos • Esta es la prueba t apareada, en la tabla 5.2 se muestran los valores para tN,v . • La prueba t, t-test, utilizada para comparar las diferencias de resultados para dos grupos, verifica la diferencia entre las medias en relación con que tanto varı́an los resultados individuales Valores de tN,v para intervalos de confianza de dos lados: 5.4.1 Evaluación de Significancia con t-test El proceso para evaluar significancia estadı́stica con t-test es: 98 Confidence level 90% 95% 98% 99% v=2 2.92 4.30 6.96 9.92 v=5 2.02 2.57 3.36 4.03 v=10 1.81 2.23 2.76 3.17 v=20 1.72 2.09 2.53 2.84 v=30 1.70 2.04 2.46 2.75 v=120 1.66 1.98 2.36 2.62 v = ∞ 1.64 1.96 2.33 2.58 Tabla 5.2: Valores de tN,v • Obtener el valor t, como la razón dife ntrem edias variabilidade ne xperimentos = δ̂ sδ̂ • Calcular los grados de libertad (DF = N-1) • Elegir el nivel de α, (o nivel de riesgo), que generalmente se elige 0.05 (cinco veces de un total de cien se encontrará una diferencia significativa entre las medias aún cuando no la hay (la diferencia resultante fue producto de la suerte). • Verificar en la tabla el valor crı́tico de t. Si el valor observado es mayor que el valor crı́tico, entonces se rechaza la hipótesis nula. Si el valor observado es menor que el valor crı́tico, entonces no se puede rechazar la hipótesis nula. Si la tabla no tiene el número de grados de libertad, se usa el siguiente número menor al real (para 32 usar 30). Ejemplo Suponga que se realizó una prueba de 10-FCV con dos clasificadores y queremos saber si la diferencia entre sus promedios es significativa. Para estos datos tenemos los siguientes cálculos: • La diferencia de error medio, δ̂ = 4.30. • La variabilidad entre experimentos, Sδ̂ = 0.42 • El valor de t calculado es, t = 10.17 99 Prueba 1 2 3 4 5 6 7 8 9 10 ALG-1 88 85 93 87 89 85 87 84 86 88 ALG-2 85 80 87 82 85 82 83 79 80 86 Tabla 5.3: Valores de Precisión para los Algoritmos ALG-1 y ALG-2 • El valor crı́tico encontrado en la tabla para 95% de confianza con 9 grados de libertad es aprox. de tN,v = 2.3 • Como el valor observado es mayor que el criı́tico, entonces se rechaza la hipótesis nula • La hipótesis nula dice que no hay diferencia entre las medias • Por tanto, al rechazar la hipótesis nula, se concluye que sı́ hay una diferencia significativa entre las medias. • En caso de que el valor observado fuera menor al crı́tico, no se podrı́a rechazar la hipótesis nula y entonces se concluirı́a que no hay diferencia significativa entre las medias. 5.4.2 Análisis de Varianza ANalysis Of VAriance (ANOVA) • A esta prueba también se le conoce como la prueba f-test y esta relacionada con la t-test • La prueba t-test mide la diferencia entre las medias de 2 grupos 100 • ANOVA prueba la diferencia entre las medias de 2 o más grupos • La ANOVA de 1-lado ó de factor simple prueba la diferencia entre grupos que se clasifican solo sobre una variable independiente • También hay una prueba ANOVA para múltiples variables independientes • La ANOVA tiene como ventaja sobre la t-test que reduce la probabilidad de un error tipo 1, hay muchas comparaciones entre 2 grupos • La desventaja de ANOVA es que se pierde especificidad porque F dice que hay diferencia significante entre grupos pero no dice cuáles grupos son significativamente diferentes entre sı́ • La hipótesis nula asume que no hay diferencia real entre grupos y cualquier diferencia (estadı́stica) se debe a errores de muestreo. Un investigador trata de probar que ésto no es cierto • Un error de tipo 1 ocurre cuando el investigador rechaza la hipótesis nula aún cuando era cierta 5.4.3 Receiver Operating Characteristics (ROC) Analysis 101 Capı́tulo 6 Programación Lógica Inductiva (ILP) 6.1 Nociones de Lógica Importante: que las cosas que queremos que sean verdaderas coicidan con las que podemos probar. Osea: lo que nos implica la teorı́a es lo que podemos computar. Caracterı́sticas: • sintáxis y semántica bien definidas • reglas de inferencia Un alfabeto consiste de variables (aquı́ la primera letra en mayúscula), sı́mbolos de predicados y de funciones (la primera letra en minúscula). Términos = Funciones (sı́mbolo funcional + argumentos) y Variables. Un predicado (sı́mbolo + argumentos) es una fórmula atómica o simplemente un átomo. 102 Axiomas Modelos Pruebas deriva interpreta Teoremas Valores de Verdad Figura 6.1: Las dos caras de la Lógica. válido inválido siempre cierto a veces T o F siempre falso satisfacible insatisfacible Una fórmula G se dice que es una consequencia lógica de un conjunto de fórmulas F = {F1 , . . . , Fn }, N ≥ 1, denotado por F |= G si para cada interpretación w para la cual w(F1 ∧F2 ∧. . . Fn ) = true, entonces w(G) = true Satisfacibilidad, valides, equivalencia y consecuencia lógica son nociones semánticas (generalmente establecidas por medio de tablas de verdad). Para derivar consecuencias lógicas también se pueden hacer por medio de operaciones exclusivamente sintáctivas (e.g., modus ponens, modus tollens). Las cláusulas, son la forma utilizada en prueba de teoremas y programación lógica. Una literal: un átomo o su negación Una clásula: es una fórmula cerrada de la forma: ∀X1 . . . ∀Xs (L1 ∨ . . . ∨ Lm ) donde cada Li es una literal y las Xi son todas las variables que aparecen en 103 las literales. Equivalencias: ∀x1 . . . ∀xs (A1 ∨ . . . An ∨ ¬B1 . . . ∨ ¬Bm ) ≡ ∀x1 . . . ∀xs (B1 ∧ . . . ∧ Bm → A1 ∨ . . . An ) Se escribe normalmente como: A1 , . . . , An ← B1 , . . . Bm Una cláusula de Horn: a lo más una literal positiva. A← ← B1 , . . . , Bn A ← B1 , . . . , Bn Una cláusula definitiva (definite clause) es una cláusula con una literal positiva (A ← o A ← B1 , . . . , Bn ). Razonamiento en lógica: reglas de inferencia Estas reglas solo hacen manipulación sintáctica (son formas procedurales). Lo interesante es ver como las formas procedurales semánticas están relacionadas con las sintácticas. F. Una regla de inferencia es robusta/válida (sound) si S ⊢ F entonces S |= Osea una colección de reglas de inferencia es válida si preserva la noción de verdad bajo las operaciones de derivación. Una regla de inferencia es completa (complete) si S |= F entonces S ⊢ F . Resolución 104 v <- w w v u<- v u Figura 6.2: Un árbol de derivación proposicional. Resolución solo sirve para fórmulas en forma de cláusulas. Idea: prueba por refutación Para probar: P ⊢ Q, hacer W = P ∪ {¬Q} y probar que W es insatisfacible Ejemplo sencillo: Sean C1 y C2 dos cláusulas con literales L1 y L2 (donde L1 y L2 son complementarias). La resolución de C1 y C2 produce: C = C1′ ∪ C2′ donde: C1′ = C1 − {L1 } y C2′ = C2 − {L2 } (eliminando literales redundantes) Para lógica de primer orden: substitución y unificación. Una substitución Θ = {X1 /t1 , . . . , Xk /tk } es una función de variables a términos. La aplicación W Θ de una substitución Θ a una wff W se obtiene al reemplazar todas las ocurrencias de cada variable Xj por el mismo término tj . Al aplicar una substitución a una wff se genera una nueva expresión (una instancia). Una substitución σ es un unificador de un conjunto de expresiones {E1 , . . . , Em } si E1 σ = . . . = Em σ 105 hija(X,Y) <- femenino(X), padre(Y,X). fememino(ana). 1={X/ana} padre(juan,ana). hija(ana,Y) <- padre(Y,ana). ={Y/juan} 2 hija(ana,juan). Figura 6.3: Un árbol de derivación lineal de primer orden. Un unificador θ, es el unificador más general (mgu) de un conjunto de expresiones E, si para cada unificador σ de E, existe una substitución λ tal que σ = θλ Para hacer resolución en lógica de primer orden tenemos que comparar si dos literales complementarias unifican. El algoritmo de unificación construye un mgu de un conjunto de expresiones. Sean C1 y C2 dos cláusulas con literales L1 y L2 respectivamente. Si L1 y ¬L2 tienen un mgu σ, el resolvente de C1 y C2 es la cláusula: (C1 σ −{L1 σ})∪ (C2 σ − {L2 σ}) (ver figura 6.3). El algoritmo de unificación no es determinı́stico (se pueden seleccionar las cláusulas de varias formas). Existen diferentes estrategias de resolución, e.g., semántica, lineal, SLD, etc., para restringir el número de posibles cláusulas redundantes. Resolución SLD Seleccionar una literal, usando una estrategia Lineal, restringido a cláusulas Definitivas. Resolución lineal: 106 • El último resolvente se toma como cláusula padre. • La otra cláusula padre se toma de otro resolvente o del conjunto original. Una forma especial de resolución lineal es: input resolution. En esta estrategia, cada paso de resolución, exceptuando el primero, se toma del último resolvente (cláusulas metas) y del conjunto original (cláusulas de entrada). Input resolution es completa para cláusulas de Horn, pero no para cláusulas en general. Una variante de input resolution es resolución SLD para cláusulas de Horn. Resolución de entrada se extiende con una regla de selección que determina en cada paso que literal de la cláusula meta es seleccionada. La estrategia de búsqueda afecta el resultado. Aunque resolución SLD es sound y refutation complete para cláusulas de Horn, en la práctica (por razones de eficiencia) se hacen simplificaciones: • eliminar el “occur check” de unificación • usar un orden especı́fico Esto es lo que usa básicamente PROLOG 6.2 Programación Lógica Inductiva (ILP) Dentro de los algoritmos de aprendizaje computacional más exitosos, se encuentran los que inducen árboles de decisión (v.g., C4.5) o reglas de clasificación (v.g., CN2), sin embargo, su lenguaje de representación o expresividad es escencialmente proposicional. Esto es, cada prueba que se hace sobre un atributo en un árbol o en una condición de una regla se puede ver como una proposición. Por lo mismo, hablan de un solo objeto a la vez y no podemos relacionar propiedades de 107 dos o más objetos a menos que definamos una propiedad que exprese esa relación para todos los objetos de nuestro dominio. La Programación Lógica Inductiva o ILP (Inductive Logic Programming) combina los resultados experimentales y métodos inductivos del aprendizaje computacional con el poder de representación y formalismo de la lógica de primer orden para poder inducir conceptos representados por programas lógicos. Para entender las ventajas que tiene aprender representaciones relaciones, supongamos que queremos aprender (y por lo tanto representar con nuestro sistema de aprendizaje) los movimientos de una torre en ajedrez. Si asumimos que representamos los movimientos de las piezas de ajedrez con cuatro atributos, col1, ren1, col2 y ren2, representando la columna y renglón de una pieza antes y después del movimiento, un sistema proposicional aprenderı́a algo parecido a esto: If col1 = 1 and col2 = 1 Then mov torre = true If col1 = 2 and col2 = 2 Then mov torre = true ... If col1 = 8 and col2 = 8 Then mov torre = true If ren1 = 1 and ren2 = 1 Then mov torre = true If ren1 = 2 and ren2 = 2 Then mov torre = true ... If ren1 = 8 and ren2 = 8 Then mov torre = true Representando que la torre se puede mover sólo sobre el mismo renglón o sobre la misma columna. En una representación relacional, si asumimos que tenemos un predicado mov(X, Y, Z, W ) cuyos argumentos representan igualmente la posición en columna y renglón de cada pieza antes y después del movimiento, nuestra sistema necesitarı́a aprender lo siguiente: mov(X, Y, X, Z) : −Y 6= Z. mov(X, Y, Z, Y ) : −X 6= Z. Además de aprender una representación más compacta y contar con la capacidad de relacionar propiedades de más de un objeto a la vez, otra ventaja de un sistema de ILP es que puede incluir conocimiento del dominio dentro del proceso de aprendizaje. Consideremos el problema de aprender 108 el concepto de hija definida entre dos personas. hija(X, Y ) es verdadero si X es hija de Y 1 . Podemos definir la relación hija(X, Y ), en términos de las relaciones como padre y femenino. En ILP, el problema se plantea de la siguiente forma: Ejemplos positivos (⊕) y negativos (⊖): hija(f ernanda, eduardo).⊕ hija(camila, rodrigo).⊕ hija(eugenia, ernesto).⊖ hija(valentina, roberto).⊖ ... Conocimiento del Dominio: f emenino(f ernanda). f emenino(camila). f emenino(eugenia). f emenino(valentina). ... padre(eduardo, f ernanda). padre(rodrigo, camila). padre(roberto, eugenia). padre(ernesto, valentina). ... Resultado: hija(X, Y ) : −f emenino(X), padre(Y, X). Finalmente, algunos sistemas de ILP pueden introducir nuevos predicados automáticamente durante el aprendizaje, simplificando la representación de los conceptos aprendidos. Por ejemplo, introducir el predicado progenitor refiriendose a padre o madre, para simplificar una representación de un concepto que utilice indistintantemente a las relaciones de padre y madre. Más adelante proporcionamos un ejemplo de esto. Estos ejemplos ilustran algunas limitaciones de muchos de los sistemas de aprendizaje actuales: 1 Aquı́ asumimos la notación utilizada en Prolog, donde las predicados empiezan con minúsculas y las variables con mayúsculas. 109 1 2 5 7 0 3 4 6 8 Figura 6.4: Grafo conectado. • Representación Restringida: inadecuados en áreas que requieren expresar conocimiento relacional (v.g., razonamiento temporal y/o espacial, planificación, lenguaje natural, razonamiento cualitativo, etc.). • Conocimiento del Dominio: son incapaces de incorporar conocimiento del dominio (utilizan un conjunto fijo de atributos). • Vocabulario Fijo: no pueden inventar nuevo vocabulario con conocimiento insuficiente del dominio.2 Otro ejemplo (ver figura 6.4): Ejemplos (en ILP): conectados(0,1). + conectados(1,8). − ... Conocimiento del dominio: liga(0,1). liga(0,3). liga(1,0). liga(1,2). liga(2,3). liga(3,2). liga(3,4). liga(4,5). liga(4,6). liga(5,4). liga(6,8). liga(7,6). liga(7,8). liga(8,7). 2 Aunque existen sistemas proposicionales de feature construction que permiten inducir nuevos atributos como combinaciones de atributos existentes. 110 conectados(X,Y) :liga(X,Y). conectados(X,Y) :liga(X,Z), conectados(Z,Y). La idea en ILP, como en aprendizaje inductivo, es aprender una hipótesis que cubra los ejemplos positivos y no cubra los negativos. Para verificar la covertura de ejemplos en ILP, se usa normalmente algún algoritmo de inferencia basado en resolución. • Un programa lógico P se dice completo (con respecto a E + ) sii para todos los ejemplos e ∈ E + , P ⊢ e • Un programa lógico P se dice consistente (con respecto a E − ) sii para ningún ejemplo e ∈ E − , P ⊢ e El entorno teórico de ILP lo podemos caracterizar entonces como sigue: Dados • un conjunto de ejemplos positivos E + • un conjunto de ejemplos negativos E − • un programa lógico consistente, T , tal que T 6⊢ e+ para al menos un e+ ∈ E + Encontrar un programa lógico H tal que H y T sea completo y consistente: T ∪ H ⊢ E + y T ∪ H 6⊢ E − . T normalmente se refiere a conocimiento del dominio o conocimiento a priori. Desde un punto de vista semántico la definición de ILP es: • Satisfactibilidad previa: T ∧ E − 6|= 2 • Satisfactibilidad posterior (correcto o consistente): T ∧ H ∧ E − 6|= 2 • Necesidad previa: T 6|= E + 111 • Suficiencia posterior (completo): T ∧ H |= E + En la mayoria de los casos, se limita al caso de cláusulas definitivas. Esto es mucho más fácil, porque una teorı́a de cláusulas definitivas tiene un modelo de Herbrand mı́nimo único M+ (T ) y todas las fórmulas lógicas son o verdaderas o falsas. Interpretaciones y Modelos de Herbrand La teorı́a de modelos nos permite asignar significado a cualquier expresión en lógica. La idea es asociar valores de verdad dentro de un dominio o hacer una interpretación. Asignamos constantes a elementos del dominio y los sı́mbolos funcionales y de predicados a funciones y relaciones del dominio. Por ejemplo, si tenemos: gusta(juan,ana). Tenemos que asociar “juan” y “ana” a elementos del dominio, y tenemos que asociar la relación “gusta/2” en el dominio. Por ejemplo, “juan” con “persona-juan”, “ana” con “persona-ana” y “gusta/2” con “persona-juan, persona-juan”, “persona-ana, persona-ana” y “persona-juan, persona-ana” (por ejemplo). Bajo esta interpretación, la relación: gusta(juan,ana) es verdadera. Sin embargo, si asignamos “juan” a “persona-ana” y “ana” a “persona-juan” y mantenemos la misma interpretación de la relación gusta(juan,ana) es falsa. Una interpretación que nos da un valor de verdad para una sentencia lógica se dice que la satisface y a la interpretación se le llama un modelo de la sentencia. Para programas lógicos podemos hablar de modelos e interpretaciones de Herbrand. Por ejemplo, si tenemos: gusta(juan, X) ← gusta(X, vino). gusta(ana, vino). 112 Tomando, solo las constantes: juan, ana y vino, todas las instanciaciones aterrizadas (ground ) del programa lógico son: gusta(juan, juan) ← gusta(juan, vino). gusta(juan, ana) ← gusta(ana, vino). gusta(juan, vino) ← gusta(vino, vino). gusta(ana, vino). Podemos asignar valores de verdad a todos estos elementos y obtener modelos para ciertas interpretaciones. En particular, los modelos se pueden organizar en un lattice. Desde asignar a todos los elementos un valor de verdad (máximo) hasta al menor número posible (mı́nimo). En el ejemplo de arriba, el modelo mı́nimo de Herbrand es: asignar el valor de verdad a: gusta(ana,vino). (a fuerzas) y a gusta(juan,ana) ← gusta(ana,vino). (derivado del primero). Esto es importante, porque las consecuencias lógicas aterrizadas de un programa lógico son su modelo mı́nimo (M) y también es lo que podemos derivar con resolución SLD en programas con cláusulas definitivas. • Satisfactibilidad previa: ∀e ∈ E − son falsos en M+ (T ) • Satisfactibilidad posterior (correcto o consistente): ∀e ∈ E − son falsos en M+ (T ∧ H) • Necesidad previa: algunos e ∈ E + son falsos en M+ (T ) • Suficiencia posterior (completo): ∀e ∈ E + son verdaderos en M+ (T ∧ H) Un caso especial, el que más se usa en ILP, en cuando todos los ejemplos son hechos sin variables. Búsqueda de Hipótesis 113 El proceso de inducción puede verse como un proceso de búsqueda de una hipótesis dentro del espacio de hipótesis H = {H1 , H2 , . . . , Hn }, esto es dentro del conjunto de todas las hipótesis que el algoritmo de aprendizaje está diseñado a producir. En ILP este espacio puede ser demasiado grande por lo que normalmente se diseñan estrategias de búsqueda que consideren sólo un número limitado de alternativas. Para realizar una búsqueda eficiente de hipótesis, normalmente es necesario estructurar el espacio de hipótesis, lo cual se puede hacer con un modelo de generalización. Esto es, con un modelo que me diga si una hipótesis es más general o más especı́fica que otra. Esta estructuración permite cortar ramas durante la búsqueda sabiendo que especializaciones o generalizaciones de hipótesis hereden alguna propiedad. Las propiedades más comunes son: incapacidad de cubrir un ejemplo conocido como verdadero o probar un ejemplo conocido como falso. Por ejemplo, si sabemos que una hipótesis cubre un ejemplo negativo, podemos eliminar del espacio de búsqueda todas sus generalizaciones ya que van a seguir cubriendo ese ejemplo. Por el contrario, si una hipótesis no cubre un ejemplo positivo, podemos eliminar del espacio de búsqueda todas sus especializaciones ya que tampoco lo van a cubrir. Esta estructuración del espacio de hipótesis se puede hacer utilizando Θ− subsumption. Una cláusula C, θ–subsume (o es una generalización de) una cláusula D si existe una substitución θ tal que Cθ ⊆ D. Usualmente se escribe como C D. Por ejemplo: Sea C = hija(X, Y ) ← padre(X, Y ). Con la substitución vacı́a, C subsume a hija(X, Y ) ← f emenino(X), padre(X, Y ). Con la substitución Θ = {Y /X}, C subsume a hija(X, X) ← f emenino(X), padre(X, X), y con la substitución Θ = {X/ana, Y /luis}, C subsume a hija(ana, luis) ← f emenino(ana), padre(luis, ana), padre(luis, pepe). Θ−subsumption introduce una noción de generalización. Una cláusula C es más general que C ′ si CΘ-subsume a C ′ y no al revés. También se dice que C ′ es una especialización (o refinamiento) de C. 114 Si CΘ-subsume a C ′ , entonces C ′ es una consecuencia lógica de C, C |= C , pero al revés no se cumple. Por ejemplo: C = par(X) ← par(mitad(X)) y D = par(X) ← par(mitad(mitad(X))). C |= D pero C no Θ-subsume D (CΘ 6⊆ D). ′ C D sii D es una tautologı́a o C es usada exactamente una vez en una prueba de resolución de T ⊢ C → D, donde T es un conjunto arbitrario de cláusulas. En particular, C no puede aplicarse a si mismo directa o indirectamente durante la prueba. El uso de Θ−subsumtion se justifica por el hecho de que es decidible entre cláusulas, es fácil de calcular (aunque es NP) y mientras que implicación no es decidible. crea un lattice. Esto es importante porque permite buscar en ese lattice por hipótesis. La búsqueda puede hacerse: (i) de especı́fico a general, buscando cláusulas que subsuman a la hipótesis actual, (ii) de general a especı́fico, buscando cláusulas subsumidas por la hipótesis actual, ó (iii) en ambos sentidos. Ejemplo: Ejemplos ordena([2,1],[1,2]). ordena([0,3,1],[0,1,3]). ordena([4,2,6],[2,4,6]). ordena([1],[1]). ordena([ ],[ ]). ... Conocimiento del Dominio junta([ ],L,L). junta([H|L1],L2,[H|L3]) ← junta(L1,L2,L3). divide(El,[H|T],Men,[H|May]) ← El < H, divide(T,Men,May). divide(El,[H|T],[H|Men],May) ← El >= H, divide(T,Men,May). divide( ,[ ],[ ],[ ]). 115 Espacio de Soluciones Muy general: ordena(X,Y). Solución: ordena([ ],[ ]). ordena([H|T],LOrd) ← divide(H,T,Men,May), ordena(Men,MenOrd), ordena(May,MayOrd), junta(MenOrd,[H|MayOrd],LOrd). Muy especı́fico: ordena([1],[1]) ← junta([],[1],[1]), junta([1],[2,3],[1,2,3]), ..., divide(1,[],[],[]), divide(2,[1,5],[1],[5]), ... ordena([],[]), ordena([4],[4]), ... 6.2.1 Generalización menos general. Una forma de ir búscando hipótesis es generalizando cláusulas gradualmente. La generalización menos general (lgg) de dos cláusulas C y C ′ es la generalización más especı́fica de las cláusulas C y C ′ dentro del lattice generado por Θ−subsumtion. C es la generalización menos general (lgg) de D bajo θ−subsumtion si C D y para cualquier otra E tal que E D, E C. Plotkin fué uno de los pioneros en usar lgg como mecanismo de aprendizaje en lógica de primer orden. El algoritmo para evaluar el lgg entre dos términos viene descrito en la tabla 6.1. Con respecto a átomos, lgg es el dual de mgu. Dados dos términos f1 y f2 y el orden impuesto por , entonces el lgg de f1 y f2 es su lı́mite inferior más grande (glb) y el mgu es el lı́mite superior más bajo (lub). Por ejemplo, si tenemos las siguientes dos literales (L1 , L2 ) podemos encontrar el lgg y el mgu entre ellas, donde el lgg es la literal más especı́fica que subsume a las dos literales, mientras que el mgu es la literla más general subsumida por L1 y L2 . 116 Tabla 6.1: Algoritmo de lgg entre dos términos. Si L1 y L2 son dos términos o literales compatibles 1. Sea P1 = L1 y P2 = L2 . 2. Encuentra dos términos, t1 y t2 , en el mismo lugar en P1 y P2 , tal que t1 6= t2 y o los dos tienen un nombre de función diferente o por lo menos uno de ellos es una variable 3. Si no existe ese par, entonces acaba. P1 = P2 = lgg(L1 , L2 ). 4. Si existe, escoge una variable X distinta de cualquier variable que ocurra en P1 o P2 , y en donde t1 y t2 aparezcan en el mismo lugar en P1 y P2 , remplazalos con X. 5. Ve a 2. lgg(L1 , L2 ) = f oo(Z, f (Z), g(W, b), V ). z L1 = f oo(a, f (a), g(X, b), Z) | }| {z { L2 = f oo(Y, f (Y ), g(c, b), Z) mgu(L1, L2 ) = f oo(a, f (a), g(c, b), Z). } El lgg de dos cláusulas C1 y C2 está definido por: {l : l1 ∈ C1 y l2 ∈ C2 y l = lgg(l1, l2 )}. Por ejemplo, si: C1 = hija(f ernanda, eduardo) ← padre(eduardo, f ernanda), f emenino(f ernanda), pequeña(f ernanda). C2 = hija(camila, rodrigo) ← padre(rodrigo, camila), f emenino(camila), grande(camila). lgg(C1, C2) = hija(X, Y ) ← padre(Y, X), f emenino(X). La longitud del lgg de las cláusulas C1 y C2 es a lo más | C1 | × | C2 |. 117 C1 = member (1,[0,1]) ← member (1,[1]), member (0,[2,0]), member (1,[1,0]). C2 = member (0,[1,2,0]) ← member (1,[1]), member (0,[2,0]), member (1,[1,0]). Produce: member (X,[Y,Z|T]) ← member (1,[1]), member (X,[Z|T]), member (1,[1|T]), member (Y,[W|R]), member (0,[2,0]), member (Y,[W,0]), member (1,[1|R]), member (X,[Z,0]), member (1,[1,0]). El lgg entre literales es único (renombrando variables), pero entre cláusulas no necesariamente (se pueden reducir bajo Θ–subsumción). Esto mismo se extiende para un conjunto de cláusulas. 6.2.2 RLGG o lgg relativo a una teorı́a. En general nos interesa encontrar generalizaciones de un conjunto de ejemplos en relación a cierta teorı́a o conocimiento del dominio. Una cláusula C es más general que una D con respecto a una teorı́a T si T ∧ C ⊢ D. Una cláusula C es un lgg de una cláusula D con respecto a una teorı́a T , si T ⊢ CΘ → D para alguna substitución Θ. Decimos que C es la generalización menos general de D relativa a T (rlgg). Esto es equivalente a decir que C ∧ T ⊢ D ′ donde D ′ subsume a D y C se usa sólo una vez en la derivación de D ′ . En general, puede no existir un rlgg, pero si existe para teorı́as aterrizadas (sin variables). En particular, si T es un conjunto finito de literales aterrizadas, el lgg de C1 y C2 con respecto a T , es: lgg(T → C1 , T → C2 ). Rlgg sin embargo, puede tener algunas conclusiones no intuititvas. Por ejemplo, es fácil de verificar que: P ← Q es más general que R ← S, Q relativa a R ← P, S. 118 Para mejorar esto, Buntine introdujo la noción de subsumción generalizada, el cual es un caso especial de rlgg, restringido a cláusulas definitivas. La idea es que C es más general que D con respecto a T , si cada vez que D se puede usar (junto con T ) para explicar algún ejemplo, C también se pueda usar. Esto lo podemos expresar más formalmente como sigue: Una cláusula C ≡ Ccabeza ← Ccuerpo, subsume a otra cláusula D ≡ Dcabeza ← Dcuerpo con respecto a T (C T D) si existe una substitución mı́nima σ tal que Ccabeza σ = Dcabeza y para cualquier substitución aterrizada (ground ) θ con constantes nuevas para D, se cumple que: T ∪ Dcuerpoθ |= ∃ (Ccuerpoσθ). Esto lo podemos ver como sigue. Sean: (i) C y D dos cláusulas con variables disjuntas, y T un programa lógico, (ii) θ1 una substitución (ground) para las variables en Ccabeza , (iii) θ2 una substitución para el resto de las variables en C, y (iv) similarmente, φ1 y φ2 para D. Si lggT (C, D) existe, es equivalente al lgg(C ′, D ′ ), donde: C ′ ≡ C θ1 ∪ {¬A1 , . . . , ¬An } y D ′ ≡ D φ1 ∪ {¬B1 , . . . , ¬Bm } y para 1 ≤ i ≤ n, T ∧ Ccuerpoθ1 θ2 |= Ai , y Ai es un átomo aterrizado construido con sı́mbolos que ocurren en T , C, θ1 , θ2 , y D. Similarmente para cada Bj . Esto se puede utilizar dentro de un sistema de aprendizaje de la siguiente forma: • Toma una cláusula ejemplo (C1 ) y sea θ1,1 una substitución instanciando las variables en la cabeza de C1 a nuevas constants y θ1,2 instanciando las variables que quedan a nuevas constantes. • Construye una nueva cláusula saturada (NC) definida como: NC ≡ C1 θ1,1 ∪ {¬A1,1 , ¬A1,2 , . . .} donde T ∧ C1cuerpoθ1,1 θ1,2 |= A1,i , y A1,i es una átomo instanciado. • Construye para cada ejemplo, su cláusula saturada, y calcula el lgg entre ellas. Por ejemplo, supongamos que queremos aprender una definición de faldero y tenemos las siguientes dos cláusulas ejemplo: 119 C = f aldero(f ido) ← consentido(f ido), pequeño(f ido), perro(f ido). D = f aldero(morris) ← consentido(morris), gato(morris). Entonces: lgg(C, D) = f aldero(X) ← consentido(X). lo cual podrı́a ofender a varias personas. Si por otro lado tenemos de conocimiento del dominio: mascota(X) ← perro(X). mascota(X) ← gato(X). pequeño(X) ← gato(X). Podemos añadir al cuerpo de C y D lo que podamos deducir del cuerpo de cada cláusula con el conocimiento del dominio. Esto es, añadir mascota(f ido) a C tomando perro(f ido) del cuerpo de C y la primera cláusula del conocimiento del dominio. De la misma forma, podemos añadir a D, mascota(morris) y pequeño(morris), con lo que nos quedarı́an las siguientes dos cláusulas satudadas: C ′ = f aldero(f ido) ← consentido(f ido), pequeño(f ido), perro(f ido), mascota(f ido). D ′ = f aldero(morris) ← consentido(morris), gato(morris), mascota(morris), pequeño(morris). Entonces: rlggT (C, D) = lgg(C ′, D ′) = f aldero(X) ← consentido(X), pequeño(X), mascota(X). que se acerca más a una definición plausible que toma en cuenta nuestro conocimiento del dominio. Sistemas como PAL y Golem estás basados en esta técnica. 6.2.3 Inversión de Resolución. Otra idea para aprender programas lógicos, es invertir el proceso de resolución. Para esto necesitamos definir una substitución inversa Θ−1 que mapea términos a variables. Por ejemplo, si C = hija(X, Y ) ← f emenino(X), padre(Y, X), la substitución: Θ = {X/ana, Y /juan} nos da: C ′ = CΘ = 120 femenino(ana). hija(X,Y) femenino(X), padre(Y,X). -1 01 = {ana/X} padre(juan,ana). hija(ana,Y) padre(juan,ana). -1 02 = {juan/Y} hija(ana,juan). Figura 6.5: Un árbol de derivación inversa. hija(ana, juan) ← f emenino(ana), padre(juan, ana) y la substitución inversa: Θ−1 = {ana/X, juan/Y } nos da: C ′ Θ−1 = hija(X, Y ) ← f emenino(X), padre(Y, X). De forma similar, si conocemos hija(ana, juan) y padre(juan, ana) (figura 6.5), podrı́amos aplicar un paso inverso de resolución para obtener hija(ana, Y ) ← padre(Y, ana), con una substitución inversa de Θ−1 2 = {juan/Y }. Si además sabemos que f emenino(ana), podrı́amos aplicar otro proceso inverso de resolución para obtener hija(X, Y ) ← f emenino(X), padre(Y, X) con Θ−1 1 = {ana/X}. En general, se tienen que especificar los lugares, dentro de la cláusula en donde se hace la substitución. Por ejemplo: c = quiere(X, hija(Y )). con Θ = {X/ana, Y /ana} nos da: cΘ = quiere(ana, hija(ana)). Para recuperar c necesitamos tener: Θ−1 = {(ana, {1})/X, (ana, {2, 1})/Y } para poder recuperar la c original. El tratar de invertir el proceso presenta algunos problemas: • En general no existe una solución única. • Tenemos que decidir si vamos a cambiar términos a variables y cómo. Dado un árbol de derivación de dos cláusulas C1 y C2 para obtener C, el operador de absortion, construye C2 , dados C y C1 . De la ecuación del resultante de aplicar resolución podemos despejar C2 : C2 = (C − (C1 − {L1 })θ1 )θ2−1 ∪ {L2 } 121 donde θ1 y θ2 son substituciones involucrando únicamente las variables de las cláusulas C1 y C2 respectivamente. Para ésto, se tiene que decidir qué términos y subtérminos se deben de remplazar por la misma variable y cuáles por variables diferentes. Cigol resuelve parcialmente esto, asumiendo que C1 es una cláusula unitaria (i.e., C1 = L1 ), con lo que obtenemos: C2 = (C ∪ {¬L1 }θ1 )θ2−1 El problema está con θ2−1 . Si C1 es una cláusula aterrizada (ejemplo positivo) entonces θ1 es vacı́a. Por ejemplo, si C = menor(A, suc(suc(A))) y C1 = menor(B, suc(B)). Si definimos: θ1 = {B/suc(A)}, obtenemos: (C ∪ {¬l1 }θ1 ) = menor(A, suc(suc(A))) ← menor(suc(A), suc(suc(A))). Ahora, para calcular θ2−1 , debemos decidir cómo cambiar las dos ocurrencias del término suc(suc(A)) en variables. Supongamos que ambas ocurrencias las cambiamos por D, entonces: C2 = (C ∪ {¬l1 }θ1 )θ2−1 = menor(A, D) ← menor(suc(A), D). Con cláusulas de Horn en general, el cuerpo de C1 es absorbido en el cuerpo de C (después de la aplicación de una unificación adecuada) y remplazada con su cabeza. Por ejemplo: C = ave(tweety) ← plumas(tweety), alas(tweety), pico(tweety). C1 = vuela(X) ← plumas(X), alas(X). El cuerpo de C1 es absorbido en el cuerpo de C después de la substitución θ = {X/tweety} dando una posible solución: C2 = ave(tweety) ← vuela(tweety), pico(tweety). El problema de absoption es que es destructiva, en el sentido de que las literales remplazadas se pierden y no pueden usarse para futuras generalizaciones (es problema cuando los cuerpos de las cláusulas se traslapan parcialmente), por lo que las generalizaciones dependen del orden de estas. Por ejemplo, si tenemos: C1 = P ← Q, R. C2 = S ← R, T. C3 = V ← Q, R, T, W. 122 C1 y C2 comparten una literal y ambas se pueden usar para hacer absorption con respecto a C3 . Absorption de C3 con C1 nos da: C4 = V ← P, T, W , pero ahora no se puede hacer absorption de C3 con C2 . Este problema se puede resolver si usamos saturación, en donde la diferencia es que mantenemos todas las literales (las usadas en paréntesis, indicando que son opcionales). Saturación hace todas las posibles deducciones en el cuerpo de una cláusula de entrada usando el conocimiento del dominio, y viene la generalización al eliminar las literales redundantes. C1 y C3 : C4 = V ← [Q, R], P, T, W. C4 y C2 : C5 = V ← [Q, R, T ], W, P, S. Otro operador que invierte el proceso de resolución es el operador “W” que se obtiene al combinar dos operadores “V”, como el que acabamos de ver. Supongamos que C1 y C2 resuelven en una literal común l dentro de la cláusula A para producir B1 y B2 . Entonces el operador W construye A, C1 y C2 dados B1 y B2 . Cuando l es negativo se llama intraconstruction y cuando es positivo interconstruction. Como la literal l en A es eliminada en la resolución y no se encuentra en B1 o B2 , se tiene que inventar un nuevo predicado. B1 = (A − {l1 })θA,1 ∪ (C1 − {l1 })θC,1 B2 = (A − {l1 })θA,2 ∪ (C2 − {l2 })θC,2 Suponiendo otra vez que C1 y C2 son cláusulas unitarias: −1 −1 A = B1 θA,1 ∪ {l} = B2 θA,2 ∪ {l} = B ∪ {l} donde B es una generalización común de las cláusulas B1 y B2 . Por ejemplo, supongamos que: B1 = abuelo(X, Z) :- padre(X, Y ), padre(Y, Z). B2 = abuelo(A, C) :- padre(A, B), madre(B, C). Podemos aplicar el operador “W” para obtener las siguientes cláusulas (ver figura 6.6): A = abuelo(L, N) :- padre(L, M), nvop(M, N). C1 = nvop(Y, Z) :- padre(Y, Z). C2 = nvop(B, C) :- madre(B, C). 123 C2: nvop(B,C) :- madre(B,C). C1: nvop(B,C) :- madre(B,C). A: abuelo(L,N) :- padre(L,M),nvop(M,N). B1: abuelo(X,Z) :- padre(X,Y),padre(Y,Z). B2: abuelo(A,C) :- padre(A,B),madre(B,C). Figura 6.6: Un ejemplo del operador “W”. lgg(C,D) = h(X,Y) C= h(ana,juan) f(X), p(Y,X). D = h(maria,pepe) f(ana),p(juan,ana). f(maria). 0 = {} -1 f(ana). 1 p(juan,ana). h(ana,juan) p(juan,ana). p(pepe,maria). f(maria),p(pepe,maria). -1 01= {} h(maria,pepe) p(pepe,maria). -1 02 = {} -1 02 = {} h(maria,pepe). h(ana,juan). Figura 6.7: Esquema común de generalización, donde h se refiere a hija, f a f emenino y p a padre. 6.2.4 Un esquema común de generalización. Muggleton estableció una forma de relacionar resolución inversa y rlgg. La idea es que para cada ejemplo que se tenga, realizar la resolución inversa (derivación inversa lineal) con la substitución inversa más especı́fica (substitución vacı́a) y después hacer el lgg de las cláusulas resultantes. Esto es, las generalizaciones más especı́ficas con respecto a conocimiento del dominio (rlgg) son las generalizaciones más especı́ficas (lgg) de los árboles inversos de derivación más especı́ficos (ver figura 6.7). 6.2.5 Inversión de Implicación. Finalmente, podemos tomar una interpretación semántica y pensar en invertir implicación. Sean C y D cláusulas. Decimos que C implica D, o C → D, 124 sii todo modelo de C también es modelo de D, i.e., C |= D. Decimos que C es una generalización (bajo implicación) de D. El problema de invertir implicación es que implicación es indecidible y computacionalmente es muy costoso, a menos, que se impongan ciertas restricciones. Lo que se quiere encontrar es una H tal que: T ∧ H |= E. Por el teorema de deducción: T ∧ ¬E |= ¬H, donde ¬E y ¬H representan conjunciones de literales aterrizadas (Skolemizadas). Si ¬ ⊥ representa todas las literales aterrizadas (potencialmente infinitas) ciertas en todos los modelos de: T ∧ ¬E, ¬H debe de ser un subconjunto de ¬ ⊥, por lo que: T ∧¬E |= ¬ ⊥|= ¬H y para toda H, H |=⊥. Con esto se puede buscar a H en cláusulas que subsumen a ⊥. En la práctica para construir ⊥ se utiliza resolución SLD3 de profundidad limitada (h). Al resultado se le conoce como modelos h-easy. Una forma de encontrar H es construyendo gradualmente hipótesis que sean subconjuntos de ⊥ siguiendo una estrategia de general a especı́fico. Esto es básicamente lo que hace el sistema Progol. Los algoritmos que buscan de especı́fico a general pueden tener problemas en presencia de ruido. Lo mismo sucedió con los algoritmos de reglas proposicionales iniciales como AQ, lo que originó el proponer algoritmos de general a especı́fico que siguen una estrategia de covering como CN2 o PART. El mismo esquema de covering se propuso en ILP para lidear con ruido como se verá en la siguiente sección. 6.2.6 Sistemas de General a Especı́fico En general, los algoritmos de ILP de general a especı́fico siguen el esquema descrito en la tabla 6.2. La idea es ir añadiendo incrementalmente literales (condiciones a reglas) siguiendo un proceso de búsqueda, generalmente tipo hill-climbing, usando una medida heurı́stica (ver figura 6.8). Una vez que se cumple el criterio de necesidad por la hipótesis actual, se eliminan los ejemplos positivos cubiertos y se empieza a generar una nueva cláusula. El proceso continua hasta que se cumple un cierto criterio de suficiencia. En 3 Seleccionar una literal, usando una estrategia Lineal, restringido a cláusulas Definitivas. 125 Tabla 6.2: Algoritmo de construcción de cláusulas de general a especı́fico. Inicializa Eactual := E Inicializa H := ∅ repite % covering Iniciaiza C := T ← repite % especializa Encuentra el mejor refinamiento (Cmejor ) de C Sea C := Cmejor hasta criterio de paro (necesidad) Añade C a H, H := H ∪ {C} Elimina ejemplos positivos cubiertos por C de Eactual hasta criterio de paro (suficiencia) Regresa H dominios sin ruido, el criterio de necesidad es de consistencia, esto es, no cubrir ningún ejemplo negativo, y el de suficiencia es de covertura, esto es, hasta cubrir todos los ejemplos positivos. En dominios con ruido, se deja de exigir que las hipótesis sean completas y consistentes y se utilizan medidas heurı́sticas. Estas medidas se basan en el número de ejemplos positivos y negativos cubiertos por las hipótesis, como se verá más adelante. En esta forma de construcción de programas lógicos se tiene que especificar el criterio a utilizar para seleccionar una nueva literal y el criterio de hija(X,Y) hija(X,Y) femenino(Y) hija(X,Y) ... hija(X,Y) femenino(X) hija(X,Y) padre(X,Y). padre(Y,X). ... hija(X,Y) femenino(X), femenino(Y). hija(X,Y) femenino(X), padre(Y,X). Figura 6.8: Proceso de construcción de programas lógicos siguiendo un esquema de general-a-especı́fico. 126 paro. Para añadir una nueva literal (especializar una cláusula) se puede hacer con operadores de refinamiento (refinement operators). A grandes rasgos, Q es un refinamiento de T si T implica Q y tamaño(T ) < tamaño(Q), donde tamaño es una función que hace un mapeo de cláusulas a números naturales. Un operador de refinamiento se dice completo sobre un conjunto de cláusulas, si podemos obtener todas las cláusulas por medio de refinamientos sucesivos a partir de la cláusula vacı́a. Un operador de refinamiento induce un orden parcial sobre el lenguaje de hipótesis. Al igual que con Θ−subsumption, se puede hacer una grafo en donde nodos en capas inferiores son especializaciones de nodos en capas superiores. Dado un operador de refinamiento completo para su lenguaje de hipótesis, estos sistemas recorren su grafo de refinamiento hasta encontrar la hipótesis deseada. Uno de los primeros sistemas en usar operadores de refinamiento fue MIS. La diferencia entre muchos de los sistemas de ILP radica en qué operador de refinamiento utilizan y cómo recorren su grafo de refinamiento. Por ejemplo, el operador de refinamiento de Foil considera añadir al cuerpo de la cláusula alguna de las siguientes literales: (i) Xj = Xk , (ii) Xj 6= Xk , (iii) P (V1, V2 , . . . , Vn ) y (iv) ¬P (V1 , V2 , . . . , Vn ), donde las Xs y V s son variables y P en uno de los predicados del conocimiento del dominio. Ganacia de Información y FOIL Se utilizan medidas, como ganacia en información para apoyar una especialización bajo la capacidad de discriminar entre ejemplos positivos y negativos. Se puede ver como una extensión “natural” de algoritmos tipo ID3. Muchos sistemas, empiezan con una teorı́a en forma de cláusulas unitarias instanciadas representando ejemplos positivos, negativos y la teorı́a del dominio y aprenden incrementalmente cláusulas hasta cubrir todos los ejemplos positivos y ningúno de los negativos. Para entender a Foil, definimos: Un tuple (o tupla) como una secuencia 127 finita de constantes. Una tupla satisface una cláusula si existe un mapeo de las variables de la cabeza de la cláusula hacia la tupla y una extensión de todos las variables del cuerpo a constantes satisfaciendo el cuerpo. Foil empieza con tuplas positivas y negativas satisfaciendo el concepto meta y con una cláusula muy general, la cual es gradualmente especializada añadiendole literales al cuerpo. Si la literal añadida usa sólo variables existentes en la cláusula actual, el nuevo conjunto de tuplas positivas y negativas es un subconjunto de aquellas tuplas que satisfacen el predicado adicional. Si se introduce una nueva variable en una nueva literal, las tuplas se tienen que extender para incluir los valores de esa variable. Esto se hace de manera automática en Foil. La asignación de valor a las tuplas (positiva o negativa) se toma de la asignación original. Ejemplo: ligados(X, Y ). ⊕: (0,1), (0,2), (0,3), (0,4), ..., (7,8) ⊖: (0,0), (0,7), (1,0), (1,1), ..., (8,8) ligados(X, Y ) :- liga(X, Y ). Elimina 10 tuplas de ⊕ ligados(X, Y ) :- liga(X, Z). Introduce una nueva variable y las nuevas tuplas serı́an: ⊕: (0,2,1), (0,2,3), (0,4,1), ..., (4,8,6) ⊖: (0,0,1), (0,0,3), (0,7,1), ..., (7,7,8) 128 ligados(X, Y ) :- liga(X, Z), ligados(Z, Y ). cubre las otras tuplas positivas. Cada literal del cuerpo de la cláusula puede tomar una de las siguientes 4 formas (refinamientos): (i) Xj = Xk (ii) Xj 6= Xk (iii) P (V1 , V2 , . . . , Vn ) (iv) ¬P (V1 , V2 , . . . , Vn ) donde Xi ’s son variables existentes, Vi ’s son variables existente o nuevas, y T es alguna relación. Las nuevas literales en Foil deben de contener por lo menos una variable existente. Foil usa una métrica de ganacia de información para añadir nuevas literales: P1 P0 Gain(literal) = T ++ ∗ [log2 ( ) − log2 ( )] P1 + N1 P0 + N0 donde • P0 y N0 es el número de tuplas negativas y positivas antes de añadir la nueva literal • P1 y N1 son el número de tuplas positivas y negativas después de añadir la literal a la cláusula • T ++ es el número de tuplas positivas antes de añadir la literal que satisfacen la nueva literal La heurı́stica de ganacia de información no garantiza encontrar una solución cuando existen varias posibles literales con ganacia aproximadamente igual. De igual forma puede hacer decisiones locales óptimas pero globalmente malas. De hecho Foil puede cambiar de hipótesis si se le dan los mismos ejemplos positivos dos veces. 129 • Dado un conjunto de tuplas positivas y negativas y tuplas de conocimiento del dominio • repeat until todas las tuplas positivas esten cubiertas – sea cláusula actual = la cabeza del predicado más general con cuerpo vacı́o – repeat until no se cubren tuplas negativas ∗ calcula la ganancia de información de todas las posibles literales que pueden añadirse a la cláusula actual ∗ selecciona la literal con más ganancia de información ∗ añade la literal al cuerpo de la cláusula actual ∗ elimina las tuplas de ejemplos positivos satisfechos por la nueva cláusula Tabla 6.3: Algoritmo de Foil Extensiones (Foil2) utiliza un tipo de back–up primitivo. Foil no tiene sı́mbolos funcionales y se ve afectado por el número de argumentos en el predicado meta. Medidas de calidad Además de utilizar un operador de refinamiento para especializar una hipótesis, se tiene que determinar la calidad de las hipótesis generadas. Dentro de las diferentes medidas, podemos mencionar las siguientes: • Precisión: A(c) = p(⊕|c). Se pueden usar diferentes medidas para estimar esta probabilididad. La más usada, aunque no necesariamente la ⊕ (c) mejor es: p(⊕|c) = nn(c) . Donde n⊕ (c) se refiere a los ejemplos positivos cubiertos por la cláusula c y n(c) se refiere a todos los ejemplos cubiertos por la cláusula c. Más adelante describiremos otras medidas para estimar probabilidades. • Basada en información: I(c) = −log2 p(⊕|c). 130 • Ganancia en precisión: Se puede medir el aumento de precisión que se obtiene al añadir una literal a la cláusula c para obtener c′ , AG(c′ , c′ ) = A(c′ ) − A(c) = p(⊕|c′ ) − p(⊕|c). • Ganancia de información: Similarmente, se puede medir la disminución en información, IG(c′ , c) = I(c) − I(c′ ) = log2 p(⊕|c′ ) − log2 p(⊕|c). • Ganancia en precisión o en información pesada: Se pueden pesar las ⊕ ′ medidas anteriores por el siguiente factor nn⊕(c(c)) , para estimar lo que se gana en ejemplos positivos cubiertos por una especialización particular. Una medida parecida a esta es empleada por Foil. • Ganancia de información mejorada: una variante de ganacia de inforn⊕ (c)+(|N ⊖ |−n⊖ (c) ∗(I(⊤)−I(c)) |N| donde |N ⊖ | es mación es como sigue: IG(c) = |c| el número de ejemplos negativos, n⊖ (c) es el número de ejemplos negativos cubiertos por la hipótesis c, |N| es el número total de ejemplos, y |c| es el número de literales en el cuerpo de c. Para estimar las probabilidades usadas en estas medidas, se pueden utilizar diferentes estimadores. Los más comunes son: ⊕ (c) • Frecuencia relativa, que como ya vimos antes es: p(⊕|c) = nn(c) . Esto es adecuado cuando se cubren muchos ejemplos. Cuando existen pocos ejemplos, esta medida deja de ser confiable. ⊕ (c)+1 . Esta medida aplica cuando • Estimador Laplaciano: p(⊕|c) = nn(c)+2 se tienen dos clases. Esta medida también asume que se tiene una distribución uniforme de las dos clases. ⊕ ⊕ a (⊕) • Estimador-m: p(⊕|c) = n (c)+m×p donde pa (⊕) = nn , es la proban(c)+m bilidad a priori de la clase y m expresa nuestra confianza en la evidencia (ejemplos de entrenamiento). Se define subjetivamente de acuerdo al ruido en los ejemplos, entre más ruido más grande tiene que se ser el valor de m. Si m = 0 regresamos a frecuencia relativa y si m = 2 y pa (⊕) = 21 regresamos al estimador Laplaciano. Existe una gran cantidad de algoritmos de ILP que utilizan una estrategia top-down de general a especı́fico (v.g., Tilde, ICL, mFoil, Foil, entre otros). 131 Los sistemas que usan estrategias de general a especı́fico tienden a tener dificultades con cláusulas que involucran muchas literales. Por otro lado, al utilizar una estrategia de búsqueda tipo hill climbing (como la mayorı́a de los sistemas de aprendizaje), pueden caer en mı́nimos locales y no llegar a encontrar la mejor hipótesis. Se han propuesto varios esquemas en ILP para aliviar el problema de miopı́a que se origina por el esquema de búsqueda utilizado. Por ejemplo, Peña-Castillo y Wrobel proponen utilizar macro-operadores para poder añadir más de una literal al mismo tiempo. Otros sistemas, como m-Foil e ICL utilizan beam-search para tratar de aliviar el problema de la miopı́a. También se ha utilizado fixed-depth look-ahead, esto es, continuar el refinamiento varios pasos adelante. Esto puede ser utilizando templates para hacer la búsqueda más selectiva. 6.2.7 Restricciones y Técnicas Adicionales En general todos los sistemas ILP introducen ciertas restricciones para generar sus hipótesis: • Se le dice al sistema qué argumentos están determinados (argumentos de salida) en un predicado si el resto de los argumentos son conocidos (argumentos de entrada). Se pueden formar gráfos que ligan entradas y salidas guiando la construcción de las hipótesis. Se puede restringir aún más utilizando tipos, esto es, sólo puede existir una liga de variables de entrada - salida si los argumentos son del mismo tipo (v.g., Progol, Aleph). • Considera sólo cláusulas en que todas las variables aparescan por lo menos 2 veces en la cláusula, o introduce una literal con al menos una variable existente (v.g., Foil). • Construye hipótesis sólo de una clase de cláusulas definidas con esquemas o modelos de reglas o gramáticas (v.g., Mobal). • Construye hipótesis siguiendo un operador de refinamiento particular (v.g., MIS). 132 • Utiliza predicados adicionales para determinar qué predicados del conocimiento del dominio son relevantes para la hipótesis actual (v.g., Tracy). Los programas lógicos pueden tener términos complejos usando sı́mbolos funcionales. Muchos sistemas de ILP usan una representación aplanada o flattened para eliminar los sı́mbolos funcionales. Esto es, cada término f (X1 , . . . , Xn ) en cada cláusula C de un programa, se cambia por una nueva cláusula con variables X y se añade al cuerpo de C un nuevo predicado Pf (X1 , . . . , Xn , X) representando la función f . 6.2.8 Proposicionalización. La idea de proposicionalización es la de transformar un problema relacional en una representación de atributo-valor que pueda ser usada por algoritmos más convencionales de aprendizaje computacional como son C4.5 y CN2.Las razones principales son: (i) utilizar algoritmos más eficientes de aprendizaje, (ii) contar con una mayor cantidad de opciones de algoritmos, y (iii) utilizar técnicas más maduras, por ejemplo, en el uso de funciones y regresiones, en el manejo de ruido, etc. Durante el proceso de transformación se construyen atributos a partir del conocimiento del dominio y de las propiedades estructurales de los individuos. Este proceso puede ser completo ó parcial (heurı́stico). Una proposicionalización completa no pierde información. En la parcial o incompleta se pierde información y el objetivo es el generar automáticamente un conjunto pequeño pero relevante de atributos estructurales. Este último enfoque es el más utilizado debido a que a veces el conjunto completo puede llegar a ser infinito. Dedibo al incremento exponencial de atributos con respecto a factores como el número de predicados usados y el número máximo de literales a utilizar, algunos sistemas limitan el número de literales, de variables y de posibles valores por los tipos de atributos, ası́ como la longitud de las cláusulas y el número de ocurrencias de ciertos predicados. Otro enfoque recientemente utilizado es emplear funciones de agregación como las usadas en bases de datos. Se aplican agregaciones a columnas de tablas y se obtienen atributos como promedios, máximos, mı́nimos, y sumas, los cuales alimentan a un sistema proposicional. 133 Tabla 6.4: Transformación a una representación proposicional para aprender la relación de hija. Atributos proposicionales Cl Variables X Y f(X) f(Y) P(X,X) P(X,Y) P(Y,X) P(Y,Y) X=Y fer edu true false false true false false false ⊕ cam car true true false true false false false ⊕ emi ern false false false false true false false ⊖ val rob true false false false false false false ⊖ Para ilustrar más cláramente el proceso de proposicionalización, la tabla 6.4 muestra cómo se podrı́a expresar con Linus, el problema de aprender una definición para la relación hija, visto al inicio del capı́tulo, donde f (X) significa f emenino y p(X, Y ) significa progenitor. El resultado serı́a: IF f(X) = true AND p(Y,X) = true THEN Clase = ⊕. lo que se puede transformar de regreso a una representación relacional como sigue: hija(X, Y ) ← f emenino(X), progenitor(Y, X). El problema con este enfoque esta en como generar un conjunto adecuado de atributos que sean manejables y la incapacidad de inducir definiciones recursivas. 6.2.9 Algunas extensiones recientes El uso de representaciones relacionales ha permeado a prácticamente todas las áreas de aprendizaje computacional. Dentro de los desarrollos más importantes podemos mencionar: • Aprendizaje de árboles de decisión relacionales. Se aprenden árboles binarios, donde cada nodo contiene una conjunción lógica y los nodos dentro de un camino del árbol, pueden compartir variables entre sı́. El 134 probar un nodo significa probar la conjunción en el nodo y las conjunciones en el camino del nodo raı́z hasta nodo que se está probando. Esto mismo se ha extendido a árboles de regresión. • Definición de una medida de distancia relacional que permite calcular la similaridad entre dos objetos. Esta distancia puede tomar en cuenta la similaridad entre objetos relacionados, por ejemplo, entre “hijos” al comparar a dos personas. Esto se puede utilizar para aprendizaje basado en instancias relacional y para realizar clustering. • Aprendizaje de reglas de asociación de primer orden. Esto extiende la expresividad de las reglas de asociación y permite encontrar patrones más complejos. • Aprendizaje por refuerzo relacional con lo que se puede aprender una polı́tica óptima de acciones relacionales en un ambiente relacional. Por ejemplo, aprender qué movidas realizar en ajedrez, cómo jugar Titris, etc. • Aprendizaje de lenguajes lógicos (LLL) o gramáticas aprovechando la expresividad de la lógica de predicados. • Combinar ideas de programación lógica inductiva con probabilidad ILP se puede extender para considerar aspectos probabilı́sticos, en particular, aprendizaje basado en implicación probabilı́sta, aprendizaje basado en interpretaciones probabilı́sticas y finalmente, aprendizaje basado en pruebas lógicas probabilı́sticas. • Inducir ensambles de clasificadores, tales como Bagging y Boosting en ILP. La idea es combinar los resultados de varios clasificadores inducidos con algoritmos de ILP. 6.2.10 Aplicaciones Aunque no se ha tenido el auge de otras áreas de aprendizaje, ILP ha tenido algunos resultados importantes que son difı́ciles de obtener con otras técanicas. Dentro de las aplicaciones principales, podemos mencionar: 135 • Predicción de relaciones en estructura-actividad, incluyendo la mutagénesis de compuestos moleculares que pueden causar cancer. • Predicción de la estructura tridimensional secundaria de proteinas a partir de su estructura primara o secuencia de aminoácidos. • Diseño de elemento finito de malla para analizar tensión en estructuras fı́sicas. • Aprendizaje de reglas para diagnóstico temprano de enfermedades de reumatismo. • Construcción de programas a partir de especificaciones de alto nivel. • Aprendizaje de reglas de control para sistemas dinámicos a partir de trazas. • Clasificación biológica de calidad de agua de rı́os. • Aprendizaje de modelos cualitativos de sistemas dinámicos. 136 Capı́tulo 7 Descubrimiento de Conocimiento Basado en Grafos 7.1 Introducción Representación de Conocimiento: En un sistema de descubrimiento de conocimiento basado en grafos, el algoritmo de minerı́a de datos utiliza grafos como representación de conocimiento. Esto significa que la fase de preparación de datos incluye una transformación de los datos a un formato de grafo. Espacio de Búsqueda: El espacio de búsqueda el algoritmo basado en grafos consiste en todos los sub-grafos que se pueden derivar a partir del grafo de entrada. Esto quiere decir que el espacio de búsqueda es exponencial, de la misma manera que es el tiempo de ejecución de estos algoritmos, al menos que se restrinjan de alguna manera para que corran en tiempo polinomial. Criterio de Evaluación: Una parte muy importante del algoritmo de minerı́a de datos es el criterio de evaluación. Este criterio se utiliza para determinar cuales subgrafos del 137 espacio de búsqueda son relevantes y pueden ser considerados como parte de los resultados. El método basado en grafos Subdue utiliza el principio de longitud de descripción mı́nima (MDL) para evaluar los subgrafos descubiertos. El principio MDL dice que la mejor descripción del conjunto de datos es aquella que minimiza la longitud de la descripción de todo el conjunto de datos. En el método basado en grafos, el principio MDL se utiliza para determinar que tan bien un grafo comprime al grafo de entrada. De esta manera, todos los subgrafos que se generan durante el proceso de búsqueda se evaluan de acuerdo al principio MDL y los mejores subgrafos se eligen como parte del resultado. 7.2 Implementación en el sistema Subdue El método basado en grafos descrito anteriormente fue implementado en el sistema Subdue (Cook and Holder 1994). Subdue es un sistema de aprendizaje relacional utilizado para encontrar subestructuras (subgrafos) que aparecen repetidamente en la representación basada en grafos de bases de datos. Una vez que la base de datos esta representada con grafos, Subdue busca la subestructura que mejor comprime al grafo utilizando el principio MDL. Despues de encontrar esta subestructura, Subdue comprime el grafo y puede iterar repitiendo este proceso. Subdue tiene la capacidad de realizar un macheo inexacto que permite descubrir subestructuras con pequeñas variaciones. Otra caracterı́stica importante de Subdue es que permite utilizar conocimiento previo representado como subestructuras predefinidas. 7.2.1 Representación de Conocimiento El modelo de representación que utiliza Subdue es un grafo etiquetado. Los objetos se representan con vértices y la relaciones con arcos. Las etiquetas se utilizan para describir el significado de los arcos y vértices. Cuando se trabaja con bases de datos relacionales, cada renglón se puede considerar como un evento y los atributos como objetos. Los eventos también se pueden ligar a otros eventos por medio de arcos. Los atributos de los eventos se describen mediante un conjunto de vértices y arcos, donde los arcos identifican 138 los atributos especı́ficos y los vértices especifican el valor de ese atributo para el evento. Una representación basada en grafos es lo suficientemente flexible para permitir tener más de una representación para un dominio dado, permitiendo al investigador experimentar para obtener la mejor representación para su dominio. La definición de los grafos tiene un formato especı́fico que se da como entrada al sistema Subdue. Para esta sección definiremos los siguientes términos. Algunos Términos: • Un subgrafo G′ de G es un grafo conectado cuyos vértices y arcos son subconjuntos de G. • Una subestructura S es un subgrafo que tiene asociada una descripción y un conjunto de instancias en el grafo de entrada. • Una instancia es una ocurrencia de una subestructura S en un grafo G. 7.2.2 Método de Búsqueda Subdue utiliza una búsqueda tipo beam (restringida computacionalmente) para encontrar subestructuras. Una subestructura es un subgrafo contenido en el grafo de entrada. El algoritmo inicia con un solo vértice como subestructura inicial y en cada iteración expande las instancias de aquella subestructura añadiendo un arco en cada posible manera. De esta forma genera nuevas subestructuras que podrı́an considerarse para expansión. El método de búsqueda también puede sesgarse utilizando conocimiento previo (p.e. subestructuras que creemos que pueden existir en los datos, pero que queremos estudiar con mayor detalle) dadas por el usuario (Cook and Holder 1994). En este caso, el usuario provee subestructuras de conocimiento previo como entrada a Subdue. Subdue encuentra instancias de las subestructuras de conocimiento previo en el grafo de entrada y continúa buscando extensiones de aquellas subestructuras. El algoritmo de búsqueda de Subdue se muestra en la tabla 7.1. 139 Tabla 7.1: Algoritmo de Búsqueda de Subdue Subdue(Graph, Limit, Beam, NumBestSubs) P rocessedSubs = 0 P arentList = All substructures of one vertex in Graph while(P rocessedSubs ≤ Limit) ChildList = {} while(P arentList 6= {}) P arent = (RemoveSubstructure(P arentList) Instances = Extend(Parent) en todas las maneras posibles ChildSubs = Group(Instances) Evaluate(ChildSubs) Insert substructures in ChildSubs into ChildList mod Beam P rocessedSubs = P rocessedSubs + 1 Insert P arent into BestList mod NumBestSubs end while P arentList = ChildList end while return BestList end 140 El algoritmo de búsqueda inicia con la creación de una subestructura de cada etiqueta de vértice y sus instancias asociadas, las cuales se insertan en ParentList. Después, cada subestructura de ParentList se extiende en cada posible manera añadiendo un vértice y un arco o solo un arco (en el caso de que el arco ligue dos vértices que ya existan en la subestructura). Las instancias resultantes de la extensión se agrupan en subestructuras. La primera aparición de cada instancia se convierte en la definición de subestructura, y el resto se asocia a esa subestructura como instancias. Después, todas las subestructuras producidas se evalúan de acuerdo al principio MDL y se insertan en ChildList ordenadas por su valor. ChildList mantiene tantas subestructuras como el valor del parámetro Beam. Posteriormente, la subestructura Parent se inserta en BestList (la cual mantiene solo NumBestSubs subestructuras), y este proceso continúa hasta que ParentList se vacı́e. En este momento ParentList y ChildList se intercambian y se repite el proceso. El número de subestructuras Parent consideradas en la búsqueda esta restringido por el parámetro Lı́mite. El valor por default de este lı́mite se deriva de el número de arcos y vértices en el grafo de entrada ( el número de vértices mas el número de arcos dividido por dos). BestList esta restringida por default a tener el mismo tamaño que la longitud del beam Beam, pero las restricciones de longitud se pueden modificar independientemente utilizando los parámetros del sistema. 7.2.3 Criterio de Evaluación En Subdue se implemento un criterio de evaluación para decidir cuales patrones se van a elegir como conocimiento importante o estructuras. El método del modelo de evaluación se llama Codificación Mı́nima (Minimum Encoding), una técnica derivada el Principio de Longitud de Descripción Mı́nima MDLP (Rissanen 1989), el cual dice que la mejor descripción de un conjunto de datos es aquella que minimiza la longitud de la descripción de todo el conjunto de datos. En relación a Subdue, la mejor descripción del conjunto de datos es aquella que minimiza I(S) + I(G|S), donde S es la subestructura utilizada para describir el grafo de entrada G, I(S) es la longitud (en número de bits) requerido para codificar S, e I(G|S) es la longitud del grafo codificado G 141 después de ser comprimido utilizando la subestructura S. Cada vez que Subdue encuentra una subestructura, la evalua utilizando el principio MDL y compara su valor con el de las otras subestructuras. Subdue elige la subestructura que mejor comprime el grafo en términos del principio MDL. Después, reemplazaa las instancias de la subestructura con un solo vértice que la representa através del grafo e inicia una nueva iteración en busca de nuevas subestructuras que incluso pueden contener subestructuras encontradas en iteraciones previas. El número de iteraciones es un parámetro de entrada a Subdue. Existen varias formas de limitar la búsqueda de Subdue. Una es utilizando una técnica de podado (también es un parámetro de entrada a Subdue) que termina la búsqueda cuando la evaluación MDL ya no mejora. Otra forma de limitar la búsqueda es definir un tamaño máximo para las subestructuras que Subdue busca en términos del número de vértices. Es posible combinar estas técnicas para delimitar la búsqueda de Subdue. 7.2.4 Subestructuras Predefinidas Es posible guiar a Subdue para que encuentre subestructuras que creemos que estan en la base de datos. Para esto especificamos a Subdue subestructuras predefinidas en un archivo separado y también en su representación basada en grafos. La ventaja de utilizar subestructuras predefinidas es que guiamos la búsqueda hacia una meta especı́fica y al mismo tiempo se reduce la complejidad de la búsqueda. Por supuesto que esto solo funciona si la subestructura predefinida existe en la base de datos, por lo que esta caracterı́stica la explota mejor el experto en el dominio. 142 7.2.5 Macheo Inexacto de Grafos Subdue tiene la capacidad de encontrar subestructuras con ligeras diferencias en sus instancias. Estas diferencias pueden ser causa de ruido o por la naturaleza de la información. Algunas de estas pequeñas diferencias pueden ser un vértice adicional o uno mejor, una etiqueta diferente en un vértice, un arco que no existe en una instancia, etc. La manera en que Subdue maneja el macheo inexacto es asignando un costo a cada diferencia que encuentra en la nueva instancia y lleva un registro del costo total de las diferencias de la nueva instancia con respecto a la original. Si el costo es menos que un umbral (este umbral se da como parámetro), entonces se considera que la nueva instancia hace un macheo con la original. Se utilizan reglas para asignar un costo a cada tipo de diferencia, estas reglas se ajustan de acuerdo al dominio. El procedimiento de macheo de grafos esta restringido a ser polinomial con respecto al tamaño de los grafos que se comparan. 7.3 Aprendizaje de Conceptos basado en Grafos Los sistemas basados en lógica han dominado el área de aprendizaje de conceptos relacional, en especial los sistemass de programación lógica inductiva Inductive Logic Programming (ILP) (Muggleton and Feng 1992). Sin embargo, la lógica de primer orden también se puede representar como un grafo y de hecho, la lógica de primer orden es un subconjunto de lo que se puede representar utilizando grafos (Sowa 1992). Entonces, los sistemas de aprendizaje que utilizan representaciones gráficas también tienen el potencial de aprender conceptos ricos si pueden manejar el incremento en el tamaño del espacio de hipótesis. 7.3.1 Modelo Como se ha mencionado, el aprendizaje de conceptos es un proceso que consiste en la inducción de una función concepto a partir de ejemplos de entre143 namiento positivos y negativos. Para el aprendizaje de conceptos basado en grafos, se utiliza un conjunto de ejemplos positivos y negativos en su representación con grafos para entrenar y encontrar el concepto que describe el dominio. La meta es que el concepto encontrado debe ser capaz de predecir si un nuevo ejemplo (uno que no fue utilizado durante el entrenamiento) pertenece al concepto o no. Los grafos son una buena representación para datos estructurales y capaz de representar FOPC. El espacio de hipótesis consiste de todos los subgrafos que se pueden derivar a partir de los grafos de ejemplos positivos; este espacio es exponencial con respecto al tamaño de los grafos (número de vértices y arcos). El criterio de evaluación se basa en el número de ejemplos positivos y negativos que describe la hipótesis a partir del conjunto de entrenamiento. Una buena hipótesis es aquella que describe a los ejemplos positivos pero no a los ejemplos negativos. El método de aprendizaje de conceptos SubdueCL sigue el paradigma set-covering. Esto implica que el concepto resultante puede consistir de un conjunto de subconceptos. El proceso de aprendizaje inicia con el conjunto de ejemplos positivos y negativos. Cuando se encuentra un sub-concepto, todos los ejemplos positivos cubiertos por él se quitan del conjunto de entrenamiento y se inicia una búsqueda de un nuevo sub-concepto. Este proceso se repite hasta que todos los ejemplos positivos se han descrito a través de cualquiera de los sub-conceptos encontrados. La hipótesis resultante es un conjunto de subconceptos en DNF (Disjunctive Normal Form). El concepto resultante se utiliza para clasificar nuevos ejemplos (no incluidos en el conjunto de entrenamiento). El ejemplo se prueba por el primer sub-concepto en la DNF. Si el ejemplo descrito por el sub-concepto, entonces el ejemplo se clasifica como positivo. Si el ejemplo no fue descrito por el primer sub-concepto, se prueba con el segundo sub-concepto. Si el segundo sub-concepto describe el ejemplo, entonces el ejemplo es positivo, y si no, se utiliza el siguiente sub-concepto para probar el nuevo ejemplo. Este proceso continúa hasta que uno de los sub-conceptos en la DNF clasifica al ejemplo 144 como positivo o todos los sub-conceptos se probaron sin ningún resultado positivo, lo cual significa que el ejemplo se clasifica como negativo. 7.3.2 Implementación Para extender Subdue para poder realizar la tarea de aprendizaje de conceptos se incluyó el manejo de ejemplos negativos al proceso. Las subestructuras que describen ejemplos positivos, pero no ejemplos negativos, son las que tienen más posibilidades de representar el concepto deseado. Por lo tanto, la versión de aprendizaje de conceptos de Subdue, que conocemos como SubdueCL, acepta ejemplos positivos y negativos en formato de grafo. Como Subdue CL es una extensión de Subdue, utiliza el núcleo de funciones de Subdue para realizar operaciones con grafos, pero el proceso de aprendizaje cambia. SubdueCL trabaja como un algoritmo de aprendizaje supervizado, que diferencı́a ejemplos positivos de los negativos utilizando una método set-covering en lugar de compresión de grafos. La hipótesis encontrada por SubdueCL consiste de un conjunto de disyunciones de conjunciones (subestructuras, por ejemplo, el concepto puede contener varias reglas). SubdueCL forma una de esas conjunciones (reglas) en cada iteración. Los grafos de ejemplos positivos descritos por la subestructura encontrada en una iteración anteriorse eliminan del grafo de entrada para las iteraciones siguientes. 7.3.2.1 Evaluación de Subestructuras La manera en que SubdueCL decide si las subestructuras (o reglas) formarán parte del concepto o no es diferente a Subdue. SubdueCL utiliza una fórmula de evaluación para asignar un valor a cada una de las subestructuras generadas. Esta fórmula asigna un valor a una subestructura de acuerdo a que tan bien describe a los ejemplos positivos (o subconjunto de los ejemplos positivos) sin describir ejemplos negativos. De esta manera, los ejemplos positivos cubiertos por la subestructura incrementan el valor de la misma mientras que los ejemplos negativos decrementan su valor. En esta fórmula los ejemplos positivos que no son cubiertos y los negativos cubiertos por la 145 subestructura se consideran errores poruq la subestructua ideal seria una que cubre todos los ejemplos positivos sin cubrir ningún ejemplo negativo. El valor de la subestructura se calcula con la siguiente ecuación: value = 1 − Error donde el error se calcula con respecto a los ejemplos positivos y negativos cubiertos por la subestructura utilizando la siguiente fórmula: Error = #P osEgsNotCovered + #NegEgsCovered #P osEgs + #NegEgs Utilizando esta ecuación, SubdueCL elige reglas que maximizan el valor de las subestructuras y de esta manera minimiza el número de errores hechos por la subestructura utilizada para formar el concepto. Los ejemplos positivos no cubiertos por la subestructura y los ejemplos negativos cubiertos por ella se consideran errores. #P osEgsNotCovered es el número de ejemplos positivos no cubiertos y #NegEgsCovered es el número de ejemplos cubiertos cubiertos. #P osEgs es el número de ejemplos positivos que quedan en el conjunto de entrenamiento (recordando que los ejemplos positivos que ya fueron cubiertos en alguna de las iteraciones anteriores ya fueron removidos del conjunto de entrenamiento), y #NegEgs es el número total de ejemplos negativos. Este número no cambia porque los ejemplos negativos no se remueven del conjunto de entrenamiento. El problema de la ecuación 2 es que cuando dos subestructuras tienen el mismo error, nos gustarı́a elegir aquella que cubra más ejemplos positivos. Por ejemplo, suponiendo que tenemos 10 ejemplos positivos y 10 negativos. La subestructura S1 cubre 5 ejemplos positivos y 0 negativos, y la subestructura S2 cubre 10 ejemplos positivos y 5 negativos. En este caso ambas subestructuras tienen un error de 41 de acuerdo a la ecuación 2 pero preferimos elegir S1 porque no cubre ningún ejemplo negativo. Para hacer esto, se asigna una penalización (sea k) a los errores negativos. Después de alguna manipulación matemática expresamos el error con la fórmula 3, donde k es un peso de penalizació y k ≥ 2. El valor por default de k es de 3. Ahora el error de S1 y S2 de acuerdo a la fórmula 3 (y con el valor por default de k = 3) es de 45 y 74 respectivamente. Con esta fórmula, SubdueCL preferira S1 sobre S2. Los resultados de un análisis empı́rico mostraron que esta ecuación para evaluar subestructuras funciona muy bien. 146 Tabla 7.2: Algoritmo Principal de Subdue Main(Gp , Gn , Limit, Beam) H={} repeat repeat BestSub = SubdueCL(Gp , Gn , Limit, Beam) if BestSub = {} then Beam = Beam * 1.1 until(BestSub 6= {}) Gp = Gp - {p ∈ Gp |BestSubcoversp } H = H + BestSub until Gp = {} return end 7.3.3 Algoritlmo SubdueCL El algoritmo SubdueCL se muestra en las tablas 7.2 y 7.3. La función principal toma como parámetros los ejemplos positivos Gp , los ejemplos negativos Gn , el tamaño del beam (porque el algoritmo de SubdueCL utiliza una búsqueda beam), y un lı́mite limit sobre el número de subestructuras a incluir en su búsqueda. La función principal hace llamadas a la función SubdueCL para formar la hipótesis H que describa los ejemplos positivos. Cada vez que se hace una llamada a la función SubdueCL se añade una subestructura a H. En el caso en que SubdueCL regresa NULL, el Beam se incrementa en 10%, de tal modo que SubdueCL pueda explorar un espacio de búsqueda más amplio. Elegimos hacer incrementos del beam de 10% porque ese valor fue suficiente para encontrar una subestructura en la siguiente iteración para la mayorı́a de los experimentos. Además, después de que SubdueCL encuentra una subestructura, los ejemplos positivos cubiertos por ella se eliminan del grafo positivo. En la tabla 7.3 se muestra la función SubdueCL, la cual empieza a con147 Tabla 7.3: Algoritmo SubdueCL. SubdueCL(Gp , Gn , Limit, Beam) P arentList = (All substructures of one vertex in Gp ) mod Beam Repeat BestList = {} Exhausted = TRUE i = Limit while ((i ¿ 0 ) and (P arentList 6= {})) ChildList = {} foreach substructure in P arentList C = Expand(Substructure) Evaluate(C, Gp , Gn ) if CoversOnePos(C, Gp ) then BestList = BestList ∪ C ChildList = (ChildList ∪ C) mod Beam i=i-1 endfor P arentList = ChildList mod Beam endwhile if BestList = {} and P arentList 6= {} then Exausted = FALSE Limit = Limit * 1.2 until(Exhausted = TRUE) return f irst(BestList) end 148 struir una ParentList creando una subestructura para cada vértice en el grafo con una etiqueta diferente, pero manteniendo solo tantas subestructuras como lo permita el tamaño del Beam. El operador “mod Beam” significa que las listas contienen tantas subestructuras como el tamaño del Beam. Posteriormente se expande cada una de las subestructuras en la lista ParentList con un arco o un vértice y un arco en todos los modos posibles y se evalúa de acuerdo a la ecuación presentada anteriormente. Aquellas subestructuras que cubran al menos un ejemplo positivo y caen dentro de los lı́mites del tamaño del Beam se quedan en la lista BestList. La lista ChildList mantiene todas las subestructuras que fueron obtenidas de la expansión de las subestructuras de la lista ParentList y también se esta restringida por el tamaño del Beam. El parámetro Limit se utiliza para expandir tantas subestructuras como su valor, pero si la lista BestList esta vacı́a después de expandir tantas subestructuras como el valor de Limit de la lista ParentList, entonces Limit se incrementa en 20% hasta que se encuentre una. Elegimos un valor de incremento del lı́mite de 20% porque usualmente era suficiente para encontrar una subestructura positiva en el siguiente intento para nuestros experimentos. Finalmente la función SubdueCL regresa lo mejor de la lista BestList conteniendo todas las subestructuras que cubren al menos un ejemplo positivo. Es importante mencionar que todas las listas estan ordenadas de acuerdo al valor de evaluación de las subestructuras. 149 Capı́tulo 8 Aprendizaje Bayesiano 8.1 Probabilidad Existen diferentes interpretaciones de probabilidad, las más comunes son: • Clásica: P (A) = N(A)/N • Frecuencia relativa: P (A) = limN →∞ N(A)/N • Subjetiva: P(A) = “creencia en A” (factor de apuesta) Definición: Dado un experimento E y el espacio de muestreo S respectivo, a cada evento A le asociamos un número real P (A), el cual es la probabilidad de A y satisface las siguientes propiedades: 1. 0 ≤ P (A) ≤ 1 2. P (S) = 1 3. P (A ∪ B) = P (A) + P (B), si A y B mutuamente exclusivos Teorema 1: P (∅) = 0 150 Teorema 2: P (A) = 1 − P (A) Teorema 3: P (A ∪ B) = P (A) + P (B) − P (A ∩ B) Probabilidad Condicional Si A y B son dos eventos en S, la probabilidad de que ocurra A dado que ocurrió el evento B es la probabilidad condicional de A dado B, y se denota P (A | B). La probabilidad condicional por definición es: P (A | B) = P (A∩B)/P (B), dado P (B) > 0 Ejemplo: Para un dado, si sé que cayó impar, cuál es la probabilidad de 3? Similarmente: P (B | A) = P (A ∩ B)/P (A) De donde: P (B | A) = P (B)P (A | B)/P (A) Esta expresión se conoce como el Teorema de Bayes, que en su forma más general es: P (Bj | Ai ) = P (Bj )P (Ai | Bj )/ P j P (Ai | Bj )P (Bj ) El denominador se le conoce como el teorema de la probabilidad total. Teorema 4: Si B1 , B2 , . . . , Bk representan una partición (exclusivos, exhaustivos y mayores a cero) de S, y A es un evento respecto a S, entonces la probabilidad de A la podemos escribir como: P (A) = P j P (A | Bj )P (Bj ) Eventos independientes Dos eventos, A y B, son independientes si la ocurrencia de uno no tiene que ver con la ocurrencia de otro. Por definición, A es independiente de B si y sólo si: P (A∩B) = P (A)P (B) Esto implica que: P (A | B) = P (A) y que P (B | A) = P (B) Independientes es diferente a mutuamente exclusivos. 151 Independencia condicional Un evento A es condicionalmente independiente de otro B dado un tercer evento C, si el conocer C hace que A y B sean independientes. Es decir, si conozco C, B no tiene influencia en A. Esto es: P (A | B, C) = P (A | C) Ejemplo: • A - regar el jardı́n • B - predicción del clima • C - lluvia De la definicı́on de probabilidad condicional, podemos obtener una expresı́on para evaluar la probabilidad conjunta de N eventos: P (A1 , A2 , ..., An ) = P (A1 | A2 , ..., An )P (A2 | A3 , ..., An ) · · · P (An ) Variables Aleatorias Si a cada posible evento A le asignamos un valor numérico real, X(A), obtenemos una variable aleatoria. A cada valor de la variable le corresponde una probabilidad, P (X = k). Las variables aleatorias pueden ser de dos tipos: discretas y continuas. Nosotros nos enfocaremos a variables discretas. Ejemplos de variables aleatorias discretas: lanzar una moneda, lanzar un dado, número de fallas antes de darle al blanco. Función acumulativa de probabilidad Para una variable aleatoria X, se define la función acumulativa de probabilidad como la probabilidad de que la variable aleatoria sea menor a un valor x: F (x) = P {X ≤ x} Es decir, corresponde a la sumatoria de la función de probabilidad de −∞ a x: 152 F (x) = Px −∞ p(X) Propiedades: 1. 0 ≤ F (x) ≤ 1 2. F (x1) ≤ F (x2) , si x1 ≤ x2 (función siempre creciente) 3. F (−∞) = 0 4. F (+∞) = 1 Estadı́sticas de una variable aleatoria Valores caracterı́sticos de una variable aleatoria: • Modo: valor de probabilidad máxima • Media: valor medio (divide el área en 2 partes iguales) Momentos • promedio (valor esperado o primer momento): E{X} = M1 (X) = P xi P (xi ) • valor promedio-cuadrado (segundo momento): M2 (X) = • momento N: Mn (X) = P xni P (xi ) Momentos “centrales” • varianza: σ 2 (X) = P (xi − E{X})2 P (xi ) √ • desviación estandar: σ(x) = σ 2 (x) Variables Aleatorias de 2-Dimensiones 153 P x2i P (xi ) Definición: Dado un experimento E con espacio de muestreo S. Si X y Y son dos funciones que le asignan números reales a cada resultado posible, entonces (X, Y ) es una variable aleatoria bidimensional . Dadas dos variables aleatorias (discretas), X, Y , deben satisfacer lo siguiente: 1. P (xi , yj ) ≥ 0 2. P P i j P (xi , yj ) = 1 Ejemplos: número de artı́culos terminados en dos lı́neas de producción, número de pacientes con cancer y número de fumadores, etc. Probabilidad marginal Es la probabilidad particular de una de las variables dada un variable aleatoria bidimensional, y se define como: P (X) = P y P (xi , yj ) Probabilidad condicional Dada la probabilidad conjunta y marginal, la probabilidad condicional se define como: P (X | Y ) = P (X, Y )/P (Y ) Variables independientes Dos variables aleatorias son independientes si su probabilidad conjunta es igual al producto de las marginales, esto es: P (xi , yj ) = P (xi )P (yj ), ∀(i.j) Correlación El coeficiente de correlación (ρ) denota el grado de linearidad entre dos variables aleatorias y se define como: ρxy = E{[X − E{X}][Y − E{Y }]}/σx σy 154 La correlación está dentro del intervalo: ρ ∈ [−1, 1], donde un valor de 0 indica no-correlacionadas, y un valor de -1 ó 1 indica una relación lineal. • Independencia → no-correlación (pero no viceversa). Distribución Binomial Una distribución binomial de la probabilidad de observar r eventos (e.g., soles) de n muestras independientes con dos posibles resultados (e.g., tirar monedas). P (r) = n! pr (1 − p)(n−r) r!(n − r)! El valor esperado es: E{x} = np La varianza es: V ar(x) = np(1 − p) La desviación estandar es: σx = q np(1 − p) Si n es grande, se aproxima a una distribución Normal Distribución Normal o Gaussiana p(x) = √ 1 x−µ 2 1 e− 2 ( σ ) 2 2πσ El valor esperado es: E{x} = µ La varianza es: V ar(x) = σ 2 La desviación estandar es: σx = σ El Teorema Central del Lı́mite dice que la suma de un número grande de variables aleatorias independientes identicamente distribuidas siguen una distribución Normal. 155 8.2 Aprendizaje Bayesiano Aprendizaje Bayesiano es importante por: • ser práctico • provee un enfoque de comprensión (y diseño) de otros algoritmos Algunas caracterı́sticas: • Cada nuevo ejemplo puede aumentar o disminuir la estimación de una hipótesis (flexibilidad - incrementalidad) • Conocimiento a priori se puede combinar con datos para determinar la probabilidad de las hipótesis • Da resultados con probabilidades asociadas • Puede clasificar combinando las predicciones de varias hipótesis • Sirve de estandar de comparación de otros algoritmos Problemas: • Se requieren conocer muchas probabilidades • Es computacionalmente caro (depende linealmente del número de hipótesis) Lo que normalmente se quiere saber en aprendizaje es cuál es la mejor hipótesis (más probable) dados los datos. Si denotamos P (D) como la probabilidad a priori de los datos (i.e., cuales datos son más probables que otros), P (D | h) la probabilidad de los datos dada una hipótesis, lo que queremos estimar es: P (h | D), la probabilidad posterior de h dados los datos. Esto lo podemos estimar con Bayes. Teorema de Bayes: P (h | D) = P (D | h)P (h) P (D) 156 Para estimar la hipótesis más probable o MAP (maximum a posteriori hypothesis): hM AP = argmaxh∈H (P (h | D)) = argmaxh∈H P (D|h)P (h) P (D) = argmaxh∈H (P (D | h)P (h)) Ya que P (D) es una constante independiente de h. Si asumimos que todas las hipótesis son igualmente probables, entonces nos queda la hipótesis de máxima verosimilitud o ML (maximum likelihood ): hM L = argmaxh∈H (P (D | h)) Ejemplo: Se tienen dos hipótesis, el paciente tiene un tipo de cancer o no tiene cancer. Sabemos que solo el 0.008% de la población tiene ese tipo de cancer. La prueba sobre cancer no es infalible, y nos da resultados positivos correctos en el 98% de los casos y nos da resultados negativos correctos en el 97% de los casos. Esto es: P (cancer) = 0.008 y P (¬cancer) = 0.992 P (⊕|cancer) = 0.98 y P (⊖|cancer) = 0.02 P (⊕|¬cancer) = 0.03 y P (⊖|¬cancer) = 0.97 Si a un paciente le dieron un resultado positivo en la pruebra: P (cancer|⊕) = P (cancer)P (⊕|cancer) = 0.008 ∗ 0.98 = 0.0078 P (¬cancer|⊕) = P (¬cancer)P (⊕|¬cancer) = 0.992 ∗ 0.03 = 0.0298 Que al normalizar, nos da: P (cancer|⊕) = 0.21 P (¬cancer|⊕) = 0.69 Por lo que sigue siendo más probable que no tenga cancer. 157 Una forma de implantar un algoritmo Bayesiano es calculando para to(h) das las posibles hipótesis su P (h | D) = P (D|h)P y quedandose con la de P (D) mayor probabilidad. Obviamente esto es impráctico cuando se tienen muchas posibles hipótesis. También para hacerlo, necesitamos especificar los valores para P (h) y para P (D | h). Si asumimos que no hay ruido y que todas las hipótesis son igualmente 1 probables (i.e., P (h) = |H| ∀h ∈ H), P (D | h) = 1 sii D es consistente con h. Esto es: 1 P (h | D) = | V SH,D | donde, V SH,D es el subconjunto de hipótesis de H que es consistente con D (su espacio de versiones). Por lo mismo, toda hipótesis consistente es una hipótesis MAP. Lo que quiere decir, es que cualquier sistema de aprendizaje que nos de hipótesis consistentes, asumiendo que no hay ruido y que todas las hipótesis son igualmente probables, nos está dando hipótesis MAP. Si tenemos un sistema de aprendizaje de general a especı́fico (o al revés) que busca especializaciones más generales (o generalizaciones más especı́ficas), lo podemos caracterizar asumiendo que las hipótesis más generales (o especı́ficas) son más probables que las otras. En general, podemos caracterizar varios algoritmos de aprendizaje con un enfoque Bayesiano, al caracterizar sus distribuciones de probabilidad P (h) y P (D | h). Variables Continuas y Ruido Los métodos más usados para buscar funciones con variables continuas a partir de datos con cierto ruido, son regresiones lı́neales, ajustes de polinomios y redes nueronales. La idea es aprender funciones h : X → R lo más cercanas a f , en donde los datos están descritos por: di = f (xi ) + ei , donde f (xi ) es la función sin ruido y ei es una variable aleatoria representando el error. 158 Asumimos que la distribución de probabilidad de ei está dada por una distribución Gaussiana (normal) con media cero. De nuevo lo que queremos es encontrar la hipótesis más probable: hM L = argmaxh∈H (p(D | h)) Asumiento que los datos son independientes entre sı́ dado h, la probabilidad se puede expresar como el producto de varias p(di | h) para cada dato: ! hM L = argmaxh∈H m Y i=1 p(di | h) Como el ruido sigue una distribución Gaussiana con media cero y varianza σ 2 , cada di debe de seguir la misma distribución pero ahora centrada alrededor de f (xi ). hM L = argmaxh∈H hM L = argmaxh∈H m Y 1 2 1 √ e− 2σ2 (di −µ) 2 2πσ i=1 m Y ! 1 2 1 √ e− 2σ2 (di −h(xi )) 2πσ 2 i=1 ! Podemos maximizar tomando su logartimo (dado que es una función monotónica creciente): hM L = argmaxh∈H m X 1 1 ln( √ ) − 2 (di − h(xi ))2 2σ 2πσ 2 i=1 ! Eliminando el primer término (que no depende de h): hM L = argmaxh∈H m X 1 − 2 (di − h(xi ))2 2σ i=1 ! Que es igual a minimizar lo mismo con el signo contrario. Al cambiar signo y eliminar constantes que no dependen de h nos queda: 159 hM L = argminh∈H m X i=1 (di − h(xi )) 2 ! Lo que nos dice que la hipótesis de máxima verosimilitud es la que minimiza la suma de los errores al cuadrado entre los datos observados (di ) y los datos predichos (h(xi )), siempre y cuando el error siga una distribución Normal con media cero. Todo esto asume que el error está dado únicamente en el valor meta y no en los atributos que describen la meta. Principio de Longitud de Descripción Mı́nima Como el proceso inductivo no es seguro se necesita alguna medida de calidad. Normalmente se hace en base a evaluaciones con los ejemplos de entrenamiento y prueba. Una alternativa es encontrar la hipótesis más probable dados los datos. El MDL está motivado al interpretar la definición de hM AP en base a conceptos de teorı́a de información. hM AP = argmaxh∈H (P (D | h)P (h)) = argmaxh∈H (log2 (P (D | h)) + log2 (P (h))) = argminh∈H (−log2 (P (D | h)) − log2 (P (h))) Lo cual puede pensarse como el problema de diseñar el mensaje de transmisión de información más compacto para transmitir la hipótesis y los datos dada la hipótesis. MDL recomienda seleccionar la hipótesis que minimiza la suma de estas dos descripciones: hM DL = argminh∈H (L(h) + L(D | h)) 160 Si lo queremos aplicar a un árbol de decisión, tenemos que buscar una codificación para los árboles de decisión y una para los ejemplos mal clasificados junto con su clasificación. Esto permite establecer un balance entre complejidad de la hipótesis (L(h)) y número de errores o calidad de la hipótesis (L(D | h)). La idea es detectar regularidades en los datos para que el código de transmisión de la hipótesis con los datos sea menor que el de los datos solos. Clasificador Bayesiano Óptimo En lugar de preguntarnos cuál es la hipótesis más probable, podemos preguntar, cuál es la clasificación más probable para un ejemplo. La clasificación más probable se puede obtener combinando las clasificaciones de todas las hipótesis aplicables pesadas por su probabilidad. Si la clasificación puede tomar un valor vj : X P (vj | D) = hi ∈H P (vj | hi )P (hi | D) Y la clasificación óptima será: argmaxvj ∈V X hi ∈H P (vj | hi )P (hi | D) Ejemplo: Supongamos que tenemos dos clases 3 hipótesis (h1 , h2 , h3 ) y que sus probabilidades dados los datos son (0.4, 0.3, 0.3) respectivamente. Si se tiene un nuevo ejemplo x que se clasifica como positivo por h1 pero negativo por h2 y h3 , su clasificación por la hipótesis MAP serı́a positivo, pero considerando todas las hipótesis serı́a negativo. P (h1 |D) = 0.4, P (⊖|h1 ) = 0, P (⊕|h1) = 1 P (h2 |D) = 0.3, P (⊖|h2 ) = 1, P (⊕|h2) = 0 P (h3 |D) = 0.3, P (⊖|h3 ) = 1, P (⊕|h3) = 0 161 X P (⊕ | hi )P (hi | D) = 0.4 X P (⊖ | hi )P (hi | D) = 0.6 hi ∈H hi ∈H argmaxvj ∈{⊕,⊖} X hi ∈H P (vj | hi )P (hi | D) = ⊖ Aplicar el clasificador Bayesiano óptimo puede ser muy costoso. Una posibilidad es seleccionar una hipótesis (h) aleatoriamente de acuerdo con la distribución de probabilidad de las probabilidades posteriores de H, y usar h para predecir (Gibbs). Se puede mostrar que el error esperado es a lo más el doble del error esperado del clasificador Bayesiano óptimo. 8.3 Clasificador Bayesiano naive Se utiliza cuando queremos clasificar una instancia descrita por un conjunto de atributos (ai ’s) en un conjunto finito de clases (V ). Clasificar un nuevo ejemplo de acuerdo con el valor más probable dados los valores de sus atributos. vM AP = argmaxvj ∈V (P (vj | a1 , . . . , an )) Usando Bayes: vM AP = argmaxvj ∈V P (a1 ,...,an |vj )P (vj ) P (a1 ,...,an ) = argmaxvj ∈V (P (a1 , . . . , an | vj )P (vj )) 162 P (vj ) se puede estimar con la frecuencia de las clases, pero para P (a1 , . . . , an | vj ) tenemos muy pocos elementos. El clasificador Bayesiana naive, también llamado a veces idiot Bayes, asume que los valores de los atributos son condicionalmente independientes dado el valor de la clase. Osea: P (a1 , . . . , an | vj ) = Por lo que: Q i P (ai | vj ) vN B = argmaxvj ∈V P (vj ) Y i P (ai | vj ) ! Los valores P (ai | vj ) se estiman con la frecuencia de los datos observados. Nota: no se hace búsqueda de hipótesis, simplemente se cuentan frecuencias de ocurrencias. Ejemplo: Si tomamos el ejemplo de la tabla 2.2 (de jugar golf), supongamos que tenemos el siguiente ejemplo que lo queremos clasificar con un naive Bayes: Ambiente=soleado, Temperatura=baja, Humedad=alta, Viento=si vN B = argmaxvj ∈{P,N } P (vj ) (P (Ambiente = soleado | vj ) P (T emperature = baja | vj )P (Humedad = alta | vj ) P (V iento = si | vj )) P (Clase = P ) = 9/14 P (Clase = N) = 6/14 P (V iento = si | P ) = 3/9 = 0.33 P (V iento = si | N) = 3/5 = 0.60 P (P )P (soleado | P )P (baja | P )P (alta | P )P (si | P ) = 0.0053 P (N)P (soleado | N)P (baja | N)P (alta | N)P (si | N) = 0.0206 Que normalizando nos da: 0.0206 0.0206+0.0053 = 0.795. 163 Estimación de Probabilidades Hasta ahora hemos asumido que la probabilidad de un evento se puede estimar por su frecuencia ( nnc ). A pesar de ser una buena aproximación, da estimaciones malas cuando tenemos pocos ejemplos. Una alternativa es utilizar la estimación m (m-estimate): nc + m ∗ p n+m donde p es una estimación a priori de lo que queremos estimar y m es una constante llamada “tamaño de muestra equivalente” (equivalent sample size). Una valor tı́pico para p es asumir que se tiene una distribución uniforme, por lo que: p = k1 cuando existen k posibles valores. m también se usa como estimador de ruido. Ejemplo Podemos usar un clasificador Bayesiano naive para aprender a clasificar textos de acuerdo a las preferencias de un usuario. Suponemos que los ejemplos son documentos en texto asociados con una clase (e.g., me interesa y no me interesa, o polı́tica, deportes, espectáculos, sociales, etc.). Suponiendo que las palabras son idependientes entre sı́ y de su posición en el texto (lo cual no es cierto, pero de todos modos se tienen buenos resultados): Vocabulario = todas las palabras distintivas (eliminando palabras muy comunes y poco distintivas como artı́culos, puntuaciones, etc.) Para cada clase: doc(clase) = subconjunto de textos de esa clase P (clase) = |doc(clase)| Ejemplos Texto = concatenación de todos los textos en doc(clase) n = número de palabras distintas en Texto Para cada palabra (w) en Vocabulario: 164 nk = número de veces que aparece la palabra w en Texto k +1 P (w|clase) = n+|V nocabulario| c +mp (se calcula la probabilidad considerando el estimador m, nn+m con probabilidad uniforme en las clases (Laplace) y m = |V ocabulario| Para clasificar un nuevo documento (considerando solo las palabras en el nuevo documento que teniamos en Vocabulario): vN B = argmaxvj ∈V 8.4 P (vj ) Y i P (ai | vj ) ! Aprendizaje en Redes Bayesianas Introducción Las redes bayesianas o probabilı́sticas son una representación gráfica de dependencias para razonamiento probabilı́stico en sistemas expertos, en la cual los nodos y arcos representan: • Nodo: Variable proposicional. • Arcos: Dependencia probabilı́stica. Definición: Una red probabilı́stica (RP) es un gráfo acı́clico dirigido (DAG) en la cual cada nodo representa una variable y cada arco una dependencia probabilı́stica, en la cual se especifica la probabilidad condicional de cada variable dados sus padres. La variable a la que apunta el arco es dependiente (causa–efecto) de la que está en el origen de éste. Podemos interpretar a una RP de dos formas: 1. Distribución de probabilidad: Representa la distribución de la probabilidad conjunta de las variables representadas en la red. Por ejemplo: 165 P (A, B, C, D, E, F, G) = P (G|D)P (F |C, D)P (E|B)P (D|A, B)P (C|A)P (B)P (A) 2. Base de reglas: Cada arco representa un conjunto de reglas que asocian las variables involucradas, Por ejemplo: Si C, D entonces F Dichas reglas están cuantificadas por las probabilidades respectivas. La topologı́a o estructura de la red nos da información sobre las dependencias probabilı́sticas entre las variables. La red también representa las independencias condicionales de una variable (o conjunto de variables) dada(s) otra(s) variable(s). Ej.: {E} es cond. indep. de {A,C,D,F,G} dado {B} Esto es: P (E|A, C, D, F, G, B) = P (E|B) Esto se representa gráficamente por el nodo B separando al nodo E del resto de las variables. En general, el conjunto de variables A es independiente del conjunto B dado C si al remover C hace que A y B se desconecten . Es decir, NO existe una trayectoria entre A y B en que las siguientes condiciones sean verdaderas. 1. Todos los nodos con flechas convergentes están o tiene descendientes en C. 2. Todos los demás nodos están fuera de C. Esto se conoce como Separación–D. En una RP todas la relaciones de independencia condicional representadas en el grafo corresponden a relaciones de independencia en la distribución de probabilidad. Dichas independencias simplifican la representación del conocimiento (menos parámetros) y el razonamiento (propagación de las probabilidades). 166 Propagación de Probabilidades El razonamiento probabilı́stico o propagación de probabilidades consiste en propagar la evidencia a través de la red para conocer la probabilidad a posteriori de las variables. La propagación consiste en darle valores a ciertas variables (evidencia), y obtener la probabilidad posterior de las demás variables dadas las variables conocidas (instanciadas) Los algoritmos de propagación dependen de la estructura de la red: • Árboles • Poliárboles • Redes multiconectadas No vamos a ver los procesos de propagación de probabilidad en redes bayesianas. Para árboles y poli–árboles la derivación resulta en una forma recursiva que se puede implantar mediante un esquema de paso de mensajes (se propaga evidencia). Para redes multi–conectadas se han propuesto diferentes esquemas basados en condicionamiento, simulación y agrupamiento. 8.4.1 Redes Bayesianas en Minerı́a de Datos Las redes bayesianas son una alternativa para minerı́a de datos, la cual tiene varias ventajas: • Permiten aprender sobre relaciones de dependencia y causalidad. • Permiten combinar conocimiento con datos. • Evitan el sobre-ajuste de los datos. • Pueden manejar bases de datos incompletos. El obtener una red bayesiana a partir de datos es un proceso de aprendizaje,el cual se divide, naturalmente, en dos aspectos: 167 1. Aprendizaje paramétrico: dada una estructura, obtener las probabilidades a priori y condicionales requeridas. 2. Aprendizaje estructural: obtener la estructura de la red Bayesiana, es decir, las relaciones de dependencia e independencia entre las variables involucradas. Las técnicas de aprendizaje estructural dependen del tipo de estructura de red: árboles, poliárboles y redes multicomectadas. Otra alternativa es combinar conocimiento subjetivo del experto con aprendizaje. Para ello se parte de la estructura dada por el experto, la cual se valida y mejora utilizando datos estadı́sticos. Aprendizaje Paramétrico El aprendizaje paramétrico consiste en encontrar los parámetros asociados a una estructra dada de una red bayesiana. Dichos parámetros consisten en las probabilidades a priori de los nodos raı́z y las probabilidades condicionales de las demás variables, dados sus padres. Si se conocen todas las variables, es fácil obtener las probabilidades requeridas. Las probabilidades previas corresponden a las marginales de los nodos raı́z, y las condicionales se obtienen de las conjuntas de cada nodo con su(s) padre(s). Para que se actualizen las probabilidades con cada caso observado, éstas se pueden representar como razones enteras, y actualizarse con cada observación. En el caso de un árbol, las fórmulas para modificar las probabilidades correspondientes son: Probabilidades previas P (Ai ) = (ai + 1)/(s + 1) i=k P (Ai ) = ai /(s + 1) i 6= k Probabilidades condicionales P (Bj | Ai ) = (bj + 1)/(ai + 1) 168 i=k yj=l P (Bj | Ai ) = bj /(ai + 1) i = k y j 6= l P (Bj | Ai ) = bj /ai i 6= k Donde s corresponde al número de casos totales, i, j los ı́ndices de las variables, k, l los ı́ndices de las variables observadas. Aprendizaje Estructural Naı̈ve Bayes Como vimos antes, el clasificar Bayesiano Naive (CBN) asume independencia entre los atributos dada la clase y su estructura ya esta dada, por lo que solo se tienen que aprender las probabilidades de los valores de los atributos dada la clase. Una forma de mejorar la estructura de un CBN es añadiendo entre los nodos o atributos que tengan cierta dependencia. Existen dos estructuras básicas: • TAN: clasificador bayesiano simple aumentado con un árbol. • BAN: clasificador bayesiano simple aumentado con una red. Otra forma es realizando operaciones locales hasta que no mejore la predicción: 1. eliminar un atributo, 2. unir dos atributos en una nueva variable combinada, 3. introducir un nuevo atributo que haga que dos atributos dependientes sean independientes (nodo oculto). Se pueden ir probando cada una de las opciones anteriores midiendo la dependencia de los atributos dada la clase: I(Xi , Xj | C) = X Xi ,Xj P (Xi , Xj | C)log(P (Xi , Xj | C)/P (Xi | C)P (Xj | C)) 169 En base a lo anterior puede integrarse el siguiente algoritmo. Algoritmo de Mejora Estructural: 1. Obtener la información mutua condicional (IMC) entre cada par de atributos. 2. Seleccionar el par de atributos de IMC mayor. 3. Probar las 3 operaciones básicas (i) eliminación, (ii) unión, (iii) inserción. 4. Evaluar las 3 estructuras alternativas y la original, y quedarse con la “mejor” opción. 5. Repetir 2–4 hasta que ya no mejore el clasificador. Para evaluar las estructuras resultantes se pueden usar datos de prueba o una medida basada en MDL. Árboles El método para aprendizaje estructural de árboles se basa en el algoritmo desarrollado por Chow y Liu (68) para aproximar una distribución de probabilidad por un producto de probabilidades de segundo orden, lo que corresponde a un árbol. La probabilidad conjunta de n variables se puede representar (aproximar) como: P (X1 , X2 , . . . , Xn ) = n Y i=1 P (Xi )P (Xi | Xj(i) )) donde Xj(i) es la causa o padre de Xi . Se plantea el problema como uno de optimización y lo que se desea es obtener la estructura en forma de árbol que más se aproxime a la distribución “real”. Para ello se utiliza una medida de la diferencia de información entre la distribución real (P ) y la aproximada (P ∗ ): I(P, P ∗) = X P (X)log(P (X)/P ∗(X)) x 170 Entonces el objetivo es minimizar I. Para ello se puede definir dicha diferencia en función de la información mutua entre pares de variables, que se define como: I(Xi , Xj ) = X P (Xi , Xj )log(P (Xi , Xj )/P (Xi )P (Xj )) x Se puede demostrar (Chow 68) que la diferencia de información es una función del negativo de la suma de las informaciones mutuas (pesos) de todos los pares de variables que consituyen el árbol. Por lo que encontrar el árbol más próximo equivale a encontrar el árbol con mayor peso. Basado en lo anterior, el algoritmo para determinar árbol Bayesiano óptimo a partir de datos es el siguiente: 1. Calcular la información mutua entre todos los pares de variables (n(n− 1)/2). 2. Ordenar las informaciones mutuas de mayor a menor. 3. Seleccionar la rama de mayor valor como árbol inicial. 4. Agregar la siguiente rama mientras no forme un ciclo, si es ası́, desechar. 5. Repetir (4) hasta que se cubran todas las variables (n − 1 ramas). El algoritmo NO provee la direccionalidad de los arcos, por lo que esta se puede asignar en forma arbitraria o utilizando semántica externa (experto). Por ejemplo, para el ejemplo de la tabla 2.2 para jugar golf nos queda la tabla 8.1. Poliárboles Rebane y Pearl [89] extendieron el algoritmo de Chow y Liu para poliárboles. Para ello parten del esqueleto (estructura sin direcciones) obtenido con el algoritmo anterior y determinan las dirección de los arcos utilizando pruebas de dependencia entre tripletas de variables. 171 Tabla 8.1: Información mutua entre pares de variables para el ejemplo del golf. No. Var 1 Var 2 Info. mutua 1 temp. ambiente .2856 2 juega ambiente .0743 3 juega humedad .0456 4 juega viento .0074 5 humedad ambiente .0060 6 viento temp. .0052 7 viento ambiente .0017 8 juega temp. .0003 9 humedad temp. 0 10 viento humedad 0 De esta forma se obtiene una red bayesiana en forma de poliárbol. En el caso de un poliárbol, la probabilidad conjunta es: P (X) = n Y i=1 P (Xi | Xj1(i) , Xj2(i) , ..., Xjm(i) ) donde {Xj1(i) , Xj2(i) , ..., Xjm(i) } es el conjunto de padres de la variable Xi . El algoritmo de Rebane y Pearl se basa en probar las relaciones de dependencia entre todas las tripletas de variables en el esqueleto. Dadas 3 variables, existen 3 casos posibles: • Arcos divergentes: X ← Y → Z. • Arcos secuenciales: X → Y → Z. • Arcos convergentes: X → Y ← Z. Los primeros dos casos son indistinguibles, pero el tercero es diferente, ya que las dos variables “padre” son marginalemente independientes. Entonces el algoritmo consiste en: 172 1. Obtener el esqueleto utilizando el algoritmo de Chow y Liu. 2. Recorrer la red hasta encontrar una tripleta de nodos que sean convergentes (tercer caso) -nodo multipadre-. 3. A partir de un nodo multipadre determinar las direcciones de los arcos utilizando la prueba de tripletas hasta donde sea posible (base causal). 4. Repetir 2-3 hasta que ya no se puedan descubrir más direcciones. 5. Si quedan arcos sin direccionar utilizar semántica externa para obtener su dirección. El algoritmo está restringido a poliárboles y no garantiza obtener todas las direcciones. Desde el punto de vista práctico, un problema es que generalmente no se obtiene independencia absoluta (información mutua cero), por lo que habrı́a que considerar una cota empı́rica. Redes Generales Existen dos clases de métodos para el aprendizaje genérico de redes bayesianas, que incluyen redes multiconectadas. Éstos son: 1. Métodos basados en medidas de ajuste y búsqueda. 2. Métodos basados en pruebas de independencia. Dentro de los métodos basados en ajsute y búsqueda, se generan diferentes estructuras y se evalúan respecto a los datos utilizando alguna medida de ajuste. Estos métodos tienen dos aspectos principales: 1. Una medida para evaluar que tan buena es cada estructura respecto a los datos. 2. Un método de búsqueda que genere diferentes estructuras hasta encontrar la óptima, de acuerdo a la medida seleccionada. Existen varias medidas pero dos son las más utilizadas: 173 • Medida bayesiana: estima la probabilidad de la estrutura dado los datos la cual se trata de maximizar. La medida bayesiana busca maximizar la probabilidad de la estructura dados los datos, esto es: P (Es | D) Donde Es es la estructura y D son los datos. La cual podemos escribir en términos relativos al comparar dos estructuras, i y j como: P (Esi | D)/P (Esj | D) = P (Esi , D)/P (Esj , D) Considerando variables discretas y que los datos son independientes, las estructuras se pueden comparar en función del número de ocurrencias (frecuencia) de los datos predichos por cada estructura. • Longitud de descripción mı́nima (MDL): estima la longitud (tamaño en bits) requerida para representar la probabilidad conjunta con cierta estructura, la cual se compone de dos partes: 1. Representación de la estructura, 2. Representación del error de la estructura respecto a los datos. La medida MDL hace un compromiso entre la exactitud y la complejidad del modelo. La exactitud se estima midiendo la información mutua entre los atributos y la clase; y la complejidad contando el número de parámetros. Una constante, α, en [0, 1], se utiliza para balancear el peso de cada aspecto, exactitud contra complejidad. Ası́, la medida de calidad está dada por: MC = α(W/W max) + (1 − α)(1 − L/Lmax) Donde W representa la exactitud del modelo y L la complejidad, mientras que W max y Lmax representan la máxima exactitud y complejidad, respectivamente. Para determinar estos máximoa normalmente se considera una limitación en cuanto al número de padres máximo permitido por nodo. 174 La complejidad está dada por el número de parámetros requeridos para representar el modelo, la cual se puede calcular con la siguiente ecuación: L = Si [ki log2 n + d(Si − 1)Fi ] Donde, n es el número de nodos, k es el número de padres por nodo, Si es el número de valores promedio por variable, Fi el número de valores promedio de los padres, y d el número de bits por parámetro. La exactitud se puede estimar en base al “peso” de cada nodo, en forma análoga a los pesos en el método de aprendizaje de árboles. En este caso el peso de cada nodo se estima en base a la información mutua con sus padres: w(xi, F xi) = X P (xi, F xi)log[P (xi, F xi)/P (xi)P (F xi)] xi Y el peso (exactitud) total está dado por la suma de los pesos de cada nodo: X w(xi, F xi) W = i Para utilizar la medida MDL se puede hacer un hill-climbing iniciando con una estructura simple (por ejemplo un árbol construido con Chow-Liu) y agregando las ligas que mejoren la medida MDL hasta alcanzar un mı́nimo local. Algoritmo - búsqueda de la mejor estructura: 1. Generar estructura incial - árbol. 2. Calcular medida de calidad de la estructura inicial. 3. Agregar / invertir un arco en la estructura actual. 4. Calcular medida de calidad de nueva estructura. 5. Si se mejor la calidad conservar el cambio, si no dejar estructura anterior. 6. Repetir 3 a 5 hasta que ya no haya mejoras. 175 Otra posibilidad es empezar con una estructura compleja y eliminar ligas que reduzcan la medida MDL hasta llegar a un mı́nimo local. Una última posibilidad es combinar los dos enfoques. A diferencia del enfoque basado en una medida global, el enfoque basado en pruebas de independiencia usa medidas de dependencia local entre subconjuntos de variables. El caso más sencillo es el del algoritmo de Chow y Liu, en el cual se mide la información mutua entre pares de variables. A partir de estas medidas, como se vió previamente, se genera una red bayesiana en forma de árbol. Analizando dependencias entre tripletas de variables, el método se extiende a poliárboles. Este enfoque se puede generalizar para el aprendizaje de redes multiconectadas, haciendo pruebas de dependencia entre subconjunto de variables, normalmente dos o tres variables. Por ejemplo, se puede continuar el método de Chow y Liu agregando más arcos aunque se formen ciclos, hasta un cierte umbral mı́nimo de información mutua. La desventaja es que pueden generarse muchos arcos “innecesarios”, por lo que se incorporan formas de luego eliminar arcos. Hay diferentes variantes de este enfoque que consideran diferentes medidas de dependencia y diferentes etrategias para eliminar arcos innecesarios. 176 Capı́tulo 9 Aprendizaje Basado en Instancias En este tipo de aprendizaje, se almacenan los ejemplos de entrenamiento y cuando se quiere clasificar un nuevo objeto, se extraen los objetos más parecidos y se usa su clasificación para clasificar al nuevo objeto. Contrario a los otros esquemas vistos, el proceso de aprendizaje es trivial y el de clasificación es el que consume el mayor tiempo. Este tipo de aprendizaje también se conoce como lazy learning o memorybased learning donde los datos de entrenamiento se procesan solo hasta que se requiere (cuando se requiere constestar alguna pregunta), y la relevancia de los datos se mide en función de una medida de distancia. 9.1 Vecinos más cercanos El algoritmo de k-NN (k-nearest neighbours) es el más simple. El algoritmo es robusto con ejemplos que tienen ruido. Los vecinos más cercanos a una instancia se obtienen, en caso de atributos continuos, utilizando la distancia Euclideana sobre los n posibles atributos 177 Tabla 9.1: El algoritmo de los k vecinos más cercanos. Entrenamiento: almacena todos los ejemplos de entrenamiento (x, f (x)) Clasificación: Dada una instancia xq : Sean x1 , . . . , xk los k vecinos más cercanos a xq . Entonces: f (xq ) = argmaxv∈V k X δ(v, f (xi )) i=1 donde: δ(a, b) = 1 si a = b y 0 en caso contrario. (luego veremos otro tipo de distancias): d(xi , xj ) = v u n uX t (a r (xi ) r=1 − ar (xj ))2 El resultado de la clasificación de k-NN puede ser discreto o continuo. En el caso discreto, el resultado de la clasificación es la clase más común de los k-vecinos (ver tabla 9.1). La forma que se genera con k = 1 es un diagrama de Voronoi alrededor de las instancias almacenadas. A una nueva instancia se le asigna la clasificación del vecino más cercano. Para clasificaciones continuas, se puede tomar la media de las clasificaciones. f (xq ) = Pk f (xi ) k i=1 Un extensión obvia al algoritmo es pesar las clasificaciones de los vecinos de acuerdo a su distancia con el objeto a clasificar (la clasificación de vecinos 178 más cercanos tienen más peso). Promedio ponderado (weigthed average) promedia la salida de los puntos pesados inversamente por su distancia. Para clases discretas: f (xq ) = argmaxv∈V k X wi δ(v, f (xi )) i=1 donde: wi = 1 d(xq ,xi )2 (si la distancia es 0 entonces w = 0). Para clase continuas: f (xq ) = Pk i=1 wi f (xi ) Pk i=1 wi Una suposición es que los vecinos más cercanos nos dan la mejor clasificación y esto se hace utilizando todos los atributos. El problema es que es posible que se tengan muchos atributos irrelevantes que dominen sobre la clasificación (e.g., 2 atributos relevantes dentro de 20 irrelevantes no pintan). Una posibilidad es pesar las distancias de cada atributo, dandole más peso a los atributos más relevantes. Otra posibilidad es tratar de determinar estos pesos con ejemplos conocidos de entrenamiento. Alterando los pesos para minimizar el error. Finalmente, también se pueden eliminar los atributos que se consideran irrelevantes. Un elemento práctico adicional, tiene que ver con el almacenamiento de los ejemplos. En este caso se han sugerido representaciones basadas en árboles (kd-trees) donde las instancias están distribuidas en base a su cercania. 179 9.2 Regresión pesada local Locally weigthed regression es una generalización que construye una función que ajusta los datos de entrenamiento que están en la vecindad de xq . Se pueden usar funciones lineales, cuadráticas, redes neuronales, etc. Si utilizamos una función lineal: fˆ(x) = w0 + w1 a1 (x) + . . . + wn an (x) Podemos usar gradiente descendiente para ajustar los pesos que minimizan el error. El error lo podemos expresar por diferencias de error al cuadrado de la siguiente forma: E(W ) = 1X (f (x) − fˆ(x))2 2 x∈D Lo que queremos es determinar el vector de pesos que minimice el error E. Esto se logra alterando los pesos en la dirección que produce el máximo descenso en la superficie del error. La dirección de cambio se obtiene mediante el gradiente. El gradiente nos especifica la dirección que produce el máximo incremento, por lo que el mayor descenso es el negativo de la dirección. La regla de actualización de pesos es entonces: W ← W + ∆W ∆W = −α∇E donde α es el factor de aprendizaje (qué tanto le creemos al error para ajustar nuestos pesos). ∂E ∂wi ∂ 1 P 2 ˆ = ∂w x∈D (f (x) − f (x)) Pi 2 ∂ (f (x) − w ~ · ~ax ) = x∈D (f (x) − fˆ(x)) ∂w i P ˆ = x∈D (f (x) − f (x))(−ai,x ) 180 Por lo que: ∆wi = α X x∈D (f (x) − fˆ(x))(−ai,x ) Para modificar los pesos se puede hacer: 1. Minimizar el error cuadrado usando los k vecinos más cercanos. E(W ) = 1 2 x∈k X vecinas más cercanos (f (x) − fˆ(x))2 2. Minimizar el error cuadrado usando todos los ejemplos pesados por su distancia a xq . E(W ) = 1 X (f (x) − fˆ(x))2 K(d(xq , x)) 2 x∈D 3. Minimizar el error cuadrado usando los k vecinos más cercanos pesados por su distancia a xq . E(W ) = 1 2 x∈k X vecinas más cercanos (f (x) − fˆ(x))2 K(d(xq , x)) Para el último caso, la regla de actualización es entonces: ∆wi = α x∈k 9.3 X vecinas más cercanos K(d(xq , x))(f (x) − fˆ(x))(−ai,x ) Funciones de Distancia Las funciones de distancia las podemos clasificar en: • Funciones globales: se usa la misma función de distancia en todo el espacio. 181 • Funciones basadas en el query. Los parámetros de la función de distancia se ajustan con cada query, tı́picamente minimizando el error con validación cruzada. • Funciones basadas en puntos. Cada dato tiene asopciado su propia función de distancia El cambiar/ajustar la función de distancia puede mejorar las predicciones. Las funciones de distancia tı́picas para datos continuos son: • Euclideana sX dE (x, q) = j (xj − qj )2 = q (x − q)T (x − q) • Euclideana pesada diagonalmente dm (x, q) = sX j (mj (xj − qj )2 ) = q (x − q)T MT M(x − q) = dE (Mx, Mq) donde mj es el factor de escala en la dimensión j y M es una matriz diagonal con Mjj = mj . • Euclideana completa o Mahalanobis dM (x, q) = q (x − q)T MT M(x − q) = dE (Mx, Mq) donde M puede ser arbitraria. • Normal o Minkowski dp (x, q) = ( X i 1 |xi − qi )|p ) p • Normal pesada diagonal o completa. Igual que la Minkowski pero incluyendo pesos. 182 Matrices (M) diagonales hacen escalas radiales simétricas. Se pueden crear elipses con orientaciones arbitrarias incluyendo otras elementos fuera de la diagonal. También se puede incluir un rango o escala en donde aplicar la función de generalización. Algunas opciones son: • Selección de ancho de banda fijo. h es un valor constante, por lo que se usan valores constantes de datos y forma. • Selección de los vecinos más cervanos. h se pone como la distancia a los k vecinos más cercanos y el volúmen de datos cambia de acuerdo a la densidad de los datos más cercanos. • Selección de banda global. h se ajusta globalmente por un proceso de optimización. • Basado en el query. h se selecciona de acuerdo al query siguiendo un proceso de optimización. • Basada en puntos. Cada dato tiene asociado su propia h. 9.4 Funciones de pesos o Kernels Las funciones de peso deben de ser máximas a distancia cero y decaer suavemente con la distancia. No es necesario normalizar el kernel, tampoco tiene que ser unimodal, y tiene que ser positivo siempre. Algunos ejemplos son: • Elevar la distancia a una potencia negativa K(d) = 183 1 dp • Para evitar infinitos (inverse distance): K(d) = 1 1 + dp • Uno de los más populares, es el kernel Gaussiano: K(d) = exp(−d2 ) • Uno relacionado es el exponencial: K(d) = exp(−|d|) Los dos últimos tienen una extensión infinita que se puede truncar después de un cierto umbral. • Kernel cuadrático o Epanechnikov o Bartlett-Priestley: K(d) = ( (1 − d2 ) 0 si |d| < 1 de otra forma el cual ignora datos más alejados que 1 unidad. • El kernel tricube: K(d) = ( (1 − |d|3)3 0 si |d| < 1 de otra forma • Kernel de uniform weighting: ( K(d) = • Kernel triangular: K(d) = ( • Variante del triangular: K(d) = 1 0 1 − |d| 0 ( 1−|d| |d| 0 si |d| < 1 de otra forma si |d| < 1 de otra forma si |d| < 1 de otra forma Se pueden crear nuevos kernels. Según los autores la definición del kernel no es tan crı́tica. 184 9.5 Pocos datos y otras consideraciones Un posible problema que puede surgir es cuando se tienen pocos datos. Algunas de las posibles soluciones es o tratar de introducir nuevos datos artificialmente y/o reducir la dimensionalidad usando un proceso de selección de variables. La eficiencia de LWR depende de cuantos datos se tengan. Se puede usar una representación de kd-trees para accesar datos cercanos más rápidamente. En general, LWR es más caro que vecinos más cercanos y promedios pesados. Por otro lado, cualquier representación se puede usar para construir el modelo local (e.g., árboles de decisión, reglas, redes neuronales, etc.). Una forma sencilla de hacerlo, es tomar los vecinos más cercanos y entrenar un modelo/clasificador con ellos. Lo que se requiere para implantar un LWR es: • Una función de distancia. Aquı́ la suposición más grande de LWR es que datos más cercanos son los más relevantes. La función de distancia no tiene que cumplir con los requerimientos de una métrica de distancia. • Criterio de separabilidad. Se calcula un peso para cada punto dado por el kernel aplicado a la función de distancia. Este criterio es aparte de P la función de predicción (C = i [L(ŷi , yi )K(d(xi , q))] • Suficientes datos para construir los modelos • Datos con salida yi . • Representación adecuada. Algunas posibles direcciones futuras de investigación incluyen: • Combinar datos continuos y discretos • Mejores formas de sintonización de parámetros 185 • Sintonización local a múltiples escalas • Usar gradientes para sintonizar parámetros • Definir cuánta validación cruzada es suficiente • Usar métodos probabilı́sticos • Olvidar datos • Mejorar aspectos computacionales con muchos datos • No hacer el aprendizaje completamente lazy 9.6 Funciones de bases radiales Radial basis functions (RBF) utilizan una combinación de funciones Kernel que decrecen con la distancia (corresponderı́a a K(d(xq , x)) en las expresiones de arriba). fˆ(x) = w0 + k X wu Ku (d(xu , x)) u=1 Para cada instancia xu existe una función Kernel que decrece con la distancia a xu . Lo más común es escoger funciones normales o Gaussianas para las Ks. Ku (d(xu , x)) = √ 1 2 1 e− 2σ2 d (xu ,x) 2πσ 2 La función fˆ(x) consiste básicamente de dos elementos: uno que calcula las funciones Kernel y otro los pesos de estas. Estas se pueden aprender dentro de una red neuronal de dos capas (ver figure 9.1). 186 w0 w1 w2 wk 1 a 1(x) a2(x) an(x) Figura 9.1: Una red de funciones bases radiales. El entrenamiento se lleva en dos pasos. Se buscan las xu y σ para cada función y después de buscan los pesos para las funciones minimizando el error global. Posibilidades: 1. Centrar cada función en cada punto y a todas darles la misma desviación estandar. 2. Seleccionar un número limitado de funciones distribuidas uniformemente en el espacio de instancias. 3. Seleccionar funciones no distribuirlas uniformemente (sobretodo si las instancias no estan distribuidas uniformemente). • Se puede hacer un muestreo sobre las instancias o tratar de indentificar prototı́pos (posiblemente con un algoritmo de clustering). • Se puede utilizar EM para escoger k medias de las distribuciones Gaussianas que mejor se ajusten a los datos. En el caso de RBF, se realiza un aprendizaje previo con las instancias de entrenamiento (como en los sistemas de aprendizaje que se han visto) y luego se trata de clasificar a las nuevas instancias. 187 9.7 Razonamiento Basado en Casos Una alternativa para aprendizaje basado en instancias, es utilizar una representación simbólica mucho más rica para representar cada instancia. Un Razonador Basado en Casos resuelve problemas nuevos mediante la adaptación de soluciones previas usadas para resolver problemas similares. Las instancias o casos tienen normalmente representado el problema que solucionan, una descripción de cómo lo solucionaron, y el resultado obtenido. Obviamente, las medidas de distancia se vuelven más complejas. Las combinaciones de las instancias también se complica y generalmente involucra conocimiento del dominio y mecanismos de búsqueda y razonamiento sofisticados. 188 Capı́tulo 10 Clustering Clustering es el proceso de agrupar datos en clases o clusters de tal forma que los objetos de un cluster tengan una similaridad alta entre ellos, y baja (sean muy diferentes) con objetos de otros clusters. La medida de similaridad está basada en los atributos que describen a los objetos. Los grupos pueden ser exclusivos, con traslapes, probabilı́sticos, jerárquicos. Clustering puede ser aplicado, por ejemplo, para caracterizar clientes, formar taxonomı́as, clasificar documentos, etc. Retos: • Escalabilidad: normalmente corren con pocos datos. • Capacidad de manejar diferentes tipos de atributos: numéricos (lo más común), binarios, nominales, ordinales, etc. • Clusters de formas arbitrarias: lo basados en distancias numéricas tienden a encontrar cluster esféricos. • Requerimientos mı́nimos para especificar parámetros, como el número de clusters. 189 • Manejo de ruido: muchos son sensibles a datos erroneos. • Independiendentes del orden de los datos. • Poder funcionar eficientemente con alta dimensionalidad. • Capacidad de añadir restricciones. • Que los clusters interpretables y utilizables. La medida de similaridad se define usualmente por proximidad en un espacio multidimensional. Para datos numéricos, usualmente se pasa primero por un proceso de estandarización. La medida z (z-score) elimina las unidades de los datos: Zif = xif − µf σf donde, σf es la desviación media absoluta de la variable f , µf es su media y xif es el i-ésimo valor de f . σf = 1 (|x1f − µf | + |x2f − µf | + . . . + |xnf − µf |) n µf = 1 (x1f + x2f + . . . + xnf ) n Medidas de similaridad Las medidas más utilizadas son: 1. Para variables numéricas (lineales): 190 • Distancia Euclideana: d(i, j) = q |xi1 − xj1 |2 + |xi2 − xj2 |2 + . . . + |xin − xjn |2 • Distancia Manhattan: d(i, j) = |xi1 − xj1 | + |xi2 − xj2 | + . . . + |xin − xjn | • Distancia Minkowski: d(i, j) = (|xi1 − xj1 |q + |xi2 − xj2 |q + . . . + |xin − xjn |q )1/q Si q = 1 es Manhattan y si q = 2 es Euclideana. • Distancia Pesada (e.g., Euclideana): d(i, j) = q w1 |xi1 − xj1 |2 + w2 |xi2 − xj2 |2 + . . . + wn |xin − xjn |2 Propiedades de las distancias: (i) d(i, j) ≥ 0, (ii) d(i, i) = 0, (iii) d(i, j) = d(j, i), y (iv) d(i, j) ≤ d(i, h) + d(h, j). 2. Variables Binarias (0,1): • Simétricas (ambos valores tienen el mismo peso): d(i, j) = r+s q+r+s+t donde: q = número de valores que son 1 en las dos, r = número de valores que son 1 en i y 0 en j, s = número de valores que son 0 en i y 1 en j, y t = número de valores que son 0 en las dos. • No-simétricas (el más importante y más raro vale 1), conocido como el coeficiente Jaccard: d(i, j) = r+s q+r+s 3. Variables nominales (e.g., color): d(i, j) = 191 p−m p donde: m = número de valores iguales, p = número total de casos. Se pueden incluir pesos para darle más importancia a m. Se pueden crear nuevas variables binarias asimétricas a partir de las nominales (e.g., es amarillo o no). 4. Variables ordinales: nominales con un orden relevante. El orden es importante, pero no la magnitud. Pasos: (a) Cambia el valor de cada variable por un ranqueo rif ∈ {1, . . . , Mf }, donde Mf es el ı́ndice del valor más alto de la variable. (b) Mapeo el ranqueo entre 0 y 1 para darle igual peso zif = rif − 1 Mf − 1 (c) Usa cualquiera de las medidas numéricas anteriores. 5. Variables escalares no lineales, por ejemplo, variables que siguen una escala exponencial. Posibilidades: (a) Tratalas como numérica normal. (b) Obten su logaritmo (o algúna otra transformación) antes para convertirlas en lineales. (c) Consideralas como variables ordinales. 6. Variables mixtas: Una posibilidad es escalar todas las variables a un intervalo común (entre 0 y 1): d(i, j) = (f ) (f ) f =1 δij dij Pp (f ) f =1 δij Pp donde: (f ) δij = 0 si xif o xjf se desconocen o si los dos valores son 0 y la variable es asimétrica binaria. En caso contrario vale 1. (f ) dij depende del tipo: 192 (f ) (f ) • Si f es binaria o nominal: dij = 0 si xif = xjf , si no, dij = 1. (f ) • Si f es numérica lineal: dij = |xif −xjf | maxh xhf −minh xhf • Si f es ordinal o numérica no lineal: calcula los ı́ndices rif y r −1 zif = Miff −1 y toma a zif como numérica lineal. Existe una gran cantidad de algoritmos de clustering (solo vamos a ver algunos): 1. Métodos basados en paticiones: construyen k particiones de los datos, donde cada partición representa un grupo o cluster. Cada grupo tiene al menos un elemento y cada elemento pertenece a un solo grupo. Estos métodos, crean una partición inicial e iteran hasta un criterio de paro. Los más populares son k-medias y k-medianas (otros: CLARA y CLARANS). 2. Métodos jerárquicos: crean descomposiciones jerárquicas. El método aglomerativo o bottom-up, empieza con un grupo por cada objeto y une los grupos más parecidos hasta llegar a un solo grupo u otro criterio de paro (e.g., AGNES, BIRCH, CURE, ROCK). El método divisorio o top-down, empieza con un solo grupo y lo divide en grupos más pequeños hasta llegar a grupos de un solo elemento u otro criterio de paro (e.g., DIANA, MONA). 3. Métodos basados en densidades: Se agrupan objetos mientras su densidad (número de objetos) en la “vecindad” este dentro de un cierto umbral (e.g., DBSCAN, DENCLUE). 4. Métodos basados en rejillas: se divide el espacio en rejillas a diferentes niveles (e.g, STING, CLIQUE). 5. Métodos basados en modelos: se encuentra un modelo para cada cluster que mejor ajuste los datos de ese grupo (e.g., COBWEB, AutoClass). 6. Métodos basados en teorı́a de grafos:utilizan representaciones basadas en grafos (e.g., Chameleon, Delaunay triangulation graph (DTG), highly connected subgraphs (HCS), clustering identification via connectivity kernels (CLICK), cluster affinity search technique (CAST)) 193 7. Técnicas basadas en Búsqueda Combinatoria (e.g., Genetically guided algorithm (GGA), TS clustering, SA clustering) 8. Técnicas Fuzzy, (e.g., Fuzzy c-means (FCM), mountain method (MM), possibilistic c-means clustering algorithm (PCM), fuzzy c-shells (FCS)) 9. Técnicas basadas en Redes Neuronales (e.g., Learning vector quantization (LVQ), self-organizing feature map (SOFM), ART, simplified ART (SART), hyperellipsoidal clustering network (HEC), self-splittting competitive learning network (SPLL)) 10. Técnicas basadas en Kernels (e.g. Kernel K-means, support vector clustering (SVC)) 11. Técnicas para Datos Secuenciales (e.g. Similaridad secuencial, clustering secuencial indirecto, clustering secuencial estadı́stico) 12. Técnicas para grandes conjuntos de datos (e.g., CLARA, CURE, CLARANS, BIRCH, DBSCAN, DENCLUE, WaveCluster, FC, ART) 10.1 k-Means Toma como parámetro k que es el número de clusters que forma. Selecciona k elementos aleatoriamente, los cuales representan el centro o media de cada cluster. A cada objeto restante se le asigna el cluster con el cual más se parece, basandose en una distancia entre el objeto y la media del cluster. Despúes calcula la nueva media del cluster e itera hasta no cambiar de medias. Normalmente se utiliza un medida de similaridad basada en el error cuadrático: E= k X X i=1 p∈Ci |p − mi |2 donde: p representa al objeto y mi a la media del cluster Ci (ambos son objetos multidimensionales). 194 Tabla 10.1: Algoritmo de k-means. selecciona k objetos aleatoriamente repeat re(asigna) cada objeto al cluster más similar con el valor medio actualiza el valor de las medias de los clusters until no hay cambio k-means es susceptible a valores extremos porque distorcionan la distribución de los datos. Tambı́en se pueden utilizar las modas (k-modes) para agrupar objetos categóricos. Otra posibilidad es usar medianas (k-medoids) para agrupar en base al objeto más representativo del cluster. La idea básica es encontrar un objeto representativo. La estrategia es reemplazar una de las medianas por otro objeto en forma aleatoria y medir si la calidad de los clusters resultantes mejoran. La calidad se evalúa con base a una función de costo que mide la disimilaridad promedio entre un objeto y la mediana en su cluster. Para ver si un objeto aleatorio (Oalea ) es un buen reemplazo de la mediana (Oactu ) se consideran todos los objetos que no sean medianas y se analiza la re-distribución de los objetos a partir de la cual se calcula un costo basado, por ejemplo, en el error cuadrático. Esto se repite hasta que no exista mejora. Cómo en muchos de los métodos vistos, este no garantiza encontrar el mı́nimo global, por lo que se recomiendo correr varias veces el algoritmo con diferentes valores iniciales. Otra variante es hacer un k-means jerárquico, en donde se empieza con k = 2 y se continua formando clusters sucesivos en cada rama. Si queremos escalarlo a grandes bases de datos, podemos tomar únicamente muestras de los datos. 195 10.2 COBWEB Crea un cluster jerárquico con un árbol de clasificación. En un árbol de clasificación cada nodo es un concepto que tiene una descipción probabilı́stica de ese concepto que resume los objetos clasificados bajo ese nodo. La descripción probabilı́stica incluye la probabilidad del concepto (P (Ci )) y las probabilidades condicionales de pares atributos-valor dado el concepto (P (Ai = Vij |Ck )). COBWEB utiliza una medida llamada utilidad de la categoria para construir el árbol: CU = Pn k=1 P (Ck ) hP P i j P (Ai = Vij |Ck )2 − n P P i j P (Ai = Vij )2 i donde: n es el número de clases en un nivel del árbol. La utilidad de la categoria mide el valor esperado de valores de atributos que pueden ser adivinados a partir de la partición sobre los valores que se pueden adivinar sin esa partición. Si la partición no ayuda en esto, entonces no es buena partición. Entre más grande es la proporción de elementos de la clase que tienen ese atributo-valor, ese atributo-valor es más predictivo sobre la clase. COBWEB desciende el árbol buscando el mejor lugar o nodo para cada objeto. Esto se basa en poner el objeto en cada nodo y en un nodo nuevo y medir en cual se tiene la mayor ganancia de utilidad de categorı́a. COBWEB también considera en cada iteración unir los dos mejores nodos evaluados y dividir el mejor nodo evaluado. Esto es, cada vez que se considera un lugar en un nivel para un nuevo objeto, se consideran los dos mejores objetos (de mayor utilidad) y se considera juntarlos. El caso contrario, sucede una vez que se encuentra el mejor lugar para un 196 nuevo objeto, pero el unir nodos no resulta beneficioso, entonces se considera dividir ese nodo. COBWEB depende del orden de los objetos, por lo que a veces es conveniente probarlo con obejtos en diferente orden. La división entre el número de cluster sirve para incentivar tener clusters con más de un elemento. COBWEB asume que la distribución de probabilidad de los atributos es independiente de las demás. El algoritmo se puede extender a valores numéricos usando distribuciones gaussianas (CLASSIT). f (a) = √ (a−µ)2 1 e− 2σ2 2πσ 2 El equivalente a la sumatoria de probabilidades es ahora: X j P (Ai = Vij )2 ∼ Z 1 f (ai )2 dai = √ 2 πσi Ahora se estima la desviación estandar del atributo numérico con los datos en el cluster y en los datos para todos los clusters: n 1X 1 1 X 1 CU = − P (Ck ) √ k k=1 2 π i σik σi Si la desviación estandar es cero el valor de utilidad se vuelve infinito, por lo que se impone un valor de varianza mı́nimo en cada atributo (acuity). El otro parámetro que se usa en COBWEB es el de corte (cutoff ), que básicamente se usa para parar la generación de nuevos nodos. 197 10.3 Clustering basado en probabilidades Desde el punto de vista bayesiano, lo que buscamos es el grupo de clusters más probables dados los datos. Ahora los objetos tienen cierta probabilidad de pertenecer a un grupo o cluster. La base de un clustering probilı́stico está basado en un modelo estadı́stico llamado finite mixtures (mezcla de distribuciones). Una mezcla es un conjunto de k distribuciones, representando k clusters. Cada distribución nos da la probabilidad de que un objeto tenga un conjunto particular de pares atributo-valor si se supiera que fuera miembro de ese cluster. La mezcla más sencilla es cuando tenemos puros atributos numéricos con distribuciones gaussianas con diferentes medias y varianzas. La idea es, dado un conjunto de datos, determinar las k distribuciones normales (medias y varianzas) y las probabilidades particulares de cada distribución (pueden ser diferentes). Por ejemplo, si tuvieramos dos distribuciones A y B con µA , σA y µB , σB , y PA (PA + PB = 1), podemos generar un conjunto de datos. Si supieramos de qué distribución salió cada dato, es fácil calcular su media y varianza, y las PA y PB . µ= σ2 = x1 + x2 + . . . xn n (x1 − µ)2 + (x2 − µ)2 + . . . (xn − µ)2 n−1 Calcular la probabilidad de que un objeto (x) pertenezca a un cluster (e.g., A), es: 198 P (A|x) = P (x|A)P (A) f (x; µA , σA )PA = P (x) P (x) donde f (x; µA , σA ) es una distribución normal: f (x; µA , σA ) = √ (x−µ)2 1 e− 2σ2 2πσ 2 Podemos ignorar P (x) y al final normalizar. 10.4 Algoritmo EM El problema es que no sabemos de qué distribución viene cada dato y no concemos los parámetros de las distribuciones. El algoritmo EM (Expectation Maximization) empieza adivinando los parámetros de las distribuciones y los usa para calcular las probabilidades de que cada objeto pertenezca a un cluster y usa esas probabilidades para re-estimar los parámetros de las probabilidades, hasta converger (se puede empezar adivinando las probabilidades de que un objeto pertenezca a una clase). El cálculo de las probabilidades de las clases o los valores esperados de las clases es la parte de expectation. El paso de calcular los valores de los parámetros de las distribuciones, es maximization, maximar la verosimilitud de las distribuciones dados los datos. Para estimar los parámetros, tenemos que considerar que tenemos únicamente las probabilidades de pertenecer a cada cluster y no los clusters en si. Estas probabilidades actuan como pesos: µA = w1 x1 + w2 x2 + . . . wn xn w1 + w2 + . . . wn 199 σA2 = w1 (x1 − µ)2 + w2 (x2 − µ)2 + . . . wn (xn − µ)2 w1 + w2 + . . . wn donde wi es la probabilidad de que el objeto i pertenezca al cluster A y se suma sobre todos los objetos (no solo los de A). El algoritmo tiende a converger pero nunca llega a un punto fijo. Podemos ver que tanto se acerca calculando la versorimilitud general de los datos con esos parámetros, multiplicando las probabilidades de los objetos individuales (i): Y i (PA P (xi |A) + PB P (xi |B)) Esta medida crece en cada iteración, y se itera hasta que el crecimiento es despreciable. Aunque EM garantiza convergencia, esta puede ser a un máximo local, por lo que se recomienda repetir el proceso varias veces. 10.5 Extensiones Extender a más de dos distribuciones es prácticamente directo. Extenderlo a instancias con atributos múltiples, si se asume independencia de los atributos, se puede hacer multiplicando las probabilidades para obtener una distribución de probabilidad conjunta. Si existen dos atributos correlacionados, se pueden analizar con una distribución normal bi-variable en donde se utiliza una matriz de covarianza. El número de parámetros crece al cuadrado del número de atributos que se consideren correlacionados entre si. Se pueden especificar diferentes distribuciones (cada una con sus propios parámetros) para diferentes tipos de datos. 200 Se puede penalizar el modelo que instroduzca parámetros y el que defina un número mayor de clusters. 10.6 AutoClass Realiza un descubrimiento automático de clases en datos (P. Cheeseman, J. Stutz). Una vez que las clases han sido identificadas, éstas pueden servir para clasificar nuevos datos. La idea es encontrar la hipótesis más probable, dados los datos e información a priori. Normalmente se busca un balance entre qué tan bien se ajustan los datos a las clases y complejidad de las clases (casos extremos, una clase por dato o una sola clase para todos los datos). En AutoClass los datos se pueden representar por valores discretos, enteros y reales. El modelo es una mezcla finita de distribuciones de probabilidad, cada una con su conjunto de parámetros. Para cada dato se asigna una probabilidad de pertenencia a una clase (o un peso). Dado un conjunto de datos se busca: 1. Los valores más probables (MAP) de los parámetros (para las distribuciones y clases dadas), dada una distribución de probabilidad. 2. La distribución de probabilidad más probable (número de clases y modelos alternativos), independientemente de los parámetros. Se asume que los datos son condicionalmente independientes dada la clase, por lo que la distribución conjunta de los datos es el producto de las probabilidades individuales. 201 Cada dato pertenece a una y solo una clase (de un conjunto disjunto de clases) con probabilidad P (Xi ∈ Cj | V~c , Tc ), donde V~c es el vector de parámetros de la distribución y Tc es la distribución particular). Las clases representan una partición discreta de los datos y por lo tanto la distribución más apropiada es una distribución Bernoulli o binomial Asume que los atributos son independientes dada la clase. Los modelos individuales de los atributos tienen sus propios parámetros de distribución. AutoClass trata de encontrar los parámetros de las distribuciones de probabilidad dependiendo del tipo de valores de las variables: • Discretos: Bernoulli • Reales: Gaussianas • Reales - Escalares (e.g., edad, peso): log-Gaussianas • Enteros: Poisson En general se debe de establecer cuantas clases y correr el proceso. Al correrlo, existen muchos máximos locales, por lo que hay que correr el proceso varias veces a partir de diferentes valores iniciales para los parámetros. 10.7 Cuántos Clusters? Para algunas aplicaciones es fácil determinar el número de clusters, ”K”, de acuerdo al conocimiento del dominio. Sin embargo, para la mayorı́a de los casos, ”K” se desconoce y se estima a partir de los datos. Muchos algoritmos de clustering preguntan ”K” como parámetro de entrada y la calidad de los resultados está fuértemente ligada a este valor. Una división con muchos clusters complica los resultados porque los hace difı́ciles de interpretar y analizar. 202 Una división con muy pocos clusters lleva a una pérdida de información y puede llevar a tomar malas decisiones. Al problema de determinar el número de clusters se le conoce como ”el problema fundamental de la validez del cluster”. Algunos métodos que se han utilizado para encontrar el número adecuado de clusters son: • Visualización del conjunto de datos, lo que funciona bien para dos dimensiones pero generalmente nuestros conjuntos de datos son mucho más complicados. • Construcción de ı́ndices (o reglas de paro). En este caso se utilizan ı́ndices para enfatizar la compactés intra-cluster e isolación inter-cluster considerando efectos tales como: el error cuadrático, propiedades geométricas o estadı́sticas de los datos, el número de patrones, la disimilaridad o similaridad, número de clusters. • Optimización de alguna función de criterio bajo el marco del modelo de mezcla de probabilidades. En este caso se utiliza el algoritmo EM (usualmente), para encontrar el valor de ”K” que maximize o minimize el criterio definido como óptimo. – Criterio de Información de Akaike (AIC). – Criterio de Inferencia Bayesiana. • Otros métodos heurı́sticos basados en una variedad de técnicas y teorı́as. Referencias Survey of Clustering Algorithms. Rui Xu and Donald Wunsch II. IEEE Transactions on Neural Networks, Vol. 16, No. 3, May 2005. 203 Capı́tulo 11 Aprendizaje por Refuerzo 11.1 Introducción Uno de los enfoques más usados dentro de aprendizaje es el aprendizaje supervisado a partir de ejemplos (pares entradas – salida provistos por el medio ambiente), para después predecir la salida de nuevas entradas. Cualquier sistema de predicción puede verse dentro de este paradigma, sin embargo, ignora la estructura secuencial del mismo. En algunos ambientes, muchas veces se puede obtener sólo cierta retroalimentación o recompensa o refuerzo (e.g., gana, pierde). El refuerzo puede darse en un estado terminal y/o en estados intermedios. Los refuerzos pueden ser componentes o sugerencias de la utilidad actual a maximizar (e.g., buena movida). En aprendizaje por refuerzo (RL) el objetivo es aprender cómo mapear situaciones a acciones para maximizar una cierta señal de recompensa. Promesa: programar agentes mediante premio y castigo sin necesidad de especificar cómo realizar la tarea. Diferencias con otro tipo de aprendizaje: 204 Figura 11.1: Aprendizaje por Refuerzo. • No se le presentan pares entrada - salida. • El agente tiene que obtener experiencia útil acerca de los estados, acciones, transiciones y recompensas de manera activa para poder actuar de manera óptima. • La evaluación del sistema ocurre en forma concurrente con el aprendizaje. En RL un agente trata de aprender un comportamiento mediante interacciones de prueba y error en un ambiente dinámico e incierto. En general, al sistema no se le dice qué acción debe tomar, sino que él debe de descubrir qué acciones dan el máximo beneficio. En un RL estandar, un agente está conectado a un ambiente por medio de percepción y acción (ver figura 11.1). En cada interacción el agente recibe como entrada una indicación de su estado actual (s ∈ S) y selecciona una acción (a ∈ A). La acción cambia el estado y el agente recibe una señal de refuerzo o recompensa (r ∈ R). El comportamiento del agente debe de ser tal que escoga acciones que tiendan a incrementar a largo plazo la suma de las recompensas totales. 205 Figura 11.2: Ejemplo de problema. El objetivo del agente es encontrar una polı́tica (π), que mapea estados a acciones que maximice a largo plazo el refuerzo. En general el ambiente es no-determinı́stico (tomar la misma acción en el mismo estado puede dar resultados diferentes). Sin embargo, se asume que el ambiente es estacionario (esto es, las probabilidades de cambio de estado no cambian o cambian muy lentamente). Aspectos importantes: (i) se sigue un proceso de prueba y error, y (ii) la recompensa puede estar diferida. Otro aspecto importante es el balance entre exploración y explotación. Para obtener buena ganancia uno prefiere seguir ciertas acciones, pero para saber cuáles, se tiene que hacer cierta exploración. Muchas veces depende de cuánto tiempo se espera que el agente interactue con el medio ambiente. La caracterización de esta problemática está dada por procesos de decisión de Markov o MDP. Un MDP modela un problema de decisión sequencial en donde el sistema evoluciona en el tiempo y es controlado por un agente. La dinámica del sistema esta determinada por una función de transición de probabilidad que mapea estados y acciones a otros estados. 206 Formalmente, un MDP es una tupla M =< S, A, Φ, R >. Los elementos de un MDP son: • Un conjunto finito de estados S({1, ..., n}). • Un conjunto finito de acciones A, que pueden depender de cada estado. • Función de recompensa (R): define la meta. Mapea cada estado–acción a un número (recompensa), indicando lo deseable del estado. • Modelo del ambiente (opcional): imita el comportamiento del ambiente. Se puede usar para hacer planeación al considerar posibles situaciones futuras basadas en el modelo. Φ : A × S → S es una función de transición de estados dada como una distribución de probabilidad. La probabilidad de alcanzar el estado s′ ∈ S al realizar la acción a ∈ A en el estado s ∈ S, que se puede denotar como Φ(a, s, s′ ). • Polı́tica (π): define cómo se comporta el sistema en cierto tiempo. Es un mapeo (a veces estocástico) de los estados a las acciones. • Función de valor (V ): indica lo que es bueno a largo plazo. Es la recompensa total que un agente puede esperar acumular empezando en ese estado (predicciones de recompensas). Se buscan hacer acciones que den los valores más altos, no la recompensa mayor. Las recompensas están dadas por el ambiente, pero los valores se deben de estimar (aprender) en base a las observaciones. Aprendizaje por refuerzo aprende las funciones de valor mientras interactua con el ambiente. 11.1.1 Modelos de Comportamiento Óptimo Dado un estado st ∈ S y una acción at ∈ A(st ), el agente recibe una recompensa rt+1 y se mueve a un nuevo estado st+1 . El mapeo de estados a probabilidades de seleccionar una acción particular es su polı́tica (πt ). Aprendizaje por refuerzo especifica cómo cambiar la polı́tica como resultado de su experiencia. 207 No trata de maximizar la recompensa inmediata, sino la recompensa a largo plazo (acumulada). La recompensa debe de mostrar lo que queremos obtener y se calcula por el ambiente. Si las recompensas recibidas después de un tiempo t se denotan como: rt+1 , rt+2 , rt+3 , . . ., lo que queremos es maximizar lo que esperamos recibir de recompensa (Rt ) que en el caso más simple es: Rt = rt+1 + rt+2 + rt+3 + . . . + rT Si se tiene un punto terminal se llaman tareas episódicas, si no se tiene se llaman tareas continuas. En este último caso, la fórmula de arriba presenta problemas, ya que no podemos hacer el cálculo cuando T no tiene lı́mite. Podemos usar una forma alternativa en donde se van haciendo cada vez más pequeñas las contribuciones de las recompensas más lejanas: 2 Rt = rt+1 + γrt+2 + γ rt+3 + . . . = ∞ X γ k rt+k+1 k=0 donde γ se conoce como la razón de descuento y está entre: 0 ≤ γ < 1 Si γ = 0 se trata sólo de maximizar tomando en cuenta las recompensas inmediatas. En general, podemos pensar en los siguientes modelos: 1. Horizonte finito: el agente trata de optimizar su recompensa esperada en los siguientes h pasos, sin preocuparse de lo que ocurra despues: E( h X rt ) t=0 donde rt significa la recompensa recibida t pasos en el futuro. Este modelo se puede usar de dos formas: (i) polı́tica no estacionaria: donde en el primer paso se toman los h siguientes pasos, en el siguiente los h − 1, etc., hasta terminar. El problema principal es que no siempre se conoce cuántos pasos considerar. (ii) receding-horizon control : siempre se toman los siguientes h pasos. 208 2. Horizonte infinito: las recompensas que recibe un agente son reducidas geométricamente de acuerdo a un factor de descuento γ (0 ≤ γ ≤ 1): E( ∞ X γ t rt ) t=0 3. Recompensa promedio: optimizar a largo plazo la recompensa promedio: h 1X limh→∞ E( rt ) h t=0 Problema: no hay forma de distinguir polı́ticas que reciban grandes recompensas al principio de las que no. En general, se utiliza la de horizonte infinito. 11.1.2 Recompensa diferida y modelo Markoviano En general, las acciones del agente determinan, no sólo la recompensa inmediata, sino también (por lo menos en forma probabilı́stica) el siguiente estado del ambiente. Los problemas con refuerzo diferido se pueden modelar como procesos de decisión de Markov (MDPs). El modelo es Markoviano si las transiciones de estado no dependen de estados anteriores. En aprendizaje por refuerzo se asume que se cumple con la propiedad Markoviana y las probabilidades de transición están dadas por: ′ a Pss ′ = P r{st+1 = s | st = s, at = a} El valor de recompensa esperado es: Rass′ = E{rt+1 | st = s, at = a, st+1 = s′ } Lo que se busca es estimar las funciones de valor. Esto es, qué tan bueno es estar en un estado (o realizar una acción). 209 La noción de “qué tan bueno” se define en términos de recompensas futuras o recompensas esperadas. La polı́tica π es un mapeo de cada estado s ∈ S y acción a ∈ A(s) a la probabilidad π(s, a) de tomar la acción a estando en estado s. El valor de un estado s bajo la polı́tica π, denotado como V π (s), es el refuerzo esperado estando en estado s y siguiendo la polı́tica π. Este valor esperado se puede expresar como: π V (s) = Eπ {Rt | st = s} = Eπ ( ∞ X k=o k γ rt+k+1 | st = s ) y el valor esperado tomando una acción a en estado s bajo la polı́tica π (Qπ (s, a)): π Q (s, a) = Eπ {Rt | st = s, at = a} = Eπ ( ∞ X k=o k ) γ rt+k+1 | st = s, at = a Las funciones de valor óptimas se definen como: V ∗ (s) = maxπ V π (s) y Q∗ (s, a) = maxπ Qπ (s, a) Las cuales se pueden expresar como las ecuaciones de optimalidad de Bellman: V ∗ (s) = maxa X s′ y Q∗ (s, a) = s′ o Q∗ (s, a) = X s′ 11.2 X ∗ ′ a a Pss ′ [Rss′ + γV (s )] a a ∗ ′ Pss ′ [Rss′ + γV (s )] ∗ ′ ′ a a Pss ′ [Rss′ + γmaxa′ Q (s , a )] Métodos de Solución de MDPs Existen tres formas principales de resolver MDPs: (i) usando métodos de programación dinámica, (ii) usando métodos de Monte Carlo, y (iii) usando métodos de diferencias temporales o de aprendizaje por refuerzo. 210 11.2.1 Programación Dinámica Si se conoce el modelo del ambiente, osea las transiciones de probabilidad a a (Pss ′ ) y los valores esperados de recompensas (Rss′ ), las ecuaciones de optimalidad de Bellman nos representan un sistema de |S| ecuaciones y |S| incognitas. Consideremos primero como calcular la función de valor V π dada una polı́tica arbitraria π. V π (s) = = = = Eπ {Rt | st = s} Eπ {rt+1 + γrt+2 + γ 2 rt+3 + . . . | st = s} E {r + γV π (st+1 ) | st = s} Pπ t+1 P π ′ a a s′ Pss′ [Rss′ + γV (s )] a π(s, a) donde π(s, a) es la probabilidad de tomar la acción a en estado s bajo la polı́tica π. Podemos hacer aproximaciones sucesivas, evaluando Vk+1 (s) en términos de Vk (s). X X ′ a a Vk+1(s) = Pss π(s, a) ′ [Rss′ + γVk (s )] a s′ Podemos entonces definir un algoritmo de evaluación iterativa de polı́ticas como se muestra en la tabla 11.1. Una de las razones para calcular la función de valor de una polı́tica es para tratar de encontrar mejores polı́ticas. Dada una función de valor para una polı́tica dada, podemos probar una acción a 6= π(s) y ver si su V (s) es mejor o peor que el V π (s). En lugar de hacer un cambio en un estado y ver el resultado, se pueden considerar cambios en todos los estados considerando todas las acciones de cada estado, seleccionando aquella que parezca mejor de acuerdo a una polı́tica greedy. Podemos entonces calcular una nueva polı́tica π ′ (s) = argmaxa Qπ (s, a) y continuar hasta que no mejoremos. 211 Tabla 11.1: Algoritmo iterativo de evaluación de polı́tica. Inicializa V (s) = 0 para toda s ∈ S Repite ∆←0 Para cada s ∈ S v ← V (s) P P a a ′ V (s) ← a π(s, a) s′ Pss ′ [Rss′ + γV (s ) ∆ ← max(∆, |v − V (s)|) Hasta que ∆ < θ (número positivo pequeño) Regresa V ≈ V π Esto sugiere, partir de una polı́tica (π0 ) y calcular la función de valor (V π0 ), con la cual encontrar una mejor polı́tica (π1 ) y ası́ sucesivamente hasta converger a π ∗ y V ∗ . A este procedimiento se llama iteración de polı́ticas y viene descrito en la tabla 11.2. Uno de los problemas de iteración de polı́ticas es que cada iteración involucra evaluación de polı́ticas que requiere recorrer todos los estados varias veces. Sin embargo, el paso de evaluación de polı́tica lo podemos truncar de varias formas, sin perder la garantı́a de convergencia. Una de ellas es pararla después de recorrer una sola vez todos los estados. A esta forma se le llama iteración de valor (value iteration). En particular se puede escribir combinando la mejora en la polı́tica y la evaluación de la polı́tica truncada como sigue: X ′ a a Pss Vk+1 (s) = maxa ′ [Rss′ + γVk (s )] s′ Se puede ver como expresar la ecuación de Bellman en una regla de actualización. Es muy parecido a la regla de evaluación de polı́ticas, solo que se evalúa el máximo sobre todas las acciones (ver tabla 11.3). Para espacios muy grandes, el ver todos los estados puede ser computacionalmente muy caro. Una opción es hacer estas actualizaciones al momento de 212 Tabla 11.2: Algoritmo de iteración de polı́tica. 1. Inicialización: V (s) ∈ R y π(s) ∈ A(s) arbitrariamente ∀s ∈ S 2. Evaluación de polı́tica: Repite ∆←0 Para cada s ∈ S v ← V (s) P π(s) π(s) V (s) ← s′ Pss′ [Rss′ + γV (s′ )] ∆ ← max(∆, |v − V (s)|) Hasta que ∆ < θ (número positivo pequeño) 3. Mejora de polı́tica: pol-estable ← true Para cada s ∈ S: b ← π(s) P a a ′ π(s) ← argmaxa s′ Pss ′ [Rss′ + γV (s )] if b 6= π, then pol-estable ← false If pol-estable, then stop, else go to 2. Tabla 11.3: Algoritmo de iteración de valor. Inicializa V (s) = 0 para toda s ∈ S Repite ∆←0 Para cada s ∈ S v ← V (s) P a a ∗ ′ V (s) ← maxa s′ Pss ′ [Rss′ + γV (s )] ∆ ← max(∆, |v − V (s)|) Hasta que ∆ < θ (número positivo pequeño) Regresa una polı́tica determinı́stica tal que: P ∗ ′ a a π(s) = argmaxa s′ Pss ′ [Rss′ + γV (s )] 213 Tabla 11.4: Algoritmo de Monte Carlo para estimar V π . Repite Genera un episodio usando π Para cada estado s en ese episodio: R ← recompensa después de la primera ocurrencia de s Añade R a recomp(s) V (s) ← promedio(recomp(s)) estar explorando el espacio, y por lo tanto determinando sobre qué estados se hacen las actualizaciones. El hacer estimaciones en base a otras estimaciones se conoce también como bootstrapping. 11.2.2 Monte Carlo Los métodos de Monte Carlo, solo requieren de experiencia y la actualización se hace por episodio más que por cada paso. El valor de un estado es la recompensa esperada que se puede obtener a partir de ese estado. Para estimar V π y Qπ podemos tomar estadı́sticas haciendo un promedio de las recompensas obtenidas. El algoritmo para V π está descrito en la tabla 11.4. Para estimar pares estado-acción (Qπ ) corremos el peligro de no ver todos los pares, por lo que se busca mantener la exploración. Lo que normalmente se hace es considerar solo polı́ticas estocásticas que tienen una probabilidad diferente de cero de seleccionar todas las acciones. Con Monte Carlo podemos alternar entre evaluación y mejoras en base a cada episodio. La idea es que después de cada episodio las recompensas observadas se usan para evaluar la polı́tica y la polı́tica se mejora para todos los estados visitados en el episodio. El algoritmo viene descrito en la tabla 11.5. 214 Tabla 11.5: Algoritmo de Monte Carlo. Repite Genera un episodio usando π con exploración Para cada par s, a en ese episodio: R ← recompensa después de la primera ocurrencia de s, a Añade R a recomp(s, a) Q(s, a) ← promedio(recomp(s, a)) Para cada s en el episodio: π(s) ← argmaxa Q(s, a) Existen dos formas para asegurar que todas las acciones pueden ser seleccionadas indefinidamente: • Los algoritmos on-policy: Estiman el valor de la polı́tica mientras la usan para el control. Se trata de mejorar la polı́tica que se usa para tomar decisiones. • Los algoritmos off-policy: Usan la polı́tica y el control en forma separada. La estimación de la polı́tica puede ser por ejemplo greedy y la polı́tica de comportamiento puede ser ǫ-greedy. Osea que la polı́tica de comportamiento está separada de la polı́tica que se quiere mejorar. Esto es lo que hace Q-learning, lo cual simplifica el algoritmo. Ejemplos de polı́ticas de selección de acciones son: • ǫ−greedy: en donde la mayor parte del tiempo se selecciona la acción que da el mayor valor estimado, pero con probabilidad ǫ se selecciona una acción aleatoriamente. • softmax, en donde la probabilidad de selección de cada acción depende de su valor estimado. La más común sigue una distribución de Boltzmann o de Gibbs, y selecciona una acción con la siguiente probabilidad: eQt (a)/τ Qt (b)/τ b=1 e Pn 215 donde τ es un parámetro positivo (temperatura). 11.2.3 Diferencias Temporales (Temporal Difference) Los métodos de TD combinan las ventajas de los dos anteriores: permite hacer bootstrapping (como DP) y no requiere tener un modelo del ambiente (como MC). Métodos tipo TD sólo tienen que esperar el siguiente paso. TD usan el error o diferencia entre predicciones sucesivas (en lugar del error entre la predicción y la salida final) aprendiendo al existir cambios entre predicciones sucesivas. Ventajas: • Incrementales y por lo tanto fáciles de computar. • Convergen más rápido con mejores predicciones. El más simple TD(0) es: V (st ) ← V (st ) + α [rt+1 + γV (st+1 ) − V (st )] El algoritmo de TD(0) viene descrito en la tabla 11.6. La actualización de valores tomando en cuenta la acción serı́a: Q(st , at ) ← Q(st , at ) + α[rt+1 + γQ(st+1 , at+1 ) − Q(st , at )] y el algoritmo es prácticamente el mismo, solo que se llama SARSA, y viene descrito en la tabla 11.7. Uno de los desarrollos más importantes en aprendizaje por refuerzo fué el desarrollo de un algoritmo “fuera-de-polı́tica” (off-policy) conocido como Qlearning. 216 Tabla 11.6: Algoritmo TD(0). Inicializa V (s) arbitrariamente y π a la polı́tica a evaluar Repite (para cada episodio): Inicializa s Repite (para cada paso del episodio): a ← acción dada por π para s Realiza acción a; observa la recompensa, r, y el siguiente estado, s′ V (s) ← V (s) + α [r + γV (s′ ) − V (s)] s ← s′ hasta que s sea terminal Tabla 11.7: Algoritmo SARSA. Inicializa Q(s, a) arbitrariamente Repite (para cada episodio): Inicializa s Selecciona una a a partir de s usando la polı́tica dada por Q (e.g., ǫ–greedy) Repite (para cada paso del episodio): Realiza acción a, observa r, s′ Escoge a′ de s′ usando la polı́tica derivada de Q Q(s, a) ← Q(s, a) + α [r + γQ(s′ , a′ ) − Q(s, a)] s ← s′ ; a ← a′ ; hasta que s sea terminal 217 Tabla 11.8: Algoritmo Q-Learning. Inicializa Q(s, a) arbitrariamente Repite (para cada episodio): Inicializa s Repite (para cada paso del episodio): Selecciona una a de s usando la polı́tica dada por Q (e.g., ǫ–greedy) Realiza acción a, observa r, s′ Q(s, a) ← Q(s, a) + α [r + γmax′a Q(s′ , a′ ) − Q(s, a)] s ← s′ ; hasta que s sea terminal La idea principal es realizar la actualización de la siguiente forma (Watkins, 89): Q(st , at ) ← Q(st , at ) + α[rt+1 + γmaxa Q(st+1 , at+1 ) − Q(st , at )] El algoritmo viene descrito en la tabla 11.8. 11.3 Trazas de Elegibilidad (eligibility traces) Están entre métodos de Monte Carlo y TD de un paso. Los métodos Monte Carlo realizan la actualización considerando la secuencia completa de recompensas observadas. La actualización de los métodos de TD la hacen utilizando únicamente la siguiente recompensa. La idea de las trazas de elegibilidad es considerar las recompensas de n estados posteriores (o afectar a n anteriores). Si recordamos: Rt = rt+1 + γrt+2 + γ 2 rt+3 + . . . + γ T −t−1 rT 218 Lo que se hace en TD es usar: Rt = rt+1 + γVt (st+1 ) lo cual hace sentido porque Vt (st+1 ) reemplaza a los términos siguientes (γrt+2 + γ 2 rt+3 . . .). Sin embargo, hace igual sentido hacer: Rt = rt+1 + γrt+2 + γ 2 Vt (st+2 ) y, en general, para n pasos en el futuro. En la práctica, más que esperar n pasos para actualizar (forward view ), se realiza al revés (backward view ). Se guarda información sobre los estados por los que se pasó y se actualizan hacia atrás las recompensas (descontadas por la distancia). Se puede probar que ambos enfoques son equivalentes. Para implementar la idea anterior, se asocia a cada estado o par estado-acción una variable extra, representando su traza de elegibilidad (eligibility trace) que denotaremos por et (s) o et (s, a). Este valor va decayendo con la longitud de la traza creada en cada episodio. La figura 11.3 muestra este comportamiento. Para T D(λ): et (s) = ( γλet−1 (s) si s 6= st γλet−1 (s) + 1 si s = st Para SARSA se tiene lo siguiente: et (s, a) = ( γλet−1 (s, a) si s 6= st γλet−1 (s, a) + 1 si s = st El algoritmo para SARSA(λ) viene descrito en la tabla 11.9. Para Q-learning como la selección de acciones se hace, por ejemplo, siguiendo una polı́tica ǫ−greedy, se tiene que tener cuidado, ya que a veces los movimientos, son movimientos exploratorios. 219 Figura 11.3: Comportamiento de las trazas de elegibilidad. Tabla 11.9: SARSA(λ) con trazas de elegibilidad. Inicializa Q(s, a) arbitrariamente y e(s, a) = 0 ∀s, a Repite (para cada episodio) Inicializa s, a Repite (para cada paso en el episodeo) Toma acción a y observa r, s′ Selecciona a′ de s′ usando una polı́tica derivada de Q (e.g., ǫ−greedy) δ ← r + γQ(s′ , a′ ) − Q(s, a) e(s, a) ← e(s, a) + 1 Para todos s, a Q(s, a) ← Q(s, a) + αδe(s, a) e(s, a) ← γλe(s, a) s ← s′ ; a ← a′ hasta que s sea terminal 220 Aquı́ se puede mantener historia de la traza solo hasta el primer movimiento exploratorio, ignorar las acciones exploratorias, o hacer un esquema un poco más complicado que considera todas las posibles acciones en cada estado. 11.4 Planeación y Aprendizaje Asumamos que tenemos un modelo del ambiente, esto es, que podemos predecir el siguiente estado y la recomepensa dado un estado y una acción. La predicción puede ser un conjunto de posibles estados con su probabilidad asociada o puede ser un estado que es muestreado de acuerdo a la distribución de probabilidad de los estados resultantes. Dado un modelo, es posible hacer planificación. Lo interesante es que podemos utilizar los estados y acciones utilizados en la planificación también para aprender. De hecho al sistema de aprendizaje no le importa si los pares estado-acción son dados de experiencias reales o simuladas. Dado un modelo del ambiente, uno podrı́a seleccionar aleatoriamente un par estado–acción, usar el modelo para predecir el siguiente estado, obtener una recompensa y actualizar valores Q. Esto se puede repetir indefinidamente hasta converger a Q∗ . El algoritmo Dyna-Q combina experiencias con planificación para aprender más rápidamente una polı́tica óptima. La idea es aprender de experiencia, pero también usar un modelo para simular experiencia adicional y ası́ aprender más rápidamente (ver tabla 11.10). El algoritmo de Dyna-Q selecciona pares estado-acción aleatoriamente de pares anteriores. Sin embargo, la planificación se puede usar mucho mejor si se enfoca a pares estado-acción especı́ficos. Por ejemplo, enfocarnos en las metas e irnos hacia atrás o más generalmente, irnos hacia atrás de cualquer estado que cambie su valor. Los cambios en las estimaciones de valor V o Q pueden cambiar, cuando se está aprendiendo o si el ambiente cambia y un valor estimado deja de ser 221 Tabla 11.10: Algoritmo de Dyna-Q. Inicializa Q(s, a) y Modelo(s, a) ∀s ∈ S, a ∈ A DO forever s ← estado actual a ← ǫ−greedy(s, a) realiza acción a observa s′ y r Q(s, a) ← Q(s, a) + α[r + γmaxa′ Q(s′ , a′ ) − Q(s, a)] Modelo(s, a) ← s′ , r Repite N veces: s ← estado anterior seleccionado aleatoriamente a ← acción aleatoria tomada en s s′ , r ← Modelo(s, a) Q(s, a) ← Q(s, a) + α[r + γmaxa′ Q(s′ , a′ ) − Q(s, a)] cierto. Lo que se puede hacer es enfocar la simulación al estado que cambio su valor. Esto nos lleva a todos los estados que llegan a ese estado y que también cambiarı́an su valor. Esto proceso se puede repetir sucesivamente, sin embargo, algunos estados cambian mucho más que otros. Lo que podemos hacer es ordenarlos y cambiar solo los que rebacen un cierto umbral. Esto es precisamente lo que hacer el algoritmo de prioritized sweeping (ver tabla 11.11). 11.5 Generalización en Aprendizaje por Refuerzo Hasta ahora hemos asumido que se tiene una representación explı́cita en forma de tabla (i.e., una salida por cada tupla de entradas). Esto funciona para epacios pequeños, pero es impensable para dominios como ajedrez (10120 ) o backgammon (1050 ). 222 Tabla 11.11: Algoritmo de Prioritized sweeping. Inicializa Q(s, a) y Modelo(s, a) ∀s ∈ S, a ∈ A y ColaP = ∅ DO forever s ← estado actual a ← ǫ−greedy(s, a) reaiza acción a onserva s′ y r Modelo(s, a) ← s′ , r p ←| r + γmaxa′ Q(s′ , a′ ) − Q(s, a) | if p > θ, then inserta s, a a ColaP con prioridad p Repite N veces, mientras ColaP 6= ∅: s, a ← primero(ColaP ) s′ , r ← Modelo(s, a) Q(s, a) ← Q(s, a) + α[r + γmaxa′ Q(s′ , a′ ) − Q(s, a)] Repite ∀s, a que se predice llegan a s: r ← recomensa predicha p ←| r + γmaxa Q(s, a) − Q(s, a) | if p > θ, then inserta s, a a ColaP con prioridad p 223 Una forma de hacerlo es con una representación implı́cita, i.e., una función. Por ejemplo en juegos, una función de utilidad estimada se puede representar como una función lineal pesada sobre un conjunto de atributos (Fi ’s): V (i) = w1 f1 (i) + w2 f2 (i) + . . . + wn fn (i) En ajedrez se tienen aproximadamente 10 pesos, por lo que es una compresión bastante significativa. La compresión lograda por una representación implı́cita permite al sistema de aprendizaje, generalizar de estados visitados a estados no visitados. Por otro lado, puede que no exista tal función. Como en todos los sistemas de aprendizaje, existe un balance entre el espacio de hipótesis y el tiempo que toma aprender una hipótesis aceptable. Muchos sistemas de aprendizaje supervisado tratan de minimizar el error cuadrado (MSE) bajo cierta distribución P de las entradas. ~ t representa el vector de parámetros de la función parametrizada que Si Θ queremos aprender: ~ t) = MSE(Θ X s∈S P (s)[V π(s) − Vt (s)]2 donde P (s) es una distribución pesando los errores de diferentes estados. Para ajustar los parámetros del vector de la función que queremos optimizar, las técnicas de gradiente ajustan los valores en la dirección que produce la máxima reducción en el error: ~ t+1 = Θ = ~ t − 1 α∇ ~ [V π(st ) − Vt (st )]2 Θ Θt 2 ~ t + α[V π(st ) − Vt (st )]∇ ~ Vt (st ) Θ Θt donde α es un parámetro positivo 0 ≤ α ≤ 1 y ∇Θ~t f (Θt ) denota un vector de derivadas parciales. Como no sabemos V π(st ) lo tenemos que aproximar. Podemos hacerlo con trazas de elegibilidad y actualizar la función Θ como sigue: ~ t+1 = Θ ~ t + αδt~et Θ 224 donde δt es el error: δt = rt+1 + γVt (st+1 ) − Vt (st ) ~ t, y ~et es un vector de trazas de elegibilidad, una por cada componente de Θ que se actualiza como: ~et = γλ~et−1 + ∇Θ ~ t Vt (st ) con ~e0 = 0. 11.6 Aplicaciones a Juegos y Control La primera aplicación en aprendizaje por refuerzo fué el programa para jugar damas de Samuel. Usó una función lineal de evaluación con pesos usando hasta 16 términos. Su programa era parecido a la ecuación de actualización de pesos, pero no usaba recompensa en los estados terminales. Esto hace que puede o no converger y puede aprender a perder. Logró evitar ésto haciendo que el peso para ganancia de material fuera siempre positivo. Se han hecho aplicaciones a control de robots. Una de las más conocidas es el control del péndulo invertido. Controlar la posición x para que se mantenga aproximadamente derecho (θ ≈ π/2), manteniendose en los lı́mites de la pista. X, θ, Ẋ y θ̇ son continuas. El control es de tipo bang–bang. Boxes (Michie, Chambers ’68) balanceaba el pendulo por más de una hora después de 30 intentos (no simulado). Idea: discretizar el espacio en cajas. Se corria el sistema hasta que se caı́a el péndulo o se salia de los lı́mites. Entonces se daba un refuerzo negativo a la última “caja” y se propagaba a la secuencia de “cajas” por las que pasó. Sin embargo, los resultados más impresionantes (un péndulo invertido triple) se lograron derivando un algoritmo con teorı́a de control clásica (simulado). TD-gammon (Tesauro ’92) ilustra la potencialidad de técnicas de aprendizaje por refuerzo. Tesauro primero trató de aprender Q(s, a) directamente con una red neuronal (Neurogammon) con poco éxito. Después representó una 225 función de evaluación con una sola capa intermedia con 40 nodos. Después de 200,000 juegos de entrenamiento mejoró notablemente su desempeño. Añadiendo atributos adicionales a una red con 80 nodos escondidos, después de 300,000 juegos de entrenamiento, juega como los 3 mejores jugadores del mundo. Recientemente (2000), se desarrolló un algoritmo de RL que actualiza las funciones de evaluación en un árbol de búsqueda en juegos (TDLeaf(λ). Aplicado a ajedrez, mejora el puntaje de un programa (KnightCap) de 1,650 a 2,150 después de 308 juegos en 3 dı́as. Se ha aplicado recientemente para controlar aviones y helicópteros 11.7 Algunos desarrollos recientes Uno de los problemas principales de las técnicas usadas en aprendizaje por refuerzo, y para resolver MDP en general, es la aplicación a espacios grandes (muchos estados y acciones). Aunque el algoritmo converge en teorı́a, en la práctica puede tomar un tiempo inaceptable. Dentro de los enfoques que atacan, en parte, esta problemática, podemos mencionar: • Agregación de estados, en donde se juntan estados “parecidos” y a todos ellos se les asigna el mismo valor, reduciendo con esto el espacio de estados. Algunos ejemplos de esto son: tile-coding, coarse coding, radial basis functions, Kanerva coding, y soft-state aggregation. • Abstracciones basadas en máquinas de estado finito, en donde el aprendizaje por refuerzo tiene que decidir que máquina utilizar (por ejemplo, HAM y PHAM). • Definición de jerarquı́as, en donde se divide el espacio en subproblemas, se aprenden polı́ticas a los espacios de más bajo nivel y estas se usan para resolver problemas de más alto nivel (e.g., MAXQ, HEXQ). Algo 226 parecido se usa con Macros y Options, en donde se aprenden polı́ticas de subespacios que se usan para resolver problemas mas grandes. • Otra opción es utilizar un sistema de planificación que decida la secuencias de submetas que se tienen que cumplir para resolver cierto problema (por ejemplo usando TOPs) y después aprender por aprendizaje por refuerzo las acciones a realizar para resolver cada submeta (e.g., RL-TOP). • También se ha buscado utilizar representaciones relacionales dentro de aprendizaje por refuerzo, ya sea para representar las funciones de valor y/o para representar los estados y las acciones. • También se han utilizado soluciones conocidas como guı́as o trazas que se usan para aprender más rápidamente las funciones de valor o para aprender un subconjunto de acciones relevantes. 227