Zeichnen der Hyperebene mit SGD

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

In diesem Lab werden wir lernen, wie man Support Vector Machines (SVM) mit Stochastic Gradient Descent (SGD) verwendet, um Daten zu klassifizieren. SVM ist ein leistungsstarkes Klassifikationsalgorithmus, der in der Maschinellen Lernung weit verbreitet zur Klassifizierung und Regressionsanalyse eingesetzt wird. Das Grundprinzip hinter SVM besteht darin, die beste Hyperebene zu finden, die die Daten in Klassen mit möglichst großem Margin trennt. Der Margin ist die Entfernung zwischen der Hyperebene und den nächsten Datenpunkten aus jeder Klasse. Stochastic Gradient Descent (SGD) ist ein Optimierungsalgorithmus, der verwendet wird, um die besten Parameter für den SVM-Algorithmus zu finden.

Tipps zur VM

Nachdem der VM-Start abgeschlossen 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 Vorgängen kann aufgrund der 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49291{{"Zeichnen der Hyperebene mit SGD"}} sklearn/datasets -.-> lab-49291{{"Zeichnen der Hyperebene mit SGD"}} ml/sklearn -.-> lab-49291{{"Zeichnen der Hyperebene mit SGD"}} end

Importieren von erforderlichen Bibliotheken und Generieren von Daten

Zunächst müssen wir die erforderlichen Bibliotheken importieren und einen Datensatz generieren, der für die Klassifizierung geeignet ist. In diesem Beispiel werden wir 50 trennbare Punkte mit der Funktion make_blobs aus Scikit-learn generieren.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_blobs

## wir erstellen 50 trennbare Punkte
X, Y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

Trainieren des SVM-Modells mit SGD

Als nächstes müssen wir das SVM-Modell mit SGD trainieren. Wir werden die Klasse SGDClassifier aus Scikit-learn verwenden, um das Modell zu trainieren. Wir werden den Parameter loss auf "hinge" setzen, um den SVM-Algorithmus zu verwenden, und den Parameter alpha auf 0,01, um die Regularisierungstärke zu steuern. Wir werden auch den Parameter max_iter auf 200 setzen, um die Anzahl der Iterationen zu begrenzen.

## fit the model
clf = SGDClassifier(loss="hinge", alpha=0.01, max_iter=200)
clf.fit(X, Y)

Zeichnen der Hyperebene mit dem größten Margin

Schließlich können wir die Hyperebene mit dem größten Margin zeichnen, die wir mit dem SVM-Algorithmus in Kombination mit SGD erhalten haben. Wir werden ein Gitter von Punkten mit np.meshgrid erstellen und dann die Entscheidungsmethode für jeden Punkt im Gitter mit der decision_function-Methode des SVM-Modells berechnen. Anschließend werden wir die Entscheidungsgrenze mit plt.contour und die Datenpunkte mit plt.scatter zeichnen.

## plot the line, the points, and the nearest vectors to the plane
xx = np.linspace(-1, 5, 10)
yy = np.linspace(-1, 5, 10)

X1, X2 = np.meshgrid(xx, yy)
Z = np.empty(X1.shape)
for (i, j), val in np.ndenumerate(X1):
    x1 = val
    x2 = X2[i, j]
    p = clf.decision_function([[x1, x2]])
    Z[i, j] = p[0]
levels = [-1.0, 0.0, 1.0]
linestyles = ["dashed", "solid", "dashed"]
colors = "k"
plt.contour(X1, X2, Z, levels, colors=colors, linestyles=linestyles)
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolor="black", s=20)

plt.axis("tight")
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Support Vector Machines (SVM) mit Stochastic Gradient Descent (SGD) verwendet, um Daten zu klassifizieren. Wir haben einen für die Klassifizierung geeigneten Datensatz generiert, das SVM-Modell mit SGD trainiert und die Hyperebene mit dem größten Margin gezeichnet. SVM ist ein leistungsstarkes Klassifikationsalgorithmus, der in der Maschinellen Lernung weit verbreitet zur Klassifizierung und Regressionsanalyse eingesetzt wird. Das Grundprinzip hinter SVM besteht darin, die beste Hyperebene zu finden, die die Daten in Klassen mit möglichst großem Margin trennt. Stochastic Gradient Descent (SGD) ist ein Optimierungsalgorithmus, der verwendet wird, um die besten Parameter für den SVM-Algorithmus zu finden.