METODOS MATEMATICOS EN CIENCIAS DE LA COMPUTACION 07-08
UNIVERSIDAD DEL PAIS VASCO - EUSKAL HERRIKO UNIBERTSITATEA, UPV-EHU

SEGUNDA ENTREGA --- PRACTICA II : RECONOCIMIENTO DE PATRONES CON WEKA

Plazo de entrega (para todos los grupos y desdobles): 16 de mayo (viernes)
Tareas a realizar para los siguientes Temas:

===== Forma de entrega =====  No copiéis las preguntas: únicamente numerarlas y decir a qué tema pertenecen (lo indico entre corchetes). Sólo voy a puntuar lo que vosotros escribáis. Sólo copiar de la salida de Weka lo imprescindible: no copiéis nada que no entendáis o sea demasiado extenso (resumirlo). 

Realizaré entrevistas personalizadas sobre el trabajo que habéis realizado con la mayor parte de la clase que pueda.
Os citaré por e-mail.
Hojas grapadas impresas con vuestro nombre, e-mail de contacto y grupo en la parte alta de la primera hoja.


==== Enlace a las bases de datos en formato WEKA con las que puedes trabajar para toda la práctica ====

  1. [Tema 10: Selección de variables] -------- (Lee primero la pregunta entera y luego empieza a ejecutar WEKA, no antes ni durante la lectura de la pregunta).
    Has podido ver en la teoría de este tema que en un problema de clasificación la relevancia de todas las variables predictoras de la base de datos no es la misma. Variables predictoras redundantes (entre ellas) y/o irrelevantes (sin relación respecto a la clase a predecir) pueden degradar la capacidad predictora de los clasificadores. WEKA permite, mediante su funcionalidad-pestaña Select Attributes, realizar numerosas tareas de selección de variables, con el fin de afrontar la futura construcción de los clasificadores con menos variables, y también con el objetivo de saber cuales son las variables predictoras interesantes en el problema.

    Como has visto en la teoría, una manera sencilla e intuitiva de abordar realizar la selección de variables consiste en realizar un rankeo-ordenación de las variables predictoras del problema tratado, el cuál refleja, de mayor a menor, el nivel de correlación de cada una de ellas con la clase del problema (transparencia 7 de la teoría).
    Hay numerosas métricas
    (conocidas como aproximaciones "filter", dentro de "Attribute Evaluator") para calcular ese nivel de correlación. De entre las métricas que ofrece WEKA, hay tres de ellas que están relacionadas con la Teoría de la Información y los conceptos de entropía, etc. que has ido viendo (las mismas o pequeñas variantes) en distintas fases del curso (teoría de la información, árboles y reglas de decisión, etc.). Son "Gain Ratio", "Info Gain" y "Symmetrical Uncertainty". Selecciónalas y pincha en botón "More" de sus parámetros para ver cómo calcula cada una de ellas el nivel de correlación de cada variable predictora respecto a la clase: creo que es sencillo de entender.
    Date cuenta que al seleccionar una de estas métricas, WEKA te dice que lo único que puede ofrecerte es un ranking de ellas: son métricas UNIvariadas, y en base a ellas no se puede realizar una búsqueda de un buen subconjunto de variables...

    Haz lo siguente:
     
  2. [Tema 10: Selección de variables] ------ Variables predictoras redundantes y/o irrelevantes pueden degradar la capacidad predictora de los clasificadores. Ya que WEKA te permite en su primera ventana de trabajo ("Preprocess") eliminar variables del análisis y modelado, prueba a quedarte con una porción de las variables mejor rankeadas ("top-ranked features") por tu métrica anterior: tú mismo decide si un tercio de todas ellas, la mitad...

    Mediante un test estadístico no-paramétrico y como hicimos en los laboratorios, realiza una comparativa de los porcentajes de acierto estimados en base a 5 ejecuciones del método H (2/3 del fichero para entrenar, 1/3 para testear) entre:

    Saca tus propias conclusiones y coméntalas. ¿Se puede hablar de ganadores/perdedores (entre construir el modelo con menos variables o no) con una base estadística?
     


     

  3. [Tema 11: Clustering] ------- (Lee primero la pregunta entera y luego empieza a ejecutar WEKA, no antes ni durante la lectura de la pregunta).
     
    WEKA ofrece distintas posibilidades de aplicar algoritmos de "clustering" (o clasificación no-supervisada) sobre tus datos. Las técnicas de "clustering" se utilizan en bases de datos no supervisadas en las que la variable clase no existe (o no se ha definido): esto no es así en las bases de datos con las que has venido trabajando, en las que sí conoces el valor de la clase para cada caso...

    El objetivo fundamental del "clustering" es el descubrimiento ("class discovery") de dichas clases o estructuras diferenciadas del problema, para posteriormente poder “bautizarlas”: descubrir un nuevo subtipo de tumor, un grupo homogéneo de ciudadanos que responde a una encuesta generalista, un nuevo y diferenciado subtipo de iris-setosa... Esto es, la base de datos se ha recolectado-diseñado SIN que hubiera una variable especial (o clase) a predecir (lo contrario a las bases de datos con las que has trabajado, en las que la clase está perfectamente definida para cada caso). En clustering, "todas las variables son iguales, no hay una variable especial a predecir..."
    Es común en los sociólogos, tras realizar una encuesta generalista en la que se preguntan diversas cuestiones acerca de una temática (medioambiente, pautas de consumo, preferencias políticas...), crear grupos-"clusters" homogéneos de encuestados, y luego "bautizarlos-resumirlos"...

    Ten en cuenta que todas las bases de datos que os he ofrecido para WEKA se han confeccionado de forma "supervisada", con el objetivo final de que la última variable de ellas es especial, y su correcta predicción causa interés. En un principio, no tiene interés realizar tareas de "clustering" sobre una base de datos que ya contiene el valor de la variable clase para cada instancia. Esto es, "no hay clases que descubrir, ya están descubiertas y aparecen al final de cada caso..."

    WEKA nos da la opción en su pestaña "Cluster" de aplicar varios algoritmos de cluster, entre ellos el "K-means" (versión McQueen-1967) que has visto en clase .

    Aunque
    la base de datos que estás utilizando contiene ya la variable clase para cada instancia, WEKA permite realizar tareas de clustering en las que la variable clase sea omitida y no tome parte en la creación de los ‘clusters’ (opción "Classes to cluster evaluation" en WEKA). No interesa, no tiene sentido, que los "clusters" sean creados con dicha variable clase tomando parte en el proceso de "clustering": no debe aparecer la clase en la información-creación de los centroides... fíjate en ello en la salida de WEKA al crear los clusters ("Clusterer output").

    Podríamos indagar (como un juego, pero que no hay necesidad práctica de hacerlo ya que la clase está "descubierta" en cada caso) si los "clusters" o grupos creados por medio de técnicas de "clustering" (sin utilizar la clase) se "acercan" a ella, si "descubren las clases verdaderas del problema que ya están etiquetadas por un experto (el botánico decía si cada uno de los 150 iris era setosa, virginica, etc.)"... Entiende esto último de "descubrir las clases" en un sentido amplio. Hazlo así para 2 o 3 valores distintos del número de ‘clusters’ (grupos) en el algoritmo no-supervisado K-Means, realizando también el siguiente estudio para cada valor del número de ‘clusters’:

    o  fíjate en la información acerca de los centroides de cada ‘cluster’: en base a lo anterior, no debería aparecer la variable clase en dichos centroides, en su creación...

    o   ya que no ha tomado parte en la construcción de los ‘clusters’, observa la distribución de la variable clase a lo largo de éstos. Teniendo esta información en cuenta, sugiere cuál es el número de ‘clusters’ ('k') que induce una distribución más ‘pura’-‘idónea’ de las clases de las instancias, el que se "acerca más" a las clases verdaderas (ya conocidas) del problema, ya que querríamos que en un ‘cluster’ concreto haya el mayor número posible de instancias de una única clase, y el menor número posible de casos de las demás clases.
    Informalmente: ¿cómo-cuánto se “acoplan” las clases reales del problema a los clusters descubiertos?
    De esta manera parecería que estaríamos "descubriendo" las clases verdaderas del problema...

    Las salidas que obtendrás serán del estilo que escribo más abajo (lo he hecho para el problema "Iris", con dos "clusters"). Personalmente no me parece "correcto" que muestre la última línea: no creo que haya nada, en un proceso de "clustering", que "bienclasificar" o "malclasificar". Date cuenta que en el "clustering" no existen conceptos como validación cruzada, método H, estimación del porcentaje de bien clasificados... La primera matriz no es una matriz de confusión, pero sí que nos indica la distribución de las clases verdaderas del problema a lo largo de los "clusters" construidos:

    0  1 <-- assigned to cluster
    2 48 | Iris-setosa
    45 5 | Iris-versicolor
    50 0 | Iris-virginica

    Incorrectly clustered instances : 52.0 34.6666 %

            Cluster 0 <-- Iris-versicolor
    Cluster 1<-- Iris-virginica

          Y WEKA a su cuenta y riesgo decide finalmente en su salida "asignar" los clusters a algunas clases concretas: a mí tampoco me parece esto "correcto". Clustering es una cosa, otra bien distinta la clasificación supervisada... pero bueno... entiendo que sí tiene su parte de intuición, pero nada más.
     


     

  4. [Tema 12: Clasificadores Bayesianos] ------ (Lee primero la pregunta entera y luego, poco a poco, empieza a trabajar con WEKA).
    El clasificador "naive Bayes" aprende un modelo simple en el que cada variable predictora está relacionada únicamente con la clase: mira las transparencias del Tema 12.

    Vayamos más allá en la complejidad de las relaciones aprendidas por el clasificador naive Bayes (asumiendo que puede haber relaciones de probabilidad entre las variables predictoras del problema). Trabajando con la base de datos "Breast-Cancer" (su clase: "sí vuelve a aparecer el tumor", "no vuelve a aparecer el tumor") investiga las amplias posibilidades que ofrece el clasificador BayesNet de WEKA para construir clasificadores similares a los vistos en clase (ten en mente las transparencias del Tema 12): naive Bayes aumendato a árbol, clasificador Bayesiano k-dependiente... y que puedas observar los distintos tipos de estructuras gráficas de relaciones entre variables que se pueden aprender. Realiza lo siguiente:
       

     

  5. [Tema general de Clasificación ------ Categorización / Predicción] ------- (Lee primero todo lo que he escrito, y luego empieza a aplicar con WEKA)

    Pensemos que tras construir un clasificador final con todos tus casos (sea del tipo que sea) llegan en el futuro nuevas instancias para ser clasificadas de las cuales nuestro experto en el problema duda o desconoce la clase de pertenencia (variable clase desconocida: esto es, "la flor iris 151 del cuál el botánico desconoce su tipo de iris concreto...").

    Para "simular" esta situación en WEKA, genera un nuevo fichero arff de WEKA con 5  instancias inventadas por ti y en el que ubiques el valor perdido ‘?’ en el de la variable clase (WEKA exige que se le ponga algún valor a la clase, aunque sea el perdido, que en este caso tiene sentido).
    Ten en cuenta que el nuevo fichero que creas debe seguir el formato del fichero de entrenamiento del clasificador final que contienen todas las instancias etiquetadas (con clase): y siguiendo también la misma definición (en su cabecera) de las variables del problema... (predictoras y clase), aprovecha la cabecera del fichero original para crear el del tuyo con tus 5 instancias inventadas a clasificar.

    A esta tarea se la suele conocer como categorización (o "class prediction"). Aquí ya el clasificador, "se la está jugando, a ciegas, está apostando", "esperemos que acierte, pero con total certeza no lo sabemos"... Esperemos que "por debajo" subyazca-tenga el mismo (o mejor) porcentaje de acierto que creemos-estimamos que tiene.

    Mediante el GUI de WEKA y su manual de uso, mediante la segunda opción de validación llamada "Supplied test set", descubre cómo se puede obtener en WEKA cuál es la clase que predicen para cada una de estas 5 instancia por ti inventadas los clasificadores naive-Bayes y RIPPER. Pero date cuenta que el entrenamiento, los clasificadores-modelos de naive Bayes y RIPPER, se han construido con todos tus casos originales (!no con estos 5!).

    Ten cargado primeramente tu fichero WEKA con todos los casos de entrenamiento etiquetadas, con la que aprenderás el modelo predictivo, el modelo que utilizarás para predecir la clase de casos futuros. Posteriormente, debes darle a WEKA mediante "Supplied test set" tus nuevos casos de clase desconocida en un fichero arff independiente-nuevo. La forma de ver la clase predicha por el clasificador construido con todos tus casos para estos nuevos casos, la tienes dentro de las opciones de "More options" en la fase de testeo de WEKA: es necesario para ver la clase predicha activar una opción del "More options" que por defecto está desactivada... Con lo que te he contado y tu intuición, descubre por ti mismo cómo se hace esto en WEKA...(el manual de uso te lo dirá en un momento en sus páginas 6 y 7...).

    Muestra la clase predecida por cada uno de estos clasificadores (naive Bayes y RIPPER) para cada una de estas nuevas instancias (no se quiere la matriz de confusión, en la que no se puede diferenciar la clase predicha para cada caso concreto). En dicha salida de WEKA en el "Classifier Output" del GUI aparecen los siguientes conceptos, para cada instancia para la que hay que predecir su clase de pertenencia: "actual", "predicted", "error" (éste no tiene sentido...), "probability distribution": comenta brevemente qué crees que significa cada uno de ellos.
    ¿Te das cuenta de las probabilidades a posteriori, en cada caso de test, que nos da el modelo naive Bayes para cada clase del problema?

     

     

  6. [Tema 15: Combinación de clasificadores] ------- WEKA ofrece distintas posibilidades acerca de la combinación de clasificadores supervisados. Todas ellas se encuentran dentro de la familia de clasificación supervisada "meta".

    Con el clasificador "Vote" de WEKA se puede construir un esquema de combinación basado en "un voto por la Mayoría" (visto en las clases con Abdel, "Plurality Vote"): se decide la clase a predecir para un caso no etiquetado en base al voto por la mayoría de varios clasificadores base (algo parecido al "unweighted vote" del k-NN). Mediante su parámetro "classifiers", puedes incluir cualesquiera otros clasificadores base (por clasificadores "base" me refiero a cualquier clasificador visto hasta ahora en el curso: naive Bayes, árboles, etc.). Date cuenta que en este parámetro "classifiers" debes primeramente quitar el clasificador que tiene por defecto y que se llama "ZeroR" (Zero Rules = Cero Reglas), y que simplemente predice la clase mayoritaria para cualquier caso (esto es, "no aprende nada"...).

    El esquema de combinación de clasificadores propuesto por "Stacking" reproduce lo visto en la teoría bajo el mismo nombre, construyendo en un segundo nivel un clasificador con las etiquetas predichas por un conjunto de clasificadores base: cogiendo como base de datos de entrada las predicciones de cada clasificador base, y añadiendo la clase real, un "meta-clasificador" de segundo nivel trata de predecir la clase final de cada instancia. Trata de entender sus parámetros "classifiers" (el mismo que para "Vote") y "metaClassifier".

    Escoge 3 o 5 clasificadores base cualesquiera (k-nn, árboles...). Propón para ellos esquemas de combinación "Vote" y  "Stacked" (para éste, elige el clasificador de segundo nivel que consideres). Utilizando distintas semillas de aleatorización en WEKA y como hemos visto en los laboratorios, realiza una comparativa estadística mediante un test estadístico de los porcentajes de acierto estimados en base a 5 ejecuciones del método H (2/3 del fichero para entrenar, 1/3 para testear) entre ambas propuestas ("Vote" versus "Stacked").
    Brevemente: ¿mejora significativamente el "Stacked" (con su segundo nivel) el esquema de voto-por-mayoría propuesto por "Vote" y podemos hablar con base estadística de ganador/perdedor, esto es, nos da un "plus" significativo este segundo nivel?

     

    Escucharía encantado VUESTRAS OPINIONES PERSONALES sobre las prácticas, con el fin de poder mejorar para cursos venideros: plazos, conocimientos adquiridos, amenos/aburrido, ¿tareas repetitivas?, ¿motivante?, aplicación en la práctica, los artículos y lecturas en inglés... lo que creáis. Gracias.

     


    ESTUDIA PRIMERAMENTE LAS PREGUNTAS OPCIONALES QUE OS OFREZCO PARA MEJORAR NOTA

     

  7. [Tema 14: Redes neuronales ------ Pregunta opcional ------ Para mejorar nota]

    Accede al algoritmo de Perceptron Multicapa disponible en WEKA. Fíjate en especial en su parámetro "HiddenLayers": puedes definir el número de capas ocultas de la red, así como el número de nodos en cada una de ellas. Prueba a darle por ejemplo el valor "2,4,2" (o cualquier otro)... entiende qué implican estos números a nivel de número de capas y número de nodos por capa.
    Date cuenta cómo, por medio del interfaz gráfico (activar la opción "GUI": !ojo! No realices una 10-fold cross-validation, que te vas a pasar un rato, luego verás porqué), realizas el "training-entrenamiento" de la red neuronal y puedes "modelar tú mismo" la estructura de la red. Analiza y responde brevemente (escoge una base de datos con no muchas variables predictoras):
     


     

  8. [Tema 10: Selección de variables ------ Pregunta opcional ------ Para mejorar nota]  
    Has visto que en la teoría se ha comentado la forma "wrapper" de realizar la selección de variables. En contraposición al ranking anterior (preguntas 1 y 2 anteriores), ésta forma "wrapper" (o "envoltura" en castellano, porque se "envuelve" o se "tiene en cuenta" el clasificador) propone una búsqueda MULTIvariada, para encontrar un buen subconjunto de variables al unísono que traten de predecir con acierto la clase. A partir indagar por la ventana Select Attributes de WEKA, trata de responder brevemente a preguntas de este estilo:
     



     

  9. [Tema general de Clasificación ------- Pregunta opcional ------- Para mejorar nota]
    Te propongo la lectura y comentario personal, potencial que se le ve a la aplicación, necesidad del aprendizaje desde datos, etc... de alguno/ varios de estos interesantes artículos (empieza por el que más te llame la atención):
     
  10. Puede ser ahora el momento para que especules acerca de lo que puede "tener por dentro" el buscador de Google de todas estas técnicas de minería de datos que has visto... hay mucha "leyenda urbana" al respecto, y si buscas incluso en Internet...

    Para acabar la asignatura, quiero compartir con vosotros dos curiosidades (no os pido que pongáis nada si no queréis en la documentación de las prácticas, es simplemente algo que quiero compartir con vosotros):