dguipla / tfm-semisup Goto Github PK
View Code? Open in Web Editor NEWSemisupervised classification methods (SSC) with Spark-ML, study and implementation
License: Apache License 2.0
Semisupervised classification methods (SSC) with Spark-ML, study and implementation
License: Apache License 2.0
1,. Comparativa con Keel (paper Triguero) y los modelos implementados de SSC
2. Comparativa con datasets mas grandes focalizasdos en Big data entre Supervisado y Self+Co Training
3,. Resumen de los mejores resultados y caracteristicas para llegar a ellos
@alvarag @jjrodriguez He compartido con overleaf la memoria pero creo que solo puedo compartirlo con una persona (la version gratuita), cuando tengais un hueco me deciis si finalmente teneis acceso.
Gracias!!
Class para poder trabajar con los datos de los resultados (labeled initial, labeled final, unlabeled initial...) de Semisupervisado sin necesidad de tabajar con la clase del clasificador semisupervisado en concreto
Una tarea (Issue) por conjunto de datos ya que la featurization sera diferente para cada conjunto
hacer una exploracion y procesado (limpieza ) de los datos
Crear un pipeline stage de featurization para despues utilizarlo juntamente con el pipeline stage de los clasificadores
Las instrucciones para crear una biblioteca de Spark con el código que tienes en los notebooks sería algo como lo que puedes ver en este repositorio, cortesía de Mario Juez (predoctoral del área).
Para poder crear el paquete, vas a necesitar instalarte sbt en tu máquina.
Luego los pasos serían:
src/main/scala/org/apache/spark/ml/semisupervised
src/main/scala/org/apache/spark/ml/semisupervised/SelfLearning.scala
project
Una vez tengas todo en su sitio, debería ser tan sencillo como ejecutar en tu consola sbt package
, creará un directorio target/scala... donde aparecerá el "xxx.jar" con tu biblioteca.
Ejemplo:
➜ sbt_scala_spark_hello_world git:(main) git clone https://github.com/mjuez/sbt_scala_spark_hello_world.git
...
➜ sbt_scala_spark_hello_world git:(main) sbt package
...
[info] Compilation completed in 19.006s.
[success] Total time: 42 s, completed 09-mar-2021 15:49:54
➜ sbt_scala_spark_hello_world git:(main) ls target/scala-2.12/
classes spark_hw_2.12-1.0.0.jar update zinc
Para crear la clase que "desetiquete" un porcentaje de las instancias/ejemplos que tenga un conjunto de datos deberás coger de modelo algún transformador de los que trae Spark.
Creo que el más sencillo puede ser https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/feature/Normalizer.scala
Es importante que vayas ya creándote un diagrama de carpetas/paquetes que deje cada clase en su sitio. En este caso los trasnformadores en la carpeta src/main/scala/org/apache/spark/ml/feature
Puedes copiar y pegar el código en tu IDE (el que vayas a utilizar) y empezar a entender esa clase. Verás que hay muchos @SInCE (todo eso lo quitas). Algo importante que verás es que hereda de la clase Transformer, esta clase abstracta define la interfaz que deben cumplir los Transformadores de Spark ML: básicamente que tengan un método transform. Hereda de Transformer y no de UnaryTransformer, que en tu caso no es unario (creo).
Luego podrás ver en Normalizer cómo crea el parámetro "p" y su get y set. Tu deberás crear un parámetro que sea el porcentaje de instancias a desetiquetar.
En tu caso el esquema del DataFrame de salida será igual que el DataFrame de entrada, puesto que no añades ni quitas columnas, solo modificas instancias.
En tu caso el código que realiza el desetiquetado irá en la función
def transform(dataset: Dataset[_]): DataFrame
Cuando te pongas con ello me preguntas, que así de primeras parece difícil pero seguro que no te cuesta :)
Concretamente:
*Se podria excluir o añadir algun otro
Enlaces de interés:
https://app.zenhub.com/files/323652909/063dd67d-d792-443f-90fd-18b62f44e46e/download
https://app.zenhub.com/files/323652909/8eb9f025-9189-433a-a06e-e08eb44351e6/download
https://app.zenhub.com/files/323652909/ff7eb32c-11cd-4dc1-9aa6-085c7e638a6b/download
https://app.zenhub.com/files/323652909/e03215ce-7dc9-4f11-8080-087c139a15da/download
https://app.zenhub.com/files/323652909/1ec150db-2642-41de-b254-29f30e7dfb08/download
https://app.zenhub.com/files/323652909/0951ba8d-ea53-48ec-b15e-f50bb8348fae/download
https://app.zenhub.com/files/323652909/b8f41fa8-5bb1-47a4-ae21-3e9df4524b6b/download
https://app.zenhub.com/files/323652909/f7197d2e-e365-4443-86cf-553530e7ac33/download
Recoger las ideas principales y plasmarlas en la memoria, también recopilar ideas nuevas
Documentar tambien las partes e ideas recogidas en la parte de research de este Epic Parte 1
Una vez la parte 2 este fininalizada o cerca de finalizar (donde tendremos los resultados para supervisado con los clasificadores Base )
Implementaremos la solucion Self Training para semi-supervisado.
scikit-learn tiene una implementación de self training: https://scikit-learn.org/stable/modules/semi_supervised.html#self-training
Los parámetros del método, ejemplos de cómo usarlo e incluso la implementación podrían dar ideas o servir de guía.
Desarrollo/Inplementacion de los clasificadores base (Supervisado) juntamente con la exploracion de los datos:
Añado otro Issue de Dudas para separar los dos temas, En este caso, SelfTraining:
Implementando el SefTrainning, para los casos de muy pocos datos etiquetados la probabilidad que me da los clasificadores base ya en la primera iteración es muy alta es decir casi siempre da valores de probabilidad >0.98 (por la simplicidad del modelo entiendo) excepto para RF. Con lo que en la primera iteración añadiría prácticamente todos los datos NoEtiquetados como validos juntamente con sus predicciones. Lo hablamos en la próxima reunión
Muchas gracias !
@jjrodriguez @alvarag he publicado el dashboard con Power BI (online) he encontrado una opción que me permite hacerlo gratuitamente durante 60 dias a partir de una cuenta de microsoft (utilizo la de ubu) os habra llegado una invitación.
Documentar en la memoria:
Posteriormente profundizar en la capa ML y en concreto sobre los clasificadores base que vamos a utilizar
La principal idea es abstraer el maximo posible la creación de los clasificadores creando una funcion que genere los diferentes clasificadores independientemente de los datos a utilizar.
Donde definiresmo los metodos necesarios para implementar la el algoritmo y poder utilizarla dentro del contexto de Pipeline de ML Spark
Esta parte seria:
@alvarag @jjrodriguez He estado mirando los métodos del paper de Triguero concretamente para SelfTraining y no puede identificar los parametros que utiliza.
En el paper solo me sale las iteraciones (max iter), pero no dice nada del threshold (y según el algoritmo de self training que utiliza trabaja con un threshold, ya que está basado en este paper :(https://www.aclweb.org/anthology/P95-1026.pdf] he mirado en el Github de Keel pero no he visto nada de ningún threshold quizá se me escapa porque está en java y no es muy intuitivo el código para mi... No se, si os suena con que threshold pueden estar trabajando ¿?
Duda respecto a los resultados conseguidos hasta ahora con los datos BCW y ADULT con los clasificadores Base (supervisado)
Para discutirlo a la vuelta de vacaciones:
Resultados (accuracy) : (https://github.com/Dguipla/TFM-SemiSup/blob/main/notebooks/ClasificadoresSupervisado/resultsClasificadoresBase.csv)
PD: añadiré el resultado de los otros conjunto de datos en cuanto tenga hecho el pipeline de featurization de cada uno para acloplarlo con el pipeline general
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.