Einführung
In diesem Lab werden wir lernen, wie man LabelPropagation verwendet, um die Labels unbekannter Proben aus markierten Proben zu lernen. Wir werden einen Datensatz generieren, der zwei konzentrische Kreise enthält, und jedem Sample ein Label zuweisen. Anschließend werden wir LabelPropagation verwenden, um die Labels der unbekannten Proben zu lernen.
VM-Tipps
Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Operationen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Importieren der erforderlichen Bibliotheken
Wir beginnen mit dem Importieren der erforderlichen Bibliotheken für dieses Lab.
import numpy as np
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt
from sklearn.semi_supervised import LabelSpreading
Datensatz generieren
Als nächstes generieren wir einen Datensatz, der zwei konzentrische Kreise enthält, mithilfe von make_circles. Wir weisen den Datensatz Labels zu, sodass alle Samples unbekannt sind, außer zwei Samples, die jeweils dem äußeren und inneren Kreis angehören.
n_samples = 200
X, y = make_circles(n_samples=n_samples, shuffle=False)
outer, inner = 0, 1
labels = np.full(n_samples, -1.0)
labels[0] = outer
labels[-1] = inner
Rohe Daten plotten
Wir plotten die rohen Daten, um die Kreise und Labels zu visualisieren.
plt.figure(figsize=(4, 4))
plt.scatter(
X[labels == outer, 0],
X[labels == outer, 1],
color="navy",
marker="s",
lw=0,
label="outer labeled",
s=10,
)
plt.scatter(
X[labels == inner, 0],
X[labels == inner, 1],
color="c",
marker="s",
lw=0,
label="inner labeled",
s=10,
)
plt.scatter(
X[labels == -1, 0],
X[labels == -1, 1],
color="darkorange",
marker=".",
label="unlabeled",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
_ = plt.title("Raw data (2 classes=outer and inner)")
Labels mit LabelPropagation lernen
Wir verwenden LabelSpreading, um die Labels der unbekannten Proben zu lernen.
label_spread = LabelSpreading(kernel="knn", alpha=0.8)
label_spread.fit(X, labels)
Gelernt Labels plotten
Schließlich plotten wir die gelernten Labels, um die Genauigkeit von LabelPropagation zu visualisieren.
output_labels = label_spread.transduction_
output_label_array = np.asarray(output_labels)
outer_numbers = np.where(output_label_array == outer)[0]
inner_numbers = np.where(output_label_array == inner)[0]
plt.figure(figsize=(4, 4))
plt.scatter(
X[outer_numbers, 0],
X[outer_numbers, 1],
color="navy",
marker="s",
lw=0,
s=10,
label="outer learned",
)
plt.scatter(
X[inner_numbers, 0],
X[inner_numbers, 1],
color="c",
marker="s",
lw=0,
s=10,
label="inner learned",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
plt.title("Labels learned with Label Spreading (KNN)")
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man LabelPropagation verwendet, um die Labels unbekannter Proben aus markierten Proben zu lernen. Wir haben einen Datensatz erzeugt, der zwei konzentrische Kreise enthält, und jedem Sample Labels zugewiesen. Anschließend haben wir LabelPropagation verwendet, um die Labels der unbekannten Proben zu lernen und die Genauigkeit der gelernten Labels visualisiert.