SVM: Maximale Margin trennende Hyperebene

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 verwenden wir scikit-learn, um einen zweiklassigen separablen Datensatz zu erstellen und die maximale Margin trennende Hyperebene mit einem Support Vector Machine (SVM)-Classifier mit linearer Kernel zu visualisieren. SVM ist ein leistungsstarkes Klassifikationsverfahren, das die beste Grenze oder Hyperebene sucht, die die Daten in verschiedene Klassen trennt, während die Margin zwischen den Klassen maximiert wird.

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 Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/inspection("Inspection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/inspection -.-> lab-49284{{"SVM: Maximale Margin trennende Hyperebene"}} sklearn/datasets -.-> lab-49284{{"SVM: Maximale Margin trennende Hyperebene"}} ml/sklearn -.-> lab-49284{{"SVM: Maximale Margin trennende Hyperebene"}} end

Erstellen eines zweiklassigen separablen Datensatzes

Um einen zweiklassigen separablen Datensatz zu erstellen, verwenden wir die Funktion make_blobs() aus scikit-learn. Diese Funktion generiert isotrope Gaussian Blobs für Clustering und Klassifikation. Wir werden 40 Proben mit zwei Zentren und einem Zufallszahlengenerator von 6 erstellen. Wir werden auch die Datenpunkte mit matplotlib visualisieren.

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

## create a two-class separable dataset
X, y = make_blobs(n_samples=40, centers=2, random_state=6)

## plot the data points
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.show()

Passt das SVM-Modell an

Als nächstes werden wir das SVM-Modell an unseren Datensatz anpassen, indem wir einen linearen Kernel und einen Regularisierungsparameter von 1000 verwenden. Wir werden die Funktion svm.SVC() aus scikit-learn verwenden, um den SVM-Classifier zu erstellen.

from sklearn import svm

## fit the SVM model
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)

Zeichnet die maximale Margin trennende Hyperebene

Um die maximale Margin trennende Hyperebene zu zeichnen, verwenden wir die Funktion DecisionBoundaryDisplay.from_estimator() aus scikit-learn. Diese Funktion zeichnet die Entscheidungsfunktion und die Support Vektoren des SVM-Classifier. Wir werden auch die Support Vektoren als Kreise ohne Füllung und einen schwarzen Rand zeichnen.

from sklearn.inspection import DecisionBoundaryDisplay

## plot the decision function and support vectors
ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    plot_method="contour",
    colors="k",
    levels=[-1, 0, 1],
    alpha=0.5,
    linestyles=["--", "-", "--"],
    ax=ax,
)
ax.scatter(
    clf.support_vectors_[:, 0],
    clf.support_vectors_[:, 1],
    s=100,
    linewidth=1,
    facecolors="none",
    edgecolors="k",
)
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man einen zweiklassigen separablen Datensatz erstellt, ein SVM-Modell mit einem linearen Kernel anpasst und die maximale Margin trennende Hyperebene mit scikit-learn zeichnet. SVM ist ein leistungsstarkes Klassifikationsverfahren, das für eine Vielzahl von Anwendungen eingesetzt werden kann, einschließlich der Bildklassifikation, der Textklassifikation und der Bioinformatik.