« Ejemplos Resueltos de… « || Inicio ||

Prácticas IA 2020-21

Última modificación: 20 de Enero de 2021, y ha tenido 359 vistas

En las siguientes secciones podéis encontrar las propuestas de trabajos de la asignatura de IA.

Es importante leer bien las siguientes instrucciones para que no haya sorpresas después.

Las normas de asignación son las siguientes:

  1. Aquellos que queráis optar por la evaluación alternativa debéis mandarme un correo (fsancho@us.es) con la elección del problema que queréis hacer y su nombre completo.
  2. Se distribuyen por estricto orden de recepción de peticiones.
  3. Mandad varias opciones, por orden de prioridad, por si algunas de las elegidas han sido ya asignadas.
  4. La lista se actualizará para mostrar los trabajos libres en cada momento (puede haber un pequeño retraso entre las asignaciones y la actualización de esta página).
  5. Recibireis confirmación de la asignación.
  6. Las propuestas tienen diferentes niveles de complejidad, que vienen reflejados por la calificación máxima que se puede obtener con ellas (indicada entre paréntesis al principio de cada enunciado). Tened en cuenta esta calificación máxima para que no haya sorpresas con la nota media de la evaluación alternativa.
  7. Si un alumno lo desea, puede proponer un trabajo personalizado, pero tendrá que esperar la respuesta afirmativa para considerarlo asignado y la calificación máxima que podrá obtener con él (puede haber sugerencias de cambio para considerarlo aceptado).
  8. Si un alumno necesita más información o aclaraciones sobre el trabajo asignado, puede contactar con el profesor.
  9. Analizad bien los problemas antes de decidiros, para que no haya sorpresas posteriormente en su realización. No hay proceso de devolución.

Las normas de entrega del trabajo son:

  1. La fecha de entrega será, sin posibilidades de ampliación, el 10 de Febrero de 2021. El examen de la convocatoria oficial está programado para el 15 de febrero, así que habrá poco tiempo entre la publicación de las notas de la evaluación alternativa y la realización del examen.
  2. Junto al modelo de NetLogo que resuelve el problema, se debe entregar un fichero en Markdown con la documentación adjunta, y todos los ficheros adicionales que se consideren necesarios (también de las librerías de IA que se usen de la plataforma, imágenes, etc).
  3. Se subirá a la plataforma un único fichero comprimido (ZIP) con todo el contenido entregable.
  4. Solo se pueden resolver haciendo uso de los métodos vistos en clase y con las librerías vistas en clase (si se modifica una librería, será parte también de la solución y tendrá que estar debidamente documentado).
  5. Los métodos permitidos abarcan las Partes II y III del curso aunque, excepcionalmente, en alguna propuesta puede/debe hacerse uso de alguna librería de la Parte I.
  6. Se valorará:
    • la adecuación del método de resolución,
    • la representación abstracta elegida,
    • la eficiencia de los métodos diseñados,
    • la calidad y claridad de la programación,
    • la interfaz de uso y
    • la documentación del código.

