Aprendizaje semi-supervisado con Propagación de Etiquetas

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica muestra cómo realizar el aprendizaje semi-supervisado utilizando el algoritmo de propagación de etiquetas. Utilizaremos un subconjunto del conjunto de datos de dígitos manuscritos y solo 40 de estas muestras estarán etiquetadas. Luego, usaremos la propagación de etiquetas para predecir las 300 muestras restantes.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49185{{"Aprendizaje semi-supervisado con Propagación de Etiquetas"}} end

Cargar y barajar los datos

Primero cargamos el conjunto de datos de dígitos y barajamos los datos aleatoriamente.

digits = datasets.load_digits()
rng = np.random.RandomState(2)
indices = np.arange(len(digits.data))
rng.shuffle(indices)

Preparar los datos para el aprendizaje semi-supervisado

Seleccionamos 340 muestras y solo 40 de estas muestras están asociadas con una etiqueta conocida. Guardamos los índices de las otras 300 muestras para las cuales no se supone que sepamos sus etiquetas. Luego barajamos las etiquetas de modo que las muestras sin etiquetar estén marcadas con -1.

X = digits.data[indices[:340]]
y = digits.target[indices[:340]]

n_total_samples = len(y)
n_labeled_points = 40

indices = np.arange(n_total_samples)

unlabeled_set = indices[n_labeled_points:]

y_train = np.copy(y)
y_train[unlabeled_set] = -1

Entrenar el modelo de propagación de etiquetas

Entrenamos el modelo de propagación de etiquetas con gamma=0.25 y max_iter=20.

lp_model = LabelSpreading(gamma=0.25, max_iter=20)
lp_model.fit(X, y_train)

Evaluar el rendimiento del modelo

Evaluamos el rendimiento del modelo generando un informe de clasificación y una matriz de confusión.

predicted_labels = lp_model.transduction_[unlabeled_set]
true_labels = y[unlabeled_set]

print(
    "Label Spreading model: %d labeled & %d unlabeled points (%d total)"
    % (n_labeled_points, n_total_samples - n_labeled_points, n_total_samples)
)

print(classification_report(true_labels, predicted_labels))

ConfusionMatrixDisplay.from_predictions(
    true_labels, predicted_labels, labels=lp_model.classes_
)

Graficar las predicciones más inciertas

Seleccionamos y mostramos las 10 predicciones más inciertas.

pred_entropies = stats.distributions.entropy(lp_model.label_distributions_.T)

uncertainty_index = np.argsort(pred_entropies)[-10:]

f = plt.figure(figsize=(7, 5))
for index, image_index in enumerate(uncertainty_index):
    image = images[image_index]

    sub = f.add_subplot(2, 5, index + 1)
    sub.imshow(image, cmap=plt.cm.gray_r)
    plt.xticks([])
    plt.yticks([])
    sub.set_title(
        "predict: %i\ntrue: %i" % (lp_model.transduction_[image_index], y[image_index])
    )

f.suptitle("Learning with small amount of labeled data")
plt.show()

Resumen

En este laboratorio, demostramos cómo realizar el aprendizaje semi-supervisado utilizando el algoritmo de propagación de etiquetas. Entrenamos el modelo con una cantidad pequeña de datos etiquetados y lo utilizamos para predecir las etiquetas de las muestras restantes. El modelo se comportó bien y predijo correctamente las etiquetas de la mayoría de las muestras.