Label Propagation Kreise: Erlernen einer komplexen Struktur#

Beispiel für LabelPropagation, das eine komplexe interne Struktur lernt, um „Manifold Learning“ zu demonstrieren. Der äußere Kreis sollte als „rot“ und der innere Kreis als „blau“ gekennzeichnet werden. Da beide Labelgruppen innerhalb ihrer eigenen, unterscheidbaren Form liegen, können wir sehen, dass die Labels korrekt um den Kreis herum propagiert werden.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Wir generieren einen Datensatz mit zwei konzentrischen Kreisen. Zusätzlich ist jedem Sample des Datensatzes ein Label zugeordnet, das: 0 (gehört zum äußeren Kreis), 1 (gehört zum inneren Kreis) und -1 (unbekannt) ist. Hier sind alle Labels bis auf zwei als unbekannt markiert.

import numpy as np

from sklearn.datasets import make_circles

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

import matplotlib.pyplot as plt

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)")
Raw data (2 classes=outer and inner)

Das Ziel von LabelSpreading ist es, einem Sample ein Label zuzuordnen, bei dem das Label anfänglich unbekannt ist.

from sklearn.semi_supervised import LabelSpreading

label_spread = LabelSpreading(kernel="knn", alpha=0.8)
label_spread.fit(X, labels)
LabelSpreading(alpha=0.8, kernel='knn')
In einer Jupyter-Umgebung führen Sie diese Zelle bitte erneut aus, um die HTML-Darstellung anzuzeigen, oder vertrauen Sie dem Notebook.
Auf GitHub kann die HTML-Darstellung nicht gerendert werden. Versuchen Sie bitte, diese Seite mit nbviewer.org zu laden.


Nun können wir überprüfen, welche Labels jedem Sample zugeordnet wurden, als das Label unbekannt war.

output_labels = label_spread.transduction_
output_label_array = np.asarray(output_labels)
outer_numbers = (output_label_array == outer).nonzero()[0]
inner_numbers = (output_label_array == inner).nonzero()[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()
Labels learned with Label Spreading (KNN)

Gesamtlaufzeit des Skripts: (0 Minuten 0,128 Sekunden)

Verwandte Beispiele

Entscheidungsgrenze semi-überwachter Klassifikatoren vs. SVM auf dem Iris-Datensatz

Entscheidungsgrenze semi-überwachter Klassifikatoren vs. SVM auf dem Iris-Datensatz

Eine Demo des Spectral Biclustering Algorithmus

Eine Demo des Spectral Biclustering Algorithmus

Semi-überwachte Klassifikation auf einem Textdatensatz

Semi-überwachte Klassifikation auf einem Textdatensatz

Label Propagation Ziffern: Leistung demonstrieren

Label Propagation Ziffern: Leistung demonstrieren

Galerie generiert von Sphinx-Gallery