Uno de los mayores desafíos en el aprendizaje automático del mundo real es que los modelos supervisados requieren datos etiquetados; sin embargo, en muchos escenarios prácticos, los datos con los que se comienza casi siempre no están etiquetados. Anotar manualmente miles de muestras no sólo es lento; es caro, tedioso y, a menudo, poco práctico.
Aquí es donde el aprendizaje activo cambia las reglas del juego.
El aprendizaje activo es un subconjunto del aprendizaje automático en el que el algoritmo no es un consumidor pasivo de datos, sino que se convierte en un participante activo. En lugar de etiquetar todo el conjunto de datos por adelantado, el modelo selecciona de forma inteligente qué puntos de datos desea etiquetar a continuación. Consulta de forma interactiva a un ser humano o a un oráculo en busca de etiquetas en las muestras más informativas, lo que le permite aprender más rápido utilizando muchas menos anotaciones. Consulta los CÓDIGOS COMPLETOS aquí.
Así es como suele verse el flujo de trabajo:
Comience etiquetando una pequeña porción inicial del conjunto de datos para entrenar un modelo inicial débil. Utilice este modelo para generar predicciones y puntuaciones de confianza en los datos sin etiquetar. Calcule una métrica de confianza (por ejemplo, brecha de probabilidad) para cada predicción. Seleccione sólo las muestras de menor confianza: aquellas sobre las que el modelo está más inseguro. Etiquete manualmente estas muestras inciertas y agréguelas al conjunto de entrenamiento. Vuelva a entrenar el modelo y repita el ciclo de predecir → clasificar confianza → etiqueta → volver a entrenar. Después de varias iteraciones, el modelo puede lograr un rendimiento casi totalmente supervisado y al mismo tiempo requiere muchas menos muestras etiquetadas manualmente.
En este artículo, explicaremos cómo aplicar esta estrategia paso a paso y mostraremos cómo el aprendizaje activo puede ayudarle a crear modelos supervisados de alta calidad con un mínimo esfuerzo de etiquetado. Consulta los CÓDIGOS COMPLETOS aquí.
Instalación e importación de bibliotecas
Para este tutorial, usaremos el conjunto de datos make_classification de la biblioteca sklearn.
NUM_QUERIES = 20 representa el presupuesto de anotaciones en una configuración de aprendizaje activo. En un flujo de trabajo del mundo real, esto significaría que el modelo selecciona las 20 muestras más confusas y las envía a anotadores humanos para que las etiqueten; cada anotación cuesta tiempo y dinero. En nuestra simulación, replicamos este proceso automáticamente: durante cada iteración, el modelo selecciona una muestra incierta, el código recupera instantáneamente su etiqueta verdadera (actuando como el oráculo humano) y el modelo se vuelve a entrenar con esta nueva información.
Por lo tanto, establecer NUM_QUERIES = 20 significa que estamos simulando el beneficio de etiquetar solo 20 muestras elegidas estratégicamente y observando cuánto mejora el modelo con ese esfuerzo humano limitado pero valioso.
Estrategia de generación y división de datos para el aprendizaje activo
Este bloque maneja la generación de datos y la división inicial que impulsa todo el experimento de Aprendizaje Activo. Primero utiliza make_classification para crear 1000 muestras sintéticas para un problema de dos clases. Luego, el conjunto de datos se divide en un conjunto de pruebas del 10 % para la evaluación final y un grupo del 90 % para la capacitación. De este grupo, solo el 10 % se mantiene como el pequeño conjunto inicial etiquetado (que cumple con la restricción de comenzar con anotaciones muy limitadas), mientras que el 90 % restante se convierte en el grupo sin etiquetar. Esta configuración crea el escenario realista de etiquetas bajas para el que está diseñado Active Learning, con un gran conjunto de muestras sin etiquetar listas para consultas estratégicas. Consulta los CÓDIGOS COMPLETOS aquí.
Capacitación inicial y evaluación inicial
Este bloque entrena el modelo de regresión logística inicial utilizando solo el pequeño conjunto de semillas etiquetadas y evalúa su precisión en el conjunto de prueba retenido. Luego, el recuento de muestras etiquetado y la precisión de referencia se almacenan como los primeros puntos en el historial de desempeño, estableciendo un punto de referencia inicial antes de que comience el aprendizaje activo. Consulta los CÓDIGOS COMPLETOS aquí.
historia_exactitud = []
# Entrenar el modelo de línea de base en el pequeño conjunto inicial etiquetado baseline_model = LogisticRegression(random_state=SEED, max_iter=2000) baseline_model.fit(X_labeled_current, y_labeled_current) # Evaluar el rendimiento en el conjunto de pruebas retenido y_pred_init = baseline_model.predict(X_test) precision_init = precision_score(y_test, y_pred_init) # Registra el punto de referencia (x=90, y=0.8800) labeled_size_history.append(len(y_labeled_current)) precision_history.append(accuracy_init) print(f”INITIAL BASELINE (N={labeled_size_history)[0]}): Precisión de la prueba: {accuracy_history[0]:.4f}”)
Bucle de aprendizaje activo
Este bloque contiene el corazón del proceso de aprendizaje activo, donde el modelo selecciona iterativamente la muestra más incierta, recibe su etiqueta verdadera, se vuelve a entrenar y evalúa el rendimiento. En cada iteración, el modelo actual predice probabilidades para todas las muestras sin etiquetar, identifica la que tiene la mayor incertidumbre (menor confianza) y “consulta” su verdadera etiqueta, simulando un anotador humano. El punto de datos recién etiquetado se agrega al conjunto de entrenamiento, se vuelve a entrenar un modelo nuevo y se registra la precisión. La repetición de este ciclo para 20 consultas demuestra cómo el etiquetado dirigido mejora rápidamente el rendimiento del modelo con un mínimo esfuerzo de anotación. Consulta los CÓDIGOS COMPLETOS aquí.
most_uncertain_idx_in_subset = np.argmax(current_uncertainty) query_index_full = current_indices_list[most_uncertain_idx_in_subset]
query_uncertainty_score = puntuaciones_incertidumbre[query_index_full]
# — B. SIMULACIÓN DE ANOTACIÓN HUMANA — # Este es el único paso crítico en el que interviene el anotador humano. # Buscamos la etiqueta verdadera (y_unlabeled_full) de la muestra que solicitó el modelo. X_consulta = X_sin etiquetar_full[query_index_full].reshape(1, -1) y_query = np.array([y_unlabeled_full[query_index_full]]) # Actualizar el conjunto etiquetado: agregar la nueva muestra anotada (N se convierte en N+1) X_labeled_current = np.vstack([X_labeled_current, X_query]) y_labeled_current = np.hstack([y_labeled_current, y_query]) # Eliminar la muestra del grupo sin etiquetar unlabeled_indices_set.remove(query_index_full) # — C. RETRENAR y EVALUAR — # Entrenar el NUEVO modelo en el conjunto etiquetado mejorado y más grande current_model = LogisticRegression(random_state=SEED, max_iter=2000) current_model.fit(X_labeled_current, y_labeled_current) # Evaluar el nuevo modelo en el conjunto de pruebas retenido y_pred = current_model.predict(X_test) precision = precision_score(y_test, y_pred) # Registrar resultados para trazar labeled_size_history.append(len(y_labeled_current)) precision_history.append(accuracy) # Estado de salida print(f”\nQUERY {i+1}: Muestras etiquetadas: {len(y_labeled_current)}”) print(f” > Precisión de la prueba: {exactitud:.4f}”) print(f” > Puntuación de incertidumbre: {query_uncertainty_score:.4f}”) final_accuracy = exactitud_historia[-1]
Resultado final
El experimento validó con éxito la eficiencia del Aprendizaje Activo. Al centrar los esfuerzos de anotación en solo 20 muestras estratégicamente seleccionadas (aumentando el conjunto etiquetado de 90 a 110), el rendimiento del modelo en el conjunto de prueba invisible mejoró de 0,8800 (88%) a 0,9100 (91%).
Este aumento de 3 puntos porcentuales en la precisión se logró con un aumento mínimo en el esfuerzo de anotación: aproximadamente un aumento del 22 % en el tamaño de los datos de entrenamiento resultó en un aumento de rendimiento mensurable y significativo.
En esencia, Active Learner actúa como un curador inteligente, asegurando que cada dólar o minuto invertido en el etiquetado humano proporcione el máximo beneficio posible, lo que demuestra que el etiquetado inteligente es mucho más valioso que el etiquetado aleatorio o masivo. Consulta los CÓDIGOS COMPLETOS aquí.
Trazando los resultados
Consulta los CÓDIGOS COMPLETOS aquí. No dude en consultar nuestra página de GitHub para tutoriales, códigos y cuadernos. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 100.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.

Soy graduado en ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en diversas áreas.
🙌 Siga MARKTECHPOST: agréguenos como fuente preferida en Google.