AlexGonRo/Instance-Selection-Algorithms-Spark

Implementación del algoritmo demoIS

Closed this issue · 9 comments

Originally reported by: Alejandro González Rogel (Bitbucket: agr00095, GitHub: Unknown)


Se va a implementar en Scala el algoritmo de selección de instancias Democratic Instance Selection (DemoIS). El objetivo final no es solo la implmenetación, sino también hacer el algoritmo de tal manera que sus tareas puedan paralelizarse y funcionar es Spark.

De momento el algoritmo se preparará para funcionar únicamente bajo conjuntos de datos numéricos.

Este algoritmo se basa en ejecutar sobre diferentes particiones disjuntas del conjunto de datos inicial un algoritmo de selección de instancias y, posteriormente, utilizar las salidas obtenidas para calcular un resultado final.

El algoritmo de selección de instancias que se aplicará sobre estas particiones disjuntas será el CNN. Durante la primera versión del algoritmo demoIS no contemplaremos la posibilidad de que se ejecute junto a ningún otro algoritmo de selección de instancias que no sea el CNN.

AÑADIDO: Dado que no ha sido posible contar con el algoritmo KNN programado para la ejecución paralela en Spark, se ha programado dicho algoritmo en su versión lineal.


Original comment by Carlos López (Bitbucket: clopezno, GitHub: clopezno):


Perfecto, solo lo decía para recordar que** el tiempo es finito** y vamos a tener que priorizar tareas para lucir adecuadamente el trabajo final.
De momento no hay ninguno de estos problemas pero creo que podrían llegar a aparecer.

Original comment by Álvar Arnaiz (Bitbucket: alvarag, GitHub: alvarag):


Como se comentó, esa tarea era por si tenías tiempos "muertos". Hay otras prioridades en la fecha que estamos.

Original comment by Alejandro González Rogel (Bitbucket: agr00095, GitHub: Unknown):


Coincido en que se tendrá que generar un "issue" para esta tarea si al final se lleva a cabo. Como he mencionado arriba creo que se puede discutir su implementación o no en la próxima reunión.

Sobre si la tarea estaba incluida o no el el spring es un tema rebatible. Con el algoritmo DemoIS implementado tal y como está ahora se supone que no podemos esperar una salida especialmente buena (por la división aleatoria del conjunto de datos) y, dado que este algoritmo estaba practicamente acabado a principios de semana, fui a hablar con Álvar para comentar la estrategia Grand Tour que considero bastante buena de implementar para dar cierto sentido al DemoIS.

Sin embargo, se trató como un tema a incluir si habia tiempo y mi prioridad a dicha tarea siempre ha sido baja. Como he dicho, tras estar unas horas con ello ha quedado pospuesto.Además, visto que el trabajo va a se algo más difícil que una simpre "traducción" de código, también tendrá su propia issue independiente.

Original comment by Carlos López (Bitbucket: clopezno, GitHub: clopezno):


Alejandro intenta centrar tus comentarios en la tarea de la issue.
Creo que algoritmo del Grand Tour debería ser otra issue.
Esto te permitirá priorizar las historias de usuario.
¿Estaba la implementación del Grand Tour en este sprint?

Original comment by Alejandro González Rogel (Bitbucket: agr00095, GitHub: Unknown):


Sobre la implementación realizada en el commit 1c7d4fe

Se han subido al repositorio todas las clases necesarias para ejecutar el algoritmo Democratic IS, al igual que la propia implementación del algoritmo.

Aunque el programa funciona, destaco que ésta no es la versión final del algoritmo. Faltan arreglar algunos aspectos del código y probablemente incluir algún parámetro de entrada más. Sin embargo, dado que este spring es más corto que el resto y que aún tengo trabajo que realizar antes de la próxima reunión, ésta es probablemente la versión que se mantendrá hasta la semana que viene.

Sobre el algoritmo de partición Grand Tour (esto tiene más relación con Álvar que con Carlos). Intenté implementarlo e incluirlo en este commit, por eso lo he subido con algo de retraso. Sin embargo no está finalizado.

Va a llevar un poco más tiempo y modificaciones de lo que pensaba. No he subido nada sobre este algoritmo pero tengo algo ya programado. Creo que podría conseguir implementarlo por completo, simplemente necesito algo de tiempo que no creo que pueda conseguir en este spring. Como tampoco es un aspecto esencial podemos discutir la implementación durante la próxima reunión.

Original comment by Alejandro González Rogel (Bitbucket: agr00095, GitHub: Unknown):


Tema abierto para este nuevo spring

Original comment by Alejandro González Rogel (Bitbucket: agr00095, GitHub: Unknown):


La tarea no ha sido acabada y queda pospuesta por el momento

Original comment by Álvar Arnaiz (Bitbucket: alvarag, GitHub: alvarag):


Se podría utilizar cualquier clasificador para el cálculo del error, aunque la idea sería utilizar el vecino más cercano. Respecto a la versión del kNN para Spark estoy esperando que cuelguen en GitHub la gente de Granada la versión que presentaron en el congreso al que fui, dijeron que en un par de semanas estaría disponible. Espero que podamos utilizar dicha implementación.
La solución que presentas de la distribución del contador en un RDD aparte me parece perfecta, y como indicas soluciona el problema que tenía en mente cuando hablamos.

Original comment by Alejandro González Rogel (Bitbucket: agr00095, GitHub: Unknown):


Tengo una pregunta con respecto a la implementación de demoIS en la parte que se refiere a seleccionar el número mínimo de votos que ha de tener una instancia para formar parte del conjunto final.

Una de las variables que necesitamos para calcular la función de evaluación de un determinado límite de votos es el porcentaje de error. Mi pregunta es: ¿Cómo se calcula dicho porcentaje de error?¿Utilizamos el vecino más cercano?
Como la publicación del algoritmo no dice nada supongo que será así, pero querría asegurarme.

Otro aspecto que no tiene nada que ver con el anterior. Durante la última reunión quedó pendiente donde guardar la cuenta de los votos (con el problema de que guardarlos en la máquina "master" corríamos el riesgo de que no cupiese todo en memoria). De momento el problema lo he solucionado distribuyendo también ese contador, de manera que me manejo con una RDD que guarda [contador, instancia] que, si no me equivoco, podría solucionar el problema.
Lo menciono porque como no se ha mencionado nada desde la reunión no se si Álvar quería proponer otra solución. De momento quiero que el algoritmo funcione en su versión más simple posible, pero creo que la solución no dificultaría demasiado seguir mejorando el algoritmo más adelante.