Verschiedene SVM-Klassifikatoren im Iris-Datensatz darstellen#

Vergleich verschiedener linearer SVM-Klassifikatoren auf einer 2D-Projektion des Iris-Datensatzes. Wir betrachten nur die ersten 2 Merkmale dieses Datensatzes

  • Sepal Länge

  • Sepal Breite

Dieses Beispiel zeigt, wie die Entscheidungsoberflächen für vier SVM-Klassifikatoren mit unterschiedlichen Kernels dargestellt werden.

Die linearen Modelle LinearSVC() und SVC(kernel='linear') ergeben leicht unterschiedliche Entscheidungsgrenzen. Dies kann eine Folge der folgenden Unterschiede sein:

  • LinearSVC minimiert den quadrierten Hinge-Verlust, während SVC den regulären Hinge-Verlust minimiert.

  • LinearSVC verwendet die One-vs-All (auch bekannt als One-vs-Rest) Multiklassenreduktion, während SVC die One-vs-One Multiklassenreduktion verwendet.

Beide linearen Modelle haben lineare Entscheidungsgrenzen (sich schneidende Hyperebenen), während die nicht-linearen Kernel-Modelle (polynomiell oder Gaußsches RBF) flexiblere nicht-lineare Entscheidungsgrenzen mit Formen aufweisen, die von der Art des Kernels und seinen Parametern abhängen.

Hinweis

Während die Darstellung der Entscheidungsfunktion von Klassifikatoren für Spiel-2D-Datensätze dazu beitragen kann, ein intuitives Verständnis ihrer jeweiligen Ausdrucksstärke zu gewinnen, sollten Sie bedenken, dass sich diese Intuitionen nicht immer auf realistischere hochdimensionale Probleme verallgemeinern lassen.

SVC with linear kernel, LinearSVC (linear kernel), SVC with RBF kernel, SVC with polynomial (degree 3) kernel
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import matplotlib.pyplot as plt

from sklearn import datasets, svm
from sklearn.inspection import DecisionBoundaryDisplay

# import some data to play with
iris = datasets.load_iris()
# Take the first two features. We could avoid this by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target

# we create an instance of SVM and fit out data. We do not scale our
# data since we want to plot the support vectors
C = 1.0  # SVM regularization parameter
models = (
    svm.SVC(kernel="linear", C=C),
    svm.LinearSVC(C=C, max_iter=10000),
    svm.SVC(kernel="rbf", gamma=0.7, C=C),
    svm.SVC(kernel="poly", degree=3, gamma="auto", C=C),
)
models = (clf.fit(X, y) for clf in models)

# title for the plots
titles = (
    "SVC with linear kernel",
    "LinearSVC (linear kernel)",
    "SVC with RBF kernel",
    "SVC with polynomial (degree 3) kernel",
)

# Set-up 2x2 grid for plotting.
fig, sub = plt.subplots(2, 2)
plt.subplots_adjust(wspace=0.4, hspace=0.4)

X0, X1 = X[:, 0], X[:, 1]

for clf, title, ax in zip(models, titles, sub.flatten()):
    disp = DecisionBoundaryDisplay.from_estimator(
        clf,
        X,
        response_method="predict",
        cmap=plt.cm.coolwarm,
        alpha=0.8,
        ax=ax,
        xlabel=iris.feature_names[0],
        ylabel=iris.feature_names[1],
    )
    ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors="k")
    ax.set_xticks(())
    ax.set_yticks(())
    ax.set_title(title)

plt.show()

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

Verwandte Beispiele

SVM mit benutzerdefiniertem Kernel

SVM mit benutzerdefiniertem Kernel

Support Vektoren in LinearSVC plotten

Support Vektoren in LinearSVC plotten

SVM-Anova: SVM mit universitärer Merkmalsauswahl

SVM-Anova: SVM mit universitärer Merkmalsauswahl

SVM: Trennhyperplane für unausgeglichene Klassen

SVM: Trennhyperplane für unausgeglichene Klassen

Galerie generiert von Sphinx-Gallery