Saltar al contenido

Aprendizaje semi-supervisado con propagación de etiquetas

31 de diciembre de 2020

Aprendizaje semi-supervisado se refiere a algoritmos que intentan hacer uso de datos de entrenamiento etiquetados y no etiquetados.

Los algoritmos de aprendizaje semi-supervisados ​​son diferentes a los algoritmos de aprendizaje supervisados ​​que solo pueden aprender a partir de datos de entrenamiento etiquetados.

Un enfoque popular para el aprendizaje semi-supervisado es crear un gráfico que conecte ejemplos en el conjunto de datos de entrenamiento y propague etiquetas conocidas a través de los bordes del gráfico para etiquetar ejemplos no etiquetados. Un ejemplo de este enfoque del aprendizaje semi-supervisado es el algoritmo de propagación de etiquetas para modelado predictivo de clasificación.

En este tutorial, descubrirá cómo aplicar el algoritmo de propagación de etiquetas a un conjunto de datos de clasificación de aprendizaje semi-supervisado.

Después de completar este tutorial, sabrá:

  • Una intuición de cómo funciona el algoritmo de aprendizaje semi-supervisado de propagación de etiquetas.
  • Cómo desarrollar un conjunto de datos de clasificación semi-supervisado y establecer una línea de base en el desempeño con un algoritmo de aprendizaje supervisado.
  • Cómo desarrollar y evaluar un algoritmo de propagación de etiquetas y utilizar la salida del modelo para entrenar un algoritmo de aprendizaje supervisado.

Empecemos.

Aprendizaje semi-supervisado con propagación de etiquetas

Aprendizaje semi-supervisado con propagación de etiquetas
Foto de TheBluesDude, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en tres partes; son:

  1. Algoritmo de propagación de etiquetas
  2. Conjunto de datos de clasificación semi supervisado
  3. Propagación de etiquetas para el aprendizaje semi-supervisado

Algoritmo de propagación de etiquetas

Label Propagation es un algoritmo de aprendizaje semi-supervisado.

El algoritmo fue propuesto en el informe técnico de 2002 por Xiaojin Zhu y Zoubin Ghahramani titulado «Aprendiendo de datos etiquetados y no etiquetados con propagación de etiquetas».

La intuición del algoritmo es que se crea un gráfico que conecta todos los ejemplos (filas) en el conjunto de datos en función de su distancia, como la distancia euclidiana. Luego, los nodos en el gráfico tienen etiquetas suaves de etiquetas o distribución de etiquetas basadas en las etiquetas o distribuciones de etiquetas de ejemplos conectados cerca en el gráfico.

Muchos algoritmos de aprendizaje semi-supervisados ​​se basan en la geometría de los datos inducidos por ejemplos etiquetados y no etiquetados para mejorar los métodos supervisados ​​que usan solo los datos etiquetados. Esta geometría se puede representar naturalmente mediante un gráfico empírico g = (V, E) donde los nodos V = {1,…, n} representan los datos de entrenamiento y los bordes E representan similitudes entre ellos

– Página 193, Aprendizaje semi-supervisado, 2006.

La propagación se refiere a la naturaleza iterativa de que las etiquetas se asignan a los nodos en el gráfico y se propagan a lo largo de los bordes del gráfico a los nodos conectados.

Este procedimiento a veces se denomina propagación de etiquetas, ya que «propaga» etiquetas desde los vértices etiquetados (que son fijos) gradualmente a través de los bordes hasta todos los vértices sin etiqueta.

– Página 48, Introducción al aprendizaje semi-supervisado, 2009.

El proceso se repite durante un número fijo de iteraciones para fortalecer las etiquetas asignadas a los ejemplos no etiquetados.

Comenzando con los nodos 1, 2,…, l etiquetados con su etiqueta conocida (1 o −1) y los nodos l + 1,…, n etiquetados con 0, cada nodo comienza a propagar su etiqueta a sus vecinos y el proceso se repite hasta la convergencia.

– Página 194, Aprendizaje semi-supervisado, 2006.

Ahora que estamos familiarizados con el algoritmo de propagación de etiquetas, veamos cómo podríamos usarlo en un proyecto. Primero, debemos definir un conjunto de datos de clasificación semi-supervisado.

