Halbsupervisioniertes Lernen mit Label Spreading

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Lab demonstriert, wie man halbsupervisionierte Lernverfahren mit dem Label Spreading - Algorithmus durchführt. Wir werden eine Teilmenge des Datensatzes mit handschriftlichen Ziffern verwenden, und nur 40 dieser Stichproben werden gelabelt sein. Anschließend werden wir Label Spreading nutzen, um die verbleibenden 300 Stichproben vorherzusagen.

Tipps für die virtuelle Maschine (VM)

Nachdem die VM gestartet wurde, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und auf Jupyter Notebook für die Übung zuzugreifen.

Manchmal müssen Sie möglicherweise einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Aufgrund von Einschränkungen in Jupyter Notebook kann die Validierung von Operationen nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie sich gerne an Labby wenden. Geben Sie uns nach der Sitzung Feedback, und wir werden das Problem umgehend für Sie lösen.


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{{"Halbsupervisioniertes Lernen mit Label Spreading"}} end

Daten laden und mischen

Zunächst laden wir den Datensatz mit den handschriftlichen Ziffern (digits dataset) und mischen die Daten zufällig.

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

Daten für halbsupervisioniertes Lernen vorbereiten

Wir wählen 340 Stichproben aus, und nur 40 dieser Stichproben sind mit einem bekannten Label (Kategorie) verknüpft. Wir speichern die Indizes der anderen 300 Stichproben, für die wir die Labels nicht kennen sollen. Anschließend mischen wir die Labels so, dass die ungelabelten Stichproben mit -1 markiert werden.

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

Das Label Spreading - Modell trainieren

Wir trainieren das Label Spreading - Modell mit gamma = 0,25 und max_iter = 20.

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

Modellleistung auswerten

Wir bewerten die Leistung des Modells, indem wir einen Klassifikationsbericht (classification report) und eine Konfusionsmatrix (confusion matrix) generieren.

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_
)

Die unsichersten Vorhersagen visualisieren

Wir wählen die 10 unsichersten Vorhersagen aus und zeigen sie an.

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()

Zusammenfassung

In diesem Lab haben wir gezeigt, wie man halbsupervisioniertes Lernen mit dem Label Spreading - Algorithmus durchführt. Wir haben das Modell mit einer geringen Menge an gelabelten Daten trainiert und es verwendet, um die Labels der verbleibenden Stichproben vorherzusagen. Das Modell hat gut funktioniert und die Labels der meisten Stichproben korrekt vorhergesagt.