Einführung
In diesem Lab verwenden wir den Nearest Neighbors Classification-Algorithmus, um Datenpunkte in einem zweidimensionalen Raum zu klassifizieren. Wir verwenden den Iris-Datensatz, ein häufig verwendeter Datensatz in der Maschinellen Lernen. Wir visualisieren die Entscheidungsgrenzen für jede Klasse und beobachten, wie der Algorithmus mit unterschiedlichen Gewichten arbeitet.
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 öffnen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie sofort beheben.
Importieren der erforderlichen Bibliotheken
Wir beginnen mit dem Importieren der erforderlichen Bibliotheken, die matplotlib, seaborn, ListedColormap, datasets, neighbors und DecisionBoundaryDisplay aus sklearn umfassen.
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import ListedColormap
from sklearn import neighbors, datasets
from sklearn.inspection import DecisionBoundaryDisplay
Laden des Iris-Datensatzes
Wir laden dann den Iris-Datensatz mit der Funktion load_iris() aus dem Modul datasets von sklearn.
iris = datasets.load_iris()
Vorbereiten der Daten
Wir nehmen nur die ersten beiden Merkmale des Iris-Datensatzes, nämlich die Kelchblätchenlänge und die Kelchblätchenbreite. Anschließend teilen wir die Daten in die Merkmalsmatrix X und den Zielvektor y auf.
X = iris.data[:, :2]
y = iris.target
Definieren der Farbskalen
Wir definieren die Farbskalen, die zur Darstellung der Entscheidungsgrenzen und der Trainingspunkte verwendet werden.
cmap_light = ListedColormap(["orange", "cyan", "cornflowerblue"])
cmap_bold = ["darkorange", "c", "darkblue"]
Visualisieren der Entscheidungsgrenzen
Wir werden in einer Schleife durch zwei verschiedene Gewichts-Werte, "uniform" und "distance", iterieren und die Entscheidungsgrenzen für jeden Gewichts-Wert darstellen. Wir werden die Klasse KNeighborsClassifier aus dem Modul neighbors verwenden, um die Klassifizierung durchzuführen.
n_neighbors = 15
for weights in ["uniform", "distance"]:
## create an instance of Neighbours Classifier and fit the data
clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
clf.fit(X, y)
## plot the decision boundaries
_, ax = plt.subplots()
DecisionBoundaryDisplay.from_estimator(
clf,
X,
cmap=cmap_light,
ax=ax,
response_method="predict",
plot_method="pcolormesh",
xlabel=iris.feature_names[0],
ylabel=iris.feature_names[1],
shading="auto",
)
## plot the training points
sns.scatterplot(
x=X[:, 0],
y=X[:, 1],
hue=iris.target_names[y],
palette=cmap_bold,
alpha=1.0,
edgecolor="black",
)
plt.title(
"3-Class classification (k = %i, weights = '%s')" % (n_neighbors, weights)
)
plt.show()
Interpretieren der Ergebnisse
Wir können die Entscheidungsgrenzen für jeden Gewichts-Wert beobachten und wie gut der Algorithmus bei der Klassifizierung der Datenpunkte performt. Der Gewichts-Wert "uniform" nimmt an, dass alle Nachbarn gleiches Gewicht haben, während der Gewichts-Wert "distance" mehr Gewicht auf nähere Nachbarn verlegt. Wir können sehen, dass die Entscheidungsgrenzen mit dem Gewichts-Wert "distance" glatter sind, was auf eine genauere Klassifizierung hinweist.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man den Algorithmus zur Klassifizierung mit den nächsten Nachbarn verwendet, um Datenpunkte in einem zweidimensionalen Raum zu klassifizieren. Wir haben den Iris-Datensatz verwendet, um die Entscheidungsgrenzen für jede Klasse zu visualisieren und beobachtet, wie der Algorithmus performt, wenn verschiedene Gewichts-Werte verwendet werden. Wir haben auch gelernt, wie man die Ergebnisse interpretiert und beobachtet, dass der Gewichts-Wert "distance" bei der Klassifizierung der Datenpunkte besser performt.