Conjunto de datos de clasificación semi supervisado

En esta sección, definiremos un conjunto de datos para el aprendizaje semi-supervisado y estableceremos una línea de base en el desempeño en el conjunto de datos.

Primero, podemos definir un conjunto de datos de clasificación sintético usando la función make_classification ().

Definiremos el conjunto de datos con dos clases (clasificación binaria) y dos variables de entrada y 1000 ejemplos.

A continuación, dividiremos el conjunto de datos en conjuntos de datos de prueba y entrenamiento con una división igual al 50-50 (por ejemplo, 500 filas en cada uno).

Finalmente, volveremos a dividir el conjunto de datos de entrenamiento a la mitad en una parte que tendrá etiquetas y una parte que fingiremos que no tiene etiqueta.

Al unir esto, el ejemplo completo de preparación del conjunto de datos de aprendizaje semi-supervisado se enumera a continuación.

Recomendado:  ¿Qué es el meta-aprendizaje en el aprendizaje automático?

La ejecución del ejemplo prepara el conjunto de datos y luego resume la forma de cada una de las tres porciones.

Los resultados confirman que tenemos un conjunto de datos de prueba de 500 filas, un conjunto de datos de entrenamiento etiquetado de 250 filas y 250 filas de datos sin etiquetar.

Un algoritmo de aprendizaje supervisado solo tendrá 250 filas desde las que entrenar un modelo.

Un algoritmo de aprendizaje semi-supervisado tendrá las 250 filas etiquetadas, así como las 250 filas no etiquetadas que podrían usarse de diversas formas para mejorar el conjunto de datos de entrenamiento etiquetados.

A continuación, podemos establecer una línea de base en el rendimiento en el conjunto de datos de aprendizaje semi-supervisado utilizando un algoritmo de aprendizaje supervisado que se ajusta solo a los datos de entrenamiento etiquetados.

Esto es importante porque esperaríamos que un algoritmo de aprendizaje semi-supervisado supere a un algoritmo de aprendizaje supervisado que se ajuste solo a los datos etiquetados. Si este no es el caso, entonces el algoritmo de aprendizaje semi-supervisado no tiene habilidad.

En este caso, utilizaremos un algoritmo de regresión logística que se ajuste a la parte etiquetada del conjunto de datos de entrenamiento.

Luego, el modelo puede usarse para hacer predicciones en todo el conjunto de datos de prueba de retención y evaluarse utilizando la precisión de clasificación.

Al unir esto, el ejemplo completo de evaluación de un algoritmo de aprendizaje supervisado en el conjunto de datos de aprendizaje semi-supervisado se enumera a continuación.

La ejecución del algoritmo ajusta el modelo en el conjunto de datos de entrenamiento etiquetado y lo evalúa en el conjunto de datos reservado e imprime la precisión de la clasificación.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el algoritmo logró una precisión de clasificación de alrededor del 84,8 por ciento.

Esperaríamos que un algoritmo de aprendizaje semi-supervisado eficaz logre una mayor precisión que esto.

A continuación, exploremos cómo aplicar el algoritmo de propagación de etiquetas al conjunto de datos.

Propagación de etiquetas para el aprendizaje semi-supervisado

El algoritmo de propagación de etiquetas está disponible en la biblioteca de aprendizaje automático de Python de scikit-learn a través de la clase LabelPropagation.

El modelo se puede ajustar como cualquier otro modelo de clasificación llamando al ajuste() función y se utiliza para hacer predicciones de nuevos datos a través de la predecir() función.

Es importante destacar que el conjunto de datos de entrenamiento proporcionado al ajuste() La función debe incluir ejemplos etiquetados codificados con números enteros (como es normal) y ejemplos no etiquetados marcados con una etiqueta de -1.

A continuación, el modelo determinará una etiqueta para los ejemplos sin etiqueta como parte del ajuste del modelo.

Una vez que se ajusta el modelo, las etiquetas estimadas para los datos etiquetados y no etiquetados en el conjunto de datos de entrenamiento están disponibles a través de «transducción_«Atributo en el LabelPropagation clase.

Recomendado:  Con resultados positivos de fase II, Cerevance prueba el concepto en la enfermedad de Parkinson