Propuestas para la Práctica 2

  1. (7 ptos) Extiende la librería de Algoritmos Genéticos que se proporciona durante el curso añadiendo métodos de cruzamiento, métodos de mutación, métodos de selección,... Puede seguirse como guía inicial la referencia de la Wikipedia que trata este tipo de opciones: Ref1, Ref2, Ref3.
  2. (6 ptos) Extiende la librería de Algoritmos Genéticos que se proporciona en el curso añadiendo la posibilidad de trabajar con representaciones continuas. Para ello, se puede seguir la aproximación que se da en el siguiente documento.
  3. (10 ptos) Partiendo de la solución proporcionada en clase, crea una librería para resolver Problemas de Satisfacción de Restricciones por medio de Colonias de Hormigas. Se puede usar como aproximación la unidad del curso que trata ese problema y el siguiente documento.
  4. (8 ptos) El algoritmo K-NN presenta el problema de que requiere mucha memoria y tiempo de ejecución porque hay que almacenar permanentemente todos los datos que forman el espacio de ejemplos con el que se trabaja. Sin embargo, es muy probable que muchas de esas muestras no sean necesarias/determinantes para la clasificación, ya que su información es redundante con las otras existentes. Con el fin de reducir este problema, existen algunas variantes que tienen como objetivo obtener clasificadores similares a los originales, pero reduciendo el tamaño del dataset original:
    1. Condensación: Dado un orden en los datos de entrada, para cada ejemplo se clasifica por medio de K-NN haciendo uso únicamente de los datos anteriores según el orden dado (es decir, el dato $x_{n+1}$ se clasifica usando K-NN con $\{x_1,\dots,x_n\}$. Si la clasificación obtenida coincide con la real, ese ejemplo se elimina de los datos, si no, permanece. Comprueba que depende del orden dado a los datos y, además, que tiene el problema de conservar los datos que introducen ruido al sistema.
    2. Reducción: Se comienza con el conjunto completo de datos, y se eliminan aquellos que no afectan a la clasificación del resto de datos de entrada (en contra de la condensación anterior, es capaz de eliminar las muestras que producen ruido, y guarda aquellas que son críticas para la clasificación).
      Implementa las variantes anteriores y acompáñalas con comparaciones sobre datasets específicos en los que se vea claramente su forma de trabajar y las ventajas/inconvenientes que pueden presentar.
  5. (8 ptos) Modifica la librería ID3 para crear una variante que sea capaz de trabajar con atributos numéricos por medio de la aplicación previa de algoritmos de clustering a esos atributos. Es decir, primero se aplica el algoritmo de clustering a la parte numérica de los datos, y como resultado se sustituyen los atributos numéricos por el identificador del cluster al que pertenecen (que ya es una variable categórica); aplicamos ID3 a este nuevo dataframe. El proceso de clustering se puede hacer para cada atributo por separado (haciendo clustering 1D), o considerando varios atributos a la vez (sería clustering multidimensional). Se recomienda usar varios de los algoritmos de clustering vistos en el curso, así como añadir las funciones necesarias para poder evaluar cómo de buenas son las elecciones realizadas (algoritmo de clustering, número de clusters, dimensionalidad, etc.).
  6. (8 ptos) Un problema que tiene el algoritmo ID3/C4.5 tal y como lo hemos visto es que puede producirse un sobreajuste ya que termina realizando el árbol más completo posible con los datos disponibles. Además, exige que el dataframe sea consistente, por lo que deben eliminarse datos anómalos y/o contradictorios. Modifica el algoritmo visto en clase para que construya árboles de decisión aproximados. Para ello, haz que la construcción del árbol dependa de los parámetros siguientes (busca en la literatura si hay más opciones): un parámetro que indique el tamaño mínimo (o entropía máxima) de los conjuntos de datos para que se consideren directamente hojas (en la versión actual, un nodo es final si el dataset que llega hasta él está completamente clasificado), otro parámetro que establezca una profundidad máxima en el árbol construido (una vez alcanzada esa profundidad, el algoritmo considera que los nodos alcanzados son hojas y da una respuesta por mayoría). En este caso, la salida del árbol ya no es una clasificación concreta, sino la probabilidad de que sea de una clase u otra (un vector de probabilidades).
  7. (10 ptos) Disponemos de un robot con un brazo con 2 grados de libertad (es decir, 2 sectores) que se mueve en 2D tal y como muestra la figura (en la figura se muestra uno con 3 sectores). Únicamente ajustando los ángulos $\theta_1$ y $\theta_2$ (por ejemplo, por medio de servo-motores) el robot puede colocar su cabezal en diversos puntos del plano (a los que alcance, claro).

    1. Entrena una red neuronal que sea capaz de aprender la cinemática inversa del robot, es decir, dadas las coordenadas del cabezal, $(x,y)$, como entrada, la red debe devolver los correspondientes ángulos $(\theta_1,\theta_2)$ que le permitan alcanzar ese punto.
    2. A partir de esta red construye un procedimiento para que el robot pueda desplazar su cabeza de forma eficiente entre dos puntos cualesquiera del plano, es decir, determina la forma de actuar sobre los servos para pasar de un punto $(x_1,y_1)$ hasta un punto $(x_2,y_2)$.
    3. Si hubiera zonas del plano por las que el robot no puede cruzar (obstáculos verticales que le impiden que ninguno de los sectores del brazo pase por ellos), da un procedimiento para que el robot sea capaz de hacer la misma tarea moviéndose solo por zonas permitidas.
  8. (8 ptos) Implementa un autoencoder neuronal: una red neuronal que tiene tantas entradas como salidas y que intenta calcular la función identidad, es decir, el input y el output son el mismo. Normalmente, la capa oculta tiene menos neuronas que las de entrada/salida, por lo que cuando la red está entrenada, podemos ver la activación que se produce en la capa oculta como una codificación del dato de entrada, permitiendo pasar de datos con muchas dimensiones a datos con pocas, y manteniendo la estructura original del conjunto. Haz uso de la codificación propuesta como sistema previo a otro proceso de aprendizaje, por ejemplo una clasificación o un clustering, sobre algún dataset interesante.
  9. (7 ptos) Aplica Redes Neuronales a algún juego de tablero para acelerar el comportamiento de MCTS: se toma un MCTS existente, y se forma un conjunto de entrenamiento a partir de los pares (estados, respuesta) que ofrece la implementación de MCTS actual (es decir, se usa el algoritmo MCTS sobre el juego para generar un dataset de jugadas). Posteriormente, se entrena una ANN a partir de esos datos y se usa como máquina de cálculo de respuestas (habrá que tomar una representación adecuada de los estados y las reglas de respuesta para que puedan ser considerados como datos de entrada/salida de una red neuronal). Comprueba qué tal funciona sobre el juego y cómo se comporta frente a jugadas no vistas durante el entrenamiento, sustituyendo el sistema de respuesta de MCTS por la llamada a la ANN entrenada.
  10. (10 ptos) Modifica la librería ID3_C45 para añadir algunas características adicionales:
    1. Sustituir el uso de agentes por el de tablas, de forma que el árbol obtenido sea una tabla que contenga toda la información.
    2. Añadir un evaluador que valga tanto para ID3 como para C45 (el actual solo funciona con ID3, la versión sin datos numéricos).
    3. Añadir la opción de trabajar con muchos árboles calculados.
  11. (6 ptos) Crea una librería que calcule la matriz de confusión de un clasificador y todas las métricas asociadas.
  12. (6 ptos) Selecciona/genera un conjunto de datos interesante (pero no muy grande, puede ser uno de los proporcionados en la carpeta datasets), y resuelve tareas apropiadas de regresión/clasificación/clustering sobre el mismo. Ten en cuenta el uso de la librería DF para manipular Dataframes y poder realizar Ingeniería de Atributos previa al aprendizaje.
  13. (7 ptos) Usa SOM para clasificación de textos cortos (textos de un párrafo, como podrían ser resúmenes de noticias). Por ejemplo, para diferenciar tipos de textos según sean: deportes, ciencia, política, etc... Puedes hacerlo en cualquier idioma en el que consigas suficientes textos de tamaño adecuado. Nota: puede ser necesario usar previamente un lematizador (es decir, un algoritmo que extraiga las raíces de las palabras).
  14. (7 ptos) Crea un reductor de paletas de colores en imágenes por medio de un SOM (por ejemplo, convierte imágenes de 256 colores en imágenes de 16 colores manteniendo la mayor información posible). Puedes usar las funciones de NetLogo para la carga de imágenes en patches como método rápido para acceder a la información de colores y pixels en diferentes resoluciones.
  15. (7 ptos) Crea un reductor de colores en imágenes por medio de un algoritmo de clustering (por ejemplo, convierte imágenes de 256 colores en imágenes de 16 colores manteniendo la mayor información posible). Puedes usar las funciones de NetLogo para la carga de imágenes en patches como método rápido para acceder a la información de colores y pixels en diferentes resoluciones.
  16. (8 ptos) Crea un clusterizador de imágenes (agrupa las imágenes de un dataset según su parecido). Nota: busca un dataset adecuado de imágenes, ya clasificadas y de pequeño formato.
  17. (9 ptos) Haz un sistema de entrenamiento de redes neuronales por medio de Templado Simulado; PSO y Algoritmos Genéticos (los 3 métodos). Compara los resultados obtenidos con el entrenamiento habitual, y también úsalos como distribución de pesos inicial para ANN (es decir, tras una primera aproximación con esos algoritmos, se sigue ejecutando el algoritmo de back-propagation habitual). Compara los resultados obtenidos con varios métodos de asignación aleatoria distintos (uniforme en $[0,1]$, uniforme en $[-1,1]$, siguiendo una distribución $N(0,1)$, etc.).
  18. (7 ptos) Aplica SOM para comprobar los agrupamientos 2D que se producen entre imágenes de dígitos (usando, por ejemplo, los datos del dataset optdigits que se puede encontrar en el repositorio).
  19. Propuesta del alumno: El alumno interesado en hacer una propuesta personal, puede ponerse en contacto con el profesor para comentársela. Si se considera adecuada (podría haber sugerencias de cambios), entonces se le asignará una calificación máxima y podrá ser realizada como práctica.

« Ejemplos Resueltos de… « || Inicio ||