Ahora que estamos familiarizados con cómo usar el algoritmo de propagación de etiquetas en scikit-learn, veamos cómo podemos aplicarlo a nuestro conjunto de datos de aprendizaje semi-supervisado.

Primero, debemos preparar el conjunto de datos de entrenamiento.

Podemos concatenar los datos de entrada del conjunto de datos de entrenamiento en una sola matriz.

Luego, podemos crear una lista de valores -1 (sin etiquetar) para cada fila en la parte sin etiquetar del conjunto de datos de entrenamiento.

Luego, esta lista se puede concatenar con las etiquetas de la parte etiquetada del conjunto de datos de entrenamiento para que corresponda con la matriz de entrada del conjunto de datos de entrenamiento.

Ahora podemos entrenar al LabelPropagation modelo en todo el conjunto de datos de entrenamiento.

A continuación, podemos usar el modelo para hacer predicciones en el conjunto de datos reservado y evaluar el modelo utilizando la precisión de clasificación.

Uniendo esto, el ejemplo completo de evaluación de la propagación de etiquetas en el conjunto de datos de aprendizaje semi-supervisado se enumera a continuación.

La ejecución del algoritmo ajusta el modelo en todo el conjunto de datos de entrenamiento y lo evalúa en el conjunto de datos reservado e imprime la precisión de la clasificación.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el modelo de propagación de etiquetas logra una precisión de clasificación de aproximadamente el 85,6 por ciento, que es un poco más alta que un ajuste de regresión logística solo en el conjunto de datos de entrenamiento etiquetado que logró una precisión de aproximadamente el 84,8 por ciento.

Hasta aquí todo bien.

Otro enfoque que podemos usar con el modelo semi-supervisado es tomar las etiquetas estimadas para el conjunto de datos de entrenamiento y ajustar un modelo de aprendizaje supervisado.

Recuerde que podemos recuperar las etiquetas para todo el conjunto de datos de entrenamiento del modelo de propagación de etiquetas de la siguiente manera:

Recomendado:  Aprendizaje automático en el mercado de la comunicación 2023

Luego, podemos usar estas etiquetas junto con todos los datos de entrada para entrenar y evaluar un algoritmo de aprendizaje supervisado, como un modelo de regresión logística.

La esperanza es que el modelo de aprendizaje supervisado que se ajuste a todo el conjunto de datos de entrenamiento logre un rendimiento aún mejor que el modelo de aprendizaje semi-supervisado solo.

Uniendo esto, el ejemplo completo del uso de las etiquetas del conjunto de entrenamiento estimado para entrenar y evaluar un modelo de aprendizaje supervisado se enumera a continuación.

Running the algorithm fits the semi-supervised model on the entire training dataset, then fits a supervised learning model on the entire training dataset with inferred labels and evaluates it on the holdout dataset, printing the classification accuracy.

Nota: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

In this case, we can see that this hierarchical approach of the semi-supervised model followed by supervised model achieves a classification accuracy of about 86.2 percent on the holdout dataset, even better than the semi-supervised learning used alone that achieved an accuracy of about 85.6 percent.

Can you achieve better results by tuning the hyperparameters of the LabelPropagation model?
Let me know what you discover in the comments below.

Further Reading

This section provides more resources on the topic if you are looking to go deeper.

Books

Papers

APIs

Articles

Resumen

In this tutorial, you discovered how to apply the label propagation algorithm to a semi-supervised learning classification dataset.

Specifically, you learned:

  • An intuition for how the label propagation semi-supervised learning algorithm works.
  • How to develop a semi-supervised classification dataset and establish a baseline in performance with a supervised learning algorithm.
  • How to develop and evaluate a label propagation algorithm and use the model output to train a supervised learning algorithm.

Do you have any questions?
Ask your questions in the comments below and I will do my best to answer.

Discover Fast Machine Learning in Python!

Master Machine Learning With Python

Develop Your Own Models in Minutes

…with just a few lines of scikit-learn code

Learn how in my new Ebook:
Machine Learning Mastery With Python

Covers self-study tutorials y end-to-end projects like:
Loading data, visualization, modeling, tuning, and much more…

Finally Bring Machine Learning To
Your Own Projects

Skip the Academics. Just Results.

See What’s Inside